@metadev/lux 0.17.0 → 0.19.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/esm2020/lib/autocomplete/autocomplete.component.mjs +479 -0
  2. package/esm2020/lib/autocomplete-list/autocomplete-list.component.mjs +254 -0
  3. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +75 -0
  4. package/esm2020/lib/checkbox/checkbox.component.mjs +154 -0
  5. package/{esm2015/lib/datasource.js → esm2020/lib/datasource.mjs} +0 -0
  6. package/esm2020/lib/datetime/datetime.component.mjs +306 -0
  7. package/esm2020/lib/filter/filter.component.mjs +152 -0
  8. package/esm2020/lib/geolocation/geolocation.component.mjs +407 -0
  9. package/{esm2015/lib/geolocation/geolocation.service.js → esm2020/lib/geolocation/geolocation.service.mjs} +7 -11
  10. package/esm2020/lib/geolocation/openlayer-loader.service.mjs +62 -0
  11. package/esm2020/lib/helperFns.mjs +109 -0
  12. package/esm2020/lib/input/input.component.mjs +452 -0
  13. package/{esm2015/lib/input/regexp.service.js → esm2020/lib/input/regexp.service.mjs} +7 -6
  14. package/{esm2015/lib/lang.js → esm2020/lib/lang.mjs} +0 -0
  15. package/esm2020/lib/lux.module.mjs +130 -0
  16. package/{esm2015/lib/map/geopoint.js → esm2020/lib/map/geopoint.mjs} +0 -0
  17. package/esm2020/lib/map/map.component.mjs +265 -0
  18. package/esm2020/lib/modal/modal-backdrop.mjs +26 -0
  19. package/esm2020/lib/modal/modal-config.mjs +14 -0
  20. package/{esm2015/lib/modal/modal-dismiss-reasons.js → esm2020/lib/modal/modal-dismiss-reasons.mjs} +0 -0
  21. package/{esm2015/lib/modal/modal-ref.js → esm2020/lib/modal/modal-ref.mjs} +0 -0
  22. package/esm2020/lib/modal/modal-stack.mjs +179 -0
  23. package/esm2020/lib/modal/modal-window.mjs +119 -0
  24. package/esm2020/lib/modal/modal.service.mjs +26 -0
  25. package/{esm2015/lib/modal/util.js → esm2020/lib/modal/util.mjs} +0 -0
  26. package/esm2020/lib/pagination/pagination.component.mjs +137 -0
  27. package/{esm2015/lib/pagination/pagination.js → esm2020/lib/pagination/pagination.mjs} +0 -0
  28. package/esm2020/lib/radiogroup/radiogroup.component.mjs +130 -0
  29. package/esm2020/lib/select/select.component.mjs +149 -0
  30. package/{esm2015/lib/tooltip/placement.js → esm2020/lib/tooltip/placement.mjs} +0 -0
  31. package/{esm2015/lib/tooltip/tooltip-context.js → esm2020/lib/tooltip/tooltip-context.mjs} +0 -0
  32. package/esm2020/lib/tooltip/tooltip.component.mjs +23 -0
  33. package/esm2020/lib/tooltip/tooltip.directive.mjs +60 -0
  34. package/{esm2015/lib/tooltip/tooltip.service.js → esm2020/lib/tooltip/tooltip.service.mjs} +7 -9
  35. package/{esm2015/lib/tooltip/tooltop-content.js → esm2020/lib/tooltip/tooltop-content.mjs} +0 -0
  36. package/esm2020/lib/voice-recognition/voice-recognition.directive.mjs +73 -0
  37. package/{esm2015/lib/window/window.service.js → esm2020/lib/window/window.service.mjs} +0 -0
  38. package/esm2020/metadev-lux.mjs +5 -0
  39. package/esm2020/public-api.mjs +21 -0
  40. package/fesm2015/metadev-lux.mjs +4345 -0
  41. package/fesm2015/metadev-lux.mjs.map +1 -0
  42. package/fesm2020/metadev-lux.mjs +4343 -0
  43. package/fesm2020/metadev-lux.mjs.map +1 -0
  44. package/lib/autocomplete/autocomplete.component.d.ts +3 -0
  45. package/lib/autocomplete-list/autocomplete-list.component.d.ts +3 -0
  46. package/lib/breadcrumb/breadcrumb.component.d.ts +3 -0
  47. package/lib/checkbox/checkbox.component.d.ts +3 -0
  48. package/lib/datetime/datetime.component.d.ts +4 -0
  49. package/lib/filter/filter.component.d.ts +3 -0
  50. package/lib/geolocation/geolocation.component.d.ts +4 -0
  51. package/lib/geolocation/geolocation.service.d.ts +3 -0
  52. package/lib/geolocation/openlayer-loader.service.d.ts +3 -0
  53. package/lib/helperFns.d.ts +2 -0
  54. package/lib/input/input.component.d.ts +15 -0
  55. package/lib/input/regexp.service.d.ts +3 -0
  56. package/lib/lux.module.d.ts +26 -0
  57. package/lib/map/map.component.d.ts +3 -0
  58. package/lib/modal/modal-backdrop.d.ts +3 -0
  59. package/lib/modal/modal-config.d.ts +3 -0
  60. package/lib/modal/modal-stack.d.ts +3 -0
  61. package/lib/modal/modal-window.d.ts +3 -0
  62. package/lib/modal/modal.service.d.ts +3 -0
  63. package/lib/pagination/pagination.component.d.ts +3 -0
  64. package/lib/radiogroup/radiogroup.component.d.ts +3 -0
  65. package/lib/select/select.component.d.ts +3 -0
  66. package/lib/tooltip/tooltip.component.d.ts +3 -0
  67. package/lib/tooltip/tooltip.directive.d.ts +3 -0
  68. package/lib/tooltip/tooltip.service.d.ts +3 -0
  69. package/lib/voice-recognition/voice-recognition.directive.d.ts +3 -0
  70. package/metadev-lux.d.ts +1 -16
  71. package/package.json +23 -11
  72. package/public-api.d.ts +12 -7
  73. package/bundles/metadev-lux.umd.js +0 -4647
  74. package/bundles/metadev-lux.umd.js.map +0 -1
  75. package/esm2015/lib/autocomplete/autocomplete.component.js +0 -455
  76. package/esm2015/lib/autocomplete-list/autocomplete-list.component.js +0 -230
  77. package/esm2015/lib/breadcrumb/breadcrumb.component.js +0 -77
  78. package/esm2015/lib/checkbox/checkbox.component.js +0 -142
  79. package/esm2015/lib/datetime/datetime.component.js +0 -275
  80. package/esm2015/lib/filter/filter.component.js +0 -140
  81. package/esm2015/lib/geolocation/geolocation.component.js +0 -371
  82. package/esm2015/lib/geolocation/openlayer-loader.service.js +0 -63
  83. package/esm2015/lib/helperFns.js +0 -93
  84. package/esm2015/lib/input/input.component.js +0 -371
  85. package/esm2015/lib/lux.module.js +0 -83
  86. package/esm2015/lib/map/map.component.js +0 -261
  87. package/esm2015/lib/modal/modal-backdrop.js +0 -19
  88. package/esm2015/lib/modal/modal-config.js +0 -12
  89. package/esm2015/lib/modal/modal-stack.js +0 -182
  90. package/esm2015/lib/modal/modal-window.js +0 -92
  91. package/esm2015/lib/modal/modal.service.js +0 -28
  92. package/esm2015/lib/pagination/pagination.component.js +0 -134
  93. package/esm2015/lib/radiogroup/radiogroup.component.js +0 -114
  94. package/esm2015/lib/select/select.component.js +0 -131
  95. package/esm2015/lib/tooltip/tooltip.component.js +0 -19
  96. package/esm2015/lib/tooltip/tooltip.directive.js +0 -52
  97. package/esm2015/lib/voice-recognition/voice-recognition.directive.js +0 -76
  98. package/esm2015/metadev-lux.js +0 -21
  99. package/esm2015/public-api.js +0 -16
  100. package/fesm2015/metadev-lux.js +0 -4025
  101. package/fesm2015/metadev-lux.js.map +0 -1
  102. package/metadev-lux.metadata.json +0 -1
