@po-ui/ng-sync 14.0.0 → 14.2.1

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 (116) hide show
  1. package/README.md +22 -22
  2. package/esm2020/lib/index.mjs +15 -15
  3. package/esm2020/lib/models/index.mjs +6 -6
  4. package/esm2020/lib/models/po-data-message.model.mjs +57 -57
  5. package/esm2020/lib/models/po-data-transform.model.mjs +22 -22
  6. package/esm2020/lib/models/po-entity/po-entity.model.mjs +214 -214
  7. package/esm2020/lib/models/po-event-sourcing-error-response.model.mjs +17 -17
  8. package/esm2020/lib/models/po-network-status.model.mjs +44 -44
  9. package/esm2020/lib/models/po-network-type.enum.mjs +30 -30
  10. package/esm2020/lib/models/po-query-builder/po-query-builder.model.mjs +238 -238
  11. package/esm2020/lib/models/po-request-type.enum.mjs +16 -16
  12. package/esm2020/lib/po-sync.module.mjs +45 -45
  13. package/esm2020/lib/services/po-event-sourcing/enums/po-event-sourcing-operation.enum.mjs +17 -17
  14. package/esm2020/lib/services/po-event-sourcing/index.mjs +4 -4
  15. package/esm2020/lib/services/po-event-sourcing/interfaces/po-event-sourcing-item.interface.mjs +2 -2
  16. package/esm2020/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.mjs +2 -2
  17. package/esm2020/lib/services/po-event-sourcing/po-event-sourcing.service.mjs +372 -372
  18. package/esm2020/lib/services/po-http-client/interfaces/po-http-header-option.interface.mjs +11 -11
  19. package/esm2020/lib/services/po-http-client/interfaces/po-http-request-data.interface.mjs +2 -2
  20. package/esm2020/lib/services/po-http-client/interfaces/po-response-api.interface.mjs +2 -2
  21. package/esm2020/lib/services/po-http-client/po-http-client.service.mjs +148 -148
  22. package/esm2020/lib/services/po-http-client/po-http-request-type.enum.mjs +25 -25
  23. package/esm2020/lib/services/po-network/po-network.service.mjs +58 -58
  24. package/esm2020/lib/services/po-schema/index.mjs +4 -4
  25. package/esm2020/lib/services/po-schema/po-schema-definition/po-schema-definition.service.mjs +77 -77
  26. package/esm2020/lib/services/po-schema/po-schema-util/po-schema-util.model.mjs +124 -124
  27. package/esm2020/lib/services/po-schema/po-schema.service.mjs +174 -174
  28. package/esm2020/lib/services/po-sync/interfaces/po-sync-config.interface.mjs +2 -2
  29. package/esm2020/lib/services/po-sync/interfaces/po-sync-field-options.interface.mjs +2 -2
  30. package/esm2020/lib/services/po-sync/interfaces/po-sync-response.interface.mjs +2 -2
  31. package/esm2020/lib/services/po-sync/interfaces/po-sync-schema.interface.mjs +2 -2
  32. package/esm2020/lib/services/po-sync/po-sync.service.mjs +325 -325
  33. package/esm2020/lib/utils/utils.mjs +63 -63
  34. package/esm2020/po-ui-ng-sync.mjs +4 -4
  35. package/esm2020/public-api.mjs +2 -2
  36. package/fesm2015/po-ui-ng-sync.mjs +2060 -2060
  37. package/fesm2015/po-ui-ng-sync.mjs.map +1 -1
  38. package/fesm2020/po-ui-ng-sync.mjs +1965 -1965
  39. package/fesm2020/po-ui-ng-sync.mjs.map +1 -1
  40. package/index.d.ts +5 -5
  41. package/lib/index.d.ts +14 -14
  42. package/lib/models/index.d.ts +5 -5
  43. package/lib/models/po-data-message.model.d.ts +46 -46
  44. package/lib/models/po-data-transform.model.d.ts +52 -52
  45. package/lib/models/po-entity/po-entity.model.d.ts +122 -122
  46. package/lib/models/po-event-sourcing-error-response.model.d.ts +20 -20
  47. package/lib/models/po-network-status.model.d.ts +25 -25
  48. package/lib/models/po-network-type.enum.d.ts +28 -28
  49. package/lib/models/po-query-builder/po-query-builder.model.d.ts +126 -126
  50. package/lib/models/po-request-type.enum.d.ts +14 -14
  51. package/lib/po-sync.module.d.ts +12 -12
  52. package/lib/services/po-event-sourcing/enums/po-event-sourcing-operation.enum.d.ts +11 -11
  53. package/lib/services/po-event-sourcing/index.d.ts +3 -3
  54. package/lib/services/po-event-sourcing/interfaces/po-event-sourcing-item.interface.d.ts +26 -26
  55. package/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.d.ts +16 -16
  56. package/lib/services/po-event-sourcing/po-event-sourcing.service.d.ts +74 -74
  57. package/lib/services/po-http-client/interfaces/po-http-header-option.interface.d.ts +15 -15
  58. package/lib/services/po-http-client/interfaces/po-http-request-data.interface.d.ts +24 -24
  59. package/lib/services/po-http-client/interfaces/po-response-api.interface.d.ts +14 -14
  60. package/lib/services/po-http-client/po-http-client.service.d.ts +78 -78
  61. package/lib/services/po-http-client/po-http-request-type.enum.d.ts +23 -23
  62. package/lib/services/po-network/po-network.service.d.ts +36 -36
  63. package/lib/services/po-schema/index.d.ts +3 -3
  64. package/lib/services/po-schema/po-schema-definition/po-schema-definition.service.d.ts +51 -51
  65. package/lib/services/po-schema/po-schema-util/po-schema-util.model.d.ts +79 -79
  66. package/lib/services/po-schema/po-schema.service.d.ts +98 -98
  67. package/lib/services/po-sync/interfaces/po-sync-config.interface.d.ts +24 -24
  68. package/lib/services/po-sync/interfaces/po-sync-field-options.interface.d.ts +15 -15
  69. package/lib/services/po-sync/interfaces/po-sync-response.interface.d.ts +20 -20
  70. package/lib/services/po-sync/interfaces/po-sync-schema.interface.d.ts +37 -37
  71. package/lib/services/po-sync/po-sync.service.d.ts +162 -162
  72. package/lib/utils/utils.d.ts +36 -36
  73. package/package.json +4 -4
  74. package/po-ui-ng-sync-14.2.1.tgz +0 -0
  75. package/public-api.d.ts +1 -1
  76. package/schematics/README.md +169 -169
  77. package/schematics/collection.json +15 -15
  78. package/schematics/migrations.json +35 -35
  79. package/schematics/ng-add/index.d.ts +7 -7
  80. package/schematics/ng-add/index.js +33 -33
  81. package/schematics/ng-add/index.spec.d.ts +1 -1
  82. package/schematics/ng-add/index.spec.js +62 -62
  83. package/schematics/ng-add/schema.json +16 -16
  84. package/schematics/ng-generate/schema/files/__path__/__name@dasherize__/__name@dasherize__.constants.ts.template +13 -13
  85. package/schematics/ng-generate/schema/index.d.ts +4 -4
  86. package/schematics/ng-generate/schema/index.js +12 -12
  87. package/schematics/ng-generate/schema/index.spec.d.ts +1 -1
  88. package/schematics/ng-generate/schema/index.spec.js +44 -44
  89. package/schematics/ng-generate/schema/schema.d.ts +3 -3
  90. package/schematics/ng-generate/schema/schema.js +2 -2
  91. package/schematics/ng-generate/schema/schema.json +31 -31
  92. package/schematics/ng-update/v14/changes.d.ts +2 -2
  93. package/schematics/ng-update/v14/changes.js +13 -13
  94. package/schematics/ng-update/v14/index.d.ts +1 -1
  95. package/schematics/ng-update/v14/index.js +15 -15
  96. package/schematics/ng-update/v2/changes.d.ts +8 -8
  97. package/schematics/ng-update/v2/changes.js +20 -20
  98. package/schematics/ng-update/v2/index.d.ts +5 -5
  99. package/schematics/ng-update/v2/index.js +101 -101
  100. package/schematics/ng-update/v3/changes.d.ts +2 -2
  101. package/schematics/ng-update/v3/changes.js +14 -14
  102. package/schematics/ng-update/v3/index.d.ts +1 -1
  103. package/schematics/ng-update/v3/index.js +16 -16
  104. package/schematics/ng-update/v4/changes.d.ts +2 -2
  105. package/schematics/ng-update/v4/changes.js +14 -14
  106. package/schematics/ng-update/v4/index.d.ts +1 -1
  107. package/schematics/ng-update/v4/index.js +15 -15
  108. package/schematics/ng-update/v5/changes.d.ts +2 -2
  109. package/schematics/ng-update/v5/changes.js +13 -13
  110. package/schematics/ng-update/v5/index.d.ts +1 -1
  111. package/schematics/ng-update/v5/index.js +15 -15
  112. package/schematics/ng-update/v6/changes.d.ts +2 -2
  113. package/schematics/ng-update/v6/changes.js +13 -13
  114. package/schematics/ng-update/v6/index.d.ts +1 -1
  115. package/schematics/ng-update/v6/index.js +15 -15
  116. package/po-ui-ng-sync-14.0.0.tgz +0 -0
