@stiunb/unb-lib-components 18.0.28 → 18.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/services/unb-auth.service.mjs +4 -4
- package/esm2022/lib/unb-mensagem/unb-mensagem.component.mjs +4 -4
- package/esm2022/lib/unb-mensagem/unb-mensagem.module.mjs +5 -5
- package/esm2022/lib/unb-mensagem/unb-mensagem.service.mjs +4 -4
- package/esm2022/lib/unb-nav-bar/unb-nav-bar.component.mjs +4 -4
- package/esm2022/lib/unb-nav-bar/unb-nav-bar.module.mjs +5 -5
- package/esm2022/lib/unb-pessoa/unb-pessoa-crud/unb-pessoa-crud.component.mjs +100 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-crud-modal/unb-pessoa-crud-modal.component.mjs +144 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.mjs +4 -4
- 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 +24 -7
- 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 +54 -178
- package/esm2022/lib/unb-pessoa/unb-pessoa-form-dialog/unb-pessoa-form-dialog.component.mjs +60 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-config.model.mjs +35 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.mjs +32 -191
- package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.mjs +4 -4
- package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.mjs +4 -4
- package/esm2022/lib/unb-pessoa/unb-pessoa.module.mjs +61 -11
- package/esm2022/lib/unb-pessoa/unb-pessoa.service.mjs +278 -26
- package/esm2022/lib/unb-usuario/oidc-decoded-token.mjs +1 -1
- package/esm2022/lib/unb-usuario/oidc-user-data.mjs +1 -1
- package/esm2022/lib/unb-usuario/unb-usuario.component.mjs +4 -4
- package/esm2022/lib/unb-usuario/unb-usuario.module.mjs +5 -5
- package/esm2022/public-api.mjs +6 -2
- package/fesm2022/stiunb-unb-lib-components.mjs +1102 -767
- package/fesm2022/stiunb-unb-lib-components.mjs.map +1 -1
- package/lib/unb-pessoa/unb-pessoa-crud/unb-pessoa-crud.component.d.ts +33 -0
- package/lib/unb-pessoa/unb-pessoa-crud-modal/unb-pessoa-crud-modal.component.d.ts +39 -0
- package/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.d.ts +13 -29
- package/lib/unb-pessoa/unb-pessoa-form-dialog/unb-pessoa-form-dialog.component.d.ts +21 -0
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-config.model.d.ts +26 -0
- package/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.d.ts +3 -23
- package/lib/unb-pessoa/unb-pessoa.module.d.ts +51 -32
- package/lib/unb-pessoa/unb-pessoa.service.d.ts +23 -3
- package/package.json +1 -1
- package/public-api.d.ts +5 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { HttpHeaders, HttpParams } from '@angular/common/http';
|
|
2
2
|
import { Injectable } from '@angular/core';
|
|
3
3
|
import { BehaviorSubject, catchError, map, of, throwError } from 'rxjs';
|
|
4
|
+
import { UnbPessoaModel } from './unb-pessoa-models/unb-pessoa.model';
|
|
4
5
|
import { UnbTipoPessoaEnum } from './unb-tipo-pessoa.enum';
|
|
6
|
+
import { UnbUtils } from '../utils/unb-utils';
|
|
5
7
|
import * as i0 from "@angular/core";
|
|
6
8
|
import * as i1 from "@angular/common/http";
|
|
7
9
|
export class UnBPessoaService {
|
|
@@ -11,6 +13,12 @@ export class UnBPessoaService {
|
|
|
11
13
|
this.backendUrlSubject = new BehaviorSubject('');
|
|
12
14
|
// Exposta como Observable (caso algum componente queira se inscrever)
|
|
13
15
|
this.backendUrl$ = this.backendUrlSubject.asObservable();
|
|
16
|
+
// pra facilitar o debug, pode já passar o token. Mas isso nao pode estar na producao pq vai expor o token pro usuario no front
|
|
17
|
+
this.token = '';
|
|
18
|
+
// Cache das listas de tipos (para normalização de endereço, telefone, email)
|
|
19
|
+
this.tipoEnderecoCache = null;
|
|
20
|
+
this.tipoTelefoneCache = null;
|
|
21
|
+
this.tipoEmailCache = null;
|
|
14
22
|
// -------------------------------------------------------------------
|
|
15
23
|
// HANDLE ERROR PADRONIZADO
|
|
16
24
|
// -------------------------------------------------------------------
|
|
@@ -88,43 +96,50 @@ export class UnBPessoaService {
|
|
|
88
96
|
// Setter agora recebe string direta
|
|
89
97
|
setBackendUrl(url) {
|
|
90
98
|
// Tratamento remove barra no final para padronizar
|
|
91
|
-
if (url.endsWith('/')) {
|
|
99
|
+
if (url && url.endsWith('/')) {
|
|
92
100
|
url = url.slice(0, -1);
|
|
93
101
|
}
|
|
94
102
|
this.backendUrlSubject.next(url);
|
|
95
103
|
}
|
|
104
|
+
setToken(token) {
|
|
105
|
+
this.token = token;
|
|
106
|
+
}
|
|
96
107
|
// Getter retorna string direta
|
|
97
108
|
getBackendUrl() {
|
|
98
109
|
return this.backendUrlSubject.getValue();
|
|
99
110
|
}
|
|
100
|
-
// Headers padrão
|
|
111
|
+
// Headers padrão com Content-Type e Authorization (se token existir)
|
|
101
112
|
getHeaders() {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
113
|
+
let headers = new HttpHeaders({
|
|
114
|
+
'Content-Type': 'application/json'
|
|
115
|
+
});
|
|
116
|
+
// Se o token estiver preenchido (cenário de debug/dev), adiciona o Authorization
|
|
117
|
+
if (this.token) {
|
|
118
|
+
headers = headers.set('Authorization', `Bearer ${this.token}`);
|
|
119
|
+
}
|
|
120
|
+
// Retorna o objeto no formato esperado pelo HttpClient { headers: ... }
|
|
121
|
+
return { headers };
|
|
107
122
|
}
|
|
108
123
|
// Métodos de busca
|
|
109
124
|
findByCpf(cpf) {
|
|
110
125
|
const url = `${this.getBackendUrl()}/pessoa-api/pessoas/fisicas?cpf=${cpf}`;
|
|
111
|
-
return this.http.get(url, this.getHeaders()).pipe(catchError(this.handleError));
|
|
126
|
+
return this.http.get(url, this.getHeaders()).pipe(map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.FISICA)), catchError(this.handleError));
|
|
112
127
|
}
|
|
113
128
|
findByCnpj(cnpj) {
|
|
114
129
|
const url = `${this.getBackendUrl()}/pessoa-api/pessoas/juridicas?cnpj=${cnpj}`;
|
|
115
|
-
return this.http.get(url, this.getHeaders()).pipe(catchError(this.handleError));
|
|
130
|
+
return this.http.get(url, this.getHeaders()).pipe(map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.JURIDICA)), catchError(this.handleError));
|
|
116
131
|
}
|
|
117
132
|
findByPassaporte(passaporte) {
|
|
118
133
|
const url = `${this.getBackendUrl()}/pessoa-api/pessoas/fisicas?passaporte=${passaporte}`;
|
|
119
|
-
return this.http.get(url, this.getHeaders()).pipe(catchError(this.handleError));
|
|
134
|
+
return this.http.get(url, this.getHeaders()).pipe(map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.ESTRANGEIRA)), catchError(this.handleError));
|
|
120
135
|
}
|
|
121
136
|
findPessoaFisicaByCodigoPessoa(id) {
|
|
122
137
|
const url = `${this.getBackendUrl()}/pessoa-api/pessoas/fisicas?codigoPessoa=${id}`;
|
|
123
|
-
return this.http.get(url, this.getHeaders()).pipe(catchError(this.handleError));
|
|
138
|
+
return this.http.get(url, this.getHeaders()).pipe(map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.FISICA)), catchError(this.handleError));
|
|
124
139
|
}
|
|
125
140
|
findPessoaJuridicaByCodigoPessoa(id) {
|
|
126
141
|
const url = `${this.getBackendUrl()}/pessoa-api/pessoas/juridicas?codigoPessoa=${id}`;
|
|
127
|
-
return this.http.get(url, this.getHeaders()).pipe(catchError(this.handleError));
|
|
142
|
+
return this.http.get(url, this.getHeaders()).pipe(map(res => this.normalizePessoa(res, UnbTipoPessoaEnum.JURIDICA)), catchError(this.handleError));
|
|
128
143
|
}
|
|
129
144
|
findPessoaFisica(filtro, page, size, sort) {
|
|
130
145
|
const url = `${this.getBackendUrl()}/pessoa-api/pessoas/fisicas`;
|
|
@@ -151,7 +166,7 @@ export class UnBPessoaService {
|
|
|
151
166
|
...this.getHeaders() // Tenta espalhar as propriedades se getHeaders retornar { headers: ... }
|
|
152
167
|
};
|
|
153
168
|
return this.http.get(url, options)
|
|
154
|
-
.pipe(catchError(this.handleError));
|
|
169
|
+
.pipe(map(arr => arr.map(item => this.normalizePessoa(item, UnbTipoPessoaEnum.FISICA))), catchError(this.handleError));
|
|
155
170
|
}
|
|
156
171
|
findPessoaJuridica(filtro, page, size, sort) {
|
|
157
172
|
const url = `${this.getBackendUrl()}/pessoa-api/pessoas/juridicas`;
|
|
@@ -182,7 +197,7 @@ export class UnBPessoaService {
|
|
|
182
197
|
...this.getHeaders() // Tenta espalhar as propriedades se getHeaders retornar { headers: ... }
|
|
183
198
|
};
|
|
184
199
|
return this.http.get(url, options)
|
|
185
|
-
.pipe(catchError(this.handleError));
|
|
200
|
+
.pipe(map(arr => arr.map(item => this.normalizePessoa(item, UnbTipoPessoaEnum.JURIDICA))), catchError(this.handleError));
|
|
186
201
|
}
|
|
187
202
|
pesquisarCep(cep) {
|
|
188
203
|
const url = `${this.getBackendUrl()}/pessoa-api/public/busca-cep/servico-1/${cep}`;
|
|
@@ -216,6 +231,18 @@ export class UnBPessoaService {
|
|
|
216
231
|
}
|
|
217
232
|
return of(null);
|
|
218
233
|
}
|
|
234
|
+
// Salvar recebendo diretamente o Model e convertendo internamente para o payload do backend
|
|
235
|
+
salvarPessoa(pessoa) {
|
|
236
|
+
if (!pessoa) {
|
|
237
|
+
return throwError(() => ({
|
|
238
|
+
status: 400,
|
|
239
|
+
mensagemSimples: 'Erro interno: Pessoa inválida (null).',
|
|
240
|
+
mensagemHtml: '<strong>Erro interno:</strong> Objeto pessoa vazio.'
|
|
241
|
+
}));
|
|
242
|
+
}
|
|
243
|
+
const payload = this.convertPessoaToPayload(pessoa);
|
|
244
|
+
return this.salvar(payload, pessoa.tipoPessoa);
|
|
245
|
+
}
|
|
219
246
|
// Salvar Pessoa Física
|
|
220
247
|
savePessoaFisica(pessoa) {
|
|
221
248
|
const url = this.getBackendUrl();
|
|
@@ -279,23 +306,32 @@ export class UnBPessoaService {
|
|
|
279
306
|
denominacao: this.formatarLabel(item) // formata se quiser
|
|
280
307
|
}))), catchError(this.handleError));
|
|
281
308
|
}
|
|
282
|
-
getTipoEmail() {
|
|
283
|
-
return this.http.get(`${this.getBackendUrl()}/pessoa-api/tipos-email/public/listagem`).pipe(map(lista => lista.map((item, index) => ({
|
|
284
|
-
codigo: index, // gera um código numérico sequencial
|
|
285
|
-
denominacao: this.formatarLabel(item) // formata se quiser
|
|
286
|
-
}))), catchError(this.handleError));
|
|
287
|
-
}
|
|
288
309
|
getTipoEndereco() {
|
|
289
310
|
return this.http.get(`${this.getBackendUrl()}/pessoa-api/tipos-endereco/public/listagem`).pipe(map(lista => lista.map((item, index) => ({
|
|
290
311
|
codigo: index, // gera um código numérico sequencial
|
|
291
312
|
denominacao: this.formatarLabel(item) // formata se quiser
|
|
292
|
-
}))),
|
|
313
|
+
}))), map(lista => {
|
|
314
|
+
this.tipoEnderecoCache = lista;
|
|
315
|
+
return lista;
|
|
316
|
+
}), catchError(this.handleError));
|
|
293
317
|
}
|
|
294
318
|
getTipoTelefone() {
|
|
295
319
|
return this.http.get(`${this.getBackendUrl()}/pessoa-api/tipos-telefone/public/listagem`).pipe(map(lista => lista.map((item, index) => ({
|
|
296
320
|
codigo: index, // gera um código numérico sequencial
|
|
297
321
|
denominacao: this.formatarLabel(item) // formata se quiser
|
|
298
|
-
}))),
|
|
322
|
+
}))), map(lista => {
|
|
323
|
+
this.tipoTelefoneCache = lista;
|
|
324
|
+
return lista;
|
|
325
|
+
}), catchError(this.handleError));
|
|
326
|
+
}
|
|
327
|
+
getTipoEmail() {
|
|
328
|
+
return this.http.get(`${this.getBackendUrl()}/pessoa-api/tipos-email/public/listagem`).pipe(map(lista => lista.map((item, index) => ({
|
|
329
|
+
codigo: index, // gera um código numérico sequencial
|
|
330
|
+
denominacao: this.formatarLabel(item) // formata se quiser
|
|
331
|
+
}))), map(lista => {
|
|
332
|
+
this.tipoEmailCache = lista;
|
|
333
|
+
return lista;
|
|
334
|
+
}), catchError(this.handleError));
|
|
299
335
|
}
|
|
300
336
|
formatarLabel(text) {
|
|
301
337
|
return text
|
|
@@ -303,13 +339,229 @@ export class UnBPessoaService {
|
|
|
303
339
|
.replace(/_/g, ' ')
|
|
304
340
|
.replace(/\b\w/g, l => l.toUpperCase());
|
|
305
341
|
}
|
|
306
|
-
|
|
307
|
-
|
|
342
|
+
/**
|
|
343
|
+
* Normaliza o payload retornado pelo backend para `UnbPessoaModel` pronto para UI.
|
|
344
|
+
*/
|
|
345
|
+
normalizePessoa(resultado, tipoForcado) {
|
|
346
|
+
const pessoa = (resultado || new UnbPessoaModel());
|
|
347
|
+
// Define tipoPessoa quando o endpoint não retorna
|
|
348
|
+
if (tipoForcado != null) {
|
|
349
|
+
pessoa.tipoPessoa = tipoForcado;
|
|
350
|
+
}
|
|
351
|
+
// Garante arrays
|
|
352
|
+
pessoa.enderecos = pessoa.enderecos || [];
|
|
353
|
+
pessoa.telefones = pessoa.telefones || [];
|
|
354
|
+
pessoa.emails = pessoa.emails || [];
|
|
355
|
+
// Sexo -> codigoSexo
|
|
356
|
+
if (pessoa.sexo) {
|
|
357
|
+
const sexo = pessoa.sexo.toUpperCase().trim();
|
|
358
|
+
if (sexo === 'FEMININO')
|
|
359
|
+
pessoa.codigoSexo = 2;
|
|
360
|
+
else if (sexo === 'MASCULINO')
|
|
361
|
+
pessoa.codigoSexo = 1;
|
|
362
|
+
}
|
|
363
|
+
// Datas para Date
|
|
364
|
+
pessoa.dataNascimento = this.parseData(pessoa.dataNascimento);
|
|
365
|
+
// Demais datas permanecem como string para compatibilidade com o model
|
|
366
|
+
// Campos com 'codigo - label' -> codigo
|
|
367
|
+
pessoa.codigoEstadoCivil = this.parseCodigo(pessoa.estadoCivil);
|
|
368
|
+
pessoa.codigoPaisNascimento = this.parseCodigo(pessoa.paisNascimento);
|
|
369
|
+
pessoa.escolaridade = this.parseCodigo(pessoa.escolaridade);
|
|
370
|
+
// Endereços: ordem/uf
|
|
371
|
+
pessoa.enderecos.forEach((end, i) => {
|
|
372
|
+
end.ordemEndereco = end.ordemEndereco || end.ordem || (i + 1);
|
|
373
|
+
if (!end.ufEndereco && end.uf)
|
|
374
|
+
end.ufEndereco = end.uf;
|
|
375
|
+
// Mapeia tipo string para tipoEnderecoCodigo usando o cache
|
|
376
|
+
if (!end.tipoEnderecoCodigo && end.tipo && this.tipoEnderecoCache) {
|
|
377
|
+
const tipoEncontrado = this.tipoEnderecoCache.find(t => t.denominacao?.toLowerCase() === String(end.tipo).toLowerCase());
|
|
378
|
+
if (tipoEncontrado)
|
|
379
|
+
end.tipoEnderecoCodigo = tipoEncontrado.codigo;
|
|
380
|
+
}
|
|
381
|
+
// Traduz 'pais' (string '22 - BRASIL') para 'paisEnderecoCodigo' (number)
|
|
382
|
+
if (!end.paisEnderecoCodigo && end.pais) {
|
|
383
|
+
end.paisEnderecoCodigo = this.parseCodigo(end.pais);
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
// Telefones: ordem e tipo
|
|
387
|
+
pessoa.telefones.forEach((tel, i) => {
|
|
388
|
+
tel.ordem = tel.ordem || (i + 1);
|
|
389
|
+
// Mapeia tipo string para tipoTelefoneCodigo usando o cache
|
|
390
|
+
if (!tel.tipoTelefoneCodigo && tel.tipo && this.tipoTelefoneCache) {
|
|
391
|
+
const tipoEncontrado = this.tipoTelefoneCache.find(t => t.denominacao?.toLowerCase() === String(tel.tipo).toLowerCase());
|
|
392
|
+
if (tipoEncontrado)
|
|
393
|
+
tel.tipoTelefoneCodigo = tipoEncontrado.codigo;
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
// Emails: ordem e tipo
|
|
397
|
+
pessoa.emails.forEach((email, i) => {
|
|
398
|
+
email.ordem = email.ordem || (i + 1);
|
|
399
|
+
// Mapeia tipo string para tipoEmailCodigo usando o cache
|
|
400
|
+
if (!email.tipoEmailCodigo && email.tipo && this.tipoEmailCache) {
|
|
401
|
+
const tipoEncontrado = this.tipoEmailCache.find(t => t.denominacao?.toLowerCase() === String(email.tipo).toLowerCase());
|
|
402
|
+
if (tipoEncontrado)
|
|
403
|
+
email.tipoEmailCodigo = tipoEncontrado.codigo;
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
// Formata documento para UI
|
|
407
|
+
if (pessoa.tipoPessoa === UnbTipoPessoaEnum.FISICA && pessoa.cpf) {
|
|
408
|
+
const digits = String(pessoa.cpf).replace(/\D/g, '');
|
|
409
|
+
pessoa.cpf = UnbUtils.formataCpf(digits);
|
|
410
|
+
}
|
|
411
|
+
else if (pessoa.tipoPessoa === UnbTipoPessoaEnum.JURIDICA && pessoa.cnpj) {
|
|
412
|
+
const digits = String(pessoa.cnpj).replace(/\D/g, '');
|
|
413
|
+
pessoa.cnpj = UnbUtils.formataCnpj(digits);
|
|
414
|
+
}
|
|
415
|
+
return pessoa;
|
|
416
|
+
}
|
|
417
|
+
parseCodigo(valor) {
|
|
418
|
+
if (valor == null)
|
|
419
|
+
return null;
|
|
420
|
+
if (typeof valor === 'number')
|
|
421
|
+
return valor;
|
|
422
|
+
if (typeof valor !== 'string')
|
|
423
|
+
return null;
|
|
424
|
+
const sepIndex = valor.indexOf(' - ');
|
|
425
|
+
if (sepIndex === -1) {
|
|
426
|
+
const num = parseInt(valor, 10);
|
|
427
|
+
return isNaN(num) ? null : num;
|
|
428
|
+
}
|
|
429
|
+
const codigo = parseInt(valor.substring(0, sepIndex).trim(), 10);
|
|
430
|
+
return isNaN(codigo) ? null : codigo;
|
|
431
|
+
}
|
|
432
|
+
parseData(dataString) {
|
|
433
|
+
if (!dataString)
|
|
434
|
+
return null;
|
|
435
|
+
if (dataString instanceof Date)
|
|
436
|
+
return dataString;
|
|
437
|
+
if (typeof dataString !== 'string' || !dataString.includes('/'))
|
|
438
|
+
return null;
|
|
439
|
+
const partes = dataString.split('/');
|
|
440
|
+
if (partes.length !== 3)
|
|
441
|
+
return null;
|
|
442
|
+
const dia = parseInt(partes[0], 10);
|
|
443
|
+
const mes = parseInt(partes[1], 10) - 1;
|
|
444
|
+
const ano = parseInt(partes[2], 10);
|
|
445
|
+
const dataObj = new Date(ano, mes, dia);
|
|
446
|
+
if (dataObj.getFullYear() === ano && dataObj.getMonth() === mes && dataObj.getDate() === dia) {
|
|
447
|
+
return dataObj;
|
|
448
|
+
}
|
|
449
|
+
return null;
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Converte uma instância (ou objeto) de UnbPessoaModel para o payload esperado pelo backend.
|
|
453
|
+
*/
|
|
454
|
+
convertPessoaToPayload(pessoa) {
|
|
455
|
+
if (!pessoa)
|
|
456
|
+
return null;
|
|
457
|
+
const enderecosPayload = (pessoa.enderecos || []).map((end) => ({
|
|
458
|
+
ordemEndereco: end.ordemEndereco,
|
|
459
|
+
tipoEnderecoCodigo: end.tipoEnderecoCodigo,
|
|
460
|
+
municipioCodigo: end.municipioCodigo,
|
|
461
|
+
paisEnderecoCodigo: end.paisEnderecoCodigo,
|
|
462
|
+
logradouro: end.logradouro,
|
|
463
|
+
complemento: end.complemento,
|
|
464
|
+
cep: end.cep,
|
|
465
|
+
bairro: end.bairro,
|
|
466
|
+
ufEndereco: end.ufEndereco,
|
|
467
|
+
caixaPostal: end.caixaPostal,
|
|
468
|
+
correspondencia: end.correspondencia
|
|
469
|
+
}));
|
|
470
|
+
const telefonesPayload = (pessoa.telefones || []).map((tel) => ({
|
|
471
|
+
ordemTelefone: tel.ordem,
|
|
472
|
+
tipoTelefoneCodigo: tel.tipoTelefoneCodigo,
|
|
473
|
+
ddi: tel.ddi,
|
|
474
|
+
ddd: tel.ddd,
|
|
475
|
+
numeroTelefone: tel.numero,
|
|
476
|
+
ramal: tel.ramal,
|
|
477
|
+
autorizaSMS: tel.autorizaSMS
|
|
478
|
+
}));
|
|
479
|
+
const emailsPayload = (pessoa.emails || []).map((email) => ({
|
|
480
|
+
tipoEmailCodigo: email.tipoEmailCodigo,
|
|
481
|
+
ordemEmail: email.ordem,
|
|
482
|
+
email: email.email,
|
|
483
|
+
autorizacao: email.autorizacao
|
|
484
|
+
}));
|
|
485
|
+
return {
|
|
486
|
+
idPessoa: pessoa.idPessoa,
|
|
487
|
+
codigoPessoa: pessoa.codigoPessoa,
|
|
488
|
+
nome: pessoa.nome,
|
|
489
|
+
nomeSocial: pessoa.nomeSocial,
|
|
490
|
+
...(pessoa.cpf && { cpf: pessoa.cpf.replace(/\D/g, '') }),
|
|
491
|
+
codigoSexo: pessoa.codigoSexo,
|
|
492
|
+
codigoEstadoCivil: pessoa.codigoEstadoCivil,
|
|
493
|
+
codigoEscolaridade: pessoa.escolaridade,
|
|
494
|
+
nomePai: pessoa.nomePai,
|
|
495
|
+
nomeMae: pessoa.nomeMae,
|
|
496
|
+
dataNascimento: this.formatarDataParaBackend(pessoa.dataNascimento),
|
|
497
|
+
codigoPaisNascimento: pessoa.codigoPaisNascimento,
|
|
498
|
+
ufNascimento: pessoa.ufNascimento,
|
|
499
|
+
naturalidade: pessoa.naturalidade,
|
|
500
|
+
dataChegadaBrasil: this.formatarDataParaBackend(pessoa.dataChegadaBrasil),
|
|
501
|
+
rg: pessoa.rg,
|
|
502
|
+
rgOrgao: pessoa.rgOrgao,
|
|
503
|
+
rgUf: pessoa.rgUf,
|
|
504
|
+
rgDataEmissao: this.formatarDataParaBackend(pessoa.rgDataEmissao),
|
|
505
|
+
numeroTituloEleitor: pessoa.numeroTituloEleitor,
|
|
506
|
+
dataEmissaoTituloEleitor: this.formatarDataParaBackend(pessoa.dataEmissaoTituloEleitor),
|
|
507
|
+
zonaTituloEleitor: pessoa.zonaTituloEleitor,
|
|
508
|
+
secaoTituloEleitor: pessoa.secaoTituloEleitor,
|
|
509
|
+
ufTituloEleitor: pessoa.ufTituloEleitor,
|
|
510
|
+
numeroReservista: pessoa.numeroReservista,
|
|
511
|
+
serieReservista: pessoa.serieReservista,
|
|
512
|
+
orgaoReservista: pessoa.orgaoReservista,
|
|
513
|
+
numeroCarteiraTrabalho: pessoa.numeroCarteiraTrabalho,
|
|
514
|
+
serieCarteiraTrabalho: pessoa.serieCarteiraTrabalho,
|
|
515
|
+
ufCarteiraTrabalho: pessoa.ufCarteiraTrabalho,
|
|
516
|
+
pisPasep: pessoa.pisPasep,
|
|
517
|
+
numeroHabilitacao: pessoa.numeroHabilitacao,
|
|
518
|
+
registroHabilitacao: pessoa.registroHabilitacao,
|
|
519
|
+
dataEmissaoHabilitacao: this.formatarDataParaBackend(pessoa.dataEmissaoHabilitacao),
|
|
520
|
+
dataValidadeHabilitacao: this.formatarDataParaBackend(pessoa.dataValidadeHabilitacao),
|
|
521
|
+
categoriaHabilitacao: pessoa.categoriaHabilitacao,
|
|
522
|
+
deficienciaFisicaHabilitacao: pessoa.deficienciaFisicaHabilitacao,
|
|
523
|
+
primeiraHabilitacao: this.formatarDataParaBackend(pessoa.primeiraHabilitacao),
|
|
524
|
+
passaporte: pessoa.passaporte,
|
|
525
|
+
codigoPaisPassaporte: pessoa.codigoPaisPassaporte,
|
|
526
|
+
...(pessoa.cnpj && { cnpj: pessoa.cnpj.replace(/\D/g, '') }),
|
|
527
|
+
razaoSocial: pessoa.razaoSocial,
|
|
528
|
+
nomeFantasia: pessoa.nomeFantasia,
|
|
529
|
+
sigla: pessoa.sigla,
|
|
530
|
+
paginaWeb: pessoa.paginaWeb,
|
|
531
|
+
autoCadastro: pessoa.autoCadastro,
|
|
532
|
+
enderecos: enderecosPayload,
|
|
533
|
+
telefones: telefonesPayload,
|
|
534
|
+
emails: emailsPayload
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
/**
|
|
538
|
+
* Formata a data no padrão DD/MM/YYYY para o backend.
|
|
539
|
+
*/
|
|
540
|
+
formatarDataParaBackend(data) {
|
|
541
|
+
if (!data)
|
|
542
|
+
return null;
|
|
543
|
+
if (typeof data === 'string' && data.includes('/'))
|
|
544
|
+
return data;
|
|
545
|
+
try {
|
|
546
|
+
const d = new Date(data);
|
|
547
|
+
if (isNaN(d.getTime()))
|
|
548
|
+
return null;
|
|
549
|
+
const dia = String(d.getDate()).padStart(2, '0');
|
|
550
|
+
const mes = String(d.getMonth() + 1).padStart(2, '0');
|
|
551
|
+
const ano = d.getFullYear();
|
|
552
|
+
return `${dia}/${mes}/${ano}`;
|
|
553
|
+
}
|
|
554
|
+
catch {
|
|
555
|
+
return null;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnBPessoaService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
559
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnBPessoaService, providedIn: 'root' }); }
|
|
308
560
|
}
|
|
309
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2
|
|
561
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnBPessoaService, decorators: [{
|
|
310
562
|
type: Injectable,
|
|
311
563
|
args: [{
|
|
312
564
|
providedIn: 'root'
|
|
313
565
|
}]
|
|
314
566
|
}], ctorParameters: () => [{ type: i1.HttpClient }] });
|
|
315
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBT3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFZM0QsTUFBTSxPQUFPLGdCQUFnQjtJQU8zQixZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBTHBDLHFEQUFxRDtRQUM3QyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUM1RCxzRUFBc0U7UUFDdEUsZ0JBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUEyU3BELHNFQUFzRTtRQUN0RSw0QkFBNEI7UUFDNUIsc0VBQXNFO1FBQzlELGdCQUFXLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNuQyxJQUFJLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztZQUNuRSxJQUFJLFlBQVksR0FBRyxnREFBZ0QsQ0FBQztZQUVwRSxxQ0FBcUM7WUFDckMsSUFBSSxTQUFjLENBQUM7WUFFbkIsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDekMsK0RBQStEO2dCQUMvRCxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixt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TTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNhdGNoRXJyb3IsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW5kZXJlY28gfSBmcm9tICcuL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZW5kZXJlY28ubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FFc2NvbGFyaWRhZGUgfSBmcm9tICcuL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZXNjb2xhcmlkYWRlLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRXN0YWRvQ2l2aWwgfSBmcm9tICcuL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZXN0YWRvLWNpdmlsLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hTXVuaW5jaXBpbyB9IGZyb20gJy4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1tdW5pY2lwaW8nO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FQYWlzIH0gZnJvbSAnLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLXBhaXMnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FNb2RlbCB9IGZyb20gJy4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlRpcG9QZXNzb2FFbnVtIH0gZnJvbSAnLi91bmItdGlwby1wZXNzb2EuZW51bSc7XHJcblxyXG4vLyBJbnRlcmZhY2UgcGFyYSBwYWRyb25pemFyIG8gZXJybyBxdWUgY2hlZ2Egbm9zIGNvbXBvbmVudGVzXHJcbmV4cG9ydCBpbnRlcmZhY2UgVW5iUGVzc29hRXJyb1BhZHJhbyB7XHJcbiAgc3RhdHVzOiBudW1iZXI7XHJcbiAgbWVuc2FnZW1TaW1wbGVzOiBzdHJpbmc7IC8vIFBhcmEgdXNhciBubyBTbmFja0JhclxyXG4gIG1lbnNhZ2VtSHRtbDogc3RyaW5nOyAgICAvLyBQYXJhIHVzYXIgbm8gQWxlcnRTZXJ2aWNlIChjb20gPHVsPiwgPGxpPiwgPHN0cm9uZz4pXHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFVuQlBlc3NvYVNlcnZpY2Uge1xyXG5cclxuICAvLyBBcm1hemVuYSBhcGVuYXMgYSBzdHJpbmcgZGEgVVJMLiBJbmljaWFsaXphIHZhemlvLlxyXG4gIHByaXZhdGUgYmFja2VuZFVybFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gIC8vIEV4cG9zdGEgY29tbyBPYnNlcnZhYmxlIChjYXNvIGFsZ3VtIGNvbXBvbmVudGUgcXVlaXJhIHNlIGluc2NyZXZlcilcclxuICBiYWNrZW5kVXJsJCA9IHRoaXMuYmFja2VuZFVybFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkgeyB9XHJcblxyXG4gIC8vIFNldHRlciBhZ29yYSByZWNlYmUgc3RyaW5nIGRpcmV0YVxyXG4gIHNldEJhY2tlbmRVcmwodXJsOiBzdHJpbmcpIHtcclxuICAgIC8vIFRyYXRhbWVudG8gcmVtb3ZlIGJhcnJhIG5vIGZpbmFsIHBhcmEgcGFkcm9uaXphclxyXG4gICAgaWYgKHVybC5lbmRzV2l0aCgnLycpKSB7XHJcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCAtMSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJhY2tlbmRVcmxTdWJqZWN0Lm5leHQodXJsKTtcclxuICB9XHJcblxyXG4gIC8vIEdldHRlciByZXRvcm5hIHN0cmluZyBkaXJldGFcclxuICBnZXRCYWNrZW5kVXJsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kVXJsU3ViamVjdC5nZXRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gSGVhZGVycyBwYWRyw6NvXHJcbiAgcHJpdmF0ZSBnZXRIZWFkZXJzKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgIH0pXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8gTcOpdG9kb3MgZGUgYnVzY2FcclxuICBmaW5kQnlDcGYoY3BmOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPFVuYlBlc3NvYU1vZGVsPiB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS9wZXNzb2FzL2Zpc2ljYXM/Y3BmPSR7Y3BmfWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxVbmJQZXNzb2FNb2RlbD4odXJsLCB0aGlzLmdldEhlYWRlcnMoKSkucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZpbmRCeUNucGooY25wajogc3RyaW5nIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxVbmJQZXNzb2FNb2RlbD4ge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5nZXRCYWNrZW5kVXJsKCl9L3Blc3NvYS1hcGkvcGVzc29hcy9qdXJpZGljYXM/Y25waj0ke2NucGp9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFVuYlBlc3NvYU1vZGVsPih1cmwsIHRoaXMuZ2V0SGVhZGVycygpKS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmluZEJ5UGFzc2Fwb3J0ZShwYXNzYXBvcnRlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPFVuYlBlc3NvYU1vZGVsPiB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS9wZXNzb2FzL2Zpc2ljYXM/cGFzc2Fwb3J0ZT0ke3Bhc3NhcG9ydGV9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFVuYlBlc3NvYU1vZGVsPih1cmwsIHRoaXMuZ2V0SGVhZGVycygpKS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmluZFBlc3NvYUZpc2ljYUJ5Q29kaWdvUGVzc29hKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFVuYlBlc3NvYU1vZGVsPiB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS9wZXNzb2FzL2Zpc2ljYXM/Y29kaWdvUGVzc29hPSR7aWR9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFVuYlBlc3NvYU1vZGVsPih1cmwsIHRoaXMuZ2V0SGVhZGVycygpKS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmluZFBlc3NvYUp1cmlkaWNhQnlDb2RpZ29QZXNzb2EoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8VW5iUGVzc29hTW9kZWw+IHtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZ2V0QmFja2VuZFVybCgpfS9wZXNzb2EtYXBpL3Blc3NvYXMvanVyaWRpY2FzP2NvZGlnb1Blc3NvYT0ke2lkfWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxVbmJQZXNzb2FNb2RlbD4odXJsLCB0aGlzLmdldEhlYWRlcnMoKSkucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZpbmRQZXNzb2FGaXNpY2EoZmlsdHJvOiBVbmJQZXNzb2FNb2RlbCwgcGFnZT86IG51bWJlciwgc2l6ZT86IG51bWJlciwgc29ydD86IHN0cmluZyk6IE9ic2VydmFibGU8VW5iUGVzc29hTW9kZWxbXT4ge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5nZXRCYWNrZW5kVXJsKCl9L3Blc3NvYS1hcGkvcGVzc29hcy9maXNpY2FzYDtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKGZpbHRybykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbG9yID0gZmlsdHJvW2tleSBhcyBrZXlvZiBVbmJQZXNzb2FNb2RlbF07XHJcbiAgICAgIGlmICh2YWxvciAhPT0gbnVsbCAmJiB2YWxvciAhPT0gdW5kZWZpbmVkICYmIHZhbG9yICE9PSAnJykge1xyXG4gICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoa2V5LCB2YWxvci50b1N0cmluZygpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gMi4gQWRpY2lvbmEgb3MgcGFyw6JtZXRyb3MgZGUgUGFnaW5hw6fDo28gKHNlIGZvcmFtIHBhc3NhZG9zKVxyXG4gICAgaWYgKHBhZ2UgIT09IHVuZGVmaW5lZCAmJiBwYWdlICE9PSBudWxsKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2UnLCBwYWdlLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNpemUgIT09IHVuZGVmaW5lZCAmJiBzaXplICE9PSBudWxsKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NpemUnLCBzaXplLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNvcnQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc29ydCcsIHNvcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDMuIE1vbnRhIGFzIG9ww6fDtWVzIGRhIHJlcXVpc2nDp8Ojb1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgcGFyYW1zLFxyXG4gICAgICAuLi50aGlzLmdldEhlYWRlcnMoKSAvLyBUZW50YSBlc3BhbGhhciBhcyBwcm9wcmllZGFkZXMgc2UgZ2V0SGVhZGVycyByZXRvcm5hciB7IGhlYWRlcnM6IC4uLiB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFVuYlBlc3NvYU1vZGVsW10+KHVybCwgb3B0aW9ucylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZmluZFBlc3NvYUp1cmlkaWNhKGZpbHRybzogVW5iUGVzc29hTW9kZWwsIHBhZ2U/OiBudW1iZXIsIHNpemU/OiBudW1iZXIsIHNvcnQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFVuYlBlc3NvYU1vZGVsW10+IHtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZ2V0QmFja2VuZFVybCgpfS9wZXNzb2EtYXBpL3Blc3NvYXMvanVyaWRpY2FzYDtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG5cclxuICAgIC8vIDEuIEFkaWNpb25hIEFQRU5BUyBvcyBmaWx0cm9zIHBlcm1pdGlkb3MgZG8gTW9kZWxcclxuICAgIGNvbnN0IGNhbXBvc1Blcm1pdGlkb3MgPSBbJ2lkUGVzc29hJywgJ2NvZGlnb1Blc3NvYScsICdjbnBqJywgJ25vbWVGYW50YXNpYScsICdyYXphb1NvY2lhbCcsICdzaWdsYSddO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKGZpbHRybykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIGlmIChjYW1wb3NQZXJtaXRpZG9zLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICBjb25zdCB2YWxvciA9IGZpbHRyb1trZXkgYXMga2V5b2YgVW5iUGVzc29hTW9kZWxdO1xyXG4gICAgICAgIGlmICh2YWxvciAhPT0gbnVsbCAmJiB2YWxvciAhPT0gdW5kZWZpbmVkICYmIHZhbG9yICE9PSAnJykge1xyXG4gICAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChrZXksIHZhbG9yLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gMi4gQWRpY2lvbmEgb3MgcGFyw6JtZXRyb3MgZGUgUGFnaW5hw6fDo28gKHNlIGZvcmFtIHBhc3NhZG9zKVxyXG4gICAgaWYgKHBhZ2UgIT09IHVuZGVmaW5lZCAmJiBwYWdlICE9PSBudWxsKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2UnLCBwYWdlLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNpemUgIT09IHVuZGVmaW5lZCAmJiBzaXplICE9PSBudWxsKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NpemUnLCBzaXplLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNvcnQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc29ydCcsIHNvcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDMuIE1vbnRhIGFzIG9ww6fDtWVzIGRhIHJlcXVpc2nDp8Ojb1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgcGFyYW1zLFxyXG4gICAgICAuLi50aGlzLmdldEhlYWRlcnMoKSAvLyBUZW50YSBlc3BhbGhhciBhcyBwcm9wcmllZGFkZXMgc2UgZ2V0SGVhZGVycyByZXRvcm5hciB7IGhlYWRlcnM6IC4uLiB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFVuYlBlc3NvYU1vZGVsW10+KHVybCwgb3B0aW9ucylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcGVzcXVpc2FyQ2VwKGNlcDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS9wdWJsaWMvYnVzY2EtY2VwL3NlcnZpY28tMS8ke2NlcH1gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VW5iUGVzc29hRW5kZXJlY28+KHVybCwgdGhpcy5nZXRIZWFkZXJzKCkpLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBTYWx2YXIgKGRlY2lkZSBmaXNpY2Egb3UganVyaWRpY2EpXHJcbiAgc2FsdmFyKHBheWxvYWQ6IGFueSwgdGlwb1Blc3NvYTogVW5iVGlwb1Blc3NvYUVudW0pOiBPYnNlcnZhYmxlPFVuYlBlc3NvYU1vZGVsIHwgbnVsbD4ge1xyXG5cclxuICAgIC8vIChQYXJhIG8gY29tcG9uZW50ZSBjb25zZWd1aXIgbGVyIC5tZW5zYWdlbVNpbXBsZXMgZSAubWVuc2FnZW1IdG1sKVxyXG4gICAgaWYgKCFwYXlsb2FkKSB7XHJcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICh7XHJcbiAgICAgICAgc3RhdHVzOiA0MDAsXHJcbiAgICAgICAgbWVuc2FnZW1TaW1wbGVzOiAnRXJybyBpbnRlcm5vOiBEYWRvcyBwYXJhIHNhbHZhbWVudG8gaW52w6FsaWRvcyAoUGF5bG9hZCBudWxsKS4nLFxyXG4gICAgICAgIG1lbnNhZ2VtSHRtbDogJzxzdHJvbmc+RXJybyBpbnRlcm5vOjwvc3Ryb25nPiBUZW50YXRpdmEgZGUgc2FsdmFyIGRhZG9zIHZhemlvcy4nXHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRpcG9QZXNzb2EpIHtcclxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gKHtcclxuICAgICAgICBzdGF0dXM6IDQwMCxcclxuICAgICAgICBtZW5zYWdlbVNpbXBsZXM6ICdFcnJvIGludGVybm86IFRpcG8gZGUgcGVzc29hIG7Do28gZGVmaW5pZG8uJyxcclxuICAgICAgICBtZW5zYWdlbUh0bWw6ICc8c3Ryb25nPkVycm8gaW50ZXJubzo8L3N0cm9uZz4gTyB0aXBvIGRlIHBlc3NvYSDDqSBvYnJpZ2F0w7NyaW8gcGFyYSBzYWx2YXIuJ1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMi4gRGVsZWdhw6fDo29cclxuICAgIC8vIENvbW8gc2F2ZVBlc3NvYUZpc2ljYSBlIHNhdmVQZXNzb2FKdXJpZGljYSBKw4EgVMOKTSBvIC5waXBlKGNhdGNoRXJyb3IpLFxyXG4gICAgLy8gYXF1aSBuw7NzIGFwZW5hcyByZXRvcm5hbW9zIG8gT2JzZXJ2YWJsZSBkZWxlcy4gTyBlcnJvIHN1Ymlyw6EgdHJhdGFkby5cclxuICAgIGlmICh0aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkZJU0lDQSB8fCB0aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNhdmVQZXNzb2FGaXNpY2EocGF5bG9hZCk7XHJcbiAgICB9IGVsc2UgaWYgKHRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2F2ZVBlc3NvYUp1cmlkaWNhKHBheWxvYWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihudWxsKTtcclxuICB9XHJcblxyXG4gIC8vIFNhbHZhciBQZXNzb2EgRsOtc2ljYVxyXG4gIHByaXZhdGUgc2F2ZVBlc3NvYUZpc2ljYShwZXNzb2E6IFVuYlBlc3NvYU1vZGVsKTogT2JzZXJ2YWJsZTxVbmJQZXNzb2FNb2RlbD4ge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5nZXRCYWNrZW5kVXJsKCk7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHRoaXMuZ2V0SGVhZGVycygpO1xyXG4gICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHBlc3NvYSk7XHJcblxyXG4gICAgLy8gVmFyacOhdmVsIHBhcmEgYXJtYXplbmFyIG8gT2JzZXJ2YWJsZSBhbnRlcyBkZSByZXRvcm5hclxyXG4gICAgbGV0IHJlcXVlc3QkOiBPYnNlcnZhYmxlPFVuYlBlc3NvYU1vZGVsPjtcclxuXHJcbiAgICBpZiAocGVzc29hLmNvZGlnb1Blc3NvYSA9PSBudWxsKSB7XHJcbiAgICAgIHJlcXVlc3QkID0gdGhpcy5odHRwLnBvc3Q8VW5iUGVzc29hTW9kZWw+KGAke3VybH0vcGVzc29hLWFwaS9wZXNzb2FzL2Zpc2ljYXNgLCBib2R5LCBodHRwT3B0aW9ucyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXF1ZXN0JCA9IHRoaXMuaHR0cC5wdXQ8VW5iUGVzc29hTW9kZWw+KGAke3VybH0vcGVzc29hLWFwaS9wZXNzb2FzL2Zpc2ljYXMvJHtwZXNzb2EuY29kaWdvUGVzc29hfWAsIGJvZHksIGh0dHBPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBbnRlcyBkZSByZXRvcm5hciwgcGFzc2Ftb3MgcGVsbyAncGlwZScgcGFyYSB0cmF0YXIgbyBlcnJvIHNlIGVsZSBvY29ycmVyLlxyXG4gICAgcmV0dXJuIHJlcXVlc3QkLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBTYWx2YXIgUGVzc29hIEp1csOtZGljYVxyXG4gIHByaXZhdGUgc2F2ZVBlc3NvYUp1cmlkaWNhKHBlc3NvYTogVW5iUGVzc29hTW9kZWwpOiBPYnNlcnZhYmxlPFVuYlBlc3NvYU1vZGVsPiB7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLmdldEJhY2tlbmRVcmwoKTtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0gdGhpcy5nZXRIZWFkZXJzKCk7XHJcbiAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGVzc29hKTtcclxuICAgIGxldCByZXF1ZXN0JDogT2JzZXJ2YWJsZTxVbmJQZXNzb2FNb2RlbD47XHJcblxyXG4gICAgaWYgKHBlc3NvYS5jb2RpZ29QZXNzb2EgPT0gbnVsbCkge1xyXG4gICAgICByZXF1ZXN0JCA9IHRoaXMuaHR0cC5wb3N0PFVuYlBlc3NvYU1vZGVsPihgJHt1cmx9L3Blc3NvYS1hcGkvcGVzc29hcy9qdXJpZGljYXNgLCBib2R5LCBodHRwT3B0aW9ucyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXF1ZXN0JCA9IHRoaXMuaHR0cC5wdXQ8VW5iUGVzc29hTW9kZWw+KGAke3VybH0vcGVzc29hLWFwaS9wZXNzb2FzL2p1cmlkaWNhcy8ke3Blc3NvYS5jb2RpZ29QZXNzb2F9YCwgYm9keSwgaHR0cE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXF1ZXN0JC5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gRGFkb3MgYXV4aWxpYXJlcyBww7pibGljb3NcclxuICBwdWJsaWMgZ2V0RXNjb2xhcmlkYWRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VW5iUGVzc29hRXNjb2xhcmlkYWRlW10+KGAke3RoaXMuZ2V0QmFja2VuZFVybCgpfS9wZXNzb2EtYXBpL3B1YmxpYy9lc2NvbGFyaWRhZGVzL2xpc3RhZ2VtYCkucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSAvLyA8LS0tIEFkaWNpb25lIGFxdWlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RXN0YWRvQ2l2aWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxVbmJQZXNzb2FFc3RhZG9DaXZpbFtdPihgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS9wdWJsaWMvZXN0YWRvcy1jaXZpcy9saXN0YWdlbWApLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikgLy8gPC0tLSBBZGljaW9uZSBhcXVpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE11bmljaXBpb3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxVbmJQZXNzb2FNdW5pbmNpcGlvW10+KGAke3RoaXMuZ2V0QmFja2VuZFVybCgpfS9wZXNzb2EtYXBpL3B1YmxpYy9tdW5pY2lwaW9zL2xpc3RhZ2VtYCkucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSAvLyA8LS0tIEFkaWNpb25lIGFxdWlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGFpc2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8eyBjb250ZW50OiBVbmJQZXNzb2FQYWlzW10gfT4oXHJcbiAgICAgIGAke3RoaXMuZ2V0QmFja2VuZFVybCgpfS9wZXNzb2EtYXBpL3B1YmxpYy9wYWlzZXMvbGlzdGFnZW0/JnBhZ2U9MCZzaXplPTIwMCZzb3J0PWRlbm9taW5hY2FvLGFzY2BcclxuICAgICkucGlwZShcclxuICAgICAgbWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuY29udGVudC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAvLyAuLi4gc3VhIGzDs2dpY2EgZGUgb3JkZW5hw6fDo28gLi4uXHJcbiAgICAgICAgICBjb25zdCBub21lQSA9IGE/LmRlbm9taW5hY2FvPy50b1VwcGVyQ2FzZSgpIHx8ICcnO1xyXG4gICAgICAgICAgY29uc3Qgbm9tZUIgPSBiPy5kZW5vbWluYWNhbz8udG9VcHBlckNhc2UoKSB8fCAnJztcclxuICAgICAgICAgIGlmIChub21lQSA9PT0gJ0JSQVNJTCcpIHJldHVybiAtMTtcclxuICAgICAgICAgIGlmIChub21lQiA9PT0gJ0JSQVNJTCcpIHJldHVybiAxO1xyXG4gICAgICAgICAgcmV0dXJuIG5vbWVBLmxvY2FsZUNvbXBhcmUobm9tZUIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSYWNhQ29yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8c3RyaW5nW10+KGAke3RoaXMuZ2V0QmFja2VuZFVybCgpfS9wZXNzb2EtYXBpL3B1YmxpYy9ldG5pYXMvbGlzdGFnZW1gKS5waXBlKFxyXG4gICAgICBtYXAobGlzdGEgPT4gbGlzdGEubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcclxuICAgICAgICBjb2RpZ286IGluZGV4LCAvLyBnZXJhIHVtIGPDs2RpZ28gbnVtw6lyaWNvIHNlcXVlbmNpYWxcclxuICAgICAgICBkZW5vbWluYWNhbzogdGhpcy5mb3JtYXRhckxhYmVsKGl0ZW0pIC8vIGZvcm1hdGEgc2UgcXVpc2VyXHJcbiAgICAgIH0pKSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VGlwb0VtYWlsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8c3RyaW5nW10+KGAke3RoaXMuZ2V0QmFja2VuZFVybCgpfS9wZXNzb2EtYXBpL3RpcG9zLWVtYWlsL3B1YmxpYy9saXN0YWdlbWApLnBpcGUoXHJcbiAgICAgIG1hcChsaXN0YSA9PiBsaXN0YS5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xyXG4gICAgICAgIGNvZGlnbzogaW5kZXgsIC8vIGdlcmEgdW0gY8OzZGlnbyBudW3DqXJpY28gc2VxdWVuY2lhbFxyXG4gICAgICAgIGRlbm9taW5hY2FvOiB0aGlzLmZvcm1hdGFyTGFiZWwoaXRlbSkgLy8gZm9ybWF0YSBzZSBxdWlzZXJcclxuICAgICAgfSkpKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRUaXBvRW5kZXJlY28oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxzdHJpbmdbXT4oYCR7dGhpcy5nZXRCYWNrZW5kVXJsKCl9L3Blc3NvYS1hcGkvdGlwb3MtZW5kZXJlY28vcHVibGljL2xpc3RhZ2VtYCkucGlwZShcclxuICAgICAgbWFwKGxpc3RhID0+IGxpc3RhLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgY29kaWdvOiBpbmRleCwgLy8gZ2VyYSB1bSBjw7NkaWdvIG51bcOpcmljbyBzZXF1ZW5jaWFsXHJcbiAgICAgICAgZGVub21pbmFjYW86IHRoaXMuZm9ybWF0YXJMYWJlbChpdGVtKSAvLyBmb3JtYXRhIHNlIHF1aXNlclxyXG4gICAgICB9KSkpLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRpcG9UZWxlZm9uZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHN0cmluZ1tdPihgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS90aXBvcy10ZWxlZm9uZS9wdWJsaWMvbGlzdGFnZW1gKS5waXBlKFxyXG4gICAgICBtYXAobGlzdGEgPT4gbGlzdGEubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcclxuICAgICAgICBjb2RpZ286IGluZGV4LCAvLyBnZXJhIHVtIGPDs2RpZ28gbnVtw6lyaWNvIHNlcXVlbmNpYWxcclxuICAgICAgICBkZW5vbWluYWNhbzogdGhpcy5mb3JtYXRhckxhYmVsKGl0ZW0pIC8vIGZvcm1hdGEgc2UgcXVpc2VyXHJcbiAgICAgIH0pKSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdGFyTGFiZWwodGV4dDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGV4dFxyXG4gICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAucmVwbGFjZSgvXy9nLCAnICcpXHJcbiAgICAgIC5yZXBsYWNlKC9cXGJcXHcvZywgbCA9PiBsLnRvVXBwZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBIQU5ETEUgRVJST1IgUEFEUk9OSVpBRE8gXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IgPSAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgbGV0IG1lbnNhZ2VtU2ltcGxlcyA9ICdPY29ycmV1IHVtIGVycm8gYW8gcHJvY2Vzc2FyIGEgcmVxdWlzacOnw6NvISc7XHJcbiAgICBsZXQgbWVuc2FnZW1IdG1sID0gJzxzdHJvbmc+T2NvcnJldSB1bSBlcnJvIGRlc2NvbmhlY2lkby48L3N0cm9uZz4nO1xyXG5cclxuICAgIC8vIDIuIERlc2NvYnJlIHF1ZW0gw6kgbyBjb3JwbyBkbyBlcnJvXHJcbiAgICBsZXQgZXJyb3JCb2R5OiBhbnk7XHJcblxyXG4gICAgaWYgKGVycm9yLmRldGFsaGVzIHx8IGVycm9yLmNvZGlnb1N0YXR1cykge1xyXG4gICAgICAvLyBDQVNPIDE6IE8gSW50ZXJjZXB0b3IgasOhIGRlc2VtYnJ1bGhvdSBvIGVycm8gKMOpIG8gSlNPTiBwdXJvKVxyXG4gICAgICBlcnJvckJvZHkgPSBlcnJvcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIENBU08gMjogw4kgdW0gSHR0cEVycm9yUmVzcG9uc2UgcGFkcsOjbyAodGVtIGEgcHJvcHJpZWRhZGUgLmVycm9yKVxyXG4gICAgICBlcnJvckJvZHkgPSBlcnJvci5lcnJvciB8fCBlcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyAzLiBMw7NnaWNhIGRlIExpbXBlemEgZSBQYXJzZSAoc2UgZm9yIHN0cmluZyBzdWphKVxyXG4gICAgaWYgKHR5cGVvZiBlcnJvckJvZHkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgZXJyb3JCb2R5ID0gSlNPTi5wYXJzZShlcnJvckJvZHkpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBlcnJvckJvZHkuaW5kZXhPZigneycpO1xyXG4gICAgICAgIGNvbnN0IGVuZCA9IGVycm9yQm9keS5sYXN0SW5kZXhPZignfScpO1xyXG4gICAgICAgIGlmIChzdGFydCA+IC0xICYmIGVuZCA+IHN0YXJ0KSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBlcnJvckJvZHkgPSBKU09OLnBhcnNlKGVycm9yQm9keS5zdWJzdHJpbmcoc3RhcnQsIGVuZCArIDEpKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGUyKSB7XHJcbiAgICAgICAgICAgIC8vIFNlIGZhbGhhciBvIHBhcnNlLCB1c2EgbyB0ZXh0byBjb21vIG1lbnNhZ2VtXHJcbiAgICAgICAgICAgIG1lbnNhZ2VtU2ltcGxlcyA9IGVycm9yQm9keS5zdWJzdHJpbmcoMCwgMjAwKTtcclxuICAgICAgICAgICAgbWVuc2FnZW1IdG1sID0gYDxzdHJvbmc+JHtlcnJvckJvZHl9PC9zdHJvbmc+YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyA0LiBGb3JtYXRhw6fDo28gYmFzZWFkYSBubyBKU09OIGlkZW50aWZpY2Fkb1xyXG4gICAgaWYgKGVycm9yQm9keSAmJiB0eXBlb2YgZXJyb3JCb2R5ID09PSAnb2JqZWN0Jykge1xyXG5cclxuICAgICAgLy8gQTogRXJyb3MgZGUgVmFsaWRhw6fDo29cclxuICAgICAgaWYgKGVycm9yQm9keS5kZXRhbGhlcyAmJiBBcnJheS5pc0FycmF5KGVycm9yQm9keS5kZXRhbGhlcykgJiYgZXJyb3JCb2R5LmRldGFsaGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBtZW5zYWdlbVNpbXBsZXMgPSBcIk8gZm9ybXVsw6FyaW8gcG9zc3VpIGVycm9zIGRlIHZhbGlkYcOnw6NvLlwiO1xyXG5cclxuICAgICAgICBjb25zdCBsaXN0YUVycm9zID0gZXJyb3JCb2R5LmRldGFsaGVzLm1hcCgoZDogYW55KSA9PlxyXG4gICAgICAgICAgYDxsaT48c3Ryb25nPiR7ZC5ub21lQ2FtcG8gfHwgJ0NhbXBvJ306PC9zdHJvbmc+ICR7ZC5jcml0aWNhIHx8IGQubWVuc2FnZW19PC9saT5gXHJcbiAgICAgICAgKS5qb2luKCcnKTtcclxuXHJcbiAgICAgICAgbWVuc2FnZW1IdG1sID0gYDxzdHJvbmc+RXJyb3MgZGUgVmFsaWRhw6fDo286PC9zdHJvbmc+IDx1bD4ke2xpc3RhRXJyb3N9PC91bD5gO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIEI6IEVycm8gR2Vuw6lyaWNvIGNvbSBtZW5zYWdlbVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBtc2dCYWNrZW5kID0gZXJyb3JCb2R5Lm1lbnNhZ2VtIHx8IGVycm9yQm9keS5tZXNzYWdlIHx8IGVycm9yQm9keS5kZXRhaWw7XHJcbiAgICAgICAgaWYgKG1zZ0JhY2tlbmQpIHtcclxuICAgICAgICAgIG1lbnNhZ2VtU2ltcGxlcyA9IG1zZ0JhY2tlbmQ7XHJcbiAgICAgICAgICBtZW5zYWdlbUh0bWwgPSBgPHN0cm9uZz4ke21zZ0JhY2tlbmR9PC9zdHJvbmc+YDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyA1LiBUcmF0YW1lbnRvcyBkZSBTdGF0dXMgSFRUUCAoU2UgbyB3cmFwcGVyIG9yaWdpbmFsIHRpdmVyIHN0YXR1cylcclxuICAgIC8vIE5vdGE6IFNlIG8gaW50ZXJjZXB0b3IgZGVzZW1icnVsaG91LCAnZXJyb3Iuc3RhdHVzJyBwb2RlIG7Do28gZXhpc3RpciwgXHJcbiAgICAvLyBtYXMgJ2Vycm9yQm9keS5jb2RpZ29TdGF0dXMnIChkbyBKYXZhKSBwb2RlIGV4aXN0aXIuXHJcbiAgICBjb25zdCBzdGF0dXMgPSBlcnJvci5zdGF0dXMgfHwgZXJyb3JCb2R5Py5jb2RpZ29TdGF0dXMgfHwgMDtcclxuXHJcbiAgICBpZiAoc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgbWVuc2FnZW1TaW1wbGVzID0gXCJTZXNzw6NvIGV4cGlyYWRhLlwiO1xyXG4gICAgICBtZW5zYWdlbUh0bWwgPSBcIjxzdHJvbmc+U2Vzc8OjbyBleHBpcmFkYS4gRmHDp2EgbG9naW4gbm92YW1lbnRlLjwvc3Ryb25nPlwiO1xyXG4gICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMykge1xyXG4gICAgICBtZW5zYWdlbVNpbXBsZXMgPSBcIkFjZXNzbyBOZWdhZG8uXCI7XHJcbiAgICAgIG1lbnNhZ2VtSHRtbCA9IFwiPHN0cm9uZz5Wb2PDqiBuw6NvIHRlbSBwZXJtaXNzw6NvIHBhcmEgcmVhbGl6YXIgZXN0YSBhw6fDo28uPC9zdHJvbmc+XCI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXJyb0Zvcm1hdGFkbzogVW5iUGVzc29hRXJyb1BhZHJhbyA9IHtcclxuICAgICAgc3RhdHVzOiBzdGF0dXMsXHJcbiAgICAgIG1lbnNhZ2VtU2ltcGxlcyxcclxuICAgICAgbWVuc2FnZW1IdG1sXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnNvbGUud2FybignW1VuQlBlc3NvYVNlcnZpY2VdIEVycm8gZm9ybWF0YWRvIGZpbmFsOicsIGVycm9Gb3JtYXRhZG8pO1xyXG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb0Zvcm1hdGFkbyk7XHJcbiAgfVxyXG59Il19
|
|
567
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTXBGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQVk5QyxNQUFNLE9BQU8sZ0JBQWdCO0lBZTNCLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFicEMscURBQXFEO1FBQzdDLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzVELHNFQUFzRTtRQUN0RSxnQkFBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwRCwrSEFBK0g7UUFDdkgsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUUzQiw2RUFBNkU7UUFDckUsc0JBQWlCLEdBQXFELElBQUksQ0FBQztRQUMzRSxzQkFBaUIsR0FBcUQsSUFBSSxDQUFDO1FBQzNFLG1CQUFjLEdBQXFELElBQUksQ0FBQztRQXFrQmhGLHNFQUFzRTtRQUN0RSw0QkFBNEI7UUFDNUIsc0VBQXNFO1FBQzlELGdCQUFXLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZ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Q0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDakQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QixPQUFPLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNoQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQzs4R0Eva0JVLGdCQUFnQjtrSEFBaEIsZ0JBQWdCLGNBRmYsTUFBTTs7MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FFbmRlcmVjbyB9IGZyb20gJy4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbmRlcmVjby5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVzY29sYXJpZGFkZSB9IGZyb20gJy4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lc2NvbGFyaWRhZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FFc3RhZG9DaXZpbCB9IGZyb20gJy4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lc3RhZG8tY2l2aWwubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FNdW5pbmNpcGlvIH0gZnJvbSAnLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLW11bmljaXBpbyc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYVBhaXMgfSBmcm9tICcuL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtcGFpcyc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYU1vZGVsIH0gZnJvbSAnLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iVGlwb1Blc3NvYUVudW0gfSBmcm9tICcuL3VuYi10aXBvLXBlc3NvYS5lbnVtJztcclxuaW1wb3J0IHsgVW5iVXRpbHMgfSBmcm9tICcuLi91dGlscy91bmItdXRpbHMnO1xyXG5cclxuLy8gSW50ZXJmYWNlIHBhcmEgcGFkcm9uaXphciBvIGVycm8gcXVlIGNoZWdhIG5vcyBjb21wb25lbnRlc1xyXG5leHBvcnQgaW50ZXJmYWNlIFVuYlBlc3NvYUVycm9QYWRyYW8ge1xyXG4gIHN0YXR1czogbnVtYmVyO1xyXG4gIG1lbnNhZ2VtU2ltcGxlczogc3RyaW5nOyAvLyBQYXJhIHVzYXIgbm8gU25hY2tCYXJcclxuICBtZW5zYWdlbUh0bWw6IHN0cmluZzsgICAgLy8gUGFyYSB1c2FyIG5vIEFsZXJ0U2VydmljZSAoY29tIDx1bD4sIDxsaT4sIDxzdHJvbmc+KVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVbkJQZXNzb2FTZXJ2aWNlIHtcclxuXHJcbiAgLy8gQXJtYXplbmEgYXBlbmFzIGEgc3RyaW5nIGRhIFVSTC4gSW5pY2lhbGl6YSB2YXppby5cclxuICBwcml2YXRlIGJhY2tlbmRVcmxTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcclxuICAvLyBFeHBvc3RhIGNvbW8gT2JzZXJ2YWJsZSAoY2FzbyBhbGd1bSBjb21wb25lbnRlIHF1ZWlyYSBzZSBpbnNjcmV2ZXIpXHJcbiAgYmFja2VuZFVybCQgPSB0aGlzLmJhY2tlbmRVcmxTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvLyBwcmEgZmFjaWxpdGFyIG8gZGVidWcsIHBvZGUgasOhIHBhc3NhciBvIHRva2VuLiBNYXMgaXNzbyBuYW8gcG9kZSBlc3RhciBuYSBwcm9kdWNhbyBwcSB2YWkgZXhwb3IgbyB0b2tlbiBwcm8gdXN1YXJpbyBubyBmcm9udFxyXG4gIHByaXZhdGUgdG9rZW46IHN0cmluZyA9ICcnO1xyXG5cclxuICAvLyBDYWNoZSBkYXMgbGlzdGFzIGRlIHRpcG9zIChwYXJhIG5vcm1hbGl6YcOnw6NvIGRlIGVuZGVyZcOnbywgdGVsZWZvbmUsIGVtYWlsKVxyXG4gIHByaXZhdGUgdGlwb0VuZGVyZWNvQ2FjaGU6IHsgY29kaWdvOiBudW1iZXI7IGRlbm9taW5hY2FvOiBzdHJpbmcgfVtdIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSB0aXBvVGVsZWZvbmVDYWNoZTogeyBjb2RpZ286IG51bWJlcjsgZGVub21pbmFjYW86IHN0cmluZyB9W10gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHRpcG9FbWFpbENhY2hlOiB7IGNvZGlnbzogbnVtYmVyOyBkZW5vbWluYWNhbzogc3RyaW5nIH1bXSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHsgfVxyXG5cclxuICAvLyBTZXR0ZXIgYWdvcmEgcmVjZWJlIHN0cmluZyBkaXJldGFcclxuICBzZXRCYWNrZW5kVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICAvLyBUcmF0YW1lbnRvIHJlbW92ZSBiYXJyYSBubyBmaW5hbCBwYXJhIHBhZHJvbml6YXJcclxuICAgIGlmICh1cmwgJiYgdXJsLmVuZHNXaXRoKCcvJykpIHtcclxuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIC0xKTtcclxuICAgIH1cclxuICAgIHRoaXMuYmFja2VuZFVybFN1YmplY3QubmV4dCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgc2V0VG9rZW4odG9rZW46IHN0cmluZykge1xyXG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xyXG4gIH1cclxuXHJcbiAgLy8gR2V0dGVyIHJldG9ybmEgc3RyaW5nIGRpcmV0YVxyXG4gIGdldEJhY2tlbmRVcmwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmJhY2tlbmRVcmxTdWJqZWN0LmdldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBIZWFkZXJzIHBhZHLDo28gY29tIENvbnRlbnQtVHlwZSBlIEF1dGhvcml6YXRpb24gKHNlIHRva2VuIGV4aXN0aXIpXHJcbiAgcHJpdmF0ZSBnZXRIZWFkZXJzKCkge1xyXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBTZSBvIHRva2VuIGVzdGl2ZXIgcHJlZW5jaGlkbyAoY2Vuw6FyaW8gZGUgZGVidWcvZGV2KSwgYWRpY2lvbmEgbyBBdXRob3JpemF0aW9uXHJcbiAgICBpZiAodGhpcy50b2tlbikge1xyXG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dGhpcy50b2tlbn1gKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXRvcm5hIG8gb2JqZXRvIG5vIGZvcm1hdG8gZXNwZXJhZG8gcGVsbyBIdHRwQ2xpZW50IHsgaGVhZGVyczogLi4uIH1cclxuICAgIHJldHVybiB7IGhlYWRlcnMgfTtcclxuICB9XHJcblxyXG4gIC8vIE3DqXRvZG9zIGRlIGJ1c2NhXHJcbiAgZmluZEJ5Q3BmKGNwZjogc3RyaW5nIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxVbmJQZXNzb2FNb2RlbD4ge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5nZXRCYWNrZW5kVXJsKCl9L3Blc3NvYS1hcGkvcGVzc29hcy9maXNpY2FzP2NwZj0ke2NwZn1gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VW5iUGVzc29hTW9kZWw+KHVybCwgdGhpcy5nZXRIZWFkZXJzKCkpLnBpcGUoXHJcbiAgICAgIG1hcChyZXMgPT4gdGhpcy5ub3JtYWxpemVQZXNzb2EocmVzLCBVbmJUaXBvUGVzc29hRW51bS5GSVNJQ0EpKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZpbmRCeUNucGooY25wajogc3RyaW5nIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxVbmJQZXNzb2FNb2RlbD4ge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5nZXRCYWNrZW5kVXJsKCl9L3Blc3NvYS1hcGkvcGVzc29hcy9qdXJpZGljYXM/Y25waj0ke2NucGp9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFVuYlBlc3NvYU1vZGVsPih1cmwsIHRoaXMuZ2V0SGVhZGVycygpKS5waXBlKFxyXG4gICAgICBtYXAocmVzID0+IHRoaXMubm9ybWFsaXplUGVzc29hKHJlcywgVW5iVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EpKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZpbmRCeVBhc3NhcG9ydGUocGFzc2Fwb3J0ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxVbmJQZXNzb2FNb2RlbD4ge1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5nZXRCYWNrZW5kVXJsKCl9L3Blc3NvYS1hcGkvcGVzc29hcy9maXNpY2FzP3Bhc3NhcG9ydGU9JHtwYXNzYXBvcnRlfWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxVbmJQZXNzb2FNb2RlbD4odXJsLCB0aGlzLmdldEhlYWRlcnMoKSkucGlwZShcclxuICAgICAgbWFwKHJlcyA9PiB0aGlzLm5vcm1hbGl6ZVBlc3NvYShyZXMsIFVuYlRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBKSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmaW5kUGVzc29hRmlzaWNhQnlDb2RpZ29QZXNzb2EoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8VW5iUGVzc29hTW9kZWw+IHtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZ2V0QmFja2VuZFVybCgpfS9wZXNzb2EtYXBpL3Blc3NvYXMvZmlzaWNhcz9jb2RpZ29QZXNzb2E9JHtpZH1gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VW5iUGVzc29hTW9kZWw+KHVybCwgdGhpcy5nZXRIZWFkZXJzKCkpLnBpcGUoXHJcbiAgICAgIG1hcChyZXMgPT4gdGhpcy5ub3JtYWxpemVQZXNzb2EocmVzLCBVbmJUaXBvUGVzc29hRW51bS5GSVNJQ0EpKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZpbmRQZXNzb2FKdXJpZGljYUJ5Q29kaWdvUGVzc29hKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFVuYlBlc3NvYU1vZGVsPiB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS9wZXNzb2FzL2p1cmlkaWNhcz9jb2RpZ29QZXNzb2E9JHtpZH1gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VW5iUGVzc29hTW9kZWw+KHVybCwgdGhpcy5nZXRIZWFkZXJzKCkpLnBpcGUoXHJcbiAgICAgIG1hcChyZXMgPT4gdGhpcy5ub3JtYWxpemVQZXNzb2EocmVzLCBVbmJUaXBvUGVzc29hRW51bS5KVVJJRElDQSkpLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmluZFBlc3NvYUZpc2ljYShmaWx0cm86IFVuYlBlc3NvYU1vZGVsLCBwYWdlPzogbnVtYmVyLCBzaXplPzogbnVtYmVyLCBzb3J0Pzogc3RyaW5nKTogT2JzZXJ2YWJsZTxVbmJQZXNzb2FNb2RlbFtdPiB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS9wZXNzb2FzL2Zpc2ljYXNgO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcblxyXG4gICAgT2JqZWN0LmtleXMoZmlsdHJvKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgY29uc3QgdmFsb3IgPSBmaWx0cm9ba2V5IGFzIGtleW9mIFVuYlBlc3NvYU1vZGVsXTtcclxuICAgICAgaWYgKHZhbG9yICE9PSBudWxsICYmIHZhbG9yICE9PSB1bmRlZmluZWQgJiYgdmFsb3IgIT09ICcnKSB7XHJcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChrZXksIHZhbG9yLnRvU3RyaW5nKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyAyLiBBZGljaW9uYSBvcyBwYXLDom1ldHJvcyBkZSBQYWdpbmHDp8OjbyAoc2UgZm9yYW0gcGFzc2Fkb3MpXHJcbiAgICBpZiAocGFnZSAhPT0gdW5kZWZpbmVkICYmIHBhZ2UgIT09IG51bGwpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncGFnZScsIHBhZ2UudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2l6ZSAhPT0gdW5kZWZpbmVkICYmIHNpemUgIT09IG51bGwpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2l6ZScsIHNpemUudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc29ydCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdzb3J0Jywgc29ydCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMy4gTW9udGEgYXMgb3DDp8O1ZXMgZGEgcmVxdWlzacOnw6NvXHJcbiAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICBwYXJhbXMsXHJcbiAgICAgIC4uLnRoaXMuZ2V0SGVhZGVycygpIC8vIFRlbnRhIGVzcGFsaGFyIGFzIHByb3ByaWVkYWRlcyBzZSBnZXRIZWFkZXJzIHJldG9ybmFyIHsgaGVhZGVyczogLi4uIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VW5iUGVzc29hTW9kZWxbXT4odXJsLCBvcHRpb25zKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoYXJyID0+IGFyci5tYXAoaXRlbSA9PiB0aGlzLm5vcm1hbGl6ZVBlc3NvYShpdGVtLCBVbmJUaXBvUGVzc29hRW51bS5GSVNJQ0EpKSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZmluZFBlc3NvYUp1cmlkaWNhKGZpbHRybzogVW5iUGVzc29hTW9kZWwsIHBhZ2U/OiBudW1iZXIsIHNpemU/OiBudW1iZXIsIHNvcnQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFVuYlBlc3NvYU1vZGVsW10+IHtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZ2V0QmFja2VuZFVybCgpfS9wZXNzb2EtYXBpL3Blc3NvYXMvanVyaWRpY2FzYDtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG5cclxuICAgIC8vIDEuIEFkaWNpb25hIEFQRU5BUyBvcyBmaWx0cm9zIHBlcm1pdGlkb3MgZG8gTW9kZWxcclxuICAgIGNvbnN0IGNhbXBvc1Blcm1pdGlkb3MgPSBbJ2lkUGVzc29hJywgJ2NvZGlnb1Blc3NvYScsICdjbnBqJywgJ25vbWVGYW50YXNpYScsICdyYXphb1NvY2lhbCcsICdzaWdsYSddO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKGZpbHRybykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIGlmIChjYW1wb3NQZXJtaXRpZG9zLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICBjb25zdCB2YWxvciA9IGZpbHRyb1trZXkgYXMga2V5b2YgVW5iUGVzc29hTW9kZWxdO1xyXG4gICAgICAgIGlmICh2YWxvciAhPT0gbnVsbCAmJiB2YWxvciAhPT0gdW5kZWZpbmVkICYmIHZhbG9yICE9PSAnJykge1xyXG4gICAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZChrZXksIHZhbG9yLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gMi4gQWRpY2lvbmEgb3MgcGFyw6JtZXRyb3MgZGUgUGFnaW5hw6fDo28gKHNlIGZvcmFtIHBhc3NhZG9zKVxyXG4gICAgaWYgKHBhZ2UgIT09IHVuZGVmaW5lZCAmJiBwYWdlICE9PSBudWxsKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2UnLCBwYWdlLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNpemUgIT09IHVuZGVmaW5lZCAmJiBzaXplICE9PSBudWxsKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NpemUnLCBzaXplLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHNvcnQpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc29ydCcsIHNvcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDMuIE1vbnRhIGFzIG9ww6fDtWVzIGRhIHJlcXVpc2nDp8Ojb1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgcGFyYW1zLFxyXG4gICAgICAuLi50aGlzLmdldEhlYWRlcnMoKSAvLyBUZW50YSBlc3BhbGhhciBhcyBwcm9wcmllZGFkZXMgc2UgZ2V0SGVhZGVycyByZXRvcm5hciB7IGhlYWRlcnM6IC4uLiB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFVuYlBlc3NvYU1vZGVsW10+KHVybCwgb3B0aW9ucylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKGFyciA9PiBhcnIubWFwKGl0ZW0gPT4gdGhpcy5ub3JtYWxpemVQZXNzb2EoaXRlbSwgVW5iVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EpKSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcGVzcXVpc2FyQ2VwKGNlcDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS9wdWJsaWMvYnVzY2EtY2VwL3NlcnZpY28tMS8ke2NlcH1gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VW5iUGVzc29hRW5kZXJlY28+KHVybCwgdGhpcy5nZXRIZWFkZXJzKCkpLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBTYWx2YXIgKGRlY2lkZSBmaXNpY2Egb3UganVyaWRpY2EpXHJcbiAgc2FsdmFyKHBheWxvYWQ6IGFueSwgdGlwb1Blc3NvYTogVW5iVGlwb1Blc3NvYUVudW0pOiBPYnNlcnZhYmxlPFVuYlBlc3NvYU1vZGVsIHwgbnVsbD4ge1xyXG5cclxuICAgIC8vIChQYXJhIG8gY29tcG9uZW50ZSBjb25zZWd1aXIgbGVyIC5tZW5zYWdlbVNpbXBsZXMgZSAubWVuc2FnZW1IdG1sKVxyXG4gICAgaWYgKCFwYXlsb2FkKSB7XHJcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICh7XHJcbiAgICAgICAgc3RhdHVzOiA0MDAsXHJcbiAgICAgICAgbWVuc2FnZW1TaW1wbGVzOiAnRXJybyBpbnRlcm5vOiBEYWRvcyBwYXJhIHNhbHZhbWVudG8gaW52w6FsaWRvcyAoUGF5bG9hZCBudWxsKS4nLFxyXG4gICAgICAgIG1lbnNhZ2VtSHRtbDogJzxzdHJvbmc+RXJybyBpbnRlcm5vOjwvc3Ryb25nPiBUZW50YXRpdmEgZGUgc2FsdmFyIGRhZG9zIHZhemlvcy4nXHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRpcG9QZXNzb2EpIHtcclxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gKHtcclxuICAgICAgICBzdGF0dXM6IDQwMCxcclxuICAgICAgICBtZW5zYWdlbVNpbXBsZXM6ICdFcnJvIGludGVybm86IFRpcG8gZGUgcGVzc29hIG7Do28gZGVmaW5pZG8uJyxcclxuICAgICAgICBtZW5zYWdlbUh0bWw6ICc8c3Ryb25nPkVycm8gaW50ZXJubzo8L3N0cm9uZz4gTyB0aXBvIGRlIHBlc3NvYSDDqSBvYnJpZ2F0w7NyaW8gcGFyYSBzYWx2YXIuJ1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMi4gRGVsZWdhw6fDo29cclxuICAgIC8vIENvbW8gc2F2ZVBlc3NvYUZpc2ljYSBlIHNhdmVQZXNzb2FKdXJpZGljYSBKw4EgVMOKTSBvIC5waXBlKGNhdGNoRXJyb3IpLFxyXG4gICAgLy8gYXF1aSBuw7NzIGFwZW5hcyByZXRvcm5hbW9zIG8gT2JzZXJ2YWJsZSBkZWxlcy4gTyBlcnJvIHN1Ymlyw6EgdHJhdGFkby5cclxuICAgIGlmICh0aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkZJU0lDQSB8fCB0aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNhdmVQZXNzb2FGaXNpY2EocGF5bG9hZCk7XHJcbiAgICB9IGVsc2UgaWYgKHRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2F2ZVBlc3NvYUp1cmlkaWNhKHBheWxvYWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihudWxsKTtcclxuICB9XHJcblxyXG4gIC8vIFNhbHZhciByZWNlYmVuZG8gZGlyZXRhbWVudGUgbyBNb2RlbCBlIGNvbnZlcnRlbmRvIGludGVybmFtZW50ZSBwYXJhIG8gcGF5bG9hZCBkbyBiYWNrZW5kXHJcbiAgcHVibGljIHNhbHZhclBlc3NvYShwZXNzb2E6IFVuYlBlc3NvYU1vZGVsKTogT2JzZXJ2YWJsZTxVbmJQZXNzb2FNb2RlbCB8IG51bGw+IHtcclxuICAgIGlmICghcGVzc29hKSB7XHJcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICh7XHJcbiAgICAgICAgc3RhdHVzOiA0MDAsXHJcbiAgICAgICAgbWVuc2FnZW1TaW1wbGVzOiAnRXJybyBpbnRlcm5vOiBQZXNzb2EgaW52w6FsaWRhIChudWxsKS4nLFxyXG4gICAgICAgIG1lbnNhZ2VtSHRtbDogJzxzdHJvbmc+RXJybyBpbnRlcm5vOjwvc3Ryb25nPiBPYmpldG8gcGVzc29hIHZhemlvLidcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmNvbnZlcnRQZXNzb2FUb1BheWxvYWQocGVzc29hKTtcclxuICAgIHJldHVybiB0aGlzLnNhbHZhcihwYXlsb2FkLCBwZXNzb2EudGlwb1Blc3NvYSk7XHJcbiAgfVxyXG5cclxuICAvLyBTYWx2YXIgUGVzc29hIEbDrXNpY2FcclxuICBwcml2YXRlIHNhdmVQZXNzb2FGaXNpY2EocGVzc29hOiBVbmJQZXNzb2FNb2RlbCk6IE9ic2VydmFibGU8VW5iUGVzc29hTW9kZWw+IHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0QmFja2VuZFVybCgpO1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB0aGlzLmdldEhlYWRlcnMoKTtcclxuICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwZXNzb2EpO1xyXG5cclxuICAgIC8vIFZhcmnDoXZlbCBwYXJhIGFybWF6ZW5hciBvIE9ic2VydmFibGUgYW50ZXMgZGUgcmV0b3JuYXJcclxuICAgIGxldCByZXF1ZXN0JDogT2JzZXJ2YWJsZTxVbmJQZXNzb2FNb2RlbD47XHJcblxyXG4gICAgaWYgKHBlc3NvYS5jb2RpZ29QZXNzb2EgPT0gbnVsbCkge1xyXG4gICAgICByZXF1ZXN0JCA9IHRoaXMuaHR0cC5wb3N0PFVuYlBlc3NvYU1vZGVsPihgJHt1cmx9L3Blc3NvYS1hcGkvcGVzc29hcy9maXNpY2FzYCwgYm9keSwgaHR0cE9wdGlvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVxdWVzdCQgPSB0aGlzLmh0dHAucHV0PFVuYlBlc3NvYU1vZGVsPihgJHt1cmx9L3Blc3NvYS1hcGkvcGVzc29hcy9maXNpY2FzLyR7cGVzc29hLmNvZGlnb1Blc3NvYX1gLCBib2R5LCBodHRwT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQW50ZXMgZGUgcmV0b3JuYXIsIHBhc3NhbW9zIHBlbG8gJ3BpcGUnIHBhcmEgdHJhdGFyIG8gZXJybyBzZSBlbGUgb2NvcnJlci5cclxuICAgIHJldHVybiByZXF1ZXN0JC5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gU2FsdmFyIFBlc3NvYSBKdXLDrWRpY2FcclxuICBwcml2YXRlIHNhdmVQZXNzb2FKdXJpZGljYShwZXNzb2E6IFVuYlBlc3NvYU1vZGVsKTogT2JzZXJ2YWJsZTxVbmJQZXNzb2FNb2RlbD4ge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5nZXRCYWNrZW5kVXJsKCk7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHRoaXMuZ2V0SGVhZGVycygpO1xyXG4gICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHBlc3NvYSk7XHJcbiAgICBsZXQgcmVxdWVzdCQ6IE9ic2VydmFibGU8VW5iUGVzc29hTW9kZWw+O1xyXG5cclxuICAgIGlmIChwZXNzb2EuY29kaWdvUGVzc29hID09IG51bGwpIHtcclxuICAgICAgcmVxdWVzdCQgPSB0aGlzLmh0dHAucG9zdDxVbmJQZXNzb2FNb2RlbD4oYCR7dXJsfS9wZXNzb2EtYXBpL3Blc3NvYXMvanVyaWRpY2FzYCwgYm9keSwgaHR0cE9wdGlvbnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVxdWVzdCQgPSB0aGlzLmh0dHAucHV0PFVuYlBlc3NvYU1vZGVsPihgJHt1cmx9L3Blc3NvYS1hcGkvcGVzc29hcy9qdXJpZGljYXMvJHtwZXNzb2EuY29kaWdvUGVzc29hfWAsIGJvZHksIGh0dHBPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVxdWVzdCQucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIERhZG9zIGF1eGlsaWFyZXMgcMO6YmxpY29zXHJcbiAgcHVibGljIGdldEVzY29sYXJpZGFkZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFVuYlBlc3NvYUVzY29sYXJpZGFkZVtdPihgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS9wdWJsaWMvZXNjb2xhcmlkYWRlcy9saXN0YWdlbWApLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikgLy8gPC0tLSBBZGljaW9uZSBhcXVpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEVzdGFkb0NpdmlsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VW5iUGVzc29hRXN0YWRvQ2l2aWxbXT4oYCR7dGhpcy5nZXRCYWNrZW5kVXJsKCl9L3Blc3NvYS1hcGkvcHVibGljL2VzdGFkb3MtY2l2aXMvbGlzdGFnZW1gKS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpIC8vIDwtLS0gQWRpY2lvbmUgYXF1aVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRNdW5pY2lwaW9zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VW5iUGVzc29hTXVuaW5jaXBpb1tdPihgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS9wdWJsaWMvbXVuaWNpcGlvcy9saXN0YWdlbWApLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikgLy8gPC0tLSBBZGljaW9uZSBhcXVpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBhaXNlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHsgY29udGVudDogVW5iUGVzc29hUGFpc1tdIH0+KFxyXG4gICAgICBgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS9wdWJsaWMvcGFpc2VzL2xpc3RhZ2VtPyZwYWdlPTAmc2l6ZT0yMDAmc29ydD1kZW5vbWluYWNhbyxhc2NgXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcChyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmNvbnRlbnQuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgLy8gLi4uIHN1YSBsw7NnaWNhIGRlIG9yZGVuYcOnw6NvIC4uLlxyXG4gICAgICAgICAgY29uc3Qgbm9tZUEgPSBhPy5kZW5vbWluYWNhbz8udG9VcHBlckNhc2UoKSB8fCAnJztcclxuICAgICAgICAgIGNvbnN0IG5vbWVCID0gYj8uZGVub21pbmFjYW8/LnRvVXBwZXJDYXNlKCkgfHwgJyc7XHJcbiAgICAgICAgICBpZiAobm9tZUEgPT09ICdCUkFTSUwnKSByZXR1cm4gLTE7XHJcbiAgICAgICAgICBpZiAobm9tZUIgPT09ICdCUkFTSUwnKSByZXR1cm4gMTtcclxuICAgICAgICAgIHJldHVybiBub21lQS5sb2NhbGVDb21wYXJlKG5vbWVCKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmFjYUNvcigpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHN0cmluZ1tdPihgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS9wdWJsaWMvZXRuaWFzL2xpc3RhZ2VtYCkucGlwZShcclxuICAgICAgbWFwKGxpc3RhID0+IGxpc3RhLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgY29kaWdvOiBpbmRleCwgLy8gZ2VyYSB1bSBjw7NkaWdvIG51bcOpcmljbyBzZXF1ZW5jaWFsXHJcbiAgICAgICAgZGVub21pbmFjYW86IHRoaXMuZm9ybWF0YXJMYWJlbChpdGVtKSAvLyBmb3JtYXRhIHNlIHF1aXNlclxyXG4gICAgICB9KSkpLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRpcG9FbmRlcmVjbygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHN0cmluZ1tdPihgJHt0aGlzLmdldEJhY2tlbmRVcmwoKX0vcGVzc29hLWFwaS90aXBvcy1lbmRlcmVjby9wdWJsaWMvbGlzdGFnZW1gKS5waXBlKFxyXG4gICAgICBtYXAobGlzdGEgPT4gbGlzdGEubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcclxuICAgICAgICBjb2RpZ286IGluZGV4LCAvLyBnZXJhIHVtIGPDs2RpZ28gbnVtw6lyaWNvIHNlcXVlbmNpYWxcclxuICAgICAgICBkZW5vbWluYWNhbzogdGhpcy5mb3JtYXRhckxhYmVsKGl0ZW0pIC8vIGZvcm1hdGEgc2UgcXVpc2VyXHJcbiAgICAgIH0pKSksXHJcbiAgICAgIG1hcChsaXN0YSA9PiB7XHJcbiAgICAgICAgdGhpcy50aXBvRW5kZXJlY29DYWNoZSA9IGxpc3RhO1xyXG4gICAgICAgIHJldHVybiBsaXN0YTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VGlwb1RlbGVmb25lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8c3RyaW5nW10+KGAke3RoaXMuZ2V0QmFja2VuZFVybCgpfS9wZXNzb2EtYXBpL3RpcG9zLXRlbGVmb25lL3B1YmxpYy9saXN0YWdlbWApLnBpcGUoXHJcbiAgICAgIG1hcChsaXN0YSA9PiBsaXN0YS5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xyXG4gICAgICAgIGNvZGlnbzogaW5kZXgsIC8vIGdlcmEgdW0gY8OzZGlnbyBudW3DqXJpY28gc2VxdWVuY2lhbFxyXG4gICAgICAgIGRlbm9taW5hY2FvOiB0aGlzLmZvcm1hdGFyTGFiZWwoaXRlbSkgLy8gZm9ybWF0YSBzZSBxdWlzZXJcclxuICAgICAgfSkpKSxcclxuICAgICAgbWFwKGxpc3RhID0+IHtcclxuICAgICAgICB0aGlzLnRpcG9UZWxlZm9uZUNhY2hlID0gbGlzdGE7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RhO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRUaXBvRW1haWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxzdHJpbmdbXT4oYCR7dGhpcy5nZXRCYWNrZW5kVXJsKCl9L3Blc3NvYS1hcGkvdGlwb3MtZW1haWwvcHVibGljL2xpc3RhZ2VtYCkucGlwZShcclxuICAgICAgbWFwKGxpc3RhID0+IGxpc3RhLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgY29kaWdvOiBpbmRleCwgLy8gZ2VyYSB1bSBjw7NkaWdvIG51bcOpcmljbyBzZXF1ZW5jaWFsXHJcbiAgICAgICAgZGVub21pbmFjYW86IHRoaXMuZm9ybWF0YXJMYWJlbChpdGVtKSAvLyBmb3JtYXRhIHNlIHF1aXNlclxyXG4gICAgICB9KSkpLFxyXG4gICAgICBtYXAobGlzdGEgPT4ge1xyXG4gICAgICAgIHRoaXMudGlwb0VtYWlsQ2FjaGUgPSBsaXN0YTtcclxuICAgICAgICByZXR1cm4gbGlzdGE7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRhckxhYmVsKHRleHQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRleHRcclxuICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgLnJlcGxhY2UoL18vZywgJyAnKVxyXG4gICAgICAucmVwbGFjZSgvXFxiXFx3L2csIGwgPT4gbC50b1VwcGVyQ2FzZSgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5vcm1hbGl6YSBvIHBheWxvYWQgcmV0b3JuYWRvIHBlbG8gYmFja2VuZCBwYXJhIGBVbmJQZXNzb2FNb2RlbGAgcHJvbnRvIHBhcmEgVUkuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBub3JtYWxpemVQZXNzb2EocmVzdWx0YWRvOiBVbmJQZXNzb2FNb2RlbCB8IG51bGwsIHRpcG9Gb3JjYWRvPzogVW5iVGlwb1Blc3NvYUVudW0pOiBVbmJQZXNzb2FNb2RlbCB7XHJcbiAgICBjb25zdCBwZXNzb2EgPSAocmVzdWx0YWRvIHx8IG5ldyBVbmJQZXNzb2FNb2RlbCgpKSBhcyBVbmJQZXNzb2FNb2RlbDtcclxuXHJcbiAgICAvLyBEZWZpbmUgdGlwb1Blc3NvYSBxdWFuZG8gbyBlbmRwb2ludCBuw6NvIHJldG9ybmFcclxuICAgIGlmICh0aXBvRm9yY2FkbyAhPSBudWxsKSB7XHJcbiAgICAgIHBlc3NvYS50aXBvUGVzc29hID0gdGlwb0ZvcmNhZG87XHJcbiAgICB9XHJcblxyXG4gICAgLy8gR2FyYW50ZSBhcnJheXNcclxuICAgIHBlc3NvYS5lbmRlcmVjb3MgPSBwZXNzb2EuZW5kZXJlY29zIHx8IFtdO1xyXG4gICAgcGVzc29hLnRlbGVmb25lcyA9IHBlc3NvYS50ZWxlZm9uZXMgfHwgW107XHJcbiAgICBwZXNzb2EuZW1haWxzID0gcGVzc29hLmVtYWlscyB8fCBbXTtcclxuXHJcbiAgICAvLyBTZXhvIC0+IGNvZGlnb1NleG9cclxuICAgIGlmICgocGVzc29hIGFzIGFueSkuc2V4bykge1xyXG4gICAgICBjb25zdCBzZXhvID0gKChwZXNzb2EgYXMgYW55KS5zZXhvIGFzIHN0cmluZykudG9VcHBlckNhc2UoKS50cmltKCk7XHJcbiAgICAgIGlmIChzZXhvID09PSAnRkVNSU5JTk8nKSBwZXNzb2EuY29kaWdvU2V4byA9IDI7XHJcbiAgICAgIGVsc2UgaWYgKHNleG8gPT09ICdNQVNDVUxJTk8nKSBwZXNzb2EuY29kaWdvU2V4byA9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGF0YXMgcGFyYSBEYXRlXHJcbiAgICBwZXNzb2EuZGF0YU5hc2NpbWVudG8gPSB0aGlzLnBhcnNlRGF0YShwZXNzb2EuZGF0YU5hc2NpbWVudG8gYXMgYW55KTtcclxuICAgIC8vIERlbWFpcyBkYXRhcyBwZXJtYW5lY2VtIGNvbW8gc3RyaW5nIHBhcmEgY29tcGF0aWJpbGlkYWRlIGNvbSBvIG1vZGVsXHJcblxyXG4gICAgLy8gQ2FtcG9zIGNvbSAnY29kaWdvIC0gbGFiZWwnIC0+IGNvZGlnb1xyXG4gICAgcGVzc29hLmNvZGlnb0VzdGFkb0NpdmlsID0gdGhpcy5wYXJzZUNvZGlnbygocGVzc29hIGFzIGFueSkuZXN0YWRvQ2l2aWwpO1xyXG4gICAgcGVzc29hLmNvZGlnb1BhaXNOYXNjaW1lbnRvID0gdGhpcy5wYXJzZUNvZGlnbygocGVzc29hIGFzIGFueSkucGFpc05hc2NpbWVudG8pO1xyXG4gICAgcGVzc29hLmVzY29sYXJpZGFkZSA9IHRoaXMucGFyc2VDb2RpZ28oKHBlc3NvYSBhcyBhbnkpLmVzY29sYXJpZGFkZSk7XHJcblxyXG4gICAgLy8gRW5kZXJlw6dvczogb3JkZW0vdWZcclxuICAgIHBlc3NvYS5lbmRlcmVjb3MuZm9yRWFjaCgoZW5kOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICBlbmQub3JkZW1FbmRlcmVjbyA9IGVuZC5vcmRlbUVuZGVyZWNvIHx8IGVuZC5vcmRlbSB8fCAoaSArIDEpO1xyXG4gICAgICBpZiAoIWVuZC51ZkVuZGVyZWNvICYmIGVuZC51ZikgZW5kLnVmRW5kZXJlY28gPSBlbmQudWY7XHJcblxyXG4gICAgICAvLyBNYXBlaWEgdGlwbyBzdHJpbmcgcGFyYSB0aXBvRW5kZXJlY29Db2RpZ28gdXNhbmRvIG8gY2FjaGVcclxuICAgICAgaWYgKCFlbmQudGlwb0VuZGVyZWNvQ29kaWdvICYmIGVuZC50aXBvICYmIHRoaXMudGlwb0VuZGVyZWNvQ2FjaGUpIHtcclxuICAgICAgICBjb25zdCB0aXBvRW5jb250cmFkbyA9IHRoaXMudGlwb0VuZGVyZWNvQ2FjaGUuZmluZCh0ID0+IFxyXG4gICAgICAgICAgdC5kZW5vbWluYWNhbz8udG9Mb3dlckNhc2UoKSA9PT0gU3RyaW5nKGVuZC50aXBvKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGlwb0VuY29udHJhZG8pIGVuZC50aXBvRW5kZXJlY29Db2RpZ28gPSB0aXBvRW5jb250cmFkby5jb2RpZ287XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFRyYWR1eiAncGFpcycgKHN0cmluZyAnMjIgLSBCUkFTSUwnKSBwYXJhICdwYWlzRW5kZXJlY29Db2RpZ28nIChudW1iZXIpXHJcbiAgICAgIGlmICghZW5kLnBhaXNFbmRlcmVjb0NvZGlnbyAmJiBlbmQucGFpcykge1xyXG4gICAgICAgIGVuZC5wYWlzRW5kZXJlY29Db2RpZ28gPSB0aGlzLnBhcnNlQ29kaWdvKGVuZC5wYWlzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVGVsZWZvbmVzOiBvcmRlbSBlIHRpcG9cclxuICAgIHBlc3NvYS50ZWxlZm9uZXMuZm9yRWFjaCgodGVsOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICB0ZWwub3JkZW0gPSB0ZWwub3JkZW0gfHwgKGkgKyAxKTtcclxuICAgICAgXHJcbiAgICAgIC8vIE1hcGVpYSB0aXBvIHN0cmluZyBwYXJhIHRpcG9UZWxlZm9uZUNvZGlnbyB1c2FuZG8gbyBjYWNoZVxyXG4gICAgICBpZiAoIXRlbC50aXBvVGVsZWZvbmVDb2RpZ28gJiYgdGVsLnRpcG8gJiYgdGhpcy50aXBvVGVsZWZvbmVDYWNoZSkge1xyXG4gICAgICAgIGNvbnN0IHRpcG9FbmNvbnRyYWRvID0gdGhpcy50aXBvVGVsZWZvbmVDYWNoZS5maW5kKHQgPT4gXHJcbiAgICAgICAgICB0LmRlbm9taW5hY2FvPy50b0xvd2VyQ2FzZSgpID09PSBTdHJpbmcodGVsLnRpcG8pLnRvTG93ZXJDYXNlKClcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0aXBvRW5jb250cmFkbykgdGVsLnRpcG9UZWxlZm9uZUNvZGlnbyA9IHRpcG9FbmNvbnRyYWRvLmNvZGlnbztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRW1haWxzOiBvcmRlbSBlIHRpcG9cclxuICAgIHBlc3NvYS5lbWFpbHMuZm9yRWFjaCgoZW1haWw6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGVtYWlsLm9yZGVtID0gZW1haWwub3JkZW0gfHwgKGkgKyAxKTtcclxuICAgICAgXHJcbiAgICAgIC8vIE1hcGVpYSB0aXBvIHN0cmluZyBwYXJhIHRpcG9FbWFpbENvZGlnbyB1c2FuZG8gbyBjYWNoZVxyXG4gICAgICBpZiAoIWVtYWlsLnRpcG9FbWFpbENvZGlnbyAmJiBlbWFpbC50aXBvICYmIHRoaXMudGlwb0VtYWlsQ2FjaGUpIHtcclxuICAgICAgICBjb25zdCB0aXBvRW5jb250cmFkbyA9IHRoaXMudGlwb0VtYWlsQ2FjaGUuZmluZCh0ID0+IFxyXG4gICAgICAgICAgdC5kZW5vbWluYWNhbz8udG9Mb3dlckNhc2UoKSA9PT0gU3RyaW5nKGVtYWlsLnRpcG8pLnRvTG93ZXJDYXNlKClcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0aXBvRW5jb250cmFkbykgZW1haWwudGlwb0VtYWlsQ29kaWdvID0gdGlwb0VuY29udHJhZG8uY29kaWdvO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBGb3JtYXRhIGRvY3VtZW50byBwYXJhIFVJXHJcbiAgICBpZiAocGVzc29hLnRpcG9QZXNzb2EgPT09IFVuYlRpcG9QZXNzb2FFbnVtLkZJU0lDQSAmJiBwZXNzb2EuY3BmKSB7XHJcbiAgICAgIGNvbnN0IGRpZ2l0cyA9IFN0cmluZyhwZXNzb2EuY3BmKS5yZXBsYWNlKC9cXEQvZywgJycpO1xyXG4gICAgICAocGVzc29hIGFzIGFueSkuY3BmID0gVW5iVXRpbHMuZm9ybWF0YUNwZihkaWdpdHMpO1xyXG4gICAgfSBlbHNlIGlmIChwZXNzb2EudGlwb1Blc3NvYSA9PT0gVW5iVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EgJiYgcGVzc29hLmNucGopIHtcclxuICAgICAgY29uc3QgZGlnaXRzID0gU3RyaW5nKHBlc3NvYS5jbnBqKS5yZXBsYWNlKC9cXEQvZywgJycpO1xyXG4gICAgICAocGVzc29hIGFzIGFueSkuY25waiA9IFVuYlV0aWxzLmZvcm1hdGFDbnBqKGRpZ2l0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBlc3NvYTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFyc2VDb2RpZ28odmFsb3I6IGFueSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgaWYgKHZhbG9yID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHR5cGVvZiB2YWxvciA9PT0gJ251bWJlcicpIHJldHVybiB2YWxvcjtcclxuICAgIGlmICh0eXBlb2YgdmFsb3IgIT09ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IHNlcEluZGV4ID0gdmFsb3IuaW5kZXhPZignIC0gJyk7XHJcbiAgICBpZiAoc2VwSW5kZXggPT09IC0xKSB7XHJcbiAgICAgIGNvbnN0IG51bSA9IHBhcnNlSW50KHZhbG9yLCAxMCk7XHJcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gbnVsbCA6IG51bTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvZGlnbyA9IHBhcnNlSW50KHZhbG9yLnN1YnN0cmluZygwLCBzZXBJbmRleCkudHJpbSgpLCAxMCk7XHJcbiAgICByZXR1cm4gaXNOYU4oY29kaWdvKSA/IG51bGwgOiBjb2RpZ287XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhcnNlRGF0YShkYXRhU3RyaW5nOiBhbnkpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICBpZiAoIWRhdGFTdHJpbmcpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKGRhdGFTdHJpbmcgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gZGF0YVN0cmluZztcclxuICAgIGlmICh0eXBlb2YgZGF0YVN0cmluZyAhPT0gJ3N0cmluZycgfHwgIWRhdGFTdHJpbmcuaW5jbHVkZXMoJy8nKSkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgcGFydGVzID0gZGF0YVN0cmluZy5zcGxpdCgnLycpO1xyXG4gICAgaWYgKHBhcnRlcy5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgZGlhID0gcGFyc2VJbnQocGFydGVzWzBdLCAxMCk7XHJcbiAgICBjb25zdCBtZXMgPSBwYXJzZUludChwYXJ0ZXNbMV0sIDEwKSAtIDE7XHJcbiAgICBjb25zdCBhbm8gPSBwYXJzZUludChwYXJ0ZXNbMl0sIDEwKTtcclxuICAgIGNvbnN0IGRhdGFPYmogPSBuZXcgRGF0ZShhbm8sIG1lcywgZGlhKTtcclxuICAgIGlmIChkYXRhT2JqLmdldEZ1bGxZZWFyKCkgPT09IGFubyAmJiBkYXRhT2JqLmdldE1vbnRoKCkgPT09IG1lcyAmJiBkYXRhT2JqLmdldERhdGUoKSA9PT0gZGlhKSB7XHJcbiAgICAgIHJldHVybiBkYXRhT2JqO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0ZSB1bWEgaW5zdMOibmNpYSAob3Ugb2JqZXRvKSBkZSBVbmJQZXNzb2FNb2RlbCBwYXJhIG8gcGF5bG9hZCBlc3BlcmFkbyBwZWxvIGJhY2tlbmQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb252ZXJ0UGVzc29hVG9QYXlsb2FkKHBlc3NvYTogVW5iUGVzc29hTW9kZWwpOiBhbnkge1xyXG4gICAgaWYgKCFwZXNzb2EpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGVuZGVyZWNvc1BheWxvYWQgPSAocGVzc29hLmVuZGVyZWNvcyB8fCBbXSkubWFwKChlbmQ6IGFueSkgPT4gKHtcclxuICAgICAgb3JkZW1FbmRlcmVjbzogZW5kLm9yZGVtRW5kZXJlY28sXHJcbiAgICAgIHRpcG9FbmRlcmVjb0NvZGlnbzogZW5kLnRpcG9FbmRlcmVjb0NvZGlnbyxcclxuICAgICAgbXVuaWNpcGlvQ29kaWdvOiBlbmQubXVuaWNpcGlvQ29kaWdvLFxyXG4gICAgICBwYWlzRW5kZXJlY29Db2RpZ286IGVuZC5wYWlzRW5kZXJlY29Db2RpZ28sXHJcbiAgICAgIGxvZ3JhZG91cm86IGVuZC5sb2dyYWRvdXJvLFxyXG4gICAgICBjb21wbGVtZW50bzogZW5kLmNvbXBsZW1lbnRvLFxyXG4gICAgICBjZXA6IGVuZC5jZXAsXHJcbiAgICAgIGJhaXJybzogZW5kLmJhaXJybyxcclxuICAgICAgdWZFbmRlcmVjbzogZW5kLnVmRW5kZXJlY28sXHJcbiAgICAgIGNhaXhhUG9zdGFsOiBlbmQuY2FpeGFQb3N0YWwsXHJcbiAgICAgIGNvcnJlc3BvbmRlbmNpYTogZW5kLmNvcnJlc3BvbmRlbmNpYVxyXG4gICAgfSkpO1xyXG5cclxuICAgIGNvbnN0IHRlbGVmb25lc1BheWxvYWQgPSAocGVzc29hLnRlbGVmb25lcyB8fCBbXSkubWFwKCh0ZWw6IGFueSkgPT4gKHtcclxuICAgICAgb3JkZW1UZWxlZm9uZTogdGVsLm9yZGVtLFxyXG4gICAgICB0aXBvVGVsZWZvbmVDb2RpZ286IHRlbC50aXBvVGVsZWZvbmVDb2RpZ28sXHJcbiAgICAgIGRkaTogdGVsLmRkaSxcclxuICAgICAgZGRkOiB0ZWwuZGRkLFxyXG4gICAgICBudW1lcm9UZWxlZm9uZTogdGVsLm51bWVybyxcclxuICAgICAgcmFtYWw6IHRlbC5yYW1hbCxcclxuICAgICAgYXV0b3JpemFTTVM6IHRlbC5hdXRvcml6YVNNU1xyXG4gICAgfSkpO1xyXG5cclxuICAgIGNvbnN0IGVtYWlsc1BheWxvYWQgPSAocGVzc29hLmVtYWlscyB8fCBbXSkubWFwKChlbWFpbDogYW55KSA9PiAoe1xyXG4gICAgICB0aXBvRW1haWxDb2RpZ286IGVtYWlsLnRpcG9FbWFpbENvZGlnbyxcclxuICAgICAgb3JkZW1FbWFpbDogZW1haWwub3JkZW0sXHJcbiAgICAgIGVtYWlsOiBlbWFpbC5lbWFpbCxcclxuICAgICAgYXV0b3JpemFjYW86IGVtYWlsLmF1dG9yaXphY2FvXHJcbiAgICB9KSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaWRQZXNzb2E6IHBlc3NvYS5pZFBlc3NvYSxcclxuICAgICAgY29kaWdvUGVzc29hOiBwZXNzb2EuY29kaWdvUGVzc29hLFxyXG5cclxuICAgICAgbm9tZTogcGVzc29hLm5vbWUsXHJcbiAgICAgIG5vbWVTb2NpYWw6IHBlc3NvYS5ub21lU29jaWFsLFxyXG4gICAgICAuLi4ocGVzc29hLmNwZiAmJiB7IGNwZjogcGVzc29hLmNwZi5yZXBsYWNlKC9cXEQvZywgJycpIH0pLFxyXG4gICAgICBjb2RpZ29TZXhvOiBwZXNzb2EuY29kaWdvU2V4byxcclxuICAgICAgY29kaWdvRXN0YWRvQ2l2aWw6IHBlc3NvYS5jb2RpZ29Fc3RhZG9DaXZpbCxcclxuICAgICAgY29kaWdvRXNjb2xhcmlkYWRlOiBwZXNzb2EuZXNjb2xhcmlkYWRlLFxyXG4gICAgICBub21lUGFpOiBwZXNzb2Eubm9tZVBhaSxcclxuICAgICAgbm9tZU1hZTogcGVzc29hLm5vbWVNYWUsXHJcblxyXG4gICAgICBkYXRhTmFzY2ltZW50bzogdGhpcy5mb3JtYXRhckRhdGFQYXJhQmFja2VuZChwZXNzb2EuZGF0YU5hc2NpbWVudG8pLFxyXG4gICAgICBjb2RpZ29QYWlzTmFzY2ltZW50bzogcGVzc29hLmNvZGlnb1BhaXNOYXNjaW1lbnRvLFxyXG4gICAgICB1Zk5hc2NpbWVudG86IHBlc3NvYS51Zk5hc2NpbWVudG8sXHJcbiAgICAgIG5hdHVyYWxpZGFkZTogcGVzc29hLm5hdHVyYWxpZGFkZSxcclxuICAgICAgZGF0YUNoZWdhZGFCcmFzaWw6IHRoaXMuZm9ybWF0YXJEYXRhUGFyYUJhY2tlbmQocGVzc29hLmRhdGFDaGVnYWRhQnJhc2lsIGFzIGFueSksXHJcblxyXG4gICAgICByZzogcGVzc29hLnJnLFxyXG4gICAgICByZ09yZ2FvOiBwZXNzb2EucmdPcmdhbyxcclxuICAgICAgcmdVZjogcGVzc29hLnJnVWYsXHJcbiAgICAgIHJnRGF0YUVtaXNzYW86IHRoaXMuZm9ybWF0YXJEYXRhUGFyYUJhY2tlbmQocGVzc29hLnJnRGF0YUVtaXNzYW8pLFxyXG5cclxuICAgICAgbnVtZXJvVGl0dWxvRWxlaXRvcjogcGVzc29hLm51bWVyb1RpdHVsb0VsZWl0b3IsXHJcbiAgICAgIGRhdGFFbWlzc2FvVGl0dWxvRWxlaXRvcjogdGhpcy5mb3JtYXRhckRhdGFQYXJhQmFja2VuZChwZXNzb2EuZGF0YUVtaXNzYW9UaXR1bG9FbGVpdG9yKSxcclxuICAgICAgem9uYVRpdHVsb0VsZWl0b3I6IHBlc3NvYS56b25hVGl0dWxvRWxlaXRvcixcclxuICAgICAgc2VjYW9UaXR1bG9FbGVpdG9yOiBwZXNzb2Euc2VjYW9UaXR1bG9FbGVpdG9yLFxyXG4gICAgICB1ZlRpdHVsb0VsZWl0b3I6IHBlc3NvYS51ZlRpdHVsb0VsZWl0b3IsXHJcblxyXG4gICAgICBudW1lcm9SZXNlcnZpc3RhOiBwZXNzb2EubnVtZXJvUmVzZXJ2aXN0YSxcclxuICAgICAgc2VyaWVSZXNlcnZpc3RhOiBwZXNzb2Euc2VyaWVSZXNlcnZpc3RhLFxyXG4gICAgICBvcmdhb1Jlc2VydmlzdGE6IHBlc3NvYS5vcmdhb1Jlc2VydmlzdGEsXHJcblxyXG4gICAgICBudW1lcm9DYXJ0ZWlyYVRyYWJhbGhvOiBwZXNzb2EubnVtZXJvQ2FydGVpcmFUcmFiYWxobyxcclxuICAgICAgc2VyaWVDYXJ0ZWlyYVRyYWJhbGhvOiBwZXNzb2Euc2VyaWVDYXJ0ZWlyYVRyYWJhbGhvLFxyXG4gICAgICB1ZkNhcnRlaXJhVHJhYmFsaG86IHBlc3NvYS51ZkNhcnRlaXJhVHJhYmFsaG8sXHJcbiAgICAgIHBpc1Bhc2VwOiBwZXNzb2EucGlzUGFzZXAsXHJcblxyXG4gICAgICBudW1lcm9IYWJpbGl0YWNhbzogcGVzc29hLm51bWVyb0hhYmlsaXRhY2FvLFxyXG4gICAgICByZWdpc3Ryb0hhYmlsaXRhY2FvOiBwZXNzb2EucmVnaXN0cm9IYWJpbGl0YWNhbyxcclxuICAgICAgZGF0YUVtaXNzYW9IYWJpbGl0YWNhbzogdGhpcy5mb3JtYXRhckRhdGFQYXJhQmFja2VuZChwZXNzb2EuZGF0YUVtaXNzYW9IYWJpbGl0YWNhbyksXHJcbiAgICAgIGRhdGFWYWxpZGFkZUhhYmlsaXRhY2FvOiB0aGlzLmZvcm1hdGFyRGF0YVBhcmFCYWNrZW5kKHBlc3NvYS5kYXRhVmFsaWRhZGVIYWJpbGl0YWNhbyksXHJcbiAgICAgIGNhdGVnb3JpYUhhYmlsaXRhY2FvOiBwZXNzb2EuY2F0ZWdvcmlhSGFiaWxpdGFjYW8sXHJcbiAgICAgIGRlZmljaWVuY2lhRmlzaWNhSGFiaWxpdGFjYW86IHBlc3NvYS5kZWZpY2llbmNpYUZpc2ljYUhhYmlsaXRhY2FvLFxyXG4gICAgICBwcmltZWlyYUhhYmlsaXRhY2FvOiB0aGlzLmZvcm1hdGFyRGF0YVBhcmFCYWNrZW5kKHBlc3NvYS5wcmltZWlyYUhhYmlsaXRhY2FvKSxcclxuXHJcbiAgICAgIHBhc3NhcG9ydGU6IHBlc3NvYS5wYXNzYXBvcnRlLFxyXG4gICAgICBjb2RpZ29QYWlzUGFzc2Fwb3J0ZTogcGVzc29hLmNvZGlnb1BhaXNQYXNzYXBvcnRlLFxyXG4gICAgICAuLi4ocGVzc29hLmNucGogJiYgeyBjbnBqOiBwZXNzb2EuY25wai5yZXBsYWNlKC9cXEQvZywgJycpIH0pLFxyXG4gICAgICByYXphb1NvY2lhbDogcGVzc29hLnJhemFvU29jaWFsLFxyXG4gICAgICBub21lRmFudGFzaWE6IHBlc3NvYS5ub21lRmFudGFzaWEsXHJcbiAgICAgIHNpZ2xhOiBwZXNzb2Euc2lnbGEsXHJcbiAgICAgIHBhZ2luYVdlYjogcGVzc29hLnBhZ2luYVdlYixcclxuXHJcbiAgICAgIGF1dG9DYWRhc3RybzogcGVzc29hLmF1dG9DYWRhc3RybyxcclxuXHJcbiAgICAgIGVuZGVyZWNvczogZW5kZXJlY29zUGF5bG9hZCxcclxuICAgICAgdGVsZWZvbmVzOiB0ZWxlZm9uZXNQYXlsb2FkLFxyXG4gICAgICBlbWFpbHM6IGVtYWlsc1BheWxvYWRcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXRhIGEgZGF0YSBubyBwYWRyw6NvIEREL01NL1lZWVkgcGFyYSBvIGJhY2tlbmQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBmb3JtYXRhckRhdGFQYXJhQmFja2VuZChkYXRhOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghZGF0YSkgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnICYmIGRhdGEuaW5jbHVkZXMoJy8nKSkgcmV0dXJuIGRhdGE7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGEpO1xyXG4gICAgICBpZiAoaXNOYU4oZC5nZXRUaW1lKCkpKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IGRpYSA9IFN0cmluZyhkLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgY29uc3QgbWVzID0gU3RyaW5nKGQuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgIGNvbnN0IGFubyA9IGQuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgcmV0dXJuIGAke2RpYX0vJHttZXN9LyR7YW5vfWA7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIEhBTkRMRSBFUlJPUiBQQURST05JWkFETyBcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgcHJpdmF0ZSBoYW5kbGVFcnJvciA9IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICBsZXQgbWVuc2FnZW1TaW1wbGVzID0gJ09jb3JyZXUgdW0gZXJybyBhbyBwcm9jZXNzYXIgYSByZXF1aXNpw6fDo28hJztcclxuICAgIGxldCBtZW5zYWdlbUh0bWwgPSAnPHN0cm9uZz5PY29ycmV1IHVtIGVycm8gZGVzY29uaGVjaWRvLjwvc3Ryb25nPic7XHJcblxyXG4gICAgLy8gMi4gRGVzY29icmUgcXVlbSDDqSBvIGNvcnBvIGRvIGVycm9cclxuICAgIGxldCBlcnJvckJvZHk6IGFueTtcclxuXHJcbiAgICBpZiAoZXJyb3IuZGV0YWxoZXMgfHwgZXJyb3IuY29kaWdvU3RhdHVzKSB7XHJcbiAgICAgIC8vIENBU08gMTogTyBJbnRlcmNlcHRvciBqw6EgZGVzZW1icnVsaG91IG8gZXJybyAow6kgbyBKU09OIHB1cm8pXHJcbiAgICAgIGVycm9yQm9keSA9IGVycm9yO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQ0FTTyAyOiDDiSB1bSBIdHRwRXJyb3JSZXNwb25zZSBwYWRyw6NvICh0ZW0gYSBwcm9wcmllZGFkZSAuZXJyb3IpXHJcbiAgICAgIGVycm9yQm9keSA9IGVycm9yLmVycm9yIHx8IGVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDMuIEzDs2dpY2EgZGUgTGltcGV6YSBlIFBhcnNlIChzZSBmb3Igc3RyaW5nIHN1amEpXHJcbiAgICBpZiAodHlwZW9mIGVycm9yQm9keSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBlcnJvckJvZHkgPSBKU09OLnBhcnNlKGVycm9yQm9keSk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zdCBzdGFydCA9IGVycm9yQm9keS5pbmRleE9mKCd7Jyk7XHJcbiAgICAgICAgY29uc3QgZW5kID0gZXJyb3JCb2R5Lmxhc3RJbmRleE9mKCd9Jyk7XHJcbiAgICAgICAgaWYgKHN0YXJ0ID4gLTEgJiYgZW5kID4gc3RhcnQpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGVycm9yQm9keSA9IEpTT04ucGFyc2UoZXJyb3JCb2R5LnN1YnN0cmluZyhzdGFydCwgZW5kICsgMSkpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZTIpIHtcclxuICAgICAgICAgICAgLy8gU2UgZmFsaGFyIG8gcGFyc2UsIHVzYSBvIHRleHRvIGNvbW8gbWVuc2FnZW1cclxuICAgICAgICAgICAgbWVuc2FnZW1TaW1wbGVzID0gZXJyb3JCb2R5LnN1YnN0cmluZygwLCAyMDApO1xyXG4gICAgICAgICAgICBtZW5zYWdlbUh0bWwgPSBgPHN0cm9uZz4ke2Vycm9yQm9keX08L3N0cm9uZz5gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIDQuIEZvcm1hdGHDp8OjbyBiYXNlYWRhIG5vIEpTT04gaWRlbnRpZmljYWRvXHJcbiAgICBpZiAoZXJyb3JCb2R5ICYmIHR5cGVvZiBlcnJvckJvZHkgPT09ICdvYmplY3QnKSB7XHJcblxyXG4gICAgICAvLyBBOiBFcnJvcyBkZSBWYWxpZGHDp8Ojb1xyXG4gICAgICBpZiAoZXJyb3JCb2R5LmRldGFsaGVzICYmIEFycmF5LmlzQXJyYXkoZXJyb3JCb2R5LmRldGFsaGVzKSAmJiBlcnJvckJvZHkuZGV0YWxoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIG1lbnNhZ2VtU2ltcGxlcyA9IFwiTyBmb3JtdWzDoXJpbyBwb3NzdWkgZXJyb3MgZGUgdmFsaWRhw6fDo28uXCI7XHJcblxyXG4gICAgICAgIGNvbnN0IGxpc3RhRXJyb3MgPSBlcnJvckJvZHkuZGV0YWxoZXMubWFwKChkOiBhbnkpID0+XHJcbiAgICAgICAgICBgPGxpPjxzdHJvbmc+JHtkLm5vbWVDYW1wbyB8fCAnQ2FtcG8nfTo8L3N0cm9uZz4gJHtkLmNyaXRpY2EgfHwgZC5tZW5zYWdlbX08L2xpPmBcclxuICAgICAgICApLmpvaW4oJycpO1xyXG5cclxuICAgICAgICBtZW5zYWdlbUh0bWwgPSBgPHN0cm9uZz5FcnJvcyBkZSBWYWxpZGHDp8Ojbzo8L3N0cm9uZz4gPHVsPiR7bGlzdGFFcnJvc308L3VsPmA7XHJcbiAgICAgIH1cclxuICAgICAgLy8gQjogRXJybyBHZW7DqXJpY28gY29tIG1lbnNhZ2VtXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG1zZ0JhY2tlbmQgPSBlcnJvckJvZHkubWVuc2FnZW0gfHwgZXJyb3JCb2R5Lm1lc3NhZ2UgfHwgZXJyb3JCb2R5LmRldGFpbDtcclxuICAgICAgICBpZiAobXNnQmFja2VuZCkge1xyXG4gICAgICAgICAgbWVuc2FnZW1TaW1wbGVzID0gbXNnQmFja2VuZDtcclxuICAgICAgICAgIG1lbnNhZ2VtSHRtbCA9IGA8c3Ryb25nPiR7bXNnQmFja2VuZH08L3N0cm9uZz5gO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIDUuIFRyYXRhbWVudG9zIGRlIFN0YXR1cyBIVFRQIChTZSBvIHdyYXBwZXIgb3JpZ2luYWwgdGl2ZXIgc3RhdHVzKVxyXG4gICAgLy8gTm90YTogU2UgbyBpbnRlcmNlcHRvciBkZXNlbWJydWxob3UsICdlcnJvci5zdGF0dXMnIHBvZGUgbsOjbyBleGlzdGlyLCBcclxuICAgIC8vIG1hcyAnZXJyb3JCb2R5LmNvZGlnb1N0YXR1cycgKGRvIEphdmEpIHBvZGUgZXhpc3Rpci5cclxuICAgIGNvbnN0IHN0YXR1cyA9IGVycm9yLnN0YXR1cyB8fCBlcnJvckJvZHk/LmNvZGlnb1N0YXR1cyB8fCAwO1xyXG5cclxuICAgIGlmIChzdGF0dXMgPT09IDQwMSkge1xyXG4gICAgICBtZW5zYWdlbVNpbXBsZXMgPSBcIlNlc3PDo28gZXhwaXJhZGEuXCI7XHJcbiAgICAgIG1lbnNhZ2VtSHRtbCA9IFwiPHN0cm9uZz5TZXNzw6NvIGV4cGlyYWRhLiBGYcOnYSBsb2dpbiBub3ZhbWVudGUuPC9zdHJvbmc+XCI7XHJcbiAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAzKSB7XHJcbiAgICAgIG1lbnNhZ2VtU2ltcGxlcyA9IFwiQWNlc3NvIE5lZ2Fkby5cIjtcclxuICAgICAgbWVuc2FnZW1IdG1sID0gXCI8c3Ryb25nPlZvY8OqIG7Do28gdGVtIHBlcm1pc3PDo28gcGFyYSByZWFsaXphciBlc3RhIGHDp8Ojby48L3N0cm9uZz5cIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlcnJvRm9ybWF0YWRvOiBVbmJQZXNzb2FFcnJvUGFkcmFvID0ge1xyXG4gICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgbWVuc2FnZW1TaW1wbGVzLFxyXG4gICAgICBtZW5zYWdlbUh0bWxcclxuICAgIH07XHJcblxyXG4gICAgY29uc29sZS53YXJuKCdbVW5CUGVzc29hU2VydmljZV0gRXJybyBmb3JtYXRhZG8gZmluYWw6JywgZXJyb0Zvcm1hdGFkbyk7XHJcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvRm9ybWF0YWRvKTtcclxuICB9XHJcbn0iXX0=
|