@@ -0,0 +1,452 @@
1
+ import { Component, Input, Output, EventEmitter, ElementRef, ViewChild, forwardRef } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
3
+ import { hasValue, isInitialAndEmpty, isValidEmail, isValidNumber, isValidUrl, isValidColor, normalizeDate } from '../helperFns';
4
+ import { languageDetector } from '../lang';
5
+ import { RegexpService } from './regexp.service';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "./regexp.service";
8
+ import * as i2 from "@angular/common";
9
+ export class InputComponent {
10
+ constructor(regexpService) {
11
+ this.regexpService = regexpService;
12
+ this.touched = false;
13
+ this.dirty = false;
14
+ this.lastErrors = null;
15
+ this._value = '';
16
+ this._pattern = undefined;
17
+ this._regexp = undefined;
18
+ this.userErrors = {
19
+ en: {
20
+ required: 'Required field.',
21
+ min: 'Minimum value is $min.',
22
+ max: 'Maximum value is $max.',
23
+ email: 'Format should match example@example.com.',
24
+ url: 'Format should match https://example.com.',
25
+ color: 'Format should match #XXXXXX.'
26
+ },
27
+ es: {
28
+ required: 'El campo es obligatorio.',
29
+ min: 'El valor mínimo es $min.',
30
+ max: 'El valor máximo es $max.',
31
+ email: 'El campo debe tener un formato como ejemplo@ejemplo.com.',
32
+ url: 'El campo debe tener un formato como https://ejemplo.com.',
33
+ color: 'El campo debe tener un formato como #XXXXXX.'
34
+ }
35
+ };
36
+ this.lang = languageDetector();
37
+ this.inlineErrors = false;
38
+ this.readonly = null;
39
+ this.valueChange = new EventEmitter();
40
+ this.keyPress = new EventEmitter();
41
+ this.onChange = (value) => { };
42
+ this.onTouched = () => { };
43
+ }
44
+ get className() {
45
+ return this.checkClassName();
46
+ }
47
+ get color() {
48
+ return this.checkColor();
49
+ }
50
+ set disabled(v) {
51
+ v = typeof v === 'string' ? true : v;
52
+ this._disabled = v;
53
+ }
54
+ get disabled() {
55
+ return this._disabled;
56
+ }
57
+ set pattern(p) {
58
+ this._pattern = p;
59
+ if (p === undefined) {
60
+ this._regexp = undefined;
61
+ }
62
+ else {
63
+ try {
64
+ this._regexp = new RegExp(p);
65
+ }
66
+ catch (e) {
67
+ this._pattern = undefined;
68
+ this._regexp = undefined;
69
+ }
70
+ }
71
+ }
72
+ get pattern() {
73
+ return this._pattern;
74
+ }
75
+ set currency(v) {
76
+ this._currency = v.toUpperCase();
77
+ }
78
+ get currency() {
79
+ return this._currency;
80
+ }
81
+ set placeholder(v) {
82
+ this._placeholder = v;
83
+ }
84
+ get placeholder() {
85
+ return this._placeholder ? this._placeholder : '';
86
+ }
87
+ set required(v) {
88
+ this._required = v;
89
+ }
90
+ get required() {
91
+ return this._required;
92
+ }
93
+ set type(v) {
94
+ this._type = v.toLowerCase();
95
+ this.domain = v.toLowerCase();
96
+ this.checkType(v);
97
+ }
98
+ get type() {
99
+ return this._type ? this._type : 'text';
100
+ }
101
+ set value(v) {
102
+ v = v === undefined ? null : v;
103
+ if (v === this._value) {
104
+ return; // prevent events when there is no changes
105
+ }
106
+ const initialAndEmpty = isInitialAndEmpty(this._value, v);
107
+ if (this.type === 'date') {
108
+ v = normalizeDate(v);
109
+ }
110
+ this._value = v;
111
+ this.onChange(v);
112
+ if (!initialAndEmpty) {
113
+ this.valueChange.emit(v);
114
+ }
115
+ }
116
+ get value() {
117
+ if (this.isPercentage() || this.isPermillage() || this.isNumber()) {
118
+ const numVal = parseFloat(this._value);
119
+ if (!Number.isNaN(numVal)) {
120
+ return numVal;
121
+ }
122
+ }
123
+ return this._value;
124
+ }
125
+ // ControlValueAccessor Interface implementation
126
+ writeValue(value) {
127
+ this.value = value;
128
+ this.setValueInControl(value);
129
+ }
130
+ registerOnChange(onChange) {
131
+ this.onChange = onChange;
132
+ }
133
+ registerOnTouched(onTouched) {
134
+ this.onTouched = onTouched;
135
+ }
136
+ markAsTouched() {
137
+ if (!this.touched) {
138
+ this.onTouched();
139
+ this.touched = true;
140
+ }
141
+ }
142
+ setDisabledState(disabled) {
143
+ this.disabled = disabled;
144
+ }
145
+ // End of ControlValueAccessor Interface implementation
146
+ setValueInControl(v) {
147
+ if (this.domain === 'date') {
148
+ v = normalizeDate(v);
149
+ }
150
+ if (this.input) {
151
+ this.input.nativeElement.value = v;
152
+ }
153
+ if (this.textarea) {
154
+ this.textarea.nativeElement.value = v;
155
+ }
156
+ }
157
+ // Validator interface
158
+ registerOnValidatorChange() { }
159
+ validate(control) {
160
+ const value = control.value;
161
+ let result = null;
162
+ if (this.required && !hasValue(value)) {
163
+ result = result || {};
164
+ result.required = { value, reason: 'Required field.' };
165
+ }
166
+ if (this._regexp && hasValue(value) && !this._regexp.test(value)) {
167
+ result = result || {};
168
+ result.pattern = {
169
+ value,
170
+ reason: `Value must follow the pattern: ${this._pattern}`
171
+ };
172
+ }
173
+ if (this.type === 'email' && hasValue(value) && !isValidEmail(value)) {
174
+ result = result || {};
175
+ result.email = { value, reason: 'Invalid email.' };
176
+ }
177
+ if (this.type === 'url' && hasValue(value) && !isValidUrl(value)) {
178
+ result = result || {};
179
+ result.url = { value, reason: 'Invalid URL.' };
180
+ }
181
+ if (this.type === 'color' && hasValue(value) && !isValidColor(value)) {
182
+ result = result || {};
183
+ result.color = { value, reason: 'Invalid color.' };
184
+ }
185
+ if (this.type === 'number' && hasValue(value) && !isValidNumber(value)) {
186
+ result = result || {};
187
+ result.numeric = { value, reason: 'Invalid number.' };
188
+ }
189
+ if (this.type === 'date' ||
190
+ this.type === 'time' ||
191
+ this.type === 'timestamp') {
192
+ if (typeof this.min === 'string' &&
193
+ hasValue(value) &&
194
+ String(value).localeCompare(this.min) === -1) {
195
+ result = result || {};
196
+ result.min = {
197
+ value,
198
+ min: this.min,
199
+ reason: `Value is lower than minimum value: ${this.min}.`
200
+ };
201
+ }
202
+ if (typeof this.max === 'string' &&
203
+ hasValue(value) &&
204
+ String(value).localeCompare(this.max) !== -1) {
205
+ result = result || {};
206
+ result.max = {
207
+ value,
208
+ max: this.max,
209
+ reason: `Value is greater than than maximum value: ${this.max}.`
210
+ };
211
+ }
212
+ }
213
+ if (this.type === 'percentage' ||
214
+ this.type === 'permillage' ||
215
+ this.type === 'number' ||
216
+ this.type === 'currency') {
217
+ if (hasValue(this.min) && hasValue(value) && value < +this.min) {
218
+ result = result || {};
219
+ result.min = {
220
+ value,
221
+ min: this.min,
222
+ reason: `Value is lower than minimum value: ${this.min}.`
223
+ };
224
+ }
225
+ if (hasValue(this.max) && hasValue(value) && value > +this.max) {
226
+ result = result || {};
227
+ result.max = {
228
+ value,
229
+ max: this.max,
230
+ reason: `Value is greater than than maximum value: ${this.max}.`
231
+ };
232
+ }
233
+ }
234
+ this.lastErrors = result;
235
+ return result;
236
+ }
237
+ // End of Validator interface
238
+ ngOnInit() {
239
+ this.inputId = this.inputId
240
+ ? this.inputId
241
+ : `${this.type}$${InputComponent.idCounter++}`;
242
+ }
243
+ onLostFocus() {
244
+ this.markAsTouched();
245
+ }
246
+ onKeyUp(newValue) {
247
+ this.value = newValue;
248
+ }
249
+ onChangeValue(newValue) {
250
+ this.value = newValue;
251
+ if (this.isColor()) {
252
+ this.colorpicker.nativeElement.value = undefined;
253
+ }
254
+ this.markAsTouched();
255
+ }
256
+ onKeyPress(event) {
257
+ this.keyPress.emit(event);
258
+ }
259
+ onColorPicked(newValue) {
260
+ this.onChangeValue(newValue);
261
+ this.setValueInControl(newValue);
262
+ }
263
+ isUrl() {
264
+ return this.type === 'url';
265
+ }
266
+ isColor() {
267
+ return this.type === 'color';
268
+ }
269
+ isNumber() {
270
+ return this.type === 'number';
271
+ }
272
+ isPercentage() {
273
+ return this.type === 'percentage';
274
+ }
275
+ isPermillage() {
276
+ return this.type === 'permillage';
277
+ }
278
+ hasPrefix() {
279
+ return this.currency === 'USD';
280
+ }
281
+ hasPostfix() {
282
+ return (this.currency === 'EUR' ||
283
+ this.isPercentage() ||
284
+ this.isPermillage() ||
285
+ (this.isUrl() && !!this.value) ||
286
+ this.isColor());
287
+ }
288
+ checkClassName() {
289
+ return this.disabled
290
+ ? this.readonly
291
+ ? 'disabled readonly'
292
+ : 'disabled'
293
+ : this.readonly
294
+ ? 'readonly'
295
+ : '';
296
+ }
297
+ checkColor() {
298
+ return this.type === 'color' && isValidColor(this.value)
299
+ ? this.value
300
+ : 'initial';
301
+ }
302
+ checkType(type) {
303
+ switch (type) {
304
+ case 'email':
305
+ this.setEmailPatterns();
306
+ break;
307
+ case 'url':
308
+ this.setUrlPatterns();
309
+ break;
310
+ case 'color':
311
+ this.setColorPatterns();
312
+ break;
313
+ case 'date':
314
+ this.setDatePatterns();
315
+ break;
316
+ case 'time':
317
+ this.setTimePatterns();
318
+ break;
319
+ case 'password':
320
+ this.setPasswordPatterns();
321
+ break;
322
+ case 'number':
323
+ this.setNumberPatterns();
324
+ break;
325
+ case 'currency':
326
+ this.setCurrencyPatterns();
327
+ break;
328
+ case 'percentage':
329
+ this.setPercentagePatterns();
330
+ break;
331
+ case 'permillage':
332
+ this.setPermillagePatterns();
333
+ break;
334
+ default:
335
+ break;
336
+ }
337
+ }
338
+ setEmailPatterns() { }
339
+ setUrlPatterns() { }
340
+ setColorPatterns() {
341
+ this.domain = 'text';
342
+ }
343
+ setDatePatterns() {
344
+ this.min = this.min || '1900-01-01';
345
+ this.max = this.max || '2100-01-01';
346
+ }
347
+ setTimePatterns() { }
348
+ setPasswordPatterns() { }
349
+ setNumberPatterns() {
350
+ this.domain = 'number';
351
+ this.placeholder = '0';
352
+ }
353
+ setCurrencyPatterns() {
354
+ this.domain = 'number';
355
+ this.step = this.step || 0.1;
356
+ this.min = this.min || 0.0;
357
+ this.max = this.max || 10000.0;
358
+ this.value = 0.0;
359
+ }
360
+ setPercentagePatterns() {
361
+ this.domain = 'number';
362
+ this.step = this.step || 0.01;
363
+ this.min = this.min || 0.0;
364
+ this.max = this.max || 100.0;
365
+ this.placeholder = '0.00';
366
+ }
367
+ setPermillagePatterns() {
368
+ this.domain = 'number';
369
+ this.step = this.step || 0.01;
370
+ this.min = this.min || 0.0;
371
+ this.max = this.max || 1000.0;
372
+ this.placeholder = '0.00';
373
+ }
374
+ }
375
+ InputComponent.idCounter = 0;
376
+ InputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: InputComponent, deps: [{ token: i1.RegexpService }], target: i0.ɵɵFactoryTarget.Component });
377
+ InputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: InputComponent, selector: "lux-input", inputs: { rows: "rows", cols: "cols", step: "step", min: "min", max: "max", lang: "lang", inlineErrors: "inlineErrors", inputId: "inputId", ariaLabel: ["aria-label", "ariaLabel"], readonly: "readonly", disabled: "disabled", pattern: "pattern", currency: "currency", placeholder: "placeholder", required: "required", type: "type", value: "value" }, outputs: { valueChange: "valueChange", keyPress: "keyPress" }, providers: [
378
+ {
379
+ provide: NG_VALUE_ACCESSOR,
380
+ multi: true,
381
+ useExisting: forwardRef(() => InputComponent)
382
+ },
383
+ {
384
+ provide: NG_VALIDATORS,
385
+ multi: true,
386
+ useExisting: forwardRef(() => InputComponent)
387
+ }
388
+ ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "textarea", first: true, predicate: ["textarea"], descendants: true }, { propertyName: "colorpicker", first: true, predicate: ["colorpicker"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"currency && currency === 'USD'\" class=\"prefix rounded-left symbol\" [ngClass]=\"className\">\n <span>$</span>\n</div>\n<input\n #input\n *ngIf=\"type !== 'textarea'\"\n [class]=\"hasPrefix() ? (hasPostfix() ? 'infix' : 'postfix rounded-right') : (hasPostfix() ? 'prefix rounded-left' : 'rounded')\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [type]=\"domain\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"min?.toString() || undefined\"\n [attr.max]=\"max?.toString() || undefined\"\n [attr.step]=\"step?.toString() || undefined\"\n [attr.pattern]=\"pattern || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(input.value)\"\n (change)=\"onChangeValue(input.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<textarea\n #textarea\n *ngIf=\"type === 'textarea'\"\n class=\"rounded\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.cols]=\"cols?.toString() || undefined\"\n [attr.rows]=\"rows?.toString() || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(textarea.value)\"\n (change)=\"onChangeValue(textarea.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n></textarea>\n<div *ngIf=\"currency && currency === 'EUR'\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>\u20AC</span>\n</div>\n<div *ngIf=\"isPercentage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>%</span>\n</div>\n<div *ngIf=\"isPermillage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>\u2030</span>\n</div>\n<div *ngIf=\"isUrl() && !!value\" class=\"postfix rounded-right symbol clickable\" [ngClass]=\"className\">\n <a href=\"{{ value }}\" target=\"_blank\">\n <span class=\"icon-external\"></span>\n </a>\n</div>\n<div *ngIf=\"isColor()\" class=\"postfix rounded-right bordered transparency\" [ngClass]=\"className\">\n <div class=\"rounded-right full-space\" [ngStyle]=\"{'background-color': color}\">\n <input\n #colorpicker\n class=\"minimal-space clickable invisible rounded-right full-space\"\n [id]=\"inputId + '$colorpicker'\"\n type=\"color\"\n [attr.value]=\"value\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n (change)=\"onColorPicked(colorpicker.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n />\n </div>\n</div>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ userErrors[this.lang].required }}\n </div>\n <div *ngIf=\"lastErrors.email\">{{ userErrors[this.lang].email }}</div>\n <div *ngIf=\"lastErrors.url\">{{ userErrors[this.lang].url }}</div>\n <div *ngIf=\"lastErrors.min\">\n {{ userErrors[this.lang].min.replace('$min', lastErrors.min.min) }}\n </div>\n <div *ngIf=\"lastErrors.max\">\n {{ userErrors[this.lang].max.replace('$max', lastErrors.max.max) }}\n </div>\n</div>\n", styles: [":focus{z-index:1}input,select,textarea{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057);margin:0rem;margin:var(--lux-input-margin, 0rem);padding:0rem .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0rem .5rem;margin-bottom:0;font-weight:400;color:default;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:default;background:var(--lux-symbol-background, default);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.bordered,.symbol{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:.25rem;border-radius:var(--lux-border-radius, .25rem)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none;display:flex;align-items:center}.monospace{font-family:monospace}.default-font{color:#000;color:var(--lux-font-color, black)}:host{display:flex;align-items:stretch;min-height:1.5rem}.readonly{border:none}.readonly:focus{border:none;outline:none}.disabled{background-color:#f1f1f1;background-color:var(--lux-disabled-color, #f1f1f1);border-color:#6d6d6d;border-color:var(--lux-disabled-border-color, #6d6d6d)}.clickable{cursor:pointer}.full-space{width:100%;height:100%;margin:0;padding:0}.minimal-space,.icon,.icon-external{min-width:1rem;min-height:1rem}.icon,.icon-external{display:inline-block;background-size:1rem 1rem;background-position:center;background-repeat:no-repeat;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);z-index:1}.icon-external{background:url(/assets/img/external.svg) no-repeat center;background:var(--lux-input-icon-external, url(/assets/img/external.svg) no-repeat center);background-size:1rem;background-position-y:.1rem;height:100%}.invisible{opacity:0}.transparency{background-image:conic-gradient(white 0deg 90deg,lightgray 90deg 180deg,white 180deg 270deg,lightgray 270deg 360deg)}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
389
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: InputComponent, decorators: [{
390
+ type: Component,
391
+ args: [{ selector: 'lux-input', providers: [
392
+ {
393
+ provide: NG_VALUE_ACCESSOR,
394
+ multi: true,
395
+ useExisting: forwardRef(() => InputComponent)
396
+ },
397
+ {
398
+ provide: NG_VALIDATORS,
399
+ multi: true,
400
+ useExisting: forwardRef(() => InputComponent)
401
+ }
402
+ ], template: "<div *ngIf=\"currency && currency === 'USD'\" class=\"prefix rounded-left symbol\" [ngClass]=\"className\">\n <span>$</span>\n</div>\n<input\n #input\n *ngIf=\"type !== 'textarea'\"\n [class]=\"hasPrefix() ? (hasPostfix() ? 'infix' : 'postfix rounded-right') : (hasPostfix() ? 'prefix rounded-left' : 'rounded')\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [type]=\"domain\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"min?.toString() || undefined\"\n [attr.max]=\"max?.toString() || undefined\"\n [attr.step]=\"step?.toString() || undefined\"\n [attr.pattern]=\"pattern || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(input.value)\"\n (change)=\"onChangeValue(input.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<textarea\n #textarea\n *ngIf=\"type === 'textarea'\"\n class=\"rounded\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.cols]=\"cols?.toString() || undefined\"\n [attr.rows]=\"rows?.toString() || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(textarea.value)\"\n (change)=\"onChangeValue(textarea.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n></textarea>\n<div *ngIf=\"currency && currency === 'EUR'\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>\u20AC</span>\n</div>\n<div *ngIf=\"isPercentage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>%</span>\n</div>\n<div *ngIf=\"isPermillage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>\u2030</span>\n</div>\n<div *ngIf=\"isUrl() && !!value\" class=\"postfix rounded-right symbol clickable\" [ngClass]=\"className\">\n <a href=\"{{ value }}\" target=\"_blank\">\n <span class=\"icon-external\"></span>\n </a>\n</div>\n<div *ngIf=\"isColor()\" class=\"postfix rounded-right bordered transparency\" [ngClass]=\"className\">\n <div class=\"rounded-right full-space\" [ngStyle]=\"{'background-color': color}\">\n <input\n #colorpicker\n class=\"minimal-space clickable invisible rounded-right full-space\"\n [id]=\"inputId + '$colorpicker'\"\n type=\"color\"\n [attr.value]=\"value\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n (change)=\"onColorPicked(colorpicker.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n />\n </div>\n</div>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ userErrors[this.lang].required }}\n </div>\n <div *ngIf=\"lastErrors.email\">{{ userErrors[this.lang].email }}</div>\n <div *ngIf=\"lastErrors.url\">{{ userErrors[this.lang].url }}</div>\n <div *ngIf=\"lastErrors.min\">\n {{ userErrors[this.lang].min.replace('$min', lastErrors.min.min) }}\n </div>\n <div *ngIf=\"lastErrors.max\">\n {{ userErrors[this.lang].max.replace('$max', lastErrors.max.max) }}\n </div>\n</div>\n", styles: [":focus{z-index:1}input,select,textarea{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057);margin:0rem;margin:var(--lux-input-margin, 0rem);padding:0rem .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0rem .5rem;margin-bottom:0;font-weight:400;color:default;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:default;background:var(--lux-symbol-background, default);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.bordered,.symbol{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:.25rem;border-radius:var(--lux-border-radius, .25rem)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none;display:flex;align-items:center}.monospace{font-family:monospace}.default-font{color:#000;color:var(--lux-font-color, black)}:host{display:flex;align-items:stretch;min-height:1.5rem}.readonly{border:none}.readonly:focus{border:none;outline:none}.disabled{background-color:#f1f1f1;background-color:var(--lux-disabled-color, #f1f1f1);border-color:#6d6d6d;border-color:var(--lux-disabled-border-color, #6d6d6d)}.clickable{cursor:pointer}.full-space{width:100%;height:100%;margin:0;padding:0}.minimal-space,.icon,.icon-external{min-width:1rem;min-height:1rem}.icon,.icon-external{display:inline-block;background-size:1rem 1rem;background-position:center;background-repeat:no-repeat;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);z-index:1}.icon-external{background:url(/assets/img/external.svg) no-repeat center;background:var(--lux-input-icon-external, url(/assets/img/external.svg) no-repeat center);background-size:1rem;background-position-y:.1rem;height:100%}.invisible{opacity:0}.transparency{background-image:conic-gradient(white 0deg 90deg,lightgray 90deg 180deg,white 180deg 270deg,lightgray 270deg 360deg)}\n"] }]
403
+ }], ctorParameters: function () { return [{ type: i1.RegexpService }]; }, propDecorators: { input: [{
404
+ type: ViewChild,
405
+ args: ['input', { static: false }]
406
+ }], textarea: [{
407
+ type: ViewChild,
408
+ args: ['textarea', { static: false }]
409
+ }], colorpicker: [{
410
+ type: ViewChild,
411
+ args: ['colorpicker', { static: false }]
412
+ }], rows: [{
413
+ type: Input
414
+ }], cols: [{
415
+ type: Input
416
+ }], step: [{
417
+ type: Input
418
+ }], min: [{
419
+ type: Input
420
+ }], max: [{
421
+ type: Input
422
+ }], lang: [{
423
+ type: Input
424
+ }], inlineErrors: [{
425
+ type: Input
426
+ }], inputId: [{
427
+ type: Input
428
+ }], ariaLabel: [{
429
+ type: Input,
430
+ args: ['aria-label']
431
+ }], readonly: [{
432
+ type: Input
433
+ }], disabled: [{
434
+ type: Input
435
+ }], pattern: [{
436
+ type: Input
437
+ }], currency: [{
438
+ type: Input
439
+ }], placeholder: [{
440
+ type: Input
441
+ }], required: [{
442
+ type: Input
443
+ }], type: [{
444
+ type: Input
445
+ }], value: [{
446
+ type: Input
447
+ }], valueChange: [{
448
+ type: Output
449
+ }], keyPress: [{
450
+ type: Output
451
+ }] } });
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvaW5wdXQvaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvaW5wdXQvaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixVQUFVLEVBQ1YsU0FBUyxFQUNULFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsaUJBQWlCLEVBS2pCLGFBQWEsRUFDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixhQUFhLEVBQ2QsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQWtCakQsTUFBTSxPQUFPLGNBQWM7SUE4SnpCLFlBQW1CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBdkovQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxlQUFVLEdBQTRCLElBQUksQ0FBQztRQUduQyxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBR2pCLGFBQVEsR0FBWSxTQUFTLENBQUM7UUFDOUIsWUFBTyxHQUFZLFNBQVMsQ0FBQztRQUk5QixlQUFVLEdBQUc7WUFDbEIsRUFBRSxFQUFFO2dCQUNGLFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLEdBQUcsRUFBRSx3QkFBd0I7Z0JBQzdCLEdBQUcsRUFBRSx3QkFBd0I7Z0JB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QUFLO2dCQW1CRixRQUFRO3NCQURYLEtBQUs7Z0JBU0YsV0FBVztzQkFEZCxLQUFLO2dCQVNGLFFBQVE7c0JBRFgsS0FBSztnQkFTRixJQUFJO3NCQURQLEtBQUs7Z0JBV0YsS0FBSztzQkFEUixLQUFLO2dCQTBCSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25Jbml0LFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEFic3RyYWN0Q29udHJvbCxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxuICBOR19WQUxJREFUT1JTXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIGhhc1ZhbHVlLFxuICBpc0luaXRpYWxBbmRFbXB0eSxcbiAgaXNWYWxpZEVtYWlsLFxuICBpc1ZhbGlkTnVtYmVyLFxuICBpc1ZhbGlkVXJsLFxuICBpc1ZhbGlkQ29sb3IsXG4gIG5vcm1hbGl6ZURhdGVcbn0gZnJvbSAnLi4vaGVscGVyRm5zJztcbmltcG9ydCB7IGxhbmd1YWdlRGV0ZWN0b3IgfSBmcm9tICcuLi9sYW5nJztcbmltcG9ydCB7IFJlZ2V4cFNlcnZpY2UgfSBmcm9tICcuL3JlZ2V4cC5zZXJ2aWNlJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x1eC1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dENvbXBvbmVudClcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0Q29tcG9uZW50KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XG4gIHN0YXRpYyBpZENvdW50ZXIgPSAwO1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0ZXh0YXJlYScsIHsgc3RhdGljOiBmYWxzZSB9KSB0ZXh0YXJlYTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY29sb3JwaWNrZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgY29sb3JwaWNrZXI6IEVsZW1lbnRSZWY7XG5cbiAgdG91Y2hlZCA9IGZhbHNlO1xuICBkaXJ0eSA9IGZhbHNlO1xuICBsYXN0RXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IHN0cmluZyB8IGJvb2xlYW47XG4gIHByaXZhdGUgX3ZhbHVlOiBhbnkgPSAnJztcbiAgcHJpdmF0ZSBfdHlwZTogc3RyaW5nO1xuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nO1xuICBwcml2YXRlIF9wYXR0ZXJuPzogc3RyaW5nID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIF9yZWdleHA/OiBSZWdFeHAgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2N1cnJlbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3JlcXVpcmVkOiBib29sZWFuO1xuXG4gIHB1YmxpYyB1c2VyRXJyb3JzID0ge1xuICAgIGVuOiB7XG4gICAgICByZXF1aXJlZDogJ1JlcXVpcmVkIGZpZWxkLicsXG4gICAgICBtaW46ICdNaW5pbXVtIHZhbHVlIGlzICRtaW4uJyxcbiAgICAgIG1heDogJ01heGltdW0gdmFsdWUgaXMgJG1heC4nLFxuICAgICAgZW1haWw6ICdGb3JtYXQgc2hvdWxkIG1hdGNoIGV4YW1wbGVAZXhhbXBsZS5jb20uJyxcbiAgICAgIHVybDogJ0Zvcm1hdCBzaG91bGQgbWF0Y2ggaHR0cHM6Ly9leGFtcGxlLmNvbS4nLFxuICAgICAgY29sb3I6ICdGb3JtYXQgc2hvdWxkIG1hdGNoICNYWFhYWFguJ1xuICAgIH0sXG4gICAgZXM6IHtcbiAgICAgIHJlcXVpcmVkOiAnRWwgY2FtcG8gZXMgb2JsaWdhdG9yaW8uJyxcbiAgICAgIG1pbjogJ0VsIHZhbG9yIG3DrW5pbW8gZXMgJG1pbi4nLFxuICAgICAgbWF4OiAnRWwgdmFsb3IgbcOheGltbyBlcyAkbWF4LicsXG4gICAgICBlbWFpbDogJ0VsIGNhbXBvIGRlYmUgdGVuZXIgdW4gZm9ybWF0byBjb21vIGVqZW1wbG9AZWplbXBsby5jb20uJyxcbiAgICAgIHVybDogJ0VsIGNhbXBvIGRlYmUgdGVuZXIgdW4gZm9ybWF0byBjb21vIGh0dHBzOi8vZWplbXBsby5jb20uJyxcbiAgICAgIGNvbG9yOiAnRWwgY2FtcG8gZGViZSB0ZW5lciB1biBmb3JtYXRvIGNvbW8gI1hYWFhYWC4nXG4gICAgfVxuICB9O1xuXG4gIHB1YmxpYyBkb21haW46IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIHJvd3M/OiBudW1iZXIgfCBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb2xzPzogbnVtYmVyIHwgc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3RlcD86IG51bWJlcjtcbiAgQElucHV0KClcbiAgcHVibGljIG1pbj86IG51bWJlciB8IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIG1heD86IG51bWJlciB8IHN0cmluZztcblxuICBnZXQgY2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tDbGFzc05hbWUoKTtcbiAgfVxuXG4gIGdldCBjb2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNoZWNrQ29sb3IoKTtcbiAgfVxuXG4gIEBJbnB1dCgpIGxhbmcgPSBsYW5ndWFnZURldGVjdG9yKCk7XG4gIEBJbnB1dCgpIHB1YmxpYyBpbmxpbmVFcnJvcnMgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGlucHV0SWQ6IHN0cmluZztcbiAgQElucHV0KCdhcmlhLWxhYmVsJykgcHVibGljIGFyaWFMYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgcmVhZG9ubHk6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQodjogc3RyaW5nIHwgYm9vbGVhbikge1xuICAgIHYgPSB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB0cnVlIDogdjtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHY7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCk6IHN0cmluZyB8IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBwYXR0ZXJuKHA6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BhdHRlcm4gPSBwO1xuICAgIGlmIChwID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3JlZ2V4cCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fcmVnZXhwID0gbmV3IFJlZ0V4cChwKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5fcGF0dGVybiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fcmVnZXhwID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgcGF0dGVybigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wYXR0ZXJuO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGN1cnJlbmN5KHY6IHN0cmluZykge1xuICAgIHRoaXMuX2N1cnJlbmN5ID0gdi50b1VwcGVyQ2FzZSgpO1xuICB9XG4gIGdldCBjdXJyZW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW5jeTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBwbGFjZWhvbGRlcih2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHY7XG4gIH1cbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyID8gdGhpcy5fcGxhY2Vob2xkZXIgOiAnJztcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCByZXF1aXJlZCh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSB2O1xuICB9XG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdHlwZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90eXBlID0gdi50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuZG9tYWluID0gdi50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuY2hlY2tUeXBlKHYpO1xuICB9XG4gIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGUgPyB0aGlzLl90eXBlIDogJ3RleHQnO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgIHYgPSB2ID09PSB1bmRlZmluZWQgPyBudWxsIDogdjtcbiAgICBpZiAodiA9PT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHJldHVybjsgLy8gcHJldmVudCBldmVudHMgd2hlbiB0aGVyZSBpcyBubyBjaGFuZ2VzXG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxBbmRFbXB0eSA9IGlzSW5pdGlhbEFuZEVtcHR5KHRoaXMuX3ZhbHVlLCB2KTtcbiAgICBpZiAodGhpcy50eXBlID09PSAnZGF0ZScpIHtcbiAgICAgIHYgPSBub3JtYWxpemVEYXRlKHYpO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLm9uQ2hhbmdlKHYpO1xuICAgIGlmICghaW5pdGlhbEFuZEVtcHR5KSB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodik7XG4gICAgfVxuICB9XG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzUGVyY2VudGFnZSgpIHx8IHRoaXMuaXNQZXJtaWxsYWdlKCkgfHwgdGhpcy5pc051bWJlcigpKSB7XG4gICAgICBjb25zdCBudW1WYWwgPSBwYXJzZUZsb2F0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIGlmICghTnVtYmVyLmlzTmFOKG51bVZhbCkpIHtcbiAgICAgICAgcmV0dXJuIG51bVZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkga2V5UHJlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XG5cbiAgb25DaGFuZ2UgPSAodmFsdWUpOiB2b2lkID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVnZXhwU2VydmljZTogUmVnZXhwU2VydmljZSkge31cblxuICAvLyBDb250cm9sVmFsdWVBY2Nlc3NvciBJbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0VmFsdWVJbkNvbnRyb2wodmFsdWUpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IG9uQ2hhbmdlO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IG9uVG91Y2hlZDtcbiAgfVxuXG4gIG1hcmtBc1RvdWNoZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB0aGlzLnRvdWNoZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cbiAgLy8gRW5kIG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yIEludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuXG4gIHByaXZhdGUgc2V0VmFsdWVJbkNvbnRyb2wodjogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZG9tYWluID09PSAnZGF0ZScpIHtcbiAgICAgIHYgPSBub3JtYWxpemVEYXRlKHYpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbnB1dCkge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdjtcbiAgICB9XG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEubmF0aXZlRWxlbWVudC52YWx1ZSA9IHY7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdG9yIGludGVyZmFjZVxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKCk6IHZvaWQge31cblxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGxldCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICFoYXNWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC5yZXF1aXJlZCA9IHsgdmFsdWUsIHJlYXNvbjogJ1JlcXVpcmVkIGZpZWxkLicgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3JlZ2V4cCAmJiBoYXNWYWx1ZSh2YWx1ZSkgJiYgIXRoaXMuX3JlZ2V4cC50ZXN0KHZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0LnBhdHRlcm4gPSB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICByZWFzb246IGBWYWx1ZSBtdXN0IGZvbGxvdyB0aGUgcGF0dGVybjogJHt0aGlzLl9wYXR0ZXJufWBcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdlbWFpbCcgJiYgaGFzVmFsdWUodmFsdWUpICYmICFpc1ZhbGlkRW1haWwodmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQuZW1haWwgPSB7IHZhbHVlLCByZWFzb246ICdJbnZhbGlkIGVtYWlsLicgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ3VybCcgJiYgaGFzVmFsdWUodmFsdWUpICYmICFpc1ZhbGlkVXJsKHZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0LnVybCA9IHsgdmFsdWUsIHJlYXNvbjogJ0ludmFsaWQgVVJMLicgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2NvbG9yJyAmJiBoYXNWYWx1ZSh2YWx1ZSkgJiYgIWlzVmFsaWRDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgIHJlc3VsdC5jb2xvciA9IHsgdmFsdWUsIHJlYXNvbjogJ0ludmFsaWQgY29sb3IuJyB9O1xuICAgIH1cbiAgICBpZiAodGhpcy50eXBlID09PSAnbnVtYmVyJyAmJiBoYXNWYWx1ZSh2YWx1ZSkgJiYgIWlzVmFsaWROdW1iZXIodmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubnVtZXJpYyA9IHsgdmFsdWUsIHJlYXNvbjogJ0ludmFsaWQgbnVtYmVyLicgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy50eXBlID09PSAnZGF0ZScgfHxcbiAgICAgIHRoaXMudHlwZSA9PT0gJ3RpbWUnIHx8XG4gICAgICB0aGlzLnR5cGUgPT09ICd0aW1lc3RhbXAnXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB0aGlzLm1pbiA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgaGFzVmFsdWUodmFsdWUpICYmXG4gICAgICAgIFN0cmluZyh2YWx1ZSkubG9jYWxlQ29tcGFyZSh0aGlzLm1pbikgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgICByZXN1bHQubWluID0ge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIG1pbjogdGhpcy5taW4sXG4gICAgICAgICAgcmVhc29uOiBgVmFsdWUgaXMgbG93ZXIgdGhhbiBtaW5pbXVtIHZhbHVlOiAke3RoaXMubWlufS5gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB0aGlzLm1heCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgaGFzVmFsdWUodmFsdWUpICYmXG4gICAgICAgIFN0cmluZyh2YWx1ZSkubG9jYWxlQ29tcGFyZSh0aGlzLm1heCkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgICByZXN1bHQubWF4ID0ge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIG1heDogdGhpcy5tYXgsXG4gICAgICAgICAgcmVhc29uOiBgVmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoYW4gbWF4aW11bSB2YWx1ZTogJHt0aGlzLm1heH0uYFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMudHlwZSA9PT0gJ3BlcmNlbnRhZ2UnIHx8XG4gICAgICB0aGlzLnR5cGUgPT09ICdwZXJtaWxsYWdlJyB8fFxuICAgICAgdGhpcy50eXBlID09PSAnbnVtYmVyJyB8fFxuICAgICAgdGhpcy50eXBlID09PSAnY3VycmVuY3knXG4gICAgKSB7XG4gICAgICBpZiAoaGFzVmFsdWUodGhpcy5taW4pICYmIGhhc1ZhbHVlKHZhbHVlKSAmJiB2YWx1ZSA8ICt0aGlzLm1pbikge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICAgIHJlc3VsdC5taW4gPSB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbWluOiB0aGlzLm1pbixcbiAgICAgICAgICByZWFzb246IGBWYWx1ZSBpcyBsb3dlciB0aGFuIG1pbmltdW0gdmFsdWU6ICR7dGhpcy5taW59LmBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNWYWx1ZSh0aGlzLm1heCkgJiYgaGFzVmFsdWUodmFsdWUpICYmIHZhbHVlID4gK3RoaXMubWF4KSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCB7fTtcbiAgICAgICAgcmVzdWx0Lm1heCA9IHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBtYXg6IHRoaXMubWF4LFxuICAgICAgICAgIHJlYXNvbjogYFZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGFuIG1heGltdW0gdmFsdWU6ICR7dGhpcy5tYXh9LmBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5sYXN0RXJyb3JzID0gcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gRW5kIG9mIFZhbGlkYXRvciBpbnRlcmZhY2VcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0SWQgPSB0aGlzLmlucHV0SWRcbiAgICAgID8gdGhpcy5pbnB1dElkXG4gICAgICA6IGAke3RoaXMudHlwZX0kJHtJbnB1dENvbXBvbmVudC5pZENvdW50ZXIrK31gO1xuICB9XG4gIG9uTG9zdEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICB9XG4gIG9uS2V5VXAobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBvbkNoYW5nZVZhbHVlKG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgaWYgKHRoaXMuaXNDb2xvcigpKSB7XG4gICAgICB0aGlzLmNvbG9ycGlja2VyLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICB9XG4gIG9uS2V5UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmtleVByZXNzLmVtaXQoZXZlbnQpO1xuICB9XG4gIG9uQ29sb3JQaWNrZWQobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VWYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5zZXRWYWx1ZUluQ29udHJvbChuZXdWYWx1ZSk7XG4gIH1cblxuICBpc1VybCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAndXJsJztcbiAgfVxuICBpc0NvbG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdjb2xvcic7XG4gIH1cbiAgaXNOdW1iZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ251bWJlcic7XG4gIH1cbiAgaXNQZXJjZW50YWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdwZXJjZW50YWdlJztcbiAgfVxuICBpc1Blcm1pbGxhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ3Blcm1pbGxhZ2UnO1xuICB9XG4gIGhhc1ByZWZpeCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW5jeSA9PT0gJ1VTRCc7XG4gIH1cbiAgaGFzUG9zdGZpeCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXJyZW5jeSA9PT0gJ0VVUicgfHxcbiAgICAgIHRoaXMuaXNQZXJjZW50YWdlKCkgfHxcbiAgICAgIHRoaXMuaXNQZXJtaWxsYWdlKCkgfHxcbiAgICAgICh0aGlzLmlzVXJsKCkgJiYgISF0aGlzLnZhbHVlKSB8fFxuICAgICAgdGhpcy5pc0NvbG9yKClcbiAgICApO1xuICB9XG5cbiAgY2hlY2tDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFxuICAgICAgPyB0aGlzLnJlYWRvbmx5XG4gICAgICAgID8gJ2Rpc2FibGVkIHJlYWRvbmx5J1xuICAgICAgICA6ICdkaXNhYmxlZCdcbiAgICAgIDogdGhpcy5yZWFkb25seVxuICAgICAgPyAncmVhZG9ubHknXG4gICAgICA6ICcnO1xuICB9XG5cbiAgY2hlY2tDb2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdjb2xvcicgJiYgaXNWYWxpZENvbG9yKHRoaXMudmFsdWUpXG4gICAgICA/IHRoaXMudmFsdWVcbiAgICAgIDogJ2luaXRpYWwnO1xuICB9XG5cbiAgY2hlY2tUeXBlKHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICB0aGlzLnNldEVtYWlsUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1cmwnOlxuICAgICAgICB0aGlzLnNldFVybFBhdHRlcm5zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY29sb3InOlxuICAgICAgICB0aGlzLnNldENvbG9yUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgdGhpcy5zZXREYXRlUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0aW1lJzpcbiAgICAgICAgdGhpcy5zZXRUaW1lUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwYXNzd29yZCc6XG4gICAgICAgIHRoaXMuc2V0UGFzc3dvcmRQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHRoaXMuc2V0TnVtYmVyUGF0dGVybnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgIHRoaXMuc2V0Q3VycmVuY3lQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BlcmNlbnRhZ2UnOlxuICAgICAgICB0aGlzLnNldFBlcmNlbnRhZ2VQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Blcm1pbGxhZ2UnOlxuICAgICAgICB0aGlzLnNldFBlcm1pbGxhZ2VQYXR0ZXJucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNldEVtYWlsUGF0dGVybnMoKTogdm9pZCB7fVxuXG4gIHNldFVybFBhdHRlcm5zKCk6IHZvaWQge31cblxuICBzZXRDb2xvclBhdHRlcm5zKCk6IHZvaWQge1xuICAgIHRoaXMuZG9tYWluID0gJ3RleHQnO1xuICB9XG5cbiAgc2V0RGF0ZVBhdHRlcm5zKCk6IHZvaWQge1xuICAgIHRoaXMubWluID0gdGhpcy5taW4gfHwgJzE5MDAtMDEtMDEnO1xuICAgIHRoaXMubWF4ID0gdGhpcy5tYXggfHwgJzIxMDAtMDEtMDEnO1xuICB9XG5cbiAgc2V0VGltZVBhdHRlcm5zKCk6IHZvaWQge31cblxuICBzZXRQYXNzd29yZFBhdHRlcm5zKCk6IHZvaWQge31cblxuICBzZXROdW1iZXJQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLmRvbWFpbiA9ICdudW1iZXInO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSAnMCc7XG4gIH1cblxuICBzZXRDdXJyZW5jeVBhdHRlcm5zKCk6IHZvaWQge1xuICAgIHRoaXMuZG9tYWluID0gJ251bWJlcic7XG4gICAgdGhpcy5zdGVwID0gdGhpcy5zdGVwIHx8IDAuMTtcbiAgICB0aGlzLm1pbiA9IHRoaXMubWluIHx8IDAuMDtcbiAgICB0aGlzLm1heCA9IHRoaXMubWF4IHx8IDEwMDAwLjA7XG4gICAgdGhpcy52YWx1ZSA9IDAuMDtcbiAgfVxuXG4gIHNldFBlcmNlbnRhZ2VQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLmRvbWFpbiA9ICdudW1iZXInO1xuICAgIHRoaXMuc3RlcCA9IHRoaXMuc3RlcCB8fCAwLjAxO1xuICAgIHRoaXMubWluID0gdGhpcy5taW4gfHwgMC4wO1xuICAgIHRoaXMubWF4ID0gdGhpcy5tYXggfHwgMTAwLjA7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9ICcwLjAwJztcbiAgfVxuXG4gIHNldFBlcm1pbGxhZ2VQYXR0ZXJucygpOiB2b2lkIHtcbiAgICB0aGlzLmRvbWFpbiA9ICdudW1iZXInO1xuICAgIHRoaXMuc3RlcCA9IHRoaXMuc3RlcCB8fCAwLjAxO1xuICAgIHRoaXMubWluID0gdGhpcy5taW4gfHwgMC4wO1xuICAgIHRoaXMubWF4ID0gdGhpcy5tYXggfHwgMTAwMC4wO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSAnMC4wMCc7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJjdXJyZW5jeSAmJiBjdXJyZW5jeSA9PT0gJ1VTRCdcIiBjbGFzcz1cInByZWZpeCByb3VuZGVkLWxlZnQgc3ltYm9sXCIgW25nQ2xhc3NdPVwiY2xhc3NOYW1lXCI+XG4gIDxzcGFuPiQ8L3NwYW4+XG48L2Rpdj5cbjxpbnB1dFxuICAjaW5wdXRcbiAgKm5nSWY9XCJ0eXBlICE9PSAndGV4dGFyZWEnXCJcbiAgW2NsYXNzXT1cImhhc1ByZWZpeCgpID8gKGhhc1Bvc3RmaXgoKSA/ICdpbmZpeCcgOiAncG9zdGZpeCByb3VuZGVkLXJpZ2h0JykgOiAoaGFzUG9zdGZpeCgpID8gJ3ByZWZpeCByb3VuZGVkLWxlZnQnIDogJ3JvdW5kZWQnKVwiXG4gIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiXG4gIHBsYWNlbWVudD1cInRvcFwiXG4gIFtpZF09XCJpbnB1dElkXCJcbiAgW3R5cGVdPVwiZG9tYWluXCJcbiAgW2F0dHIudmFsdWVdPVwidmFsdWVcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID09PSB0cnVlID8gJ3RydWUnIDogdW5kZWZpbmVkXCJcbiAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPT09IHRydWUgPyAndHJ1ZScgOiB1bmRlZmluZWRcIlxuICBbYXR0ci5taW5dPVwibWluPy50b1N0cmluZygpIHx8IHVuZGVmaW5lZFwiXG4gIFthdHRyLm1heF09XCJtYXg/LnRvU3RyaW5nKCkgfHwgdW5kZWZpbmVkXCJcbiAgW2F0dHIuc3RlcF09XCJzdGVwPy50b1N0cmluZygpIHx8IHVuZGVmaW5lZFwiXG4gIFthdHRyLnBhdHRlcm5dPVwicGF0dGVybiB8fCB1bmRlZmluZWRcIlxuICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAoa2V5dXApPVwib25LZXlVcChpbnB1dC52YWx1ZSlcIlxuICAoY2hhbmdlKT1cIm9uQ2hhbmdlVmFsdWUoaW5wdXQudmFsdWUpXCJcbiAgKGtleXByZXNzKT1cIm9uS2V5UHJlc3MoJGV2ZW50KVwiXG4gIChibHVyKT1cIm9uTG9zdEZvY3VzKClcIlxuLz5cbjx0ZXh0YXJlYVxuICAjdGV4dGFyZWFcbiAgKm5nSWY9XCJ0eXBlID09PSAndGV4dGFyZWEnXCJcbiAgY2xhc3M9XCJyb3VuZGVkXCJcbiAgW25nQ2xhc3NdPVwiY2xhc3NOYW1lXCJcbiAgcGxhY2VtZW50PVwidG9wXCJcbiAgW2lkXT1cImlucHV0SWRcIlxuICBbYXR0ci52YWx1ZV09XCJ2YWx1ZVwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPT09IHRydWUgPyAndHJ1ZScgOiB1bmRlZmluZWRcIlxuICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA9PT0gdHJ1ZSA/ICd0cnVlJyA6IHVuZGVmaW5lZFwiXG4gIFthdHRyLmNvbHNdPVwiY29scz8udG9TdHJpbmcoKSB8fCB1bmRlZmluZWRcIlxuICBbYXR0ci5yb3dzXT1cInJvd3M/LnRvU3RyaW5nKCkgfHwgdW5kZWZpbmVkXCJcbiAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgKGtleXVwKT1cIm9uS2V5VXAodGV4dGFyZWEudmFsdWUpXCJcbiAgKGNoYW5nZSk9XCJvbkNoYW5nZVZhbHVlKHRleHRhcmVhLnZhbHVlKVwiXG4gIChrZXlwcmVzcyk9XCJvbktleVByZXNzKCRldmVudClcIlxuICAoYmx1cik9XCJvbkxvc3RGb2N1cygpXCJcbj48L3RleHRhcmVhPlxuPGRpdiAqbmdJZj1cImN1cnJlbmN5ICYmIGN1cnJlbmN5ID09PSAnRVVSJ1wiIGNsYXNzPVwicG9zdGZpeCByb3VuZGVkLXJpZ2h0IHN5bWJvbFwiIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiPlxuICA8c3Bhbj7igqw8L3NwYW4+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJpc1BlcmNlbnRhZ2UoKVwiIGNsYXNzPVwicG9zdGZpeCByb3VuZGVkLXJpZ2h0IHN5bWJvbFwiIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiPlxuICA8c3Bhbj4lPC9zcGFuPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiaXNQZXJtaWxsYWdlKClcIiBjbGFzcz1cInBvc3RmaXggcm91bmRlZC1yaWdodCBzeW1ib2xcIiBbbmdDbGFzc109XCJjbGFzc05hbWVcIj5cbiAgPHNwYW4+4oCwPC9zcGFuPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiaXNVcmwoKSAmJiAhIXZhbHVlXCIgY2xhc3M9XCJwb3N0Zml4IHJvdW5kZWQtcmlnaHQgc3ltYm9sIGNsaWNrYWJsZVwiIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiPlxuICA8YSBocmVmPVwie3sgdmFsdWUgfX1cIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICA8c3BhbiBjbGFzcz1cImljb24tZXh0ZXJuYWxcIj48L3NwYW4+XG4gIDwvYT5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImlzQ29sb3IoKVwiIGNsYXNzPVwicG9zdGZpeCByb3VuZGVkLXJpZ2h0IGJvcmRlcmVkIHRyYW5zcGFyZW5jeVwiIFtuZ0NsYXNzXT1cImNsYXNzTmFtZVwiPlxuICA8ZGl2IGNsYXNzPVwicm91bmRlZC1yaWdodCBmdWxsLXNwYWNlXCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kLWNvbG9yJzogY29sb3J9XCI+XG4gICAgPGlucHV0XG4gICAgICAjY29sb3JwaWNrZXJcbiAgICAgIGNsYXNzPVwibWluaW1hbC1zcGFjZSBjbGlja2FibGUgaW52aXNpYmxlIHJvdW5kZWQtcmlnaHQgZnVsbC1zcGFjZVwiXG4gICAgICBbaWRdPVwiaW5wdXRJZCArICckY29sb3JwaWNrZXInXCJcbiAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICBbYXR0ci52YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6IHVuZGVmaW5lZFwiXG4gICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA9PT0gdHJ1ZSA/ICd0cnVlJyA6IHVuZGVmaW5lZFwiXG4gICAgICAoY2hhbmdlKT1cIm9uQ29sb3JQaWNrZWQoY29sb3JwaWNrZXIudmFsdWUpXCJcbiAgICAgIChrZXlwcmVzcyk9XCJvbktleVByZXNzKCRldmVudClcIlxuICAgICAgKGJsdXIpPVwib25Mb3N0Rm9jdXMoKVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cImlubGluZUVycm9ycyAmJiBsYXN0RXJyb3JzICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiIGNsYXNzPVwiYWxlcnRcIj5cbiAgPGRpdiAqbmdJZj1cImxhc3RFcnJvcnMucmVxdWlyZWRcIj5cbiAgICB7eyB1c2VyRXJyb3JzW3RoaXMubGFuZ10ucmVxdWlyZWQgfX1cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJsYXN0RXJyb3JzLmVtYWlsXCI+e3sgdXNlckVycm9yc1t0aGlzLmxhbmddLmVtYWlsIH19PC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJsYXN0RXJyb3JzLnVybFwiPnt7IHVzZXJFcnJvcnNbdGhpcy5sYW5nXS51cmwgfX08L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImxhc3RFcnJvcnMubWluXCI+XG4gICAge3sgdXNlckVycm9yc1t0aGlzLmxhbmddLm1pbi5yZXBsYWNlKCckbWluJywgbGFzdEVycm9ycy5taW4ubWluKSB9fVxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImxhc3RFcnJvcnMubWF4XCI+XG4gICAge3sgdXNlckVycm9yc1t0aGlzLmxhbmddLm1heC5yZXBsYWNlKCckbWF4JywgbGFzdEVycm9ycy5tYXgubWF4KSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -186,9 +186,10 @@ export class RegexpService {
186
186
  return 'NO DEBERÍA SER POSIBLE';
187
187
  }
188
188
  }
