@acorex/charts 21.0.1-next.55 → 21.0.1-next.57

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.
Files changed (25) hide show
  1. package/{types/acorex-charts-bar-chart.d.ts → bar-chart/index.d.ts} +1 -2
  2. package/{types/acorex-charts-donut-chart.d.ts → donut-chart/index.d.ts} +1 -2
  3. package/fesm2022/acorex-charts-bar-chart.mjs +4 -4
  4. package/fesm2022/acorex-charts-bar-chart.mjs.map +1 -1
  5. package/fesm2022/acorex-charts-chart-legend.mjs +5 -5
  6. package/fesm2022/acorex-charts-chart-legend.mjs.map +1 -1
  7. package/fesm2022/acorex-charts-chart-tooltip.mjs +4 -4
  8. package/fesm2022/acorex-charts-chart-tooltip.mjs.map +1 -1
  9. package/fesm2022/acorex-charts-donut-chart.mjs +4 -4
  10. package/fesm2022/acorex-charts-donut-chart.mjs.map +1 -1
  11. package/fesm2022/acorex-charts-gauge-chart.mjs +4 -4
  12. package/fesm2022/acorex-charts-gauge-chart.mjs.map +1 -1
  13. package/fesm2022/acorex-charts-hierarchy-chart.mjs +4 -4
  14. package/fesm2022/acorex-charts-hierarchy-chart.mjs.map +1 -1
  15. package/fesm2022/acorex-charts-line-chart.mjs +4 -4
  16. package/fesm2022/acorex-charts-line-chart.mjs.map +1 -1
  17. package/fesm2022/acorex-charts.mjs +3 -3
  18. package/fesm2022/acorex-charts.mjs.map +1 -1
  19. package/{types/acorex-charts-gauge-chart.d.ts → gauge-chart/index.d.ts} +1 -2
  20. package/{types/acorex-charts-hierarchy-chart.d.ts → hierarchy-chart/index.d.ts} +2 -3
  21. package/{types/acorex-charts-line-chart.d.ts → line-chart/index.d.ts} +1 -2
  22. package/package.json +10 -10
  23. /package/{types/acorex-charts-chart-legend.d.ts → chart-legend/index.d.ts} +0 -0
  24. /package/{types/acorex-charts-chart-tooltip.d.ts → chart-tooltip/index.d.ts} +0 -0
  25. /package/{types/acorex-charts.d.ts → index.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-charts-gauge-chart.mjs","sources":["../../../../packages/charts/gauge-chart/src/lib/gauge-chart.config.ts","../../../../packages/charts/gauge-chart/src/lib/gauge-chart.component.ts","../../../../packages/charts/gauge-chart/src/lib/gauge-chart.component.html","../../../../packages/charts/gauge-chart/src/acorex-charts-gauge-chart.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AXGaugeChartOption } from './gauge-chart.type';\n\nexport const AXGaugeChartDefaultConfig: AXGaugeChartOption = {\n minValue: 0,\n maxValue: 100,\n gaugeWidth: 22,\n cornerRadius: 5,\n showValue: true,\n showTooltip: true,\n animationDuration: 750,\n animationEasing: 'cubic-out',\n messages: {\n noData: 'No data available',\n noDataHelp: 'Please provide a value to display the gauge',\n noDataIcon: 'fa-light fa-gauge',\n },\n};\n\nexport const AX_GAUGE_CHART_CONFIG = new InjectionToken<AXGaugeChartOption>('AX_GAUGE_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => AXGaugeChartDefaultConfig,\n});\n\nexport type PartialGaugeChartConfig = Partial<AXGaugeChartOption>;\n\nexport function gaugeChartConfig(config: PartialGaugeChartConfig = {}): AXGaugeChartOption {\n const result = {\n ...AXGaugeChartDefaultConfig,\n ...config,\n };\n return result;\n}\n","import {\n AXChartComponent,\n AXChartComponentBase,\n computeTooltipPosition,\n formatLargeNumber,\n getEasingFunction,\n} from '@acorex/charts';\nimport { AXChartTooltipComponent, AXChartTooltipData } from '@acorex/charts/chart-tooltip';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n ViewEncapsulation,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport type * as d3 from 'd3';\nimport { AX_GAUGE_CHART_CONFIG } from './gauge-chart.config';\nimport { AXGaugeChartOption, AXGaugeChartValue } from './gauge-chart.type';\n\n/**\n * Gauge Chart Component\n * Renders a semi-circular gauge chart with animated needle and thresholds\n */\n@Component({\n selector: 'ax-gauge-chart',\n templateUrl: './gauge-chart.component.html',\n styleUrls: ['./gauge-chart.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [AXChartTooltipComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXGaugeChartComponent extends AXChartComponent implements OnDestroy, AXChartComponentBase {\n // Inputs\n /** Chart value input */\n value = input<AXGaugeChartValue>(0);\n\n /** Chart options input */\n options = input<AXGaugeChartOption>({});\n\n // Chart container reference\n private readonly chartContainerEl = viewChild.required<ElementRef<HTMLDivElement>>('chartContainer');\n\n // SVG element reference (created in the code)\n private svgElement: SVGSVGElement | null = null;\n\n // D3 reference - loaded asynchronously\n protected d3!: typeof import('d3');\n\n // Signals for component state\n private _initialized = signal(false);\n private _rendered = signal(false);\n private _prevValue = signal<number | null>(null);\n\n // Track previous options to detect changes\n private _prevOptionsString = '';\n\n // Cache for container dimensions to avoid repeated DOM reads\n private _lastContainerRect: { width: number; height: number } | null = null;\n\n // Tooltip signals\n private _tooltipVisible = signal(false);\n private _tooltipPosition = signal({ x: 0, y: 0 });\n private _tooltipData = signal<AXChartTooltipData>({\n title: '',\n value: '',\n });\n private _tooltipRafId: number | null = null;\n private _pendingTooltipCoords: { x: number; y: number } | null = null;\n\n // Expose tooltip signals as read-only for the template\n protected tooltipVisible = this._tooltipVisible.asReadonly();\n protected tooltipPosition = this._tooltipPosition.asReadonly();\n protected tooltipData = this._tooltipData.asReadonly();\n\n // Inject configuration\n private configToken = inject(AX_GAUGE_CHART_CONFIG);\n\n // Computed configuration options\n protected effectiveOptions = computed(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n });\n\n // Constants\n private readonly TOOLTIP_GAP = 10;\n private readonly HALF_CIRCLE_RADIANS = Math.PI;\n private readonly QUARTER_CIRCLE_RADIANS = Math.PI / 2;\n private readonly DEGREES_PER_RADIAN = 180 / Math.PI;\n\n constructor() {\n super();\n // Dynamically load D3 and initialize the chart when the component is ready\n afterNextRender(() => {\n this._initialized.set(true);\n this.loadD3();\n });\n\n // Watch for changes to redraw the chart\n effect(() => {\n // Access inputs to track them\n const currentValue = this.value();\n const options = this.effectiveOptions();\n\n // Update previous value\n this._prevValue.set(currentValue);\n\n // Only update if already rendered\n if (this._rendered()) {\n // If only the value changed, just update the value display and dial\n const optionsString = JSON.stringify(options);\n if (this._prevOptionsString === optionsString) {\n this.updateValueAndDial(currentValue);\n } else {\n // If options changed, recreate the whole chart\n this._prevOptionsString = optionsString;\n this.updateChart();\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n this.cleanupChart();\n }\n\n /**\n * Loads D3.js dynamically\n */\n protected async loadD3(): Promise<void> {\n if (this.d3) return; // Already loaded\n\n try {\n this.d3 = await import('d3');\n // If container is ready, create chart\n if (this._initialized() && this.chartContainerEl()) {\n this.createChart();\n this._rendered.set(true);\n }\n } catch (error) {\n console.error('Failed to load D3.js:', error);\n }\n }\n\n /**\n * Creates the gauge chart with all elements\n */\n public createChart(): void {\n // Clear container and create SVG\n if (this.svgElement) {\n this.svgElement.remove();\n }\n\n // Create SVG element\n this.svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n this.chartContainerEl().nativeElement.appendChild(this.svgElement);\n\n // Get current options\n const options = this.effectiveOptions();\n\n // Store options string for comparison\n this._prevOptionsString = JSON.stringify(options);\n\n const { minValue, maxValue, showValue, label = '', gaugeWidth, cornerRadius, animationDuration } = options;\n const thresholds = options.thresholds ?? [];\n\n // Calculate responsive dimensions\n const containerElement = this.chartContainerEl().nativeElement;\n const containerWidth = containerElement.clientWidth;\n const containerHeight = containerElement.clientHeight;\n\n // Cache container dimensions\n this._lastContainerRect = { width: containerWidth, height: containerHeight };\n\n // Determine chart dimensions - use options if provided, otherwise use container dimensions\n const width = options.width ?? containerWidth;\n const height = options.height ?? containerHeight;\n\n // Ensure minimum dimensions\n const effectiveWidth = Math.max(width, 100);\n const effectiveHeight = Math.max(height, 50);\n\n // For a semi-circular gauge, width should be approximately twice the height\n const size = Math.min(effectiveWidth, effectiveHeight * 2);\n\n // Calculate margin as percentage of size (5-8% with reasonable bounds)\n const marginRatio = 0.08;\n const margin = Math.max(5, Math.min(size * marginRatio, 30));\n\n // Calculate space needed for ticks and labels (increased for larger font sizes)\n const tickLabelSpace = Math.max(12, Math.min(size * 0.12, 40));\n const totalVerticalSpace = size / 2 + tickLabelSpace;\n\n // Calculate horizontal padding for tick labels (they extend beyond gauge edges)\n // Estimate based on font size - tick labels are roughly 2-3 characters wide\n const estimatedTickFontSize = Math.max(14, Math.min(18, Math.floor(size / 35)));\n const horizontalPadding = Math.max(20, estimatedTickFontSize * 1.5);\n const totalWidth = size + horizontalPadding * 2;\n\n // Set up SVG with responsive viewBox that accounts for overflow\n const svg = this.d3\n .select(this.svgElement)\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${totalWidth} ${totalVerticalSpace}`)\n .attr('preserveAspectRatio', 'xMidYMid meet');\n\n // Create a group for the chart centered horizontally with padding, positioned to show only the top half\n const chartGroup = svg\n .append('g')\n .attr('transform', `translate(${size / 2 + horizontalPadding}, ${size / 2 - margin})`);\n\n // Define gauge parameters\n const radius = size / 2 - margin;\n const desiredGaugeWidth = typeof gaugeWidth === 'number' && !Number.isNaN(gaugeWidth) ? gaugeWidth : size * 0.12;\n const clampedGaugeWidth = Math.max(size * 0.06, Math.min(desiredGaugeWidth, size * 0.2));\n const innerRadius = radius - clampedGaugeWidth;\n const outerRadius = radius;\n\n // Create gradient definitions\n this.createGradients(svg, thresholds);\n\n // Draw the background arc\n this.drawBackgroundArc(chartGroup, innerRadius, outerRadius, cornerRadius);\n\n // Draw the threshold arcs if thresholds exist\n if (thresholds.length > 0) {\n this.drawThresholds(chartGroup, innerRadius, outerRadius, minValue, maxValue, thresholds, cornerRadius);\n }\n\n // Draw tick marks\n this.drawTicks(chartGroup, outerRadius, minValue, maxValue, size);\n\n // Draw the dial/needle with animation\n this.drawDial(chartGroup, radius, this.value(), minValue, maxValue, animationDuration);\n\n // Draw the value display (after the dial so it's on top)\n if (showValue) {\n this.drawValueDisplay(chartGroup, this.value(), label, radius, size);\n }\n\n // Hide tooltip initially\n this._tooltipVisible.set(false);\n }\n\n /**\n * Updates the chart when options change\n */\n public updateChart(): void {\n this.createChart();\n }\n\n /**\n * Updates only the value display and dial position without recreating the chart\n */\n public updateValueAndDial(value: number): void {\n if (!this.svgElement) return;\n\n const options = this.effectiveOptions();\n const minValue = options.minValue;\n const maxValue = options.maxValue;\n const animationDuration = options.animationDuration;\n const easingFunction = getEasingFunction(this.d3, options.animationEasing);\n\n const currentValue = value;\n const svg = this.d3.select(this.svgElement);\n\n // Update value text\n svg.select('.gauge-value').text(currentValue.toLocaleString());\n\n // Update needle position\n const angle = this.scaleValueToAngle(currentValue, minValue, maxValue);\n const angleInDegrees = this.radiansToDegrees(angle - this.QUARTER_CIRCLE_RADIANS);\n\n svg\n .select('.gauge-needle')\n .attr('fill', 'rgb(var(--ax-comp-gauge-chart-needle-color))')\n .transition()\n .duration(animationDuration)\n .ease(easingFunction)\n .attr('transform', `rotate(${angleInDegrees})`);\n }\n\n /**\n * Draw the background arc\n */\n private drawBackgroundArc(\n chartGroup: d3.Selection<SVGGElement, unknown, null, undefined>,\n innerRadius: number,\n outerRadius: number,\n cornerRadius: number,\n ): void {\n // Create arc for the background\n const backgroundArc = this.d3\n .arc()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius)\n .startAngle(-this.QUARTER_CIRCLE_RADIANS) // Start from bottom (-90 degrees)\n .endAngle(this.QUARTER_CIRCLE_RADIANS) // End at top (90 degrees)\n .cornerRadius(cornerRadius);\n\n // Draw background arc\n const backgroundPath = chartGroup\n .append('path')\n .attr('d', backgroundArc)\n .attr('class', 'gauge-arc gauge-base')\n .attr('fill', 'url(#gauge-bg-gradient)')\n .attr('filter', 'drop-shadow(0px 2px 3px rgba(0,0,0,0.1))');\n\n // Add tooltip for single arc if no thresholds\n if (!this.effectiveOptions().thresholds || this.effectiveOptions().thresholds.length === 0) {\n backgroundPath\n .style('cursor', 'pointer')\n .on('mouseenter', (event) => {\n if (!this.effectiveOptions().showTooltip) return;\n this.showSingleRangeTooltip(event);\n })\n .on('mousemove', (event) => {\n if (this._tooltipVisible()) {\n this.updateTooltipPosition(event);\n }\n })\n .on('mouseleave', () => {\n this.hideTooltip();\n });\n }\n }\n\n /**\n * Draw the thresholds arcs\n */\n private drawThresholds(\n chartGroup: d3.Selection<SVGGElement, unknown, null, undefined>,\n innerRadius: number,\n outerRadius: number,\n minValue: number,\n maxValue: number,\n thresholds: { value: number; color: string; label?: string }[],\n cornerRadius: number,\n ): void {\n // Create arc generator\n const arc = this.d3\n .arc()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius * 0.98)\n .cornerRadius(cornerRadius);\n\n // Sort thresholds by value in ascending order (only if needed)\n const sortedThresholds = thresholds.length > 1 ? [...thresholds].sort((a, b) => a.value - b.value) : thresholds;\n\n // Calculate all angles first using the color angle calculation\n const angles = sortedThresholds.map((t) => this.scaleValueToColorAngle(t.value, minValue, maxValue));\n\n // Start from the minimum value angle\n let previousEndAngle = this.scaleValueToColorAngle(minValue, minValue, maxValue);\n\n sortedThresholds.forEach((threshold, i) => {\n const endAngle = angles[i];\n\n // Skip if end angle is not greater than start angle\n if (endAngle <= previousEndAngle) return;\n\n const arcPath = chartGroup\n .append('path')\n .attr(\n 'd',\n arc({\n innerRadius,\n outerRadius,\n startAngle: previousEndAngle,\n endAngle,\n }),\n )\n .attr('fill', threshold.color || `url(#threshold-gradient-${i})`)\n .attr('class', 'gauge-arc threshold-arc')\n .attr('data-value', threshold.value)\n .style('cursor', 'pointer');\n\n // Add tooltip interaction\n if (this.effectiveOptions().showTooltip) {\n // Convert angles back to values for tooltip\n const startValue = this.angleToValue(previousEndAngle, minValue, maxValue);\n const endValue = threshold.value;\n\n arcPath\n .on('mouseenter', (event) => {\n this.showThresholdTooltip(event, startValue, endValue, threshold.color, threshold.label);\n })\n .on('mousemove', (event) => {\n if (this._tooltipVisible()) {\n this.updateTooltipPosition(event);\n }\n })\n .on('mouseleave', () => {\n this.hideTooltip();\n });\n }\n\n // Update the previous end angle for the next threshold\n previousEndAngle = endAngle;\n });\n\n // Draw the last segment if the last threshold is less than the max value\n if (previousEndAngle < this.QUARTER_CIRCLE_RADIANS) {\n const lastArc = chartGroup\n .append('path')\n .attr(\n 'd',\n arc({\n innerRadius,\n outerRadius,\n startAngle: previousEndAngle,\n endAngle: this.QUARTER_CIRCLE_RADIANS,\n }),\n )\n .attr('fill', 'url(#gauge-bg-gradient)')\n .attr('class', 'gauge-arc threshold-arc')\n .style('cursor', 'pointer');\n\n // Add tooltip for the last segment\n if (this.effectiveOptions().showTooltip) {\n const startValue = this.angleToValue(previousEndAngle, minValue, maxValue);\n const endValue = maxValue;\n const lastThreshold = thresholds[thresholds.length - 1];\n\n lastArc\n .on('mouseenter', (event) => {\n this.showThresholdTooltip(event, startValue, endValue, lastThreshold.color, lastThreshold.label);\n })\n .on('mousemove', (event) => {\n if (this._tooltipVisible()) {\n this.updateTooltipPosition(event);\n }\n })\n .on('mouseleave', () => {\n this.hideTooltip();\n });\n }\n }\n }\n\n /**\n * Shows tooltip for a threshold arc\n */\n private showThresholdTooltip(\n event: MouseEvent,\n startValue: number,\n endValue: number,\n color: string,\n label?: string,\n ): void {\n // Create tooltip data\n this._tooltipData.set({\n title: label || 'Range',\n value: `${startValue.toLocaleString()} - ${endValue.toLocaleString()}`,\n color: color,\n });\n\n // Show tooltip\n this._tooltipVisible.set(true);\n this.updateTooltipPosition(event);\n }\n\n /**\n * Shows tooltip for the entire range when no thresholds are defined\n */\n private showSingleRangeTooltip(event: MouseEvent): void {\n const options = this.effectiveOptions();\n if (!options.showTooltip) return;\n\n this.updateTooltipPosition(event);\n this._tooltipData.set({\n title: options.label || 'Range',\n value: `${options.minValue.toLocaleString()} - ${options.maxValue.toLocaleString()}`,\n color: 'rgb(var(--ax-comp-gauge-chart-track-color))',\n });\n this._tooltipVisible.set(true);\n }\n\n private updateTooltipPosition(event: MouseEvent): void {\n this._pendingTooltipCoords = { x: event.clientX, y: event.clientY };\n if (this._tooltipRafId != null) return;\n this._tooltipRafId = requestAnimationFrame(() => {\n this._tooltipRafId = null;\n const coords = this._pendingTooltipCoords;\n if (!coords) return;\n const containerEl = this.chartContainerEl()?.nativeElement;\n if (!containerEl) return;\n const rect = containerEl.getBoundingClientRect();\n const tooltipEl = containerEl.querySelector('.chart-tooltip') as HTMLElement | null;\n const tooltipRect = tooltipEl?.getBoundingClientRect() ?? null;\n const pos = computeTooltipPosition(rect, tooltipRect, coords.x + 10, coords.y - 10, this.TOOLTIP_GAP);\n this._tooltipPosition.set(pos);\n });\n }\n\n /**\n * Hides the tooltip\n */\n private hideTooltip(): void {\n this._tooltipVisible.set(false);\n }\n\n /**\n * Cleans up chart resources\n */\n public cleanupChart(): void {\n if (this._tooltipRafId != null) {\n cancelAnimationFrame(this._tooltipRafId);\n this._tooltipRafId = null;\n }\n this._pendingTooltipCoords = null;\n\n if (this.svgElement) {\n this.svgElement.remove();\n this.svgElement = null;\n }\n this._tooltipVisible.set(false);\n this._lastContainerRect = null;\n }\n\n /**\n * Creates gradient definitions for thresholds\n */\n private createGradients(\n svg: d3.Selection<SVGSVGElement, unknown, null, undefined>,\n thresholds: { value: number; color: string }[],\n ): void {\n const defs = svg.append('defs');\n\n // Create a radial gradient for the background\n const bgGradient = defs\n .append('radialGradient')\n .attr('id', 'gauge-bg-gradient')\n .attr('cx', '50%')\n .attr('cy', '50%')\n .attr('r', '50%')\n .attr('gradientUnits', 'userSpaceOnUse');\n\n // Get CSS variable for track color\n if (thresholds.length === 0) {\n // Default gradient when no thresholds are provided\n bgGradient.append('stop').attr('offset', '0%').attr('stop-color', 'rgb(var(--ax-comp-gauge-chart-track-color))');\n bgGradient\n .append('stop')\n .attr('offset', '100%')\n .attr('stop-color', 'rgba(var(--ax-comp-gauge-chart-track-color), 0.8)');\n } else {\n bgGradient.append('stop').attr('offset', '0%').attr('stop-color', 'rgb(var(--ax-comp-gauge-chart-track-color))');\n bgGradient\n .append('stop')\n .attr('offset', '100%')\n .attr('stop-color', 'rgba(var(--ax-comp-gauge-chart-track-color), 0.8)');\n\n // Create gradients for each threshold\n thresholds.forEach((threshold, i) => {\n const gradient = defs\n .append('linearGradient')\n .attr('id', `threshold-gradient-${i}`)\n .attr('gradientUnits', 'userSpaceOnUse')\n .attr('x1', '-1')\n .attr('y1', '0')\n .attr('x2', '1')\n .attr('y2', '0');\n\n gradient\n .append('stop')\n .attr('offset', '0%')\n .attr('stop-color', this.d3.color(threshold.color)?.brighter(0.5).toString() || threshold.color);\n\n gradient.append('stop').attr('offset', '100%').attr('stop-color', threshold.color);\n });\n }\n }\n\n /**\n * Draws tick marks and labels around the gauge\n */\n private drawTicks(\n chartGroup: d3.Selection<SVGGElement, unknown, null, undefined>,\n radius: number,\n minValue: number,\n maxValue: number,\n size: number,\n ): void {\n // Dynamically choose tick count based on chart size (reduced for better spacing)\n let tickCount = 5;\n if (size < 200)\n tickCount = 3; // Very small: only show min, mid, max\n else if (size < 300) tickCount = 4;\n else if (size < 400) tickCount = 5;\n else if (size > 520) tickCount = 7;\n\n // Scale tick length and label offset proportionally to size\n const tickLength = Math.max(4, Math.min(radius * 0.12, 14));\n // Increased label offset to prevent overlap with tick lines and wide labels (like 100M)\n const labelOffset = Math.max(22, Math.min(radius * 0.28, 45));\n\n // Create a group for the ticks\n const tickGroup = chartGroup.append('g').attr('class', 'ticks');\n\n // Generate tick values\n const tickValues = [] as number[];\n const step = (maxValue - minValue) / (tickCount - 1);\n for (let i = 0; i < tickCount; i++) {\n tickValues.push(minValue + i * step);\n }\n\n // Create ticks and labels\n tickValues.forEach((tick) => {\n // Calculate angle for this tick\n const angle = this.scaleValueToAngle(tick, minValue, maxValue);\n const radians = angle - this.QUARTER_CIRCLE_RADIANS; // Adjust for starting at bottom (-90 degrees)\n\n // Calculate positions\n const x1 = Math.cos(radians) * (radius + 5);\n const y1 = Math.sin(radians) * (radius + 5);\n const x2 = Math.cos(radians) * (radius + tickLength);\n const y2 = Math.sin(radians) * (radius + tickLength);\n\n // Calculate label position\n const labelX = Math.cos(radians) * (radius + labelOffset);\n const labelY = Math.sin(radians) * (radius + labelOffset);\n\n // Draw tick line\n tickGroup\n .append('line')\n .attr('x1', x1)\n .attr('y1', y1)\n .attr('x2', x2)\n .attr('y2', y2)\n .attr('stroke', 'rgba(var(--ax-comp-gauge-chart-text-color), 0.5)')\n .attr('stroke-width', 2);\n\n // Add tick label with dynamic font size (minimum 14px)\n const tickFontPx = Math.max(14, Math.min(18, Math.floor(size / 35)));\n \n // Smart formatting: preserve decimals for small ranges, round for large values\n const valueRange = maxValue - minValue;\n let formattedValue: string;\n \n if (valueRange <= 10) {\n // Small range: show up to 2 decimal places, remove trailing zeros\n formattedValue = tick.toFixed(2).replace(/\\.?0+$/, '');\n } else if (valueRange < 1000) {\n // Medium range: show 1 decimal if needed\n formattedValue = tick % 1 === 0 ? tick.toString() : tick.toFixed(1);\n } else {\n // Large range: use abbreviated format (K, M, B)\n formattedValue = formatLargeNumber(Math.round(tick));\n }\n \n tickGroup\n .append('text')\n .attr('x', labelX)\n .attr('y', labelY)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('fill', 'rgba(var(--ax-comp-gauge-chart-text-color), 0.7)')\n .style('font-size', `${tickFontPx}px`)\n .text(formattedValue);\n });\n }\n\n /**\n * Draws the value and label text in the center\n */\n private drawValueDisplay(\n chartGroup: d3.Selection<SVGGElement, unknown, null, undefined>,\n value: number,\n label: string,\n radius: number,\n size: number,\n ): void {\n // Px-based scaling for robust small/large sizes with better small-size handling\n const valueFontPx = Math.max(18, Math.min(32, Math.floor(size / 8)));\n const labelFontPx = Math.max(10, Math.min(16, Math.floor(valueFontPx * 0.55)));\n // More vertical gap for small sizes: use larger base value\n const verticalGap = Math.max(6, Math.min(12, Math.floor(size / 40)));\n\n // Create group for the value display\n const valueGroup = chartGroup.append('g').attr('class', 'gauge-value-display').attr('text-anchor', 'middle');\n\n // Add value display\n valueGroup\n .append('text')\n .attr('class', 'gauge-value')\n .attr('x', 0)\n .attr('y', radius * 0.15 + valueFontPx)\n .style('font-size', `${valueFontPx}px`)\n .style('font-weight', '600')\n .style('fill', 'rgb(var(--ax-comp-gauge-chart-text-color))')\n .text(value.toLocaleString());\n\n // Add label display (if provided)\n if (label) {\n valueGroup\n .append('text')\n .attr('class', 'gauge-label')\n .attr('x', 0)\n .attr('y', radius * 0.24 + valueFontPx + verticalGap)\n .style('font-size', `${labelFontPx}px`)\n .style('fill', 'rgb(var(--ax-comp-gauge-chart-text-color))')\n .style('opacity', '0.8')\n .text(label);\n }\n }\n\n /**\n * Draws the dial/needle pointing to the current value with animation\n */\n private drawDial(\n chartGroup: d3.Selection<SVGGElement, unknown, null, undefined>,\n radius: number,\n value: number,\n minValue: number,\n maxValue: number,\n animationDuration: number,\n ): void {\n // Clamp value to min/max range\n const clampedValue = Math.max(minValue, Math.min(maxValue, value));\n\n // Calculate angle for needle based on value\n const angle = this.scaleValueToAngle(clampedValue, minValue, maxValue);\n const angleInDegrees = this.radiansToDegrees(angle - this.QUARTER_CIRCLE_RADIANS);\n\n // Create a group for the needle\n const dialGroup = chartGroup.append('g').attr('class', 'dial');\n\n // Draw the needle with initial position at minimum value\n const needlePath = dialGroup\n .append('path')\n .attr('d', this.createNeedlePath(radius))\n .attr('class', 'gauge-needle')\n .attr('fill', 'rgb(var(--ax-comp-gauge-chart-needle-color))')\n .attr('transform', `rotate(${this.radiansToDegrees(-this.HALF_CIRCLE_RADIANS)})`); // Start at -180 degrees (left)\n\n // Add a center circle\n dialGroup\n .append('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', radius * 0.08)\n .attr('fill', 'rgb(var(--ax-comp-gauge-chart-needle-color))')\n .attr('stroke', '#fff')\n .attr('stroke-width', 2);\n\n // Add a smaller white center\n dialGroup\n .append('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', radius * 0.03)\n .attr('fill', '#fff');\n\n // Get easing function\n const easingFunction = getEasingFunction(this.d3, this.options()?.animationEasing);\n\n // Animate the needle from min to current value\n needlePath\n .transition()\n .duration(animationDuration)\n .ease(easingFunction)\n .attr('transform', `rotate(${angleInDegrees})`);\n }\n\n // getEasingFunction moved to shared chart utils\n\n /**\n * Creates a path string for the needle\n */\n private createNeedlePath(radius: number): string {\n const needleLength = radius * 0.8;\n const needleWidth = radius * 0.06;\n return `M 0,${needleWidth / 2} L ${needleLength},0 L 0,${-needleWidth / 2} Z`;\n }\n\n /**\n * Scales a value to an angle (in radians)\n */\n private scaleValueToAngle(value: number, min: number, max: number): number {\n const valueRange = max - min;\n return ((value - min) / valueRange) * this.HALF_CIRCLE_RADIANS - this.QUARTER_CIRCLE_RADIANS;\n }\n\n /**\n * Scales a value to an angle for color arcs (in radians)\n */\n private scaleValueToColorAngle(value: number, min: number, max: number): number {\n const valueRange = max - min;\n return ((value - min) / valueRange) * this.HALF_CIRCLE_RADIANS - this.QUARTER_CIRCLE_RADIANS;\n }\n\n /**\n * Converts an angle back to a value\n */\n private angleToValue(angle: number, min: number, max: number): number {\n const valueRange = max - min;\n return min + ((angle + this.QUARTER_CIRCLE_RADIANS) / this.HALF_CIRCLE_RADIANS) * valueRange;\n }\n\n /**\n * Converts radians to degrees\n */\n private radiansToDegrees(radians: number): number {\n return radians * this.DEGREES_PER_RADIAN;\n }\n}\n","<div class=\"ax-gauge-chart\" role=\"img\" #chartContainer></div>\n<ax-chart-tooltip [data]=\"tooltipData()\" [position]=\"tooltipPosition()\" [visible]=\"tooltipVisible()\"></ax-chart-tooltip>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-charts-gauge-chart.mjs","sources":["../tmp-esm2022/gauge-chart/lib/gauge-chart.config.js","../tmp-esm2022/gauge-chart/lib/gauge-chart.component.js","../tmp-esm2022/gauge-chart/acorex-charts-gauge-chart.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport const AXGaugeChartDefaultConfig = {\n minValue: 0,\n maxValue: 100,\n gaugeWidth: 22,\n cornerRadius: 5,\n showValue: true,\n showTooltip: true,\n animationDuration: 750,\n animationEasing: 'cubic-out',\n messages: {\n noData: 'No data available',\n noDataHelp: 'Please provide a value to display the gauge',\n noDataIcon: 'fa-light fa-gauge',\n },\n};\nexport const AX_GAUGE_CHART_CONFIG = new InjectionToken('AX_GAUGE_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => AXGaugeChartDefaultConfig,\n});\nexport function gaugeChartConfig(config = {}) {\n const result = {\n ...AXGaugeChartDefaultConfig,\n ...config,\n };\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F1Z2UtY2hhcnQuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2dhdWdlLWNoYXJ0L3NyYy9saWIvZ2F1Z2UtY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQXVCO0lBQzNELFFBQVEsRUFBRSxDQUFDO0lBQ1gsUUFBUSxFQUFFLEdBQUc7SUFDYixVQUFVLEVBQUUsRUFBRTtJQUNkLFlBQVksRUFBRSxDQUFDO0lBQ2YsU0FBUyxFQUFFLElBQUk7SUFDZixXQUFXLEVBQUUsSUFBSTtJQUNqQixpQkFBaUIsRUFBRSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxXQUFXO0lBQzVCLFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSxtQkFBbUI7UUFDM0IsVUFBVSxFQUFFLDZDQUE2QztRQUN6RCxVQUFVLEVBQUUsbUJBQW1CO0tBQ2hDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFxQix1QkFBdUIsRUFBRTtJQUNuRyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMseUJBQXlCO0NBQ3pDLENBQUMsQ0FBQztBQUlILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxTQUFrQyxFQUFFO0lBQ25FLE1BQU0sTUFBTSxHQUFHO1FBQ2IsR0FBRyx5QkFBeUI7UUFDNUIsR0FBRyxNQUFNO0tBQ1YsQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhHYXVnZUNoYXJ0T3B0aW9uIH0gZnJvbSAnLi9nYXVnZS1jaGFydC50eXBlJztcblxuZXhwb3J0IGNvbnN0IEFYR2F1Z2VDaGFydERlZmF1bHRDb25maWc6IEFYR2F1Z2VDaGFydE9wdGlvbiA9IHtcbiAgbWluVmFsdWU6IDAsXG4gIG1heFZhbHVlOiAxMDAsXG4gIGdhdWdlV2lkdGg6IDIyLFxuICBjb3JuZXJSYWRpdXM6IDUsXG4gIHNob3dWYWx1ZTogdHJ1ZSxcbiAgc2hvd1Rvb2x0aXA6IHRydWUsXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiA3NTAsXG4gIGFuaW1hdGlvbkVhc2luZzogJ2N1YmljLW91dCcsXG4gIG1lc3NhZ2VzOiB7XG4gICAgbm9EYXRhOiAnTm8gZGF0YSBhdmFpbGFibGUnLFxuICAgIG5vRGF0YUhlbHA6ICdQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIHRvIGRpc3BsYXkgdGhlIGdhdWdlJyxcbiAgICBub0RhdGFJY29uOiAnZmEtbGlnaHQgZmEtZ2F1Z2UnLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEFYX0dBVUdFX0NIQVJUX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWEdhdWdlQ2hhcnRPcHRpb24+KCdBWF9HQVVHRV9DSEFSVF9DT05GSUcnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gQVhHYXVnZUNoYXJ0RGVmYXVsdENvbmZpZyxcbn0pO1xuXG5leHBvcnQgdHlwZSBQYXJ0aWFsR2F1Z2VDaGFydENvbmZpZyA9IFBhcnRpYWw8QVhHYXVnZUNoYXJ0T3B0aW9uPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdhdWdlQ2hhcnRDb25maWcoY29uZmlnOiBQYXJ0aWFsR2F1Z2VDaGFydENvbmZpZyA9IHt9KTogQVhHYXVnZUNoYXJ0T3B0aW9uIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIC4uLkFYR2F1Z2VDaGFydERlZmF1bHRDb25maWcsXG4gICAgLi4uY29uZmlnLFxuICB9O1xuICByZXR1cm4gcmVzdWx0O1xufVxuIl19","import { AXChartComponent, computeTooltipPosition, formatLargeNumber, getEasingFunction, } from '@acorex/charts';\nimport { AXChartTooltipComponent } from '@acorex/charts/chart-tooltip';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, afterNextRender, computed, effect, inject, input, signal, viewChild, } from '@angular/core';\nimport { AX_GAUGE_CHART_CONFIG } from './gauge-chart.config';\nimport * as i0 from \"@angular/core\";\n/**\n * Gauge Chart Component\n * Renders a semi-circular gauge chart with animated needle and thresholds\n */\nexport class AXGaugeChartComponent extends AXChartComponent {\n // Inputs\n /** Chart value input */\n value = input(0, ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n /** Chart options input */\n options = input({}, ...(ngDevMode ? [{ debugName: \"options\" }] : []));\n // Chart container reference\n chartContainerEl = viewChild.required('chartContainer');\n // SVG element reference (created in the code)\n svgElement = null;\n // D3 reference - loaded asynchronously\n d3;\n // Signals for component state\n _initialized = signal(false, ...(ngDevMode ? [{ debugName: \"_initialized\" }] : []));\n _rendered = signal(false, ...(ngDevMode ? [{ debugName: \"_rendered\" }] : []));\n _prevValue = signal(null, ...(ngDevMode ? [{ debugName: \"_prevValue\" }] : []));\n // Track previous options to detect changes\n _prevOptionsString = '';\n // Cache for container dimensions to avoid repeated DOM reads\n _lastContainerRect = null;\n // Tooltip signals\n _tooltipVisible = signal(false, ...(ngDevMode ? [{ debugName: \"_tooltipVisible\" }] : []));\n _tooltipPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: \"_tooltipPosition\" }] : []));\n _tooltipData = signal({\n title: '',\n value: '',\n }, ...(ngDevMode ? [{ debugName: \"_tooltipData\" }] : []));\n _tooltipRafId = null;\n _pendingTooltipCoords = null;\n // Expose tooltip signals as read-only for the template\n tooltipVisible = this._tooltipVisible.asReadonly();\n tooltipPosition = this._tooltipPosition.asReadonly();\n tooltipData = this._tooltipData.asReadonly();\n // Inject configuration\n configToken = inject(AX_GAUGE_CHART_CONFIG);\n // Computed configuration options\n effectiveOptions = computed(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n }, ...(ngDevMode ? [{ debugName: \"effectiveOptions\" }] : []));\n // Constants\n TOOLTIP_GAP = 10;\n HALF_CIRCLE_RADIANS = Math.PI;\n QUARTER_CIRCLE_RADIANS = Math.PI / 2;\n DEGREES_PER_RADIAN = 180 / Math.PI;\n constructor() {\n super();\n // Dynamically load D3 and initialize the chart when the component is ready\n afterNextRender(() => {\n this._initialized.set(true);\n this.loadD3();\n });\n // Watch for changes to redraw the chart\n effect(() => {\n // Access inputs to track them\n const currentValue = this.value();\n const options = this.effectiveOptions();\n // Update previous value\n this._prevValue.set(currentValue);\n // Only update if already rendered\n if (this._rendered()) {\n // If only the value changed, just update the value display and dial\n const optionsString = JSON.stringify(options);\n if (this._prevOptionsString === optionsString) {\n this.updateValueAndDial(currentValue);\n }\n else {\n // If options changed, recreate the whole chart\n this._prevOptionsString = optionsString;\n this.updateChart();\n }\n }\n });\n }\n ngOnDestroy() {\n this.cleanupChart();\n }\n /**\n * Loads D3.js dynamically\n */\n async loadD3() {\n if (this.d3)\n return; // Already loaded\n try {\n this.d3 = await import('d3');\n // If container is ready, create chart\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 /**\n * Creates the gauge chart with all elements\n */\n createChart() {\n // Clear container and create SVG\n if (this.svgElement) {\n this.svgElement.remove();\n }\n // Create SVG element\n this.svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n this.chartContainerEl().nativeElement.appendChild(this.svgElement);\n // Get current options\n const options = this.effectiveOptions();\n // Store options string for comparison\n this._prevOptionsString = JSON.stringify(options);\n const { minValue, maxValue, showValue, label = '', gaugeWidth, cornerRadius, animationDuration } = options;\n const thresholds = options.thresholds ?? [];\n // Calculate responsive dimensions\n const containerElement = this.chartContainerEl().nativeElement;\n const containerWidth = containerElement.clientWidth;\n const containerHeight = containerElement.clientHeight;\n // Cache container dimensions\n this._lastContainerRect = { width: containerWidth, height: containerHeight };\n // Determine chart dimensions - use options if provided, otherwise use container dimensions\n const width = options.width ?? containerWidth;\n const height = options.height ?? containerHeight;\n // Ensure minimum dimensions\n const effectiveWidth = Math.max(width, 100);\n const effectiveHeight = Math.max(height, 50);\n // For a semi-circular gauge, width should be approximately twice the height\n const size = Math.min(effectiveWidth, effectiveHeight * 2);\n // Calculate margin as percentage of size (5-8% with reasonable bounds)\n const marginRatio = 0.08;\n const margin = Math.max(5, Math.min(size * marginRatio, 30));\n // Calculate space needed for ticks and labels (increased for larger font sizes)\n const tickLabelSpace = Math.max(12, Math.min(size * 0.12, 40));\n const totalVerticalSpace = size / 2 + tickLabelSpace;\n // Calculate horizontal padding for tick labels (they extend beyond gauge edges)\n // Estimate based on font size - tick labels are roughly 2-3 characters wide\n const estimatedTickFontSize = Math.max(14, Math.min(18, Math.floor(size / 35)));\n const horizontalPadding = Math.max(20, estimatedTickFontSize * 1.5);\n const totalWidth = size + horizontalPadding * 2;\n // Set up SVG with responsive viewBox that accounts for overflow\n const svg = this.d3\n .select(this.svgElement)\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${totalWidth} ${totalVerticalSpace}`)\n .attr('preserveAspectRatio', 'xMidYMid meet');\n // Create a group for the chart centered horizontally with padding, positioned to show only the top half\n const chartGroup = svg\n .append('g')\n .attr('transform', `translate(${size / 2 + horizontalPadding}, ${size / 2 - margin})`);\n // Define gauge parameters\n const radius = size / 2 - margin;\n const desiredGaugeWidth = typeof gaugeWidth === 'number' && !Number.isNaN(gaugeWidth) ? gaugeWidth : size * 0.12;\n const clampedGaugeWidth = Math.max(size * 0.06, Math.min(desiredGaugeWidth, size * 0.2));\n const innerRadius = radius - clampedGaugeWidth;\n const outerRadius = radius;\n // Create gradient definitions\n this.createGradients(svg, thresholds);\n // Draw the background arc\n this.drawBackgroundArc(chartGroup, innerRadius, outerRadius, cornerRadius);\n // Draw the threshold arcs if thresholds exist\n if (thresholds.length > 0) {\n this.drawThresholds(chartGroup, innerRadius, outerRadius, minValue, maxValue, thresholds, cornerRadius);\n }\n // Draw tick marks\n this.drawTicks(chartGroup, outerRadius, minValue, maxValue, size);\n // Draw the dial/needle with animation\n this.drawDial(chartGroup, radius, this.value(), minValue, maxValue, animationDuration);\n // Draw the value display (after the dial so it's on top)\n if (showValue) {\n this.drawValueDisplay(chartGroup, this.value(), label, radius, size);\n }\n // Hide tooltip initially\n this._tooltipVisible.set(false);\n }\n /**\n * Updates the chart when options change\n */\n updateChart() {\n this.createChart();\n }\n /**\n * Updates only the value display and dial position without recreating the chart\n */\n updateValueAndDial(value) {\n if (!this.svgElement)\n return;\n const options = this.effectiveOptions();\n const minValue = options.minValue;\n const maxValue = options.maxValue;\n const animationDuration = options.animationDuration;\n const easingFunction = getEasingFunction(this.d3, options.animationEasing);\n const currentValue = value;\n const svg = this.d3.select(this.svgElement);\n // Update value text\n svg.select('.gauge-value').text(currentValue.toLocaleString());\n // Update needle position\n const angle = this.scaleValueToAngle(currentValue, minValue, maxValue);\n const angleInDegrees = this.radiansToDegrees(angle - this.QUARTER_CIRCLE_RADIANS);\n svg\n .select('.gauge-needle')\n .attr('fill', 'rgb(var(--ax-comp-gauge-chart-needle-color))')\n .transition()\n .duration(animationDuration)\n .ease(easingFunction)\n .attr('transform', `rotate(${angleInDegrees})`);\n }\n /**\n * Draw the background arc\n */\n drawBackgroundArc(chartGroup, innerRadius, outerRadius, cornerRadius) {\n // Create arc for the background\n const backgroundArc = this.d3\n .arc()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius)\n .startAngle(-this.QUARTER_CIRCLE_RADIANS) // Start from bottom (-90 degrees)\n .endAngle(this.QUARTER_CIRCLE_RADIANS) // End at top (90 degrees)\n .cornerRadius(cornerRadius);\n // Draw background arc\n const backgroundPath = chartGroup\n .append('path')\n .attr('d', backgroundArc)\n .attr('class', 'gauge-arc gauge-base')\n .attr('fill', 'url(#gauge-bg-gradient)')\n .attr('filter', 'drop-shadow(0px 2px 3px rgba(0,0,0,0.1))');\n // Add tooltip for single arc if no thresholds\n if (!this.effectiveOptions().thresholds || this.effectiveOptions().thresholds.length === 0) {\n backgroundPath\n .style('cursor', 'pointer')\n .on('mouseenter', (event) => {\n if (!this.effectiveOptions().showTooltip)\n return;\n this.showSingleRangeTooltip(event);\n })\n .on('mousemove', (event) => {\n if (this._tooltipVisible()) {\n this.updateTooltipPosition(event);\n }\n })\n .on('mouseleave', () => {\n this.hideTooltip();\n });\n }\n }\n /**\n * Draw the thresholds arcs\n */\n drawThresholds(chartGroup, innerRadius, outerRadius, minValue, maxValue, thresholds, cornerRadius) {\n // Create arc generator\n const arc = this.d3\n .arc()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius * 0.98)\n .cornerRadius(cornerRadius);\n // Sort thresholds by value in ascending order (only if needed)\n const sortedThresholds = thresholds.length > 1 ? [...thresholds].sort((a, b) => a.value - b.value) : thresholds;\n // Calculate all angles first using the color angle calculation\n const angles = sortedThresholds.map((t) => this.scaleValueToColorAngle(t.value, minValue, maxValue));\n // Start from the minimum value angle\n let previousEndAngle = this.scaleValueToColorAngle(minValue, minValue, maxValue);\n sortedThresholds.forEach((threshold, i) => {\n const endAngle = angles[i];\n // Skip if end angle is not greater than start angle\n if (endAngle <= previousEndAngle)\n return;\n const arcPath = chartGroup\n .append('path')\n .attr('d', arc({\n innerRadius,\n outerRadius,\n startAngle: previousEndAngle,\n endAngle,\n }))\n .attr('fill', threshold.color || `url(#threshold-gradient-${i})`)\n .attr('class', 'gauge-arc threshold-arc')\n .attr('data-value', threshold.value)\n .style('cursor', 'pointer');\n // Add tooltip interaction\n if (this.effectiveOptions().showTooltip) {\n // Convert angles back to values for tooltip\n const startValue = this.angleToValue(previousEndAngle, minValue, maxValue);\n const endValue = threshold.value;\n arcPath\n .on('mouseenter', (event) => {\n this.showThresholdTooltip(event, startValue, endValue, threshold.color, threshold.label);\n })\n .on('mousemove', (event) => {\n if (this._tooltipVisible()) {\n this.updateTooltipPosition(event);\n }\n })\n .on('mouseleave', () => {\n this.hideTooltip();\n });\n }\n // Update the previous end angle for the next threshold\n previousEndAngle = endAngle;\n });\n // Draw the last segment if the last threshold is less than the max value\n if (previousEndAngle < this.QUARTER_CIRCLE_RADIANS) {\n const lastArc = chartGroup\n .append('path')\n .attr('d', arc({\n innerRadius,\n outerRadius,\n startAngle: previousEndAngle,\n endAngle: this.QUARTER_CIRCLE_RADIANS,\n }))\n .attr('fill', 'url(#gauge-bg-gradient)')\n .attr('class', 'gauge-arc threshold-arc')\n .style('cursor', 'pointer');\n // Add tooltip for the last segment\n if (this.effectiveOptions().showTooltip) {\n const startValue = this.angleToValue(previousEndAngle, minValue, maxValue);\n const endValue = maxValue;\n const lastThreshold = thresholds[thresholds.length - 1];\n lastArc\n .on('mouseenter', (event) => {\n this.showThresholdTooltip(event, startValue, endValue, lastThreshold.color, lastThreshold.label);\n })\n .on('mousemove', (event) => {\n if (this._tooltipVisible()) {\n this.updateTooltipPosition(event);\n }\n })\n .on('mouseleave', () => {\n this.hideTooltip();\n });\n }\n }\n }\n /**\n * Shows tooltip for a threshold arc\n */\n showThresholdTooltip(event, startValue, endValue, color, label) {\n // Create tooltip data\n this._tooltipData.set({\n title: label || 'Range',\n value: `${startValue.toLocaleString()} - ${endValue.toLocaleString()}`,\n color: color,\n });\n // Show tooltip\n this._tooltipVisible.set(true);\n this.updateTooltipPosition(event);\n }\n /**\n * Shows tooltip for the entire range when no thresholds are defined\n */\n showSingleRangeTooltip(event) {\n const options = this.effectiveOptions();\n if (!options.showTooltip)\n return;\n this.updateTooltipPosition(event);\n this._tooltipData.set({\n title: options.label || 'Range',\n value: `${options.minValue.toLocaleString()} - ${options.maxValue.toLocaleString()}`,\n color: 'rgb(var(--ax-comp-gauge-chart-track-color))',\n });\n this._tooltipVisible.set(true);\n }\n updateTooltipPosition(event) {\n this._pendingTooltipCoords = { x: event.clientX, y: event.clientY };\n if (this._tooltipRafId != null)\n return;\n this._tooltipRafId = requestAnimationFrame(() => {\n this._tooltipRafId = null;\n const coords = this._pendingTooltipCoords;\n if (!coords)\n return;\n const containerEl = this.chartContainerEl()?.nativeElement;\n if (!containerEl)\n return;\n const rect = containerEl.getBoundingClientRect();\n const tooltipEl = containerEl.querySelector('.chart-tooltip');\n const tooltipRect = tooltipEl?.getBoundingClientRect() ?? null;\n const pos = computeTooltipPosition(rect, tooltipRect, coords.x + 10, coords.y - 10, this.TOOLTIP_GAP);\n this._tooltipPosition.set(pos);\n });\n }\n /**\n * Hides the tooltip\n */\n hideTooltip() {\n this._tooltipVisible.set(false);\n }\n /**\n * Cleans up chart resources\n */\n cleanupChart() {\n if (this._tooltipRafId != null) {\n cancelAnimationFrame(this._tooltipRafId);\n this._tooltipRafId = null;\n }\n this._pendingTooltipCoords = null;\n if (this.svgElement) {\n this.svgElement.remove();\n this.svgElement = null;\n }\n this._tooltipVisible.set(false);\n this._lastContainerRect = null;\n }\n /**\n * Creates gradient definitions for thresholds\n */\n createGradients(svg, thresholds) {\n const defs = svg.append('defs');\n // Create a radial gradient for the background\n const bgGradient = defs\n .append('radialGradient')\n .attr('id', 'gauge-bg-gradient')\n .attr('cx', '50%')\n .attr('cy', '50%')\n .attr('r', '50%')\n .attr('gradientUnits', 'userSpaceOnUse');\n // Get CSS variable for track color\n if (thresholds.length === 0) {\n // Default gradient when no thresholds are provided\n bgGradient.append('stop').attr('offset', '0%').attr('stop-color', 'rgb(var(--ax-comp-gauge-chart-track-color))');\n bgGradient\n .append('stop')\n .attr('offset', '100%')\n .attr('stop-color', 'rgba(var(--ax-comp-gauge-chart-track-color), 0.8)');\n }\n else {\n bgGradient.append('stop').attr('offset', '0%').attr('stop-color', 'rgb(var(--ax-comp-gauge-chart-track-color))');\n bgGradient\n .append('stop')\n .attr('offset', '100%')\n .attr('stop-color', 'rgba(var(--ax-comp-gauge-chart-track-color), 0.8)');\n // Create gradients for each threshold\n thresholds.forEach((threshold, i) => {\n const gradient = defs\n .append('linearGradient')\n .attr('id', `threshold-gradient-${i}`)\n .attr('gradientUnits', 'userSpaceOnUse')\n .attr('x1', '-1')\n .attr('y1', '0')\n .attr('x2', '1')\n .attr('y2', '0');\n gradient\n .append('stop')\n .attr('offset', '0%')\n .attr('stop-color', this.d3.color(threshold.color)?.brighter(0.5).toString() || threshold.color);\n gradient.append('stop').attr('offset', '100%').attr('stop-color', threshold.color);\n });\n }\n }\n /**\n * Draws tick marks and labels around the gauge\n */\n drawTicks(chartGroup, radius, minValue, maxValue, size) {\n // Dynamically choose tick count based on chart size (reduced for better spacing)\n let tickCount = 5;\n if (size < 200)\n tickCount = 3; // Very small: only show min, mid, max\n else if (size < 300)\n tickCount = 4;\n else if (size < 400)\n tickCount = 5;\n else if (size > 520)\n tickCount = 7;\n // Scale tick length and label offset proportionally to size\n const tickLength = Math.max(4, Math.min(radius * 0.12, 14));\n // Increased label offset to prevent overlap with tick lines and wide labels (like 100M)\n const labelOffset = Math.max(22, Math.min(radius * 0.28, 45));\n // Create a group for the ticks\n const tickGroup = chartGroup.append('g').attr('class', 'ticks');\n // Generate tick values\n const tickValues = [];\n const step = (maxValue - minValue) / (tickCount - 1);\n for (let i = 0; i < tickCount; i++) {\n tickValues.push(minValue + i * step);\n }\n // Create ticks and labels\n tickValues.forEach((tick) => {\n // Calculate angle for this tick\n const angle = this.scaleValueToAngle(tick, minValue, maxValue);\n const radians = angle - this.QUARTER_CIRCLE_RADIANS; // Adjust for starting at bottom (-90 degrees)\n // Calculate positions\n const x1 = Math.cos(radians) * (radius + 5);\n const y1 = Math.sin(radians) * (radius + 5);\n const x2 = Math.cos(radians) * (radius + tickLength);\n const y2 = Math.sin(radians) * (radius + tickLength);\n // Calculate label position\n const labelX = Math.cos(radians) * (radius + labelOffset);\n const labelY = Math.sin(radians) * (radius + labelOffset);\n // Draw tick line\n tickGroup\n .append('line')\n .attr('x1', x1)\n .attr('y1', y1)\n .attr('x2', x2)\n .attr('y2', y2)\n .attr('stroke', 'rgba(var(--ax-comp-gauge-chart-text-color), 0.5)')\n .attr('stroke-width', 2);\n // Add tick label with dynamic font size (minimum 14px)\n const tickFontPx = Math.max(14, Math.min(18, Math.floor(size / 35)));\n // Smart formatting: preserve decimals for small ranges, round for large values\n const valueRange = maxValue - minValue;\n let formattedValue;\n if (valueRange <= 10) {\n // Small range: show up to 2 decimal places, remove trailing zeros\n formattedValue = tick.toFixed(2).replace(/\\.?0+$/, '');\n }\n else if (valueRange < 1000) {\n // Medium range: show 1 decimal if needed\n formattedValue = tick % 1 === 0 ? tick.toString() : tick.toFixed(1);\n }\n else {\n // Large range: use abbreviated format (K, M, B)\n formattedValue = formatLargeNumber(Math.round(tick));\n }\n tickGroup\n .append('text')\n .attr('x', labelX)\n .attr('y', labelY)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('fill', 'rgba(var(--ax-comp-gauge-chart-text-color), 0.7)')\n .style('font-size', `${tickFontPx}px`)\n .text(formattedValue);\n });\n }\n /**\n * Draws the value and label text in the center\n */\n drawValueDisplay(chartGroup, value, label, radius, size) {\n // Px-based scaling for robust small/large sizes with better small-size handling\n const valueFontPx = Math.max(18, Math.min(32, Math.floor(size / 8)));\n const labelFontPx = Math.max(10, Math.min(16, Math.floor(valueFontPx * 0.55)));\n // More vertical gap for small sizes: use larger base value\n const verticalGap = Math.max(6, Math.min(12, Math.floor(size / 40)));\n // Create group for the value display\n const valueGroup = chartGroup.append('g').attr('class', 'gauge-value-display').attr('text-anchor', 'middle');\n // Add value display\n valueGroup\n .append('text')\n .attr('class', 'gauge-value')\n .attr('x', 0)\n .attr('y', radius * 0.15 + valueFontPx)\n .style('font-size', `${valueFontPx}px`)\n .style('font-weight', '600')\n .style('fill', 'rgb(var(--ax-comp-gauge-chart-text-color))')\n .text(value.toLocaleString());\n // Add label display (if provided)\n if (label) {\n valueGroup\n .append('text')\n .attr('class', 'gauge-label')\n .attr('x', 0)\n .attr('y', radius * 0.24 + valueFontPx + verticalGap)\n .style('font-size', `${labelFontPx}px`)\n .style('fill', 'rgb(var(--ax-comp-gauge-chart-text-color))')\n .style('opacity', '0.8')\n .text(label);\n }\n }\n /**\n * Draws the dial/needle pointing to the current value with animation\n */\n drawDial(chartGroup, radius, value, minValue, maxValue, animationDuration) {\n // Clamp value to min/max range\n const clampedValue = Math.max(minValue, Math.min(maxValue, value));\n // Calculate angle for needle based on value\n const angle = this.scaleValueToAngle(clampedValue, minValue, maxValue);\n const angleInDegrees = this.radiansToDegrees(angle - this.QUARTER_CIRCLE_RADIANS);\n // Create a group for the needle\n const dialGroup = chartGroup.append('g').attr('class', 'dial');\n // Draw the needle with initial position at minimum value\n const needlePath = dialGroup\n .append('path')\n .attr('d', this.createNeedlePath(radius))\n .attr('class', 'gauge-needle')\n .attr('fill', 'rgb(var(--ax-comp-gauge-chart-needle-color))')\n .attr('transform', `rotate(${this.radiansToDegrees(-this.HALF_CIRCLE_RADIANS)})`); // Start at -180 degrees (left)\n // Add a center circle\n dialGroup\n .append('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', radius * 0.08)\n .attr('fill', 'rgb(var(--ax-comp-gauge-chart-needle-color))')\n .attr('stroke', '#fff')\n .attr('stroke-width', 2);\n // Add a smaller white center\n dialGroup\n .append('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', radius * 0.03)\n .attr('fill', '#fff');\n // Get easing function\n const easingFunction = getEasingFunction(this.d3, this.options()?.animationEasing);\n // Animate the needle from min to current value\n needlePath\n .transition()\n .duration(animationDuration)\n .ease(easingFunction)\n .attr('transform', `rotate(${angleInDegrees})`);\n }\n // getEasingFunction moved to shared chart utils\n /**\n * Creates a path string for the needle\n */\n createNeedlePath(radius) {\n const needleLength = radius * 0.8;\n const needleWidth = radius * 0.06;\n return `M 0,${needleWidth / 2} L ${needleLength},0 L 0,${-needleWidth / 2} Z`;\n }\n /**\n * Scales a value to an angle (in radians)\n */\n scaleValueToAngle(value, min, max) {\n const valueRange = max - min;\n return ((value - min) / valueRange) * this.HALF_CIRCLE_RADIANS - this.QUARTER_CIRCLE_RADIANS;\n }\n /**\n * Scales a value to an angle for color arcs (in radians)\n */\n scaleValueToColorAngle(value, min, max) {\n const valueRange = max - min;\n return ((value - min) / valueRange) * this.HALF_CIRCLE_RADIANS - this.QUARTER_CIRCLE_RADIANS;\n }\n /**\n * Converts an angle back to a value\n */\n angleToValue(angle, min, max) {\n const valueRange = max - min;\n return min + ((angle + this.QUARTER_CIRCLE_RADIANS) / this.HALF_CIRCLE_RADIANS) * valueRange;\n }\n /**\n * Converts radians to degrees\n */\n radiansToDegrees(radians) {\n return radians * this.DEGREES_PER_RADIAN;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXGaugeChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.2.0\", version: \"20.3.3\", type: AXGaugeChartComponent, isStandalone: true, selector: \"ax-gauge-chart\", inputs: { value: { classPropertyName: \"value\", publicName: \"value\", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: \"options\", publicName: \"options\", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: \"chartContainerEl\", first: true, predicate: [\"chartContainer\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-gauge-chart\\\" role=\\\"img\\\" #chartContainer></div>\\n<ax-chart-tooltip [data]=\\\"tooltipData()\\\" [position]=\\\"tooltipPosition()\\\" [visible]=\\\"tooltipVisible()\\\"></ax-chart-tooltip>\\n\", styles: [\"ax-gauge-chart{display:block;width:100%;height:100%;min-height:200px;--ax-comp-gauge-chart-bg-color: 0, 0, 0, 0;--ax-comp-gauge-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-gauge-chart-track-color: var(--ax-sys-color-dark-surface);--ax-comp-gauge-chart-needle-color: var(--ax-sys-color-primary-500)}ax-gauge-chart .ax-gauge-chart{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:rgb(var(--ax-comp-gauge-chart-text-color));background-color:rgba(var(--ax-comp-gauge-chart-bg-color));border-radius:.5rem}ax-gauge-chart .ax-gauge-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-gauge-chart .ax-gauge-chart svg g:has(text){font-family:inherit}ax-gauge-chart .ax-gauge-chart-no-data-message{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:1rem;width:100%;height:100%;color:rgb(var(--ax-comp-gauge-chart-text-color));background-color:rgb(var(--ax-comp-gauge-chart-bg-color))}ax-gauge-chart .ax-gauge-chart-no-data-icon{margin-bottom:.75rem;color:rgba(var(--ax-comp-gauge-chart-text-color),.6)}ax-gauge-chart .ax-gauge-chart-no-data-text{font-weight:600;color:rgb(var(--ax-comp-gauge-chart-text-color))}\\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.3.3\", ngImport: i0, type: AXGaugeChartComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-gauge-chart', encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"ax-gauge-chart\\\" role=\\\"img\\\" #chartContainer></div>\\n<ax-chart-tooltip [data]=\\\"tooltipData()\\\" [position]=\\\"tooltipPosition()\\\" [visible]=\\\"tooltipVisible()\\\"></ax-chart-tooltip>\\n\", styles: [\"ax-gauge-chart{display:block;width:100%;height:100%;min-height:200px;--ax-comp-gauge-chart-bg-color: 0, 0, 0, 0;--ax-comp-gauge-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-gauge-chart-track-color: var(--ax-sys-color-dark-surface);--ax-comp-gauge-chart-needle-color: var(--ax-sys-color-primary-500)}ax-gauge-chart .ax-gauge-chart{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:rgb(var(--ax-comp-gauge-chart-text-color));background-color:rgba(var(--ax-comp-gauge-chart-bg-color));border-radius:.5rem}ax-gauge-chart .ax-gauge-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-gauge-chart .ax-gauge-chart svg g:has(text){font-family:inherit}ax-gauge-chart .ax-gauge-chart-no-data-message{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:1rem;width:100%;height:100%;color:rgb(var(--ax-comp-gauge-chart-text-color));background-color:rgb(var(--ax-comp-gauge-chart-bg-color))}ax-gauge-chart .ax-gauge-chart-no-data-icon{margin-bottom:.75rem;color:rgba(var(--ax-comp-gauge-chart-text-color),.6)}ax-gauge-chart .ax-gauge-chart-no-data-text{font-weight:600;color:rgb(var(--ax-comp-gauge-chart-text-color))}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F1Z2UtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2dhdWdlLWNoYXJ0L3NyYy9saWIvZ2F1Z2UtY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2dhdWdlLWNoYXJ0L3NyYy9saWIvZ2F1Z2UtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixHQUNsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSx1QkFBdUIsRUFBc0IsTUFBTSw4QkFBOEIsQ0FBQztBQUUzRixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFHVCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUc3RDs7O0dBR0c7QUFTSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsZ0JBQWdCO0lBQ3pELFNBQVM7SUFDVCx3QkFBd0I7SUFDeEIsS0FBSyxHQUFHLEtBQUssQ0FBb0IsQ0FBQyxpREFBQyxDQUFDO0lBRXBDLDBCQUEwQjtJQUMxQixPQUFPLEdBQUcsS0FBSyxDQUFxQixFQUFFLG1EQUFDLENBQUM7SUFFeEMsNEJBQTRCO0lBQ1gsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBNkIsZ0JBQWdCLENBQUMsQ0FBQztJQUVyRyw4Q0FBOEM7SUFDdEMsVUFBVSxHQUF5QixJQUFJLENBQUM7SUFFaEQsdUNBQXVDO0lBQzdCLEVBQUUsQ0FBdUI7SUFFbkMsOEJBQThCO0lBQ3RCLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyx3REFBQyxDQUFDO0lBQzdCLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxxREFBQyxDQUFDO0lBQzFCLFVBQVUsR0FBRyxNQUFNLENBQWdCLElBQUksc0RBQUMsQ0FBQztJQUVqRCwyQ0FBMkM7SUFDbkMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBRWhDLDZEQUE2RDtJQUNyRCxrQkFBa0IsR0FBNkMsSUFBSSxDQUFDO0lBRTVFLGtCQUFrQjtJQUNWLGVBQWUsR0FBRyxNQUFNLENBQUMsS0FBSywyREFBQyxDQUFDO0lBQ2hDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSw0REFBQyxDQUFDO0lBQzFDLFlBQVksR0FBRyxNQUFNLENBQXFCO1FBQ2hELEtBQUssRUFBRSxFQUFFO1FBQ1QsS0FBSyxFQUFFLEVBQUU7S0FDVix3REFBQyxDQUFDO0lBQ0ssYUFBYSxHQUFrQixJQUFJLENBQUM7SUFDcEMscUJBQXFCLEdBQW9DLElBQUksQ0FBQztJQUV0RSx1REFBdUQ7SUFDN0MsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbkQsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyRCxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUV2RCx1QkFBdUI7SUFDZixXQUFXLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFcEQsaUNBQWlDO0lBQ3ZCLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDekMsT0FBTztZQUNMLEdBQUcsSUFBSSxDQUFDLFdBQVc7WUFDbkIsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFO1NBQ2xCLENBQUM7SUFDSixDQUFDLDREQUFDLENBQUM7SUFFSCxZQUFZO0lBQ0ssV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNqQixtQkFBbUIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQzlCLHNCQUFzQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLGtCQUFrQixHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBRXBEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUiwyRUFBMkU7UUFDM0UsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFSCx3Q0FBd0M7UUFDeEMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLDhCQUE4QjtZQUM5QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFeEMsd0JBQXdCO1lBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRWxDLGtDQUFrQztZQUNsQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2dCQUNyQixvRUFBb0U7Z0JBQ3BFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzlDLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLGFBQWEsRUFBRSxDQUFDO29CQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7cUJBQU0sQ0FBQztvQkFDTiwrQ0FBK0M7b0JBQy9DLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxhQUFhLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNPLEtBQUssQ0FBQyxNQUFNO1FBQ3BCLElBQUksSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPLENBQUMsaUJBQWlCO1FBRXRDLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0Isc0NBQXNDO1lBQ3RDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNoQixpQ0FBaUM7UUFDakMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVuRSxzQkFBc0I7UUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEMsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWxELE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDM0csTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFFNUMsa0NBQWtDO1FBQ2xDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsYUFBYSxDQUFDO1FBQy9ELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztRQUNwRCxNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7UUFFdEQsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxDQUFDO1FBRTdFLDJGQUEyRjtRQUMzRixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLGNBQWMsQ0FBQztRQUM5QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLGVBQWUsQ0FBQztRQUVqRCw0QkFBNEI7UUFDNUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDNUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFN0MsNEVBQTRFO1FBQzVFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUzRCx1RUFBdUU7UUFDdkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTdELGdGQUFnRjtRQUNoRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRCxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDO1FBRXJELGdGQUFnRjtRQUNoRiw0RUFBNEU7UUFDNUUsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxxQkFBcUIsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNwRSxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBRWhELGdFQUFnRTtRQUNoRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRTthQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQzthQUNyQixJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQzthQUN0QixJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sVUFBVSxJQUFJLGtCQUFrQixFQUFFLENBQUM7YUFDMUQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRWhELHdHQUF3RztRQUN4RyxNQUFNLFVBQVUsR0FBRyxHQUFHO2FBQ25CLE1BQU0sQ0FBQyxHQUFHLENBQUM7YUFDWCxJQUFJLENBQUMsV0FBVyxFQUFFLGFBQWEsSUFBSSxHQUFHLENBQUMsR0FBRyxpQkFBaUIsS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFekYsMEJBQTBCO1FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pILE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekYsTUFBTSxXQUFXLEdBQUcsTUFBTSxHQUFHLGlCQUFpQixDQUFDO1FBQy9DLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQztRQUUzQiw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFdEMsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUUzRSw4Q0FBOEM7UUFDOUMsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUcsQ0FBQztRQUVELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVsRSxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFFdkYseURBQXlEO1FBQ3pELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFFRCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksa0JBQWtCLENBQUMsS0FBYTtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBRTdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDbEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUNwRCxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUzRSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTVDLG9CQUFvQjtRQUNwQixHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUUvRCx5QkFBeUI7UUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUVsRixHQUFHO2FBQ0EsTUFBTSxDQUFDLGVBQWUsQ0FBQzthQUN2QixJQUFJLENBQUMsTUFBTSxFQUFFLDhDQUE4QyxDQUFDO2FBQzVELFVBQVUsRUFBRTthQUNaLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQzthQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDO2FBQ3BCLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQixDQUN2QixVQUErRCxFQUMvRCxXQUFtQixFQUNuQixXQUFtQixFQUNuQixZQUFvQjtRQUVwQixnQ0FBZ0M7UUFDaEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUU7YUFDMUIsR0FBRyxFQUFFO2FBQ0wsV0FBVyxDQUFDLFdBQVcsQ0FBQzthQUN4QixXQUFXLENBQUMsV0FBVyxDQUFDO2FBQ3hCLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLGtDQUFrQzthQUMzRSxRQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsMEJBQTBCO2FBQ2hFLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU5QixzQkFBc0I7UUFDdEIsTUFBTSxjQUFjLEdBQUcsVUFBVTthQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2QsSUFBSSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUM7YUFDeEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQzthQUNyQyxJQUFJLENBQUMsTUFBTSxFQUFFLHlCQUF5QixDQUFDO2FBQ3ZDLElBQUksQ0FBQyxRQUFRLEVBQUUsMENBQTBDLENBQUMsQ0FBQztRQUU5RCw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNGLGNBQWM7aUJBQ1gsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7aUJBQzFCLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFdBQVc7b0JBQUUsT0FBTztnQkFDakQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQztpQkFDRCxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztZQUNILENBQUMsQ0FBQztpQkFDRCxFQUFFLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtnQkFDckIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWMsQ0FDcEIsVUFBK0QsRUFDL0QsV0FBbUIsRUFDbkIsV0FBbUIsRUFDbkIsUUFBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsVUFBOEQsRUFDOUQsWUFBb0I7UUFFcEIsdUJBQXVCO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFO2FBQ2hCLEdBQUcsRUFBRTthQUNMLFdBQVcsQ0FBQyxXQUFXLENBQUM7YUFDeEIsV0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDL0IsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTlCLCtEQUErRDtRQUMvRCxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUVoSCwrREFBK0Q7UUFDL0QsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUVyRyxxQ0FBcUM7UUFDckMsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVqRixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTNCLG9EQUFvRDtZQUNwRCxJQUFJLFFBQVEsSUFBSSxnQkFBZ0I7Z0JBQUUsT0FBTztZQUV6QyxNQUFNLE9BQU8sR0FBRyxVQUFVO2lCQUN2QixNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNkLElBQUksQ0FDSCxHQUFHLEVBQ0gsR0FBRyxDQUFDO2dCQUNGLFdBQVc7Z0JBQ1gsV0FBVztnQkFDWCxVQUFVLEVBQUUsZ0JBQWdCO2dCQUM1QixRQUFRO2FBQ1QsQ0FBQyxDQUNIO2lCQUNBLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssSUFBSSwyQkFBMkIsQ0FBQyxHQUFHLENBQUM7aUJBQ2hFLElBQUksQ0FBQyxPQUFPLEVBQUUseUJBQXlCLENBQUM7aUJBQ3hDLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQztpQkFDbkMsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUU5QiwwQkFBMEI7WUFDMUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDeEMsNENBQTRDO2dCQUM1QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0UsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFFakMsT0FBTztxQkFDSixFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0YsQ0FBQyxDQUFDO3FCQUNELEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDekIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNwQyxDQUFDO2dCQUNILENBQUMsQ0FBQztxQkFDRCxFQUFFLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtvQkFDckIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNyQixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7WUFFRCx1REFBdUQ7WUFDdkQsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgseUVBQXlFO1FBQ3pFLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbkQsTUFBTSxPQUFPLEdBQUcsVUFBVTtpQkFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQztpQkFDZCxJQUFJLENBQ0gsR0FBRyxFQUNILEdBQUcsQ0FBQztnQkFDRixXQUFXO2dCQUNYLFdBQVc7Z0JBQ1gsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsUUFBUSxFQUFFLElBQUksQ0FBQyxzQkFBc0I7YUFDdEMsQ0FBQyxDQUNIO2lCQUNBLElBQUksQ0FBQyxNQUFNLEVBQUUseUJBQXlCLENBQUM7aUJBQ3ZDLElBQUksQ0FBQyxPQUFPLEVBQUUseUJBQXlCLENBQUM7aUJBQ3hDLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFOUIsbUNBQW1DO1lBQ25DLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzRSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUM7Z0JBQzFCLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUV4RCxPQUFPO3FCQUNKLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuRyxDQUFDLENBQUM7cUJBQ0QsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUN6QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO3dCQUMzQixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDO3FCQUNELEVBQUUsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO29CQUNyQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxvQkFBb0IsQ0FDMUIsS0FBaUIsRUFDakIsVUFBa0IsRUFDbEIsUUFBZ0IsRUFDaEIsS0FBYSxFQUNiLEtBQWM7UUFFZCxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7WUFDcEIsS0FBSyxFQUFFLEtBQUssSUFBSSxPQUFPO1lBQ3ZCLEtBQUssRUFBRSxHQUFHLFVBQVUsQ0FBQyxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDdEUsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7UUFFSCxlQUFlO1FBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNLLHNCQUFzQixDQUFDLEtBQWlCO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVztZQUFFLE9BQU87UUFFakMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO1lBQ3BCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU87WUFDL0IsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQ3BGLEtBQUssRUFBRSw2Q0FBNkM7U0FDckQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQWlCO1FBQzdDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEUsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUk7WUFBRSxPQUFPO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcscUJBQXFCLENBQUMsR0FBRyxFQUFFO1lBQzlDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUMxQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBQ3BCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLGFBQWEsQ0FBQztZQUMzRCxJQUFJLENBQUMsV0FBVztnQkFBRSxPQUFPO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2pELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQXVCLENBQUM7WUFDcEYsTUFBTSxXQUFXLEdBQUcsU0FBUyxFQUFFLHFCQUFxQixFQUFFLElBQUksSUFBSSxDQUFDO1lBQy9ELE1BQU0sR0FBRyxHQUFHLHNCQUFzQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDakIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQy9CLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUVsQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWUsQ0FDckIsR0FBMEQsRUFDMUQsVUFBOEM7UUFFOUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVoQyw4Q0FBOEM7UUFDOUMsTUFBTSxVQUFVLEdBQUcsSUFBSTthQUNwQixNQUFNLENBQUMsZ0JBQWdCLENBQUM7YUFDeEIsSUFBSSxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQzthQUMvQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQzthQUNqQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQzthQUNqQixJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQzthQUNoQixJQUFJLENBQUMsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFM0MsbUNBQW1DO1FBQ25DLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixtREFBbUQ7WUFDbkQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsNkNBQTZDLENBQUMsQ0FBQztZQUNqSCxVQUFVO2lCQUNQLE1BQU0sQ0FBQyxNQUFNLENBQUM7aUJBQ2QsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7aUJBQ3RCLElBQUksQ0FBQyxZQUFZLEVBQUUsbURBQW1ELENBQUMsQ0FBQztRQUM3RSxDQUFDO2FBQU0sQ0FBQztZQUNOLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLDZDQUE2QyxDQUFDLENBQUM7WUFDakgsVUFBVTtpQkFDUCxNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNkLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2lCQUN0QixJQUFJLENBQUMsWUFBWSxFQUFFLG1EQUFtRCxDQUFDLENBQUM7WUFFM0Usc0NBQXNDO1lBQ3RDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUk7cUJBQ2xCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztxQkFDeEIsSUFBSSxDQUFDLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7cUJBQ3JDLElBQUksQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUM7cUJBQ3ZDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO3FCQUNoQixJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztxQkFDZixJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztxQkFDZixJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUVuQixRQUFRO3FCQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUM7cUJBQ2QsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7cUJBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRW5HLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxTQUFTLENBQ2YsVUFBK0QsRUFDL0QsTUFBYyxFQUNkLFFBQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLElBQVk7UUFFWixpRkFBaUY7UUFDakYsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksSUFBSSxHQUFHLEdBQUc7WUFDWixTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsc0NBQXNDO2FBQ2xELElBQUksSUFBSSxHQUFHLEdBQUc7WUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDO2FBQzlCLElBQUksSUFBSSxHQUFHLEdBQUc7WUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDO2FBQzlCLElBQUksSUFBSSxHQUFHLEdBQUc7WUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRW5DLDREQUE0RDtRQUM1RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RCx3RkFBd0Y7UUFDeEYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFOUQsK0JBQStCO1FBQy9CLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVoRSx1QkFBdUI7UUFDdkIsTUFBTSxVQUFVLEdBQUcsRUFBYyxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNuQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUIsZ0NBQWdDO1lBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sT0FBTyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyw4Q0FBOEM7WUFFbkcsc0JBQXNCO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLENBQUM7WUFFckQsMkJBQTJCO1lBQzNCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUM7WUFDMUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQztZQUUxRCxpQkFBaUI7WUFDakIsU0FBUztpQkFDTixNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO2lCQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO2lCQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO2lCQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO2lCQUNkLElBQUksQ0FBQyxRQUFRLEVBQUUsa0RBQWtELENBQUM7aUJBQ2xFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFM0IsdURBQXVEO1lBQ3ZELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVyRSwrRUFBK0U7WUFDL0UsTUFBTSxVQUFVLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN2QyxJQUFJLGNBQXNCLENBQUM7WUFFM0IsSUFBSSxVQUFVLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ3JCLGtFQUFrRTtnQkFDbEUsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RCxDQUFDO2lCQUFNLElBQUksVUFBVSxHQUFHLElBQUksRUFBRSxDQUFDO2dCQUM3Qix5Q0FBeUM7Z0JBQ3pDLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixnREFBZ0Q7Z0JBQ2hELGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdkQsQ0FBQztZQUVELFNBQVM7aUJBQ04sTUFBTSxDQUFDLE1BQU0sQ0FBQztpQkFDZCxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQztpQkFDakIsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUM7aUJBQ2pCLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDO2lCQUM3QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDO2lCQUNuQyxJQUFJLENBQUMsTUFBTSxFQUFFLGtEQUFrRCxDQUFDO2lCQUNoRSxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsVUFBVSxJQUFJLENBQUM7aUJBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQixDQUN0QixVQUErRCxFQUMvRCxLQUFhLEVBQ2IsS0FBYSxFQUNiLE1BQWMsRUFDZCxJQUFZO1FBRVosZ0ZBQWdGO1FBQ2hGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsMkRBQTJEO1FBQzNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyRSxxQ0FBcUM7UUFDckMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUU3RyxvQkFBb0I7UUFDcEIsVUFBVTthQUNQLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQzthQUM1QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUNaLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksR0FBRyxXQUFXLENBQUM7YUFDdEMsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLFdBQVcsSUFBSSxDQUFDO2FBQ3RDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO2FBQzNCLEtBQUssQ0FBQyxNQUFNLEVBQUUsNENBQTRDLENBQUM7YUFDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRWhDLGtDQUFrQztRQUNsQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsVUFBVTtpQkFDUCxNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNkLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDO2lCQUM1QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztpQkFDWixJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxJQUFJLEdBQUcsV0FBVyxHQUFHLFdBQVcsQ0FBQztpQkFDcEQsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLFdBQVcsSUFBSSxDQUFDO2lCQUN0QyxLQUFLLENBQUMsTUFBTSxFQUFFLDRDQUE0QyxDQUFDO2lCQUMzRCxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztpQkFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxRQUFRLENBQ2QsVUFBK0QsRUFDL0QsTUFBYyxFQUNkLEtBQWEsRUFDYixRQUFnQixFQUNoQixRQUFnQixFQUNoQixpQkFBeUI7UUFFekIsK0JBQStCO1FBQy9CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFbkUsNENBQTRDO1FBQzVDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFbEYsZ0NBQWdDO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUvRCx5REFBeUQ7UUFDekQsTUFBTSxVQUFVLEdBQUcsU0FBUzthQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2QsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDeEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUM7YUFDN0IsSUFBSSxDQUFDLE1BQU0sRUFBRSw4Q0FBOEMsQ0FBQzthQUM1RCxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsK0JBQStCO1FBRXBILHNCQUFzQjtRQUN0QixTQUFTO2FBQ04sTUFBTSxDQUFDLFFBQVEsQ0FBQzthQUNoQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ2IsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO2FBQ3hCLElBQUksQ0FBQyxNQUFNLEVBQUUsOENBQThDLENBQUM7YUFDNUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDdEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUzQiw2QkFBNkI7UUFDN0IsU0FBUzthQUNOLE1BQU0sQ0FBQyxRQUFRLENBQUM7YUFDaEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7YUFDYixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUNiLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQzthQUN4QixJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXhCLHNCQUFzQjtRQUN0QixNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUVuRiwrQ0FBK0M7UUFDL0MsVUFBVTthQUNQLFVBQVUsRUFBRTthQUNaLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQzthQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDO2FBQ3BCLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxnREFBZ0Q7SUFFaEQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxNQUFjO1FBQ3JDLE1BQU0sWUFBWSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQyxPQUFPLE9BQU8sV0FBVyxHQUFHLENBQUMsTUFBTSxZQUFZLFVBQVUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDaEYsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXO1FBQy9ELE1BQU0sVUFBVSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDN0IsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDL0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ssc0JBQXNCLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXO1FBQ3BFLE1BQU0sVUFBVSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDN0IsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDL0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWSxDQUFDLEtBQWEsRUFBRSxHQUFXLEVBQUUsR0FBVztRQUMxRCxNQUFNLFVBQVUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQzdCLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsVUFBVSxDQUFDO0lBQy9GLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQixDQUFDLE9BQWU7UUFDdEMsT0FBTyxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQzNDLENBQUM7dUdBeHdCVSxxQkFBcUI7MkZBQXJCLHFCQUFxQix1ZUN2Q2xDLHFNQUVBLDB5Q0RrQ1ksdUJBQXVCOzsyRkFHdEIscUJBQXFCO2tCQVJqQyxTQUFTOytCQUNFLGdCQUFnQixpQkFHWCxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCLENBQUMsdUJBQXVCLENBQUMsbUJBQ2pCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBWENoYXJ0Q29tcG9uZW50LFxuICBBWENoYXJ0Q29tcG9uZW50QmFzZSxcbiAgY29tcHV0ZVRvb2x0aXBQb3NpdGlvbixcbiAgZm9ybWF0TGFyZ2VOdW1iZXIsXG4gIGdldEVhc2luZ0Z1bmN0aW9uLFxufSBmcm9tICdAYWNvcmV4L2NoYXJ0cyc7XG5pbXBvcnQgeyBBWENoYXJ0VG9vbHRpcENvbXBvbmVudCwgQVhDaGFydFRvb2x0aXBEYXRhIH0gZnJvbSAnQGFjb3JleC9jaGFydHMvY2hhcnQtdG9vbHRpcCc7XG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQgeyBBWF9HQVVHRV9DSEFSVF9DT05GSUcgfSBmcm9tICcuL2dhdWdlLWNoYXJ0LmNvbmZpZyc7XG5pbXBvcnQgeyBBWEdhdWdlQ2hhcnRPcHRpb24sIEFYR2F1Z2VDaGFydFZhbHVlIH0gZnJvbSAnLi9nYXVnZS1jaGFydC50eXBlJztcblxuLyoqXG4gKiBHYXVnZSBDaGFydCBDb21wb25lbnRcbiAqIFJlbmRlcnMgYSBzZW1pLWNpcmN1bGFyIGdhdWdlIGNoYXJ0IHdpdGggYW5pbWF0ZWQgbmVlZGxlIGFuZCB0aHJlc2hvbGRzXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWdhdWdlLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dhdWdlLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2F1Z2UtY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW0FYQ2hhcnRUb29sdGlwQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFYR2F1Z2VDaGFydENvbXBvbmVudCBleHRlbmRzIEFYQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFYQ2hhcnRDb21wb25lbnRCYXNlIHtcbiAgLy8gSW5wdXRzXG4gIC8qKiBDaGFydCB2YWx1ZSBpbnB1dCAqL1xuICB2YWx1ZSA9IGlucHV0PEFYR2F1Z2VDaGFydFZhbHVlPigwKTtcblxuICAvKiogQ2hhcnQgb3B0aW9ucyBpbnB1dCAqL1xuICBvcHRpb25zID0gaW5wdXQ8QVhHYXVnZUNoYXJ0T3B0aW9uPih7fSk7XG5cbiAgLy8gQ2hhcnQgY29udGFpbmVyIHJlZmVyZW5jZVxuICBwcml2YXRlIHJlYWRvbmx5IGNoYXJ0Q29udGFpbmVyRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdjaGFydENvbnRhaW5lcicpO1xuXG4gIC8vIFNWRyBlbGVtZW50IHJlZmVyZW5jZSAoY3JlYXRlZCBpbiB0aGUgY29kZSlcbiAgcHJpdmF0ZSBzdmdFbGVtZW50OiBTVkdTVkdFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gRDMgcmVmZXJlbmNlIC0gbG9hZGVkIGFzeW5jaHJvbm91c2x5XG4gIHByb3RlY3RlZCBkMyE6IHR5cGVvZiBpbXBvcnQoJ2QzJyk7XG5cbiAgLy8gU2lnbmFscyBmb3IgY29tcG9uZW50IHN0YXRlXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBfcmVuZGVyZWQgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIF9wcmV2VmFsdWUgPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gVHJhY2sgcHJldmlvdXMgb3B0aW9ucyB0byBkZXRlY3QgY2hhbmdlc1xuICBwcml2YXRlIF9wcmV2T3B0aW9uc1N0cmluZyA9ICcnO1xuXG4gIC8vIENhY2hlIGZvciBjb250YWluZXIgZGltZW5zaW9ucyB0byBhdm9pZCByZXBlYXRlZCBET00gcmVhZHNcbiAgcHJpdmF0ZSBfbGFzdENvbnRhaW5lclJlY3Q6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFRvb2x0aXAgc2lnbmFsc1xuICBwcml2YXRlIF90b29sdGlwVmlzaWJsZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgX3Rvb2x0aXBQb3NpdGlvbiA9IHNpZ25hbCh7IHg6IDAsIHk6IDAgfSk7XG4gIHByaXZhdGUgX3Rvb2x0aXBEYXRhID0gc2lnbmFsPEFYQ2hhcnRUb29sdGlwRGF0YT4oe1xuICAgIHRpdGxlOiAnJyxcbiAgICB2YWx1ZTogJycsXG4gIH0pO1xuICBwcml2YXRlIF90b29sdGlwUmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9wZW5kaW5nVG9vbHRpcENvb3JkczogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gRXhwb3NlIHRvb2x0aXAgc2lnbmFscyBhcyByZWFkLW9ubHkgZm9yIHRoZSB0ZW1wbGF0ZVxuICBwcm90ZWN0ZWQgdG9vbHRpcFZpc2libGUgPSB0aGlzLl90b29sdGlwVmlzaWJsZS5hc1JlYWRvbmx5KCk7XG4gIHByb3RlY3RlZCB0b29sdGlwUG9zaXRpb24gPSB0aGlzLl90b29sdGlwUG9zaXRpb24uYXNSZWFkb25seSgpO1xuICBwcm90ZWN0ZWQgdG9vbHRpcERhdGEgPSB0aGlzLl90b29sdGlwRGF0YS5hc1JlYWRvbmx5KCk7XG5cbiAgLy8gSW5qZWN0IGNvbmZpZ3VyYXRpb25cbiAgcHJpdmF0ZSBjb25maWdUb2tlbiA9IGluamVjdChBWF9HQVVHRV9DSEFSVF9DT05GSUcpO1xuXG4gIC8vIENvbXB1dGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICBwcm90ZWN0ZWQgZWZmZWN0aXZlT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25maWdUb2tlbixcbiAgICAgIC4uLnRoaXMub3B0aW9ucygpLFxuICAgIH07XG4gIH0pO1xuXG4gIC8vIENvbnN0YW50c1xuICBwcml2YXRlIHJlYWRvbmx5IFRPT0xUSVBfR0FQID0gMTA7XG4gIHByaXZhdGUgcmVhZG9ubHkgSEFMRl9DSVJDTEVfUkFESUFOUyA9IE1hdGguUEk7XG4gIHByaXZhdGUgcmVhZG9ubHkgUVVBUlRFUl9DSVJDTEVfUkFESUFOUyA9IE1hdGguUEkgLyAyO1xuICBwcml2YXRlIHJlYWRvbmx5IERFR1JFRVNfUEVSX1JBRElBTiA9IDE4MCAvIE1hdGguUEk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBEeW5hbWljYWxseSBsb2FkIEQzIGFuZCBpbml0aWFsaXplIHRoZSBjaGFydCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVhZHlcbiAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuICAgICAgdGhpcy5sb2FkRDMoKTtcbiAgICB9KTtcblxuICAgIC8vIFdhdGNoIGZvciBjaGFuZ2VzIHRvIHJlZHJhdyB0aGUgY2hhcnRcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gQWNjZXNzIGlucHV0cyB0byB0cmFjayB0aGVtXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnZhbHVlKCk7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lZmZlY3RpdmVPcHRpb25zKCk7XG5cbiAgICAgIC8vIFVwZGF0ZSBwcmV2aW91cyB2YWx1ZVxuICAgICAgdGhpcy5fcHJldlZhbHVlLnNldChjdXJyZW50VmFsdWUpO1xuXG4gICAgICAvLyBPbmx5IHVwZGF0ZSBpZiBhbHJlYWR5IHJlbmRlcmVkXG4gICAgICBpZiAodGhpcy5fcmVuZGVyZWQoKSkge1xuICAgICAgICAvLyBJZiBvbmx5IHRoZSB2YWx1ZSBjaGFuZ2VkLCBqdXN0IHVwZGF0ZSB0aGUgdmFsdWUgZGlzcGxheSBhbmQgZGlhbFxuICAgICAgICBjb25zdCBvcHRpb25zU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucyk7XG4gICAgICAgIGlmICh0aGlzLl9wcmV2T3B0aW9uc1N0cmluZyA9PT0gb3B0aW9uc1N0cmluZykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVBbmREaWFsKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgb3B0aW9ucyBjaGFuZ2VkLCByZWNyZWF0ZSB0aGUgd2hvbGUgY2hhcnRcbiAgICAgICAgICB0aGlzLl9wcmV2T3B0aW9uc1N0cmluZyA9IG9wdGlvbnNTdHJpbmc7XG4gICAgICAgICAgdGhpcy51cGRhdGVDaGFydCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFudXBDaGFydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIEQzLmpzIGR5bmFtaWNhbGx5XG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZEQzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmQzKSByZXR1cm47IC8vIEFscmVhZHkgbG9hZGVkXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5kMyA9IGF3YWl0IGltcG9ydCgnZDMnKTtcbiAgICAgIC8vIElmIGNvbnRhaW5lciBpcyByZWFkeSwgY3JlYXRlIGNoYXJ0XG4gICAgICBpZiAodGhpcy5faW5pdGlhbGl6ZWQoKSAmJiB0aGlzLmNoYXJ0Q29udGFpbmVyRWwoKSkge1xuICAgICAgICB0aGlzLmNyZWF0ZUNoYXJ0KCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVkLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgRDMuanM6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBnYXVnZSBjaGFydCB3aXRoIGFsbCBlbGVtZW50c1xuICAgKi9cbiAgcHVibGljIGNyZWF0ZUNoYXJ0KCk6IHZvaWQge1xuICAgIC8vIENsZWFyIGNvbnRhaW5lciBhbmQgY3JlYXRlIFNWR1xuICAgIGlmICh0aGlzLnN2Z0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuc3ZnRWxlbWVudC5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgU1ZHIGVsZW1lbnRcbiAgICB0aGlzLnN2Z0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuICAgIHRoaXMuY2hhcnRDb250YWluZXJFbCgpLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zdmdFbGVtZW50KTtcblxuICAgIC8vIEdldCBjdXJyZW50IG9wdGlvbnNcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lZmZlY3RpdmVPcHRpb25zKCk7XG5cbiAgICAvLyBTdG9yZSBvcHRpb25zIHN0cmluZyBmb3IgY29tcGFyaXNvblxuICAgIHRoaXMuX3ByZXZPcHRpb25zU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucyk7XG5cbiAgICBjb25zdCB7IG1pblZhbHVlLCBtYXhWYWx1ZSwgc2hvd1ZhbHVlLCBsYWJlbCA9ICcnLCBnYXVnZVdpZHRoLCBjb3JuZXJSYWRpdXMsIGFuaW1hdGlvbkR1cmF0aW9uIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHRocmVzaG9sZHMgPSBvcHRpb25zLnRocmVzaG9sZHMgPz8gW107XG5cbiAgICAvLyBDYWxjdWxhdGUgcmVzcG9uc2l2ZSBkaW1lbnNpb25zXG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuY2hhcnRDb250YWluZXJFbCgpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXJFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lckVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXG4gICAgLy8gQ2FjaGUgY29udGFpbmVyIGRpbWVuc2lvbnNcbiAgICB0aGlzLl9sYXN0Q29udGFpbmVyUmVjdCA9IHsgd2lkdGg6IGNvbnRhaW5lcldpZHRoLCBoZWlnaHQ6IGNvbnRhaW5lckhlaWdodCB9O1xuXG4gICAgLy8gRGV0ZXJtaW5lIGNoYXJ0IGRpbWVuc2lvbnMgLSB1c2Ugb3B0aW9ucyBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIHVzZSBjb250YWluZXIgZGltZW5zaW9uc1xuICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucy53aWR0aCA/PyBjb250YWluZXJXaWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBvcHRpb25zLmhlaWdodCA/PyBjb250YWluZXJIZWlnaHQ7XG5cbiAgICAvLyBFbnN1cmUgbWluaW11bSBkaW1lbnNpb25zXG4gICAgY29uc3QgZWZmZWN0aXZlV2lkdGggPSBNYXRoLm1heCh3aWR0aCwgMTAwKTtcbiAgICBjb25zdCBlZmZlY3RpdmVIZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIDUwKTtcblxuICAgIC8vIEZvciBhIHNlbWktY2lyY3VsYXIgZ2F1Z2UsIHdpZHRoIHNob3VsZCBiZSBhcHByb3hpbWF0ZWx5IHR3aWNlIHRoZSBoZWlnaHRcbiAgICBjb25zdCBzaXplID0gTWF0aC5taW4oZWZmZWN0aXZlV2lkdGgsIGVmZmVjdGl2ZUhlaWdodCAqIDIpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIG1hcmdpbiBhcyBwZXJjZW50YWdlIG9mIHNpemUgKDUtOCUgd2l0aCByZWFzb25hYmxlIGJvdW5kcylcbiAgICBjb25zdCBtYXJnaW5SYXRpbyA9IDAuMDg7XG4gICAgY29uc3QgbWFyZ2luID0gTWF0aC5tYXgoNSwgTWF0aC5taW4oc2l6ZSAqIG1hcmdpblJhdGlvLCAzMCkpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHNwYWNlIG5lZWRlZCBmb3IgdGlja3MgYW5kIGxhYmVscyAoaW5jcmVhc2VkIGZvciBsYXJnZXIgZm9udCBzaXplcylcbiAgICBjb25zdCB0aWNrTGFiZWxTcGFjZSA9IE1hdGgubWF4KDEyLCBNYXRoLm1pbihzaXplICogMC4xMiwgNDApKTtcbiAgICBjb25zdCB0b3RhbFZlcnRpY2FsU3BhY2UgPSBzaXplIC8gMiArIHRpY2tMYWJlbFNwYWNlO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGhvcml6b250YWwgcGFkZGluZyBmb3IgdGljayBsYWJlbHMgKHRoZXkgZXh0ZW5kIGJleW9uZCBnYXVnZSBlZGdlcylcbiAgICAvLyBFc3RpbWF0ZSBiYXNlZCBvbiBmb250IHNpemUgLSB0aWNrIGxhYmVscyBhcmUgcm91Z2hseSAyLTMgY2hhcmFjdGVycyB3aWRlXG4gICAgY29uc3QgZXN0aW1hdGVkVGlja0ZvbnRTaXplID0gTWF0aC5tYXgoMTQsIE1hdGgubWluKDE4LCBNYXRoLmZsb29yKHNpemUgLyAzNSkpKTtcbiAgICBjb25zdCBob3Jpem9udGFsUGFkZGluZyA9IE1hdGgubWF4KDIwLCBlc3RpbWF0ZWRUaWNrRm9udFNpemUgKiAxLjUpO1xuICAgIGNvbnN0IHRvdGFsV2lkdGggPSBzaXplICsgaG9yaXpvbnRhbFBhZGRpbmcgKiAyO1xuXG4gICAgLy8gU2V0IHVwIFNWRyB3aXRoIHJlc3BvbnNpdmUgdmlld0JveCB0aGF0IGFjY291bnRzIGZvciBvdmVyZmxvd1xuICAgIGNvbnN0IHN2ZyA9IHRoaXMuZDNcbiAgICAgIC5zZWxlY3QodGhpcy5zdmdFbGVtZW50KVxuICAgICAgLmF0dHIoJ3dpZHRoJywgJzEwMCUnKVxuICAgICAgLmF0dHIoJ2hlaWdodCcsICcxMDAlJylcbiAgICAgIC5hdHRyKCd2aWV3Qm94JywgYDAgMCAke3RvdGFsV2lkdGh9ICR7dG90YWxWZXJ0aWNhbFNwYWNlfWApXG4gICAgICAuYXR0cigncHJlc2VydmVBc3BlY3RSYXRpbycsICd4TWlkWU1pZCBtZWV0Jyk7XG5cbiAgICAvLyBDcmVhdGUgYSBncm91cCBmb3IgdGhlIGNoYXJ0IGNlbnRlcmVkIGhvcml6b250YWxseSB3aXRoIHBhZGRpbmcsIHBvc2l0aW9uZWQgdG8gc2hvdyBvbmx5IHRoZSB0b3AgaGFsZlxuICAgIGNvbnN0IGNoYXJ0R3JvdXAgPSBzdmdcbiAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHtzaXplIC8gMiArIGhvcml6b250YWxQYWRkaW5nfSwgJHtzaXplIC8gMiAtIG1hcmdpbn0pYCk7XG5cbiAgICAvLyBEZWZpbmUgZ2F1Z2UgcGFyYW1ldGVyc1xuICAgIGNvbnN0IHJhZGl1cyA9IHNpemUgLyAyIC0gbWFyZ2luO1xuICAgIGNvbnN0IGRlc2lyZWRHYXVnZVdpZHRoID0gdHlwZW9mIGdhdWdlV2lkdGggPT09ICdudW1iZXInICYmICFOdW1iZXIuaXNOYU4oZ2F1Z2VXaWR0aCkgPyBnYXVnZVdpZHRoIDogc2l6ZSAqIDAuMTI7XG4gICAgY29uc3QgY2xhbXBlZEdhdWdlV2lkdGggPSBNYXRoLm1heChzaXplICogMC4wNiwgTWF0aC5taW4oZGVzaXJlZEdhdWdlV2lkdGgsIHNpemUgKiAwLjIpKTtcbiAgICBjb25zdCBpbm5lclJhZGl1cyA9IHJhZGl1cyAtIGNsYW1wZWRHYXVnZVdpZHRoO1xuICAgIGNvbnN0IG91dGVyUmFkaXVzID0gcmFkaXVzO1xuXG4gICAgLy8gQ3JlYXRlIGdyYWRpZW50IGRlZmluaXRpb25zXG4gICAgdGhpcy5jcmVhdGVHcmFkaWVudHMoc3ZnLCB0aHJlc2hvbGRzKTtcblxuICAgIC8vIERyYXcgdGhlIGJhY2tncm91bmQgYXJjXG4gICAgdGhpcy5kcmF3QmFja2dyb3VuZEFyYyhjaGFydEdyb3VwLCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIGNvcm5lclJhZGl1cyk7XG5cbiAgICAvLyBEcmF3IHRoZSB0aHJlc2hvbGQgYXJjcyBpZiB0aHJlc2hvbGRzIGV4aXN0XG4gICAgaWYgKHRocmVzaG9sZHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kcmF3VGhyZXNob2xkcyhjaGFydEdyb3VwLCBpbm5lclJhZGl1cywgb3V0ZXJSYWRpdXMsIG1pblZhbHVlLCBtYXhWYWx1ZSwgdGhyZXNob2xkcywgY29ybmVyUmFkaXVzKTtcbiAgICB9XG5cbiAgICAvLyBEcmF3IHRpY2sgbWFya3NcbiAgICB0aGlzLmRyYXdUaWNrcyhjaGFydEdyb3VwLCBvdXRlclJhZGl1cywgbWluVmFsdWUsIG1heFZhbHVlLCBzaXplKTtcblxuICAgIC8vIERyYXcgdGhlIGRpYWwvbmVlZGxlIHdpdGggYW5pbWF0aW9uXG4gICAgdGhpcy5kcmF3RGlhbChjaGFydEdyb3VwLCByYWRpdXMsIHRoaXMudmFsdWUoKSwgbWluVmFsdWUsIG1heFZhbHVlLCBhbmltYXRpb25EdXJhdGlvbik7XG5cbiAgICAvLyBEcmF3IHRoZSB2YWx1ZSBkaXNwbGF5IChhZnRlciB0aGUgZGlhbCBzbyBpdCdzIG9uIHRvcClcbiAgICBpZiAoc2hvd1ZhbHVlKSB7XG4gICAgICB0aGlzLmRyYXdWYWx1ZURpc3BsYXkoY2hhcnRHcm91cCwgdGhpcy52YWx1ZSgpLCBsYWJlbCwgcmFkaXVzLCBzaXplKTtcbiAgICB9XG5cbiAgICAvLyBIaWRlIHRvb2x0aXAgaW5pdGlhbGx5XG4gICAgdGhpcy5fdG9vbHRpcFZpc2libGUuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjaGFydCB3aGVuIG9wdGlvbnMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlQ2hhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVDaGFydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgb25seSB0aGUgdmFsdWUgZGlzcGxheSBhbmQgZGlhbCBwb3NpdGlvbiB3aXRob3V0IHJlY3JlYXRpbmcgdGhlIGNoYXJ0XG4gICAqL1xuICBwdWJsaWMgdXBkYXRlVmFsdWVBbmREaWFsKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3ZnRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpO1xuICAgIGNvbnN0IG1pblZhbHVlID0gb3B0aW9ucy5taW5WYWx1ZTtcbiAgICBjb25zdCBtYXhWYWx1ZSA9IG9wdGlvbnMubWF4VmFsdWU7XG4gICAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSBvcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uO1xuICAgIGNvbnN0IGVhc2luZ0Z1bmN0aW9uID0gZ2V0RWFzaW5nRnVuY3Rpb24odGhpcy5kMywgb3B0aW9ucy5hbmltYXRpb25FYXNpbmcpO1xuXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdmFsdWU7XG4gICAgY29uc3Qgc3ZnID0gdGhpcy5kMy5zZWxlY3QodGhpcy5zdmdFbGVtZW50KTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZSB0ZXh0XG4gICAgc3ZnLnNlbGVjdCgnLmdhdWdlLXZhbHVlJykudGV4dChjdXJyZW50VmFsdWUudG9Mb2NhbGVTdHJpbmcoKSk7XG5cbiAgICAvLyBVcGRhdGUgbmVlZGxlIHBvc2l0aW9uXG4gICAgY29uc3QgYW5nbGUgPSB0aGlzLnNjYWxlVmFsdWVUb0FuZ2xlKGN1cnJlbnRWYWx1ZSwgbWluVmFsdWUsIG1heFZhbHVlKTtcbiAgICBjb25zdCBhbmdsZUluRGVncmVlcyA9IHRoaXMucmFkaWFuc1RvRGVncmVlcyhhbmdsZSAtIHRoaXMuUVVBUlRFUl9DSVJDTEVfUkFESUFOUyk7XG5cbiAgICBzdmdcbiAgICAgIC5zZWxlY3QoJy5nYXVnZS1uZWVkbGUnKVxuICAgICAgLmF0dHIoJ2ZpbGwnLCAncmdiKHZhcigtLWF4LWNvbXAtZ2F1Z2UtY2hhcnQtbmVlZGxlLWNvbG9yKSknKVxuICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgLmR1cmF0aW9uKGFuaW1hdGlvbkR1cmF0aW9uKVxuICAgICAgLmVhc2UoZWFzaW5nRnVuY3Rpb24pXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHJvdGF0ZSgke2FuZ2xlSW5EZWdyZWVzfSlgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IHRoZSBiYWNrZ3JvdW5kIGFyY1xuICAgKi9cbiAgcHJpdmF0ZSBkcmF3QmFja2dyb3VuZEFyYyhcbiAgICBjaGFydEdyb3VwOiBkMy5TZWxlY3Rpb248U1ZHR0VsZW1lbnQsIHVua25vd24sIG51bGwsIHVuZGVmaW5lZD4sXG4gICAgaW5uZXJSYWRpdXM6IG51bWJlcixcbiAgICBvdXRlclJhZGl1czogbnVtYmVyLFxuICAgIGNvcm5lclJhZGl1czogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICAvLyBDcmVhdGUgYXJjIGZvciB0aGUgYmFja2dyb3VuZFxuICAgIGNvbnN0IGJhY2tncm91bmRBcmMgPSB0aGlzLmQzXG4gICAgICAuYXJjKClcbiAgICAgIC5pbm5lclJhZGl1cyhpbm5lclJhZGl1cylcbiAgICAgIC5vdXRlclJhZGl1cyhvdXRlclJhZGl1cylcbiAgICAgIC5zdGFydEFuZ2xlKC10aGlzLlFVQVJURVJfQ0lSQ0xFX1JBRElBTlMpIC8vIFN0YXJ0IGZyb20gYm90dG9tICgtOTAgZGVncmVlcylcbiAgICAgIC5lbmRBbmdsZSh0aGlzLlFVQVJURVJfQ0lSQ0xFX1JBRElBTlMpIC8vIEVuZCBhdCB0b3AgKDkwIGRlZ3JlZXMpXG4gICAgICAuY29ybmVyUmFkaXVzKGNvcm5lclJhZGl1cyk7XG5cbiAgICAvLyBEcmF3IGJhY2tncm91bmQgYXJjXG4gICAgY29uc3QgYmFja2dyb3VuZFBhdGggPSBjaGFydEdyb3VwXG4gICAgICAuYXBwZW5kKCdwYXRoJylcbiAgICAgIC5hdHRyKCdkJywgYmFja2dyb3VuZEFyYylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdnYXVnZS1hcmMgZ2F1Z2UtYmFzZScpXG4gICAgICAuYXR0cignZmlsbCcsICd1cmwoI2dhdWdlLWJnLWdyYWRpZW50KScpXG4gICAgICAuYXR0cignZmlsdGVyJywgJ2Ryb3Atc2hhZG93KDBweCAycHggM3B4IHJnYmEoMCwwLDAsMC4xKSknKTtcblxuICAgIC8vIEFkZCB0b29sdGlwIGZvciBzaW5nbGUgYXJjIGlmIG5vIHRocmVzaG9sZHNcbiAgICBpZiAoIXRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnRocmVzaG9sZHMgfHwgdGhpcy5lZmZlY3RpdmVPcHRpb25zKCkudGhyZXNob2xkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGJhY2tncm91bmRQYXRoXG4gICAgICAgIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKVxuICAgICAgICAub24oJ21vdXNlZW50ZXInLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLnNob3dUb29sdGlwKSByZXR1cm47XG4gICAgICAgICAgdGhpcy5zaG93U2luZ2xlUmFuZ2VUb29sdGlwKGV2ZW50KTtcbiAgICAgICAgfSlcbiAgICAgICAgLm9uKCdtb3VzZW1vdmUnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fdG9vbHRpcFZpc2libGUoKSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaGlkZVRvb2x0aXAoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERyYXcgdGhlIHRocmVzaG9sZHMgYXJjc1xuICAgKi9cbiAgcHJpdmF0ZSBkcmF3VGhyZXNob2xkcyhcbiAgICBjaGFydEdyb3VwOiBkMy5TZWxlY3Rpb248U1ZHR0VsZW1lbnQsIHVua25vd24sIG51bGwsIHVuZGVmaW5lZD4sXG4gICAgaW5uZXJSYWRpdXM6IG51bWJlcixcbiAgICBvdXRlclJhZGl1czogbnVtYmVyLFxuICAgIG1pblZhbHVlOiBudW1iZXIsXG4gICAgbWF4VmFsdWU6IG51bWJlcixcbiAgICB0aHJlc2hvbGRzOiB7IHZhbHVlOiBudW1iZXI7IGNvbG9yOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nIH1bXSxcbiAgICBjb3JuZXJSYWRpdXM6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgLy8gQ3JlYXRlIGFyYyBnZW5lcmF0b3JcbiAgICBjb25zdCBhcmMgPSB0aGlzLmQzXG4gICAgICAuYXJjKClcbiAgICAgIC5pbm5lclJhZGl1cyhpbm5lclJhZGl1cylcbiAgICAgIC5vdXRlclJhZGl1cyhvdXRlclJhZGl1cyAqIDAuOTgpXG4gICAgICAuY29ybmVyUmFkaXVzKGNvcm5lclJhZGl1cyk7XG5cbiAgICAvLyBTb3J0IHRocmVzaG9sZHMgYnkgdmFsdWUgaW4gYXNjZW5kaW5nIG9yZGVyIChvbmx5IGlmIG5lZWRlZClcbiAgICBjb25zdCBzb3J0ZWRUaHJlc2hvbGRzID0gdGhyZXNob2xkcy5sZW5ndGggPiAxID8gWy4uLnRocmVzaG9sZHNdLnNvcnQoKGEsIGIpID0+IGEudmFsdWUgLSBiLnZhbHVlKSA6IHRocmVzaG9sZHM7XG5cbiAgICAvLyBDYWxjdWxhdGUgYWxsIGFuZ2xlcyBmaXJzdCB1c2luZyB0aGUgY29sb3IgYW5nbGUgY2FsY3VsYXRpb25cbiAgICBjb25zdCBhbmdsZXMgPSBzb3J0ZWRUaHJlc2hvbGRzLm1hcCgodCkgPT4gdGhpcy5zY2FsZVZhbHVlVG9Db2xvckFuZ2xlKHQudmFsdWUsIG1pblZhbHVlLCBtYXhWYWx1ZSkpO1xuXG4gICAgLy8gU3RhcnQgZnJvbSB0aGUgbWluaW11bSB2YWx1ZSBhbmdsZVxuICAgIGxldCBwcmV2aW91c0VuZEFuZ2xlID0gdGhpcy5zY2FsZVZhbHVlVG9Db2xvckFuZ2xlKG1pblZhbHVlLCBtaW5WYWx1ZSwgbWF4VmFsdWUpO1xuXG4gICAgc29ydGVkVGhyZXNob2xkcy5mb3JFYWNoKCh0aHJlc2hvbGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IGVuZEFuZ2xlID0gYW5nbGVzW2ldO1xuXG4gICAgICAvLyBTa2lwIGlmIGVuZCBhbmdsZSBpcyBub3QgZ3JlYXRlciB0aGFuIHN0YXJ0IGFuZ2xlXG4gICAgICBpZiAoZW5kQW5nbGUgPD0gcHJldmlvdXNFbmRBbmdsZSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBhcmNQYXRoID0gY2hhcnRHcm91cFxuICAgICAgICAuYXBwZW5kKCdwYXRoJylcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgJ2QnLFxuICAgICAgICAgIGFyYyh7XG4gICAgICAgICAgICBpbm5lclJhZGl1cyxcbiAgICAgICAgICAgIG91dGVyUmFkaXVzLFxuICAgICAgICAgICAgc3RhcnRBbmdsZTogcHJldmlvdXNFbmRBbmdsZSxcbiAgICAgICAgICAgIGVuZEFuZ2xlLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIC5hdHRyKCdmaWxsJywgdGhyZXNob2xkLmNvbG9yIHx8IGB1cmwoI3RocmVzaG9sZC1ncmFkaWVudC0ke2l9KWApXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdnYXVnZS1hcmMgdGhyZXNob2xkLWFyYycpXG4gICAgICAgIC5hdHRyKCdkYXRhLXZhbHVlJywgdGhyZXNob2xkLnZhbHVlKVxuICAgICAgICAuc3R5bGUoJ2N1cnNvcicsICdwb2ludGVyJyk7XG5cbiAgICAgIC8vIEFkZCB0b29sdGlwIGludGVyYWN0aW9uXG4gICAgICBpZiAodGhpcy5lZmZlY3RpdmVPcHRpb25zKCkuc2hvd1Rvb2x0aXApIHtcbiAgICAgICAgLy8gQ29udmVydCBhbmdsZXMgYmFjayB0byB2YWx1ZXMgZm9yIHRvb2x0aXBcbiAgICAgICAgY29uc3Qgc3RhcnRWYWx1ZSA9IHRoaXMuYW5nbGVUb1ZhbHVlKHByZXZpb3VzRW5kQW5nbGUsIG1pblZhbHVlLCBtYXhWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGVuZFZhbHVlID0gdGhyZXNob2xkLnZhbHVlO1xuXG4gICAgICAgIGFyY1BhdGhcbiAgICAgICAgICAub24oJ21vdXNlZW50ZXInLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RocmVzaG9sZFRvb2x0aXAoZXZlbnQsIHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCB0aHJlc2hvbGQuY29sb3IsIHRocmVzaG9sZC5sYWJlbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAub24oJ21vdXNlbW92ZScsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Rvb2x0aXBWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLm9uKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgdGhlIHByZXZpb3VzIGVuZCBhbmdsZSBmb3IgdGhlIG5leHQgdGhyZXNob2xkXG4gICAgICBwcmV2aW91c0VuZEFuZ2xlID0gZW5kQW5nbGU7XG4gICAgfSk7XG5cbiAgICAvLyBEcmF3IHRoZSBsYXN0IHNlZ21lbnQgaWYgdGhlIGxhc3QgdGhyZXNob2xkIGlzIGxlc3MgdGhhbiB0aGUgbWF4IHZhbHVlXG4gICAgaWYgKHByZXZpb3VzRW5kQW5nbGUgPCB0aGlzLlFVQVJURVJfQ0lSQ0xFX1JBRElBTlMpIHtcbiAgICAgIGNvbnN0IGxhc3RBcmMgPSBjaGFydEdyb3VwXG4gICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAnZCcsXG4gICAgICAgICAgYXJjKHtcbiAgICAgICAgICAgIGlubmVyUmFkaXVzLFxuICAgICAgICAgICAgb3V0ZXJSYWRpdXMsXG4gICAgICAgICAgICBzdGFydEFuZ2xlOiBwcmV2aW91c0VuZEFuZ2xlLFxuICAgICAgICAgICAgZW5kQW5nbGU6IHRoaXMuUVVBUlRFUl9DSVJDTEVfUkFESUFOUyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICAuYXR0cignZmlsbCcsICd1cmwoI2dhdWdlLWJnLWdyYWRpZW50KScpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdnYXVnZS1hcmMgdGhyZXNob2xkLWFyYycpXG4gICAgICAgIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKTtcblxuICAgICAgLy8gQWRkIHRvb2x0aXAgZm9yIHRoZSBsYXN0IHNlZ21lbnRcbiAgICAgIGlmICh0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKS5zaG93VG9vbHRpcCkge1xuICAgICAgICBjb25zdCBzdGFydFZhbHVlID0gdGhpcy5hbmdsZVRvVmFsdWUocHJldmlvdXNFbmRBbmdsZSwgbWluVmFsdWUsIG1heFZhbHVlKTtcbiAgICAgICAgY29uc3QgZW5kVmFsdWUgPSBtYXhWYWx1ZTtcbiAgICAgICAgY29uc3QgbGFzdFRocmVzaG9sZCA9IHRocmVzaG9sZHNbdGhyZXNob2xkcy5sZW5ndGggLSAxXTtcblxuICAgICAgICBsYXN0QXJjXG4gICAgICAgICAgLm9uKCdtb3VzZWVudGVyJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dUaHJlc2hvbGRUb29sdGlwKGV2ZW50LCBzdGFydFZhbHVlLCBlbmRWYWx1ZSwgbGFzdFRocmVzaG9sZC5jb2xvciwgbGFzdFRocmVzaG9sZC5sYWJlbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAub24oJ21vdXNlbW92ZScsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Rvb2x0aXBWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLm9uKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyB0b29sdGlwIGZvciBhIHRocmVzaG9sZCBhcmNcbiAgICovXG4gIHByaXZhdGUgc2hvd1RocmVzaG9sZFRvb2x0aXAoXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgc3RhcnRWYWx1ZTogbnVtYmVyLFxuICAgIGVuZFZhbHVlOiBudW1iZXIsXG4gICAgY29sb3I6IHN0cmluZyxcbiAgICBsYWJlbD86IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgLy8gQ3JlYXRlIHRvb2x0aXAgZGF0YVxuICAgIHRoaXMuX3Rvb2x0aXBEYXRhLnNldCh7XG4gICAgICB0aXRsZTogbGFiZWwgfHwgJ1JhbmdlJyxcbiAgICAgIHZhbHVlOiBgJHtzdGFydFZhbHVlLnRvTG9jYWxlU3RyaW5nKCl9IC0gJHtlbmRWYWx1ZS50b0xvY2FsZVN0cmluZygpfWAsXG4gICAgICBjb2xvcjogY29sb3IsXG4gICAgfSk7XG5cbiAgICAvLyBTaG93IHRvb2x0aXBcbiAgICB0aGlzLl90b29sdGlwVmlzaWJsZS5zZXQodHJ1ZSk7XG4gICAgdGhpcy51cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIHRvb2x0aXAgZm9yIHRoZSBlbnRpcmUgcmFuZ2Ugd2hlbiBubyB0aHJlc2hvbGRzIGFyZSBkZWZpbmVkXG4gICAqL1xuICBwcml2YXRlIHNob3dTaW5nbGVSYW5nZVRvb2x0aXAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5lZmZlY3RpdmVPcHRpb25zKCk7XG4gICAgaWYgKCFvcHRpb25zLnNob3dUb29sdGlwKSByZXR1cm47XG5cbiAgICB0aGlzLnVwZGF0ZVRvb2x0aXBQb3NpdGlvbihldmVudCk7XG4gICAgdGhpcy5fdG9vbHRpcERhdGEuc2V0KHtcbiAgICAgIHRpdGxlOiBvcHRpb25zLmxhYmVsIHx8ICdSYW5nZScsXG4gICAgICB2YWx1ZTogYCR7b3B0aW9ucy5taW5WYWx1ZS50b0xvY2FsZVN0cmluZygpfSAtICR7b3B0aW9ucy5tYXhWYWx1ZS50b0xvY2FsZVN0cmluZygpfWAsXG4gICAgICBjb2xvcjogJ3JnYih2YXIoLS1heC1jb21wLWdhdWdlLWNoYXJ0LXRyYWNrLWNvbG9yKSknLFxuICAgIH0pO1xuICAgIHRoaXMuX3Rvb2x0aXBWaXNpYmxlLnNldCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVG9vbHRpcFBvc2l0aW9uKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fcGVuZGluZ1Rvb2x0aXBDb29yZHMgPSB7IHg6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFkgfTtcbiAgICBpZiAodGhpcy5fdG9vbHRpcFJhZklkICE9IG51bGwpIHJldHVybjtcbiAgICB0aGlzLl90b29sdGlwUmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5fdG9vbHRpcFJhZklkID0gbnVsbDtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuX3BlbmRpbmdUb29sdGlwQ29vcmRzO1xuICAgICAgaWYgKCFjb29yZHMpIHJldHVybjtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5jaGFydENvbnRhaW5lckVsKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoIWNvbnRhaW5lckVsKSByZXR1cm47XG4gICAgICBjb25zdCByZWN0ID0gY29udGFpbmVyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCB0b29sdGlwRWwgPSBjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yKCcuY2hhcnQtdG9vbHRpcCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICAgIGNvbnN0IHRvb2x0aXBSZWN0ID0gdG9vbHRpcEVsPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA/PyBudWxsO1xuICAgICAgY29uc3QgcG9zID0gY29tcHV0ZVRvb2x0aXBQb3NpdGlvbihyZWN0LCB0b29sdGlwUmVjdCwgY29vcmRzLnggKyAxMCwgY29vcmRzLnkgLSAxMCwgdGhpcy5UT09MVElQX0dBUCk7XG4gICAgICB0aGlzLl90b29sdGlwUG9zaXRpb24uc2V0KHBvcyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgdGhlIHRvb2x0aXBcbiAgICovXG4gIHByaXZhdGUgaGlkZVRvb2x0aXAoKTogdm9pZCB7XG4gICAgdGhpcy5fdG9vbHRpcFZpc2libGUuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnMgdXAgY2hhcnQgcmVzb3VyY2VzXG4gICAqL1xuICBwdWJsaWMgY2xlYW51cENoYXJ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90b29sdGlwUmFmSWQgIT0gbnVsbCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fdG9vbHRpcFJhZklkKTtcbiAgICAgIHRoaXMuX3Rvb2x0aXBSYWZJZCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX3BlbmRpbmdUb29sdGlwQ29vcmRzID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnN2Z0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuc3ZnRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc3ZnRWxlbWVudCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX3Rvb2x0aXBWaXNpYmxlLnNldChmYWxzZSk7XG4gICAgdGhpcy5fbGFzdENvbnRhaW5lclJlY3QgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgZ3JhZGllbnQgZGVmaW5pdGlvbnMgZm9yIHRocmVzaG9sZHNcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlR3JhZGllbnRzKFxuICAgIHN2ZzogZDMuU2VsZWN0aW9uPFNWR1NWR0VsZW1lbnQsIHVua25vd24sIG51bGwsIHVuZGVmaW5lZD4sXG4gICAgdGhyZXNob2xkczogeyB2YWx1ZTogbnVtYmVyOyBjb2xvcjogc3RyaW5nIH1bXSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZGVmcyA9IHN2Zy5hcHBlbmQoJ2RlZnMnKTtcblxuICAgIC8vIENyZWF0ZSBhIHJhZGlhbCBncmFkaWVudCBmb3IgdGhlIGJhY2tncm91bmRcbiAgICBjb25zdCBiZ0dyYWRpZW50ID0gZGVmc1xuICAgICAgLmFwcGVuZCgncmFkaWFsR3JhZGllbnQnKVxuICAgICAgLmF0dHIoJ2lkJywgJ2dhdWdlLWJnLWdyYWRpZW50JylcbiAgICAgIC5hdHRyKCdjeCcsICc1MCUnKVxuICAgICAgLmF0dHIoJ2N5JywgJzUwJScpXG4gICAgICAuYXR0cigncicsICc1MCUnKVxuICAgICAgLmF0dHIoJ2dyYWRpZW50VW5pdHMnLCAndXNlclNwYWNlT25Vc2UnKTtcblxuICAgIC8vIEdldCBDU1MgdmFyaWFibGUgZm9yIHRyYWNrIGNvbG9yXG4gICAgaWYgKHRocmVzaG9sZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBEZWZhdWx0IGdyYWRpZW50IHdoZW4gbm8gdGhyZXNob2xkcyBhcmUgcHJvdmlkZWRcbiAgICAgIGJnR3JhZGllbnQuYXBwZW5kKCdzdG9wJykuYXR0cignb2Zmc2V0JywgJzAlJykuYXR0cignc3RvcC1jb2xvcicsICdyZ2IodmFyKC0tYXgtY29tcC1nYXVnZS1jaGFydC10cmFjay1jb2xvcikpJyk7XG4gICAgICBiZ0dyYWRpZW50XG4gICAgICAgIC5hcHBlbmQoJ3N0b3AnKVxuICAgICAgICAuYXR0cignb2Zmc2V0JywgJzEwMCUnKVxuICAgICAgICAuYXR0cignc3RvcC1jb2xvcicsICdyZ2JhKHZhcigtLWF4LWNvbXAtZ2F1Z2UtY2hhcnQtdHJhY2stY29sb3IpLCAwLjgpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJnR3JhZGllbnQuYXBwZW5kKCdzdG9wJykuYXR0cignb2Zmc2V0JywgJzAlJykuYXR0cignc3RvcC1jb2xvcicsICdyZ2IodmFyKC0tYXgtY29tcC1nYXVnZS1jaGFydC10cmFjay1jb2xvcikpJyk7XG4gICAgICBiZ0dyYWRpZW50XG4gICAgICAgIC5hcHBlbmQoJ3N0b3AnKVxuICAgICAgICAuYXR0cignb2Zmc2V0JywgJzEwMCUnKVxuICAgICAgICAuYXR0cignc3RvcC1jb2xvcicsICdyZ2JhKHZhcigtLWF4LWNvbXAtZ2F1Z2UtY2hhcnQtdHJhY2stY29sb3IpLCAwLjgpJyk7XG5cbiAgICAgIC8vIENyZWF0ZSBncmFkaWVudHMgZm9yIGVhY2ggdGhyZXNob2xkXG4gICAgICB0aHJlc2hvbGRzLmZvckVhY2goKHRocmVzaG9sZCwgaSkgPT4ge1xuICAgICAgICBjb25zdCBncmFkaWVudCA9IGRlZnNcbiAgICAgICAgICAuYXBwZW5kKCdsaW5lYXJHcmFkaWVudCcpXG4gICAgICAgICAgLmF0dHIoJ2lkJywgYHRocmVzaG9sZC1ncmFkaWVudC0ke2l9YClcbiAgICAgICAgICAuYXR0cignZ3JhZGllbnRVbml0cycsICd1c2VyU3BhY2VPblVzZScpXG4gICAgICAgICAgLmF0dHIoJ3gxJywgJy0xJylcbiAgICAgICAgICAuYXR0cigneTEnLCAnMCcpXG4gICAgICAgICAgLmF0dHIoJ3gyJywgJzEnKVxuICAgICAgICAgIC5hdHRyKCd5MicsICcwJyk7XG5cbiAgICAgICAgZ3JhZGllbnRcbiAgICAgICAgICAuYXBwZW5kKCdzdG9wJylcbiAgICAgICAgICAuYXR0cignb2Zmc2V0JywgJzAlJylcbiAgICAgICAgICAuYXR0cignc3RvcC1jb2xvcicsIHRoaXMuZDMuY29sb3IodGhyZXNob2xkLmNvbG9yKT8uYnJpZ2h0ZXIoMC41KS50b1N0cmluZygpIHx8IHRocmVzaG9sZC5jb2xvcik7XG5cbiAgICAgICAgZ3JhZGllbnQuYXBwZW5kKCdzdG9wJykuYXR0cignb2Zmc2V0JywgJzEwMCUnKS5hdHRyKCdzdG9wLWNvbG9yJywgdGhyZXNob2xkLmNvbG9yKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3cyB0aWNrIG1hcmtzIGFuZCBsYWJlbHMgYXJvdW5kIHRoZSBnYXVnZVxuICAgKi9cbiAgcHJpdmF0ZSBkcmF3VGlja3MoXG4gICAgY2hhcnRHcm91cDogZDMuU2VsZWN0aW9uPFNWR0dFbGVtZW50LCB1bmtub3duLCBudWxsLCB1bmRlZmluZWQ+LFxuICAgIHJhZGl1czogbnVtYmVyLFxuICAgIG1pblZhbHVlOiBudW1iZXIsXG4gICAgbWF4VmFsdWU6IG51bWJlcixcbiAgICBzaXplOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIC8vIER5bmFtaWNhbGx5IGNob29zZSB0aWNrIGNvdW50IGJhc2VkIG9uIGNoYXJ0IHNpemUgKHJlZHVjZWQgZm9yIGJldHRlciBzcGFjaW5nKVxuICAgIGxldCB0aWNrQ291bnQgPSA1O1xuICAgIGlmIChzaXplIDwgMjAwKVxuICAgICAgdGlja0NvdW50ID0gMzsgLy8gVmVyeSBzbWFsbDogb25seSBzaG93IG1pbiwgbWlkLCBtYXhcbiAgICBlbHNlIGlmIChzaXplIDwgMzAwKSB0aWNrQ291bnQgPSA0O1xuICAgIGVsc2UgaWYgKHNpemUgPCA0MDApIHRpY2tDb3VudCA9IDU7XG4gICAgZWxzZSBpZiAoc2l6ZSA+IDUyMCkgdGlja0NvdW50ID0gNztcblxuICAgIC8vIFNjYWxlIHRpY2sgbGVuZ3RoIGFuZCBsYWJlbCBvZmZzZXQgcHJvcG9ydGlvbmFsbHkgdG8gc2l6ZVxuICAgIGNvbnN0IHRpY2tMZW5ndGggPSBNYXRoLm1heCg0LCBNYXRoLm1pbihyYWRpdXMgKiAwLjEyLCAxNCkpO1xuICAgIC8vIEluY3JlYXNlZCBsYWJlbCBvZmZzZXQgdG8gcHJldmVudCBvdmVybGFwIHdpdGggdGljayBsaW5lcyBhbmQgd2lkZSBsYWJlbHMgKGxpa2UgMTAwTSlcbiAgICBjb25zdCBsYWJlbE9mZnNldCA9IE1hdGgubWF4KDIyLCBNYXRoLm1pbihyYWRpdXMgKiAwLjI4LCA0NSkpO1xuXG4gICAgLy8gQ3JlYXRlIGEgZ3JvdXAgZm9yIHRoZSB0aWNrc1xuICAgIGNvbnN0IHRpY2tHcm91cCA9IGNoYXJ0R3JvdXAuYXBwZW5kKCdnJykuYXR0cignY2xhc3MnLCAndGlja3MnKTtcblxuICAgIC8vIEdlbmVyYXRlIHRpY2sgdmFsdWVzXG4gICAgY29uc3QgdGlja1ZhbHVlcyA9IFtdIGFzIG51bWJlcltdO1xuICAgIGNvbnN0IHN0ZXAgPSAobWF4VmFsdWUgLSBtaW5WYWx1ZSkgLyAodGlja0NvdW50IC0gMSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aWNrQ291bnQ7IGkrKykge1xuICAgICAgdGlja1ZhbHVlcy5wdXNoKG1pblZhbHVlICsgaSAqIHN0ZXApO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aWNrcyBhbmQgbGFiZWxzXG4gICAgdGlja1ZhbHVlcy5mb3JFYWNoKCh0aWNrKSA9PiB7XG4gICAgICAvLyBDYWxjdWxhdGUgYW5nbGUgZm9yIHRoaXMgdGlja1xuICAgICAgY29uc3QgYW5nbGUgPSB0aGlzLnNjYWxlVmFsdWVUb0FuZ2xlKHRpY2ssIG1pblZhbHVlLCBtYXhWYWx1ZSk7XG4gICAgICBjb25zdCByYWRpYW5zID0gYW5nbGUgLSB0aGlzLlFVQVJURVJfQ0lSQ0xFX1JBRElBTlM7IC8vIEFkanVzdCBmb3Igc3RhcnRpbmcgYXQgYm90dG9tICgtOTAgZGVncmVlcylcblxuICAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uc1xuICAgICAgY29uc3QgeDEgPSBNYXRoLmNvcyhyYWRpYW5zKSAqIChyYWRpdXMgKyA1KTtcbiAgICAgIGNvbnN0IHkxID0gTWF0aC5zaW4ocmFkaWFucykgKiAocmFkaXVzICsgNSk7XG4gICAgICBjb25zdCB4MiA9IE1hdGguY29zKHJhZGlhbnMpICogKHJhZGl1cyArIHRpY2tMZW5ndGgpO1xuICAgICAgY29uc3QgeTIgPSBNYXRoLnNpbihyYWRpYW5zKSAqIChyYWRpdXMgKyB0aWNrTGVuZ3RoKTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIGxhYmVsIHBvc2l0aW9uXG4gICAgICBjb25zdCBsYWJlbFggPSBNYXRoLmNvcyhyYWRpYW5zKSAqIChyYWRpdXMgKyBsYWJlbE9mZnNldCk7XG4gICAgICBjb25zdCBsYWJlbFkgPSBNYXRoLnNpbihyYWRpYW5zKSAqIChyYWRpdXMgKyBsYWJlbE9mZnNldCk7XG5cbiAgICAgIC8vIERyYXcgdGljayBsaW5lXG4gICAgICB0aWNrR3JvdXBcbiAgICAgICAgLmFwcGVuZCgnbGluZScpXG4gICAgICAgIC5hdHRyKCd4MScsIHgxKVxuICAgICAgICAuYXR0cigneTEnLCB5MSlcbiAgICAgICAgLmF0dHIoJ3gyJywgeDIpXG4gICAgICAgIC5hdHRyKCd5MicsIHkyKVxuICAgICAgICAuYXR0cignc3Ryb2tlJywgJ3JnYmEodmFyKC0tYXgtY29tcC1nYXVnZS1jaGFydC10ZXh0LWNvbG9yKSwgMC41KScpXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAyKTtcblxuICAgICAgLy8gQWRkIHRpY2sgbGFiZWwgd2l0aCBkeW5hbWljIGZvbnQgc2l6ZSAobWluaW11bSAxNHB4KVxuICAgICAgY29uc3QgdGlja0ZvbnRQeCA9IE1hdGgubWF4KDE0LCBNYXRoLm1pbigxOCwgTWF0aC5mbG9vcihzaXplIC8gMzUpKSk7XG4gICAgICBcbiAgICAgIC8vIFNtYXJ0IGZvcm1hdHRpbmc6IHByZXNlcnZlIGRlY2ltYWxzIGZvciBzbWFsbCByYW5nZXMsIHJvdW5kIGZvciBsYXJnZSB2YWx1ZXNcbiAgICAgIGNvbnN0IHZhbHVlUmFuZ2UgPSBtYXhWYWx1ZSAtIG1pblZhbHVlO1xuICAgICAgbGV0IGZvcm1hdHRlZFZhbHVlOiBzdHJpbmc7XG4gICAgICBcbiAgICAgIGlmICh2YWx1ZVJhbmdlIDw9IDEwKSB7XG4gICAgICAgIC8vIFNtYWxsIHJhbmdlOiBzaG93IHVwIHRvIDIgZGVjaW1hbCBwbGFjZXMsIHJlbW92ZSB0cmFpbGluZyB6ZXJvc1xuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRpY2sudG9GaXhlZCgyKS5yZXBsYWNlKC9cXC4/MCskLywgJycpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZVJhbmdlIDwgMTAwMCkge1xuICAgICAgICAvLyBNZWRpdW0gcmFuZ2U6IHNob3cgMSBkZWNpbWFsIGlmIG5lZWRlZFxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRpY2sgJSAxID09PSAwID8gdGljay50b1N0cmluZygpIDogdGljay50b0ZpeGVkKDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTGFyZ2UgcmFuZ2U6IHVzZSBhYmJyZXZpYXRlZCBmb3JtYXQgKEssIE0sIEIpXG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0TGFyZ2VOdW1iZXIoTWF0aC5yb3VuZCh0aWNrKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRpY2tHcm91cFxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgLmF0dHIoJ3gnLCBsYWJlbFgpXG4gICAgICAgIC5hdHRyKCd5JywgbGFiZWxZKVxuICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAgICAgLmF0dHIoJ2RvbWluYW50LWJhc2VsaW5lJywgJ21pZGRsZScpXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ3JnYmEodmFyKC0tYXgtY29tcC1nYXVnZS1jaGFydC10ZXh0LWNvbG9yKSwgMC43KScpXG4gICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgYCR7dGlja0ZvbnRQeH1weGApXG4gICAgICAgIC50ZXh0KGZvcm1hdHRlZFZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3cyB0aGUgdmFsdWUgYW5kIGxhYmVsIHRleHQgaW4gdGhlIGNlbnRlclxuICAgKi9cbiAgcHJpdmF0ZSBkcmF3VmFsdWVEaXNwbGF5KFxuICAgIGNoYXJ0R3JvdXA6IGQzLlNlbGVjdGlvbjxTVkdHRWxlbWVudCwgdW5rbm93biwgbnVsbCwgdW5kZWZpbmVkPixcbiAgICB2YWx1ZTogbnVtYmVyLFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgcmFkaXVzOiBudW1iZXIsXG4gICAgc2l6ZTogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICAvLyBQeC1iYXNlZCBzY2FsaW5nIGZvciByb2J1c3Qgc21hbGwvbGFyZ2Ugc2l6ZXMgd2l0aCBiZXR0ZXIgc21hbGwtc2l6ZSBoYW5kbGluZ1xuICAgIGNvbnN0IHZhbHVlRm9udFB4ID0gTWF0aC5tYXgoMTgsIE1hdGgubWluKDMyLCBNYXRoLmZsb29yKHNpemUgLyA4KSkpO1xuICAgIGNvbnN0IGxhYmVsRm9udFB4ID0gTWF0aC5tYXgoMTAsIE1hdGgubWluKDE2LCBNYXRoLmZsb29yKHZhbHVlRm9udFB4ICogMC41NSkpKTtcbiAgICAvLyBNb3JlIHZlcnRpY2FsIGdhcCBmb3Igc21hbGwgc2l6ZXM6IHVzZSBsYXJnZXIgYmFzZSB2YWx1ZVxuICAgIGNvbnN0IHZlcnRpY2FsR2FwID0gTWF0aC5tYXgoNiwgTWF0aC5taW4oMTIsIE1hdGguZmxvb3Ioc2l6ZSAvIDQwKSkpO1xuXG4gICAgLy8gQ3JlYXRlIGdyb3VwIGZvciB0aGUgdmFsdWUgZGlzcGxheVxuICAgIGNvbnN0IHZhbHVlR3JvdXAgPSBjaGFydEdyb3VwLmFwcGVuZCgnZycpLmF0dHIoJ2NsYXNzJywgJ2dhdWdlLXZhbHVlLWRpc3BsYXknKS5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKTtcblxuICAgIC8vIEFkZCB2YWx1ZSBkaXNwbGF5XG4gICAgdmFsdWVHcm91cFxuICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAuYXR0cignY2xhc3MnLCAnZ2F1Z2UtdmFsdWUnKVxuICAgICAgLmF0dHIoJ3gnLCAwKVxuICAgICAgLmF0dHIoJ3knLCByYWRpdXMgKiAwLjE1ICsgdmFsdWVGb250UHgpXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIGAke3ZhbHVlRm9udFB4fXB4YClcbiAgICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnNjAwJylcbiAgICAgIC5zdHlsZSgnZmlsbCcsICdyZ2IodmFyKC0tYXgtY29tcC1nYXVnZS1jaGFydC10ZXh0LWNvbG9yKSknKVxuICAgICAgLnRleHQodmFsdWUudG9Mb2NhbGVTdHJpbmcoKSk7XG5cbiAgICAvLyBBZGQgbGFiZWwgZGlzcGxheSAoaWYgcHJvdmlkZWQpXG4gICAgaWYgKGxhYmVsKSB7XG4gICAgICB2YWx1ZUdyb3VwXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnZ2F1Z2UtbGFiZWwnKVxuICAgICAgICAuYXR0cigneCcsIDApXG4gICAgICAgIC5hdHRyKCd5JywgcmFkaXVzICogMC4yNCArIHZhbHVlRm9udFB4ICsgdmVydGljYWxHYXApXG4gICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgYCR7bGFiZWxGb250UHh9cHhgKVxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAncmdiKHZhcigtLWF4LWNvbXAtZ2F1Z2UtY2hhcnQtdGV4dC1jb2xvcikpJylcbiAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuOCcpXG4gICAgICAgIC50ZXh0KGxhYmVsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhd3MgdGhlIGRpYWwvbmVlZGxlIHBvaW50aW5nIHRvIHRoZSBjdXJyZW50IHZhbHVlIHdpdGggYW5pbWF0aW9uXG4gICAqL1xuICBwcml2YXRlIGRyYXdEaWFsKFxuICAgIGNoYXJ0R3JvdXA6IGQzLlNlbGVjdGlvbjxTVkdHRWxlbWVudCwgdW5rbm93biwgbnVsbCwgdW5kZWZpbmVkPixcbiAgICByYWRpdXM6IG51bWJlcixcbiAgICB2YWx1ZTogbnVtYmVyLFxuICAgIG1pblZhbHVlOiBudW1iZXIsXG4gICAgbWF4VmFsdWU6IG51bWJlcixcbiAgICBhbmltYXRpb25EdXJhdGlvbjogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICAvLyBDbGFtcCB2YWx1ZSB0byBtaW4vbWF4IHJhbmdlXG4gICAgY29uc3QgY2xhbXBlZFZhbHVlID0gTWF0aC5tYXgobWluVmFsdWUsIE1hdGgubWluKG1heFZhbHVlLCB2YWx1ZSkpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGFuZ2xlIGZvciBuZWVkbGUgYmFzZWQgb24gdmFsdWVcbiAgICBjb25zdCBhbmdsZSA9IHRoaXMuc2NhbGVWYWx1ZVRvQW5nbGUoY2xhbXBlZFZhbHVlLCBtaW5WYWx1ZSwgbWF4VmFsdWUpO1xuICAgIGNvbnN0IGFuZ2xlSW5EZWdyZWVzID0gdGhpcy5yYWRpYW5zVG9EZWdyZWVzKGFuZ2xlIC0gdGhpcy5RVUFSVEVSX0NJUkNMRV9SQURJQU5TKTtcblxuICAgIC8vIENyZWF0ZSBhIGdyb3VwIGZvciB0aGUgbmVlZGxlXG4gICAgY29uc3QgZGlhbEdyb3VwID0gY2hhcnRHcm91cC5hcHBlbmQoJ2cnKS5hdHRyKCdjbGFzcycsICdkaWFsJyk7XG5cbiAgICAvLyBEcmF3IHRoZSBuZWVkbGUgd2l0aCBpbml0aWFsIHBvc2l0aW9uIGF0IG1pbmltdW0gdmFsdWVcbiAgICBjb25zdCBuZWVkbGVQYXRoID0gZGlhbEdyb3VwXG4gICAgICAuYXBwZW5kKCdwYXRoJylcbiAgICAgIC5hdHRyKCdkJywgdGhpcy5jcmVhdGVOZWVkbGVQYXRoKHJhZGl1cykpXG4gICAgICAuYXR0cignY2xhc3MnLCAnZ2F1Z2UtbmVlZGxlJylcbiAgICAgIC5hdHRyKCdmaWxsJywgJ3JnYih2YXIoLS1heC1jb21wLWdhdWdlLWNoYXJ0LW5lZWRsZS1jb2xvcikpJylcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgcm90YXRlKCR7dGhpcy5yYWRpYW5zVG9EZWdyZWVzKC10aGlzLkhBTEZfQ0lSQ0xFX1JBRElBTlMpfSlgKTsgLy8gU3RhcnQgYXQgLTE4MCBkZWdyZWVzIChsZWZ0KVxuXG4gICAgLy8gQWRkIGEgY2VudGVyIGNpcmNsZVxuICAgIGRpYWxHcm91cFxuICAgICAgLmFwcGVuZCgnY2lyY2xlJylcbiAgICAgIC5hdHRyKCdjeCcsIDApXG4gICAgICAuYXR0cignY3knLCAwKVxuICAgICAgLmF0dHIoJ3InLCByYWRpdXMgKiAwLjA4KVxuICAgICAgLmF0dHIoJ2ZpbGwnLCAncmdiKHZhcigtLWF4LWNvbXAtZ2F1Z2UtY2hhcnQtbmVlZGxlLWNvbG9yKSknKVxuICAgICAgLmF0dHIoJ3N0cm9rZScsICcjZmZmJylcbiAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAyKTtcblxuICAgIC8vIEFkZCBhIHNtYWxsZXIgd2hpdGUgY2VudGVyXG4gICAgZGlhbEdyb3VwXG4gICAgICAuYXBwZW5kKCdjaXJjbGUnKVxuICAgICAgLmF0dHIoJ2N4JywgMClcbiAgICAgIC5hdHRyKCdjeScsIDApXG4gICAgICAuYXR0cigncicsIHJhZGl1cyAqIDAuMDMpXG4gICAgICAuYXR0cignZmlsbCcsICcjZmZmJyk7XG5cbiAgICAvLyBHZXQgZWFzaW5nIGZ1bmN0aW9uXG4gICAgY29uc3QgZWFzaW5nRnVuY3Rpb24gPSBnZXRFYXNpbmdGdW5jdGlvbih0aGlzLmQzLCB0aGlzLm9wdGlvbnMoKT8uYW5pbWF0aW9uRWFzaW5nKTtcblxuICAgIC8vIEFuaW1hdGUgdGhlIG5lZWRsZSBmcm9tIG1pbiB0byBjdXJyZW50IHZhbHVlXG4gICAgbmVlZGxlUGF0aFxuICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgLmR1cmF0aW9uKGFuaW1hdGlvbkR1cmF0aW9uKVxuICAgICAgLmVhc2UoZWFzaW5nRnVuY3Rpb24pXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHJvdGF0ZSgke2FuZ2xlSW5EZWdyZWVzfSlgKTtcbiAgfVxuXG4gIC8vIGdldEVhc2luZ0Z1bmN0aW9uIG1vdmVkIHRvIHNoYXJlZCBjaGFydCB1dGlsc1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcGF0aCBzdHJpbmcgZm9yIHRoZSBuZWVkbGVcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlTmVlZGxlUGF0aChyYWRpdXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgbmVlZGxlTGVuZ3RoID0gcmFkaXVzICogMC44O1xuICAgIGNvbnN0IG5lZWRsZVdpZHRoID0gcmFkaXVzICogMC4wNjtcbiAgICByZXR1cm4gYE0gMCwke25lZWRsZVdpZHRoIC8gMn0gTCAke25lZWRsZUxlbmd0aH0sMCBMIDAsJHstbmVlZGxlV2lkdGggLyAyfSBaYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY2FsZXMgYSB2YWx1ZSB0byBhbiBhbmdsZSAoaW4gcmFkaWFucylcbiAgICovXG4gIHByaXZhdGUgc2NhbGVWYWx1ZVRvQW5nbGUodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWx1ZVJhbmdlID0gbWF4IC0gbWluO1xuICAgIHJldHVybiAoKHZhbHVlIC0gbWluKSAvIHZhbHVlUmFuZ2UpICogdGhpcy5IQUxGX0NJUkNMRV9SQURJQU5TIC0gdGhpcy5RVUFSVEVSX0NJUkNMRV9SQURJQU5TO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjYWxlcyBhIHZhbHVlIHRvIGFuIGFuZ2xlIGZvciBjb2xvciBhcmNzIChpbiByYWRpYW5zKVxuICAgKi9cbiAgcHJpdmF0ZSBzY2FsZVZhbHVlVG9Db2xvckFuZ2xlKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWVSYW5nZSA9IG1heCAtIG1pbjtcbiAgICByZXR1cm4gKCh2YWx1ZSAtIG1pbikgLyB2YWx1ZVJhbmdlKSAqIHRoaXMuSEFMRl9DSVJDTEVfUkFESUFOUyAtIHRoaXMuUVVBUlRFUl9DSVJDTEVfUkFESUFOUztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBhbmdsZSBiYWNrIHRvIGEgdmFsdWVcbiAgICovXG4gIHByaXZhdGUgYW5nbGVUb1ZhbHVlKGFuZ2xlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWVSYW5nZSA9IG1heCAtIG1pbjtcbiAgICByZXR1cm4gbWluICsgKChhbmdsZSArIHRoaXMuUVVBUlRFUl9DSVJDTEVfUkFESUFOUykgLyB0aGlzLkhBTEZfQ0lSQ0xFX1JBRElBTlMpICogdmFsdWVSYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyByYWRpYW5zIHRvIGRlZ3JlZXNcbiAgICovXG4gIHByaXZhdGUgcmFkaWFuc1RvRGVncmVlcyhyYWRpYW5zOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByYWRpYW5zICogdGhpcy5ERUdSRUVTX1BFUl9SQURJQU47XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1nYXVnZS1jaGFydFwiIHJvbGU9XCJpbWdcIiAjY2hhcnRDb250YWluZXI+PC9kaXY+XG48YXgtY2hhcnQtdG9vbHRpcCBbZGF0YV09XCJ0b29sdGlwRGF0YSgpXCIgW3Bvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbigpXCIgW3Zpc2libGVdPVwidG9vbHRpcFZpc2libGUoKVwiPjwvYXgtY2hhcnQtdG9vbHRpcD5cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNoYXJ0cy1nYXVnZS1jaGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9nYXVnZS1jaGFydC9zcmMvYWNvcmV4LWNoYXJ0cy1nYXVnZS1jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
@@ -710,13 +710,13 @@ class AXHierarchyChartComponent extends AXChartComponent {
710
710
  .style('opacity', '0.6')
711
711
  .text(this.effectiveMessages().noDataHelp);
712
712
  }
713
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXHierarchyChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
714
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.3", type: AXHierarchyChartComponent, isStandalone: true, selector: "ax-hierarchy-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, nodeTemplate: { classPropertyName: "nodeTemplate", publicName: "nodeTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", nodeToggle: "nodeToggle" }, queries: [{ propertyName: "customNodeTemplate", first: true, predicate: ["nodeTemplate"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "chartContainer", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-hierarchy-chart\" role=\"img\" #chartContainer></div>\n", styles: ["ax-hierarchy-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-hierarchy-chart-node-color: var(--ax-sys-color-primary-500);--ax-comp-hierarchy-chart-node-stroke-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-link-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-hierarchy-chart-bg-color: 0, 0, 0, 0;color:rgb(var(--ax-comp-hierarchy-chart-text-color));background-color:rgba(var(--ax-comp-hierarchy-chart-bg-color))}ax-hierarchy-chart .ax-hierarchy-chart{width:100%;height:100%;min-height:300px;position:relative;overflow:hidden}ax-hierarchy-chart .ax-hierarchy-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-hierarchy-chart .ax-hierarchy-chart svg g:has(text){font-family:inherit}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-hierarchy-chart-bg-color));padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-help{font-size:.8rem;opacity:.6}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
713
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXHierarchyChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
714
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.3", type: AXHierarchyChartComponent, isStandalone: true, selector: "ax-hierarchy-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, nodeTemplate: { classPropertyName: "nodeTemplate", publicName: "nodeTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", nodeToggle: "nodeToggle" }, queries: [{ propertyName: "customNodeTemplate", first: true, predicate: ["nodeTemplate"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "chartContainer", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-hierarchy-chart\" role=\"img\" #chartContainer></div>\n", styles: ["ax-hierarchy-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-hierarchy-chart-node-color: var(--ax-sys-color-primary-500);--ax-comp-hierarchy-chart-node-stroke-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-link-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-hierarchy-chart-bg-color: 0, 0, 0, 0;color:rgb(var(--ax-comp-hierarchy-chart-text-color));background-color:rgba(var(--ax-comp-hierarchy-chart-bg-color))}ax-hierarchy-chart .ax-hierarchy-chart{width:100%;height:100%;min-height:300px;position:relative;overflow:hidden}ax-hierarchy-chart .ax-hierarchy-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-hierarchy-chart .ax-hierarchy-chart svg g:has(text){font-family:inherit}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-hierarchy-chart-bg-color));padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-help{font-size:.8rem;opacity:.6}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
715
715
  }
716
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXHierarchyChartComponent, decorators: [{
716
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXHierarchyChartComponent, decorators: [{
717
717
  type: Component,
718
718
  args: [{ selector: 'ax-hierarchy-chart', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-hierarchy-chart\" role=\"img\" #chartContainer></div>\n", styles: ["ax-hierarchy-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-hierarchy-chart-node-color: var(--ax-sys-color-primary-500);--ax-comp-hierarchy-chart-node-stroke-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-link-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-hierarchy-chart-bg-color: 0, 0, 0, 0;color:rgb(var(--ax-comp-hierarchy-chart-text-color));background-color:rgba(var(--ax-comp-hierarchy-chart-bg-color))}ax-hierarchy-chart .ax-hierarchy-chart{width:100%;height:100%;min-height:300px;position:relative;overflow:hidden}ax-hierarchy-chart .ax-hierarchy-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-hierarchy-chart .ax-hierarchy-chart svg g:has(text){font-family:inherit}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-hierarchy-chart-bg-color));padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-help{font-size:.8rem;opacity:.6}\n"] }]
719
- }], ctorParameters: () => [], propDecorators: { chartContainer: [{ type: i0.ViewChild, args: ['chartContainer', { isSignal: true }] }], customNodeTemplate: [{ type: i0.ContentChild, args: ['nodeTemplate', { isSignal: true }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], nodeTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeTemplate", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], nodeToggle: [{ type: i0.Output, args: ["nodeToggle"] }] } });
719
+ }], ctorParameters: () => [] });
720
720
 
721
721
  /**
722
722
  * Generated bundle index. Do not edit.