lib-portal-angular 0.0.78 → 0.0.79

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.
@@ -1,5 +1,6 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, } from "@angular/core";
2
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
3
+ import { ButtonClasses } from "../../enum/ButtonClassesEnum";
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "../../service/auth-service.service";
5
6
  import * as i2 from "@angular/common";
@@ -10,10 +11,10 @@ import * as i6 from "../../directive/cpf-mask.directive";
10
11
  export class InputComponent {
11
12
  constructor(authService) {
12
13
  this.authService = authService;
13
- this.label = 'Default Label';
14
- this.placeholder = '';
15
- this.id = 'inputId';
16
- this.type = 'text';
14
+ this.label = "Default Label";
15
+ this.placeholder = "";
16
+ this.id = "inputId";
17
+ this.type = "text";
17
18
  this.disabled = false;
18
19
  this.readonly = false;
19
20
  this.maxlength = null;
@@ -28,8 +29,10 @@ export class InputComponent {
28
29
  this.validateInput = false;
29
30
  this.labelFontWeight = 400;
30
31
  this.useMoneyMask = false; // Para ativar/desativar a máscara de moeda
31
- this.currencyCode = 'BRL'; // Código da moeda
32
+ this.currencyCode = "BRL"; // Código da moeda
32
33
  this.displayCurrencySymbol = true; // Exibir ou não o símbolo da moeda
34
+ this.prependText = "";
35
+ this.buttonText = null;
33
36
  this.inputEvent = new EventEmitter();
34
37
  this.changeEvent = new EventEmitter();
35
38
  this.focusEvent = new EventEmitter();
@@ -37,39 +40,51 @@ export class InputComponent {
37
40
  this.keyupEvent = new EventEmitter();
38
41
  this.keydownEvent = new EventEmitter();
39
42
  this.keypressEvent = new EventEmitter();
43
+ this.buttonClick = new EventEmitter();
40
44
  this.onChangeCallback = () => { };
41
45
  this.onTouchedCallback = () => { };
42
- this.value = '';
46
+ this.ButtonClasses = ButtonClasses;
47
+ this.value = "";
43
48
  this.showErrorModal = false;
44
- this.errorMessage = '';
49
+ this.errorMessage = "";
45
50
  this.subscriptions = [];
46
51
  }
47
52
  getInputType() {
48
- return this.onlyNumbers ? 'tel' : this.type;
53
+ return this.onlyNumbers ? "tel" : this.type;
49
54
  }
50
55
  onInput(event) {
51
56
  const inputElement = event.target;
52
57
  let inputValue = inputElement.value;
53
58
  // Aplica máscara de números se necessário
54
- if (this.onlyNumbers && !(this.useCpfMask || this.useCnpjMask || this.useCepMask || this.useMoneyMask)) {
55
- inputValue = inputValue.replace(/\D/g, ''); // Remove todos os não numéricos
59
+ if (this.onlyNumbers &&
60
+ !(this.useCpfMask ||
61
+ this.useCnpjMask ||
62
+ this.useCepMask ||
63
+ this.useMoneyMask)) {
64
+ inputValue = inputValue.replace(/\D/g, ""); // Remove todos os não numéricos
56
65
  }
57
66
  // Validação imediata para CPF, CNPJ ou CEP
58
- const numericValue = inputValue.replace(/\D/g, ''); // Remove todos os caracteres não numéricos
67
+ const numericValue = inputValue.replace(/\D/g, ""); // Remove todos os caracteres não numéricos
59
68
  if (this.validateInput) {
60
- if (this.useCpfMask && numericValue.length === 11 && !this.validateCpf(numericValue)) {
61
- this.clearAndShowValidationError('CPF inválido. Por favor, insira um CPF correto.');
69
+ if (this.useCpfMask &&
70
+ numericValue.length === 11 &&
71
+ !this.validateCpf(numericValue)) {
72
+ this.clearAndShowValidationError("CPF inválido. Por favor, insira um CPF correto.");
62
73
  }
63
- else if (this.useCnpjMask && numericValue.length === 14 && !this.validateCnpj(numericValue)) {
64
- this.clearAndShowValidationError('CNPJ inválido. Por favor, insira um CNPJ correto.');
74
+ else if (this.useCnpjMask &&
75
+ numericValue.length === 14 &&
76
+ !this.validateCnpj(numericValue)) {
77
+ this.clearAndShowValidationError("CNPJ inválido. Por favor, insira um CNPJ correto.");
65
78
  }
66
- else if (this.useCepMask && numericValue.length === 8 && !this.validateCep(numericValue)) {
67
- this.clearAndShowValidationError('CEP inválido. Por favor, insira um CEP correto.');
79
+ else if (this.useCepMask &&
80
+ numericValue.length === 8 &&
81
+ !this.validateCep(numericValue)) {
82
+ this.clearAndShowValidationError("CEP inválido. Por favor, insira um CEP correto.");
68
83
  }
69
84
  }
70
85
  // Máscara de moeda
71
86
  if (this.useMoneyMask) {
72
- const numericValue = inputValue.replace(/\D/g, ''); // Remove todos os não numéricos
87
+ const numericValue = inputValue.replace(/\D/g, ""); // Remove todos os não numéricos
73
88
  const formattedValue = this.formatMoney(numericValue); // Formata como dinheiro ou número decimal
74
89
  inputElement.value = formattedValue;
75
90
  this.value = formattedValue;
@@ -83,42 +98,46 @@ export class InputComponent {
83
98
  }
84
99
  formatMoney(value) {
85
100
  if (!value)
86
- return ''; // Se o valor estiver vazio, retorna uma string vazia
101
+ return ""; // Se o valor estiver vazio, retorna uma string vazia
87
102
  const numericValue = parseFloat(value) / 100;
88
103
  // Verifica se deve exibir o símbolo da moeda ou não
89
104
  if (this.displayCurrencySymbol) {
90
105
  // Formata como moeda
91
- return new Intl.NumberFormat('pt-BR', {
92
- style: 'currency',
93
- currency: this.currencyCode
106
+ return new Intl.NumberFormat("pt-BR", {
107
+ style: "currency",
108
+ currency: this.currencyCode,
94
109
  }).format(numericValue);
95
110
  }
96
111
  else {
97
112
  // Formata como número decimal, sem o símbolo da moeda
98
- return new Intl.NumberFormat('pt-BR', {
99
- style: 'decimal',
113
+ return new Intl.NumberFormat("pt-BR", {
114
+ style: "decimal",
100
115
  minimumFractionDigits: 2,
101
- maximumFractionDigits: 2
116
+ maximumFractionDigits: 2,
102
117
  }).format(numericValue);
103
118
  }
104
119
  }
105
120
  onKeyDown(event) {
106
- if (this.onlyNumbers && !/^\d$/.test(event.key) && event.key !== 'Backspace' && event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') {
121
+ if (this.onlyNumbers &&
122
+ !/^\d$/.test(event.key) &&
123
+ event.key !== "Backspace" &&
124
+ event.key !== "ArrowLeft" &&
125
+ event.key !== "ArrowRight") {
107
126
  event.preventDefault();
108
127
  }
109
128
  }
110
129
  onChange(event) {
111
- const numericValue = this.value.replace(/\D/g, ''); // Remove todos os caracteres não numéricos
130
+ const numericValue = this.value.replace(/\D/g, ""); // Remove todos os caracteres não numéricos
112
131
  // Validação também ocorre no blur para casos onde o input não está completo
113
132
  if (this.validateInput) {
114
133
  if (this.useCpfMask && !this.validateCpf(numericValue)) {
115
- this.clearAndShowValidationError('CPF inválido. Por favor, insira um CPF correto.');
134
+ this.clearAndShowValidationError("CPF inválido. Por favor, insira um CPF correto.");
116
135
  }
117
136
  else if (this.useCnpjMask && !this.validateCnpj(numericValue)) {
118
- this.clearAndShowValidationError('CNPJ inválido. Por favor, insira um CNPJ correto.');
137
+ this.clearAndShowValidationError("CNPJ inválido. Por favor, insira um CNPJ correto.");
119
138
  }
120
139
  else if (this.useCepMask && !this.validateCep(numericValue)) {
121
- this.clearAndShowValidationError('CEP inválido. Por favor, insira um CEP correto.');
140
+ this.clearAndShowValidationError("CEP inválido. Por favor, insira um CEP correto.");
122
141
  }
123
142
  }
124
143
  this.changeEvent.emit(event);
@@ -154,7 +173,7 @@ export class InputComponent {
154
173
  if (pos < 2)
155
174
  pos = 9;
156
175
  }
157
- let result = sum % 11 < 2 ? 0 : 11 - sum % 11;
176
+ let result = sum % 11 < 2 ? 0 : 11 - (sum % 11);
158
177
  if (result !== parseInt(digits.charAt(0)))
159
178
  return false;
160
179
  length = length + 1;
@@ -166,21 +185,21 @@ export class InputComponent {
166
185
  if (pos < 2)
167
186
  pos = 9;
168
187
  }
169
- result = sum % 11 < 2 ? 0 : 11 - sum % 11;
188
+ result = sum % 11 < 2 ? 0 : 11 - (sum % 11);
170
189
  return result === parseInt(digits.charAt(1));
171
190
  }
172
191
  validateCep(cep) {
173
192
  return /^\d{8}$/.test(cep); // Valida apenas números, sem considerar a máscara
174
193
  }
175
194
  clearAndShowValidationError(message) {
176
- this.value = ''; // Limpa o valor do ngModel
195
+ this.value = ""; // Limpa o valor do ngModel
177
196
  this.onChangeCallback(this.value); // Atualiza o ngModel com o valor limpo
178
197
  this.errorMessage = message;
179
198
  this.showErrorModal = true;
180
199
  }
181
200
  closeModal() {
182
201
  this.showErrorModal = false;
183
- this.errorMessage = '';
202
+ this.errorMessage = "";
184
203
  }
185
204
  onFocus(event) {
186
205
  this.focusEvent.emit(event);
@@ -210,35 +229,38 @@ export class InputComponent {
210
229
  }
211
230
  catch (error) {
212
231
  if (error instanceof Error) {
213
- console.error('Permission error:', error.message);
232
+ console.error("Permission error:", error.message);
214
233
  }
215
234
  else {
216
- console.error('Unknown error occurred during permission check');
235
+ console.error("Unknown error occurred during permission check");
217
236
  }
218
237
  return true;
219
238
  }
220
239
  }
240
+ onButtonClick() {
241
+ this.buttonClick.emit();
242
+ }
221
243
  ngOnDestroy() {
222
- this.subscriptions.forEach(sub => sub.unsubscribe());
244
+ this.subscriptions.forEach((sub) => sub.unsubscribe());
223
245
  }
224
246
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InputComponent, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component }); }
225
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: InputComponent, selector: "argenta-custom-input", inputs: { label: "label", placeholder: "placeholder", id: "id", type: "type", disabled: "disabled", readonly: "readonly", maxlength: "maxlength", minlength: "minlength", required: "required", pattern: "pattern", autofocus: "autofocus", useCpfMask: "useCpfMask", useCnpjMask: "useCnpjMask", useCepMask: "useCepMask", onlyNumbers: "onlyNumbers", validateInput: "validateInput", labelFontWeight: "labelFontWeight", permissions: "permissions", useMoneyMask: "useMoneyMask", currencyCode: "currencyCode", displayCurrencySymbol: "displayCurrencySymbol" }, outputs: { inputEvent: "inputEvent", changeEvent: "changeEvent", focusEvent: "focusEvent", blurEvent: "blurEvent", keyupEvent: "keyupEvent", keydownEvent: "keydownEvent", keypressEvent: "keypressEvent" }, providers: [
247
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: InputComponent, selector: "argenta-custom-input", inputs: { label: "label", placeholder: "placeholder", id: "id", type: "type", disabled: "disabled", readonly: "readonly", maxlength: "maxlength", minlength: "minlength", required: "required", pattern: "pattern", autofocus: "autofocus", useCpfMask: "useCpfMask", useCnpjMask: "useCnpjMask", useCepMask: "useCepMask", onlyNumbers: "onlyNumbers", validateInput: "validateInput", labelFontWeight: "labelFontWeight", permissions: "permissions", useMoneyMask: "useMoneyMask", currencyCode: "currencyCode", displayCurrencySymbol: "displayCurrencySymbol", prependText: "prependText", buttonText: "buttonText" }, outputs: { inputEvent: "inputEvent", changeEvent: "changeEvent", focusEvent: "focusEvent", blurEvent: "blurEvent", keyupEvent: "keyupEvent", keydownEvent: "keydownEvent", keypressEvent: "keypressEvent", buttonClick: "buttonClick" }, providers: [
226
248
  {
227
249
  provide: NG_VALUE_ACCESSOR,
228
250
  useExisting: forwardRef(() => InputComponent),
229
- multi: true
230
- }
231
- ], ngImport: i0, template: "<div *ngIf=\"hasPermission()\" class=\"form-group\">\n <label [for]=\"id\" [ngClass]=\"'label-styles'\">{{ label }}</label>\n <input [type]=\"getInputType()\"\n class=\"form-control custom-input\"\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [(ngModel)]=\"value\"\n (input)=\"onInput($event)\"\n (change)=\"onChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keyup)=\"keyupEvent.emit($event)\"\n (keydown)=\"onKeyDown($event)\"\n (keypress)=\"keypressEvent.emit($event)\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [required]=\"required\"\n [attr.pattern]=\"pattern\"\n [autofocus]=\"autofocus\"\n [cpfMask]=\"useCpfMask\" \n [cnpjMask]=\"useCnpjMask\" \n [cepMask]=\"useCepMask\">\n\n <!-- Modal para exibir mensagens de erro -->\n <div class=\"modal-overlay\" *ngIf=\"showErrorModal\">\n <div class=\"modal-content\">\n <span class=\"close\" (click)=\"closeModal()\">&times;</span>\n <p>{{ errorMessage }}</p>\n <button class=\"btn-ok\" (click)=\"closeModal()\">OK</button>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.form-group{font-family:var(--font-family);font-size:1rem;font-weight:700}.form-check-input{font-family:var(--font-family);color:#333;font-size:.9rem}.form-check-label{width:623px;height:19px;top:1608px;left:133px;gap:0px;opacity:0px;font-family:var(--font-family);font-size:16px;line-height:19.36px;text-align:left}.custom-input{font-family:var(--font-family);color:#333;font-size:.9rem;height:46px}.custom-input::placeholder{font-size:14px;color:#d3d3d3}.form-label{font-family:var(--font-family);color:#333;font-size:1rem;font-weight:700}.label-styles{font-weight:400;font-family:var(--font-family);font-size:16px;line-height:19.36px;text-align:left;margin-top:1rem;margin-bottom:.5rem}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content{background:#fff;padding:25px 30px;border-radius:8px;width:360px;text-align:center;position:relative;box-shadow:0 4px 12px #0003}.close{position:absolute;top:10px;right:15px;cursor:pointer;font-size:20px;color:#555;transition:color .3s}.close:hover{color:#f44336}.btn-ok{margin-top:20px;padding:8px 20px;border:none;background-color:#00444c;color:#fff;border-radius:4px;cursor:pointer;font-size:14px;transition:background-color .3s,transform .2s}.btn-ok:hover{background-color:#00363d;transform:scale(1.05)}.btn-ok:active{transform:scale(.98)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.CepMaskDirective, selector: "[cepMask]", inputs: ["cepMask"] }, { kind: "directive", type: i5.CnpjMaskDirective, selector: "[cnpjMask]", inputs: ["cnpjMask"] }, { kind: "directive", type: i6.CpfMaskDirective, selector: "[cpfMask]", inputs: ["cpfMask"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
251
+ multi: true,
252
+ },
253
+ ], ngImport: i0, template: "<div *ngIf=\"hasPermission()\" class=\"form-group\">\n <label [for]=\"id\" [ngClass]=\"'label-styles'\">{{ label }}</label>\n <div class=\"input-group\">\n <div *ngIf=\"prependText\" class=\"input-group-prepend\">\n <span\n class=\"input-group-text custom-input-group-text\"\n id=\"basic-addon3\"\n >{{ prependText }}</span\n >\n </div>\n <input\n [type]=\"getInputType()\"\n class=\"form-control custom-input\"\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [(ngModel)]=\"value\"\n (input)=\"onInput($event)\"\n (change)=\"onChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keyup)=\"keyupEvent.emit($event)\"\n (keydown)=\"onKeyDown($event)\"\n (keypress)=\"keypressEvent.emit($event)\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [required]=\"required\"\n [attr.pattern]=\"pattern\"\n [autofocus]=\"autofocus\"\n [cpfMask]=\"useCpfMask\"\n [cnpjMask]=\"useCnpjMask\"\n [cepMask]=\"useCepMask\"\n />\n\n <div class=\"input-group-append\" *ngIf=\"buttonText\">\n <button type=\"button\" class=\"btn-group-append\" (click)=\"onButtonClick()\">\n {{ buttonText }}\n </button>\n </div>\n\n <!-- Modal para exibir mensagens de erro -->\n <div class=\"modal-overlay\" *ngIf=\"showErrorModal\">\n <div class=\"modal-content\">\n <span class=\"close\" (click)=\"closeModal()\">&times;</span>\n <p>{{ errorMessage }}</p>\n <button class=\"btn-ok\" (click)=\"closeModal()\">OK</button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.form-group{font-family:var(--font-family);font-size:1rem;font-weight:700}.form-check-input{font-family:var(--font-family);color:#333;font-size:.9rem}.form-check-label{width:623px;height:19px;top:1608px;left:133px;gap:0px;opacity:0px;font-family:var(--font-family);font-size:16px;line-height:19.36px;text-align:left}.custom-input{font-family:var(--font-family);color:#333;font-size:.9rem;height:46px}.custom-input::placeholder{font-size:14px;color:#d3d3d3}.form-label{font-family:var(--font-family);color:#333;font-size:1rem;font-weight:700}.label-styles{font-weight:400;font-family:var(--font-family);font-size:16px;line-height:19.36px;text-align:left;margin-top:1rem;margin-bottom:.5rem}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content{background:#fff;padding:25px 30px;border-radius:8px;width:360px;text-align:center;position:relative;box-shadow:0 4px 12px #0003}.close{position:absolute;top:10px;right:15px;cursor:pointer;font-size:20px;color:#555;transition:color .3s}.close:hover{color:#f44336}.btn-ok{margin-top:20px;padding:8px 20px;border:none;background-color:#00444c;color:#fff;border-radius:4px;cursor:pointer;font-size:14px;transition:background-color .3s,transform .2s}.btn-ok:hover{background-color:#00363d;transform:scale(1.05)}.btn-ok:active{transform:scale(.98)}.input-group-text{padding:.64rem .75rem;font-family:var(--font-family);color:#6e6e6e;font-size:14px}.btn-group-append{padding:.69rem;font-family:var(--font-family);background-color:var(--secondary-color);border:0rem solid;color:var(--text-color);transition:border-width .2s,transform .1s;font-size:1rem;border-top-right-radius:6px;border-bottom-right-radius:6px}.btn-group-append:hover{background-color:var(--primary-color)}.custom-input-group-text{border-top-right-radius:0;border-bottom-right-radius:0;padding:.71rem .75rem;background-color:#e7e7e7;border:1px solid #dbdbdb}.btn-group-append:active{animation:blink .3s}@keyframes blink{0%{background-color:var(--primary-color);border-color:var(--primary-color)}50%{background-color:var(--secondary-color);border-color:var(--secondary-color)}to{background-color:var(--primary-color);border-color:var(--primary-color)}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.CepMaskDirective, selector: "[cepMask]", inputs: ["cepMask"] }, { kind: "directive", type: i5.CnpjMaskDirective, selector: "[cnpjMask]", inputs: ["cnpjMask"] }, { kind: "directive", type: i6.CpfMaskDirective, selector: "[cpfMask]", inputs: ["cpfMask"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
232
254
  }
233
255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InputComponent, decorators: [{
234
256
  type: Component,
235
- args: [{ selector: 'argenta-custom-input', providers: [
257
+ args: [{ selector: "argenta-custom-input", providers: [
236
258
  {
237
259
  provide: NG_VALUE_ACCESSOR,
238
260
  useExisting: forwardRef(() => InputComponent),
239
- multi: true
240
- }
241
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"hasPermission()\" class=\"form-group\">\n <label [for]=\"id\" [ngClass]=\"'label-styles'\">{{ label }}</label>\n <input [type]=\"getInputType()\"\n class=\"form-control custom-input\"\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [(ngModel)]=\"value\"\n (input)=\"onInput($event)\"\n (change)=\"onChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keyup)=\"keyupEvent.emit($event)\"\n (keydown)=\"onKeyDown($event)\"\n (keypress)=\"keypressEvent.emit($event)\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [required]=\"required\"\n [attr.pattern]=\"pattern\"\n [autofocus]=\"autofocus\"\n [cpfMask]=\"useCpfMask\" \n [cnpjMask]=\"useCnpjMask\" \n [cepMask]=\"useCepMask\">\n\n <!-- Modal para exibir mensagens de erro -->\n <div class=\"modal-overlay\" *ngIf=\"showErrorModal\">\n <div class=\"modal-content\">\n <span class=\"close\" (click)=\"closeModal()\">&times;</span>\n <p>{{ errorMessage }}</p>\n <button class=\"btn-ok\" (click)=\"closeModal()\">OK</button>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.form-group{font-family:var(--font-family);font-size:1rem;font-weight:700}.form-check-input{font-family:var(--font-family);color:#333;font-size:.9rem}.form-check-label{width:623px;height:19px;top:1608px;left:133px;gap:0px;opacity:0px;font-family:var(--font-family);font-size:16px;line-height:19.36px;text-align:left}.custom-input{font-family:var(--font-family);color:#333;font-size:.9rem;height:46px}.custom-input::placeholder{font-size:14px;color:#d3d3d3}.form-label{font-family:var(--font-family);color:#333;font-size:1rem;font-weight:700}.label-styles{font-weight:400;font-family:var(--font-family);font-size:16px;line-height:19.36px;text-align:left;margin-top:1rem;margin-bottom:.5rem}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content{background:#fff;padding:25px 30px;border-radius:8px;width:360px;text-align:center;position:relative;box-shadow:0 4px 12px #0003}.close{position:absolute;top:10px;right:15px;cursor:pointer;font-size:20px;color:#555;transition:color .3s}.close:hover{color:#f44336}.btn-ok{margin-top:20px;padding:8px 20px;border:none;background-color:#00444c;color:#fff;border-radius:4px;cursor:pointer;font-size:14px;transition:background-color .3s,transform .2s}.btn-ok:hover{background-color:#00363d;transform:scale(1.05)}.btn-ok:active{transform:scale(.98)}\n"] }]
261
+ multi: true,
262
+ },
263
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"hasPermission()\" class=\"form-group\">\n <label [for]=\"id\" [ngClass]=\"'label-styles'\">{{ label }}</label>\n <div class=\"input-group\">\n <div *ngIf=\"prependText\" class=\"input-group-prepend\">\n <span\n class=\"input-group-text custom-input-group-text\"\n id=\"basic-addon3\"\n >{{ prependText }}</span\n >\n </div>\n <input\n [type]=\"getInputType()\"\n class=\"form-control custom-input\"\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [(ngModel)]=\"value\"\n (input)=\"onInput($event)\"\n (change)=\"onChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keyup)=\"keyupEvent.emit($event)\"\n (keydown)=\"onKeyDown($event)\"\n (keypress)=\"keypressEvent.emit($event)\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [required]=\"required\"\n [attr.pattern]=\"pattern\"\n [autofocus]=\"autofocus\"\n [cpfMask]=\"useCpfMask\"\n [cnpjMask]=\"useCnpjMask\"\n [cepMask]=\"useCepMask\"\n />\n\n <div class=\"input-group-append\" *ngIf=\"buttonText\">\n <button type=\"button\" class=\"btn-group-append\" (click)=\"onButtonClick()\">\n {{ buttonText }}\n </button>\n </div>\n\n <!-- Modal para exibir mensagens de erro -->\n <div class=\"modal-overlay\" *ngIf=\"showErrorModal\">\n <div class=\"modal-content\">\n <span class=\"close\" (click)=\"closeModal()\">&times;</span>\n <p>{{ errorMessage }}</p>\n <button class=\"btn-ok\" (click)=\"closeModal()\">OK</button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.form-group{font-family:var(--font-family);font-size:1rem;font-weight:700}.form-check-input{font-family:var(--font-family);color:#333;font-size:.9rem}.form-check-label{width:623px;height:19px;top:1608px;left:133px;gap:0px;opacity:0px;font-family:var(--font-family);font-size:16px;line-height:19.36px;text-align:left}.custom-input{font-family:var(--font-family);color:#333;font-size:.9rem;height:46px}.custom-input::placeholder{font-size:14px;color:#d3d3d3}.form-label{font-family:var(--font-family);color:#333;font-size:1rem;font-weight:700}.label-styles{font-weight:400;font-family:var(--font-family);font-size:16px;line-height:19.36px;text-align:left;margin-top:1rem;margin-bottom:.5rem}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content{background:#fff;padding:25px 30px;border-radius:8px;width:360px;text-align:center;position:relative;box-shadow:0 4px 12px #0003}.close{position:absolute;top:10px;right:15px;cursor:pointer;font-size:20px;color:#555;transition:color .3s}.close:hover{color:#f44336}.btn-ok{margin-top:20px;padding:8px 20px;border:none;background-color:#00444c;color:#fff;border-radius:4px;cursor:pointer;font-size:14px;transition:background-color .3s,transform .2s}.btn-ok:hover{background-color:#00363d;transform:scale(1.05)}.btn-ok:active{transform:scale(.98)}.input-group-text{padding:.64rem .75rem;font-family:var(--font-family);color:#6e6e6e;font-size:14px}.btn-group-append{padding:.69rem;font-family:var(--font-family);background-color:var(--secondary-color);border:0rem solid;color:var(--text-color);transition:border-width .2s,transform .1s;font-size:1rem;border-top-right-radius:6px;border-bottom-right-radius:6px}.btn-group-append:hover{background-color:var(--primary-color)}.custom-input-group-text{border-top-right-radius:0;border-bottom-right-radius:0;padding:.71rem .75rem;background-color:#e7e7e7;border:1px solid #dbdbdb}.btn-group-append:active{animation:blink .3s}@keyframes blink{0%{background-color:var(--primary-color);border-color:var(--primary-color)}50%{background-color:var(--secondary-color);border-color:var(--secondary-color)}to{background-color:var(--primary-color);border-color:var(--primary-color)}}\n"] }]
242
264
  }], ctorParameters: function () { return [{ type: i1.AuthService }]; }, propDecorators: { label: [{
243
265
  type: Input
244
266
  }], placeholder: [{
@@ -281,6 +303,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
281
303
  type: Input
282
304
  }], displayCurrencySymbol: [{
283
305
  type: Input
306
+ }], prependText: [{
307
+ type: Input
308
+ }], buttonText: [{
309
+ type: Input
284
310
  }], inputEvent: [{
285
311
  type: Output
286
312
  }], changeEvent: [{
@@ -295,5 +321,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
295
321
  type: Output
296
322
  }], keypressEvent: [{
297
323
  type: Output
324
+ }], buttonClick: [{
325
+ type: Output
298
326
  }] } });
299
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliLXBvcnRhbC1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9pbXB1dC9pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItcG9ydGFsLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2ltcHV0L2lucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFpQnpFLE1BQU0sT0FBTyxjQUFjO0lBeUN6QixZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQXhDbkMsVUFBSyxHQUFXLGVBQWUsQ0FBQztRQUNoQyxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixPQUFFLEdBQVcsU0FBUyxDQUFDO1FBQ3ZCLFNBQUksR0FBVyxNQUFNLENBQUM7UUFDdEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsWUFBTyxHQUFrQixJQUFJLENBQUM7UUFDOUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0Isa0JBQWEs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ZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYXV0aC1zZXJ2aWNlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcmdlbnRhLWN1c3RvbS1pbnB1dCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnRGVmYXVsdCBMYWJlbCc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaWQ6IHN0cmluZyA9ICdpbnB1dElkJztcbiAgQElucHV0KCkgdHlwZTogc3RyaW5nID0gJ3RleHQnO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBtYXhsZW5ndGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBtaW5sZW5ndGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwYXR0ZXJuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgYXV0b2ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVzZUNwZk1hc2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdXNlQ25wak1hc2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdXNlQ2VwTWFzazogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBvbmx5TnVtYmVyczogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB2YWxpZGF0ZUlucHV0OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxhYmVsRm9udFdlaWdodDogbnVtYmVyID0gNDAwO1xuICBASW5wdXQoKSBwZXJtaXNzaW9uczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHVzZU1vbmV5TWFzazogYm9vbGVhbiA9IGZhbHNlOyAvLyBQYXJhIGF0aXZhci9kZXNhdGl2YXIgYSBtw6FzY2FyYSBkZSBtb2VkYVxuICBASW5wdXQoKSBjdXJyZW5jeUNvZGU6IHN0cmluZyA9ICdCUkwnOyAvLyBDw7NkaWdvIGRhIG1vZWRhXG4gIEBJbnB1dCgpIGRpc3BsYXlDdXJyZW5jeVN5bWJvbDogYm9vbGVhbiA9IHRydWU7IC8vIEV4aWJpciBvdSBuw6NvIG8gc8OtbWJvbG8gZGEgbW9lZGFcblxuXG4gIEBPdXRwdXQoKSBpbnB1dEV2ZW50OiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIGZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgQE91dHB1dCgpIGJsdXJFdmVudDogRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuICBAT3V0cHV0KCkga2V5dXBFdmVudDogRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PigpO1xuICBAT3V0cHV0KCkga2V5ZG93bkV2ZW50OiBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBrZXlwcmVzc0V2ZW50OiBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gKCkgPT4geyB9O1xuICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gKCkgPT4geyB9O1xuXG4gIHZhbHVlOiBzdHJpbmcgPSAnJztcbiAgc2hvd0Vycm9yTW9kYWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHsgfVxuXG4gIGdldElucHV0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm9ubHlOdW1iZXJzID8gJ3RlbCcgOiB0aGlzLnR5cGU7XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGxldCBpbnB1dFZhbHVlID0gaW5wdXRFbGVtZW50LnZhbHVlO1xuXG4gICAgLy8gQXBsaWNhIG3DoXNjYXJhIGRlIG7Dum1lcm9zIHNlIG5lY2Vzc8OhcmlvXG4gICAgaWYgKHRoaXMub25seU51bWJlcnMgJiYgISh0aGlzLnVzZUNwZk1hc2sgfHwgdGhpcy51c2VDbnBqTWFzayB8fCB0aGlzLnVzZUNlcE1hc2sgfHwgdGhpcy51c2VNb25leU1hc2spKSB7XG4gICAgICBpbnB1dFZhbHVlID0gaW5wdXRWYWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpOyAvLyBSZW1vdmUgdG9kb3Mgb3MgbsOjbyBudW3DqXJpY29zXG4gICAgfVxuXG4gICAgLy8gVmFsaWRhw6fDo28gaW1lZGlhdGEgcGFyYSBDUEYsIENOUEogb3UgQ0VQXG4gICAgY29uc3QgbnVtZXJpY1ZhbHVlID0gaW5wdXRWYWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpOyAvLyBSZW1vdmUgdG9kb3Mgb3MgY2FyYWN0ZXJlcyBuw6NvIG51bcOpcmljb3NcbiAgICBpZiAodGhpcy52YWxpZGF0ZUlucHV0KSB7XG4gICAgICBpZiAodGhpcy51c2VDcGZNYXNrICYmIG51bWVyaWNWYWx1ZS5sZW5ndGggPT09IDExICYmICF0aGlzLnZhbGlkYXRlQ3BmKG51bWVyaWNWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5jbGVhckFuZFNob3dWYWxpZGF0aW9uRXJyb3IoJ0NQRiBpbnbDoWxpZG8uIFBvciBmYXZvciwgaW5zaXJhIHVtIENQRiBjb3JyZXRvLicpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnVzZUNucGpNYXNrICYmIG51bWVyaWNWYWx1ZS5sZW5ndGggPT09IDE0ICYmICF0aGlzLnZhbGlkYXRlQ25waihudW1lcmljVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuY2xlYXJBbmRTaG93VmFsaWRhdGlvbkVycm9yKCdDTlBKIGludsOhbGlkby4gUG9yIGZhdm9yLCBpbnNpcmEgdW0gQ05QSiBjb3JyZXRvLicpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnVzZUNlcE1hc2sgJiYgbnVtZXJpY1ZhbHVlLmxlbmd0aCA9PT0gOCAmJiAhdGhpcy52YWxpZGF0ZUNlcChudW1lcmljVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuY2xlYXJBbmRTaG93VmFsaWRhdGlvbkVycm9yKCdDRVAgaW52w6FsaWRvLiBQb3IgZmF2b3IsIGluc2lyYSB1bSBDRVAgY29ycmV0by4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNw6FzY2FyYSBkZSBtb2VkYVxuICAgIGlmICh0aGlzLnVzZU1vbmV5TWFzaykge1xuICAgICAgY29uc3QgbnVtZXJpY1ZhbHVlID0gaW5wdXRWYWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpOyAvLyBSZW1vdmUgdG9kb3Mgb3MgbsOjbyBudW3DqXJpY29zXG4gICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuZm9ybWF0TW9uZXkobnVtZXJpY1ZhbHVlKTsgLy8gRm9ybWF0YSBjb21vIGRpbmhlaXJvIG91IG7Dum1lcm8gZGVjaW1hbFxuICAgICAgaW5wdXRFbGVtZW50LnZhbHVlID0gZm9ybWF0dGVkVmFsdWU7XG4gICAgICB0aGlzLnZhbHVlID0gZm9ybWF0dGVkVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSBpbnB1dFZhbHVlO1xuICAgIH1cblxuICAgIC8vIEF0dWFsaXphIG8gdmFsb3IgZSBlbWl0ZSBvIGV2ZW50byBkZSBtdWRhbsOnYVxuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLmlucHV0RXZlbnQuZW1pdChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE1vbmV5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHJldHVybiAnJzsgLy8gU2UgbyB2YWxvciBlc3RpdmVyIHZhemlvLCByZXRvcm5hIHVtYSBzdHJpbmcgdmF6aWFcblxuICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpIC8gMTAwO1xuXG4gICAgLy8gVmVyaWZpY2Egc2UgZGV2ZSBleGliaXIgbyBzw61tYm9sbyBkYSBtb2VkYSBvdSBuw6NvXG4gICAgaWYgKHRoaXMuZGlzcGxheUN1cnJlbmN5U3ltYm9sKSB7XG4gICAgICAvLyBGb3JtYXRhIGNvbW8gbW9lZGFcbiAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywge1xuICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgY3VycmVuY3k6IHRoaXMuY3VycmVuY3lDb2RlXG4gICAgICB9KS5mb3JtYXQobnVtZXJpY1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9ybWF0YSBjb21vIG7Dum1lcm8gZGVjaW1hbCwgc2VtIG8gc8OtbWJvbG8gZGEgbW9lZGFcbiAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywge1xuICAgICAgICBzdHlsZTogJ2RlY2ltYWwnLFxuICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDIsXG4gICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMlxuICAgICAgfSkuZm9ybWF0KG51bWVyaWNWYWx1ZSk7XG4gICAgfVxuICB9XG5cblxuXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLm9ubHlOdW1iZXJzICYmICEvXlxcZCQvLnRlc3QoZXZlbnQua2V5KSAmJiBldmVudC5rZXkgIT09ICdCYWNrc3BhY2UnICYmIGV2ZW50LmtleSAhPT0gJ0Fycm93TGVmdCcgJiYgZXZlbnQua2V5ICE9PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgbnVtZXJpY1ZhbHVlID0gdGhpcy52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpOyAvLyBSZW1vdmUgdG9kb3Mgb3MgY2FyYWN0ZXJlcyBuw6NvIG51bcOpcmljb3NcbiAgICAvLyBWYWxpZGHDp8OjbyB0YW1iw6ltIG9jb3JyZSBubyBibHVyIHBhcmEgY2Fzb3Mgb25kZSBvIGlucHV0IG7Do28gZXN0w6EgY29tcGxldG9cbiAgICBpZiAodGhpcy52YWxpZGF0ZUlucHV0KSB7XG4gICAgICBpZiAodGhpcy51c2VDcGZNYXNrICYmICF0aGlzLnZhbGlkYXRlQ3BmKG51bWVyaWNWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5jbGVhckFuZFNob3dWYWxpZGF0aW9uRXJyb3IoJ0NQRiBpbnbDoWxpZG8uIFBvciBmYXZvciwgaW5zaXJhIHVtIENQRiBjb3JyZXRvLicpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnVzZUNucGpNYXNrICYmICF0aGlzLnZhbGlkYXRlQ25waihudW1lcmljVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuY2xlYXJBbmRTaG93VmFsaWRhdGlvbkVycm9yKCdDTlBKIGludsOhbGlkby4gUG9yIGZhdm9yLCBpbnNpcmEgdW0gQ05QSiBjb3JyZXRvLicpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnVzZUNlcE1hc2sgJiYgIXRoaXMudmFsaWRhdGVDZXAobnVtZXJpY1ZhbHVlKSkge1xuICAgICAgICB0aGlzLmNsZWFyQW5kU2hvd1ZhbGlkYXRpb25FcnJvcignQ0VQIGludsOhbGlkby4gUG9yIGZhdm9yLCBpbnNpcmEgdW0gQ0VQIGNvcnJldG8uJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRXZlbnQuZW1pdChldmVudCk7XG4gIH1cblxuICB2YWxpZGF0ZUNwZihjcGY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChjcGYubGVuZ3RoICE9PSAxMSB8fCAvXihcXGQpXFwxKyQvLnRlc3QoY3BmKSkgcmV0dXJuIGZhbHNlO1xuICAgIGxldCBzdW0gPSAwLCByZW1haW5kZXI7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gOTsgaSsrKSBzdW0gKz0gcGFyc2VJbnQoY3BmLnN1YnN0cmluZyhpIC0gMSwgaSkpICogKDExIC0gaSk7XG4gICAgcmVtYWluZGVyID0gKHN1bSAqIDEwKSAlIDExO1xuICAgIGlmIChyZW1haW5kZXIgPT09IDEwIHx8IHJlbWFpbmRlciA9PT0gMTEpIHJlbWFpbmRlciA9IDA7XG4gICAgaWYgKHJlbWFpbmRlciAhPT0gcGFyc2VJbnQoY3BmLnN1YnN0cmluZyg5LCAxMCkpKSByZXR1cm4gZmFsc2U7XG4gICAgc3VtID0gMDtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMDsgaSsrKSBzdW0gKz0gcGFyc2VJbnQoY3BmLnN1YnN0cmluZyhpIC0gMSwgaSkpICogKDEyIC0gaSk7XG4gICAgcmVtYWluZGVyID0gKHN1bSAqIDEwKSAlIDExO1xuICAgIGlmIChyZW1haW5kZXIgPT09IDEwIHx8IHJlbWFpbmRlciA9PT0gMTEpIHJlbWFpbmRlciA9IDA7XG4gICAgcmV0dXJuIHJlbWFpbmRlciA9PT0gcGFyc2VJbnQoY3BmLnN1YnN0cmluZygxMCwgMTEpKTtcbiAgfVxuXG4gIHZhbGlkYXRlQ25waihjbnBqOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoY25wai5sZW5ndGggIT09IDE0KSByZXR1cm4gZmFsc2U7XG4gICAgbGV0IGxlbmd0aCA9IGNucGoubGVuZ3RoIC0gMjtcbiAgICBsZXQgbnVtYmVycyA9IGNucGouc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gICAgbGV0IGRpZ2l0cyA9IGNucGouc3Vic3RyaW5nKGxlbmd0aCk7XG4gICAgbGV0IHN1bSA9IDAsIHBvcyA9IGxlbmd0aCAtIDc7XG4gICAgZm9yIChsZXQgaSA9IGxlbmd0aDsgaSA+PSAxOyBpLS0pIHtcbiAgICAgIHN1bSArPSBwYXJzZUludChudW1iZXJzLmNoYXJBdChsZW5ndGggLSBpKSkgKiBwb3MtLTtcbiAgICAgIGlmIChwb3MgPCAyKSBwb3MgPSA5O1xuICAgIH1cbiAgICBsZXQgcmVzdWx0ID0gc3VtICUgMTEgPCAyID8gMCA6IDExIC0gc3VtICUgMTE7XG4gICAgaWYgKHJlc3VsdCAhPT0gcGFyc2VJbnQoZGlnaXRzLmNoYXJBdCgwKSkpIHJldHVybiBmYWxzZTtcbiAgICBsZW5ndGggPSBsZW5ndGggKyAxO1xuICAgIG51bWJlcnMgPSBjbnBqLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICAgIHN1bSA9IDA7XG4gICAgcG9zID0gbGVuZ3RoIC0gNztcbiAgICBmb3IgKGxldCBpID0gbGVuZ3RoOyBpID49IDE7IGktLSkge1xuICAgICAgc3VtICs9IHBhcnNlSW50KG51bWJlcnMuY2hhckF0KGxlbmd0aCAtIGkpKSAqIHBvcy0tO1xuICAgICAgaWYgKHBvcyA8IDIpIHBvcyA9IDk7XG4gICAgfVxuICAgIHJlc3VsdCA9IHN1bSAlIDExIDwgMiA/IDAgOiAxMSAtIHN1bSAlIDExO1xuICAgIHJldHVybiByZXN1bHQgPT09IHBhcnNlSW50KGRpZ2l0cy5jaGFyQXQoMSkpO1xuICB9XG5cbiAgdmFsaWRhdGVDZXAoY2VwOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL15cXGR7OH0kLy50ZXN0KGNlcCk7IC8vIFZhbGlkYSBhcGVuYXMgbsO6bWVyb3MsIHNlbSBjb25zaWRlcmFyIGEgbcOhc2NhcmFcbiAgfVxuXG4gIGNsZWFyQW5kU2hvd1ZhbGlkYXRpb25FcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gJyc7IC8vIExpbXBhIG8gdmFsb3IgZG8gbmdNb2RlbFxuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLnZhbHVlKTsgLy8gQXR1YWxpemEgbyBuZ01vZGVsIGNvbSBvIHZhbG9yIGxpbXBvXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuc2hvd0Vycm9yTW9kYWwgPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLnNob3dFcnJvck1vZGFsID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgfVxuXG4gIG9uRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICB0aGlzLmZvY3VzRXZlbnQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5ibHVyRXZlbnQuZW1pdChldmVudCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBoYXNQZXJtaXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5wZXJtaXNzaW9ucyB8fCB0aGlzLnBlcm1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmhhc1Blcm1pc3Npb24odGhpcy5wZXJtaXNzaW9ucyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Blcm1pc3Npb24gZXJyb3I6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdVbmtub3duIGVycm9yIG9jY3VycmVkIGR1cmluZyBwZXJtaXNzaW9uIGNoZWNrJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiaGFzUGVybWlzc2lvbigpXCIgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gIDxsYWJlbCBbZm9yXT1cImlkXCIgW25nQ2xhc3NdPVwiJ2xhYmVsLXN0eWxlcydcIj57eyBsYWJlbCB9fTwvbGFiZWw+XG4gIDxpbnB1dCBbdHlwZV09XCJnZXRJbnB1dFR5cGUoKVwiXG4gICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBjdXN0b20taW5wdXRcIlxuICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcbiAgICAgICAgIChpbnB1dCk9XCJvbklucHV0KCRldmVudClcIlxuICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgICAgKGtleXVwKT1cImtleXVwRXZlbnQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgIChrZXlwcmVzcyk9XCJrZXlwcmVzc0V2ZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgIFthdHRyLm1heGxlbmd0aF09XCJtYXhsZW5ndGhcIlxuICAgICAgICAgW2F0dHIubWlubGVuZ3RoXT1cIm1pbmxlbmd0aFwiXG4gICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgW2F0dHIucGF0dGVybl09XCJwYXR0ZXJuXCJcbiAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgIFtjcGZNYXNrXT1cInVzZUNwZk1hc2tcIiAgXG4gICAgICAgICBbY25wak1hc2tdPVwidXNlQ25wak1hc2tcIiBcbiAgICAgICAgIFtjZXBNYXNrXT1cInVzZUNlcE1hc2tcIj5cblxuICA8IS0tIE1vZGFsIHBhcmEgZXhpYmlyIG1lbnNhZ2VucyBkZSBlcnJvIC0tPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtb3ZlcmxheVwiICpuZ0lmPVwic2hvd0Vycm9yTW9kYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjbG9zZVwiIChjbGljayk9XCJjbG9zZU1vZGFsKClcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgPHA+e3sgZXJyb3JNZXNzYWdlIH19PC9wPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1va1wiIChjbGljayk9XCJjbG9zZU1vZGFsKClcIj5PSzwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
327
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliLXBvcnRhbC1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9pbXB1dC9pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItcG9ydGFsLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2ltcHV0L2lucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7OztBQWU3RCxNQUFNLE9BQU8sY0FBYztJQWlEekIsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFoRG5DLFVBQUssR0FBVyxlQUFlLENBQUM7UUFDaEMsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsT0FBRSxHQUFXLFNBQVMsQ0FBQztRQUN2QixTQUFJLEdBQVcsTUFBTSxDQUFDO1FBQ3RCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixjQUFTLEdBQWtCLElBQUksQ0FBQztRQUNoQyxjQUFTLEdBQWtCLElBQUksQ0FBQztRQUNoQyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQzlCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixlQUFVLEdBQVksS0FBSyxD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QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFFRyxZQUFZO3NCQUFyQixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZS9hdXRoLXNlcnZpY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgQnV0dG9uQ2xhc3NlcyB9IGZyb20gXCIuLi8uLi9lbnVtL0J1dHRvbkNsYXNzZXNFbnVtXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcmdlbnRhLWN1c3RvbS1pbnB1dFwiLFxuICBzdHlsZVVybHM6IFtcIi4vaW5wdXQuY29tcG9uZW50LnNjc3NcIl0sXG4gIHRlbXBsYXRlVXJsOiBcIi4vaW5wdXQuY29tcG9uZW50Lmh0bWxcIixcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9IFwiRGVmYXVsdCBMYWJlbFwiO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgaWQ6IHN0cmluZyA9IFwiaW5wdXRJZFwiO1xuICBASW5wdXQoKSB0eXBlOiBzdHJpbmcgPSBcInRleHRcIjtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbWF4bGVuZ3RoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbWlubGVuZ3RoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcGF0dGVybjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGF1dG9mb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB1c2VDcGZNYXNrOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVzZUNucGpNYXNrOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVzZUNlcE1hc2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgb25seU51bWJlcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdmFsaWRhdGVJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBsYWJlbEZvbnRXZWlnaHQ6IG51bWJlciA9IDQwMDtcbiAgQElucHV0KCkgcGVybWlzc2lvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSB1c2VNb25leU1hc2s6IGJvb2xlYW4gPSBmYWxzZTsgLy8gUGFyYSBhdGl2YXIvZGVzYXRpdmFyIGEgbcOhc2NhcmEgZGUgbW9lZGFcbiAgQElucHV0KCkgY3VycmVuY3lDb2RlOiBzdHJpbmcgPSBcIkJSTFwiOyAvLyBDw7NkaWdvIGRhIG1vZWRhXG4gIEBJbnB1dCgpIGRpc3BsYXlDdXJyZW5jeVN5bWJvbDogYm9vbGVhbiA9IHRydWU7IC8vIEV4aWJpciBvdSBuw6NvIG8gc8OtbWJvbG8gZGEgbW9lZGFcbiAgQElucHV0KCkgcHJlcGVuZFRleHQ6IHN0cmluZyA9IFwiXCI7XG4gIEBJbnB1dCgpIGJ1dHRvblRleHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIEBPdXRwdXQoKSBpbnB1dEV2ZW50OiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIGZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuICBAT3V0cHV0KCkgYmx1ckV2ZW50OiBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgQE91dHB1dCgpIGtleXVwRXZlbnQ6IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PigpO1xuICBAT3V0cHV0KCkga2V5ZG93bkV2ZW50OiBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcbiAgQE91dHB1dCgpIGtleXByZXNzRXZlbnQ6IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PigpO1xuICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2s6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwcml2YXRlIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBCdXR0b25DbGFzc2VzID0gQnV0dG9uQ2xhc3NlcztcblxuICB2YWx1ZTogc3RyaW5nID0gXCJcIjtcbiAgc2hvd0Vycm9yTW9kYWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkge31cblxuICBnZXRJbnB1dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5vbmx5TnVtYmVycyA/IFwidGVsXCIgOiB0aGlzLnR5cGU7XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGxldCBpbnB1dFZhbHVlID0gaW5wdXRFbGVtZW50LnZhbHVlO1xuXG4gICAgLy8gQXBsaWNhIG3DoXNjYXJhIGRlIG7Dum1lcm9zIHNlIG5lY2Vzc8OhcmlvXG4gICAgaWYgKFxuICAgICAgdGhpcy5vbmx5TnVtYmVycyAmJlxuICAgICAgIShcbiAgICAgICAgdGhpcy51c2VDcGZNYXNrIHx8XG4gICAgICAgIHRoaXMudXNlQ25wak1hc2sgfHxcbiAgICAgICAgdGhpcy51c2VDZXBNYXNrIHx8XG4gICAgICAgIHRoaXMudXNlTW9uZXlNYXNrXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpbnB1dFZhbHVlID0gaW5wdXRWYWx1ZS5yZXBsYWNlKC9cXEQvZywgXCJcIik7IC8vIFJlbW92ZSB0b2RvcyBvcyBuw6NvIG51bcOpcmljb3NcbiAgICB9XG5cbiAgICAvLyBWYWxpZGHDp8OjbyBpbWVkaWF0YSBwYXJhIENQRiwgQ05QSiBvdSBDRVBcbiAgICBjb25zdCBudW1lcmljVmFsdWUgPSBpbnB1dFZhbHVlLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTsgLy8gUmVtb3ZlIHRvZG9zIG9zIGNhcmFjdGVyZXMgbsOjbyBudW3DqXJpY29zXG4gICAgaWYgKHRoaXMudmFsaWRhdGVJbnB1dCkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnVzZUNwZk1hc2sgJiZcbiAgICAgICAgbnVtZXJpY1ZhbHVlLmxlbmd0aCA9PT0gMTEgJiZcbiAgICAgICAgIXRoaXMudmFsaWRhdGVDcGYobnVtZXJpY1ZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2xlYXJBbmRTaG93VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIFwiQ1BGIGludsOhbGlkby4gUG9yIGZhdm9yLCBpbnNpcmEgdW0gQ1BGIGNvcnJldG8uXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMudXNlQ25wak1hc2sgJiZcbiAgICAgICAgbnVtZXJpY1ZhbHVlLmxlbmd0aCA9PT0gMTQgJiZcbiAgICAgICAgIXRoaXMudmFsaWRhdGVDbnBqKG51bWVyaWNWYWx1ZSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNsZWFyQW5kU2hvd1ZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIkNOUEogaW52w6FsaWRvLiBQb3IgZmF2b3IsIGluc2lyYSB1bSBDTlBKIGNvcnJldG8uXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMudXNlQ2VwTWFzayAmJlxuICAgICAgICBudW1lcmljVmFsdWUubGVuZ3RoID09PSA4ICYmXG4gICAgICAgICF0aGlzLnZhbGlkYXRlQ2VwKG51bWVyaWNWYWx1ZSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNsZWFyQW5kU2hvd1ZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIkNFUCBpbnbDoWxpZG8uIFBvciBmYXZvciwgaW5zaXJhIHVtIENFUCBjb3JyZXRvLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTcOhc2NhcmEgZGUgbW9lZGFcbiAgICBpZiAodGhpcy51c2VNb25leU1hc2spIHtcbiAgICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IGlucHV0VmFsdWUucmVwbGFjZSgvXFxEL2csIFwiXCIpOyAvLyBSZW1vdmUgdG9kb3Mgb3MgbsOjbyBudW3DqXJpY29zXG4gICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuZm9ybWF0TW9uZXkobnVtZXJpY1ZhbHVlKTsgLy8gRm9ybWF0YSBjb21vIGRpbmhlaXJvIG91IG7Dum1lcm8gZGVjaW1hbFxuICAgICAgaW5wdXRFbGVtZW50LnZhbHVlID0gZm9ybWF0dGVkVmFsdWU7XG4gICAgICB0aGlzLnZhbHVlID0gZm9ybWF0dGVkVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSBpbnB1dFZhbHVlO1xuICAgIH1cblxuICAgIC8vIEF0dWFsaXphIG8gdmFsb3IgZSBlbWl0ZSBvIGV2ZW50byBkZSBtdWRhbsOnYVxuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLmlucHV0RXZlbnQuZW1pdChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE1vbmV5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBcIlwiOyAvLyBTZSBvIHZhbG9yIGVzdGl2ZXIgdmF6aW8sIHJldG9ybmEgdW1hIHN0cmluZyB2YXppYVxuXG4gICAgY29uc3QgbnVtZXJpY1ZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSkgLyAxMDA7XG5cbiAgICAvLyBWZXJpZmljYSBzZSBkZXZlIGV4aWJpciBvIHPDrW1ib2xvIGRhIG1vZWRhIG91IG7Do29cbiAgICBpZiAodGhpcy5kaXNwbGF5Q3VycmVuY3lTeW1ib2wpIHtcbiAgICAgIC8vIEZvcm1hdGEgY29tbyBtb2VkYVxuICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdChcInB0LUJSXCIsIHtcbiAgICAgICAgc3R5bGU6IFwiY3VycmVuY3lcIixcbiAgICAgICAgY3VycmVuY3k6IHRoaXMuY3VycmVuY3lDb2RlLFxuICAgICAgfSkuZm9ybWF0KG51bWVyaWNWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvcm1hdGEgY29tbyBuw7ptZXJvIGRlY2ltYWwsIHNlbSBvIHPDrW1ib2xvIGRhIG1vZWRhXG4gICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KFwicHQtQlJcIiwge1xuICAgICAgICBzdHlsZTogXCJkZWNpbWFsXCIsXG4gICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMixcbiAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyLFxuICAgICAgfSkuZm9ybWF0KG51bWVyaWNWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vbmx5TnVtYmVycyAmJlxuICAgICAgIS9eXFxkJC8udGVzdChldmVudC5rZXkpICYmXG4gICAgICBldmVudC5rZXkgIT09IFwiQmFja3NwYWNlXCIgJiZcbiAgICAgIGV2ZW50LmtleSAhPT0gXCJBcnJvd0xlZnRcIiAmJlxuICAgICAgZXZlbnQua2V5ICE9PSBcIkFycm93UmlnaHRcIlxuICAgICkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBudW1lcmljVmFsdWUgPSB0aGlzLnZhbHVlLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTsgLy8gUmVtb3ZlIHRvZG9zIG9zIGNhcmFjdGVyZXMgbsOjbyBudW3DqXJpY29zXG4gICAgLy8gVmFsaWRhw6fDo28gdGFtYsOpbSBvY29ycmUgbm8gYmx1ciBwYXJhIGNhc29zIG9uZGUgbyBpbnB1dCBuw6NvIGVzdMOhIGNvbXBsZXRvXG4gICAgaWYgKHRoaXMudmFsaWRhdGVJbnB1dCkge1xuICAgICAgaWYgKHRoaXMudXNlQ3BmTWFzayAmJiAhdGhpcy52YWxpZGF0ZUNwZihudW1lcmljVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuY2xlYXJBbmRTaG93VmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIFwiQ1BGIGludsOhbGlkby4gUG9yIGZhdm9yLCBpbnNpcmEgdW0gQ1BGIGNvcnJldG8uXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy51c2VDbnBqTWFzayAmJiAhdGhpcy52YWxpZGF0ZUNucGoobnVtZXJpY1ZhbHVlKSkge1xuICAgICAgICB0aGlzLmNsZWFyQW5kU2hvd1ZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIkNOUEogaW52w6FsaWRvLiBQb3IgZmF2b3IsIGluc2lyYSB1bSBDTlBKIGNvcnJldG8uXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy51c2VDZXBNYXNrICYmICF0aGlzLnZhbGlkYXRlQ2VwKG51bWVyaWNWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5jbGVhckFuZFNob3dWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgXCJDRVAgaW52w6FsaWRvLiBQb3IgZmF2b3IsIGluc2lyYSB1bSBDRVAgY29ycmV0by5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNoYW5nZUV2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgdmFsaWRhdGVDcGYoY3BmOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoY3BmLmxlbmd0aCAhPT0gMTEgfHwgL14oXFxkKVxcMSskLy50ZXN0KGNwZikpIHJldHVybiBmYWxzZTtcbiAgICBsZXQgc3VtID0gMCxcbiAgICAgIHJlbWFpbmRlcjtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSA5OyBpKyspXG4gICAgICBzdW0gKz0gcGFyc2VJbnQoY3BmLnN1YnN0cmluZyhpIC0gMSwgaSkpICogKDExIC0gaSk7XG4gICAgcmVtYWluZGVyID0gKHN1bSAqIDEwKSAlIDExO1xuICAgIGlmIChyZW1haW5kZXIgPT09IDEwIHx8IHJlbWFpbmRlciA9PT0gMTEpIHJlbWFpbmRlciA9IDA7XG4gICAgaWYgKHJlbWFpbmRlciAhPT0gcGFyc2VJbnQoY3BmLnN1YnN0cmluZyg5LCAxMCkpKSByZXR1cm4gZmFsc2U7XG4gICAgc3VtID0gMDtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMDsgaSsrKVxuICAgICAgc3VtICs9IHBhcnNlSW50KGNwZi5zdWJzdHJpbmcoaSAtIDEsIGkpKSAqICgxMiAtIGkpO1xuICAgIHJlbWFpbmRlciA9IChzdW0gKiAxMCkgJSAxMTtcbiAgICBpZiAocmVtYWluZGVyID09PSAxMCB8fCByZW1haW5kZXIgPT09IDExKSByZW1haW5kZXIgPSAwO1xuICAgIHJldHVybiByZW1haW5kZXIgPT09IHBhcnNlSW50KGNwZi5zdWJzdHJpbmcoMTAsIDExKSk7XG4gIH1cblxuICB2YWxpZGF0ZUNucGooY25wajogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKGNucGoubGVuZ3RoICE9PSAxNCkgcmV0dXJuIGZhbHNlO1xuICAgIGxldCBsZW5ndGggPSBjbnBqLmxlbmd0aCAtIDI7XG4gICAgbGV0IG51bWJlcnMgPSBjbnBqLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICAgIGxldCBkaWdpdHMgPSBjbnBqLnN1YnN0cmluZyhsZW5ndGgpO1xuICAgIGxldCBzdW0gPSAwLFxuICAgICAgcG9zID0gbGVuZ3RoIC0gNztcbiAgICBmb3IgKGxldCBpID0gbGVuZ3RoOyBpID49IDE7IGktLSkge1xuICAgICAgc3VtICs9IHBhcnNlSW50KG51bWJlcnMuY2hhckF0KGxlbmd0aCAtIGkpKSAqIHBvcy0tO1xuICAgICAgaWYgKHBvcyA8IDIpIHBvcyA9IDk7XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSBzdW0gJSAxMSA8IDIgPyAwIDogMTEgLSAoc3VtICUgMTEpO1xuICAgIGlmIChyZXN1bHQgIT09IHBhcnNlSW50KGRpZ2l0cy5jaGFyQXQoMCkpKSByZXR1cm4gZmFsc2U7XG4gICAgbGVuZ3RoID0gbGVuZ3RoICsgMTtcbiAgICBudW1iZXJzID0gY25wai5zdWJzdHJpbmcoMCwgbGVuZ3RoKTtcbiAgICBzdW0gPSAwO1xuICAgIHBvcyA9IGxlbmd0aCAtIDc7XG4gICAgZm9yIChsZXQgaSA9IGxlbmd0aDsgaSA+PSAxOyBpLS0pIHtcbiAgICAgIHN1bSArPSBwYXJzZUludChudW1iZXJzLmNoYXJBdChsZW5ndGggLSBpKSkgKiBwb3MtLTtcbiAgICAgIGlmIChwb3MgPCAyKSBwb3MgPSA5O1xuICAgIH1cbiAgICByZXN1bHQgPSBzdW0gJSAxMSA8IDIgPyAwIDogMTEgLSAoc3VtICUgMTEpO1xuICAgIHJldHVybiByZXN1bHQgPT09IHBhcnNlSW50KGRpZ2l0cy5jaGFyQXQoMSkpO1xuICB9XG5cbiAgdmFsaWRhdGVDZXAoY2VwOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL15cXGR7OH0kLy50ZXN0KGNlcCk7IC8vIFZhbGlkYSBhcGVuYXMgbsO6bWVyb3MsIHNlbSBjb25zaWRlcmFyIGEgbcOhc2NhcmFcbiAgfVxuXG4gIGNsZWFyQW5kU2hvd1ZhbGlkYXRpb25FcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gXCJcIjsgLy8gTGltcGEgbyB2YWxvciBkbyBuZ01vZGVsXG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMudmFsdWUpOyAvLyBBdHVhbGl6YSBvIG5nTW9kZWwgY29tIG8gdmFsb3IgbGltcG9cbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zaG93RXJyb3JNb2RhbCA9IHRydWU7XG4gIH1cblxuICBjbG9zZU1vZGFsKCkge1xuICAgIHRoaXMuc2hvd0Vycm9yTW9kYWwgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IFwiXCI7XG4gIH1cblxuICBvbkZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgdGhpcy5mb2N1c0V2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25CbHVyKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuYmx1ckV2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgaGFzUGVybWlzc2lvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMucGVybWlzc2lvbnMgfHwgdGhpcy5wZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMucGVybWlzc2lvbnMpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiUGVybWlzc2lvbiBlcnJvcjpcIiwgZXJyb3IubWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVW5rbm93biBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGVybWlzc2lvbiBjaGVja1wiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uQnV0dG9uQ2xpY2soKSB7XG4gICAgdGhpcy5idXR0b25DbGljay5lbWl0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJoYXNQZXJtaXNzaW9uKClcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgPGxhYmVsIFtmb3JdPVwiaWRcIiBbbmdDbGFzc109XCInbGFiZWwtc3R5bGVzJ1wiPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgPGRpdiAqbmdJZj1cInByZXBlbmRUZXh0XCIgY2xhc3M9XCJpbnB1dC1ncm91cC1wcmVwZW5kXCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgY3VzdG9tLWlucHV0LWdyb3VwLXRleHRcIlxuICAgICAgICBpZD1cImJhc2ljLWFkZG9uM1wiXG4gICAgICAgID57eyBwcmVwZW5kVGV4dCB9fTwvc3BhblxuICAgICAgPlxuICAgIDwvZGl2PlxuICAgIDxpbnB1dFxuICAgICAgW3R5cGVdPVwiZ2V0SW5wdXRUeXBlKClcIlxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VzdG9tLWlucHV0XCJcbiAgICAgIFtpZF09XCJpZFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXG4gICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgIChrZXl1cCk9XCJrZXl1cEV2ZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAoa2V5cHJlc3MpPVwia2V5cHJlc3NFdmVudC5lbWl0KCRldmVudClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICBbYXR0ci5tYXhsZW5ndGhdPVwibWF4bGVuZ3RoXCJcbiAgICAgIFthdHRyLm1pbmxlbmd0aF09XCJtaW5sZW5ndGhcIlxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIFthdHRyLnBhdHRlcm5dPVwicGF0dGVyblwiXG4gICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICBbY3BmTWFza109XCJ1c2VDcGZNYXNrXCJcbiAgICAgIFtjbnBqTWFza109XCJ1c2VDbnBqTWFza1wiXG4gICAgICBbY2VwTWFza109XCJ1c2VDZXBNYXNrXCJcbiAgICAvPlxuXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiICpuZ0lmPVwiYnV0dG9uVGV4dFwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tZ3JvdXAtYXBwZW5kXCIgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soKVwiPlxuICAgICAgICB7eyBidXR0b25UZXh0IH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTW9kYWwgcGFyYSBleGliaXIgbWVuc2FnZW5zIGRlIGVycm8gLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLW92ZXJsYXlcIiAqbmdJZj1cInNob3dFcnJvck1vZGFsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNsb3NlXCIgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgIDxwPnt7IGVycm9yTWVzc2FnZSB9fTwvcD5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1va1wiIChjbGljayk9XCJjbG9zZU1vZGFsKClcIj5PSzwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=