@@ -1,214 +1,214 @@
1
- import { validateParameter } from '../../utils/utils';
2
- import { PoEventSourcingOperation } from '../../services/po-event-sourcing';
3
- import { PoQueryBuilder } from './../po-query-builder/po-query-builder.model';
4
- import { PoSchemaUtil } from '../../services/po-schema';
5
- /**
6
- * @description
7
- *
8
- * Uma instância `PoEntity` representa um *schema* e ela contém métodos que possibilitam manipular seus registros,
9
- * como por exemplo: buscar, criar e remover.
10
- *
11
- * Esta instância pode ser obtida a partir do retorno do método `PoSyncService.getModel('schema name')`.
12
- */
13
- export class PoEntity {
14
- constructor(eventSourcing, schema, poSchemaService) {
15
- this.eventSourcing = eventSourcing;
16
- this.schema = schema;
17
- this.poSchemaService = poSchemaService;
18
- }
19
- /**
20
- * Busca os registros do *schema*, podendo filtrar o resultado a partir do filtro passado e retornando apenas
21
- * os campos definidos.
22
- *
23
- * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
24
- * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
25
- *
26
- * @param {object} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
27
- * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
28
- * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
29
- * Por exemplo, a definição abaixo:
30
- *
31
- * ```
32
- * PoQueryBuilder.select('name age address');
33
- * ```
34
- * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
35
- *
36
- * ```
37
- * PoQueryBuilder.select('-name -age');
38
- * ```
39
- * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
40
- */
41
- find(filter, fields) {
42
- const query = new PoQueryBuilder(this.poSchemaService, this.schema);
43
- if (filter) {
44
- query.filter(filter);
45
- }
46
- if (fields) {
47
- query.select(fields);
48
- }
49
- return query;
50
- }
51
- /**
52
- * Busca um registro pelo seu *id*.
53
- *
54
- * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
55
- * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
56
- *
57
- * @param {any} id Identificador do registro.
58
- * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
59
- * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
60
- * Por exemplo, a definição abaixo:
61
- *
62
- * ```
63
- * PoQueryBuilder.select('name age address');
64
- * ```
65
- * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
66
- *
67
- * ```
68
- * PoQueryBuilder.select('-name -age');
69
- * ```
70
- * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
71
- */
72
- findById(id, fields) {
73
- return this.findOne({ [this.schema.idField]: id }, fields);
74
- }
75
- /**
76
- * Semelhante ao método `PoEntity.find()`, porém retorna apenas o primeiro registro encontrado na busca.
77
- *
78
- * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
79
- * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
80
- *
81
- * @param {any} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
82
- * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
83
- * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
84
- * Por exemplo, a definição abaixo:
85
- *
86
- * ```
87
- * PoQueryBuilder.select('name age address');
88
- * ```
89
- * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
90
- *
91
- * ```
92
- * PoQueryBuilder.select('-name -age');
93
- * ```
94
- * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
95
- */
96
- findOne(filter, fields) {
97
- const query = this.find(filter, fields);
98
- query.limit(1);
99
- return query;
100
- }
101
- /**
102
- * Remove um registro.
103
- *
104
- * @param {object} record Registro que será removido.
105
- * @param {string} customRequestId Identificador customizado do comando.
106
- * @returns {Promise} Promessa que é concluída após o registro ser removido.
107
- */
108
- async remove(record, customRequestId) {
109
- validateParameter({ record });
110
- const remove = async () => {
111
- const idField = record[this.schema.idField] ? this.schema.idField : PoSchemaUtil.syncInternalIdFieldName;
112
- const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, record)['serverRecord'];
113
- await this.poSchemaService.remove(this.schema.name, record[idField]);
114
- await this.eventSourcing.remove(this.schema.name, serverRecord, customRequestId);
115
- };
116
- return this.poSchemaService.limitedCallWrap(remove);
117
- }
118
- /**
119
- * Altera ou inclui um registro.
120
- *
121
- * > O registro será alterado se ele possuir um *id*, caso contrário um novo registro será criado.
122
- *
123
- * @param {object} record Registro que será persistido.
124
- * @param {string} customRequestId Identificador customizado do comando.
125
- * @returns {Promise} Promessa que é concluída após o registro ser alterado ou incluído.
126
- */
127
- async save(record, customRequestId) {
128
- validateParameter({ record });
129
- return this.poSchemaService.limitedCallWrap(this.selectSaveType.bind(this, record, true, customRequestId));
130
- }
131
- /**
132
- * Salva uma lista de registros em lote.
133
- *
134
- * > Para cada registro da lista, será inserido um novo registro se o mesmo não tiver *id*, caso contrário
135
- * será contado como uma atualização de um registro existente.
136
- *
137
- * @param {Array<object>} records Lista de registros que serão persistidos.
138
- * @param {Array<string> | string} customRequestIds Identificador customizado do comando.
139
- *
140
- * Ao passar uma lista de identificadores, cada índice da lista de identificadores deverá
141
- * corresponder ao índice do registro na lista de registros.
142
- * @returns {Promise<any>} Promessa que é concluída após os registros serem alterados ou incluídos.
143
- */
144
- async saveAll(records, customRequestIds) {
145
- validateParameter({ records });
146
- const saveAll = async () => {
147
- const batchEvents = [];
148
- for (let index = 0; index < records.length; index++) {
149
- const record = records[index];
150
- const sendToEventSourcing = false;
151
- const isNonLocalRecordChanged = await this.isNonLocalRecordChanged(record);
152
- const updatedRecord = await this.selectSaveType(record, sendToEventSourcing);
153
- if (isNonLocalRecordChanged) {
154
- const customRequestId = customRequestIds instanceof Array ? customRequestIds[index] : customRequestIds;
155
- const eventOperation = this.createEventOperation(record, updatedRecord, customRequestId);
156
- batchEvents.push(eventOperation);
157
- }
158
- }
159
- await this.eventSourcing.createBatchEvents(this.schema.name, batchEvents);
160
- };
161
- return this.poSchemaService.limitedCallWrap(saveAll);
162
- }
163
- async create(newRecord, sendToEventSourcing, customRequestId) {
164
- const time = new Date().getTime();
165
- const syncProperties = {
166
- [PoSchemaUtil.syncInternalIdFieldName]: time,
167
- SyncInsertedDateTime: time,
168
- SyncUpdatedDateTime: null,
169
- SyncExclusionDateTime: null,
170
- SyncDeleted: false,
171
- SyncStatus: 0
172
- };
173
- const recordWithSyncProperties = { ...newRecord, ...syncProperties };
174
- const recordedData = await this.poSchemaService.create(this.schema, recordWithSyncProperties);
175
- if (sendToEventSourcing) {
176
- await this.eventSourcing.create(this.schema.name, recordWithSyncProperties, customRequestId);
177
- }
178
- return recordedData;
179
- }
180
- createEventOperation(record, updatedRecord, customRequestId) {
181
- const operation = PoSchemaUtil.getRecordId(record, this.schema)
182
- ? PoEventSourcingOperation.Update
183
- : PoEventSourcingOperation.Insert;
184
- const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, updatedRecord)['serverRecord'];
185
- return {
186
- record: serverRecord,
187
- customRequestId: customRequestId,
188
- operation: operation
189
- };
190
- }
191
- async isNonLocalRecordChanged(updatedRecord) {
192
- const nonLocalFieldNames = PoSchemaUtil.getNonLocalFieldNames(this.schema);
193
- const record = await this.poSchemaService.get(this.schema.name, updatedRecord[this.schema.idField]);
194
- return !PoSchemaUtil.isModelsEqual(nonLocalFieldNames, record, updatedRecord);
195
- }
196
- async selectSaveType(record, sendToEventSourcing, customRequestId) {
197
- const hasId = PoSchemaUtil.getRecordId(record, this.schema);
198
- return hasId
199
- ? await this.update(record, sendToEventSourcing, customRequestId)
200
- : await this.create(record, sendToEventSourcing, customRequestId);
201
- }
202
- async update(updatedRecord, sendToEventSourcing, customRequestId) {
203
- updatedRecord.SyncUpdatedDateTime = new Date().getTime();
204
- updatedRecord.SyncStatus = 0;
205
- const isNonLocalRecordChanged = await this.isNonLocalRecordChanged(updatedRecord);
206
- const recordedData = await this.poSchemaService.update(this.schema, updatedRecord);
207
- if (isNonLocalRecordChanged && sendToEventSourcing) {
208
- const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, updatedRecord)['serverRecord'];
209
- await this.eventSourcing.update(this.schema.name, serverRecord, customRequestId);
210
- }
211
- return recordedData;
212
- }
213
- }
214
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZW50aXR5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3luYy9zcmMvbGliL21vZGVscy9wby1lbnRpdHkvcG8tZW50aXR5Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sRUFDTCx3QkFBd0IsRUFHekIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDOUUsT0FBTyxFQUFtQixZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd6RTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFDbkIsWUFDVSxhQUFxQyxFQUNyQyxNQUFvQixFQUNwQixlQUFnQztRQUZoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFDdkMsQ0FBQztJQUVKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FxQkc7SUFDSCxJQUFJLENBQUMsTUFBZSxFQUFFLE1BQWU7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEUsSUFBSSxNQUFNLEVBQUU7WUFDVixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsSUFBSSxNQUFNLEVBQUU7WUFDVixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bb0JHO0lBQ0gsUUFBUSxDQUFDLEVBQU8sRUFBRSxNQUFlO1FBQy9CLE9BQU8sSUFBSSxD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QUFDO1lBQ2pFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWtCLEVBQUUsbUJBQTRCLEVBQUUsZUFBd0I7UUFDN0YsYUFBYSxDQUFDLG1CQUFtQixHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekQsYUFBYSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFN0IsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFbkYsSUFBSSx1QkFBdUIsSUFBSSxtQkFBbUIsRUFBRTtZQUNsRCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNuRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztTQUNsRjtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHZhbGlkYXRlUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24sXHJcbiAgUG9FdmVudFNvdXJjaW5nU2VydmljZSxcclxuICBQb0V2ZW50U291cmNpbmdTdW1tYXJ5SXRlbVxyXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWV2ZW50LXNvdXJjaW5nJztcclxuaW1wb3J0IHsgUG9RdWVyeUJ1aWxkZXIgfSBmcm9tICcuLy4uL3BvLXF1ZXJ5LWJ1aWxkZXIvcG8tcXVlcnktYnVpbGRlci5tb2RlbCc7XHJcbmltcG9ydCB7IFBvU2NoZW1hU2VydmljZSwgUG9TY2hlbWFVdGlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tc2NoZW1hJztcclxuaW1wb3J0IHsgUG9TeW5jU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tc3luYy9pbnRlcmZhY2VzL3BvLXN5bmMtc2NoZW1hLmludGVyZmFjZSc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIFVtYSBpbnN0w6JuY2lhIGBQb0VudGl0eWAgcmVwcmVzZW50YSB1bSAqc2NoZW1hKiBlIGVsYSBjb250w6ltIG3DqXRvZG9zIHF1ZSBwb3NzaWJpbGl0YW0gbWFuaXB1bGFyIHNldXMgcmVnaXN0cm9zLFxyXG4gKiBjb21vIHBvciBleGVtcGxvOiBidXNjYXIsIGNyaWFyIGUgcmVtb3Zlci5cclxuICpcclxuICogRXN0YSBpbnN0w6JuY2lhIHBvZGUgc2VyIG9idGlkYSBhIHBhcnRpciBkbyByZXRvcm5vIGRvIG3DqXRvZG8gYFBvU3luY1NlcnZpY2UuZ2V0TW9kZWwoJ3NjaGVtYSBuYW1lJylgLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFBvRW50aXR5IHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZXZlbnRTb3VyY2luZzogUG9FdmVudFNvdXJjaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgc2NoZW1hOiBQb1N5bmNTY2hlbWEsXHJcbiAgICBwcml2YXRlIHBvU2NoZW1hU2VydmljZTogUG9TY2hlbWFTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBCdXNjYSBvcyByZWdpc3Ryb3MgZG8gKnNjaGVtYSosIHBvZGVuZG8gZmlsdHJhciBvIHJlc3VsdGFkbyBhIHBhcnRpciBkbyBmaWx0cm8gcGFzc2FkbyBlIHJldG9ybmFuZG8gYXBlbmFzXHJcbiAgICogb3MgY2FtcG9zIGRlZmluaWRvcy5cclxuICAgKlxyXG4gICAqIFBhcmEgcXVlIGVzdGEgYnVzY2Egc2VqYSBjb25jbHXDrWRhIMOpIG5lY2Vzc8OhcmlvIHV0aWxpemFyIG8gbcOpdG9kbyBgUG9RdWVyeUJ1aWxkZXIuZXhlYygpYC5cclxuICAgKiBWZWphIG1haXMgZW06IFtQb1F1ZXJ5QnVpbGRlcl0oL2RvY3VtZW50YXRpb24vcG8tcXVlcnktYnVpbGRlcikuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIE9iamV0byBxdWUgY29udMOpbSBvcyBjYW1wb3MgZSB2YWxvcmVzIGEgc2VyZW0gZmlsdHJhZG9zIG5vICpzY2hlbWEqLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZHMgQ2FtcG9zIHF1ZSBzZXLDo28gcmV0b3JuYWRvcyBub3MgcmVnaXN0cm9zLiBFc3RlIGNhbXBvcyBkZXZlbSBlc3RhciBkZW50cm8gZGVcclxuICAgKiB1bWEgKnN0cmluZyogc2VwYXJhZG9zIHBvciBlc3Bhw6dvIHBvZGVuZG8gdXNhciBvIGNhcmFjdGVyZSBgLWAgcGFyYSBleGNsdWlyIGNhbXBvcy5cclxuICAgKiBQb3IgZXhlbXBsbywgYSBkZWZpbmnDp8OjbyBhYmFpeG86XHJcbiAgICpcclxuICAgKiBgYGBcclxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJ25hbWUgYWdlIGFkZHJlc3MnKTtcclxuICAgKiBgYGBcclxuICAgKiBJcsOhIHJldG9ybmFyIGFwZW5hcyBvcyBjYW1wb3MgYG5hbWVgLCBgYWdlYCBlIGBhZGRyZXNzYC4gRSBwYXJhIG7Do28gbW9zdHJhciB1bSBjYW1wbyBvdSBtYWlzIGJhc3RhIGZhemVyOlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogUG9RdWVyeUJ1aWxkZXIuc2VsZWN0KCctbmFtZSAtYWdlJyk7XHJcbiAgICogYGBgXHJcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG3DqXRvZG8gZG8gYFBvUXVlcnlCdWlsZGVyYC5cclxuICAgKi9cclxuICBmaW5kKGZpbHRlcj86IG9iamVjdCwgZmllbGRzPzogc3RyaW5nKTogUG9RdWVyeUJ1aWxkZXIge1xyXG4gICAgY29uc3QgcXVlcnkgPSBuZXcgUG9RdWVyeUJ1aWxkZXIodGhpcy5wb1NjaGVtYVNlcnZpY2UsIHRoaXMuc2NoZW1hKTtcclxuXHJcbiAgICBpZiAoZmlsdGVyKSB7XHJcbiAgICAgIHF1ZXJ5LmZpbHRlcihmaWx0ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWVsZHMpIHtcclxuICAgICAgcXVlcnkuc2VsZWN0KGZpZWxkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHF1ZXJ5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVzY2EgdW0gcmVnaXN0cm8gcGVsbyBzZXUgKmlkKi5cclxuICAgKlxyXG4gICAqIFBhcmEgcXVlIGVzdGEgYnVzY2Egc2VqYSBjb25jbHXDrWRhIMOpIG5lY2Vzc8OhcmlvIHV0aWxpemFyIG8gbcOpdG9kbyBgUG9RdWVyeUJ1aWxkZXIuZXhlYygpYC5cclxuICAgKiBWZWphIG1haXMgZW06IFtQb1F1ZXJ5QnVpbGRlcl0oL2RvY3VtZW50YXRpb24vcG8tcXVlcnktYnVpbGRlcikuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueX0gaWQgSWRlbnRpZmljYWRvciBkbyByZWdpc3Ryby5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRzIENhbXBvcyBxdWUgc2Vyw6NvIHJldG9ybmFkb3Mgbm9zIHJlZ2lzdHJvcy4gRXN0ZSBjYW1wb3MgZGV2ZW0gZXN0YXIgZGVudHJvIGRlXHJcbiAgICogdW1hICpzdHJpbmcqIHNlcGFyYWRvcyBwb3IgZXNwYcOnbyBwb2RlbmRvIHVzYXIgbyBjYXJhY3RlcmUgYC1gIHBhcmEgZXhjbHVpciBjYW1wb3MuXHJcbiAgICogUG9yIGV4ZW1wbG8sIGEgZGVmaW5pw6fDo28gYWJhaXhvOlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogUG9RdWVyeUJ1aWxkZXIuc2VsZWN0KCduYW1lIGFnZSBhZGRyZXNzJyk7XHJcbiAgICogYGBgXHJcbiAgICogSXLDoSByZXRvcm5hciBhcGVuYXMgb3MgY2FtcG9zIGBuYW1lYCwgYGFnZWAgZSBgYWRkcmVzc2AuIEUgcGFyYSBuw6NvIG1vc3RyYXIgdW0gY2FtcG8gb3UgbWFpcyBiYXN0YSBmYXplcjpcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqIFBvUXVlcnlCdWlsZGVyLnNlbGVjdCgnLW5hbWUgLWFnZScpO1xyXG4gICAqIGBgYFxyXG4gICAqIEByZXR1cm5zIHtQb1F1ZXJ5QnVpbGRlcn0gT2JqZXRvIHF1ZSBwb3NzaWJpbGl0YSBlbmNhZGVhciB1bSBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXHJcbiAgICovXHJcbiAgZmluZEJ5SWQoaWQ6IGFueSwgZmllbGRzPzogc3RyaW5nKTogUG9RdWVyeUJ1aWxkZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZmluZE9uZSh7IFt0aGlzLnNjaGVtYS5pZEZpZWxkXTogaWQgfSwgZmllbGRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbWVsaGFudGUgYW8gbcOpdG9kbyBgUG9FbnRpdHkuZmluZCgpYCwgcG9yw6ltIHJldG9ybmEgYXBlbmFzIG8gcHJpbWVpcm8gcmVnaXN0cm8gZW5jb250cmFkbyBuYSBidXNjYS5cclxuICAgKlxyXG4gICAqIFBhcmEgcXVlIGVzdGEgYnVzY2Egc2VqYSBjb25jbHXDrWRhIMOpIG5lY2Vzc8OhcmlvIHV0aWxpemFyIG8gbcOpdG9kbyBgUG9RdWVyeUJ1aWxkZXIuZXhlYygpYC5cclxuICAgKiBWZWphIG1haXMgZW06IFtQb1F1ZXJ5QnVpbGRlcl0oL2RvY3VtZW50YXRpb24vcG8tcXVlcnktYnVpbGRlcikuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueX0gZmlsdGVyIE9iamV0byBxdWUgY29udMOpbSBvcyBjYW1wb3MgZSB2YWxvcmVzIGEgc2VyZW0gZmlsdHJhZG9zIG5vICpzY2hlbWEqLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZHMgQ2FtcG9zIHF1ZSBzZXLDo28gcmV0b3JuYWRvcyBub3MgcmVnaXN0cm9zLiBFc3RlIGNhbXBvcyBkZXZlbSBlc3RhciBkZW50cm8gZGVcclxuICAgKiB1bWEgKnN0cmluZyogc2VwYXJhZG9zIHBvciBlc3Bhw6dvIHBvZGVuZG8gdXNhciBvIGNhcmFjdGVyZSBgLWAgcGFyYSBleGNsdWlyIGNhbXBvcy5cclxuICAgKiBQb3IgZXhlbXBsbywgYSBkZWZpbmnDp8OjbyBhYmFpeG86XHJcbiAgICpcclxuICAgKiBgYGBcclxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJ25hbWUgYWdlIGFkZHJlc3MnKTtcclxuICAgKiBgYGBcclxuICAgKiBJcsOhIHJldG9ybmFyIGFwZW5hcyBvcyBjYW1wb3MgYG5hbWVgLCBgYWdlYCBlIGBhZGRyZXNzYC4gRSBwYXJhIG7Do28gbW9zdHJhciB1bSBjYW1wbyBvdSBtYWlzIGJhc3RhIGZhemVyOlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogUG9RdWVyeUJ1aWxkZXIuc2VsZWN0KCctbmFtZSAtYWdlJyk7XHJcbiAgICogYGBgXHJcbiAgICogQHJldHVybnMge1BvUXVlcnlCdWlsZGVyfSBPYmpldG8gcXVlIHBvc3NpYmlsaXRhIGVuY2FkZWFyIHVtIG3DqXRvZG8gZG8gYFBvUXVlcnlCdWlsZGVyYC5cclxuICAgKi9cclxuICBmaW5kT25lKGZpbHRlcj86IGFueSwgZmllbGRzPzogc3RyaW5nKTogUG9RdWVyeUJ1aWxkZXIge1xyXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmZpbmQoZmlsdGVyLCBmaWVsZHMpO1xyXG4gICAgcXVlcnkubGltaXQoMSk7XHJcbiAgICByZXR1cm4gcXVlcnk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgdW0gcmVnaXN0cm8uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVjb3JkIFJlZ2lzdHJvIHF1ZSBzZXLDoSByZW1vdmlkby5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VzdG9tUmVxdWVzdElkIElkZW50aWZpY2Fkb3IgY3VzdG9taXphZG8gZG8gY29tYW5kby5cclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWVzc2EgcXVlIMOpIGNvbmNsdcOtZGEgYXDDs3MgbyByZWdpc3RybyBzZXIgcmVtb3ZpZG8uXHJcbiAgICovXHJcbiAgYXN5bmMgcmVtb3ZlKHJlY29yZDogb2JqZWN0LCBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgdmFsaWRhdGVQYXJhbWV0ZXIoeyByZWNvcmQgfSk7XHJcblxyXG4gICAgY29uc3QgcmVtb3ZlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICBjb25zdCBpZEZpZWxkID0gcmVjb3JkW3RoaXMuc2NoZW1hLmlkRmllbGRdID8gdGhpcy5zY2hlbWEuaWRGaWVsZCA6IFBvU2NoZW1hVXRpbC5zeW5jSW50ZXJuYWxJZEZpZWxkTmFtZTtcclxuICAgICAgY29uc3Qgc2VydmVyUmVjb3JkID0gUG9TY2hlbWFVdGlsLnNlcGFyYXRlU2NoZW1hRmllbGRzKHRoaXMuc2NoZW1hLCByZWNvcmQpWydzZXJ2ZXJSZWNvcmQnXTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMucG9TY2hlbWFTZXJ2aWNlLnJlbW92ZSh0aGlzLnNjaGVtYS5uYW1lLCByZWNvcmRbaWRGaWVsZF0pO1xyXG4gICAgICBhd2FpdCB0aGlzLmV2ZW50U291cmNpbmcucmVtb3ZlKHRoaXMuc2NoZW1hLm5hbWUsIHNlcnZlclJlY29yZCwgY3VzdG9tUmVxdWVzdElkKTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucG9TY2hlbWFTZXJ2aWNlLmxpbWl0ZWRDYWxsV3JhcChyZW1vdmUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWx0ZXJhIG91IGluY2x1aSB1bSByZWdpc3Ryby5cclxuICAgKlxyXG4gICAqID4gTyByZWdpc3RybyBzZXLDoSBhbHRlcmFkbyBzZSBlbGUgcG9zc3VpciB1bSAqaWQqLCBjYXNvIGNvbnRyw6FyaW8gdW0gbm92byByZWdpc3RybyBzZXLDoSBjcmlhZG8uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVjb3JkIFJlZ2lzdHJvIHF1ZSBzZXLDoSBwZXJzaXN0aWRvLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXN0b21SZXF1ZXN0SWQgSWRlbnRpZmljYWRvciBjdXN0b21pemFkbyBkbyBjb21hbmRvLlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9tZXNzYSBxdWUgw6kgY29uY2x1w61kYSBhcMOzcyBvIHJlZ2lzdHJvIHNlciBhbHRlcmFkbyBvdSBpbmNsdcOtZG8uXHJcbiAgICovXHJcbiAgYXN5bmMgc2F2ZShyZWNvcmQ6IG9iamVjdCwgY3VzdG9tUmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgcmVjb3JkIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnBvU2NoZW1hU2VydmljZS5saW1pdGVkQ2FsbFdyYXAodGhpcy5zZWxlY3RTYXZlVHlwZS5iaW5kKHRoaXMsIHJlY29yZCwgdHJ1ZSwgY3VzdG9tUmVxdWVzdElkKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYWx2YSB1bWEgbGlzdGEgZGUgcmVnaXN0cm9zIGVtIGxvdGUuXHJcbiAgICpcclxuICAgKiA+IFBhcmEgY2FkYSByZWdpc3RybyBkYSBsaXN0YSwgc2Vyw6EgaW5zZXJpZG8gdW0gbm92byByZWdpc3RybyBzZSBvIG1lc21vIG7Do28gdGl2ZXIgKmlkKiwgY2FzbyBjb250csOhcmlvXHJcbiAgICogc2Vyw6EgY29udGFkbyBjb21vIHVtYSBhdHVhbGl6YcOnw6NvIGRlIHVtIHJlZ2lzdHJvIGV4aXN0ZW50ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8b2JqZWN0Pn0gcmVjb3JkcyBMaXN0YSBkZSByZWdpc3Ryb3MgcXVlIHNlcsOjbyBwZXJzaXN0aWRvcy5cclxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz4gfCBzdHJpbmd9IGN1c3RvbVJlcXVlc3RJZHMgSWRlbnRpZmljYWRvciBjdXN0b21pemFkbyBkbyBjb21hbmRvLlxyXG4gICAqXHJcbiAgICogQW8gcGFzc2FyIHVtYSBsaXN0YSBkZSBpZGVudGlmaWNhZG9yZXMsIGNhZGEgw61uZGljZSBkYSBsaXN0YSBkZSBpZGVudGlmaWNhZG9yZXMgZGV2ZXLDoVxyXG4gICAqIGNvcnJlc3BvbmRlciBhbyDDrW5kaWNlIGRvIHJlZ2lzdHJvIG5hIGxpc3RhIGRlIHJlZ2lzdHJvcy5cclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSBQcm9tZXNzYSBxdWUgw6kgY29uY2x1w61kYSBhcMOzcyBvcyByZWdpc3Ryb3Mgc2VyZW0gYWx0ZXJhZG9zIG91IGluY2x1w61kb3MuXHJcbiAgICovXHJcbiAgYXN5bmMgc2F2ZUFsbChyZWNvcmRzOiBBcnJheTxvYmplY3Q+LCBjdXN0b21SZXF1ZXN0SWRzPzogQXJyYXk8c3RyaW5nPiB8IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICB2YWxpZGF0ZVBhcmFtZXRlcih7IHJlY29yZHMgfSk7XHJcblxyXG4gICAgY29uc3Qgc2F2ZUFsbCA9IGFzeW5jICgpID0+IHtcclxuICAgICAgY29uc3QgYmF0Y2hFdmVudHMgPSBbXTtcclxuXHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByZWNvcmRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNbaW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IHNlbmRUb0V2ZW50U291cmNpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgaXNOb25Mb2NhbFJlY29yZENoYW5nZWQgPSBhd2FpdCB0aGlzLmlzTm9uTG9jYWxSZWNvcmRDaGFuZ2VkKHJlY29yZCk7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZFJlY29yZCA9IGF3YWl0IHRoaXMuc2VsZWN0U2F2ZVR5cGUocmVjb3JkLCBzZW5kVG9FdmVudFNvdXJjaW5nKTtcclxuXHJcbiAgICAgICAgaWYgKGlzTm9uTG9jYWxSZWNvcmRDaGFuZ2VkKSB7XHJcbiAgICAgICAgICBjb25zdCBjdXN0b21SZXF1ZXN0SWQgPSBjdXN0b21SZXF1ZXN0SWRzIGluc3RhbmNlb2YgQXJyYXkgPyBjdXN0b21SZXF1ZXN0SWRzW2luZGV4XSA6IGN1c3RvbVJlcXVlc3RJZHM7XHJcbiAgICAgICAgICBjb25zdCBldmVudE9wZXJhdGlvbiA9IHRoaXMuY3JlYXRlRXZlbnRPcGVyYXRpb24ocmVjb3JkLCB1cGRhdGVkUmVjb3JkLCBjdXN0b21SZXF1ZXN0SWQpO1xyXG4gICAgICAgICAgYmF0Y2hFdmVudHMucHVzaChldmVudE9wZXJhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLmV2ZW50U291cmNpbmcuY3JlYXRlQmF0Y2hFdmVudHModGhpcy5zY2hlbWEubmFtZSwgYmF0Y2hFdmVudHMpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wb1NjaGVtYVNlcnZpY2UubGltaXRlZENhbGxXcmFwKHNhdmVBbGwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGUobmV3UmVjb3JkOiBhbnksIHNlbmRUb0V2ZW50U291cmNpbmc6IGJvb2xlYW4sIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcblxyXG4gICAgY29uc3Qgc3luY1Byb3BlcnRpZXMgPSB7XHJcbiAgICAgIFtQb1NjaGVtYVV0aWwuc3luY0ludGVybmFsSWRGaWVsZE5hbWVdOiB0aW1lLFxyXG4gICAgICBTeW5jSW5zZXJ0ZWREYXRlVGltZTogdGltZSxcclxuICAgICAgU3luY1VwZGF0ZWREYXRlVGltZTogbnVsbCxcclxuICAgICAgU3luY0V4Y2x1c2lvbkRhdGVUaW1lOiBudWxsLFxyXG4gICAgICBTeW5jRGVsZXRlZDogZmFsc2UsXHJcbiAgICAgIFN5bmNTdGF0dXM6IDBcclxuICAgIH07XHJcbiAgICBjb25zdCByZWNvcmRXaXRoU3luY1Byb3BlcnRpZXMgPSB7IC4uLm5ld1JlY29yZCwgLi4uc3luY1Byb3BlcnRpZXMgfTtcclxuXHJcbiAgICBjb25zdCByZWNvcmRlZERhdGEgPSBhd2FpdCB0aGlzLnBvU2NoZW1hU2VydmljZS5jcmVhdGUodGhpcy5zY2hlbWEsIHJlY29yZFdpdGhTeW5jUHJvcGVydGllcyk7XHJcblxyXG4gICAgaWYgKHNlbmRUb0V2ZW50U291cmNpbmcpIHtcclxuICAgICAgYXdhaXQgdGhpcy5ldmVudFNvdXJjaW5nLmNyZWF0ZSh0aGlzLnNjaGVtYS5uYW1lLCByZWNvcmRXaXRoU3luY1Byb3BlcnRpZXMsIGN1c3RvbVJlcXVlc3RJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlY29yZGVkRGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRXZlbnRPcGVyYXRpb24oXHJcbiAgICByZWNvcmQ6IG9iamVjdCxcclxuICAgIHVwZGF0ZWRSZWNvcmQ6IG9iamVjdCxcclxuICAgIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZ1xyXG4gICk6IFBvRXZlbnRTb3VyY2luZ1N1bW1hcnlJdGVtIHtcclxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IFBvU2NoZW1hVXRpbC5nZXRSZWNvcmRJZChyZWNvcmQsIHRoaXMuc2NoZW1hKVxyXG4gICAgICA/IFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbi5VcGRhdGVcclxuICAgICAgOiBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24uSW5zZXJ0O1xyXG5cclxuICAgIGNvbnN0IHNlcnZlclJlY29yZCA9IFBvU2NoZW1hVXRpbC5zZXBhcmF0ZVNjaGVtYUZpZWxkcyh0aGlzLnNjaGVtYSwgdXBkYXRlZFJlY29yZClbJ3NlcnZlclJlY29yZCddO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlY29yZDogc2VydmVyUmVjb3JkLFxyXG4gICAgICBjdXN0b21SZXF1ZXN0SWQ6IGN1c3RvbVJlcXVlc3RJZCxcclxuICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb25cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGlzTm9uTG9jYWxSZWNvcmRDaGFuZ2VkKHVwZGF0ZWRSZWNvcmQ6IG9iamVjdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3Qgbm9uTG9jYWxGaWVsZE5hbWVzID0gUG9TY2hlbWFVdGlsLmdldE5vbkxvY2FsRmllbGROYW1lcyh0aGlzLnNjaGVtYSk7XHJcbiAgICBjb25zdCByZWNvcmQgPSBhd2FpdCB0aGlzLnBvU2NoZW1hU2VydmljZS5nZXQodGhpcy5zY2hlbWEubmFtZSwgdXBkYXRlZFJlY29yZFt0aGlzLnNjaGVtYS5pZEZpZWxkXSk7XHJcblxyXG4gICAgcmV0dXJuICFQb1NjaGVtYVV0aWwuaXNNb2RlbHNFcXVhbChub25Mb2NhbEZpZWxkTmFtZXMsIHJlY29yZCwgdXBkYXRlZFJlY29yZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNlbGVjdFNhdmVUeXBlKFxyXG4gICAgcmVjb3JkOiBvYmplY3QsXHJcbiAgICBzZW5kVG9FdmVudFNvdXJjaW5nOiBib29sZWFuLFxyXG4gICAgY3VzdG9tUmVxdWVzdElkPzogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxvYmplY3Q+IHtcclxuICAgIGNvbnN0IGhhc0lkID0gUG9TY2hlbWFVdGlsLmdldFJlY29yZElkKHJlY29yZCwgdGhpcy5zY2hlbWEpO1xyXG5cclxuICAgIHJldHVybiBoYXNJZFxyXG4gICAgICA/IGF3YWl0IHRoaXMudXBkYXRlKHJlY29yZCwgc2VuZFRvRXZlbnRTb3VyY2luZywgY3VzdG9tUmVxdWVzdElkKVxyXG4gICAgICA6IGF3YWl0IHRoaXMuY3JlYXRlKHJlY29yZCwgc2VuZFRvRXZlbnRTb3VyY2luZywgY3VzdG9tUmVxdWVzdElkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlKHVwZGF0ZWRSZWNvcmQ6IGFueSwgc2VuZFRvRXZlbnRTb3VyY2luZzogYm9vbGVhbiwgY3VzdG9tUmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxvYmplY3Q+IHtcclxuICAgIHVwZGF0ZWRSZWNvcmQuU3luY1VwZGF0ZWREYXRlVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgdXBkYXRlZFJlY29yZC5TeW5jU3RhdHVzID0gMDtcclxuXHJcbiAgICBjb25zdCBpc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCA9IGF3YWl0IHRoaXMuaXNOb25Mb2NhbFJlY29yZENoYW5nZWQodXBkYXRlZFJlY29yZCk7XHJcbiAgICBjb25zdCByZWNvcmRlZERhdGEgPSBhd2FpdCB0aGlzLnBvU2NoZW1hU2VydmljZS51cGRhdGUodGhpcy5zY2hlbWEsIHVwZGF0ZWRSZWNvcmQpO1xyXG5cclxuICAgIGlmIChpc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCAmJiBzZW5kVG9FdmVudFNvdXJjaW5nKSB7XHJcbiAgICAgIGNvbnN0IHNlcnZlclJlY29yZCA9IFBvU2NoZW1hVXRpbC5zZXBhcmF0ZVNjaGVtYUZpZWxkcyh0aGlzLnNjaGVtYSwgdXBkYXRlZFJlY29yZClbJ3NlcnZlclJlY29yZCddO1xyXG4gICAgICBhd2FpdCB0aGlzLmV2ZW50U291cmNpbmcudXBkYXRlKHRoaXMuc2NoZW1hLm5hbWUsIHNlcnZlclJlY29yZCwgY3VzdG9tUmVxdWVzdElkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVjb3JkZWREYXRhO1xyXG4gIH1cclxufVxyXG4iXX0=
1
+ import { validateParameter } from '../../utils/utils';
2
+ import { PoEventSourcingOperation } from '../../services/po-event-sourcing';
3
+ import { PoQueryBuilder } from './../po-query-builder/po-query-builder.model';
4
+ import { PoSchemaUtil } from '../../services/po-schema';
5
+ /**
6
+ * @description
7
+ *
8
+ * Uma instância `PoEntity` representa um *schema* e ela contém métodos que possibilitam manipular seus registros,
9
+ * como por exemplo: buscar, criar e remover.
10
+ *
11
+ * Esta instância pode ser obtida a partir do retorno do método `PoSyncService.getModel('schema name')`.
12
+ */
13
+ export class PoEntity {
14
+ constructor(eventSourcing, schema, poSchemaService) {
15
+ this.eventSourcing = eventSourcing;
16
+ this.schema = schema;
17
+ this.poSchemaService = poSchemaService;
18
+ }
19
+ /**
20
+ * Busca os registros do *schema*, podendo filtrar o resultado a partir do filtro passado e retornando apenas
21
+ * os campos definidos.
22
+ *
23
+ * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
24
+ * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
25
+ *
26
+ * @param {object} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
27
+ * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
28
+ * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
29
+ * Por exemplo, a definição abaixo:
30
+ *
31
+ * ```
32
+ * PoQueryBuilder.select('name age address');
33
+ * ```
34
+ * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
35
+ *
36
+ * ```
37
+ * PoQueryBuilder.select('-name -age');
38
+ * ```
39
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
40
+ */
41
+ find(filter, fields) {
42
+ const query = new PoQueryBuilder(this.poSchemaService, this.schema);
43
+ if (filter) {
44
+ query.filter(filter);
45
+ }
46
+ if (fields) {
47
+ query.select(fields);
48
+ }
49
+ return query;
50
+ }
51
+ /**
52
+ * Busca um registro pelo seu *id*.
53
+ *
54
+ * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
55
+ * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
56
+ *
57
+ * @param {any} id Identificador do registro.
58
+ * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
59
+ * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
60
+ * Por exemplo, a definição abaixo:
61
+ *
62
+ * ```
63
+ * PoQueryBuilder.select('name age address');
64
+ * ```
65
+ * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
66
+ *
67
+ * ```
68
+ * PoQueryBuilder.select('-name -age');
69
+ * ```
70
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
71
+ */
72
+ findById(id, fields) {
73
+ return this.findOne({ [this.schema.idField]: id }, fields);
74
+ }
75
+ /**
76
+ * Semelhante ao método `PoEntity.find()`, porém retorna apenas o primeiro registro encontrado na busca.
77
+ *
78
+ * Para que esta busca seja concluída é necessário utilizar o método `PoQueryBuilder.exec()`.
79
+ * Veja mais em: [PoQueryBuilder](/documentation/po-query-builder).
80
+ *
81
+ * @param {any} filter Objeto que contém os campos e valores a serem filtrados no *schema*.
82
+ * @param {string} fields Campos que serão retornados nos registros. Este campos devem estar dentro de
83
+ * uma *string* separados por espaço podendo usar o caractere `-` para excluir campos.
84
+ * Por exemplo, a definição abaixo:
85
+ *
86
+ * ```
87
+ * PoQueryBuilder.select('name age address');
88
+ * ```
89
+ * Irá retornar apenas os campos `name`, `age` e `address`. E para não mostrar um campo ou mais basta fazer:
90
+ *
91
+ * ```
92
+ * PoQueryBuilder.select('-name -age');
93
+ * ```
94
+ * @returns {PoQueryBuilder} Objeto que possibilita encadear um método do `PoQueryBuilder`.
95
+ */
96
+ findOne(filter, fields) {
97
+ const query = this.find(filter, fields);
98
+ query.limit(1);
99
+ return query;
100
+ }
101
+ /**
102
+ * Remove um registro.
103
+ *
104
+ * @param {object} record Registro que será removido.
105
+ * @param {string} customRequestId Identificador customizado do comando.
106
+ * @returns {Promise} Promessa que é concluída após o registro ser removido.
107
+ */
108
+ async remove(record, customRequestId) {
109
+ validateParameter({ record });
110
+ const remove = async () => {
111
+ const idField = record[this.schema.idField] ? this.schema.idField : PoSchemaUtil.syncInternalIdFieldName;
112
+ const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, record)['serverRecord'];
113
+ await this.poSchemaService.remove(this.schema.name, record[idField]);
114
+ await this.eventSourcing.remove(this.schema.name, serverRecord, customRequestId);
115
+ };
116
+ return this.poSchemaService.limitedCallWrap(remove);
117
+ }
118
+ /**
119
+ * Altera ou inclui um registro.
120
+ *
121
+ * > O registro será alterado se ele possuir um *id*, caso contrário um novo registro será criado.
122
+ *
123
+ * @param {object} record Registro que será persistido.
124
+ * @param {string} customRequestId Identificador customizado do comando.
125
+ * @returns {Promise} Promessa que é concluída após o registro ser alterado ou incluído.
126
+ */
127
+ async save(record, customRequestId) {
128
+ validateParameter({ record });
129
+ return this.poSchemaService.limitedCallWrap(this.selectSaveType.bind(this, record, true, customRequestId));
130
+ }
131
+ /**
132
+ * Salva uma lista de registros em lote.
133
+ *
134
+ * > Para cada registro da lista, será inserido um novo registro se o mesmo não tiver *id*, caso contrário
135
+ * será contado como uma atualização de um registro existente.
136
+ *
137
+ * @param {Array<object>} records Lista de registros que serão persistidos.
138
+ * @param {Array<string> | string} customRequestIds Identificador customizado do comando.
139
+ *
140
+ * Ao passar uma lista de identificadores, cada índice da lista de identificadores deverá
141
+ * corresponder ao índice do registro na lista de registros.
142
+ * @returns {Promise<any>} Promessa que é concluída após os registros serem alterados ou incluídos.
143
+ */
144
+ async saveAll(records, customRequestIds) {
145
+ validateParameter({ records });
146
+ const saveAll = async () => {
147
+ const batchEvents = [];
148
+ for (let index = 0; index < records.length; index++) {
149
+ const record = records[index];
150
+ const sendToEventSourcing = false;
151
+ const isNonLocalRecordChanged = await this.isNonLocalRecordChanged(record);
152
+ const updatedRecord = await this.selectSaveType(record, sendToEventSourcing);
153
+ if (isNonLocalRecordChanged) {
154
+ const customRequestId = customRequestIds instanceof Array ? customRequestIds[index] : customRequestIds;
155
+ const eventOperation = this.createEventOperation(record, updatedRecord, customRequestId);
156
+ batchEvents.push(eventOperation);
157
+ }
158
+ }
159
+ await this.eventSourcing.createBatchEvents(this.schema.name, batchEvents);
160
+ };
161
+ return this.poSchemaService.limitedCallWrap(saveAll);
162
+ }
163
+ async create(newRecord, sendToEventSourcing, customRequestId) {
164
+ const time = new Date().getTime();
165
+ const syncProperties = {
166
+ [PoSchemaUtil.syncInternalIdFieldName]: time,
167
+ SyncInsertedDateTime: time,
168
+ SyncUpdatedDateTime: null,
169
+ SyncExclusionDateTime: null,
170
+ SyncDeleted: false,
171
+ SyncStatus: 0
172
+ };
173
+ const recordWithSyncProperties = { ...newRecord, ...syncProperties };
174
+ const recordedData = await this.poSchemaService.create(this.schema, recordWithSyncProperties);
175
+ if (sendToEventSourcing) {
176
+ await this.eventSourcing.create(this.schema.name, recordWithSyncProperties, customRequestId);
177
+ }
178
+ return recordedData;
179
+ }
180
+ createEventOperation(record, updatedRecord, customRequestId) {
181
+ const operation = PoSchemaUtil.getRecordId(record, this.schema)
182
+ ? PoEventSourcingOperation.Update
183
+ : PoEventSourcingOperation.Insert;
184
+ const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, updatedRecord)['serverRecord'];
185
+ return {
186
+ record: serverRecord,
187
+ customRequestId: customRequestId,
188
+ operation: operation
189
+ };
190
+ }
191
+ async isNonLocalRecordChanged(updatedRecord) {
192
+ const nonLocalFieldNames = PoSchemaUtil.getNonLocalFieldNames(this.schema);
193
+ const record = await this.poSchemaService.get(this.schema.name, updatedRecord[this.schema.idField]);
194
+ return !PoSchemaUtil.isModelsEqual(nonLocalFieldNames, record, updatedRecord);
195
+ }
196
+ async selectSaveType(record, sendToEventSourcing, customRequestId) {
197
+ const hasId = PoSchemaUtil.getRecordId(record, this.schema);
198
+ return hasId
199
+ ? await this.update(record, sendToEventSourcing, customRequestId)
200
+ : await this.create(record, sendToEventSourcing, customRequestId);
201
+ }
202
+ async update(updatedRecord, sendToEventSourcing, customRequestId) {
203
+ updatedRecord.SyncUpdatedDateTime = new Date().getTime();
204
+ updatedRecord.SyncStatus = 0;
205
+ const isNonLocalRecordChanged = await this.isNonLocalRecordChanged(updatedRecord);
206
+ const recordedData = await this.poSchemaService.update(this.schema, updatedRecord);
207
+ if (isNonLocalRecordChanged && sendToEventSourcing) {
208
+ const serverRecord = PoSchemaUtil.separateSchemaFields(this.schema, updatedRecord)['serverRecord'];
209
+ await this.eventSourcing.update(this.schema.name, serverRecord, customRequestId);
210
+ }
211
+ return recordedData;
212
+ }
213
+ }
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZW50aXR5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3luYy9zcmMvbGliL21vZGVscy9wby1lbnRpdHkvcG8tZW50aXR5Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sRUFDTCx3QkFBd0IsRUFHekIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDOUUsT0FBTyxFQUFtQixZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd6RTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFDbkIsWUFDVSxhQUFxQyxFQUNyQyxNQUFvQixFQUNwQixlQUFnQztRQUZoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFDdkMsQ0FBQztJQUVKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FxQkc7SUFDSCxJQUFJLENBQUMsTUFBZSxFQUFFLE1BQWU7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEUsSUFBSSxNQUFNLEVBQUU7WUFDVixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsSUFBSSxNQUFNLEVBQUU7WUFDVixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bb0JHO0lBQ0gsUUFBUSxDQUFDLEVBQU8sRUFBRSxNQUFlO1FBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bb0JHO0lBQ0gsT0FBTyxDQUFDLE1BQVksRUFBRSxNQUFlO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQWMsRUFBRSxlQUF3QjtRQUNuRCxpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFOUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDeEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUM7WUFDekcsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFNUYsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNyRSxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNuRixDQUFDLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBYyxFQUFFLGVBQXdCO1FBQ2pELGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUU5QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBc0IsRUFBRSxnQkFBeUM7UUFDN0UsaUJBQWlCLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRS9CLE1BQU0sT0FBTyxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ3pCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUV2QixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDbkQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QixNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQztnQkFFbEMsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0UsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO2dCQUU3RSxJQUFJLHVCQUF1QixFQUFFO29CQUMzQixNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDdkcsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7b0JBQ3pGLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ2xDO2FBQ0Y7WUFFRCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFjLEVBQUUsbUJBQTRCLEVBQUUsZUFBd0I7UUFDekYsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVsQyxNQUFNLGNBQWMsR0FBRztZQUNyQixDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLElBQUk7WUFDNUMsb0JBQW9CLEVBQUUsSUFBSTtZQUMxQixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLHFCQUFxQixFQUFFLElBQUk7WUFDM0IsV0FBVyxFQUFFLEtBQUs7WUFDbEIsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDO1FBQ0YsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFFckUsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFFOUYsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLHdCQUF3QixFQUFFLGVBQWUsQ0FBQyxDQUFDO1NBQzlGO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVPLG9CQUFvQixDQUMxQixNQUFjLEVBQ2QsYUFBcUIsRUFDckIsZUFBd0I7UUFFeEIsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM3RCxDQUFDLENBQUMsd0JBQXdCLENBQUMsTUFBTTtZQUNqQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDO1FBRXBDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRW5HLE9BQU87WUFDTCxNQUFNLEVBQUUsWUFBWTtZQUNwQixlQUFlLEVBQUUsZUFBZTtZQUNoQyxTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxhQUFxQjtRQUN6RCxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0UsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRXBHLE9BQU8sQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRU8sS0FBSyxDQUFDLGNBQWMsQ0FDMUIsTUFBYyxFQUNkLG1CQUE0QixFQUM1QixlQUF3QjtRQUV4QixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUQsT0FBTyxLQUFLO1lBQ1YsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxDQUFDO1lBQ2pFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWtCLEVBQUUsbUJBQTRCLEVBQUUsZUFBd0I7UUFDN0YsYUFBYSxDQUFDLG1CQUFtQixHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekQsYUFBYSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFN0IsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFbkYsSUFBSSx1QkFBdUIsSUFBSSxtQkFBbUIsRUFBRTtZQUNsRCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNuRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztTQUNsRjtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHZhbGlkYXRlUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24sXG4gIFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UsXG4gIFBvRXZlbnRTb3VyY2luZ1N1bW1hcnlJdGVtXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWV2ZW50LXNvdXJjaW5nJztcbmltcG9ydCB7IFBvUXVlcnlCdWlsZGVyIH0gZnJvbSAnLi8uLi9wby1xdWVyeS1idWlsZGVyL3BvLXF1ZXJ5LWJ1aWxkZXIubW9kZWwnO1xuaW1wb3J0IHsgUG9TY2hlbWFTZXJ2aWNlLCBQb1NjaGVtYVV0aWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1zY2hlbWEnO1xuaW1wb3J0IHsgUG9TeW5jU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tc3luYy9pbnRlcmZhY2VzL3BvLXN5bmMtc2NoZW1hLmludGVyZmFjZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogVW1hIGluc3TDom5jaWEgYFBvRW50aXR5YCByZXByZXNlbnRhIHVtICpzY2hlbWEqIGUgZWxhIGNvbnTDqW0gbcOpdG9kb3MgcXVlIHBvc3NpYmlsaXRhbSBtYW5pcHVsYXIgc2V1cyByZWdpc3Ryb3MsXG4gKiBjb21vIHBvciBleGVtcGxvOiBidXNjYXIsIGNyaWFyIGUgcmVtb3Zlci5cbiAqXG4gKiBFc3RhIGluc3TDom5jaWEgcG9kZSBzZXIgb2J0aWRhIGEgcGFydGlyIGRvIHJldG9ybm8gZG8gbcOpdG9kbyBgUG9TeW5jU2VydmljZS5nZXRNb2RlbCgnc2NoZW1hIG5hbWUnKWAuXG4gKi9cbmV4cG9ydCBjbGFzcyBQb0VudGl0eSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZXZlbnRTb3VyY2luZzogUG9FdmVudFNvdXJjaW5nU2VydmljZSxcbiAgICBwcml2YXRlIHNjaGVtYTogUG9TeW5jU2NoZW1hLFxuICAgIHByaXZhdGUgcG9TY2hlbWFTZXJ2aWNlOiBQb1NjaGVtYVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBCdXNjYSBvcyByZWdpc3Ryb3MgZG8gKnNjaGVtYSosIHBvZGVuZG8gZmlsdHJhciBvIHJlc3VsdGFkbyBhIHBhcnRpciBkbyBmaWx0cm8gcGFzc2FkbyBlIHJldG9ybmFuZG8gYXBlbmFzXG4gICAqIG9zIGNhbXBvcyBkZWZpbmlkb3MuXG4gICAqXG4gICAqIFBhcmEgcXVlIGVzdGEgYnVzY2Egc2VqYSBjb25jbHXDrWRhIMOpIG5lY2Vzc8OhcmlvIHV0aWxpemFyIG8gbcOpdG9kbyBgUG9RdWVyeUJ1aWxkZXIuZXhlYygpYC5cbiAgICogVmVqYSBtYWlzIGVtOiBbUG9RdWVyeUJ1aWxkZXJdKC9kb2N1bWVudGF0aW9uL3BvLXF1ZXJ5LWJ1aWxkZXIpLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIE9iamV0byBxdWUgY29udMOpbSBvcyBjYW1wb3MgZSB2YWxvcmVzIGEgc2VyZW0gZmlsdHJhZG9zIG5vICpzY2hlbWEqLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRzIENhbXBvcyBxdWUgc2Vyw6NvIHJldG9ybmFkb3Mgbm9zIHJlZ2lzdHJvcy4gRXN0ZSBjYW1wb3MgZGV2ZW0gZXN0YXIgZGVudHJvIGRlXG4gICAqIHVtYSAqc3RyaW5nKiBzZXBhcmFkb3MgcG9yIGVzcGHDp28gcG9kZW5kbyB1c2FyIG8gY2FyYWN0ZXJlIGAtYCBwYXJhIGV4Y2x1aXIgY2FtcG9zLlxuICAgKiBQb3IgZXhlbXBsbywgYSBkZWZpbmnDp8OjbyBhYmFpeG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJ25hbWUgYWdlIGFkZHJlc3MnKTtcbiAgICogYGBgXG4gICAqIElyw6EgcmV0b3JuYXIgYXBlbmFzIG9zIGNhbXBvcyBgbmFtZWAsIGBhZ2VgIGUgYGFkZHJlc3NgLiBFIHBhcmEgbsOjbyBtb3N0cmFyIHVtIGNhbXBvIG91IG1haXMgYmFzdGEgZmF6ZXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJy1uYW1lIC1hZ2UnKTtcbiAgICogYGBgXG4gICAqIEByZXR1cm5zIHtQb1F1ZXJ5QnVpbGRlcn0gT2JqZXRvIHF1ZSBwb3NzaWJpbGl0YSBlbmNhZGVhciB1bSBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXG4gICAqL1xuICBmaW5kKGZpbHRlcj86IG9iamVjdCwgZmllbGRzPzogc3RyaW5nKTogUG9RdWVyeUJ1aWxkZXIge1xuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFBvUXVlcnlCdWlsZGVyKHRoaXMucG9TY2hlbWFTZXJ2aWNlLCB0aGlzLnNjaGVtYSk7XG5cbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICBxdWVyeS5maWx0ZXIoZmlsdGVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGRzKSB7XG4gICAgICBxdWVyeS5zZWxlY3QoZmllbGRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQnVzY2EgdW0gcmVnaXN0cm8gcGVsbyBzZXUgKmlkKi5cbiAgICpcbiAgICogUGFyYSBxdWUgZXN0YSBidXNjYSBzZWphIGNvbmNsdcOtZGEgw6kgbmVjZXNzw6FyaW8gdXRpbGl6YXIgbyBtw6l0b2RvIGBQb1F1ZXJ5QnVpbGRlci5leGVjKClgLlxuICAgKiBWZWphIG1haXMgZW06IFtQb1F1ZXJ5QnVpbGRlcl0oL2RvY3VtZW50YXRpb24vcG8tcXVlcnktYnVpbGRlcikuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBpZCBJZGVudGlmaWNhZG9yIGRvIHJlZ2lzdHJvLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRzIENhbXBvcyBxdWUgc2Vyw6NvIHJldG9ybmFkb3Mgbm9zIHJlZ2lzdHJvcy4gRXN0ZSBjYW1wb3MgZGV2ZW0gZXN0YXIgZGVudHJvIGRlXG4gICAqIHVtYSAqc3RyaW5nKiBzZXBhcmFkb3MgcG9yIGVzcGHDp28gcG9kZW5kbyB1c2FyIG8gY2FyYWN0ZXJlIGAtYCBwYXJhIGV4Y2x1aXIgY2FtcG9zLlxuICAgKiBQb3IgZXhlbXBsbywgYSBkZWZpbmnDp8OjbyBhYmFpeG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJ25hbWUgYWdlIGFkZHJlc3MnKTtcbiAgICogYGBgXG4gICAqIElyw6EgcmV0b3JuYXIgYXBlbmFzIG9zIGNhbXBvcyBgbmFtZWAsIGBhZ2VgIGUgYGFkZHJlc3NgLiBFIHBhcmEgbsOjbyBtb3N0cmFyIHVtIGNhbXBvIG91IG1haXMgYmFzdGEgZmF6ZXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJy1uYW1lIC1hZ2UnKTtcbiAgICogYGBgXG4gICAqIEByZXR1cm5zIHtQb1F1ZXJ5QnVpbGRlcn0gT2JqZXRvIHF1ZSBwb3NzaWJpbGl0YSBlbmNhZGVhciB1bSBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXG4gICAqL1xuICBmaW5kQnlJZChpZDogYW55LCBmaWVsZHM/OiBzdHJpbmcpOiBQb1F1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuZmluZE9uZSh7IFt0aGlzLnNjaGVtYS5pZEZpZWxkXTogaWQgfSwgZmllbGRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW1lbGhhbnRlIGFvIG3DqXRvZG8gYFBvRW50aXR5LmZpbmQoKWAsIHBvcsOpbSByZXRvcm5hIGFwZW5hcyBvIHByaW1laXJvIHJlZ2lzdHJvIGVuY29udHJhZG8gbmEgYnVzY2EuXG4gICAqXG4gICAqIFBhcmEgcXVlIGVzdGEgYnVzY2Egc2VqYSBjb25jbHXDrWRhIMOpIG5lY2Vzc8OhcmlvIHV0aWxpemFyIG8gbcOpdG9kbyBgUG9RdWVyeUJ1aWxkZXIuZXhlYygpYC5cbiAgICogVmVqYSBtYWlzIGVtOiBbUG9RdWVyeUJ1aWxkZXJdKC9kb2N1bWVudGF0aW9uL3BvLXF1ZXJ5LWJ1aWxkZXIpLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gZmlsdGVyIE9iamV0byBxdWUgY29udMOpbSBvcyBjYW1wb3MgZSB2YWxvcmVzIGEgc2VyZW0gZmlsdHJhZG9zIG5vICpzY2hlbWEqLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRzIENhbXBvcyBxdWUgc2Vyw6NvIHJldG9ybmFkb3Mgbm9zIHJlZ2lzdHJvcy4gRXN0ZSBjYW1wb3MgZGV2ZW0gZXN0YXIgZGVudHJvIGRlXG4gICAqIHVtYSAqc3RyaW5nKiBzZXBhcmFkb3MgcG9yIGVzcGHDp28gcG9kZW5kbyB1c2FyIG8gY2FyYWN0ZXJlIGAtYCBwYXJhIGV4Y2x1aXIgY2FtcG9zLlxuICAgKiBQb3IgZXhlbXBsbywgYSBkZWZpbmnDp8OjbyBhYmFpeG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJ25hbWUgYWdlIGFkZHJlc3MnKTtcbiAgICogYGBgXG4gICAqIElyw6EgcmV0b3JuYXIgYXBlbmFzIG9zIGNhbXBvcyBgbmFtZWAsIGBhZ2VgIGUgYGFkZHJlc3NgLiBFIHBhcmEgbsOjbyBtb3N0cmFyIHVtIGNhbXBvIG91IG1haXMgYmFzdGEgZmF6ZXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiBQb1F1ZXJ5QnVpbGRlci5zZWxlY3QoJy1uYW1lIC1hZ2UnKTtcbiAgICogYGBgXG4gICAqIEByZXR1cm5zIHtQb1F1ZXJ5QnVpbGRlcn0gT2JqZXRvIHF1ZSBwb3NzaWJpbGl0YSBlbmNhZGVhciB1bSBtw6l0b2RvIGRvIGBQb1F1ZXJ5QnVpbGRlcmAuXG4gICAqL1xuICBmaW5kT25lKGZpbHRlcj86IGFueSwgZmllbGRzPzogc3RyaW5nKTogUG9RdWVyeUJ1aWxkZXIge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5maW5kKGZpbHRlciwgZmllbGRzKTtcbiAgICBxdWVyeS5saW1pdCgxKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHVtIHJlZ2lzdHJvLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVjb3JkIFJlZ2lzdHJvIHF1ZSBzZXLDoSByZW1vdmlkby5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1c3RvbVJlcXVlc3RJZCBJZGVudGlmaWNhZG9yIGN1c3RvbWl6YWRvIGRvIGNvbWFuZG8uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9tZXNzYSBxdWUgw6kgY29uY2x1w61kYSBhcMOzcyBvIHJlZ2lzdHJvIHNlciByZW1vdmlkby5cbiAgICovXG4gIGFzeW5jIHJlbW92ZShyZWNvcmQ6IG9iamVjdCwgY3VzdG9tUmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICB2YWxpZGF0ZVBhcmFtZXRlcih7IHJlY29yZCB9KTtcblxuICAgIGNvbnN0IHJlbW92ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGlkRmllbGQgPSByZWNvcmRbdGhpcy5zY2hlbWEuaWRGaWVsZF0gPyB0aGlzLnNjaGVtYS5pZEZpZWxkIDogUG9TY2hlbWFVdGlsLnN5bmNJbnRlcm5hbElkRmllbGROYW1lO1xuICAgICAgY29uc3Qgc2VydmVyUmVjb3JkID0gUG9TY2hlbWFVdGlsLnNlcGFyYXRlU2NoZW1hRmllbGRzKHRoaXMuc2NoZW1hLCByZWNvcmQpWydzZXJ2ZXJSZWNvcmQnXTtcblxuICAgICAgYXdhaXQgdGhpcy5wb1NjaGVtYVNlcnZpY2UucmVtb3ZlKHRoaXMuc2NoZW1hLm5hbWUsIHJlY29yZFtpZEZpZWxkXSk7XG4gICAgICBhd2FpdCB0aGlzLmV2ZW50U291cmNpbmcucmVtb3ZlKHRoaXMuc2NoZW1hLm5hbWUsIHNlcnZlclJlY29yZCwgY3VzdG9tUmVxdWVzdElkKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucG9TY2hlbWFTZXJ2aWNlLmxpbWl0ZWRDYWxsV3JhcChyZW1vdmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsdGVyYSBvdSBpbmNsdWkgdW0gcmVnaXN0cm8uXG4gICAqXG4gICAqID4gTyByZWdpc3RybyBzZXLDoSBhbHRlcmFkbyBzZSBlbGUgcG9zc3VpciB1bSAqaWQqLCBjYXNvIGNvbnRyw6FyaW8gdW0gbm92byByZWdpc3RybyBzZXLDoSBjcmlhZG8uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWNvcmQgUmVnaXN0cm8gcXVlIHNlcsOhIHBlcnNpc3RpZG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXN0b21SZXF1ZXN0SWQgSWRlbnRpZmljYWRvciBjdXN0b21pemFkbyBkbyBjb21hbmRvLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWVzc2EgcXVlIMOpIGNvbmNsdcOtZGEgYXDDs3MgbyByZWdpc3RybyBzZXIgYWx0ZXJhZG8gb3UgaW5jbHXDrWRvLlxuICAgKi9cbiAgYXN5bmMgc2F2ZShyZWNvcmQ6IG9iamVjdCwgY3VzdG9tUmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICB2YWxpZGF0ZVBhcmFtZXRlcih7IHJlY29yZCB9KTtcblxuICAgIHJldHVybiB0aGlzLnBvU2NoZW1hU2VydmljZS5saW1pdGVkQ2FsbFdyYXAodGhpcy5zZWxlY3RTYXZlVHlwZS5iaW5kKHRoaXMsIHJlY29yZCwgdHJ1ZSwgY3VzdG9tUmVxdWVzdElkKSk7XG4gIH1cblxuICAvKipcbiAgICogU2FsdmEgdW1hIGxpc3RhIGRlIHJlZ2lzdHJvcyBlbSBsb3RlLlxuICAgKlxuICAgKiA+IFBhcmEgY2FkYSByZWdpc3RybyBkYSBsaXN0YSwgc2Vyw6EgaW5zZXJpZG8gdW0gbm92byByZWdpc3RybyBzZSBvIG1lc21vIG7Do28gdGl2ZXIgKmlkKiwgY2FzbyBjb250csOhcmlvXG4gICAqIHNlcsOhIGNvbnRhZG8gY29tbyB1bWEgYXR1YWxpemHDp8OjbyBkZSB1bSByZWdpc3RybyBleGlzdGVudGUuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8b2JqZWN0Pn0gcmVjb3JkcyBMaXN0YSBkZSByZWdpc3Ryb3MgcXVlIHNlcsOjbyBwZXJzaXN0aWRvcy5cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+IHwgc3RyaW5nfSBjdXN0b21SZXF1ZXN0SWRzIElkZW50aWZpY2Fkb3IgY3VzdG9taXphZG8gZG8gY29tYW5kby5cbiAgICpcbiAgICogQW8gcGFzc2FyIHVtYSBsaXN0YSBkZSBpZGVudGlmaWNhZG9yZXMsIGNhZGEgw61uZGljZSBkYSBsaXN0YSBkZSBpZGVudGlmaWNhZG9yZXMgZGV2ZXLDoVxuICAgKiBjb3JyZXNwb25kZXIgYW8gw61uZGljZSBkbyByZWdpc3RybyBuYSBsaXN0YSBkZSByZWdpc3Ryb3MuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59IFByb21lc3NhIHF1ZSDDqSBjb25jbHXDrWRhIGFww7NzIG9zIHJlZ2lzdHJvcyBzZXJlbSBhbHRlcmFkb3Mgb3UgaW5jbHXDrWRvcy5cbiAgICovXG4gIGFzeW5jIHNhdmVBbGwocmVjb3JkczogQXJyYXk8b2JqZWN0PiwgY3VzdG9tUmVxdWVzdElkcz86IEFycmF5PHN0cmluZz4gfCBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHZhbGlkYXRlUGFyYW1ldGVyKHsgcmVjb3JkcyB9KTtcblxuICAgIGNvbnN0IHNhdmVBbGwgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiYXRjaEV2ZW50cyA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcmVjb3Jkcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gcmVjb3Jkc1tpbmRleF07XG4gICAgICAgIGNvbnN0IHNlbmRUb0V2ZW50U291cmNpbmcgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBpc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCA9IGF3YWl0IHRoaXMuaXNOb25Mb2NhbFJlY29yZENoYW5nZWQocmVjb3JkKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZFJlY29yZCA9IGF3YWl0IHRoaXMuc2VsZWN0U2F2ZVR5cGUocmVjb3JkLCBzZW5kVG9FdmVudFNvdXJjaW5nKTtcblxuICAgICAgICBpZiAoaXNOb25Mb2NhbFJlY29yZENoYW5nZWQpIHtcbiAgICAgICAgICBjb25zdCBjdXN0b21SZXF1ZXN0SWQgPSBjdXN0b21SZXF1ZXN0SWRzIGluc3RhbmNlb2YgQXJyYXkgPyBjdXN0b21SZXF1ZXN0SWRzW2luZGV4XSA6IGN1c3RvbVJlcXVlc3RJZHM7XG4gICAgICAgICAgY29uc3QgZXZlbnRPcGVyYXRpb24gPSB0aGlzLmNyZWF0ZUV2ZW50T3BlcmF0aW9uKHJlY29yZCwgdXBkYXRlZFJlY29yZCwgY3VzdG9tUmVxdWVzdElkKTtcbiAgICAgICAgICBiYXRjaEV2ZW50cy5wdXNoKGV2ZW50T3BlcmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmV2ZW50U291cmNpbmcuY3JlYXRlQmF0Y2hFdmVudHModGhpcy5zY2hlbWEubmFtZSwgYmF0Y2hFdmVudHMpO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5wb1NjaGVtYVNlcnZpY2UubGltaXRlZENhbGxXcmFwKHNhdmVBbGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGUobmV3UmVjb3JkOiBhbnksIHNlbmRUb0V2ZW50U291cmNpbmc6IGJvb2xlYW4sIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gICAgY29uc3Qgc3luY1Byb3BlcnRpZXMgPSB7XG4gICAgICBbUG9TY2hlbWFVdGlsLnN5bmNJbnRlcm5hbElkRmllbGROYW1lXTogdGltZSxcbiAgICAgIFN5bmNJbnNlcnRlZERhdGVUaW1lOiB0aW1lLFxuICAgICAgU3luY1VwZGF0ZWREYXRlVGltZTogbnVsbCxcbiAgICAgIFN5bmNFeGNsdXNpb25EYXRlVGltZTogbnVsbCxcbiAgICAgIFN5bmNEZWxldGVkOiBmYWxzZSxcbiAgICAgIFN5bmNTdGF0dXM6IDBcbiAgICB9O1xuICAgIGNvbnN0IHJlY29yZFdpdGhTeW5jUHJvcGVydGllcyA9IHsgLi4ubmV3UmVjb3JkLCAuLi5zeW5jUHJvcGVydGllcyB9O1xuXG4gICAgY29uc3QgcmVjb3JkZWREYXRhID0gYXdhaXQgdGhpcy5wb1NjaGVtYVNlcnZpY2UuY3JlYXRlKHRoaXMuc2NoZW1hLCByZWNvcmRXaXRoU3luY1Byb3BlcnRpZXMpO1xuXG4gICAgaWYgKHNlbmRUb0V2ZW50U291cmNpbmcpIHtcbiAgICAgIGF3YWl0IHRoaXMuZXZlbnRTb3VyY2luZy5jcmVhdGUodGhpcy5zY2hlbWEubmFtZSwgcmVjb3JkV2l0aFN5bmNQcm9wZXJ0aWVzLCBjdXN0b21SZXF1ZXN0SWQpO1xuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRlZERhdGE7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUV2ZW50T3BlcmF0aW9uKFxuICAgIHJlY29yZDogb2JqZWN0LFxuICAgIHVwZGF0ZWRSZWNvcmQ6IG9iamVjdCxcbiAgICBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmdcbiAgKTogUG9FdmVudFNvdXJjaW5nU3VtbWFyeUl0ZW0ge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IFBvU2NoZW1hVXRpbC5nZXRSZWNvcmRJZChyZWNvcmQsIHRoaXMuc2NoZW1hKVxuICAgICAgPyBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24uVXBkYXRlXG4gICAgICA6IFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbi5JbnNlcnQ7XG5cbiAgICBjb25zdCBzZXJ2ZXJSZWNvcmQgPSBQb1NjaGVtYVV0aWwuc2VwYXJhdGVTY2hlbWFGaWVsZHModGhpcy5zY2hlbWEsIHVwZGF0ZWRSZWNvcmQpWydzZXJ2ZXJSZWNvcmQnXTtcblxuICAgIHJldHVybiB7XG4gICAgICByZWNvcmQ6IHNlcnZlclJlY29yZCxcbiAgICAgIGN1c3RvbVJlcXVlc3RJZDogY3VzdG9tUmVxdWVzdElkLFxuICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb25cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCh1cGRhdGVkUmVjb3JkOiBvYmplY3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBub25Mb2NhbEZpZWxkTmFtZXMgPSBQb1NjaGVtYVV0aWwuZ2V0Tm9uTG9jYWxGaWVsZE5hbWVzKHRoaXMuc2NoZW1hKTtcbiAgICBjb25zdCByZWNvcmQgPSBhd2FpdCB0aGlzLnBvU2NoZW1hU2VydmljZS5nZXQodGhpcy5zY2hlbWEubmFtZSwgdXBkYXRlZFJlY29yZFt0aGlzLnNjaGVtYS5pZEZpZWxkXSk7XG5cbiAgICByZXR1cm4gIVBvU2NoZW1hVXRpbC5pc01vZGVsc0VxdWFsKG5vbkxvY2FsRmllbGROYW1lcywgcmVjb3JkLCB1cGRhdGVkUmVjb3JkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0U2F2ZVR5cGUoXG4gICAgcmVjb3JkOiBvYmplY3QsXG4gICAgc2VuZFRvRXZlbnRTb3VyY2luZzogYm9vbGVhbixcbiAgICBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCBoYXNJZCA9IFBvU2NoZW1hVXRpbC5nZXRSZWNvcmRJZChyZWNvcmQsIHRoaXMuc2NoZW1hKTtcblxuICAgIHJldHVybiBoYXNJZFxuICAgICAgPyBhd2FpdCB0aGlzLnVwZGF0ZShyZWNvcmQsIHNlbmRUb0V2ZW50U291cmNpbmcsIGN1c3RvbVJlcXVlc3RJZClcbiAgICAgIDogYXdhaXQgdGhpcy5jcmVhdGUocmVjb3JkLCBzZW5kVG9FdmVudFNvdXJjaW5nLCBjdXN0b21SZXF1ZXN0SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGUodXBkYXRlZFJlY29yZDogYW55LCBzZW5kVG9FdmVudFNvdXJjaW5nOiBib29sZWFuLCBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIHVwZGF0ZWRSZWNvcmQuU3luY1VwZGF0ZWREYXRlVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHVwZGF0ZWRSZWNvcmQuU3luY1N0YXR1cyA9IDA7XG5cbiAgICBjb25zdCBpc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCA9IGF3YWl0IHRoaXMuaXNOb25Mb2NhbFJlY29yZENoYW5nZWQodXBkYXRlZFJlY29yZCk7XG4gICAgY29uc3QgcmVjb3JkZWREYXRhID0gYXdhaXQgdGhpcy5wb1NjaGVtYVNlcnZpY2UudXBkYXRlKHRoaXMuc2NoZW1hLCB1cGRhdGVkUmVjb3JkKTtcblxuICAgIGlmIChpc05vbkxvY2FsUmVjb3JkQ2hhbmdlZCAmJiBzZW5kVG9FdmVudFNvdXJjaW5nKSB7XG4gICAgICBjb25zdCBzZXJ2ZXJSZWNvcmQgPSBQb1NjaGVtYVV0aWwuc2VwYXJhdGVTY2hlbWFGaWVsZHModGhpcy5zY2hlbWEsIHVwZGF0ZWRSZWNvcmQpWydzZXJ2ZXJSZWNvcmQnXTtcbiAgICAgIGF3YWl0IHRoaXMuZXZlbnRTb3VyY2luZy51cGRhdGUodGhpcy5zY2hlbWEubmFtZSwgc2VydmVyUmVjb3JkLCBjdXN0b21SZXF1ZXN0SWQpO1xuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRlZERhdGE7XG4gIH1cbn1cbiJdfQ==
@@ -1,17 +1,17 @@
1
- /**
2
- * @description
3
- *
4
- * Classe que define a resposta de erro para um item da fila de eventos que não foi enviado ao servidor por
5
- * alguma inconsistência.
6
- *
7
- * > Pode ser utilizada em casos onde um item da fila é enviado ao servidor com inconsistência nos dados, por exemplo
8
- * uma operação de *delete* ou *update* sem o `id` do objeto.
9
- */
10
- export class PoEventSourcingErrorResponse {
11
- /* istanbul ignore next */
12
- constructor({ message, operation }) {
13
- this.message = message;
14
- this.operation = operation;
15
- }
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZXZlbnQtc291cmNpbmctZXJyb3ItcmVzcG9uc2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeW5jL3NyYy9saWIvbW9kZWxzL3BvLWV2ZW50LXNvdXJjaW5nLWVycm9yLXJlc3BvbnNlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLDRCQUE0QjtJQU92QywwQkFBMEI7SUFDMUIsWUFBWSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUU7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uIH0gZnJvbSAnLi8uLi9zZXJ2aWNlcy9wby1ldmVudC1zb3VyY2luZy9lbnVtcy9wby1ldmVudC1zb3VyY2luZy1vcGVyYXRpb24uZW51bSc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIENsYXNzZSBxdWUgZGVmaW5lIGEgcmVzcG9zdGEgZGUgZXJybyBwYXJhIHVtIGl0ZW0gZGEgZmlsYSBkZSBldmVudG9zIHF1ZSBuw6NvIGZvaSBlbnZpYWRvIGFvIHNlcnZpZG9yIHBvclxyXG4gKiBhbGd1bWEgaW5jb25zaXN0w6puY2lhLlxyXG4gKlxyXG4gKiA+IFBvZGUgc2VyIHV0aWxpemFkYSBlbSBjYXNvcyBvbmRlIHVtIGl0ZW0gZGEgZmlsYSDDqSBlbnZpYWRvIGFvIHNlcnZpZG9yIGNvbSBpbmNvbnNpc3TDqm5jaWEgbm9zIGRhZG9zLCBwb3IgZXhlbXBsb1xyXG4gKiB1bWEgb3BlcmHDp8OjbyBkZSAqZGVsZXRlKiBvdSAqdXBkYXRlKiBzZW0gbyBgaWRgIGRvIG9iamV0by5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBQb0V2ZW50U291cmNpbmdFcnJvclJlc3BvbnNlIHtcclxuICAvKiogTWVuc2FnZW0gZGUgZXJyby4gKi9cclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gIC8qKiBPcGVyYcOnw6NvIHF1ZSBoYXZpYSBzaWRvIHJlcXVpc2l0YWRhLiAqL1xyXG4gIG9wZXJhdGlvbjogUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uO1xyXG5cclxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gIGNvbnN0cnVjdG9yKHsgbWVzc2FnZSwgb3BlcmF0aW9uIH0pIHtcclxuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcclxuICB9XHJcbn1cclxuIl19
1
+ /**
2
+ * @description
3
+ *
4
+ * Classe que define a resposta de erro para um item da fila de eventos que não foi enviado ao servidor por
5
+ * alguma inconsistência.
6
+ *
7
+ * > Pode ser utilizada em casos onde um item da fila é enviado ao servidor com inconsistência nos dados, por exemplo
8
+ * uma operação de *delete* ou *update* sem o `id` do objeto.
9
+ */
10
+ export class PoEventSourcingErrorResponse {
11
+ /* istanbul ignore next */
12
+ constructor({ message, operation }) {
13
+ this.message = message;
14
+ this.operation = operation;
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZXZlbnQtc291cmNpbmctZXJyb3ItcmVzcG9uc2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zeW5jL3NyYy9saWIvbW9kZWxzL3BvLWV2ZW50LXNvdXJjaW5nLWVycm9yLXJlc3BvbnNlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLDRCQUE0QjtJQU92QywwQkFBMEI7SUFDMUIsWUFBWSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUU7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uIH0gZnJvbSAnLi8uLi9zZXJ2aWNlcy9wby1ldmVudC1zb3VyY2luZy9lbnVtcy9wby1ldmVudC1zb3VyY2luZy1vcGVyYXRpb24uZW51bSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogQ2xhc3NlIHF1ZSBkZWZpbmUgYSByZXNwb3N0YSBkZSBlcnJvIHBhcmEgdW0gaXRlbSBkYSBmaWxhIGRlIGV2ZW50b3MgcXVlIG7Do28gZm9pIGVudmlhZG8gYW8gc2Vydmlkb3IgcG9yXG4gKiBhbGd1bWEgaW5jb25zaXN0w6puY2lhLlxuICpcbiAqID4gUG9kZSBzZXIgdXRpbGl6YWRhIGVtIGNhc29zIG9uZGUgdW0gaXRlbSBkYSBmaWxhIMOpIGVudmlhZG8gYW8gc2Vydmlkb3IgY29tIGluY29uc2lzdMOqbmNpYSBub3MgZGFkb3MsIHBvciBleGVtcGxvXG4gKiB1bWEgb3BlcmHDp8OjbyBkZSAqZGVsZXRlKiBvdSAqdXBkYXRlKiBzZW0gbyBgaWRgIGRvIG9iamV0by5cbiAqL1xuZXhwb3J0IGNsYXNzIFBvRXZlbnRTb3VyY2luZ0Vycm9yUmVzcG9uc2Uge1xuICAvKiogTWVuc2FnZW0gZGUgZXJyby4gKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKiBPcGVyYcOnw6NvIHF1ZSBoYXZpYSBzaWRvIHJlcXVpc2l0YWRhLiAqL1xuICBvcGVyYXRpb246IFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbjtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBjb25zdHJ1Y3Rvcih7IG1lc3NhZ2UsIG9wZXJhdGlvbiB9KSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcbiAgfVxufVxuIl19