@seniorsistemas/angular-components 19.7.4 → 19.7.6
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/alert/lib/alert/alert.component.d.ts +8 -1
- package/chips/README.md +3 -2
- package/chips/lib/chips/chip-item/chip-item.component.d.ts +2 -0
- package/chips/lib/chips/chips/chips.component.d.ts +2 -1
- package/datepicker/README.md +15 -2
- package/datepicker/lib/datepicker/date-segment-input.d.ts +82 -0
- package/datepicker/lib/datepicker/date.utils.d.ts +3 -7
- package/datepicker/lib/datepicker/datepicker.component.d.ts +101 -8
- package/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.d.ts +7 -1
- package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +1 -1
- package/dynamic-form/public-api.d.ts +1 -1
- package/esm2022/alert/lib/alert/alert.component.mjs +12 -6
- package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +15 -4
- package/esm2022/chips/lib/chips/chips/chips.component.mjs +26 -14
- package/esm2022/datepicker/lib/datepicker/date-segment-input.mjs +418 -0
- package/esm2022/datepicker/lib/datepicker/date.utils.mjs +7 -79
- package/esm2022/datepicker/lib/datepicker/datepicker.component.mjs +451 -41
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
- package/esm2022/dynamic-form/public-api.mjs +1 -1
- package/esm2022/panel/lib/panel/panel.component.mjs +3 -3
- package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +8 -6
- package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-alert.mjs +12 -6
- package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-chips.mjs +39 -16
- package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-datepicker.mjs +873 -118
- package/fesm2022/seniorsistemas-angular-components-datepicker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-panel.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +7 -5
- package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
- package/package.json +13 -13
- package/schematics/migrations/migrate-steps-to-stepper/index.d.ts +2 -0
- package/schematics/migrations/migrate-steps-to-stepper/index.js +104 -0
- package/schematics/migrations/migrate-steps-to-stepper/index.js.map +1 -0
- package/schematics/migrations.json +5 -0
- package/schematics/utils/ast-utils.d.ts +13 -0
- package/schematics/utils/ast-utils.js +76 -0
- package/schematics/utils/ast-utils.js.map +1 -1
- package/sidebar/lib/sidebar/sidebar.component.d.ts +3 -1
- package/schematics/migrations/migrate-dynamic-form-v19/index.test.d.ts +0 -1
- package/schematics/migrations/migrate-dynamic-form-v19/index.test.js +0 -888
- package/schematics/migrations/migrate-dynamic-form-v19/index.test.js.map +0 -1
- package/schematics/migrations/migrate-p-datepicker/index.test.d.ts +0 -1
- package/schematics/migrations/migrate-p-datepicker/index.test.js +0 -392
- package/schematics/migrations/migrate-p-datepicker/index.test.js.map +0 -1
- package/schematics/migrations/migrate-p-editor/index.test.d.ts +0 -1
- package/schematics/migrations/migrate-p-editor/index.test.js +0 -393
- package/schematics/migrations/migrate-p-editor/index.test.js.map +0 -1
- package/schematics/migrations/migrate-s-chips-outputs/index.test.d.ts +0 -1
- package/schematics/migrations/migrate-s-chips-outputs/index.test.js +0 -125
- package/schematics/migrations/migrate-s-chips-outputs/index.test.js.map +0 -1
- package/schematics/utils/ast-utils.test.d.ts +0 -1
- package/schematics/utils/ast-utils.test.js +0 -138
- package/schematics/utils/ast-utils.test.js.map +0 -1
- package/schematics/utils/workspace-utils.test.d.ts +0 -1
- package/schematics/utils/workspace-utils.test.js +0 -152
- package/schematics/utils/workspace-utils.test.js.map +0 -1
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
const DAY_MATCH_GROUP = 3;
|
|
2
|
-
const MINUTES_MATCH_GROUP = 5;
|
|
3
|
-
const MAX_MONTH_INDEX = 11;
|
|
4
2
|
export function formatNativeDate(date) {
|
|
5
3
|
const year = date.getFullYear();
|
|
6
4
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
@@ -9,8 +7,7 @@ export function formatNativeDate(date) {
|
|
|
9
7
|
}
|
|
10
8
|
/**
|
|
11
9
|
* Formata uma data segundo um padrão simples contendo os tokens `dd`, `MM` e `yyyy`.
|
|
12
|
-
* Usado
|
|
13
|
-
* não controla o formato. Para `type="date"` nativo o formato é definido pelo browser.
|
|
10
|
+
* Usado para exibição em campos `type="text"` (modos `range` e seleção múltipla).
|
|
14
11
|
*/
|
|
15
12
|
export function formatWithPattern(date, pattern) {
|
|
16
13
|
const dd = String(date.getDate()).padStart(2, '0');
|
|
@@ -24,10 +21,6 @@ export function formatWithPattern(date, pattern) {
|
|
|
24
21
|
.replace('MM', MM)
|
|
25
22
|
.replace('mm', MM); // PrimeNG compat: lowercase mm = month
|
|
26
23
|
}
|
|
27
|
-
export function formatTime(h, m, s) {
|
|
28
|
-
const base = `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`;
|
|
29
|
-
return s !== undefined ? `${base}:${String(s).padStart(2, '0')}` : base;
|
|
30
|
-
}
|
|
31
24
|
/** Parses yyyy-MM-dd. Returns null when invalid. */
|
|
32
25
|
export function parseDate(raw) {
|
|
33
26
|
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(raw.trim());
|
|
@@ -67,19 +60,6 @@ export function parseRangeInput(raw, separator = '—') {
|
|
|
67
60
|
}
|
|
68
61
|
return { start, end };
|
|
69
62
|
}
|
|
70
|
-
export function parseTimeInput(raw, base, maxHours, maxMinutes) {
|
|
71
|
-
const match = /^(\d{1,2}):(\d{2})$/.exec(raw.trim());
|
|
72
|
-
if (!match) {
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
const hours = parseInt(match[1], 10);
|
|
76
|
-
const mins = parseInt(match[2], 10);
|
|
77
|
-
if (hours >= maxHours || mins >= maxMinutes) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
const baseDate = base ?? new Date();
|
|
81
|
-
return new Date(baseDate.getFullYear(), baseDate.getMonth(), baseDate.getDate(), hours, mins);
|
|
82
|
-
}
|
|
83
63
|
export function parseYearInput(raw) {
|
|
84
64
|
const match = /^(\d{4})$/.exec(raw.trim());
|
|
85
65
|
if (!match) {
|
|
@@ -91,59 +71,20 @@ export function parseYearInput(raw) {
|
|
|
91
71
|
}
|
|
92
72
|
return new Date(year, 0, 1);
|
|
93
73
|
}
|
|
94
|
-
export function
|
|
95
|
-
const match = /^(\d{4})-(\d{2})$/.exec(raw.trim());
|
|
96
|
-
if (!match) {
|
|
97
|
-
return null;
|
|
98
|
-
}
|
|
99
|
-
const year = parseInt(match[1], 10);
|
|
100
|
-
const month = parseInt(match[2], 10) - 1;
|
|
101
|
-
if (year < 1000) {
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
if (month < 0 || month > MAX_MONTH_INDEX) {
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
return new Date(year, month, 1);
|
|
108
|
-
}
|
|
109
|
-
export function parseDateTimeInput(raw) {
|
|
110
|
-
const match = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})$/.exec(raw.trim());
|
|
111
|
-
if (!match) {
|
|
112
|
-
return null;
|
|
113
|
-
}
|
|
114
|
-
const year = parseInt(match[1], 10);
|
|
115
|
-
const month = parseInt(match[2], 10) - 1;
|
|
116
|
-
const day = parseInt(match[DAY_MATCH_GROUP], 10);
|
|
117
|
-
const hours = parseInt(match[4], 10);
|
|
118
|
-
const mins = parseInt(match[MINUTES_MATCH_GROUP], 10);
|
|
119
|
-
if (year < 1000 || hours >= 24 || mins >= 60) {
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
const date = new Date(year, month, day, hours, mins);
|
|
123
|
-
if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {
|
|
124
|
-
return null;
|
|
125
|
-
}
|
|
126
|
-
return date;
|
|
127
|
-
}
|
|
128
|
-
export function parseInput(mode, raw, base, maxHours, maxMinutes, rangeSeparator = '—') {
|
|
74
|
+
export function parseInput(mode, raw, rangeSeparator = '—') {
|
|
129
75
|
if (!raw?.trim()) {
|
|
130
76
|
return null;
|
|
131
77
|
}
|
|
132
78
|
switch (mode) {
|
|
133
79
|
case 'range':
|
|
134
80
|
return parseRangeInput(raw, rangeSeparator);
|
|
135
|
-
case 'time':
|
|
136
|
-
return parseTimeInput(raw, base, maxHours, maxMinutes);
|
|
137
|
-
case 'month':
|
|
138
|
-
return parseMonthInput(raw);
|
|
139
81
|
case 'year':
|
|
140
82
|
return parseYearInput(raw);
|
|
141
|
-
case 'datetime':
|
|
142
|
-
return parseDateTimeInput(raw);
|
|
143
83
|
default:
|
|
144
84
|
return parseDate(raw);
|
|
145
85
|
}
|
|
146
86
|
}
|
|
87
|
+
/** Formata range/seleção múltipla (dateFormat) e o ano em `mode='year'`. Demais modos são resolvidos pela engine de segmentos. */
|
|
147
88
|
export function formatValueForInput(mode, value, rangeSeparator = ' — ', dateFormat, multipleSeparator = ', ') {
|
|
148
89
|
if (!value) {
|
|
149
90
|
return '';
|
|
@@ -161,22 +102,9 @@ export function formatValueForInput(mode, value, rangeSeparator = ' — ', dateF
|
|
|
161
102
|
? `${formatPart(range.start)}${rangeSeparator}${formatPart(range.end)}`
|
|
162
103
|
: formatPart(range.start);
|
|
163
104
|
}
|
|
164
|
-
if (
|
|
165
|
-
return
|
|
166
|
-
}
|
|
167
|
-
switch (mode) {
|
|
168
|
-
case 'time':
|
|
169
|
-
return formatTime(value.getHours(), value.getMinutes());
|
|
170
|
-
case 'month': {
|
|
171
|
-
const month = String(value.getMonth() + 1).padStart(2, '0');
|
|
172
|
-
return `${value.getFullYear()}-${month}`;
|
|
173
|
-
}
|
|
174
|
-
case 'year':
|
|
175
|
-
return String(value.getFullYear());
|
|
176
|
-
case 'datetime':
|
|
177
|
-
return `${formatNativeDate(value)}T${formatTime(value.getHours(), value.getMinutes())}`;
|
|
178
|
-
default:
|
|
179
|
-
return formatNativeDate(value);
|
|
105
|
+
if (value instanceof Date && mode === 'year') {
|
|
106
|
+
return String(value.getFullYear());
|
|
180
107
|
}
|
|
108
|
+
return '';
|
|
181
109
|
}
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9kYXRlcGlja2VyL3NyYy9saWIvZGF0ZXBpY2tlci9kYXRlLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFFM0IsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQVU7SUFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwRCxPQUFPLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFVLEVBQUUsT0FBZTtJQUN6RCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFD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QUFDO1FBQzVELEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNYLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM1RCxPQUFPLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzdDLENBQUM7UUFDRCxLQUFLLE1BQU07WUFDUCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN2QyxLQUFLLFVBQVU7WUFDWCxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzVGO1lBQ0ksT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGF0ZVJhbmdlIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5leHBvcnQgdHlwZSB7IERhdGVSYW5nZSB9O1xuXG5jb25zdCBEQVlfTUFUQ0hfR1JPVVAgPSAzO1xuY29uc3QgTUlOVVRFU19NQVRDSF9HUk9VUCA9IDU7XG5jb25zdCBNQVhfTU9OVEhfSU5ERVggPSAxMTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE5hdGl2ZURhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbn1cblxuLyoqXG4gKiBGb3JtYXRhIHVtYSBkYXRhIHNlZ3VuZG8gdW0gcGFkcsOjbyBzaW1wbGVzIGNvbnRlbmRvIG9zIHRva2VucyBgZGRgLCBgTU1gIGUgYHl5eXlgLlxuICogVXNhZG8gYXBlbmFzIHBhcmEgZXhpYmnDp8OjbyBlbSBjYW1wb3MgYHR5cGU9XCJ0ZXh0XCJgIChtb2RvIGByYW5nZWApLCBvbmRlIG8gYnJvd3NlclxuICogbsOjbyBjb250cm9sYSBvIGZvcm1hdG8uIFBhcmEgYHR5cGU9XCJkYXRlXCJgIG5hdGl2byBvIGZvcm1hdG8gw6kgZGVmaW5pZG8gcGVsbyBicm93c2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0V2l0aFBhdHRlcm4oZGF0ZTogRGF0ZSwgcGF0dGVybjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZCA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBNTSA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IHl5eXkgPSBTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICBjb25zdCB5eSA9IHl5eXkuc2xpY2UoLTIpO1xuICAgIHJldHVybiBwYXR0ZXJuXG4gICAgICAgIC5yZXBsYWNlKCd5eXl5JywgeXl5eSlcbiAgICAgICAgLnJlcGxhY2UoJ3l5JywgeXkpICAgLy8gbXVzdCBjb21lIGFmdGVyIHl5eXlcbiAgICAgICAgLnJlcGxhY2UoJ2RkJywgZGQpXG4gICAgICAgIC5yZXBsYWNlKCdNTScsIE1NKVxuICAgICAgICAucmVwbGFjZSgnbW0nLCBNTSk7ICAvLyBQcmltZU5HIGNvbXBhdDogbG93ZXJjYXNlIG1tID0gbW9udGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRpbWUoaDogbnVtYmVyLCBtOiBudW1iZXIsIHM/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2UgPSBgJHtTdHJpbmcoaCkucGFkU3RhcnQoMiwgJzAnKX06JHtTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgIHJldHVybiBzICE9PSB1bmRlZmluZWQgPyBgJHtiYXNlfToke1N0cmluZyhzKS5wYWRTdGFydCgyLCAnMCcpfWAgOiBiYXNlO1xufVxuXG4vKiogUGFyc2VzIHl5eXktTU0tZGQuIFJldHVybnMgbnVsbCB3aGVuIGludmFsaWQuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHJhdzogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIGNvbnN0IG1hdGNoID0gL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KSQvLmV4ZWMocmF3LnRyaW0oKSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgeWVhciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgY29uc3QgbW9udGggPSBwYXJzZUludChtYXRjaFsyXSwgMTApIC0gMTtcbiAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVlfTUFUQ0hfR1JPVVBdLCAxMCk7XG4gICAgaWYgKHllYXIgPCAxMDAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSk7XG4gICAgaWYgKGRhdGUuZ2V0RnVsbFllYXIoKSAhPT0geWVhciB8fCBkYXRlLmdldE1vbnRoKCkgIT09IG1vbnRoIHx8IGRhdGUuZ2V0RGF0ZSgpICE9PSBkYXkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lRGF5KGE6IERhdGUsIGI6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBhLmdldEZ1bGxZZWFyKCkgPT09IGIuZ2V0RnVsbFllYXIoKSAmJlxuICAgICAgICBhLmdldE1vbnRoKCkgPT09IGIuZ2V0TW9udGgoKSAmJlxuICAgICAgICBhLmdldERhdGUoKSA9PT0gYi5nZXREYXRlKClcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBUaW1lKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpLmdldFRpbWUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmFuZ2VJbnB1dChyYXc6IHN0cmluZywgc2VwYXJhdG9yID0gJ+KAlCcpOiBEYXRlUmFuZ2UgfCBudWxsIHtcbiAgICBjb25zdCB0cmltbWVkU2VwYXJhdG9yID0gc2VwYXJhdG9yLnRyaW0oKSB8fCAn4oCUJztcbiAgICBjb25zdCBwYXJ0cyA9IHJhdy5zcGxpdCh0cmltbWVkU2VwYXJhdG9yKS5tYXAoKHBhcnQpID0+IHBhcnQudHJpbSgpKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBzdGFydCA9IHBhcnNlRGF0ZShwYXJ0c1swXSk7XG4gICAgY29uc3QgZW5kID0gcGFyc2VEYXRlKHBhcnRzWzFdKTtcbiAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGltZUlucHV0KFxuICAgIHJhdzogc3RyaW5nLFxuICAgIGJhc2U6IERhdGUgfCBudWxsLFxuICAgIG1heEhvdXJzOiBudW1iZXIsXG4gICAgbWF4TWludXRlczogbnVtYmVyLFxuKTogRGF0ZSB8IG51bGwge1xuICAgIGNvbnN0IG1hdGNoID0gL14oXFxkezEsMn0pOihcXGR7Mn0pJC8uZXhlYyhyYXcudHJpbSgpKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBob3VycyA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgY29uc3QgbWlucyA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7XG4gICAgaWYgKGhvdXJzID49IG1heEhvdXJzIHx8IG1pbnMgPj0gbWF4TWludXRlcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgYmFzZURhdGUgPSBiYXNlID8/IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGJhc2VEYXRlLmdldEZ1bGxZZWFyKCksIGJhc2VEYXRlLmdldE1vbnRoKCksIGJhc2VEYXRlLmdldERhdGUoKSwgaG91cnMsIG1pbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFySW5wdXQocmF3OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3QgbWF0Y2ggPSAvXihcXGR7NH0pJC8uZXhlYyhyYXcudHJpbSgpKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcbiAgICBpZiAoeWVhciA8IDEwMDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCAwLCAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTW9udGhJbnB1dChyYXc6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCBtYXRjaCA9IC9eKFxcZHs0fSktKFxcZHsyfSkkLy5leGVjKHJhdy50cmltKCkpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKSAtIDE7XG4gICAgaWYgKHllYXIgPCAxMDAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAobW9udGggPCAwIHx8IG1vbnRoID4gTUFYX01PTlRIX0lOREVYKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlVGltZUlucHV0KHJhdzogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIGNvbnN0IG1hdGNoID0gL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KSQvLmV4ZWMocmF3LnRyaW0oKSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgeWVhciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgY29uc3QgbW9udGggPSBwYXJzZUludChtYXRjaFsyXSwgMTApIC0gMTtcbiAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVlfTUFUQ0hfR1JPVVBdLCAxMCk7XG4gICAgY29uc3QgaG91cnMgPSBwYXJzZUludChtYXRjaFs0XSwgMTApO1xuICAgIGNvbnN0IG1pbnMgPSBwYXJzZUludChtYXRjaFtNSU5VVEVTX01BVENIX0dST1VQXSwgMTApO1xuICAgIGlmICh5ZWFyIDwgMTAwMCB8fCBob3VycyA+PSAyNCB8fCBtaW5zID49IDYwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSwgaG91cnMsIG1pbnMpO1xuICAgIGlmIChkYXRlLmdldEZ1bGxZZWFyKCkgIT09IHllYXIgfHwgZGF0ZS5nZXRNb250aCgpICE9PSBtb250aCB8fCBkYXRlLmdldERhdGUoKSAhPT0gZGF5KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSW5wdXQoXG4gICAgbW9kZTogc3RyaW5nLFxuICAgIHJhdzogc3RyaW5nLFxuICAgIGJhc2U6IERhdGUgfCBudWxsLFxuICAgIG1heEhvdXJzOiBudW1iZXIsXG4gICAgbWF4TWludXRlczogbnVtYmVyLFxuICAgIHJhbmdlU2VwYXJhdG9yID0gJ+KAlCcsXG4pOiBEYXRlIHwgRGF0ZVJhbmdlIHwgbnVsbCB7XG4gICAgaWYgKCFyYXc/LnRyaW0oKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgJ3JhbmdlJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVJhbmdlSW5wdXQocmF3LCByYW5nZVNlcGFyYXRvcik7XG4gICAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZUlucHV0KHJhdywgYmFzZSwgbWF4SG91cnMsIG1heE1pbnV0ZXMpO1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VNb250aElucHV0KHJhdyk7XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlWWVhcklucHV0KHJhdyk7XG4gICAgICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZURhdGVUaW1lSW5wdXQocmF3KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZURhdGUocmF3KTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRWYWx1ZUZvcklucHV0KFxuICAgIG1vZGU6IHN0cmluZyxcbiAgICB2YWx1ZTogRGF0ZSB8IERhdGVSYW5nZSB8IERhdGVbXSB8IG51bGwsXG4gICAgcmFuZ2VTZXBhcmF0b3IgPSAnIOKAlCAnLFxuICAgIGRhdGVGb3JtYXQ/OiBzdHJpbmcsXG4gICAgbXVsdGlwbGVTZXBhcmF0b3IgPSAnLCAnLFxuKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgZm9ybWF0UGFydCA9IChkYXRlOiBEYXRlKTogc3RyaW5nID0+XG4gICAgICAgIGRhdGVGb3JtYXQgPyBmb3JtYXRXaXRoUGF0dGVybihkYXRlLCBkYXRlRm9ybWF0KSA6IGZvcm1hdE5hdGl2ZURhdGUoZGF0ZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoZm9ybWF0UGFydCkuam9pbihtdWx0aXBsZVNlcGFyYXRvcik7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAncmFuZ2UnKSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gdmFsdWUgYXMgRGF0ZVJhbmdlO1xuICAgICAgICBpZiAoIXJhbmdlLnN0YXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhbmdlLmVuZFxuICAgICAgICAgICAgPyBgJHtmb3JtYXRQYXJ0KHJhbmdlLnN0YXJ0KX0ke3JhbmdlU2VwYXJhdG9yfSR7Zm9ybWF0UGFydChyYW5nZS5lbmQpfWBcbiAgICAgICAgICAgIDogZm9ybWF0UGFydChyYW5nZS5zdGFydCk7XG4gICAgfVxuICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSAndGltZSc6XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0VGltZSh2YWx1ZS5nZXRIb3VycygpLCB2YWx1ZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKHZhbHVlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldEZ1bGxZZWFyKCl9LSR7bW9udGh9YDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAgICAgICAgIHJldHVybiBgJHtmb3JtYXROYXRpdmVEYXRlKHZhbHVlKX1UJHtmb3JtYXRUaW1lKHZhbHVlLmdldEhvdXJzKCksIHZhbHVlLmdldE1pbnV0ZXMoKSl9YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXROYXRpdmVEYXRlKHZhbHVlKTtcbiAgICB9XG59XG4iXX0=
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9kYXRlcGlja2VyL3NyYy9saWIvZGF0ZXBpY2tlci9kYXRlLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUUxQixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBVTtJQUN2QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBVSxFQUFFLE9BQWU7SUFDekQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN4QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FB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IGZyb20gJy4vbW9kZWxzJztcblxuZXhwb3J0IHR5cGUgeyBEYXRlUmFuZ2UgfTtcblxuY29uc3QgREFZX01BVENIX0dST1VQID0gMztcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE5hdGl2ZURhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbn1cblxuLyoqXG4gKiBGb3JtYXRhIHVtYSBkYXRhIHNlZ3VuZG8gdW0gcGFkcsOjbyBzaW1wbGVzIGNvbnRlbmRvIG9zIHRva2VucyBgZGRgLCBgTU1gIGUgYHl5eXlgLlxuICogVXNhZG8gcGFyYSBleGliacOnw6NvIGVtIGNhbXBvcyBgdHlwZT1cInRleHRcImAgKG1vZG9zIGByYW5nZWAgZSBzZWxlw6fDo28gbcO6bHRpcGxhKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFdpdGhQYXR0ZXJuKGRhdGU6IERhdGUsIHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGQgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgTU0gPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCB5eXl5ID0gU3RyaW5nKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgY29uc3QgeXkgPSB5eXl5LnNsaWNlKC0yKTtcbiAgICByZXR1cm4gcGF0dGVyblxuICAgICAgICAucmVwbGFjZSgneXl5eScsIHl5eXkpXG4gICAgICAgIC5yZXBsYWNlKCd5eScsIHl5KSAgIC8vIG11c3QgY29tZSBhZnRlciB5eXl5XG4gICAgICAgIC5yZXBsYWNlKCdkZCcsIGRkKVxuICAgICAgICAucmVwbGFjZSgnTU0nLCBNTSlcbiAgICAgICAgLnJlcGxhY2UoJ21tJywgTU0pOyAgLy8gUHJpbWVORyBjb21wYXQ6IGxvd2VyY2FzZSBtbSA9IG1vbnRoXG59XG5cbi8qKiBQYXJzZXMgeXl5eS1NTS1kZC4gUmV0dXJucyBudWxsIHdoZW4gaW52YWxpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUocmF3OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3QgbWF0Y2ggPSAvXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pJC8uZXhlYyhyYXcudHJpbSgpKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcbiAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCkgLSAxO1xuICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBWV9NQVRDSF9HUk9VUF0sIDEwKTtcbiAgICBpZiAoeWVhciA8IDEwMDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcbiAgICBpZiAoZGF0ZS5nZXRGdWxsWWVhcigpICE9PSB5ZWFyIHx8IGRhdGUuZ2V0TW9udGgoKSAhPT0gbW9udGggfHwgZGF0ZS5nZXREYXRlKCkgIT09IGRheSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhbWVEYXkoYTogRGF0ZSwgYjogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIGEuZ2V0RnVsbFllYXIoKSA9PT0gYi5nZXRGdWxsWWVhcigpICYmXG4gICAgICAgIGEuZ2V0TW9udGgoKSA9PT0gYi5nZXRNb250aCgpICYmXG4gICAgICAgIGEuZ2V0RGF0ZSgpID09PSBiLmdldERhdGUoKVxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcFRpbWUoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSkuZ2V0VGltZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSYW5nZUlucHV0KHJhdzogc3RyaW5nLCBzZXBhcmF0b3IgPSAn4oCUJyk6IERhdGVSYW5nZSB8IG51bGwge1xuICAgIGNvbnN0IHRyaW1tZWRTZXBhcmF0b3IgPSBzZXBhcmF0b3IudHJpbSgpIHx8ICfigJQnO1xuICAgIGNvbnN0IHBhcnRzID0gcmF3LnNwbGl0KHRyaW1tZWRTZXBhcmF0b3IpLm1hcCgocGFydCkgPT4gcGFydC50cmltKCkpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gcGFyc2VEYXRlKHBhcnRzWzBdKTtcbiAgICBjb25zdCBlbmQgPSBwYXJzZURhdGUocGFydHNbMV0pO1xuICAgIGlmICghc3RhcnQgfHwgIWVuZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3RhcnQsIGVuZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFySW5wdXQocmF3OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3QgbWF0Y2ggPSAvXihcXGR7NH0pJC8uZXhlYyhyYXcudHJpbSgpKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcbiAgICBpZiAoeWVhciA8IDEwMDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCAwLCAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSW5wdXQobW9kZTogc3RyaW5nLCByYXc6IHN0cmluZywgcmFuZ2VTZXBhcmF0b3IgPSAn4oCUJyk6IERhdGUgfCBEYXRlUmFuZ2UgfCBudWxsIHtcbiAgICBpZiAoIXJhdz8udHJpbSgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSAncmFuZ2UnOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmFuZ2VJbnB1dChyYXcsIHJhbmdlU2VwYXJhdG9yKTtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VZZWFySW5wdXQocmF3KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZURhdGUocmF3KTtcbiAgICB9XG59XG5cbi8qKiBGb3JtYXRhIHJhbmdlL3NlbGXDp8OjbyBtw7psdGlwbGEgKGRhdGVGb3JtYXQpIGUgbyBhbm8gZW0gYG1vZGU9J3llYXInYC4gRGVtYWlzIG1vZG9zIHPDo28gcmVzb2x2aWRvcyBwZWxhIGVuZ2luZSBkZSBzZWdtZW50b3MuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VmFsdWVGb3JJbnB1dChcbiAgICBtb2RlOiBzdHJpbmcsXG4gICAgdmFsdWU6IERhdGUgfCBEYXRlUmFuZ2UgfCBEYXRlW10gfCBudWxsLFxuICAgIHJhbmdlU2VwYXJhdG9yID0gJyDigJQgJyxcbiAgICBkYXRlRm9ybWF0Pzogc3RyaW5nLFxuICAgIG11bHRpcGxlU2VwYXJhdG9yID0gJywgJyxcbik6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1hdFBhcnQgPSAoZGF0ZTogRGF0ZSk6IHN0cmluZyA9PlxuICAgICAgICBkYXRlRm9ybWF0ID8gZm9ybWF0V2l0aFBhdHRlcm4oZGF0ZSwgZGF0ZUZvcm1hdCkgOiBmb3JtYXROYXRpdmVEYXRlKGRhdGUpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZvcm1hdFBhcnQpLmpvaW4obXVsdGlwbGVTZXBhcmF0b3IpO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICBjb25zdCByYW5nZSA9IHZhbHVlIGFzIERhdGVSYW5nZTtcbiAgICAgICAgaWYgKCFyYW5nZS5zdGFydCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYW5nZS5lbmRcbiAgICAgICAgICAgID8gYCR7Zm9ybWF0UGFydChyYW5nZS5zdGFydCl9JHtyYW5nZVNlcGFyYXRvcn0ke2Zvcm1hdFBhcnQocmFuZ2UuZW5kKX1gXG4gICAgICAgICAgICA6IGZvcm1hdFBhcnQocmFuZ2Uuc3RhcnQpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIG1vZGUgPT09ICd5ZWFyJykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlLmdldEZ1bGxZZWFyKCkpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG4iXX0=
|