@stiunb/unb-lib-components 18.0.23 → 18.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -0
- package/esm2022/lib/unb-mensagem/unb-mensagem.component.mjs +18 -26
- package/esm2022/lib/unb-mensagem/unb-mensagem.service.mjs +16 -21
- package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.mjs +60 -29
- package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.mjs +4 -4
- package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.mjs +98 -67
- package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.mjs +4 -4
- package/esm2022/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.mjs +111 -96
- package/esm2022/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.mjs +98 -38
- package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.mjs +57 -29
- package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.mjs +4 -4
- package/esm2022/lib/unb-pessoa/unb-pessoa.service.mjs +141 -45
- package/fesm2022/stiunb-unb-lib-components.mjs +556 -321
- package/fesm2022/stiunb-unb-lib-components.mjs.map +1 -1
- package/lib/unb-mensagem/unb-mensagem.component.d.ts +3 -17
- package/lib/unb-mensagem/unb-mensagem.service.d.ts +16 -18
- package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.d.ts +6 -2
- package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.d.ts +2 -5
- package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.d.ts +6 -3
- package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.d.ts +2 -5
- package/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.d.ts +16 -10
- package/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.d.ts +21 -11
- package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.d.ts +6 -4
- package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.d.ts +2 -5
- package/lib/unb-pessoa/unb-pessoa.service.d.ts +9 -13
- package/package.json +2 -3
|
@@ -1,60 +1,56 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { forkJoin } from 'rxjs';
|
|
3
|
+
import { UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';
|
|
2
4
|
import { UnbUtils } from '../../utils/unb-utils';
|
|
3
5
|
import { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';
|
|
4
6
|
import { TipoPessoaEnum } from '../unb-tipo-pessoa.enum';
|
|
5
|
-
import { forkJoin } from 'rxjs';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "../unb-pessoa.service";
|
|
8
9
|
import * as i2 from "@angular/material/snack-bar";
|
|
9
|
-
import * as i3 from "
|
|
10
|
-
import * as i4 from "@angular/
|
|
11
|
-
import * as i5 from "@angular/
|
|
12
|
-
import * as i6 from "@angular/material/
|
|
13
|
-
import * as i7 from "@angular/material/
|
|
14
|
-
import * as i8 from "
|
|
15
|
-
import * as i9 from "@angular/material/
|
|
16
|
-
import * as i10 from "@angular/material/
|
|
10
|
+
import * as i3 from "../../unb-mensagem/unb-mensagem.service";
|
|
11
|
+
import * as i4 from "@angular/common";
|
|
12
|
+
import * as i5 from "@angular/forms";
|
|
13
|
+
import * as i6 from "@angular/material/icon";
|
|
14
|
+
import * as i7 from "@angular/material/button";
|
|
15
|
+
import * as i8 from "../../unb-mensagem/unb-mensagem.component";
|
|
16
|
+
import * as i9 from "@angular/material/form-field";
|
|
17
|
+
import * as i10 from "@angular/material/input";
|
|
18
|
+
import * as i11 from "@angular/material/progress-spinner";
|
|
19
|
+
import * as i12 from "@angular/material/radio";
|
|
17
20
|
export class UnbPessoaPesquisarComponent {
|
|
18
|
-
constructor(pessoaService, snackBar) {
|
|
21
|
+
constructor(pessoaService, snackBar, alertService) {
|
|
19
22
|
this.pessoaService = pessoaService;
|
|
20
23
|
this.snackBar = snackBar;
|
|
24
|
+
this.alertService = alertService;
|
|
21
25
|
this.isLoading = false;
|
|
22
|
-
|
|
26
|
+
// Configuração da API. Exemplo SGI.unb.br/pessoa-api
|
|
27
|
+
this.backendURL = "";
|
|
23
28
|
this.pesquisarPorCPF = true;
|
|
24
29
|
this.pesquisarPorCNPJ = true;
|
|
25
30
|
this.pesquisarPorEstrangeiro = true;
|
|
26
31
|
this.campoPesquisaMaxWidth = '400px';
|
|
27
32
|
this.pessoaEmitted = new EventEmitter();
|
|
33
|
+
this.isLoadingChange = new EventEmitter();
|
|
28
34
|
this.pessoa = new UnbPessoaModel();
|
|
29
35
|
this.mostrarPesquisa = true;
|
|
30
36
|
this.limparAposPesquisa = false; // indica se deve limpar o cpf apos pesquisar
|
|
31
37
|
this.label = "Digite o CPF/CNPJ ou Passaporte"; // eh o que mostra no topo do componente
|
|
32
38
|
this.placeholder = ""; // eh o que mostra como placeholder topo do componente
|
|
33
39
|
this.hint = ""; // dica que aparece debaixo do campo
|
|
34
|
-
// usado pra saber se mostra ou nao o botao de incluir pessoa
|
|
35
40
|
this.pessoaEncontrado = false;
|
|
36
41
|
this.listaTipoEndereco = [];
|
|
37
42
|
this.listaTipoTelefone = [];
|
|
38
43
|
this.listaTipoEmail = [];
|
|
44
|
+
this.idMensagemService = "UnbPessoaPesquisar";
|
|
39
45
|
}
|
|
40
46
|
ngOnInit() {
|
|
41
|
-
if (this.
|
|
42
|
-
this.apiPessoaConfig.url = this.apiPessoaConfig.url.slice(0, -1);
|
|
43
|
-
}
|
|
44
|
-
if (this.apiPessoaConfig.url == "") {
|
|
47
|
+
if (this.backendURL == "") {
|
|
45
48
|
this.handleErrorPrintConsole("[UnbPessoaPesquisarComponent] ERROR: apiPessoaConfig.url está null. Insira o parâmetro (apiPessoaConfig) com o valor válido!");
|
|
46
49
|
return;
|
|
47
50
|
}
|
|
48
|
-
|
|
49
|
-
this.
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
// se chegar com barra no final, eu retiro. Pra ficar no padrao
|
|
53
|
-
if (this.apiPessoaConfig.url.endsWith('/')) {
|
|
54
|
-
this.apiPessoaConfig.url = this.apiPessoaConfig.url.slice(0, -1);
|
|
51
|
+
else {
|
|
52
|
+
this.pessoaService.setBackendUrl(this.backendURL);
|
|
55
53
|
}
|
|
56
|
-
// inicializa o serviço com a configuração da API
|
|
57
|
-
this.pessoaService.setApiConfig(this.apiPessoaConfig);
|
|
58
54
|
forkJoin({
|
|
59
55
|
tiposEnd: this.pessoaService.getTipoEndereco(),
|
|
60
56
|
tiposTel: this.pessoaService.getTipoTelefone(),
|
|
@@ -103,10 +99,24 @@ export class UnbPessoaPesquisarComponent {
|
|
|
103
99
|
this.pessoa.tipoPessoa = this.defaultTipoPessoa;
|
|
104
100
|
}
|
|
105
101
|
}
|
|
102
|
+
onTipoPessoaChange() {
|
|
103
|
+
// Cria uma nova pessoa limpa com o tipo selecionado
|
|
104
|
+
const novaPessoa = new UnbPessoaModel();
|
|
105
|
+
novaPessoa.tipoPessoa = this.pessoa.tipoPessoa;
|
|
106
|
+
// Inicializa arrays vazios
|
|
107
|
+
novaPessoa.telefones = [];
|
|
108
|
+
novaPessoa.enderecos = [];
|
|
109
|
+
novaPessoa.emails = [];
|
|
110
|
+
// Substitui a pessoa atual
|
|
111
|
+
this.pessoa = novaPessoa;
|
|
112
|
+
// Emite a nova pessoa limpa para o componente pai (form)
|
|
113
|
+
this.pessoaEmitted.emit(this.pessoa);
|
|
114
|
+
}
|
|
106
115
|
pesquisar() {
|
|
107
116
|
if (this.validar() == false)
|
|
108
117
|
return;
|
|
109
118
|
this.isLoading = true;
|
|
119
|
+
this.isLoadingChange.emit(true);
|
|
110
120
|
let result;
|
|
111
121
|
if (this.pessoa.tipoPessoa == TipoPessoaEnum.FISICA) {
|
|
112
122
|
let cpf = this.pessoa.cpf.match(/\d/g)?.join(""); // remove caracteres
|
|
@@ -127,12 +137,8 @@ export class UnbPessoaPesquisarComponent {
|
|
|
127
137
|
}
|
|
128
138
|
}
|
|
129
139
|
validar() {
|
|
130
|
-
if (this.
|
|
131
|
-
this.handleErrorPrintConsole("[UnbPessoaPesquisarComponent] ERROR:
|
|
132
|
-
return false;
|
|
133
|
-
}
|
|
134
|
-
if (this.apiPessoaConfig.token == "") {
|
|
135
|
-
this.handleErrorPrintConsole("[UnbPessoaPesquisarComponent] ERROR: apiPessoaConfig.token está null. Insira o parâmetro (apiPessoaConfig) com o valor do token da sua aplicação");
|
|
140
|
+
if (this.backendURL == "") {
|
|
141
|
+
this.handleErrorPrintConsole("[UnbPessoaPesquisarComponent] ERROR: backendURL.url está null. Insira o parâmetro (backendURL) com o valor da URL do seu Backend!");
|
|
136
142
|
return false;
|
|
137
143
|
}
|
|
138
144
|
if (this.pessoa.tipoPessoa == TipoPessoaEnum.FISICA) {
|
|
@@ -170,6 +176,7 @@ export class UnbPessoaPesquisarComponent {
|
|
|
170
176
|
// Em unb-pessoa-pesquisar.component.ts
|
|
171
177
|
hadleResult(resultado) {
|
|
172
178
|
this.isLoading = false;
|
|
179
|
+
this.isLoadingChange.emit(false);
|
|
173
180
|
if (resultado) {
|
|
174
181
|
resultado.tipoPessoa = this.pessoa.tipoPessoa; // o backend nao retorna o tipo pessoa. entao tenho que atribuir antes
|
|
175
182
|
this.pessoa = resultado;
|
|
@@ -253,6 +260,8 @@ export class UnbPessoaPesquisarComponent {
|
|
|
253
260
|
else if (this.pessoa.tipoPessoa == TipoPessoaEnum.JURIDICA) {
|
|
254
261
|
this.pessoa.cnpj = UnbUtils.formataCnpj(resultado.cnpj);
|
|
255
262
|
}
|
|
263
|
+
else if (this.pessoa.tipoPessoa == TipoPessoaEnum.ESTRANGEIRA) {
|
|
264
|
+
}
|
|
256
265
|
}
|
|
257
266
|
else {
|
|
258
267
|
// se chegar aki eh pq nao encontrou... (lógica que já existe)
|
|
@@ -309,10 +318,32 @@ export class UnbPessoaPesquisarComponent {
|
|
|
309
318
|
return null; // Formato inválido
|
|
310
319
|
}
|
|
311
320
|
handleError(erro) {
|
|
312
|
-
this.openSnackBar(erro);
|
|
313
321
|
this.isLoading = false;
|
|
314
|
-
|
|
322
|
+
this.isLoadingChange.emit(false);
|
|
315
323
|
this.pessoaEncontrado = false;
|
|
324
|
+
let erroTratado;
|
|
325
|
+
// --- ADAPTER: Converte string para o Objeto Padrão ---
|
|
326
|
+
if (typeof erro === 'string') {
|
|
327
|
+
erroTratado = {
|
|
328
|
+
status: 400, // Erro de validação local geralmente é 400
|
|
329
|
+
mensagemSimples: erro,
|
|
330
|
+
mensagemHtml: `<strong>${erro}</strong>`
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
// Se já veio do Service (ou é um objeto manual), usa direto
|
|
335
|
+
erroTratado = erro;
|
|
336
|
+
}
|
|
337
|
+
// --- LÓGICA DE EXIBIÇÃO ---
|
|
338
|
+
// 1. SnackBar (Mensagem curta)
|
|
339
|
+
if (erroTratado.mensagemSimples) {
|
|
340
|
+
this.openSnackBar(erroTratado.mensagemSimples);
|
|
341
|
+
}
|
|
342
|
+
// 2. Componente de Mensagem (Mensagem HTML)
|
|
343
|
+
if (this.alertService && erroTratado.mensagemHtml) {
|
|
344
|
+
// Se você tiver a variável idMensagemService definida na classe:
|
|
345
|
+
this.alertService.showMessage(erroTratado.mensagemHtml, UnbTipoMensagemEnum.DANGER, this.idMensagemService);
|
|
346
|
+
}
|
|
316
347
|
}
|
|
317
348
|
handleErrorPrintConsole(erro) {
|
|
318
349
|
console.log(erro);
|
|
@@ -326,13 +357,40 @@ export class UnbPessoaPesquisarComponent {
|
|
|
326
357
|
tipoPessoaEnum() {
|
|
327
358
|
return TipoPessoaEnum;
|
|
328
359
|
}
|
|
329
|
-
|
|
330
|
-
|
|
360
|
+
/**
|
|
361
|
+
* Formata o CPF enquanto o usuário digita
|
|
362
|
+
*/
|
|
363
|
+
formatarCpf(event) {
|
|
364
|
+
let valor = event.target.value.replace(/\D/g, ''); // Remove tudo que não é dígito
|
|
365
|
+
if (valor.length <= 11) {
|
|
366
|
+
// Aplica máscara: 000.000.000-00
|
|
367
|
+
valor = valor.replace(/(\d{3})(\d)/, '$1.$2');
|
|
368
|
+
valor = valor.replace(/(\d{3})(\d)/, '$1.$2');
|
|
369
|
+
valor = valor.replace(/(\d{3})(\d{1,2})$/, '$1-$2');
|
|
370
|
+
this.pessoa.cpf = valor;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Formata o CNPJ enquanto o usuário digita
|
|
375
|
+
*/
|
|
376
|
+
formatarCnpj(event) {
|
|
377
|
+
let valor = event.target.value.replace(/\D/g, ''); // Remove tudo que não é dígito
|
|
378
|
+
if (valor.length <= 14) {
|
|
379
|
+
// Aplica máscara: 00.000.000/0000-00
|
|
380
|
+
valor = valor.replace(/(\d{2})(\d)/, '$1.$2');
|
|
381
|
+
valor = valor.replace(/(\d{3})(\d)/, '$1.$2');
|
|
382
|
+
valor = valor.replace(/(\d{3})(\d)/, '$1/$2');
|
|
383
|
+
valor = valor.replace(/(\d{4})(\d{1,2})$/, '$1-$2');
|
|
384
|
+
this.pessoa.cnpj = valor;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaPesquisarComponent, deps: [{ token: i1.UnBPessoaService }, { token: i2.MatSnackBar }, { token: i3.UnbMensagemService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
388
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: UnbPessoaPesquisarComponent, selector: "lib-unb-pessoa-pesquisar", inputs: { backendURL: "backendURL", pesquisarPorCPF: "pesquisarPorCPF", pesquisarPorCNPJ: "pesquisarPorCNPJ", pesquisarPorEstrangeiro: "pesquisarPorEstrangeiro", defaultTipoPessoa: "defaultTipoPessoa", campoPesquisaMaxWidth: "campoPesquisaMaxWidth", pessoa: "pessoa", mostrarPesquisa: "mostrarPesquisa", limparAposPesquisa: "limparAposPesquisa", label: "label", placeholder: "placeholder", hint: "hint" }, outputs: { pessoaEmitted: "pessoaEmitted", isLoadingChange: "isLoadingChange" }, ngImport: i0, template: "<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" [ngStyle]=\"{'--tamanho-maximo': campoPesquisaMaxWidth}\"\r\n (ngSubmit)=\"pesquisar()\">\r\n <div class=\"mensagem-container\" style=\"width: 100%;\">\r\n <unb-mensagem [identificador]=\"idMensagemService\" class=\"mensagem-form\"></unb-mensagem>\r\n </div>\r\n\r\n <div class=\"form-wrapper\">\r\n <div *ngIf=\"mostrarTipoPessoa\" class=\"radio-container\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\"\r\n name=\"tipoPessoa\" (change)=\"onTipoPessoaChange()\">\r\n <mat-radio-button *ngIf=\"pesquisarPorCPF\" value=\"{{ tipoPessoaEnum().FISICA}}\">Pessoa F\u00EDsica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorCNPJ\" value=\"{{tipoPessoaEnum().JURIDICA}}\"> Pessoa\r\n Jur\u00EDdica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorEstrangeiro\"\r\n value=\"{{tipoPessoaEnum().ESTRANGEIRA}}\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"break\"></div>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" required={{true}}\r\n (input)=\"formatarCpf($event)\" maxlength=\"14\" placeholder=\"000.000.000-00\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" [disabled]=\"isLoading\"\r\n (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\" class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\" class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" required=\"true\"\r\n (input)=\"formatarCnpj($event)\" maxlength=\"18\" placeholder=\"00.000.000/0000-00\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\" class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [".pesquisa-container{display:flex;flex-direction:column;align-items:flex-start}.form-wrapper{display:flex;flex-direction:column;width:100%;max-width:var(--tamanho-maximo);gap:5px}.mensagem-form{display:block;width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.UnbMensagemComponent, selector: "unb-mensagem", inputs: ["mensagem", "tipo", "identificador"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatLabel, selector: "mat-label" }, { kind: "directive", type: i9.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i12.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i12.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }] }); }
|
|
331
389
|
}
|
|
332
390
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaPesquisarComponent, decorators: [{
|
|
333
391
|
type: Component,
|
|
334
|
-
args: [{ selector: 'lib-unb-pessoa-pesquisar', standalone: false, template: "<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" [ngStyle]=\"{'--tamanho-maximo': campoPesquisaMaxWidth}\"
|
|
335
|
-
}], ctorParameters: () => [{ type: i1.UnBPessoaService }, { type: i2.MatSnackBar }], propDecorators: {
|
|
392
|
+
args: [{ selector: 'lib-unb-pessoa-pesquisar', standalone: false, template: "<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" [ngStyle]=\"{'--tamanho-maximo': campoPesquisaMaxWidth}\"\r\n (ngSubmit)=\"pesquisar()\">\r\n <div class=\"mensagem-container\" style=\"width: 100%;\">\r\n <unb-mensagem [identificador]=\"idMensagemService\" class=\"mensagem-form\"></unb-mensagem>\r\n </div>\r\n\r\n <div class=\"form-wrapper\">\r\n <div *ngIf=\"mostrarTipoPessoa\" class=\"radio-container\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\"\r\n name=\"tipoPessoa\" (change)=\"onTipoPessoaChange()\">\r\n <mat-radio-button *ngIf=\"pesquisarPorCPF\" value=\"{{ tipoPessoaEnum().FISICA}}\">Pessoa F\u00EDsica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorCNPJ\" value=\"{{tipoPessoaEnum().JURIDICA}}\"> Pessoa\r\n Jur\u00EDdica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorEstrangeiro\"\r\n value=\"{{tipoPessoaEnum().ESTRANGEIRA}}\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"break\"></div>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" required={{true}}\r\n (input)=\"formatarCpf($event)\" maxlength=\"14\" placeholder=\"000.000.000-00\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" [disabled]=\"isLoading\"\r\n (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\" class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\" class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" required=\"true\"\r\n (input)=\"formatarCnpj($event)\" maxlength=\"18\" placeholder=\"00.000.000/0000-00\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\" class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [".pesquisa-container{display:flex;flex-direction:column;align-items:flex-start}.form-wrapper{display:flex;flex-direction:column;width:100%;max-width:var(--tamanho-maximo);gap:5px}.mensagem-form{display:block;width:100%}\n"] }]
|
|
393
|
+
}], ctorParameters: () => [{ type: i1.UnBPessoaService }, { type: i2.MatSnackBar }, { type: i3.UnbMensagemService }], propDecorators: { backendURL: [{
|
|
336
394
|
type: Input
|
|
337
395
|
}], pesquisarPorCPF: [{
|
|
338
396
|
type: Input
|
|
@@ -346,6 +404,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
346
404
|
type: Input
|
|
347
405
|
}], pessoaEmitted: [{
|
|
348
406
|
type: Output
|
|
407
|
+
}], isLoadingChange: [{
|
|
408
|
+
type: Output
|
|
349
409
|
}], pessoa: [{
|
|
350
410
|
type: Input
|
|
351
411
|
}], mostrarPesquisa: [{
|
|
@@ -359,4 +419,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
359
419
|
}], hint: [{
|
|
360
420
|
type: Input
|
|
361
421
|
}] } });
|
|
362
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLXBlc3F1aXNhci91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmItbGliLWNvbXBvbmVudHMvc3JjL2xpYi91bmItcGVzc29hL3VuYi1wZXNzb2EtcGVzcXVpc2FyL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7O0FBUWhDLE1BQU0sT0FBTywyQkFBMkI7SUFrQnRDLFlBQW9CLGFBQStCLEVBQVUsUUFBcUI7UUFBOUQsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQWpCbEYsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVULG9CQUFlLEdBQW1DLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDekUsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLDRCQUF1QixHQUFHLElBQUksQ0FBQztRQUUvQiwwQkFBcUIs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aUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUVFLE1BQU07c0JBQWQsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgVW5iVXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy91bmItdXRpbHMnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FNb2RlbCB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EubW9kZWwnO1xyXG5pbXBvcnQgeyBVbkJQZXNzb2FTZXJ2aWNlIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGlwb1Blc3NvYUVudW0gfSBmcm9tICcuLi91bmItdGlwby1wZXNzb2EuZW51bSc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVuZGVyZWNvVGlwbyB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZW5kZXJlY28ubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FUZWxlZm9uZVRpcG8gfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLXRlbGVmb25lLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW1haWxUaXBvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbWFpbC5tb2RlbCc7XHJcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi11bmItcGVzc29hLXBlc3F1aXNhcicsXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGFwaVBlc3NvYUNvbmZpZzogeyB1cmw6IHN0cmluZzsgdG9rZW46IHN0cmluZyB9ID0geyB1cmw6ICcnLCB0b2tlbjogJycgfTtcclxuICBASW5wdXQoKSBwZXNxdWlzYXJQb3JDUEYgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHBlc3F1aXNhclBvckNOUEogPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHBlc3F1aXNhclBvckVzdHJhbmdlaXJvID0gdHJ1ZTtcclxuICBASW5wdXQoKSBkZWZhdWx0VGlwb1Blc3NvYSE6IFRpcG9QZXNzb2FFbnVtO1xyXG4gIEBJbnB1dCgpIGNhbXBvUGVzcXVpc2FNYXhXaWR0aDogc3RyaW5nID0gJzQwMHB4JzsgXHJcbiAgQE91dHB1dCgpIHBlc3NvYUVtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFVuYlBlc3NvYU1vZGVsPigpO1xyXG5cclxuICBASW5wdXQoKSBwZXNzb2EgPSBuZXcgVW5iUGVzc29hTW9kZWwoKTtcclxuICBASW5wdXQoKSBtb3N0cmFyUGVzcXVpc2E6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxpbXBhckFwb3NQZXNxdWlzYTogYm9vbGVhbiA9IGZhbHNlOyAgLy8gaW5kaWNhIHNlIGRldmUgbGltcGFyIG8gY3BmIGFwb3MgcGVzcXVpc2FyXHJcbiAgQElucHV0KCkgbGFiZWwgPSBcIkRpZ2l0ZSBvIENQRi9DTlBKIG91IFBhc3NhcG9ydGVcIjsgLy8gZWggbyBxdWUgbW9zdHJhIG5vIHRvcG8gZG8gY29tcG9uZW50ZVxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gXCJcIjsgLy8gZWggbyBxdWUgbW9zdHJhIGNvbW8gcGxhY2Vob2xkZXIgdG9wbyBkbyBjb21wb25lbnRlXHJcbiAgQElucHV0KCkgaGludCA9IFwiXCI7IC8vIGRpY2EgcXVlIGFwYXJlY2UgZGViYWl4byBkbyBjYW1wb1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBlc3NvYVNlcnZpY2U6IFVuQlBlc3NvYVNlcnZpY2UsIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyKSB7IH1cclxuXHJcbiAgLy8gdXNhZG8gcHJhIHNhYmVyIHNlIG1vc3RyYSBvdSBuYW8gbyBib3RhbyBkZSBpbmNsdWlyIHBlc3NvYVxyXG4gIHBlc3NvYUVuY29udHJhZG86IEJvb2xlYW4gfCBudWxsID0gZmFsc2U7XHJcbiAgbW9zdHJhclRpcG9QZXNzb2EhOiBib29sZWFuO1xyXG5cclxuICBsaXN0YVRpcG9FbmRlcmVjbzogVW5iUGVzc29hRW5kZXJlY29UaXBvW10gPSBbXTtcclxuICBsaXN0YVRpcG9UZWxlZm9uZTogVW5iUGVzc29hVGVsZWZvbmVUaXBvW10gPSBbXTtcclxuICBsaXN0YVRpcG9FbWFpbDogVW5iUGVzc29hRW1haWxUaXBvW10gPSBbXTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hcGlQZXNzb2FDb25maWcudXJsLmVuZHNXaXRoKCcvJykpIHtcclxuICAgICAgdGhpcy5hcGlQZXNzb2FDb25maWcudXJsID0gdGhpcy5hcGlQZXNzb2FDb25maWcudXJsLnNsaWNlKDAsIC0xKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hcGlQZXNzb2FDb25maWcudXJsID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBhcGlQZXNzb2FDb25maWcudXJsIGVzdMOhIG51bGwuIEluc2lyYSBvIHBhcsOibWV0cm8gKGFwaVBlc3NvYUNvbmZpZykgY29tIG8gdmFsb3IgdsOhbGlkbyFcIilcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFwaVBlc3NvYUNvbmZpZy50b2tlbiA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3JQcmludENvbnNvbGUoXCJbVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50XSBFUlJPUjogYXBpUGVzc29hQ29uZmlnLnRva2VuIGVzdMOhIG51bGwuIEluc2lyYSBvIHBhcsOibWV0cm8gKGFwaVBlc3NvYUNvbmZpZykgY29tIG8gdmFsb3IgZG8gdG9rZW4gZGEgc3VhIGFwbGljYcOnw6NvXCIpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZSBjaGVnYXIgY29tIGJhcnJhIG5vIGZpbmFsLCBldSByZXRpcm8uIFByYSBmaWNhciBubyBwYWRyYW9cclxuICAgIGlmICh0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwuZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICB0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwgPSB0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwuc2xpY2UoMCwgLTEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGluaWNpYWxpemEgbyBzZXJ2acOnbyBjb20gYSBjb25maWd1cmHDp8OjbyBkYSBBUElcclxuICAgIHRoaXMucGVzc29hU2VydmljZS5zZXRBcGlDb25maWcodGhpcy5hcGlQZXNzb2FDb25maWcpO1xyXG5cclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgdGlwb3NFbmQ6IHRoaXMucGVzc29hU2VydmljZS5nZXRUaXBvRW5kZXJlY28oKSxcclxuICAgICAgdGlwb3NUZWw6IHRoaXMucGVzc29hU2VydmljZS5nZXRUaXBvVGVsZWZvbmUoKSxcclxuICAgICAgdGlwb3NFbWFpbDogdGhpcy5wZXNzb2FTZXJ2aWNlLmdldFRpcG9FbWFpbCgpXHJcbiAgICB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoeyB0aXBvc0VuZCwgdGlwb3NUZWwsIHRpcG9zRW1haWwgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdGFUaXBvRW5kZXJlY28gPSB0aXBvc0VuZDtcclxuICAgICAgICB0aGlzLmxpc3RhVGlwb1RlbGVmb25lID0gdGlwb3NUZWw7XHJcbiAgICAgICAgdGhpcy5saXN0YVRpcG9FbWFpbCA9IHRpcG9zRW1haWw7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkZhbGhhIGFvIGNhcnJlZ2FyIGRhZG9zIGRlIGFwb2lvLiBSZWNhcnJlZ3VlIGEgcMOhZ2luYS5cIik7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm8gbm8gZm9ya0pvaW4gZG8gcGVzcXVpc2FyOlwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcblxyXG5cclxuICAgIC8vIENvbnRhIHF1YW50b3MgZG9zIGlucHV0cyBlc3TDo28gY29tbyB0cnVlXHJcbiAgICBjb25zdCBvcGNvZXNBdGl2YXMgPSBbdGhpcy5wZXNxdWlzYXJQb3JDUEYsIHRoaXMucGVzcXVpc2FyUG9yQ05QSiwgdGhpcy5wZXNxdWlzYXJQb3JFc3RyYW5nZWlyb10uZmlsdGVyKG9wID0+IG9wKS5sZW5ndGg7XHJcbiAgICAvLyBFeGliZSBhIG9wY2FvIGRvIHRpcG8gZGUgcGVzc29hLCBzb21lbnRlIHNlIG1haXMgZGUgdW0gZXN0aXZlciBzZWxlY2lvbmFkb1xyXG4gICAgaWYgKG9wY29lc0F0aXZhcyA+IDEpIHtcclxuICAgICAgdGhpcy5tb3N0cmFyVGlwb1Blc3NvYSA9IG9wY29lc0F0aXZhcyA+IDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBlbnRhbyB0ZW5obyBxdWUgbWFyY2FyIHF1YWwgZm9pIHNlbGVjaW9uYWRhXHJcbiAgICAgIGlmICh0aGlzLnBlc3F1aXNhclBvckNQRikge1xyXG4gICAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSBUaXBvUGVzc29hRW51bS5GSVNJQ0E7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNxdWlzYXJQb3JDTlBKKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8pIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBwZXNxdWlzYXJQb3JDUEYsIHBlc3F1aXNhclBvckNOUEogZSBwZXNxdWlzYXJQb3JFc3RyYW5nZWlybyBlc3TDoSBmYWxzby4gTWFycXVlIHBlbG8gbWVub3MgdW0gY29tbyB0cnVlXCIpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2VsZWNpb25hIG8gcmFkaW8gYnV0dG9uIHBhZHJhb1xyXG4gICAgaWYgKHRoaXMuZGVmYXVsdFRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBICYmIHRoaXMucGVzcXVpc2FyUG9yQ1BGKSB7XHJcbiAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLmRlZmF1bHRUaXBvUGVzc29hO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRUaXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBICYmIHRoaXMucGVzcXVpc2FyUG9yQ05QSikge1xyXG4gICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gdGhpcy5kZWZhdWx0VGlwb1Blc3NvYTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0VGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQSAmJiB0aGlzLnBlc3F1aXNhclBvckVzdHJhbmdlaXJvKSB7XHJcbiAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLmRlZmF1bHRUaXBvUGVzc29hO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGVzcXVpc2FyKCkge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhcigpID09IGZhbHNlKSByZXR1cm47XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgcmVzdWx0O1xyXG4gICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgIGxldCBjcGYgPSB0aGlzLnBlc3NvYS5jcGYubWF0Y2goL1xcZC9nKT8uam9pbihcIlwiKTsgLy8gcmVtb3ZlIGNhcmFjdGVyZXMgXHJcbiAgICAgIHJlc3VsdCA9IHRoaXMucGVzc29hU2VydmljZS5maW5kQnlDcGYoY3BmKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5KVVJJRElDQSkge1xyXG4gICAgICBsZXQgY25waiA9IHRoaXMucGVzc29hLmNucGoubWF0Y2goL1xcZC9nKT8uam9pbihcIlwiKTsgLy8gcmVtb3ZlIGNhcmFjdGVyZXMgXHJcbiAgICAgIHJlc3VsdCA9IHRoaXMucGVzc29hU2VydmljZS5maW5kQnlDbnBqKGNucGopO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBKSB7XHJcbiAgICAgIHJlc3VsdCA9IHRoaXMucGVzc29hU2VydmljZS5maW5kQnlQYXNzYXBvcnRlKHRoaXMucGVzc29hLnBhc3NhcG9ydGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgcmVzdWx0LnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogdGhpcy5oYWRsZVJlc3VsdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgIGVycm9yOiB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcylcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgdmFsaWRhcigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IGFwaVBlc3NvYUNvbmZpZy51cmwgZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYXBpUGVzc29hQ29uZmlnKSBjb20gbyB2YWxvciB2w6FsaWRvIVwiKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXBpUGVzc29hQ29uZmlnLnRva2VuID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBhcGlQZXNzb2FDb25maWcudG9rZW4gZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYXBpUGVzc29hQ29uZmlnKSBjb20gbyB2YWxvciBkbyB0b2tlbiBkYSBzdWEgYXBsaWNhw6fDo29cIilcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkZJU0lDQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuY3BmID09IG51bGwgfHwgKHRoaXMucGVzc29hLmNwZiAhPSBudWxsICYmIHRoaXMucGVzc29hLmNwZiA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJDUEYgw6kgdW0gY2FtcG8gb2JyaWdhdMOzcmlvLlwiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICghVW5iVXRpbHMudmFsaWRhckNQRih0aGlzLnBlc3NvYS5jcGYpKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkRpZ2l0ZSB1bSB2YWxvciB2w6FsaWRvIHBhcmEgbyBDUEZcIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5KVVJJRElDQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuY25waiA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS5jbnBqICE9IG51bGwgJiYgdGhpcy5wZXNzb2EuY25waiA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJDTlBKIMOpIHVtIGNhbXBvIG9icmlnYXTDs3Jpb1wiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICghVW5iVXRpbHMudmFsaWRhckNOUEoodGhpcy5wZXNzb2EuY25waikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiRGlnaXRlIHVtIHZhbG9yIHbDoWxpZG8gcGFyYSBvIENOUEohXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkEpIHtcclxuICAgICAgaWYgKHRoaXMucGVzc29hLnBhc3NhcG9ydGUgPT0gbnVsbCB8fCAodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSAhPSBudWxsICYmIHRoaXMucGVzc29hLnBhc3NhcG9ydGUgPT0gXCJcIikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiUGFzc2Fwb3J0ZSDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJTZWxlY2lvbmUgdW0gdGlwbyBkZSBwZXNzb2EhXCIpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIEVtIHVuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC50c1xyXG4gIGhhZGxlUmVzdWx0KHJlc3VsdGFkbzogVW5iUGVzc29hTW9kZWwpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHJlc3VsdGFkbykge1xyXG4gICAgICByZXN1bHRhZG8udGlwb1Blc3NvYSA9IHRoaXMucGVzc29hLnRpcG9QZXNzb2E7IC8vIG8gYmFja2VuZCBuYW8gcmV0b3JuYSBvIHRpcG8gcGVzc29hLiBlbnRhbyB0ZW5obyBxdWUgYXRyaWJ1aXIgYW50ZXNcclxuICAgICAgdGhpcy5wZXNzb2EgPSByZXN1bHRhZG87XHJcblxyXG4gICAgICAvLyAtLS0gU0XDh8ODTyBERSBMSU1QRVpBIERFIERBRE9TIFBSSU5DSVBBSVMgKFZPQ8OKIErDgSBUSU5IQSkgLS0tXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5zZXhvKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGVzc29hLnNleG8udG9VcHBlckNhc2UoKS50cmltKCkgPT09ICdGRU1JTklOTycpIHtcclxuICAgICAgICAgIHRoaXMucGVzc29hLmNvZGlnb1NleG8gPSAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2Euc2V4by50b1VwcGVyQ2FzZSgpLnRyaW0oKSA9PT0gJ01BU0NVTElOTycpIHtcclxuICAgICAgICAgIHRoaXMucGVzc29hLmNvZGlnb1NleG8gPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGVzc29hLmRhdGFOYXNjaW1lbnRvKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuZGF0YU5hc2NpbWVudG8gPSB0aGlzLnBhcnNlRGF0YSh0aGlzLnBlc3NvYS5kYXRhTmFzY2ltZW50byk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5lc3RhZG9DaXZpbCkge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmNvZGlnb0VzdGFkb0NpdmlsID0gdGhpcy5wYXJzZUNvZGlnbyh0aGlzLnBlc3NvYS5lc3RhZG9DaXZpbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5wYWlzTmFzY2ltZW50bykge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmNvZGlnb1BhaXNOYXNjaW1lbnRvID0gdGhpcy5wYXJzZUNvZGlnbyh0aGlzLnBlc3NvYS5wYWlzTmFzY2ltZW50byk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5lc2NvbGFyaWRhZGUpIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5lc2NvbGFyaWRhZGUgPSB0aGlzLnBhcnNlQ29kaWdvKHRoaXMucGVzc29hLmVzY29sYXJpZGFkZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIDEuIFByb2Nlc3NhIEVuZGVyZcOnb3NcclxuICAgICAgLy8gTyBwYXlsb2FkICdzYWx2YXInIGVzcGVyYTogb3JkZW1FbmRlcmVjbywgdGlwb0VuZGVyZWNvQ29kaWdvLCBwYWlzRW5kZXJlY29Db2RpZ28sIHVmRW5kZXJlY29cclxuICAgICAgLy8gMS4gUHJvY2Vzc2EgRW5kZXJlw6dvc1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuZW5kZXJlY29zICYmIHRoaXMubGlzdGFUaXBvRW5kZXJlY28ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIC0tLSBDT1JSRcOHw4NPOiBBZGljaW9uYWRvICdpJyBhbyBmb3JFYWNoIC0tLVxyXG4gICAgICAgIHRoaXMucGVzc29hLmVuZGVyZWNvcy5mb3JFYWNoKChlbmQsIGkpID0+IHtcclxuICAgICAgICAgIC8vIFRyYWR1eiBvICd0aXBvJyAoc3RyaW5nKSBwYXJhICd0aXBvRW5kZXJlY29Db2RpZ28nIChudW1iZXIpXHJcbiAgICAgICAgICBpZiAoIWVuZC50aXBvRW5kZXJlY29Db2RpZ28gJiYgZW5kLnRpcG8pIHtcclxuICAgICAgICAgICAgY29uc3QgdGlwb0VuY29udHJhZG8gPSB0aGlzLmxpc3RhVGlwb0VuZGVyZWNvLmZpbmQodCA9PiB0LmRlbm9taW5hY2FvPy50b0xvd2VyQ2FzZSgpID09PSBlbmQudGlwbz8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aXBvRW5jb250cmFkbykgZW5kLnRpcG9FbmRlcmVjb0NvZGlnbyA9IHRpcG9FbmNvbnRyYWRvLmNvZGlnbztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIFRyYWR1eiAncGFpcycgKHN0cmluZyAnMjIgLSBCUkFTSUwnKSBwYXJhICdwYWlzRW5kZXJlY29Db2RpZ28nIChudW1iZXIpXHJcbiAgICAgICAgICBpZiAoIWVuZC5wYWlzRW5kZXJlY29Db2RpZ28gJiYgZW5kLnBhaXMpIHtcclxuICAgICAgICAgICAgZW5kLnBhaXNFbmRlcmVjb0NvZGlnbyA9IHRoaXMucGFyc2VDb2RpZ28oZW5kLnBhaXMpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE1hcGVpYSAnb3JkZW0nIC0+ICdvcmRlbUVuZGVyZWNvJyBvdSB1c2EgbyDDrW5kaWNlIChpICsgMSlcclxuICAgICAgICAgIC8vIE8gcGF5bG9hZCBkZSBzYWx2YXIgKG5vIGZvcm0pIGVzcGVyYSAnb3JkZW1FbmRlcmVjbydcclxuICAgICAgICAgIGVuZC5vcmRlbUVuZGVyZWNvID0gZW5kLm9yZGVtRW5kZXJlY28gfHwgZW5kLm9yZGVtIHx8IChpICsgMSk7XHJcblxyXG4gICAgICAgICAgLy8gTWFwZWlhICd1ZicgLT4gJ3VmRW5kZXJlY28nXHJcbiAgICAgICAgICBpZiAoIWVuZC51ZkVuZGVyZWNvICYmIGVuZC51Zikge1xyXG4gICAgICAgICAgICBlbmQudWZFbmRlcmVjbyA9IGVuZC51ZjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gMi4gUHJvY2Vzc2EgVGVsZWZvbmVzXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS50ZWxlZm9uZXMgJiYgdGhpcy5saXN0YVRpcG9UZWxlZm9uZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gLS0tIENPUlJFw4fDg086IEFkaWNpb25hZG8gJ2knIGFvIGZvckVhY2ggLS0tXHJcbiAgICAgICAgdGhpcy5wZXNzb2EudGVsZWZvbmVzLmZvckVhY2goKHRlbCwgaSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0ZWwudGlwb1RlbGVmb25lQ29kaWdvICYmIHRlbC50aXBvKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpcG9FbmNvbnRyYWRvID0gdGhpcy5saXN0YVRpcG9UZWxlZm9uZS5maW5kKHQgPT4gdC5kZW5vbWluYWNhbz8udG9Mb3dlckNhc2UoKSA9PT0gdGVsLnRpcG8/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBpZiAodGlwb0VuY29udHJhZG8pIHRlbC50aXBvVGVsZWZvbmVDb2RpZ28gPSB0aXBvRW5jb250cmFkby5jb2RpZ287XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gLS0tIENPUlJFw4fDg086IEzDs2dpY2EgZGEgT3JkZW0gLS0tXHJcbiAgICAgICAgICAvLyBPIHBheWxvYWQgZGUgc2FsdmFyIChubyBmb3JtKSBsw6ogJ3RlbC5vcmRlbSdcclxuICAgICAgICAgIHRlbC5vcmRlbSA9IHRlbC5vcmRlbSB8fCAoaSArIDEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyAzLiBQcm9jZXNzYSBFbWFpbHNcclxuICAgICAgaWYgKHRoaXMucGVzc29hLmVtYWlscyAmJiB0aGlzLmxpc3RhVGlwb0VtYWlsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyAtLS0gQ09SUkXDh8ODTzogQWRpY2lvbmFkbyAnaScgYW8gZm9yRWFjaCAtLS1cclxuICAgICAgICB0aGlzLnBlc3NvYS5lbWFpbHMuZm9yRWFjaCgoZW1haWwsIGkpID0+IHtcclxuICAgICAgICAgIGlmICghZW1haWwudGlwb0VtYWlsQ29kaWdvICYmIGVtYWlsLnRpcG8pIHtcclxuICAgICAgICAgICAgY29uc3QgdGlwb0VuY29udHJhZG8gPSB0aGlzLmxpc3RhVGlwb0VtYWlsLmZpbmQodCA9PiB0LmRlbm9taW5hY2FvPy50b0xvd2VyQ2FzZSgpID09PSBlbWFpbC50aXBvPy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRpcG9FbmNvbnRyYWRvKSBlbWFpbC50aXBvRW1haWxDb2RpZ28gPSB0aXBvRW5jb250cmFkby5jb2RpZ287XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gLS0tIENPUlJFw4fDg086IEzDs2dpY2EgZGEgT3JkZW0gLS0tXHJcbiAgICAgICAgICAvLyBPIHBheWxvYWQgZGUgc2FsdmFyIChubyBmb3JtKSBsw6ogJ2VtYWlsLm9yZGVtJ1xyXG4gICAgICAgICAgZW1haWwub3JkZW0gPSBlbWFpbC5vcmRlbSB8fCAoaSArIDEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5GSVNJQ0EpIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5jcGYgPSBVbmJVdGlscy5mb3JtYXRhQ3BmKHJlc3VsdGFkby5jcGYpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EpIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5jbnBqID0gVW5iVXRpbHMuZm9ybWF0YUNucGoocmVzdWx0YWRvLmNucGopO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gc2UgY2hlZ2FyIGFraSBlaCBwcSBuYW8gZW5jb250cm91Li4uIChsw7NnaWNhIHF1ZSBqw6EgZXhpc3RlKVxyXG4gICAgICBsZXQgbm92YVBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gICAgICBub3ZhUGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLnBlc3NvYS50aXBvUGVzc29hO1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5GSVNJQ0EpIHtcclxuICAgICAgICBub3ZhUGVzc29hLmNwZiA9IHRoaXMucGVzc29hLmNwZjtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgICAgbm92YVBlc3NvYS5jbnBqID0gdGhpcy5wZXNzb2EuY25wajtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub3ZhUGVzc29hLnBhc3NhcG9ydGUgPSB0aGlzLnBlc3NvYS5wYXNzYXBvcnRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnBlc3NvYSA9IG5vdmFQZXNzb2E7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wZXNzb2FFbWl0dGVkLmVtaXQodGhpcy5wZXNzb2EpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZUNvZGlnbyh2YWxvclN0cmluZzogYW55KTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIHZhbG9yU3RyaW5nID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gdmFsb3JTdHJpbmc7IC8vIErDoSDDqSB1bSBuw7ptZXJvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbG9yU3RyaW5nICE9PSAnc3RyaW5nJyB8fCAhdmFsb3JTdHJpbmcuaW5jbHVkZXMoJyAtICcpKSB7XHJcbiAgICAgIC8vIFRlbnRhIGNvbnZlcnRlciBkaXJldG8sIGNhc28gbyBiYWNrZW5kIG1hbmRlIHPDsyBvIG7Dum1lcm8gY29tbyBzdHJpbmdcclxuICAgICAgY29uc3QgbnVtID0gcGFyc2VJbnQodmFsb3JTdHJpbmcsIDEwKTtcclxuICAgICAgcmV0dXJuIGlzTmFOKG51bSkgPyBudWxsIDogbnVtO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcnRlcyA9IHZhbG9yU3RyaW5nLnNwbGl0KCcgLSAnKTtcclxuICAgIGNvbnN0IGNvZGlnbyA9IHBhcnNlSW50KHBhcnRlc1swXS50cmltKCksIDEwKTtcclxuICAgIHJldHVybiBpc05hTihjb2RpZ28pID8gbnVsbCA6IGNvZGlnbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnRlIHVtYSBzdHJpbmcgbm8gZm9ybWF0byAnZGQvTU0veXl5eScgcGFyYSB1bSBvYmpldG8gRGF0ZS5cclxuICAgKiBSZXRvcm5hIG51bGwgc2UgbyBmb3JtYXRvIGZvciBpbnbDoWxpZG8uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZURhdGEoZGF0YVN0cmluZzogYW55KTogRGF0ZSB8IG51bGwge1xyXG4gICAgaWYgKGRhdGFTdHJpbmcgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIHJldHVybiBkYXRhU3RyaW5nOyAvLyBKw6Egw6kgdW0gb2JqZXRvIERhdGVcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgZGF0YVN0cmluZyAhPT0gJ3N0cmluZycgfHwgIWRhdGFTdHJpbmcuaW5jbHVkZXMoJy8nKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJ0ZXMgPSBkYXRhU3RyaW5nLnNwbGl0KCcvJyk7IC8vIFtkZCwgTU0sIHl5eXldXHJcbiAgICBpZiAocGFydGVzLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICBjb25zdCBkaWEgPSBwYXJzZUludChwYXJ0ZXNbMF0sIDEwKTtcclxuICAgICAgY29uc3QgbWVzID0gcGFyc2VJbnQocGFydGVzWzFdLCAxMCkgLSAxOyAvLyBNw6pzIG5vIEpTIMOpIDAtaW5kZXhhZG9cclxuICAgICAgY29uc3QgYW5vID0gcGFyc2VJbnQocGFydGVzWzJdLCAxMCk7XHJcblxyXG4gICAgICAvLyBWZXJpZmljYSBzZSBhIGRhdGEgw6kgdsOhbGlkYVxyXG4gICAgICBjb25zdCBkYXRhT2JqID0gbmV3IERhdGUoYW5vLCBtZXMsIGRpYSk7XHJcbiAgICAgIGlmIChkYXRhT2JqLmdldEZ1bGxZZWFyKCkgPT09IGFubyAmJiBkYXRhT2JqLmdldE1vbnRoKCkgPT09IG1lcyAmJiBkYXRhT2JqLmdldERhdGUoKSA9PT0gZGlhKSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFPYmo7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsOyAvLyBGb3JtYXRvIGludsOhbGlkb1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXJyb3IoZXJybzogYW55KSB7XHJcbiAgICB0aGlzLm9wZW5TbmFja0JhcihlcnJvKTtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgLy8gc2UgY2hlZ2FyIGFraSwgZW50YW8gbmFvIGVuY29udHJvdSBhIHBlc3NvYS4gTWFzIGRhbW9zIGEgY2hhbmNlIGRlIGluY2x1aXIgcGVzc29hXHJcbiAgICB0aGlzLnBlc3NvYUVuY29udHJhZG8gPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXJyb3JQcmludENvbnNvbGUoZXJybzogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhlcnJvKTtcclxuICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJybyk7XHJcbiAgfVxyXG5cclxuICBvcGVuU25hY2tCYXIobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4obWVzc2FnZSwgJ3gnLCB7XHJcbiAgICAgIGR1cmF0aW9uOiA1MDAwLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0aXBvUGVzc29hRW51bSgpIHtcclxuICAgIHJldHVybiBUaXBvUGVzc29hRW51bTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gI3Blc3NvYUZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cInBlc3F1aXNhLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsnLS10YW1hbmhvLW1heGltbyc6IGNhbXBvUGVzcXVpc2FNYXhXaWR0aH1cIiAobmdTdWJtaXQpPVwicGVzcXVpc2FyKClcIj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS13cmFwcGVyXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJtb3N0cmFyVGlwb1Blc3NvYVwiIGNsYXNzPVwicmFkaW8tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGFyaWEtbGFiZWw9XCJUaXBvIGRlIFBlc3NvYVwiIFsobmdNb2RlbCldPVwicGVzc29hLnRpcG9QZXNzb2FcIiAjdGlwb1Blc3NvYT1cIm5nTW9kZWxcIiBuYW1lPVwidGlwb1Blc3NvYVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwicGVzcXVpc2FyUG9yQ1BGXCIgICAgICAgICAgICB2YWx1ZT1cInt7IHRpcG9QZXNzb2FFbnVtKCkuRklTSUNBfX1cIj5QZXNzb2EgRsOtc2ljYTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdJZj1cInBlc3F1aXNhclBvckNOUEpcIiAgICAgICAgICAgdmFsdWU9XCJ7e3RpcG9QZXNzb2FFbnVtKCkuSlVSSURJQ0F9fVwiPiBQZXNzb2EgSnVyw61kaWNhPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwicGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm9cIiAgICB2YWx1ZT1cInt7dGlwb1Blc3NvYUVudW0oKS5FU1RSQU5HRUlSQX19XCI+RXN0cmFuZ2Vpcm88L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYnJlYWtcIj48L2Rpdj5cclxuICAgICAgXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwZXNzb2EudGlwb1Blc3NvYSA9PT0gdGlwb1Blc3NvYUVudW0oKS5GSVNJQ0FcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+Q1BGPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5jcGZcIiBuYW1lPVwiY3BmXCIgI2NwZj1cIm5nTW9kZWxcIiByZXF1aXJlZD17e3RydWV9fS8+ICAgICAgICBcclxuICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIiAoY2xpY2spPVwicGVzcXVpc2FyKClcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmc7IGVsc2UgbG9hZGluZ0ljb25cIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0ljb24+XHJcbiAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXHJcbiAgICAgICAgICAgICAgICBbZGlhbWV0ZXJdPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3Bpbm5lci1idXR0b25cIj5cclxuICAgICAgICAgICAgICA8L21hdC1wcm9ncmVzcy1zcGlubmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT09IHRpcG9QZXNzb2FFbnVtKCkuRVNUUkFOR0VJUkFcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+UGFzc2Fwb3J0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EucGFzc2Fwb3J0ZVwiIG5hbWU9XCJwYXNzYXBvcnRlXCIgcmVxdWlyZWQ9XCJ0cnVlXCIgLz5cclxuICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIChjbGljayk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZzsgZWxzZSBsb2FkaW5nSWNvblwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nSWNvbj5cclxuICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcclxuICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyMFwiXHJcbiAgICAgICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzcGlubmVyLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBlc3NvYS50aXBvUGVzc29hID09PSB0aXBvUGVzc29hRW51bSgpLkpVUklESUNBXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPkNOUEo8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLmNucGpcIiBuYW1lPVwiY25walwiIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJQZXNxdWlzYXJcIiAoY2xpY2spPVwicGVzcXVpc2FyKClcIj5cclxuICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nOyBlbHNlIGxvYWRpbmdJY29uXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdJY29uPlxyXG4gICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxyXG4gICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjIwXCJcclxuICAgICAgICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCJcclxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNwaW5uZXItYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9mb3JtPiJdfQ==
|
|
422
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLXBlc3F1aXNhci91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmItbGliLWNvbXBvbmVudHMvc3JjL2xpYi91bmItcGVzc29hL3VuYi1wZXNzb2EtcGVzcXVpc2FyL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQXNCLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBUXpELE1BQU0sT0FBTywyQkFBMkI7SUFvQnRDLFlBQW9CLGFBQStCLEVBQVUsUUFBcUIsRUFBVSxZQUFnQztRQUF4RyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBbkI1SCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLHFEQUFxRDtRQUM1QyxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLHFCQUFn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RXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVbmJNZW5zYWdlbVNlcnZpY2UsIFVuYlRpcG9NZW5zYWdlbUVudW0gfSBmcm9tICcuLi8uLi91bmItbWVuc2FnZW0vdW5iLW1lbnNhZ2VtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVbmJVdGlscyB9IGZyb20gJy4uLy4uL3V0aWxzL3VuYi11dGlscyc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVtYWlsVGlwbyB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZW1haWwubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FFbmRlcmVjb1RpcG8gfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLWVuZGVyZWNvLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hVGVsZWZvbmVUaXBvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS10ZWxlZm9uZS5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYU1vZGVsIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVycm9QYWRyYW8sIFVuQlBlc3NvYVNlcnZpY2UgfSBmcm9tICcuLi91bmItcGVzc29hLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaXBvUGVzc29hRW51bSB9IGZyb20gJy4uL3VuYi10aXBvLXBlc3NvYS5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVuYi1wZXNzb2EtcGVzcXVpc2FyJyxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgLy8gQ29uZmlndXJhw6fDo28gZGEgQVBJLiBFeGVtcGxvIFNHSS51bmIuYnIvcGVzc29hLWFwaVxyXG4gIEBJbnB1dCgpIGJhY2tlbmRVUkw6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgcGVzcXVpc2FyUG9yQ1BGID0gdHJ1ZTtcclxuICBASW5wdXQoKSBwZXNxdWlzYXJQb3JDTlBKID0gdHJ1ZTtcclxuICBASW5wdXQoKSBwZXNxdWlzYXJQb3JFc3RyYW5nZWlybyA9IHRydWU7XHJcbiAgQElucHV0KCkgZGVmYXVsdFRpcG9QZXNzb2EhOiBUaXBvUGVzc29hRW51bTtcclxuICBASW5wdXQoKSBjYW1wb1Blc3F1aXNhTWF4V2lkdGg6IHN0cmluZyA9ICc0MDBweCc7XHJcbiAgQE91dHB1dCgpIHBlc3NvYUVtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFVuYlBlc3NvYU1vZGVsPigpO1xyXG4gIEBPdXRwdXQoKSBpc0xvYWRpbmdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIEBJbnB1dCgpIHBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gIEBJbnB1dCgpIG1vc3RyYXJQZXNxdWlzYTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgbGltcGFyQXBvc1Blc3F1aXNhOiBib29sZWFuID0gZmFsc2U7ICAvLyBpbmRpY2Egc2UgZGV2ZSBsaW1wYXIgbyBjcGYgYXBvcyBwZXNxdWlzYXJcclxuICBASW5wdXQoKSBsYWJlbCA9IFwiRGlnaXRlIG8gQ1BGL0NOUEogb3UgUGFzc2Fwb3J0ZVwiOyAvLyBlaCBvIHF1ZSBtb3N0cmEgbm8gdG9wbyBkbyBjb21wb25lbnRlXHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSBcIlwiOyAvLyBlaCBvIHF1ZSBtb3N0cmEgY29tbyBwbGFjZWhvbGRlciB0b3BvIGRvIGNvbXBvbmVudGVcclxuICBASW5wdXQoKSBoaW50ID0gXCJcIjsgLy8gZGljYSBxdWUgYXBhcmVjZSBkZWJhaXhvIGRvIGNhbXBvXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGVzc29hU2VydmljZTogVW5CUGVzc29hU2VydmljZSwgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBVbmJNZW5zYWdlbVNlcnZpY2UpIHsgfVxyXG5cclxuICBwZXNzb2FFbmNvbnRyYWRvOiBCb29sZWFuIHwgbnVsbCA9IGZhbHNlO1xyXG4gIG1vc3RyYXJUaXBvUGVzc29hITogYm9vbGVhbjtcclxuICBsaXN0YVRpcG9FbmRlcmVjbzogVW5iUGVzc29hRW5kZXJlY29UaXBvW10gPSBbXTtcclxuICBsaXN0YVRpcG9UZWxlZm9uZTogVW5iUGVzc29hVGVsZWZvbmVUaXBvW10gPSBbXTtcclxuICBsaXN0YVRpcG9FbWFpbDogVW5iUGVzc29hRW1haWxUaXBvW10gPSBbXTtcclxuXHJcbiAgaWRNZW5zYWdlbVNlcnZpY2UgPSBcIlVuYlBlc3NvYVBlc3F1aXNhclwiO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmJhY2tlbmRVUkwgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IGFwaVBlc3NvYUNvbmZpZy51cmwgZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYXBpUGVzc29hQ29uZmlnKSBjb20gbyB2YWxvciB2w6FsaWRvIVwiKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBlc3NvYVNlcnZpY2Uuc2V0QmFja2VuZFVybCh0aGlzLmJhY2tlbmRVUkwpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgdGlwb3NFbmQ6IHRoaXMucGVzc29hU2VydmljZS5nZXRUaXBvRW5kZXJlY28oKSxcclxuICAgICAgdGlwb3NUZWw6IHRoaXMucGVzc29hU2VydmljZS5nZXRUaXBvVGVsZWZvbmUoKSxcclxuICAgICAgdGlwb3NFbWFpbDogdGhpcy5wZXNzb2FTZXJ2aWNlLmdldFRpcG9FbWFpbCgpXHJcbiAgICB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoeyB0aXBvc0VuZCwgdGlwb3NUZWwsIHRpcG9zRW1haWwgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdGFUaXBvRW5kZXJlY28gPSB0aXBvc0VuZDtcclxuICAgICAgICB0aGlzLmxpc3RhVGlwb1RlbGVmb25lID0gdGlwb3NUZWw7XHJcbiAgICAgICAgdGhpcy5saXN0YVRpcG9FbWFpbCA9IHRpcG9zRW1haWw7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkZhbGhhIGFvIGNhcnJlZ2FyIGRhZG9zIGRlIGFwb2lvLiBSZWNhcnJlZ3VlIGEgcMOhZ2luYS5cIik7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm8gbm8gZm9ya0pvaW4gZG8gcGVzcXVpc2FyOlwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDb250YSBxdWFudG9zIGRvcyBpbnB1dHMgZXN0w6NvIGNvbW8gdHJ1ZVxyXG4gICAgY29uc3Qgb3Bjb2VzQXRpdmFzID0gW3RoaXMucGVzcXVpc2FyUG9yQ1BGLCB0aGlzLnBlc3F1aXNhclBvckNOUEosIHRoaXMucGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm9dLmZpbHRlcihvcCA9PiBvcCkubGVuZ3RoO1xyXG4gICAgLy8gRXhpYmUgYSBvcGNhbyBkbyB0aXBvIGRlIHBlc3NvYSwgc29tZW50ZSBzZSBtYWlzIGRlIHVtIGVzdGl2ZXIgc2VsZWNpb25hZG9cclxuICAgIGlmIChvcGNvZXNBdGl2YXMgPiAxKSB7XHJcbiAgICAgIHRoaXMubW9zdHJhclRpcG9QZXNzb2EgPSBvcGNvZXNBdGl2YXMgPiAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gZW50YW8gdGVuaG8gcXVlIG1hcmNhciBxdWFsIGZvaSBzZWxlY2lvbmFkYVxyXG4gICAgICBpZiAodGhpcy5wZXNxdWlzYXJQb3JDUEYpIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gVGlwb1Blc3NvYUVudW0uRklTSUNBO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGVzcXVpc2FyUG9yQ05QSikge1xyXG4gICAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSBUaXBvUGVzc29hRW51bS5KVVJJRElDQTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3F1aXNhclBvckVzdHJhbmdlaXJvKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IFRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3JQcmludENvbnNvbGUoXCJbVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50XSBFUlJPUjogcGVzcXVpc2FyUG9yQ1BGLCBwZXNxdWlzYXJQb3JDTlBKIGUgcGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8gZXN0w6EgZmFsc28uIE1hcnF1ZSBwZWxvIG1lbm9zIHVtIGNvbW8gdHJ1ZVwiKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHNlbGVjaW9uYSBvIHJhZGlvIGJ1dHRvbiBwYWRyYW9cclxuICAgIGlmICh0aGlzLmRlZmF1bHRUaXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkZJU0lDQSAmJiB0aGlzLnBlc3F1aXNhclBvckNQRikge1xyXG4gICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gdGhpcy5kZWZhdWx0VGlwb1Blc3NvYTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0VGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5KVVJJRElDQSAmJiB0aGlzLnBlc3F1aXNhclBvckNOUEopIHtcclxuICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMuZGVmYXVsdFRpcG9QZXNzb2E7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdFRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkEgJiYgdGhpcy5wZXNxdWlzYXJQb3JFc3RyYW5nZWlybykge1xyXG4gICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gdGhpcy5kZWZhdWx0VGlwb1Blc3NvYTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uVGlwb1Blc3NvYUNoYW5nZSgpIHtcclxuICAgIC8vIENyaWEgdW1hIG5vdmEgcGVzc29hIGxpbXBhIGNvbSBvIHRpcG8gc2VsZWNpb25hZG9cclxuICAgIGNvbnN0IG5vdmFQZXNzb2EgPSBuZXcgVW5iUGVzc29hTW9kZWwoKTtcclxuICAgIG5vdmFQZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMucGVzc29hLnRpcG9QZXNzb2E7XHJcbiAgICBcclxuICAgIC8vIEluaWNpYWxpemEgYXJyYXlzIHZhemlvc1xyXG4gICAgbm92YVBlc3NvYS50ZWxlZm9uZXMgPSBbXTtcclxuICAgIG5vdmFQZXNzb2EuZW5kZXJlY29zID0gW107XHJcbiAgICBub3ZhUGVzc29hLmVtYWlscyA9IFtdO1xyXG4gICAgXHJcbiAgICAvLyBTdWJzdGl0dWkgYSBwZXNzb2EgYXR1YWxcclxuICAgIHRoaXMucGVzc29hID0gbm92YVBlc3NvYTtcclxuICAgXHJcbiAgICAvLyBFbWl0ZSBhIG5vdmEgcGVzc29hIGxpbXBhIHBhcmEgbyBjb21wb25lbnRlIHBhaSAoZm9ybSlcclxuICAgIHRoaXMucGVzc29hRW1pdHRlZC5lbWl0KHRoaXMucGVzc29hKTtcclxuICB9XHJcblxyXG4gIHBlc3F1aXNhcigpIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXIoKSA9PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5pc0xvYWRpbmdDaGFuZ2UuZW1pdCh0cnVlKTtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5GSVNJQ0EpIHtcclxuICAgICAgbGV0IGNwZiA9IHRoaXMucGVzc29hLmNwZi5tYXRjaCgvXFxkL2cpPy5qb2luKFwiXCIpOyAvLyByZW1vdmUgY2FyYWN0ZXJlcyBcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeUNwZihjcGYpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgIGxldCBjbnBqID0gdGhpcy5wZXNzb2EuY25wai5tYXRjaCgvXFxkL2cpPy5qb2luKFwiXCIpOyAvLyByZW1vdmUgY2FyYWN0ZXJlcyBcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeUNucGooY25waik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkEpIHtcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeVBhc3NhcG9ydGUodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICByZXN1bHQuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiB0aGlzLmhhZGxlUmVzdWx0LmJpbmQodGhpcyksXHJcbiAgICAgICAgZXJyb3I6IHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICB2YWxpZGFyKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuYmFja2VuZFVSTCA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3JQcmludENvbnNvbGUoXCJbVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50XSBFUlJPUjogYmFja2VuZFVSTC51cmwgZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYmFja2VuZFVSTCkgY29tIG8gdmFsb3IgZGEgVVJMIGRvIHNldSBCYWNrZW5kIVwiKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5jcGYgPT0gbnVsbCB8fCAodGhpcy5wZXNzb2EuY3BmICE9IG51bGwgJiYgdGhpcy5wZXNzb2EuY3BmID09IFwiXCIpKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkNQRiDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW8uXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKCFVbmJVdGlscy52YWxpZGFyQ1BGKHRoaXMucGVzc29hLmNwZikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiRGlnaXRlIHVtIHZhbG9yIHbDoWxpZG8gcGFyYSBvIENQRlwiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5jbnBqID09IG51bGwgfHwgKHRoaXMucGVzc29hLmNucGogIT0gbnVsbCAmJiB0aGlzLnBlc3NvYS5jbnBqID09IFwiXCIpKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkNOUEogw6kgdW0gY2FtcG8gb2JyaWdhdMOzcmlvXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKCFVbmJVdGlscy52YWxpZGFyQ05QSih0aGlzLnBlc3NvYS5jbnBqKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJEaWdpdGUgdW0gdmFsb3IgdsOhbGlkbyBwYXJhIG8gQ05QSiFcIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS5wYXNzYXBvcnRlICE9IG51bGwgJiYgdGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJQYXNzYXBvcnRlIMOpIHVtIGNhbXBvIG9icmlnYXTDs3Jpb1wiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIlNlbGVjaW9uZSB1bSB0aXBvIGRlIHBlc3NvYSFcIilcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gRW0gdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LnRzXHJcbiAgaGFkbGVSZXN1bHQocmVzdWx0YWRvOiBVbmJQZXNzb2FNb2RlbCkge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNMb2FkaW5nQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG5cclxuICAgIGlmIChyZXN1bHRhZG8pIHtcclxuICAgICAgcmVzdWx0YWRvLnRpcG9QZXNzb2EgPSB0aGlzLnBlc3NvYS50aXBvUGVzc29hOyAvLyBvIGJhY2tlbmQgbmFvIHJldG9ybmEgbyB0aXBvIHBlc3NvYS4gZW50YW8gdGVuaG8gcXVlIGF0cmlidWlyIGFudGVzXHJcbiAgICAgIHRoaXMucGVzc29hID0gcmVzdWx0YWRvO1xyXG5cclxuICAgICAgLy8gLS0tIFNFw4fDg08gREUgTElNUEVaQSBERSBEQURPUyBQUklOQ0lQQUlTIChWT0PDiiBKw4EgVElOSEEpIC0tLVxyXG4gICAgICBpZiAodGhpcy5wZXNzb2Euc2V4bykge1xyXG4gICAgICAgIGlmICh0aGlzLnBlc3NvYS5zZXhvLnRvVXBwZXJDYXNlKCkudHJpbSgpID09PSAnRkVNSU5JTk8nKSB7XHJcbiAgICAgICAgICB0aGlzLnBlc3NvYS5jb2RpZ29TZXhvID0gMjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnNleG8udG9VcHBlckNhc2UoKS50cmltKCkgPT09ICdNQVNDVUxJTk8nKSB7XHJcbiAgICAgICAgICB0aGlzLnBlc3NvYS5jb2RpZ29TZXhvID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5kYXRhTmFzY2ltZW50bykge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmRhdGFOYXNjaW1lbnRvID0gdGhpcy5wYXJzZURhdGEodGhpcy5wZXNzb2EuZGF0YU5hc2NpbWVudG8pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuZXN0YWRvQ2l2aWwpIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5jb2RpZ29Fc3RhZG9DaXZpbCA9IHRoaXMucGFyc2VDb2RpZ28odGhpcy5wZXNzb2EuZXN0YWRvQ2l2aWwpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5wZXNzb2EucGFpc05hc2NpbWVudG8pIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5jb2RpZ29QYWlzTmFzY2ltZW50byA9IHRoaXMucGFyc2VDb2RpZ28odGhpcy5wZXNzb2EucGFpc05hc2NpbWVudG8pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuZXNjb2xhcmlkYWRlKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuZXNjb2xhcmlkYWRlID0gdGhpcy5wYXJzZUNvZGlnbyh0aGlzLnBlc3NvYS5lc2NvbGFyaWRhZGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyAxLiBQcm9jZXNzYSBFbmRlcmXDp29zXHJcbiAgICAgIC8vIE8gcGF5bG9hZCAnc2FsdmFyJyBlc3BlcmE6IG9yZGVtRW5kZXJlY28sIHRpcG9FbmRlcmVjb0NvZGlnbywgcGFpc0VuZGVyZWNvQ29kaWdvLCB1ZkVuZGVyZWNvXHJcbiAgICAgIC8vIDEuIFByb2Nlc3NhIEVuZGVyZcOnb3NcclxuICAgICAgaWYgKHRoaXMucGVzc29hLmVuZGVyZWNvcyAmJiB0aGlzLmxpc3RhVGlwb0VuZGVyZWNvLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyAtLS0gQ09SUkXDh8ODTzogQWRpY2lvbmFkbyAnaScgYW8gZm9yRWFjaCAtLS1cclxuICAgICAgICB0aGlzLnBlc3NvYS5lbmRlcmVjb3MuZm9yRWFjaCgoZW5kLCBpKSA9PiB7XHJcbiAgICAgICAgICAvLyBUcmFkdXogbyAndGlwbycgKHN0cmluZykgcGFyYSAndGlwb0VuZGVyZWNvQ29kaWdvJyAobnVtYmVyKVxyXG4gICAgICAgICAgaWYgKCFlbmQudGlwb0VuZGVyZWNvQ29kaWdvICYmIGVuZC50aXBvKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpcG9FbmNvbnRyYWRvID0gdGhpcy5saXN0YVRpcG9FbmRlcmVjby5maW5kKHQgPT4gdC5kZW5vbWluYWNhbz8udG9Mb3dlckNhc2UoKSA9PT0gZW5kLnRpcG8/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBpZiAodGlwb0VuY29udHJhZG8pIGVuZC50aXBvRW5kZXJlY29Db2RpZ28gPSB0aXBvRW5jb250cmFkby5jb2RpZ287XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBUcmFkdXogJ3BhaXMnIChzdHJpbmcgJzIyIC0gQlJBU0lMJykgcGFyYSAncGFpc0VuZGVyZWNvQ29kaWdvJyAobnVtYmVyKVxyXG4gICAgICAgICAgaWYgKCFlbmQucGFpc0VuZGVyZWNvQ29kaWdvICYmIGVuZC5wYWlzKSB7XHJcbiAgICAgICAgICAgIGVuZC5wYWlzRW5kZXJlY29Db2RpZ28gPSB0aGlzLnBhcnNlQ29kaWdvKGVuZC5wYWlzKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBNYXBlaWEgJ29yZGVtJyAtPiAnb3JkZW1FbmRlcmVjbycgb3UgdXNhIG8gw61uZGljZSAoaSArIDEpXHJcbiAgICAgICAgICAvLyBPIHBheWxvYWQgZGUgc2FsdmFyIChubyBmb3JtKSBlc3BlcmEgJ29yZGVtRW5kZXJlY28nXHJcbiAgICAgICAgICBlbmQub3JkZW1FbmRlcmVjbyA9IGVuZC5vcmRlbUVuZGVyZWNvIHx8IGVuZC5vcmRlbSB8fCAoaSArIDEpO1xyXG5cclxuICAgICAgICAgIC8vIE1hcGVpYSAndWYnIC0+ICd1ZkVuZGVyZWNvJ1xyXG4gICAgICAgICAgaWYgKCFlbmQudWZFbmRlcmVjbyAmJiBlbmQudWYpIHtcclxuICAgICAgICAgICAgZW5kLnVmRW5kZXJlY28gPSBlbmQudWY7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIDIuIFByb2Nlc3NhIFRlbGVmb25lc1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EudGVsZWZvbmVzICYmIHRoaXMubGlzdGFUaXBvVGVsZWZvbmUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIC0tLSBDT1JSRcOHw4NPOiBBZGljaW9uYWRvICdpJyBhbyBmb3JFYWNoIC0tLVxyXG4gICAgICAgIHRoaXMucGVzc29hLnRlbGVmb25lcy5mb3JFYWNoKCh0ZWwsIGkpID0+IHtcclxuICAgICAgICAgIGlmICghdGVsLnRpcG9UZWxlZm9uZUNvZGlnbyAmJiB0ZWwudGlwbykge1xyXG4gICAgICAgICAgICBjb25zdCB0aXBvRW5jb250cmFkbyA9IHRoaXMubGlzdGFUaXBvVGVsZWZvbmUuZmluZCh0ID0+IHQuZGVub21pbmFjYW8/LnRvTG93ZXJDYXNlKCkgPT09IHRlbC50aXBvPy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRpcG9FbmNvbnRyYWRvKSB0ZWwudGlwb1RlbGVmb25lQ29kaWdvID0gdGlwb0VuY29udHJhZG8uY29kaWdvO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIC0tLSBDT1JSRcOHw4NPOiBMw7NnaWNhIGRhIE9yZGVtIC0tLVxyXG4gICAgICAgICAgLy8gTyBwYXlsb2FkIGRlIHNhbHZhciAobm8gZm9ybSkgbMOqICd0ZWwub3JkZW0nXHJcbiAgICAgICAgICB0ZWwub3JkZW0gPSB0ZWwub3JkZW0gfHwgKGkgKyAxKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gMy4gUHJvY2Vzc2EgRW1haWxzXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5lbWFpbHMgJiYgdGhpcy5saXN0YVRpcG9FbWFpbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gLS0tIENPUlJFw4fDg086IEFkaWNpb25hZG8gJ2knIGFvIGZvckVhY2ggLS0tXHJcbiAgICAgICAgdGhpcy5wZXNzb2EuZW1haWxzLmZvckVhY2goKGVtYWlsLCBpKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWVtYWlsLnRpcG9FbWFpbENvZGlnbyAmJiBlbWFpbC50aXBvKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpcG9FbmNvbnRyYWRvID0gdGhpcy5saXN0YVRpcG9FbWFpbC5maW5kKHQgPT4gdC5kZW5vbWluYWNhbz8udG9Mb3dlckNhc2UoKSA9PT0gZW1haWwudGlwbz8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aXBvRW5jb250cmFkbykgZW1haWwudGlwb0VtYWlsQ29kaWdvID0gdGlwb0VuY29udHJhZG8uY29kaWdvO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIC0tLSBDT1JSRcOHw4NPOiBMw7NnaWNhIGRhIE9yZGVtIC0tLVxyXG4gICAgICAgICAgLy8gTyBwYXlsb2FkIGRlIHNhbHZhciAobm8gZm9ybSkgbMOqICdlbWFpbC5vcmRlbSdcclxuICAgICAgICAgIGVtYWlsLm9yZGVtID0gZW1haWwub3JkZW0gfHwgKGkgKyAxKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuY3BmID0gVW5iVXRpbHMuZm9ybWF0YUNwZihyZXN1bHRhZG8uY3BmKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuY25waiA9IFVuYlV0aWxzLmZvcm1hdGFDbnBqKHJlc3VsdGFkby5jbnBqKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBKSB7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHNlIGNoZWdhciBha2kgZWggcHEgbmFvIGVuY29udHJvdS4uLiAobMOzZ2ljYSBxdWUgasOhIGV4aXN0ZSlcclxuICAgICAgbGV0IG5vdmFQZXNzb2EgPSBuZXcgVW5iUGVzc29hTW9kZWwoKTtcclxuICAgICAgbm92YVBlc3NvYS50aXBvUGVzc29hID0gdGhpcy5wZXNzb2EudGlwb1Blc3NvYTtcclxuICAgICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgICAgbm92YVBlc3NvYS5jcGYgPSB0aGlzLnBlc3NvYS5jcGY7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5KVVJJRElDQSkge1xyXG4gICAgICAgIG5vdmFQZXNzb2EuY25waiA9IHRoaXMucGVzc29hLmNucGo7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbm92YVBlc3NvYS5wYXNzYXBvcnRlID0gdGhpcy5wZXNzb2EucGFzc2Fwb3J0ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBlc3NvYSA9IG5vdmFQZXNzb2E7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wZXNzb2FFbWl0dGVkLmVtaXQodGhpcy5wZXNzb2EpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZUNvZGlnbyh2YWxvclN0cmluZzogYW55KTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIHZhbG9yU3RyaW5nID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gdmFsb3JTdHJpbmc7IC8vIErDoSDDqSB1bSBuw7ptZXJvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbG9yU3RyaW5nICE9PSAnc3RyaW5nJyB8fCAhdmFsb3JTdHJpbmcuaW5jbHVkZXMoJyAtICcpKSB7XHJcbiAgICAgIC8vIFRlbnRhIGNvbnZlcnRlciBkaXJldG8sIGNhc28gbyBiYWNrZW5kIG1hbmRlIHPDsyBvIG7Dum1lcm8gY29tbyBzdHJpbmdcclxuICAgICAgY29uc3QgbnVtID0gcGFyc2VJbnQodmFsb3JTdHJpbmcsIDEwKTtcclxuICAgICAgcmV0dXJuIGlzTmFOKG51bSkgPyBudWxsIDogbnVtO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcnRlcyA9IHZhbG9yU3RyaW5nLnNwbGl0KCcgLSAnKTtcclxuICAgIGNvbnN0IGNvZGlnbyA9IHBhcnNlSW50KHBhcnRlc1swXS50cmltKCksIDEwKTtcclxuICAgIHJldHVybiBpc05hTihjb2RpZ28pID8gbnVsbCA6IGNvZGlnbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnRlIHVtYSBzdHJpbmcgbm8gZm9ybWF0byAnZGQvTU0veXl5eScgcGFyYSB1bSBvYmpldG8gRGF0ZS5cclxuICAgKiBSZXRvcm5hIG51bGwgc2UgbyBmb3JtYXRvIGZvciBpbnbDoWxpZG8uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZURhdGEoZGF0YVN0cmluZzogYW55KTogRGF0ZSB8IG51bGwge1xyXG4gICAgaWYgKGRhdGFTdHJpbmcgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIHJldHVybiBkYXRhU3RyaW5nOyAvLyBKw6Egw6kgdW0gb2JqZXRvIERhdGVcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgZGF0YVN0cmluZyAhPT0gJ3N0cmluZycgfHwgIWRhdGFTdHJpbmcuaW5jbHVkZXMoJy8nKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJ0ZXMgPSBkYXRhU3RyaW5nLnNwbGl0KCcvJyk7IC8vIFtkZCwgTU0sIHl5eXldXHJcbiAgICBpZiAocGFydGVzLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICBjb25zdCBkaWEgPSBwYXJzZUludChwYXJ0ZXNbMF0sIDEwKTtcclxuICAgICAgY29uc3QgbWVzID0gcGFyc2VJbnQocGFydGVzWzFdLCAxMCkgLSAxOyAvLyBNw6pzIG5vIEpTIMOpIDAtaW5kZXhhZG9cclxuICAgICAgY29uc3QgYW5vID0gcGFyc2VJbnQocGFydGVzWzJdLCAxMCk7XHJcblxyXG4gICAgICAvLyBWZXJpZmljYSBzZSBhIGRhdGEgw6kgdsOhbGlkYVxyXG4gICAgICBjb25zdCBkYXRhT2JqID0gbmV3IERhdGUoYW5vLCBtZXMsIGRpYSk7XHJcbiAgICAgIGlmIChkYXRhT2JqLmdldEZ1bGxZZWFyKCkgPT09IGFubyAmJiBkYXRhT2JqLmdldE1vbnRoKCkgPT09IG1lcyAmJiBkYXRhT2JqLmdldERhdGUoKSA9PT0gZGlhKSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFPYmo7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsOyAvLyBGb3JtYXRvIGludsOhbGlkb1xyXG4gIH1cclxuXHJcbmhhbmRsZUVycm9yKGVycm86IFVuYlBlc3NvYUVycm9QYWRyYW8gfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzTG9hZGluZ0NoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMucGVzc29hRW5jb250cmFkbyA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBlcnJvVHJhdGFkbzogVW5iUGVzc29hRXJyb1BhZHJhbztcclxuXHJcbiAgICAvLyAtLS0gQURBUFRFUjogQ29udmVydGUgc3RyaW5nIHBhcmEgbyBPYmpldG8gUGFkcsOjbyAtLS1cclxuICAgIGlmICh0eXBlb2YgZXJybyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgZXJyb1RyYXRhZG8gPSB7XHJcbiAgICAgICAgc3RhdHVzOiA0MDAsIC8vIEVycm8gZGUgdmFsaWRhw6fDo28gbG9jYWwgZ2VyYWxtZW50ZSDDqSA0MDBcclxuICAgICAgICBtZW5zYWdlbVNpbXBsZXM6IGVycm8sXHJcbiAgICAgICAgbWVuc2FnZW1IdG1sOiBgPHN0cm9uZz4ke2Vycm99PC9zdHJvbmc+YFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gU2UgasOhIHZlaW8gZG8gU2VydmljZSAob3Ugw6kgdW0gb2JqZXRvIG1hbnVhbCksIHVzYSBkaXJldG9cclxuICAgICAgZXJyb1RyYXRhZG8gPSBlcnJvO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLSBMw5NHSUNBIERFIEVYSUJJw4fDg08gLS0tXHJcblxyXG4gICAgLy8gMS4gU25hY2tCYXIgKE1lbnNhZ2VtIGN1cnRhKVxyXG4gICAgaWYgKGVycm9UcmF0YWRvLm1lbnNhZ2VtU2ltcGxlcykge1xyXG4gICAgICB0aGlzLm9wZW5TbmFja0JhcihlcnJvVHJhdGFkby5tZW5zYWdlbVNpbXBsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDIuIENvbXBvbmVudGUgZGUgTWVuc2FnZW0gKE1lbnNhZ2VtIEhUTUwpXHJcbiAgICBpZiAodGhpcy5hbGVydFNlcnZpY2UgJiYgZXJyb1RyYXRhZG8ubWVuc2FnZW1IdG1sKSB7XHJcbiAgICAgIC8vIFNlIHZvY8OqIHRpdmVyIGEgdmFyacOhdmVsIGlkTWVuc2FnZW1TZXJ2aWNlIGRlZmluaWRhIG5hIGNsYXNzZTpcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd01lc3NhZ2UoZXJyb1RyYXRhZG8ubWVuc2FnZW1IdG1sLCBVbmJUaXBvTWVuc2FnZW1FbnVtLkRBTkdFUiwgdGhpcy5pZE1lbnNhZ2VtU2VydmljZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvclByaW50Q29uc29sZShlcnJvOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGVycm8pO1xyXG4gICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvKTtcclxuICB9XHJcblxyXG4gIG9wZW5TbmFja0JhcihtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCAneCcsIHtcclxuICAgICAgZHVyYXRpb246IDUwMDAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRpcG9QZXNzb2FFbnVtKCkge1xyXG4gICAgcmV0dXJuIFRpcG9QZXNzb2FFbnVtO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0YSBvIENQRiBlbnF1YW50byBvIHVzdcOhcmlvIGRpZ2l0YVxyXG4gICAqL1xyXG4gIGZvcm1hdGFyQ3BmKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCB2YWxvciA9IGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpOyAvLyBSZW1vdmUgdHVkbyBxdWUgbsOjbyDDqSBkw61naXRvXHJcbiAgICBcclxuICAgIGlmICh2YWxvci5sZW5ndGggPD0gMTEpIHtcclxuICAgICAgLy8gQXBsaWNhIG3DoXNjYXJhOiAwMDAuMDAwLjAwMC0wMFxyXG4gICAgICB2YWxvciA9IHZhbG9yLnJlcGxhY2UoLyhcXGR7M30pKFxcZCkvLCAnJDEuJDInKTtcclxuICAgICAgdmFsb3IgPSB2YWxvci5yZXBsYWNlKC8oXFxkezN9KShcXGQpLywgJyQxLiQyJyk7XHJcbiAgICAgIHZhbG9yID0gdmFsb3IucmVwbGFjZSgvKFxcZHszfSkoXFxkezEsMn0pJC8sICckMS0kMicpO1xyXG4gICAgICB0aGlzLnBlc3NvYS5jcGYgPSB2YWxvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm1hdGEgbyBDTlBKIGVucXVhbnRvIG8gdXN1w6FyaW8gZGlnaXRhXHJcbiAgICovXHJcbiAgZm9ybWF0YXJDbnBqKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCB2YWxvciA9IGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpOyAvLyBSZW1vdmUgdHVkbyBxdWUgbsOjbyDDqSBkw61naXRvXHJcbiAgICBcclxuICAgIGlmICh2YWxvci5sZW5ndGggPD0gMTQpIHtcclxuICAgICAgLy8gQXBsaWNhIG3DoXNjYXJhOiAwMC4wMDAuMDAwLzAwMDAtMDBcclxuICAgICAgdmFsb3IgPSB2YWxvci5yZXBsYWNlKC8oXFxkezJ9KShcXGQpLywgJyQxLiQyJyk7XHJcbiAgICAgIHZhbG9yID0gdmFsb3IucmVwbGFjZSgvKFxcZHszfSkoXFxkKS8sICckMS4kMicpO1xyXG4gICAgICB2YWxvciA9IHZhbG9yLnJlcGxhY2UoLyhcXGR7M30pKFxcZCkvLCAnJDEvJDInKTtcclxuICAgICAgdmFsb3IgPSB2YWxvci5yZXBsYWNlKC8oXFxkezR9KShcXGR7MSwyfSkkLywgJyQxLSQyJyk7XHJcbiAgICAgIHRoaXMucGVzc29hLmNucGogPSB2YWxvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8Zm9ybSAjcGVzc29hRm9ybT1cIm5nRm9ybVwiIGNsYXNzPVwicGVzcXVpc2EtY29udGFpbmVyXCIgW25nU3R5bGVdPVwieyctLXRhbWFuaG8tbWF4aW1vJzogY2FtcG9QZXNxdWlzYU1heFdpZHRofVwiXHJcbiAgKG5nU3VibWl0KT1cInBlc3F1aXNhcigpXCI+XHJcbiAgPGRpdiBjbGFzcz1cIm1lbnNhZ2VtLWNvbnRhaW5lclwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XHJcbiAgICA8dW5iLW1lbnNhZ2VtIFtpZGVudGlmaWNhZG9yXT1cImlkTWVuc2FnZW1TZXJ2aWNlXCIgY2xhc3M9XCJtZW5zYWdlbS1mb3JtXCI+PC91bmItbWVuc2FnZW0+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLXdyYXBwZXJcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJtb3N0cmFyVGlwb1Blc3NvYVwiIGNsYXNzPVwicmFkaW8tY29udGFpbmVyXCI+XHJcbiAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgYXJpYS1sYWJlbD1cIlRpcG8gZGUgUGVzc29hXCIgWyhuZ01vZGVsKV09XCJwZXNzb2EudGlwb1Blc3NvYVwiICN0aXBvUGVzc29hPVwibmdNb2RlbFwiXHJcbiAgICAgICAgbmFtZT1cInRpcG9QZXNzb2FcIiAoY2hhbmdlKT1cIm9uVGlwb1Blc3NvYUNoYW5nZSgpXCI+XHJcbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nSWY9XCJwZXNxdWlzYXJQb3JDUEZcIiB2YWx1ZT1cInt7IHRpcG9QZXNzb2FFbnVtKCkuRklTSUNBfX1cIj5QZXNzb2EgRsOtc2ljYTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdJZj1cInBlc3F1aXNhclBvckNOUEpcIiB2YWx1ZT1cInt7dGlwb1Blc3NvYUVudW0oKS5KVVJJRElDQX19XCI+IFBlc3NvYVxyXG4gICAgICAgICAgSnVyw61kaWNhPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwicGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm9cIlxyXG4gICAgICAgICAgdmFsdWU9XCJ7e3RpcG9QZXNzb2FFbnVtKCkuRVNUUkFOR0VJUkF9fVwiPkVzdHJhbmdlaXJvPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJicmVha1wiPjwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwZXNzb2EudGlwb1Blc3NvYSA9PT0gdGlwb1Blc3NvYUVudW0oKS5GSVNJQ0FcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5DUEY8L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5jcGZcIiBuYW1lPVwiY3BmXCIgI2NwZj1cIm5nTW9kZWxcIiByZXF1aXJlZD17e3RydWV9fVxyXG4gICAgICAgICAgKGlucHV0KT1cImZvcm1hdGFyQ3BmKCRldmVudClcIiBtYXhsZW5ndGg9XCIxNFwiIHBsYWNlaG9sZGVyPVwiMDAwLjAwMC4wMDAtMDBcIiAvPlxyXG4gICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInBlc3F1aXNhcigpXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZzsgZWxzZSBsb2FkaW5nSWNvblwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nSWNvbj5cclxuICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyIFtkaWFtZXRlcl09XCIyMFwiIG1vZGU9XCJpbmRldGVybWluYXRlXCIgY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJzcGlubmVyLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8L21hdC1wcm9ncmVzcy1zcGlubmVyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwZXNzb2EudGlwb1Blc3NvYSA9PT0gdGlwb1Blc3NvYUVudW0oKS5FU1RSQU5HRUlSQVwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPlBhc3NhcG9ydGU8L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5wYXNzYXBvcnRlXCIgbmFtZT1cInBhc3NhcG9ydGVcIiByZXF1aXJlZD1cInRydWVcIiAvPlxyXG4gICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIChjbGljayk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmc7IGVsc2UgbG9hZGluZ0ljb25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0ljb24+XHJcbiAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiMjBcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwic3Bpbm5lci1idXR0b25cIj5cclxuICAgICAgICAgICAgPC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT09IHRpcG9QZXNzb2FFbnVtKCkuSlVSSURJQ0FcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5DTlBKPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EuY25walwiIG5hbWU9XCJjbnBqXCIgcmVxdWlyZWQ9XCJ0cnVlXCJcclxuICAgICAgICAgIChpbnB1dCk9XCJmb3JtYXRhckNucGooJGV2ZW50KVwiIG1heGxlbmd0aD1cIjE4XCIgcGxhY2Vob2xkZXI9XCIwMC4wMDAuMDAwLzAwMDAtMDBcIiAvPlxyXG4gICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIChjbGljayk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmc7IGVsc2UgbG9hZGluZ0ljb25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0ljb24+XHJcbiAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiMjBcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwic3Bpbm5lci1idXR0b25cIj5cclxuICAgICAgICAgICAgPC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPiJdfQ==
|