@acorex/charts 20.1.5 → 20.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-charts-line-chart.mjs","sources":["../tmp-esm2022/line-chart/lib/line-chart.config.js","../tmp-esm2022/line-chart/lib/line-chart.component.js","../tmp-esm2022/line-chart/acorex-charts-line-chart.js"],"sourcesContent":["import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nexport const AXLineChartDefaultConfig = {\n margins: {\n top: 20,\n right: 25,\n bottom: 40,\n left: 50,\n },\n showXAxis: true,\n showYAxis: true,\n showGrid: true,\n showVerticalGrid: false,\n yAxisStartsAtZero: true,\n axisPadding: 5,\n showTooltip: true,\n lineWidth: 2,\n showPoints: true,\n pointRadius: 4,\n smoothLine: false,\n fillArea: false,\n fillOpacity: 20,\n showCrosshair: false,\n animationDuration: 1000,\n animationEasing: 'cubic-out',\n};\nexport const AX_LINE_CHART_CONFIG = new InjectionToken('AX_LINE_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'chart.lineChart', AXLineChartDefaultConfig);\n return AXLineChartDefaultConfig;\n },\n});\nexport function lineChartConfig(config = {}) {\n const result = {\n ...AXLineChartDefaultConfig,\n ...config,\n };\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvbGluZS1jaGFydC9zcmMvbGliL2xpbmUtY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHaEMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXNCO0lBQ3pELE9BQU8sRUFBRTtRQUNQLEdBQUcsRUFBRSxFQUFFO1FBQ1AsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxFQUFFO0tBQ1Q7SUFDRCxTQUFTLEVBQUUsSUFBSTtJQUNmLFNBQVMsRUFBRSxJQUFJO0lBQ2YsUUFBUSxFQUFFLElBQUk7SUFDZCxnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsV0FBVyxFQUFFLENBQUM7SUFDZCxXQUFXLEVBQUUsSUFBSTtJQUNqQixTQUFTLEVBQUUsQ0FBQztJQUNaLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxDQUFDO0lBQ2QsVUFBVSxFQUFFLEtBQUs7SUFDakIsUUFBUSxFQUFFLEtBQUs7SUFDZixXQUFXLEVBQUUsRUFBRTtJQUNmLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsZUFBZSxFQUFFLFdBQVc7Q0FDN0IsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUFvQixzQkFBc0IsRUFBRTtJQUNoRyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ1osTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sd0JBQXdCLENBQUM7SUFDbEMsQ0FBQztDQUNGLENBQUMsQ0FBQztBQUlILE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBaUMsRUFBRTtJQUNqRSxNQUFNLE1BQU0sR0FBRztRQUNiLEdBQUcsd0JBQXdCO1FBQzNCLEdBQUcsTUFBTTtLQUNWLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhfR0xPQkFMX0NPTkZJRyB9IGZyb20gJ0BhY29yZXgvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEFYTGluZUNoYXJ0T3B0aW9uIH0gZnJvbSAnLi9saW5lLWNoYXJ0LnR5cGUnO1xuXG5leHBvcnQgY29uc3QgQVhMaW5lQ2hhcnREZWZhdWx0Q29uZmlnOiBBWExpbmVDaGFydE9wdGlvbiA9IHtcbiAgbWFyZ2luczoge1xuICAgIHRvcDogMjAsXG4gICAgcmlnaHQ6IDI1LFxuICAgIGJvdHRvbTogNDAsXG4gICAgbGVmdDogNTAsXG4gIH0sXG4gIHNob3dYQXhpczogdHJ1ZSxcbiAgc2hvd1lBeGlzOiB0cnVlLFxuICBzaG93R3JpZDogdHJ1ZSxcbiAgc2hvd1ZlcnRpY2FsR3JpZDogZmFsc2UsXG4gIHlBeGlzU3RhcnRzQXRaZXJvOiB0cnVlLFxuICBheGlzUGFkZGluZzogNSxcbiAgc2hvd1Rvb2x0aXA6IHRydWUsXG4gIGxpbmVXaWR0aDogMixcbiAgc2hvd1BvaW50czogdHJ1ZSxcbiAgcG9pbnRSYWRpdXM6IDQsXG4gIHNtb290aExpbmU6IGZhbHNlLFxuICBmaWxsQXJlYTogZmFsc2UsXG4gIGZpbGxPcGFjaXR5OiAyMCxcbiAgc2hvd0Nyb3NzaGFpcjogZmFsc2UsXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiAxMDAwLFxuICBhbmltYXRpb25FYXNpbmc6ICdjdWJpYy1vdXQnLFxufTtcblxuZXhwb3J0IGNvbnN0IEFYX0xJTkVfQ0hBUlRfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEFYTGluZUNoYXJ0T3B0aW9uPignQVhfTElORV9DSEFSVF9DT05GSUcnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbCA9IGluamVjdChBWF9HTE9CQUxfQ09ORklHKTtcbiAgICBzZXQoZ2xvYmFsLCAnY2hhcnQubGluZUNoYXJ0JywgQVhMaW5lQ2hhcnREZWZhdWx0Q29uZmlnKTtcbiAgICByZXR1cm4gQVhMaW5lQ2hhcnREZWZhdWx0Q29uZmlnO1xuICB9LFxufSk7XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxMaW5lQ2hhcnRDb25maWcgPSBQYXJ0aWFsPEFYTGluZUNoYXJ0T3B0aW9uPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVDaGFydENvbmZpZyhjb25maWc6IFBhcnRpYWxMaW5lQ2hhcnRDb25maWcgPSB7fSk6IEFYTGluZUNoYXJ0T3B0aW9uIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIC4uLkFYTGluZUNoYXJ0RGVmYXVsdENvbmZpZyxcbiAgICAuLi5jb25maWcsXG4gIH07XG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=","import { NXComponent } from '@acorex/cdk/common';\nimport { AX_CHART_COLOR_PALETTE, getChartColor } from '@acorex/charts';\nimport { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { AX_LINE_CHART_CONFIG } from './line-chart.config';\nimport * as i0 from \"@angular/core\";\n/**\n * Line Chart Component for rendering data as lines with interactive hover effects and animations\n */\nexport class AXLineChartComponent extends NXComponent {\n data = input([]);\n options = input({});\n pointClick = output();\n chartContainerEl = viewChild.required('chartContainer');\n d3;\n svg;\n chart;\n xScale;\n yScale;\n xAxis;\n yAxis;\n width;\n height;\n margin = { top: 20, right: 25, bottom: 40, left: 50 };\n _tooltipVisible = signal(false);\n _tooltipPosition = signal({ x: 0, y: 0 });\n _tooltipData = signal({\n title: '',\n value: '0',\n percentage: '0%',\n color: '',\n });\n _initialized = signal(false);\n _rendered = signal(false);\n hiddenSeries = new Set();\n _fullNormalizedData = [];\n tooltipVisible = this._tooltipVisible.asReadonly();\n tooltipPosition = this._tooltipPosition.asReadonly();\n tooltipData = this._tooltipData.asReadonly();\n // Inject configuration\n configToken = inject(AX_LINE_CHART_CONFIG);\n // Inject the chart colors\n chartColors = inject(AX_CHART_COLOR_PALETTE);\n // Inject AXPlatform\n platform = inject(AXPlatform);\n effectiveOptions = computed(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n });\n ngOnInit() {\n this.loadD3();\n }\n #effect = effect(() => {\n const rawData = this.data();\n if (Array.isArray(rawData)) {\n this._fullNormalizedData = rawData.map((s, i) => ({ ...s, originalIndex: i }));\n }\n else if (rawData && 'data' in rawData) {\n this._fullNormalizedData = [{ ...rawData, originalIndex: 0 }];\n }\n else {\n this._fullNormalizedData = [];\n }\n this.effectiveOptions();\n if (this._rendered()) {\n this.updateChart();\n }\n });\n ngAfterViewInit() {\n this._initialized.set(true);\n if (this.d3 && this.chartContainerEl()) {\n this.createChart();\n this._rendered.set(true);\n }\n }\n ngOnDestroy() {\n this.cleanupChart();\n }\n // AXChartLegendCompatible Implementation\n getLegendItems() {\n const totalSum = this._fullNormalizedData.reduce((sum, series) => {\n return sum + series.data.reduce((sSum, p) => sSum + p.y, 0);\n }, 0);\n return this._fullNormalizedData.map((series) => {\n const seriesSum = series.data.reduce((sum, p) => sum + p.y, 0);\n const percentage = totalSum > 0 ? (seriesSum / totalSum) * 100 : 0;\n return {\n id: series.id || series.label || `series-${series.originalIndex}`,\n name: series.label || `Series ${series.originalIndex + 1}`,\n value: seriesSum,\n color: series.lineColor || getChartColor(series.originalIndex, this.chartColors),\n hidden: this.hiddenSeries.has(series.id || series.label || `series-${series.originalIndex}`),\n percentage: parseFloat(percentage.toFixed(2)),\n };\n });\n }\n highlightSegment(id) {\n if (!this.svg)\n return;\n const allSeriesGroups = this.svg.selectAll('g.ax-line-chart-series');\n const allPointsGroups = this.svg.selectAll('g.ax-line-chart-points');\n if (id === null) {\n allSeriesGroups.classed('ax-chart-dimmed', false).style('opacity', 1);\n allPointsGroups.classed('ax-chart-dimmed', false).style('opacity', 1);\n allSeriesGroups\n .selectAll('.ax-line-chart-line')\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2)\n .classed('ax-chart-highlighted-path', false);\n allPointsGroups\n .selectAll('circle.ax-line-chart-point')\n .attr('r', this.effectiveOptions().pointRadius ?? 4)\n .classed('ax-chart-highlighted-point', false);\n return;\n }\n allSeriesGroups.classed('ax-chart-dimmed', true).style('opacity', 0.3);\n allPointsGroups.classed('ax-chart-dimmed', true).style('opacity', 0.3);\n const targetSeriesGroup = this.svg.selectAll(`g.ax-line-chart-series[data-series-identifier=\"${id}\"]`);\n const targetPointsGroup = this.svg.selectAll(`g.ax-line-chart-points[data-series-identifier=\"${id}\"]`);\n targetSeriesGroup.classed('ax-chart-dimmed', false).style('opacity', 1);\n targetPointsGroup.classed('ax-chart-dimmed', false).style('opacity', 1);\n targetSeriesGroup\n .selectAll('.ax-line-chart-line')\n .attr('stroke-width', (this.effectiveOptions().lineWidth ?? 2) * 1.5)\n .classed('ax-chart-highlighted-path', true);\n targetPointsGroup\n .selectAll('circle.ax-line-chart-point')\n .attr('r', (this.effectiveOptions().pointRadius ?? 4) * 1.5)\n .classed('ax-chart-highlighted-point', true);\n }\n toggleSegment(id) {\n const seriesId = id;\n if (this.hiddenSeries.has(seriesId)) {\n this.hiddenSeries.delete(seriesId);\n }\n else {\n this.hiddenSeries.add(seriesId);\n }\n this.updateChart();\n return !this.hiddenSeries.has(seriesId);\n }\n async loadD3() {\n try {\n this.d3 = await import('d3');\n if (this._initialized() && this.chartContainerEl()) {\n this.createChart();\n this._rendered.set(true);\n }\n }\n catch (error) {\n console.error('Failed to load D3.js:', error);\n }\n }\n createChart() {\n if (!this.d3 || !this.chartContainerEl()?.nativeElement)\n return;\n const containerElement = this.chartContainerEl().nativeElement;\n const allSeriesData = this._fullNormalizedData;\n this.d3.select(containerElement).select('svg').remove();\n if (allSeriesData.length === 0 || allSeriesData.every((series) => !series.data || series.data.length === 0)) {\n this.showNoDataMessage(containerElement);\n return;\n }\n const visibleDataForRendering = allSeriesData.filter((series) => !this.hiddenSeries.has(series.id || series.label || `series-${series.originalIndex}`));\n if (visibleDataForRendering.length === 0) {\n // All data is present, but all series are hidden by the legend\n this.showAllSeriesHiddenMessage(containerElement);\n // Still setup basic SVG and chart group for consistency if needed, or return\n // For now, we will show the message and return, as scales/axes can't be drawn.\n return;\n }\n // Scales should be based on potentially visible data to avoid errors with empty domains\n // If all are hidden, scales might become an issue. Let's use all data for scales,\n // and rendering will handle visibility.\n const dataForScales = allSeriesData.flatMap((s) => s.data).length > 0 ? allSeriesData : [{ data: [{ x: 0, y: 0 }] }];\n const chartOptions = this.effectiveOptions();\n this.setupDimensions(containerElement, chartOptions);\n // Use allSeriesData for domain calculation to keep scales consistent even if some series are hidden\n // but filter out series with no data points for scale calculation.\n const dataForScaleSetup = allSeriesData.filter((s) => s.data && s.data.length > 0);\n if (dataForScaleSetup.length === 0) {\n // If after filtering, there's no data with points (e.g. all series have empty data arrays)\n this.showNoDataMessage(containerElement);\n return;\n }\n this.setupScales(dataForScaleSetup);\n this.createAxes(chartOptions);\n this.renderLines(allSeriesData); // RenderLines will handle hiding based on hiddenSeries\n }\n updateChart() {\n this.createChart();\n }\n cleanupChart() {\n if (this.svg) {\n this.d3?.select(this.chartContainerEl()?.nativeElement).selectAll('svg').remove();\n this.svg = null;\n this.chart = null;\n }\n this._tooltipVisible.set(false);\n }\n setupDimensions(containerElement, options) {\n this.calculateMargins(options);\n const containerWidth = containerElement.clientWidth;\n const containerHeight = containerElement.clientHeight;\n const minDim = Math.min(200, containerWidth, containerHeight);\n if (options.width && options.height) {\n this.width = options.width - this.margin.left - this.margin.right;\n this.height = options.height - this.margin.top - this.margin.bottom;\n }\n else {\n this.width = Math.max(containerWidth, minDim) - this.margin.left - this.margin.right;\n this.height = Math.max(containerHeight, minDim) - this.margin.top - this.margin.bottom;\n }\n this.width = Math.max(this.width, 100);\n this.height = Math.max(this.height, 100);\n const totalWidth = this.width + this.margin.left + this.margin.right;\n const totalHeight = this.height + this.margin.top + this.margin.bottom;\n const svg = this.d3\n .select(containerElement)\n .append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${totalWidth} ${totalHeight}`)\n .attr('preserveAspectRatio', 'xMidYMid meet')\n .attr('style', `\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n overflow: visible;\n `);\n this.svg = svg;\n this.chart = this.svg.append('g').attr('transform', `translate(${this.margin.left},${this.margin.top})`);\n }\n calculateMargins(options) {\n this.margin = {\n top: options.margins?.top ?? 20,\n right: options.margins?.right ?? 25,\n bottom: options.margins?.bottom ?? 40,\n left: options.margins?.left ?? 50,\n };\n if (options.xAxisLabel) {\n const xLabelLength = options.xAxisLabel.length;\n const extraBottomMargin = Math.min(20, Math.max(10, xLabelLength * 0.8));\n this.margin.bottom = Math.max(this.margin.bottom, 40 + extraBottomMargin);\n }\n if (options.yAxisLabel) {\n const yLabelLength = options.yAxisLabel.length;\n const extraLeftMargin = Math.min(20, Math.max(10, yLabelLength * 0.8));\n this.margin.left = Math.max(this.margin.left, 50 + extraLeftMargin);\n }\n if (options.showXAxis !== false) {\n this.margin.bottom = Math.max(this.margin.bottom, 45);\n }\n if (options.showYAxis !== false) {\n this.margin.left = Math.max(this.margin.left, 55);\n }\n }\n setupScales(data) {\n // Expects already filtered data for scales\n const chartOptions = this.effectiveOptions();\n const padding = chartOptions.axisPadding ?? 0;\n const paddingMultiplier = padding / 100;\n // Ensure data is not empty for scale domain calculation\n const allDataPoints = data.length > 0 ? data.flatMap((series) => series.data) : [{ x: 0, y: 0 }];\n if (allDataPoints.length === 0) {\n // Should ideally not happen if createChart filters correctly\n allDataPoints.push({ x: 0, y: 0 }); // Default fallback to prevent crash with empty domain\n }\n const allNumericX = allDataPoints.every((d) => typeof d.x === 'number');\n if (allNumericX) {\n const xMin = this.d3.min(allDataPoints, (d) => d.x) ?? 0;\n const xMax = this.d3.max(allDataPoints, (d) => d.x) ?? 0;\n if (xMin === xMax) {\n this.xScale = this.d3\n .scaleLinear()\n .domain([xMin - 1, xMax + 1])\n .range([0, this.width]);\n }\n else {\n this.xScale = this.d3.scaleLinear().domain([xMin, xMax]).range([0, this.width]);\n }\n }\n else {\n this.xScale = this.d3\n .scaleBand()\n .domain(allDataPoints.map((d) => String(d.x)))\n .range([0, this.width])\n .paddingInner(0.2)\n .paddingOuter(0);\n }\n const yAxisStartsAtZero = chartOptions.yAxisStartsAtZero !== false;\n let yMin = this.d3.min(allDataPoints, (d) => d.y) ?? 0;\n if (yAxisStartsAtZero) {\n yMin = Math.min(0, yMin);\n }\n const yMax = this.d3.max(allDataPoints, (d) => d.y) ?? 0;\n const yRange = yMax - yMin;\n this.yScale = this.d3\n .scaleLinear()\n .domain([yMin, yMax + yRange * paddingMultiplier])\n .nice()\n .range([this.height, 0]);\n }\n createAxes(options) {\n const showXAxis = options.showXAxis !== false;\n const showYAxis = options.showYAxis !== false;\n const showGrid = options.showGrid !== false;\n const isBandScale = this.xScale.bandwidth !== undefined;\n const isRtl = this.platform.isRtl();\n const axesGroup = this.chart.append('g').attr('class', 'ax-line-chart-axes');\n if (showXAxis) {\n this.xAxis = axesGroup\n .append('g')\n .attr('class', 'ax-line-chart-axis-x')\n .attr('transform', `translate(0,${this.height})`)\n .call(this.d3.axisBottom(this.xScale).tickSize(5).tickPadding(8));\n // Style the x-axis path and lines\n this.xAxis.selectAll('path').attr('stroke', 'rgba(var(--ax-comp-line-chart-axis-color), 0.2)');\n this.xAxis\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n const dynamicXAxisTickFontSize = Math.max(11, Math.min(15, Math.round(this.width / 45)));\n this.xAxis.selectAll('text').attr('style', `\n font-size: ${dynamicXAxisTickFontSize}px;\n font-weight: 400;\n fill: rgba(var(--ax-comp-line-chart-labels-color), 0.7);\n `);\n if (options.xAxisLabel) {\n const labelY = this.height + this.margin.bottom * 0.7;\n axesGroup\n .append('text')\n .attr('class', 'ax-line-chart-axis-label ax-x-axis-label')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('x', this.width / 2)\n .attr('y', labelY)\n .attr('transform', 'translate(0, 5)')\n .attr('style', `\n font-size: 14px;\n font-weight: 500;\n fill: rgb(var(--ax-comp-line-chart-text-color));\n pointer-events: none;\n `)\n .text(options.xAxisLabel);\n }\n }\n if (showYAxis) {\n this.yAxis = axesGroup\n .append('g')\n .attr('class', 'ax-line-chart-axis-y')\n .call(this.d3.axisLeft(this.yScale).tickSize(5).tickPadding(8));\n // Style the y-axis path and lines\n this.yAxis.selectAll('path').attr('stroke', 'rgba(var(--ax-comp-line-chart-axis-color), 0.2)');\n this.yAxis\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n const dynamicYAxisTickFontSize = Math.max(11, Math.min(15, Math.round(this.height / 30)));\n const yTickTexts = this.yAxis.selectAll('text').attr('style', `\n font-size: ${dynamicYAxisTickFontSize}px;\n font-weight: 400;\n fill: rgba(var(--ax-comp-line-chart-labels-color), 0.7);\n `);\n if (isRtl) {\n yTickTexts.attr('text-anchor', 'start');\n }\n if (options.yAxisLabel) {\n const labelX = -this.height / 2;\n const labelY = -this.margin.left * 0.8;\n axesGroup\n .append('text')\n .attr('class', 'ax-line-chart-axis-label ax-y-axis-label')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('transform', 'rotate(-90) translate(-5, 0)')\n .attr('x', labelX)\n .attr('y', labelY)\n .attr('style', `\n font-size: 14px;\n font-weight: 500;\n fill: rgb(var(--ax-comp-line-chart-text-color));\n pointer-events: none;\n `)\n .text(options.yAxisLabel);\n }\n }\n if (showGrid) {\n const gridGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-grid-container')\n .attr('pointer-events', 'none');\n const yGrid = gridGroup\n .append('g')\n .attr('class', 'ax-line-chart-grid')\n .call(this.d3\n .axisLeft(this.yScale)\n .tickSize(-this.width)\n .tickFormat(() => '')\n .tickValues(this.yScale.ticks()));\n // Style the grid path and lines\n yGrid.selectAll('path').attr('stroke-width', '0');\n yGrid\n .selectAll('.tick')\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n if (options.showVerticalGrid) {\n const xGrid = gridGroup\n .append('g')\n .attr('class', 'ax-line-chart-grid-vertical')\n .attr('transform', `translate(0,${this.height})`)\n .call(this.d3\n .axisBottom(this.xScale)\n .tickSize(-this.height)\n .tickFormat(() => '')\n .tickValues(isBandScale ? undefined : this.xScale.ticks()));\n // Style the vertical grid path and lines\n xGrid.selectAll('path').attr('stroke-width', '0');\n xGrid\n .selectAll('.tick')\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.15)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n }\n }\n }\n renderLines(allSeriesData) {\n const isBandScale = this.xScale.bandwidth !== undefined;\n const getX = (d) => {\n if (isBandScale) {\n return this.xScale(String(d.x)) + this.xScale.bandwidth() / 2;\n }\n else {\n return this.xScale(d.x);\n }\n };\n const lineGenerator = this.d3\n .line()\n .x(getX)\n .y((d) => this.yScale(d.y));\n if (this.effectiveOptions().smoothLine !== false) {\n lineGenerator.curve(this.d3.curveMonotoneX);\n }\n const areaGenerator = this.d3\n .area()\n .x(getX)\n .y0(this.height)\n .y1((d) => this.yScale(d.y));\n if (this.effectiveOptions().smoothLine !== false) {\n areaGenerator.curve(this.d3.curveMonotoneX);\n }\n this.svg.attr('class', 'ax-line-chart-animating');\n const allSeriesGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-all-series')\n .attr('pointer-events', 'none');\n const allPointsGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-all-points')\n .attr('pointer-events', 'none');\n if (this.effectiveOptions().showCrosshair === true) {\n this.chart.append('g').attr('class', 'ax-line-chart-crosshair').attr('pointer-events', 'none');\n }\n const animationDuration = this.effectiveOptions().animationDuration;\n const animationEasing = this.getEasingFunction(this.effectiveOptions().animationEasing);\n allSeriesData.forEach((series) => {\n const seriesIdentifier = series.id || series.label || `series-${series.originalIndex}`;\n if (this.hiddenSeries.has(seriesIdentifier)) {\n this.chart.selectAll(`.ax-line-chart-series[data-series-identifier=\"${seriesIdentifier}\"]`).remove();\n this.chart.selectAll(`.ax-line-chart-points[data-series-identifier=\"${seriesIdentifier}\"]`).remove();\n return;\n }\n if (!series.data || series.data.length === 0)\n return;\n const seriesGroup = allSeriesGroup\n .append('g')\n .attr('class', `ax-line-chart-series ax-line-chart-series-${series.originalIndex}`)\n .attr('data-series-identifier', seriesIdentifier)\n .attr('pointer-events', 'none');\n const lineColor = series.lineColor || getChartColor(series.originalIndex, this.chartColors);\n const fillColor = series.fillColor || lineColor;\n const line = seriesGroup\n .append('path')\n .datum(series.data)\n .attr('class', 'ax-line-chart-line')\n .attr('stroke', lineColor)\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round')\n .attr('d', lineGenerator)\n .attr('fill', 'none')\n .attr('style', 'transition: stroke-width 0.3s ease;')\n .attr('pointer-events', 'none');\n line\n .on('mouseenter', () => {\n line\n .transition()\n .duration(150)\n .attr('stroke-width', (this.effectiveOptions().lineWidth ?? 2) * 1.5);\n })\n .on('mouseleave', () => {\n line\n .transition()\n .duration(150)\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2);\n });\n const totalLength = line.node().getTotalLength();\n line\n .attr('stroke-dasharray', totalLength + ' ' + totalLength)\n .attr('stroke-dashoffset', totalLength)\n .transition()\n .duration(animationDuration)\n .ease(animationEasing)\n .attr('stroke-dashoffset', 0)\n .on('end', function () {\n line.attr('pointer-events', 'all');\n });\n if (this.effectiveOptions().fillArea) {\n const area = seriesGroup\n .append('path')\n .datum(series.data)\n .attr('class', 'ax-line-chart-area')\n .attr('fill', fillColor)\n .attr('opacity', 0)\n .attr('d', areaGenerator)\n .attr('style', 'transition: opacity 0.3s ease;')\n .attr('pointer-events', 'none');\n area\n .on('mouseenter', () => {\n area\n .transition()\n .duration(150)\n .attr('opacity', ((this.effectiveOptions().fillOpacity ?? 20) / 100) * 1.5);\n })\n .on('mouseleave', () => {\n area\n .transition()\n .duration(150)\n .attr('opacity', (this.effectiveOptions().fillOpacity ?? 20) / 100);\n });\n area\n .transition()\n .duration(animationDuration)\n .ease(animationEasing)\n .attr('opacity', (this.effectiveOptions().fillOpacity ?? 20) / 100)\n .on('end', function () {\n area.attr('pointer-events', 'all');\n });\n }\n });\n if (this.effectiveOptions().showPoints !== false) {\n const pointMap = new Map();\n allSeriesData.forEach((series) => {\n const seriesIdentifier = series.id || series.label || `series-${series.originalIndex}`;\n if (this.hiddenSeries.has(seriesIdentifier) || !series.data || series.data.length === 0) {\n return;\n }\n const lineColor = series.lineColor || getChartColor(series.originalIndex, this.chartColors);\n const maxPoints = 100;\n const pointData = series.data.length > maxPoints ? this.getReducedDataPoints(series.data, maxPoints) : series.data;\n pointData.forEach((point) => {\n const x = getX(point);\n const y = this.yScale(point.y);\n const key = `${Math.round(x * 10) / 10},${Math.round(y * 10) / 10}`;\n if (!pointMap.has(key)) {\n pointMap.set(key, []);\n }\n pointMap.get(key)?.push({ point, series, originalIndex: series.originalIndex });\n });\n });\n let animationCounter = 0;\n const totalVisibleSeriesCount = allSeriesData.filter((s) => !this.hiddenSeries.has(s.id || s.label || `series-${s.originalIndex}`) && s.data && s.data.length > 0).length;\n allSeriesData.forEach((series) => {\n const seriesIdentifier = series.id || series.label || `series-${series.originalIndex}`;\n if (this.hiddenSeries.has(seriesIdentifier) || !series.data || series.data.length === 0) {\n return;\n }\n const lineColor = series.lineColor || getChartColor(series.originalIndex, this.chartColors);\n const pointsGroup = allPointsGroup\n .append('g')\n .attr('class', `ax-line-chart-points ax-line-chart-points-${series.originalIndex}`)\n .attr('data-series-identifier', seriesIdentifier)\n .attr('pointer-events', 'none');\n pointsGroup\n .on('mouseenter', () => this.handlePointGroupEnter(series.originalIndex, lineColor))\n .on('mouseleave', () => this.handlePointGroupLeave());\n const maxPoints = 100;\n const pointData = series.data.length > maxPoints ? this.getReducedDataPoints(series.data, maxPoints) : series.data;\n pointsGroup\n .selectAll('circle')\n .data(pointData)\n .enter()\n .append('circle')\n .attr('class', 'ax-line-chart-point')\n .attr('cx', getX)\n .attr('cy', (d) => this.yScale(d.y))\n .attr('r', 0)\n .attr('fill', lineColor)\n .attr('stroke', '#fff')\n .attr('stroke-width', 1)\n .attr('data-x', (d) => d.x)\n .attr('data-y', (d) => d.y)\n .style('cursor', 'pointer')\n .attr('pointer-events', 'none')\n .on('mouseenter', (event, d) => {\n const x = getX(d);\n const y = this.yScale(d.y);\n const key = `${Math.round(x * 10) / 10},${Math.round(y * 10) / 10}`;\n const overlappingPoints = pointMap.get(key) || [];\n if (overlappingPoints.length > 1) {\n this.handleOverlappingPointsHover(event, overlappingPoints);\n }\n else {\n this.handlePointHover(event, d, series, series.originalIndex);\n }\n this.d3\n .select(event.target)\n .transition()\n .duration(150)\n .attr('r', (this.effectiveOptions().pointRadius ?? 4) * 1.5)\n .attr('stroke-width', 2)\n .attr('stroke', `rgb(var(--ax-comp-line-chart-bg-color))`);\n })\n .on('mousemove', (event) => this.updateTooltipPosition(event))\n .on('mouseleave', (event) => {\n this._tooltipVisible.set(false);\n this.d3\n .select(event.target)\n .transition()\n .duration(150)\n .attr('r', this.effectiveOptions().pointRadius ?? 4)\n .attr('stroke-width', 1)\n .attr('stroke', '#fff');\n })\n .on('click', (event, d) => {\n const x = getX(d);\n const y = this.yScale(d.y);\n const key = `${Math.round(x * 10) / 10},${Math.round(y * 10) / 10}`;\n const overlappingPoints = pointMap.get(key) || [];\n if (overlappingPoints.length > 1) {\n overlappingPoints.forEach(({ point, series }) => {\n this.handlePointClick(event, point, series);\n });\n }\n else {\n this.handlePointClick(event, d, series);\n }\n })\n .transition()\n .delay((d, i) => i * Math.min(50, (animationDuration || 0) * 0.05) + (animationDuration || 0) * 0.5)\n .duration((animationDuration || 0) * 0.3)\n .ease(animationEasing)\n .attr('r', this.effectiveOptions().pointRadius ?? 4)\n .on('end', (d, i, nodes) => {\n if (i === nodes.length - 1) {\n animationCounter++;\n if (animationCounter >= totalVisibleSeriesCount) {\n this.enablePointerEventsAfterAnimation();\n }\n }\n });\n });\n }\n else {\n setTimeout(() => {\n this.enablePointerEventsAfterAnimation();\n }, animationDuration || 0 + 100);\n }\n }\n enablePointerEventsAfterAnimation() {\n if (!this.chart || !this.svg)\n return;\n this.chart.selectAll('.ax-line-chart-all-series').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-series').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-line').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-area').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-all-points').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-points').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-point').attr('pointer-events', 'all');\n this.svg.classed('ax-line-chart-animating', false);\n }\n handlePointGroupEnter(originalIndex, color) {\n this.chart\n .select(`.ax-line-chart-series-${originalIndex} .ax-line-chart-line`)\n .transition()\n .duration(150)\n .attr('stroke-width', (this.effectiveOptions().lineWidth ?? 2) * 1.5);\n }\n handlePointGroupLeave() {\n this.chart\n .selectAll('.ax-line-chart-line')\n .transition()\n .duration(150)\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2);\n if (this.effectiveOptions().showCrosshair === true) {\n this.chart.select('.ax-line-chart-crosshair').selectAll('*').remove();\n }\n }\n getReducedDataPoints(data, maxPoints) {\n if (data.length <= maxPoints)\n return data;\n const result = [];\n const step = Math.ceil(data.length / maxPoints);\n for (let i = 0; i < data.length; i += step) {\n result.push(data[i]);\n }\n if (result[result.length - 1] !== data[data.length - 1]) {\n result.push(data[data.length - 1]);\n }\n return result;\n }\n handlePointHover(event, dataPoint, series, originalIndex) {\n if (this.effectiveOptions().showTooltip !== false) {\n const color = series.lineColor || getChartColor(originalIndex, this.chartColors);\n this._tooltipData.set({\n title: dataPoint.tooltipLabel || series.tooltipLabel || series.label || `Series ${originalIndex + 1}`,\n value: dataPoint.y.toString(),\n seriesName: `x: ${dataPoint.x}`,\n color: color,\n });\n this._tooltipVisible.set(true);\n this.updateTooltipPosition(event);\n if (this.effectiveOptions().showCrosshair === true) {\n this.showCrosshairLines(dataPoint);\n }\n }\n }\n showCrosshairLines(dataPoint) {\n const isBandScale = this.xScale.bandwidth !== undefined;\n let x;\n if (isBandScale) {\n x = this.xScale(String(dataPoint.x)) + this.xScale.bandwidth() / 2;\n }\n else {\n x = this.xScale(dataPoint.x);\n }\n const y = this.yScale(dataPoint.y);\n let crosshairGroup = this.chart.select('.ax-line-chart-crosshair');\n if (crosshairGroup.empty()) {\n crosshairGroup = this.chart.append('g').attr('class', 'ax-line-chart-crosshair').attr('pointer-events', 'none');\n }\n crosshairGroup.selectAll('*').remove();\n crosshairGroup\n .append('line')\n .attr('class', 'ax-line-chart-crosshair-vertical')\n .attr('x1', x)\n .attr('y1', 0)\n .attr('x2', x)\n .attr('y2', this.height)\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.5)')\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', '3,3')\n .attr('opacity', 0.7)\n .attr('pointer-events', 'none');\n crosshairGroup\n .append('line')\n .attr('class', 'ax-line-chart-crosshair-horizontal')\n .attr('x1', 0)\n .attr('y1', y)\n .attr('x2', this.width)\n .attr('y2', y)\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.5)')\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', '3,3')\n .attr('opacity', 0.7)\n .attr('pointer-events', 'none');\n }\n updateTooltipPosition(event) {\n const container = this.chartContainerEl().nativeElement.getBoundingClientRect();\n const tooltipEl = this.chartContainerEl().nativeElement.querySelector('.chart-tooltip');\n if (!tooltipEl) {\n const x = event.clientX - container.left;\n const y = event.clientY - container.top;\n this._tooltipPosition.set({ x, y });\n return;\n }\n const tooltipRect = tooltipEl.getBoundingClientRect();\n let x = event.clientX - container.left;\n const y = event.clientY - container.top;\n if (x + tooltipRect.width + 20 > container.width) {\n x = x - tooltipRect.width - 15;\n }\n this._tooltipPosition.set({ x, y });\n }\n handlePointClick(event, dataPoint, series) {\n this.pointClick.emit({\n series: series, // series still refers to the full series data with originalIndex\n point: dataPoint,\n event: {\n nativeEvent: event,\n sender: this,\n },\n });\n }\n showNoDataMessage(containerElement) {\n this.d3.select(containerElement).selectAll('*').remove();\n const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'ax-line-chart-no-data-message')\n .style('position', 'absolute')\n .style('left', '50%')\n .style('top', '50%')\n .style('transform', 'translate(-50%, -50%)')\n .style('text-align', 'center')\n .style('background-color', 'rgb(var(--ax-comp-line-chart-bg-color))')\n .style('padding', '1.5rem')\n .style('border-radius', '0.5rem')\n .style('box-shadow', '0 2px 12px rgba(0, 0, 0, 0.08)')\n .style('width', '80%')\n .style('max-width', '300px');\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-no-data-icon')\n .style('opacity', '0.6')\n .style('margin-bottom', '0.75rem')\n .html('<i class=\"fa-light fa-chart-line fa-2x\"></i>');\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-no-data-text')\n .style('font-size', '1rem')\n .style('font-weight', '600')\n .style('margin-bottom', '0.5rem')\n .text('No data available');\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-no-data-help')\n .style('font-size', '0.8rem')\n .style('opacity', '0.6')\n .text('Please provide data to display the chart');\n }\n showAllSeriesHiddenMessage(containerElement) {\n this.d3.select(containerElement).selectAll('*').remove(); // Clear existing chart elements\n const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'ax-line-chart-all-hidden-message') // Different class\n .style('position', 'absolute')\n .style('left', '50%')\n .style('top', '50%')\n .style('transform', 'translate(-50%, -50%)')\n .style('text-align', 'center')\n .style('background-color', 'rgb(var(--ax-comp-line-chart-bg-color))')\n .style('padding', '1.5rem')\n .style('border-radius', '0.5rem')\n .style('box-shadow', '0 2px 12px rgba(0, 0, 0, 0.08)')\n .style('width', '80%')\n .style('max-width', '350px'); // Slightly wider for longer text\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-all-hidden-icon')\n .style('opacity', '0.6')\n .style('margin-bottom', '0.75rem')\n .html('<i class=\"fa-light fa-eye-slash fa-2x\"></i>'); // Different icon\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-all-hidden-text')\n .style('font-size', '1rem')\n .style('font-weight', '600')\n .style('margin-bottom', '0.5rem')\n .text('All series are hidden');\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-all-hidden-help')\n .style('font-size', '0.8rem')\n .style('opacity', '0.6')\n .text('Click legend items to show series in the chart.');\n }\n handleOverlappingPointsHover(event, overlappingPoints) {\n if (this.effectiveOptions().showTooltip === false)\n return;\n const tooltipData = {\n title: 'Multiple Series',\n value: overlappingPoints[0].point.y.toString(),\n seriesName: '',\n color: '',\n items: overlappingPoints.map(({ point, series, originalIndex }) => {\n const color = series.lineColor || getChartColor(originalIndex, this.chartColors);\n return {\n label: series.label || `Series ${originalIndex + 1}`,\n value: point.y.toString(),\n color: color,\n };\n }),\n };\n this._tooltipData.set(tooltipData);\n this._tooltipVisible.set(true);\n this.updateTooltipPosition(event);\n if (this.effectiveOptions().showCrosshair === true && overlappingPoints.length > 0) {\n this.showCrosshairLines(overlappingPoints[0].point);\n }\n }\n getEasingFunction(easing) {\n switch (easing) {\n case 'linear':\n return this.d3.easeLinear;\n case 'ease':\n return this.d3.easePolyInOut;\n case 'ease-in':\n return this.d3.easePolyIn;\n case 'ease-out':\n return this.d3.easePolyOut;\n case 'ease-in-out':\n return this.d3.easePolyInOut;\n case 'cubic':\n return this.d3.easeCubic;\n case 'cubic-in':\n return this.d3.easeCubicIn;\n case 'cubic-out':\n return this.d3.easeCubicOut;\n case 'cubic-in-out':\n return this.d3.easeCubicInOut;\n default:\n return this.d3.easeCubicOut;\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXLineChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.2.0\", version: \"20.0.4\", type: AXLineChartComponent, isStandalone: true, selector: \"ax-line-chart\", inputs: { data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: \"options\", publicName: \"options\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pointClick: \"pointClick\" }, viewQueries: [{ propertyName: \"chartContainerEl\", first: true, predicate: [\"chartContainer\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-line-chart\\\" #chartContainer>\\n <!-- Shared tooltip component -->\\n <ax-chart-tooltip\\n [visible]=\\\"tooltipVisible()\\\"\\n [position]=\\\"tooltipPosition()\\\"\\n [data]=\\\"tooltipData()\\\"\\n [showPercentage]=\\\"false\\\"\\n ></ax-chart-tooltip>\\n</div>\\n\", styles: [\"ax-line-chart{display:block;width:100%;height:100%;min-height:200px;--ax-comp-line-chart-labels-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-axis-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-grid-lines-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-line-chart-text-color: var(--ax-sys-color-on-lightest-surface)}ax-line-chart .ax-line-chart{width:100%;height:100%;position:relative;display:flex;align-items:center;justify-content:center;border-radius:.5rem;overflow:hidden;color:rgb(var(--ax-comp-line-chart-text-color));background-color:rgb(var(--ax-comp-line-chart-bg-color))}ax-line-chart .ax-line-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-line-chart .ax-line-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-line-chart-bg-color));padding:1.5rem;border-radius:.5rem;box-shadow:0 2px 12px #00000014;width:80%;max-width:300px}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-help{font-size:.8rem;opacity:.6}\\n\"], dependencies: [{ kind: \"component\", type: AXChartTooltipComponent, selector: \"ax-chart-tooltip\", inputs: [\"data\", \"position\", \"visible\", \"showPercentage\", \"style\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXLineChartComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-line-chart', standalone: true, encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"ax-line-chart\\\" #chartContainer>\\n <!-- Shared tooltip component -->\\n <ax-chart-tooltip\\n [visible]=\\\"tooltipVisible()\\\"\\n [position]=\\\"tooltipPosition()\\\"\\n [data]=\\\"tooltipData()\\\"\\n [showPercentage]=\\\"false\\\"\\n ></ax-chart-tooltip>\\n</div>\\n\", styles: [\"ax-line-chart{display:block;width:100%;height:100%;min-height:200px;--ax-comp-line-chart-labels-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-axis-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-grid-lines-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-line-chart-text-color: var(--ax-sys-color-on-lightest-surface)}ax-line-chart .ax-line-chart{width:100%;height:100%;position:relative;display:flex;align-items:center;justify-content:center;border-radius:.5rem;overflow:hidden;color:rgb(var(--ax-comp-line-chart-text-color));background-color:rgb(var(--ax-comp-line-chart-bg-color))}ax-line-chart .ax-line-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-line-chart .ax-line-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-line-chart-bg-color));padding:1.5rem;border-radius:.5rem;box-shadow:0 2px 12px #00000014;width:80%;max-width:300px}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-help{font-size:.8rem;opacity:.6}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvbGluZS1jaGFydC9zcmMvbGliL2xpbmUtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2xpbmUtY2hhcnQvc3JjL2xpYi9saW5lLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFzQixNQUFNLDhCQUE4QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUVOLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUczRDs7R0FFRztBQVVILE1BQU0sT0FBTyxvQkFDWCxTQUFRLFdBQVc7SUFHbkIsSUFBSSxHQUFHLEtBQUssQ0FBbUIsRUFBRSxDQUFDLENBQUM7SUFDbkMsT0FBTyxHQUFHLEtBQUssQ0FBb0IsRUFBRSxDQUFDLENBQUM7SUFDdkMsVUFBVSxHQUFHLE1BQU0sRUFBOEIsQ0FBQztJQUVqQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUE2QixnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNGLEVBQUUsQ0FBdUI7SUFFM0IsR0FBRyxDQUFPO0lBQ1YsS0FBSyxDQUFPO0lBQ1osTUFBTSxD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LE1BQU0sRUFBRSxDQUFDO1lBQ2YsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDNUIsS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7WUFDL0IsS0FBSyxTQUFTO2dCQUNaLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDNUIsS0FBSyxVQUFVO2dCQUNiLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFDN0IsS0FBSyxhQUFhO2dCQUNoQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQy9CLEtBQUssT0FBTztnQkFDVixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQzNCLEtBQUssVUFBVTtnQkFDYixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQzdCLEtBQUssV0FBVztnQkFDZCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQzlCLEtBQUssY0FBYztnQkFDakIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQztZQUNoQztnQkFDRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO3VHQXprQ1Usb0JBQW9COzJGQUFwQixvQkFBb0IsMGdCQ3JDakMsbVJBU0EsaTdDRHlCWSx1QkFBdUI7OzJGQUd0QixvQkFBb0I7a0JBVGhDLFNBQVM7K0JBQ0UsZUFBZSxjQUdiLElBQUksaUJBQ0QsaUJBQWlCLENBQUMsSUFBSSxXQUM1QixDQUFDLHVCQUF1QixDQUFDLG1CQUNqQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhfQ0hBUlRfQ09MT1JfUEFMRVRURSwgZ2V0Q2hhcnRDb2xvciB9IGZyb20gJ0BhY29yZXgvY2hhcnRzJztcbmltcG9ydCB7IEFYQ2hhcnRMZWdlbmRDb21wYXRpYmxlLCBBWENoYXJ0TGVnZW5kSXRlbSB9IGZyb20gJ0BhY29yZXgvY2hhcnRzL2NoYXJ0LWxlZ2VuZCc7XG5pbXBvcnQgeyBBWENoYXJ0VG9vbHRpcENvbXBvbmVudCwgQVhDaGFydFRvb2x0aXBEYXRhIH0gZnJvbSAnQGFjb3JleC9jaGFydHMvY2hhcnQtdG9vbHRpcCc7XG5pbXBvcnQgeyBBWFBsYXRmb3JtIH0gZnJvbSAnQGFjb3JleC9jb3JlL3BsYXRmb3JtJztcblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYX0xJTkVfQ0hBUlRfQ09ORklHIH0gZnJvbSAnLi9saW5lLWNoYXJ0LmNvbmZpZyc7XG5pbXBvcnQgeyBBWExpbmVDaGFydERhdGEsIEFYTGluZUNoYXJ0T3B0aW9uLCBBWExpbmVDaGFydFBvaW50Q2xpY2tFdmVudCwgQVhMaW5lQ2hhcnRWYWx1ZSB9IGZyb20gJy4vbGluZS1jaGFydC50eXBlJztcblxuLyoqXG4gKiBMaW5lIENoYXJ0IENvbXBvbmVudCBmb3IgcmVuZGVyaW5nIGRhdGEgYXMgbGluZXMgd2l0aCBpbnRlcmFjdGl2ZSBob3ZlciBlZmZlY3RzIGFuZCBhbmltYXRpb25zXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWxpbmUtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGluZS1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpbmUtY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW0FYQ2hhcnRUb29sdGlwQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFYTGluZUNoYXJ0Q29tcG9uZW50XG4gIGV4dGVuZHMgTlhDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQVhDaGFydExlZ2VuZENvbXBhdGlibGVcbntcbiAgZGF0YSA9IGlucHV0PEFYTGluZUNoYXJ0VmFsdWU+KFtdKTtcbiAgb3B0aW9ucyA9IGlucHV0PEFYTGluZUNoYXJ0T3B0aW9uPih7fSk7XG4gIHBvaW50Q2xpY2sgPSBvdXRwdXQ8QVhMaW5lQ2hhcnRQb2ludENsaWNrRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjaGFydENvbnRhaW5lckVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignY2hhcnRDb250YWluZXInKTtcbiAgcHJvdGVjdGVkIGQzITogdHlwZW9mIGltcG9ydCgnZDMnKTtcblxuICBwcml2YXRlIHN2ZyE6IGFueTtcbiAgcHJpdmF0ZSBjaGFydCE6IGFueTtcbiAgcHJpdmF0ZSB4U2NhbGUhOiBhbnk7XG4gIHByaXZhdGUgeVNjYWxlITogYW55O1xuICBwcml2YXRlIHhBeGlzITogYW55O1xuICBwcml2YXRlIHlBeGlzITogYW55O1xuXG4gIHByaXZhdGUgd2lkdGghOiBudW1iZXI7XG4gIHByaXZhdGUgaGVpZ2h0ITogbnVtYmVyO1xuICBwcml2YXRlIG1hcmdpbiA9IHsgdG9wOiAyMCwgcmlnaHQ6IDI1LCBib3R0b206IDQwLCBsZWZ0OiA1MCB9O1xuXG4gIHByaXZhdGUgX3Rvb2x0aXBWaXNpYmxlID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBfdG9vbHRpcFBvc2l0aW9uID0gc2lnbmFsKHsgeDogMCwgeTogMCB9KTtcbiAgcHJpdmF0ZSBfdG9vbHRpcERhdGEgPSBzaWduYWw8QVhDaGFydFRvb2x0aXBEYXRhPih7XG4gICAgdGl0bGU6ICcnLFxuICAgIHZhbHVlOiAnMCcsXG4gICAgcGVyY2VudGFnZTogJzAlJyxcbiAgICBjb2xvcjogJycsXG4gIH0pO1xuXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBfcmVuZGVyZWQgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIGhpZGRlblNlcmllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIF9mdWxsTm9ybWFsaXplZERhdGE6IChBWExpbmVDaGFydERhdGEgJiB7IG9yaWdpbmFsSW5kZXg6IG51bWJlciB9KVtdID0gW107XG5cbiAgcHJvdGVjdGVkIHRvb2x0aXBWaXNpYmxlID0gdGhpcy5fdG9vbHRpcFZpc2libGUuYXNSZWFkb25seSgpO1xuICBwcm90ZWN0ZWQgdG9vbHRpcFBvc2l0aW9uID0gdGhpcy5fdG9vbHRpcFBvc2l0aW9uLmFzUmVhZG9ubHkoKTtcbiAgcHJvdGVjdGVkIHRvb2x0aXBEYXRhID0gdGhpcy5fdG9vbHRpcERhdGEuYXNSZWFkb25seSgpO1xuXG4gIC8vIEluamVjdCBjb25maWd1cmF0aW9uXG4gIHByaXZhdGUgY29uZmlnVG9rZW4gPSBpbmplY3QoQVhfTElORV9DSEFSVF9DT05GSUcpO1xuXG4gIC8vIEluamVjdCB0aGUgY2hhcnQgY29sb3JzXG4gIHByaXZhdGUgY2hhcnRDb2xvcnMgPSBpbmplY3QoQVhfQ0hBUlRfQ09MT1JfUEFMRVRURSk7XG5cbiAgLy8gSW5qZWN0IEFYUGxhdGZvcm1cbiAgcHJpdmF0ZSBwbGF0Zm9ybSA9IGluamVjdChBWFBsYXRmb3JtKTtcblxuICBwcm90ZWN0ZWQgZWZmZWN0aXZlT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25maWdUb2tlbixcbiAgICAgIC4uLnRoaXMub3B0aW9ucygpLFxuICAgIH07XG4gIH0pO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZEQzKCk7XG4gIH1cblxuICAjZWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByYXdEYXRhID0gdGhpcy5kYXRhKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmF3RGF0YSkpIHtcbiAgICAgIHRoaXMuX2Z1bGxOb3JtYWxpemVkRGF0YSA9IHJhd0RhdGEubWFwKChzLCBpKSA9PiAoeyAuLi5zLCBvcmlnaW5hbEluZGV4OiBpIH0pKTtcbiAgICB9IGVsc2UgaWYgKHJhd0RhdGEgJiYgJ2RhdGEnIGluIHJhd0RhdGEpIHtcbiAgICAgIHRoaXMuX2Z1bGxOb3JtYWxpemVkRGF0YSA9IFt7IC4uLnJhd0RhdGEsIG9yaWdpbmFsSW5kZXg6IDAgfV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Z1bGxOb3JtYWxpemVkRGF0YSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKTtcblxuICAgIGlmICh0aGlzLl9yZW5kZXJlZCgpKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNoYXJ0KCk7XG4gICAgfVxuICB9KTtcblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5faW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuICAgIGlmICh0aGlzLmQzICYmIHRoaXMuY2hhcnRDb250YWluZXJFbCgpKSB7XG4gICAgICB0aGlzLmNyZWF0ZUNoYXJ0KCk7XG4gICAgICB0aGlzLl9yZW5kZXJlZC5zZXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwQ2hhcnQoKTtcbiAgfVxuXG4gIC8vIEFYQ2hhcnRMZWdlbmRDb21wYXRpYmxlIEltcGxlbWVudGF0aW9uXG4gIGdldExlZ2VuZEl0ZW1zKCk6IEFYQ2hhcnRMZWdlbmRJdGVtW10ge1xuICAgIGNvbnN0IHRvdGFsU3VtID0gdGhpcy5fZnVsbE5vcm1hbGl6ZWREYXRhLnJlZHVjZSgoc3VtLCBzZXJpZXMpID0+IHtcbiAgICAgIHJldHVybiBzdW0gKyBzZXJpZXMuZGF0YS5yZWR1Y2UoKHNTdW0sIHApID0+IHNTdW0gKyBwLnksIDApO1xuICAgIH0sIDApO1xuXG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxOb3JtYWxpemVkRGF0YS5tYXAoKHNlcmllcykgPT4ge1xuICAgICAgY29uc3Qgc2VyaWVzU3VtID0gc2VyaWVzLmRhdGEucmVkdWNlKChzdW0sIHApID0+IHN1bSArIHAueSwgMCk7XG4gICAgICBjb25zdCBwZXJjZW50YWdlID0gdG90YWxTdW0gPiAwID8gKHNlcmllc1N1bSAvIHRvdGFsU3VtKSAqIDEwMCA6IDA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogc2VyaWVzLmlkIHx8IHNlcmllcy5sYWJlbCB8fCBgc2VyaWVzLSR7c2VyaWVzLm9yaWdpbmFsSW5kZXh9YCxcbiAgICAgICAgbmFtZTogc2VyaWVzLmxhYmVsIHx8IGBTZXJpZXMgJHtzZXJpZXMub3JpZ2luYWxJbmRleCArIDF9YCxcbiAgICAgICAgdmFsdWU6IHNlcmllc1N1bSxcbiAgICAgICAgY29sb3I6IHNlcmllcy5saW5lQ29sb3IgfHwgZ2V0Q2hhcnRDb2xvcihzZXJpZXMub3JpZ2luYWxJbmRleCwgdGhpcy5jaGFydENvbG9ycyksXG4gICAgICAgIGhpZGRlbjogdGhpcy5oaWRkZW5TZXJpZXMuaGFzKHNlcmllcy5pZCB8fCBzZXJpZXMubGFiZWwgfHwgYHNlcmllcy0ke3Nlcmllcy5vcmlnaW5hbEluZGV4fWApLFxuICAgICAgICBwZXJjZW50YWdlOiBwYXJzZUZsb2F0KHBlcmNlbnRhZ2UudG9GaXhlZCgyKSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgaGlnaGxpZ2h0U2VnbWVudChpZDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdmcpIHJldHVybjtcblxuICAgIGNvbnN0IGFsbFNlcmllc0dyb3VwcyA9IHRoaXMuc3ZnLnNlbGVjdEFsbCgnZy5heC1saW5lLWNoYXJ0LXNlcmllcycpO1xuICAgIGNvbnN0IGFsbFBvaW50c0dyb3VwcyA9IHRoaXMuc3ZnLnNlbGVjdEFsbCgnZy5heC1saW5lLWNoYXJ0LXBvaW50cycpO1xuXG4gICAgaWYgKGlkID09PSBudWxsKSB7XG4gICAgICBhbGxTZXJpZXNHcm91cHMuY2xhc3NlZCgnYXgtY2hhcnQtZGltbWVkJywgZmFsc2UpLnN0eWxlKCdvcGFjaXR5JywgMSk7XG4gICAgICBhbGxQb2ludHNHcm91cHMuY2xhc3NlZCgnYXgtY2hhcnQtZGltbWVkJywgZmFsc2UpLnN0eWxlKCdvcGFjaXR5JywgMSk7XG5cbiAgICAgIGFsbFNlcmllc0dyb3Vwc1xuICAgICAgICAuc2VsZWN0QWxsKCcuYXgtbGluZS1jaGFydC1saW5lJylcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLmxpbmVXaWR0aCA/PyAyKVxuICAgICAgICAuY2xhc3NlZCgnYXgtY2hhcnQtaGlnaGxpZ2h0ZWQtcGF0aCcsIGZhbHNlKTtcbiAgICAgIGFsbFBvaW50c0dyb3Vwc1xuICAgICAgICAuc2VsZWN0QWxsKCdjaXJjbGUuYXgtbGluZS1jaGFydC1wb2ludCcpXG4gICAgICAgIC5hdHRyKCdyJywgdGhpcy5lZmZlY3RpdmVPcHRpb25zKCkucG9pbnRSYWRpdXMgPz8gNClcbiAgICAgICAgLmNsYXNzZWQoJ2F4LWNoYXJ0LWhpZ2hsaWdodGVkLXBvaW50JywgZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFsbFNlcmllc0dyb3Vwcy5jbGFzc2VkKCdheC1jaGFydC1kaW1tZWQnLCB0cnVlKS5zdHlsZSgnb3BhY2l0eScsIDAuMyk7XG4gICAgYWxsUG9pbnRzR3JvdXBzLmNsYXNzZWQoJ2F4LWNoYXJ0LWRpbW1lZCcsIHRydWUpLnN0eWxlKCdvcGFjaXR5JywgMC4zKTtcblxuICAgIGNvbnN0IHRhcmdldFNlcmllc0dyb3VwID0gdGhpcy5zdmcuc2VsZWN0QWxsKGBnLmF4LWxpbmUtY2hhcnQtc2VyaWVzW2RhdGEtc2VyaWVzLWlkZW50aWZpZXI9XCIke2lkfVwiXWApO1xuICAgIGNvbnN0IHRhcmdldFBvaW50c0dyb3VwID0gdGhpcy5zdmcuc2VsZWN0QWxsKGBnLmF4LWxpbmUtY2hhcnQtcG9pbnRzW2RhdGEtc2VyaWVzLWlkZW50aWZpZXI9XCIke2lkfVwiXWApO1xuXG4gICAgdGFyZ2V0U2VyaWVzR3JvdXAuY2xhc3NlZCgnYXgtY2hhcnQtZGltbWVkJywgZmFsc2UpLnN0eWxlKCdvcGFjaXR5JywgMSk7XG4gICAgdGFyZ2V0UG9pbnRzR3JvdXAuY2xhc3NlZCgnYXgtY2hhcnQtZGltbWVkJywgZmFsc2UpLnN0eWxlKCdvcGFjaXR5JywgMSk7XG5cbiAgICB0YXJnZXRTZXJpZXNHcm91cFxuICAgICAgLnNlbGVjdEFsbCgnLmF4LWxpbmUtY2hhcnQtbGluZScpXG4gICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgKHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLmxpbmVXaWR0aCA/PyAyKSAqIDEuNSlcbiAgICAgIC5jbGFzc2VkKCdheC1jaGFydC1oaWdobGlnaHRlZC1wYXRoJywgdHJ1ZSk7XG5cbiAgICB0YXJnZXRQb2ludHNHcm91cFxuICAgICAgLnNlbGVjdEFsbCgnY2lyY2xlLmF4LWxpbmUtY2hhcnQtcG9pbnQnKVxuICAgICAgLmF0dHIoJ3InLCAodGhpcy5lZmZlY3RpdmVPcHRpb25zKCkucG9pbnRSYWRpdXMgPz8gNCkgKiAxLjUpXG4gICAgICAuY2xhc3NlZCgnYXgtY2hhcnQtaGlnaGxpZ2h0ZWQtcG9pbnQnLCB0cnVlKTtcbiAgfVxuXG4gIHRvZ2dsZVNlZ21lbnQoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlcmllc0lkID0gaWQ7XG4gICAgaWYgKHRoaXMuaGlkZGVuU2VyaWVzLmhhcyhzZXJpZXNJZCkpIHtcbiAgICAgIHRoaXMuaGlkZGVuU2VyaWVzLmRlbGV0ZShzZXJpZXNJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZGVuU2VyaWVzLmFkZChzZXJpZXNJZCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ2hhcnQoKTtcbiAgICByZXR1cm4gIXRoaXMuaGlkZGVuU2VyaWVzLmhhcyhzZXJpZXNJZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZEQzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmQzID0gYXdhaXQgaW1wb3J0KCdkMycpO1xuICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKCkgJiYgdGhpcy5jaGFydENvbnRhaW5lckVsKCkpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICAgICAgICB0aGlzLl9yZW5kZXJlZC5zZXQodHJ1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIEQzLmpzOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlQ2hhcnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmQzIHx8ICF0aGlzLmNoYXJ0Q29udGFpbmVyRWwoKT8ubmF0aXZlRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuY2hhcnRDb250YWluZXJFbCgpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgYWxsU2VyaWVzRGF0YSA9IHRoaXMuX2Z1bGxOb3JtYWxpemVkRGF0YTtcblxuICAgIHRoaXMuZDMuc2VsZWN0KGNvbnRhaW5lckVsZW1lbnQpLnNlbGVjdCgnc3ZnJykucmVtb3ZlKCk7XG5cbiAgICBpZiAoYWxsU2VyaWVzRGF0YS5sZW5ndGggPT09IDAgfHwgYWxsU2VyaWVzRGF0YS5ldmVyeSgoc2VyaWVzKSA9PiAhc2VyaWVzLmRhdGEgfHwgc2VyaWVzLmRhdGEubGVuZ3RoID09PSAwKSkge1xuICAgICAgdGhpcy5zaG93Tm9EYXRhTWVzc2FnZShjb250YWluZXJFbGVtZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2aXNpYmxlRGF0YUZvclJlbmRlcmluZyA9IGFsbFNlcmllc0RhdGEuZmlsdGVyKFxuICAgICAgKHNlcmllcykgPT4gIXRoaXMuaGlkZGVuU2VyaWVzLmhhcyhzZXJpZXMuaWQgfHwgc2VyaWVzLmxhYmVsIHx8IGBzZXJpZXMtJHtzZXJpZXMub3JpZ2luYWxJbmRleH1gKSxcbiAgICApO1xuXG4gICAgaWYgKHZpc2libGVEYXRhRm9yUmVuZGVyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gQWxsIGRhdGEgaXMgcHJlc2VudCwgYnV0IGFsbCBzZXJpZXMgYXJlIGhpZGRlbiBieSB0aGUgbGVnZW5kXG4gICAgICB0aGlzLnNob3dBbGxTZXJpZXNIaWRkZW5NZXNzYWdlKGNvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgLy8gU3RpbGwgc2V0dXAgYmFzaWMgU1ZHIGFuZCBjaGFydCBncm91cCBmb3IgY29uc2lzdGVuY3kgaWYgbmVlZGVkLCBvciByZXR1cm5cbiAgICAgIC8vIEZvciBub3csIHdlIHdpbGwgc2hvdyB0aGUgbWVzc2FnZSBhbmQgcmV0dXJuLCBhcyBzY2FsZXMvYXhlcyBjYW4ndCBiZSBkcmF3bi5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTY2FsZXMgc2hvdWxkIGJlIGJhc2VkIG9uIHBvdGVudGlhbGx5IHZpc2libGUgZGF0YSB0byBhdm9pZCBlcnJvcnMgd2l0aCBlbXB0eSBkb21haW5zXG4gICAgLy8gSWYgYWxsIGFyZSBoaWRkZW4sIHNjYWxlcyBtaWdodCBiZWNvbWUgYW4gaXNzdWUuIExldCdzIHVzZSBhbGwgZGF0YSBmb3Igc2NhbGVzLFxuICAgIC8vIGFuZCByZW5kZXJpbmcgd2lsbCBoYW5kbGUgdmlzaWJpbGl0eS5cbiAgICBjb25zdCBkYXRhRm9yU2NhbGVzID1cbiAgICAgIGFsbFNlcmllc0RhdGEuZmxhdE1hcCgocykgPT4gcy5kYXRhKS5sZW5ndGggPiAwID8gYWxsU2VyaWVzRGF0YSA6IFt7IGRhdGE6IFt7IHg6IDAsIHk6IDAgfV0gfV07XG5cbiAgICBjb25zdCBjaGFydE9wdGlvbnMgPSB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKTtcbiAgICB0aGlzLnNldHVwRGltZW5zaW9ucyhjb250YWluZXJFbGVtZW50LCBjaGFydE9wdGlvbnMpO1xuICAgIC8vIFVzZSBhbGxTZXJpZXNEYXRhIGZvciBkb21haW4gY2FsY3VsYXRpb24gdG8ga2VlcCBzY2FsZXMgY29uc2lzdGVudCBldmVuIGlmIHNvbWUgc2VyaWVzIGFyZSBoaWRkZW5cbiAgICAvLyBidXQgZmlsdGVyIG91dCBzZXJpZXMgd2l0aCBubyBkYXRhIHBvaW50cyBmb3Igc2NhbGUgY2FsY3VsYXRpb24uXG4gICAgY29uc3QgZGF0YUZvclNjYWxlU2V0dXAgPSBhbGxTZXJpZXNEYXRhLmZpbHRlcigocykgPT4gcy5kYXRhICYmIHMuZGF0YS5sZW5ndGggPiAwKTtcbiAgICBpZiAoZGF0YUZvclNjYWxlU2V0dXAubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBJZiBhZnRlciBmaWx0ZXJpbmcsIHRoZXJlJ3Mgbm8gZGF0YSB3aXRoIHBvaW50cyAoZS5nLiBhbGwgc2VyaWVzIGhhdmUgZW1wdHkgZGF0YSBhcnJheXMpXG4gICAgICB0aGlzLnNob3dOb0RhdGFNZXNzYWdlKGNvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldHVwU2NhbGVzKGRhdGFGb3JTY2FsZVNldHVwKTtcbiAgICB0aGlzLmNyZWF0ZUF4ZXMoY2hhcnRPcHRpb25zKTtcbiAgICB0aGlzLnJlbmRlckxpbmVzKGFsbFNlcmllc0RhdGEpOyAvLyBSZW5kZXJMaW5lcyB3aWxsIGhhbmRsZSBoaWRpbmcgYmFzZWQgb24gaGlkZGVuU2VyaWVzXG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlQ2hhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFudXBDaGFydCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdmcpIHtcbiAgICAgIHRoaXMuZDM/LnNlbGVjdCh0aGlzLmNoYXJ0Q29udGFpbmVyRWwoKT8ubmF0aXZlRWxlbWVudCkuc2VsZWN0QWxsKCdzdmcnKS5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc3ZnID0gbnVsbDtcbiAgICAgIHRoaXMuY2hhcnQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLl90b29sdGlwVmlzaWJsZS5zZXQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cERpbWVuc2lvbnMoY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQsIG9wdGlvbnM6IEFYTGluZUNoYXJ0T3B0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5jYWxjdWxhdGVNYXJnaW5zKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXJFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lckVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IG1pbkRpbSA9IE1hdGgubWluKDIwMCwgY29udGFpbmVyV2lkdGgsIGNvbnRhaW5lckhlaWdodCk7XG5cbiAgICBpZiAob3B0aW9ucy53aWR0aCAmJiBvcHRpb25zLmhlaWdodCkge1xuICAgICAgdGhpcy53aWR0aCA9IG9wdGlvbnMud2lkdGggLSB0aGlzLm1hcmdpbi5sZWZ0IC0gdGhpcy5tYXJnaW4ucmlnaHQ7XG4gICAgICB0aGlzLmhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0IC0gdGhpcy5tYXJnaW4udG9wIC0gdGhpcy5tYXJnaW4uYm90dG9tO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZHRoID0gTWF0aC5tYXgoY29udGFpbmVyV2lkdGgsIG1pbkRpbSkgLSB0aGlzLm1hcmdpbi5sZWZ0IC0gdGhpcy5tYXJnaW4ucmlnaHQ7XG4gICAgICB0aGlzLmhlaWdodCA9IE1hdGgubWF4KGNvbnRhaW5lckhlaWdodCwgbWluRGltKSAtIHRoaXMubWFyZ2luLnRvcCAtIHRoaXMubWFyZ2luLmJvdHRvbTtcbiAgICB9XG5cbiAgICB0aGlzLndpZHRoID0gTWF0aC5tYXgodGhpcy53aWR0aCwgMTAwKTtcbiAgICB0aGlzLmhlaWdodCA9IE1hdGgubWF4KHRoaXMuaGVpZ2h0LCAxMDApO1xuXG4gICAgY29uc3QgdG90YWxXaWR0aCA9IHRoaXMud2lkdGggKyB0aGlzLm1hcmdpbi5sZWZ0ICsgdGhpcy5tYXJnaW4ucmlnaHQ7XG4gICAgY29uc3QgdG90YWxIZWlnaHQgPSB0aGlzLmhlaWdodCArIHRoaXMubWFyZ2luLnRvcCArIHRoaXMubWFyZ2luLmJvdHRvbTtcblxuICAgIGNvbnN0IHN2ZyA9IHRoaXMuZDNcbiAgICAgIC5zZWxlY3QoY29udGFpbmVyRWxlbWVudClcbiAgICAgIC5hcHBlbmQoJ3N2ZycpXG4gICAgICAuYXR0cignd2lkdGgnLCAnMTAwJScpXG4gICAgICAuYXR0cignaGVpZ2h0JywgJzEwMCUnKVxuICAgICAgLmF0dHIoJ3ZpZXdCb3gnLCBgMCAwICR7dG90YWxXaWR0aH0gJHt0b3RhbEhlaWdodH1gKVxuICAgICAgLmF0dHIoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAneE1pZFlNaWQgbWVldCcpXG4gICAgICAuYXR0cihcbiAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgYFxuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgYCxcbiAgICAgICk7XG5cbiAgICB0aGlzLnN2ZyA9IHN2ZztcbiAgICB0aGlzLmNoYXJ0ID0gdGhpcy5zdmcuYXBwZW5kKCdnJykuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3RoaXMubWFyZ2luLmxlZnR9LCR7dGhpcy5tYXJnaW4udG9wfSlgKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlTWFyZ2lucyhvcHRpb25zOiBBWExpbmVDaGFydE9wdGlvbik6IHZvaWQge1xuICAgIHRoaXMubWFyZ2luID0ge1xuICAgICAgdG9wOiBvcHRpb25zLm1hcmdpbnM/LnRvcCA/PyAyMCxcbiAgICAgIHJpZ2h0OiBvcHRpb25zLm1hcmdpbnM/LnJpZ2h0ID8/IDI1LFxuICAgICAgYm90dG9tOiBvcHRpb25zLm1hcmdpbnM/LmJvdHRvbSA/PyA0MCxcbiAgICAgIGxlZnQ6IG9wdGlvbnMubWFyZ2lucz8ubGVmdCA/PyA1MCxcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMueEF4aXNMYWJlbCkge1xuICAgICAgY29uc3QgeExhYmVsTGVuZ3RoID0gb3B0aW9ucy54QXhpc0xhYmVsLmxlbmd0aDtcbiAgICAgIGNvbnN0IGV4dHJhQm90dG9tTWFyZ2luID0gTWF0aC5taW4oMjAsIE1hdGgubWF4KDEwLCB4TGFiZWxMZW5ndGggKiAwLjgpKTtcbiAgICAgIHRoaXMubWFyZ2luLmJvdHRvbSA9IE1hdGgubWF4KHRoaXMubWFyZ2luLmJvdHRvbSwgNDAgKyBleHRyYUJvdHRvbU1hcmdpbik7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMueUF4aXNMYWJlbCkge1xuICAgICAgY29uc3QgeUxhYmVsTGVuZ3RoID0gb3B0aW9ucy55QXhpc0xhYmVsLmxlbmd0aDtcbiAgICAgIGNvbnN0IGV4dHJhTGVmdE1hcmdpbiA9IE1hdGgubWluKDIwLCBNYXRoLm1heCgxMCwgeUxhYmVsTGVuZ3RoICogMC44KSk7XG4gICAgICB0aGlzLm1hcmdpbi5sZWZ0ID0gTWF0aC5tYXgodGhpcy5tYXJnaW4ubGVmdCwgNTAgKyBleHRyYUxlZnRNYXJnaW4pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNob3dYQXhpcyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWFyZ2luLmJvdHRvbSA9IE1hdGgubWF4KHRoaXMubWFyZ2luLmJvdHRvbSwgNDUpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNob3dZQXhpcyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWFyZ2luLmxlZnQgPSBNYXRoLm1heCh0aGlzLm1hcmdpbi5sZWZ0LCA1NSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFNjYWxlcyhkYXRhOiAoQVhMaW5lQ2hhcnREYXRhICYgeyBvcmlnaW5hbEluZGV4OiBudW1iZXIgfSlbXSk6IHZvaWQge1xuICAgIC8vIEV4cGVjdHMgYWxyZWFkeSBmaWx0ZXJlZCBkYXRhIGZvciBzY2FsZXNcbiAgICBjb25zdCBjaGFydE9wdGlvbnMgPSB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKTtcbiAgICBjb25zdCBwYWRkaW5nID0gY2hhcnRPcHRpb25zLmF4aXNQYWRkaW5nID8/IDA7XG4gICAgY29uc3QgcGFkZGluZ011bHRpcGxpZXIgPSBwYWRkaW5nIC8gMTAwO1xuXG4gICAgLy8gRW5zdXJlIGRhdGEgaXMgbm90IGVtcHR5IGZvciBzY2FsZSBkb21haW4gY2FsY3VsYXRpb25cbiAgICBjb25zdCBhbGxEYXRhUG9pbnRzID0gZGF0YS5sZW5ndGggPiAwID8gZGF0YS5mbGF0TWFwKChzZXJpZXMpID0+IHNlcmllcy5kYXRhKSA6IFt7IHg6IDAsIHk6IDAgfV07XG4gICAgaWYgKGFsbERhdGFQb2ludHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBTaG91bGQgaWRlYWxseSBub3QgaGFwcGVuIGlmIGNyZWF0ZUNoYXJ0IGZpbHRlcnMgY29ycmVjdGx5XG4gICAgICBhbGxEYXRhUG9pbnRzLnB1c2goeyB4OiAwLCB5OiAwIH0pOyAvLyBEZWZhdWx0IGZhbGxiYWNrIHRvIHByZXZlbnQgY3Jhc2ggd2l0aCBlbXB0eSBkb21haW5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxOdW1lcmljWCA9IGFsbERhdGFQb2ludHMuZXZlcnkoKGQpID0+IHR5cGVvZiBkLnggPT09ICdudW1iZXInKTtcblxuICAgIGlmIChhbGxOdW1lcmljWCkge1xuICAgICAgY29uc3QgeE1pbiA9IHRoaXMuZDMubWluKGFsbERhdGFQb2ludHMsIChkKSA9PiBkLnggYXMgbnVtYmVyKSA/PyAwO1xuICAgICAgY29uc3QgeE1heCA9IHRoaXMuZDMubWF4KGFsbERhdGFQb2ludHMsIChkKSA9PiBkLnggYXMgbnVtYmVyKSA/PyAwO1xuXG4gICAgICBpZiAoeE1pbiA9PT0geE1heCkge1xuICAgICAgICB0aGlzLnhTY2FsZSA9IHRoaXMuZDNcbiAgICAgICAgICAuc2NhbGVMaW5lYXIoKVxuICAgICAgICAgIC5kb21haW4oW3hNaW4gLSAxLCB4TWF4ICsgMV0pXG4gICAgICAgICAgLnJhbmdlKFswLCB0aGlzLndpZHRoXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnhTY2FsZSA9IHRoaXMuZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oW3hNaW4sIHhNYXhdKS5yYW5nZShbMCwgdGhpcy53aWR0aF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnhTY2FsZSA9IHRoaXMuZDNcbiAgICAgICAgLnNjYWxlQmFuZCgpXG4gICAgICAgIC5kb21haW4oYWxsRGF0YVBvaW50cy5tYXAoKGQpID0+IFN0cmluZyhkLngpKSlcbiAgICAgICAgLnJhbmdlKFswLCB0aGlzLndpZHRoXSlcbiAgICAgICAgLnBhZGRpbmdJbm5lcigwLjIpXG4gICAgICAgIC5wYWRkaW5nT3V0ZXIoMCk7XG4gICAgfVxuXG4gICAgY29uc3QgeUF4aXNTdGFydHNBdFplcm8gPSBjaGFydE9wdGlvbnMueUF4aXNTdGFydHNBdFplcm8gIT09IGZhbHNlO1xuICAgIGxldCB5TWluID0gdGhpcy5kMy5taW4oYWxsRGF0YVBvaW50cywgKGQpID0+IGQueSkgPz8gMDtcbiAgICBpZiAoeUF4aXNTdGFydHNBdFplcm8pIHtcbiAgICAgIHlNaW4gPSBNYXRoLm1pbigwLCB5TWluKTtcbiAgICB9XG4gICAgY29uc3QgeU1heCA9IHRoaXMuZDMubWF4KGFsbERhdGFQb2ludHMsIChkKSA9PiBkLnkpID8/IDA7XG4gICAgY29uc3QgeVJhbmdlID0geU1heCAtIHlNaW47XG5cbiAgICB0aGlzLnlTY2FsZSA9IHRoaXMuZDNcbiAgICAgIC5zY2FsZUxpbmVhcigpXG4gICAgICAuZG9tYWluKFt5TWluLCB5TWF4ICsgeVJhbmdlICogcGFkZGluZ011bHRpcGxpZXJdKVxuICAgICAgLm5pY2UoKVxuICAgICAgLnJhbmdlKFt0aGlzLmhlaWdodCwgMF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBeGVzKG9wdGlvbnM6IEFYTGluZUNoYXJ0T3B0aW9uKTogdm9pZCB7XG4gICAgY29uc3Qgc2hvd1hBeGlzID0gb3B0aW9ucy5zaG93WEF4aXMgIT09IGZhbHNlO1xuICAgIGNvbnN0IHNob3dZQXhpcyA9IG9wdGlvbnMuc2hvd1lBeGlzICE9PSBmYWxzZTtcbiAgICBjb25zdCBzaG93R3JpZCA9IG9wdGlvbnMuc2hvd0dyaWQgIT09IGZhbHNlO1xuICAgIGNvbnN0IGlzQmFuZFNjYWxlID0gdGhpcy54U2NhbGUuYmFuZHdpZHRoICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNSdGwgPSB0aGlzLnBsYXRmb3JtLmlzUnRsKCk7XG4gICAgY29uc3QgYXhlc0dyb3VwID0gdGhpcy5jaGFydC5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWF4ZXMnKTtcblxuICAgIGlmIChzaG93WEF4aXMpIHtcbiAgICAgIHRoaXMueEF4aXMgPSBheGVzR3JvdXBcbiAgICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWF4aXMteCcpXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHt0aGlzLmhlaWdodH0pYClcbiAgICAgICAgLmNhbGwodGhpcy5kMy5heGlzQm90dG9tKHRoaXMueFNjYWxlKS50aWNrU2l6ZSg1KS50aWNrUGFkZGluZyg4KSk7XG5cbiAgICAgIC8vIFN0eWxlIHRoZSB4LWF4aXMgcGF0aCBhbmQgbGluZXNcbiAgICAgIHRoaXMueEF4aXMuc2VsZWN0QWxsKCdwYXRoJykuYXR0cignc3Ryb2tlJywgJ3JnYmEodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LWF4aXMtY29sb3IpLCAwLjIpJyk7XG5cbiAgICAgIHRoaXMueEF4aXNcbiAgICAgICAgLnNlbGVjdEFsbCgnbGluZScpXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCAncmdiYSh2YXIoLS1heC1jb21wLWxpbmUtY2hhcnQtZ3JpZC1saW5lcy1jb2xvciksIDAuMiknKVxuICAgICAgICAuYXR0cignc3Ryb2tlLWRhc2hhcnJheScsICcyLDInKVxuICAgICAgICAuYXR0cignc3Ryb2tlLW9wYWNpdHknLCAnMC41Jyk7XG5cbiAgICAgIGNvbnN0IGR5bmFtaWNYQXhpc1RpY2tGb250U2l6ZSA9IE1hdGgubWF4KDExLCBNYXRoLm1pbigxNSwgTWF0aC5yb3VuZCh0aGlzLndpZHRoIC8gNDUpKSk7XG4gICAgICB0aGlzLnhBeGlzLnNlbGVjdEFsbCgndGV4dCcpLmF0dHIoXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgIGBcbiAgICAgICAgICBmb250LXNpemU6ICR7ZHluYW1pY1hBeGlzVGlja0ZvbnRTaXplfXB4O1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgZmlsbDogcmdiYSh2YXIoLS1heC1jb21wLWxpbmUtY2hhcnQtbGFiZWxzLWNvbG9yKSwgMC43KTtcbiAgICAgICAgYCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChvcHRpb25zLnhBeGlzTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWxZID0gdGhpcy5oZWlnaHQgKyB0aGlzLm1hcmdpbi5ib3R0b20gKiAwLjc7XG5cbiAgICAgICAgYXhlc0dyb3VwXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYXhpcy1sYWJlbCBheC14LWF4aXMtbGFiZWwnKVxuICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgICAgIC5hdHRyKCdkb21pbmFudC1iYXNlbGluZScsICdtaWRkbGUnKVxuICAgICAgICAgIC5hdHRyKCd4JywgdGhpcy53aWR0aCAvIDIpXG4gICAgICAgICAgLmF0dHIoJ3knLCBsYWJlbFkpXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwgNSknKVxuICAgICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgICAgIGBcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBmaWxsOiByZ2IodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LXRleHQtY29sb3IpKTtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICAgIGAsXG4gICAgICAgICAgKVxuICAgICAgICAgIC50ZXh0KG9wdGlvbnMueEF4aXNMYWJlbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3dZQXhpcykge1xuICAgICAgdGhpcy55QXhpcyA9IGF4ZXNHcm91cFxuICAgICAgICAuYXBwZW5kKCdnJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYXhpcy15JylcbiAgICAgICAgLmNhbGwodGhpcy5kMy5heGlzTGVmdCh0aGlzLnlTY2FsZSkudGlja1NpemUoNSkudGlja1BhZGRpbmcoOCkpO1xuXG4gICAgICAvLyBTdHlsZSB0aGUgeS1heGlzIHBhdGggYW5kIGxpbmVzXG4gICAgICB0aGlzLnlBeGlzLnNlbGVjdEFsbCgncGF0aCcpLmF0dHIoJ3N0cm9rZScsICdyZ2JhKHZhcigtLWF4LWNvbXAtbGluZS1jaGFydC1heGlzLWNvbG9yKSwgMC4yKScpO1xuXG4gICAgICB0aGlzLnlBeGlzXG4gICAgICAgIC5zZWxlY3RBbGwoJ2xpbmUnKVxuICAgICAgICAuYXR0cignc3Ryb2tlJywgJ3JnYmEodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LWdyaWQtbGluZXMtY29sb3IpLCAwLjIpJylcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCAnMiwyJylcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS1vcGFjaXR5JywgJzAuNScpO1xuXG4gICAgICBjb25zdCBkeW5hbWljWUF4aXNUaWNrRm9udFNpemUgPSBNYXRoLm1heCgxMSwgTWF0aC5taW4oMTUsIE1hdGgucm91bmQodGhpcy5oZWlnaHQgLyAzMCkpKTtcbiAgICAgIGNvbnN0IHlUaWNrVGV4dHMgPSB0aGlzLnlBeGlzLnNlbGVjdEFsbCgndGV4dCcpLmF0dHIoXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgIGBcbiAgICAgICAgICBmb250LXNpemU6ICR7ZHluYW1pY1lBeGlzVGlja0ZvbnRTaXplfXB4O1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgZmlsbDogcmdiYSh2YXIoLS1heC1jb21wLWxpbmUtY2hhcnQtbGFiZWxzLWNvbG9yKSwgMC43KTtcbiAgICAgICAgYCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChpc1J0bCkge1xuICAgICAgICB5VGlja1RleHRzLmF0dHIoJ3RleHQtYW5jaG9yJywgJ3N0YXJ0Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnlBeGlzTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWxYID0gLXRoaXMuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgbGFiZWxZID0gLXRoaXMubWFyZ2luLmxlZnQgKiAwLjg7XG5cbiAgICAgICAgYXhlc0dyb3VwXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYXhpcy1sYWJlbCBheC15LWF4aXMtbGFiZWwnKVxuICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgICAgIC5hdHRyKCdkb21pbmFudC1iYXNlbGluZScsICdtaWRkbGUnKVxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCkgdHJhbnNsYXRlKC01LCAwKScpXG4gICAgICAgICAgLmF0dHIoJ3gnLCBsYWJlbFgpXG4gICAgICAgICAgLmF0dHIoJ3knLCBsYWJlbFkpXG4gICAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICAnc3R5bGUnLFxuICAgICAgICAgICAgYFxuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgIGZpbGw6IHJnYih2YXIoLS1heC1jb21wLWxpbmUtY2hhcnQtdGV4dC1jb2xvcikpO1xuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgYCxcbiAgICAgICAgICApXG4gICAgICAgICAgLnRleHQob3B0aW9ucy55QXhpc0xhYmVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvd0dyaWQpIHtcbiAgICAgIGNvbnN0IGdyaWRHcm91cCA9IHRoaXMuY2hhcnRcbiAgICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWdyaWQtY29udGFpbmVyJylcbiAgICAgICAgLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcblxuICAgICAgY29uc3QgeUdyaWQgPSBncmlkR3JvdXBcbiAgICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWdyaWQnKVxuICAgICAgICAuY2FsbChcbiAgICAgICAgICB0aGlzLmQzXG4gICAgICAgICAgICAuYXhpc0xlZnQodGhpcy55U2NhbGUpXG4gICAgICAgICAgICAudGlja1NpemUoLXRoaXMud2lkdGgpXG4gICAgICAgICAgICAudGlja0Zvcm1hdCgoKSA9PiAnJylcbiAgICAgICAgICAgIC50aWNrVmFsdWVzKHRoaXMueVNjYWxlLnRpY2tzKCkpLFxuICAgICAgICApO1xuXG4gICAgICAvLyBTdHlsZSB0aGUgZ3JpZCBwYXRoIGFuZCBsaW5lc1xuICAgICAgeUdyaWQuc2VsZWN0QWxsKCdwYXRoJykuYXR0cignc3Ryb2tlLXdpZHRoJywgJzAnKTtcblxuICAgICAgeUdyaWRcbiAgICAgICAgLnNlbGVjdEFsbCgnLnRpY2snKVxuICAgICAgICAuc2VsZWN0QWxsKCdsaW5lJylcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsICdyZ2JhKHZhcigtLWF4LWNvbXAtbGluZS1jaGFydC1ncmlkLWxpbmVzLWNvbG9yKSwgMC4yKScpXG4gICAgICAgIC5hdHRyKCdzdHJva2UtZGFzaGFycmF5JywgJzIsMicpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utb3BhY2l0eScsICcwLjUnKTtcblxuICAgICAgaWYgKG9wdGlvbnMuc2hvd1ZlcnRpY2FsR3JpZCkge1xuICAgICAgICBjb25zdCB4R3JpZCA9IGdyaWRHcm91cFxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWdyaWQtdmVydGljYWwnKVxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHt0aGlzLmhlaWdodH0pYClcbiAgICAgICAgICAuY2FsbChcbiAgICAgICAgICAgIHRoaXMuZDNcbiAgICAgICAgICAgICAgLmF4aXNCb3R0b20odGhpcy54U2NhbGUpXG4gICAgICAgICAgICAgIC50aWNrU2l6ZSgtdGhpcy5oZWlnaHQpXG4gICAgICAgICAgICAgIC50aWNrRm9ybWF0KCgpID0+ICcnKVxuICAgICAgICAgICAgICAudGlja1ZhbHVlcyhpc0JhbmRTY2FsZSA/IHVuZGVmaW5lZCA6IHRoaXMueFNjYWxlLnRpY2tzKCkpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgLy8gU3R5bGUgdGhlIHZlcnRpY2FsIGdyaWQgcGF0aCBhbmQgbGluZXNcbiAgICAgICAgeEdyaWQuc2VsZWN0QWxsKCdwYXRoJykuYXR0cignc3Ryb2tlLXdpZHRoJywgJzAnKTtcblxuICAgICAgICB4R3JpZFxuICAgICAgICAgIC5zZWxlY3RBbGwoJy50aWNrJylcbiAgICAgICAgICAuc2VsZWN0QWxsKCdsaW5lJylcbiAgICAgICAgICAuYXR0cignc3Ryb2tlJywgJ3JnYmEodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LWdyaWQtbGluZXMtY29sb3IpLCAwLjE1KScpXG4gICAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCAnMiwyJylcbiAgICAgICAgICAuYXR0cignc3Ryb2tlLW9wYWNpdHknLCAnMC41Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJMaW5lcyhhbGxTZXJpZXNEYXRhOiAoQVhMaW5lQ2hhcnREYXRhICYgeyBvcmlnaW5hbEluZGV4OiBudW1iZXIgfSlbXSk6IHZvaWQge1xuICAgIGNvbnN0IGlzQmFuZFNjYWxlID0gdGhpcy54U2NhbGUuYmFuZHdpZHRoICE9PSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBnZXRYID0gKGQ6IHsgeDogbnVtYmVyIHwgc3RyaW5nOyB5OiBudW1iZXIgfSkgPT4ge1xuICAgICAgaWYgKGlzQmFuZFNjYWxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnhTY2FsZShTdHJpbmcoZC54KSkgKyB0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy54U2NhbGUoZC54IGFzIG51bWJlcik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGxpbmVHZW5lcmF0b3IgPSB0aGlzLmQzXG4gICAgICAubGluZTx7IHg6IG51bWJlciB8IHN0cmluZzsgeTogbnVtYmVyIH0+KClcbiAgICAgIC54KGdldFgpXG4gICAgICAueSgoZCkgPT4gdGhpcy55U2NhbGUoZC55KSk7XG5cbiAgICBpZiAodGhpcy5lZmZlY3RpdmVPcHRpb25zKCkuc21vb3RoTGluZSAhPT0gZmFsc2UpIHtcbiAgICAgIGxpbmVHZW5lcmF0b3IuY3VydmUodGhpcy5kMy5jdXJ2ZU1vbm90b25lWCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJlYUdlbmVyYXRvciA9IHRoaXMuZDNcbiAgICAgIC5hcmVhPHsgeDogbnVtYmVyIHwgc3RyaW5nOyB5OiBudW1iZXIgfT4oKVxuICAgICAgLngoZ2V0WClcbiAgICAgIC55MCh0aGlzLmhlaWdodClcbiAgICAgIC55MSgoZCkgPT4gdGhpcy55U2NhbGUoZC55KSk7XG5cbiAgICBpZiAodGhpcy5lZmZlY3RpdmVPcHRpb25zKCkuc21vb3RoTGluZSAhPT0gZmFsc2UpIHtcbiAgICAgIGFyZWFHZW5lcmF0b3IuY3VydmUodGhpcy5kMy5jdXJ2ZU1vbm90b25lWCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdmcuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1hbmltYXRpbmcnKTtcblxuICAgIGNvbnN0IGFsbFNlcmllc0dyb3VwID0gdGhpcy5jaGFydFxuICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1hbGwtc2VyaWVzJylcbiAgICAgIC5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG5cbiAgICBjb25zdCBhbGxQb2ludHNHcm91cCA9IHRoaXMuY2hhcnRcbiAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYWxsLXBvaW50cycpXG4gICAgICAuYXR0cigncG9pbnRlci1ldmVudHMnLCAnbm9uZScpO1xuXG4gICAgaWYgKHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnNob3dDcm9zc2hhaXIgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY2hhcnQuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1jcm9zc2hhaXInKS5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5hbmltYXRpb25EdXJhdGlvbjtcbiAgICBjb25zdCBhbmltYXRpb25FYXNpbmcgPSB0aGlzLmdldEVhc2luZ0Z1bmN0aW9uKHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLmFuaW1hdGlvbkVhc2luZyk7XG5cbiAgICBhbGxTZXJpZXNEYXRhLmZvckVhY2goKHNlcmllcykgPT4ge1xuICAgICAgY29uc3Qgc2VyaWVzSWRlbnRpZmllciA9IHNlcmllcy5pZCB8fCBzZXJpZXMubGFiZWwgfHwgYHNlcmllcy0ke3Nlcmllcy5vcmlnaW5hbEluZGV4fWA7XG5cbiAgICAgIGlmICh0aGlzLmhpZGRlblNlcmllcy5oYXMoc2VyaWVzSWRlbnRpZmllcikpIHtcbiAgICAgICAgdGhpcy5jaGFydC5zZWxlY3RBbGwoYC5heC1saW5lLWNoYXJ0LXNlcmllc1tkYXRhLXNlcmllcy1pZGVudGlmaWVyPVwiJHtzZXJpZXNJZGVudGlmaWVyfVwiXWApLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLmNoYXJ0LnNlbGVjdEFsbChgLmF4LWxpbmUtY2hhcnQtcG9pbnRzW2RhdGEtc2VyaWVzLWlkZW50aWZpZXI9XCIke3Nlcmllc0lkZW50aWZpZXJ9XCJdYCkucmVtb3ZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghc2VyaWVzLmRhdGEgfHwgc2VyaWVzLmRhdGEubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHNlcmllc0dyb3VwID0gYWxsU2VyaWVzR3JvdXBcbiAgICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsIGBheC1saW5lLWNoYXJ0LXNlcmllcyBheC1saW5lLWNoYXJ0LXNlcmllcy0ke3Nlcmllcy5vcmlnaW5hbEluZGV4fWApXG4gICAgICAgIC5hdHRyKCdkYXRhLXNlcmllcy1pZGVudGlmaWVyJywgc2VyaWVzSWRlbnRpZmllcilcbiAgICAgICAgLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcblxuICAgICAgY29uc3QgbGluZUNvbG9yID0gc2VyaWVzLmxpbmVDb2xvciB8fCBnZXRDaGFydENvbG9yKHNlcmllcy5vcmlnaW5hbEluZGV4LCB0aGlzLmNoYXJ0Q29sb3JzKTtcbiAgICAgIGNvbnN0IGZpbGxDb2xvciA9IHNlcmllcy5maWxsQ29sb3IgfHwgbGluZUNvbG9yO1xuXG4gICAgICBjb25zdCBsaW5lID0gc2VyaWVzR3JvdXBcbiAgICAgICAgLmFwcGVuZCgncGF0aCcpXG4gICAgICAgIC5kYXR1bShzZXJpZXMuZGF0YSlcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtbGluZScpXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCBsaW5lQ29sb3IpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5saW5lV2lkdGggPz8gMilcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS1saW5lam9pbicsICdyb3VuZCcpXG4gICAgICAgIC5hdHRyKCdzdHJva2UtbGluZWNhcCcsICdyb3VuZCcpXG4gICAgICAgIC5hdHRyKCdkJywgbGluZUdlbmVyYXRvciBhcyBhbnkpXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxuICAgICAgICAuYXR0cignc3R5bGUnLCAndHJhbnNpdGlvbjogc3Ryb2tlLXdpZHRoIDAuM3MgZWFzZTsnKVxuICAgICAgICAuYXR0cigncG9pbnRlci1ldmVudHMnLCAnbm9uZScpO1xuXG4gICAgICBsaW5lXG4gICAgICAgIC5vbignbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgICAgICBsaW5lXG4gICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24oMTUwKVxuICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5saW5lV2lkdGggPz8gMikgKiAxLjUpO1xuICAgICAgICB9KVxuICAgICAgICAub24oJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG4gICAgICAgICAgbGluZVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKDE1MClcbiAgICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5saW5lV2lkdGggPz8gMik7XG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0b3RhbExlbmd0aCA9IGxpbmUubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCk7XG4gICAgICBsaW5lXG4gICAgICAgIC5hdHRyKCdzdHJva2UtZGFzaGFycmF5JywgdG90YWxMZW5ndGggKyAnICcgKyB0b3RhbExlbmd0aClcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNob2Zmc2V0JywgdG90YWxMZW5ndGgpXG4gICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgLmR1cmF0aW9uKGFuaW1hdGlvbkR1cmF0aW9uKVxuICAgICAgICAuZWFzZShhbmltYXRpb25FYXNpbmcpXG4gICAgICAgIC5hdHRyKCdzdHJva2UtZGFzaG9mZnNldCcsIDApXG4gICAgICAgIC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxpbmUuYXR0cigncG9pbnRlci1ldmVudHMnLCAnYWxsJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5lZmZlY3RpdmVPcHRpb25zKCkuZmlsbEFyZWEpIHtcbiAgICAgICAgY29uc3QgYXJlYSA9IHNlcmllc0dyb3VwXG4gICAgICAgICAgLmFwcGVuZCgncGF0aCcpXG4gICAgICAgICAgLmRhdHVtKHNlcmllcy5kYXRhKVxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWFyZWEnKVxuICAgICAgICAgIC5hdHRyKCdmaWxsJywgZmlsbENvbG9yKVxuICAgICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMClcbiAgICAgICAgICAuYXR0cignZCcsIGFyZWFHZW5lcmF0b3IpXG4gICAgICAgICAgLmF0dHIoJ3N0eWxlJywgJ3RyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlOycpXG4gICAgICAgICAgLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcblxuICAgICAgICBhcmVhXG4gICAgICAgICAgLm9uKCdtb3VzZWVudGVyJywgKCkgPT4ge1xuICAgICAgICAgICAgYXJlYVxuICAgICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAgIC5kdXJhdGlvbigxNTApXG4gICAgICAgICAgICAgIC5hdHRyKCdvcGFjaXR5JywgKCh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5maWxsT3BhY2l0eSA/PyAyMCkgLyAxMDApICogMS41KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5vbignbW91c2VsZWF2ZScsICgpID0+IHtcbiAgICAgICAgICAgIGFyZWFcbiAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAuZHVyYXRpb24oMTUwKVxuICAgICAgICAgICAgICAuYXR0cignb3BhY2l0eScsICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5maWxsT3BhY2l0eSA/PyAyMCkgLyAxMDApO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGFyZWFcbiAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgLmR1cmF0aW9uKGFuaW1hdGlvbkR1cmF0aW9uKVxuICAgICAgICAgIC5lYXNlKGFuaW1hdGlvbkVhc2luZylcbiAgICAgICAgICAuYXR0cignb3BhY2l0eScsICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5maWxsT3BhY2l0eSA/PyAyMCkgLyAxMDApXG4gICAgICAgICAgLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhcmVhLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ2FsbCcpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnNob3dQb2ludHMgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBwb2ludE1hcCA9IG5ldyBNYXA8XG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgQXJyYXk8eyBwb2ludDogYW55OyBzZXJpZXM6IEFYTGluZUNoYXJ0RGF0YSAmIHsgb3JpZ2luYWxJbmRleDogbnVtYmVyIH07IG9yaWdpbmFsSW5kZXg6IG51bWJlciB9PlxuICAgICAgPigpO1xuXG4gICAgICBhbGxTZXJpZXNEYXRhLmZvckVhY2goKHNlcmllcykgPT4ge1xuICAgICAgICBjb25zdCBzZXJpZXNJZGVudGlmaWVyID0gc2VyaWVzLmlkIHx8IHNlcmllcy5sYWJlbCB8fCBgc2VyaWVzLSR7c2VyaWVzLm9yaWdpbmFsSW5kZXh9YDtcbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuU2VyaWVzLmhhcyhzZXJpZXNJZGVudGlmaWVyKSB8fCAhc2VyaWVzLmRhdGEgfHwgc2VyaWVzLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZUNvbG9yID0gc2VyaWVzLmxpbmVDb2xvciB8fCBnZXRDaGFydENvbG9yKHNlcmllcy5vcmlnaW5hbEluZGV4LCB0aGlzLmNoYXJ0Q29sb3JzKTtcbiAgICAgICAgY29uc3QgbWF4UG9pbnRzID0gMTAwO1xuICAgICAgICBjb25zdCBwb2ludERhdGEgPVxuICAgICAgICAgIHNlcmllcy5kYXRhLmxlbmd0aCA+IG1heFBvaW50cyA/IHRoaXMuZ2V0UmVkdWNlZERhdGFQb2ludHMoc2VyaWVzLmRhdGEsIG1heFBvaW50cykgOiBzZXJpZXMuZGF0YTtcblxuICAgICAgICBwb2ludERhdGEuZm9yRWFjaCgocG9pbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB4ID0gZ2V0WChwb2ludCk7XG4gICAgICAgICAgY29uc3QgeSA9IHRoaXMueVNjYWxlKHBvaW50LnkpO1xuICAgICAgICAgIGNvbnN0IGtleSA9IGAke01hdGgucm91bmQoeCAqIDEwKSAvIDEwfSwke01hdGgucm91bmQoeSAqIDEwKSAvIDEwfWA7XG5cbiAgICAgICAgICBpZiAoIXBvaW50TWFwLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBwb2ludE1hcC5zZXQoa2V5LCBbXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBvaW50TWFwLmdldChrZXkpPy5wdXNoKHsgcG9pbnQsIHNlcmllcywgb3JpZ2luYWxJbmRleDogc2VyaWVzLm9yaWdpbmFsSW5kZXggfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGxldCBhbmltYXRpb25Db3VudGVyID0gMDtcbiAgICAgIGNvbnN0IHRvdGFsVmlzaWJsZVNlcmllc0NvdW50ID0gYWxsU2VyaWVzRGF0YS5maWx0ZXIoXG4gICAgICAgIChzKSA9PiAhdGhpcy5oaWRkZW5TZXJpZXMuaGFzKHMuaWQgfHwgcy5sYWJlbCB8fCBgc2VyaWVzLSR7cy5vcmlnaW5hbEluZGV4fWApICYmIHMuZGF0YSAmJiBzLmRhdGEubGVuZ3RoID4gMCxcbiAgICAgICkubGVuZ3RoO1xuXG4gICAgICBhbGxTZXJpZXNEYXRhLmZvckVhY2goKHNlcmllcykgPT4ge1xuICAgICAgICBjb25zdCBzZXJpZXNJZGVudGlmaWVyID0gc2VyaWVzLmlkIHx8IHNlcmllcy5sYWJlbCB8fCBgc2VyaWVzLSR7c2VyaWVzLm9yaWdpbmFsSW5kZXh9YDtcbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuU2VyaWVzLmhhcyhzZXJpZXNJZGVudGlmaWVyKSB8fCAhc2VyaWVzLmRhdGEgfHwgc2VyaWVzLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZUNvbG9yID0gc2VyaWVzLmxpbmVDb2xvciB8fCBnZXRDaGFydENvbG9yKHNlcmllcy5vcmlnaW5hbEluZGV4LCB0aGlzLmNoYXJ0Q29sb3JzKTtcbiAgICAgICAgY29uc3QgcG9pbnRzR3JvdXAgPSBhbGxQb2ludHNHcm91cFxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIGBheC1saW5lLWNoYXJ0LXBvaW50cyBheC1saW5lLWNoYXJ0LXBvaW50cy0ke3Nlcmllcy5vcmlnaW5hbEluZGV4fWApXG4gICAgICAgICAgLmF0dHIoJ2RhdGEtc2VyaWVzLWlkZW50aWZpZXInLCBzZXJpZXNJZGVudGlmaWVyKVxuICAgICAgICAgIC5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG5cbiAgICAgICAgcG9pbnRzR3JvdXBcbiAgICAgICAgICAub24oJ21vdXNlZW50ZXInLCAoKSA9PiB0aGlzLmhhbmRsZVBvaW50R3JvdXBFbnRlcihzZXJpZXMub3JpZ2luYWxJbmRleCwgbGluZUNvbG9yKSlcbiAgICAgICAgICAub24oJ21vdXNlbGVhdmUnLCAoKSA9PiB0aGlzLmhhbmRsZVBvaW50R3JvdXBMZWF2ZSgpKTtcblxuICAgICAgICBjb25zdCBtYXhQb2ludHMgPSAxMDA7XG4gICAgICAgIGNvbnN0IHBvaW50RGF0YSA9XG4gICAgICAgICAgc2VyaWVzLmRhdGEubGVuZ3RoID4gbWF4UG9pbnRzID8gdGhpcy5nZXRSZWR1Y2VkRGF0YVBvaW50cyhzZXJpZXMuZGF0YSwgbWF4UG9pbnRzKSA6IHNlcmllcy5kYXRhO1xuXG4gICAgICAgIHBvaW50c0dyb3VwXG4gICAgICAgICAgLnNlbGVjdEFsbCgnY2lyY2xlJylcbiAgICAgICAgICAuZGF0YShwb2ludERhdGEpXG4gICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAuYXBwZW5kKCdjaXJjbGUnKVxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LXBvaW50JylcbiAgICAgICAgICAuYXR0cignY3gnLCBnZXRYKVxuICAgICAgICAgIC5hdHRyKCdjeScsIChkKSA9PiB0aGlzLnlTY2FsZShkLnkpKVxuICAgICAgICAgIC5hdHRyKCdyJywgMClcbiAgICAgICAgICAuYXR0cignZmlsbCcsIGxpbmVDb2xvcilcbiAgICAgICAgICAuYXR0cignc3Ryb2tlJywgJyNmZmYnKVxuICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxKVxuICAgICAgICAgIC5hdHRyKCdkYXRhLXgnLCAoZCkgPT4gZC54KVxuICAgICAgICAgIC5hdHRyKCdkYXRhLXknLCAoZCkgPT4gZC55KVxuICAgICAgICAgIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKVxuICAgICAgICAgIC5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdub25lJylcbiAgICAgICAgICAub24oJ21vdXNlZW50ZXInLCAoZXZlbnQ6IE1vdXNlRXZlbnQsIGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeCA9IGdldFgoZCk7XG4gICAgICAgICAgICBjb25zdCB5ID0gdGhpcy55U2NhbGUoZC55KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGAke01hdGgucm91bmQoeCAqIDEwKSAvIDEwfSwke01hdGgucm91bmQoeSAqIDEwKSAvIDEwfWA7XG4gICAgICAgICAgICBjb25zdCBvdmVybGFwcGluZ1BvaW50cyA9IHBvaW50TWFwLmdldChrZXkpIHx8IFtdO1xuXG4gICAgICAgICAgICBpZiAob3ZlcmxhcHBpbmdQb2ludHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZU92ZXJsYXBwaW5nUG9pbnRzSG92ZXIoZXZlbnQsIG92ZXJsYXBwaW5nUG9pbnRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRIb3ZlcihldmVudCwgZCwgc2VyaWVzLCBzZXJpZXMub3JpZ2luYWxJbmRleCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZDNcbiAgICAgICAgICAgICAgLnNlbGVjdChldmVudC50YXJnZXQgYXMgU1ZHQ2lyY2xlRWxlbWVudClcbiAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAuZHVyYXRpb24oMTUwKVxuICAgICAgICAgICAgICAuYXR0cigncicsICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5wb2ludFJhZGl1cyA/PyA0KSAqIDEuNSlcbiAgICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDIpXG4gICAgICAgICAgICAgIC5hdHRyKCdzdHJva2UnLCBgcmdiKHZhcigtLWF4LWNvbXAtbGluZS1jaGFydC1iZy1jb2xvcikpYCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAub24oJ21vdXNlbW92ZScsIChldmVudDogTW91c2VFdmVudCkgPT4gdGhpcy51cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQpKVxuICAgICAgICAgIC5vbignbW91c2VsZWF2ZScsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdG9vbHRpcFZpc2libGUuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZDNcbiAgICAgICAgICAgICAgLnNlbGVjdChldmVudC50YXJnZXQgYXMgU1ZHQ2lyY2xlRWxlbWVudClcbiAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAuZHVyYXRpb24oMTUwKVxuICAgICAgICAgICAgICAuYXR0cigncicsIHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnBvaW50UmFkaXVzID8/IDQpXG4gICAgICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxKVxuICAgICAgICAgICAgICAuYXR0cignc3Ryb2tlJywgJyNmZmYnKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5vbignY2xpY2snLCAoZXZlbnQ6IE1vdXNlRXZlbnQsIGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeCA9IGdldFgoZCk7XG4gICAgICAgICAgICBjb25zdCB5ID0gdGhpcy55U2NhbGUoZC55KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGAke01hdGgucm91bmQoeCAqIDEwKSAvIDEwfSwke01hdGgucm91bmQoeSAqIDEwKSAvIDEwfWA7XG4gICAgICAgICAgICBjb25zdCBvdmVybGFwcGluZ1BvaW50cyA9IHBvaW50TWFwLmdldChrZXkpIHx8IFtdO1xuXG4gICAgICAgICAgICBpZiAob3ZlcmxhcHBpbmdQb2ludHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBvdmVybGFwcGluZ1BvaW50cy5mb3JFYWNoKCh7IHBvaW50LCBzZXJpZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRDbGljayhldmVudCwgcG9pbnQsIHNlcmllcyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludENsaWNrKGV2ZW50LCBkLCBzZXJpZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgIC5kZWxheShcbiAgICAgICAgICAgIChkOiBhbnksIGk6IG51bWJlcikgPT4gaSAqIE1hdGgubWluKDUwLCAoYW5pbWF0aW9uRHVyYXRpb24gfHwgMCkgKiAwLjA1KSArIChhbmltYXRpb25EdXJhdGlvbiB8fCAwKSAqIDAuNSxcbiAgICAgICAgICApXG4gICAgICAgICAgLmR1cmF0aW9uKChhbmltYXRpb25EdXJhdGlvbiB8fCAwKSAqIDAuMylcbiAgICAgICAgICAuZWFzZShhbmltYXRpb25FYXNpbmcpXG4gICAgICAgICAgLmF0dHIoJ3InLCB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5wb2ludFJhZGl1cyA/PyA0KVxuICAgICAgICAgIC5vbignZW5kJywgKGQsIGksIG5vZGVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gbm9kZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBhbmltYXRpb25Db3VudGVyKys7XG4gICAgICAgICAgICAgIGlmIChhbmltYXRpb25Db3VudGVyID49IHRvdGFsVmlzaWJsZVNlcmllc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVQb2ludGVyRXZlbnRzQWZ0ZXJBbmltYXRpb24oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVuYWJsZVBvaW50ZXJFdmVudHNBZnRlckFuaW1hdGlvbigpO1xuICAgICAgICB9LFxuICAgICAgICBhbmltYXRpb25EdXJhdGlvbiB8fCAwICsgMTAwLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZVBvaW50ZXJFdmVudHNBZnRlckFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2hhcnQgfHwgIXRoaXMuc3ZnKSByZXR1cm47XG4gICAgdGhpcy5jaGFydC5zZWxlY3RBbGwoJy5heC1saW5lLWNoYXJ0LWFsbC1zZXJpZXMnKS5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdhbGwnKTtcbiAgICB0aGlzLmNoYXJ0LnNlbGVjdEFsbCgnLmF4LWxpbmUtY2hhcnQtc2VyaWVzJykuYXR0cigncG9pbnRlci1ldmVudHMnLCAnYWxsJyk7XG4gICAgdGhpcy5jaGFydC5zZWxlY3RBbGwoJy5heC1saW5lLWNoYXJ0LWxpbmUnKS5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdhbGwnKTtcbiAgICB0aGlzLmNoYXJ0LnNlbGVjdEFsbCgnLmF4LWxpbmUtY2hhcnQtYXJlYScpLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ2FsbCcpO1xuICAgIHRoaXMuY2hhcnQuc2VsZWN0QWxsKCcuYXgtbGluZS1jaGFydC1hbGwtcG9pbnRzJykuYXR0cigncG9pbnRlci1ldmVudHMnLCAnYWxsJyk7XG4gICAgdGhpcy5jaGFydC5zZWxlY3RBbGwoJy5heC1saW5lLWNoYXJ0LXBvaW50cycpLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ2FsbCcpO1xuICAgIHRoaXMuY2hhcnQuc2VsZWN0QWxsKCcuYXgtbGluZS1jaGFydC1wb2ludCcpLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ2FsbCcpO1xuICAgIHRoaXMuc3ZnLmNsYXNzZWQoJ2F4LWxpbmUtY2hhcnQtYW5pbWF0aW5nJywgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQb2ludEdyb3VwRW50ZXIob3JpZ2luYWxJbmRleDogbnVtYmVyLCBjb2xvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jaGFydFxuICAgICAgLnNlbGVjdChgLmF4LWxpbmUtY2hhcnQtc2VyaWVzLSR7b3JpZ2luYWxJbmRleH0gLmF4LWxpbmUtY2hhcnQtbGluZWApXG4gICAgICAudHJhbnNpdGlvbigpXG4gICAgICAuZHVyYXRpb24oMTUwKVxuICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5saW5lV2lkdGggPz8gMikgKiAxLjUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQb2ludEdyb3VwTGVhdmUoKTogdm9pZCB7XG4gICAgdGhpcy5jaGFydFxuICAgICAgLnNlbGVjdEFsbCgnLmF4LWxpbmUtY2hhcnQtbGluZScpXG4gICAgICAudHJhbnNpdGlvbigpXG4gICAgICAuZHVyYXRpb24oMTUwKVxuICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLmxpbmVXaWR0aCA/PyAyKTtcblxuICAgIGlmICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5zaG93Q3Jvc3NoYWlyID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmNoYXJ0LnNlbGVjdCgnLmF4LWxpbmUtY2hhcnQtY3Jvc3NoYWlyJykuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWR1Y2VkRGF0YVBvaW50cyhcbiAgICBkYXRhOiBBcnJheTx7IHg6IG51bWJlciB8IHN0cmluZzsgeTogbnVtYmVyIH0+LFxuICAgIG1heFBvaW50czogbnVtYmVyLFxuICApOiBBcnJheTx7IHg6IG51bWJlciB8IHN0cmluZzsgeTogbnVtYmVyIH0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPD0gbWF4UG9pbnRzKSByZXR1cm4gZGF0YTtcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PHsgeDogbnVtYmVyIHwgc3RyaW5nOyB5OiBudW1iZXIgfT4gPSBbXTtcbiAgICBjb25zdCBzdGVwID0gTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8gbWF4UG9pbnRzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IHN0ZXApIHtcbiAgICAgIHJlc3VsdC5wdXNoKGRhdGFbaV0pO1xuICAgIH1cbiAgICBpZiAocmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSAhPT0gZGF0YVtkYXRhLmxlbmd0aCAtIDFdKSB7XG4gICAgICByZXN1bHQucHVzaChkYXRhW2RhdGEubGVuZ3RoIC0gMV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQb2ludEhvdmVyKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIGRhdGFQb2ludDogQVhMaW5lQ2hhcnREYXRhWydkYXRhJ11bbnVtYmVyXSxcbiAgICBzZXJpZXM6IEFYTGluZUNoYXJ0RGF0YSAmIHsgb3JpZ2luYWxJbmRleDogbnVtYmVyIH0sXG4gICAgb3JpZ2luYWxJbmRleDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZmZlY3RpdmVPcHRpb25zKCkuc2hvd1Rvb2x0aXAgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjb2xvciA9IHNlcmllcy5saW5lQ29sb3IgfHwgZ2V0Q2hhcnRDb2xvcihvcmlnaW5hbEluZGV4LCB0aGlzLmNoYXJ0Q29sb3JzKTtcblxuICAgICAgdGhpcy5fdG9vbHRpcERhdGEuc2V0KHtcbiAgICAgICAgdGl0bGU6IGRhdGFQb2ludC50b29sdGlwTGFiZWwgfHwgc2VyaWVzLnRvb2x0aXBMYWJlbCB8fCBzZXJpZXMubGFiZWwgfHwgYFNlcmllcyAke29yaWdpbmFsSW5kZXggKyAxfWAsXG4gICAgICAgIHZhbHVlOiBkYXRhUG9pbnQueS50b1N0cmluZygpLFxuICAgICAgICBzZXJpZXNOYW1lOiBgeDogJHtkYXRhUG9pbnQueH1gLFxuICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fdG9vbHRpcFZpc2libGUuc2V0KHRydWUpO1xuICAgICAgdGhpcy51cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQpO1xuXG4gICAgICBpZiAodGhpcy5lZmZlY3RpdmVPcHRpb25zKCkuc2hvd0Nyb3NzaGFpciA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnNob3dDcm9zc2hhaXJMaW5lcyhkYXRhUG9pbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Nyb3NzaGFpckxpbmVzKGRhdGFQb2ludDogeyB4OiBudW1iZXIgfCBzdHJpbmc7IHk6IG51bWJlciB9KTogdm9pZCB7XG4gICAgY29uc3QgaXNCYW5kU2NhbGUgPSB0aGlzLnhTY2FsZS5iYW5kd2lkdGggIT09IHVuZGVmaW5lZDtcblxuICAgIGxldCB4OiBudW1iZXI7XG4gICAgaWYgKGlzQmFuZFNjYWxlKSB7XG4gICAgICB4ID0gdGhpcy54U2NhbGUoU3RyaW5nKGRhdGFQb2ludC54KSkgKyB0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSB0aGlzLnhTY2FsZShkYXRhUG9pbnQueCBhcyBudW1iZXIpO1xuICAgIH1cbiAgICBjb25zdCB5ID0gdGhpcy55U2NhbGUoZGF0YVBvaW50LnkpO1xuXG4gICAgbGV0IGNyb3NzaGFpckdyb3VwID0gdGhpcy5jaGFydC5zZWxlY3QoJy5heC1saW5lLWNoYXJ0LWNyb3NzaGFpcicpO1xuICAgIGlmIChjcm9zc2hhaXJHcm91cC5lbXB0eSgpKSB7XG4gICAgICBjcm9zc2hhaXJHcm91cCA9IHRoaXMuY2hhcnQuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1jcm9zc2hhaXInKS5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG4gICAgfVxuXG4gICAgY3Jvc3NoYWlyR3JvdXAuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7XG5cbiAgICBjcm9zc2hhaXJHcm91cFxuICAgICAgLmFwcGVuZCgnbGluZScpXG4gICAgICAuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1jcm9zc2hhaXItdmVydGljYWwnKVxuICAgICAgLmF0dHIoJ3gxJywgeClcbiAgICAgIC5hdHRyKCd5MScsIDApXG4gICAgICAuYXR0cigneDInLCB4KVxuICAgICAgLmF0dHIoJ3kyJywgdGhpcy5oZWlnaHQpXG4gICAgICAuYXR0cignc3Ryb2tlJywgJ3JnYmEodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LWdyaWQtbGluZXMtY29sb3IpLCAwLjUpJylcbiAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxKVxuICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCAnMywzJylcbiAgICAgIC5hdHRyKCdvcGFjaXR5JywgMC43KVxuICAgICAgLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcblxuICAgIGNyb3NzaGFpckdyb3VwXG4gICAgICAuYXBwZW5kKCdsaW5lJylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWNyb3NzaGFpci1ob3Jpem9udGFsJylcbiAgICAgIC5hdHRyKCd4MScsIDApXG4gICAgICAuYXR0cigneTEnLCB5KVxuICAgICAgLmF0dHIoJ3gyJywgdGhpcy53aWR0aClcbiAgICAgIC5hdHRyKCd5MicsIHkpXG4gICAgICAuYXR0cignc3Ryb2tlJywgJ3JnYmEodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LWdyaWQtbGluZXMtY29sb3IpLCAwLjUpJylcbiAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxKVxuICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCAnMywzJylcbiAgICAgIC5hdHRyKCdvcGFjaXR5JywgMC43KVxuICAgICAgLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVG9vbHRpcFBvc2l0aW9uKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jaGFydENvbnRhaW5lckVsKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB0b29sdGlwRWwgPSB0aGlzLmNoYXJ0Q29udGFpbmVyRWwoKS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC10b29sdGlwJyk7XG5cbiAgICBpZiAoIXRvb2x0aXBFbCkge1xuICAgICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFggLSBjb250YWluZXIubGVmdDtcbiAgICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZIC0gY29udGFpbmVyLnRvcDtcbiAgICAgIHRoaXMuX3Rvb2x0aXBQb3NpdGlvbi5zZXQoeyB4LCB5IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRvb2x0aXBSZWN0ID0gdG9vbHRpcEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCB4ID0gZXZlbnQuY2xpZW50WCAtIGNvbnRhaW5lci5sZWZ0O1xuICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZIC0gY29udGFpbmVyLnRvcDtcblxuICAgIGlmICh4ICsgdG9vbHRpcFJlY3Qud2lkdGggKyAyMCA+IGNvbnRhaW5lci53aWR0aCkge1xuICAgICAgeCA9IHggLSB0b29sdGlwUmVjdC53aWR0aCAtIDE1O1xuICAgIH1cbiAgICB0aGlzLl90b29sdGlwUG9zaXRpb24uc2V0KHsgeCwgeSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUG9pbnRDbGljayhcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBkYXRhUG9pbnQ6IEFYTGluZUNoYXJ0RGF0YVsnZGF0YSddW251bWJlcl0sXG4gICAgc2VyaWVzOiBBWExpbmVDaGFydERhdGEgJiB7IG9yaWdpbmFsSW5kZXg6IG51bWJlciB9LFxuICApOiB2b2lkIHtcbiAgICB0aGlzLnBvaW50Q2xpY2suZW1pdCh7XG4gICAgICBzZXJpZXM6IHNlcmllcywgLy8gc2VyaWVzIHN0aWxsIHJlZmVycyB0byB0aGUgZnVsbCBzZXJpZXMgZGF0YSB3aXRoIG9yaWdpbmFsSW5kZXhcbiAgICAgIHBvaW50OiBkYXRhUG9pbnQsXG4gICAgICBldmVudDoge1xuICAgICAgICBuYXRpdmVFdmVudDogZXZlbnQsXG4gICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dOb0RhdGFNZXNzYWdlKGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5kMy5zZWxlY3QoY29udGFpbmVyRWxlbWVudCkuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7XG4gICAgY29uc3QgbWVzc2FnZUNvbnRhaW5lciA9IHRoaXMuZDNcbiAgICAgIC5zZWxlY3QoY29udGFpbmVyRWxlbWVudClcbiAgICAgIC5hcHBlbmQoJ2RpdicpXG4gICAgICAuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1uby1kYXRhLW1lc3NhZ2UnKVxuICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXG4gICAgICAuc3R5bGUoJ2xlZnQnLCAnNTAlJylcbiAgICAgIC5zdHlsZSgndG9wJywgJzUwJScpXG4gICAgICAuc3R5bGUoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknKVxuICAgICAgLnN0eWxlKCd0ZXh0LWFsaWduJywgJ2NlbnRlcicpXG4gICAgICAuc3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCAncmdiKHZhcigtLWF4LWNvbXAtbGluZS1jaGFydC1iZy1jb2xvcikpJylcbiAgICAgIC5zdHlsZSgncGFkZGluZycsICcxLjVyZW0nKVxuICAgICAgLnN0eWxlKCdib3JkZXItcmFkaXVzJywgJzAuNXJlbScpXG4gICAgICAuc3R5bGUoJ2JveC1zaGFkb3cnLCAnMCAycHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMDgpJylcbiAgICAgIC5zdHlsZSgnd2lkdGgnLCAnODAlJylcbiAgICAgIC5zdHlsZSgnbWF4LXdpZHRoJywgJzMwMHB4Jyk7XG5cbiAgICBtZXNzYWdlQ29udGFpbmVyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtbm8tZGF0YS1pY29uJylcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjYnKVxuICAgICAgLnN0eWxlKCdtYXJnaW4tYm90dG9tJywgJzAuNzVyZW0nKVxuICAgICAgLmh0bWwoJzxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtY2hhcnQtbGluZSBmYS0yeFwiPjwvaT4nKTtcblxuICAgIG1lc3NhZ2VDb250YWluZXJcbiAgICAgIC5hcHBlbmQoJ2RpdicpXG4gICAgICAuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1uby1kYXRhLXRleHQnKVxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMXJlbScpXG4gICAgICAuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgJzYwMCcpXG4gICAgICAuc3R5bGUoJ21hcmdpbi1ib3R0b20nLCAnMC41cmVtJylcbiAgICAgIC50ZXh0KCdObyBkYXRhIGF2YWlsYWJsZScpO1xuXG4gICAgbWVzc2FnZUNvbnRhaW5lclxuICAgICAgLmFwcGVuZCgnZGl2JylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LW5vLWRhdGEtaGVscCcpXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcwLjhyZW0nKVxuICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNicpXG4gICAgICAudGV4dCgnUGxlYXNlIHByb3ZpZGUgZGF0YSB0byBkaXNwbGF5IHRoZSBjaGFydCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93QWxsU2VyaWVzSGlkZGVuTWVzc2FnZShjb250YWluZXJFbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuZDMuc2VsZWN0KGNvbnRhaW5lckVsZW1lbnQpLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpOyAvLyBDbGVhciBleGlzdGluZyBjaGFydCBlbGVtZW50c1xuICAgIGNvbnN0IG1lc3NhZ2VDb250YWluZXIgPSB0aGlzLmQzXG4gICAgICAuc2VsZWN0KGNvbnRhaW5lckVsZW1lbnQpXG4gICAgICAuYXBwZW5kKCdkaXYnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYWxsLWhpZGRlbi1tZXNzYWdlJykgLy8gRGlmZmVyZW50IGNsYXNzXG4gICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcbiAgICAgIC5zdHlsZSgnbGVmdCcsICc1MCUnKVxuICAgICAgLnN0eWxlKCd0b3AnLCAnNTAlJylcbiAgICAgIC5zdHlsZSgndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKScpXG4gICAgICAuc3R5bGUoJ3RleHQtYWxpZ24nLCAnY2VudGVyJylcbiAgICAgIC5zdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsICdyZ2IodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LWJnLWNvbG9yKSknKVxuICAgICAgLnN0eWxlKCdwYWRkaW5nJywgJzEuNXJlbScpXG4gICAgICAuc3R5bGUoJ2JvcmRlci1yYWRpdXMnLCAnMC41cmVtJylcbiAgICAgIC5zdHlsZSgnYm94LXNoYWRvdycsICcwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4wOCknKVxuICAgICAgLnN0eWxlKCd3aWR0aCcsICc4MCUnKVxuICAgICAgLnN0eWxlKCdtYXgtd2lkdGgnLCAnMzUwcHgnKTsgLy8gU2xpZ2h0bHkgd2lkZXIgZm9yIGxvbmdlciB0ZXh0XG5cbiAgICBtZXNzYWdlQ29udGFpbmVyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYWxsLWhpZGRlbi1pY29uJylcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjYnKVxuICAgICAgLnN0eWxlKCdtYXJnaW4tYm90dG9tJywgJzAuNzVyZW0nKVxuICAgICAgLmh0bWwoJzxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtZXllLXNsYXNoIGZhLTJ4XCI+PC9pPicpOyAvLyBEaWZmZXJlbnQgaWNvblxuXG4gICAgbWVzc2FnZUNvbnRhaW5lclxuICAgICAgLmFwcGVuZCgnZGl2JylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWFsbC1oaWRkZW4tdGV4dCcpXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxcmVtJylcbiAgICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnNjAwJylcbiAgICAgIC5zdHlsZSgnbWFyZ2luLWJvdHRvbScsICcwLjVyZW0nKVxuICAgICAgLnRleHQoJ0FsbCBzZXJpZXMgYXJlIGhpZGRlbicpO1xuXG4gICAgbWVzc2FnZUNvbnRhaW5lclxuICAgICAgLmFwcGVuZCgnZGl2JylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWFsbC1oaWRkZW4taGVscCcpXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcwLjhyZW0nKVxuICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNicpXG4gICAgICAudGV4dCgnQ2xpY2sgbGVnZW5kIGl0ZW1zIHRvIHNob3cgc2VyaWVzIGluIHRoZSBjaGFydC4nKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT3ZlcmxhcHBpbmdQb2ludHNIb3ZlcihcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBvdmVybGFwcGluZ1BvaW50czogQXJyYXk8e1xuICAgICAgcG9pbnQ6IGFueTtcbiAgICAgIHNlcmllczogQVhMaW5lQ2hhcnREYXRhICYgeyBvcmlnaW5hbEluZGV4OiBudW1iZXIgfTtcbiAgICAgIG9yaWdpbmFsSW5kZXg6IG51bWJlcjtcbiAgICB9PixcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnNob3dUb29sdGlwID09PSBmYWxzZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgdG9vbHRpcERhdGE6IEFYQ2hhcnRUb29sdGlwRGF0YSA9IHtcbiAgICAgIHRpdGxlOiAnTXVsdGlwbGUgU2VyaWVzJyxcbiAgICAgIHZhbHVlOiBvdmVybGFwcGluZ1BvaW50c1swXS5wb2ludC55LnRvU3RyaW5nKCksXG4gICAgICBzZXJpZXNOYW1lOiAnJyxcbiAgICAgIGNvbG9yOiAnJyxcbiAgICAgIGl0ZW1zOiBvdmVybGFwcGluZ1BvaW50cy5tYXAoKHsgcG9pbnQsIHNlcmllcywgb3JpZ2luYWxJbmRleCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gc2VyaWVzLmxpbmVDb2xvciB8fCBnZXRDaGFydENvbG9yKG9yaWdpbmFsSW5kZXgsIHRoaXMuY2hhcnRDb2xvcnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhYmVsOiBzZXJpZXMubGFiZWwgfHwgYFNlcmllcyAke29yaWdpbmFsSW5kZXggKyAxfWAsXG4gICAgICAgICAgdmFsdWU6IHBvaW50LnkudG9TdHJpbmcoKSxcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9vbHRpcERhdGEuc2V0KHRvb2x0aXBEYXRhKTtcbiAgICB0aGlzLl90b29sdGlwVmlzaWJsZS5zZXQodHJ1ZSk7XG4gICAgdGhpcy51cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQpO1xuXG4gICAgaWYgKHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnNob3dDcm9zc2hhaXIgPT09IHRydWUgJiYgb3ZlcmxhcHBpbmdQb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zaG93Q3Jvc3NoYWlyTGluZXMob3ZlcmxhcHBpbmdQb2ludHNbMF0ucG9pbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWFzaW5nRnVuY3Rpb24oZWFzaW5nPzogc3RyaW5nKTogYW55IHtcbiAgICBzd2l0Y2ggKGVhc2luZykge1xuICAgICAgY2FzZSAnbGluZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZUxpbmVhcjtcbiAgICAgIGNhc2UgJ2Vhc2UnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlUG9seUluT3V0O1xuICAgICAgY2FzZSAnZWFzZS1pbic6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VQb2x5SW47XG4gICAgICBjYXNlICdlYXNlLW91dCc6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VQb2x5T3V0O1xuICAgICAgY2FzZSAnZWFzZS1pbi1vdXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlUG9seUluT3V0O1xuICAgICAgY2FzZSAnY3ViaWMnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlQ3ViaWM7XG4gICAgICBjYXNlICdjdWJpYy1pbic6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VDdWJpY0luO1xuICAgICAgY2FzZSAnY3ViaWMtb3V0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZUN1YmljT3V0O1xuICAgICAgY2FzZSAnY3ViaWMtaW4tb3V0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZUN1YmljSW5PdXQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlQ3ViaWNPdXQ7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtbGluZS1jaGFydFwiICNjaGFydENvbnRhaW5lcj5cbiAgPCEtLSBTaGFyZWQgdG9vbHRpcCBjb21wb25lbnQgLS0+XG4gIDxheC1jaGFydC10b29sdGlwXG4gICAgW3Zpc2libGVdPVwidG9vbHRpcFZpc2libGUoKVwiXG4gICAgW3Bvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbigpXCJcbiAgICBbZGF0YV09XCJ0b29sdGlwRGF0YSgpXCJcbiAgICBbc2hvd1BlcmNlbnRhZ2VdPVwiZmFsc2VcIlxuICA+PC9heC1jaGFydC10b29sdGlwPlxuPC9kaXY+XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNoYXJ0cy1saW5lLWNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2xpbmUtY2hhcnQvc3JjL2Fjb3JleC1jaGFydHMtbGluZS1jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":";;;;;;;;;AAGY,MAAC,wBAAwB,GAAG;AACxC,IAAI,OAAO,EAAE;AACb,QAAQ,GAAG,EAAE,EAAE;AACf,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,MAAM,EAAE,EAAE;AAClB,QAAQ,IAAI,EAAE,EAAE;AAChB,KAAK;AACL,IAAI,SAAS,EAAE,IAAI;AACnB,IAAI,SAAS,EAAE,IAAI;AACnB,IAAI,QAAQ,EAAE,IAAI;AAClB,IAAI,gBAAgB,EAAE,KAAK;AAC3B,IAAI,iBAAiB,EAAE,IAAI;AAC3B,IAAI,WAAW,EAAE,CAAC;AAClB,IAAI,WAAW,EAAE,IAAI;AACrB,IAAI,SAAS,EAAE,CAAC;AAChB,IAAI,UAAU,EAAE,IAAI;AACpB,IAAI,WAAW,EAAE,CAAC;AAClB,IAAI,UAAU,EAAE,KAAK;AACrB,IAAI,QAAQ,EAAE,KAAK;AACnB,IAAI,WAAW,EAAE,EAAE;AACnB,IAAI,aAAa,EAAE,KAAK;AACxB,IAAI,iBAAiB,EAAE,IAAI;AAC3B,IAAI,eAAe,EAAE,WAAW;AAChC;AACY,MAAC,oBAAoB,GAAG,IAAI,cAAc,CAAC,sBAAsB,EAAE;AAC/E,IAAI,UAAU,EAAE,MAAM;AACtB,IAAI,OAAO,EAAE,MAAM;AACnB,QAAQ,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC/C,QAAQ,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,wBAAwB,CAAC;AAChE,QAAQ,OAAO,wBAAwB;AACvC,KAAK;AACL,CAAC;AACM,SAAS,eAAe,CAAC,MAAM,GAAG,EAAE,EAAE;AAC7C,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,GAAG,wBAAwB;AACnC,QAAQ,GAAG,MAAM;AACjB,KAAK;AACL,IAAI,OAAO,MAAM;AACjB;;AClCA;AACA;AACA;AACO,MAAM,oBAAoB,SAAS,WAAW,CAAC;AACtD,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;AACpB,IAAI,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;AACvB,IAAI,UAAU,GAAG,MAAM,EAAE;AACzB,IAAI,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AAC3D,IAAI,EAAE;AACN,IAAI,GAAG;AACP,IAAI,KAAK;AACT,IAAI,MAAM;AACV,IAAI,MAAM;AACV,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,KAAK;AACT,IAAI,MAAM;AACV,IAAI,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AACzD,IAAI,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC;AACnC,IAAI,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7C,IAAI,YAAY,GAAG,MAAM,CAAC;AAC1B,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,KAAK,EAAE,GAAG;AAClB,QAAQ,UAAU,EAAE,IAAI;AACxB,QAAQ,KAAK,EAAE,EAAE;AACjB,KAAK,CAAC;AACN,IAAI,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;AAChC,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AAC7B,IAAI,YAAY,GAAG,IAAI,GAAG,EAAE;AAC5B,IAAI,mBAAmB,GAAG,EAAE;AAC5B,IAAI,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;AACtD,IAAI,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;AACxD,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAChD;AACA,IAAI,WAAW,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAC9C;AACA,IAAI,WAAW,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAChD;AACA,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;AACjC,IAAI,gBAAgB,GAAG,QAAQ,CAAC,MAAM;AACtC,QAAQ,OAAO;AACf,YAAY,GAAG,IAAI,CAAC,WAAW;AAC/B,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE;AAC7B,SAAS;AACT,KAAK,CAAC;AACN,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,MAAM,EAAE;AACrB;AACA,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM;AAC3B,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;AACnC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACpC,YAAY,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1F;AACA,aAAa,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,EAAE;AAC/C,YAAY,IAAI,CAAC,mBAAmB,GAAG,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;AACzE;AACA,aAAa;AACb,YAAY,IAAI,CAAC,mBAAmB,GAAG,EAAE;AACzC;AACA,QAAQ,IAAI,CAAC,gBAAgB,EAAE;AAC/B,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AAC9B,YAAY,IAAI,CAAC,WAAW,EAAE;AAC9B;AACA,KAAK,CAAC;AACN,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,QAAQ,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAChD,YAAY,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,YAAY,EAAE;AAC3B;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK;AAC1E,YAAY,OAAO,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACvE,SAAS,EAAE,CAAC,CAAC;AACb,QAAQ,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK;AACxD,YAAY,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1E,YAAY,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,IAAI,GAAG,GAAG,CAAC;AAC9E,YAAY,OAAO;AACnB,gBAAgB,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AACjF,gBAAgB,IAAI,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;AAC1E,gBAAgB,KAAK,EAAE,SAAS;AAChC,gBAAgB,KAAK,EAAE,MAAM,CAAC,SAAS,IAAI,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC;AAChG,gBAAgB,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;AAC5G,gBAAgB,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7D,aAAa;AACb,SAAS,CAAC;AACV;AACA,IAAI,gBAAgB,CAAC,EAAE,EAAE;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG;AACrB,YAAY;AACZ,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;AAC5E,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC;AAC5E,QAAQ,IAAI,EAAE,KAAK,IAAI,EAAE;AACzB,YAAY,eAAe,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACjF,YAAY,eAAe,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACjF,YAAY;AACZ,iBAAiB,SAAS,CAAC,qBAAqB;AAChD,iBAAiB,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,IAAI,CAAC;AAC5E,iBAAiB,OAAO,CAAC,2BAA2B,EAAE,KAAK,CAAC;AAC5D,YAAY;AACZ,iBAAiB,SAAS,CAAC,4BAA4B;AACvD,iBAAiB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,IAAI,CAAC;AACnE,iBAAiB,OAAO,CAAC,4BAA4B,EAAE,KAAK,CAAC;AAC7D,YAAY;AACZ;AACA,QAAQ,eAAe,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC;AAC9E,QAAQ,eAAe,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC;AAC9E,QAAQ,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,+CAA+C,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9G,QAAQ,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,+CAA+C,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9G,QAAQ,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AAC/E,QAAQ,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AAC/E,QAAQ;AACR,aAAa,SAAS,CAAC,qBAAqB;AAC5C,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,IAAI,CAAC,IAAI,GAAG;AAChF,aAAa,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;AACvD,QAAQ;AACR,aAAa,SAAS,CAAC,4BAA4B;AACnD,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,IAAI,CAAC,IAAI,GAAG;AACvE,aAAa,OAAO,CAAC,4BAA4B,EAAE,IAAI,CAAC;AACxD;AACA,IAAI,aAAa,CAAC,EAAE,EAAE;AACtB,QAAQ,MAAM,QAAQ,GAAG,EAAE;AAC3B,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC7C,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9C;AACA,aAAa;AACb,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3C;AACA,QAAQ,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAQ,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/C;AACA,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,IAAI;AACZ,YAAY,IAAI,CAAC,EAAE,GAAG,MAAM,OAAO,IAAI,CAAC;AACxC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAChE,gBAAgB,IAAI,CAAC,WAAW,EAAE;AAClC,gBAAgB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC;AACA;AACA,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;AACzD;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa;AAC/D,YAAY;AACZ,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa;AACtE,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB;AACtD,QAAQ,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AAC/D,QAAQ,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AACrH,YAAY,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AACpD,YAAY;AACZ;AACA,QAAQ,MAAM,uBAAuB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC/J,QAAQ,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;AAClD;AACA,YAAY,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC;AAC7D;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,QAAQ,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5H,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACpD,QAAQ,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,YAAY,CAAC;AAC5D;AACA;AACA,QAAQ,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1F,QAAQ,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5C;AACA,YAAY,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AACpD,YAAY;AACZ;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;AAC3C,QAAQ,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;AACrC,QAAQ,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AACxC;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,WAAW,EAAE;AAC1B;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE;AACtB,YAAY,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;AAC7F,YAAY,IAAI,CAAC,GAAG,GAAG,IAAI;AAC3B,YAAY,IAAI,CAAC,KAAK,GAAG,IAAI;AAC7B;AACA,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC;AACA,IAAI,eAAe,CAAC,gBAAgB,EAAE,OAAO,EAAE;AAC/C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACtC,QAAQ,MAAM,cAAc,GAAG,gBAAgB,CAAC,WAAW;AAC3D,QAAQ,MAAM,eAAe,GAAG,gBAAgB,CAAC,YAAY;AAC7D,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,eAAe,CAAC;AACrE,QAAQ,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;AAC7C,YAAY,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAC7E,YAAY,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AAC/E;AACA,aAAa;AACb,YAAY,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAChG,YAAY,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AAClG;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;AAC9C,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AAChD,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAC5E,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AAC9E,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC;AACzB,aAAa,MAAM,CAAC,gBAAgB;AACpC,aAAa,MAAM,CAAC,KAAK;AACzB,aAAa,IAAI,CAAC,OAAO,EAAE,MAAM;AACjC,aAAa,IAAI,CAAC,QAAQ,EAAE,MAAM;AAClC,aAAa,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AAC/D,aAAa,IAAI,CAAC,qBAAqB,EAAE,eAAe;AACxD,aAAa,IAAI,CAAC,OAAO,EAAE;AAC3B;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,CAAC;AACR,QAAQ,IAAI,CAAC,GAAG,GAAG,GAAG;AACtB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChH;AACA,IAAI,gBAAgB,CAAC,OAAO,EAAE;AAC9B,QAAQ,IAAI,CAAC,MAAM,GAAG;AACtB,YAAY,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE;AAC3C,YAAY,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;AAC/C,YAAY,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE;AACjD,YAAY,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE;AAC7C,SAAS;AACT,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE;AAChC,YAAY,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM;AAC1D,YAAY,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,GAAG,GAAG,CAAC,CAAC;AACpF,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,iBAAiB,CAAC;AACrF;AACA,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE;AAChC,YAAY,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM;AAC1D,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,GAAG,GAAG,CAAC,CAAC;AAClF,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,eAAe,CAAC;AAC/E;AACA,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE;AACzC,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;AACjE;AACA,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE;AACzC,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;AAC7D;AACA;AACA,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB;AACA,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACpD,QAAQ,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,IAAI,CAAC;AACrD,QAAQ,MAAM,iBAAiB,GAAG,OAAO,GAAG,GAAG;AAC/C;AACA,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACxG,QAAQ,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC;AACA,YAAY,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC/C;AACA,QAAQ,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;AAC/E,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,YAAY,IAAI,IAAI,KAAK,IAAI,EAAE;AAC/B,gBAAgB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnC,qBAAqB,WAAW;AAChC,qBAAqB,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AAChD,qBAAqB,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3C;AACA,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/F;AACA;AACA,aAAa;AACb,YAAY,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAC/B,iBAAiB,SAAS;AAC1B,iBAAiB,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,iBAAiB,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;AACtC,iBAAiB,YAAY,CAAC,GAAG;AACjC,iBAAiB,YAAY,CAAC,CAAC,CAAC;AAChC;AACA,QAAQ,MAAM,iBAAiB,GAAG,YAAY,CAAC,iBAAiB,KAAK,KAAK;AAC1E,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,QAAQ,IAAI,iBAAiB,EAAE;AAC/B,YAAY,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;AACpC;AACA,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,QAAQ,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI;AAClC,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAC3B,aAAa,WAAW;AACxB,aAAa,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,iBAAiB,CAAC;AAC7D,aAAa,IAAI;AACjB,aAAa,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACpC;AACA,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,KAAK;AACrD,QAAQ,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,KAAK;AACrD,QAAQ,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,KAAK;AACnD,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS;AAC/D,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AAC3C,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;AACpF,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,IAAI,CAAC,KAAK,GAAG;AACzB,iBAAiB,MAAM,CAAC,GAAG;AAC3B,iBAAiB,IAAI,CAAC,OAAO,EAAE,sBAAsB;AACrD,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAChE,iBAAiB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACjF;AACA,YAAY,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,iDAAiD,CAAC;AAC1G,YAAY,IAAI,CAAC;AACjB,iBAAiB,SAAS,CAAC,MAAM;AACjC,iBAAiB,IAAI,CAAC,QAAQ,EAAE,uDAAuD;AACvF,iBAAiB,IAAI,CAAC,kBAAkB,EAAE,KAAK;AAC/C,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;AAC9C,YAAY,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;AACpG,YAAY,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE;AACvD,qBAAqB,EAAE,wBAAwB,CAAC;AAChD;AACA;AACA,QAAQ,CAAC,CAAC;AACV,YAAY,IAAI,OAAO,CAAC,UAAU,EAAE;AACpC,gBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG;AACrE,gBAAgB;AAChB,qBAAqB,MAAM,CAAC,MAAM;AAClC,qBAAqB,IAAI,CAAC,OAAO,EAAE,0CAA0C;AAC7E,qBAAqB,IAAI,CAAC,aAAa,EAAE,QAAQ;AACjD,qBAAqB,IAAI,CAAC,mBAAmB,EAAE,QAAQ;AACvD,qBAAqB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC;AAC7C,qBAAqB,IAAI,CAAC,GAAG,EAAE,MAAM;AACrC,qBAAqB,IAAI,CAAC,WAAW,EAAE,iBAAiB;AACxD,qBAAqB,IAAI,CAAC,OAAO,EAAE;AACnC;AACA;AACA;AACA;AACA,UAAU,CAAC;AACX,qBAAqB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AAC7C;AACA;AACA,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,IAAI,CAAC,KAAK,GAAG;AACzB,iBAAiB,MAAM,CAAC,GAAG;AAC3B,iBAAiB,IAAI,CAAC,OAAO,EAAE,sBAAsB;AACrD,iBAAiB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC/E;AACA,YAAY,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,iDAAiD,CAAC;AAC1G,YAAY,IAAI,CAAC;AACjB,iBAAiB,SAAS,CAAC,MAAM;AACjC,iBAAiB,IAAI,CAAC,QAAQ,EAAE,uDAAuD;AACvF,iBAAiB,IAAI,CAAC,kBAAkB,EAAE,KAAK;AAC/C,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;AAC9C,YAAY,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AACrG,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE;AAC1E,qBAAqB,EAAE,wBAAwB,CAAC;AAChD;AACA;AACA,QAAQ,CAAC,CAAC;AACV,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;AACvD;AACA,YAAY,IAAI,OAAO,CAAC,UAAU,EAAE;AACpC,gBAAgB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;AAC/C,gBAAgB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG;AACtD,gBAAgB;AAChB,qBAAqB,MAAM,CAAC,MAAM;AAClC,qBAAqB,IAAI,CAAC,OAAO,EAAE,0CAA0C;AAC7E,qBAAqB,IAAI,CAAC,aAAa,EAAE,QAAQ;AACjD,qBAAqB,IAAI,CAAC,mBAAmB,EAAE,QAAQ;AACvD,qBAAqB,IAAI,CAAC,WAAW,EAAE,8BAA8B;AACrE,qBAAqB,IAAI,CAAC,GAAG,EAAE,MAAM;AACrC,qBAAqB,IAAI,CAAC,GAAG,EAAE,MAAM;AACrC,qBAAqB,IAAI,CAAC,OAAO,EAAE;AACnC;AACA;AACA;AACA;AACA,UAAU,CAAC;AACX,qBAAqB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AAC7C;AACA;AACA,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC;AACnC,iBAAiB,MAAM,CAAC,GAAG;AAC3B,iBAAiB,IAAI,CAAC,OAAO,EAAE,8BAA8B;AAC7D,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC/C,YAAY,MAAM,KAAK,GAAG;AAC1B,iBAAiB,MAAM,CAAC,GAAG;AAC3B,iBAAiB,IAAI,CAAC,OAAO,EAAE,oBAAoB;AACnD,iBAAiB,IAAI,CAAC,IAAI,CAAC;AAC3B,iBAAiB,QAAQ,CAAC,IAAI,CAAC,MAAM;AACrC,iBAAiB,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK;AACrC,iBAAiB,UAAU,CAAC,MAAM,EAAE;AACpC,iBAAiB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACjD;AACA,YAAY,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC;AAC7D,YAAY;AACZ,iBAAiB,SAAS,CAAC,OAAO;AAClC,iBAAiB,SAAS,CAAC,MAAM;AACjC,iBAAiB,IAAI,CAAC,QAAQ,EAAE,uDAAuD;AACvF,iBAAiB,IAAI,CAAC,kBAAkB,EAAE,KAAK;AAC/C,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;AAC9C,YAAY,IAAI,OAAO,CAAC,gBAAgB,EAAE;AAC1C,gBAAgB,MAAM,KAAK,GAAG;AAC9B,qBAAqB,MAAM,CAAC,GAAG;AAC/B,qBAAqB,IAAI,CAAC,OAAO,EAAE,6BAA6B;AAChE,qBAAqB,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,qBAAqB,IAAI,CAAC,IAAI,CAAC;AAC/B,qBAAqB,UAAU,CAAC,IAAI,CAAC,MAAM;AAC3C,qBAAqB,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM;AAC1C,qBAAqB,UAAU,CAAC,MAAM,EAAE;AACxC,qBAAqB,UAAU,CAAC,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAC/E;AACA,gBAAgB,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC;AACjE,gBAAgB;AAChB,qBAAqB,SAAS,CAAC,OAAO;AACtC,qBAAqB,SAAS,CAAC,MAAM;AACrC,qBAAqB,IAAI,CAAC,QAAQ,EAAE,wDAAwD;AAC5F,qBAAqB,IAAI,CAAC,kBAAkB,EAAE,KAAK;AACnD,qBAAqB,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;AAClD;AACA;AACA;AACA,IAAI,WAAW,CAAC,aAAa,EAAE;AAC/B,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS;AAC/D,QAAQ,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK;AAC5B,YAAY,IAAI,WAAW,EAAE;AAC7B,gBAAgB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC;AAC7E;AACA,iBAAiB;AACjB,gBAAgB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC;AACA,SAAS;AACT,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC;AACnC,aAAa,IAAI;AACjB,aAAa,CAAC,CAAC,IAAI;AACnB,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU,KAAK,KAAK,EAAE;AAC1D,YAAY,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;AACvD;AACA,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC;AACnC,aAAa,IAAI;AACjB,aAAa,CAAC,CAAC,IAAI;AACnB,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM;AAC3B,aAAa,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU,KAAK,KAAK,EAAE;AAC1D,YAAY,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;AACvD;AACA,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC;AACzD,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC;AACpC,aAAa,MAAM,CAAC,GAAG;AACvB,aAAa,IAAI,CAAC,OAAO,EAAE,0BAA0B;AACrD,aAAa,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC3C,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC;AACpC,aAAa,MAAM,CAAC,GAAG;AACvB,aAAa,IAAI,CAAC,OAAO,EAAE,0BAA0B;AACrD,aAAa,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC3C,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,KAAK,IAAI,EAAE;AAC5D,YAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC1G;AACA,QAAQ,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,iBAAiB;AAC3E,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC;AAC/F,QAAQ,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AAC1C,YAAY,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AAClG,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;AACzD,gBAAgB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,8CAA8C,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;AACpH,gBAAgB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,8CAA8C,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;AACpH,gBAAgB;AAChB;AACA,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;AACxD,gBAAgB;AAChB,YAAY,MAAM,WAAW,GAAG;AAChC,iBAAiB,MAAM,CAAC,GAAG;AAC3B,iBAAiB,IAAI,CAAC,OAAO,EAAE,CAAC,0CAA0C,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AAClG,iBAAiB,IAAI,CAAC,wBAAwB,EAAE,gBAAgB;AAChE,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC/C,YAAY,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC;AACvG,YAAY,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,SAAS;AAC3D,YAAY,MAAM,IAAI,GAAG;AACzB,iBAAiB,MAAM,CAAC,MAAM;AAC9B,iBAAiB,KAAK,CAAC,MAAM,CAAC,IAAI;AAClC,iBAAiB,IAAI,CAAC,OAAO,EAAE,oBAAoB;AACnD,iBAAiB,IAAI,CAAC,QAAQ,EAAE,SAAS;AACzC,iBAAiB,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,IAAI,CAAC;AAC5E,iBAAiB,IAAI,CAAC,iBAAiB,EAAE,OAAO;AAChD,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,OAAO;AAC/C,iBAAiB,IAAI,CAAC,GAAG,EAAE,aAAa;AACxC,iBAAiB,IAAI,CAAC,MAAM,EAAE,MAAM;AACpC,iBAAiB,IAAI,CAAC,OAAO,EAAE,qCAAqC;AACpE,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC/C,YAAY;AACZ,iBAAiB,EAAE,CAAC,YAAY,EAAE,MAAM;AACxC,gBAAgB;AAChB,qBAAqB,UAAU;AAC/B,qBAAqB,QAAQ,CAAC,GAAG;AACjC,qBAAqB,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,IAAI,CAAC,IAAI,GAAG,CAAC;AACzF,aAAa;AACb,iBAAiB,EAAE,CAAC,YAAY,EAAE,MAAM;AACxC,gBAAgB;AAChB,qBAAqB,UAAU;AAC/B,qBAAqB,QAAQ,CAAC,GAAG;AACjC,qBAAqB,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC;AACjF,aAAa,CAAC;AACd,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,cAAc,EAAE;AAC5D,YAAY;AACZ,iBAAiB,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,GAAG,GAAG,WAAW;AACzE,iBAAiB,IAAI,CAAC,mBAAmB,EAAE,WAAW;AACtD,iBAAiB,UAAU;AAC3B,iBAAiB,QAAQ,CAAC,iBAAiB;AAC3C,iBAAiB,IAAI,CAAC,eAAe;AACrC,iBAAiB,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5C,iBAAiB,EAAE,CAAC,KAAK,EAAE,YAAY;AACvC,gBAAgB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;AAClD,aAAa,CAAC;AACd,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE;AAClD,gBAAgB,MAAM,IAAI,GAAG;AAC7B,qBAAqB,MAAM,CAAC,MAAM;AAClC,qBAAqB,KAAK,CAAC,MAAM,CAAC,IAAI;AACtC,qBAAqB,IAAI,CAAC,OAAO,EAAE,oBAAoB;AACvD,qBAAqB,IAAI,CAAC,MAAM,EAAE,SAAS;AAC3C,qBAAqB,IAAI,CAAC,SAAS,EAAE,CAAC;AACtC,qBAAqB,IAAI,CAAC,GAAG,EAAE,aAAa;AAC5C,qBAAqB,IAAI,CAAC,OAAO,EAAE,gCAAgC;AACnE,qBAAqB,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;AACnD,gBAAgB;AAChB,qBAAqB,EAAE,CAAC,YAAY,EAAE,MAAM;AAC5C,oBAAoB;AACpB,yBAAyB,UAAU;AACnC,yBAAyB,QAAQ,CAAC,GAAG;AACrC,yBAAyB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC;AACnG,iBAAiB;AACjB,qBAAqB,EAAE,CAAC,YAAY,EAAE,MAAM;AAC5C,oBAAoB;AACpB,yBAAyB,UAAU;AACnC,yBAAyB,QAAQ,CAAC,GAAG;AACrC,yBAAyB,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,IAAI,EAAE,IAAI,GAAG,CAAC;AAC3F,iBAAiB,CAAC;AAClB,gBAAgB;AAChB,qBAAqB,UAAU;AAC/B,qBAAqB,QAAQ,CAAC,iBAAiB;AAC/C,qBAAqB,IAAI,CAAC,eAAe;AACzC,qBAAqB,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,IAAI,EAAE,IAAI,GAAG;AACtF,qBAAqB,EAAE,CAAC,KAAK,EAAE,YAAY;AAC3C,oBAAoB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACtD,iBAAiB,CAAC;AAClB;AACA,SAAS,CAAC;AACV,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,UAAU,KAAK,KAAK,EAAE;AAC1D,YAAY,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE;AACtC,YAAY,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AAC9C,gBAAgB,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AACtG,gBAAgB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACzG,oBAAoB;AACpB;AACA,gBAAgB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC;AAC3G,gBAAgB,MAAM,SAAS,GAAG,GAAG;AACrC,gBAAgB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,IAAI;AAClI,gBAAgB,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AAC7C,oBAAoB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AACzC,oBAAoB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,oBAAoB,MAAM,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,oBAAoB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC5C,wBAAwB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;AAC7C;AACA,oBAAoB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;AACnG,iBAAiB,CAAC;AAClB,aAAa,CAAC;AACd,YAAY,IAAI,gBAAgB,GAAG,CAAC;AACpC,YAAY,MAAM,uBAAuB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM;AACrL,YAAY,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AAC9C,gBAAgB,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AACtG,gBAAgB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACzG,oBAAoB;AACpB;AACA,gBAAgB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC;AAC3G,gBAAgB,MAAM,WAAW,GAAG;AACpC,qBAAqB,MAAM,CAAC,GAAG;AAC/B,qBAAqB,IAAI,CAAC,OAAO,EAAE,CAAC,0CAA0C,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AACtG,qBAAqB,IAAI,CAAC,wBAAwB,EAAE,gBAAgB;AACpE,qBAAqB,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;AACnD,gBAAgB;AAChB,qBAAqB,EAAE,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC;AACvG,qBAAqB,EAAE,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACzE,gBAAgB,MAAM,SAAS,GAAG,GAAG;AACrC,gBAAgB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,IAAI;AAClI,gBAAgB;AAChB,qBAAqB,SAAS,CAAC,QAAQ;AACvC,qBAAqB,IAAI,CAAC,SAAS;AACnC,qBAAqB,KAAK;AAC1B,qBAAqB,MAAM,CAAC,QAAQ;AACpC,qBAAqB,IAAI,CAAC,OAAO,EAAE,qBAAqB;AACxD,qBAAqB,IAAI,CAAC,IAAI,EAAE,IAAI;AACpC,qBAAqB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,qBAAqB,IAAI,CAAC,GAAG,EAAE,CAAC;AAChC,qBAAqB,IAAI,CAAC,MAAM,EAAE,SAAS;AAC3C,qBAAqB,IAAI,CAAC,QAAQ,EAAE,MAAM;AAC1C,qBAAqB,IAAI,CAAC,cAAc,EAAE,CAAC;AAC3C,qBAAqB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,qBAAqB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,qBAAqB,KAAK,CAAC,QAAQ,EAAE,SAAS;AAC9C,qBAAqB,IAAI,CAAC,gBAAgB,EAAE,MAAM;AAClD,qBAAqB,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK;AACpD,oBAAoB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACrC,oBAAoB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,oBAAoB,MAAM,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,oBAAoB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;AACrE,oBAAoB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AACtD,wBAAwB,IAAI,CAAC,4BAA4B,CAAC,KAAK,EAAE,iBAAiB,CAAC;AACnF;AACA,yBAAyB;AACzB,wBAAwB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;AACrF;AACA,oBAAoB,IAAI,CAAC;AACzB,yBAAyB,MAAM,CAAC,KAAK,CAAC,MAAM;AAC5C,yBAAyB,UAAU;AACnC,yBAAyB,QAAQ,CAAC,GAAG;AACrC,yBAAyB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,IAAI,CAAC,IAAI,GAAG;AACnF,yBAAyB,IAAI,CAAC,cAAc,EAAE,CAAC;AAC/C,yBAAyB,IAAI,CAAC,QAAQ,EAAE,CAAC,uCAAuC,CAAC,CAAC;AAClF,iBAAiB;AACjB,qBAAqB,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AACjF,qBAAqB,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,KAAK;AACjD,oBAAoB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AACnD,oBAAoB,IAAI,CAAC;AACzB,yBAAyB,MAAM,CAAC,KAAK,CAAC,MAAM;AAC5C,yBAAyB,UAAU;AACnC,yBAAyB,QAAQ,CAAC,GAAG;AACrC,yBAAyB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,IAAI,CAAC;AAC3E,yBAAyB,IAAI,CAAC,cAAc,EAAE,CAAC;AAC/C,yBAAyB,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC/C,iBAAiB;AACjB,qBAAqB,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK;AAC/C,oBAAoB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACrC,oBAAoB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,oBAAoB,MAAM,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,oBAAoB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;AACrE,oBAAoB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AACtD,wBAAwB,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK;AACzE,4BAA4B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;AACvE,yBAAyB,CAAC;AAC1B;AACA,yBAAyB;AACzB,wBAAwB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC;AAC/D;AACA,iBAAiB;AACjB,qBAAqB,UAAU;AAC/B,qBAAqB,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,iBAAiB,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,IAAI,GAAG;AACvH,qBAAqB,QAAQ,CAAC,CAAC,iBAAiB,IAAI,CAAC,IAAI,GAAG;AAC5D,qBAAqB,IAAI,CAAC,eAAe;AACzC,qBAAqB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,IAAI,CAAC;AACvE,qBAAqB,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,KAAK;AAChD,oBAAoB,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAChD,wBAAwB,gBAAgB,EAAE;AAC1C,wBAAwB,IAAI,gBAAgB,IAAI,uBAAuB,EAAE;AACzE,4BAA4B,IAAI,CAAC,iCAAiC,EAAE;AACpE;AACA;AACA,iBAAiB,CAAC;AAClB,aAAa,CAAC;AACd;AACA,aAAa;AACb,YAAY,UAAU,CAAC,MAAM;AAC7B,gBAAgB,IAAI,CAAC,iCAAiC,EAAE;AACxD,aAAa,EAAE,iBAAiB,IAAI,CAAC,GAAG,GAAG,CAAC;AAC5C;AACA;AACA,IAAI,iCAAiC,GAAG;AACxC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG;AACpC,YAAY;AACZ,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACvF,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACnF,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACjF,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACjF,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACvF,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACnF,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;AAClF,QAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,yBAAyB,EAAE,KAAK,CAAC;AAC1D;AACA,IAAI,qBAAqB,CAAC,aAAa,EAAE,KAAK,EAAE;AAChD,QAAQ,IAAI,CAAC;AACb,aAAa,MAAM,CAAC,CAAC,sBAAsB,EAAE,aAAa,CAAC,oBAAoB,CAAC;AAChF,aAAa,UAAU;AACvB,aAAa,QAAQ,CAAC,GAAG;AACzB,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,IAAI,CAAC,IAAI,GAAG,CAAC;AACjF;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,CAAC;AACb,aAAa,SAAS,CAAC,qBAAqB;AAC5C,aAAa,UAAU;AACvB,aAAa,QAAQ,CAAC,GAAG;AACzB,aAAa,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC;AACzE,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,KAAK,IAAI,EAAE;AAC5D,YAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AACjF;AACA;AACA,IAAI,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE;AAC1C,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS;AACpC,YAAY,OAAO,IAAI;AACvB,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;AACvD,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE;AACpD,YAAY,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC;AACA,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;AACjE,YAAY,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C;AACA,QAAQ,OAAO,MAAM;AACrB;AACA,IAAI,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE;AAC9D,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,KAAK,KAAK,EAAE;AAC3D,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,IAAI,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC;AAC5F,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AAClC,gBAAgB,KAAK,EAAE,SAAS,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;AACrH,gBAAgB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;AAC7C,gBAAgB,UAAU,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,gBAAgB,KAAK,EAAE,KAAK;AAC5B,aAAa,CAAC;AACd,YAAY,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1C,YAAY,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAC7C,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,KAAK,IAAI,EAAE;AAChE,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;AAClD;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,SAAS,EAAE;AAClC,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS;AAC/D,QAAQ,IAAI,CAAC;AACb,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAY,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC;AAC9E;AACA,aAAa;AACb,YAAY,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AACxC;AACA,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1C,QAAQ,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC;AAC1E,QAAQ,IAAI,cAAc,CAAC,KAAK,EAAE,EAAE;AACpC,YAAY,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC3H;AACA,QAAQ,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AAC9C,QAAQ;AACR,aAAa,MAAM,CAAC,MAAM;AAC1B,aAAa,IAAI,CAAC,OAAO,EAAE,kCAAkC;AAC7D,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,aAAa,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM;AACnC,aAAa,IAAI,CAAC,QAAQ,EAAE,uDAAuD;AACnF,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC;AACnC,aAAa,IAAI,CAAC,kBAAkB,EAAE,KAAK;AAC3C,aAAa,IAAI,CAAC,SAAS,EAAE,GAAG;AAChC,aAAa,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC3C,QAAQ;AACR,aAAa,MAAM,CAAC,MAAM;AAC1B,aAAa,IAAI,CAAC,OAAO,EAAE,oCAAoC;AAC/D,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,aAAa,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK;AAClC,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,aAAa,IAAI,CAAC,QAAQ,EAAE,uDAAuD;AACnF,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC;AACnC,aAAa,IAAI,CAAC,kBAAkB,EAAE,KAAK;AAC3C,aAAa,IAAI,CAAC,SAAS,EAAE,GAAG;AAChC,aAAa,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC3C;AACA,IAAI,qBAAqB,CAAC,KAAK,EAAE;AACjC,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE;AACvF,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC;AAC/F,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,YAAY,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI;AACpD,YAAY,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG;AACnD,YAAY,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/C,YAAY;AACZ;AACA,QAAQ,MAAM,WAAW,GAAG,SAAS,CAAC,qBAAqB,EAAE;AAC7D,QAAQ,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI;AAC9C,QAAQ,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG;AAC/C,QAAQ,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,EAAE,GAAG,SAAS,CAAC,KAAK,EAAE;AAC1D,YAAY,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,EAAE;AAC1C;AACA,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3C;AACA,IAAI,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE;AAC/C,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAC7B,YAAY,MAAM,EAAE,MAAM;AAC1B,YAAY,KAAK,EAAE,SAAS;AAC5B,YAAY,KAAK,EAAE;AACnB,gBAAgB,WAAW,EAAE,KAAK;AAClC,gBAAgB,MAAM,EAAE,IAAI;AAC5B,aAAa;AACb,SAAS,CAAC;AACV;AACA,IAAI,iBAAiB,CAAC,gBAAgB,EAAE;AACxC,QAAQ,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AAChE,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACtC,aAAa,MAAM,CAAC,gBAAgB;AACpC,aAAa,MAAM,CAAC,KAAK;AACzB,aAAa,IAAI,CAAC,OAAO,EAAE,+BAA+B;AAC1D,aAAa,KAAK,CAAC,UAAU,EAAE,UAAU;AACzC,aAAa,KAAK,CAAC,MAAM,EAAE,KAAK;AAChC,aAAa,KAAK,CAAC,KAAK,EAAE,KAAK;AAC/B,aAAa,KAAK,CAAC,WAAW,EAAE,uBAAuB;AACvD,aAAa,KAAK,CAAC,YAAY,EAAE,QAAQ;AACzC,aAAa,KAAK,CAAC,kBAAkB,EAAE,yCAAyC;AAChF,aAAa,KAAK,CAAC,SAAS,EAAE,QAAQ;AACtC,aAAa,KAAK,CAAC,eAAe,EAAE,QAAQ;AAC5C,aAAa,KAAK,CAAC,YAAY,EAAE,gCAAgC;AACjE,aAAa,KAAK,CAAC,OAAO,EAAE,KAAK;AACjC,aAAa,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC;AACxC,QAAQ;AACR,aAAa,MAAM,CAAC,KAAK;AACzB,aAAa,IAAI,CAAC,OAAO,EAAE,4BAA4B;AACvD,aAAa,KAAK,CAAC,SAAS,EAAE,KAAK;AACnC,aAAa,KAAK,CAAC,eAAe,EAAE,SAAS;AAC7C,aAAa,IAAI,CAAC,8CAA8C,CAAC;AACjE,QAAQ;AACR,aAAa,MAAM,CAAC,KAAK;AACzB,aAAa,IAAI,CAAC,OAAO,EAAE,4BAA4B;AACvD,aAAa,KAAK,CAAC,WAAW,EAAE,MAAM;AACtC,aAAa,KAAK,CAAC,aAAa,EAAE,KAAK;AACvC,aAAa,KAAK,CAAC,eAAe,EAAE,QAAQ;AAC5C,aAAa,IAAI,CAAC,mBAAmB,CAAC;AACtC,QAAQ;AACR,aAAa,MAAM,CAAC,KAAK;AACzB,aAAa,IAAI,CAAC,OAAO,EAAE,4BAA4B;AACvD,aAAa,KAAK,CAAC,WAAW,EAAE,QAAQ;AACxC,aAAa,KAAK,CAAC,SAAS,EAAE,KAAK;AACnC,aAAa,IAAI,CAAC,0CAA0C,CAAC;AAC7D;AACA,IAAI,0BAA0B,CAAC,gBAAgB,EAAE;AACjD,QAAQ,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AACjE,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACtC,aAAa,MAAM,CAAC,gBAAgB;AACpC,aAAa,MAAM,CAAC,KAAK;AACzB,aAAa,IAAI,CAAC,OAAO,EAAE,kCAAkC,CAAC;AAC9D,aAAa,KAAK,CAAC,UAAU,EAAE,UAAU;AACzC,aAAa,KAAK,CAAC,MAAM,EAAE,KAAK;AAChC,aAAa,KAAK,CAAC,KAAK,EAAE,KAAK;AAC/B,aAAa,KAAK,CAAC,WAAW,EAAE,uBAAuB;AACvD,aAAa,KAAK,CAAC,YAAY,EAAE,QAAQ;AACzC,aAAa,KAAK,CAAC,kBAAkB,EAAE,yCAAyC;AAChF,aAAa,KAAK,CAAC,SAAS,EAAE,QAAQ;AACtC,aAAa,KAAK,CAAC,eAAe,EAAE,QAAQ;AAC5C,aAAa,KAAK,CAAC,YAAY,EAAE,gCAAgC;AACjE,aAAa,KAAK,CAAC,OAAO,EAAE,KAAK;AACjC,aAAa,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACzC,QAAQ;AACR,aAAa,MAAM,CAAC,KAAK;AACzB,aAAa,IAAI,CAAC,OAAO,EAAE,+BAA+B;AAC1D,aAAa,KAAK,CAAC,SAAS,EAAE,KAAK;AACnC,aAAa,KAAK,CAAC,eAAe,EAAE,SAAS;AAC7C,aAAa,IAAI,CAAC,6CAA6C,CAAC,CAAC;AACjE,QAAQ;AACR,aAAa,MAAM,CAAC,KAAK;AACzB,aAAa,IAAI,CAAC,OAAO,EAAE,+BAA+B;AAC1D,aAAa,KAAK,CAAC,WAAW,EAAE,MAAM;AACtC,aAAa,KAAK,CAAC,aAAa,EAAE,KAAK;AACvC,aAAa,KAAK,CAAC,eAAe,EAAE,QAAQ;AAC5C,aAAa,IAAI,CAAC,uBAAuB,CAAC;AAC1C,QAAQ;AACR,aAAa,MAAM,CAAC,KAAK;AACzB,aAAa,IAAI,CAAC,OAAO,EAAE,+BAA+B;AAC1D,aAAa,KAAK,CAAC,WAAW,EAAE,QAAQ;AACxC,aAAa,KAAK,CAAC,SAAS,EAAE,KAAK;AACnC,aAAa,IAAI,CAAC,iDAAiD,CAAC;AACpE;AACA,IAAI,4BAA4B,CAAC,KAAK,EAAE,iBAAiB,EAAE;AAC3D,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,KAAK,KAAK;AACzD,YAAY;AACZ,QAAQ,MAAM,WAAW,GAAG;AAC5B,YAAY,KAAK,EAAE,iBAAiB;AACpC,YAAY,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;AAC1D,YAAY,UAAU,EAAE,EAAE;AAC1B,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK;AAC/E,gBAAgB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,IAAI,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC;AAChG,gBAAgB,OAAO;AACvB,oBAAoB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;AACxE,oBAAoB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;AAC7C,oBAAoB,KAAK,EAAE,KAAK;AAChC,iBAAiB;AACjB,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;AAC1C,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AACtC,QAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AACzC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,KAAK,IAAI,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5F,YAAY,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/D;AACA;AACA,IAAI,iBAAiB,CAAC,MAAM,EAAE;AAC9B,QAAQ,QAAQ,MAAM;AACtB,YAAY,KAAK,QAAQ;AACzB,gBAAgB,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU;AACzC,YAAY,KAAK,MAAM;AACvB,gBAAgB,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;AAC5C,YAAY,KAAK,SAAS;AAC1B,gBAAgB,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU;AACzC,YAAY,KAAK,UAAU;AAC3B,gBAAgB,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW;AAC1C,YAAY,KAAK,aAAa;AAC9B,gBAAgB,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;AAC5C,YAAY,KAAK,OAAO;AACxB,gBAAgB,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS;AACxC,YAAY,KAAK,UAAU;AAC3B,gBAAgB,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW;AAC1C,YAAY,KAAK,WAAW;AAC5B,gBAAgB,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY;AAC3C,YAAY,KAAK,cAAc;AAC/B,gBAAgB,OAAO,IAAI,CAAC,EAAE,CAAC,cAAc;AAC7C,YAAY;AACZ,gBAAgB,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY;AAC3C;AACA;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AAChL,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,mRAAmR,EAAE,MAAM,EAAE,CAAC,y3CAAy3C,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AAC1hF;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AAC9H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,uBAAuB,CAAC,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,mRAAmR,EAAE,MAAM,EAAE,CAAC,y3CAAy3C,CAAC,EAAE;AACl2D,SAAS,CAAC,EAAE,CAAC;;ACl6Bb;AACA;AACA;;;;"}
1
+ {"version":3,"file":"acorex-charts-line-chart.mjs","sources":["../tmp-esm2022/line-chart/lib/line-chart.config.js","../tmp-esm2022/line-chart/lib/line-chart.component.js","../tmp-esm2022/line-chart/acorex-charts-line-chart.js"],"sourcesContent":["import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nexport const AXLineChartDefaultConfig = {\n margins: {\n top: 20,\n right: 25,\n bottom: 40,\n left: 50,\n },\n showXAxis: true,\n showYAxis: true,\n showGrid: true,\n showVerticalGrid: false,\n yAxisStartsAtZero: true,\n axisPadding: 5,\n showTooltip: true,\n lineWidth: 2,\n showPoints: true,\n pointRadius: 4,\n smoothLine: false,\n fillArea: false,\n fillOpacity: 20,\n showCrosshair: false,\n animationDuration: 1000,\n animationEasing: 'cubic-out',\n};\nexport const AX_LINE_CHART_CONFIG = new InjectionToken('AX_LINE_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'chart.lineChart', AXLineChartDefaultConfig);\n return AXLineChartDefaultConfig;\n },\n});\nexport function lineChartConfig(config = {}) {\n const result = {\n ...AXLineChartDefaultConfig,\n ...config,\n };\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvbGluZS1jaGFydC9zcmMvbGliL2xpbmUtY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHaEMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXNCO0lBQ3pELE9BQU8sRUFBRTtRQUNQLEdBQUcsRUFBRSxFQUFFO1FBQ1AsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxFQUFFO0tBQ1Q7SUFDRCxTQUFTLEVBQUUsSUFBSTtJQUNmLFNBQVMsRUFBRSxJQUFJO0lBQ2YsUUFBUSxFQUFFLElBQUk7SUFDZCxnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsV0FBVyxFQUFFLENBQUM7SUFDZCxXQUFXLEVBQUUsSUFBSTtJQUNqQixTQUFTLEVBQUUsQ0FBQztJQUNaLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFdBQVcsRUFBRSxDQUFDO0lBQ2QsVUFBVSxFQUFFLEtBQUs7SUFDakIsUUFBUSxFQUFFLEtBQUs7SUFDZixXQUFXLEVBQUUsRUFBRTtJQUNmLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsZUFBZSxFQUFFLFdBQVc7Q0FDN0IsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUFvQixzQkFBc0IsRUFBRTtJQUNoRyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ1osTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sd0JBQXdCLENBQUM7SUFDbEMsQ0FBQztDQUNGLENBQUMsQ0FBQztBQUlILE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBaUMsRUFBRTtJQUNqRSxNQUFNLE1BQU0sR0FBRztRQUNiLEdBQUcsd0JBQXdCO1FBQzNCLEdBQUcsTUFBTTtLQUNWLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhfR0xPQkFMX0NPTkZJRyB9IGZyb20gJ0BhY29yZXgvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEFYTGluZUNoYXJ0T3B0aW9uIH0gZnJvbSAnLi9saW5lLWNoYXJ0LnR5cGUnO1xuXG5leHBvcnQgY29uc3QgQVhMaW5lQ2hhcnREZWZhdWx0Q29uZmlnOiBBWExpbmVDaGFydE9wdGlvbiA9IHtcbiAgbWFyZ2luczoge1xuICAgIHRvcDogMjAsXG4gICAgcmlnaHQ6IDI1LFxuICAgIGJvdHRvbTogNDAsXG4gICAgbGVmdDogNTAsXG4gIH0sXG4gIHNob3dYQXhpczogdHJ1ZSxcbiAgc2hvd1lBeGlzOiB0cnVlLFxuICBzaG93R3JpZDogdHJ1ZSxcbiAgc2hvd1ZlcnRpY2FsR3JpZDogZmFsc2UsXG4gIHlBeGlzU3RhcnRzQXRaZXJvOiB0cnVlLFxuICBheGlzUGFkZGluZzogNSxcbiAgc2hvd1Rvb2x0aXA6IHRydWUsXG4gIGxpbmVXaWR0aDogMixcbiAgc2hvd1BvaW50czogdHJ1ZSxcbiAgcG9pbnRSYWRpdXM6IDQsXG4gIHNtb290aExpbmU6IGZhbHNlLFxuICBmaWxsQXJlYTogZmFsc2UsXG4gIGZpbGxPcGFjaXR5OiAyMCxcbiAgc2hvd0Nyb3NzaGFpcjogZmFsc2UsXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiAxMDAwLFxuICBhbmltYXRpb25FYXNpbmc6ICdjdWJpYy1vdXQnLFxufTtcblxuZXhwb3J0IGNvbnN0IEFYX0xJTkVfQ0hBUlRfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEFYTGluZUNoYXJ0T3B0aW9uPignQVhfTElORV9DSEFSVF9DT05GSUcnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbCA9IGluamVjdChBWF9HTE9CQUxfQ09ORklHKTtcbiAgICBzZXQoZ2xvYmFsLCAnY2hhcnQubGluZUNoYXJ0JywgQVhMaW5lQ2hhcnREZWZhdWx0Q29uZmlnKTtcbiAgICByZXR1cm4gQVhMaW5lQ2hhcnREZWZhdWx0Q29uZmlnO1xuICB9LFxufSk7XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxMaW5lQ2hhcnRDb25maWcgPSBQYXJ0aWFsPEFYTGluZUNoYXJ0T3B0aW9uPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVDaGFydENvbmZpZyhjb25maWc6IFBhcnRpYWxMaW5lQ2hhcnRDb25maWcgPSB7fSk6IEFYTGluZUNoYXJ0T3B0aW9uIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIC4uLkFYTGluZUNoYXJ0RGVmYXVsdENvbmZpZyxcbiAgICAuLi5jb25maWcsXG4gIH07XG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=","import { NXComponent } from '@acorex/cdk/common';\nimport { AX_CHART_COLOR_PALETTE, getChartColor } from '@acorex/charts';\nimport { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { AX_LINE_CHART_CONFIG } from './line-chart.config';\nimport * as i0 from \"@angular/core\";\n/**\n * Line Chart Component for rendering data as lines with interactive hover effects and animations\n */\nexport class AXLineChartComponent extends NXComponent {\n data = input([]);\n options = input({});\n pointClick = output();\n chartContainerEl = viewChild.required('chartContainer');\n d3;\n svg;\n chart;\n xScale;\n yScale;\n xAxis;\n yAxis;\n width;\n height;\n margin = { top: 20, right: 25, bottom: 40, left: 50 };\n _tooltipVisible = signal(false);\n _tooltipPosition = signal({ x: 0, y: 0 });\n _tooltipData = signal({\n title: '',\n value: '0',\n percentage: '0%',\n color: '',\n });\n _initialized = signal(false);\n _rendered = signal(false);\n hiddenSeries = new Set();\n _fullNormalizedData = [];\n tooltipVisible = this._tooltipVisible.asReadonly();\n tooltipPosition = this._tooltipPosition.asReadonly();\n tooltipData = this._tooltipData.asReadonly();\n // Inject configuration\n configToken = inject(AX_LINE_CHART_CONFIG);\n // Inject the chart colors\n chartColors = inject(AX_CHART_COLOR_PALETTE);\n // Inject AXPlatform\n platform = inject(AXPlatform);\n effectiveOptions = computed(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n });\n ngOnInit() {\n this.loadD3();\n }\n #effect = effect(() => {\n const rawData = this.data();\n if (Array.isArray(rawData)) {\n this._fullNormalizedData = rawData.map((s, i) => ({ ...s, originalIndex: i }));\n }\n else if (rawData && 'data' in rawData) {\n this._fullNormalizedData = [{ ...rawData, originalIndex: 0 }];\n }\n else {\n this._fullNormalizedData = [];\n }\n this.effectiveOptions();\n if (this._rendered()) {\n this.updateChart();\n }\n });\n ngAfterViewInit() {\n this._initialized.set(true);\n if (this.d3 && this.chartContainerEl()) {\n this.createChart();\n this._rendered.set(true);\n }\n }\n ngOnDestroy() {\n this.cleanupChart();\n }\n // AXChartLegendCompatible Implementation\n getLegendItems() {\n const totalSum = this._fullNormalizedData.reduce((sum, series) => {\n return sum + series.data.reduce((sSum, p) => sSum + p.y, 0);\n }, 0);\n return this._fullNormalizedData.map((series) => {\n const seriesSum = series.data.reduce((sum, p) => sum + p.y, 0);\n const percentage = totalSum > 0 ? (seriesSum / totalSum) * 100 : 0;\n return {\n id: series.id || series.label || `series-${series.originalIndex}`,\n name: series.label || `Series ${series.originalIndex + 1}`,\n value: seriesSum,\n color: series.lineColor || getChartColor(series.originalIndex, this.chartColors),\n hidden: this.hiddenSeries.has(series.id || series.label || `series-${series.originalIndex}`),\n percentage: parseFloat(percentage.toFixed(2)),\n };\n });\n }\n highlightSegment(id) {\n if (!this.svg)\n return;\n const allSeriesGroups = this.svg.selectAll('g.ax-line-chart-series');\n const allPointsGroups = this.svg.selectAll('g.ax-line-chart-points');\n if (id === null) {\n allSeriesGroups.classed('ax-chart-dimmed', false).style('opacity', 1);\n allPointsGroups.classed('ax-chart-dimmed', false).style('opacity', 1);\n allSeriesGroups\n .selectAll('.ax-line-chart-line')\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2)\n .classed('ax-chart-highlighted-path', false);\n allPointsGroups\n .selectAll('circle.ax-line-chart-point')\n .attr('r', this.effectiveOptions().pointRadius ?? 4)\n .classed('ax-chart-highlighted-point', false);\n return;\n }\n allSeriesGroups.classed('ax-chart-dimmed', true).style('opacity', 0.3);\n allPointsGroups.classed('ax-chart-dimmed', true).style('opacity', 0.3);\n const targetSeriesGroup = this.svg.selectAll(`g.ax-line-chart-series[data-series-identifier=\"${id}\"]`);\n const targetPointsGroup = this.svg.selectAll(`g.ax-line-chart-points[data-series-identifier=\"${id}\"]`);\n targetSeriesGroup.classed('ax-chart-dimmed', false).style('opacity', 1);\n targetPointsGroup.classed('ax-chart-dimmed', false).style('opacity', 1);\n targetSeriesGroup\n .selectAll('.ax-line-chart-line')\n .attr('stroke-width', (this.effectiveOptions().lineWidth ?? 2) * 1.5)\n .classed('ax-chart-highlighted-path', true);\n targetPointsGroup\n .selectAll('circle.ax-line-chart-point')\n .attr('r', (this.effectiveOptions().pointRadius ?? 4) * 1.5)\n .classed('ax-chart-highlighted-point', true);\n }\n toggleSegment(id) {\n const seriesId = id;\n if (this.hiddenSeries.has(seriesId)) {\n this.hiddenSeries.delete(seriesId);\n }\n else {\n this.hiddenSeries.add(seriesId);\n }\n this.updateChart();\n return !this.hiddenSeries.has(seriesId);\n }\n async loadD3() {\n try {\n this.d3 = await import('d3');\n if (this._initialized() && this.chartContainerEl()) {\n this.createChart();\n this._rendered.set(true);\n }\n }\n catch (error) {\n console.error('Failed to load D3.js:', error);\n }\n }\n createChart() {\n if (!this.d3 || !this.chartContainerEl()?.nativeElement)\n return;\n const containerElement = this.chartContainerEl().nativeElement;\n const allSeriesData = this._fullNormalizedData;\n this.d3.select(containerElement).select('svg').remove();\n if (allSeriesData.length === 0 || allSeriesData.every((series) => !series.data || series.data.length === 0)) {\n this.showNoDataMessage(containerElement);\n return;\n }\n const visibleDataForRendering = allSeriesData.filter((series) => !this.hiddenSeries.has(series.id || series.label || `series-${series.originalIndex}`));\n if (visibleDataForRendering.length === 0) {\n // All data is present, but all series are hidden by the legend\n this.showAllSeriesHiddenMessage(containerElement);\n // Still setup basic SVG and chart group for consistency if needed, or return\n // For now, we will show the message and return, as scales/axes can't be drawn.\n return;\n }\n // Scales should be based on potentially visible data to avoid errors with empty domains\n // If all are hidden, scales might become an issue. Let's use all data for scales,\n // and rendering will handle visibility.\n const dataForScales = allSeriesData.flatMap((s) => s.data).length > 0 ? allSeriesData : [{ data: [{ x: 0, y: 0 }] }];\n const chartOptions = this.effectiveOptions();\n this.setupDimensions(containerElement, chartOptions);\n // Use allSeriesData for domain calculation to keep scales consistent even if some series are hidden\n // but filter out series with no data points for scale calculation.\n const dataForScaleSetup = allSeriesData.filter((s) => s.data && s.data.length > 0);\n if (dataForScaleSetup.length === 0) {\n // If after filtering, there's no data with points (e.g. all series have empty data arrays)\n this.showNoDataMessage(containerElement);\n return;\n }\n this.setupScales(dataForScaleSetup);\n this.createAxes(chartOptions);\n this.renderLines(allSeriesData); // RenderLines will handle hiding based on hiddenSeries\n }\n updateChart() {\n this.createChart();\n }\n cleanupChart() {\n if (this.svg) {\n this.d3?.select(this.chartContainerEl()?.nativeElement).selectAll('svg').remove();\n this.svg = null;\n this.chart = null;\n }\n this._tooltipVisible.set(false);\n }\n setupDimensions(containerElement, options) {\n this.calculateMargins(options, containerElement.clientWidth);\n const containerWidth = containerElement.clientWidth;\n const containerHeight = containerElement.clientHeight;\n const minDim = Math.min(200, containerWidth, containerHeight);\n if (options.width && options.height) {\n this.width = options.width - this.margin.left - this.margin.right;\n this.height = options.height - this.margin.top - this.margin.bottom;\n }\n else {\n this.width = Math.max(containerWidth, minDim) - this.margin.left - this.margin.right;\n this.height = Math.max(containerHeight, minDim) - this.margin.top - this.margin.bottom;\n }\n this.width = Math.max(this.width, 100);\n this.height = Math.max(this.height, 100);\n const totalWidth = this.width + this.margin.left + this.margin.right;\n const totalHeight = this.height + this.margin.top + this.margin.bottom;\n const svg = this.d3\n .select(containerElement)\n .append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${totalWidth} ${totalHeight}`)\n .attr('preserveAspectRatio', 'xMidYMid meet')\n .attr('style', `\n width: 100%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n overflow: visible;\n `);\n this.svg = svg;\n this.chart = this.svg.append('g').attr('transform', `translate(${this.margin.left},${this.margin.top})`);\n }\n calculateMargins(options, containerWidth) {\n this.margin = {\n top: options.margins?.top ?? 20,\n right: options.margins?.right ?? 25,\n bottom: options.margins?.bottom ?? 40,\n left: options.margins?.left ?? 50,\n };\n const allDataPoints = this._fullNormalizedData.flatMap((series) => series.data);\n if (allDataPoints.length > 0) {\n const allNumericX = allDataPoints.every((d) => typeof d.x === 'number');\n if (!allNumericX) {\n const visibleSeries = this._fullNormalizedData.filter((s) => !this.hiddenSeries.has(s.id || s.label || `series-${s.originalIndex}`));\n const allXValues = new Set(visibleSeries.flatMap((series) => series.data.map((d) => String(d.x))));\n const labelCount = allXValues.size;\n if (labelCount > 0 && containerWidth > 0) {\n const workingWidth = containerWidth - this.margin.left - this.margin.right;\n if (workingWidth > 0) {\n const availableWidthPerLabel = workingWidth / labelCount;\n const labels = Array.from(allXValues);\n const longestLabel = labels.reduce((a, b) => (a.length > b.length ? a : b), '');\n const estimatedFontSize = Math.max(11, Math.min(15, Math.round(workingWidth / 45)));\n const estimatedLongestLabelWidth = longestLabel.length * estimatedFontSize * 0.6;\n if (estimatedLongestLabelWidth > availableWidthPerLabel) {\n const requiredExtraMargin = estimatedLongestLabelWidth * Math.sin(Math.PI / 4) + 10;\n this.margin.bottom += Math.min(60, requiredExtraMargin);\n }\n }\n }\n }\n }\n if (options.xAxisLabel) {\n const xLabelLength = options.xAxisLabel.length;\n const extraBottomMargin = Math.min(20, Math.max(10, xLabelLength * 0.8));\n this.margin.bottom = Math.max(this.margin.bottom, 40 + extraBottomMargin);\n }\n if (options.yAxisLabel) {\n const yLabelLength = options.yAxisLabel.length;\n const extraLeftMargin = Math.min(20, Math.max(10, yLabelLength * 0.8));\n this.margin.left = Math.max(this.margin.left, 50 + extraLeftMargin);\n }\n if (options.showXAxis !== false) {\n this.margin.bottom = Math.max(this.margin.bottom, 45);\n }\n if (options.showYAxis !== false) {\n this.margin.left = Math.max(this.margin.left, 55);\n }\n }\n setupScales(data) {\n // Expects already filtered data for scales\n const chartOptions = this.effectiveOptions();\n const padding = chartOptions.axisPadding ?? 0;\n const paddingMultiplier = padding / 100;\n // Ensure data is not empty for scale domain calculation\n const allDataPoints = data.length > 0 ? data.flatMap((series) => series.data) : [{ x: 0, y: 0 }];\n if (allDataPoints.length === 0) {\n // Should ideally not happen if createChart filters correctly\n allDataPoints.push({ x: 0, y: 0 }); // Default fallback to prevent crash with empty domain\n }\n const allNumericX = allDataPoints.every((d) => typeof d.x === 'number');\n if (allNumericX) {\n const xMin = this.d3.min(allDataPoints, (d) => d.x) ?? 0;\n const xMax = this.d3.max(allDataPoints, (d) => d.x) ?? 0;\n if (xMin === xMax) {\n this.xScale = this.d3\n .scaleLinear()\n .domain([xMin - 1, xMax + 1])\n .range([0, this.width]);\n }\n else {\n this.xScale = this.d3.scaleLinear().domain([xMin, xMax]).range([0, this.width]);\n }\n }\n else {\n this.xScale = this.d3\n .scaleBand()\n .domain(allDataPoints.map((d) => String(d.x)))\n .range([0, this.width])\n .paddingInner(0.2)\n .paddingOuter(0);\n }\n const yAxisStartsAtZero = chartOptions.yAxisStartsAtZero !== false;\n let yMin = this.d3.min(allDataPoints, (d) => d.y) ?? 0;\n if (yAxisStartsAtZero) {\n yMin = Math.min(0, yMin);\n }\n const yMax = this.d3.max(allDataPoints, (d) => d.y) ?? 0;\n const yRange = yMax - yMin;\n this.yScale = this.d3\n .scaleLinear()\n .domain([yMin, yMax + yRange * paddingMultiplier])\n .nice()\n .range([this.height, 0]);\n }\n createAxes(options) {\n const showXAxis = options.showXAxis !== false;\n const showYAxis = options.showYAxis !== false;\n const showGrid = options.showGrid !== false;\n const isBandScale = this.xScale.bandwidth !== undefined;\n const isRtl = this.platform.isRtl();\n const axesGroup = this.chart.append('g').attr('class', 'ax-line-chart-axes');\n if (showXAxis) {\n this.xAxis = axesGroup\n .append('g')\n .attr('class', 'ax-line-chart-axis-x')\n .attr('transform', `translate(0,${this.height})`)\n .call(this.d3.axisBottom(this.xScale).tickSize(5).tickPadding(8));\n // Style the x-axis path and lines\n this.xAxis.selectAll('path').attr('stroke', 'rgba(var(--ax-comp-line-chart-axis-color), 0.2)');\n this.xAxis\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n const dynamicXAxisTickFontSize = Math.max(11, Math.min(15, Math.round(this.width / 45)));\n const xAxisTicks = this.xAxis\n .selectAll('text')\n .style('font-size', `${dynamicXAxisTickFontSize}px`)\n .style('font-weight', '400')\n .style('fill', 'rgba(var(--ax-comp-line-chart-labels-color), 0.7)');\n // Automatically rotate labels if they are likely to overlap\n if (isBandScale && this.xScale.domain().length > 0) {\n const step = this.xScale.step();\n const longestLabel = this.xScale.domain().reduce((a, b) => (a.length > b.length ? a : b), '');\n // Using 0.6 as a better estimate for char width-to-height ratio\n const estimatedLongestLabelWidth = longestLabel.length * dynamicXAxisTickFontSize * 0.6;\n if (estimatedLongestLabelWidth > step) {\n xAxisTicks\n .attr('transform', 'rotate(-45)')\n .style('text-anchor', 'end')\n .attr('dx', '-0.8em')\n .attr('dy', '0.15em');\n }\n }\n if (options.xAxisLabel) {\n const labelY = this.height + this.margin.bottom * 0.7;\n axesGroup\n .append('text')\n .attr('class', 'ax-line-chart-axis-label ax-x-axis-label')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('x', this.width / 2)\n .attr('y', labelY)\n .attr('transform', 'translate(0, 5)')\n .attr('style', `\n font-size: 14px;\n font-weight: 500;\n fill: rgb(var(--ax-comp-line-chart-text-color));\n pointer-events: none;\n `)\n .text(options.xAxisLabel);\n }\n }\n if (showYAxis) {\n this.yAxis = axesGroup\n .append('g')\n .attr('class', 'ax-line-chart-axis-y')\n .call(this.d3.axisLeft(this.yScale).tickSize(5).tickPadding(8));\n // Style the y-axis path and lines\n this.yAxis.selectAll('path').attr('stroke', 'rgba(var(--ax-comp-line-chart-axis-color), 0.2)');\n this.yAxis\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n const dynamicYAxisTickFontSize = Math.max(11, Math.min(15, Math.round(this.height / 30)));\n const yTickTexts = this.yAxis.selectAll('text').attr('style', `\n font-size: ${dynamicYAxisTickFontSize}px;\n font-weight: 400;\n fill: rgba(var(--ax-comp-line-chart-labels-color), 0.7);\n `);\n if (isRtl) {\n yTickTexts.attr('text-anchor', 'start');\n }\n if (options.yAxisLabel) {\n const labelX = -this.height / 2;\n const labelY = -this.margin.left * 0.8;\n axesGroup\n .append('text')\n .attr('class', 'ax-line-chart-axis-label ax-y-axis-label')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('transform', 'rotate(-90) translate(-5, 0)')\n .attr('x', labelX)\n .attr('y', labelY)\n .attr('style', `\n font-size: 14px;\n font-weight: 500;\n fill: rgb(var(--ax-comp-line-chart-text-color));\n pointer-events: none;\n `)\n .text(options.yAxisLabel);\n }\n }\n if (showGrid) {\n const gridGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-grid-container')\n .attr('pointer-events', 'none');\n const yGrid = gridGroup\n .append('g')\n .attr('class', 'ax-line-chart-grid')\n .call(this.d3\n .axisLeft(this.yScale)\n .tickSize(-this.width)\n .tickFormat(() => '')\n .tickValues(this.yScale.ticks()));\n // Style the grid path and lines\n yGrid.selectAll('path').attr('stroke-width', '0');\n yGrid\n .selectAll('.tick')\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.2)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n if (options.showVerticalGrid) {\n const xGrid = gridGroup\n .append('g')\n .attr('class', 'ax-line-chart-grid-vertical')\n .attr('transform', `translate(0,${this.height})`)\n .call(this.d3\n .axisBottom(this.xScale)\n .tickSize(-this.height)\n .tickFormat(() => '')\n .tickValues(isBandScale ? undefined : this.xScale.ticks()));\n // Style the vertical grid path and lines\n xGrid.selectAll('path').attr('stroke-width', '0');\n xGrid\n .selectAll('.tick')\n .selectAll('line')\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.15)')\n .attr('stroke-dasharray', '2,2')\n .attr('stroke-opacity', '0.5');\n }\n }\n }\n renderLines(allSeriesData) {\n const isBandScale = this.xScale.bandwidth !== undefined;\n const getX = (d) => {\n if (isBandScale) {\n return this.xScale(String(d.x)) + this.xScale.bandwidth() / 2;\n }\n else {\n return this.xScale(d.x);\n }\n };\n const lineGenerator = this.d3\n .line()\n .x(getX)\n .y((d) => this.yScale(d.y));\n if (this.effectiveOptions().smoothLine !== false) {\n lineGenerator.curve(this.d3.curveMonotoneX);\n }\n const areaGenerator = this.d3\n .area()\n .x(getX)\n .y0(this.height)\n .y1((d) => this.yScale(d.y));\n if (this.effectiveOptions().smoothLine !== false) {\n areaGenerator.curve(this.d3.curveMonotoneX);\n }\n this.svg.attr('class', 'ax-line-chart-animating');\n const allSeriesGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-all-series')\n .attr('pointer-events', 'none');\n const allPointsGroup = this.chart\n .append('g')\n .attr('class', 'ax-line-chart-all-points')\n .attr('pointer-events', 'none');\n if (this.effectiveOptions().showCrosshair === true) {\n this.chart.append('g').attr('class', 'ax-line-chart-crosshair').attr('pointer-events', 'none');\n }\n const animationDuration = this.effectiveOptions().animationDuration;\n const animationEasing = this.getEasingFunction(this.effectiveOptions().animationEasing);\n allSeriesData.forEach((series) => {\n const seriesIdentifier = series.id || series.label || `series-${series.originalIndex}`;\n if (this.hiddenSeries.has(seriesIdentifier)) {\n this.chart.selectAll(`.ax-line-chart-series[data-series-identifier=\"${seriesIdentifier}\"]`).remove();\n this.chart.selectAll(`.ax-line-chart-points[data-series-identifier=\"${seriesIdentifier}\"]`).remove();\n return;\n }\n if (!series.data || series.data.length === 0)\n return;\n const seriesGroup = allSeriesGroup\n .append('g')\n .attr('class', `ax-line-chart-series ax-line-chart-series-${series.originalIndex}`)\n .attr('data-series-identifier', seriesIdentifier)\n .attr('pointer-events', 'none');\n const lineColor = series.lineColor || getChartColor(series.originalIndex, this.chartColors);\n const fillColor = series.fillColor || lineColor;\n const line = seriesGroup\n .append('path')\n .datum(series.data)\n .attr('class', 'ax-line-chart-line')\n .attr('stroke', lineColor)\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-linecap', 'round')\n .attr('d', lineGenerator)\n .attr('fill', 'none')\n .attr('style', 'transition: stroke-width 0.3s ease;')\n .attr('pointer-events', 'none');\n line\n .on('mouseenter', () => {\n line\n .transition()\n .duration(150)\n .attr('stroke-width', (this.effectiveOptions().lineWidth ?? 2) * 1.5);\n })\n .on('mouseleave', () => {\n line\n .transition()\n .duration(150)\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2);\n });\n const totalLength = line.node().getTotalLength();\n line\n .attr('stroke-dasharray', totalLength + ' ' + totalLength)\n .attr('stroke-dashoffset', totalLength)\n .transition()\n .duration(animationDuration)\n .ease(animationEasing)\n .attr('stroke-dashoffset', 0)\n .on('end', function () {\n line.attr('pointer-events', 'all');\n });\n if (this.effectiveOptions().fillArea) {\n const area = seriesGroup\n .append('path')\n .datum(series.data)\n .attr('class', 'ax-line-chart-area')\n .attr('fill', fillColor)\n .attr('opacity', 0)\n .attr('d', areaGenerator)\n .attr('style', 'transition: opacity 0.3s ease;')\n .attr('pointer-events', 'none');\n area\n .on('mouseenter', () => {\n area\n .transition()\n .duration(150)\n .attr('opacity', ((this.effectiveOptions().fillOpacity ?? 20) / 100) * 1.5);\n })\n .on('mouseleave', () => {\n area\n .transition()\n .duration(150)\n .attr('opacity', (this.effectiveOptions().fillOpacity ?? 20) / 100);\n });\n area\n .transition()\n .duration(animationDuration)\n .ease(animationEasing)\n .attr('opacity', (this.effectiveOptions().fillOpacity ?? 20) / 100)\n .on('end', function () {\n area.attr('pointer-events', 'all');\n });\n }\n });\n if (this.effectiveOptions().showPoints !== false) {\n const pointMap = new Map();\n allSeriesData.forEach((series) => {\n const seriesIdentifier = series.id || series.label || `series-${series.originalIndex}`;\n if (this.hiddenSeries.has(seriesIdentifier) || !series.data || series.data.length === 0) {\n return;\n }\n const lineColor = series.lineColor || getChartColor(series.originalIndex, this.chartColors);\n const maxPoints = 100;\n const pointData = series.data.length > maxPoints ? this.getReducedDataPoints(series.data, maxPoints) : series.data;\n pointData.forEach((point) => {\n const x = getX(point);\n const y = this.yScale(point.y);\n const key = `${Math.round(x * 10) / 10},${Math.round(y * 10) / 10}`;\n if (!pointMap.has(key)) {\n pointMap.set(key, []);\n }\n pointMap.get(key)?.push({ point, series, originalIndex: series.originalIndex });\n });\n });\n let animationCounter = 0;\n const totalVisibleSeriesCount = allSeriesData.filter((s) => !this.hiddenSeries.has(s.id || s.label || `series-${s.originalIndex}`) && s.data && s.data.length > 0).length;\n allSeriesData.forEach((series) => {\n const seriesIdentifier = series.id || series.label || `series-${series.originalIndex}`;\n if (this.hiddenSeries.has(seriesIdentifier) || !series.data || series.data.length === 0) {\n return;\n }\n const lineColor = series.lineColor || getChartColor(series.originalIndex, this.chartColors);\n const pointsGroup = allPointsGroup\n .append('g')\n .attr('class', `ax-line-chart-points ax-line-chart-points-${series.originalIndex}`)\n .attr('data-series-identifier', seriesIdentifier)\n .attr('pointer-events', 'none');\n pointsGroup\n .on('mouseenter', () => this.handlePointGroupEnter(series.originalIndex, lineColor))\n .on('mouseleave', () => this.handlePointGroupLeave());\n const maxPoints = 100;\n const pointData = series.data.length > maxPoints ? this.getReducedDataPoints(series.data, maxPoints) : series.data;\n pointsGroup\n .selectAll('circle')\n .data(pointData)\n .enter()\n .append('circle')\n .attr('class', 'ax-line-chart-point')\n .attr('cx', getX)\n .attr('cy', (d) => this.yScale(d.y))\n .attr('r', 0)\n .attr('fill', lineColor)\n .attr('stroke', '#fff')\n .attr('stroke-width', 1)\n .attr('data-x', (d) => d.x)\n .attr('data-y', (d) => d.y)\n .style('cursor', 'pointer')\n .attr('pointer-events', 'none')\n .on('mouseenter', (event, d) => {\n const x = getX(d);\n const y = this.yScale(d.y);\n const key = `${Math.round(x * 10) / 10},${Math.round(y * 10) / 10}`;\n const overlappingPoints = pointMap.get(key) || [];\n if (overlappingPoints.length > 1) {\n this.handleOverlappingPointsHover(event, overlappingPoints);\n }\n else {\n this.handlePointHover(event, d, series, series.originalIndex);\n }\n this.d3\n .select(event.target)\n .transition()\n .duration(150)\n .attr('r', (this.effectiveOptions().pointRadius ?? 4) * 1.5)\n .attr('stroke-width', 2)\n .attr('stroke', `rgb(var(--ax-comp-line-chart-bg-color))`);\n })\n .on('mousemove', (event) => this.updateTooltipPosition(event))\n .on('mouseleave', (event) => {\n this._tooltipVisible.set(false);\n this.d3\n .select(event.target)\n .transition()\n .duration(150)\n .attr('r', this.effectiveOptions().pointRadius ?? 4)\n .attr('stroke-width', 1)\n .attr('stroke', '#fff');\n })\n .on('click', (event, d) => {\n const x = getX(d);\n const y = this.yScale(d.y);\n const key = `${Math.round(x * 10) / 10},${Math.round(y * 10) / 10}`;\n const overlappingPoints = pointMap.get(key) || [];\n if (overlappingPoints.length > 1) {\n overlappingPoints.forEach(({ point, series }) => {\n this.handlePointClick(event, point, series);\n });\n }\n else {\n this.handlePointClick(event, d, series);\n }\n })\n .transition()\n .delay((d, i) => i * Math.min(50, (animationDuration || 0) * 0.05) + (animationDuration || 0) * 0.5)\n .duration((animationDuration || 0) * 0.3)\n .ease(animationEasing)\n .attr('r', this.effectiveOptions().pointRadius ?? 4)\n .on('end', (d, i, nodes) => {\n if (i === nodes.length - 1) {\n animationCounter++;\n if (animationCounter >= totalVisibleSeriesCount) {\n this.enablePointerEventsAfterAnimation();\n }\n }\n });\n });\n }\n else {\n setTimeout(() => {\n this.enablePointerEventsAfterAnimation();\n }, animationDuration || 0 + 100);\n }\n }\n enablePointerEventsAfterAnimation() {\n if (!this.chart || !this.svg)\n return;\n this.chart.selectAll('.ax-line-chart-all-series').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-series').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-line').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-area').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-all-points').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-points').attr('pointer-events', 'all');\n this.chart.selectAll('.ax-line-chart-point').attr('pointer-events', 'all');\n this.svg.classed('ax-line-chart-animating', false);\n }\n handlePointGroupEnter(originalIndex, color) {\n this.chart\n .select(`.ax-line-chart-series-${originalIndex} .ax-line-chart-line`)\n .transition()\n .duration(150)\n .attr('stroke-width', (this.effectiveOptions().lineWidth ?? 2) * 1.5);\n }\n handlePointGroupLeave() {\n this.chart\n .selectAll('.ax-line-chart-line')\n .transition()\n .duration(150)\n .attr('stroke-width', this.effectiveOptions().lineWidth ?? 2);\n if (this.effectiveOptions().showCrosshair === true) {\n this.chart.select('.ax-line-chart-crosshair').selectAll('*').remove();\n }\n }\n getReducedDataPoints(data, maxPoints) {\n if (data.length <= maxPoints)\n return data;\n const result = [];\n const step = Math.ceil(data.length / maxPoints);\n for (let i = 0; i < data.length; i += step) {\n result.push(data[i]);\n }\n if (result[result.length - 1] !== data[data.length - 1]) {\n result.push(data[data.length - 1]);\n }\n return result;\n }\n handlePointHover(event, dataPoint, series, originalIndex) {\n if (this.effectiveOptions().showTooltip !== false) {\n const color = series.lineColor || getChartColor(originalIndex, this.chartColors);\n this._tooltipData.set({\n title: dataPoint.tooltipLabel || series.tooltipLabel || series.label || `Series ${originalIndex + 1}`,\n value: dataPoint.y.toString(),\n seriesName: `x: ${dataPoint.x}`,\n color: color,\n });\n this._tooltipVisible.set(true);\n this.updateTooltipPosition(event);\n if (this.effectiveOptions().showCrosshair === true) {\n this.showCrosshairLines(dataPoint);\n }\n }\n }\n showCrosshairLines(dataPoint) {\n const isBandScale = this.xScale.bandwidth !== undefined;\n let x;\n if (isBandScale) {\n x = this.xScale(String(dataPoint.x)) + this.xScale.bandwidth() / 2;\n }\n else {\n x = this.xScale(dataPoint.x);\n }\n const y = this.yScale(dataPoint.y);\n let crosshairGroup = this.chart.select('.ax-line-chart-crosshair');\n if (crosshairGroup.empty()) {\n crosshairGroup = this.chart.append('g').attr('class', 'ax-line-chart-crosshair').attr('pointer-events', 'none');\n }\n crosshairGroup.selectAll('*').remove();\n crosshairGroup\n .append('line')\n .attr('class', 'ax-line-chart-crosshair-vertical')\n .attr('x1', x)\n .attr('y1', 0)\n .attr('x2', x)\n .attr('y2', this.height)\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.5)')\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', '3,3')\n .attr('opacity', 0.7)\n .attr('pointer-events', 'none');\n crosshairGroup\n .append('line')\n .attr('class', 'ax-line-chart-crosshair-horizontal')\n .attr('x1', 0)\n .attr('y1', y)\n .attr('x2', this.width)\n .attr('y2', y)\n .attr('stroke', 'rgba(var(--ax-comp-line-chart-grid-lines-color), 0.5)')\n .attr('stroke-width', 1)\n .attr('stroke-dasharray', '3,3')\n .attr('opacity', 0.7)\n .attr('pointer-events', 'none');\n }\n updateTooltipPosition(event) {\n const container = this.chartContainerEl().nativeElement.getBoundingClientRect();\n const tooltipEl = this.chartContainerEl().nativeElement.querySelector('.chart-tooltip');\n if (!tooltipEl) {\n const x = event.clientX - container.left;\n const y = event.clientY - container.top;\n this._tooltipPosition.set({ x, y });\n return;\n }\n const tooltipRect = tooltipEl.getBoundingClientRect();\n let x = event.clientX - container.left;\n const y = event.clientY - container.top;\n if (x + tooltipRect.width + 20 > container.width) {\n x = x - tooltipRect.width - 15;\n }\n this._tooltipPosition.set({ x, y });\n }\n handlePointClick(event, dataPoint, series) {\n this.pointClick.emit({\n series: series, // series still refers to the full series data with originalIndex\n point: dataPoint,\n event: {\n nativeEvent: event,\n sender: this,\n },\n });\n }\n showNoDataMessage(containerElement) {\n this.d3.select(containerElement).selectAll('*').remove();\n const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'ax-line-chart-no-data-message')\n .style('position', 'absolute')\n .style('left', '50%')\n .style('top', '50%')\n .style('transform', 'translate(-50%, -50%)')\n .style('text-align', 'center')\n .style('background-color', 'rgb(var(--ax-comp-line-chart-bg-color))')\n .style('padding', '1.5rem')\n .style('border-radius', '0.5rem')\n .style('box-shadow', '0 2px 12px rgba(0, 0, 0, 0.08)')\n .style('width', '80%')\n .style('max-width', '300px');\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-no-data-icon')\n .style('opacity', '0.6')\n .style('margin-bottom', '0.75rem')\n .html('<i class=\"fa-light fa-chart-line fa-2x\"></i>');\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-no-data-text')\n .style('font-size', '1rem')\n .style('font-weight', '600')\n .style('margin-bottom', '0.5rem')\n .text('No data available');\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-no-data-help')\n .style('font-size', '0.8rem')\n .style('opacity', '0.6')\n .text('Please provide data to display the chart');\n }\n showAllSeriesHiddenMessage(containerElement) {\n this.d3.select(containerElement).selectAll('*').remove(); // Clear existing chart elements\n const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'ax-line-chart-all-hidden-message') // Different class\n .style('position', 'absolute')\n .style('left', '50%')\n .style('top', '50%')\n .style('transform', 'translate(-50%, -50%)')\n .style('text-align', 'center')\n .style('background-color', 'rgb(var(--ax-comp-line-chart-bg-color))')\n .style('padding', '1.5rem')\n .style('border-radius', '0.5rem')\n .style('box-shadow', '0 2px 12px rgba(0, 0, 0, 0.08)')\n .style('width', '80%')\n .style('max-width', '350px'); // Slightly wider for longer text\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-all-hidden-icon')\n .style('opacity', '0.6')\n .style('margin-bottom', '0.75rem')\n .html('<i class=\"fa-light fa-eye-slash fa-2x\"></i>'); // Different icon\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-all-hidden-text')\n .style('font-size', '1rem')\n .style('font-weight', '600')\n .style('margin-bottom', '0.5rem')\n .text('All series are hidden');\n messageContainer\n .append('div')\n .attr('class', 'ax-line-chart-all-hidden-help')\n .style('font-size', '0.8rem')\n .style('opacity', '0.6')\n .text('Click legend items to show series in the chart.');\n }\n handleOverlappingPointsHover(event, overlappingPoints) {\n if (this.effectiveOptions().showTooltip === false)\n return;\n const tooltipData = {\n title: 'Multiple Series',\n value: overlappingPoints[0].point.y.toString(),\n seriesName: '',\n color: '',\n items: overlappingPoints.map(({ point, series, originalIndex }) => {\n const color = series.lineColor || getChartColor(originalIndex, this.chartColors);\n return {\n label: series.label || `Series ${originalIndex + 1}`,\n value: point.y.toString(),\n color: color,\n };\n }),\n };\n this._tooltipData.set(tooltipData);\n this._tooltipVisible.set(true);\n this.updateTooltipPosition(event);\n if (this.effectiveOptions().showCrosshair === true && overlappingPoints.length > 0) {\n this.showCrosshairLines(overlappingPoints[0].point);\n }\n }\n getEasingFunction(easing) {\n switch (easing) {\n case 'linear':\n return this.d3.easeLinear;\n case 'ease':\n return this.d3.easePolyInOut;\n case 'ease-in':\n return this.d3.easePolyIn;\n case 'ease-out':\n return this.d3.easePolyOut;\n case 'ease-in-out':\n return this.d3.easePolyInOut;\n case 'cubic':\n return this.d3.easeCubic;\n case 'cubic-in':\n return this.d3.easeCubicIn;\n case 'cubic-out':\n return this.d3.easeCubicOut;\n case 'cubic-in-out':\n return this.d3.easeCubicInOut;\n default:\n return this.d3.easeCubicOut;\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXLineChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.2.0\", version: \"20.0.4\", type: AXLineChartComponent, isStandalone: true, selector: \"ax-line-chart\", inputs: { data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: \"options\", publicName: \"options\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pointClick: \"pointClick\" }, viewQueries: [{ propertyName: \"chartContainerEl\", first: true, predicate: [\"chartContainer\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-line-chart\\\" #chartContainer>\\n <!-- Shared tooltip component -->\\n <ax-chart-tooltip\\n [visible]=\\\"tooltipVisible()\\\"\\n [position]=\\\"tooltipPosition()\\\"\\n [data]=\\\"tooltipData()\\\"\\n [showPercentage]=\\\"false\\\"\\n ></ax-chart-tooltip>\\n</div>\\n\", styles: [\"ax-line-chart{display:block;width:100%;height:100%;min-height:200px;--ax-comp-line-chart-labels-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-axis-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-grid-lines-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-line-chart-text-color: var(--ax-sys-color-on-lightest-surface)}ax-line-chart .ax-line-chart{width:100%;height:100%;position:relative;display:flex;align-items:center;justify-content:center;border-radius:.5rem;overflow:hidden;color:rgb(var(--ax-comp-line-chart-text-color));background-color:rgb(var(--ax-comp-line-chart-bg-color))}ax-line-chart .ax-line-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-line-chart .ax-line-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-line-chart-bg-color));padding:1.5rem;border-radius:.5rem;box-shadow:0 2px 12px #00000014;width:80%;max-width:300px}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-help{font-size:.8rem;opacity:.6}\\n\"], dependencies: [{ kind: \"component\", type: AXChartTooltipComponent, selector: \"ax-chart-tooltip\", inputs: [\"data\", \"position\", \"visible\", \"showPercentage\", \"style\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXLineChartComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-line-chart', standalone: true, encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"ax-line-chart\\\" #chartContainer>\\n <!-- Shared tooltip component -->\\n <ax-chart-tooltip\\n [visible]=\\\"tooltipVisible()\\\"\\n [position]=\\\"tooltipPosition()\\\"\\n [data]=\\\"tooltipData()\\\"\\n [showPercentage]=\\\"false\\\"\\n ></ax-chart-tooltip>\\n</div>\\n\", styles: [\"ax-line-chart{display:block;width:100%;height:100%;min-height:200px;--ax-comp-line-chart-labels-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-axis-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-grid-lines-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-bg-color: var(--ax-sys-color-lightest-surface);--ax-comp-line-chart-text-color: var(--ax-sys-color-on-lightest-surface)}ax-line-chart .ax-line-chart{width:100%;height:100%;position:relative;display:flex;align-items:center;justify-content:center;border-radius:.5rem;overflow:hidden;color:rgb(var(--ax-comp-line-chart-text-color));background-color:rgb(var(--ax-comp-line-chart-bg-color))}ax-line-chart .ax-line-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-line-chart .ax-line-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-line-chart-bg-color));padding:1.5rem;border-radius:.5rem;box-shadow:0 2px 12px #00000014;width:80%;max-width:300px}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-line-chart .ax-line-chart-no-data-message .ax-line-chart-no-data-help{font-size:.8rem;opacity:.6}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvbGluZS1jaGFydC9zcmMvbGliL2xpbmUtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2xpbmUtY2hhcnQvc3JjL2xpYi9saW5lLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFzQixNQUFNLDhCQUE4QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUVOLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUczRDs7R0FFRztBQVVILE1BQU0sT0FBTyxvQkFDWCxTQUFRLFdBQVc7SUFHbkIsSUFBSSxHQUFHLEtBQUssQ0FBbUIsRUFBRSxDQUFDLENBQUM7SUFDbkMsT0FBTyxHQUFHLEtBQUssQ0FBb0IsRUFBRSxDQUFDLENBQUM7SUFDdkMsVUFBVSxHQUFHLE1BQU0sRUFBOEIsQ0FBQztJQUVqQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUE2QixnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNGLEVBQUUsQ0FBdUI7SUFFM0IsR0FBRyxDQUFPO0lBQ1YsS0FBSyxDQUFPO0lBQ1osTUFBTSxD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QUssYUFBYTtnQkFDaEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUMvQixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUMzQixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQztZQUM3QixLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQztZQUM5QixLQUFLLGNBQWM7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUM7WUFDaEM7Z0JBQ0UsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQzt1R0FwbkNVLG9CQUFvQjsyRkFBcEIsb0JBQW9CLDBnQkNyQ2pDLG1SQVNBLGk3Q0R5QlksdUJBQXVCOzsyRkFHdEIsb0JBQW9CO2tCQVRoQyxTQUFTOytCQUNFLGVBQWUsY0FHYixJQUFJLGlCQUNELGlCQUFpQixDQUFDLElBQUksV0FDNUIsQ0FBQyx1QkFBdUIsQ0FBQyxtQkFDakIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYX0NIQVJUX0NPTE9SX1BBTEVUVEUsIGdldENoYXJ0Q29sb3IgfSBmcm9tICdAYWNvcmV4L2NoYXJ0cyc7XG5pbXBvcnQgeyBBWENoYXJ0TGVnZW5kQ29tcGF0aWJsZSwgQVhDaGFydExlZ2VuZEl0ZW0gfSBmcm9tICdAYWNvcmV4L2NoYXJ0cy9jaGFydC1sZWdlbmQnO1xuaW1wb3J0IHsgQVhDaGFydFRvb2x0aXBDb21wb25lbnQsIEFYQ2hhcnRUb29sdGlwRGF0YSB9IGZyb20gJ0BhY29yZXgvY2hhcnRzL2NoYXJ0LXRvb2x0aXAnO1xuaW1wb3J0IHsgQVhQbGF0Zm9ybSB9IGZyb20gJ0BhY29yZXgvY29yZS9wbGF0Zm9ybSc7XG5cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIEVsZW1lbnRSZWYsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWF9MSU5FX0NIQVJUX0NPTkZJRyB9IGZyb20gJy4vbGluZS1jaGFydC5jb25maWcnO1xuaW1wb3J0IHsgQVhMaW5lQ2hhcnREYXRhLCBBWExpbmVDaGFydE9wdGlvbiwgQVhMaW5lQ2hhcnRQb2ludENsaWNrRXZlbnQsIEFYTGluZUNoYXJ0VmFsdWUgfSBmcm9tICcuL2xpbmUtY2hhcnQudHlwZSc7XG5cbi8qKlxuICogTGluZSBDaGFydCBDb21wb25lbnQgZm9yIHJlbmRlcmluZyBkYXRhIGFzIGxpbmVzIHdpdGggaW50ZXJhY3RpdmUgaG92ZXIgZWZmZWN0cyBhbmQgYW5pbWF0aW9uc1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1saW5lLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpbmUtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saW5lLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtBWENoYXJ0VG9vbHRpcENvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBWExpbmVDaGFydENvbXBvbmVudFxuICBleHRlbmRzIE5YQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEFYQ2hhcnRMZWdlbmRDb21wYXRpYmxlXG57XG4gIGRhdGEgPSBpbnB1dDxBWExpbmVDaGFydFZhbHVlPihbXSk7XG4gIG9wdGlvbnMgPSBpbnB1dDxBWExpbmVDaGFydE9wdGlvbj4oe30pO1xuICBwb2ludENsaWNrID0gb3V0cHV0PEFYTGluZUNoYXJ0UG9pbnRDbGlja0V2ZW50PigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRDb250YWluZXJFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NoYXJ0Q29udGFpbmVyJyk7XG4gIHByb3RlY3RlZCBkMyE6IHR5cGVvZiBpbXBvcnQoJ2QzJyk7XG5cbiAgcHJpdmF0ZSBzdmchOiBhbnk7XG4gIHByaXZhdGUgY2hhcnQhOiBhbnk7XG4gIHByaXZhdGUgeFNjYWxlITogYW55O1xuICBwcml2YXRlIHlTY2FsZSE6IGFueTtcbiAgcHJpdmF0ZSB4QXhpcyE6IGFueTtcbiAgcHJpdmF0ZSB5QXhpcyE6IGFueTtcblxuICBwcml2YXRlIHdpZHRoITogbnVtYmVyO1xuICBwcml2YXRlIGhlaWdodCE6IG51bWJlcjtcbiAgcHJpdmF0ZSBtYXJnaW4gPSB7IHRvcDogMjAsIHJpZ2h0OiAyNSwgYm90dG9tOiA0MCwgbGVmdDogNTAgfTtcblxuICBwcml2YXRlIF90b29sdGlwVmlzaWJsZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgX3Rvb2x0aXBQb3NpdGlvbiA9IHNpZ25hbCh7IHg6IDAsIHk6IDAgfSk7XG4gIHByaXZhdGUgX3Rvb2x0aXBEYXRhID0gc2lnbmFsPEFYQ2hhcnRUb29sdGlwRGF0YT4oe1xuICAgIHRpdGxlOiAnJyxcbiAgICB2YWx1ZTogJzAnLFxuICAgIHBlcmNlbnRhZ2U6ICcwJScsXG4gICAgY29sb3I6ICcnLFxuICB9KTtcblxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgX3JlbmRlcmVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBoaWRkZW5TZXJpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfZnVsbE5vcm1hbGl6ZWREYXRhOiAoQVhMaW5lQ2hhcnREYXRhICYgeyBvcmlnaW5hbEluZGV4OiBudW1iZXIgfSlbXSA9IFtdO1xuXG4gIHByb3RlY3RlZCB0b29sdGlwVmlzaWJsZSA9IHRoaXMuX3Rvb2x0aXBWaXNpYmxlLmFzUmVhZG9ubHkoKTtcbiAgcHJvdGVjdGVkIHRvb2x0aXBQb3NpdGlvbiA9IHRoaXMuX3Rvb2x0aXBQb3NpdGlvbi5hc1JlYWRvbmx5KCk7XG4gIHByb3RlY3RlZCB0b29sdGlwRGF0YSA9IHRoaXMuX3Rvb2x0aXBEYXRhLmFzUmVhZG9ubHkoKTtcblxuICAvLyBJbmplY3QgY29uZmlndXJhdGlvblxuICBwcml2YXRlIGNvbmZpZ1Rva2VuID0gaW5qZWN0KEFYX0xJTkVfQ0hBUlRfQ09ORklHKTtcblxuICAvLyBJbmplY3QgdGhlIGNoYXJ0IGNvbG9yc1xuICBwcml2YXRlIGNoYXJ0Q29sb3JzID0gaW5qZWN0KEFYX0NIQVJUX0NPTE9SX1BBTEVUVEUpO1xuXG4gIC8vIEluamVjdCBBWFBsYXRmb3JtXG4gIHByaXZhdGUgcGxhdGZvcm0gPSBpbmplY3QoQVhQbGF0Zm9ybSk7XG5cbiAgcHJvdGVjdGVkIGVmZmVjdGl2ZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnVG9rZW4sXG4gICAgICAuLi50aGlzLm9wdGlvbnMoKSxcbiAgICB9O1xuICB9KTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWREMygpO1xuICB9XG5cbiAgI2VmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmF3RGF0YSA9IHRoaXMuZGF0YSgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJhd0RhdGEpKSB7XG4gICAgICB0aGlzLl9mdWxsTm9ybWFsaXplZERhdGEgPSByYXdEYXRhLm1hcCgocywgaSkgPT4gKHsgLi4ucywgb3JpZ2luYWxJbmRleDogaSB9KSk7XG4gICAgfSBlbHNlIGlmIChyYXdEYXRhICYmICdkYXRhJyBpbiByYXdEYXRhKSB7XG4gICAgICB0aGlzLl9mdWxsTm9ybWFsaXplZERhdGEgPSBbeyAuLi5yYXdEYXRhLCBvcmlnaW5hbEluZGV4OiAwIH1dO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9mdWxsTm9ybWFsaXplZERhdGEgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5lZmZlY3RpdmVPcHRpb25zKCk7XG5cbiAgICBpZiAodGhpcy5fcmVuZGVyZWQoKSkge1xuICAgICAgdGhpcy51cGRhdGVDaGFydCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2luaXRpYWxpemVkLnNldCh0cnVlKTtcbiAgICBpZiAodGhpcy5kMyAmJiB0aGlzLmNoYXJ0Q29udGFpbmVyRWwoKSkge1xuICAgICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICAgICAgdGhpcy5fcmVuZGVyZWQuc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW51cENoYXJ0KCk7XG4gIH1cblxuICAvLyBBWENoYXJ0TGVnZW5kQ29tcGF0aWJsZSBJbXBsZW1lbnRhdGlvblxuICBnZXRMZWdlbmRJdGVtcygpOiBBWENoYXJ0TGVnZW5kSXRlbVtdIHtcbiAgICBjb25zdCB0b3RhbFN1bSA9IHRoaXMuX2Z1bGxOb3JtYWxpemVkRGF0YS5yZWR1Y2UoKHN1bSwgc2VyaWVzKSA9PiB7XG4gICAgICByZXR1cm4gc3VtICsgc2VyaWVzLmRhdGEucmVkdWNlKChzU3VtLCBwKSA9PiBzU3VtICsgcC55LCAwKTtcbiAgICB9LCAwKTtcblxuICAgIHJldHVybiB0aGlzLl9mdWxsTm9ybWFsaXplZERhdGEubWFwKChzZXJpZXMpID0+IHtcbiAgICAgIGNvbnN0IHNlcmllc1N1bSA9IHNlcmllcy5kYXRhLnJlZHVjZSgoc3VtLCBwKSA9PiBzdW0gKyBwLnksIDApO1xuICAgICAgY29uc3QgcGVyY2VudGFnZSA9IHRvdGFsU3VtID4gMCA/IChzZXJpZXNTdW0gLyB0b3RhbFN1bSkgKiAxMDAgOiAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHNlcmllcy5pZCB8fCBzZXJpZXMubGFiZWwgfHwgYHNlcmllcy0ke3Nlcmllcy5vcmlnaW5hbEluZGV4fWAsXG4gICAgICAgIG5hbWU6IHNlcmllcy5sYWJlbCB8fCBgU2VyaWVzICR7c2VyaWVzLm9yaWdpbmFsSW5kZXggKyAxfWAsXG4gICAgICAgIHZhbHVlOiBzZXJpZXNTdW0sXG4gICAgICAgIGNvbG9yOiBzZXJpZXMubGluZUNvbG9yIHx8IGdldENoYXJ0Q29sb3Ioc2VyaWVzLm9yaWdpbmFsSW5kZXgsIHRoaXMuY2hhcnRDb2xvcnMpLFxuICAgICAgICBoaWRkZW46IHRoaXMuaGlkZGVuU2VyaWVzLmhhcyhzZXJpZXMuaWQgfHwgc2VyaWVzLmxhYmVsIHx8IGBzZXJpZXMtJHtzZXJpZXMub3JpZ2luYWxJbmRleH1gKSxcbiAgICAgICAgcGVyY2VudGFnZTogcGFyc2VGbG9hdChwZXJjZW50YWdlLnRvRml4ZWQoMikpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGhpZ2hsaWdodFNlZ21lbnQoaWQ6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3ZnKSByZXR1cm47XG5cbiAgICBjb25zdCBhbGxTZXJpZXNHcm91cHMgPSB0aGlzLnN2Zy5zZWxlY3RBbGwoJ2cuYXgtbGluZS1jaGFydC1zZXJpZXMnKTtcbiAgICBjb25zdCBhbGxQb2ludHNHcm91cHMgPSB0aGlzLnN2Zy5zZWxlY3RBbGwoJ2cuYXgtbGluZS1jaGFydC1wb2ludHMnKTtcblxuICAgIGlmIChpZCA9PT0gbnVsbCkge1xuICAgICAgYWxsU2VyaWVzR3JvdXBzLmNsYXNzZWQoJ2F4LWNoYXJ0LWRpbW1lZCcsIGZhbHNlKS5zdHlsZSgnb3BhY2l0eScsIDEpO1xuICAgICAgYWxsUG9pbnRzR3JvdXBzLmNsYXNzZWQoJ2F4LWNoYXJ0LWRpbW1lZCcsIGZhbHNlKS5zdHlsZSgnb3BhY2l0eScsIDEpO1xuXG4gICAgICBhbGxTZXJpZXNHcm91cHNcbiAgICAgICAgLnNlbGVjdEFsbCgnLmF4LWxpbmUtY2hhcnQtbGluZScpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5saW5lV2lkdGggPz8gMilcbiAgICAgICAgLmNsYXNzZWQoJ2F4LWNoYXJ0LWhpZ2hsaWdodGVkLXBhdGgnLCBmYWxzZSk7XG4gICAgICBhbGxQb2ludHNHcm91cHNcbiAgICAgICAgLnNlbGVjdEFsbCgnY2lyY2xlLmF4LWxpbmUtY2hhcnQtcG9pbnQnKVxuICAgICAgICAuYXR0cigncicsIHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnBvaW50UmFkaXVzID8/IDQpXG4gICAgICAgIC5jbGFzc2VkKCdheC1jaGFydC1oaWdobGlnaHRlZC1wb2ludCcsIGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhbGxTZXJpZXNHcm91cHMuY2xhc3NlZCgnYXgtY2hhcnQtZGltbWVkJywgdHJ1ZSkuc3R5bGUoJ29wYWNpdHknLCAwLjMpO1xuICAgIGFsbFBvaW50c0dyb3Vwcy5jbGFzc2VkKCdheC1jaGFydC1kaW1tZWQnLCB0cnVlKS5zdHlsZSgnb3BhY2l0eScsIDAuMyk7XG5cbiAgICBjb25zdCB0YXJnZXRTZXJpZXNHcm91cCA9IHRoaXMuc3ZnLnNlbGVjdEFsbChgZy5heC1saW5lLWNoYXJ0LXNlcmllc1tkYXRhLXNlcmllcy1pZGVudGlmaWVyPVwiJHtpZH1cIl1gKTtcbiAgICBjb25zdCB0YXJnZXRQb2ludHNHcm91cCA9IHRoaXMuc3ZnLnNlbGVjdEFsbChgZy5heC1saW5lLWNoYXJ0LXBvaW50c1tkYXRhLXNlcmllcy1pZGVudGlmaWVyPVwiJHtpZH1cIl1gKTtcblxuICAgIHRhcmdldFNlcmllc0dyb3VwLmNsYXNzZWQoJ2F4LWNoYXJ0LWRpbW1lZCcsIGZhbHNlKS5zdHlsZSgnb3BhY2l0eScsIDEpO1xuICAgIHRhcmdldFBvaW50c0dyb3VwLmNsYXNzZWQoJ2F4LWNoYXJ0LWRpbW1lZCcsIGZhbHNlKS5zdHlsZSgnb3BhY2l0eScsIDEpO1xuXG4gICAgdGFyZ2V0U2VyaWVzR3JvdXBcbiAgICAgIC5zZWxlY3RBbGwoJy5heC1saW5lLWNoYXJ0LWxpbmUnKVxuICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5saW5lV2lkdGggPz8gMikgKiAxLjUpXG4gICAgICAuY2xhc3NlZCgnYXgtY2hhcnQtaGlnaGxpZ2h0ZWQtcGF0aCcsIHRydWUpO1xuXG4gICAgdGFyZ2V0UG9pbnRzR3JvdXBcbiAgICAgIC5zZWxlY3RBbGwoJ2NpcmNsZS5heC1saW5lLWNoYXJ0LXBvaW50JylcbiAgICAgIC5hdHRyKCdyJywgKHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnBvaW50UmFkaXVzID8/IDQpICogMS41KVxuICAgICAgLmNsYXNzZWQoJ2F4LWNoYXJ0LWhpZ2hsaWdodGVkLXBvaW50JywgdHJ1ZSk7XG4gIH1cblxuICB0b2dnbGVTZWdtZW50KGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZXJpZXNJZCA9IGlkO1xuICAgIGlmICh0aGlzLmhpZGRlblNlcmllcy5oYXMoc2VyaWVzSWQpKSB7XG4gICAgICB0aGlzLmhpZGRlblNlcmllcy5kZWxldGUoc2VyaWVzSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGRlblNlcmllcy5hZGQoc2VyaWVzSWQpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNoYXJ0KCk7XG4gICAgcmV0dXJuICF0aGlzLmhpZGRlblNlcmllcy5oYXMoc2VyaWVzSWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGxvYWREMygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kMyA9IGF3YWl0IGltcG9ydCgnZDMnKTtcbiAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCgpICYmIHRoaXMuY2hhcnRDb250YWluZXJFbCgpKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQuc2V0KHRydWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBEMy5qczonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUNoYXJ0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kMyB8fCAhdGhpcy5jaGFydENvbnRhaW5lckVsKCk/Lm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLmNoYXJ0Q29udGFpbmVyRWwoKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGFsbFNlcmllc0RhdGEgPSB0aGlzLl9mdWxsTm9ybWFsaXplZERhdGE7XG5cbiAgICB0aGlzLmQzLnNlbGVjdChjb250YWluZXJFbGVtZW50KS5zZWxlY3QoJ3N2ZycpLnJlbW92ZSgpO1xuXG4gICAgaWYgKGFsbFNlcmllc0RhdGEubGVuZ3RoID09PSAwIHx8IGFsbFNlcmllc0RhdGEuZXZlcnkoKHNlcmllcykgPT4gIXNlcmllcy5kYXRhIHx8IHNlcmllcy5kYXRhLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHRoaXMuc2hvd05vRGF0YU1lc3NhZ2UoY29udGFpbmVyRWxlbWVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmlzaWJsZURhdGFGb3JSZW5kZXJpbmcgPSBhbGxTZXJpZXNEYXRhLmZpbHRlcihcbiAgICAgIChzZXJpZXMpID0+ICF0aGlzLmhpZGRlblNlcmllcy5oYXMoc2VyaWVzLmlkIHx8IHNlcmllcy5sYWJlbCB8fCBgc2VyaWVzLSR7c2VyaWVzLm9yaWdpbmFsSW5kZXh9YCksXG4gICAgKTtcblxuICAgIGlmICh2aXNpYmxlRGF0YUZvclJlbmRlcmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIEFsbCBkYXRhIGlzIHByZXNlbnQsIGJ1dCBhbGwgc2VyaWVzIGFyZSBoaWRkZW4gYnkgdGhlIGxlZ2VuZFxuICAgICAgdGhpcy5zaG93QWxsU2VyaWVzSGlkZGVuTWVzc2FnZShjb250YWluZXJFbGVtZW50KTtcbiAgICAgIC8vIFN0aWxsIHNldHVwIGJhc2ljIFNWRyBhbmQgY2hhcnQgZ3JvdXAgZm9yIGNvbnNpc3RlbmN5IGlmIG5lZWRlZCwgb3IgcmV0dXJuXG4gICAgICAvLyBGb3Igbm93LCB3ZSB3aWxsIHNob3cgdGhlIG1lc3NhZ2UgYW5kIHJldHVybiwgYXMgc2NhbGVzL2F4ZXMgY2FuJ3QgYmUgZHJhd24uXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2NhbGVzIHNob3VsZCBiZSBiYXNlZCBvbiBwb3RlbnRpYWxseSB2aXNpYmxlIGRhdGEgdG8gYXZvaWQgZXJyb3JzIHdpdGggZW1wdHkgZG9tYWluc1xuICAgIC8vIElmIGFsbCBhcmUgaGlkZGVuLCBzY2FsZXMgbWlnaHQgYmVjb21lIGFuIGlzc3VlLiBMZXQncyB1c2UgYWxsIGRhdGEgZm9yIHNjYWxlcyxcbiAgICAvLyBhbmQgcmVuZGVyaW5nIHdpbGwgaGFuZGxlIHZpc2liaWxpdHkuXG4gICAgY29uc3QgZGF0YUZvclNjYWxlcyA9XG4gICAgICBhbGxTZXJpZXNEYXRhLmZsYXRNYXAoKHMpID0+IHMuZGF0YSkubGVuZ3RoID4gMCA/IGFsbFNlcmllc0RhdGEgOiBbeyBkYXRhOiBbeyB4OiAwLCB5OiAwIH1dIH1dO1xuXG4gICAgY29uc3QgY2hhcnRPcHRpb25zID0gdGhpcy5lZmZlY3RpdmVPcHRpb25zKCk7XG4gICAgdGhpcy5zZXR1cERpbWVuc2lvbnMoY29udGFpbmVyRWxlbWVudCwgY2hhcnRPcHRpb25zKTtcbiAgICAvLyBVc2UgYWxsU2VyaWVzRGF0YSBmb3IgZG9tYWluIGNhbGN1bGF0aW9uIHRvIGtlZXAgc2NhbGVzIGNvbnNpc3RlbnQgZXZlbiBpZiBzb21lIHNlcmllcyBhcmUgaGlkZGVuXG4gICAgLy8gYnV0IGZpbHRlciBvdXQgc2VyaWVzIHdpdGggbm8gZGF0YSBwb2ludHMgZm9yIHNjYWxlIGNhbGN1bGF0aW9uLlxuICAgIGNvbnN0IGRhdGFGb3JTY2FsZVNldHVwID0gYWxsU2VyaWVzRGF0YS5maWx0ZXIoKHMpID0+IHMuZGF0YSAmJiBzLmRhdGEubGVuZ3RoID4gMCk7XG4gICAgaWYgKGRhdGFGb3JTY2FsZVNldHVwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gSWYgYWZ0ZXIgZmlsdGVyaW5nLCB0aGVyZSdzIG5vIGRhdGEgd2l0aCBwb2ludHMgKGUuZy4gYWxsIHNlcmllcyBoYXZlIGVtcHR5IGRhdGEgYXJyYXlzKVxuICAgICAgdGhpcy5zaG93Tm9EYXRhTWVzc2FnZShjb250YWluZXJFbGVtZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXR1cFNjYWxlcyhkYXRhRm9yU2NhbGVTZXR1cCk7XG4gICAgdGhpcy5jcmVhdGVBeGVzKGNoYXJ0T3B0aW9ucyk7XG4gICAgdGhpcy5yZW5kZXJMaW5lcyhhbGxTZXJpZXNEYXRhKTsgLy8gUmVuZGVyTGluZXMgd2lsbCBoYW5kbGUgaGlkaW5nIGJhc2VkIG9uIGhpZGRlblNlcmllc1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUNoYXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhbnVwQ2hhcnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3ZnKSB7XG4gICAgICB0aGlzLmQzPy5zZWxlY3QodGhpcy5jaGFydENvbnRhaW5lckVsKCk/Lm5hdGl2ZUVsZW1lbnQpLnNlbGVjdEFsbCgnc3ZnJykucmVtb3ZlKCk7XG4gICAgICB0aGlzLnN2ZyA9IG51bGw7XG4gICAgICB0aGlzLmNoYXJ0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5fdG9vbHRpcFZpc2libGUuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBEaW1lbnNpb25zKGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBvcHRpb25zOiBBWExpbmVDaGFydE9wdGlvbik6IHZvaWQge1xuICAgIHRoaXMuY2FsY3VsYXRlTWFyZ2lucyhvcHRpb25zLCBjb250YWluZXJFbGVtZW50LmNsaWVudFdpZHRoKTtcblxuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSBjb250YWluZXJFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBtaW5EaW0gPSBNYXRoLm1pbigyMDAsIGNvbnRhaW5lcldpZHRoLCBjb250YWluZXJIZWlnaHQpO1xuXG4gICAgaWYgKG9wdGlvbnMud2lkdGggJiYgb3B0aW9ucy5oZWlnaHQpIHtcbiAgICAgIHRoaXMud2lkdGggPSBvcHRpb25zLndpZHRoIC0gdGhpcy5tYXJnaW4ubGVmdCAtIHRoaXMubWFyZ2luLnJpZ2h0O1xuICAgICAgdGhpcy5oZWlnaHQgPSBvcHRpb25zLmhlaWdodCAtIHRoaXMubWFyZ2luLnRvcCAtIHRoaXMubWFyZ2luLmJvdHRvbTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aWR0aCA9IE1hdGgubWF4KGNvbnRhaW5lcldpZHRoLCBtaW5EaW0pIC0gdGhpcy5tYXJnaW4ubGVmdCAtIHRoaXMubWFyZ2luLnJpZ2h0O1xuICAgICAgdGhpcy5oZWlnaHQgPSBNYXRoLm1heChjb250YWluZXJIZWlnaHQsIG1pbkRpbSkgLSB0aGlzLm1hcmdpbi50b3AgLSB0aGlzLm1hcmdpbi5ib3R0b207XG4gICAgfVxuXG4gICAgdGhpcy53aWR0aCA9IE1hdGgubWF4KHRoaXMud2lkdGgsIDEwMCk7XG4gICAgdGhpcy5oZWlnaHQgPSBNYXRoLm1heCh0aGlzLmhlaWdodCwgMTAwKTtcblxuICAgIGNvbnN0IHRvdGFsV2lkdGggPSB0aGlzLndpZHRoICsgdGhpcy5tYXJnaW4ubGVmdCArIHRoaXMubWFyZ2luLnJpZ2h0O1xuICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gdGhpcy5oZWlnaHQgKyB0aGlzLm1hcmdpbi50b3AgKyB0aGlzLm1hcmdpbi5ib3R0b207XG5cbiAgICBjb25zdCBzdmcgPSB0aGlzLmQzXG4gICAgICAuc2VsZWN0KGNvbnRhaW5lckVsZW1lbnQpXG4gICAgICAuYXBwZW5kKCdzdmcnKVxuICAgICAgLmF0dHIoJ3dpZHRoJywgJzEwMCUnKVxuICAgICAgLmF0dHIoJ2hlaWdodCcsICcxMDAlJylcbiAgICAgIC5hdHRyKCd2aWV3Qm94JywgYDAgMCAke3RvdGFsV2lkdGh9ICR7dG90YWxIZWlnaHR9YClcbiAgICAgIC5hdHRyKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ3hNaWRZTWlkIG1lZXQnKVxuICAgICAgLmF0dHIoXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgIGBcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgIGAsXG4gICAgICApO1xuXG4gICAgdGhpcy5zdmcgPSBzdmc7XG4gICAgdGhpcy5jaGFydCA9IHRoaXMuc3ZnLmFwcGVuZCgnZycpLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHt0aGlzLm1hcmdpbi5sZWZ0fSwke3RoaXMubWFyZ2luLnRvcH0pYCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU1hcmdpbnMob3B0aW9uczogQVhMaW5lQ2hhcnRPcHRpb24sIGNvbnRhaW5lcldpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1hcmdpbiA9IHtcbiAgICAgIHRvcDogb3B0aW9ucy5tYXJnaW5zPy50b3AgPz8gMjAsXG4gICAgICByaWdodDogb3B0aW9ucy5tYXJnaW5zPy5yaWdodCA/PyAyNSxcbiAgICAgIGJvdHRvbTogb3B0aW9ucy5tYXJnaW5zPy5ib3R0b20gPz8gNDAsXG4gICAgICBsZWZ0OiBvcHRpb25zLm1hcmdpbnM/LmxlZnQgPz8gNTAsXG4gICAgfTtcblxuICAgIGNvbnN0IGFsbERhdGFQb2ludHMgPSB0aGlzLl9mdWxsTm9ybWFsaXplZERhdGEuZmxhdE1hcCgoc2VyaWVzKSA9PiBzZXJpZXMuZGF0YSk7XG4gICAgaWYgKGFsbERhdGFQb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWxsTnVtZXJpY1ggPSBhbGxEYXRhUG9pbnRzLmV2ZXJ5KChkKSA9PiB0eXBlb2YgZC54ID09PSAnbnVtYmVyJyk7XG5cbiAgICAgIGlmICghYWxsTnVtZXJpY1gpIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZVNlcmllcyA9IHRoaXMuX2Z1bGxOb3JtYWxpemVkRGF0YS5maWx0ZXIoXG4gICAgICAgICAgKHMpID0+ICF0aGlzLmhpZGRlblNlcmllcy5oYXMocy5pZCB8fCBzLmxhYmVsIHx8IGBzZXJpZXMtJHtzLm9yaWdpbmFsSW5kZXh9YCksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGFsbFhWYWx1ZXMgPSBuZXcgU2V0KHZpc2libGVTZXJpZXMuZmxhdE1hcCgoc2VyaWVzKSA9PiBzZXJpZXMuZGF0YS5tYXAoKGQpID0+IFN0cmluZyhkLngpKSkpO1xuICAgICAgICBjb25zdCBsYWJlbENvdW50ID0gYWxsWFZhbHVlcy5zaXplO1xuXG4gICAgICAgIGlmIChsYWJlbENvdW50ID4gMCAmJiBjb250YWluZXJXaWR0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB3b3JraW5nV2lkdGggPSBjb250YWluZXJXaWR0aCAtIHRoaXMubWFyZ2luLmxlZnQgLSB0aGlzLm1hcmdpbi5yaWdodDtcbiAgICAgICAgICBpZiAod29ya2luZ1dpZHRoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlV2lkdGhQZXJMYWJlbCA9IHdvcmtpbmdXaWR0aCAvIGxhYmVsQ291bnQ7XG4gICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBBcnJheS5mcm9tKGFsbFhWYWx1ZXMpO1xuICAgICAgICAgICAgY29uc3QgbG9uZ2VzdExhYmVsID0gbGFiZWxzLnJlZHVjZSgoYSwgYikgPT4gKGEubGVuZ3RoID4gYi5sZW5ndGggPyBhIDogYiksICcnKTtcblxuICAgICAgICAgICAgY29uc3QgZXN0aW1hdGVkRm9udFNpemUgPSBNYXRoLm1heCgxMSwgTWF0aC5taW4oMTUsIE1hdGgucm91bmQod29ya2luZ1dpZHRoIC8gNDUpKSk7XG4gICAgICAgICAgICBjb25zdCBlc3RpbWF0ZWRMb25nZXN0TGFiZWxXaWR0aCA9IGxvbmdlc3RMYWJlbC5sZW5ndGggKiBlc3RpbWF0ZWRGb250U2l6ZSAqIDAuNjtcblxuICAgICAgICAgICAgaWYgKGVzdGltYXRlZExvbmdlc3RMYWJlbFdpZHRoID4gYXZhaWxhYmxlV2lkdGhQZXJMYWJlbCkge1xuICAgICAgICAgICAgICBjb25zdCByZXF1aXJlZEV4dHJhTWFyZ2luID0gZXN0aW1hdGVkTG9uZ2VzdExhYmVsV2lkdGggKiBNYXRoLnNpbihNYXRoLlBJIC8gNCkgKyAxMDtcbiAgICAgICAgICAgICAgdGhpcy5tYXJnaW4uYm90dG9tICs9IE1hdGgubWluKDYwLCByZXF1aXJlZEV4dHJhTWFyZ2luKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy54QXhpc0xhYmVsKSB7XG4gICAgICBjb25zdCB4TGFiZWxMZW5ndGggPSBvcHRpb25zLnhBeGlzTGFiZWwubGVuZ3RoO1xuICAgICAgY29uc3QgZXh0cmFCb3R0b21NYXJnaW4gPSBNYXRoLm1pbigyMCwgTWF0aC5tYXgoMTAsIHhMYWJlbExlbmd0aCAqIDAuOCkpO1xuICAgICAgdGhpcy5tYXJnaW4uYm90dG9tID0gTWF0aC5tYXgodGhpcy5tYXJnaW4uYm90dG9tLCA0MCArIGV4dHJhQm90dG9tTWFyZ2luKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy55QXhpc0xhYmVsKSB7XG4gICAgICBjb25zdCB5TGFiZWxMZW5ndGggPSBvcHRpb25zLnlBeGlzTGFiZWwubGVuZ3RoO1xuICAgICAgY29uc3QgZXh0cmFMZWZ0TWFyZ2luID0gTWF0aC5taW4oMjAsIE1hdGgubWF4KDEwLCB5TGFiZWxMZW5ndGggKiAwLjgpKTtcbiAgICAgIHRoaXMubWFyZ2luLmxlZnQgPSBNYXRoLm1heCh0aGlzLm1hcmdpbi5sZWZ0LCA1MCArIGV4dHJhTGVmdE1hcmdpbik7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2hvd1hBeGlzICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJnaW4uYm90dG9tID0gTWF0aC5tYXgodGhpcy5tYXJnaW4uYm90dG9tLCA0NSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2hvd1lBeGlzICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJnaW4ubGVmdCA9IE1hdGgubWF4KHRoaXMubWFyZ2luLmxlZnQsIDU1KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwU2NhbGVzKGRhdGE6IChBWExpbmVDaGFydERhdGEgJiB7IG9yaWdpbmFsSW5kZXg6IG51bWJlciB9KVtdKTogdm9pZCB7XG4gICAgLy8gRXhwZWN0cyBhbHJlYWR5IGZpbHRlcmVkIGRhdGEgZm9yIHNjYWxlc1xuICAgIGNvbnN0IGNoYXJ0T3B0aW9ucyA9IHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpO1xuICAgIGNvbnN0IHBhZGRpbmcgPSBjaGFydE9wdGlvbnMuYXhpc1BhZGRpbmcgPz8gMDtcbiAgICBjb25zdCBwYWRkaW5nTXVsdGlwbGllciA9IHBhZGRpbmcgLyAxMDA7XG5cbiAgICAvLyBFbnN1cmUgZGF0YSBpcyBub3QgZW1wdHkgZm9yIHNjYWxlIGRvbWFpbiBjYWxjdWxhdGlvblxuICAgIGNvbnN0IGFsbERhdGFQb2ludHMgPSBkYXRhLmxlbmd0aCA+IDAgPyBkYXRhLmZsYXRNYXAoKHNlcmllcykgPT4gc2VyaWVzLmRhdGEpIDogW3sgeDogMCwgeTogMCB9XTtcbiAgICBpZiAoYWxsRGF0YVBvaW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIFNob3VsZCBpZGVhbGx5IG5vdCBoYXBwZW4gaWYgY3JlYXRlQ2hhcnQgZmlsdGVycyBjb3JyZWN0bHlcbiAgICAgIGFsbERhdGFQb2ludHMucHVzaCh7IHg6IDAsIHk6IDAgfSk7IC8vIERlZmF1bHQgZmFsbGJhY2sgdG8gcHJldmVudCBjcmFzaCB3aXRoIGVtcHR5IGRvbWFpblxuICAgIH1cblxuICAgIGNvbnN0IGFsbE51bWVyaWNYID0gYWxsRGF0YVBvaW50cy5ldmVyeSgoZCkgPT4gdHlwZW9mIGQueCA9PT0gJ251bWJlcicpO1xuXG4gICAgaWYgKGFsbE51bWVyaWNYKSB7XG4gICAgICBjb25zdCB4TWluID0gdGhpcy5kMy5taW4oYWxsRGF0YVBvaW50cywgKGQpID0+IGQueCBhcyBudW1iZXIpID8/IDA7XG4gICAgICBjb25zdCB4TWF4ID0gdGhpcy5kMy5tYXgoYWxsRGF0YVBvaW50cywgKGQpID0+IGQueCBhcyBudW1iZXIpID8/IDA7XG5cbiAgICAgIGlmICh4TWluID09PSB4TWF4KSB7XG4gICAgICAgIHRoaXMueFNjYWxlID0gdGhpcy5kM1xuICAgICAgICAgIC5zY2FsZUxpbmVhcigpXG4gICAgICAgICAgLmRvbWFpbihbeE1pbiAtIDEsIHhNYXggKyAxXSlcbiAgICAgICAgICAucmFuZ2UoWzAsIHRoaXMud2lkdGhdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMueFNjYWxlID0gdGhpcy5kMy5zY2FsZUxpbmVhcigpLmRvbWFpbihbeE1pbiwgeE1heF0pLnJhbmdlKFswLCB0aGlzLndpZHRoXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMueFNjYWxlID0gdGhpcy5kM1xuICAgICAgICAuc2NhbGVCYW5kKClcbiAgICAgICAgLmRvbWFpbihhbGxEYXRhUG9pbnRzLm1hcCgoZCkgPT4gU3RyaW5nKGQueCkpKVxuICAgICAgICAucmFuZ2UoWzAsIHRoaXMud2lkdGhdKVxuICAgICAgICAucGFkZGluZ0lubmVyKDAuMilcbiAgICAgICAgLnBhZGRpbmdPdXRlcigwKTtcbiAgICB9XG5cbiAgICBjb25zdCB5QXhpc1N0YXJ0c0F0WmVybyA9IGNoYXJ0T3B0aW9ucy55QXhpc1N0YXJ0c0F0WmVybyAhPT0gZmFsc2U7XG4gICAgbGV0IHlNaW4gPSB0aGlzLmQzLm1pbihhbGxEYXRhUG9pbnRzLCAoZCkgPT4gZC55KSA/PyAwO1xuICAgIGlmICh5QXhpc1N0YXJ0c0F0WmVybykge1xuICAgICAgeU1pbiA9IE1hdGgubWluKDAsIHlNaW4pO1xuICAgIH1cbiAgICBjb25zdCB5TWF4ID0gdGhpcy5kMy5tYXgoYWxsRGF0YVBvaW50cywgKGQpID0+IGQueSkgPz8gMDtcbiAgICBjb25zdCB5UmFuZ2UgPSB5TWF4IC0geU1pbjtcblxuICAgIHRoaXMueVNjYWxlID0gdGhpcy5kM1xuICAgICAgLnNjYWxlTGluZWFyKClcbiAgICAgIC5kb21haW4oW3lNaW4sIHlNYXggKyB5UmFuZ2UgKiBwYWRkaW5nTXVsdGlwbGllcl0pXG4gICAgICAubmljZSgpXG4gICAgICAucmFuZ2UoW3RoaXMuaGVpZ2h0LCAwXSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUF4ZXMob3B0aW9uczogQVhMaW5lQ2hhcnRPcHRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBzaG93WEF4aXMgPSBvcHRpb25zLnNob3dYQXhpcyAhPT0gZmFsc2U7XG4gICAgY29uc3Qgc2hvd1lBeGlzID0gb3B0aW9ucy5zaG93WUF4aXMgIT09IGZhbHNlO1xuICAgIGNvbnN0IHNob3dHcmlkID0gb3B0aW9ucy5zaG93R3JpZCAhPT0gZmFsc2U7XG4gICAgY29uc3QgaXNCYW5kU2NhbGUgPSB0aGlzLnhTY2FsZS5iYW5kd2lkdGggIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc1J0bCA9IHRoaXMucGxhdGZvcm0uaXNSdGwoKTtcbiAgICBjb25zdCBheGVzR3JvdXAgPSB0aGlzLmNoYXJ0LmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYXhlcycpO1xuXG4gICAgaWYgKHNob3dYQXhpcykge1xuICAgICAgdGhpcy54QXhpcyA9IGF4ZXNHcm91cFxuICAgICAgICAuYXBwZW5kKCdnJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYXhpcy14JylcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke3RoaXMuaGVpZ2h0fSlgKVxuICAgICAgICAuY2FsbCh0aGlzLmQzLmF4aXNCb3R0b20odGhpcy54U2NhbGUpLnRpY2tTaXplKDUpLnRpY2tQYWRkaW5nKDgpKTtcblxuICAgICAgLy8gU3R5bGUgdGhlIHgtYXhpcyBwYXRoIGFuZCBsaW5lc1xuICAgICAgdGhpcy54QXhpcy5zZWxlY3RBbGwoJ3BhdGgnKS5hdHRyKCdzdHJva2UnLCAncmdiYSh2YXIoLS1heC1jb21wLWxpbmUtY2hhcnQtYXhpcy1jb2xvciksIDAuMiknKTtcblxuICAgICAgdGhpcy54QXhpc1xuICAgICAgICAuc2VsZWN0QWxsKCdsaW5lJylcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsICdyZ2JhKHZhcigtLWF4LWNvbXAtbGluZS1jaGFydC1ncmlkLWxpbmVzLWNvbG9yKSwgMC4yKScpXG4gICAgICAgIC5hdHRyKCdzdHJva2UtZGFzaGFycmF5JywgJzIsMicpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utb3BhY2l0eScsICcwLjUnKTtcblxuICAgICAgY29uc3QgZHluYW1pY1hBeGlzVGlja0ZvbnRTaXplID0gTWF0aC5tYXgoMTEsIE1hdGgubWluKDE1LCBNYXRoLnJvdW5kKHRoaXMud2lkdGggLyA0NSkpKTtcbiAgICAgIGNvbnN0IHhBeGlzVGlja3MgPSB0aGlzLnhBeGlzXG4gICAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIGAke2R5bmFtaWNYQXhpc1RpY2tGb250U2l6ZX1weGApXG4gICAgICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnNDAwJylcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3JnYmEodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LWxhYmVscy1jb2xvciksIDAuNyknKTtcblxuICAgICAgLy8gQXV0b21hdGljYWxseSByb3RhdGUgbGFiZWxzIGlmIHRoZXkgYXJlIGxpa2VseSB0byBvdmVybGFwXG4gICAgICBpZiAoaXNCYW5kU2NhbGUgJiYgdGhpcy54U2NhbGUuZG9tYWluKCkubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy54U2NhbGUuc3RlcCgpO1xuICAgICAgICBjb25zdCBsb25nZXN0TGFiZWwgPSB0aGlzLnhTY2FsZS5kb21haW4oKS5yZWR1Y2UoKGEsIGIpID0+IChhLmxlbmd0aCA+IGIubGVuZ3RoID8gYSA6IGIpLCAnJyk7XG4gICAgICAgIC8vIFVzaW5nIDAuNiBhcyBhIGJldHRlciBlc3RpbWF0ZSBmb3IgY2hhciB3aWR0aC10by1oZWlnaHQgcmF0aW9cbiAgICAgICAgY29uc3QgZXN0aW1hdGVkTG9uZ2VzdExhYmVsV2lkdGggPSBsb25nZXN0TGFiZWwubGVuZ3RoICogZHluYW1pY1hBeGlzVGlja0ZvbnRTaXplICogMC42O1xuXG4gICAgICAgIGlmIChlc3RpbWF0ZWRMb25nZXN0TGFiZWxXaWR0aCA+IHN0ZXApIHtcbiAgICAgICAgICB4QXhpc1RpY2tzXG4gICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtNDUpJylcbiAgICAgICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnZW5kJylcbiAgICAgICAgICAgIC5hdHRyKCdkeCcsICctMC44ZW0nKVxuICAgICAgICAgICAgLmF0dHIoJ2R5JywgJzAuMTVlbScpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnhBeGlzTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWxZID0gdGhpcy5oZWlnaHQgKyB0aGlzLm1hcmdpbi5ib3R0b20gKiAwLjc7XG5cbiAgICAgICAgYXhlc0dyb3VwXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYXhpcy1sYWJlbCBheC14LWF4aXMtbGFiZWwnKVxuICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgICAgIC5hdHRyKCdkb21pbmFudC1iYXNlbGluZScsICdtaWRkbGUnKVxuICAgICAgICAgIC5hdHRyKCd4JywgdGhpcy53aWR0aCAvIDIpXG4gICAgICAgICAgLmF0dHIoJ3knLCBsYWJlbFkpXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwgNSknKVxuICAgICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgICAgIGBcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgICAgICBmaWxsOiByZ2IodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LXRleHQtY29sb3IpKTtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICAgIGAsXG4gICAgICAgICAgKVxuICAgICAgICAgIC50ZXh0KG9wdGlvbnMueEF4aXNMYWJlbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3dZQXhpcykge1xuICAgICAgdGhpcy55QXhpcyA9IGF4ZXNHcm91cFxuICAgICAgICAuYXBwZW5kKCdnJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYXhpcy15JylcbiAgICAgICAgLmNhbGwodGhpcy5kMy5heGlzTGVmdCh0aGlzLnlTY2FsZSkudGlja1NpemUoNSkudGlja1BhZGRpbmcoOCkpO1xuXG4gICAgICAvLyBTdHlsZSB0aGUgeS1heGlzIHBhdGggYW5kIGxpbmVzXG4gICAgICB0aGlzLnlBeGlzLnNlbGVjdEFsbCgncGF0aCcpLmF0dHIoJ3N0cm9rZScsICdyZ2JhKHZhcigtLWF4LWNvbXAtbGluZS1jaGFydC1heGlzLWNvbG9yKSwgMC4yKScpO1xuXG4gICAgICB0aGlzLnlBeGlzXG4gICAgICAgIC5zZWxlY3RBbGwoJ2xpbmUnKVxuICAgICAgICAuYXR0cignc3Ryb2tlJywgJ3JnYmEodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LWdyaWQtbGluZXMtY29sb3IpLCAwLjIpJylcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCAnMiwyJylcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS1vcGFjaXR5JywgJzAuNScpO1xuXG4gICAgICBjb25zdCBkeW5hbWljWUF4aXNUaWNrRm9udFNpemUgPSBNYXRoLm1heCgxMSwgTWF0aC5taW4oMTUsIE1hdGgucm91bmQodGhpcy5oZWlnaHQgLyAzMCkpKTtcbiAgICAgIGNvbnN0IHlUaWNrVGV4dHMgPSB0aGlzLnlBeGlzLnNlbGVjdEFsbCgndGV4dCcpLmF0dHIoXG4gICAgICAgICdzdHlsZScsXG4gICAgICAgIGBcbiAgICAgICAgICBmb250LXNpemU6ICR7ZHluYW1pY1lBeGlzVGlja0ZvbnRTaXplfXB4O1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgZmlsbDogcmdiYSh2YXIoLS1heC1jb21wLWxpbmUtY2hhcnQtbGFiZWxzLWNvbG9yKSwgMC43KTtcbiAgICAgICAgYCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChpc1J0bCkge1xuICAgICAgICB5VGlja1RleHRzLmF0dHIoJ3RleHQtYW5jaG9yJywgJ3N0YXJ0Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnlBeGlzTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWxYID0gLXRoaXMuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgbGFiZWxZID0gLXRoaXMubWFyZ2luLmxlZnQgKiAwLjg7XG5cbiAgICAgICAgYXhlc0dyb3VwXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYXhpcy1sYWJlbCBheC15LWF4aXMtbGFiZWwnKVxuICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgICAgIC5hdHRyKCdkb21pbmFudC1iYXNlbGluZScsICdtaWRkbGUnKVxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCkgdHJhbnNsYXRlKC01LCAwKScpXG4gICAgICAgICAgLmF0dHIoJ3gnLCBsYWJlbFgpXG4gICAgICAgICAgLmF0dHIoJ3knLCBsYWJlbFkpXG4gICAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICAnc3R5bGUnLFxuICAgICAgICAgICAgYFxuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgICAgIGZpbGw6IHJnYih2YXIoLS1heC1jb21wLWxpbmUtY2hhcnQtdGV4dC1jb2xvcikpO1xuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgYCxcbiAgICAgICAgICApXG4gICAgICAgICAgLnRleHQob3B0aW9ucy55QXhpc0xhYmVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvd0dyaWQpIHtcbiAgICAgIGNvbnN0IGdyaWRHcm91cCA9IHRoaXMuY2hhcnRcbiAgICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWdyaWQtY29udGFpbmVyJylcbiAgICAgICAgLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcblxuICAgICAgY29uc3QgeUdyaWQgPSBncmlkR3JvdXBcbiAgICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWdyaWQnKVxuICAgICAgICAuY2FsbChcbiAgICAgICAgICB0aGlzLmQzXG4gICAgICAgICAgICAuYXhpc0xlZnQodGhpcy55U2NhbGUpXG4gICAgICAgICAgICAudGlja1NpemUoLXRoaXMud2lkdGgpXG4gICAgICAgICAgICAudGlja0Zvcm1hdCgoKSA9PiAnJylcbiAgICAgICAgICAgIC50aWNrVmFsdWVzKHRoaXMueVNjYWxlLnRpY2tzKCkpLFxuICAgICAgICApO1xuXG4gICAgICAvLyBTdHlsZSB0aGUgZ3JpZCBwYXRoIGFuZCBsaW5lc1xuICAgICAgeUdyaWQuc2VsZWN0QWxsKCdwYXRoJykuYXR0cignc3Ryb2tlLXdpZHRoJywgJzAnKTtcblxuICAgICAgeUdyaWRcbiAgICAgICAgLnNlbGVjdEFsbCgnLnRpY2snKVxuICAgICAgICAuc2VsZWN0QWxsKCdsaW5lJylcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsICdyZ2JhKHZhcigtLWF4LWNvbXAtbGluZS1jaGFydC1ncmlkLWxpbmVzLWNvbG9yKSwgMC4yKScpXG4gICAgICAgIC5hdHRyKCdzdHJva2UtZGFzaGFycmF5JywgJzIsMicpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utb3BhY2l0eScsICcwLjUnKTtcblxuICAgICAgaWYgKG9wdGlvbnMuc2hvd1ZlcnRpY2FsR3JpZCkge1xuICAgICAgICBjb25zdCB4R3JpZCA9IGdyaWRHcm91cFxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWdyaWQtdmVydGljYWwnKVxuICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHt0aGlzLmhlaWdodH0pYClcbiAgICAgICAgICAuY2FsbChcbiAgICAgICAgICAgIHRoaXMuZDNcbiAgICAgICAgICAgICAgLmF4aXNCb3R0b20odGhpcy54U2NhbGUpXG4gICAgICAgICAgICAgIC50aWNrU2l6ZSgtdGhpcy5oZWlnaHQpXG4gICAgICAgICAgICAgIC50aWNrRm9ybWF0KCgpID0+ICcnKVxuICAgICAgICAgICAgICAudGlja1ZhbHVlcyhpc0JhbmRTY2FsZSA/IHVuZGVmaW5lZCA6IHRoaXMueFNjYWxlLnRpY2tzKCkpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgLy8gU3R5bGUgdGhlIHZlcnRpY2FsIGdyaWQgcGF0aCBhbmQgbGluZXNcbiAgICAgICAgeEdyaWQuc2VsZWN0QWxsKCdwYXRoJykuYXR0cignc3Ryb2tlLXdpZHRoJywgJzAnKTtcblxuICAgICAgICB4R3JpZFxuICAgICAgICAgIC5zZWxlY3RBbGwoJy50aWNrJylcbiAgICAgICAgICAuc2VsZWN0QWxsKCdsaW5lJylcbiAgICAgICAgICAuYXR0cignc3Ryb2tlJywgJ3JnYmEodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LWdyaWQtbGluZXMtY29sb3IpLCAwLjE1KScpXG4gICAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCAnMiwyJylcbiAgICAgICAgICAuYXR0cignc3Ryb2tlLW9wYWNpdHknLCAnMC41Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJMaW5lcyhhbGxTZXJpZXNEYXRhOiAoQVhMaW5lQ2hhcnREYXRhICYgeyBvcmlnaW5hbEluZGV4OiBudW1iZXIgfSlbXSk6IHZvaWQge1xuICAgIGNvbnN0IGlzQmFuZFNjYWxlID0gdGhpcy54U2NhbGUuYmFuZHdpZHRoICE9PSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBnZXRYID0gKGQ6IHsgeDogbnVtYmVyIHwgc3RyaW5nOyB5OiBudW1iZXIgfSkgPT4ge1xuICAgICAgaWYgKGlzQmFuZFNjYWxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnhTY2FsZShTdHJpbmcoZC54KSkgKyB0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy54U2NhbGUoZC54IGFzIG51bWJlcik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGxpbmVHZW5lcmF0b3IgPSB0aGlzLmQzXG4gICAgICAubGluZTx7IHg6IG51bWJlciB8IHN0cmluZzsgeTogbnVtYmVyIH0+KClcbiAgICAgIC54KGdldFgpXG4gICAgICAueSgoZCkgPT4gdGhpcy55U2NhbGUoZC55KSk7XG5cbiAgICBpZiAodGhpcy5lZmZlY3RpdmVPcHRpb25zKCkuc21vb3RoTGluZSAhPT0gZmFsc2UpIHtcbiAgICAgIGxpbmVHZW5lcmF0b3IuY3VydmUodGhpcy5kMy5jdXJ2ZU1vbm90b25lWCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJlYUdlbmVyYXRvciA9IHRoaXMuZDNcbiAgICAgIC5hcmVhPHsgeDogbnVtYmVyIHwgc3RyaW5nOyB5OiBudW1iZXIgfT4oKVxuICAgICAgLngoZ2V0WClcbiAgICAgIC55MCh0aGlzLmhlaWdodClcbiAgICAgIC55MSgoZCkgPT4gdGhpcy55U2NhbGUoZC55KSk7XG5cbiAgICBpZiAodGhpcy5lZmZlY3RpdmVPcHRpb25zKCkuc21vb3RoTGluZSAhPT0gZmFsc2UpIHtcbiAgICAgIGFyZWFHZW5lcmF0b3IuY3VydmUodGhpcy5kMy5jdXJ2ZU1vbm90b25lWCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdmcuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1hbmltYXRpbmcnKTtcblxuICAgIGNvbnN0IGFsbFNlcmllc0dyb3VwID0gdGhpcy5jaGFydFxuICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1hbGwtc2VyaWVzJylcbiAgICAgIC5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG5cbiAgICBjb25zdCBhbGxQb2ludHNHcm91cCA9IHRoaXMuY2hhcnRcbiAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYWxsLXBvaW50cycpXG4gICAgICAuYXR0cigncG9pbnRlci1ldmVudHMnLCAnbm9uZScpO1xuXG4gICAgaWYgKHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnNob3dDcm9zc2hhaXIgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY2hhcnQuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1jcm9zc2hhaXInKS5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5hbmltYXRpb25EdXJhdGlvbjtcbiAgICBjb25zdCBhbmltYXRpb25FYXNpbmcgPSB0aGlzLmdldEVhc2luZ0Z1bmN0aW9uKHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLmFuaW1hdGlvbkVhc2luZyk7XG5cbiAgICBhbGxTZXJpZXNEYXRhLmZvckVhY2goKHNlcmllcykgPT4ge1xuICAgICAgY29uc3Qgc2VyaWVzSWRlbnRpZmllciA9IHNlcmllcy5pZCB8fCBzZXJpZXMubGFiZWwgfHwgYHNlcmllcy0ke3Nlcmllcy5vcmlnaW5hbEluZGV4fWA7XG5cbiAgICAgIGlmICh0aGlzLmhpZGRlblNlcmllcy5oYXMoc2VyaWVzSWRlbnRpZmllcikpIHtcbiAgICAgICAgdGhpcy5jaGFydC5zZWxlY3RBbGwoYC5heC1saW5lLWNoYXJ0LXNlcmllc1tkYXRhLXNlcmllcy1pZGVudGlmaWVyPVwiJHtzZXJpZXNJZGVudGlmaWVyfVwiXWApLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLmNoYXJ0LnNlbGVjdEFsbChgLmF4LWxpbmUtY2hhcnQtcG9pbnRzW2RhdGEtc2VyaWVzLWlkZW50aWZpZXI9XCIke3Nlcmllc0lkZW50aWZpZXJ9XCJdYCkucmVtb3ZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghc2VyaWVzLmRhdGEgfHwgc2VyaWVzLmRhdGEubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHNlcmllc0dyb3VwID0gYWxsU2VyaWVzR3JvdXBcbiAgICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsIGBheC1saW5lLWNoYXJ0LXNlcmllcyBheC1saW5lLWNoYXJ0LXNlcmllcy0ke3Nlcmllcy5vcmlnaW5hbEluZGV4fWApXG4gICAgICAgIC5hdHRyKCdkYXRhLXNlcmllcy1pZGVudGlmaWVyJywgc2VyaWVzSWRlbnRpZmllcilcbiAgICAgICAgLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcblxuICAgICAgY29uc3QgbGluZUNvbG9yID0gc2VyaWVzLmxpbmVDb2xvciB8fCBnZXRDaGFydENvbG9yKHNlcmllcy5vcmlnaW5hbEluZGV4LCB0aGlzLmNoYXJ0Q29sb3JzKTtcbiAgICAgIGNvbnN0IGZpbGxDb2xvciA9IHNlcmllcy5maWxsQ29sb3IgfHwgbGluZUNvbG9yO1xuXG4gICAgICBjb25zdCBsaW5lID0gc2VyaWVzR3JvdXBcbiAgICAgICAgLmFwcGVuZCgncGF0aCcpXG4gICAgICAgIC5kYXR1bShzZXJpZXMuZGF0YSlcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtbGluZScpXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCBsaW5lQ29sb3IpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5saW5lV2lkdGggPz8gMilcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS1saW5lam9pbicsICdyb3VuZCcpXG4gICAgICAgIC5hdHRyKCdzdHJva2UtbGluZWNhcCcsICdyb3VuZCcpXG4gICAgICAgIC5hdHRyKCdkJywgbGluZUdlbmVyYXRvciBhcyBhbnkpXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxuICAgICAgICAuYXR0cignc3R5bGUnLCAndHJhbnNpdGlvbjogc3Ryb2tlLXdpZHRoIDAuM3MgZWFzZTsnKVxuICAgICAgICAuYXR0cigncG9pbnRlci1ldmVudHMnLCAnbm9uZScpO1xuXG4gICAgICBsaW5lXG4gICAgICAgIC5vbignbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgICAgICBsaW5lXG4gICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24oMTUwKVxuICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5saW5lV2lkdGggPz8gMikgKiAxLjUpO1xuICAgICAgICB9KVxuICAgICAgICAub24oJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG4gICAgICAgICAgbGluZVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKDE1MClcbiAgICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5saW5lV2lkdGggPz8gMik7XG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0b3RhbExlbmd0aCA9IGxpbmUubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCk7XG4gICAgICBsaW5lXG4gICAgICAgIC5hdHRyKCdzdHJva2UtZGFzaGFycmF5JywgdG90YWxMZW5ndGggKyAnICcgKyB0b3RhbExlbmd0aClcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNob2Zmc2V0JywgdG90YWxMZW5ndGgpXG4gICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgLmR1cmF0aW9uKGFuaW1hdGlvbkR1cmF0aW9uKVxuICAgICAgICAuZWFzZShhbmltYXRpb25FYXNpbmcpXG4gICAgICAgIC5hdHRyKCdzdHJva2UtZGFzaG9mZnNldCcsIDApXG4gICAgICAgIC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxpbmUuYXR0cigncG9pbnRlci1ldmVudHMnLCAnYWxsJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5lZmZlY3RpdmVPcHRpb25zKCkuZmlsbEFyZWEpIHtcbiAgICAgICAgY29uc3QgYXJlYSA9IHNlcmllc0dyb3VwXG4gICAgICAgICAgLmFwcGVuZCgncGF0aCcpXG4gICAgICAgICAgLmRhdHVtKHNlcmllcy5kYXRhKVxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWFyZWEnKVxuICAgICAgICAgIC5hdHRyKCdmaWxsJywgZmlsbENvbG9yKVxuICAgICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMClcbiAgICAgICAgICAuYXR0cignZCcsIGFyZWFHZW5lcmF0b3IpXG4gICAgICAgICAgLmF0dHIoJ3N0eWxlJywgJ3RyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlOycpXG4gICAgICAgICAgLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcblxuICAgICAgICBhcmVhXG4gICAgICAgICAgLm9uKCdtb3VzZWVudGVyJywgKCkgPT4ge1xuICAgICAgICAgICAgYXJlYVxuICAgICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAgIC5kdXJhdGlvbigxNTApXG4gICAgICAgICAgICAgIC5hdHRyKCdvcGFjaXR5JywgKCh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5maWxsT3BhY2l0eSA/PyAyMCkgLyAxMDApICogMS41KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5vbignbW91c2VsZWF2ZScsICgpID0+IHtcbiAgICAgICAgICAgIGFyZWFcbiAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAuZHVyYXRpb24oMTUwKVxuICAgICAgICAgICAgICAuYXR0cignb3BhY2l0eScsICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5maWxsT3BhY2l0eSA/PyAyMCkgLyAxMDApO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGFyZWFcbiAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgLmR1cmF0aW9uKGFuaW1hdGlvbkR1cmF0aW9uKVxuICAgICAgICAgIC5lYXNlKGFuaW1hdGlvbkVhc2luZylcbiAgICAgICAgICAuYXR0cignb3BhY2l0eScsICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5maWxsT3BhY2l0eSA/PyAyMCkgLyAxMDApXG4gICAgICAgICAgLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhcmVhLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ2FsbCcpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnNob3dQb2ludHMgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBwb2ludE1hcCA9IG5ldyBNYXA8XG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgQXJyYXk8eyBwb2ludDogYW55OyBzZXJpZXM6IEFYTGluZUNoYXJ0RGF0YSAmIHsgb3JpZ2luYWxJbmRleDogbnVtYmVyIH07IG9yaWdpbmFsSW5kZXg6IG51bWJlciB9PlxuICAgICAgPigpO1xuXG4gICAgICBhbGxTZXJpZXNEYXRhLmZvckVhY2goKHNlcmllcykgPT4ge1xuICAgICAgICBjb25zdCBzZXJpZXNJZGVudGlmaWVyID0gc2VyaWVzLmlkIHx8IHNlcmllcy5sYWJlbCB8fCBgc2VyaWVzLSR7c2VyaWVzLm9yaWdpbmFsSW5kZXh9YDtcbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuU2VyaWVzLmhhcyhzZXJpZXNJZGVudGlmaWVyKSB8fCAhc2VyaWVzLmRhdGEgfHwgc2VyaWVzLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZUNvbG9yID0gc2VyaWVzLmxpbmVDb2xvciB8fCBnZXRDaGFydENvbG9yKHNlcmllcy5vcmlnaW5hbEluZGV4LCB0aGlzLmNoYXJ0Q29sb3JzKTtcbiAgICAgICAgY29uc3QgbWF4UG9pbnRzID0gMTAwO1xuICAgICAgICBjb25zdCBwb2ludERhdGEgPVxuICAgICAgICAgIHNlcmllcy5kYXRhLmxlbmd0aCA+IG1heFBvaW50cyA/IHRoaXMuZ2V0UmVkdWNlZERhdGFQb2ludHMoc2VyaWVzLmRhdGEsIG1heFBvaW50cykgOiBzZXJpZXMuZGF0YTtcblxuICAgICAgICBwb2ludERhdGEuZm9yRWFjaCgocG9pbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB4ID0gZ2V0WChwb2ludCk7XG4gICAgICAgICAgY29uc3QgeSA9IHRoaXMueVNjYWxlKHBvaW50LnkpO1xuICAgICAgICAgIGNvbnN0IGtleSA9IGAke01hdGgucm91bmQoeCAqIDEwKSAvIDEwfSwke01hdGgucm91bmQoeSAqIDEwKSAvIDEwfWA7XG5cbiAgICAgICAgICBpZiAoIXBvaW50TWFwLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBwb2ludE1hcC5zZXQoa2V5LCBbXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBvaW50TWFwLmdldChrZXkpPy5wdXNoKHsgcG9pbnQsIHNlcmllcywgb3JpZ2luYWxJbmRleDogc2VyaWVzLm9yaWdpbmFsSW5kZXggfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGxldCBhbmltYXRpb25Db3VudGVyID0gMDtcbiAgICAgIGNvbnN0IHRvdGFsVmlzaWJsZVNlcmllc0NvdW50ID0gYWxsU2VyaWVzRGF0YS5maWx0ZXIoXG4gICAgICAgIChzKSA9PiAhdGhpcy5oaWRkZW5TZXJpZXMuaGFzKHMuaWQgfHwgcy5sYWJlbCB8fCBgc2VyaWVzLSR7cy5vcmlnaW5hbEluZGV4fWApICYmIHMuZGF0YSAmJiBzLmRhdGEubGVuZ3RoID4gMCxcbiAgICAgICkubGVuZ3RoO1xuXG4gICAgICBhbGxTZXJpZXNEYXRhLmZvckVhY2goKHNlcmllcykgPT4ge1xuICAgICAgICBjb25zdCBzZXJpZXNJZGVudGlmaWVyID0gc2VyaWVzLmlkIHx8IHNlcmllcy5sYWJlbCB8fCBgc2VyaWVzLSR7c2VyaWVzLm9yaWdpbmFsSW5kZXh9YDtcbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuU2VyaWVzLmhhcyhzZXJpZXNJZGVudGlmaWVyKSB8fCAhc2VyaWVzLmRhdGEgfHwgc2VyaWVzLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZUNvbG9yID0gc2VyaWVzLmxpbmVDb2xvciB8fCBnZXRDaGFydENvbG9yKHNlcmllcy5vcmlnaW5hbEluZGV4LCB0aGlzLmNoYXJ0Q29sb3JzKTtcbiAgICAgICAgY29uc3QgcG9pbnRzR3JvdXAgPSBhbGxQb2ludHNHcm91cFxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsIGBheC1saW5lLWNoYXJ0LXBvaW50cyBheC1saW5lLWNoYXJ0LXBvaW50cy0ke3Nlcmllcy5vcmlnaW5hbEluZGV4fWApXG4gICAgICAgICAgLmF0dHIoJ2RhdGEtc2VyaWVzLWlkZW50aWZpZXInLCBzZXJpZXNJZGVudGlmaWVyKVxuICAgICAgICAgIC5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG5cbiAgICAgICAgcG9pbnRzR3JvdXBcbiAgICAgICAgICAub24oJ21vdXNlZW50ZXInLCAoKSA9PiB0aGlzLmhhbmRsZVBvaW50R3JvdXBFbnRlcihzZXJpZXMub3JpZ2luYWxJbmRleCwgbGluZUNvbG9yKSlcbiAgICAgICAgICAub24oJ21vdXNlbGVhdmUnLCAoKSA9PiB0aGlzLmhhbmRsZVBvaW50R3JvdXBMZWF2ZSgpKTtcblxuICAgICAgICBjb25zdCBtYXhQb2ludHMgPSAxMDA7XG4gICAgICAgIGNvbnN0IHBvaW50RGF0YSA9XG4gICAgICAgICAgc2VyaWVzLmRhdGEubGVuZ3RoID4gbWF4UG9pbnRzID8gdGhpcy5nZXRSZWR1Y2VkRGF0YVBvaW50cyhzZXJpZXMuZGF0YSwgbWF4UG9pbnRzKSA6IHNlcmllcy5kYXRhO1xuXG4gICAgICAgIHBvaW50c0dyb3VwXG4gICAgICAgICAgLnNlbGVjdEFsbCgnY2lyY2xlJylcbiAgICAgICAgICAuZGF0YShwb2ludERhdGEpXG4gICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAuYXBwZW5kKCdjaXJjbGUnKVxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LXBvaW50JylcbiAgICAgICAgICAuYXR0cignY3gnLCBnZXRYKVxuICAgICAgICAgIC5hdHRyKCdjeScsIChkKSA9PiB0aGlzLnlTY2FsZShkLnkpKVxuICAgICAgICAgIC5hdHRyKCdyJywgMClcbiAgICAgICAgICAuYXR0cignZmlsbCcsIGxpbmVDb2xvcilcbiAgICAgICAgICAuYXR0cignc3Ryb2tlJywgJyNmZmYnKVxuICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxKVxuICAgICAgICAgIC5hdHRyKCdkYXRhLXgnLCAoZCkgPT4gZC54KVxuICAgICAgICAgIC5hdHRyKCdkYXRhLXknLCAoZCkgPT4gZC55KVxuICAgICAgICAgIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKVxuICAgICAgICAgIC5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdub25lJylcbiAgICAgICAgICAub24oJ21vdXNlZW50ZXInLCAoZXZlbnQ6IE1vdXNlRXZlbnQsIGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeCA9IGdldFgoZCk7XG4gICAgICAgICAgICBjb25zdCB5ID0gdGhpcy55U2NhbGUoZC55KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGAke01hdGgucm91bmQoeCAqIDEwKSAvIDEwfSwke01hdGgucm91bmQoeSAqIDEwKSAvIDEwfWA7XG4gICAgICAgICAgICBjb25zdCBvdmVybGFwcGluZ1BvaW50cyA9IHBvaW50TWFwLmdldChrZXkpIHx8IFtdO1xuXG4gICAgICAgICAgICBpZiAob3ZlcmxhcHBpbmdQb2ludHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZU92ZXJsYXBwaW5nUG9pbnRzSG92ZXIoZXZlbnQsIG92ZXJsYXBwaW5nUG9pbnRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRIb3ZlcihldmVudCwgZCwgc2VyaWVzLCBzZXJpZXMub3JpZ2luYWxJbmRleCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZDNcbiAgICAgICAgICAgICAgLnNlbGVjdChldmVudC50YXJnZXQgYXMgU1ZHQ2lyY2xlRWxlbWVudClcbiAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAuZHVyYXRpb24oMTUwKVxuICAgICAgICAgICAgICAuYXR0cigncicsICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5wb2ludFJhZGl1cyA/PyA0KSAqIDEuNSlcbiAgICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDIpXG4gICAgICAgICAgICAgIC5hdHRyKCdzdHJva2UnLCBgcmdiKHZhcigtLWF4LWNvbXAtbGluZS1jaGFydC1iZy1jb2xvcikpYCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAub24oJ21vdXNlbW92ZScsIChldmVudDogTW91c2VFdmVudCkgPT4gdGhpcy51cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQpKVxuICAgICAgICAgIC5vbignbW91c2VsZWF2ZScsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdG9vbHRpcFZpc2libGUuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZDNcbiAgICAgICAgICAgICAgLnNlbGVjdChldmVudC50YXJnZXQgYXMgU1ZHQ2lyY2xlRWxlbWVudClcbiAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAuZHVyYXRpb24oMTUwKVxuICAgICAgICAgICAgICAuYXR0cigncicsIHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnBvaW50UmFkaXVzID8/IDQpXG4gICAgICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxKVxuICAgICAgICAgICAgICAuYXR0cignc3Ryb2tlJywgJyNmZmYnKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5vbignY2xpY2snLCAoZXZlbnQ6IE1vdXNlRXZlbnQsIGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeCA9IGdldFgoZCk7XG4gICAgICAgICAgICBjb25zdCB5ID0gdGhpcy55U2NhbGUoZC55KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGAke01hdGgucm91bmQoeCAqIDEwKSAvIDEwfSwke01hdGgucm91bmQoeSAqIDEwKSAvIDEwfWA7XG4gICAgICAgICAgICBjb25zdCBvdmVybGFwcGluZ1BvaW50cyA9IHBvaW50TWFwLmdldChrZXkpIHx8IFtdO1xuXG4gICAgICAgICAgICBpZiAob3ZlcmxhcHBpbmdQb2ludHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBvdmVybGFwcGluZ1BvaW50cy5mb3JFYWNoKCh7IHBvaW50LCBzZXJpZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRDbGljayhldmVudCwgcG9pbnQsIHNlcmllcyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludENsaWNrKGV2ZW50LCBkLCBzZXJpZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgIC5kZWxheShcbiAgICAgICAgICAgIChkOiBhbnksIGk6IG51bWJlcikgPT4gaSAqIE1hdGgubWluKDUwLCAoYW5pbWF0aW9uRHVyYXRpb24gfHwgMCkgKiAwLjA1KSArIChhbmltYXRpb25EdXJhdGlvbiB8fCAwKSAqIDAuNSxcbiAgICAgICAgICApXG4gICAgICAgICAgLmR1cmF0aW9uKChhbmltYXRpb25EdXJhdGlvbiB8fCAwKSAqIDAuMylcbiAgICAgICAgICAuZWFzZShhbmltYXRpb25FYXNpbmcpXG4gICAgICAgICAgLmF0dHIoJ3InLCB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5wb2ludFJhZGl1cyA/PyA0KVxuICAgICAgICAgIC5vbignZW5kJywgKGQsIGksIG5vZGVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gbm9kZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBhbmltYXRpb25Db3VudGVyKys7XG4gICAgICAgICAgICAgIGlmIChhbmltYXRpb25Db3VudGVyID49IHRvdGFsVmlzaWJsZVNlcmllc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVQb2ludGVyRXZlbnRzQWZ0ZXJBbmltYXRpb24oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVuYWJsZVBvaW50ZXJFdmVudHNBZnRlckFuaW1hdGlvbigpO1xuICAgICAgICB9LFxuICAgICAgICBhbmltYXRpb25EdXJhdGlvbiB8fCAwICsgMTAwLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZVBvaW50ZXJFdmVudHNBZnRlckFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2hhcnQgfHwgIXRoaXMuc3ZnKSByZXR1cm47XG4gICAgdGhpcy5jaGFydC5zZWxlY3RBbGwoJy5heC1saW5lLWNoYXJ0LWFsbC1zZXJpZXMnKS5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdhbGwnKTtcbiAgICB0aGlzLmNoYXJ0LnNlbGVjdEFsbCgnLmF4LWxpbmUtY2hhcnQtc2VyaWVzJykuYXR0cigncG9pbnRlci1ldmVudHMnLCAnYWxsJyk7XG4gICAgdGhpcy5jaGFydC5zZWxlY3RBbGwoJy5heC1saW5lLWNoYXJ0LWxpbmUnKS5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdhbGwnKTtcbiAgICB0aGlzLmNoYXJ0LnNlbGVjdEFsbCgnLmF4LWxpbmUtY2hhcnQtYXJlYScpLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ2FsbCcpO1xuICAgIHRoaXMuY2hhcnQuc2VsZWN0QWxsKCcuYXgtbGluZS1jaGFydC1hbGwtcG9pbnRzJykuYXR0cigncG9pbnRlci1ldmVudHMnLCAnYWxsJyk7XG4gICAgdGhpcy5jaGFydC5zZWxlY3RBbGwoJy5heC1saW5lLWNoYXJ0LXBvaW50cycpLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ2FsbCcpO1xuICAgIHRoaXMuY2hhcnQuc2VsZWN0QWxsKCcuYXgtbGluZS1jaGFydC1wb2ludCcpLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ2FsbCcpO1xuICAgIHRoaXMuc3ZnLmNsYXNzZWQoJ2F4LWxpbmUtY2hhcnQtYW5pbWF0aW5nJywgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQb2ludEdyb3VwRW50ZXIob3JpZ2luYWxJbmRleDogbnVtYmVyLCBjb2xvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jaGFydFxuICAgICAgLnNlbGVjdChgLmF4LWxpbmUtY2hhcnQtc2VyaWVzLSR7b3JpZ2luYWxJbmRleH0gLmF4LWxpbmUtY2hhcnQtbGluZWApXG4gICAgICAudHJhbnNpdGlvbigpXG4gICAgICAuZHVyYXRpb24oMTUwKVxuICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5saW5lV2lkdGggPz8gMikgKiAxLjUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQb2ludEdyb3VwTGVhdmUoKTogdm9pZCB7XG4gICAgdGhpcy5jaGFydFxuICAgICAgLnNlbGVjdEFsbCgnLmF4LWxpbmUtY2hhcnQtbGluZScpXG4gICAgICAudHJhbnNpdGlvbigpXG4gICAgICAuZHVyYXRpb24oMTUwKVxuICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLmxpbmVXaWR0aCA/PyAyKTtcblxuICAgIGlmICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5zaG93Q3Jvc3NoYWlyID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmNoYXJ0LnNlbGVjdCgnLmF4LWxpbmUtY2hhcnQtY3Jvc3NoYWlyJykuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWR1Y2VkRGF0YVBvaW50cyhcbiAgICBkYXRhOiBBcnJheTx7IHg6IG51bWJlciB8IHN0cmluZzsgeTogbnVtYmVyIH0+LFxuICAgIG1heFBvaW50czogbnVtYmVyLFxuICApOiBBcnJheTx7IHg6IG51bWJlciB8IHN0cmluZzsgeTogbnVtYmVyIH0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPD0gbWF4UG9pbnRzKSByZXR1cm4gZGF0YTtcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PHsgeDogbnVtYmVyIHwgc3RyaW5nOyB5OiBudW1iZXIgfT4gPSBbXTtcbiAgICBjb25zdCBzdGVwID0gTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8gbWF4UG9pbnRzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IHN0ZXApIHtcbiAgICAgIHJlc3VsdC5wdXNoKGRhdGFbaV0pO1xuICAgIH1cbiAgICBpZiAocmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSAhPT0gZGF0YVtkYXRhLmxlbmd0aCAtIDFdKSB7XG4gICAgICByZXN1bHQucHVzaChkYXRhW2RhdGEubGVuZ3RoIC0gMV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQb2ludEhvdmVyKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIGRhdGFQb2ludDogQVhMaW5lQ2hhcnREYXRhWydkYXRhJ11bbnVtYmVyXSxcbiAgICBzZXJpZXM6IEFYTGluZUNoYXJ0RGF0YSAmIHsgb3JpZ2luYWxJbmRleDogbnVtYmVyIH0sXG4gICAgb3JpZ2luYWxJbmRleDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZmZlY3RpdmVPcHRpb25zKCkuc2hvd1Rvb2x0aXAgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjb2xvciA9IHNlcmllcy5saW5lQ29sb3IgfHwgZ2V0Q2hhcnRDb2xvcihvcmlnaW5hbEluZGV4LCB0aGlzLmNoYXJ0Q29sb3JzKTtcblxuICAgICAgdGhpcy5fdG9vbHRpcERhdGEuc2V0KHtcbiAgICAgICAgdGl0bGU6IGRhdGFQb2ludC50b29sdGlwTGFiZWwgfHwgc2VyaWVzLnRvb2x0aXBMYWJlbCB8fCBzZXJpZXMubGFiZWwgfHwgYFNlcmllcyAke29yaWdpbmFsSW5kZXggKyAxfWAsXG4gICAgICAgIHZhbHVlOiBkYXRhUG9pbnQueS50b1N0cmluZygpLFxuICAgICAgICBzZXJpZXNOYW1lOiBgeDogJHtkYXRhUG9pbnQueH1gLFxuICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fdG9vbHRpcFZpc2libGUuc2V0KHRydWUpO1xuICAgICAgdGhpcy51cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQpO1xuXG4gICAgICBpZiAodGhpcy5lZmZlY3RpdmVPcHRpb25zKCkuc2hvd0Nyb3NzaGFpciA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnNob3dDcm9zc2hhaXJMaW5lcyhkYXRhUG9pbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Nyb3NzaGFpckxpbmVzKGRhdGFQb2ludDogeyB4OiBudW1iZXIgfCBzdHJpbmc7IHk6IG51bWJlciB9KTogdm9pZCB7XG4gICAgY29uc3QgaXNCYW5kU2NhbGUgPSB0aGlzLnhTY2FsZS5iYW5kd2lkdGggIT09IHVuZGVmaW5lZDtcblxuICAgIGxldCB4OiBudW1iZXI7XG4gICAgaWYgKGlzQmFuZFNjYWxlKSB7XG4gICAgICB4ID0gdGhpcy54U2NhbGUoU3RyaW5nKGRhdGFQb2ludC54KSkgKyB0aGlzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSB0aGlzLnhTY2FsZShkYXRhUG9pbnQueCBhcyBudW1iZXIpO1xuICAgIH1cbiAgICBjb25zdCB5ID0gdGhpcy55U2NhbGUoZGF0YVBvaW50LnkpO1xuXG4gICAgbGV0IGNyb3NzaGFpckdyb3VwID0gdGhpcy5jaGFydC5zZWxlY3QoJy5heC1saW5lLWNoYXJ0LWNyb3NzaGFpcicpO1xuICAgIGlmIChjcm9zc2hhaXJHcm91cC5lbXB0eSgpKSB7XG4gICAgICBjcm9zc2hhaXJHcm91cCA9IHRoaXMuY2hhcnQuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1jcm9zc2hhaXInKS5hdHRyKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG4gICAgfVxuXG4gICAgY3Jvc3NoYWlyR3JvdXAuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7XG5cbiAgICBjcm9zc2hhaXJHcm91cFxuICAgICAgLmFwcGVuZCgnbGluZScpXG4gICAgICAuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1jcm9zc2hhaXItdmVydGljYWwnKVxuICAgICAgLmF0dHIoJ3gxJywgeClcbiAgICAgIC5hdHRyKCd5MScsIDApXG4gICAgICAuYXR0cigneDInLCB4KVxuICAgICAgLmF0dHIoJ3kyJywgdGhpcy5oZWlnaHQpXG4gICAgICAuYXR0cignc3Ryb2tlJywgJ3JnYmEodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LWdyaWQtbGluZXMtY29sb3IpLCAwLjUpJylcbiAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxKVxuICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCAnMywzJylcbiAgICAgIC5hdHRyKCdvcGFjaXR5JywgMC43KVxuICAgICAgLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcblxuICAgIGNyb3NzaGFpckdyb3VwXG4gICAgICAuYXBwZW5kKCdsaW5lJylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWNyb3NzaGFpci1ob3Jpem9udGFsJylcbiAgICAgIC5hdHRyKCd4MScsIDApXG4gICAgICAuYXR0cigneTEnLCB5KVxuICAgICAgLmF0dHIoJ3gyJywgdGhpcy53aWR0aClcbiAgICAgIC5hdHRyKCd5MicsIHkpXG4gICAgICAuYXR0cignc3Ryb2tlJywgJ3JnYmEodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LWdyaWQtbGluZXMtY29sb3IpLCAwLjUpJylcbiAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxKVxuICAgICAgLmF0dHIoJ3N0cm9rZS1kYXNoYXJyYXknLCAnMywzJylcbiAgICAgIC5hdHRyKCdvcGFjaXR5JywgMC43KVxuICAgICAgLmF0dHIoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVG9vbHRpcFBvc2l0aW9uKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jaGFydENvbnRhaW5lckVsKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB0b29sdGlwRWwgPSB0aGlzLmNoYXJ0Q29udGFpbmVyRWwoKS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jaGFydC10b29sdGlwJyk7XG5cbiAgICBpZiAoIXRvb2x0aXBFbCkge1xuICAgICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFggLSBjb250YWluZXIubGVmdDtcbiAgICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZIC0gY29udGFpbmVyLnRvcDtcbiAgICAgIHRoaXMuX3Rvb2x0aXBQb3NpdGlvbi5zZXQoeyB4LCB5IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRvb2x0aXBSZWN0ID0gdG9vbHRpcEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCB4ID0gZXZlbnQuY2xpZW50WCAtIGNvbnRhaW5lci5sZWZ0O1xuICAgIGNvbnN0IHkgPSBldmVudC5jbGllbnRZIC0gY29udGFpbmVyLnRvcDtcblxuICAgIGlmICh4ICsgdG9vbHRpcFJlY3Qud2lkdGggKyAyMCA+IGNvbnRhaW5lci53aWR0aCkge1xuICAgICAgeCA9IHggLSB0b29sdGlwUmVjdC53aWR0aCAtIDE1O1xuICAgIH1cbiAgICB0aGlzLl90b29sdGlwUG9zaXRpb24uc2V0KHsgeCwgeSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUG9pbnRDbGljayhcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBkYXRhUG9pbnQ6IEFYTGluZUNoYXJ0RGF0YVsnZGF0YSddW251bWJlcl0sXG4gICAgc2VyaWVzOiBBWExpbmVDaGFydERhdGEgJiB7IG9yaWdpbmFsSW5kZXg6IG51bWJlciB9LFxuICApOiB2b2lkIHtcbiAgICB0aGlzLnBvaW50Q2xpY2suZW1pdCh7XG4gICAgICBzZXJpZXM6IHNlcmllcywgLy8gc2VyaWVzIHN0aWxsIHJlZmVycyB0byB0aGUgZnVsbCBzZXJpZXMgZGF0YSB3aXRoIG9yaWdpbmFsSW5kZXhcbiAgICAgIHBvaW50OiBkYXRhUG9pbnQsXG4gICAgICBldmVudDoge1xuICAgICAgICBuYXRpdmVFdmVudDogZXZlbnQsXG4gICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dOb0RhdGFNZXNzYWdlKGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5kMy5zZWxlY3QoY29udGFpbmVyRWxlbWVudCkuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7XG4gICAgY29uc3QgbWVzc2FnZUNvbnRhaW5lciA9IHRoaXMuZDNcbiAgICAgIC5zZWxlY3QoY29udGFpbmVyRWxlbWVudClcbiAgICAgIC5hcHBlbmQoJ2RpdicpXG4gICAgICAuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1uby1kYXRhLW1lc3NhZ2UnKVxuICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXG4gICAgICAuc3R5bGUoJ2xlZnQnLCAnNTAlJylcbiAgICAgIC5zdHlsZSgndG9wJywgJzUwJScpXG4gICAgICAuc3R5bGUoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknKVxuICAgICAgLnN0eWxlKCd0ZXh0LWFsaWduJywgJ2NlbnRlcicpXG4gICAgICAuc3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCAncmdiKHZhcigtLWF4LWNvbXAtbGluZS1jaGFydC1iZy1jb2xvcikpJylcbiAgICAgIC5zdHlsZSgncGFkZGluZycsICcxLjVyZW0nKVxuICAgICAgLnN0eWxlKCdib3JkZXItcmFkaXVzJywgJzAuNXJlbScpXG4gICAgICAuc3R5bGUoJ2JveC1zaGFkb3cnLCAnMCAycHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMDgpJylcbiAgICAgIC5zdHlsZSgnd2lkdGgnLCAnODAlJylcbiAgICAgIC5zdHlsZSgnbWF4LXdpZHRoJywgJzMwMHB4Jyk7XG5cbiAgICBtZXNzYWdlQ29udGFpbmVyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtbm8tZGF0YS1pY29uJylcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjYnKVxuICAgICAgLnN0eWxlKCdtYXJnaW4tYm90dG9tJywgJzAuNzVyZW0nKVxuICAgICAgLmh0bWwoJzxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtY2hhcnQtbGluZSBmYS0yeFwiPjwvaT4nKTtcblxuICAgIG1lc3NhZ2VDb250YWluZXJcbiAgICAgIC5hcHBlbmQoJ2RpdicpXG4gICAgICAuYXR0cignY2xhc3MnLCAnYXgtbGluZS1jaGFydC1uby1kYXRhLXRleHQnKVxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMXJlbScpXG4gICAgICAuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgJzYwMCcpXG4gICAgICAuc3R5bGUoJ21hcmdpbi1ib3R0b20nLCAnMC41cmVtJylcbiAgICAgIC50ZXh0KCdObyBkYXRhIGF2YWlsYWJsZScpO1xuXG4gICAgbWVzc2FnZUNvbnRhaW5lclxuICAgICAgLmFwcGVuZCgnZGl2JylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LW5vLWRhdGEtaGVscCcpXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcwLjhyZW0nKVxuICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNicpXG4gICAgICAudGV4dCgnUGxlYXNlIHByb3ZpZGUgZGF0YSB0byBkaXNwbGF5IHRoZSBjaGFydCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93QWxsU2VyaWVzSGlkZGVuTWVzc2FnZShjb250YWluZXJFbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuZDMuc2VsZWN0KGNvbnRhaW5lckVsZW1lbnQpLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpOyAvLyBDbGVhciBleGlzdGluZyBjaGFydCBlbGVtZW50c1xuICAgIGNvbnN0IG1lc3NhZ2VDb250YWluZXIgPSB0aGlzLmQzXG4gICAgICAuc2VsZWN0KGNvbnRhaW5lckVsZW1lbnQpXG4gICAgICAuYXBwZW5kKCdkaXYnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYWxsLWhpZGRlbi1tZXNzYWdlJykgLy8gRGlmZmVyZW50IGNsYXNzXG4gICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcbiAgICAgIC5zdHlsZSgnbGVmdCcsICc1MCUnKVxuICAgICAgLnN0eWxlKCd0b3AnLCAnNTAlJylcbiAgICAgIC5zdHlsZSgndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKScpXG4gICAgICAuc3R5bGUoJ3RleHQtYWxpZ24nLCAnY2VudGVyJylcbiAgICAgIC5zdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsICdyZ2IodmFyKC0tYXgtY29tcC1saW5lLWNoYXJ0LWJnLWNvbG9yKSknKVxuICAgICAgLnN0eWxlKCdwYWRkaW5nJywgJzEuNXJlbScpXG4gICAgICAuc3R5bGUoJ2JvcmRlci1yYWRpdXMnLCAnMC41cmVtJylcbiAgICAgIC5zdHlsZSgnYm94LXNoYWRvdycsICcwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4wOCknKVxuICAgICAgLnN0eWxlKCd3aWR0aCcsICc4MCUnKVxuICAgICAgLnN0eWxlKCdtYXgtd2lkdGgnLCAnMzUwcHgnKTsgLy8gU2xpZ2h0bHkgd2lkZXIgZm9yIGxvbmdlciB0ZXh0XG5cbiAgICBtZXNzYWdlQ29udGFpbmVyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWxpbmUtY2hhcnQtYWxsLWhpZGRlbi1pY29uJylcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjYnKVxuICAgICAgLnN0eWxlKCdtYXJnaW4tYm90dG9tJywgJzAuNzVyZW0nKVxuICAgICAgLmh0bWwoJzxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtZXllLXNsYXNoIGZhLTJ4XCI+PC9pPicpOyAvLyBEaWZmZXJlbnQgaWNvblxuXG4gICAgbWVzc2FnZUNvbnRhaW5lclxuICAgICAgLmFwcGVuZCgnZGl2JylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWFsbC1oaWRkZW4tdGV4dCcpXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxcmVtJylcbiAgICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnNjAwJylcbiAgICAgIC5zdHlsZSgnbWFyZ2luLWJvdHRvbScsICcwLjVyZW0nKVxuICAgICAgLnRleHQoJ0FsbCBzZXJpZXMgYXJlIGhpZGRlbicpO1xuXG4gICAgbWVzc2FnZUNvbnRhaW5lclxuICAgICAgLmFwcGVuZCgnZGl2JylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdheC1saW5lLWNoYXJ0LWFsbC1oaWRkZW4taGVscCcpXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcwLjhyZW0nKVxuICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNicpXG4gICAgICAudGV4dCgnQ2xpY2sgbGVnZW5kIGl0ZW1zIHRvIHNob3cgc2VyaWVzIGluIHRoZSBjaGFydC4nKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT3ZlcmxhcHBpbmdQb2ludHNIb3ZlcihcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBvdmVybGFwcGluZ1BvaW50czogQXJyYXk8e1xuICAgICAgcG9pbnQ6IGFueTtcbiAgICAgIHNlcmllczogQVhMaW5lQ2hhcnREYXRhICYgeyBvcmlnaW5hbEluZGV4OiBudW1iZXIgfTtcbiAgICAgIG9yaWdpbmFsSW5kZXg6IG51bWJlcjtcbiAgICB9PixcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnNob3dUb29sdGlwID09PSBmYWxzZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgdG9vbHRpcERhdGE6IEFYQ2hhcnRUb29sdGlwRGF0YSA9IHtcbiAgICAgIHRpdGxlOiAnTXVsdGlwbGUgU2VyaWVzJyxcbiAgICAgIHZhbHVlOiBvdmVybGFwcGluZ1BvaW50c1swXS5wb2ludC55LnRvU3RyaW5nKCksXG4gICAgICBzZXJpZXNOYW1lOiAnJyxcbiAgICAgIGNvbG9yOiAnJyxcbiAgICAgIGl0ZW1zOiBvdmVybGFwcGluZ1BvaW50cy5tYXAoKHsgcG9pbnQsIHNlcmllcywgb3JpZ2luYWxJbmRleCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gc2VyaWVzLmxpbmVDb2xvciB8fCBnZXRDaGFydENvbG9yKG9yaWdpbmFsSW5kZXgsIHRoaXMuY2hhcnRDb2xvcnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhYmVsOiBzZXJpZXMubGFiZWwgfHwgYFNlcmllcyAke29yaWdpbmFsSW5kZXggKyAxfWAsXG4gICAgICAgICAgdmFsdWU6IHBvaW50LnkudG9TdHJpbmcoKSxcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9vbHRpcERhdGEuc2V0KHRvb2x0aXBEYXRhKTtcbiAgICB0aGlzLl90b29sdGlwVmlzaWJsZS5zZXQodHJ1ZSk7XG4gICAgdGhpcy51cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQpO1xuXG4gICAgaWYgKHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnNob3dDcm9zc2hhaXIgPT09IHRydWUgJiYgb3ZlcmxhcHBpbmdQb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zaG93Q3Jvc3NoYWlyTGluZXMob3ZlcmxhcHBpbmdQb2ludHNbMF0ucG9pbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWFzaW5nRnVuY3Rpb24oZWFzaW5nPzogc3RyaW5nKTogYW55IHtcbiAgICBzd2l0Y2ggKGVhc2luZykge1xuICAgICAgY2FzZSAnbGluZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZUxpbmVhcjtcbiAgICAgIGNhc2UgJ2Vhc2UnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlUG9seUluT3V0O1xuICAgICAgY2FzZSAnZWFzZS1pbic6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VQb2x5SW47XG4gICAgICBjYXNlICdlYXNlLW91dCc6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VQb2x5T3V0O1xuICAgICAgY2FzZSAnZWFzZS1pbi1vdXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlUG9seUluT3V0O1xuICAgICAgY2FzZSAnY3ViaWMnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlQ3ViaWM7XG4gICAgICBjYXNlICdjdWJpYy1pbic6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VDdWJpY0luO1xuICAgICAgY2FzZSAnY3ViaWMtb3V0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZUN1YmljT3V0O1xuICAgICAgY2FzZSAnY3ViaWMtaW4tb3V0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZUN1YmljSW5PdXQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlQ3ViaWNPdXQ7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtbGluZS1jaGFydFwiICNjaGFydENvbnRhaW5lcj5cbiAgPCEtLSBTaGFyZWQgdG9vbHRpcCBjb21wb25lbnQgLS0+XG4gIDxheC1jaGFydC10b29sdGlwXG4gICAgW3Zpc2libGVdPVwidG9vbHRpcFZpc2libGUoKVwiXG4gICAgW3Bvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbigpXCJcbiAgICBbZGF0YV09XCJ0b29sdGlwRGF0YSgpXCJcbiAgICBbc2hvd1BlcmNlbnRhZ2VdPVwiZmFsc2VcIlxuICA+PC9heC1jaGFydC10b29sdGlwPlxuPC9kaXY+XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNoYXJ0cy1saW5lLWNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2xpbmUtY2hhcnQvc3JjL2Fjb3JleC1jaGFydHMtbGluZS1jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}