@stiunb/unb-lib-components 18.0.22 → 18.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.mjs +34 -11
  2. package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.mjs +65 -47
  3. package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.mjs +102 -14
  4. package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.mjs +71 -55
  5. package/esm2022/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.mjs +227 -42
  6. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.mjs +1 -1
  7. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.mjs +1 -1
  8. package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.mjs +2 -1
  9. package/esm2022/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.mjs +141 -8
  10. package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.mjs +62 -8
  11. package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.mjs +62 -32
  12. package/esm2022/lib/unb-pessoa/unb-pessoa.module.mjs +9 -1
  13. package/esm2022/lib/unb-pessoa/unb-pessoa.service.mjs +9 -9
  14. package/esm2022/lib/unb-pessoa/unb-tipo-pessoa.enum.mjs +1 -1
  15. package/esm2022/lib/unb-usuario/oidc-decoded-token.mjs +1 -1
  16. package/esm2022/lib/unb-usuario/oidc-user-data.mjs +1 -1
  17. package/esm2022/public-api.mjs +14 -13
  18. package/esm2022/stiunb-unb-lib-components.mjs +5 -0
  19. package/fesm2022/stiunb-unb-lib-components.mjs +2469 -0
  20. package/fesm2022/stiunb-unb-lib-components.mjs.map +1 -0
  21. package/index.d.ts +1 -1
  22. package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.d.ts +3 -3
  23. package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.d.ts +6 -5
  24. package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.d.ts +6 -3
  25. package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.d.ts +6 -5
  26. package/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.d.ts +17 -5
  27. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.d.ts +1 -0
  28. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.d.ts +3 -2
  29. package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.d.ts +5 -4
  30. package/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.d.ts +14 -1
  31. package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.d.ts +2 -2
  32. package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.d.ts +6 -5
  33. package/lib/unb-pessoa/unb-pessoa.module.d.ts +20 -18
  34. package/lib/unb-pessoa/unb-pessoa.service.d.ts +2 -1
  35. package/package.json +5 -5
  36. package/public-api.d.ts +10 -10
  37. package/esm2022/unb-lib-components.mjs +0 -5
  38. package/fesm2022/unb-lib-components.mjs +0 -1923
  39. package/fesm2022/unb-lib-components.mjs.map +0 -1
@@ -1,12 +1,14 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { UnbPessoaEnderecoFormComponent } from './unb-pessoa-endereco-form';
3
+ import { moveItemInArray } from '@angular/cdk/drag-drop';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@angular/material/snack-bar";
5
6
  import * as i2 from "../unb-pessoa.service";
6
7
  import * as i3 from "@angular/material/dialog";
7
8
  import * as i4 from "@angular/common";
8
9
  import * as i5 from "@angular/material/icon";
