@tolle_/tolle-ui 18.2.29 → 18.2.30
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.
- package/esm2022/lib/accordion-item.component.mjs +5 -11
- package/esm2022/lib/accordion.component.mjs +4 -9
- package/esm2022/lib/alert-dialog-dynamic.component.mjs +5 -10
- package/esm2022/lib/alert-dialog.component.mjs +44 -59
- package/esm2022/lib/alert.component.mjs +5 -11
- package/esm2022/lib/aspect-ratio.component.mjs +119 -0
- package/esm2022/lib/attachment.component.mjs +334 -0
- package/esm2022/lib/avatar-fallback.component.mjs +3 -3
- package/esm2022/lib/avatar.component.mjs +4 -9
- package/esm2022/lib/badge.component.mjs +4 -9
- package/esm2022/lib/breadcrumb-item.component.mjs +3 -3
- package/esm2022/lib/breadcrumb-link.component.mjs +3 -3
- package/esm2022/lib/breadcrumb-separator.component.mjs +3 -3
- package/esm2022/lib/breadcrumb.component.mjs +3 -3
- package/esm2022/lib/bubble.component.mjs +301 -0
- package/esm2022/lib/button.component.mjs +5 -11
- package/esm2022/lib/calendar.component.mjs +5 -11
- package/esm2022/lib/card.component.mjs +14 -43
- package/esm2022/lib/carousel/carousel.component.mjs +5 -12
- package/esm2022/lib/chain-of-thought.component.mjs +380 -0
- package/esm2022/lib/chart-pie.component.mjs +386 -0
- package/esm2022/lib/chart.component.mjs +1146 -0
- package/esm2022/lib/chart.service.mjs +555 -0
- package/esm2022/lib/checkbox.component.mjs +5 -11
- package/esm2022/lib/checkpoint.component.mjs +134 -0
- package/esm2022/lib/collapsible.component.mjs +4 -11
- package/esm2022/lib/combobox.component.mjs +372 -0
- package/esm2022/lib/command-dialog.component.mjs +164 -0
- package/esm2022/lib/command.component.mjs +514 -0
- package/esm2022/lib/command.service.mjs +130 -0
- package/esm2022/lib/confirmation.component.mjs +219 -0
- package/esm2022/lib/context-menu-trigger.directive.mjs +36 -0
- package/esm2022/lib/context-menu.component.mjs +460 -0
- package/esm2022/lib/context-menu.service.mjs +121 -0
- package/esm2022/lib/context.component.mjs +377 -0
- package/esm2022/lib/conversation.component.mjs +442 -0
- package/esm2022/lib/country-selector.component.mjs +5 -11
- package/esm2022/lib/data-table.component.mjs +59 -12
- package/esm2022/lib/date-picker.component.mjs +251 -198
- package/esm2022/lib/date-range-picker.component.mjs +224 -116
- package/esm2022/lib/date-time-picker.component.mjs +506 -0
- package/esm2022/lib/direction.component.mjs +79 -0
- package/esm2022/lib/dropdown-item.component.mjs +3 -3
- package/esm2022/lib/dropdown-label.component.mjs +3 -3
- package/esm2022/lib/dropdown-menu.component.mjs +3 -3
- package/esm2022/lib/dropdown-separator.component.mjs +3 -3
- package/esm2022/lib/dropdown-trigger.directive.mjs +6 -4
- package/esm2022/lib/empty-state.component.mjs +4 -9
- package/esm2022/lib/field.component.mjs +394 -0
- package/esm2022/lib/hover-card.component.mjs +6 -16
- package/esm2022/lib/inline-citation.component.mjs +263 -0
- package/esm2022/lib/input-group.component.mjs +418 -0
- package/esm2022/lib/input.component.mjs +5 -11
- package/esm2022/lib/item.component.mjs +243 -0
- package/esm2022/lib/kbd.component.mjs +82 -0
- package/esm2022/lib/label.component.mjs +4 -9
- package/esm2022/lib/marker.component.mjs +135 -0
- package/esm2022/lib/masked-input.component.mjs +5 -11
- package/esm2022/lib/menubar.component.mjs +683 -0
- package/esm2022/lib/message-scroller.component.mjs +353 -0
- package/esm2022/lib/message-scroller.service.mjs +157 -0
- package/esm2022/lib/message.component.mjs +228 -0
- package/esm2022/lib/model-selector.component.mjs +310 -0
- package/esm2022/lib/multi-select.component.mjs +155 -72
- package/esm2022/lib/native-select.component.mjs +201 -0
- package/esm2022/lib/navigation-menu.component.mjs +642 -0
- package/esm2022/lib/otp-group.component.mjs +3 -3
- package/esm2022/lib/otp-slot.component.mjs +4 -9
- package/esm2022/lib/otp.component.mjs +5 -11
- package/esm2022/lib/pagination.component.mjs +7 -10
- package/esm2022/lib/plan.component.mjs +335 -0
- package/esm2022/lib/popover-content.component.mjs +4 -9
- package/esm2022/lib/popover.component.mjs +15 -13
- package/esm2022/lib/progress.component.mjs +4 -9
- package/esm2022/lib/prompt-input.component.mjs +526 -0
- package/esm2022/lib/queue.component.mjs +280 -0
- package/esm2022/lib/radio-group.component.mjs +6 -13
- package/esm2022/lib/radio-item.component.mjs +4 -9
- package/esm2022/lib/range-calendar.component.mjs +5 -11
- package/esm2022/lib/reasoning.component.mjs +335 -0
- package/esm2022/lib/resizable.component.mjs +219 -0
- package/esm2022/lib/segment.component.mjs +17 -7
- package/esm2022/lib/select-group.component.mjs +4 -8
- package/esm2022/lib/select-item.component.mjs +4 -9
- package/esm2022/lib/select-separator.component.mjs +4 -8
- package/esm2022/lib/select.component.mjs +133 -49
- package/esm2022/lib/separator.component.mjs +4 -9
- package/esm2022/lib/sheet.component.mjs +38 -56
- package/esm2022/lib/shimmer.component.mjs +84 -0
- package/esm2022/lib/sidebar.component.mjs +11 -1
- package/esm2022/lib/skeleton.component.mjs +4 -9
- package/esm2022/lib/sources.component.mjs +452 -0
- package/esm2022/lib/spinner.component.mjs +68 -0
- package/esm2022/lib/suggestion.component.mjs +207 -0
- package/esm2022/lib/switch.component.mjs +5 -11
- package/esm2022/lib/table.component.mjs +213 -0
- package/esm2022/lib/tabs.component.mjs +4 -11
- package/esm2022/lib/tag-input.component.mjs +5 -11
- package/esm2022/lib/task.component.mjs +359 -0
- package/esm2022/lib/textarea.component.mjs +5 -11
- package/esm2022/lib/theme.service.mjs +17 -6
- package/esm2022/lib/time-picker.component.mjs +923 -0
- package/esm2022/lib/toast.service.mjs +3 -2
- package/esm2022/lib/toaster.component.mjs +76 -39
- package/esm2022/lib/toggle-group.component.mjs +4 -9
- package/esm2022/lib/toggle.component.mjs +5 -11
- package/esm2022/lib/tool.component.mjs +462 -0
- package/esm2022/lib/typography.component.mjs +83 -0
- package/esm2022/lib/utils/color.mjs +140 -19
- package/esm2022/public-api.mjs +61 -1
- package/fesm2022/tolle-ui.mjs +16453 -1024
- package/fesm2022/tolle-ui.mjs.map +1 -1
- package/lib/alert-dialog.component.d.ts +10 -2
- package/lib/aspect-ratio.component.d.ts +20 -0
- package/lib/attachment.component.d.ts +101 -0
- package/lib/bubble.component.d.ts +112 -0
- package/lib/chain-of-thought.component.d.ts +166 -0
- package/lib/chart-pie.component.d.ts +108 -0
- package/lib/chart.component.d.ts +369 -0
- package/lib/chart.service.d.ts +222 -0
- package/lib/checkpoint.component.d.ts +51 -0
- package/lib/combobox.component.d.ts +90 -0
- package/lib/command-dialog.component.d.ts +53 -0
- package/lib/command.component.d.ts +189 -0
- package/lib/command.service.d.ts +67 -0
- package/lib/confirmation.component.d.ts +70 -0
- package/lib/context-menu-trigger.directive.d.ts +12 -0
- package/lib/context-menu.component.d.ts +41 -0
- package/lib/context-menu.service.d.ts +38 -0
- package/lib/context.component.d.ts +134 -0
- package/lib/conversation.component.d.ts +165 -0
- package/lib/data-table.component.d.ts +26 -1
- package/lib/date-picker.component.d.ts +72 -11
- package/lib/date-range-picker.component.d.ts +63 -6
- package/lib/date-time-picker.component.d.ts +119 -0
- package/lib/direction.component.d.ts +45 -0
- package/lib/field.component.d.ts +201 -0
- package/lib/inline-citation.component.d.ts +103 -0
- package/lib/input-group.component.d.ts +150 -0
- package/lib/item.component.d.ts +154 -0
- package/lib/kbd.component.d.ts +50 -0
- package/lib/marker.component.d.ts +58 -0
- package/lib/menubar.component.d.ts +247 -0
- package/lib/message-scroller.component.d.ts +159 -0
- package/lib/message-scroller.service.d.ts +73 -0
- package/lib/message.component.d.ts +128 -0
- package/lib/model-selector.component.d.ts +103 -0
- package/lib/multi-select.component.d.ts +66 -14
- package/lib/native-select.component.d.ts +57 -0
- package/lib/navigation-menu.component.d.ts +230 -0
- package/lib/plan.component.d.ts +120 -0
- package/lib/popover.component.d.ts +1 -0
- package/lib/prompt-input.component.d.ts +194 -0
- package/lib/queue.component.d.ts +106 -0
- package/lib/reasoning.component.d.ts +127 -0
- package/lib/resizable.component.d.ts +43 -0
- package/lib/segment.component.d.ts +13 -3
- package/lib/select.component.d.ts +37 -5
- package/lib/sheet.component.d.ts +3 -0
- package/lib/shimmer.component.d.ts +38 -0
- package/lib/sidebar.component.d.ts +2 -0
- package/lib/sources.component.d.ts +156 -0
- package/lib/spinner.component.d.ts +29 -0
- package/lib/suggestion.component.d.ts +96 -0
- package/lib/table.component.d.ts +106 -0
- package/lib/task.component.d.ts +151 -0
- package/lib/theme.service.d.ts +9 -0
- package/lib/time-picker.component.d.ts +243 -0
- package/lib/toast.service.d.ts +3 -1
- package/lib/toaster.component.d.ts +26 -9
- package/lib/tool.component.d.ts +158 -0
- package/lib/typography.component.d.ts +32 -0
- package/lib/utils/color.d.ts +19 -5
- package/package.json +1 -1
- package/public-api.d.ts +50 -0
- package/registry/docs-content.json +8480 -1542
- package/registry/llms-full.txt +2679 -319
- package/registry/llms.txt +43 -4
- package/registry/manifest.json +9090 -1742
- package/registry/r/accordion-item.json +1 -1
- package/registry/r/accordion.json +1 -1
- package/registry/r/alert-dialog-dynamic.json +1 -1
- package/registry/r/alert-dialog.json +1 -1
- package/registry/r/alert.json +1 -1
- package/registry/r/attachment.json +23 -0
- package/registry/r/avatar-fallback.json +1 -1
- package/registry/r/avatar.json +1 -1
- package/registry/r/badge.json +1 -1
- package/registry/r/breadcrumb-item.json +1 -1
- package/registry/r/breadcrumb-link.json +1 -1
- package/registry/r/breadcrumb-separator.json +1 -1
- package/registry/r/breadcrumb.json +1 -1
- package/registry/r/bubble.json +23 -0
- package/registry/r/button.json +1 -1
- package/registry/r/calendar.json +1 -1
- package/registry/r/card.json +1 -1
- package/registry/r/carousel.json +1 -1
- package/registry/r/chain-of-thought.json +23 -0
- package/registry/r/chart-pie.json +30 -0
- package/registry/r/chart.json +28 -0
- package/registry/r/checkbox.json +1 -1
- package/registry/r/checkpoint.json +23 -0
- package/registry/r/collapsible.json +1 -1
- package/registry/r/combobox.json +31 -0
- package/registry/r/command-dialog.json +21 -0
- package/registry/r/command.json +26 -0
- package/registry/r/confirmation.json +23 -0
- package/registry/r/context.json +26 -0
- package/registry/r/conversation.json +23 -0
- package/registry/r/country-selector.json +1 -1
- package/registry/r/data-table.json +1 -1
- package/registry/r/date-picker.json +4 -4
- package/registry/r/date-range-picker.json +3 -3
- package/registry/r/date-time-picker.json +28 -0
- package/registry/r/direction.json +16 -0
- package/registry/r/dropdown-item.json +1 -1
- package/registry/r/dropdown-label.json +1 -1
- package/registry/r/dropdown-menu.json +1 -1
- package/registry/r/dropdown-separator.json +1 -1
- package/registry/r/dropdown-trigger.json +1 -1
- package/registry/r/empty-state.json +1 -1
- package/registry/r/field.json +23 -0
- package/registry/r/hover-card.json +1 -1
- package/registry/r/inline-citation.json +26 -0
- package/registry/r/input-group.json +23 -0
- package/registry/r/input.json +1 -1
- package/registry/r/item.json +23 -0
- package/registry/r/kbd.json +23 -0
- package/registry/r/label.json +1 -1
- package/registry/r/marker.json +23 -0
- package/registry/r/masked-input.json +1 -1
- package/registry/r/menubar.json +24 -0
- package/registry/r/message-scroller.json +26 -0
- package/registry/r/message.json +23 -0
- package/registry/r/model-selector.json +32 -0
- package/registry/r/multi-select.json +2 -2
- package/registry/r/native-select.json +23 -0
- package/registry/r/navigation-menu.json +24 -0
- package/registry/r/otp-group.json +1 -1
- package/registry/r/otp-slot.json +1 -1
- package/registry/r/otp.json +1 -1
- package/registry/r/pagination.json +3 -2
- package/registry/r/plan.json +23 -0
- package/registry/r/popover-content.json +1 -1
- package/registry/r/popover.json +1 -1
- package/registry/r/progress.json +1 -1
- package/registry/r/prompt-input.json +23 -0
- package/registry/r/queue.json +23 -0
- package/registry/r/radio-group.json +1 -1
- package/registry/r/radio-item.json +1 -1
- package/registry/r/range-calendar.json +1 -1
- package/registry/r/reasoning.json +23 -0
- package/registry/r/segment.json +1 -1
- package/registry/r/select-group.json +1 -1
- package/registry/r/select-item.json +1 -1
- package/registry/r/select-separator.json +1 -1
- package/registry/r/select.json +4 -3
- package/registry/r/separator.json +1 -1
- package/registry/r/sheet.json +1 -1
- package/registry/r/shimmer.json +23 -0
- package/registry/r/sidebar.json +1 -1
- package/registry/r/skeleton.json +1 -1
- package/registry/r/sources.json +23 -0
- package/registry/r/spinner.json +23 -0
- package/registry/r/suggestion.json +23 -0
- package/registry/r/switch.json +1 -1
- package/registry/r/table.json +21 -0
- package/registry/r/tabs.json +1 -1
- package/registry/r/tag-input.json +1 -1
- package/registry/r/task.json +23 -0
- package/registry/r/textarea.json +1 -1
- package/registry/r/time-picker.json +24 -0
- package/registry/r/toaster.json +2 -2
- package/registry/r/toggle-group.json +1 -1
- package/registry/r/toggle.json +1 -1
- package/registry/r/tool.json +23 -0
- package/registry/r/typography.json +23 -0
- package/registry/registry.json +915 -22
- package/theme.css +109 -8
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Component, Input, forwardRef, ElementRef, ViewChild, ContentChildren } from '@angular/core';
|
|
1
|
+
import { Component, Input, Output, EventEmitter, forwardRef, ElementRef, ViewChild, ContentChildren, ChangeDetectionStrategy, } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
4
|
-
// 1. Import 'size' middleware
|
|
5
4
|
import { computePosition, flip, shift, offset, autoUpdate, size } from '@floating-ui/dom';
|
|
5
|
+
import { cva } from 'class-variance-authority';
|
|
6
6
|
import { cn } from './utils/cn';
|
|
7
7
|
import { SelectItemComponent } from './select-item.component';
|
|
8
8
|
import { Subscription } from 'rxjs';
|
|
@@ -12,15 +12,78 @@ import * as i0 from "@angular/core";
|
|
|
12
12
|
import * as i1 from "./select.service";
|
|
13
13
|
import * as i2 from "@angular/common";
|
|
14
14
|
import * as i3 from "@angular/forms";
|
|
15
|
+
const selectTriggerVariants = cva('flex w-full items-center justify-between rounded-md border border-input bg-background text-foreground shadow-sm transition-all duration-200', {
|
|
16
|
+
variants: {
|
|
17
|
+
size: {
|
|
18
|
+
xs: 'h-8 px-2 text-xs',
|
|
19
|
+
sm: 'h-9 px-3 text-sm',
|
|
20
|
+
default: 'h-10 px-3 text-sm',
|
|
21
|
+
lg: 'h-11 px-4 text-base',
|
|
22
|
+
},
|
|
23
|
+
disabled: {
|
|
24
|
+
true: 'cursor-not-allowed border-opacity-50 opacity-50',
|
|
25
|
+
false: '',
|
|
26
|
+
},
|
|
27
|
+
readonly: {
|
|
28
|
+
true: 'cursor-default border-dashed',
|
|
29
|
+
false: '',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
compoundVariants: [
|
|
33
|
+
// Only an interactive trigger gets the hover border and the focus ring.
|
|
34
|
+
{
|
|
35
|
+
disabled: false,
|
|
36
|
+
readonly: false,
|
|
37
|
+
class: 'hover:border-accent focus-visible:border-primary/80 focus-visible:shadow-none focus-visible:outline-none focus-visible:ring-4 focus-visible:ring-ring/30 focus-visible:ring-offset-0',
|
|
38
|
+
},
|
|
39
|
+
// Readonly still takes focus, but without the emphasis ring.
|
|
40
|
+
{
|
|
41
|
+
disabled: false,
|
|
42
|
+
readonly: true,
|
|
43
|
+
class: 'focus-visible:border-opacity-100 focus-visible:ring-0',
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
defaultVariants: { size: 'default', disabled: false, readonly: false },
|
|
47
|
+
});
|
|
48
|
+
const selectIconVariants = cva('ri-arrow-down-s-line ml-2 text-muted-foreground transition-transform duration-200', {
|
|
49
|
+
variants: {
|
|
50
|
+
size: {
|
|
51
|
+
xs: 'text-[14px]',
|
|
52
|
+
sm: 'text-[14px]',
|
|
53
|
+
default: 'text-[18px]',
|
|
54
|
+
lg: 'text-[18px]',
|
|
55
|
+
},
|
|
56
|
+
open: { true: 'rotate-180', false: '' },
|
|
57
|
+
muted: { true: 'opacity-30', false: '' },
|
|
58
|
+
},
|
|
59
|
+
defaultVariants: { size: 'default', open: false, muted: false },
|
|
60
|
+
});
|
|
61
|
+
/**
|
|
62
|
+
* A single-select listbox: a trigger that opens a floating panel of
|
|
63
|
+
* `tolle-select-item` options, with optional inline search. Implements
|
|
64
|
+
* `ControlValueAccessor`, so it works with `ngModel` and reactive forms.
|
|
65
|
+
*/
|
|
15
66
|
export class SelectComponent {
|
|
16
67
|
selectService;
|
|
17
68
|
cdr;
|
|
69
|
+
/** Text shown on the trigger when nothing is selected. @default 'Select an option' */
|
|
18
70
|
placeholder = 'Select an option';
|
|
71
|
+
/** Extra Tailwind classes merged onto the trigger via `cn()` (last-wins). @default '' */
|
|
19
72
|
class = '';
|
|
73
|
+
/** Disables the control and blocks opening the panel. @default false */
|
|
20
74
|
disabled = false;
|
|
75
|
+
/** Adds a search box that filters the projected options. @default false */
|
|
21
76
|
searchable = false;
|
|
77
|
+
/** Height and text size of the trigger. @default 'default' */
|
|
22
78
|
size = 'default';
|
|
79
|
+
/** Shows the current value but blocks opening the panel. @default false */
|
|
23
80
|
readonly = false;
|
|
81
|
+
/** Emitted with the chosen value whenever the selection changes. */
|
|
82
|
+
valueChange = new EventEmitter();
|
|
83
|
+
/** Emitted when the panel opens. */
|
|
84
|
+
opened = new EventEmitter();
|
|
85
|
+
/** Emitted when the panel closes. */
|
|
86
|
+
closed = new EventEmitter();
|
|
24
87
|
trigger;
|
|
25
88
|
popover;
|
|
26
89
|
container;
|
|
@@ -49,38 +112,46 @@ export class SelectComponent {
|
|
|
49
112
|
this.sub.add(this.selectService.selectedValue$.subscribe(val => {
|
|
50
113
|
this.value = val;
|
|
51
114
|
this.onChange(val);
|
|
115
|
+
this.valueChange.emit(val);
|
|
52
116
|
this.updateItemSelection();
|
|
117
|
+
this.cdr.markForCheck();
|
|
53
118
|
}));
|
|
54
119
|
this.sub.add(this.selectService.selectedLabel$.subscribe(label => {
|
|
55
120
|
this.selectedLabel = label;
|
|
56
121
|
this.close();
|
|
122
|
+
this.cdr.markForCheck();
|
|
57
123
|
}));
|
|
58
124
|
}
|
|
59
125
|
get computedTriggerClass() {
|
|
60
|
-
return cn(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
'focus-visible:shadow-none',
|
|
66
|
-
'focus-visible:border-primary/80'
|
|
67
|
-
], !(this.readonly || this.disabled) && 'hover:border-accent', this.disabled && [
|
|
68
|
-
'cursor-not-allowed opacity-50',
|
|
69
|
-
'border-opacity-50'
|
|
70
|
-
], this.readonly && [
|
|
71
|
-
'cursor-default',
|
|
72
|
-
'border-dashed',
|
|
73
|
-
!this.disabled && 'focus-visible:ring-0 focus-visible:border-opacity-100'
|
|
74
|
-
], this.class);
|
|
126
|
+
return cn(selectTriggerVariants({
|
|
127
|
+
size: this.size,
|
|
128
|
+
disabled: this.disabled,
|
|
129
|
+
readonly: this.readonly,
|
|
130
|
+
}), this.class);
|
|
75
131
|
}
|
|
76
132
|
get iconClass() {
|
|
77
|
-
return cn(
|
|
133
|
+
return cn(selectIconVariants({
|
|
134
|
+
size: this.size,
|
|
135
|
+
open: this.isOpen,
|
|
136
|
+
muted: this.disabled || this.readonly,
|
|
137
|
+
}));
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Under OnPush a `[class]` binding is applied through Angular's *styling*
|
|
141
|
+
* path, which writes the input but — unlike a plain property binding — never
|
|
142
|
+
* marks the component dirty. Without this the trigger would keep rendering
|
|
143
|
+
* the class it was born with. Covering every input here is cheap and leaves
|
|
144
|
+
* no second instance of that trap.
|
|
145
|
+
*/
|
|
146
|
+
ngOnChanges() {
|
|
147
|
+
this.cdr.markForCheck();
|
|
78
148
|
}
|
|
79
149
|
ngAfterContentInit() {
|
|
80
150
|
// Subscribe to items changes to handle dynamic content
|
|
81
151
|
this.itemsChangeSub = this.items.changes.subscribe(() => {
|
|
82
152
|
this.updateItemSelection();
|
|
83
153
|
this.applyPendingValue();
|
|
154
|
+
this.cdr.markForCheck();
|
|
84
155
|
});
|
|
85
156
|
// Apply initial selection if items are already available
|
|
86
157
|
this.updateItemSelection();
|
|
@@ -103,15 +174,6 @@ export class SelectComponent {
|
|
|
103
174
|
});
|
|
104
175
|
}
|
|
105
176
|
}
|
|
106
|
-
syncSelectedLabel() {
|
|
107
|
-
if (this.items) {
|
|
108
|
-
const found = this.items.find(i => i.value === this.value);
|
|
109
|
-
if (found) {
|
|
110
|
-
this.selectedLabel = found.getLabel();
|
|
111
|
-
this.cdr.markForCheck();
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
177
|
_outsideClickHandler = (event) => {
|
|
116
178
|
if (!this.trigger.nativeElement.contains(event.target) && !this.popover?.nativeElement.contains(event.target)) {
|
|
117
179
|
this.close();
|
|
@@ -123,49 +185,60 @@ export class SelectComponent {
|
|
|
123
185
|
this.isOpen ? this.close() : this.open();
|
|
124
186
|
}
|
|
125
187
|
open() {
|
|
188
|
+
const wasOpen = this.isOpen;
|
|
126
189
|
this.isOpen = true;
|
|
127
190
|
this.trigger.nativeElement.focus();
|
|
191
|
+
if (!wasOpen)
|
|
192
|
+
this.opened.emit();
|
|
193
|
+
this.cdr.markForCheck();
|
|
128
194
|
requestAnimationFrame(() => {
|
|
129
195
|
this.updatePosition();
|
|
130
|
-
document.addEventListener('
|
|
196
|
+
document.addEventListener('pointerdown', this._outsideClickHandler, true);
|
|
131
197
|
this.initActiveAfterOpen();
|
|
198
|
+
this.cdr.markForCheck();
|
|
132
199
|
});
|
|
133
200
|
}
|
|
134
201
|
close() {
|
|
202
|
+
const wasOpen = this.isOpen;
|
|
135
203
|
this.isOpen = false;
|
|
136
204
|
this.searchQuery = '';
|
|
137
205
|
this.onSearchChange('');
|
|
138
206
|
this.resetActive();
|
|
139
207
|
if (this.cleanupAutoUpdate)
|
|
140
208
|
this.cleanupAutoUpdate();
|
|
141
|
-
document.removeEventListener('
|
|
209
|
+
document.removeEventListener('pointerdown', this._outsideClickHandler, true);
|
|
210
|
+
if (wasOpen)
|
|
211
|
+
this.closed.emit();
|
|
212
|
+
this.cdr.markForCheck();
|
|
142
213
|
}
|
|
143
214
|
updatePosition() {
|
|
144
215
|
if (!this.trigger || !this.popover)
|
|
145
216
|
return;
|
|
146
217
|
this.cleanupAutoUpdate = autoUpdate(this.trigger.nativeElement, this.popover.nativeElement, () => {
|
|
147
218
|
computePosition(this.trigger.nativeElement, this.popover.nativeElement, {
|
|
148
|
-
strategy: 'fixed',
|
|
219
|
+
strategy: 'fixed',
|
|
149
220
|
placement: 'bottom-start',
|
|
150
221
|
middleware: [
|
|
151
222
|
offset(4),
|
|
152
223
|
flip(),
|
|
153
224
|
shift({ padding: 8 }),
|
|
154
|
-
//
|
|
225
|
+
// Match the panel to the trigger width and cap its height to the
|
|
226
|
+
// space actually available, so the list scrolls instead of
|
|
227
|
+
// overflowing.
|
|
155
228
|
size({
|
|
156
229
|
apply({ rects, elements, availableHeight }) {
|
|
157
230
|
Object.assign(elements.floating.style, {
|
|
158
|
-
width:
|
|
159
|
-
maxHeight:
|
|
231
|
+
width: rects.reference.width + 'px',
|
|
232
|
+
maxHeight: availableHeight + 'px'
|
|
160
233
|
});
|
|
161
234
|
},
|
|
162
235
|
}),
|
|
163
236
|
],
|
|
164
237
|
}).then(({ x, y, strategy }) => {
|
|
165
238
|
Object.assign(this.popover.nativeElement.style, {
|
|
166
|
-
position: strategy,
|
|
167
|
-
left:
|
|
168
|
-
top:
|
|
239
|
+
position: strategy,
|
|
240
|
+
left: x + 'px',
|
|
241
|
+
top: y + 'px',
|
|
169
242
|
visibility: 'visible',
|
|
170
243
|
});
|
|
171
244
|
});
|
|
@@ -185,6 +258,7 @@ export class SelectComponent {
|
|
|
185
258
|
// Re-anchor the active option to the first visible match while open.
|
|
186
259
|
if (this.isOpen)
|
|
187
260
|
this.setActive(0);
|
|
261
|
+
this.cdr.markForCheck();
|
|
188
262
|
}
|
|
189
263
|
// ---- Keyboard navigation (WAI-ARIA listbox pattern) ----
|
|
190
264
|
get navigableItems() {
|
|
@@ -201,6 +275,7 @@ export class SelectComponent {
|
|
|
201
275
|
const activeItem = this.activeIndex >= 0 ? list[this.activeIndex] ?? null : null;
|
|
202
276
|
this.items?.forEach(i => (i.active = i === activeItem));
|
|
203
277
|
this.syncActiveDescendant();
|
|
278
|
+
this.cdr.markForCheck();
|
|
204
279
|
}
|
|
205
280
|
syncActiveDescendant() {
|
|
206
281
|
const input = this.searchInput?.nativeElement?.querySelector('input');
|
|
@@ -370,33 +445,36 @@ export class SelectComponent {
|
|
|
370
445
|
const found = this.items.find(i => i.value === value);
|
|
371
446
|
if (found) {
|
|
372
447
|
this.selectedLabel = found.getLabel();
|
|
373
|
-
this.cdr.markForCheck();
|
|
374
448
|
}
|
|
375
449
|
}
|
|
376
450
|
else {
|
|
377
451
|
// Queue the value for when items become available
|
|
378
452
|
this.pendingValue = value;
|
|
379
453
|
}
|
|
454
|
+
this.cdr.markForCheck();
|
|
380
455
|
}
|
|
381
456
|
registerOnChange(fn) { this.onChange = fn; }
|
|
382
457
|
registerOnTouched(fn) { this.onTouched = fn; }
|
|
383
|
-
setDisabledState(isDisabled) {
|
|
458
|
+
setDisabledState(isDisabled) {
|
|
459
|
+
this.disabled = isDisabled;
|
|
460
|
+
this.cdr.markForCheck();
|
|
461
|
+
}
|
|
384
462
|
ngOnDestroy() {
|
|
385
463
|
this.sub.unsubscribe();
|
|
386
464
|
this.itemsChangeSub?.unsubscribe();
|
|
387
465
|
if (this.cleanupAutoUpdate)
|
|
388
466
|
this.cleanupAutoUpdate();
|
|
389
|
-
document.removeEventListener('
|
|
467
|
+
document.removeEventListener('pointerdown', this._outsideClickHandler, true);
|
|
390
468
|
}
|
|
391
469
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectComponent, deps: [{ token: i1.SelectService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
392
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SelectComponent, isStandalone: true, selector: "tolle-select", inputs: { placeholder: "placeholder", class: "class", disabled: "disabled", searchable: "searchable", size: "size", readonly: "readonly" }, providers: [
|
|
470
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SelectComponent, isStandalone: true, selector: "tolle-select", inputs: { placeholder: "placeholder", class: "class", disabled: "disabled", searchable: "searchable", size: "size", readonly: "readonly" }, outputs: { valueChange: "valueChange", opened: "opened", closed: "closed" }, providers: [
|
|
393
471
|
SelectService,
|
|
394
472
|
{
|
|
395
473
|
provide: NG_VALUE_ACCESSOR,
|
|
396
474
|
useExisting: forwardRef(() => SelectComponent),
|
|
397
|
-
multi: true
|
|
398
|
-
}
|
|
399
|
-
], queries: [{ propertyName: "items", predicate: SelectItemComponent, descendants: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "popover", first: true, predicate: ["popover"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
475
|
+
multi: true,
|
|
476
|
+
},
|
|
477
|
+
], queries: [{ propertyName: "items", predicate: SelectItemComponent, descendants: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "popover", first: true, predicate: ["popover"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: `
|
|
400
478
|
<div class="relative w-full" #container>
|
|
401
479
|
<button
|
|
402
480
|
type="button"
|
|
@@ -443,17 +521,17 @@ export class SelectComponent {
|
|
|
443
521
|
</div>
|
|
444
522
|
</div>
|
|
445
523
|
</div>
|
|
446
|
-
`, isInline: true, styles: [".hidden-dropdown{display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: InputComponent, selector: "tolle-input", inputs: ["id", "label", "hint", "errorMessage", "type", "placeholder", "size", "containerClass", "class", "disabled", "readonly", "error", "hideHintOnFocus"] }] });
|
|
524
|
+
`, isInline: true, styles: [":host{display:block}\n", ".hidden-dropdown{display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: InputComponent, selector: "tolle-input", inputs: ["id", "label", "hint", "errorMessage", "type", "placeholder", "size", "containerClass", "class", "disabled", "readonly", "error", "hideHintOnFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
447
525
|
}
|
|
448
526
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectComponent, decorators: [{
|
|
449
527
|
type: Component,
|
|
450
|
-
args: [{ selector: 'tolle-select', standalone: true, imports: [CommonModule, FormsModule, InputComponent], providers: [
|
|
528
|
+
args: [{ selector: 'tolle-select', standalone: true, imports: [CommonModule, FormsModule, InputComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
451
529
|
SelectService,
|
|
452
530
|
{
|
|
453
531
|
provide: NG_VALUE_ACCESSOR,
|
|
454
532
|
useExisting: forwardRef(() => SelectComponent),
|
|
455
|
-
multi: true
|
|
456
|
-
}
|
|
533
|
+
multi: true,
|
|
534
|
+
},
|
|
457
535
|
], template: `
|
|
458
536
|
<div class="relative w-full" #container>
|
|
459
537
|
<button
|
|
@@ -501,7 +579,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
501
579
|
</div>
|
|
502
580
|
</div>
|
|
503
581
|
</div>
|
|
504
|
-
`, styles: [".hidden-dropdown{display:none!important}\n"] }]
|
|
582
|
+
`, styles: [":host{display:block}\n", ".hidden-dropdown{display:none!important}\n"] }]
|
|
505
583
|
}], ctorParameters: () => [{ type: i1.SelectService }, { type: i0.ChangeDetectorRef }], propDecorators: { placeholder: [{
|
|
506
584
|
type: Input
|
|
507
585
|
}], class: [{
|
|
@@ -514,6 +592,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
514
592
|
type: Input
|
|
515
593
|
}], readonly: [{
|
|
516
594
|
type: Input
|
|
595
|
+
}], valueChange: [{
|
|
596
|
+
type: Output
|
|
597
|
+
}], opened: [{
|
|
598
|
+
type: Output
|
|
599
|
+
}], closed: [{
|
|
600
|
+
type: Output
|
|
517
601
|
}], trigger: [{
|
|
518
602
|
type: ViewChild,
|
|
519
603
|
args: ['trigger']
|
|
@@ -530,4 +614,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
530
614
|
type: ContentChildren,
|
|
531
615
|
args: [SelectItemComponent, { descendants: true }]
|
|
532
616
|
}] } });
|
|
533
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvc2VsZWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFFVCxlQUFlLEVBSWhCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFvRW5ELE1BQU0sT0FBTyxlQUFlO0lBcUNoQjtJQUNBO0lBckNELFdBQVcsR0FBRyxrQkFBa0IsQ0FBQztJQUNqQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLElBQUksR0FBbUMsU0FBUyxDQUFDO0lBQ2pELFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFSixPQUFPLENBQWM7SUFDckIsT0FBTyxDQUFjO0lBQ25CLFNBQVMsQ0FB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cHV0LFxuICBmb3J3YXJkUmVmLFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIE9uRGVzdHJveSxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG4vLyAxLiBJbXBvcnQgJ3NpemUnIG1pZGRsZXdhcmVcbmltcG9ydCB7IGNvbXB1dGVQb3NpdGlvbiwgZmxpcCwgc2hpZnQsIG9mZnNldCwgYXV0b1VwZGF0ZSwgc2l6ZSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcbmltcG9ydCB7IFNlbGVjdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL3NlbGVjdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNlbGVjdFNlcnZpY2UgfSBmcm9tICcuL3NlbGVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9pbnB1dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1zZWxlY3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgSW5wdXRDb21wb25lbnRdLFxuICBwcm92aWRlcnM6IFtcbiAgICBTZWxlY3RTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2VsZWN0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBzdHlsZXM6IFtgXG4gICAgLmhpZGRlbi1kcm9wZG93biB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICBgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsXCIgI2NvbnRhaW5lcj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICN0cmlnZ2VyXG4gICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiaXNPcGVuID8gYWN0aXZlRGVzY2VuZGFudElkIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmRhdGEtc3RhdGVdPVwiaXNPcGVuID8gJ29wZW4nIDogJ2Nsb3NlZCdcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvblRyaWdnZXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbY2xhc3NdPVwiY29tcHV0ZWRUcmlnZ2VyQ2xhc3NcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRydW5jYXRlXCIgW2NsYXNzLnRleHQtbXV0ZWQtZm9yZWdyb3VuZF09XCIhc2VsZWN0ZWRMYWJlbFwiPlxuICAgICAgICAgIHt7IHNlbGVjdGVkTGFiZWwgfHwgcGxhY2Vob2xkZXIgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aSBbY2xhc3NdPVwiaWNvbkNsYXNzXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgI3BvcG92ZXJcbiAgICAgICAgW2NsYXNzLmhpZGRlbi1kcm9wZG93bl09XCIhaXNPcGVuXCJcbiAgICAgICAgY2xhc3M9XCJmaXhlZCBiZy1wb3BvdmVyIHotWzk5OV0gb3ZlcmZsb3ctYXV0byBmbGV4IGZsZXgtY29sIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ib3JkZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgc2hhZG93LW1kXCJcbiAgICAgICAgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47IHRvcDogMDsgbGVmdDogMDtcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaGFibGVcIiBjbGFzcz1cInAtMiBib3JkZXItYiBib3JkZXItYm9yZGVyIGJnLXBvcG92ZXIgaC1hdXRvXCI+XG4gICAgICAgICAgPHRvbGxlLWlucHV0XG4gICAgICAgICAgICAjc2VhcmNoSW5wdXRcbiAgICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFF1ZXJ5XCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25TZWFyY2hLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxpIHByZWZpeCBjbGFzcz1cInJpLXNlYXJjaC1saW5lXCI+PC9pPlxuICAgICAgICAgIDwvdG9sbGUtaW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgcm9sZT1cImxpc3Rib3hcIiBjbGFzcz1cInAtMSBvdmVyZmxvdy15LWF1dG8gZ3JvdyBoLWZ1bGwgdy1mdWxsXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJub1Jlc3VsdHNcIiBjbGFzcz1cInB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgIE5vIHJlc3VsdHMgZm91bmQuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QgYW4gb3B0aW9uJztcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgc2VhcmNoYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBzaXplOiAneHMnIHwgJ3NtJyB8ICdkZWZhdWx0JyB8ICdsZycgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgndHJpZ2dlcicpIHRyaWdnZXIhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdwb3BvdmVyJykgcG9wb3ZlciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHNlYXJjaElucHV0PzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBDb250ZW50Q2hpbGRyZW4oU2VsZWN0SXRlbUNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBpdGVtcyE6IFF1ZXJ5TGlzdDxTZWxlY3RJdGVtQ29tcG9uZW50PjtcblxuICBwcml2YXRlIHN1YiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBpdGVtc0NoYW5nZVN1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBwZW5kaW5nVmFsdWU6IGFueSA9IHVuZGVmaW5lZDtcblxuICBzZWFyY2hRdWVyeSA9ICcnO1xuICBub1Jlc3VsdHMgPSBmYWxzZTtcbiAgaXNPcGVuID0gZmFsc2U7XG4gIHZhbHVlOiBhbnkgPSBudWxsO1xuICBzZWxlY3RlZExhYmVsID0gJyc7XG4gIGNsZWFudXBBdXRvVXBkYXRlPzogKCkgPT4gdm9pZDtcblxuICAvLyBLZXlib2FyZCBuYXZpZ2F0aW9uIChhY3RpdmUtZGVzY2VuZGFudCkgc3RhdGVcbiAgYWN0aXZlSW5kZXggPSAtMTtcbiAgcHJpdmF0ZSB0eXBlYWhlYWRCdWZmZXIgPSAnJztcbiAgcHJpdmF0ZSB0eXBlYWhlYWRUaW1lID0gMDtcbiAgcHJpdmF0ZSBwZW5kaW5nVHlwZWFoZWFkQ2hhciA9ICcnO1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xuXG4gIHByb3RlY3RlZCBjbiA9IGNuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VsZWN0U2VydmljZTogU2VsZWN0U2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5zdWIuYWRkKFxuICAgICAgdGhpcy5zZWxlY3RTZXJ2aWNlLnNlbGVjdGVkVmFsdWUkLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHZhbCk7XG4gICAgICAgIHRoaXMudXBkYXRlSXRlbVNlbGVjdGlvbigpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWIuYWRkKFxuICAgICAgdGhpcy5zZWxlY3RTZXJ2aWNlLnNlbGVjdGVkTGFiZWwkLnN1YnNjcmliZShsYWJlbCA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9IGxhYmVsO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXQgY29tcHV0ZWRUcmlnZ2VyQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ2ZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcm91bmRlZC1tZCBib3JkZXIgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwJyxcbiAgICAgICdiZy1iYWNrZ3JvdW5kIHRleHQtZm9yZWdyb3VuZCcsXG4gICAgICAnYm9yZGVyLWlucHV0IHNoYWRvdy1zbScsXG4gICAgICB0aGlzLnNpemUgPT09ICd4cycgJiYgJ2gtOCBweC0yIHRleHQteHMnLFxuICAgICAgdGhpcy5zaXplID09PSAnc20nICYmICdoLTkgcHgtMyB0ZXh0LXNtJyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2RlZmF1bHQnICYmICdoLTEwIHB4LTMgdGV4dC1zbScsXG4gICAgICB0aGlzLnNpemUgPT09ICdsZycgJiYgJ2gtMTEgcHgtNCB0ZXh0LWJhc2UnLFxuICAgICAgISh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQpICYmIFtcbiAgICAgICAgJ2ZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lJyxcbiAgICAgICAgJ2ZvY3VzLXZpc2libGU6cmluZy00JyxcbiAgICAgICAgJ2ZvY3VzLXZpc2libGU6cmluZy1yaW5nLzMwJyxcbiAgICAgICAgJ2ZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMCcsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOnNoYWRvdy1ub25lJyxcbiAgICAgICAgJ2ZvY3VzLXZpc2libGU6Ym9yZGVyLXByaW1hcnkvODAnXG4gICAgICBdLFxuICAgICAgISh0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQpICYmICdob3Zlcjpib3JkZXItYWNjZW50JyxcbiAgICAgIHRoaXMuZGlzYWJsZWQgJiYgW1xuICAgICAgICAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTAnLFxuICAgICAgICAnYm9yZGVyLW9wYWNpdHktNTAnXG4gICAgICBdLFxuICAgICAgdGhpcy5yZWFkb25seSAmJiBbXG4gICAgICAgICdjdXJzb3ItZGVmYXVsdCcsXG4gICAgICAgICdib3JkZXItZGFzaGVkJyxcbiAgICAgICAgIXRoaXMuZGlzYWJsZWQgJiYgJ2ZvY3VzLXZpc2libGU6cmluZy0wIGZvY3VzLXZpc2libGU6Ym9yZGVyLW9wYWNpdHktMTAwJ1xuICAgICAgXSxcbiAgICAgIHRoaXMuY2xhc3NcbiAgICApO1xuICB9XG5cbiAgZ2V0IGljb25DbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICAncmktYXJyb3ctZG93bi1zLWxpbmUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG1sLTIgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMjAwJyxcbiAgICAgIHRoaXMuaXNPcGVuID8gJ3JvdGF0ZS0xODAnIDogJycsXG4gICAgICAodGhpcy5zaXplID09PSAneHMnIHx8IHRoaXMuc2l6ZSA9PT0gJ3NtJykgPyAndGV4dC1bMTRweF0nIDogJ3RleHQtWzE4cHhdJyxcbiAgICAgICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpICYmICdvcGFjaXR5LTMwJ1xuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgLy8gU3Vic2NyaWJlIHRvIGl0ZW1zIGNoYW5nZXMgdG8gaGFuZGxlIGR5bmFtaWMgY29udGVudFxuICAgIHRoaXMuaXRlbXNDaGFuZ2VTdWIgPSB0aGlzLml0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlSXRlbVNlbGVjdGlvbigpO1xuICAgICAgdGhpcy5hcHBseVBlbmRpbmdWYWx1ZSgpO1xuICAgIH0pO1xuXG4gICAgLy8gQXBwbHkgaW5pdGlhbCBzZWxlY3Rpb24gaWYgaXRlbXMgYXJlIGFscmVhZHkgYXZhaWxhYmxlXG4gICAgdGhpcy51cGRhdGVJdGVtU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5hcHBseVBlbmRpbmdWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVBlbmRpbmdWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLml0ZW1zLmZpbmQoaSA9PiBpLnZhbHVlID09PSB0aGlzLnBlbmRpbmdWYWx1ZSk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gZm91bmQuZ2V0TGFiZWwoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnBlbmRpbmdWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUl0ZW1TZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXRlbXMpIHtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9IGl0ZW0udmFsdWUgPT09IHRoaXMudmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN5bmNTZWxlY3RlZExhYmVsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLml0ZW1zKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuaXRlbXMuZmluZChpID0+IGkudmFsdWUgPT09IHRoaXMudmFsdWUpO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9IGZvdW5kLmdldExhYmVsKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX291dHNpZGVDbGlja0hhbmRsZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoIXRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiYgIXRoaXMucG9wb3Zlcj8ubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9O1xuXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgdGhpcy5pc09wZW4gPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKTtcbiAgfVxuXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgIHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX291dHNpZGVDbGlja0hhbmRsZXIpO1xuICAgICAgdGhpcy5pbml0QWN0aXZlQWZ0ZXJPcGVuKCk7XG4gICAgfSk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcbiAgICB0aGlzLm9uU2VhcmNoQ2hhbmdlKCcnKTtcbiAgICB0aGlzLnJlc2V0QWN0aXZlKCk7XG4gICAgaWYgKHRoaXMuY2xlYW51cEF1dG9VcGRhdGUpIHRoaXMuY2xlYW51cEF1dG9VcGRhdGUoKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLl9vdXRzaWRlQ2xpY2tIYW5kbGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLnRyaWdnZXIgfHwgIXRoaXMucG9wb3ZlcikgcmV0dXJuO1xuXG4gICAgdGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSA9IGF1dG9VcGRhdGUoXG4gICAgICB0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudCxcbiAgICAgIHRoaXMucG9wb3Zlci5uYXRpdmVFbGVtZW50LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb21wdXRlUG9zaXRpb24odGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQsIHRoaXMucG9wb3Zlci5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgICAgc3RyYXRlZ3k6ICdmaXhlZCcsIC8vIDMuIFVzZSBmaXhlZCBzdHJhdGVneVxuICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbS1zdGFydCcsXG4gICAgICAgICAgbWlkZGxld2FyZTogW1xuICAgICAgICAgICAgb2Zmc2V0KDQpLFxuICAgICAgICAgICAgZmxpcCgpLFxuICAgICAgICAgICAgc2hpZnQoeyBwYWRkaW5nOiA4IH0pLFxuICAgICAgICAgICAgLy8gNC4gVXNlIHNpemUgbWlkZGxld2FyZSB0byBzeW5jIHdpZHRoIGFuZCBoYW5kbGUgY29uc3RyYWludHNcbiAgICAgICAgICAgIHNpemUoe1xuICAgICAgICAgICAgICBhcHBseSh7IHJlY3RzLCBlbGVtZW50cywgYXZhaWxhYmxlSGVpZ2h0IH0pIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnRzLmZsb2F0aW5nLnN0eWxlLCB7XG4gICAgICAgICAgICAgICAgICB3aWR0aDogYCR7cmVjdHMucmVmZXJlbmNlLndpZHRofXB4YCxcbiAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogYCR7YXZhaWxhYmxlSGVpZ2h0fXB4YFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSkudGhlbigoeyB4LCB5LCBzdHJhdGVneSB9KSA9PiB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnBvcG92ZXIubmF0aXZlRWxlbWVudC5zdHlsZSwge1xuICAgICAgICAgICAgcG9zaXRpb246IHN0cmF0ZWd5LCAvLyA1LiBBcHBseSBzdHJhdGVneSB0byBzdHlsZVxuICAgICAgICAgICAgbGVmdDogYCR7eH1weGAsXG4gICAgICAgICAgICB0b3A6IGAke3l9cHhgLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogJ3Zpc2libGUnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgb25TZWFyY2hDaGFuZ2UocXVlcnk6IHN0cmluZykge1xuICAgIGNvbnN0IGZpbHRlciA9IChxdWVyeSB8fCAnJykudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgbGV0IHZpc2libGVDb3VudCA9IDA7XG5cbiAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gaXRlbS5nZXRMYWJlbCgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBpc1Zpc2libGUgPSB0ZXh0LmluY2x1ZGVzKGZpbHRlcik7XG4gICAgICBpdGVtLmhpZGRlbiA9ICFpc1Zpc2libGU7XG4gICAgICBpZiAoaXNWaXNpYmxlKSB2aXNpYmxlQ291bnQrKztcbiAgICB9KTtcblxuICAgIHRoaXMubm9SZXN1bHRzID0gdmlzaWJsZUNvdW50ID09PSAwICYmIGZpbHRlciAhPT0gJyc7XG5cbiAgICAvLyBSZS1hbmNob3IgdGhlIGFjdGl2ZSBvcHRpb24gdG8gdGhlIGZpcnN0IHZpc2libGUgbWF0Y2ggd2hpbGUgb3Blbi5cbiAgICBpZiAodGhpcy5pc09wZW4pIHRoaXMuc2V0QWN0aXZlKDApO1xuICB9XG5cbiAgLy8gLS0tLSBLZXlib2FyZCBuYXZpZ2F0aW9uIChXQUktQVJJQSBsaXN0Ym94IHBhdHRlcm4pIC0tLS1cblxuICBwcml2YXRlIGdldCBuYXZpZ2FibGVJdGVtcygpOiBTZWxlY3RJdGVtQ29tcG9uZW50W10ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zID8gdGhpcy5pdGVtcy5maWx0ZXIoaSA9PiAhaS5oaWRkZW4gJiYgIWkuZGlzYWJsZWQpIDogW107XG4gIH1cblxuICBnZXQgYWN0aXZlRGVzY2VuZGFudElkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLm5hdmlnYWJsZUl0ZW1zO1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUluZGV4ID49IDAgJiYgdGhpcy5hY3RpdmVJbmRleCA8IGxpc3QubGVuZ3RoXG4gICAgICA/IGxpc3RbdGhpcy5hY3RpdmVJbmRleF0uaWRcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQWN0aXZlU3RhdGVzKCkge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLm5hdmlnYWJsZUl0ZW1zO1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLmFjdGl2ZUluZGV4ID49IDAgPyBsaXN0W3RoaXMuYWN0aXZlSW5kZXhdID8/IG51bGwgOiBudWxsO1xuICAgIHRoaXMuaXRlbXM/LmZvckVhY2goaSA9PiAoaS5hY3RpdmUgPSBpID09PSBhY3RpdmVJdGVtKSk7XG4gICAgdGhpcy5zeW5jQWN0aXZlRGVzY2VuZGFudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jQWN0aXZlRGVzY2VuZGFudCgpIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuc2VhcmNoSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgaWYgKCFpbnB1dCkgcmV0dXJuO1xuICAgIGNvbnN0IGlkID0gdGhpcy5hY3RpdmVEZXNjZW5kYW50SWQ7XG4gICAgaWYgKGlkKSBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIGlkKTtcbiAgICBlbHNlIGlucHV0LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZShpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMubmF2aWdhYmxlSXRlbXM7XG4gICAgaWYgKCFsaXN0Lmxlbmd0aCkge1xuICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IC0xO1xuICAgICAgdGhpcy51cGRhdGVBY3RpdmVTdGF0ZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBsaXN0Lmxlbmd0aCAtIDEpKTtcbiAgICB0aGlzLnVwZGF0ZUFjdGl2ZVN0YXRlcygpO1xuICAgIGxpc3RbdGhpcy5hY3RpdmVJbmRleF0/LnNjcm9sbEludG9BY3RpdmVWaWV3KCk7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZUl0ZW0oaXRlbTogU2VsZWN0SXRlbUNvbXBvbmVudCkge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMubmF2aWdhYmxlSXRlbXMuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaWR4ID49IDApIHRoaXMuc2V0QWN0aXZlKGlkeCk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVBY3RpdmUoZGVsdGE6IG51bWJlcikge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLm5hdmlnYWJsZUl0ZW1zO1xuICAgIGlmICghbGlzdC5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5hY3RpdmVJbmRleCA8IDAgPyAoZGVsdGEgPiAwID8gMCA6IGxpc3QubGVuZ3RoIC0gMSkgOiB0aGlzLmFjdGl2ZUluZGV4ICsgZGVsdGE7XG4gICAgdGhpcy5zZXRBY3RpdmUobmV4dCk7IC8vIHNldEFjdGl2ZSBjbGFtcHMgKG5vIHdyYXAsIG1hdGNoaW5nIHNoYWRjbilcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlVG9TZWxlY3RlZE9yRmlyc3QoKSB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMubmF2aWdhYmxlSXRlbXM7XG4gICAgaWYgKCFsaXN0Lmxlbmd0aCkge1xuICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IC0xO1xuICAgICAgdGhpcy51cGRhdGVBY3RpdmVTdGF0ZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsSWR4ID0gbGlzdC5maW5kSW5kZXgoaSA9PiBpLnZhbHVlID09PSB0aGlzLnZhbHVlKTtcbiAgICB0aGlzLnNldEFjdGl2ZShzZWxJZHggPj0gMCA/IHNlbElkeCA6IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0QWN0aXZlQWZ0ZXJPcGVuKCkge1xuICAgIGlmICh0aGlzLnBlbmRpbmdUeXBlYWhlYWRDaGFyKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5wZW5kaW5nVHlwZWFoZWFkQ2hhcjtcbiAgICAgIHRoaXMucGVuZGluZ1R5cGVhaGVhZENoYXIgPSAnJztcbiAgICAgIHRoaXMuc2V0QWN0aXZlVG9TZWxlY3RlZE9yRmlyc3QoKTtcbiAgICAgIHRoaXMudHlwZWFoZWFkKGMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldEFjdGl2ZVRvU2VsZWN0ZWRPckZpcnN0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEFjdGl2ZSgpIHtcbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gLTE7XG4gICAgdGhpcy50eXBlYWhlYWRCdWZmZXIgPSAnJztcbiAgICB0aGlzLnBlbmRpbmdUeXBlYWhlYWRDaGFyID0gJyc7XG4gICAgdGhpcy5pdGVtcz8uZm9yRWFjaChpID0+IChpLmFjdGl2ZSA9IGZhbHNlKSk7XG4gIH1cblxuICBwcml2YXRlIGlzVHlwZWFoZWFkQ2hhcihldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBldmVudC5rZXkubGVuZ3RoID09PSAxICYmIGV2ZW50LmtleSAhPT0gJyAnICYmICFldmVudC5jdHJsS2V5ICYmICFldmVudC5tZXRhS2V5ICYmICFldmVudC5hbHRLZXk7XG4gIH1cblxuICBwcml2YXRlIHR5cGVhaGVhZChjaGFyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIC8vIFJlc2V0IHRoZSBidWZmZXIgYmFzZWQgb24gZWxhcHNlZCB0aW1lIChjb3JyZWN0bmVzcyBpcyBub3QgdGltZXItZHJpdmVuKS5cbiAgICBpZiAobm93IC0gdGhpcy50eXBlYWhlYWRUaW1lID4gNTAwKSB0aGlzLnR5cGVhaGVhZEJ1ZmZlciA9ICcnO1xuICAgIHRoaXMudHlwZWFoZWFkVGltZSA9IG5vdztcbiAgICB0aGlzLnR5cGVhaGVhZEJ1ZmZlciArPSBjaGFyLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWF0Y2ggPSB0aGlzLm5hdmlnYWJsZUl0ZW1zLmZpbmQoaSA9PlxuICAgICAgaS5nZXRMYWJlbCgpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCh0aGlzLnR5cGVhaGVhZEJ1ZmZlcilcbiAgICApO1xuICAgIGlmIChtYXRjaCkgdGhpcy5zZXRBY3RpdmVJdGVtKG1hdGNoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0QWN0aXZlKCkge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLm5hdmlnYWJsZUl0ZW1zW3RoaXMuYWN0aXZlSW5kZXhdO1xuICAgIGlmICghaXRlbSkgcmV0dXJuO1xuICAgIC8vIFNpbmdsZS1zZWxlY3Q6IG5vdGlmeSBwYXJlbnQgKHdoaWNoIGNsb3NlcyBhbmQgc3luY3MgdGhlIGxhYmVsKS5cbiAgICB0aGlzLnNlbGVjdFNlcnZpY2UucmVnaXN0ZXJDbGljayhpdGVtLnZhbHVlLCBpdGVtLmdldExhYmVsKCkpO1xuICAgIHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBvblRyaWdnZXJLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkgcmV0dXJuO1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcblxuICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgIGlmIChrZXkgPT09ICdBcnJvd0Rvd24nIHx8IGtleSA9PT0gJ0Fycm93VXAnIHx8IGtleSA9PT0gJ0VudGVyJyB8fCBrZXkgPT09ICcgJyB8fCBrZXkgPT09ICdIb21lJyB8fCBrZXkgPT09ICdFbmQnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1R5cGVhaGVhZENoYXIoZXZlbnQpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucGVuZGluZ1R5cGVhaGVhZENoYXIgPSBrZXk7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLm1vdmVBY3RpdmUoMSk7IGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dVcCc6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMubW92ZUFjdGl2ZSgtMSk7IGJyZWFrO1xuICAgICAgY2FzZSAnSG9tZSc6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc2V0QWN0aXZlKDApOyBicmVhaztcbiAgICAgIGNhc2UgJ0VuZCc6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc2V0QWN0aXZlKHRoaXMubmF2aWdhYmxlSXRlbXMubGVuZ3RoIC0gMSk7IGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnICc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0QWN0aXZlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodGhpcy5pc1R5cGVhaGVhZENoYXIoZXZlbnQpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnR5cGVhaGVhZChrZXkpO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gS2V5ZG93biB3aGlsZSB0aGUgKG9wdGlvbmFsKSBzZWFyY2ggaW5wdXQgaXMgZm9jdXNlZC4gQXJyb3dzL0VudGVyL0VzY2FwZVxuICAvLyBkcml2ZSB0aGUgbGlzdDsgb3RoZXIga2V5cyBmYWxsIHRocm91Z2ggc28gdGhlIHVzZXIgY2FuIHR5cGUgdG8gZmlsdGVyLlxuICBvblNlYXJjaEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuKSByZXR1cm47XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMubW92ZUFjdGl2ZSgxKTsgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1VwJzogZXZlbnQucHJldmVudERlZmF1bHQoKTsgdGhpcy5tb3ZlQWN0aXZlKC0xKTsgYnJlYWs7XG4gICAgICBjYXNlICdFbnRlcic6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc2VsZWN0QWN0aXZlKCk7IGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVJdGVtU2VsZWN0aW9uKCk7XG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuaXRlbXMuZmluZChpID0+IGkudmFsdWUgPT09IHZhbHVlKTtcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWwgPSBmb3VuZC5nZXRMYWJlbCgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUXVldWUgdGhlIHZhbHVlIGZvciB3aGVuIGl0ZW1zIGJlY29tZSBhdmFpbGFibGVcbiAgICAgIHRoaXMucGVuZGluZ1ZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7IHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkOyB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLml0ZW1zQ2hhbmdlU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIGlmICh0aGlzLmNsZWFudXBBdXRvVXBkYXRlKSB0aGlzLmNsZWFudXBBdXRvVXBkYXRlKCk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5fb3V0c2lkZUNsaWNrSGFuZGxlcik7XG4gIH1cbn1cbiJdfQ==
|
|
617
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvc2VsZWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxFQUVULGVBQWUsRUFJZix1QkFBdUIsR0FFeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUYsT0FBTyxFQUFFLEdBQUcsRUFBcUIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFFbkQsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQy9CLDZJQUE2SSxFQUM3STtJQUNFLFFBQVEsRUFBRTtRQUNSLElBQUksRUFBRTtZQUNKLEVBQUUsRUFBRSxrQkFBa0I7WUFDdEIsRUFBRSxFQUFFLGtCQUFrQjtZQUN0QixPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLEVBQUUsRUFBRSxxQkFBcUI7U0FDMUI7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cEIsTUFBTTtnQkFFRyxNQUFNO3NCQUFmLE1BQU07Z0JBRUcsTUFBTTtzQkFBZixNQUFNO2dCQUVlLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDRSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBQ0ksU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUMwQixXQUFXO3NCQUExRCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ2UsS0FBSztzQkFBakUsZUFBZTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkLFxuICBPbkRlc3Ryb3ksXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBBZnRlckNvbnRlbnRJbml0LFxuICBPbkNoYW5nZXMsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNvbXB1dGVQb3NpdGlvbiwgZmxpcCwgc2hpZnQsIG9mZnNldCwgYXV0b1VwZGF0ZSwgc2l6ZSB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xuaW1wb3J0IHsgY3ZhLCB0eXBlIFZhcmlhbnRQcm9wcyB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuaW1wb3J0IHsgU2VsZWN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vc2VsZWN0LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2VsZWN0U2VydmljZSB9IGZyb20gJy4vc2VsZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2lucHV0LmNvbXBvbmVudCc7XG5cbmNvbnN0IHNlbGVjdFRyaWdnZXJWYXJpYW50cyA9IGN2YShcbiAgJ2ZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAnLFxuICB7XG4gICAgdmFyaWFudHM6IHtcbiAgICAgIHNpemU6IHtcbiAgICAgICAgeHM6ICdoLTggcHgtMiB0ZXh0LXhzJyxcbiAgICAgICAgc206ICdoLTkgcHgtMyB0ZXh0LXNtJyxcbiAgICAgICAgZGVmYXVsdDogJ2gtMTAgcHgtMyB0ZXh0LXNtJyxcbiAgICAgICAgbGc6ICdoLTExIHB4LTQgdGV4dC1iYXNlJyxcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDoge1xuICAgICAgICB0cnVlOiAnY3Vyc29yLW5vdC1hbGxvd2VkIGJvcmRlci1vcGFjaXR5LTUwIG9wYWNpdHktNTAnLFxuICAgICAgICBmYWxzZTogJycsXG4gICAgICB9LFxuICAgICAgcmVhZG9ubHk6IHtcbiAgICAgICAgdHJ1ZTogJ2N1cnNvci1kZWZhdWx0IGJvcmRlci1kYXNoZWQnLFxuICAgICAgICBmYWxzZTogJycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcG91bmRWYXJpYW50czogW1xuICAgICAgLy8gT25seSBhbiBpbnRlcmFjdGl2ZSB0cmlnZ2VyIGdldHMgdGhlIGhvdmVyIGJvcmRlciBhbmQgdGhlIGZvY3VzIHJpbmcuXG4gICAgICB7XG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgcmVhZG9ubHk6IGZhbHNlLFxuICAgICAgICBjbGFzczpcbiAgICAgICAgICAnaG92ZXI6Ym9yZGVyLWFjY2VudCBmb2N1cy12aXNpYmxlOmJvcmRlci1wcmltYXJ5LzgwIGZvY3VzLXZpc2libGU6c2hhZG93LW5vbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTQgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvMzAgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0wJyxcbiAgICAgIH0sXG4gICAgICAvLyBSZWFkb25seSBzdGlsbCB0YWtlcyBmb2N1cywgYnV0IHdpdGhvdXQgdGhlIGVtcGhhc2lzIHJpbmcuXG4gICAgICB7XG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICAgIGNsYXNzOiAnZm9jdXMtdmlzaWJsZTpib3JkZXItb3BhY2l0eS0xMDAgZm9jdXMtdmlzaWJsZTpyaW5nLTAnLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGRlZmF1bHRWYXJpYW50czogeyBzaXplOiAnZGVmYXVsdCcsIGRpc2FibGVkOiBmYWxzZSwgcmVhZG9ubHk6IGZhbHNlIH0sXG4gIH1cbik7XG5cbmNvbnN0IHNlbGVjdEljb25WYXJpYW50cyA9IGN2YShcbiAgJ3JpLWFycm93LWRvd24tcy1saW5lIG1sLTIgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTIwMCcsXG4gIHtcbiAgICB2YXJpYW50czoge1xuICAgICAgc2l6ZToge1xuICAgICAgICB4czogJ3RleHQtWzE0cHhdJyxcbiAgICAgICAgc206ICd0ZXh0LVsxNHB4XScsXG4gICAgICAgIGRlZmF1bHQ6ICd0ZXh0LVsxOHB4XScsXG4gICAgICAgIGxnOiAndGV4dC1bMThweF0nLFxuICAgICAgfSxcbiAgICAgIG9wZW46IHsgdHJ1ZTogJ3JvdGF0ZS0xODAnLCBmYWxzZTogJycgfSxcbiAgICAgIG11dGVkOiB7IHRydWU6ICdvcGFjaXR5LTMwJywgZmFsc2U6ICcnIH0sXG4gICAgfSxcbiAgICBkZWZhdWx0VmFyaWFudHM6IHsgc2l6ZTogJ2RlZmF1bHQnLCBvcGVuOiBmYWxzZSwgbXV0ZWQ6IGZhbHNlIH0sXG4gIH1cbik7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdFByb3BzID0gVmFyaWFudFByb3BzPHR5cGVvZiBzZWxlY3RUcmlnZ2VyVmFyaWFudHM+O1xuXG4vKipcbiAqIEEgc2luZ2xlLXNlbGVjdCBsaXN0Ym94OiBhIHRyaWdnZXIgdGhhdCBvcGVucyBhIGZsb2F0aW5nIHBhbmVsIG9mXG4gKiBgdG9sbGUtc2VsZWN0LWl0ZW1gIG9wdGlvbnMsIHdpdGggb3B0aW9uYWwgaW5saW5lIHNlYXJjaC4gSW1wbGVtZW50c1xuICogYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCwgc28gaXQgd29ya3Mgd2l0aCBgbmdNb2RlbGAgYW5kIHJlYWN0aXZlIGZvcm1zLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1zZWxlY3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgSW5wdXRDb21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU2VsZWN0U2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfScsICcuaGlkZGVuLWRyb3Bkb3duIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9J10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbFwiICNjb250YWluZXI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAjdHJpZ2dlclxuICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cImlzT3BlbiA/IGFjdGl2ZURlc2NlbmRhbnRJZCA6IG51bGxcIlxuICAgICAgICBbYXR0ci5kYXRhLXN0YXRlXT1cImlzT3BlbiA/ICdvcGVuJyA6ICdjbG9zZWQnXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25UcmlnZ2VyS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2NsYXNzXT1cImNvbXB1dGVkVHJpZ2dlckNsYXNzXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnVuY2F0ZVwiIFtjbGFzcy50ZXh0LW11dGVkLWZvcmVncm91bmRdPVwiIXNlbGVjdGVkTGFiZWxcIj5cbiAgICAgICAgICB7eyBzZWxlY3RlZExhYmVsIHx8IHBsYWNlaG9sZGVyIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGkgW2NsYXNzXT1cImljb25DbGFzc1wiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8ZGl2XG4gICAgICAgICNwb3BvdmVyXG4gICAgICAgIFtjbGFzcy5oaWRkZW4tZHJvcGRvd25dPVwiIWlzT3BlblwiXG4gICAgICAgIGNsYXNzPVwiZml4ZWQgYmctcG9wb3ZlciB6LVs5OTldIG92ZXJmbG93LWF1dG8gZmxleCBmbGV4LWNvbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItYm9yZGVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHNoYWRvdy1tZFwiXG4gICAgICAgIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuOyB0b3A6IDA7IGxlZnQ6IDA7XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hhYmxlXCIgY2xhc3M9XCJwLTIgYm9yZGVyLWIgYm9yZGVyLWJvcmRlciBiZy1wb3BvdmVyIGgtYXV0b1wiPlxuICAgICAgICAgIDx0b2xsZS1pbnB1dFxuICAgICAgICAgICAgI3NlYXJjaElucHV0XG4gICAgICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hRdWVyeVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uU2VhcmNoS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICA8aSBwcmVmaXggY2xhc3M9XCJyaS1zZWFyY2gtbGluZVwiPjwvaT5cbiAgICAgICAgICA8L3RvbGxlLWlucHV0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IHJvbGU9XCJsaXN0Ym94XCIgY2xhc3M9XCJwLTEgb3ZlcmZsb3cteS1hdXRvIGdyb3cgaC1mdWxsIHctZnVsbFwiPlxuICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibm9SZXN1bHRzXCIgY2xhc3M9XCJweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICBObyByZXN1bHRzIGZvdW5kLlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvKiogVGV4dCBzaG93biBvbiB0aGUgdHJpZ2dlciB3aGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQuIEBkZWZhdWx0ICdTZWxlY3QgYW4gb3B0aW9uJyAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QgYW4gb3B0aW9uJztcbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIHRyaWdnZXIgdmlhIGBjbigpYCAobGFzdC13aW5zKS4gQGRlZmF1bHQgJycgKi9cbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgLyoqIERpc2FibGVzIHRoZSBjb250cm9sIGFuZCBibG9ja3Mgb3BlbmluZyB0aGUgcGFuZWwuIEBkZWZhdWx0IGZhbHNlICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIC8qKiBBZGRzIGEgc2VhcmNoIGJveCB0aGF0IGZpbHRlcnMgdGhlIHByb2plY3RlZCBvcHRpb25zLiBAZGVmYXVsdCBmYWxzZSAqL1xuICBASW5wdXQoKSBzZWFyY2hhYmxlID0gZmFsc2U7XG4gIC8qKiBIZWlnaHQgYW5kIHRleHQgc2l6ZSBvZiB0aGUgdHJpZ2dlci4gQGRlZmF1bHQgJ2RlZmF1bHQnICovXG4gIEBJbnB1dCgpIHNpemU6IFNlbGVjdFByb3BzWydzaXplJ10gPSAnZGVmYXVsdCc7XG4gIC8qKiBTaG93cyB0aGUgY3VycmVudCB2YWx1ZSBidXQgYmxvY2tzIG9wZW5pbmcgdGhlIHBhbmVsLiBAZGVmYXVsdCBmYWxzZSAqL1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gIC8qKiBFbWl0dGVkIHdpdGggdGhlIGNob3NlbiB2YWx1ZSB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuICovXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHRoZSBwYW5lbCBvcGVucy4gKi9cbiAgQE91dHB1dCgpIG9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgcGFuZWwgY2xvc2VzLiAqL1xuICBAT3V0cHV0KCkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3RyaWdnZXInKSB0cmlnZ2VyITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncG9wb3ZlcicpIHBvcG92ZXIhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBzZWFyY2hJbnB1dD86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAQ29udGVudENoaWxkcmVuKFNlbGVjdEl0ZW1Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgaXRlbXMhOiBRdWVyeUxpc3Q8U2VsZWN0SXRlbUNvbXBvbmVudD47XG5cbiAgcHJpdmF0ZSBzdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgaXRlbXNDaGFuZ2VTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcGVuZGluZ1ZhbHVlOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgc2VhcmNoUXVlcnkgPSAnJztcbiAgbm9SZXN1bHRzID0gZmFsc2U7XG4gIGlzT3BlbiA9IGZhbHNlO1xuICB2YWx1ZTogYW55ID0gbnVsbDtcbiAgc2VsZWN0ZWRMYWJlbCA9ICcnO1xuICBjbGVhbnVwQXV0b1VwZGF0ZT86ICgpID0+IHZvaWQ7XG5cbiAgLy8gS2V5Ym9hcmQgbmF2aWdhdGlvbiAoYWN0aXZlLWRlc2NlbmRhbnQpIHN0YXRlXG4gIGFjdGl2ZUluZGV4ID0gLTE7XG4gIHByaXZhdGUgdHlwZWFoZWFkQnVmZmVyID0gJyc7XG4gIHByaXZhdGUgdHlwZWFoZWFkVGltZSA9IDA7XG4gIHByaXZhdGUgcGVuZGluZ1R5cGVhaGVhZENoYXIgPSAnJztcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcblxuICBwcm90ZWN0ZWQgY24gPSBjbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlbGVjdFNlcnZpY2U6IFNlbGVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMuc3ViLmFkZChcbiAgICAgIHRoaXMuc2VsZWN0U2VydmljZS5zZWxlY3RlZFZhbHVlJC5zdWJzY3JpYmUodmFsID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh2YWwpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsKTtcbiAgICAgICAgdGhpcy51cGRhdGVJdGVtU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWIuYWRkKFxuICAgICAgdGhpcy5zZWxlY3RTZXJ2aWNlLnNlbGVjdGVkTGFiZWwkLnN1YnNjcmliZShsYWJlbCA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9IGxhYmVsO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0IGNvbXB1dGVkVHJpZ2dlckNsYXNzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgIHNlbGVjdFRyaWdnZXJWYXJpYW50cyh7XG4gICAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5LFxuICAgICAgfSksXG4gICAgICB0aGlzLmNsYXNzXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpY29uQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgc2VsZWN0SWNvblZhcmlhbnRzKHtcbiAgICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgICBvcGVuOiB0aGlzLmlzT3BlbixcbiAgICAgICAgbXV0ZWQ6IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmRlciBPblB1c2ggYSBgW2NsYXNzXWAgYmluZGluZyBpcyBhcHBsaWVkIHRocm91Z2ggQW5ndWxhcidzICpzdHlsaW5nKlxuICAgKiBwYXRoLCB3aGljaCB3cml0ZXMgdGhlIGlucHV0IGJ1dCDigJQgdW5saWtlIGEgcGxhaW4gcHJvcGVydHkgYmluZGluZyDigJQgbmV2ZXJcbiAgICogbWFya3MgdGhlIGNvbXBvbmVudCBkaXJ0eS4gV2l0aG91dCB0aGlzIHRoZSB0cmlnZ2VyIHdvdWxkIGtlZXAgcmVuZGVyaW5nXG4gICAqIHRoZSBjbGFzcyBpdCB3YXMgYm9ybiB3aXRoLiBDb3ZlcmluZyBldmVyeSBpbnB1dCBoZXJlIGlzIGNoZWFwIGFuZCBsZWF2ZXNcbiAgICogbm8gc2Vjb25kIGluc3RhbmNlIG9mIHRoYXQgdHJhcC5cbiAgICovXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIC8vIFN1YnNjcmliZSB0byBpdGVtcyBjaGFuZ2VzIHRvIGhhbmRsZSBkeW5hbWljIGNvbnRlbnRcbiAgICB0aGlzLml0ZW1zQ2hhbmdlU3ViID0gdGhpcy5pdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUl0ZW1TZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuYXBwbHlQZW5kaW5nVmFsdWUoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgLy8gQXBwbHkgaW5pdGlhbCBzZWxlY3Rpb24gaWYgaXRlbXMgYXJlIGFscmVhZHkgYXZhaWxhYmxlXG4gICAgdGhpcy51cGRhdGVJdGVtU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5hcHBseVBlbmRpbmdWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVBlbmRpbmdWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLml0ZW1zLmZpbmQoaSA9PiBpLnZhbHVlID09PSB0aGlzLnBlbmRpbmdWYWx1ZSk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gZm91bmQuZ2V0TGFiZWwoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnBlbmRpbmdWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUl0ZW1TZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXRlbXMpIHtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9IGl0ZW0udmFsdWUgPT09IHRoaXMudmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vdXRzaWRlQ2xpY2tIYW5kbGVyID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKCF0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmICF0aGlzLnBvcG92ZXI/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkgcmV0dXJuO1xuICAgIHRoaXMuaXNPcGVuID8gdGhpcy5jbG9zZSgpIDogdGhpcy5vcGVuKCk7XG4gIH1cblxuICBvcGVuKCkge1xuICAgIGNvbnN0IHdhc09wZW4gPSB0aGlzLmlzT3BlbjtcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICBpZiAoIXdhc09wZW4pIHRoaXMub3BlbmVkLmVtaXQoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLl9vdXRzaWRlQ2xpY2tIYW5kbGVyLCB0cnVlKTtcbiAgICAgIHRoaXMuaW5pdEFjdGl2ZUFmdGVyT3BlbigpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBjb25zdCB3YXNPcGVuID0gdGhpcy5pc09wZW47XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XG4gICAgdGhpcy5vblNlYXJjaENoYW5nZSgnJyk7XG4gICAgdGhpcy5yZXNldEFjdGl2ZSgpO1xuICAgIGlmICh0aGlzLmNsZWFudXBBdXRvVXBkYXRlKSB0aGlzLmNsZWFudXBBdXRvVXBkYXRlKCk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLl9vdXRzaWRlQ2xpY2tIYW5kbGVyLCB0cnVlKTtcbiAgICBpZiAod2FzT3BlbikgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMudHJpZ2dlciB8fCAhdGhpcy5wb3BvdmVyKSByZXR1cm47XG5cbiAgICB0aGlzLmNsZWFudXBBdXRvVXBkYXRlID0gYXV0b1VwZGF0ZShcbiAgICAgIHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50LFxuICAgICAgdGhpcy5wb3BvdmVyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbXB1dGVQb3NpdGlvbih0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudCwgdGhpcy5wb3BvdmVyLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICBzdHJhdGVneTogJ2ZpeGVkJyxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20tc3RhcnQnLFxuICAgICAgICAgIG1pZGRsZXdhcmU6IFtcbiAgICAgICAgICAgIG9mZnNldCg0KSxcbiAgICAgICAgICAgIGZsaXAoKSxcbiAgICAgICAgICAgIHNoaWZ0KHsgcGFkZGluZzogOCB9KSxcbiAgICAgICAgICAgIC8vIE1hdGNoIHRoZSBwYW5lbCB0byB0aGUgdHJpZ2dlciB3aWR0aCBhbmQgY2FwIGl0cyBoZWlnaHQgdG8gdGhlXG4gICAgICAgICAgICAvLyBzcGFjZSBhY3R1YWxseSBhdmFpbGFibGUsIHNvIHRoZSBsaXN0IHNjcm9sbHMgaW5zdGVhZCBvZlxuICAgICAgICAgICAgLy8gb3ZlcmZsb3dpbmcuXG4gICAgICAgICAgICBzaXplKHtcbiAgICAgICAgICAgICAgYXBwbHkoeyByZWN0cywgZWxlbWVudHMsIGF2YWlsYWJsZUhlaWdodCB9KSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50cy5mbG9hdGluZy5zdHlsZSwge1xuICAgICAgICAgICAgICAgICAgd2lkdGg6IHJlY3RzLnJlZmVyZW5jZS53aWR0aCArICdweCcsXG4gICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IGF2YWlsYWJsZUhlaWdodCArICdweCdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLnRoZW4oKHsgeCwgeSwgc3RyYXRlZ3kgfSkgPT4ge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5wb3BvdmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUsIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBzdHJhdGVneSxcbiAgICAgICAgICAgIGxlZnQ6IHggKyAncHgnLFxuICAgICAgICAgICAgdG9wOiB5ICsgJ3B4JyxcbiAgICAgICAgICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSAocXVlcnkgfHwgJycpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGxldCB2aXNpYmxlQ291bnQgPSAwO1xuXG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IGl0ZW0uZ2V0TGFiZWwoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgaXNWaXNpYmxlID0gdGV4dC5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgICAgaXRlbS5oaWRkZW4gPSAhaXNWaXNpYmxlO1xuICAgICAgaWYgKGlzVmlzaWJsZSkgdmlzaWJsZUNvdW50Kys7XG4gICAgfSk7XG5cbiAgICB0aGlzLm5vUmVzdWx0cyA9IHZpc2libGVDb3VudCA9PT0gMCAmJiBmaWx0ZXIgIT09ICcnO1xuXG4gICAgLy8gUmUtYW5jaG9yIHRoZSBhY3RpdmUgb3B0aW9uIHRvIHRoZSBmaXJzdCB2aXNpYmxlIG1hdGNoIHdoaWxlIG9wZW4uXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB0aGlzLnNldEFjdGl2ZSgwKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIC0tLS0gS2V5Ym9hcmQgbmF2aWdhdGlvbiAoV0FJLUFSSUEgbGlzdGJveCBwYXR0ZXJuKSAtLS0tXG5cbiAgcHJpdmF0ZSBnZXQgbmF2aWdhYmxlSXRlbXMoKTogU2VsZWN0SXRlbUNvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcyA/IHRoaXMuaXRlbXMuZmlsdGVyKGkgPT4gIWkuaGlkZGVuICYmICFpLmRpc2FibGVkKSA6IFtdO1xuICB9XG5cbiAgZ2V0IGFjdGl2ZURlc2NlbmRhbnRJZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5uYXZpZ2FibGVJdGVtcztcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVJbmRleCA+PSAwICYmIHRoaXMuYWN0aXZlSW5kZXggPCBsaXN0Lmxlbmd0aFxuICAgICAgPyBsaXN0W3RoaXMuYWN0aXZlSW5kZXhdLmlkXG4gICAgICA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUFjdGl2ZVN0YXRlcygpIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5uYXZpZ2FibGVJdGVtcztcbiAgICBjb25zdCBhY3RpdmVJdGVtID0gdGhpcy5hY3RpdmVJbmRleCA+PSAwID8gbGlzdFt0aGlzLmFjdGl2ZUluZGV4XSA/PyBudWxsIDogbnVsbDtcbiAgICB0aGlzLml0ZW1zPy5mb3JFYWNoKGkgPT4gKGkuYWN0aXZlID0gaSA9PT0gYWN0aXZlSXRlbSkpO1xuICAgIHRoaXMuc3luY0FjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY0FjdGl2ZURlc2NlbmRhbnQoKSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLnNlYXJjaElucHV0Py5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgIGlmICghaW5wdXQpIHJldHVybjtcbiAgICBjb25zdCBpZCA9IHRoaXMuYWN0aXZlRGVzY2VuZGFudElkO1xuICAgIGlmIChpZCkgaW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBpZCk7XG4gICAgZWxzZSBpbnB1dC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBY3RpdmUoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLm5hdmlnYWJsZUl0ZW1zO1xuICAgIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAtMTtcbiAgICAgIHRoaXMudXBkYXRlQWN0aXZlU3RhdGVzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihpbmRleCwgbGlzdC5sZW5ndGggLSAxKSk7XG4gICAgdGhpcy51cGRhdGVBY3RpdmVTdGF0ZXMoKTtcbiAgICBsaXN0W3RoaXMuYWN0aXZlSW5kZXhdPy5zY3JvbGxJbnRvQWN0aXZlVmlldygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBY3RpdmVJdGVtKGl0ZW06IFNlbGVjdEl0ZW1Db21wb25lbnQpIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLm5hdmlnYWJsZUl0ZW1zLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGlkeCA+PSAwKSB0aGlzLnNldEFjdGl2ZShpZHgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlQWN0aXZlKGRlbHRhOiBudW1iZXIpIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5uYXZpZ2FibGVJdGVtcztcbiAgICBpZiAoIWxpc3QubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9IHRoaXMuYWN0aXZlSW5kZXggPCAwID8gKGRlbHRhID4gMCA/IDAgOiBsaXN0Lmxlbmd0aCAtIDEpIDogdGhpcy5hY3RpdmVJbmRleCArIGRlbHRhO1xuICAgIHRoaXMuc2V0QWN0aXZlKG5leHQpOyAvLyBzZXRBY3RpdmUgY2xhbXBzIChubyB3cmFwLCBtYXRjaGluZyBzaGFkY24pXG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZVRvU2VsZWN0ZWRPckZpcnN0KCkge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLm5hdmlnYWJsZUl0ZW1zO1xuICAgIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAtMTtcbiAgICAgIHRoaXMudXBkYXRlQWN0aXZlU3RhdGVzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlbElkeCA9IGxpc3QuZmluZEluZGV4KGkgPT4gaS52YWx1ZSA9PT0gdGhpcy52YWx1ZSk7XG4gICAgdGhpcy5zZXRBY3RpdmUoc2VsSWR4ID49IDAgPyBzZWxJZHggOiAwKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEFjdGl2ZUFmdGVyT3BlbigpIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nVHlwZWFoZWFkQ2hhcikge1xuICAgICAgY29uc3QgYyA9IHRoaXMucGVuZGluZ1R5cGVhaGVhZENoYXI7XG4gICAgICB0aGlzLnBlbmRpbmdUeXBlYWhlYWRDaGFyID0gJyc7XG4gICAgICB0aGlzLnNldEFjdGl2ZVRvU2VsZWN0ZWRPckZpcnN0KCk7XG4gICAgICB0aGlzLnR5cGVhaGVhZChjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRBY3RpdmVUb1NlbGVjdGVkT3JGaXJzdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRBY3RpdmUoKSB7XG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IC0xO1xuICAgIHRoaXMudHlwZWFoZWFkQnVmZmVyID0gJyc7XG4gICAgdGhpcy5wZW5kaW5nVHlwZWFoZWFkQ2hhciA9ICcnO1xuICAgIHRoaXMuaXRlbXM/LmZvckVhY2goaSA9PiAoaS5hY3RpdmUgPSBmYWxzZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1R5cGVhaGVhZENoYXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSAmJiBldmVudC5rZXkgIT09ICcgJyAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5O1xuICB9XG5cbiAgcHJpdmF0ZSB0eXBlYWhlYWQoY2hhcjogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAvLyBSZXNldCB0aGUgYnVmZmVyIGJhc2VkIG9uIGVsYXBzZWQgdGltZSAoY29ycmVjdG5lc3MgaXMgbm90IHRpbWVyLWRyaXZlbikuXG4gICAgaWYgKG5vdyAtIHRoaXMudHlwZWFoZWFkVGltZSA+IDUwMCkgdGhpcy50eXBlYWhlYWRCdWZmZXIgPSAnJztcbiAgICB0aGlzLnR5cGVhaGVhZFRpbWUgPSBub3c7XG4gICAgdGhpcy50eXBlYWhlYWRCdWZmZXIgKz0gY2hhci50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1hdGNoID0gdGhpcy5uYXZpZ2FibGVJdGVtcy5maW5kKGkgPT5cbiAgICAgIGkuZ2V0TGFiZWwoKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGhpcy50eXBlYWhlYWRCdWZmZXIpXG4gICAgKTtcbiAgICBpZiAobWF0Y2gpIHRoaXMuc2V0QWN0aXZlSXRlbShtYXRjaCk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEFjdGl2ZSgpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5uYXZpZ2FibGVJdGVtc1t0aGlzLmFjdGl2ZUluZGV4XTtcbiAgICBpZiAoIWl0ZW0pIHJldHVybjtcbiAgICAvLyBTaW5nbGUtc2VsZWN0OiBub3RpZnkgcGFyZW50ICh3aGljaCBjbG9zZXMgYW5kIHN5bmNzIHRoZSBsYWJlbCkuXG4gICAgdGhpcy5zZWxlY3RTZXJ2aWNlLnJlZ2lzdGVyQ2xpY2soaXRlbS52YWx1ZSwgaXRlbS5nZXRMYWJlbCgpKTtcbiAgICB0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgb25UcmlnZ2VyS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG5cbiAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICBpZiAoa2V5ID09PSAnQXJyb3dEb3duJyB8fCBrZXkgPT09ICdBcnJvd1VwJyB8fCBrZXkgPT09ICdFbnRlcicgfHwga2V5ID09PSAnICcgfHwga2V5ID09PSAnSG9tZScgfHwga2V5ID09PSAnRW5kJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNUeXBlYWhlYWRDaGFyKGV2ZW50KSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnBlbmRpbmdUeXBlYWhlYWRDaGFyID0ga2V5O1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzogZXZlbnQucHJldmVudERlZmF1bHQoKTsgdGhpcy5tb3ZlQWN0aXZlKDEpOyBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93VXAnOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLm1vdmVBY3RpdmUoLTEpOyBicmVhaztcbiAgICAgIGNhc2UgJ0hvbWUnOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnNldEFjdGl2ZSgwKTsgYnJlYWs7XG4gICAgICBjYXNlICdFbmQnOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnNldEFjdGl2ZSh0aGlzLm5hdmlnYWJsZUl0ZW1zLmxlbmd0aCAtIDEpOyBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNlbGVjdEFjdGl2ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHRoaXMuaXNUeXBlYWhlYWRDaGFyKGV2ZW50KSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy50eXBlYWhlYWQoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEtleWRvd24gd2hpbGUgdGhlIChvcHRpb25hbCkgc2VhcmNoIGlucHV0IGlzIGZvY3VzZWQuIEFycm93cy9FbnRlci9Fc2NhcGVcbiAgLy8gZHJpdmUgdGhlIGxpc3Q7IG90aGVyIGtleXMgZmFsbCB0aHJvdWdoIHNvIHRoZSB1c2VyIGNhbiB0eXBlIHRvIGZpbHRlci5cbiAgb25TZWFyY2hLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmlzT3BlbikgcmV0dXJuO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLm1vdmVBY3RpdmUoMSk7IGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dVcCc6IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMubW92ZUFjdGl2ZSgtMSk7IGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOiBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnNlbGVjdEFjdGl2ZSgpOyBicmVhaztcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlSXRlbVNlbGVjdGlvbigpO1xuICAgIGlmICh0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLml0ZW1zLmZpbmQoaSA9PiBpLnZhbHVlID09PSB2YWx1ZSk7XG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gZm91bmQuZ2V0TGFiZWwoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUXVldWUgdGhlIHZhbHVlIGZvciB3aGVuIGl0ZW1zIGJlY29tZSBhdmFpbGFibGVcbiAgICAgIHRoaXMucGVuZGluZ1ZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1Yi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaXRlbXNDaGFuZ2VTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKHRoaXMuY2xlYW51cEF1dG9VcGRhdGUpIHRoaXMuY2xlYW51cEF1dG9VcGRhdGUoKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMuX291dHNpZGVDbGlja0hhbmRsZXIsIHRydWUpO1xuICB9XG59XG4iXX0=
|
|
@@ -20,15 +20,11 @@ export class SeparatorComponent {
|
|
|
20
20
|
[attr.aria-orientation]="!decorative && orientation === 'vertical' ? 'vertical' : null"
|
|
21
21
|
[attr.data-orientation]="orientation"
|
|
22
22
|
></div>
|
|
23
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
23
|
+
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
24
24
|
}
|
|
25
25
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SeparatorComponent, decorators: [{
|
|
26
26
|
type: Component,
|
|
27
|
-
args: [{
|
|
28
|
-
selector: 'tolle-separator',
|
|
29
|
-
standalone: true,
|
|
30
|
-
imports: [CommonModule],
|
|
31
|
-
template: `
|
|
27
|
+
args: [{ selector: 'tolle-separator', standalone: true, imports: [CommonModule], template: `
|
|
32
28
|
<div
|
|
33
29
|
[class]="computedClass"
|
|
34
30
|
[attr.role]="decorative ? 'none' : 'separator'"
|
|
@@ -36,8 +32,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
36
32
|
[attr.aria-orientation]="!decorative && orientation === 'vertical' ? 'vertical' : null"
|
|
37
33
|
[attr.data-orientation]="orientation"
|
|
38
34
|
></div>
|
|
39
|
-
|
|
40
|
-
}]
|
|
35
|
+
`, styles: [":host{display:block}\n"] }]
|
|
41
36
|
}], propDecorators: { orientation: [{
|
|
42
37
|
type: Input
|
|
43
38
|
}], decorative: [{
|
|
@@ -45,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
45
40
|
}], class: [{
|
|
46
41
|
type: Input
|
|
47
42
|
}] } });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VwYXJhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvc2VwYXJhdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFpQmhDLE1BQU0sT0FBTyxrQkFBa0I7SUFDM0IscURBQXFEO0lBQzVDLFdBQVcsR0FBOEIsWUFBWSxDQUFDO0lBQy9ELDBGQUEwRjtJQUNqRixVQUFVLEdBQVksSUFBSSxDQUFDO0lBQzNCLEtBQUssR0FBVyxFQUFFLENBQUM7SUFFNUIsSUFBSSxhQUFhO1FBQ2IsT0FBTyxFQUFFLENBQ0wsb0JBQW9CLEVBQ3BCLElBQUksQ0FBQyxXQUFXLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFDakUsSUFBSSxDQUFDLEtBQUssQ0FDYixDQUFDO0lBQ04sQ0FBQzt3R0FiUSxrQkFBa0I7NEZBQWxCLGtCQUFrQiw2SkFWakI7Ozs7Ozs7O0dBUVgsK0ZBVFcsWUFBWTs7NEZBV2Isa0JBQWtCO2tCQWY5QixTQUFTOytCQUNJLGlCQUFpQixjQUVmLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxZQUNiOzs7Ozs7OztHQVFYOzhCQUlVLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0b2xsZS1zZXBhcmF0b3InLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzc1wiXG4gICAgICBbYXR0ci5yb2xlXT1cImRlY29yYXRpdmUgPyAnbm9uZScgOiAnc2VwYXJhdG9yJ1wiXG4gICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJkZWNvcmF0aXZlID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLW9yaWVudGF0aW9uXT1cIiFkZWNvcmF0aXZlICYmIG9yaWVudGF0aW9uID09PSAndmVydGljYWwnID8gJ3ZlcnRpY2FsJyA6IG51bGxcIlxuICAgICAgW2F0dHIuZGF0YS1vcmllbnRhdGlvbl09XCJvcmllbnRhdGlvblwiXG4gICAgPjwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIFNlcGFyYXRvckNvbXBvbmVudCB7XG4gICAgLyoqIE9yaWVudGF0aW9uIG9mIHRoZSBydWxlLiBAZGVmYXVsdCAnaG9yaXpvbnRhbCcgKi9cbiAgICBASW5wdXQoKSBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyA9ICdob3Jpem9udGFsJztcbiAgICAvKiogV2hlbiB0cnVlLCB0aGUgc2VwYXJhdG9yIGlzIHB1cmVseSB2aXN1YWwgKGFyaWEtaGlkZGVuLCByb2xlPVwibm9uZVwiKS4gQGRlZmF1bHQgdHJ1ZSAqL1xuICAgIEBJbnB1dCgpIGRlY29yYXRpdmU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSAnJztcblxuICAgIGdldCBjb21wdXRlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gY24oXG4gICAgICAgICAgICBcInNocmluay0wIGJnLWJvcmRlclwiLFxuICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIgPyBcImgtcHggdy1mdWxsXCIgOiBcImgtZnVsbCB3LXB4XCIsXG4gICAgICAgICAgICB0aGlzLmNsYXNzXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|