@rivet-health/design-system 6.1.0 → 6.1.2

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.
@@ -10,10 +10,10 @@ export class BadgeComponent {
10
10
  }
11
11
  }
12
12
  BadgeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13
- BadgeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BadgeComponent, selector: "riv-badge", inputs: { variant: "variant", size: "size" }, host: { properties: { "class": "this.classes" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:inline-flex;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy);white-space:nowrap}:host.xsmall{padding:calc(var(--base-grid-size) / 2) calc(var(--base-grid-size) * 1.5);border-radius:calc(var(--base-grid-size) * 4)}:host.small{padding:var(--base-grid-size) calc(var(--base-grid-size) * 2);border-radius:calc(var(--base-grid-size) * 5)}:host.medium{padding:calc(var(--base-grid-size) * 1.5) calc(var(--base-grid-size) * 3);border-radius:calc(var(--base-grid-size) * 6)}:host.large{padding:calc(var(--base-grid-size) * 2) calc(var(--base-grid-size) * 4);border-radius:calc(var(--base-grid-size) * 6)}:host.brand{background-color:var(--brand);color:var(--white-100)}:host.beta{background-color:var(--baloo-50);color:var(--white-100)}:host.disabled{background-color:var(--gray-20);color:var(--gray-60)}:host.qualitative-safety{background-color:var(--surface-light-safety);color:var(--type-light-safety)}:host.qualitative-caution{background-color:var(--surface-light-caution);color:var(--type-light-caution)}:host.qualitative-warning{background-color:var(--surface-light-warning);color:var(--type-light-warning)}:host.qualitative-danger{background-color:var(--surface-light-danger);color:var(--type-light-danger)}:host.qualitative-danger-inverse{background-color:var(--surface-dark-danger);color:var(--white-100)}:host.categorical-1{background-color:var(--baja-blast-10);color:var(--baja-blast-90)}:host.categorical-2{background-color:var(--baloo-10);color:var(--baloo-90)}:host.categorical-3{background-color:var(--yella-10);color:var(--yella-90)}:host.categorical-4{background-color:var(--tang-10);color:var(--tang-90)}:host.categorical-5{background-color:var(--fyre-10);color:var(--fyre-90)}:host.categorical-6{background-color:var(--rosi-10);color:var(--rosi-90)}:host.categorical-7{background-color:var(--serena-10);color:var(--serena-90)}:host.categorical-8{background-color:var(--teal-diamond-10);color:var(--teal-diamond-90)}:host.categorical-9{background-color:var(--purp-10);color:var(--purp-90)}:host.categorical-10{background-color:var(--arnge-10);color:var(--arnge-90)}:host.categorical-1-inverse{background-color:var(--baja-blast-70);color:var(--type-dark-high-contrast)}:host.categorical-2-inverse{background-color:var(--baloo-70);color:var(--type-dark-high-contrast)}:host.categorical-3-inverse{background-color:var(--yella-70);color:var(--type-light-high-contrast)}:host.categorical-4-inverse{background-color:var(--tang-70);color:var(--type-dark-high-contrast)}:host.categorical-5-inverse{background-color:var(--fyre-70);color:var(--type-dark-high-contrast)}:host.categorical-6-inverse{background-color:var(--rosi-70);color:var(--type-dark-high-contrast)}:host.categorical-7-inverse{background-color:var(--serena-70);color:var(--type-dark-high-contrast)}:host.categorical-8-inverse{background-color:var(--teal-diamond-70);color:var(--type-dark-high-contrast)}:host.categorical-9-inverse{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.categorical-10-inverse{background-color:var(--arnge-70);color:var(--type-dark-high-contrast)}:host.linear-1{background-color:var(--purp-10);color:var(--type-light-high-contrast)}:host.linear-2{background-color:var(--purp-20);color:var(--type-light-high-contrast)}:host.linear-3{background-color:var(--purp-30);color:var(--type-light-high-contrast)}:host.linear-4{background-color:var(--purp-40);color:var(--type-dark-high-contrast)}:host.linear-5{background-color:var(--purp-50);color:var(--type-dark-high-contrast)}:host.linear-6{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.linear-7{background-color:var(--purp-70);color:var(--type-dark-high-contrast)}:host.linear-8{background-color:var(--purp-80);color:var(--type-dark-high-contrast)}:host.linear-9{background-color:var(--purp-90);color:var(--type-dark-high-contrast)}:host.linear-10{background-color:var(--purp-100);color:var(--type-dark-high-contrast)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
13
+ BadgeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BadgeComponent, selector: "riv-badge", inputs: { variant: "variant", size: "size" }, host: { properties: { "class": "this.classes" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:inline-flex;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy);white-space:nowrap;border-radius:calc(var(--base-grid-size) * var(--badge-multiplier));min-width:calc(var(--base-grid-size) * var(--badge-multiplier));min-height:calc(var(--base-grid-size) * var(--badge-multiplier))}:host.xsmall{padding:calc(var(--base-grid-size) / 2) calc(var(--base-grid-size) * 1.5);--badge-multiplier: 4}:host.small{padding:var(--base-grid-size) calc(var(--base-grid-size) * 2);--badge-multiplier: 5}:host.medium{padding:calc(var(--base-grid-size) * 1.5) calc(var(--base-grid-size) * 3);--badge-multiplier: 6}:host.large{padding:calc(var(--base-grid-size) * 2) calc(var(--base-grid-size) * 3);--badge-multiplier: 6}:host.brand{background-color:var(--brand);color:var(--white-100)}:host.beta{background-color:var(--baloo-50);color:var(--white-100)}:host.disabled{background-color:var(--gray-20);color:var(--gray-60)}:host.qualitative-safety{background-color:var(--surface-light-safety);color:var(--type-light-safety)}:host.qualitative-caution{background-color:var(--surface-light-caution);color:var(--type-light-caution)}:host.qualitative-warning{background-color:var(--surface-light-warning);color:var(--type-light-warning)}:host.qualitative-danger{background-color:var(--surface-light-danger);color:var(--type-light-danger)}:host.qualitative-danger-inverse{background-color:var(--surface-dark-danger);color:var(--white-100)}:host.categorical-1{background-color:var(--baja-blast-10);color:var(--baja-blast-90)}:host.categorical-2{background-color:var(--baloo-10);color:var(--baloo-90)}:host.categorical-3{background-color:var(--yella-10);color:var(--yella-90)}:host.categorical-4{background-color:var(--tang-10);color:var(--tang-90)}:host.categorical-5{background-color:var(--fyre-10);color:var(--fyre-90)}:host.categorical-6{background-color:var(--rosi-10);color:var(--rosi-90)}:host.categorical-7{background-color:var(--serena-10);color:var(--serena-90)}:host.categorical-8{background-color:var(--teal-diamond-10);color:var(--teal-diamond-90)}:host.categorical-9{background-color:var(--purp-10);color:var(--purp-90)}:host.categorical-10{background-color:var(--arnge-10);color:var(--arnge-90)}:host.categorical-1-inverse{background-color:var(--baja-blast-70);color:var(--type-dark-high-contrast)}:host.categorical-2-inverse{background-color:var(--baloo-70);color:var(--type-dark-high-contrast)}:host.categorical-3-inverse{background-color:var(--yella-70);color:var(--type-light-high-contrast)}:host.categorical-4-inverse{background-color:var(--tang-70);color:var(--type-dark-high-contrast)}:host.categorical-5-inverse{background-color:var(--fyre-70);color:var(--type-dark-high-contrast)}:host.categorical-6-inverse{background-color:var(--rosi-70);color:var(--type-dark-high-contrast)}:host.categorical-7-inverse{background-color:var(--serena-70);color:var(--type-dark-high-contrast)}:host.categorical-8-inverse{background-color:var(--teal-diamond-70);color:var(--type-dark-high-contrast)}:host.categorical-9-inverse{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.categorical-10-inverse{background-color:var(--arnge-70);color:var(--type-dark-high-contrast)}:host.linear-1{background-color:var(--purp-10);color:var(--type-light-high-contrast)}:host.linear-2{background-color:var(--purp-20);color:var(--type-light-high-contrast)}:host.linear-3{background-color:var(--purp-30);color:var(--type-light-high-contrast)}:host.linear-4{background-color:var(--purp-40);color:var(--type-dark-high-contrast)}:host.linear-5{background-color:var(--purp-50);color:var(--type-dark-high-contrast)}:host.linear-6{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.linear-7{background-color:var(--purp-70);color:var(--type-dark-high-contrast)}:host.linear-8{background-color:var(--purp-80);color:var(--type-dark-high-contrast)}:host.linear-9{background-color:var(--purp-90);color:var(--type-dark-high-contrast)}:host.linear-10{background-color:var(--purp-100);color:var(--type-dark-high-contrast)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14
14
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BadgeComponent, decorators: [{
15
15
  type: Component,
16
- args: [{ selector: 'riv-badge', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n", styles: [":host{display:inline-flex;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy);white-space:nowrap}:host.xsmall{padding:calc(var(--base-grid-size) / 2) calc(var(--base-grid-size) * 1.5);border-radius:calc(var(--base-grid-size) * 4)}:host.small{padding:var(--base-grid-size) calc(var(--base-grid-size) * 2);border-radius:calc(var(--base-grid-size) * 5)}:host.medium{padding:calc(var(--base-grid-size) * 1.5) calc(var(--base-grid-size) * 3);border-radius:calc(var(--base-grid-size) * 6)}:host.large{padding:calc(var(--base-grid-size) * 2) calc(var(--base-grid-size) * 4);border-radius:calc(var(--base-grid-size) * 6)}:host.brand{background-color:var(--brand);color:var(--white-100)}:host.beta{background-color:var(--baloo-50);color:var(--white-100)}:host.disabled{background-color:var(--gray-20);color:var(--gray-60)}:host.qualitative-safety{background-color:var(--surface-light-safety);color:var(--type-light-safety)}:host.qualitative-caution{background-color:var(--surface-light-caution);color:var(--type-light-caution)}:host.qualitative-warning{background-color:var(--surface-light-warning);color:var(--type-light-warning)}:host.qualitative-danger{background-color:var(--surface-light-danger);color:var(--type-light-danger)}:host.qualitative-danger-inverse{background-color:var(--surface-dark-danger);color:var(--white-100)}:host.categorical-1{background-color:var(--baja-blast-10);color:var(--baja-blast-90)}:host.categorical-2{background-color:var(--baloo-10);color:var(--baloo-90)}:host.categorical-3{background-color:var(--yella-10);color:var(--yella-90)}:host.categorical-4{background-color:var(--tang-10);color:var(--tang-90)}:host.categorical-5{background-color:var(--fyre-10);color:var(--fyre-90)}:host.categorical-6{background-color:var(--rosi-10);color:var(--rosi-90)}:host.categorical-7{background-color:var(--serena-10);color:var(--serena-90)}:host.categorical-8{background-color:var(--teal-diamond-10);color:var(--teal-diamond-90)}:host.categorical-9{background-color:var(--purp-10);color:var(--purp-90)}:host.categorical-10{background-color:var(--arnge-10);color:var(--arnge-90)}:host.categorical-1-inverse{background-color:var(--baja-blast-70);color:var(--type-dark-high-contrast)}:host.categorical-2-inverse{background-color:var(--baloo-70);color:var(--type-dark-high-contrast)}:host.categorical-3-inverse{background-color:var(--yella-70);color:var(--type-light-high-contrast)}:host.categorical-4-inverse{background-color:var(--tang-70);color:var(--type-dark-high-contrast)}:host.categorical-5-inverse{background-color:var(--fyre-70);color:var(--type-dark-high-contrast)}:host.categorical-6-inverse{background-color:var(--rosi-70);color:var(--type-dark-high-contrast)}:host.categorical-7-inverse{background-color:var(--serena-70);color:var(--type-dark-high-contrast)}:host.categorical-8-inverse{background-color:var(--teal-diamond-70);color:var(--type-dark-high-contrast)}:host.categorical-9-inverse{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.categorical-10-inverse{background-color:var(--arnge-70);color:var(--type-dark-high-contrast)}:host.linear-1{background-color:var(--purp-10);color:var(--type-light-high-contrast)}:host.linear-2{background-color:var(--purp-20);color:var(--type-light-high-contrast)}:host.linear-3{background-color:var(--purp-30);color:var(--type-light-high-contrast)}:host.linear-4{background-color:var(--purp-40);color:var(--type-dark-high-contrast)}:host.linear-5{background-color:var(--purp-50);color:var(--type-dark-high-contrast)}:host.linear-6{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.linear-7{background-color:var(--purp-70);color:var(--type-dark-high-contrast)}:host.linear-8{background-color:var(--purp-80);color:var(--type-dark-high-contrast)}:host.linear-9{background-color:var(--purp-90);color:var(--type-dark-high-contrast)}:host.linear-10{background-color:var(--purp-100);color:var(--type-dark-high-contrast)}\n"] }]
16
+ args: [{ selector: 'riv-badge', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n", styles: [":host{display:inline-flex;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy);white-space:nowrap;border-radius:calc(var(--base-grid-size) * var(--badge-multiplier));min-width:calc(var(--base-grid-size) * var(--badge-multiplier));min-height:calc(var(--base-grid-size) * var(--badge-multiplier))}:host.xsmall{padding:calc(var(--base-grid-size) / 2) calc(var(--base-grid-size) * 1.5);--badge-multiplier: 4}:host.small{padding:var(--base-grid-size) calc(var(--base-grid-size) * 2);--badge-multiplier: 5}:host.medium{padding:calc(var(--base-grid-size) * 1.5) calc(var(--base-grid-size) * 3);--badge-multiplier: 6}:host.large{padding:calc(var(--base-grid-size) * 2) calc(var(--base-grid-size) * 3);--badge-multiplier: 6}:host.brand{background-color:var(--brand);color:var(--white-100)}:host.beta{background-color:var(--baloo-50);color:var(--white-100)}:host.disabled{background-color:var(--gray-20);color:var(--gray-60)}:host.qualitative-safety{background-color:var(--surface-light-safety);color:var(--type-light-safety)}:host.qualitative-caution{background-color:var(--surface-light-caution);color:var(--type-light-caution)}:host.qualitative-warning{background-color:var(--surface-light-warning);color:var(--type-light-warning)}:host.qualitative-danger{background-color:var(--surface-light-danger);color:var(--type-light-danger)}:host.qualitative-danger-inverse{background-color:var(--surface-dark-danger);color:var(--white-100)}:host.categorical-1{background-color:var(--baja-blast-10);color:var(--baja-blast-90)}:host.categorical-2{background-color:var(--baloo-10);color:var(--baloo-90)}:host.categorical-3{background-color:var(--yella-10);color:var(--yella-90)}:host.categorical-4{background-color:var(--tang-10);color:var(--tang-90)}:host.categorical-5{background-color:var(--fyre-10);color:var(--fyre-90)}:host.categorical-6{background-color:var(--rosi-10);color:var(--rosi-90)}:host.categorical-7{background-color:var(--serena-10);color:var(--serena-90)}:host.categorical-8{background-color:var(--teal-diamond-10);color:var(--teal-diamond-90)}:host.categorical-9{background-color:var(--purp-10);color:var(--purp-90)}:host.categorical-10{background-color:var(--arnge-10);color:var(--arnge-90)}:host.categorical-1-inverse{background-color:var(--baja-blast-70);color:var(--type-dark-high-contrast)}:host.categorical-2-inverse{background-color:var(--baloo-70);color:var(--type-dark-high-contrast)}:host.categorical-3-inverse{background-color:var(--yella-70);color:var(--type-light-high-contrast)}:host.categorical-4-inverse{background-color:var(--tang-70);color:var(--type-dark-high-contrast)}:host.categorical-5-inverse{background-color:var(--fyre-70);color:var(--type-dark-high-contrast)}:host.categorical-6-inverse{background-color:var(--rosi-70);color:var(--type-dark-high-contrast)}:host.categorical-7-inverse{background-color:var(--serena-70);color:var(--type-dark-high-contrast)}:host.categorical-8-inverse{background-color:var(--teal-diamond-70);color:var(--type-dark-high-contrast)}:host.categorical-9-inverse{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.categorical-10-inverse{background-color:var(--arnge-70);color:var(--type-dark-high-contrast)}:host.linear-1{background-color:var(--purp-10);color:var(--type-light-high-contrast)}:host.linear-2{background-color:var(--purp-20);color:var(--type-light-high-contrast)}:host.linear-3{background-color:var(--purp-30);color:var(--type-light-high-contrast)}:host.linear-4{background-color:var(--purp-40);color:var(--type-dark-high-contrast)}:host.linear-5{background-color:var(--purp-50);color:var(--type-dark-high-contrast)}:host.linear-6{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.linear-7{background-color:var(--purp-70);color:var(--type-dark-high-contrast)}:host.linear-8{background-color:var(--purp-80);color:var(--type-dark-high-contrast)}:host.linear-9{background-color:var(--purp-90);color:var(--type-dark-high-contrast)}:host.linear-10{background-color:var(--purp-100);color:var(--type-dark-high-contrast)}\n"] }]
17
17
  }], propDecorators: { variant: [{
18
18
  type: Input
19
19
  }], size: [{
@@ -142,7 +142,7 @@ export class TimeSeriesComponent {
142
142
  const xMinorTicks = getTimeInterval(interval)
143
143
  .range(minDateValue, utcDay.offset(maxDateValue, 1))
144
144
  .map(date => ({
145
- value: utcDay.offset(date, 1).valueOf(),
145
+ value: utcDay.offset(date, 0).valueOf(),
146
146
  label: minorFormatter(date),
147
147
  }))
148
148
  .filter((_, i, arr) => arr.length > xMinorTickLimit
@@ -312,4 +312,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
312
312
  }], allowLegendToggle: [{
313
313
  type: Input
314
314
  }] } });
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi90aW1lLXNlcmllcy90aW1lLXNlcmllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL3RpbWUtc2VyaWVzL3RpbWUtc2VyaWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxlQUFlLEVBRWYsYUFBYSxFQUNiLEdBQUcsRUFDSCxXQUFXLEdBQ1osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFNUQsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixlQUFlLEVBQ2YsU0FBUyxHQUNWLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBb0IsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7QUFFdkUsTUFBTSxnQkFBZ0IsR0FBYSxLQUFLLENBQUM7QUFFekMsNkVBQTZFO0FBQzdFLCtDQUErQztBQU8vQyxNQUFNLE9BQU8sbUJBQW1CO0lBTmhDO1FBT21CLFdBQU0sR0FDckIsSUFBSSxlQUFlLENBQXNDO1lBQ3ZEO2dCQUNFLFlBQVksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUNyQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUN4RCxNQUFNLEVBQUUsRUFBRTthQUNYO1NBQ0YsQ0FBQyxDQUFDO1FBU1ksV0FBTSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBUWhELFdBQU0sR0FBRyxHQUFHLENBQUM7UUFFTCxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FDdEQscUJBQXFCLENBQ3RCLENBQUM7UUFTTyxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDdkIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLGlCQUFZLEdBQUcsR0FBRyxDQUFDO1FBRW5CLGVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDcEMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUNqQixXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1FBRWUsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFXLGdCQUFnQixDQUFDLENBQUM7UUFZNUQsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFTekQsZUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMxRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3JCLE1BQU0sVUFBVSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqRSxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUNILENBQUM7UUFDZSxxQkFBZ0IsR0FBRyxhQUFhLENBQUM7WUFDaEQsSUFBSSxDQUFDLE1BQU07WUFDWCxJQUFJLENBQUMsTUFBTTtTQUNaLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNyQixNQUFNLFVBQVUsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDakUsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVlLHNCQUFpQixHQUEyQixhQUFhLENBQUM7WUFDekUsSUFBSSxDQUFDLE1BQU07WUFDWCxJQUFJLENBQUMsVUFBVTtTQUNoQixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUU7WUFDekIsTUFBTSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekQsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQ2pDLFlBQVksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQ2hDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDbEQsQ0FBQyxNQUFNLENBQUM7Z0JBRVQsT0FBTyxRQUFRLElBQUksU0FBUyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1FBRU8scUJBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDckQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQ2QsU0FBUyxDQUFDLEdBQUcsQ0FDWCxDQUFDLFFBQVEsRUFBZ0MsRUFBRSxDQUFDLENBQUM7WUFDM0MsRUFBRSxFQUFFLFFBQVE7WUFDWixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO1NBQ2xDLENBQUMsQ0FDSCxDQUNGLEVBQ0QsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0MsQ0FBQztRQUVPLDRCQUF1QixHQUFHLGFBQWEsQ0FBQztZQUMvQyxJQUFJLENBQUMsU0FBUztZQUNkLElBQUksQ0FBQyxnQkFBZ0I7U0FDdEIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQWMsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxXQUFXO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUUvQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7b0JBQy9ELFFBQVEsR0FBRyxZQUFZLENBQUM7Z0JBQzFCLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztvQkFDOUQsUUFBUSxHQUFHLFdBQVcsQ0FBQzthQUMxQjtZQUNELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3RELENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQy9DLENBQUM7UUFFTyxzQkFBaUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUM1RCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsTUFBTSxDQUFDLEVBQWUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUNyRSxDQUFDO1FBTU8sc0JBQWlCLEdBQ3hCLElBQUksZUFBZSxDQUE4QyxJQUFJLENBQUMsQ0FBQztRQUVoRSxnQkFBVyxHQUFHLGFBQWEsQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTTtZQUNYLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxDQUFDLGlCQUFpQjtTQUN2QixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FDMUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBK0IsRUFBRTtZQUNoRCxPQUFPO2dCQUNMLEdBQUcsTUFBTTtnQkFDVCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUEyQyxDQUFDO29CQUNsRSxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7d0JBQy9CLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNsRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTs0QkFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7eUJBQ3JCO3dCQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUM5QjtvQkFDRCxJQUNFLElBQUksQ0FBQyxpQkFBaUI7d0JBQ3RCLGdCQUFnQjt3QkFDaEIsTUFBTSxDQUFDLEtBQUssS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQ3ZDO3dCQUNBLE1BQU0sQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO3FCQUNqRDtvQkFDRCxPQUFPO3dCQUNMLEdBQUcsTUFBTTt3QkFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUN4RCxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDOzRCQUN6QixLQUFLLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO3lCQUN0QyxDQUFDLENBQUM7cUJBQ0osQ0FBQztnQkFDSixDQUFDLENBQUM7YUFDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsRUFDRCxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1FBRU8scUJBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQy9DLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFDakIsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0MsQ0FBQztRQUVPLGNBQVMsR0FBeUIsYUFBYSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxXQUFXO1lBQ2hCLElBQUksQ0FBQyxnQkFBZ0I7WUFDckIsSUFBSSxDQUFDLGlCQUFpQjtZQUN0QixJQUFJLENBQUMsTUFBTTtZQUNYLElBQUksQ0FBQyxnQkFBZ0I7U0FDdEIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFO1lBQ3RFLE1BQU0sT0FBTyxHQUFHLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUU5QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDMUUsTUFBTSxjQUFjLEdBQ2xCLEtBQUs7Z0JBQ0wsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUM7Z0JBQzNCLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxNQUFNLEdBQUcsV0FBVyxFQUFFO2lCQUN6QixNQUFNLENBQUMsZUFBZSxDQUFDO2lCQUN2QixLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLEdBQUcsZUFBZSxDQUFDO1lBQ3JELE1BQU0sZ0JBQWdCLEdBQ3BCLFlBQVksQ0FBQyxXQUFXLEVBQUUsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDMUQsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5RCxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN2RCxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDO2lCQUMxQyxLQUFLLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNuRCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNaLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3ZDLEtBQUssRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDO2FBQzVCLENBQUMsQ0FBQztpQkFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQ3BCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsZUFBZTtnQkFDMUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUFDO1lBQ0osTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEQsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FDakQsY0FBYyxFQUNkLGdCQUFnQixDQUNqQixDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbkQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sV0FBVyxHQUFHLFlBQVk7aUJBQzdCLEtBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDO2lCQUM3QixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQixLQUFLLEVBQUUsY0FBYyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO2dCQUNsRSxLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRTthQUMxQixDQUFDLENBQUMsQ0FBQztZQUNOLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBRW5FLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDdkMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQ3hDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQy9CLENBQUM7Z0JBQ0YsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDMUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQztvQkFDbEIsR0FBRyxNQUFNO29CQUNULEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUM7aUJBQ3pDLEVBQ0QsRUFBRSxDQUNILENBQUM7Z0JBQ0YsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELHlEQUF5RDtnQkFDekQsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUU7b0JBQzFCLElBQUksR0FBRyxDQUFDLENBQUM7aUJBQ1Y7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsV0FBVyxFQUFFO3FCQUN6QixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3BCLEtBQUssQ0FBQztvQkFDTCxJQUFJLENBQUMsTUFBTTt3QkFDVCxJQUFJLENBQUMsYUFBYTt3QkFDbEIsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7b0JBQzFDLElBQUksQ0FBQyxXQUFXO2lCQUNqQixDQUFDLENBQUM7Z0JBQ0wsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDMUMsR0FBRyxNQUFNO29CQUNULElBQUksRUFBRSxJQUFJLEVBQWlDO3lCQUN4QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDdkMsTUFBTSxFQUFFLE9BQU8sTUFBTSxDQUFDLFVBQVUsR0FBRztvQkFDbkMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDakMsR0FBRyxLQUFLO3dCQUNSLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzt3QkFDckIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO3FCQUN2QixDQUFDLENBQUM7aUJBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0osT0FBTztvQkFDTCxHQUFHLE1BQU07b0JBQ1QsTUFBTTtvQkFDTixJQUFJO29CQUNKLElBQUk7b0JBQ0osTUFBTTtvQkFDTixNQUFNO2lCQUNQLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILDhFQUE4RTtZQUM5RSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUU7Z0JBQ2QsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLEVBQUU7cUJBQ3RDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO3FCQUN6QixNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QixFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDaEQ7WUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0MsQ0FBQztRQUVPLFlBQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDdEMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQ2YsVUFBVSxDQUFDLE1BQU0sQ0FPZixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLEdBQUcsS0FBSztZQUNSLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ25CLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtnQkFDN0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLElBQUksU0FBUzthQUMzQyxDQUFDLENBQUM7U0FDSixFQUNELEVBQUUsQ0FDSCxDQUNGLENBQ0YsQ0FBQztRQUVPLFdBQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDckMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQ2YsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUN4RCxDQUNGLEVBQ0QsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0MsQ0FBQztRQUVPLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBR25DLElBQUksQ0FBQyxDQUFDO1FBRVAsYUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMzRSxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxhQUFhO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBRWhDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3pCLE1BQU0sVUFBVSxHQUFzQixNQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUN0RSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQ3hCLFVBQVUsQ0FBQyxJQUFJLEdBQUcsT0FBTyxFQUN6QixVQUFVLENBQUMsR0FBRyxHQUFHLE9BQU8sRUFDeEIsVUFBVSxDQUFDLEtBQUssR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUM5QixVQUFVLENBQUMsTUFBTSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQ2hDLENBQUM7WUFHRixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7WUFFN0IsS0FBSyxNQUFNLE1BQU0sSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRTtnQkFDdkMsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRTtvQkFDbEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQy9CLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDOUMsQ0FBQztvQkFDRixJQUFJLEtBQUssRUFBRTt3QkFDVCxPQUFPLENBQUMsSUFBSSxDQUFDOzRCQUNYLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTs0QkFDN0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLOzRCQUNuQixLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzt5QkFDL0MsQ0FBQyxDQUFDO3FCQUNKO2lCQUNGO2FBQ0Y7WUFFRCxJQUFJLFFBQVEsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2YsS0FBSyxNQUFNLE1BQU0sSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRTtvQkFDdkMsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRTt3QkFDbEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQy9CLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDOUMsQ0FBQzt3QkFDRixJQUFJLEtBQUssRUFBRTs0QkFDVCxPQUFPLENBQUMsSUFBSSxDQUFDO2dDQUNYLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtnQ0FDN0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dDQUNuQixLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzs2QkFDL0MsQ0FBQyxDQUFDO3lCQUNKO3FCQUNGO2lCQUNGO2FBQ0Y7WUFFRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUNILENBQUM7S0FDSDtJQXRZQyxJQUNXLEtBQUssQ0FBQyxDQUFzQztRQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFHRCxJQUFjLEtBQUssQ0FBQyxDQUFTO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFjLEtBQUs7UUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFPRCxJQUNXLGdCQUFnQixDQUFDLENBQVM7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQWdCRCxJQUNXLFFBQVEsQ0FBQyxDQUFXO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFNRCxJQUNXLGlCQUFpQixDQUFDLENBQVU7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQTZFRCxpQkFBaUIsQ0FBQyxNQUFvQztRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxFQUFjLENBQUM7SUFDeEMsQ0FBQzs7Z0hBdEpVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLDZSQ3pDaEMsdW9LQTBLQTsyRkRqSWEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzhCQWFwQyxLQUFLO3NCQURmLEtBQUs7Z0JBc0JLLGdCQUFnQjtzQkFEMUIsS0FBSztnQkF1QkssUUFBUTtzQkFEbEIsS0FBSztnQkFTVSxRQUFRO3NCQUR2QixTQUFTO3VCQUFDLFVBQVU7Z0JBS1YsaUJBQWlCO3NCQUQzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2NhbGVMaW5lYXIgfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQgeyBsaW5lIH0gZnJvbSAnZDMtc2hhcGUnO1xuaW1wb3J0IHsgdXRjRGF5IH0gZnJvbSAnZDMtdGltZSc7XG5pbXBvcnQgeyB1dGNGb3JtYXQgfSBmcm9tICdkMy10aW1lLWZvcm1hdCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTnVtYmVyUGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9udW1iZXIucGlwZSc7XG5pbXBvcnQgeyBTaW5nbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC9zaW5nbGUtc2VsZWN0L3NpbmdsZS1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEludGVydmFsLFxuICBnZXRJbnRlcnZhbFRpdGxlLFxuICBnZXRNYWpvckludGVydmFsLFxuICBnZXRNYWpvckludGVydmFsRm9ybWF0LFxuICBnZXRNaW5vckludGVydmFsRm9ybWF0LFxuICBnZXRUaW1lSW50ZXJ2YWwsXG4gIGludGVydmFscyxcbn0gZnJvbSAnLi4vaW50ZXJ2YWxzJztcbmltcG9ydCB7IERyYXdEYXRhLCBNYXJrZXIsIGdldERhdGVSYW5nZSB9IGZyb20gJy4vdGltZS1zZXJpZXMuaGVscGVycyc7XG5cbmNvbnN0IERFRkFVTFRfSU5URVJWQUw6IEludGVydmFsID0gJ2RheSc7XG5cbi8vIFRPRE86IG9uY2Ugd2UgdXBncmFkZSB0byBBbmd1bGFyIDE2LCB0aGlzIGNvbXBvbmVudCBjYW4gYmUgY2xlYW5lZCB1cCB3aXRoXG4vLyBzaWduYWxzIGluc3RlYWQgb2YgUnhKUy4gU2VlIGNvbW1pdCBlMjM4YzJkLlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXRpbWUtc2VyaWVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWUtc2VyaWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGltZS1zZXJpZXMuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGltZVNlcmllc0NvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5wdXQkID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PFRpbWVTZXJpZXNDb21wb25lbnQuVGltZVNlcmllc0lucHV0PihbXG4gICAgICB7XG4gICAgICAgIHBvaW50UmVkdWNlcjogcG9pbnRzID0+XG4gICAgICAgICAgcG9pbnRzLnJlZHVjZSgodG90YWwsIHsgdmFsdWUgfSkgPT4gdG90YWwgKyB2YWx1ZSwgMCksXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiB2ID0+IG5ldyBOdW1iZXJQaXBlKCkudHJhbnNmb3JtKHYpID8/ICcnLFxuICAgICAgICBzZXJpZXM6IFtdLFxuICAgICAgfSxcbiAgICBdKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpbnB1dCh2OiBUaW1lU2VyaWVzQ29tcG9uZW50LlRpbWVTZXJpZXNJbnB1dCkge1xuICAgIHRoaXMuaW5wdXQkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBpbnB1dCgpOiBUaW1lU2VyaWVzQ29tcG9uZW50LlRpbWVTZXJpZXNJbnB1dCB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHdpZHRoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIHNldCB3aWR0aCh2OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoJC5uZXh0KHYpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgd2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMud2lkdGgkLmdldFZhbHVlKCk7XG4gIH1cblxuICByZWFkb25seSBIRUlHSFQgPSAzMDA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB6ZXJvU3RhdGVNZXNzYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcbiAgICAnTm8gZGF0YSB0byBkaXNwbGF5LicsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgemVyb1N0YXRlTWVzc2FnZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLnplcm9TdGF0ZU1lc3NhZ2UkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCB6ZXJvU3RhdGVNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuemVyb1N0YXRlTWVzc2FnZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHJlYWRvbmx5IEJPVFRPTV9PRkZTRVQgPSAyNDtcbiAgcmVhZG9ubHkgTEVGVF9SSUdIVF9PRkZTRVQgPSA0ODtcbiAgcmVhZG9ubHkgVE9QX1BBRERJTkcgPSAxNjtcbiAgcmVhZG9ubHkgTEVGVF9SSUdIVF9QQURESU5HID0gODtcbiAgcmVhZG9ubHkgQk9UVE9NX1BBRERJTkcgPSA4O1xuICByZWFkb25seSBZX1RJQ0tfQ09VTlQgPSA1O1xuICByZWFkb25seSBQT0lOVF9SQURJVVMgPSAzLjU7XG5cbiAgcmVhZG9ubHkgZGF0ZVJhbmdlJCA9IHRoaXMuaW5wdXQkLnBpcGUoXG4gICAgbWFwKGdldERhdGVSYW5nZSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGludGVydmFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SW50ZXJ2YWw+KERFRkFVTFRfSU5URVJWQUwpO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGludGVydmFsKHY6IEludGVydmFsKSB7XG4gICAgdGhpcy5pbnRlcnZhbCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGludGVydmFsKCkge1xuICAgIHJldHVybiB0aGlzLmludGVydmFsJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnY29udHJvbHMnKVxuICBwdWJsaWMgcmVhZG9ubHkgY29udHJvbHM/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dMZWdlbmRUb2dnbGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYWxsb3dMZWdlbmRUb2dnbGUodjogYm9vbGVhbikge1xuICAgIHRoaXMuYWxsb3dMZWdlbmRUb2dnbGUkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBhbGxvd0xlZ2VuZFRvZ2dsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd0xlZ2VuZFRvZ2dsZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4UG9pbnRzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2lkdGgkLCB0aGlzLmlucHV0JF0pLnBpcGUoXG4gICAgbWFwKChbd2lkdGgsIGlucHV0XSkgPT4ge1xuICAgICAgY29uc3QgaW5uZXJXaWR0aCA9IHdpZHRoIC0gdGhpcy5MRUZUX1JJR0hUX09GRlNFVCAqIGlucHV0Lmxlbmd0aDtcbiAgICAgIGNvbnN0IHBvaW50V2l0aFBhZGRpbmcgPSAodGhpcy5QT0lOVF9SQURJVVMgKyA0KSAqIDI7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihpbm5lcldpZHRoIC8gcG9pbnRXaXRoUGFkZGluZyk7XG4gICAgfSksXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgeE1pbm9yVGlja0xpbWl0JCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMud2lkdGgkLFxuICAgIHRoaXMuaW5wdXQkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3dpZHRoLCBpbnB1dF0pID0+IHtcbiAgICAgIGNvbnN0IGlubmVyV2lkdGggPSB3aWR0aCAtIHRoaXMuTEVGVF9SSUdIVF9PRkZTRVQgKiBpbnB1dC5sZW5ndGg7XG4gICAgICBjb25zdCBtaW5TaXplUGVyVGljayA9IDQwO1xuICAgICAgcmV0dXJuIE1hdGgucm91bmQoaW5uZXJXaWR0aCAvIG1pblNpemVQZXJUaWNrKTtcbiAgICB9KSxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFsbG93ZWRJbnRlcnZhbHMkOiBPYnNlcnZhYmxlPEludGVydmFsW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5pbnB1dCQsXG4gICAgdGhpcy5tYXhQb2ludHMkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2lucHV0LCBtYXhQb2ludHNdKSA9PiB7XG4gICAgICBjb25zdCBbbWluRGF0ZVZhbHVlLCBtYXhEYXRlVmFsdWVdID0gZ2V0RGF0ZVJhbmdlKGlucHV0KTtcblxuICAgICAgcmV0dXJuIGludGVydmFscy5maWx0ZXIoaW50ZXJ2YWwgPT4ge1xuICAgICAgICBjb25zdCB0aW1lSW50ZXJ2YWwgPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICBjb25zdCBudW1TdGVwcyA9IHRpbWVJbnRlcnZhbC5yYW5nZShcbiAgICAgICAgICB0aW1lSW50ZXJ2YWwuZmxvb3IobWluRGF0ZVZhbHVlKSxcbiAgICAgICAgICB0aW1lSW50ZXJ2YWwuY2VpbCh1dGNEYXkub2Zmc2V0KG1heERhdGVWYWx1ZSwgMSkpLFxuICAgICAgICApLmxlbmd0aDtcblxuICAgICAgICByZXR1cm4gbnVtU3RlcHMgPD0gbWF4UG9pbnRzICYmIG51bVN0ZXBzID4gMTtcbiAgICAgIH0pO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgaW50ZXJ2YWxPcHRpb25zJCA9IHRoaXMuYWxsb3dlZEludGVydmFscyQucGlwZShcbiAgICBtYXAoaW50ZXJ2YWxzID0+XG4gICAgICBpbnRlcnZhbHMubWFwKFxuICAgICAgICAoaW50ZXJ2YWwpOiBTaW5nbGVTZWxlY3RDb21wb25lbnQuT3B0aW9uID0+ICh7XG4gICAgICAgICAgaWQ6IGludGVydmFsLFxuICAgICAgICAgIHRpdGxlOiBnZXRJbnRlcnZhbFRpdGxlKGludGVydmFsKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZEludGVydmFsT3B0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaW50ZXJ2YWwkLFxuICAgIHRoaXMuaW50ZXJ2YWxPcHRpb25zJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtpbnRlcnZhbCwgb3B0aW9uc10pID0+IHtcbiAgICAgIGNvbnN0IGFsbG93ZWRJbnRlcnZhbHMgPSBvcHRpb25zLm1hcCgoeyBpZCB9KSA9PiBpZCBhcyBJbnRlcnZhbCk7XG4gICAgICBpZiAoIWFsbG93ZWRJbnRlcnZhbHMuaW5jbHVkZXMoaW50ZXJ2YWwpKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QWxsb3dlZCA9IGFsbG93ZWRJbnRlcnZhbHMuYXQoMCk7XG4gICAgICAgIGNvbnN0IGxhc3RBbGxvd2VkID0gYWxsb3dlZEludGVydmFscy5hdCgtMSk7XG4gICAgICAgIGlmICghZmlyc3RBbGxvd2VkIHx8ICFsYXN0QWxsb3dlZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKGludGVydmFscy5pbmRleE9mKGludGVydmFsKSA8IGludGVydmFscy5pbmRleE9mKGZpcnN0QWxsb3dlZCkpXG4gICAgICAgICAgaW50ZXJ2YWwgPSBmaXJzdEFsbG93ZWQ7XG4gICAgICAgIGlmIChpbnRlcnZhbHMuaW5kZXhPZihpbnRlcnZhbCkgPiBpbnRlcnZhbHMuaW5kZXhPZihsYXN0QWxsb3dlZCkpXG4gICAgICAgICAgaW50ZXJ2YWwgPSBsYXN0QWxsb3dlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zLmZpbmQobyA9PiBvLmlkID09PSBpbnRlcnZhbCkgPz8gbnVsbDtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSW50ZXJ2YWwkID0gdGhpcy5zZWxlY3RlZEludGVydmFsT3B0aW9uJC5waXBlKFxuICAgIG1hcChvcHRpb24gPT4gKG9wdGlvbiA/IChvcHRpb24uaWQgYXMgSW50ZXJ2YWwpIDogREVGQVVMVF9JTlRFUlZBTCkpLFxuICApO1xuXG4gIHNldEludGVydmFsT3B0aW9uKG9wdGlvbjogU2luZ2xlU2VsZWN0Q29tcG9uZW50Lk9wdGlvbikge1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBvcHRpb24uaWQgYXMgSW50ZXJ2YWw7XG4gIH1cblxuICByZWFkb25seSB0b2dnbGVWaXNpYmlsaXR5JCA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxUaW1lU2VyaWVzQ29tcG9uZW50LlRvZ2dsZVZpc2liaWxpdHkgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBiaW5uZWREYXRhJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaW5wdXQkLFxuICAgIHRoaXMuc2VsZWN0ZWRJbnRlcnZhbCQsXG4gICAgdGhpcy50b2dnbGVWaXNpYmlsaXR5JCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtpbnB1dCwgaW50ZXJ2YWwsIHRvZ2dsZVZpc2liaWxpdHldKSA9PlxuICAgICAgaW5wdXQubWFwKChjb25maWcpOiBUaW1lU2VyaWVzQ29tcG9uZW50LllDb25maWcgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICBzZXJpZXM6IGNvbmZpZy5zZXJpZXMubWFwKChzZXJpZXMsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJpbm5lZCA9IG5ldyBNYXA8bnVtYmVyLCBUaW1lU2VyaWVzQ29tcG9uZW50LkRhdGFQb2ludFtdPigpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiBzZXJpZXMuZGF0YSkge1xuICAgICAgICAgICAgICBjb25zdCBiaW4gPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpLmZsb29yKHBvaW50LmRhdGUpLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgaWYgKCFiaW5uZWQuaGFzKGJpbikpIHtcbiAgICAgICAgICAgICAgICBiaW5uZWQuc2V0KGJpbiwgW10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJpbm5lZC5nZXQoYmluKSEucHVzaChwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dMZWdlbmRUb2dnbGUgJiZcbiAgICAgICAgICAgICAgdG9nZ2xlVmlzaWJpbGl0eSAmJlxuICAgICAgICAgICAgICBzZXJpZXMubGFiZWwgPT09IHRvZ2dsZVZpc2liaWxpdHkubGFiZWxcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBzZXJpZXMudmlzaWJpbGl0eSA9IHRvZ2dsZVZpc2liaWxpdHkudmlzaWJpbGl0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnNlcmllcyxcbiAgICAgICAgICAgICAgZGF0YTogWy4uLmJpbm5lZC5lbnRyaWVzKCldLm1hcCgoW2RhdGVWYWx1ZSwgcG9pbnRzXSkgPT4gKHtcbiAgICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZShkYXRlVmFsdWUpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb25maWcucG9pbnRSZWR1Y2VyKHBvaW50cywgaSksXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgYmlubmVkRGF0ZVJhbmdlJCA9IHRoaXMuYmlubmVkRGF0YSQucGlwZShcbiAgICBtYXAoZ2V0RGF0ZVJhbmdlKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IGRyYXdEYXRhJDogT2JzZXJ2YWJsZTxEcmF3RGF0YT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmJpbm5lZERhdGEkLFxuICAgIHRoaXMuYmlubmVkRGF0ZVJhbmdlJCxcbiAgICB0aGlzLnNlbGVjdGVkSW50ZXJ2YWwkLFxuICAgIHRoaXMud2lkdGgkLFxuICAgIHRoaXMueE1pbm9yVGlja0xpbWl0JCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtiaW5uZWREYXRhLCBiaW5uZWREYXRlUmFuZ2UsIGludGVydmFsLCB3aWR0aCwgeE1pbm9yVGlja0xpbWl0XSkgPT4ge1xuICAgICAgY29uc3Qgdmlld0JveCA9IGAwIDAgJHt3aWR0aH0gJHt0aGlzLkhFSUdIVH1gO1xuXG4gICAgICBjb25zdCB4U2NhbGVSYW5nZVN0YXJ0ID0gdGhpcy5MRUZUX1JJR0hUX1BBRERJTkcgKyB0aGlzLkxFRlRfUklHSFRfT0ZGU0VUO1xuICAgICAgY29uc3QgeFNjYWxlUmFuZ2VFbmQgPVxuICAgICAgICB3aWR0aCAtXG4gICAgICAgIHRoaXMuTEVGVF9SSUdIVF9QQURESU5HICogMiAtXG4gICAgICAgIChiaW5uZWREYXRhLmxlbmd0aCA+IDEgPyB0aGlzLkxFRlRfUklHSFRfT0ZGU0VUIDogMCk7XG4gICAgICBjb25zdCB4U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgIC5kb21haW4oYmlubmVkRGF0ZVJhbmdlKVxuICAgICAgICAucmFuZ2UoW3hTY2FsZVJhbmdlU3RhcnQsIHhTY2FsZVJhbmdlRW5kXSk7XG4gICAgICBjb25zdCBbbWluRGF0ZVZhbHVlLCBtYXhEYXRlVmFsdWVdID0gYmlubmVkRGF0ZVJhbmdlO1xuICAgICAgY29uc3QgaGFzTXVsdGlwbGVZZWFycyA9XG4gICAgICAgIG1pbkRhdGVWYWx1ZS5nZXRGdWxsWWVhcigpIDwgbWF4RGF0ZVZhbHVlLmdldEZ1bGxZZWFyKCk7XG4gICAgICBjb25zdCB4TWlub3JJbnRlcnZhbEZvcm1hdCA9IGdldE1pbm9ySW50ZXJ2YWxGb3JtYXQoaW50ZXJ2YWwpO1xuICAgICAgY29uc3QgbWlub3JGb3JtYXR0ZXIgPSB1dGNGb3JtYXQoeE1pbm9ySW50ZXJ2YWxGb3JtYXQpO1xuICAgICAgY29uc3QgeE1pbm9yVGlja3MgPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpXG4gICAgICAgIC5yYW5nZShtaW5EYXRlVmFsdWUsIHV0Y0RheS5vZmZzZXQobWF4RGF0ZVZhbHVlLCAxKSlcbiAgICAgICAgLm1hcChkYXRlID0+ICh7XG4gICAgICAgICAgdmFsdWU6IHV0Y0RheS5vZmZzZXQoZGF0ZSwgMSkudmFsdWVPZigpLFxuICAgICAgICAgIGxhYmVsOiBtaW5vckZvcm1hdHRlcihkYXRlKSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5maWx0ZXIoKF8sIGksIGFycikgPT5cbiAgICAgICAgICBhcnIubGVuZ3RoID4geE1pbm9yVGlja0xpbWl0XG4gICAgICAgICAgICA/IGkgJSBNYXRoLmNlaWwoYXJyLmxlbmd0aCAvIHhNaW5vclRpY2tMaW1pdCkgPT09IDBcbiAgICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgKTtcbiAgICAgIGNvbnN0IHhNYWpvckludGVydmFsID0gZ2V0TWFqb3JJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICBjb25zdCB4TWFqb3JJbnRlcnZhbEZvcm1hdCA9IGdldE1ham9ySW50ZXJ2YWxGb3JtYXQoXG4gICAgICAgIHhNYWpvckludGVydmFsLFxuICAgICAgICBoYXNNdWx0aXBsZVllYXJzLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRpbWVJbnRlcnZhbCA9IGdldFRpbWVJbnRlcnZhbCh4TWFqb3JJbnRlcnZhbCk7XG4gICAgICBjb25zdCB0aWNrRmxvb3IgPSB0aW1lSW50ZXJ2YWwuZmxvb3IobWluRGF0ZVZhbHVlKTtcbiAgICAgIGNvbnN0IHRpY2tDZWlsaW5nID0gdGltZUludGVydmFsLmNlaWwodXRjRGF5Lm9mZnNldChtYXhEYXRlVmFsdWUsIDEpKTtcbiAgICAgIGNvbnN0IG1ham9yRm9ybWF0dGVyID0gdXRjRm9ybWF0KHhNYWpvckludGVydmFsRm9ybWF0KTtcbiAgICAgIGNvbnN0IHhNYWpvclRpY2tzID0gdGltZUludGVydmFsXG4gICAgICAgIC5yYW5nZSh0aWNrRmxvb3IsIHRpY2tDZWlsaW5nKVxuICAgICAgICAubWFwKHRpY2tEYXRlID0+ICh7XG4gICAgICAgICAgbGFiZWw6IHhNYWpvckludGVydmFsID09PSBpbnRlcnZhbCA/ICcnIDogbWFqb3JGb3JtYXR0ZXIodGlja0RhdGUpLFxuICAgICAgICAgIHZhbHVlOiB0aWNrRGF0ZS52YWx1ZU9mKCksXG4gICAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHggPSB7IHhNYXg6IG1heERhdGVWYWx1ZSwgeFNjYWxlLCB4TWlub3JUaWNrcywgeE1ham9yVGlja3MgfTtcblxuICAgICAgY29uc3QgW3kxLCB5Ml0gPSBiaW5uZWREYXRhLm1hcChjb25maWcgPT4ge1xuICAgICAgICBjb25zdCB2aXNpYmxlU2VyaWVzID0gY29uZmlnLnNlcmllcy5maWx0ZXIoXG4gICAgICAgICAgcyA9PiBzLnZpc2liaWxpdHkgIT09ICdoaWRkZW4nLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBmbGF0dGVuZWRWYWx1ZXMgPSB2aXNpYmxlU2VyaWVzLnJlZHVjZTxudW1iZXJbXT4oXG4gICAgICAgICAgKHZhbHVlcywgc2VyaWVzKSA9PiBbXG4gICAgICAgICAgICAuLi52YWx1ZXMsXG4gICAgICAgICAgICAuLi5zZXJpZXMuZGF0YS5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgW10sXG4gICAgICAgICk7XG4gICAgICAgIGxldCB5TWF4ID0gY29uZmlnLm1heCA/PyBNYXRoLm1heCguLi5mbGF0dGVuZWRWYWx1ZXMsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gY29uZmlnLm1pbiA/PyBNYXRoLm1pbiguLi5mbGF0dGVuZWRWYWx1ZXMsIDApO1xuICAgICAgICAvLyBSSVZFVC0xNDYwNSAtIGlmIHJhbmdlIGlzIFswLDBdLCBtYWtlIGl0IFswLDFdIGluc3RlYWRcbiAgICAgICAgaWYgKHlNYXggPT0gMCAmJiB5TWluID09IDApIHtcbiAgICAgICAgICB5TWF4ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgICAgLmRvbWFpbihbeU1pbiwgeU1heF0pXG4gICAgICAgICAgLnJhbmdlKFtcbiAgICAgICAgICAgIHRoaXMuSEVJR0hUIC1cbiAgICAgICAgICAgICAgdGhpcy5CT1RUT01fT0ZGU0VUIC1cbiAgICAgICAgICAgICAgKHRoaXMuQk9UVE9NX1BBRERJTkcgKyB0aGlzLlRPUF9QQURESU5HKSxcbiAgICAgICAgICAgIHRoaXMuVE9QX1BBRERJTkcsXG4gICAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IHlUaWNrcyA9IHlTY2FsZS50aWNrcyh0aGlzLllfVElDS19DT1VOVCk7XG4gICAgICAgIGNvbnN0IHNlcmllcyA9IGNvbmZpZy5zZXJpZXMubWFwKHNlcmllcyA9PiAoe1xuICAgICAgICAgIC4uLnNlcmllcyxcbiAgICAgICAgICBwYXRoOiBsaW5lPFRpbWVTZXJpZXNDb21wb25lbnQuRGF0YVBvaW50PigpXG4gICAgICAgICAgICAueChkID0+IHhTY2FsZShkLmRhdGUpKVxuICAgICAgICAgICAgLnkoZCA9PiB5U2NhbGUoZC52YWx1ZSkpKHNlcmllcy5kYXRhKSxcbiAgICAgICAgICBzdHJva2U6IGB2YXIoJHtzZXJpZXMuY29sb3JUb2tlbn0pYCxcbiAgICAgICAgICBtYXJrZXJzOiBzZXJpZXMuZGF0YS5tYXAocG9pbnQgPT4gKHtcbiAgICAgICAgICAgIC4uLnBvaW50LFxuICAgICAgICAgICAgeDogeFNjYWxlKHBvaW50LmRhdGUpLFxuICAgICAgICAgICAgeTogeVNjYWxlKHBvaW50LnZhbHVlKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgc2VyaWVzLFxuICAgICAgICAgIHlNYXgsXG4gICAgICAgICAgeU1pbixcbiAgICAgICAgICB5U2NhbGUsXG4gICAgICAgICAgeVRpY2tzLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIHdlIGhhdmUgYSB5MiwgY29lcmNlIHkxJ3MgdGlja3MgdG8gYmUgdmlzdWFsbHkgZXF1aXZhbGVudCB0byB5MidzIHRpY2tzLlxuICAgICAgaWYgKHkyPy55VGlja3MpIHtcbiAgICAgICAgY29uc3QgdGlja0NvbnZlcnNpb25TY2FsZSA9IHNjYWxlTGluZWFyKClcbiAgICAgICAgICAucmFuZ2UoeTEueVNjYWxlLmRvbWFpbigpKVxuICAgICAgICAgIC5kb21haW4oeTIueVNjYWxlLmRvbWFpbigpKTtcbiAgICAgICAgeTEueVRpY2tzID0geTIueVRpY2tzLm1hcCh0aWNrQ29udmVyc2lvblNjYWxlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgdmlld0JveCwgeCwgeTEsIHkyIH07XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBsZWdlbmQkID0gdGhpcy5iaW5uZWREYXRhJC5waXBlKFxuICAgIG1hcChiaW5uZWREYXRhID0+XG4gICAgICBiaW5uZWREYXRhLnJlZHVjZTxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICAgICAgY29sb3JUb2tlbjogc3RyaW5nO1xuICAgICAgICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJyB8ICdoaWRkZW4nO1xuICAgICAgICB9W11cbiAgICAgID4oXG4gICAgICAgIChpdGVtcywgY29uZmlnKSA9PiBbXG4gICAgICAgICAgLi4uaXRlbXMsXG4gICAgICAgICAgLi4uY29uZmlnLnNlcmllcy5tYXAoc2VyaWVzID0+ICh7XG4gICAgICAgICAgICBsYWJlbDogc2VyaWVzLmxhYmVsLFxuICAgICAgICAgICAgY29sb3JUb2tlbjogc2VyaWVzLmNvbG9yVG9rZW4sXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBzZXJpZXMudmlzaWJpbGl0eSA/PyAndmlzaWJsZScsXG4gICAgICAgICAgfSkpLFxuICAgICAgICBdLFxuICAgICAgICBbXSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICByZWFkb25seSBlbXB0eSQgPSB0aGlzLmJpbm5lZERhdGEkLnBpcGUoXG4gICAgbWFwKGJpbm5lZERhdGEgPT5cbiAgICAgIGJpbm5lZERhdGEuZXZlcnkoY29uZmlnID0+XG4gICAgICAgIGNvbmZpZy5zZXJpZXMuZXZlcnkoc2VyaWVzID0+IHNlcmllcy5kYXRhLmxlbmd0aCA9PT0gMCksXG4gICAgICApLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBob3ZlcmVkTWFya2VyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xuICAgIGV2ZW50OiBNb3VzZUV2ZW50O1xuICAgIG1hcmtlcjogTWFya2VyO1xuICB9IHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgY2FsbG91dCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmhvdmVyZWRNYXJrZXIkLCB0aGlzLmRyYXdEYXRhJF0pLnBpcGUoXG4gICAgbWFwKChbaG92ZXJlZE1hcmtlciwgZHJhd0RhdGFdKSA9PiB7XG4gICAgICBpZiAoIWhvdmVyZWRNYXJrZXIpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCB7IHRhcmdldCB9ID0gaG92ZXJlZE1hcmtlci5ldmVudDtcbiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IG1hcmtlclJlY3QgPSAoPFNWR0NpcmNsZUVsZW1lbnQ+dGFyZ2V0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSA4O1xuICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgIG1hcmtlclJlY3QubGVmdCAtIHBhZGRpbmcsXG4gICAgICAgIG1hcmtlclJlY3QudG9wIC0gcGFkZGluZyxcbiAgICAgICAgbWFya2VyUmVjdC53aWR0aCArIHBhZGRpbmcgKiAyLFxuICAgICAgICBtYXJrZXJSZWN0LmhlaWdodCArIHBhZGRpbmcgKiAyLFxuICAgICAgKTtcblxuICAgICAgdHlwZSBNZXRyaWMgPSB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IGNvbG9yVG9rZW46IHN0cmluZyB9O1xuICAgICAgY29uc3QgbWV0cmljczogTWV0cmljW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBzZXJpZXMgb2YgZHJhd0RhdGEueTEuc2VyaWVzKSB7XG4gICAgICAgIGlmIChzZXJpZXMudmlzaWJpbGl0eSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IHNlcmllcy5tYXJrZXJzLmZpbmQoXG4gICAgICAgICAgICBtYXJrZXIgPT4gbWFya2VyLnggPT09IGhvdmVyZWRNYXJrZXIubWFya2VyLngsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIG1ldHJpY3MucHVzaCh7XG4gICAgICAgICAgICAgIGNvbG9yVG9rZW46IHNlcmllcy5jb2xvclRva2VuLFxuICAgICAgICAgICAgICBsYWJlbDogc2VyaWVzLmxhYmVsLFxuICAgICAgICAgICAgICB2YWx1ZTogZHJhd0RhdGEueTEudmFsdWVGb3JtYXR0ZXIobWF0Y2gudmFsdWUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkcmF3RGF0YS55Mikge1xuICAgICAgICBmb3IgKGNvbnN0IHNlcmllcyBvZiBkcmF3RGF0YS55Mi5zZXJpZXMpIHtcbiAgICAgICAgICBpZiAoc2VyaWVzLnZpc2liaWxpdHkgIT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IHNlcmllcy5tYXJrZXJzLmZpbmQoXG4gICAgICAgICAgICAgIG1hcmtlciA9PiBtYXJrZXIueCA9PT0gaG92ZXJlZE1hcmtlci5tYXJrZXIueCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgbWV0cmljcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2xvclRva2VuOiBzZXJpZXMuY29sb3JUb2tlbixcbiAgICAgICAgICAgICAgICBsYWJlbDogc2VyaWVzLmxhYmVsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBkcmF3RGF0YS55Mi52YWx1ZUZvcm1hdHRlcihtYXRjaC52YWx1ZSksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBhbmNob3IsIG1ldHJpY3MgfTtcbiAgICB9KSxcbiAgKTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUaW1lU2VyaWVzQ29tcG9uZW50IHtcbiAgZXhwb3J0IHR5cGUgU2VyaWVzID0ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgY29sb3JUb2tlbjogc3RyaW5nO1xuICAgIGRhdGE6IFRpbWVTZXJpZXNDb21wb25lbnQuRGF0YVBvaW50W107XG4gICAgc3R5bGU/OiAnc29saWQnIHwgJ2Rhc2hlZCc7XG4gICAgdmlzaWJpbGl0eT86ICd2aXNpYmxlJyB8ICdoaWRkZW4nO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIERhdGFQb2ludCA9IHtcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIGRhdGU6IERhdGU7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgWUNvbmZpZyA9IHtcbiAgICBwb2ludFJlZHVjZXI6IChwb2ludHM6IERhdGFQb2ludFtdLCBzZXJpZXNJbmRleDogbnVtYmVyKSA9PiBudW1iZXI7XG4gICAgdmFsdWVGb3JtYXR0ZXI6IChyZWR1Y2VkVmFsdWU6IG51bWJlcikgPT4gc3RyaW5nO1xuICAgIHNlcmllczogU2VyaWVzW107XG4gICAgbWluPzogbnVtYmVyO1xuICAgIG1heD86IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBUaW1lU2VyaWVzSW5wdXQgPSBbWUNvbmZpZ10gfCBbWUNvbmZpZywgWUNvbmZpZ107XG5cbiAgZXhwb3J0IHR5cGUgVG9nZ2xlVmlzaWJpbGl0eSA9IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nIHwgJ3Zpc2libGUnO1xuICB9O1xufVxuIiwiPGRpdlxuICAqbmdJZj1cIiEoZW1wdHkkIHwgYXN5bmMpOyBlbHNlIHplcm9TdGF0ZVwiXG4gIGNsYXNzPVwiY29udGFpbmVyXCJcbiAgKHJpdkNsaWVudFNpemUpPVwid2lkdGggPSAkZXZlbnQud2lkdGhcIlxuPlxuICA8c3ZnXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgKm5nSWY9XCJkcmF3RGF0YSQgfCBhc3luYzsgbGV0IGRcIlxuICAgIFthdHRyLnZpZXdCb3hdPVwiZC52aWV3Qm94XCJcbiAgPlxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueC54TWFqb3JUaWNrc1wiPlxuICAgICAgPHJlY3RcbiAgICAgICAgY2xhc3M9XCJ0aWNrXCJcbiAgICAgICAgW2F0dHIueF09XCJkLngueFNjYWxlKHRpY2sudmFsdWUpXCJcbiAgICAgICAgeT1cIjBcIlxuICAgICAgICB3aWR0aD1cIjFcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwiZC55MS55U2NhbGUoZC55MS55TWluKSArIEJPVFRPTV9PRkZTRVRcIlxuICAgICAgPjwvcmVjdD5cbiAgICAgIDx0ZXh0XG4gICAgICAgICpuZ0lmPVwiZC54LnhTY2FsZSh0aWNrLnZhbHVlKSA+PSAwXCJcbiAgICAgICAgY2xhc3M9XCJ4LW1ham9yLXRpY2stbGFiZWxcIlxuICAgICAgICBbYXR0ci54XT1cImQueC54U2NhbGUodGljay52YWx1ZSlcIlxuICAgICAgICBbYXR0ci55XT1cIkhFSUdIVCAtIEJPVFRPTV9PRkZTRVRcIlxuICAgICAgICBkeD1cIjRcIlxuICAgICAgICBkeT1cIi00XCJcbiAgICAgID5cbiAgICAgICAge3sgdGljay5sYWJlbCB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLngueE1pbm9yVGlja3NcIj5cbiAgICAgIDx0ZXh0XG4gICAgICAgIGNsYXNzPVwieC1taW5vci10aWNrLWxhYmVsXCJcbiAgICAgICAgW2F0dHIueF09XCJkLngueFNjYWxlKHRpY2sudmFsdWUpXCJcbiAgICAgICAgW2F0dHIueV09XCJIRUlHSFQgLSBCT1RUT01fT0ZGU0VUXCJcbiAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgICBkb21pbmFudC1iYXNlbGluZT1cImhhbmdpbmdcIlxuICAgICAgICBkeT1cIjhcIlxuICAgICAgPlxuICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICAgIDx0aXRsZT57eyB0aWNrLnZhbHVlIHwgZGF0ZSB9fTwvdGl0bGU+XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueTEueVRpY2tzXCI+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cInRpY2tcIlxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIFthdHRyLnldPVwiZC55MS55U2NhbGUodGljaylcIlxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICBoZWlnaHQ9XCIxXCJcbiAgICAgID48L3JlY3Q+XG4gICAgICA8dGV4dCBjbGFzcz1cInktdGljay1sYWJlbFwiIHg9XCIwXCIgW2F0dHIueV09XCJkLnkxLnlTY2FsZSh0aWNrKVwiIGR5PVwiLTRcIj5cbiAgICAgICAge3sgZC55MS52YWx1ZUZvcm1hdHRlcih0aWNrKSB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cblxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueTI/LnlUaWNrc1wiPlxuICAgICAgPHRleHRcbiAgICAgICAgY2xhc3M9XCJ5LXRpY2stbGFiZWxcIlxuICAgICAgICBbYXR0ci54XT1cIndpZHRoXCJcbiAgICAgICAgW2F0dHIueV09XCJkLnkyPy55U2NhbGUodGljaylcIlxuICAgICAgICB0ZXh0LWFuY2hvcj1cImVuZFwiXG4gICAgICAgIGR5PVwiLTRcIlxuICAgICAgPlxuICAgICAgICB7eyBkLnkyPy52YWx1ZUZvcm1hdHRlcih0aWNrKSB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cblxuICAgIDxnICpuZ0lmPVwiaG92ZXJlZE1hcmtlciQgfCBhc3luYzsgbGV0IGhvdmVyZWRNYXJrZXJcIj5cbiAgICAgIDxsaW5lXG4gICAgICAgIGNsYXNzPVwiaG92ZXItcnVsZVwiXG4gICAgICAgIFthdHRyLngxXT1cImhvdmVyZWRNYXJrZXIubWFya2VyLnhcIlxuICAgICAgICBbYXR0ci55MV09XCJkLnkxLnlTY2FsZShkLnkxLnlNaW4pXCJcbiAgICAgICAgW2F0dHIueDJdPVwiaG92ZXJlZE1hcmtlci5tYXJrZXIueFwiXG4gICAgICAgIFthdHRyLnkyXT1cImQueTEueVNjYWxlKGQueTEueU1heClcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjRcIlxuICAgICAgLz5cbiAgICA8L2c+XG5cbiAgICA8bmctdGVtcGxhdGUgI3Nlcmllc1RwbCBsZXQtc2VyaWVzPVwic2VyaWVzXCI+XG4gICAgICA8cGF0aFxuICAgICAgICAqbmdJZj1cInNlcmllcy52aXNpYmlsaXR5ICE9ICdoaWRkZW4nXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhIHBhdGhcIlxuICAgICAgICBbY2xhc3MubWFya2VyLWhvdmVyZWRdPVwiISEoaG92ZXJlZE1hcmtlciQgfCBhc3luYylcIlxuICAgICAgICBbYXR0ci5kXT1cInNlcmllcy5wYXRoXCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNlcmllcy5zdHJva2VcIlxuICAgICAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInNlcmllcy5zdHlsZSA9PT0gJ2Rhc2hlZCcgPyAnNCcgOiBudWxsXCJcbiAgICAgID48L3BhdGg+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtYXJrZXIgb2Ygc2VyaWVzLm1hcmtlcnNcIj5cbiAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICpuZ0lmPVwic2VyaWVzLnZpc2liaWxpdHkgIT0gJ2hpZGRlbidcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YSBtYXJrZXJcIlxuICAgICAgICAgIFtjbGFzcy5mb2N1c2VkXT1cIihob3ZlcmVkTWFya2VyJCB8IGFzeW5jKT8ubWFya2VyPy54ID09PSBtYXJrZXIueFwiXG4gICAgICAgICAgW2NsYXNzLmJsdXJyZWRdPVwiXG4gICAgICAgICAgICAoaG92ZXJlZE1hcmtlciQgfCBhc3luYykgIT09IG51bGwgJiZcbiAgICAgICAgICAgIChob3ZlcmVkTWFya2VyJCB8IGFzeW5jKT8ubWFya2VyPy54ICE9PSBtYXJrZXIueFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F0dHIuY3hdPVwibWFya2VyLnhcIlxuICAgICAgICAgIFthdHRyLmN5XT1cIm1hcmtlci55XCJcbiAgICAgICAgICBbYXR0ci5yXT1cIlBPSU5UX1JBRElVU1wiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNlcmllcy5zdHJva2VcIlxuICAgICAgICAgIChtb3VzZW92ZXIpPVwiaG92ZXJlZE1hcmtlciQubmV4dCh7IGV2ZW50OiAkZXZlbnQsIG1hcmtlcjogbWFya2VyIH0pXCJcbiAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkTWFya2VyJC5uZXh0KG51bGwpXCJcbiAgICAgICAgPjwvY2lyY2xlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgc2VyaWVzIG9mIGQueTEuc2VyaWVzXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VyaWVzVHBsOyBjb250ZXh0OiB7IHNlcmllczogc2VyaWVzIH1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgc2VyaWVzIG9mIGQueTI/LnNlcmllc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNlcmllc1RwbDsgY29udGV4dDogeyBzZXJpZXM6IHNlcmllcyB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2c+XG4gIDwvc3ZnPlxuICA8bGVnZW5kPlxuICAgIDxyaXYtbGVnZW5kLWl0ZW1cbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxlZ2VuZCQgfCBhc3luY1wiXG4gICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiXG4gICAgICBbY29sb3JUb2tlbl09XCJpdGVtLmNvbG9yVG9rZW5cIlxuICAgICAgW3Zpc2liaWxpdHldPVwiaXRlbS52aXNpYmlsaXR5XCJcbiAgICAgIFtjbGlja2FibGVdPVwiYWxsb3dMZWdlbmRUb2dnbGVcIlxuICAgICAgKGl0ZW1DbGljayk9XCJcbiAgICAgICAgYWxsb3dMZWdlbmRUb2dnbGVcbiAgICAgICAgICA/IHRvZ2dsZVZpc2liaWxpdHkkLm5leHQoe1xuICAgICAgICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgICAgICAgdmlzaWJpbGl0eTogaXRlbS52aXNpYmlsaXR5ID09ICdoaWRkZW4nID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgICBcIlxuICAgID48L3Jpdi1sZWdlbmQtaXRlbT5cbiAgPC9sZWdlbmQ+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbGxvdXQkIHwgYXN5bmM7IGxldCBjYWxsb3V0XCI+XG4gIDxyaXYtY2FsbG91dFxuICAgICpyaXYtY2FsbG91dFxuICAgIFthbmNob3JdPVwiY2FsbG91dC5hbmNob3JcIlxuICAgIFtpc01vZGFsXT1cImZhbHNlXCJcbiAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2NlbnRlci1yaWdodCdcIlxuICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjYWxsb3V0LWNvbnRlbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxsb3V0LXJvd1wiICpuZ0Zvcj1cImxldCBtZXRyaWMgb2YgY2FsbG91dC5tZXRyaWNzXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2VyaWVzLWxhYmVsXCI+XG4gICAgICAgICAgPHJpdi1sZWdlbmQtaXRlbSBbY29sb3JUb2tlbl09XCJtZXRyaWMuY29sb3JUb2tlblwiPjwvcml2LWxlZ2VuZC1pdGVtPlxuICAgICAgICAgIDxzcGFuPnt7IG1ldHJpYy5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBtZXRyaWMudmFsdWUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3plcm9TdGF0ZT5cbiAgPHJpdi16ZXJvLXN0YXRlIFttZXNzYWdlXT1cInplcm9TdGF0ZU1lc3NhZ2VcIj48L3Jpdi16ZXJvLXN0YXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250cm9scz5cbiAgPHJpdi1zaW5nbGUtc2VsZWN0XG4gICAgW2dyb3Vwc109XCJpbnRlcnZhbE9wdGlvbnMkIHwgYXN5bmMgfCByaXZPcHRpb25Hcm91cFwiXG4gICAgW3NlbGVjdGVkT3B0aW9uXT1cInNlbGVjdGVkSW50ZXJ2YWxPcHRpb24kIHwgYXN5bmNcIlxuICAgIChzZWxlY3RlZE9wdGlvbkNoYW5nZSk9XCJzZXRJbnRlcnZhbE9wdGlvbigkZXZlbnQpXCJcbiAgPjwvcml2LXNpbmdsZS1zZWxlY3Q+XG48L25nLXRlbXBsYXRlPlxuIl19
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1zZXJpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi90aW1lLXNlcmllcy90aW1lLXNlcmllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL3RpbWUtc2VyaWVzL3RpbWUtc2VyaWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxlQUFlLEVBRWYsYUFBYSxFQUNiLEdBQUcsRUFDSCxXQUFXLEdBQ1osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFNUQsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixlQUFlLEVBQ2YsU0FBUyxHQUNWLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBb0IsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7QUFFdkUsTUFBTSxnQkFBZ0IsR0FBYSxLQUFLLENBQUM7QUFFekMsNkVBQTZFO0FBQzdFLCtDQUErQztBQU8vQyxNQUFNLE9BQU8sbUJBQW1CO0lBTmhDO1FBT21CLFdBQU0sR0FDckIsSUFB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T0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQWdCRCxJQUNXLFFBQVEsQ0FBQyxDQUFXO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFNRCxJQUNXLGlCQUFpQixDQUFDLENBQVU7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQTZFRCxpQkFBaUIsQ0FBQyxNQUFvQztRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxFQUFjLENBQUM7SUFDeEMsQ0FBQzs7Z0hBdEpVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLDZSQ3pDaEMsdW9LQTBLQTsyRkRqSWEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzhCQWFwQyxLQUFLO3NCQURmLEtBQUs7Z0JBc0JLLGdCQUFnQjtzQkFEMUIsS0FBSztnQkF1QkssUUFBUTtzQkFEbEIsS0FBSztnQkFTVSxRQUFRO3NCQUR2QixTQUFTO3VCQUFDLFVBQVU7Z0JBS1YsaUJBQWlCO3NCQUQzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2NhbGVMaW5lYXIgfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQgeyBsaW5lIH0gZnJvbSAnZDMtc2hhcGUnO1xuaW1wb3J0IHsgdXRjRGF5IH0gZnJvbSAnZDMtdGltZSc7XG5pbXBvcnQgeyB1dGNGb3JtYXQgfSBmcm9tICdkMy10aW1lLWZvcm1hdCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTnVtYmVyUGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9udW1iZXIucGlwZSc7XG5pbXBvcnQgeyBTaW5nbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC9zaW5nbGUtc2VsZWN0L3NpbmdsZS1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEludGVydmFsLFxuICBnZXRJbnRlcnZhbFRpdGxlLFxuICBnZXRNYWpvckludGVydmFsLFxuICBnZXRNYWpvckludGVydmFsRm9ybWF0LFxuICBnZXRNaW5vckludGVydmFsRm9ybWF0LFxuICBnZXRUaW1lSW50ZXJ2YWwsXG4gIGludGVydmFscyxcbn0gZnJvbSAnLi4vaW50ZXJ2YWxzJztcbmltcG9ydCB7IERyYXdEYXRhLCBNYXJrZXIsIGdldERhdGVSYW5nZSB9IGZyb20gJy4vdGltZS1zZXJpZXMuaGVscGVycyc7XG5cbmNvbnN0IERFRkFVTFRfSU5URVJWQUw6IEludGVydmFsID0gJ2RheSc7XG5cbi8vIFRPRE86IG9uY2Ugd2UgdXBncmFkZSB0byBBbmd1bGFyIDE2LCB0aGlzIGNvbXBvbmVudCBjYW4gYmUgY2xlYW5lZCB1cCB3aXRoXG4vLyBzaWduYWxzIGluc3RlYWQgb2YgUnhKUy4gU2VlIGNvbW1pdCBlMjM4YzJkLlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXRpbWUtc2VyaWVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWUtc2VyaWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGltZS1zZXJpZXMuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGltZVNlcmllc0NvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5wdXQkID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PFRpbWVTZXJpZXNDb21wb25lbnQuVGltZVNlcmllc0lucHV0PihbXG4gICAgICB7XG4gICAgICAgIHBvaW50UmVkdWNlcjogcG9pbnRzID0+XG4gICAgICAgICAgcG9pbnRzLnJlZHVjZSgodG90YWwsIHsgdmFsdWUgfSkgPT4gdG90YWwgKyB2YWx1ZSwgMCksXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiB2ID0+IG5ldyBOdW1iZXJQaXBlKCkudHJhbnNmb3JtKHYpID8/ICcnLFxuICAgICAgICBzZXJpZXM6IFtdLFxuICAgICAgfSxcbiAgICBdKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpbnB1dCh2OiBUaW1lU2VyaWVzQ29tcG9uZW50LlRpbWVTZXJpZXNJbnB1dCkge1xuICAgIHRoaXMuaW5wdXQkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBpbnB1dCgpOiBUaW1lU2VyaWVzQ29tcG9uZW50LlRpbWVTZXJpZXNJbnB1dCB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHdpZHRoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIHNldCB3aWR0aCh2OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoJC5uZXh0KHYpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgd2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMud2lkdGgkLmdldFZhbHVlKCk7XG4gIH1cblxuICByZWFkb25seSBIRUlHSFQgPSAzMDA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB6ZXJvU3RhdGVNZXNzYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcbiAgICAnTm8gZGF0YSB0byBkaXNwbGF5LicsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgemVyb1N0YXRlTWVzc2FnZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLnplcm9TdGF0ZU1lc3NhZ2UkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCB6ZXJvU3RhdGVNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuemVyb1N0YXRlTWVzc2FnZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHJlYWRvbmx5IEJPVFRPTV9PRkZTRVQgPSAyNDtcbiAgcmVhZG9ubHkgTEVGVF9SSUdIVF9PRkZTRVQgPSA0ODtcbiAgcmVhZG9ubHkgVE9QX1BBRERJTkcgPSAxNjtcbiAgcmVhZG9ubHkgTEVGVF9SSUdIVF9QQURESU5HID0gODtcbiAgcmVhZG9ubHkgQk9UVE9NX1BBRERJTkcgPSA4O1xuICByZWFkb25seSBZX1RJQ0tfQ09VTlQgPSA1O1xuICByZWFkb25seSBQT0lOVF9SQURJVVMgPSAzLjU7XG5cbiAgcmVhZG9ubHkgZGF0ZVJhbmdlJCA9IHRoaXMuaW5wdXQkLnBpcGUoXG4gICAgbWFwKGdldERhdGVSYW5nZSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGludGVydmFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SW50ZXJ2YWw+KERFRkFVTFRfSU5URVJWQUwpO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGludGVydmFsKHY6IEludGVydmFsKSB7XG4gICAgdGhpcy5pbnRlcnZhbCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGludGVydmFsKCkge1xuICAgIHJldHVybiB0aGlzLmludGVydmFsJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnY29udHJvbHMnKVxuICBwdWJsaWMgcmVhZG9ubHkgY29udHJvbHM/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dMZWdlbmRUb2dnbGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYWxsb3dMZWdlbmRUb2dnbGUodjogYm9vbGVhbikge1xuICAgIHRoaXMuYWxsb3dMZWdlbmRUb2dnbGUkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBhbGxvd0xlZ2VuZFRvZ2dsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd0xlZ2VuZFRvZ2dsZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4UG9pbnRzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2lkdGgkLCB0aGlzLmlucHV0JF0pLnBpcGUoXG4gICAgbWFwKChbd2lkdGgsIGlucHV0XSkgPT4ge1xuICAgICAgY29uc3QgaW5uZXJXaWR0aCA9IHdpZHRoIC0gdGhpcy5MRUZUX1JJR0hUX09GRlNFVCAqIGlucHV0Lmxlbmd0aDtcbiAgICAgIGNvbnN0IHBvaW50V2l0aFBhZGRpbmcgPSAodGhpcy5QT0lOVF9SQURJVVMgKyA0KSAqIDI7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihpbm5lcldpZHRoIC8gcG9pbnRXaXRoUGFkZGluZyk7XG4gICAgfSksXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgeE1pbm9yVGlja0xpbWl0JCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMud2lkdGgkLFxuICAgIHRoaXMuaW5wdXQkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW3dpZHRoLCBpbnB1dF0pID0+IHtcbiAgICAgIGNvbnN0IGlubmVyV2lkdGggPSB3aWR0aCAtIHRoaXMuTEVGVF9SSUdIVF9PRkZTRVQgKiBpbnB1dC5sZW5ndGg7XG4gICAgICBjb25zdCBtaW5TaXplUGVyVGljayA9IDQwO1xuICAgICAgcmV0dXJuIE1hdGgucm91bmQoaW5uZXJXaWR0aCAvIG1pblNpemVQZXJUaWNrKTtcbiAgICB9KSxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFsbG93ZWRJbnRlcnZhbHMkOiBPYnNlcnZhYmxlPEludGVydmFsW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5pbnB1dCQsXG4gICAgdGhpcy5tYXhQb2ludHMkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2lucHV0LCBtYXhQb2ludHNdKSA9PiB7XG4gICAgICBjb25zdCBbbWluRGF0ZVZhbHVlLCBtYXhEYXRlVmFsdWVdID0gZ2V0RGF0ZVJhbmdlKGlucHV0KTtcblxuICAgICAgcmV0dXJuIGludGVydmFscy5maWx0ZXIoaW50ZXJ2YWwgPT4ge1xuICAgICAgICBjb25zdCB0aW1lSW50ZXJ2YWwgPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICBjb25zdCBudW1TdGVwcyA9IHRpbWVJbnRlcnZhbC5yYW5nZShcbiAgICAgICAgICB0aW1lSW50ZXJ2YWwuZmxvb3IobWluRGF0ZVZhbHVlKSxcbiAgICAgICAgICB0aW1lSW50ZXJ2YWwuY2VpbCh1dGNEYXkub2Zmc2V0KG1heERhdGVWYWx1ZSwgMSkpLFxuICAgICAgICApLmxlbmd0aDtcblxuICAgICAgICByZXR1cm4gbnVtU3RlcHMgPD0gbWF4UG9pbnRzICYmIG51bVN0ZXBzID4gMTtcbiAgICAgIH0pO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgaW50ZXJ2YWxPcHRpb25zJCA9IHRoaXMuYWxsb3dlZEludGVydmFscyQucGlwZShcbiAgICBtYXAoaW50ZXJ2YWxzID0+XG4gICAgICBpbnRlcnZhbHMubWFwKFxuICAgICAgICAoaW50ZXJ2YWwpOiBTaW5nbGVTZWxlY3RDb21wb25lbnQuT3B0aW9uID0+ICh7XG4gICAgICAgICAgaWQ6IGludGVydmFsLFxuICAgICAgICAgIHRpdGxlOiBnZXRJbnRlcnZhbFRpdGxlKGludGVydmFsKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZEludGVydmFsT3B0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaW50ZXJ2YWwkLFxuICAgIHRoaXMuaW50ZXJ2YWxPcHRpb25zJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtpbnRlcnZhbCwgb3B0aW9uc10pID0+IHtcbiAgICAgIGNvbnN0IGFsbG93ZWRJbnRlcnZhbHMgPSBvcHRpb25zLm1hcCgoeyBpZCB9KSA9PiBpZCBhcyBJbnRlcnZhbCk7XG4gICAgICBpZiAoIWFsbG93ZWRJbnRlcnZhbHMuaW5jbHVkZXMoaW50ZXJ2YWwpKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QWxsb3dlZCA9IGFsbG93ZWRJbnRlcnZhbHMuYXQoMCk7XG4gICAgICAgIGNvbnN0IGxhc3RBbGxvd2VkID0gYWxsb3dlZEludGVydmFscy5hdCgtMSk7XG4gICAgICAgIGlmICghZmlyc3RBbGxvd2VkIHx8ICFsYXN0QWxsb3dlZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKGludGVydmFscy5pbmRleE9mKGludGVydmFsKSA8IGludGVydmFscy5pbmRleE9mKGZpcnN0QWxsb3dlZCkpXG4gICAgICAgICAgaW50ZXJ2YWwgPSBmaXJzdEFsbG93ZWQ7XG4gICAgICAgIGlmIChpbnRlcnZhbHMuaW5kZXhPZihpbnRlcnZhbCkgPiBpbnRlcnZhbHMuaW5kZXhPZihsYXN0QWxsb3dlZCkpXG4gICAgICAgICAgaW50ZXJ2YWwgPSBsYXN0QWxsb3dlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zLmZpbmQobyA9PiBvLmlkID09PSBpbnRlcnZhbCkgPz8gbnVsbDtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSW50ZXJ2YWwkID0gdGhpcy5zZWxlY3RlZEludGVydmFsT3B0aW9uJC5waXBlKFxuICAgIG1hcChvcHRpb24gPT4gKG9wdGlvbiA/IChvcHRpb24uaWQgYXMgSW50ZXJ2YWwpIDogREVGQVVMVF9JTlRFUlZBTCkpLFxuICApO1xuXG4gIHNldEludGVydmFsT3B0aW9uKG9wdGlvbjogU2luZ2xlU2VsZWN0Q29tcG9uZW50Lk9wdGlvbikge1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBvcHRpb24uaWQgYXMgSW50ZXJ2YWw7XG4gIH1cblxuICByZWFkb25seSB0b2dnbGVWaXNpYmlsaXR5JCA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxUaW1lU2VyaWVzQ29tcG9uZW50LlRvZ2dsZVZpc2liaWxpdHkgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBiaW5uZWREYXRhJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaW5wdXQkLFxuICAgIHRoaXMuc2VsZWN0ZWRJbnRlcnZhbCQsXG4gICAgdGhpcy50b2dnbGVWaXNpYmlsaXR5JCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtpbnB1dCwgaW50ZXJ2YWwsIHRvZ2dsZVZpc2liaWxpdHldKSA9PlxuICAgICAgaW5wdXQubWFwKChjb25maWcpOiBUaW1lU2VyaWVzQ29tcG9uZW50LllDb25maWcgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICBzZXJpZXM6IGNvbmZpZy5zZXJpZXMubWFwKChzZXJpZXMsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJpbm5lZCA9IG5ldyBNYXA8bnVtYmVyLCBUaW1lU2VyaWVzQ29tcG9uZW50LkRhdGFQb2ludFtdPigpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiBzZXJpZXMuZGF0YSkge1xuICAgICAgICAgICAgICBjb25zdCBiaW4gPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpLmZsb29yKHBvaW50LmRhdGUpLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgaWYgKCFiaW5uZWQuaGFzKGJpbikpIHtcbiAgICAgICAgICAgICAgICBiaW5uZWQuc2V0KGJpbiwgW10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJpbm5lZC5nZXQoYmluKSEucHVzaChwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dMZWdlbmRUb2dnbGUgJiZcbiAgICAgICAgICAgICAgdG9nZ2xlVmlzaWJpbGl0eSAmJlxuICAgICAgICAgICAgICBzZXJpZXMubGFiZWwgPT09IHRvZ2dsZVZpc2liaWxpdHkubGFiZWxcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBzZXJpZXMudmlzaWJpbGl0eSA9IHRvZ2dsZVZpc2liaWxpdHkudmlzaWJpbGl0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnNlcmllcyxcbiAgICAgICAgICAgICAgZGF0YTogWy4uLmJpbm5lZC5lbnRyaWVzKCldLm1hcCgoW2RhdGVWYWx1ZSwgcG9pbnRzXSkgPT4gKHtcbiAgICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZShkYXRlVmFsdWUpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb25maWcucG9pbnRSZWR1Y2VyKHBvaW50cywgaSksXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgYmlubmVkRGF0ZVJhbmdlJCA9IHRoaXMuYmlubmVkRGF0YSQucGlwZShcbiAgICBtYXAoZ2V0RGF0ZVJhbmdlKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IGRyYXdEYXRhJDogT2JzZXJ2YWJsZTxEcmF3RGF0YT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmJpbm5lZERhdGEkLFxuICAgIHRoaXMuYmlubmVkRGF0ZVJhbmdlJCxcbiAgICB0aGlzLnNlbGVjdGVkSW50ZXJ2YWwkLFxuICAgIHRoaXMud2lkdGgkLFxuICAgIHRoaXMueE1pbm9yVGlja0xpbWl0JCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtiaW5uZWREYXRhLCBiaW5uZWREYXRlUmFuZ2UsIGludGVydmFsLCB3aWR0aCwgeE1pbm9yVGlja0xpbWl0XSkgPT4ge1xuICAgICAgY29uc3Qgdmlld0JveCA9IGAwIDAgJHt3aWR0aH0gJHt0aGlzLkhFSUdIVH1gO1xuXG4gICAgICBjb25zdCB4U2NhbGVSYW5nZVN0YXJ0ID0gdGhpcy5MRUZUX1JJR0hUX1BBRERJTkcgKyB0aGlzLkxFRlRfUklHSFRfT0ZGU0VUO1xuICAgICAgY29uc3QgeFNjYWxlUmFuZ2VFbmQgPVxuICAgICAgICB3aWR0aCAtXG4gICAgICAgIHRoaXMuTEVGVF9SSUdIVF9QQURESU5HICogMiAtXG4gICAgICAgIChiaW5uZWREYXRhLmxlbmd0aCA+IDEgPyB0aGlzLkxFRlRfUklHSFRfT0ZGU0VUIDogMCk7XG4gICAgICBjb25zdCB4U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgIC5kb21haW4oYmlubmVkRGF0ZVJhbmdlKVxuICAgICAgICAucmFuZ2UoW3hTY2FsZVJhbmdlU3RhcnQsIHhTY2FsZVJhbmdlRW5kXSk7XG4gICAgICBjb25zdCBbbWluRGF0ZVZhbHVlLCBtYXhEYXRlVmFsdWVdID0gYmlubmVkRGF0ZVJhbmdlO1xuICAgICAgY29uc3QgaGFzTXVsdGlwbGVZZWFycyA9XG4gICAgICAgIG1pbkRhdGVWYWx1ZS5nZXRGdWxsWWVhcigpIDwgbWF4RGF0ZVZhbHVlLmdldEZ1bGxZZWFyKCk7XG4gICAgICBjb25zdCB4TWlub3JJbnRlcnZhbEZvcm1hdCA9IGdldE1pbm9ySW50ZXJ2YWxGb3JtYXQoaW50ZXJ2YWwpO1xuICAgICAgY29uc3QgbWlub3JGb3JtYXR0ZXIgPSB1dGNGb3JtYXQoeE1pbm9ySW50ZXJ2YWxGb3JtYXQpO1xuICAgICAgY29uc3QgeE1pbm9yVGlja3MgPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpXG4gICAgICAgIC5yYW5nZShtaW5EYXRlVmFsdWUsIHV0Y0RheS5vZmZzZXQobWF4RGF0ZVZhbHVlLCAxKSlcbiAgICAgICAgLm1hcChkYXRlID0+ICh7XG4gICAgICAgICAgdmFsdWU6IHV0Y0RheS5vZmZzZXQoZGF0ZSwgMCkudmFsdWVPZigpLFxuICAgICAgICAgIGxhYmVsOiBtaW5vckZvcm1hdHRlcihkYXRlKSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5maWx0ZXIoKF8sIGksIGFycikgPT5cbiAgICAgICAgICBhcnIubGVuZ3RoID4geE1pbm9yVGlja0xpbWl0XG4gICAgICAgICAgICA/IGkgJSBNYXRoLmNlaWwoYXJyLmxlbmd0aCAvIHhNaW5vclRpY2tMaW1pdCkgPT09IDBcbiAgICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgKTtcbiAgICAgIGNvbnN0IHhNYWpvckludGVydmFsID0gZ2V0TWFqb3JJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICBjb25zdCB4TWFqb3JJbnRlcnZhbEZvcm1hdCA9IGdldE1ham9ySW50ZXJ2YWxGb3JtYXQoXG4gICAgICAgIHhNYWpvckludGVydmFsLFxuICAgICAgICBoYXNNdWx0aXBsZVllYXJzLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRpbWVJbnRlcnZhbCA9IGdldFRpbWVJbnRlcnZhbCh4TWFqb3JJbnRlcnZhbCk7XG4gICAgICBjb25zdCB0aWNrRmxvb3IgPSB0aW1lSW50ZXJ2YWwuZmxvb3IobWluRGF0ZVZhbHVlKTtcbiAgICAgIGNvbnN0IHRpY2tDZWlsaW5nID0gdGltZUludGVydmFsLmNlaWwodXRjRGF5Lm9mZnNldChtYXhEYXRlVmFsdWUsIDEpKTtcbiAgICAgIGNvbnN0IG1ham9yRm9ybWF0dGVyID0gdXRjRm9ybWF0KHhNYWpvckludGVydmFsRm9ybWF0KTtcbiAgICAgIGNvbnN0IHhNYWpvclRpY2tzID0gdGltZUludGVydmFsXG4gICAgICAgIC5yYW5nZSh0aWNrRmxvb3IsIHRpY2tDZWlsaW5nKVxuICAgICAgICAubWFwKHRpY2tEYXRlID0+ICh7XG4gICAgICAgICAgbGFiZWw6IHhNYWpvckludGVydmFsID09PSBpbnRlcnZhbCA/ICcnIDogbWFqb3JGb3JtYXR0ZXIodGlja0RhdGUpLFxuICAgICAgICAgIHZhbHVlOiB0aWNrRGF0ZS52YWx1ZU9mKCksXG4gICAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHggPSB7IHhNYXg6IG1heERhdGVWYWx1ZSwgeFNjYWxlLCB4TWlub3JUaWNrcywgeE1ham9yVGlja3MgfTtcblxuICAgICAgY29uc3QgW3kxLCB5Ml0gPSBiaW5uZWREYXRhLm1hcChjb25maWcgPT4ge1xuICAgICAgICBjb25zdCB2aXNpYmxlU2VyaWVzID0gY29uZmlnLnNlcmllcy5maWx0ZXIoXG4gICAgICAgICAgcyA9PiBzLnZpc2liaWxpdHkgIT09ICdoaWRkZW4nLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBmbGF0dGVuZWRWYWx1ZXMgPSB2aXNpYmxlU2VyaWVzLnJlZHVjZTxudW1iZXJbXT4oXG4gICAgICAgICAgKHZhbHVlcywgc2VyaWVzKSA9PiBbXG4gICAgICAgICAgICAuLi52YWx1ZXMsXG4gICAgICAgICAgICAuLi5zZXJpZXMuZGF0YS5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgW10sXG4gICAgICAgICk7XG4gICAgICAgIGxldCB5TWF4ID0gY29uZmlnLm1heCA/PyBNYXRoLm1heCguLi5mbGF0dGVuZWRWYWx1ZXMsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gY29uZmlnLm1pbiA/PyBNYXRoLm1pbiguLi5mbGF0dGVuZWRWYWx1ZXMsIDApO1xuICAgICAgICAvLyBSSVZFVC0xNDYwNSAtIGlmIHJhbmdlIGlzIFswLDBdLCBtYWtlIGl0IFswLDFdIGluc3RlYWRcbiAgICAgICAgaWYgKHlNYXggPT0gMCAmJiB5TWluID09IDApIHtcbiAgICAgICAgICB5TWF4ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgICAgLmRvbWFpbihbeU1pbiwgeU1heF0pXG4gICAgICAgICAgLnJhbmdlKFtcbiAgICAgICAgICAgIHRoaXMuSEVJR0hUIC1cbiAgICAgICAgICAgICAgdGhpcy5CT1RUT01fT0ZGU0VUIC1cbiAgICAgICAgICAgICAgKHRoaXMuQk9UVE9NX1BBRERJTkcgKyB0aGlzLlRPUF9QQURESU5HKSxcbiAgICAgICAgICAgIHRoaXMuVE9QX1BBRERJTkcsXG4gICAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IHlUaWNrcyA9IHlTY2FsZS50aWNrcyh0aGlzLllfVElDS19DT1VOVCk7XG4gICAgICAgIGNvbnN0IHNlcmllcyA9IGNvbmZpZy5zZXJpZXMubWFwKHNlcmllcyA9PiAoe1xuICAgICAgICAgIC4uLnNlcmllcyxcbiAgICAgICAgICBwYXRoOiBsaW5lPFRpbWVTZXJpZXNDb21wb25lbnQuRGF0YVBvaW50PigpXG4gICAgICAgICAgICAueChkID0+IHhTY2FsZShkLmRhdGUpKVxuICAgICAgICAgICAgLnkoZCA9PiB5U2NhbGUoZC52YWx1ZSkpKHNlcmllcy5kYXRhKSxcbiAgICAgICAgICBzdHJva2U6IGB2YXIoJHtzZXJpZXMuY29sb3JUb2tlbn0pYCxcbiAgICAgICAgICBtYXJrZXJzOiBzZXJpZXMuZGF0YS5tYXAocG9pbnQgPT4gKHtcbiAgICAgICAgICAgIC4uLnBvaW50LFxuICAgICAgICAgICAgeDogeFNjYWxlKHBvaW50LmRhdGUpLFxuICAgICAgICAgICAgeTogeVNjYWxlKHBvaW50LnZhbHVlKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgc2VyaWVzLFxuICAgICAgICAgIHlNYXgsXG4gICAgICAgICAgeU1pbixcbiAgICAgICAgICB5U2NhbGUsXG4gICAgICAgICAgeVRpY2tzLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIHdlIGhhdmUgYSB5MiwgY29lcmNlIHkxJ3MgdGlja3MgdG8gYmUgdmlzdWFsbHkgZXF1aXZhbGVudCB0byB5MidzIHRpY2tzLlxuICAgICAgaWYgKHkyPy55VGlja3MpIHtcbiAgICAgICAgY29uc3QgdGlja0NvbnZlcnNpb25TY2FsZSA9IHNjYWxlTGluZWFyKClcbiAgICAgICAgICAucmFuZ2UoeTEueVNjYWxlLmRvbWFpbigpKVxuICAgICAgICAgIC5kb21haW4oeTIueVNjYWxlLmRvbWFpbigpKTtcbiAgICAgICAgeTEueVRpY2tzID0geTIueVRpY2tzLm1hcCh0aWNrQ29udmVyc2lvblNjYWxlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgdmlld0JveCwgeCwgeTEsIHkyIH07XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBsZWdlbmQkID0gdGhpcy5iaW5uZWREYXRhJC5waXBlKFxuICAgIG1hcChiaW5uZWREYXRhID0+XG4gICAgICBiaW5uZWREYXRhLnJlZHVjZTxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICAgICAgY29sb3JUb2tlbjogc3RyaW5nO1xuICAgICAgICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJyB8ICdoaWRkZW4nO1xuICAgICAgICB9W11cbiAgICAgID4oXG4gICAgICAgIChpdGVtcywgY29uZmlnKSA9PiBbXG4gICAgICAgICAgLi4uaXRlbXMsXG4gICAgICAgICAgLi4uY29uZmlnLnNlcmllcy5tYXAoc2VyaWVzID0+ICh7XG4gICAgICAgICAgICBsYWJlbDogc2VyaWVzLmxhYmVsLFxuICAgICAgICAgICAgY29sb3JUb2tlbjogc2VyaWVzLmNvbG9yVG9rZW4sXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBzZXJpZXMudmlzaWJpbGl0eSA/PyAndmlzaWJsZScsXG4gICAgICAgICAgfSkpLFxuICAgICAgICBdLFxuICAgICAgICBbXSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICByZWFkb25seSBlbXB0eSQgPSB0aGlzLmJpbm5lZERhdGEkLnBpcGUoXG4gICAgbWFwKGJpbm5lZERhdGEgPT5cbiAgICAgIGJpbm5lZERhdGEuZXZlcnkoY29uZmlnID0+XG4gICAgICAgIGNvbmZpZy5zZXJpZXMuZXZlcnkoc2VyaWVzID0+IHNlcmllcy5kYXRhLmxlbmd0aCA9PT0gMCksXG4gICAgICApLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBob3ZlcmVkTWFya2VyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xuICAgIGV2ZW50OiBNb3VzZUV2ZW50O1xuICAgIG1hcmtlcjogTWFya2VyO1xuICB9IHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgY2FsbG91dCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmhvdmVyZWRNYXJrZXIkLCB0aGlzLmRyYXdEYXRhJF0pLnBpcGUoXG4gICAgbWFwKChbaG92ZXJlZE1hcmtlciwgZHJhd0RhdGFdKSA9PiB7XG4gICAgICBpZiAoIWhvdmVyZWRNYXJrZXIpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCB7IHRhcmdldCB9ID0gaG92ZXJlZE1hcmtlci5ldmVudDtcbiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IG1hcmtlclJlY3QgPSAoPFNWR0NpcmNsZUVsZW1lbnQ+dGFyZ2V0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSA4O1xuICAgICAgY29uc3QgYW5jaG9yID0gbmV3IERPTVJlY3QoXG4gICAgICAgIG1hcmtlclJlY3QubGVmdCAtIHBhZGRpbmcsXG4gICAgICAgIG1hcmtlclJlY3QudG9wIC0gcGFkZGluZyxcbiAgICAgICAgbWFya2VyUmVjdC53aWR0aCArIHBhZGRpbmcgKiAyLFxuICAgICAgICBtYXJrZXJSZWN0LmhlaWdodCArIHBhZGRpbmcgKiAyLFxuICAgICAgKTtcblxuICAgICAgdHlwZSBNZXRyaWMgPSB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IGNvbG9yVG9rZW46IHN0cmluZyB9O1xuICAgICAgY29uc3QgbWV0cmljczogTWV0cmljW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBzZXJpZXMgb2YgZHJhd0RhdGEueTEuc2VyaWVzKSB7XG4gICAgICAgIGlmIChzZXJpZXMudmlzaWJpbGl0eSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IHNlcmllcy5tYXJrZXJzLmZpbmQoXG4gICAgICAgICAgICBtYXJrZXIgPT4gbWFya2VyLnggPT09IGhvdmVyZWRNYXJrZXIubWFya2VyLngsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIG1ldHJpY3MucHVzaCh7XG4gICAgICAgICAgICAgIGNvbG9yVG9rZW46IHNlcmllcy5jb2xvclRva2VuLFxuICAgICAgICAgICAgICBsYWJlbDogc2VyaWVzLmxhYmVsLFxuICAgICAgICAgICAgICB2YWx1ZTogZHJhd0RhdGEueTEudmFsdWVGb3JtYXR0ZXIobWF0Y2gudmFsdWUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkcmF3RGF0YS55Mikge1xuICAgICAgICBmb3IgKGNvbnN0IHNlcmllcyBvZiBkcmF3RGF0YS55Mi5zZXJpZXMpIHtcbiAgICAgICAgICBpZiAoc2VyaWVzLnZpc2liaWxpdHkgIT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IHNlcmllcy5tYXJrZXJzLmZpbmQoXG4gICAgICAgICAgICAgIG1hcmtlciA9PiBtYXJrZXIueCA9PT0gaG92ZXJlZE1hcmtlci5tYXJrZXIueCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgbWV0cmljcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2xvclRva2VuOiBzZXJpZXMuY29sb3JUb2tlbixcbiAgICAgICAgICAgICAgICBsYWJlbDogc2VyaWVzLmxhYmVsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBkcmF3RGF0YS55Mi52YWx1ZUZvcm1hdHRlcihtYXRjaC52YWx1ZSksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBhbmNob3IsIG1ldHJpY3MgfTtcbiAgICB9KSxcbiAgKTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBUaW1lU2VyaWVzQ29tcG9uZW50IHtcbiAgZXhwb3J0IHR5cGUgU2VyaWVzID0ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgY29sb3JUb2tlbjogc3RyaW5nO1xuICAgIGRhdGE6IFRpbWVTZXJpZXNDb21wb25lbnQuRGF0YVBvaW50W107XG4gICAgc3R5bGU/OiAnc29saWQnIHwgJ2Rhc2hlZCc7XG4gICAgdmlzaWJpbGl0eT86ICd2aXNpYmxlJyB8ICdoaWRkZW4nO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIERhdGFQb2ludCA9IHtcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIGRhdGU6IERhdGU7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgWUNvbmZpZyA9IHtcbiAgICBwb2ludFJlZHVjZXI6IChwb2ludHM6IERhdGFQb2ludFtdLCBzZXJpZXNJbmRleDogbnVtYmVyKSA9PiBudW1iZXI7XG4gICAgdmFsdWVGb3JtYXR0ZXI6IChyZWR1Y2VkVmFsdWU6IG51bWJlcikgPT4gc3RyaW5nO1xuICAgIHNlcmllczogU2VyaWVzW107XG4gICAgbWluPzogbnVtYmVyO1xuICAgIG1heD86IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBUaW1lU2VyaWVzSW5wdXQgPSBbWUNvbmZpZ10gfCBbWUNvbmZpZywgWUNvbmZpZ107XG5cbiAgZXhwb3J0IHR5cGUgVG9nZ2xlVmlzaWJpbGl0eSA9IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nIHwgJ3Zpc2libGUnO1xuICB9O1xufVxuIiwiPGRpdlxuICAqbmdJZj1cIiEoZW1wdHkkIHwgYXN5bmMpOyBlbHNlIHplcm9TdGF0ZVwiXG4gIGNsYXNzPVwiY29udGFpbmVyXCJcbiAgKHJpdkNsaWVudFNpemUpPVwid2lkdGggPSAkZXZlbnQud2lkdGhcIlxuPlxuICA8c3ZnXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgKm5nSWY9XCJkcmF3RGF0YSQgfCBhc3luYzsgbGV0IGRcIlxuICAgIFthdHRyLnZpZXdCb3hdPVwiZC52aWV3Qm94XCJcbiAgPlxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueC54TWFqb3JUaWNrc1wiPlxuICAgICAgPHJlY3RcbiAgICAgICAgY2xhc3M9XCJ0aWNrXCJcbiAgICAgICAgW2F0dHIueF09XCJkLngueFNjYWxlKHRpY2sudmFsdWUpXCJcbiAgICAgICAgeT1cIjBcIlxuICAgICAgICB3aWR0aD1cIjFcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwiZC55MS55U2NhbGUoZC55MS55TWluKSArIEJPVFRPTV9PRkZTRVRcIlxuICAgICAgPjwvcmVjdD5cbiAgICAgIDx0ZXh0XG4gICAgICAgICpuZ0lmPVwiZC54LnhTY2FsZSh0aWNrLnZhbHVlKSA+PSAwXCJcbiAgICAgICAgY2xhc3M9XCJ4LW1ham9yLXRpY2stbGFiZWxcIlxuICAgICAgICBbYXR0ci54XT1cImQueC54U2NhbGUodGljay52YWx1ZSlcIlxuICAgICAgICBbYXR0ci55XT1cIkhFSUdIVCAtIEJPVFRPTV9PRkZTRVRcIlxuICAgICAgICBkeD1cIjRcIlxuICAgICAgICBkeT1cIi00XCJcbiAgICAgID5cbiAgICAgICAge3sgdGljay5sYWJlbCB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLngueE1pbm9yVGlja3NcIj5cbiAgICAgIDx0ZXh0XG4gICAgICAgIGNsYXNzPVwieC1taW5vci10aWNrLWxhYmVsXCJcbiAgICAgICAgW2F0dHIueF09XCJkLngueFNjYWxlKHRpY2sudmFsdWUpXCJcbiAgICAgICAgW2F0dHIueV09XCJIRUlHSFQgLSBCT1RUT01fT0ZGU0VUXCJcbiAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgICBkb21pbmFudC1iYXNlbGluZT1cImhhbmdpbmdcIlxuICAgICAgICBkeT1cIjhcIlxuICAgICAgPlxuICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICAgIDx0aXRsZT57eyB0aWNrLnZhbHVlIHwgZGF0ZSB9fTwvdGl0bGU+XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueTEueVRpY2tzXCI+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cInRpY2tcIlxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIFthdHRyLnldPVwiZC55MS55U2NhbGUodGljaylcIlxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICBoZWlnaHQ9XCIxXCJcbiAgICAgID48L3JlY3Q+XG4gICAgICA8dGV4dCBjbGFzcz1cInktdGljay1sYWJlbFwiIHg9XCIwXCIgW2F0dHIueV09XCJkLnkxLnlTY2FsZSh0aWNrKVwiIGR5PVwiLTRcIj5cbiAgICAgICAge3sgZC55MS52YWx1ZUZvcm1hdHRlcih0aWNrKSB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cblxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueTI/LnlUaWNrc1wiPlxuICAgICAgPHRleHRcbiAgICAgICAgY2xhc3M9XCJ5LXRpY2stbGFiZWxcIlxuICAgICAgICBbYXR0ci54XT1cIndpZHRoXCJcbiAgICAgICAgW2F0dHIueV09XCJkLnkyPy55U2NhbGUodGljaylcIlxuICAgICAgICB0ZXh0LWFuY2hvcj1cImVuZFwiXG4gICAgICAgIGR5PVwiLTRcIlxuICAgICAgPlxuICAgICAgICB7eyBkLnkyPy52YWx1ZUZvcm1hdHRlcih0aWNrKSB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cblxuICAgIDxnICpuZ0lmPVwiaG92ZXJlZE1hcmtlciQgfCBhc3luYzsgbGV0IGhvdmVyZWRNYXJrZXJcIj5cbiAgICAgIDxsaW5lXG4gICAgICAgIGNsYXNzPVwiaG92ZXItcnVsZVwiXG4gICAgICAgIFthdHRyLngxXT1cImhvdmVyZWRNYXJrZXIubWFya2VyLnhcIlxuICAgICAgICBbYXR0ci55MV09XCJkLnkxLnlTY2FsZShkLnkxLnlNaW4pXCJcbiAgICAgICAgW2F0dHIueDJdPVwiaG92ZXJlZE1hcmtlci5tYXJrZXIueFwiXG4gICAgICAgIFthdHRyLnkyXT1cImQueTEueVNjYWxlKGQueTEueU1heClcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjRcIlxuICAgICAgLz5cbiAgICA8L2c+XG5cbiAgICA8bmctdGVtcGxhdGUgI3Nlcmllc1RwbCBsZXQtc2VyaWVzPVwic2VyaWVzXCI+XG4gICAgICA8cGF0aFxuICAgICAgICAqbmdJZj1cInNlcmllcy52aXNpYmlsaXR5ICE9ICdoaWRkZW4nXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhIHBhdGhcIlxuICAgICAgICBbY2xhc3MubWFya2VyLWhvdmVyZWRdPVwiISEoaG92ZXJlZE1hcmtlciQgfCBhc3luYylcIlxuICAgICAgICBbYXR0ci5kXT1cInNlcmllcy5wYXRoXCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNlcmllcy5zdHJva2VcIlxuICAgICAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInNlcmllcy5zdHlsZSA9PT0gJ2Rhc2hlZCcgPyAnNCcgOiBudWxsXCJcbiAgICAgID48L3BhdGg+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtYXJrZXIgb2Ygc2VyaWVzLm1hcmtlcnNcIj5cbiAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICpuZ0lmPVwic2VyaWVzLnZpc2liaWxpdHkgIT0gJ2hpZGRlbidcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YSBtYXJrZXJcIlxuICAgICAgICAgIFtjbGFzcy5mb2N1c2VkXT1cIihob3ZlcmVkTWFya2VyJCB8IGFzeW5jKT8ubWFya2VyPy54ID09PSBtYXJrZXIueFwiXG4gICAgICAgICAgW2NsYXNzLmJsdXJyZWRdPVwiXG4gICAgICAgICAgICAoaG92ZXJlZE1hcmtlciQgfCBhc3luYykgIT09IG51bGwgJiZcbiAgICAgICAgICAgIChob3ZlcmVkTWFya2VyJCB8IGFzeW5jKT8ubWFya2VyPy54ICE9PSBtYXJrZXIueFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F0dHIuY3hdPVwibWFya2VyLnhcIlxuICAgICAgICAgIFthdHRyLmN5XT1cIm1hcmtlci55XCJcbiAgICAgICAgICBbYXR0ci5yXT1cIlBPSU5UX1JBRElVU1wiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNlcmllcy5zdHJva2VcIlxuICAgICAgICAgIChtb3VzZW92ZXIpPVwiaG92ZXJlZE1hcmtlciQubmV4dCh7IGV2ZW50OiAkZXZlbnQsIG1hcmtlcjogbWFya2VyIH0pXCJcbiAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkTWFya2VyJC5uZXh0KG51bGwpXCJcbiAgICAgICAgPjwvY2lyY2xlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgc2VyaWVzIG9mIGQueTEuc2VyaWVzXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VyaWVzVHBsOyBjb250ZXh0OiB7IHNlcmllczogc2VyaWVzIH1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgc2VyaWVzIG9mIGQueTI/LnNlcmllc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNlcmllc1RwbDsgY29udGV4dDogeyBzZXJpZXM6IHNlcmllcyB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2c+XG4gIDwvc3ZnPlxuICA8bGVnZW5kPlxuICAgIDxyaXYtbGVnZW5kLWl0ZW1cbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxlZ2VuZCQgfCBhc3luY1wiXG4gICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiXG4gICAgICBbY29sb3JUb2tlbl09XCJpdGVtLmNvbG9yVG9rZW5cIlxuICAgICAgW3Zpc2liaWxpdHldPVwiaXRlbS52aXNpYmlsaXR5XCJcbiAgICAgIFtjbGlja2FibGVdPVwiYWxsb3dMZWdlbmRUb2dnbGVcIlxuICAgICAgKGl0ZW1DbGljayk9XCJcbiAgICAgICAgYWxsb3dMZWdlbmRUb2dnbGVcbiAgICAgICAgICA/IHRvZ2dsZVZpc2liaWxpdHkkLm5leHQoe1xuICAgICAgICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgICAgICAgdmlzaWJpbGl0eTogaXRlbS52aXNpYmlsaXR5ID09ICdoaWRkZW4nID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgICBcIlxuICAgID48L3Jpdi1sZWdlbmQtaXRlbT5cbiAgPC9sZWdlbmQ+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbGxvdXQkIHwgYXN5bmM7IGxldCBjYWxsb3V0XCI+XG4gIDxyaXYtY2FsbG91dFxuICAgICpyaXYtY2FsbG91dFxuICAgIFthbmNob3JdPVwiY2FsbG91dC5hbmNob3JcIlxuICAgIFtpc01vZGFsXT1cImZhbHNlXCJcbiAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2NlbnRlci1yaWdodCdcIlxuICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjYWxsb3V0LWNvbnRlbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxsb3V0LXJvd1wiICpuZ0Zvcj1cImxldCBtZXRyaWMgb2YgY2FsbG91dC5tZXRyaWNzXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2VyaWVzLWxhYmVsXCI+XG4gICAgICAgICAgPHJpdi1sZWdlbmQtaXRlbSBbY29sb3JUb2tlbl09XCJtZXRyaWMuY29sb3JUb2tlblwiPjwvcml2LWxlZ2VuZC1pdGVtPlxuICAgICAgICAgIDxzcGFuPnt7IG1ldHJpYy5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBtZXRyaWMudmFsdWUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3plcm9TdGF0ZT5cbiAgPHJpdi16ZXJvLXN0YXRlIFttZXNzYWdlXT1cInplcm9TdGF0ZU1lc3NhZ2VcIj48L3Jpdi16ZXJvLXN0YXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250cm9scz5cbiAgPHJpdi1zaW5nbGUtc2VsZWN0XG4gICAgW2dyb3Vwc109XCJpbnRlcnZhbE9wdGlvbnMkIHwgYXN5bmMgfCByaXZPcHRpb25Hcm91cFwiXG4gICAgW3NlbGVjdGVkT3B0aW9uXT1cInNlbGVjdGVkSW50ZXJ2YWxPcHRpb24kIHwgYXN5bmNcIlxuICAgIChzZWxlY3RlZE9wdGlvbkNoYW5nZSk9XCJzZXRJbnRlcnZhbE9wdGlvbigkZXZlbnQpXCJcbiAgPjwvcml2LXNpbmdsZS1zZWxlY3Q+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -2215,10 +2215,10 @@ class BadgeComponent {
2215
2215
  }
2216
2216
  }
2217
2217
  BadgeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2218
- BadgeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BadgeComponent, selector: "riv-badge", inputs: { variant: "variant", size: "size" }, host: { properties: { "class": "this.classes" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:inline-flex;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy);white-space:nowrap}:host.xsmall{padding:calc(var(--base-grid-size) / 2) calc(var(--base-grid-size) * 1.5);border-radius:calc(var(--base-grid-size) * 4)}:host.small{padding:var(--base-grid-size) calc(var(--base-grid-size) * 2);border-radius:calc(var(--base-grid-size) * 5)}:host.medium{padding:calc(var(--base-grid-size) * 1.5) calc(var(--base-grid-size) * 3);border-radius:calc(var(--base-grid-size) * 6)}:host.large{padding:calc(var(--base-grid-size) * 2) calc(var(--base-grid-size) * 4);border-radius:calc(var(--base-grid-size) * 6)}:host.brand{background-color:var(--brand);color:var(--white-100)}:host.beta{background-color:var(--baloo-50);color:var(--white-100)}:host.disabled{background-color:var(--gray-20);color:var(--gray-60)}:host.qualitative-safety{background-color:var(--surface-light-safety);color:var(--type-light-safety)}:host.qualitative-caution{background-color:var(--surface-light-caution);color:var(--type-light-caution)}:host.qualitative-warning{background-color:var(--surface-light-warning);color:var(--type-light-warning)}:host.qualitative-danger{background-color:var(--surface-light-danger);color:var(--type-light-danger)}:host.qualitative-danger-inverse{background-color:var(--surface-dark-danger);color:var(--white-100)}:host.categorical-1{background-color:var(--baja-blast-10);color:var(--baja-blast-90)}:host.categorical-2{background-color:var(--baloo-10);color:var(--baloo-90)}:host.categorical-3{background-color:var(--yella-10);color:var(--yella-90)}:host.categorical-4{background-color:var(--tang-10);color:var(--tang-90)}:host.categorical-5{background-color:var(--fyre-10);color:var(--fyre-90)}:host.categorical-6{background-color:var(--rosi-10);color:var(--rosi-90)}:host.categorical-7{background-color:var(--serena-10);color:var(--serena-90)}:host.categorical-8{background-color:var(--teal-diamond-10);color:var(--teal-diamond-90)}:host.categorical-9{background-color:var(--purp-10);color:var(--purp-90)}:host.categorical-10{background-color:var(--arnge-10);color:var(--arnge-90)}:host.categorical-1-inverse{background-color:var(--baja-blast-70);color:var(--type-dark-high-contrast)}:host.categorical-2-inverse{background-color:var(--baloo-70);color:var(--type-dark-high-contrast)}:host.categorical-3-inverse{background-color:var(--yella-70);color:var(--type-light-high-contrast)}:host.categorical-4-inverse{background-color:var(--tang-70);color:var(--type-dark-high-contrast)}:host.categorical-5-inverse{background-color:var(--fyre-70);color:var(--type-dark-high-contrast)}:host.categorical-6-inverse{background-color:var(--rosi-70);color:var(--type-dark-high-contrast)}:host.categorical-7-inverse{background-color:var(--serena-70);color:var(--type-dark-high-contrast)}:host.categorical-8-inverse{background-color:var(--teal-diamond-70);color:var(--type-dark-high-contrast)}:host.categorical-9-inverse{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.categorical-10-inverse{background-color:var(--arnge-70);color:var(--type-dark-high-contrast)}:host.linear-1{background-color:var(--purp-10);color:var(--type-light-high-contrast)}:host.linear-2{background-color:var(--purp-20);color:var(--type-light-high-contrast)}:host.linear-3{background-color:var(--purp-30);color:var(--type-light-high-contrast)}:host.linear-4{background-color:var(--purp-40);color:var(--type-dark-high-contrast)}:host.linear-5{background-color:var(--purp-50);color:var(--type-dark-high-contrast)}:host.linear-6{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.linear-7{background-color:var(--purp-70);color:var(--type-dark-high-contrast)}:host.linear-8{background-color:var(--purp-80);color:var(--type-dark-high-contrast)}:host.linear-9{background-color:var(--purp-90);color:var(--type-dark-high-contrast)}:host.linear-10{background-color:var(--purp-100);color:var(--type-dark-high-contrast)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2218
+ BadgeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BadgeComponent, selector: "riv-badge", inputs: { variant: "variant", size: "size" }, host: { properties: { "class": "this.classes" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:inline-flex;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy);white-space:nowrap;border-radius:calc(var(--base-grid-size) * var(--badge-multiplier));min-width:calc(var(--base-grid-size) * var(--badge-multiplier));min-height:calc(var(--base-grid-size) * var(--badge-multiplier))}:host.xsmall{padding:calc(var(--base-grid-size) / 2) calc(var(--base-grid-size) * 1.5);--badge-multiplier: 4}:host.small{padding:var(--base-grid-size) calc(var(--base-grid-size) * 2);--badge-multiplier: 5}:host.medium{padding:calc(var(--base-grid-size) * 1.5) calc(var(--base-grid-size) * 3);--badge-multiplier: 6}:host.large{padding:calc(var(--base-grid-size) * 2) calc(var(--base-grid-size) * 3);--badge-multiplier: 6}:host.brand{background-color:var(--brand);color:var(--white-100)}:host.beta{background-color:var(--baloo-50);color:var(--white-100)}:host.disabled{background-color:var(--gray-20);color:var(--gray-60)}:host.qualitative-safety{background-color:var(--surface-light-safety);color:var(--type-light-safety)}:host.qualitative-caution{background-color:var(--surface-light-caution);color:var(--type-light-caution)}:host.qualitative-warning{background-color:var(--surface-light-warning);color:var(--type-light-warning)}:host.qualitative-danger{background-color:var(--surface-light-danger);color:var(--type-light-danger)}:host.qualitative-danger-inverse{background-color:var(--surface-dark-danger);color:var(--white-100)}:host.categorical-1{background-color:var(--baja-blast-10);color:var(--baja-blast-90)}:host.categorical-2{background-color:var(--baloo-10);color:var(--baloo-90)}:host.categorical-3{background-color:var(--yella-10);color:var(--yella-90)}:host.categorical-4{background-color:var(--tang-10);color:var(--tang-90)}:host.categorical-5{background-color:var(--fyre-10);color:var(--fyre-90)}:host.categorical-6{background-color:var(--rosi-10);color:var(--rosi-90)}:host.categorical-7{background-color:var(--serena-10);color:var(--serena-90)}:host.categorical-8{background-color:var(--teal-diamond-10);color:var(--teal-diamond-90)}:host.categorical-9{background-color:var(--purp-10);color:var(--purp-90)}:host.categorical-10{background-color:var(--arnge-10);color:var(--arnge-90)}:host.categorical-1-inverse{background-color:var(--baja-blast-70);color:var(--type-dark-high-contrast)}:host.categorical-2-inverse{background-color:var(--baloo-70);color:var(--type-dark-high-contrast)}:host.categorical-3-inverse{background-color:var(--yella-70);color:var(--type-light-high-contrast)}:host.categorical-4-inverse{background-color:var(--tang-70);color:var(--type-dark-high-contrast)}:host.categorical-5-inverse{background-color:var(--fyre-70);color:var(--type-dark-high-contrast)}:host.categorical-6-inverse{background-color:var(--rosi-70);color:var(--type-dark-high-contrast)}:host.categorical-7-inverse{background-color:var(--serena-70);color:var(--type-dark-high-contrast)}:host.categorical-8-inverse{background-color:var(--teal-diamond-70);color:var(--type-dark-high-contrast)}:host.categorical-9-inverse{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.categorical-10-inverse{background-color:var(--arnge-70);color:var(--type-dark-high-contrast)}:host.linear-1{background-color:var(--purp-10);color:var(--type-light-high-contrast)}:host.linear-2{background-color:var(--purp-20);color:var(--type-light-high-contrast)}:host.linear-3{background-color:var(--purp-30);color:var(--type-light-high-contrast)}:host.linear-4{background-color:var(--purp-40);color:var(--type-dark-high-contrast)}:host.linear-5{background-color:var(--purp-50);color:var(--type-dark-high-contrast)}:host.linear-6{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.linear-7{background-color:var(--purp-70);color:var(--type-dark-high-contrast)}:host.linear-8{background-color:var(--purp-80);color:var(--type-dark-high-contrast)}:host.linear-9{background-color:var(--purp-90);color:var(--type-dark-high-contrast)}:host.linear-10{background-color:var(--purp-100);color:var(--type-dark-high-contrast)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2219
2219
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BadgeComponent, decorators: [{
2220
2220
  type: Component,
2221
- args: [{ selector: 'riv-badge', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n", styles: [":host{display:inline-flex;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy);white-space:nowrap}:host.xsmall{padding:calc(var(--base-grid-size) / 2) calc(var(--base-grid-size) * 1.5);border-radius:calc(var(--base-grid-size) * 4)}:host.small{padding:var(--base-grid-size) calc(var(--base-grid-size) * 2);border-radius:calc(var(--base-grid-size) * 5)}:host.medium{padding:calc(var(--base-grid-size) * 1.5) calc(var(--base-grid-size) * 3);border-radius:calc(var(--base-grid-size) * 6)}:host.large{padding:calc(var(--base-grid-size) * 2) calc(var(--base-grid-size) * 4);border-radius:calc(var(--base-grid-size) * 6)}:host.brand{background-color:var(--brand);color:var(--white-100)}:host.beta{background-color:var(--baloo-50);color:var(--white-100)}:host.disabled{background-color:var(--gray-20);color:var(--gray-60)}:host.qualitative-safety{background-color:var(--surface-light-safety);color:var(--type-light-safety)}:host.qualitative-caution{background-color:var(--surface-light-caution);color:var(--type-light-caution)}:host.qualitative-warning{background-color:var(--surface-light-warning);color:var(--type-light-warning)}:host.qualitative-danger{background-color:var(--surface-light-danger);color:var(--type-light-danger)}:host.qualitative-danger-inverse{background-color:var(--surface-dark-danger);color:var(--white-100)}:host.categorical-1{background-color:var(--baja-blast-10);color:var(--baja-blast-90)}:host.categorical-2{background-color:var(--baloo-10);color:var(--baloo-90)}:host.categorical-3{background-color:var(--yella-10);color:var(--yella-90)}:host.categorical-4{background-color:var(--tang-10);color:var(--tang-90)}:host.categorical-5{background-color:var(--fyre-10);color:var(--fyre-90)}:host.categorical-6{background-color:var(--rosi-10);color:var(--rosi-90)}:host.categorical-7{background-color:var(--serena-10);color:var(--serena-90)}:host.categorical-8{background-color:var(--teal-diamond-10);color:var(--teal-diamond-90)}:host.categorical-9{background-color:var(--purp-10);color:var(--purp-90)}:host.categorical-10{background-color:var(--arnge-10);color:var(--arnge-90)}:host.categorical-1-inverse{background-color:var(--baja-blast-70);color:var(--type-dark-high-contrast)}:host.categorical-2-inverse{background-color:var(--baloo-70);color:var(--type-dark-high-contrast)}:host.categorical-3-inverse{background-color:var(--yella-70);color:var(--type-light-high-contrast)}:host.categorical-4-inverse{background-color:var(--tang-70);color:var(--type-dark-high-contrast)}:host.categorical-5-inverse{background-color:var(--fyre-70);color:var(--type-dark-high-contrast)}:host.categorical-6-inverse{background-color:var(--rosi-70);color:var(--type-dark-high-contrast)}:host.categorical-7-inverse{background-color:var(--serena-70);color:var(--type-dark-high-contrast)}:host.categorical-8-inverse{background-color:var(--teal-diamond-70);color:var(--type-dark-high-contrast)}:host.categorical-9-inverse{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.categorical-10-inverse{background-color:var(--arnge-70);color:var(--type-dark-high-contrast)}:host.linear-1{background-color:var(--purp-10);color:var(--type-light-high-contrast)}:host.linear-2{background-color:var(--purp-20);color:var(--type-light-high-contrast)}:host.linear-3{background-color:var(--purp-30);color:var(--type-light-high-contrast)}:host.linear-4{background-color:var(--purp-40);color:var(--type-dark-high-contrast)}:host.linear-5{background-color:var(--purp-50);color:var(--type-dark-high-contrast)}:host.linear-6{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.linear-7{background-color:var(--purp-70);color:var(--type-dark-high-contrast)}:host.linear-8{background-color:var(--purp-80);color:var(--type-dark-high-contrast)}:host.linear-9{background-color:var(--purp-90);color:var(--type-dark-high-contrast)}:host.linear-10{background-color:var(--purp-100);color:var(--type-dark-high-contrast)}\n"] }]
2221
+ args: [{ selector: 'riv-badge', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n", styles: [":host{display:inline-flex;align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-heavy);white-space:nowrap;border-radius:calc(var(--base-grid-size) * var(--badge-multiplier));min-width:calc(var(--base-grid-size) * var(--badge-multiplier));min-height:calc(var(--base-grid-size) * var(--badge-multiplier))}:host.xsmall{padding:calc(var(--base-grid-size) / 2) calc(var(--base-grid-size) * 1.5);--badge-multiplier: 4}:host.small{padding:var(--base-grid-size) calc(var(--base-grid-size) * 2);--badge-multiplier: 5}:host.medium{padding:calc(var(--base-grid-size) * 1.5) calc(var(--base-grid-size) * 3);--badge-multiplier: 6}:host.large{padding:calc(var(--base-grid-size) * 2) calc(var(--base-grid-size) * 3);--badge-multiplier: 6}:host.brand{background-color:var(--brand);color:var(--white-100)}:host.beta{background-color:var(--baloo-50);color:var(--white-100)}:host.disabled{background-color:var(--gray-20);color:var(--gray-60)}:host.qualitative-safety{background-color:var(--surface-light-safety);color:var(--type-light-safety)}:host.qualitative-caution{background-color:var(--surface-light-caution);color:var(--type-light-caution)}:host.qualitative-warning{background-color:var(--surface-light-warning);color:var(--type-light-warning)}:host.qualitative-danger{background-color:var(--surface-light-danger);color:var(--type-light-danger)}:host.qualitative-danger-inverse{background-color:var(--surface-dark-danger);color:var(--white-100)}:host.categorical-1{background-color:var(--baja-blast-10);color:var(--baja-blast-90)}:host.categorical-2{background-color:var(--baloo-10);color:var(--baloo-90)}:host.categorical-3{background-color:var(--yella-10);color:var(--yella-90)}:host.categorical-4{background-color:var(--tang-10);color:var(--tang-90)}:host.categorical-5{background-color:var(--fyre-10);color:var(--fyre-90)}:host.categorical-6{background-color:var(--rosi-10);color:var(--rosi-90)}:host.categorical-7{background-color:var(--serena-10);color:var(--serena-90)}:host.categorical-8{background-color:var(--teal-diamond-10);color:var(--teal-diamond-90)}:host.categorical-9{background-color:var(--purp-10);color:var(--purp-90)}:host.categorical-10{background-color:var(--arnge-10);color:var(--arnge-90)}:host.categorical-1-inverse{background-color:var(--baja-blast-70);color:var(--type-dark-high-contrast)}:host.categorical-2-inverse{background-color:var(--baloo-70);color:var(--type-dark-high-contrast)}:host.categorical-3-inverse{background-color:var(--yella-70);color:var(--type-light-high-contrast)}:host.categorical-4-inverse{background-color:var(--tang-70);color:var(--type-dark-high-contrast)}:host.categorical-5-inverse{background-color:var(--fyre-70);color:var(--type-dark-high-contrast)}:host.categorical-6-inverse{background-color:var(--rosi-70);color:var(--type-dark-high-contrast)}:host.categorical-7-inverse{background-color:var(--serena-70);color:var(--type-dark-high-contrast)}:host.categorical-8-inverse{background-color:var(--teal-diamond-70);color:var(--type-dark-high-contrast)}:host.categorical-9-inverse{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.categorical-10-inverse{background-color:var(--arnge-70);color:var(--type-dark-high-contrast)}:host.linear-1{background-color:var(--purp-10);color:var(--type-light-high-contrast)}:host.linear-2{background-color:var(--purp-20);color:var(--type-light-high-contrast)}:host.linear-3{background-color:var(--purp-30);color:var(--type-light-high-contrast)}:host.linear-4{background-color:var(--purp-40);color:var(--type-dark-high-contrast)}:host.linear-5{background-color:var(--purp-50);color:var(--type-dark-high-contrast)}:host.linear-6{background-color:var(--purp-60);color:var(--type-dark-high-contrast)}:host.linear-7{background-color:var(--purp-70);color:var(--type-dark-high-contrast)}:host.linear-8{background-color:var(--purp-80);color:var(--type-dark-high-contrast)}:host.linear-9{background-color:var(--purp-90);color:var(--type-dark-high-contrast)}:host.linear-10{background-color:var(--purp-100);color:var(--type-dark-high-contrast)}\n"] }]
2222
2222
  }], propDecorators: { variant: [{
2223
2223
  type: Input
2224
2224
  }], size: [{
@@ -3572,7 +3572,7 @@ class TimeSeriesComponent {
3572
3572
  const xMinorTicks = getTimeInterval(interval)
3573
3573
  .range(minDateValue, utcDay.offset(maxDateValue, 1))
3574
3574
  .map(date => ({
3575
- value: utcDay.offset(date, 1).valueOf(),
3575
+ value: utcDay.offset(date, 0).valueOf(),
3576
3576
  label: minorFormatter(date),
3577
3577
  }))
3578
3578
  .filter((_, i, arr) => arr.length > xMinorTickLimit