189
- RegexpService.ɵprov = i0.ɵɵdefineInjectable({ factory: function RegexpService_Factory() { return new RegexpService(); }, token: RegexpService, providedIn: "root" });
190
- RegexpService.decorators = [
191
- { type: Injectable, args: [{ providedIn: 'root' },] }
192
- ];
193
- RegexpService.ctorParameters = () => [];
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnZXhwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sdXgvc3JjL2xpYi9pbnB1dC9yZWdleHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQzs7R0FFRztBQUVILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLGdCQUFlLENBQUM7SUFFUix3QkFBd0IsQ0FBQyx1QkFBK0I7UUFDOUQsT0FDRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO1lBQ2xDLHVCQUF1QixDQUFDLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQ25FO1lBQ0EsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUNyRCxDQUFDLEVBQ0QsdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDbkMsQ0FBQztTQUNIO1FBQ0QsT0FBTyx1QkFBdUIsQ0FBQztJQUNqQyxDQUFDO0lBRU8sWUFBWSxDQUFDLFVBQWtCO1FBQ3JDLFFBQVEsVUFBVSxFQUFFO1lBQ2xCLEtBQUssR0FBRyxDQUFDO1lBQ1QsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLEdBQUcsQ0FBQztZQUNULEtBQUssR0FBRztnQkFDTixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sOEJBQThCLENBQUMsVUFBa0I7UUFDdkQsUUFBUSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDckIsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLEdBQUc7Z0JBQ04sT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLEdBQUc7Z0JBQ04sT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLEdBQUc7Z0JBQ04sS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFVBQVUsQ0FBQyxN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RyxDQUFDLENBQUMsQ0FBQzt5QkFDakQ7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO2FBQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUQsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNwRCw2REFBNkQ7Z0JBQzdELE9BQU8sdUJBQXVCLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0wsS0FDRSxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQ3RCLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQ3hDLEVBQUUsY0FBYyxFQUNoQjtvQkFDQSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7d0JBQ2pFLDhFQUE4RTt3QkFDOUUsT0FBTyxvQkFBb0IsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQ2pEO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELCtCQUErQjtRQUMvQixPQUFPLHdCQUF3QixDQUFDO0lBQ2xDLENBQUM7Ozs7WUFwTkYsVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBob2xkcyB0aGUgZnVuY3Rpb25hbGl0eSBmb3IgYWR2YW5jZWQgaGFuZGxpbmcgb2YgcmVndWxhciBleHByZXNzaW9uc1xuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFJlZ2V4cFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHJpdmF0ZSByZW1vdmVPdXRlclJvdW5kQnJhY2tldHMocmVndWxhckV4cHJlc3Npb25TdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgd2hpbGUgKFxuICAgICAgcmVndWxhckV4cHJlc3Npb25TdHJpbmdbMF0gPT09ICcoJyAmJlxuICAgICAgcmVndWxhckV4cHJlc3Npb25TdHJpbmdbcmVndWxhckV4cHJlc3Npb25TdHJpbmcubGVuZ3RoIC0gMV0gPT09ICcpJ1xuICAgICkge1xuICAgICAgcmVndWxhckV4cHJlc3Npb25TdHJpbmcgPSByZWd1bGFyRXhwcmVzc2lvblN0cmluZy5zbGljZShcbiAgICAgICAgMSxcbiAgICAgICAgcmVndWxhckV4cHJlc3Npb25TdHJpbmcubGVuZ3RoIC0gMVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1F1YW50aWZpZXIocXVhbnRpZmllcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChxdWFudGlmaWVyKSB7XG4gICAgICBjYXNlICd7JzpcbiAgICAgIGNhc2UgJz8nOlxuICAgICAgY2FzZSAnKyc6XG4gICAgICBjYXNlICcqJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VNaW5pbWFsQW1vdW50T2ZRdWFudGlmaWVyKHF1YW50aWZpZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgc3dpdGNoIChxdWFudGlmaWVyWzBdKSB7XG4gICAgICBjYXNlICc/JzpcbiAgICAgIGNhc2UgJyonOlxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIGNhc2UgJysnOlxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGNhc2UgJ3snOlxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcXVhbnRpZmllci5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgICAgICBpZiAocXVhbnRpZmllcltpbmRleF0gPCAnMCcgfHwgcXVhbnRpZmllcltpbmRleF0gPiAnOScpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIocXVhbnRpZmllci5zbGljZSgxLCBpbmRleCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHByaXZhdGUgc2xpY2VSZWdleEJ5T3IocmVndWxhckV4cHJlc3Npb25TdHJpbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBsZXQgc2xpY2VkUmVnZXggPSAnJztcbiAgICBsZXQgbGFzdFNsaWNlSW5kZXggPSAwO1xuICAgIGxldCByb3VuZEJyYWNrZXRDb3VudCA9IDA7XG4gICAgbGV0IHNxdWFyZUJyYWNrZXRDb3VudCA9IDA7XG4gICAgbGV0IGN1cmx5QnJhY2tldENvdW50ID0gMDtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAoOyBpbmRleCA8IHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nLmxlbmd0aDsgKytpbmRleCkge1xuICAgICAgc3dpdGNoIChyZWd1bGFyRXhwcmVzc2lvblN0cmluZ1tpbmRleF0pIHtcbiAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgLy8gZXNjYXBlIHNlcXVlbmNlOyBza2lwIHRoZSBuZXh0IGNoYXJhY3RlclxuICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgIHJvdW5kQnJhY2tldENvdW50ICs9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgIHJvdW5kQnJhY2tldENvdW50IC09IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1snOlxuICAgICAgICAgIHNxdWFyZUJyYWNrZXRDb3VudCArPSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICddJzpcbiAgICAgICAgICBzcXVhcmVCcmFja2V0Q291bnQgLT0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAneyc6XG4gICAgICAgICAgY3VybHlCcmFja2V0Q291bnQgKz0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnfSc6XG4gICAgICAgICAgY3VybHlCcmFja2V0Q291bnQgLT0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnfCc6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcm91bmRCcmFja2V0Q291bnQgPT09IDAgJiZcbiAgICAgICAgICAgIHNxdWFyZUJyYWNrZXRDb3VudCA9PT0gMCAmJlxuICAgICAgICAgICAgY3VybHlCcmFja2V0Q291bnQgPT09IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNsaWNlZFJlZ2V4ID0gdGhpcy5yZW1vdmVPdXRlclJvdW5kQnJhY2tldHMoXG4gICAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nLnNsaWNlKGxhc3RTbGljZUluZGV4LCBpbmRleClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChzbGljZWRSZWdleCk7XG4gICAgICAgICAgICBsYXN0U2xpY2VJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHNsaWNlZFJlZ2V4ID0gdGhpcy5yZW1vdmVPdXRlclJvdW5kQnJhY2tldHMoXG4gICAgICByZWd1bGFyRXhwcmVzc2lvblN0cmluZy5zbGljZShsYXN0U2xpY2VJbmRleCwgaW5kZXgpXG4gICAgKTtcbiAgICByZXN1bHQucHVzaChzbGljZWRSZWdleCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc2xpY2VSZWdleEJ5VGhlbihyZWd1bGFyRXhwcmVzc2lvblN0cmluZzogc3RyaW5nKTogc3RyaW5nW11bXSB7XG4gICAgLy8gdGhlIGFjdHVhbCByZXN1bHRcbiAgICBjb25zdCByZXN1bHRTdGFydCA9IFtdO1xuICAgIC8vIHRoZSByZW1haW5kZXIgb2YgdGhlIHJlZ2V4IGluIGVhY2ggY2FzZVxuICAgIGNvbnN0IHJlc3VsdFJlbWFpbmRlciA9IFtdO1xuICAgIGxldCByb3VuZEJyYWNrZXRDb3VudCA9IDA7XG4gICAgbGV0IHNxdWFyZUJyYWNrZXRDb3VudCA9IDA7XG4gICAgbGV0IGN1cmx5QnJhY2tldENvdW50ID0gMDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcmVndWxhckV4cHJlc3Npb25TdHJpbmcubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICBzd2l0Y2ggKHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nW2luZGV4XSkge1xuICAgICAgICBjYXNlICdcXFxcJzpcbiAgICAgICAgICAvLyBlc2NhcGUgc2VxdWVuY2U7IHNraXAgdGhlIG5leHQgY2hhcmFjdGVyXG4gICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnKCc6XG4gICAgICAgICAgcm91bmRCcmFja2V0Q291bnQgKz0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnKSc6XG4gICAgICAgICAgcm91bmRCcmFja2V0Q291bnQgLT0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnWyc6XG4gICAgICAgICAgc3F1YXJlQnJhY2tldENvdW50ICs9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ10nOlxuICAgICAgICAgIHNxdWFyZUJyYWNrZXRDb3VudCAtPSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd7JzpcbiAgICAgICAgICBjdXJseUJyYWNrZXRDb3VudCArPSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd9JzpcbiAgICAgICAgICBjdXJseUJyYWNrZXRDb3VudCAtPSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICByb3VuZEJyYWNrZXRDb3VudCA9PT0gMCAmJlxuICAgICAgICBzcXVhcmVCcmFja2V0Q291bnQgPT09IDAgJiZcbiAgICAgICAgY3VybHlCcmFja2V0Q291bnQgPT09IDBcbiAgICAgICkge1xuICAgICAgICBpZiAoIXRoaXMuaXNRdWFudGlmaWVyKHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nW2luZGV4ICsgMV0pKSB7XG4gICAgICAgICAgcmVzdWx0U3RhcnQucHVzaChyZWd1bGFyRXhwcmVzc2lvblN0cmluZy5zbGljZSgwLCBpbmRleCArIDEpKTtcbiAgICAgICAgICByZXN1bHRSZW1haW5kZXIucHVzaChyZWd1bGFyRXhwcmVzc2lvblN0cmluZy5zbGljZShpbmRleCArIDEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBsZXQgbWluaW1hbEFtb3VudE9mUmVwZWF0cyA9IHBhcnNlTWluaW1hbEFtb3VudE9mUXVhbnRpZmllcihyZWd1bGFyRXhwcmVzc2lvblN0cmluZy5zbGljZShpbmRleCArIDEpKTtcbiAgICAgICAgICAvLyBUT0RPXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtyZXN1bHRTdGFydCwgcmVzdWx0UmVtYWluZGVyXTtcbiAgfVxuXG4gIHN1Z2dlc3Rpb24oYmVnaW5uaW5nOiBzdHJpbmcsIHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChuZXcgUmVnRXhwKHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nKS50ZXN0KGJlZ2lubmluZykpIHtcbiAgICAgIC8vIFRPRE86IFJFVFVSTiBBTiBFTVBUWSBTVFJJTkdcbiAgICAgIHJldHVybiAnWUEgRVMgSUdVQUwsIE5PIEhBWSBNw4FTIFFVRSBTVUdFUklSJztcbiAgICB9XG4gICAgY29uc3QgcmVnZXhPcHRpb25zID0gdGhpcy5zbGljZVJlZ2V4QnlPcihyZWd1bGFyRXhwcmVzc2lvblN0cmluZyk7XG4gICAgaWYgKHJlZ2V4T3B0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgcmVnZXhPcHRpb25JbmRleCA9IDA7XG4gICAgICAgIHJlZ2V4T3B0aW9uSW5kZXggPCByZWdleE9wdGlvbnMubGVuZ3RoO1xuICAgICAgICArK3JlZ2V4T3B0aW9uSW5kZXhcbiAgICAgICkge1xuICAgICAgICBjb25zdCByZWdleFBhcnRzID0gdGhpcy5zbGljZVJlZ2V4QnlUaGVuKFxuICAgICAgICAgIHJlZ2V4T3B0aW9uc1tyZWdleE9wdGlvbkluZGV4XVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZWdleFBhcnRzU3RhcnRzID0gcmVnZXhQYXJ0c1swXTtcbiAgICAgICAgY29uc3QgcmVnZXhQYXJ0c1JlbWFpbmRlcnMgPSByZWdleFBhcnRzWzFdO1xuICAgICAgICAvLyBmb3IgZWFjaCBvcHRpb24sIHRlc3QgaWYgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHJlZ2V4IG1hdGNoZXNcbiAgICAgICAgLy8gaWYgaXQgZG9lc24ndCwgY29udGludWVcbiAgICAgICAgLy8gaWYgaXQgZG9lcywga2VlcCBjaGVja2luZyB1bnRpbCB3aGF0IHBhcnQgaXQgbWF0Y2hlc1xuICAgICAgICBpZiAoIW5ldyBSZWdFeHAocmVnZXhQYXJ0c1N0YXJ0c1swXSkudGVzdChiZWdpbm5pbmcpKSB7XG4gICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIG1vcmUgb3B0aW9uc1xuICAgICAgICAgIGlmIChyZWdleE9wdGlvbkluZGV4ID09PSByZWdleE9wdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgLy8gd2UgcmV0dXJuIHRoZSBmaXJzdCBvcHRpb24sIGJ1dCB3ZSBjb3VsZCByZXR1cm4gYW55IG9wdGlvblxuXG4gICAgICAgICAgICAvLyBUT0RPOiBSRVRVUk4gQU5ZIFRFWFQgVEhBVCBNQVRDSEVTIHJlZ2V4T3B0aW9uc1swXVxuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4T3B0aW9uc1swXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIGxldCByZWdleFBhcnRJbmRleCA9IDE7XG4gICAgICAgICAgICByZWdleFBhcnRJbmRleCA8IHJlZ2V4UGFydHNTdGFydHMubGVuZ3RoO1xuICAgICAgICAgICAgKytyZWdleFBhcnRJbmRleFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKCFuZXcgUmVnRXhwKHJlZ2V4UGFydHNTdGFydHNbcmVnZXhQYXJ0SW5kZXhdKS50ZXN0KGJlZ2lubmluZykpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogUkVUVVJOIEFOWSBURVhUIFRIQVQgTUFUQ0hFUyByZWdleFBhcnRzUmVtYWluZGVyc1tyZWdleFBhcnRJbmRleCAtIDFdXG4gICAgICAgICAgICAgIHJldHVybiByZWdleFBhcnRzUmVtYWluZGVyc1tyZWdleFBhcnRJbmRleCAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVnZXhPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgcmVnZXhQYXJ0cyA9IHRoaXMuc2xpY2VSZWdleEJ5VGhlbihyZWdleE9wdGlvbnNbMF0pO1xuICAgICAgY29uc3QgcmVnZXhQYXJ0c1N0YXJ0cyA9IHJlZ2V4UGFydHNbMF07XG4gICAgICBjb25zdCByZWdleFBhcnRzUmVtYWluZGVycyA9IHJlZ2V4UGFydHNbMV07XG4gICAgICBpZiAoIW5ldyBSZWdFeHAocmVnZXhQYXJ0c1N0YXJ0c1swXSkudGVzdChiZWdpbm5pbmcpKSB7XG4gICAgICAgIC8vIFRPRE86IFJFVFVSTiBBTlkgVEVYVCBUSEFUIE1BVENIRVMgcmVndWxhckV4cHJlc3Npb25TdHJpbmdcbiAgICAgICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBsZXQgcmVnZXhQYXJ0SW5kZXggPSAxO1xuICAgICAgICAgIHJlZ2V4UGFydEluZGV4IDwgcmVnZXhQYXJ0c1N0YXJ0cy5sZW5ndGg7XG4gICAgICAgICAgKytyZWdleFBhcnRJbmRleFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoIW5ldyBSZWdFeHAocmVnZXhQYXJ0c1N0YXJ0c1tyZWdleFBhcnRJbmRleF0pLnRlc3QoYmVnaW5uaW5nKSkge1xuICAgICAgICAgICAgLy8gVE9ETzogUkVUVVJOIEFOWSBURVhUIFRIQVQgTUFUQ0hFUyByZWdleFBhcnRzUmVtYWluZGVyc1tyZWdleFBhcnRJbmRleCAtIDFdXG4gICAgICAgICAgICByZXR1cm4gcmVnZXhQYXJ0c1JlbWFpbmRlcnNbcmVnZXhQYXJ0SW5kZXggLSAxXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gVE9ETzogUkVUVVJOIEFOIEVNUFRZIFNUUklOR1xuICAgIHJldHVybiAnTk8gREVCRVLDjUEgU0VSIFBPU0lCTEUnO1xuICB9XG59XG4iXX0=
189
+ RegexpService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: RegexpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
190
+ RegexpService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: RegexpService, providedIn: 'root' });
191
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: RegexpService, decorators: [{
192
+ type: Injectable,
193
+ args: [{ providedIn: 'root' }]
194
+ }], ctorParameters: function () { return []; } });
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnZXhwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sdXgvc3JjL2xpYi9pbnB1dC9yZWdleHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQzs7R0FFRztBQUVILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLGdCQUFlLENBQUM7SUFFUix3QkFBd0IsQ0FBQyx1QkFBK0I7UUFDOUQsT0FDRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO1lBQ2xDLHVCQUF1QixDQUFDLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQ25FO1lBQ0EsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUNyRCxDQUFDLEVBQ0QsdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDbkMsQ0FBQztTQUNIO1FBQ0QsT0FBTyx1QkFBdUIsQ0FBQztJQUNqQyxDQUFDO0lBRU8sWUFBWSxDQUFDLFVBQWtCO1FBQ3JDLFFBQVEsVUFBVSxFQUFFO1lBQ2xCLEtBQUssR0FBRyxDQUFDO1lBQ1QsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLEdBQUcsQ0FBQztZQUNULEtBQUssR0FBRztnQkFDTixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sOEJBQThCLENBQUMsVUFBa0I7UUFDdkQsUUFBUSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDckIsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLEdBQUc7Z0JBQ04sT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLEdBQUc7Z0JBQ04sT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLEdBQUc7Z0JBQ04sS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFVBQVUsQ0FBQyxN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RyxDQUFDLENBQUMsQ0FBQzt5QkFDakQ7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO2FBQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUQsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNwRCw2REFBNkQ7Z0JBQzdELE9BQU8sdUJBQXVCLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0wsS0FDRSxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQ3RCLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQ3hDLEVBQUUsY0FBYyxFQUNoQjtvQkFDQSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7d0JBQ2pFLDhFQUE4RTt3QkFDOUUsT0FBTyxvQkFBb0IsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQ2pEO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELCtCQUErQjtRQUMvQixPQUFPLHdCQUF3QixDQUFDO0lBQ2xDLENBQUM7OzBHQW5OVSxhQUFhOzhHQUFiLGFBQWEsY0FEQSxNQUFNOzJGQUNuQixhQUFhO2tCQUR6QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBob2xkcyB0aGUgZnVuY3Rpb25hbGl0eSBmb3IgYWR2YW5jZWQgaGFuZGxpbmcgb2YgcmVndWxhciBleHByZXNzaW9uc1xuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFJlZ2V4cFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHJpdmF0ZSByZW1vdmVPdXRlclJvdW5kQnJhY2tldHMocmVndWxhckV4cHJlc3Npb25TdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgd2hpbGUgKFxuICAgICAgcmVndWxhckV4cHJlc3Npb25TdHJpbmdbMF0gPT09ICcoJyAmJlxuICAgICAgcmVndWxhckV4cHJlc3Npb25TdHJpbmdbcmVndWxhckV4cHJlc3Npb25TdHJpbmcubGVuZ3RoIC0gMV0gPT09ICcpJ1xuICAgICkge1xuICAgICAgcmVndWxhckV4cHJlc3Npb25TdHJpbmcgPSByZWd1bGFyRXhwcmVzc2lvblN0cmluZy5zbGljZShcbiAgICAgICAgMSxcbiAgICAgICAgcmVndWxhckV4cHJlc3Npb25TdHJpbmcubGVuZ3RoIC0gMVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1F1YW50aWZpZXIocXVhbnRpZmllcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChxdWFudGlmaWVyKSB7XG4gICAgICBjYXNlICd7JzpcbiAgICAgIGNhc2UgJz8nOlxuICAgICAgY2FzZSAnKyc6XG4gICAgICBjYXNlICcqJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VNaW5pbWFsQW1vdW50T2ZRdWFudGlmaWVyKHF1YW50aWZpZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgc3dpdGNoIChxdWFudGlmaWVyWzBdKSB7XG4gICAgICBjYXNlICc/JzpcbiAgICAgIGNhc2UgJyonOlxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIGNhc2UgJysnOlxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGNhc2UgJ3snOlxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcXVhbnRpZmllci5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgICAgICBpZiAocXVhbnRpZmllcltpbmRleF0gPCAnMCcgfHwgcXVhbnRpZmllcltpbmRleF0gPiAnOScpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIocXVhbnRpZmllci5zbGljZSgxLCBpbmRleCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHByaXZhdGUgc2xpY2VSZWdleEJ5T3IocmVndWxhckV4cHJlc3Npb25TdHJpbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBsZXQgc2xpY2VkUmVnZXggPSAnJztcbiAgICBsZXQgbGFzdFNsaWNlSW5kZXggPSAwO1xuICAgIGxldCByb3VuZEJyYWNrZXRDb3VudCA9IDA7XG4gICAgbGV0IHNxdWFyZUJyYWNrZXRDb3VudCA9IDA7XG4gICAgbGV0IGN1cmx5QnJhY2tldENvdW50ID0gMDtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAoOyBpbmRleCA8IHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nLmxlbmd0aDsgKytpbmRleCkge1xuICAgICAgc3dpdGNoIChyZWd1bGFyRXhwcmVzc2lvblN0cmluZ1tpbmRleF0pIHtcbiAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgLy8gZXNjYXBlIHNlcXVlbmNlOyBza2lwIHRoZSBuZXh0IGNoYXJhY3RlclxuICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgIHJvdW5kQnJhY2tldENvdW50ICs9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJyknOlxuICAgICAgICAgIHJvdW5kQnJhY2tldENvdW50IC09IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1snOlxuICAgICAgICAgIHNxdWFyZUJyYWNrZXRDb3VudCArPSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICddJzpcbiAgICAgICAgICBzcXVhcmVCcmFja2V0Q291bnQgLT0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAneyc6XG4gICAgICAgICAgY3VybHlCcmFja2V0Q291bnQgKz0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnfSc6XG4gICAgICAgICAgY3VybHlCcmFja2V0Q291bnQgLT0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnfCc6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcm91bmRCcmFja2V0Q291bnQgPT09IDAgJiZcbiAgICAgICAgICAgIHNxdWFyZUJyYWNrZXRDb3VudCA9PT0gMCAmJlxuICAgICAgICAgICAgY3VybHlCcmFja2V0Q291bnQgPT09IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNsaWNlZFJlZ2V4ID0gdGhpcy5yZW1vdmVPdXRlclJvdW5kQnJhY2tldHMoXG4gICAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nLnNsaWNlKGxhc3RTbGljZUluZGV4LCBpbmRleClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChzbGljZWRSZWdleCk7XG4gICAgICAgICAgICBsYXN0U2xpY2VJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHNsaWNlZFJlZ2V4ID0gdGhpcy5yZW1vdmVPdXRlclJvdW5kQnJhY2tldHMoXG4gICAgICByZWd1bGFyRXhwcmVzc2lvblN0cmluZy5zbGljZShsYXN0U2xpY2VJbmRleCwgaW5kZXgpXG4gICAgKTtcbiAgICByZXN1bHQucHVzaChzbGljZWRSZWdleCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc2xpY2VSZWdleEJ5VGhlbihyZWd1bGFyRXhwcmVzc2lvblN0cmluZzogc3RyaW5nKTogc3RyaW5nW11bXSB7XG4gICAgLy8gdGhlIGFjdHVhbCByZXN1bHRcbiAgICBjb25zdCByZXN1bHRTdGFydCA9IFtdO1xuICAgIC8vIHRoZSByZW1haW5kZXIgb2YgdGhlIHJlZ2V4IGluIGVhY2ggY2FzZVxuICAgIGNvbnN0IHJlc3VsdFJlbWFpbmRlciA9IFtdO1xuICAgIGxldCByb3VuZEJyYWNrZXRDb3VudCA9IDA7XG4gICAgbGV0IHNxdWFyZUJyYWNrZXRDb3VudCA9IDA7XG4gICAgbGV0IGN1cmx5QnJhY2tldENvdW50ID0gMDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcmVndWxhckV4cHJlc3Npb25TdHJpbmcubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICBzd2l0Y2ggKHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nW2luZGV4XSkge1xuICAgICAgICBjYXNlICdcXFxcJzpcbiAgICAgICAgICAvLyBlc2NhcGUgc2VxdWVuY2U7IHNraXAgdGhlIG5leHQgY2hhcmFjdGVyXG4gICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnKCc6XG4gICAgICAgICAgcm91bmRCcmFja2V0Q291bnQgKz0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnKSc6XG4gICAgICAgICAgcm91bmRCcmFja2V0Q291bnQgLT0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnWyc6XG4gICAgICAgICAgc3F1YXJlQnJhY2tldENvdW50ICs9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ10nOlxuICAgICAgICAgIHNxdWFyZUJyYWNrZXRDb3VudCAtPSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd7JzpcbiAgICAgICAgICBjdXJseUJyYWNrZXRDb3VudCArPSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd9JzpcbiAgICAgICAgICBjdXJseUJyYWNrZXRDb3VudCAtPSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICByb3VuZEJyYWNrZXRDb3VudCA9PT0gMCAmJlxuICAgICAgICBzcXVhcmVCcmFja2V0Q291bnQgPT09IDAgJiZcbiAgICAgICAgY3VybHlCcmFja2V0Q291bnQgPT09IDBcbiAgICAgICkge1xuICAgICAgICBpZiAoIXRoaXMuaXNRdWFudGlmaWVyKHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nW2luZGV4ICsgMV0pKSB7XG4gICAgICAgICAgcmVzdWx0U3RhcnQucHVzaChyZWd1bGFyRXhwcmVzc2lvblN0cmluZy5zbGljZSgwLCBpbmRleCArIDEpKTtcbiAgICAgICAgICByZXN1bHRSZW1haW5kZXIucHVzaChyZWd1bGFyRXhwcmVzc2lvblN0cmluZy5zbGljZShpbmRleCArIDEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBsZXQgbWluaW1hbEFtb3VudE9mUmVwZWF0cyA9IHBhcnNlTWluaW1hbEFtb3VudE9mUXVhbnRpZmllcihyZWd1bGFyRXhwcmVzc2lvblN0cmluZy5zbGljZShpbmRleCArIDEpKTtcbiAgICAgICAgICAvLyBUT0RPXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtyZXN1bHRTdGFydCwgcmVzdWx0UmVtYWluZGVyXTtcbiAgfVxuXG4gIHN1Z2dlc3Rpb24oYmVnaW5uaW5nOiBzdHJpbmcsIHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChuZXcgUmVnRXhwKHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nKS50ZXN0KGJlZ2lubmluZykpIHtcbiAgICAgIC8vIFRPRE86IFJFVFVSTiBBTiBFTVBUWSBTVFJJTkdcbiAgICAgIHJldHVybiAnWUEgRVMgSUdVQUwsIE5PIEhBWSBNw4FTIFFVRSBTVUdFUklSJztcbiAgICB9XG4gICAgY29uc3QgcmVnZXhPcHRpb25zID0gdGhpcy5zbGljZVJlZ2V4QnlPcihyZWd1bGFyRXhwcmVzc2lvblN0cmluZyk7XG4gICAgaWYgKHJlZ2V4T3B0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgcmVnZXhPcHRpb25JbmRleCA9IDA7XG4gICAgICAgIHJlZ2V4T3B0aW9uSW5kZXggPCByZWdleE9wdGlvbnMubGVuZ3RoO1xuICAgICAgICArK3JlZ2V4T3B0aW9uSW5kZXhcbiAgICAgICkge1xuICAgICAgICBjb25zdCByZWdleFBhcnRzID0gdGhpcy5zbGljZVJlZ2V4QnlUaGVuKFxuICAgICAgICAgIHJlZ2V4T3B0aW9uc1tyZWdleE9wdGlvbkluZGV4XVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZWdleFBhcnRzU3RhcnRzID0gcmVnZXhQYXJ0c1swXTtcbiAgICAgICAgY29uc3QgcmVnZXhQYXJ0c1JlbWFpbmRlcnMgPSByZWdleFBhcnRzWzFdO1xuICAgICAgICAvLyBmb3IgZWFjaCBvcHRpb24sIHRlc3QgaWYgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHJlZ2V4IG1hdGNoZXNcbiAgICAgICAgLy8gaWYgaXQgZG9lc24ndCwgY29udGludWVcbiAgICAgICAgLy8gaWYgaXQgZG9lcywga2VlcCBjaGVja2luZyB1bnRpbCB3aGF0IHBhcnQgaXQgbWF0Y2hlc1xuICAgICAgICBpZiAoIW5ldyBSZWdFeHAocmVnZXhQYXJ0c1N0YXJ0c1swXSkudGVzdChiZWdpbm5pbmcpKSB7XG4gICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG5vIG1vcmUgb3B0aW9uc1xuICAgICAgICAgIGlmIChyZWdleE9wdGlvbkluZGV4ID09PSByZWdleE9wdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgLy8gd2UgcmV0dXJuIHRoZSBmaXJzdCBvcHRpb24sIGJ1dCB3ZSBjb3VsZCByZXR1cm4gYW55IG9wdGlvblxuXG4gICAgICAgICAgICAvLyBUT0RPOiBSRVRVUk4gQU5ZIFRFWFQgVEhBVCBNQVRDSEVTIHJlZ2V4T3B0aW9uc1swXVxuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4T3B0aW9uc1swXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIGxldCByZWdleFBhcnRJbmRleCA9IDE7XG4gICAgICAgICAgICByZWdleFBhcnRJbmRleCA8IHJlZ2V4UGFydHNTdGFydHMubGVuZ3RoO1xuICAgICAgICAgICAgKytyZWdleFBhcnRJbmRleFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKCFuZXcgUmVnRXhwKHJlZ2V4UGFydHNTdGFydHNbcmVnZXhQYXJ0SW5kZXhdKS50ZXN0KGJlZ2lubmluZykpIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogUkVUVVJOIEFOWSBURVhUIFRIQVQgTUFUQ0hFUyByZWdleFBhcnRzUmVtYWluZGVyc1tyZWdleFBhcnRJbmRleCAtIDFdXG4gICAgICAgICAgICAgIHJldHVybiByZWdleFBhcnRzUmVtYWluZGVyc1tyZWdleFBhcnRJbmRleCAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVnZXhPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgcmVnZXhQYXJ0cyA9IHRoaXMuc2xpY2VSZWdleEJ5VGhlbihyZWdleE9wdGlvbnNbMF0pO1xuICAgICAgY29uc3QgcmVnZXhQYXJ0c1N0YXJ0cyA9IHJlZ2V4UGFydHNbMF07XG4gICAgICBjb25zdCByZWdleFBhcnRzUmVtYWluZGVycyA9IHJlZ2V4UGFydHNbMV07XG4gICAgICBpZiAoIW5ldyBSZWdFeHAocmVnZXhQYXJ0c1N0YXJ0c1swXSkudGVzdChiZWdpbm5pbmcpKSB7XG4gICAgICAgIC8vIFRPRE86IFJFVFVSTiBBTlkgVEVYVCBUSEFUIE1BVENIRVMgcmVndWxhckV4cHJlc3Npb25TdHJpbmdcbiAgICAgICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBsZXQgcmVnZXhQYXJ0SW5kZXggPSAxO1xuICAgICAgICAgIHJlZ2V4UGFydEluZGV4IDwgcmVnZXhQYXJ0c1N0YXJ0cy5sZW5ndGg7XG4gICAgICAgICAgKytyZWdleFBhcnRJbmRleFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoIW5ldyBSZWdFeHAocmVnZXhQYXJ0c1N0YXJ0c1tyZWdleFBhcnRJbmRleF0pLnRlc3QoYmVnaW5uaW5nKSkge1xuICAgICAgICAgICAgLy8gVE9ETzogUkVUVVJOIEFOWSBURVhUIFRIQVQgTUFUQ0hFUyByZWdleFBhcnRzUmVtYWluZGVyc1tyZWdleFBhcnRJbmRleCAtIDFdXG4gICAgICAgICAgICByZXR1cm4gcmVnZXhQYXJ0c1JlbWFpbmRlcnNbcmVnZXhQYXJ0SW5kZXggLSAxXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gVE9ETzogUkVUVVJOIEFOIEVNUFRZIFNUUklOR1xuICAgIHJldHVybiAnTk8gREVCRVLDjUEgU0VSIFBPU0lCTEUnO1xuICB9XG59XG4iXX0=
File without changes