9
- import * as i6 from "@angular/material/button";
10
+ import * as i6 from "@angular/cdk/drag-drop";
11
+ import * as i7 from "@angular/material/button";
10
12
  export class UnbPessoaenderecoListComponent {
11
13
  constructor(snackBar, service, dialog) {
12
14
  this.snackBar = snackBar;
@@ -20,26 +22,32 @@ export class UnbPessoaenderecoListComponent {
20
22
  ngOnInit() {
21
23
  this.sortAndAssignOrder(); // organiza a lista de enderecos. As vezes tem ordem duplicada ou faltando.
22
24
  }
23
- excluir(endereco) {
25
+ // tem que fazer isso pq no on init eu ainda nao tenho a lista
26
+ ngOnChanges(changes) {
27
+ // Verifica se a propriedade 'enderecos' mudou
28
+ if (changes['enderecos'] && this.enderecos) {
29
+ // chamada quando os dados realmente chegarem
30
+ this.sortAndAssignOrder();
31
+ }
24
32
  }
25
- editar(endereco) {
26
- this.openFormDialog(endereco);
27
- }
28
- moverParaCima(index) {
29
- if (index <= 0)
30
- return;
31
- [this.enderecos[index - 1], this.enderecos[index]] = [this.enderecos[index], this.enderecos[index - 1]];
33
+ excluir(enderecoParaExcluir) {
34
+ if (enderecoParaExcluir.codigo) {
35
+ // Se tem código, remove por ele (mais seguro)
36
+ this.enderecos = this.enderecos.filter(t => t.codigo !== enderecoParaExcluir.codigo);
37
+ }
38
+ else {
39
+ // Se não tem código (novo item), remove pela ordem
40
+ this.enderecos = this.enderecos.filter(t => t.ordemEndereco !== enderecoParaExcluir.ordemEndereco);
41
+ }
42
+ // Chama função existente que re-calcula as ordens e emite a lista atualizada
32
43
  this.atualizarOrdem();
33
44
  }
34
- moverParaBaixo(index) {
35
- if (index >= this.enderecos.length - 1)
36
- return;
37
- [this.enderecos[index], this.enderecos[index + 1]] = [this.enderecos[index + 1], this.enderecos[index]];
38
- this.atualizarOrdem();
45
+ editar(endereco) {
46
+ this.openFormDialog(endereco);
39
47
  }
40
48
  atualizarOrdem() {
41
49
  this.enderecos.forEach((endereco, idx) => {
42
- endereco.ordem = idx + 1;
50
+ endereco.ordemEndereco = idx + 1;
43
51
  });
44
52
  this.enderecosEmitted.emit(this.enderecos);
45
53
  }
@@ -52,44 +60,55 @@ export class UnbPessoaenderecoListComponent {
52
60
  },
53
61
  });
54
62
  dialogRef.afterClosed().subscribe(result => {
55
- if (result) {
56
- const index = this.enderecos.findIndex(e => e.codigo === result.codigo);
57
- if (result.codigo && index > -1) {
58
- // Atualiza e-mail existente
59
- this.enderecos[index] = result;
60
- }
61
- else {
62
- // Adiciona novo e-mail (gera ordem automaticamente se quiser)
63
- result.ordem = this.enderecos.length + 1;
64
- this.enderecos.push(result);
65
- }
66
- // Emite lista atualizada
67
- this.enderecosEmitted.emit(this.enderecos);
63
+ if (!result) {
64
+ return; // Usuário clicou em 'Fechar' ou 'Cancelar'
65
+ }
66
+ let index = -1;
67
+ // 1. Tenta encontrar pelo 'codigo' (para itens que já vieram do banco)
68
+ if (result.codigo) {
69
+ index = this.enderecos.findIndex(t => t.codigo === result.codigo);
70
+ }
71
+ // 2. Se não achou pelo 'codigo', tenta pela 'ordem'.
72
+ if (index === -1 && result.ordemEndereco) {
73
+ index = this.enderecos.findIndex(t => t.ordemEndereco === result.ordemEndereco);
74
+ }
75
+ if (index > -1) {
76
+ // ENCONTROU (pelo 'codigo' ou pela 'ordem'): Atualiza o item existente
77
+ this.enderecos[index] = result;
68
78
  }
79
+ else {
80
+ // NÃO ENCONTROU: É um item 100% novo (não uma edição) adiciona no fim
81
+ this.enderecos.push(result);
82
+ }
83
+ this.enderecos.sort((a, b) => (a.ordemEndereco ?? 0) - (b.ordemEndereco ?? 0)); //
84
+ this.enderecosEmitted.emit([...this.enderecos]);
69
85
  });
70
86
  }
87
+ moverLinha(event) {
88
+ moveItemInArray(this.enderecos, event.previousIndex, event.currentIndex);
89
+ this.atualizarOrdem();
90
+ }
71
91
  sortAndAssignOrder() {
72
- // 1. Crie uma cópia da lista para não modificar a original durante a iteração inicial
92
+ // 1. Crie uma cópia da lista
73
93
  const tempenderecos = [...this.enderecos];
74
- // 2. Mapeie as ordens existentes para identificar duplicatas e ausentes
94
+ // 2. Mapeie as ordens existentes
75
95
  const orderMap = new Map();
76
96
  const enderecosWithoutOrder = [];
77
97
  tempenderecos.forEach(endereco => {
78
- if (endereco.ordem !== undefined && endereco.ordem !== null) {
79
- if (!orderMap.has(endereco.ordem)) {
80
- orderMap.set(endereco.ordem, []);
98
+ // CORREÇÃO AQUI:
99
+ if (endereco.ordemEndereco !== undefined && endereco.ordemEndereco !== null) {
100
+ if (!orderMap.has(endereco.ordemEndereco)) {
101
+ orderMap.set(endereco.ordemEndereco, []);
81
102
  }
82
- orderMap.get(endereco.ordem)?.push(endereco);
103
+ orderMap.get(endereco.ordemEndereco)?.push(endereco);
83
104
  }
84
105
  else {
85
106
  enderecosWithoutOrder.push(endereco);
86
107
  }
87
108
  });
88
- // 3. Inicialize um Set para rastrear todas as ordens que serão usadas no final
109
+ // 3. ... (Funções 'finalUsedOrders', 'nextAvailableOrder' continuam iguais) ...
89
110
  const finalUsedOrders = new Set();
90
- // Inicialize o próximo valor de ordem disponível
91
111
  let nextAvailableOrder = 0;
92
- // Função auxiliar para encontrar a próxima ordem disponível
93
112
  const getNextAvailableOrder = () => {
94
113
  while (finalUsedOrders.has(nextAvailableOrder)) {
95
114
  nextAvailableOrder++;
@@ -97,36 +116,33 @@ export class UnbPessoaenderecoListComponent {
97
116
  return nextAvailableOrder++;
98
117
  };
99
118
  // 4. Processe enderecos com ordem definida:
100
- // - A primeira ocorrência de uma ordem a mantém.
101
- // - Duplicatas recebem uma nova ordem.
102
- // - Adicione as ordens válidas ao finalUsedOrders.
103
119
  this.enderecos.forEach(endereco => {
104
- if (endereco.ordem !== undefined && endereco.ordem !== null) {
105
- if (!finalUsedOrders.has(endereco.ordem)) {
106
- // Se a ordem ainda não foi usada, use-a e adicione ao set
107
- finalUsedOrders.add(endereco.ordem);
120
+ // CORREÇÃO AQUI:
121
+ if (endereco.ordemEndereco !== undefined && endereco.ordemEndereco !== null) {
122
+ if (!finalUsedOrders.has(endereco.ordemEndereco)) {
123
+ finalUsedOrders.add(endereco.ordemEndereco);
108
124
  }
109
125
  else {
110
- // Se a ordem já foi usada (é uma duplicata), atribua uma nova
111
- endereco.ordem = getNextAvailableOrder();
112
- finalUsedOrders.add(endereco.ordem); // Adiciona a nova ordem ao set
126
+ // Duplicata, atribua uma nova
127
+ endereco.ordemEndereco = getNextAvailableOrder();
128
+ finalUsedOrders.add(endereco.ordemEndereco);
113
129
  }
114
130
  }
115
131
  });
116
- // 5. Atribua ordens para enderecos que não tinham ordem definida
132
+ // 5. Atribua ordens para enderecos que não tinham ordem
117
133
  enderecosWithoutOrder.forEach(endereco => {
118
- endereco.ordemEndereco = getNextAvailableOrder();
119
- finalUsedOrders.add(endereco.ordemEndereco); // Adiciona a nova ordem ao set
134
+ endereco.ordemEndereco = getNextAvailableOrder(); //
135
+ finalUsedOrders.add(endereco.ordemEndereco); //
120
136
  });
121
- // 6. Finalmente, ordene a lista completa com as ordens agora únicas
122
- this.enderecos.sort((a, b) => (a.ordemEndereco ?? 0) - (b.ordemEndereco ?? 0));
137
+ // 6. Finalmente, ordene a lista
138
+ this.enderecos.sort((a, b) => (a.ordemEndereco ?? 0) - (b.ordemEndereco ?? 0)); //
123
139
  }
124
140
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaenderecoListComponent, deps: [{ token: i1.MatSnackBar }, { token: i2.UnBPessoaService }, { token: i3.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
125
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: UnbPessoaenderecoListComponent, selector: "lib-unb-pessoa-endereco-list", inputs: { podeEditar: "podeEditar", enderecos: "enderecos", apiPessoaConfig: "apiPessoaConfig" }, outputs: { enderecosEmitted: "enderecosEmitted" }, ngImport: i0, template: "<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ enderecos?.length === 1 ? 'Endere\u00E7o Cadastrado' : 'Endere\u00E7os Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ enderecos?.length || 0 }})</span>\r\n </div>\r\n\r\n <button matTooltip=\"Novo Endere\u00E7o\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Endere\u00E7o\r\n </button>\r\n </div>\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"enderecos && enderecos.length > 0\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"text-align: center;\" >Ordem</th>\r\n <th>Logradouro</th>\r\n <th>Bairro</th>\r\n <th>CEP</th>\r\n <th>Tipo</th>\r\n <th style=\"text-align: center;\">A\u00E7\u00F5es</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of enderecos; let i = index\" class=\"my-tr\">\r\n <td style=\"width: 5%; text-align: center;\"> \r\n <button *ngIf=\"enderecos.length > 1 && i > 0\" mat-icon-button aria-label=\"Mover para cima\"\r\n (click)=\"moverParaCima(i)\">\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button *ngIf=\"enderecos.length > 1 && i < enderecos.length - 1\" mat-icon-button aria-label=\"Mover para baixo\"\r\n (click)=\"moverParaBaixo(i)\">\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n </td>\r\n <td style=\"width: 20%;\">{{ valor.logradouro }}</td>\r\n <td style=\"width: 20%;\">{{ valor.bairro }}</td>\r\n <td style=\"width: 10%;\">{{ valor.cep }}</td>\r\n <td style=\"width: 10%;\">{{ valor.tipo?.toUpperCase() }}</td>\r\n <td style=\"width: 20%; text-align: center;\">\r\n <button mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>", styles: [".mes-container{padding:12px;margin-bottom:2px;border-radius:8px;box-shadow:0 2px 6px #0000001a;transition:background-color .3s ease,box-shadow .3s ease}.mes-container:nth-child(2n){background-color:#f9f9fc}.mes-container:nth-child(odd){background-color:#fff}.mes-container:hover{background-color:#f0f0f5;box-shadow:0 4px 8px #00000026}.header-container{display:flex;align-items:center;margin-bottom:2px}.header-container button{margin-left:auto}.mes-header{display:flex;align-items:center;gap:6px;font-size:1.2rem;font-weight:700;color:#333}.my-table{width:100%;border-collapse:collapse;border-radius:8px;overflow:hidden;box-shadow:0 4px 8px #0000001a;font-family:Arial,sans-serif}.my-table th,.my-table td{padding:5px;text-align:left;border-bottom:1px solid #ddd}.my-table th{background-color:#005dbb7b;color:#fff;font-weight:700}.my-table tr{transition:background-color .3s ease}.my-table tr:hover{background-color:#f1f1f1}.my-table td{background-color:#fff}.my-table td button{transition:transform .2s ease}.my-table td button:hover{transform:scale(1.1)}.my-table td:last-child{text-align:center}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }] }); }
141
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: UnbPessoaenderecoListComponent, selector: "lib-unb-pessoa-endereco-list", inputs: { podeEditar: "podeEditar", enderecos: "enderecos", apiPessoaConfig: "apiPessoaConfig" }, outputs: { enderecosEmitted: "enderecosEmitted" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ enderecos?.length === 1 ? 'Endere\u00E7o Cadastrado' : 'Endere\u00E7os Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ enderecos?.length || 0 }})</span>\r\n </div>\r\n\r\n <button type=\"button\" matTooltip=\"Novo Endere\u00E7o\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Endere\u00E7o\r\n </button>\r\n </div>\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"enderecos && enderecos.length > 0\" cdkDropList\r\n (cdkDropListDropped)=\"moverLinha($event)\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"width: 5%; text-align: center;\">Ordem</th>\r\n <th>Logradouro</th>\r\n <th>Bairro</th>\r\n <th>CEP</th>\r\n <th>Tipo</th>\r\n <th style=\"width: 1%; text-align: center;\">A\u00E7\u00F5es</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of enderecos; let i = index\" class=\"my-tr\" cdkDrag>\r\n <td style=\"width: 5%; text-align: center;\">\r\n <div class=\"drag-cell\" cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n <span>{{ i + 1 }}</span>\r\n </div>\r\n </td>\r\n <td>{{ valor.logradouro }}</td>\r\n <td>{{ valor.bairro }}</td>\r\n <td>{{ valor.cep }}</td>\r\n <td>{{ valor.tipo?.toUpperCase() }}</td>\r\n <td>\r\n <div class=\"actions-container\">\r\n <button type=\"button\" mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>", styles: [".mes-container{padding:12px;margin-bottom:2px;border-radius:8px;box-shadow:0 2px 6px #0000001a;transition:background-color .3s ease,box-shadow .3s ease}.mes-container:nth-child(2n){background-color:#f9f9fc}.mes-container:nth-child(odd){background-color:#fff}.mes-container:hover{background-color:#f0f0f5;box-shadow:0 4px 8px #00000026}.header-container{display:flex;align-items:center;margin-bottom:2px}.header-container button{margin-left:auto}.mes-header{display:flex;align-items:center;gap:6px;font-size:1.2rem;font-weight:700;color:#333}.actions-container{display:flex;justify-content:flex-end;gap:4px}.my-table{width:100%;border-collapse:collapse;border-radius:8px;overflow:hidden;box-shadow:0 4px 8px #0000001a;font-family:Arial,sans-serif}.my-table th,.my-table td{padding:5px;text-align:left;border-bottom:1px solid #ddd}.my-table th{background-color:#005dbb7b;color:#fff;font-weight:700}.my-table tr{transition:background-color .3s ease}.my-table tr:hover{background-color:#f1f1f1}.my-table td{background-color:#fff}.my-table td button{transition:transform .2s ease}.my-table td button:hover{transform:scale(1.1)}.my-table td:last-child{text-align:center}.order-input{width:40px;text-align:center;border:1px solid #ccc;border-radius:4px;padding:2px}.order-input:focus{border-color:#1976d2;outline:none}.drag-cell{display:inline-flex;align-items:center;justify-content:center;gap:4px;cursor:grab;-webkit-user-select:none;user-select:none}.drag-cell mat-icon{font-size:18px;line-height:1;vertical-align:middle}.cdk-drag-preview{background:#fff;border-radius:6px;box-shadow:0 4px 12px #0003;display:table;border-collapse:collapse}.cdk-drag-placeholder{opacity:0;display:table-row}.cdk-drag-animating{transition:transform .2s cubic-bezier(0,0,.2,1)}table[cdkDropList] tr{border-bottom:1px solid #e0e0e0}table[cdkDropList] td{padding:8px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i6.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }] }); }
126
142
  }
127
143
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaenderecoListComponent, decorators: [{
128
144
  type: Component,
129
- args: [{ standalone: false, selector: 'lib-unb-pessoa-endereco-list', template: "<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ enderecos?.length === 1 ? 'Endere\u00E7o Cadastrado' : 'Endere\u00E7os Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ enderecos?.length || 0 }})</span>\r\n </div>\r\n\r\n <button matTooltip=\"Novo Endere\u00E7o\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Endere\u00E7o\r\n </button>\r\n </div>\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"enderecos && enderecos.length > 0\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"text-align: center;\" >Ordem</th>\r\n <th>Logradouro</th>\r\n <th>Bairro</th>\r\n <th>CEP</th>\r\n <th>Tipo</th>\r\n <th style=\"text-align: center;\">A\u00E7\u00F5es</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of enderecos; let i = index\" class=\"my-tr\">\r\n <td style=\"width: 5%; text-align: center;\"> \r\n <button *ngIf=\"enderecos.length > 1 && i > 0\" mat-icon-button aria-label=\"Mover para cima\"\r\n (click)=\"moverParaCima(i)\">\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button *ngIf=\"enderecos.length > 1 && i < enderecos.length - 1\" mat-icon-button aria-label=\"Mover para baixo\"\r\n (click)=\"moverParaBaixo(i)\">\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n </td>\r\n <td style=\"width: 20%;\">{{ valor.logradouro }}</td>\r\n <td style=\"width: 20%;\">{{ valor.bairro }}</td>\r\n <td style=\"width: 10%;\">{{ valor.cep }}</td>\r\n <td style=\"width: 10%;\">{{ valor.tipo?.toUpperCase() }}</td>\r\n <td style=\"width: 20%; text-align: center;\">\r\n <button mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>", styles: [".mes-container{padding:12px;margin-bottom:2px;border-radius:8px;box-shadow:0 2px 6px #0000001a;transition:background-color .3s ease,box-shadow .3s ease}.mes-container:nth-child(2n){background-color:#f9f9fc}.mes-container:nth-child(odd){background-color:#fff}.mes-container:hover{background-color:#f0f0f5;box-shadow:0 4px 8px #00000026}.header-container{display:flex;align-items:center;margin-bottom:2px}.header-container button{margin-left:auto}.mes-header{display:flex;align-items:center;gap:6px;font-size:1.2rem;font-weight:700;color:#333}.my-table{width:100%;border-collapse:collapse;border-radius:8px;overflow:hidden;box-shadow:0 4px 8px #0000001a;font-family:Arial,sans-serif}.my-table th,.my-table td{padding:5px;text-align:left;border-bottom:1px solid #ddd}.my-table th{background-color:#005dbb7b;color:#fff;font-weight:700}.my-table tr{transition:background-color .3s ease}.my-table tr:hover{background-color:#f1f1f1}.my-table td{background-color:#fff}.my-table td button{transition:transform .2s ease}.my-table td button:hover{transform:scale(1.1)}.my-table td:last-child{text-align:center}\n"] }]
145
+ args: [{ standalone: false, selector: 'lib-unb-pessoa-endereco-list', template: "<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ enderecos?.length === 1 ? 'Endere\u00E7o Cadastrado' : 'Endere\u00E7os Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ enderecos?.length || 0 }})</span>\r\n </div>\r\n\r\n <button type=\"button\" matTooltip=\"Novo Endere\u00E7o\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Endere\u00E7o\r\n </button>\r\n </div>\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"enderecos && enderecos.length > 0\" cdkDropList\r\n (cdkDropListDropped)=\"moverLinha($event)\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"width: 5%; text-align: center;\">Ordem</th>\r\n <th>Logradouro</th>\r\n <th>Bairro</th>\r\n <th>CEP</th>\r\n <th>Tipo</th>\r\n <th style=\"width: 1%; text-align: center;\">A\u00E7\u00F5es</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of enderecos; let i = index\" class=\"my-tr\" cdkDrag>\r\n <td style=\"width: 5%; text-align: center;\">\r\n <div class=\"drag-cell\" cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n <span>{{ i + 1 }}</span>\r\n </div>\r\n </td>\r\n <td>{{ valor.logradouro }}</td>\r\n <td>{{ valor.bairro }}</td>\r\n <td>{{ valor.cep }}</td>\r\n <td>{{ valor.tipo?.toUpperCase() }}</td>\r\n <td>\r\n <div class=\"actions-container\">\r\n <button type=\"button\" mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>", styles: [".mes-container{padding:12px;margin-bottom:2px;border-radius:8px;box-shadow:0 2px 6px #0000001a;transition:background-color .3s ease,box-shadow .3s ease}.mes-container:nth-child(2n){background-color:#f9f9fc}.mes-container:nth-child(odd){background-color:#fff}.mes-container:hover{background-color:#f0f0f5;box-shadow:0 4px 8px #00000026}.header-container{display:flex;align-items:center;margin-bottom:2px}.header-container button{margin-left:auto}.mes-header{display:flex;align-items:center;gap:6px;font-size:1.2rem;font-weight:700;color:#333}.actions-container{display:flex;justify-content:flex-end;gap:4px}.my-table{width:100%;border-collapse:collapse;border-radius:8px;overflow:hidden;box-shadow:0 4px 8px #0000001a;font-family:Arial,sans-serif}.my-table th,.my-table td{padding:5px;text-align:left;border-bottom:1px solid #ddd}.my-table th{background-color:#005dbb7b;color:#fff;font-weight:700}.my-table tr{transition:background-color .3s ease}.my-table tr:hover{background-color:#f1f1f1}.my-table td{background-color:#fff}.my-table td button{transition:transform .2s ease}.my-table td button:hover{transform:scale(1.1)}.my-table td:last-child{text-align:center}.order-input{width:40px;text-align:center;border:1px solid #ccc;border-radius:4px;padding:2px}.order-input:focus{border-color:#1976d2;outline:none}.drag-cell{display:inline-flex;align-items:center;justify-content:center;gap:4px;cursor:grab;-webkit-user-select:none;user-select:none}.drag-cell mat-icon{font-size:18px;line-height:1;vertical-align:middle}.cdk-drag-preview{background:#fff;border-radius:6px;box-shadow:0 4px 12px #0003;display:table;border-collapse:collapse}.cdk-drag-placeholder{opacity:0;display:table-row}.cdk-drag-animating{transition:transform .2s cubic-bezier(0,0,.2,1)}table[cdkDropList] tr{border-bottom:1px solid #e0e0e0}table[cdkDropList] td{padding:8px}\n"] }]
130
146
  }], ctorParameters: () => [{ type: i1.MatSnackBar }, { type: i2.UnBPessoaService }, { type: i3.MatDialog }], propDecorators: { podeEditar: [{
131
147
  type: Input
132
148
  }], enderecos: [{
@@ -136,4 +152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
136
152
  }], enderecosEmitted: [{
137
153
  type: Output
138
154
  }] } });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1lbmRlcmVjby1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0vdW5iLXBlc3NvYS1lbmRlcmVjby1saXN0LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0vdW5iLXBlc3NvYS1lbmRlcmVjby1saXN0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVEvRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7QUFRNUUsTUFBTSxPQUFPLDhCQUE4QjtJQUt6QyxZQUFvQixRQUFxQixFQUFVLE9BQXlCLEVBQVMsTUFBaUI7UUFBbEYsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUo3RixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsb0JBQWUsR0FBbUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUN4RSxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztJQUdyRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsMkVBQTJFO0lBQ3hHLENBQUM7SUFFRCxPQUFPLENBQUMsUUFBMkI7SUFFbkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUEyQjtRQUNoQyxJ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QXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVbkJQZXNzb2FTZXJ2aWNlIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGlwb1Blc3NvYUVudW0gfSBmcm9tICcuLi91bmItdGlwby1wZXNzb2EuZW51bSc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVuZGVyZWNvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbmRlcmVjby5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYVRlbGVmb25lVGlwbyB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtdGVsZWZvbmUubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FFbmRlcmVjb0Zvcm1Db21wb25lbnQgfSBmcm9tICcuL3VuYi1wZXNzb2EtZW5kZXJlY28tZm9ybSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICBzZWxlY3RvcjogJ2xpYi11bmItcGVzc29hLWVuZGVyZWNvLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91bmItcGVzc29hLWVuZGVyZWNvLWxpc3QuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VuYi1wZXNzb2EtZW5kZXJlY28tbGlzdC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVbmJQZXNzb2FlbmRlcmVjb0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHBvZGVFZGl0YXIgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGVuZGVyZWNvczogYW55ID0gW107XHJcbiAgQElucHV0KCkgYXBpUGVzc29hQ29uZmlnOiB7IHVybDogc3RyaW5nOyB0b2tlbjogc3RyaW5nIH0gPSB7IHVybDogJycsIHRva2VuOiAnJyB9O1xyXG4gIEBPdXRwdXQoKSBlbmRlcmVjb3NFbWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxVbmJQZXNzb2FFbmRlcmVjb1tdPigpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLCBwcml2YXRlIHNlcnZpY2U6IFVuQlBlc3NvYVNlcnZpY2UsIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZykge1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0QW5kQXNzaWduT3JkZXIoKTsgLy8gb3JnYW5pemEgYSBsaXN0YSBkZSBlbmRlcmVjb3MuIEFzIHZlemVzIHRlbSBvcmRlbSBkdXBsaWNhZGEgb3UgZmFsdGFuZG8uXHJcbiAgfVxyXG5cclxuICBleGNsdWlyKGVuZGVyZWNvOiBVbmJQZXNzb2FFbmRlcmVjbykge1xyXG5cclxuICB9XHJcblxyXG4gIGVkaXRhcihlbmRlcmVjbzogVW5iUGVzc29hRW5kZXJlY28pIHtcclxuICAgIHRoaXMub3BlbkZvcm1EaWFsb2coZW5kZXJlY28pO1xyXG4gIH1cclxuXHJcbiAgbW92ZXJQYXJhQ2ltYShpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoaW5kZXggPD0gMCkgcmV0dXJuO1xyXG5cclxuICAgIFt0aGlzLmVuZGVyZWNvc1tpbmRleCAtIDFdLCB0aGlzLmVuZGVyZWNvc1tpbmRleF1dID0gW3RoaXMuZW5kZXJlY29zW2luZGV4XSwgdGhpcy5lbmRlcmVjb3NbaW5kZXggLSAxXV07XHJcbiAgICB0aGlzLmF0dWFsaXphck9yZGVtKCk7XHJcbiAgfVxyXG5cclxuICBtb3ZlclBhcmFCYWl4byhpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoaW5kZXggPj0gdGhpcy5lbmRlcmVjb3MubGVuZ3RoIC0gMSkgcmV0dXJuO1xyXG5cclxuICAgIFt0aGlzLmVuZGVyZWNvc1tpbmRleF0sIHRoaXMuZW5kZXJlY29zW2luZGV4ICsgMV1dID0gW3RoaXMuZW5kZXJlY29zW2luZGV4ICsgMV0sIHRoaXMuZW5kZXJlY29zW2luZGV4XV07XHJcbiAgICB0aGlzLmF0dWFsaXphck9yZGVtKCk7XHJcbiAgfVxyXG5cclxuICBhdHVhbGl6YXJPcmRlbSgpIHtcclxuICAgIHRoaXMuZW5kZXJlY29zLmZvckVhY2goKGVuZGVyZWNvLCBpZHgpID0+IHtcclxuICAgICAgZW5kZXJlY28ub3JkZW0gPSBpZHggKyAxO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lbmRlcmVjb3NFbWl0dGVkLmVtaXQodGhpcy5lbmRlcmVjb3MpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkZvcm1EaWFsb2coZW5kZXJlY29Ub0VkaXQ6IGFueSkge1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihVbmJQZXNzb2FFbmRlcmVjb0Zvcm1Db21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc5MDBweCcsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBlbmRlcmVjbzogZW5kZXJlY29Ub0VkaXQsIC8vIEUtbWFpbCBhIHNlciBlZGl0YWRvIG91IHZhemlvIHBhcmEgbm92b1xyXG4gICAgICAgIGVuZGVyZWNvc0xpc3Q6IHRoaXMuZW5kZXJlY29zIC8vIEEgc3VhIGxpc3RhIENPTVBMRVRBIGRlIGUtbWFpbHNcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmVuZGVyZWNvcy5maW5kSW5kZXgoZSA9PiBlLmNvZGlnbyA9PT0gcmVzdWx0LmNvZGlnbyk7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQuY29kaWdvICYmIGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIC8vIEF0dWFsaXphIGUtbWFpbCBleGlzdGVudGVcclxuICAgICAgICAgIHRoaXMuZW5kZXJlY29zW2luZGV4XSA9IHJlc3VsdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQWRpY2lvbmEgbm92byBlLW1haWwgKGdlcmEgb3JkZW0gYXV0b21hdGljYW1lbnRlIHNlIHF1aXNlcilcclxuICAgICAgICAgIHJlc3VsdC5vcmRlbSA9IHRoaXMuZW5kZXJlY29zLmxlbmd0aCArIDE7XHJcbiAgICAgICAgICB0aGlzLmVuZGVyZWNvcy5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVtaXRlIGxpc3RhIGF0dWFsaXphZGFcclxuICAgICAgICB0aGlzLmVuZGVyZWNvc0VtaXR0ZWQuZW1pdCh0aGlzLmVuZGVyZWNvcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzb3J0QW5kQXNzaWduT3JkZXIoKTogdm9pZCB7XHJcbiAgICAvLyAxLiBDcmllIHVtYSBjw7NwaWEgZGEgbGlzdGEgcGFyYSBuw6NvIG1vZGlmaWNhciBhIG9yaWdpbmFsIGR1cmFudGUgYSBpdGVyYcOnw6NvIGluaWNpYWxcclxuICAgIGNvbnN0IHRlbXBlbmRlcmVjb3MgPSBbLi4udGhpcy5lbmRlcmVjb3NdO1xyXG5cclxuICAgIC8vIDIuIE1hcGVpZSBhcyBvcmRlbnMgZXhpc3RlbnRlcyBwYXJhIGlkZW50aWZpY2FyIGR1cGxpY2F0YXMgZSBhdXNlbnRlc1xyXG4gICAgY29uc3Qgb3JkZXJNYXAgPSBuZXcgTWFwPG51bWJlciwgVW5iUGVzc29hRW5kZXJlY29bXT4oKTtcclxuICAgIGNvbnN0IGVuZGVyZWNvc1dpdGhvdXRPcmRlcjogVW5iUGVzc29hRW5kZXJlY29bXSA9IFtdO1xyXG5cclxuICAgIHRlbXBlbmRlcmVjb3MuZm9yRWFjaChlbmRlcmVjbyA9PiB7XHJcbiAgICAgIGlmIChlbmRlcmVjby5vcmRlbSAhPT0gdW5kZWZpbmVkICYmIGVuZGVyZWNvLm9yZGVtICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCFvcmRlck1hcC5oYXMoZW5kZXJlY28ub3JkZW0pKSB7XHJcbiAgICAgICAgICBvcmRlck1hcC5zZXQoZW5kZXJlY28ub3JkZW0sIFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3JkZXJNYXAuZ2V0KGVuZGVyZWNvLm9yZGVtKT8ucHVzaChlbmRlcmVjbyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZW5kZXJlY29zV2l0aG91dE9yZGVyLnB1c2goZW5kZXJlY28pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyAzLiBJbmljaWFsaXplIHVtIFNldCBwYXJhIHJhc3RyZWFyIHRvZGFzIGFzIG9yZGVucyBxdWUgc2Vyw6NvIHVzYWRhcyBubyBmaW5hbFxyXG4gICAgY29uc3QgZmluYWxVc2VkT3JkZXJzID0gbmV3IFNldDxudW1iZXI+KCk7XHJcbiAgICAvLyBJbmljaWFsaXplIG8gcHLDs3hpbW8gdmFsb3IgZGUgb3JkZW0gZGlzcG9uw612ZWxcclxuICAgIGxldCBuZXh0QXZhaWxhYmxlT3JkZXIgPSAwO1xyXG5cclxuICAgIC8vIEZ1bsOnw6NvIGF1eGlsaWFyIHBhcmEgZW5jb250cmFyIGEgcHLDs3hpbWEgb3JkZW0gZGlzcG9uw612ZWxcclxuICAgIGNvbnN0IGdldE5leHRBdmFpbGFibGVPcmRlciA9ICgpID0+IHtcclxuICAgICAgd2hpbGUgKGZpbmFsVXNlZE9yZGVycy5oYXMobmV4dEF2YWlsYWJsZU9yZGVyKSkge1xyXG4gICAgICAgIG5leHRBdmFpbGFibGVPcmRlcisrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBuZXh0QXZhaWxhYmxlT3JkZXIrKztcclxuICAgIH07XHJcblxyXG4gICAgLy8gNC4gUHJvY2Vzc2UgZW5kZXJlY29zIGNvbSBvcmRlbSBkZWZpbmlkYTpcclxuICAgIC8vICAgIC0gQSBwcmltZWlyYSBvY29ycsOqbmNpYSBkZSB1bWEgb3JkZW0gYSBtYW50w6ltLlxyXG4gICAgLy8gICAgLSBEdXBsaWNhdGFzIHJlY2ViZW0gdW1hIG5vdmEgb3JkZW0uXHJcbiAgICAvLyAgICAtIEFkaWNpb25lIGFzIG9yZGVucyB2w6FsaWRhcyBhbyBmaW5hbFVzZWRPcmRlcnMuXHJcbiAgICB0aGlzLmVuZGVyZWNvcy5mb3JFYWNoKGVuZGVyZWNvID0+IHsgLy8gSXRlcmFyIHNvYnJlIGEgbGlzdGEgb3JpZ2luYWwgcGFyYSBtb2RpZmljYXIgaW4tcGxhY2VcclxuICAgICAgaWYgKGVuZGVyZWNvLm9yZGVtICE9PSB1bmRlZmluZWQgJiYgZW5kZXJlY28ub3JkZW0gIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoIWZpbmFsVXNlZE9yZGVycy5oYXMoZW5kZXJlY28ub3JkZW0pKSB7XHJcbiAgICAgICAgICAvLyBTZSBhIG9yZGVtIGFpbmRhIG7Do28gZm9pIHVzYWRhLCB1c2UtYSBlIGFkaWNpb25lIGFvIHNldFxyXG4gICAgICAgICAgZmluYWxVc2VkT3JkZXJzLmFkZChlbmRlcmVjby5vcmRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFNlIGEgb3JkZW0gasOhIGZvaSB1c2FkYSAow6kgdW1hIGR1cGxpY2F0YSksIGF0cmlidWEgdW1hIG5vdmFcclxuICAgICAgICAgIGVuZGVyZWNvLm9yZGVtID0gZ2V0TmV4dEF2YWlsYWJsZU9yZGVyKCk7XHJcbiAgICAgICAgICBmaW5hbFVzZWRPcmRlcnMuYWRkKGVuZGVyZWNvLm9yZGVtKTsgLy8gQWRpY2lvbmEgYSBub3ZhIG9yZGVtIGFvIHNldFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gNS4gQXRyaWJ1YSBvcmRlbnMgcGFyYSBlbmRlcmVjb3MgcXVlIG7Do28gdGluaGFtIG9yZGVtIGRlZmluaWRhXHJcbiAgICBlbmRlcmVjb3NXaXRob3V0T3JkZXIuZm9yRWFjaChlbmRlcmVjbyA9PiB7XHJcbiAgICAgIGVuZGVyZWNvLm9yZGVtRW5kZXJlY28gPSBnZXROZXh0QXZhaWxhYmxlT3JkZXIoKTtcclxuICAgICAgZmluYWxVc2VkT3JkZXJzLmFkZChlbmRlcmVjby5vcmRlbUVuZGVyZWNvKTsgLy8gQWRpY2lvbmEgYSBub3ZhIG9yZGVtIGFvIHNldFxyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIC8vIDYuIEZpbmFsbWVudGUsIG9yZGVuZSBhIGxpc3RhIGNvbXBsZXRhIGNvbSBhcyBvcmRlbnMgYWdvcmEgw7puaWNhc1xyXG4gICAgdGhpcy5lbmRlcmVjb3Muc29ydCgoYSwgYikgPT4gKGEub3JkZW1FbmRlcmVjbyA/PyAwKSAtIChiLm9yZGVtRW5kZXJlY28gPz8gMCkpO1xyXG4gIH1cclxuXHJcblxyXG59IiwiPGRpdiBjbGFzcz1cIm1lcy1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lcy1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXR1bG9cIj5cclxuICAgICAgICAgICAgICAgIHt7IGVuZGVyZWNvcz8ubGVuZ3RoID09PSAxID8gJ0VuZGVyZcOnbyBDYWRhc3RyYWRvJyA6ICdFbmRlcmXDp29zIENhZGFzdHJhZG9zJyB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0dWxvXCI+KHt7IGVuZGVyZWNvcz8ubGVuZ3RoIHx8IDAgfX0pPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YnV0dG9uIG1hdFRvb2x0aXA9XCJOb3ZvIEVuZGVyZcOnb1wiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib3BlbkZvcm1EaWFsb2cobnVsbClcIj5cclxuICAgICAgICAgICAgQ2FkYXN0cmFyIE5vdm8gRW5kZXJlw6dvXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEV4aWJlIGEgdGFiZWxhIGRlIGRlc3Blc2FzIHNvbWVudGUgc2UgaG91dmVyIGRlc3Blc2FzIC0tPlxyXG4gICAgPHRhYmxlIGNsYXNzPVwibXktdGFibGVcIiAqbmdJZj1cImVuZGVyZWNvcyAmJiBlbmRlcmVjb3MubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDx0ciBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNlNGUzZTNjYztcIj5cclxuICAgICAgICAgICAgPHRoIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiID5PcmRlbTwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5Mb2dyYWRvdXJvPC90aD5cclxuICAgICAgICAgICAgPHRoPkJhaXJybzwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5DRVA8L3RoPlxyXG4gICAgICAgICAgICA8dGg+VGlwbzwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5Bw6fDtWVzPC90aD5cclxuICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHZhbG9yIG9mIGVuZGVyZWNvczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwibXktdHJcIj5cclxuICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6IDUlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImVuZGVyZWNvcy5sZW5ndGggPiAxICYmIGkgPiAwXCIgbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJNb3ZlciBwYXJhIGNpbWFcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlclBhcmFDaW1hKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X3Vwd2FyZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJlbmRlcmVjb3MubGVuZ3RoID4gMSAmJiBpIDwgZW5kZXJlY29zLmxlbmd0aCAtIDFcIiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIk1vdmVyIHBhcmEgYmFpeG9cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlclBhcmFCYWl4byhpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19kb3dud2FyZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6IDIwJTtcIj57eyB2YWxvci5sb2dyYWRvdXJvIH19PC90ZD5cclxuICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6IDIwJTtcIj57eyB2YWxvci5iYWlycm8gfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogMTAlO1wiPnt7IHZhbG9yLmNlcCB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiAxMCU7XCI+e3sgdmFsb3IudGlwbz8udG9VcHBlckNhc2UoKSB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiAyMCU7IHRleHQtYWxpZ246IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJTYWx2YXJcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZWRpdGFyKHZhbG9yKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkRlbGV0YXJcIiBjb2xvcj1cIndhcm5cIiAoY2xpY2spPVwiZXhjbHVpcih2YWxvcilcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG48L2Rpdj4iXX0=
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1lbmRlcmVjby1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0vdW5iLXBlc3NvYS1lbmRlcmVjby1saXN0LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0vdW5iLXBlc3NvYS1lbmRlcmVjby1saXN0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFLekcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7QUFRdEUsTUFBTSxPQUFPLDhCQUE4QjtJQU16QyxZQUFvQixRQUFxQixFQUFVLE9BQXlCLEVBQVMsTUFBaUI7UUFBbEYsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUo3RixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsb0JBQWUsR0FBbUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUN4RSxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztJQUdyRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsMkVBQTJFO0lBQ3hHLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLDhDQUE4QztRQUM5QyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0MsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLG1CQUFzQztRQUM1QyxJQUFJLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9CLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RixDQUFDO2FBQU0sQ0FBQztZQUNOLG1EQUFtRDtZQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsS0FBSyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyRyxDQUFDO1FBRUQsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQTJCO1FBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUN2QyxRQUFRLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsY0FBYyxDQUFDLGNBQW1CO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFO1lBQ2pFLEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFO2dCQUNKLFFBQVEsRUFBRSxjQUFjLEVBQUUsMENBQTBDO2dCQUNwRSxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQ0FBa0M7YUFDakU7U0FDRixDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWixPQUFPLENBQUMsMkNBQTJDO1lBQ3JELENBQUM7WUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUVmLHVFQUF1RTtZQUN2RSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUVELHFEQUFxRDtZQUNyRCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3pDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLEtBQUssTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7WUFFRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNmLHVFQUF1RTtnQkFDdkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDakMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHNFQUFzRTtnQkFDdEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsQ0FBQztZQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNsRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUVsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBeUI7UUFDbEMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO0lBQ3ZCLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsNkJBQTZCO1FBQzdCLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFMUMsaUNBQWlDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1FBQ3hELE1BQU0scUJBQXFCLEdBQXdCLEVBQUUsQ0FBQztRQUV0RCxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQy9CLGlCQUFpQjtZQUNqQixJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQzVFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO29CQUMxQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzNDLENBQUM7Z0JBQ0QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7aUJBQU0sQ0FBQztnQkFDTixxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0ZBQWdGO1FBQ2hGLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDMUMsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDM0IsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLEVBQUU7WUFDakMsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztnQkFDL0Msa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixDQUFDO1lBQ0QsT0FBTyxrQkFBa0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQztRQUVGLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoQyxpQkFBaUI7WUFDakIsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM1RSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztvQkFDakQsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzlDLENBQUM7cUJBQU0sQ0FBQztvQkFDTiw4QkFBOEI7b0JBQzlCLFFBQVEsQ0FBQyxhQUFhLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztvQkFDakQsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzlDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCx3REFBd0Q7UUFDeEQscUJBQXFCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZDLFFBQVEsQ0FBQyxhQUFhLEdBQUcscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDcEQsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNwRixDQUFDOzhHQWhKVSw4QkFBOEI7a0dBQTlCLDhCQUE4Qiw4T0NkM0MscXdFQWlETTs7MkZEbkNPLDhCQUE4QjtrQkFOMUMsU0FBUztpQ0FDSSxLQUFLLFlBQ1AsOEJBQThCO3VJQU0vQixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBVbkJQZXNzb2FTZXJ2aWNlIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW5kZXJlY28gfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLWVuZGVyZWNvLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW5kZXJlY29Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0nO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICBzZWxlY3RvcjogJ2xpYi11bmItcGVzc29hLWVuZGVyZWNvLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91bmItcGVzc29hLWVuZGVyZWNvLWxpc3QuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VuYi1wZXNzb2EtZW5kZXJlY28tbGlzdC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVbmJQZXNzb2FlbmRlcmVjb0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIHBvZGVFZGl0YXIgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGVuZGVyZWNvczogYW55ID0gW107XHJcbiAgQElucHV0KCkgYXBpUGVzc29hQ29uZmlnOiB7IHVybDogc3RyaW5nOyB0b2tlbjogc3RyaW5nIH0gPSB7IHVybDogJycsIHRva2VuOiAnJyB9O1xyXG4gIEBPdXRwdXQoKSBlbmRlcmVjb3NFbWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxVbmJQZXNzb2FFbmRlcmVjb1tdPigpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLCBwcml2YXRlIHNlcnZpY2U6IFVuQlBlc3NvYVNlcnZpY2UsIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZykge1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0QW5kQXNzaWduT3JkZXIoKTsgLy8gb3JnYW5pemEgYSBsaXN0YSBkZSBlbmRlcmVjb3MuIEFzIHZlemVzIHRlbSBvcmRlbSBkdXBsaWNhZGEgb3UgZmFsdGFuZG8uXHJcbiAgfVxyXG5cclxuICAvLyB0ZW0gcXVlIGZhemVyIGlzc28gcHEgbm8gb24gaW5pdCBldSBhaW5kYSBuYW8gdGVuaG8gYSBsaXN0YVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIFZlcmlmaWNhIHNlIGEgcHJvcHJpZWRhZGUgJ2VuZGVyZWNvcycgbXVkb3VcclxuICAgIGlmIChjaGFuZ2VzWydlbmRlcmVjb3MnXSAmJiB0aGlzLmVuZGVyZWNvcykge1xyXG4gICAgICAvLyBjaGFtYWRhIHF1YW5kbyBvcyBkYWRvcyByZWFsbWVudGUgY2hlZ2FyZW1cclxuICAgICAgdGhpcy5zb3J0QW5kQXNzaWduT3JkZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4Y2x1aXIoZW5kZXJlY29QYXJhRXhjbHVpcjogVW5iUGVzc29hRW5kZXJlY28pIHtcclxuICAgIGlmIChlbmRlcmVjb1BhcmFFeGNsdWlyLmNvZGlnbykge1xyXG4gICAgICAvLyBTZSB0ZW0gY8OzZGlnbywgcmVtb3ZlIHBvciBlbGUgKG1haXMgc2VndXJvKVxyXG4gICAgICB0aGlzLmVuZGVyZWNvcyA9IHRoaXMuZW5kZXJlY29zLmZpbHRlcih0ID0+IHQuY29kaWdvICE9PSBlbmRlcmVjb1BhcmFFeGNsdWlyLmNvZGlnbyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBTZSBuw6NvIHRlbSBjw7NkaWdvIChub3ZvIGl0ZW0pLCByZW1vdmUgcGVsYSBvcmRlbVxyXG4gICAgICB0aGlzLmVuZGVyZWNvcyA9IHRoaXMuZW5kZXJlY29zLmZpbHRlcih0ID0+IHQub3JkZW1FbmRlcmVjbyAhPT0gZW5kZXJlY29QYXJhRXhjbHVpci5vcmRlbUVuZGVyZWNvKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGFtYSBmdW7Dp8OjbyBleGlzdGVudGUgcXVlIHJlLWNhbGN1bGEgYXMgb3JkZW5zIGUgZW1pdGUgYSBsaXN0YSBhdHVhbGl6YWRhXHJcbiAgICB0aGlzLmF0dWFsaXphck9yZGVtKCk7XHJcbiAgfVxyXG5cclxuICBlZGl0YXIoZW5kZXJlY286IFVuYlBlc3NvYUVuZGVyZWNvKSB7XHJcbiAgICB0aGlzLm9wZW5Gb3JtRGlhbG9nKGVuZGVyZWNvKTtcclxuICB9XHJcblxyXG4gIGF0dWFsaXphck9yZGVtKCkge1xyXG4gICAgdGhpcy5lbmRlcmVjb3MuZm9yRWFjaCgoZW5kZXJlY28sIGlkeCkgPT4ge1xyXG4gICAgICBlbmRlcmVjby5vcmRlbUVuZGVyZWNvID0gaWR4ICsgMTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZW5kZXJlY29zRW1pdHRlZC5lbWl0KHRoaXMuZW5kZXJlY29zKTtcclxuICB9XHJcblxyXG4gIG9wZW5Gb3JtRGlhbG9nKGVuZGVyZWNvVG9FZGl0OiBhbnkpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVW5iUGVzc29hRW5kZXJlY29Gb3JtQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiAnOTAwcHgnLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZW5kZXJlY286IGVuZGVyZWNvVG9FZGl0LCAvLyBFLW1haWwgYSBzZXIgZWRpdGFkbyBvdSB2YXppbyBwYXJhIG5vdm9cclxuICAgICAgICBlbmRlcmVjb3NMaXN0OiB0aGlzLmVuZGVyZWNvcyAvLyBBIHN1YSBsaXN0YSBDT01QTEVUQSBkZSBlLW1haWxzXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICByZXR1cm47IC8vIFVzdcOhcmlvIGNsaWNvdSBlbSAnRmVjaGFyJyBvdSAnQ2FuY2VsYXInXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGluZGV4ID0gLTE7XHJcblxyXG4gICAgICAvLyAxLiBUZW50YSBlbmNvbnRyYXIgcGVsbyAnY29kaWdvJyAocGFyYSBpdGVucyBxdWUgasOhIHZpZXJhbSBkbyBiYW5jbylcclxuICAgICAgaWYgKHJlc3VsdC5jb2RpZ28pIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuZW5kZXJlY29zLmZpbmRJbmRleCh0ID0+IHQuY29kaWdvID09PSByZXN1bHQuY29kaWdvKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gMi4gU2UgbsOjbyBhY2hvdSBwZWxvICdjb2RpZ28nLCB0ZW50YSBwZWxhICdvcmRlbScuXHJcbiAgICAgIGlmIChpbmRleCA9PT0gLTEgJiYgcmVzdWx0Lm9yZGVtRW5kZXJlY28pIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuZW5kZXJlY29zLmZpbmRJbmRleCh0ID0+IHQub3JkZW1FbmRlcmVjbyA9PT0gcmVzdWx0Lm9yZGVtRW5kZXJlY28pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIC8vIEVOQ09OVFJPVSAocGVsbyAnY29kaWdvJyBvdSBwZWxhICdvcmRlbScpOiBBdHVhbGl6YSBvIGl0ZW0gZXhpc3RlbnRlXHJcbiAgICAgICAgdGhpcy5lbmRlcmVjb3NbaW5kZXhdID0gcmVzdWx0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIE7Dg08gRU5DT05UUk9VOiDDiSB1bSBpdGVtIDEwMCUgbm92byAobsOjbyB1bWEgZWRpw6fDo28pIGFkaWNpb25hIG5vIGZpbVxyXG4gICAgICAgIHRoaXMuZW5kZXJlY29zLnB1c2gocmVzdWx0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5lbmRlcmVjb3Muc29ydCgoYSwgYikgPT4gKGEub3JkZW1FbmRlcmVjbyA/PyAwKSAtIChiLm9yZGVtRW5kZXJlY28gPz8gMCkpOyAvL1xyXG4gICAgICB0aGlzLmVuZGVyZWNvc0VtaXR0ZWQuZW1pdChbLi4udGhpcy5lbmRlcmVjb3NdKTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG1vdmVyTGluaGEoZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPikge1xyXG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZW5kZXJlY29zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgdGhpcy5hdHVhbGl6YXJPcmRlbSgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNvcnRBbmRBc3NpZ25PcmRlcigpOiB2b2lkIHtcclxuICAgIC8vIDEuIENyaWUgdW1hIGPDs3BpYSBkYSBsaXN0YVxyXG4gICAgY29uc3QgdGVtcGVuZGVyZWNvcyA9IFsuLi50aGlzLmVuZGVyZWNvc107XHJcblxyXG4gICAgLy8gMi4gTWFwZWllIGFzIG9yZGVucyBleGlzdGVudGVzXHJcbiAgICBjb25zdCBvcmRlck1hcCA9IG5ldyBNYXA8bnVtYmVyLCBVbmJQZXNzb2FFbmRlcmVjb1tdPigpO1xyXG4gICAgY29uc3QgZW5kZXJlY29zV2l0aG91dE9yZGVyOiBVbmJQZXNzb2FFbmRlcmVjb1tdID0gW107XHJcblxyXG4gICAgdGVtcGVuZGVyZWNvcy5mb3JFYWNoKGVuZGVyZWNvID0+IHtcclxuICAgICAgLy8gQ09SUkXDh8ODTyBBUVVJOlxyXG4gICAgICBpZiAoZW5kZXJlY28ub3JkZW1FbmRlcmVjbyAhPT0gdW5kZWZpbmVkICYmIGVuZGVyZWNvLm9yZGVtRW5kZXJlY28gIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoIW9yZGVyTWFwLmhhcyhlbmRlcmVjby5vcmRlbUVuZGVyZWNvKSkge1xyXG4gICAgICAgICAgb3JkZXJNYXAuc2V0KGVuZGVyZWNvLm9yZGVtRW5kZXJlY28sIFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3JkZXJNYXAuZ2V0KGVuZGVyZWNvLm9yZGVtRW5kZXJlY28pPy5wdXNoKGVuZGVyZWNvKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlbmRlcmVjb3NXaXRob3V0T3JkZXIucHVzaChlbmRlcmVjbyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIDMuIC4uLiAoRnVuw6fDtWVzICdmaW5hbFVzZWRPcmRlcnMnLCAnbmV4dEF2YWlsYWJsZU9yZGVyJyBjb250aW51YW0gaWd1YWlzKSAuLi5cclxuICAgIGNvbnN0IGZpbmFsVXNlZE9yZGVycyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG4gICAgbGV0IG5leHRBdmFpbGFibGVPcmRlciA9IDA7XHJcbiAgICBjb25zdCBnZXROZXh0QXZhaWxhYmxlT3JkZXIgPSAoKSA9PiB7XHJcbiAgICAgIHdoaWxlIChmaW5hbFVzZWRPcmRlcnMuaGFzKG5leHRBdmFpbGFibGVPcmRlcikpIHtcclxuICAgICAgICBuZXh0QXZhaWxhYmxlT3JkZXIrKztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbmV4dEF2YWlsYWJsZU9yZGVyKys7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIDQuIFByb2Nlc3NlIGVuZGVyZWNvcyBjb20gb3JkZW0gZGVmaW5pZGE6XHJcbiAgICB0aGlzLmVuZGVyZWNvcy5mb3JFYWNoKGVuZGVyZWNvID0+IHtcclxuICAgICAgLy8gQ09SUkXDh8ODTyBBUVVJOlxyXG4gICAgICBpZiAoZW5kZXJlY28ub3JkZW1FbmRlcmVjbyAhPT0gdW5kZWZpbmVkICYmIGVuZGVyZWNvLm9yZGVtRW5kZXJlY28gIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoIWZpbmFsVXNlZE9yZGVycy5oYXMoZW5kZXJlY28ub3JkZW1FbmRlcmVjbykpIHtcclxuICAgICAgICAgIGZpbmFsVXNlZE9yZGVycy5hZGQoZW5kZXJlY28ub3JkZW1FbmRlcmVjbyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIER1cGxpY2F0YSwgYXRyaWJ1YSB1bWEgbm92YVxyXG4gICAgICAgICAgZW5kZXJlY28ub3JkZW1FbmRlcmVjbyA9IGdldE5leHRBdmFpbGFibGVPcmRlcigpO1xyXG4gICAgICAgICAgZmluYWxVc2VkT3JkZXJzLmFkZChlbmRlcmVjby5vcmRlbUVuZGVyZWNvKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIDUuIEF0cmlidWEgb3JkZW5zIHBhcmEgZW5kZXJlY29zIHF1ZSBuw6NvIHRpbmhhbSBvcmRlbVxyXG4gICAgZW5kZXJlY29zV2l0aG91dE9yZGVyLmZvckVhY2goZW5kZXJlY28gPT4ge1xyXG4gICAgICBlbmRlcmVjby5vcmRlbUVuZGVyZWNvID0gZ2V0TmV4dEF2YWlsYWJsZU9yZGVyKCk7IC8vXHJcbiAgICAgIGZpbmFsVXNlZE9yZGVycy5hZGQoZW5kZXJlY28ub3JkZW1FbmRlcmVjbyk7IC8vXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyA2LiBGaW5hbG1lbnRlLCBvcmRlbmUgYSBsaXN0YVxyXG4gICAgdGhpcy5lbmRlcmVjb3Muc29ydCgoYSwgYikgPT4gKGEub3JkZW1FbmRlcmVjbyA/PyAwKSAtIChiLm9yZGVtRW5kZXJlY28gPz8gMCkpOyAvL1xyXG4gIH1cclxuXHJcblxyXG59IiwiPGRpdiBjbGFzcz1cIm1lcy1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lcy1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXR1bG9cIj5cclxuICAgICAgICAgICAgICAgIHt7IGVuZGVyZWNvcz8ubGVuZ3RoID09PSAxID8gJ0VuZGVyZcOnbyBDYWRhc3RyYWRvJyA6ICdFbmRlcmXDp29zIENhZGFzdHJhZG9zJyB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0dWxvXCI+KHt7IGVuZGVyZWNvcz8ubGVuZ3RoIHx8IDAgfX0pPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXRUb29sdGlwPVwiTm92byBFbmRlcmXDp29cIiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9wZW5Gb3JtRGlhbG9nKG51bGwpXCI+XHJcbiAgICAgICAgICAgIENhZGFzdHJhciBOb3ZvIEVuZGVyZcOnb1xyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBFeGliZSBhIHRhYmVsYSBkZSBkZXNwZXNhcyBzb21lbnRlIHNlIGhvdXZlciBkZXNwZXNhcyAtLT5cclxuICAgIDx0YWJsZSBjbGFzcz1cIm15LXRhYmxlXCIgKm5nSWY9XCJlbmRlcmVjb3MgJiYgZW5kZXJlY29zLmxlbmd0aCA+IDBcIiBjZGtEcm9wTGlzdFxyXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwibW92ZXJMaW5oYSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPHRyIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2U0ZTNlM2NjO1wiPlxyXG4gICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDogNSU7IHRleHQtYWxpZ246IGNlbnRlcjtcIj5PcmRlbTwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5Mb2dyYWRvdXJvPC90aD5cclxuICAgICAgICAgICAgPHRoPkJhaXJybzwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5DRVA8L3RoPlxyXG4gICAgICAgICAgICA8dGg+VGlwbzwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAxJTsgdGV4dC1hbGlnbjogY2VudGVyO1wiPkHDp8O1ZXM8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdmFsb3Igb2YgZW5kZXJlY29zOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJteS10clwiIGNka0RyYWc+XHJcbiAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiA1JTsgdGV4dC1hbGlnbjogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctY2VsbFwiIGNka0RyYWdIYW5kbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpICsgMSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3sgdmFsb3IubG9ncmFkb3VybyB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57eyB2YWxvci5iYWlycm8gfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3sgdmFsb3IuY2VwIH19PC90ZD5cclxuICAgICAgICAgICAgPHRkPnt7IHZhbG9yLnRpcG8/LnRvVXBwZXJDYXNlKCkgfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlNhbHZhclwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJlZGl0YXIodmFsb3IpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkRlbGV0YXJcIiBjb2xvcj1cIndhcm5cIiAoY2xpY2spPVwiZXhjbHVpcih2YWxvcilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90YWJsZT5cclxuPC9kaXY+Il19