@uql/core 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,9 +21,6 @@ The `uql` queries can be safely written in the frontend (browser/mobile) and sen
21
21
 
22
22
  ### <a name="installation"></a> Installation
23
23
 
24
- This package is a [Pure ESM package](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c):
25
- Node 14.16+ is needed to use it and it must be `import`ed instead of `require`d.
26
-
27
24
  1. Install the core package:
28
25
 
29
26
  ```sh
@@ -71,7 +68,7 @@ yarn add @uql/postgres
71
68
  A default querier-pool can be set in any of the bootstrap files of your app (e.g. in the `server.ts`).
72
69
 
73
70
  ```ts
74
- import { setDefaultQuerierPool } from '@uql/core';
71
+ import { setQuerierPool } from '@uql/core';
75
72
  import { PgQuerierPool } from '@uql/postgres';
76
73
 
77
74
  const querierPool = new PgQuerierPool(
@@ -85,7 +82,7 @@ const querierPool = new PgQuerierPool(
85
82
  console.log
86
83
  );
87
84
 
88
- setDefaultQuerierPool(querierPool);
85
+ setQuerierPool(querierPool);
89
86
  ```
90
87
 
91
88
  ### <a name="definition-of-entities"></a> Definition of Entities
@@ -4,7 +4,7 @@ exports.AbstractSqlDialect = void 0;
4
4
  const sqlstring_1 = require("sqlstring");
5
5
  const type_1 = require("../type");
6
6
  const util_1 = require("../util");
7
- const index_1 = require("../entity/index");
7
+ const entity_1 = require("../entity");
8
8
  class AbstractSqlDialect {
9
9
  escapeIdChar;
10
10
  beginTransactionCommand;
@@ -15,7 +15,7 @@ class AbstractSqlDialect {
15
15
  this.escapeIdRegex = RegExp(escapeIdChar, 'g');
16
16
  }
17
17
  criteria(entity, qm, opts = {}) {
18
- const meta = (0, index_1.getMeta)(entity);
18
+ const meta = (0, entity_1.getMeta)(entity);
19
19
  const prefix = opts.prefix ?? (opts.autoPrefix || (0, util_1.isProjectingRelations)(meta, qm.$project)) ? meta.name : undefined;
20
20
  const where = this.where(entity, qm.$filter, { ...opts, prefix });
21
21
  const group = this.group(entity, qm.$group, { ...opts, prefix });
@@ -25,7 +25,7 @@ class AbstractSqlDialect {
25
25
  return where + group + having + sort + pager;
26
26
  }
27
27
  projectFields(entity, project, opts = {}) {
28
- const meta = (0, index_1.getMeta)(entity);
28
+ const meta = (0, entity_1.getMeta)(entity);
29
29
  const prefix = opts.prefix ? opts.prefix + '.' : '';
30
30
  const escapedPrefix = this.escapeId(opts.prefix, true, true);
31
31
  let fields;
@@ -81,7 +81,7 @@ class AbstractSqlDialect {
81
81
  .join(', ');
82
82
  }
83
83
  projectRelations(entity, project = {}, { prefix } = {}) {
84
- const meta = (0, index_1.getMeta)(entity);
84
+ const meta = (0, entity_1.getMeta)(entity);
85
85
  const relations = (0, util_1.getProjectRelationKeys)(meta, project);
86
86
  const isProjectArray = Array.isArray(project);
87
87
  let fields = '';
@@ -105,7 +105,7 @@ class AbstractSqlDialect {
105
105
  prefix: joinRelAlias,
106
106
  });
107
107
  fields += subColumns;
108
- const relMeta = (0, index_1.getMeta)(relEntity);
108
+ const relMeta = (0, entity_1.getMeta)(relEntity);
109
109
  const relEntityName = this.escapeId(relMeta.name);
110
110
  const relPath = prefix ? this.escapeId(prefix, true) : this.escapeId(meta.name);
111
111
  const joinType = relQuery.$required ? 'INNER' : 'LEFT';
@@ -121,14 +121,14 @@ class AbstractSqlDialect {
121
121
  return { fields, tables };
122
122
  }
123
123
  select(entity, qm, opts = {}) {
124
- const meta = (0, index_1.getMeta)(entity);
124
+ const meta = (0, entity_1.getMeta)(entity);
125
125
  const prefix = opts.prefix ?? (opts.autoPrefix || (0, util_1.isProjectingRelations)(meta, qm.$project)) ? meta.name : undefined;
126
126
  const fields = this.projectFields(entity, qm.$project, { prefix });
127
127
  const { fields: relationFields, tables } = this.projectRelations(entity, qm.$project);
128
128
  return `SELECT ${fields}${relationFields} FROM ${this.escapeId(meta.name)}${tables}`;
129
129
  }
130
130
  where(entity, filter = {}, opts = {}) {
131
- const meta = (0, index_1.getMeta)(entity);
131
+ const meta = (0, entity_1.getMeta)(entity);
132
132
  const { usePrecedence, clause = 'WHERE', softDelete } = opts;
133
133
  filter = (0, util_1.getQueryFilterAsMap)(meta, filter);
134
134
  if (meta.softDelete && (softDelete || softDelete === undefined) && clause !== 'HAVING' && !filter[meta.softDelete]) {
@@ -146,7 +146,7 @@ class AbstractSqlDialect {
146
146
  return clause ? ` ${clause} ${sql}` : sql;
147
147
  }
148
148
  compare(entity, key, val, opts) {
149
- const meta = (0, index_1.getMeta)(entity);
149
+ const meta = (0, entity_1.getMeta)(entity);
150
150
  if (val instanceof type_1.QueryRaw) {
151
151
  if (key === '$exists' || key === '$nexists') {
152
152
  const value = val;
@@ -243,7 +243,7 @@ class AbstractSqlDialect {
243
243
  }
244
244
  }
245
245
  getComparisonKey(entity, key, { prefix } = {}) {
246
- const meta = (0, index_1.getMeta)(entity);
246
+ const meta = (0, entity_1.getMeta)(entity);
247
247
  const escapedPrefix = this.escapeId(prefix, true, true);
248
248
  const field = meta.fields[key];
249
249
  if (field?.virtual) {
@@ -260,7 +260,7 @@ class AbstractSqlDialect {
260
260
  if (!fields?.length) {
261
261
  return '';
262
262
  }
263
- const meta = (0, index_1.getMeta)(entity);
263
+ const meta = (0, entity_1.getMeta)(entity);
264
264
  const names = fields.map((key) => this.escapeId(meta.fields[key]?.name ?? key)).join(', ');
265
265
  return ` GROUP BY ${names}`;
266
266
  }
@@ -269,7 +269,7 @@ class AbstractSqlDialect {
269
269
  if (!(0, util_1.hasKeys)(sortMap)) {
270
270
  return '';
271
271
  }
272
- const meta = (0, index_1.getMeta)(entity);
272
+ const meta = (0, entity_1.getMeta)(entity);
273
273
  const flattenedSort = (0, util_1.flatObject)(sortMap, prefix);
274
274
  const directionMap = { 1: '', asc: '', '-1': ' DESC', desc: ' DESC' };
275
275
  const order = Object.entries(flattenedSort)
@@ -309,7 +309,7 @@ class AbstractSqlDialect {
309
309
  return select + criteria;
310
310
  }
311
311
  insert(entity, payload) {
312
- const meta = (0, index_1.getMeta)(entity);
312
+ const meta = (0, entity_1.getMeta)(entity);
313
313
  const records = (0, util_1.getPersistables)(meta, payload, 'onInsert');
314
314
  const keys = (0, util_1.getKeys)(records[0]);
315
315
  const columns = keys.map((key) => this.escapeId(meta.fields[key].name));
@@ -317,7 +317,7 @@ class AbstractSqlDialect {
317
317
  return `INSERT INTO ${this.escapeId(meta.name)} (${columns.join(', ')}) VALUES (${values})`;
318
318
  }
319
319
  update(entity, qm, payload, opts) {
320
- const meta = (0, index_1.getMeta)(entity);
320
+ const meta = (0, entity_1.getMeta)(entity);
321
321
  const record = (0, util_1.getPersistable)(meta, payload, 'onUpdate');
322
322
  const keys = (0, util_1.getKeys)(record);
323
323
  const entries = keys.map((key) => `${this.escapeId(key)} = ${this.escape(payload[key])}`).join(', ');
@@ -325,7 +325,7 @@ class AbstractSqlDialect {
325
325
  return `UPDATE ${this.escapeId(meta.name)} SET ${entries}${criteria}`;
326
326
  }
327
327
  delete(entity, qm, opts = {}) {
328
- const meta = (0, index_1.getMeta)(entity);
328
+ const meta = (0, entity_1.getMeta)(entity);
329
329
  if (opts.softDelete || opts.softDelete === undefined) {
330
330
  if (meta.softDelete) {
331
331
  const criteria = this.criteria(entity, qm, opts);
@@ -362,4 +362,4 @@ class AbstractSqlDialect {
362
362
  }
363
363
  }
364
364
  exports.AbstractSqlDialect = AbstractSqlDialect;
365
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RTcWxEaWFsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpYWxlY3QvYWJzdHJhY3RTcWxEaWFsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUNuQyxrQ0F1QmlCO0FBQ2pCLGtDQWFpQjtBQUVqQiwyQ0FBMEM7QUFFMUMsTUFBc0Isa0JBQWtCO0lBR2pCO0lBQWtDO0lBRjlDLGFBQWEsQ0FBUztJQUUvQixZQUFxQixZQUF1QixFQUFXLHVCQUErQjtRQUFqRSxpQkFBWSxHQUFaLFlBQVksQ0FBVztRQUFXLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBUTtRQUNwRixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFFBQVEsQ0FBSSxNQUFlLEVBQUUsRUFBWSxFQUFFLE9BQXFCLEVBQUU7UUFDaEUsTUFBTSxJQUFJLEdBQUcsSUFBQSxlQUFPLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBQSw0QkFBcUIsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNwSCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFJLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNyRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFJLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNwRSxNQUFN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Q0FBQyxFQUFFLENBQUM7UUFFakMsT0FBTyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBVTtRQUNmLElBQUksS0FBSyxZQUFZLGVBQVEsRUFBRTtZQUM3QixPQUFPLElBQUEsa0JBQVcsRUFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUM5QztRQUNELE9BQU8sSUFBQSxrQkFBTSxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQXRhRCxnREFzYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlc2NhcGUgfSBmcm9tICdzcWxzdHJpbmcnO1xuaW1wb3J0IHtcbiAgUXVlcnlGaWx0ZXIsXG4gIFF1ZXJ5LFxuICBTY2FsYXIsXG4gIFF1ZXJ5RmlsdGVyRmllbGRPcGVyYXRvck1hcCxcbiAgUXVlcnlTb3J0LFxuICBRdWVyeVBhZ2VyLFxuICBRdWVyeVRleHRTZWFyY2hPcHRpb25zLFxuICBGaWVsZEtleSxcbiAgUXVlcnlQcm9qZWN0LFxuICBUeXBlLFxuICBRdWVyeUNyaXRlcmlhLFxuICBRdWVyeVByb2plY3RBcnJheSxcbiAgUXVlcnlPcHRpb25zLFxuICBRdWVyeURpYWxlY3QsXG4gIFF1ZXJ5RmlsdGVyT3B0aW9ucyxcbiAgUXVlcnlDb21wYXJpc29uT3B0aW9ucyxcbiAgUXVlcnlGaWx0ZXJNYXAsXG4gIFF1ZXJ5U2VhcmNoLFxuICBRdWVyeVByb2plY3RPcHRpb25zLFxuICBRdWVyeVNvcnREaXJlY3Rpb24sXG4gIFF1ZXJ5RmlsdGVyTG9naWNhbCxcbiAgUXVlcnlSYXcsXG59IGZyb20gJy4uL3R5cGUnO1xuaW1wb3J0IHtcbiAgZ2V0UGVyc2lzdGFibGUsXG4gIGdldFByb2plY3RSZWxhdGlvbktleXMsXG4gIGdldFBlcnNpc3RhYmxlcyxcbiAgaXNQcm9qZWN0aW5nUmVsYXRpb25zLFxuICBnZXRLZXlzLFxuICBoYXNLZXlzLFxuICBidWlsZFNvcnRNYXAsXG4gIGZsYXRPYmplY3QsXG4gIGdldFJhd1ZhbHVlLFxuICByYXcsXG4gIGdldFF1ZXJ5RmlsdGVyQXNNYXAsXG4gIGdldEZpZWxkQ2FsbGJhY2tWYWx1ZSxcbn0gZnJvbSAnLi4vdXRpbCc7XG5cbmltcG9ydCB7IGdldE1ldGEgfSBmcm9tICcuLi9lbnRpdHkvaW5kZXgnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTcWxEaWFsZWN0IGltcGxlbWVudHMgUXVlcnlEaWFsZWN0IHtcbiAgcmVhZG9ubHkgZXNjYXBlSWRSZWdleDogUmVnRXhwO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGVzY2FwZUlkQ2hhcjogJ2AnIHwgJ1wiJywgcmVhZG9ubHkgYmVnaW5UcmFuc2FjdGlvbkNvbW1hbmQ6IHN0cmluZykge1xuICAgIHRoaXMuZXNjYXBlSWRSZWdleCA9IFJlZ0V4cChlc2NhcGVJZENoYXIsICdnJyk7XG4gIH1cblxuICBjcml0ZXJpYTxFPihlbnRpdHk6IFR5cGU8RT4sIHFtOiBRdWVyeTxFPiwgb3B0czogUXVlcnlPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgcHJlZml4ID0gb3B0cy5wcmVmaXggPz8gKG9wdHMuYXV0b1ByZWZpeCB8fCBpc1Byb2plY3RpbmdSZWxhdGlvbnMobWV0YSwgcW0uJHByb2plY3QpKSA/IG1ldGEubmFtZSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCB3aGVyZSA9IHRoaXMud2hlcmU8RT4oZW50aXR5LCBxbS4kZmlsdGVyLCB7IC4uLm9wdHMsIHByZWZpeCB9KTtcbiAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXA8RT4oZW50aXR5LCBxbS4kZ3JvdXAsIHsgLi4ub3B0cywgcHJlZml4IH0pO1xuICAgIGNvbnN0IGhhdmluZyA9IHRoaXMud2hlcmU8RT4oZW50aXR5LCBxbS4kaGF2aW5nLCB7IC4uLm9wdHMsIHByZWZpeCwgY2xhdXNlOiAnSEFWSU5HJyB9KTtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5zb3J0PEU+KGVudGl0eSwgcW0uJHNvcnQsIHsgLi4ub3B0cywgcHJlZml4IH0pO1xuICAgIGNvbnN0IHBhZ2VyID0gdGhpcy5wYWdlcihxbSk7XG4gICAgcmV0dXJuIHdoZXJlICsgZ3JvdXAgKyBoYXZpbmcgKyBzb3J0ICsgcGFnZXI7XG4gIH1cblxuICBwcm9qZWN0RmllbGRzPEU+KGVudGl0eTogVHlwZTxFPiwgcHJvamVjdDogUXVlcnlQcm9qZWN0PEU+LCBvcHRzOiBRdWVyeVByb2plY3RPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgcHJlZml4ID0gb3B0cy5wcmVmaXggPyBvcHRzLnByZWZpeCArICcuJyA6ICcnO1xuICAgIGNvbnN0IGVzY2FwZWRQcmVmaXggPSB0aGlzLmVzY2FwZUlkKG9wdHMucHJlZml4LCB0cnVlLCB0cnVlKTtcblxuICAgIGxldCBmaWVsZHM6IFF1ZXJ5UHJvamVjdEFycmF5PEU+O1xuXG4gICAgaWYgKHByb2plY3QpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb2plY3QpKSB7XG4gICAgICAgIGZpZWxkcyA9IHByb2plY3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3NpdGl2ZVByb2plY3RLZXlzID0gZ2V0S2V5cyhwcm9qZWN0KS5maWx0ZXIoKGtleSkgPT4gcHJvamVjdFtrZXldKTtcbiAgICAgICAgZmllbGRzID0gcG9zaXRpdmVQcm9qZWN0S2V5cy5sZW5ndGhcbiAgICAgICAgICA/IHBvc2l0aXZlUHJvamVjdEtleXMubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gcHJvamVjdFtrZXldO1xuICAgICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgUXVlcnlSYXcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmF3KHZhbC52YWx1ZSwga2V5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4ga2V5IGFzIEZpZWxkS2V5PEU+O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IChnZXRLZXlzKG1ldGEuZmllbGRzKS5maWx0ZXIoKGtleSkgPT4gIShrZXkgaW4gcHJvamVjdCkpIGFzIEZpZWxkS2V5PEU+W10pO1xuICAgICAgfVxuICAgICAgZmllbGRzID0gZmllbGRzLmZpbHRlcigoa2V5KSA9PiBrZXkgaW5zdGFuY2VvZiBRdWVyeVJhdyB8fCBtZXRhLmZpZWxkc1trZXkgYXMgRmllbGRLZXk8RT5dKTtcbiAgICAgIGlmICghZmllbGRzLmxlbmd0aCB8fCAob3B0cy5wcmVmaXggJiYgIWZpZWxkcy5pbmNsdWRlcyhtZXRhLmlkKSkpIHtcbiAgICAgICAgZmllbGRzID0gW21ldGEuaWQsIC4uLmZpZWxkc107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkcyA9IGdldEtleXMobWV0YS5maWVsZHMpIGFzIEZpZWxkS2V5PEU+W107XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkc1xuICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkgaW5zdGFuY2VvZiBRdWVyeVJhdykge1xuICAgICAgICAgIHJldHVybiBnZXRSYXdWYWx1ZSh7XG4gICAgICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICAgICAgZGlhbGVjdDogdGhpcyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICBhdXRvUHJlZml4QWxpYXM6IG9wdHMuYXV0b1ByZWZpeEFsaWFzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmllbGQgPSBtZXRhLmZpZWxkc1trZXkgYXMgRmllbGRLZXk8RT5dO1xuXG4gICAgICAgIGlmIChmaWVsZC52aXJ0dWFsKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFJhd1ZhbHVlKHtcbiAgICAgICAgICAgIHZhbHVlOiByYXcoZmllbGQudmlydHVhbC52YWx1ZSwga2V5KSxcbiAgICAgICAgICAgIGRpYWxlY3Q6IHRoaXMsXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICBlc2NhcGVkUHJlZml4LFxuICAgICAgICAgICAgYXV0b1ByZWZpeEFsaWFzOiBvcHRzLmF1dG9QcmVmaXhBbGlhcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5hbWUgPSBmaWVsZD8ubmFtZSA/PyAoa2V5IGFzIEZpZWxkS2V5PEU+KTtcbiAgICAgICAgY29uc3QgZmllbGRQYXRoID0gYCR7ZXNjYXBlZFByZWZpeH0ke3RoaXMuZXNjYXBlSWQobmFtZSl9YDtcblxuICAgICAgICByZXR1cm4gIW9wdHMuYXV0b1ByZWZpeEFsaWFzICYmIChuYW1lID09PSBrZXkgfHwgIWZpZWxkKSA/IGZpZWxkUGF0aCA6IGAke2ZpZWxkUGF0aH0gJHt0aGlzLmVzY2FwZUlkKChwcmVmaXggKyBrZXkpIGFzIEZpZWxkS2V5PEU+LCB0cnVlKX1gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cbiAgcHJvamVjdFJlbGF0aW9uczxFPihlbnRpdHk6IFR5cGU8RT4sIHByb2plY3Q6IFF1ZXJ5UHJvamVjdDxFPiA9IHt9LCB7IHByZWZpeCB9OiB7IHByZWZpeD86IHN0cmluZyB9ID0ge30pOiB7IGZpZWxkczogc3RyaW5nOyB0YWJsZXM6IHN0cmluZyB9IHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IHJlbGF0aW9ucyA9IGdldFByb2plY3RSZWxhdGlvbktleXMobWV0YSwgcHJvamVjdCk7XG4gICAgY29uc3QgaXNQcm9qZWN0QXJyYXkgPSBBcnJheS5pc0FycmF5KHByb2plY3QpO1xuICAgIGxldCBmaWVsZHMgPSAnJztcbiAgICBsZXQgdGFibGVzID0gJyc7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiByZWxhdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlbE9wdHMgPSBtZXRhLnJlbGF0aW9uc1trZXldO1xuXG4gICAgICBpZiAocmVsT3B0cy5jYXJkaW5hbGl0eSA9PT0gJzFtJyB8fCByZWxPcHRzLmNhcmRpbmFsaXR5ID09PSAnbW0nKSB7XG4gICAgICAgIC8vICcxbScgYW5kICdtbScgc2hvdWxkIGJlIHJlc29sdmVkIGluIGEgaGlnaGVyIGxheWVyIGJlY2F1c2UgdGhleSB3aWxsIG5lZWQgbXVsdGlwbGUgcXVlcmllc1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgam9pblJlbEFsaWFzID0gcHJlZml4ID8gcHJlZml4ICsgJy4nICsga2V5IDoga2V5O1xuICAgICAgY29uc3QgcmVsRW50aXR5ID0gcmVsT3B0cy5lbnRpdHkoKTtcbiAgICAgIGNvbnN0IHJlbFByb2plY3QgPSBwcm9qZWN0W2tleSBhcyBzdHJpbmddO1xuICAgICAgY29uc3QgcmVsUXVlcnkgPSBpc1Byb2plY3RBcnJheSA/IHt9IDogQXJyYXkuaXNBcnJheShyZWxQcm9qZWN0KSA/IHsgJHByb2plY3Q6IHJlbFByb2plY3QgfSA6IHJlbFByb2plY3Q7XG5cbiAgICAgIGNvbnN0IHJlbENvbHVtbnMgPSB0aGlzLnByb2plY3RGaWVsZHMocmVsRW50aXR5LCByZWxRdWVyeS4kcHJvamVjdCwge1xuICAgICAgICBwcmVmaXg6IGpvaW5SZWxBbGlhcyxcbiAgICAgICAgYXV0b1ByZWZpeEFsaWFzOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGZpZWxkcyArPSAnLCAnICsgcmVsQ29sdW1ucztcblxuICAgICAgY29uc3QgeyBmaWVsZHM6IHN1YkNvbHVtbnMsIHRhYmxlczogc3ViVGFibGVzIH0gPSB0aGlzLnByb2plY3RSZWxhdGlvbnMocmVsRW50aXR5LCByZWxRdWVyeS4kcHJvamVjdCwge1xuICAgICAgICBwcmVmaXg6IGpvaW5SZWxBbGlhcyxcbiAgICAgIH0pO1xuXG4gICAgICBmaWVsZHMgKz0gc3ViQ29sdW1ucztcblxuICAgICAgY29uc3QgcmVsTWV0YSA9IGdldE1ldGEocmVsRW50aXR5KTtcbiAgICAgIGNvbnN0IHJlbEVudGl0eU5hbWUgPSB0aGlzLmVzY2FwZUlkKHJlbE1ldGEubmFtZSk7XG4gICAgICBjb25zdCByZWxQYXRoID0gcHJlZml4ID8gdGhpcy5lc2NhcGVJZChwcmVmaXgsIHRydWUpIDogdGhpcy5lc2NhcGVJZChtZXRhLm5hbWUpO1xuICAgICAgY29uc3Qgam9pblR5cGUgPSByZWxRdWVyeS4kcmVxdWlyZWQgPyAnSU5ORVInIDogJ0xFRlQnO1xuICAgICAgY29uc3Qgam9pbkFsaWFzID0gdGhpcy5lc2NhcGVJZChqb2luUmVsQWxpYXMsIHRydWUpO1xuXG4gICAgICB0YWJsZXMgKz0gYCAke2pvaW5UeXBlfSBKT0lOICR7cmVsRW50aXR5TmFtZX0gJHtqb2luQWxpYXN9IE9OIGA7XG4gICAgICB0YWJsZXMgKz0gcmVsT3B0cy5yZWZlcmVuY2VzLm1hcCgoaXQpID0+IGAke2pvaW5BbGlhc30uJHt0aGlzLmVzY2FwZUlkKGl0LmZvcmVpZ24pfSA9ICR7cmVsUGF0aH0uJHt0aGlzLmVzY2FwZUlkKGl0LmxvY2FsKX1gKS5qb2luKCcgQU5EICcpO1xuXG4gICAgICBpZiAocmVsUXVlcnkuJGZpbHRlcikge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLndoZXJlKHJlbEVudGl0eSwgcmVsUXVlcnkuJGZpbHRlciwgeyBwcmVmaXg6IGtleSwgY2xhdXNlOiBmYWxzZSB9KTtcbiAgICAgICAgdGFibGVzICs9IGAgQU5EICR7ZmlsdGVyfWA7XG4gICAgICB9XG5cbiAgICAgIHRhYmxlcyArPSBzdWJUYWJsZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZmllbGRzLCB0YWJsZXMgfTtcbiAgfVxuXG4gIHNlbGVjdDxFPihlbnRpdHk6IFR5cGU8RT4sIHFtOiBRdWVyeTxFPiwgb3B0czogUXVlcnlPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgcHJlZml4ID0gb3B0cy5wcmVmaXggPz8gKG9wdHMuYXV0b1ByZWZpeCB8fCBpc1Byb2plY3RpbmdSZWxhdGlvbnMobWV0YSwgcW0uJHByb2plY3QpKSA/IG1ldGEubmFtZSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMucHJvamVjdEZpZWxkcyhlbnRpdHksIHFtLiRwcm9qZWN0LCB7IHByZWZpeCB9KTtcbiAgICBjb25zdCB7IGZpZWxkczogcmVsYXRpb25GaWVsZHMsIHRhYmxlcyB9ID0gdGhpcy5wcm9qZWN0UmVsYXRpb25zKGVudGl0eSwgcW0uJHByb2plY3QpO1xuXG4gICAgcmV0dXJuIGBTRUxFQ1QgJHtmaWVsZHN9JHtyZWxhdGlvbkZpZWxkc30gRlJPTSAke3RoaXMuZXNjYXBlSWQobWV0YS5uYW1lKX0ke3RhYmxlc31gO1xuICB9XG5cbiAgd2hlcmU8RT4oZW50aXR5OiBUeXBlPEU+LCBmaWx0ZXI6IFF1ZXJ5RmlsdGVyPEU+ID0ge30sIG9wdHM6IFF1ZXJ5RmlsdGVyT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IHsgdXNlUHJlY2VkZW5jZSwgY2xhdXNlID0gJ1dIRVJFJywgc29mdERlbGV0ZSB9ID0gb3B0cztcblxuICAgIGZpbHRlciA9IGdldFF1ZXJ5RmlsdGVyQXNNYXAobWV0YSwgZmlsdGVyKTtcblxuICAgIGlmIChtZXRhLnNvZnREZWxldGUgJiYgKHNvZnREZWxldGUgfHwgc29mdERlbGV0ZSA9PT0gdW5kZWZpbmVkKSAmJiBjbGF1c2UgIT09ICdIQVZJTkcnICYmICFmaWx0ZXJbbWV0YS5zb2Z0RGVsZXRlIGFzIHN0cmluZ10pIHtcbiAgICAgIGZpbHRlclttZXRhLnNvZnREZWxldGUgYXMgc3RyaW5nXSA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGZpbHRlcik7XG5cbiAgICBpZiAoIWVudHJpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgLi4ub3B0cywgdXNlUHJlY2VkZW5jZTogZW50cmllcy5sZW5ndGggPiAxIH07XG5cbiAgICBsZXQgc3FsID0gZW50cmllcy5tYXAoKFtrZXksIHZhbF0pID0+IHRoaXMuY29tcGFyZShlbnRpdHksIGtleSBhcyBrZXlvZiBRdWVyeUZpbHRlck1hcDxFPiwgdmFsIGFzIGFueSwgb3B0aW9ucykpLmpvaW4oYCBBTkQgYCk7XG5cbiAgICBpZiAodXNlUHJlY2VkZW5jZSkge1xuICAgICAgc3FsID0gYCgke3NxbH0pYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhdXNlID8gYCAke2NsYXVzZX0gJHtzcWx9YCA6IHNxbDtcbiAgfVxuXG4gIGNvbXBhcmU8RSwgSyBleHRlbmRzIGtleW9mIFF1ZXJ5RmlsdGVyTWFwPEU+PihlbnRpdHk6IFR5cGU8RT4sIGtleTogSywgdmFsOiBRdWVyeUZpbHRlck1hcDxFPltLXSwgb3B0cz86IFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG5cbiAgICBpZiAodmFsIGluc3RhbmNlb2YgUXVlcnlSYXcpIHtcbiAgICAgIGlmIChrZXkgPT09ICckZXhpc3RzJyB8fCBrZXkgPT09ICckbmV4aXN0cycpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWwgYXMgUXVlcnlSYXc7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0UmF3VmFsdWUoe1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGRpYWxlY3Q6IHRoaXMsXG4gICAgICAgICAgcHJlZml4OiBtZXRhLm5hbWUsXG4gICAgICAgICAgZXNjYXBlZFByZWZpeDogdGhpcy5lc2NhcGVJZChtZXRhLm5hbWUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBgJHtrZXkgPT09ICckZXhpc3RzJyA/ICdFWElTVFMnIDogJ05PVCBFWElTVFMnfSAoJHtxdWVyeX0pYDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXBhcmlzb25LZXkgPSB0aGlzLmdldENvbXBhcmlzb25LZXkoZW50aXR5LCBrZXkgYXMgRmllbGRLZXk8RT4sIG9wdHMpO1xuICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9ID0gJHt2YWwudmFsdWV9YDtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnJHRleHQnKSB7XG4gICAgICBjb25zdCBzZWFyY2ggPSB2YWwgYXMgUXVlcnlUZXh0U2VhcmNoT3B0aW9uczxFPjtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IHNlYXJjaC4kZmllbGRzLm1hcCgoZmllbGQpID0+IHRoaXMuZXNjYXBlSWQobWV0YS5maWVsZHNbZmllbGRdPy5uYW1lID8/IGZpZWxkKSk7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lc2NhcGVJZChtZXRhLm5hbWUpfSBNQVRDSCB7JHtmaWVsZHMuam9pbignICcpfX0gOiAke3RoaXMuZXNjYXBlKHNlYXJjaC4kdmFsdWUpfWA7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJyRhbmQnIHx8IGtleSA9PT0gJyRvcicgfHwga2V5ID09PSAnJG5vdCcgfHwga2V5ID09PSAnJG5vcicpIHtcbiAgICAgIGNvbnN0IG5lZ2F0ZU9wZXJhdG9yTWFwID0ge1xuICAgICAgICAkbm90OiAnJGFuZCcsXG4gICAgICAgICRub3I6ICckb3InLFxuICAgICAgfSBhcyBjb25zdDtcblxuICAgICAgY29uc3Qgb3A6ICckYW5kJyB8ICckb3InID0gbmVnYXRlT3BlcmF0b3JNYXBba2V5IGFzIHN0cmluZ10gPz8ga2V5O1xuICAgICAgY29uc3QgbmVnYXRlID0ga2V5IGluIG5lZ2F0ZU9wZXJhdG9yTWFwID8gJ05PVCAnIDogJyc7XG5cbiAgICAgIGNvbnN0IHZhbHVlcyA9IHZhbCBhcyBRdWVyeUZpbHRlckxvZ2ljYWw8RT47XG4gICAgICBjb25zdCBoYXNNYW55SXRlbXMgPSB2YWx1ZXMubGVuZ3RoID4gMTtcbiAgICAgIGNvbnN0IGxvZ2ljYWxDb21wYXJpc29uID0gdmFsdWVzXG4gICAgICAgIC5tYXAoKGZpbHRlckVudHJ5KSA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlckVudHJ5IGluc3RhbmNlb2YgUXVlcnlSYXcpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRSYXdWYWx1ZSh7XG4gICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJFbnRyeSxcbiAgICAgICAgICAgICAgZGlhbGVjdDogdGhpcyxcbiAgICAgICAgICAgICAgcHJlZml4OiBvcHRzLnByZWZpeCxcbiAgICAgICAgICAgICAgZXNjYXBlZFByZWZpeDogdGhpcy5lc2NhcGVJZChvcHRzLnByZWZpeCwgdHJ1ZSwgdHJ1ZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMud2hlcmUoZW50aXR5LCBmaWx0ZXJFbnRyeSwge1xuICAgICAgICAgICAgcHJlZml4OiBvcHRzLnByZWZpeCxcbiAgICAgICAgICAgIHVzZVByZWNlZGVuY2U6IGhhc01hbnlJdGVtcyAmJiAhQXJyYXkuaXNBcnJheShmaWx0ZXJFbnRyeSkgJiYgZ2V0S2V5cyhmaWx0ZXJFbnRyeSkubGVuZ3RoID4gMSxcbiAgICAgICAgICAgIGNsYXVzZTogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKG9wID09PSAnJG9yJyA/ICcgT1IgJyA6ICcgQU5EICcpO1xuXG4gICAgICByZXR1cm4gKG9wdHMudXNlUHJlY2VkZW5jZSB8fCBuZWdhdGUpICYmIGhhc01hbnlJdGVtcyA/IGAke25lZ2F0ZX0oJHtsb2dpY2FsQ29tcGFyaXNvbn0pYCA6IGAke25lZ2F0ZX0ke2xvZ2ljYWxDb21wYXJpc29ufWA7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbCkgPyB7ICRpbjogdmFsIH0gOiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwgPyB2YWwgOiB7ICRlcTogdmFsIH07XG4gICAgY29uc3Qgb3BlcmF0b3JzID0gZ2V0S2V5cyh2YWx1ZSkgYXMgKGtleW9mIFF1ZXJ5RmlsdGVyRmllbGRPcGVyYXRvck1hcDxFPilbXTtcbiAgICBjb25zdCBjb21wYXJpc29ucyA9IG9wZXJhdG9ycy5tYXAoKG9wKSA9PiB0aGlzLmNvbXBhcmVGaWVsZE9wZXJhdG9yKGVudGl0eSwga2V5IGFzIEZpZWxkS2V5PEU+LCBvcCwgdmFsdWVbb3BdLCBvcHRzKSkuam9pbignIEFORCAnKTtcblxuICAgIHJldHVybiBvcGVyYXRvcnMubGVuZ3RoID4gMSA/IGAoJHtjb21wYXJpc29uc30pYCA6IGNvbXBhcmlzb25zO1xuICB9XG5cbiAgY29tcGFyZUZpZWxkT3BlcmF0b3I8RSwgSyBleHRlbmRzIGtleW9mIFF1ZXJ5RmlsdGVyRmllbGRPcGVyYXRvck1hcDxFPj4oXG4gICAgZW50aXR5OiBUeXBlPEU+LFxuICAgIGtleTogRmllbGRLZXk8RT4sXG4gICAgb3A6IEssXG4gICAgdmFsOiBRdWVyeUZpbHRlckZpZWxkT3BlcmF0b3JNYXA8RT5bS10sXG4gICAgb3B0cz86IFF1ZXJ5T3B0aW9uc1xuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbXBhcmlzb25LZXkgPSB0aGlzLmdldENvbXBhcmlzb25LZXkoZW50aXR5LCBrZXksIG9wdHMpO1xuICAgIHN3aXRjaCAob3ApIHtcbiAgICAgIGNhc2UgJyRlcSc6XG4gICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgPyBgJHtjb21wYXJpc29uS2V5fSBJUyBOVUxMYCA6IGAke2NvbXBhcmlzb25LZXl9ID0gJHt0aGlzLmVzY2FwZSh2YWwpfWA7XG4gICAgICBjYXNlICckbmUnOlxuICAgICAgICByZXR1cm4gdmFsID09PSBudWxsID8gYCR7Y29tcGFyaXNvbktleX0gSVMgTk9UIE5VTExgIDogYCR7Y29tcGFyaXNvbktleX0gPD4gJHt0aGlzLmVzY2FwZSh2YWwpfWA7XG4gICAgICBjYXNlICckbm90JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShlbnRpdHksICckbm90JywgW3sgW2tleV06IHZhbCB9XSBhcyBhbnksIG9wdHMpO1xuICAgICAgY2FzZSAnJGd0JzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9ID4gJHt0aGlzLmVzY2FwZSh2YWwpfWA7XG4gICAgICBjYXNlICckZ3RlJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9ID49ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJGx0JzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IDwgJHt0aGlzLmVzY2FwZSh2YWwpfWA7XG4gICAgICBjYXNlICckbHRlJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IDw9ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJHN0YXJ0c1dpdGgnOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gTElLRSAke3RoaXMuZXNjYXBlKGAke3ZhbH0lYCl9YDtcbiAgICAgIGNhc2UgJyRpc3RhcnRzV2l0aCc6XG4gICAgICAgIHJldHVybiBgTE9XRVIoJHtjb21wYXJpc29uS2V5fSkgTElLRSAke3RoaXMuZXNjYXBlKCh2YWwgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpICsgJyUnKX1gO1xuICAgICAgY2FzZSAnJGVuZHNXaXRoJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IExJS0UgJHt0aGlzLmVzY2FwZShgJSR7dmFsfWApfWA7XG4gICAgICBjYXNlICckaWVuZHNXaXRoJzpcbiAgICAgICAgcmV0dXJuIGBMT1dFUigke2NvbXBhcmlzb25LZXl9KSBMSUtFICR7dGhpcy5lc2NhcGUoJyUnICsgKHZhbCBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkpfWA7XG4gICAgICBjYXNlICckaW5jbHVkZXMnOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gTElLRSAke3RoaXMuZXNjYXBlKGAlJHt2YWx9JWApfWA7XG4gICAgICBjYXNlICckaWluY2x1ZGVzJzpcbiAgICAgICAgcmV0dXJuIGBMT1dFUigke2NvbXBhcmlzb25LZXl9KSBMSUtFICR7dGhpcy5lc2NhcGUoJyUnICsgKHZhbCBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkgKyAnJScpfWA7XG4gICAgICBjYXNlICckaWxpa2UnOlxuICAgICAgICByZXR1cm4gYExPV0VSKCR7Y29tcGFyaXNvbktleX0pIExJS0UgJHt0aGlzLmVzY2FwZSgodmFsIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKSl9YDtcbiAgICAgIGNhc2UgJyRsaWtlJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IExJS0UgJHt0aGlzLmVzY2FwZSh2YWwpfWA7XG4gICAgICBjYXNlICckaW4nOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gSU4gKCR7dGhpcy5lc2NhcGUodmFsKX0pYDtcbiAgICAgIGNhc2UgJyRuaW4nOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gTk9UIElOICgke3RoaXMuZXNjYXBlKHZhbCl9KWA7XG4gICAgICBjYXNlICckcmVnZXgnOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gUkVHRVhQICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKGB1bmtub3duIG9wZXJhdG9yOiAke29wfWApO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbXBhcmlzb25LZXk8RT4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IEZpZWxkS2V5PEU+LCB7IHByZWZpeCB9OiBRdWVyeU9wdGlvbnMgPSB7fSk6IFNjYWxhciB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCBlc2NhcGVkUHJlZml4ID0gdGhpcy5lc2NhcGVJZChwcmVmaXgsIHRydWUsIHRydWUpO1xuICAgIGNvbnN0IGZpZWxkID0gbWV0YS5maWVsZHNba2V5XTtcblxuICAgIGlmIChmaWVsZD8udmlydHVhbCkge1xuICAgICAgcmV0dXJuIGdldFJhd1ZhbHVlKHtcbiAgICAgICAgdmFsdWU6IGZpZWxkLnZpcnR1YWwsXG4gICAgICAgIGRpYWxlY3Q6IHRoaXMsXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBlc2NhcGVkUHJlZml4ICsgdGhpcy5lc2NhcGVJZChmaWVsZD8ubmFtZSA/PyBrZXkpO1xuICB9XG5cbiAgZ3JvdXA8RT4oZW50aXR5OiBUeXBlPEU+LCBmaWVsZHM6IHJlYWRvbmx5IEZpZWxkS2V5PEU+W10sIG9wdHM6IFF1ZXJ5T3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBpZiAoIWZpZWxkcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgbmFtZXMgPSBmaWVsZHMubWFwKChrZXkpID0+IHRoaXMuZXNjYXBlSWQobWV0YS5maWVsZHNba2V5XT8ubmFtZSA/PyBrZXkpKS5qb2luKCcsICcpO1xuICAgIHJldHVybiBgIEdST1VQIEJZICR7bmFtZXN9YDtcbiAgfVxuXG4gIHNvcnQ8RT4oZW50aXR5OiBUeXBlPEU+LCBzb3J0OiBRdWVyeVNvcnQ8RT4sIHsgcHJlZml4IH06IFF1ZXJ5T3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCBzb3J0TWFwID0gYnVpbGRTb3J0TWFwKHNvcnQpO1xuICAgIGlmICghaGFzS2V5cyhzb3J0TWFwKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IGZsYXR0ZW5lZFNvcnQgPSBmbGF0T2JqZWN0KHNvcnRNYXAsIHByZWZpeCk7XG4gICAgY29uc3QgZGlyZWN0aW9uTWFwID0geyAxOiAnJywgYXNjOiAnJywgJy0xJzogJyBERVNDJywgZGVzYzogJyBERVNDJyB9IGFzIGNvbnN0O1xuICAgIGNvbnN0IG9yZGVyID0gT2JqZWN0LmVudHJpZXMoZmxhdHRlbmVkU29ydClcbiAgICAgIC5tYXAoKFtrZXksIHNvcnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBtZXRhLmZpZWxkc1trZXldPy5uYW1lID8/IGtleTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gZGlyZWN0aW9uTWFwW3NvcnQgYXMgUXVlcnlTb3J0RGlyZWN0aW9uXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXNjYXBlSWQobmFtZSkgKyBkaXJlY3Rpb247XG4gICAgICB9KVxuICAgICAgLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIGAgT1JERVIgQlkgJHtvcmRlcn1gO1xuICB9XG5cbiAgcGFnZXIob3B0czogUXVlcnlQYWdlcik6IHN0cmluZyB7XG4gICAgbGV0IHNxbCA9ICcnO1xuICAgIGlmIChvcHRzLiRsaW1pdCkge1xuICAgICAgc3FsICs9IGAgTElNSVQgJHtOdW1iZXIob3B0cy4kbGltaXQpfWA7XG4gICAgfVxuICAgIGlmIChvcHRzLiRza2lwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNxbCArPSBgIE9GRlNFVCAke051bWJlcihvcHRzLiRza2lwKX1gO1xuICAgIH1cbiAgICByZXR1cm4gc3FsO1xuICB9XG5cbiAgY291bnQ8RT4oZW50aXR5OiBUeXBlPEU+LCBxbTogUXVlcnlTZWFyY2g8RT4sIG9wdHM/OiBRdWVyeU9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlYXJjaDogUXVlcnk8RT4gPSB7XG4gICAgICAuLi5xbSxcbiAgICAgICRwcm9qZWN0OiBbcmF3KCdDT1VOVCgqKScsICdjb3VudCcpXSxcbiAgICB9O1xuXG4gICAgZGVsZXRlIHNlYXJjaC4kc29ydDtcbiAgICBkZWxldGUgc2VhcmNoLiRza2lwO1xuICAgIGRlbGV0ZSBzZWFyY2guJGxpbWl0O1xuXG4gICAgY29uc3Qgc2VsZWN0ID0gdGhpcy5zZWxlY3Q8RT4oZW50aXR5LCBzZWFyY2gpO1xuICAgIGNvbnN0IGNyaXRlcmlhID0gdGhpcy5jcml0ZXJpYShlbnRpdHksIHNlYXJjaCwgb3B0cyk7XG5cbiAgICByZXR1cm4gc2VsZWN0ICsgY3JpdGVyaWE7XG4gIH1cblxuICBmaW5kPEU+KGVudGl0eTogVHlwZTxFPiwgcW06IFF1ZXJ5PEU+LCBvcHRzPzogUXVlcnlPcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWxlY3QgPSB0aGlzLnNlbGVjdDxFPihlbnRpdHksIHFtLCBvcHRzKTtcbiAgICBjb25zdCBjcml0ZXJpYSA9IHRoaXMuY3JpdGVyaWEoZW50aXR5LCBxbSwgb3B0cyk7XG4gICAgcmV0dXJuIHNlbGVjdCArIGNyaXRlcmlhO1xuICB9XG5cbiAgaW5zZXJ0PEU+KGVudGl0eTogVHlwZTxFPiwgcGF5bG9hZDogRSB8IEVbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCByZWNvcmRzID0gZ2V0UGVyc2lzdGFibGVzKG1ldGEsIHBheWxvYWQsICdvbkluc2VydCcpO1xuICAgIGNvbnN0IGtleXMgPSBnZXRLZXlzKHJlY29yZHNbMF0pO1xuICAgIGNvbnN0IGNvbHVtbnMgPSBrZXlzLm1hcCgoa2V5KSA9PiB0aGlzLmVzY2FwZUlkKG1ldGEuZmllbGRzW2tleV0ubmFtZSkpO1xuICAgIGNvbnN0IHZhbHVlcyA9IHJlY29yZHMubWFwKChyZWNvcmQpID0+IGtleXMubWFwKChrZXkpID0+IHRoaXMuZXNjYXBlKHJlY29yZFtrZXldKSkuam9pbignLCAnKSkuam9pbignKSwgKCcpO1xuICAgIHJldHVybiBgSU5TRVJUIElOVE8gJHt0aGlzLmVzY2FwZUlkKG1ldGEubmFtZSl9ICgke2NvbHVtbnMuam9pbignLCAnKX0pIFZBTFVFUyAoJHt2YWx1ZXN9KWA7XG4gIH1cblxuICB1cGRhdGU8RT4oZW50aXR5OiBUeXBlPEU+LCBxbTogUXVlcnlDcml0ZXJpYTxFPiwgcGF5bG9hZDogRSwgb3B0cz86IFF1ZXJ5T3B0aW9ucyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCByZWNvcmQgPSBnZXRQZXJzaXN0YWJsZShtZXRhLCBwYXlsb2FkLCAnb25VcGRhdGUnKTtcbiAgICBjb25zdCBrZXlzID0gZ2V0S2V5cyhyZWNvcmQpO1xuICAgIGNvbnN0IGVudHJpZXMgPSBrZXlzLm1hcCgoa2V5KSA9PiBgJHt0aGlzLmVzY2FwZUlkKGtleSl9ID0gJHt0aGlzLmVzY2FwZShwYXlsb2FkW2tleV0pfWApLmpvaW4oJywgJyk7XG4gICAgY29uc3QgY3JpdGVyaWEgPSB0aGlzLmNyaXRlcmlhKGVudGl0eSwgcW0sIG9wdHMpO1xuICAgIHJldHVybiBgVVBEQVRFICR7dGhpcy5lc2NhcGVJZChtZXRhLm5hbWUpfSBTRVQgJHtlbnRyaWVzfSR7Y3JpdGVyaWF9YDtcbiAgfVxuXG4gIGRlbGV0ZTxFPihlbnRpdHk6IFR5cGU8RT4sIHFtOiBRdWVyeUNyaXRlcmlhPEU+LCBvcHRzOiBRdWVyeU9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcblxuICAgIGlmIChvcHRzLnNvZnREZWxldGUgfHwgb3B0cy5zb2Z0RGVsZXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChtZXRhLnNvZnREZWxldGUpIHtcbiAgICAgICAgY29uc3QgY3JpdGVyaWEgPSB0aGlzLmNyaXRlcmlhKGVudGl0eSwgcW0sIG9wdHMpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldEZpZWxkQ2FsbGJhY2tWYWx1ZShtZXRhLmZpZWxkc1ttZXRhLnNvZnREZWxldGVdLm9uRGVsZXRlKTtcbiAgICAgICAgcmV0dXJuIGBVUERBVEUgJHt0aGlzLmVzY2FwZUlkKG1ldGEubmFtZSl9IFNFVCAke3RoaXMuZXNjYXBlSWQobWV0YS5zb2Z0RGVsZXRlKX0gPSAke3RoaXMuZXNjYXBlKHZhbHVlKX0ke2NyaXRlcmlhfWA7XG4gICAgICB9IGVsc2UgaWYgKG9wdHMuc29mdERlbGV0ZSkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYCcke21ldGEubmFtZX0nIGhhcyBub3QgZW5hYmxlZCAnc29mdERlbGV0ZSdgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjcml0ZXJpYSA9IHRoaXMuY3JpdGVyaWEoZW50aXR5LCBxbSwgb3B0cyk7XG5cbiAgICByZXR1cm4gYERFTEVURSBGUk9NICR7dGhpcy5lc2NhcGVJZChtZXRhLm5hbWUpfSR7Y3JpdGVyaWF9YDtcbiAgfVxuXG4gIGVzY2FwZUlkKHZhbDogc3RyaW5nLCBmb3JiaWRRdWFsaWZpZWQ/OiBib29sZWFuLCBhZGREb3Q/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICghZm9yYmlkUXVhbGlmaWVkICYmIHZhbC5pbmNsdWRlcygnLicpKSB7XG4gICAgICByZXR1cm4gdmFsXG4gICAgICAgIC5zcGxpdCgnLicpXG4gICAgICAgIC5tYXAoKGl0KSA9PiB0aGlzLmVzY2FwZUlkKGl0KSlcbiAgICAgICAgLmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2VkIGZyb20gJ2VzY2FwZUlkJyBmdW5jdGlvbiBoZXJlIGh0dHBzOi8vZ2l0aHViLmNvbS9teXNxbGpzL3NxbHN0cmluZy9ibG9iL21hc3Rlci9saWIvU3FsU3RyaW5nLmpzXG4gICAgY29uc3QgZXNjYXBlZCA9IHRoaXMuZXNjYXBlSWRDaGFyICsgdmFsLnJlcGxhY2UodGhpcy5lc2NhcGVJZFJlZ2V4LCB0aGlzLmVzY2FwZUlkQ2hhciArIHRoaXMuZXNjYXBlSWRDaGFyKSArIHRoaXMuZXNjYXBlSWRDaGFyO1xuXG4gICAgY29uc3Qgc3VmZml4ID0gYWRkRG90ID8gJy4nIDogJyc7XG5cbiAgICByZXR1cm4gZXNjYXBlZCArIHN1ZmZpeDtcbiAgfVxuXG4gIGVzY2FwZSh2YWx1ZTogYW55KTogU2NhbGFyIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBRdWVyeVJhdykge1xuICAgICAgcmV0dXJuIGdldFJhd1ZhbHVlKHsgdmFsdWUsIGRpYWxlY3Q6IHRoaXMgfSk7XG4gICAgfVxuICAgIHJldHVybiBlc2NhcGUodmFsdWUpO1xuICB9XG59XG4iXX0=
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RTcWxEaWFsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpYWxlY3QvYWJzdHJhY3RTcWxEaWFsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUNuQyxrQ0F1QmlCO0FBQ2pCLGtDQWFpQjtBQUVqQixzQ0FBb0M7QUFFcEMsTUFBc0Isa0JBQWtCO0lBR2pCO0lBQWtDO0lBRjlDLGFBQWEsQ0FBUztJQUUvQixZQUFxQixZQUF1QixFQUFXLHVCQUErQjtRQUFqRSxpQkFBWSxHQUFaLFlBQVksQ0FBVztRQUFXLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBUTtRQUNwRixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFFBQVEsQ0FBSSxNQUFlLEVBQUUsRUFBWSxFQUFFLE9BQXFCLEVBQUU7UUFDaEUsTUFBTSxJQUFJLEdBQUcsSUFBQSxnQkFBTyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUEsNEJBQXFCLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDcEgsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBSSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDckUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBSSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDcEUsTUFB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QUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRWpDLE9BQU8sT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQVU7UUFDZixJQUFJLEtBQUssWUFBWSxlQUFRLEVBQUU7WUFDN0IsT0FBTyxJQUFBLGtCQUFXLEVBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDOUM7UUFDRCxPQUFPLElBQUEsa0JBQU0sRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0NBQ0Y7QUF0YUQsZ0RBc2FDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXNjYXBlIH0gZnJvbSAnc3Fsc3RyaW5nJztcbmltcG9ydCB7XG4gIFF1ZXJ5RmlsdGVyLFxuICBRdWVyeSxcbiAgU2NhbGFyLFxuICBRdWVyeUZpbHRlckZpZWxkT3BlcmF0b3JNYXAsXG4gIFF1ZXJ5U29ydCxcbiAgUXVlcnlQYWdlcixcbiAgUXVlcnlUZXh0U2VhcmNoT3B0aW9ucyxcbiAgRmllbGRLZXksXG4gIFF1ZXJ5UHJvamVjdCxcbiAgVHlwZSxcbiAgUXVlcnlDcml0ZXJpYSxcbiAgUXVlcnlQcm9qZWN0QXJyYXksXG4gIFF1ZXJ5T3B0aW9ucyxcbiAgUXVlcnlEaWFsZWN0LFxuICBRdWVyeUZpbHRlck9wdGlvbnMsXG4gIFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMsXG4gIFF1ZXJ5RmlsdGVyTWFwLFxuICBRdWVyeVNlYXJjaCxcbiAgUXVlcnlQcm9qZWN0T3B0aW9ucyxcbiAgUXVlcnlTb3J0RGlyZWN0aW9uLFxuICBRdWVyeUZpbHRlckxvZ2ljYWwsXG4gIFF1ZXJ5UmF3LFxufSBmcm9tICcuLi90eXBlJztcbmltcG9ydCB7XG4gIGdldFBlcnNpc3RhYmxlLFxuICBnZXRQcm9qZWN0UmVsYXRpb25LZXlzLFxuICBnZXRQZXJzaXN0YWJsZXMsXG4gIGlzUHJvamVjdGluZ1JlbGF0aW9ucyxcbiAgZ2V0S2V5cyxcbiAgaGFzS2V5cyxcbiAgYnVpbGRTb3J0TWFwLFxuICBmbGF0T2JqZWN0LFxuICBnZXRSYXdWYWx1ZSxcbiAgcmF3LFxuICBnZXRRdWVyeUZpbHRlckFzTWFwLFxuICBnZXRGaWVsZENhbGxiYWNrVmFsdWUsXG59IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQgeyBnZXRNZXRhIH0gZnJvbSAnLi4vZW50aXR5JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0U3FsRGlhbGVjdCBpbXBsZW1lbnRzIFF1ZXJ5RGlhbGVjdCB7XG4gIHJlYWRvbmx5IGVzY2FwZUlkUmVnZXg6IFJlZ0V4cDtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBlc2NhcGVJZENoYXI6ICdgJyB8ICdcIicsIHJlYWRvbmx5IGJlZ2luVHJhbnNhY3Rpb25Db21tYW5kOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVzY2FwZUlkUmVnZXggPSBSZWdFeHAoZXNjYXBlSWRDaGFyLCAnZycpO1xuICB9XG5cbiAgY3JpdGVyaWE8RT4oZW50aXR5OiBUeXBlPEU+LCBxbTogUXVlcnk8RT4sIG9wdHM6IFF1ZXJ5T3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IHByZWZpeCA9IG9wdHMucHJlZml4ID8/IChvcHRzLmF1dG9QcmVmaXggfHwgaXNQcm9qZWN0aW5nUmVsYXRpb25zKG1ldGEsIHFtLiRwcm9qZWN0KSkgPyBtZXRhLm5hbWUgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgd2hlcmUgPSB0aGlzLndoZXJlPEU+KGVudGl0eSwgcW0uJGZpbHRlciwgeyAuLi5vcHRzLCBwcmVmaXggfSk7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3VwPEU+KGVudGl0eSwgcW0uJGdyb3VwLCB7IC4uLm9wdHMsIHByZWZpeCB9KTtcbiAgICBjb25zdCBoYXZpbmcgPSB0aGlzLndoZXJlPEU+KGVudGl0eSwgcW0uJGhhdmluZywgeyAuLi5vcHRzLCBwcmVmaXgsIGNsYXVzZTogJ0hBVklORycgfSk7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMuc29ydDxFPihlbnRpdHksIHFtLiRzb3J0LCB7IC4uLm9wdHMsIHByZWZpeCB9KTtcbiAgICBjb25zdCBwYWdlciA9IHRoaXMucGFnZXIocW0pO1xuICAgIHJldHVybiB3aGVyZSArIGdyb3VwICsgaGF2aW5nICsgc29ydCArIHBhZ2VyO1xuICB9XG5cbiAgcHJvamVjdEZpZWxkczxFPihlbnRpdHk6IFR5cGU8RT4sIHByb2plY3Q6IFF1ZXJ5UHJvamVjdDxFPiwgb3B0czogUXVlcnlQcm9qZWN0T3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IHByZWZpeCA9IG9wdHMucHJlZml4ID8gb3B0cy5wcmVmaXggKyAnLicgOiAnJztcbiAgICBjb25zdCBlc2NhcGVkUHJlZml4ID0gdGhpcy5lc2NhcGVJZChvcHRzLnByZWZpeCwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICBsZXQgZmllbGRzOiBRdWVyeVByb2plY3RBcnJheTxFPjtcblxuICAgIGlmIChwcm9qZWN0KSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9qZWN0KSkge1xuICAgICAgICBmaWVsZHMgPSBwcm9qZWN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG9zaXRpdmVQcm9qZWN0S2V5cyA9IGdldEtleXMocHJvamVjdCkuZmlsdGVyKChrZXkpID0+IHByb2plY3Rba2V5XSk7XG4gICAgICAgIGZpZWxkcyA9IHBvc2l0aXZlUHJvamVjdEtleXMubGVuZ3RoXG4gICAgICAgICAgPyBwb3NpdGl2ZVByb2plY3RLZXlzLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHByb2plY3Rba2V5XTtcbiAgICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIFF1ZXJ5UmF3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhdyh2YWwudmFsdWUsIGtleSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGtleSBhcyBGaWVsZEtleTxFPjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiAoZ2V0S2V5cyhtZXRhLmZpZWxkcykuZmlsdGVyKChrZXkpID0+ICEoa2V5IGluIHByb2plY3QpKSBhcyBGaWVsZEtleTxFPltdKTtcbiAgICAgIH1cbiAgICAgIGZpZWxkcyA9IGZpZWxkcy5maWx0ZXIoKGtleSkgPT4ga2V5IGluc3RhbmNlb2YgUXVlcnlSYXcgfHwgbWV0YS5maWVsZHNba2V5IGFzIEZpZWxkS2V5PEU+XSk7XG4gICAgICBpZiAoIWZpZWxkcy5sZW5ndGggfHwgKG9wdHMucHJlZml4ICYmICFmaWVsZHMuaW5jbHVkZXMobWV0YS5pZCkpKSB7XG4gICAgICAgIGZpZWxkcyA9IFttZXRhLmlkLCAuLi5maWVsZHNdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmaWVsZHMgPSBnZXRLZXlzKG1ldGEuZmllbGRzKSBhcyBGaWVsZEtleTxFPltdO1xuICAgIH1cblxuICAgIHJldHVybiBmaWVsZHNcbiAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5IGluc3RhbmNlb2YgUXVlcnlSYXcpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0UmF3VmFsdWUoe1xuICAgICAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgICAgIGRpYWxlY3Q6IHRoaXMsXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICBlc2NhcGVkUHJlZml4LFxuICAgICAgICAgICAgYXV0b1ByZWZpeEFsaWFzOiBvcHRzLmF1dG9QcmVmaXhBbGlhcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpZWxkID0gbWV0YS5maWVsZHNba2V5IGFzIEZpZWxkS2V5PEU+XTtcblxuICAgICAgICBpZiAoZmllbGQudmlydHVhbCkge1xuICAgICAgICAgIHJldHVybiBnZXRSYXdWYWx1ZSh7XG4gICAgICAgICAgICB2YWx1ZTogcmF3KGZpZWxkLnZpcnR1YWwudmFsdWUsIGtleSksXG4gICAgICAgICAgICBkaWFsZWN0OiB0aGlzLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgIGF1dG9QcmVmaXhBbGlhczogb3B0cy5hdXRvUHJlZml4QWxpYXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuYW1lID0gZmllbGQ/Lm5hbWUgPz8gKGtleSBhcyBGaWVsZEtleTxFPik7XG4gICAgICAgIGNvbnN0IGZpZWxkUGF0aCA9IGAke2VzY2FwZWRQcmVmaXh9JHt0aGlzLmVzY2FwZUlkKG5hbWUpfWA7XG5cbiAgICAgICAgcmV0dXJuICFvcHRzLmF1dG9QcmVmaXhBbGlhcyAmJiAobmFtZSA9PT0ga2V5IHx8ICFmaWVsZCkgPyBmaWVsZFBhdGggOiBgJHtmaWVsZFBhdGh9ICR7dGhpcy5lc2NhcGVJZCgocHJlZml4ICsga2V5KSBhcyBGaWVsZEtleTxFPiwgdHJ1ZSl9YDtcbiAgICAgIH0pXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIHByb2plY3RSZWxhdGlvbnM8RT4oZW50aXR5OiBUeXBlPEU+LCBwcm9qZWN0OiBRdWVyeVByb2plY3Q8RT4gPSB7fSwgeyBwcmVmaXggfTogeyBwcmVmaXg/OiBzdHJpbmcgfSA9IHt9KTogeyBmaWVsZHM6IHN0cmluZzsgdGFibGVzOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCByZWxhdGlvbnMgPSBnZXRQcm9qZWN0UmVsYXRpb25LZXlzKG1ldGEsIHByb2plY3QpO1xuICAgIGNvbnN0IGlzUHJvamVjdEFycmF5ID0gQXJyYXkuaXNBcnJheShwcm9qZWN0KTtcbiAgICBsZXQgZmllbGRzID0gJyc7XG4gICAgbGV0IHRhYmxlcyA9ICcnO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgcmVsYXRpb25zKSB7XG4gICAgICBjb25zdCByZWxPcHRzID0gbWV0YS5yZWxhdGlvbnNba2V5XTtcblxuICAgICAgaWYgKHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICcxbScgfHwgcmVsT3B0cy5jYXJkaW5hbGl0eSA9PT0gJ21tJykge1xuICAgICAgICAvLyAnMW0nIGFuZCAnbW0nIHNob3VsZCBiZSByZXNvbHZlZCBpbiBhIGhpZ2hlciBsYXllciBiZWNhdXNlIHRoZXkgd2lsbCBuZWVkIG11bHRpcGxlIHF1ZXJpZXNcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpvaW5SZWxBbGlhcyA9IHByZWZpeCA/IHByZWZpeCArICcuJyArIGtleSA6IGtleTtcbiAgICAgIGNvbnN0IHJlbEVudGl0eSA9IHJlbE9wdHMuZW50aXR5KCk7XG4gICAgICBjb25zdCByZWxQcm9qZWN0ID0gcHJvamVjdFtrZXkgYXMgc3RyaW5nXTtcbiAgICAgIGNvbnN0IHJlbFF1ZXJ5ID0gaXNQcm9qZWN0QXJyYXkgPyB7fSA6IEFycmF5LmlzQXJyYXkocmVsUHJvamVjdCkgPyB7ICRwcm9qZWN0OiByZWxQcm9qZWN0IH0gOiByZWxQcm9qZWN0O1xuXG4gICAgICBjb25zdCByZWxDb2x1bW5zID0gdGhpcy5wcm9qZWN0RmllbGRzKHJlbEVudGl0eSwgcmVsUXVlcnkuJHByb2plY3QsIHtcbiAgICAgICAgcHJlZml4OiBqb2luUmVsQWxpYXMsXG4gICAgICAgIGF1dG9QcmVmaXhBbGlhczogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBmaWVsZHMgKz0gJywgJyArIHJlbENvbHVtbnM7XG5cbiAgICAgIGNvbnN0IHsgZmllbGRzOiBzdWJDb2x1bW5zLCB0YWJsZXM6IHN1YlRhYmxlcyB9ID0gdGhpcy5wcm9qZWN0UmVsYXRpb25zKHJlbEVudGl0eSwgcmVsUXVlcnkuJHByb2plY3QsIHtcbiAgICAgICAgcHJlZml4OiBqb2luUmVsQWxpYXMsXG4gICAgICB9KTtcblxuICAgICAgZmllbGRzICs9IHN1YkNvbHVtbnM7XG5cbiAgICAgIGNvbnN0IHJlbE1ldGEgPSBnZXRNZXRhKHJlbEVudGl0eSk7XG4gICAgICBjb25zdCByZWxFbnRpdHlOYW1lID0gdGhpcy5lc2NhcGVJZChyZWxNZXRhLm5hbWUpO1xuICAgICAgY29uc3QgcmVsUGF0aCA9IHByZWZpeCA/IHRoaXMuZXNjYXBlSWQocHJlZml4LCB0cnVlKSA6IHRoaXMuZXNjYXBlSWQobWV0YS5uYW1lKTtcbiAgICAgIGNvbnN0IGpvaW5UeXBlID0gcmVsUXVlcnkuJHJlcXVpcmVkID8gJ0lOTkVSJyA6ICdMRUZUJztcbiAgICAgIGNvbnN0IGpvaW5BbGlhcyA9IHRoaXMuZXNjYXBlSWQoam9pblJlbEFsaWFzLCB0cnVlKTtcblxuICAgICAgdGFibGVzICs9IGAgJHtqb2luVHlwZX0gSk9JTiAke3JlbEVudGl0eU5hbWV9ICR7am9pbkFsaWFzfSBPTiBgO1xuICAgICAgdGFibGVzICs9IHJlbE9wdHMucmVmZXJlbmNlcy5tYXAoKGl0KSA9PiBgJHtqb2luQWxpYXN9LiR7dGhpcy5lc2NhcGVJZChpdC5mb3JlaWduKX0gPSAke3JlbFBhdGh9LiR7dGhpcy5lc2NhcGVJZChpdC5sb2NhbCl9YCkuam9pbignIEFORCAnKTtcblxuICAgICAgaWYgKHJlbFF1ZXJ5LiRmaWx0ZXIpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy53aGVyZShyZWxFbnRpdHksIHJlbFF1ZXJ5LiRmaWx0ZXIsIHsgcHJlZml4OiBrZXksIGNsYXVzZTogZmFsc2UgfSk7XG4gICAgICAgIHRhYmxlcyArPSBgIEFORCAke2ZpbHRlcn1gO1xuICAgICAgfVxuXG4gICAgICB0YWJsZXMgKz0gc3ViVGFibGVzO1xuICAgIH1cblxuICAgIHJldHVybiB7IGZpZWxkcywgdGFibGVzIH07XG4gIH1cblxuICBzZWxlY3Q8RT4oZW50aXR5OiBUeXBlPEU+LCBxbTogUXVlcnk8RT4sIG9wdHM6IFF1ZXJ5T3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IHByZWZpeCA9IG9wdHMucHJlZml4ID8/IChvcHRzLmF1dG9QcmVmaXggfHwgaXNQcm9qZWN0aW5nUmVsYXRpb25zKG1ldGEsIHFtLiRwcm9qZWN0KSkgPyBtZXRhLm5hbWUgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLnByb2plY3RGaWVsZHMoZW50aXR5LCBxbS4kcHJvamVjdCwgeyBwcmVmaXggfSk7XG4gICAgY29uc3QgeyBmaWVsZHM6IHJlbGF0aW9uRmllbGRzLCB0YWJsZXMgfSA9IHRoaXMucHJvamVjdFJlbGF0aW9ucyhlbnRpdHksIHFtLiRwcm9qZWN0KTtcblxuICAgIHJldHVybiBgU0VMRUNUICR7ZmllbGRzfSR7cmVsYXRpb25GaWVsZHN9IEZST00gJHt0aGlzLmVzY2FwZUlkKG1ldGEubmFtZSl9JHt0YWJsZXN9YDtcbiAgfVxuXG4gIHdoZXJlPEU+KGVudGl0eTogVHlwZTxFPiwgZmlsdGVyOiBRdWVyeUZpbHRlcjxFPiA9IHt9LCBvcHRzOiBRdWVyeUZpbHRlck9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCB7IHVzZVByZWNlZGVuY2UsIGNsYXVzZSA9ICdXSEVSRScsIHNvZnREZWxldGUgfSA9IG9wdHM7XG5cbiAgICBmaWx0ZXIgPSBnZXRRdWVyeUZpbHRlckFzTWFwKG1ldGEsIGZpbHRlcik7XG5cbiAgICBpZiAobWV0YS5zb2Z0RGVsZXRlICYmIChzb2Z0RGVsZXRlIHx8IHNvZnREZWxldGUgPT09IHVuZGVmaW5lZCkgJiYgY2xhdXNlICE9PSAnSEFWSU5HJyAmJiAhZmlsdGVyW21ldGEuc29mdERlbGV0ZSBhcyBzdHJpbmddKSB7XG4gICAgICBmaWx0ZXJbbWV0YS5zb2Z0RGVsZXRlIGFzIHN0cmluZ10gPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhmaWx0ZXIpO1xuXG4gICAgaWYgKCFlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLm9wdHMsIHVzZVByZWNlZGVuY2U6IGVudHJpZXMubGVuZ3RoID4gMSB9O1xuXG4gICAgbGV0IHNxbCA9IGVudHJpZXMubWFwKChba2V5LCB2YWxdKSA9PiB0aGlzLmNvbXBhcmUoZW50aXR5LCBrZXkgYXMga2V5b2YgUXVlcnlGaWx0ZXJNYXA8RT4sIHZhbCBhcyBhbnksIG9wdGlvbnMpKS5qb2luKGAgQU5EIGApO1xuXG4gICAgaWYgKHVzZVByZWNlZGVuY2UpIHtcbiAgICAgIHNxbCA9IGAoJHtzcWx9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXVzZSA/IGAgJHtjbGF1c2V9ICR7c3FsfWAgOiBzcWw7XG4gIH1cblxuICBjb21wYXJlPEUsIEsgZXh0ZW5kcyBrZXlvZiBRdWVyeUZpbHRlck1hcDxFPj4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IEssIHZhbDogUXVlcnlGaWx0ZXJNYXA8RT5bS10sIG9wdHM/OiBRdWVyeUNvbXBhcmlzb25PcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuXG4gICAgaWYgKHZhbCBpbnN0YW5jZW9mIFF1ZXJ5UmF3KSB7XG4gICAgICBpZiAoa2V5ID09PSAnJGV4aXN0cycgfHwga2V5ID09PSAnJG5leGlzdHMnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsIGFzIFF1ZXJ5UmF3O1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFJhd1ZhbHVlKHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBkaWFsZWN0OiB0aGlzLFxuICAgICAgICAgIHByZWZpeDogbWV0YS5uYW1lLFxuICAgICAgICAgIGVzY2FwZWRQcmVmaXg6IHRoaXMuZXNjYXBlSWQobWV0YS5uYW1lLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYCR7a2V5ID09PSAnJGV4aXN0cycgPyAnRVhJU1RTJyA6ICdOT1QgRVhJU1RTJ30gKCR7cXVlcnl9KWA7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wYXJpc29uS2V5ID0gdGhpcy5nZXRDb21wYXJpc29uS2V5KGVudGl0eSwga2V5IGFzIEZpZWxkS2V5PEU+LCBvcHRzKTtcbiAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA9ICR7dmFsLnZhbHVlfWA7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJyR0ZXh0Jykge1xuICAgICAgY29uc3Qgc2VhcmNoID0gdmFsIGFzIFF1ZXJ5VGV4dFNlYXJjaE9wdGlvbnM8RT47XG4gICAgICBjb25zdCBmaWVsZHMgPSBzZWFyY2guJGZpZWxkcy5tYXAoKGZpZWxkKSA9PiB0aGlzLmVzY2FwZUlkKG1ldGEuZmllbGRzW2ZpZWxkXT8ubmFtZSA/PyBmaWVsZCkpO1xuICAgICAgcmV0dXJuIGAke3RoaXMuZXNjYXBlSWQobWV0YS5uYW1lKX0gTUFUQ0ggeyR7ZmllbGRzLmpvaW4oJyAnKX19IDogJHt0aGlzLmVzY2FwZShzZWFyY2guJHZhbHVlKX1gO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICckYW5kJyB8fCBrZXkgPT09ICckb3InIHx8IGtleSA9PT0gJyRub3QnIHx8IGtleSA9PT0gJyRub3InKSB7XG4gICAgICBjb25zdCBuZWdhdGVPcGVyYXRvck1hcCA9IHtcbiAgICAgICAgJG5vdDogJyRhbmQnLFxuICAgICAgICAkbm9yOiAnJG9yJyxcbiAgICAgIH0gYXMgY29uc3Q7XG5cbiAgICAgIGNvbnN0IG9wOiAnJGFuZCcgfCAnJG9yJyA9IG5lZ2F0ZU9wZXJhdG9yTWFwW2tleSBhcyBzdHJpbmddID8/IGtleTtcbiAgICAgIGNvbnN0IG5lZ2F0ZSA9IGtleSBpbiBuZWdhdGVPcGVyYXRvck1hcCA/ICdOT1QgJyA6ICcnO1xuXG4gICAgICBjb25zdCB2YWx1ZXMgPSB2YWwgYXMgUXVlcnlGaWx0ZXJMb2dpY2FsPEU+O1xuICAgICAgY29uc3QgaGFzTWFueUl0ZW1zID0gdmFsdWVzLmxlbmd0aCA+IDE7XG4gICAgICBjb25zdCBsb2dpY2FsQ29tcGFyaXNvbiA9IHZhbHVlc1xuICAgICAgICAubWFwKChmaWx0ZXJFbnRyeSkgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJFbnRyeSBpbnN0YW5jZW9mIFF1ZXJ5UmF3KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UmF3VmFsdWUoe1xuICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyRW50cnksXG4gICAgICAgICAgICAgIGRpYWxlY3Q6IHRoaXMsXG4gICAgICAgICAgICAgIHByZWZpeDogb3B0cy5wcmVmaXgsXG4gICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXg6IHRoaXMuZXNjYXBlSWQob3B0cy5wcmVmaXgsIHRydWUsIHRydWUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndoZXJlKGVudGl0eSwgZmlsdGVyRW50cnksIHtcbiAgICAgICAgICAgIHByZWZpeDogb3B0cy5wcmVmaXgsXG4gICAgICAgICAgICB1c2VQcmVjZWRlbmNlOiBoYXNNYW55SXRlbXMgJiYgIUFycmF5LmlzQXJyYXkoZmlsdGVyRW50cnkpICYmIGdldEtleXMoZmlsdGVyRW50cnkpLmxlbmd0aCA+IDEsXG4gICAgICAgICAgICBjbGF1c2U6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihvcCA9PT0gJyRvcicgPyAnIE9SICcgOiAnIEFORCAnKTtcblxuICAgICAgcmV0dXJuIChvcHRzLnVzZVByZWNlZGVuY2UgfHwgbmVnYXRlKSAmJiBoYXNNYW55SXRlbXMgPyBgJHtuZWdhdGV9KCR7bG9naWNhbENvbXBhcmlzb259KWAgOiBgJHtuZWdhdGV9JHtsb2dpY2FsQ29tcGFyaXNvbn1gO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWwpID8geyAkaW46IHZhbCB9IDogdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsID8gdmFsIDogeyAkZXE6IHZhbCB9O1xuICAgIGNvbnN0IG9wZXJhdG9ycyA9IGdldEtleXModmFsdWUpIGFzIChrZXlvZiBRdWVyeUZpbHRlckZpZWxkT3BlcmF0b3JNYXA8RT4pW107XG4gICAgY29uc3QgY29tcGFyaXNvbnMgPSBvcGVyYXRvcnMubWFwKChvcCkgPT4gdGhpcy5jb21wYXJlRmllbGRPcGVyYXRvcihlbnRpdHksIGtleSBhcyBGaWVsZEtleTxFPiwgb3AsIHZhbHVlW29wXSwgb3B0cykpLmpvaW4oJyBBTkQgJyk7XG5cbiAgICByZXR1cm4gb3BlcmF0b3JzLmxlbmd0aCA+IDEgPyBgKCR7Y29tcGFyaXNvbnN9KWAgOiBjb21wYXJpc29ucztcbiAgfVxuXG4gIGNvbXBhcmVGaWVsZE9wZXJhdG9yPEUsIEsgZXh0ZW5kcyBrZXlvZiBRdWVyeUZpbHRlckZpZWxkT3BlcmF0b3JNYXA8RT4+KFxuICAgIGVudGl0eTogVHlwZTxFPixcbiAgICBrZXk6IEZpZWxkS2V5PEU+LFxuICAgIG9wOiBLLFxuICAgIHZhbDogUXVlcnlGaWx0ZXJGaWVsZE9wZXJhdG9yTWFwPEU+W0tdLFxuICAgIG9wdHM/OiBRdWVyeU9wdGlvbnNcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb21wYXJpc29uS2V5ID0gdGhpcy5nZXRDb21wYXJpc29uS2V5KGVudGl0eSwga2V5LCBvcHRzKTtcbiAgICBzd2l0Y2ggKG9wKSB7XG4gICAgICBjYXNlICckZXEnOlxuICAgICAgICByZXR1cm4gdmFsID09PSBudWxsID8gYCR7Y29tcGFyaXNvbktleX0gSVMgTlVMTGAgOiBgJHtjb21wYXJpc29uS2V5fSA9ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJG5lJzpcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCA/IGAke2NvbXBhcmlzb25LZXl9IElTIE5PVCBOVUxMYCA6IGAke2NvbXBhcmlzb25LZXl9IDw+ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJG5vdCc6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUoZW50aXR5LCAnJG5vdCcsIFt7IFtrZXldOiB2YWwgfV0gYXMgYW55LCBvcHRzKTtcbiAgICAgIGNhc2UgJyRndCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA+ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJGd0ZSc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA+PSAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGNhc2UgJyRsdCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA8ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJGx0ZSc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA8PSAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGNhc2UgJyRzdGFydHNXaXRoJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IExJS0UgJHt0aGlzLmVzY2FwZShgJHt2YWx9JWApfWA7XG4gICAgICBjYXNlICckaXN0YXJ0c1dpdGgnOlxuICAgICAgICByZXR1cm4gYExPV0VSKCR7Y29tcGFyaXNvbktleX0pIExJS0UgJHt0aGlzLmVzY2FwZSgodmFsIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKSArICclJyl9YDtcbiAgICAgIGNhc2UgJyRlbmRzV2l0aCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBMSUtFICR7dGhpcy5lc2NhcGUoYCUke3ZhbH1gKX1gO1xuICAgICAgY2FzZSAnJGllbmRzV2l0aCc6XG4gICAgICAgIHJldHVybiBgTE9XRVIoJHtjb21wYXJpc29uS2V5fSkgTElLRSAke3RoaXMuZXNjYXBlKCclJyArICh2YWwgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpKX1gO1xuICAgICAgY2FzZSAnJGluY2x1ZGVzJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IExJS0UgJHt0aGlzLmVzY2FwZShgJSR7dmFsfSVgKX1gO1xuICAgICAgY2FzZSAnJGlpbmNsdWRlcyc6XG4gICAgICAgIHJldHVybiBgTE9XRVIoJHtjb21wYXJpc29uS2V5fSkgTElLRSAke3RoaXMuZXNjYXBlKCclJyArICh2YWwgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpICsgJyUnKX1gO1xuICAgICAgY2FzZSAnJGlsaWtlJzpcbiAgICAgICAgcmV0dXJuIGBMT1dFUigke2NvbXBhcmlzb25LZXl9KSBMSUtFICR7dGhpcy5lc2NhcGUoKHZhbCBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkpfWA7XG4gICAgICBjYXNlICckbGlrZSc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBMSUtFICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJGluJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IElOICgke3RoaXMuZXNjYXBlKHZhbCl9KWA7XG4gICAgICBjYXNlICckbmluJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IE5PVCBJTiAoJHt0aGlzLmVzY2FwZSh2YWwpfSlgO1xuICAgICAgY2FzZSAnJHJlZ2V4JzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IFJFR0VYUCAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IFR5cGVFcnJvcihgdW5rbm93biBvcGVyYXRvcjogJHtvcH1gKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb21wYXJpc29uS2V5PEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBGaWVsZEtleTxFPiwgeyBwcmVmaXggfTogUXVlcnlPcHRpb25zID0ge30pOiBTY2FsYXIge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgZXNjYXBlZFByZWZpeCA9IHRoaXMuZXNjYXBlSWQocHJlZml4LCB0cnVlLCB0cnVlKTtcbiAgICBjb25zdCBmaWVsZCA9IG1ldGEuZmllbGRzW2tleV07XG5cbiAgICBpZiAoZmllbGQ/LnZpcnR1YWwpIHtcbiAgICAgIHJldHVybiBnZXRSYXdWYWx1ZSh7XG4gICAgICAgIHZhbHVlOiBmaWVsZC52aXJ0dWFsLFxuICAgICAgICBkaWFsZWN0OiB0aGlzLFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXNjYXBlZFByZWZpeCArIHRoaXMuZXNjYXBlSWQoZmllbGQ/Lm5hbWUgPz8ga2V5KTtcbiAgfVxuXG4gIGdyb3VwPEU+KGVudGl0eTogVHlwZTxFPiwgZmllbGRzOiByZWFkb25seSBGaWVsZEtleTxFPltdLCBvcHRzOiBRdWVyeU9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgaWYgKCFmaWVsZHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IG5hbWVzID0gZmllbGRzLm1hcCgoa2V5KSA9PiB0aGlzLmVzY2FwZUlkKG1ldGEuZmllbGRzW2tleV0/Lm5hbWUgPz8ga2V5KSkuam9pbignLCAnKTtcbiAgICByZXR1cm4gYCBHUk9VUCBCWSAke25hbWVzfWA7XG4gIH1cblxuICBzb3J0PEU+KGVudGl0eTogVHlwZTxFPiwgc29ydDogUXVlcnlTb3J0PEU+LCB7IHByZWZpeCB9OiBRdWVyeU9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc29ydE1hcCA9IGJ1aWxkU29ydE1hcChzb3J0KTtcbiAgICBpZiAoIWhhc0tleXMoc29ydE1hcCkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCBmbGF0dGVuZWRTb3J0ID0gZmxhdE9iamVjdChzb3J0TWFwLCBwcmVmaXgpO1xuICAgIGNvbnN0IGRpcmVjdGlvbk1hcCA9IHsgMTogJycsIGFzYzogJycsICctMSc6ICcgREVTQycsIGRlc2M6ICcgREVTQycgfSBhcyBjb25zdDtcbiAgICBjb25zdCBvcmRlciA9IE9iamVjdC5lbnRyaWVzKGZsYXR0ZW5lZFNvcnQpXG4gICAgICAubWFwKChba2V5LCBzb3J0XSkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gbWV0YS5maWVsZHNba2V5XT8ubmFtZSA/PyBrZXk7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGRpcmVjdGlvbk1hcFtzb3J0IGFzIFF1ZXJ5U29ydERpcmVjdGlvbl07XG4gICAgICAgIHJldHVybiB0aGlzLmVzY2FwZUlkKG5hbWUpICsgZGlyZWN0aW9uO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcsICcpO1xuICAgIHJldHVybiBgIE9SREVSIEJZICR7b3JkZXJ9YDtcbiAgfVxuXG4gIHBhZ2VyKG9wdHM6IFF1ZXJ5UGFnZXIpOiBzdHJpbmcge1xuICAgIGxldCBzcWwgPSAnJztcbiAgICBpZiAob3B0cy4kbGltaXQpIHtcbiAgICAgIHNxbCArPSBgIExJTUlUICR7TnVtYmVyKG9wdHMuJGxpbWl0KX1gO1xuICAgIH1cbiAgICBpZiAob3B0cy4kc2tpcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzcWwgKz0gYCBPRkZTRVQgJHtOdW1iZXIob3B0cy4kc2tpcCl9YDtcbiAgICB9XG4gICAgcmV0dXJuIHNxbDtcbiAgfVxuXG4gIGNvdW50PEU+KGVudGl0eTogVHlwZTxFPiwgcW06IFF1ZXJ5U2VhcmNoPEU+LCBvcHRzPzogUXVlcnlPcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWFyY2g6IFF1ZXJ5PEU+ID0ge1xuICAgICAgLi4ucW0sXG4gICAgICAkcHJvamVjdDogW3JhdygnQ09VTlQoKiknLCAnY291bnQnKV0sXG4gICAgfTtcblxuICAgIGRlbGV0ZSBzZWFyY2guJHNvcnQ7XG4gICAgZGVsZXRlIHNlYXJjaC4kc2tpcDtcbiAgICBkZWxldGUgc2VhcmNoLiRsaW1pdDtcblxuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMuc2VsZWN0PEU+KGVudGl0eSwgc2VhcmNoKTtcbiAgICBjb25zdCBjcml0ZXJpYSA9IHRoaXMuY3JpdGVyaWEoZW50aXR5LCBzZWFyY2gsIG9wdHMpO1xuXG4gICAgcmV0dXJuIHNlbGVjdCArIGNyaXRlcmlhO1xuICB9XG5cbiAgZmluZDxFPihlbnRpdHk6IFR5cGU8RT4sIHFtOiBRdWVyeTxFPiwgb3B0cz86IFF1ZXJ5T3B0aW9ucyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZWN0ID0gdGhpcy5zZWxlY3Q8RT4oZW50aXR5LCBxbSwgb3B0cyk7XG4gICAgY29uc3QgY3JpdGVyaWEgPSB0aGlzLmNyaXRlcmlhKGVudGl0eSwgcW0sIG9wdHMpO1xuICAgIHJldHVybiBzZWxlY3QgKyBjcml0ZXJpYTtcbiAgfVxuXG4gIGluc2VydDxFPihlbnRpdHk6IFR5cGU8RT4sIHBheWxvYWQ6IEUgfCBFW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgcmVjb3JkcyA9IGdldFBlcnNpc3RhYmxlcyhtZXRhLCBwYXlsb2FkLCAnb25JbnNlcnQnKTtcbiAgICBjb25zdCBrZXlzID0gZ2V0S2V5cyhyZWNvcmRzWzBdKTtcbiAgICBjb25zdCBjb2x1bW5zID0ga2V5cy5tYXAoKGtleSkgPT4gdGhpcy5lc2NhcGVJZChtZXRhLmZpZWxkc1trZXldLm5hbWUpKTtcbiAgICBjb25zdCB2YWx1ZXMgPSByZWNvcmRzLm1hcCgocmVjb3JkKSA9PiBrZXlzLm1hcCgoa2V5KSA9PiB0aGlzLmVzY2FwZShyZWNvcmRba2V5XSkpLmpvaW4oJywgJykpLmpvaW4oJyksICgnKTtcbiAgICByZXR1cm4gYElOU0VSVCBJTlRPICR7dGhpcy5lc2NhcGVJZChtZXRhLm5hbWUpfSAoJHtjb2x1bW5zLmpvaW4oJywgJyl9KSBWQUxVRVMgKCR7dmFsdWVzfSlgO1xuICB9XG5cbiAgdXBkYXRlPEU+KGVudGl0eTogVHlwZTxFPiwgcW06IFF1ZXJ5Q3JpdGVyaWE8RT4sIHBheWxvYWQ6IEUsIG9wdHM/OiBRdWVyeU9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgcmVjb3JkID0gZ2V0UGVyc2lzdGFibGUobWV0YSwgcGF5bG9hZCwgJ29uVXBkYXRlJyk7XG4gICAgY29uc3Qga2V5cyA9IGdldEtleXMocmVjb3JkKTtcbiAgICBjb25zdCBlbnRyaWVzID0ga2V5cy5tYXAoKGtleSkgPT4gYCR7dGhpcy5lc2NhcGVJZChrZXkpfSA9ICR7dGhpcy5lc2NhcGUocGF5bG9hZFtrZXldKX1gKS5qb2luKCcsICcpO1xuICAgIGNvbnN0IGNyaXRlcmlhID0gdGhpcy5jcml0ZXJpYShlbnRpdHksIHFtLCBvcHRzKTtcbiAgICByZXR1cm4gYFVQREFURSAke3RoaXMuZXNjYXBlSWQobWV0YS5uYW1lKX0gU0VUICR7ZW50cmllc30ke2NyaXRlcmlhfWA7XG4gIH1cblxuICBkZWxldGU8RT4oZW50aXR5OiBUeXBlPEU+LCBxbTogUXVlcnlDcml0ZXJpYTxFPiwgb3B0czogUXVlcnlPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG5cbiAgICBpZiAob3B0cy5zb2Z0RGVsZXRlIHx8IG9wdHMuc29mdERlbGV0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAobWV0YS5zb2Z0RGVsZXRlKSB7XG4gICAgICAgIGNvbnN0IGNyaXRlcmlhID0gdGhpcy5jcml0ZXJpYShlbnRpdHksIHFtLCBvcHRzKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRGaWVsZENhbGxiYWNrVmFsdWUobWV0YS5maWVsZHNbbWV0YS5zb2Z0RGVsZXRlXS5vbkRlbGV0ZSk7XG4gICAgICAgIHJldHVybiBgVVBEQVRFICR7dGhpcy5lc2NhcGVJZChtZXRhLm5hbWUpfSBTRVQgJHt0aGlzLmVzY2FwZUlkKG1ldGEuc29mdERlbGV0ZSl9ID0gJHt0aGlzLmVzY2FwZSh2YWx1ZSl9JHtjcml0ZXJpYX1gO1xuICAgICAgfSBlbHNlIGlmIChvcHRzLnNvZnREZWxldGUpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKGAnJHttZXRhLm5hbWV9JyBoYXMgbm90IGVuYWJsZWQgJ3NvZnREZWxldGUnYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY3JpdGVyaWEgPSB0aGlzLmNyaXRlcmlhKGVudGl0eSwgcW0sIG9wdHMpO1xuXG4gICAgcmV0dXJuIGBERUxFVEUgRlJPTSAke3RoaXMuZXNjYXBlSWQobWV0YS5uYW1lKX0ke2NyaXRlcmlhfWA7XG4gIH1cblxuICBlc2NhcGVJZCh2YWw6IHN0cmluZywgZm9yYmlkUXVhbGlmaWVkPzogYm9vbGVhbiwgYWRkRG90PzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAoIWZvcmJpZFF1YWxpZmllZCAmJiB2YWwuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgcmV0dXJuIHZhbFxuICAgICAgICAuc3BsaXQoJy4nKVxuICAgICAgICAubWFwKChpdCkgPT4gdGhpcy5lc2NhcGVJZChpdCkpXG4gICAgICAgIC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlZCBmcm9tICdlc2NhcGVJZCcgZnVuY3Rpb24gaGVyZSBodHRwczovL2dpdGh1Yi5jb20vbXlzcWxqcy9zcWxzdHJpbmcvYmxvYi9tYXN0ZXIvbGliL1NxbFN0cmluZy5qc1xuICAgIGNvbnN0IGVzY2FwZWQgPSB0aGlzLmVzY2FwZUlkQ2hhciArIHZhbC5yZXBsYWNlKHRoaXMuZXNjYXBlSWRSZWdleCwgdGhpcy5lc2NhcGVJZENoYXIgKyB0aGlzLmVzY2FwZUlkQ2hhcikgKyB0aGlzLmVzY2FwZUlkQ2hhcjtcblxuICAgIGNvbnN0IHN1ZmZpeCA9IGFkZERvdCA/ICcuJyA6ICcnO1xuXG4gICAgcmV0dXJuIGVzY2FwZWQgKyBzdWZmaXg7XG4gIH1cblxuICBlc2NhcGUodmFsdWU6IGFueSk6IFNjYWxhciB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUXVlcnlSYXcpIHtcbiAgICAgIHJldHVybiBnZXRSYXdWYWx1ZSh7IHZhbHVlLCBkaWFsZWN0OiB0aGlzIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZXNjYXBlKHZhbHVlKTtcbiAgfVxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { QueryComparisonOptions, QueryFilterMap, Type } from '../type/index';
1
+ import { QueryComparisonOptions, QueryFilterMap, Type } from '../type';
2
2
  import { AbstractSqlDialect } from './abstractSqlDialect';
3
3
  export declare class MySqlDialect extends AbstractSqlDialect {
4
4
  constructor();
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MySqlDialect = void 0;
4
- const index_1 = require("../entity/index");
4
+ const entity_1 = require("../entity");
5
5
  const abstractSqlDialect_1 = require("./abstractSqlDialect");
6
6
  class MySqlDialect extends abstractSqlDialect_1.AbstractSqlDialect {
7
7
  constructor() {
@@ -9,7 +9,7 @@ class MySqlDialect extends abstractSqlDialect_1.AbstractSqlDialect {
9
9
  }
10
10
  compare(entity, key, val, opts) {
11
11
  if (key === '$text') {
12
- const meta = (0, index_1.getMeta)(entity);
12
+ const meta = (0, entity_1.getMeta)(entity);
13
13
  const search = val;
14
14
  const fields = search.$fields.map((field) => this.escapeId(meta.fields[field]?.name ?? field));
15
15
  return `MATCH(${fields.join(', ')}) AGAINST(${this.escape(search.$value)})`;
@@ -18,4 +18,4 @@ class MySqlDialect extends abstractSqlDialect_1.AbstractSqlDialect {
18
18
  }
19
19
  }
20
20
  exports.MySqlDialect = MySqlDialect;
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlzcWxEaWFsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpYWxlY3QvbXlzcWxEaWFsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUEwQztBQUUxQyw2REFBMEQ7QUFFMUQsTUFBYSxZQUFhLFNBQVEsdUNBQWtCO0lBQ2xEO1FBQ0UsS0FBSyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFUSxPQUFPLENBQXVDLE1BQWUsRUFBRSxHQUFNLEVBQUUsR0FBeUIsRUFBRSxJQUE2QjtRQUN0SSxJQUFJLEdBQUcsS0FBSyxPQUFPLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBQSxlQUFPLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsR0FBZ0MsQ0FBQztZQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQy9GLE9BQU8sU0FBUyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDN0U7UUFDRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBZEQsb0NBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRNZXRhIH0gZnJvbSAnLi4vZW50aXR5L2luZGV4JztcbmltcG9ydCB7IFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMsIFF1ZXJ5RmlsdGVyTWFwLCBRdWVyeVRleHRTZWFyY2hPcHRpb25zLCBUeXBlIH0gZnJvbSAnLi4vdHlwZS9pbmRleCc7XG5pbXBvcnQgeyBBYnN0cmFjdFNxbERpYWxlY3QgfSBmcm9tICcuL2Fic3RyYWN0U3FsRGlhbGVjdCc7XG5cbmV4cG9ydCBjbGFzcyBNeVNxbERpYWxlY3QgZXh0ZW5kcyBBYnN0cmFjdFNxbERpYWxlY3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignYCcsICdTVEFSVCBUUkFOU0FDVElPTicpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29tcGFyZTxFLCBLIGV4dGVuZHMga2V5b2YgUXVlcnlGaWx0ZXJNYXA8RT4+KGVudGl0eTogVHlwZTxFPiwga2V5OiBLLCB2YWw6IFF1ZXJ5RmlsdGVyTWFwPEU+W0tdLCBvcHRzPzogUXVlcnlDb21wYXJpc29uT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgaWYgKGtleSA9PT0gJyR0ZXh0Jykge1xuICAgICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICAgIGNvbnN0IHNlYXJjaCA9IHZhbCBhcyBRdWVyeVRleHRTZWFyY2hPcHRpb25zPEU+O1xuICAgICAgY29uc3QgZmllbGRzID0gc2VhcmNoLiRmaWVsZHMubWFwKChmaWVsZCkgPT4gdGhpcy5lc2NhcGVJZChtZXRhLmZpZWxkc1tmaWVsZF0/Lm5hbWUgPz8gZmllbGQpKTtcbiAgICAgIHJldHVybiBgTUFUQ0goJHtmaWVsZHMuam9pbignLCAnKX0pIEFHQUlOU1QoJHt0aGlzLmVzY2FwZShzZWFyY2guJHZhbHVlKX0pYDtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmNvbXBhcmUoZW50aXR5LCBrZXksIHZhbCwgb3B0cyk7XG4gIH1cbn1cbiJdfQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlzcWxEaWFsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpYWxlY3QvbXlzcWxEaWFsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNDQUFvQztBQUVwQyw2REFBMEQ7QUFFMUQsTUFBYSxZQUFhLFNBQVEsdUNBQWtCO0lBQ2xEO1FBQ0UsS0FBSyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFUSxPQUFPLENBQXVDLE1BQWUsRUFBRSxHQUFNLEVBQUUsR0FBeUIsRUFBRSxJQUE2QjtRQUN0SSxJQUFJLEdBQUcsS0FBSyxPQUFPLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBQSxnQkFBTyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLE1BQU0sTUFBTSxHQUFHLEdBQWdDLENBQUM7WUFDaEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRixPQUFPLFNBQVMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQzdFO1FBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRjtBQWRELG9DQWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TWV0YSB9IGZyb20gJy4uL2VudGl0eSc7XG5pbXBvcnQgeyBRdWVyeUNvbXBhcmlzb25PcHRpb25zLCBRdWVyeUZpbHRlck1hcCwgUXVlcnlUZXh0U2VhcmNoT3B0aW9ucywgVHlwZSB9IGZyb20gJy4uL3R5cGUnO1xuaW1wb3J0IHsgQWJzdHJhY3RTcWxEaWFsZWN0IH0gZnJvbSAnLi9hYnN0cmFjdFNxbERpYWxlY3QnO1xuXG5leHBvcnQgY2xhc3MgTXlTcWxEaWFsZWN0IGV4dGVuZHMgQWJzdHJhY3RTcWxEaWFsZWN0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2AnLCAnU1RBUlQgVFJBTlNBQ1RJT04nKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbXBhcmU8RSwgSyBleHRlbmRzIGtleW9mIFF1ZXJ5RmlsdGVyTWFwPEU+PihlbnRpdHk6IFR5cGU8RT4sIGtleTogSywgdmFsOiBRdWVyeUZpbHRlck1hcDxFPltLXSwgb3B0cz86IFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGlmIChrZXkgPT09ICckdGV4dCcpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgICBjb25zdCBzZWFyY2ggPSB2YWwgYXMgUXVlcnlUZXh0U2VhcmNoT3B0aW9uczxFPjtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IHNlYXJjaC4kZmllbGRzLm1hcCgoZmllbGQpID0+IHRoaXMuZXNjYXBlSWQobWV0YS5maWVsZHNbZmllbGRdPy5uYW1lID8/IGZpZWxkKSk7XG4gICAgICByZXR1cm4gYE1BVENIKCR7ZmllbGRzLmpvaW4oJywgJyl9KSBBR0FJTlNUKCR7dGhpcy5lc2NhcGUoc2VhcmNoLiR2YWx1ZSl9KWA7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5jb21wYXJlKGVudGl0eSwga2V5LCB2YWwsIG9wdHMpO1xuICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PostgresDialect = void 0;
4
- const index_1 = require("../entity/index");
4
+ const entity_1 = require("../entity");
5
5
  const abstractSqlDialect_1 = require("./abstractSqlDialect");
6
6
  class PostgresDialect extends abstractSqlDialect_1.AbstractSqlDialect {
7
7
  constructor() {
@@ -9,13 +9,13 @@ class PostgresDialect extends abstractSqlDialect_1.AbstractSqlDialect {
9
9
  }
10
10
  insert(entity, payload) {
11
11
  const sql = super.insert(entity, payload);
12
- const meta = (0, index_1.getMeta)(entity);
12
+ const meta = (0, entity_1.getMeta)(entity);
13
13
  const idName = meta.fields[meta.id].name;
14
14
  return `${sql} RETURNING ${this.escapeId(idName)} ${this.escapeId('id')}`;
15
15
  }
16
16
  compare(entity, key, val, opts) {
17
17
  if (key === '$text') {
18
- const meta = (0, index_1.getMeta)(entity);
18
+ const meta = (0, entity_1.getMeta)(entity);
19
19
  const search = val;
20
20
  const fields = search.$fields.map((field) => this.escapeId(meta.fields[field]?.name ?? field)).join(` || ' ' || `);
21
21
  return `to_tsvector(${fields}) @@ to_tsquery(${this.escape(search.$value)})`;
@@ -41,4 +41,4 @@ class PostgresDialect extends abstractSqlDialect_1.AbstractSqlDialect {
41
41
  }
42
42
  }
43
43
  exports.PostgresDialect = PostgresDialect;
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXNEaWFsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpYWxlY3QvcG9zdGdyZXNEaWFsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJDQUEwQztBQUMxQyw2REFBMEQ7QUFFMUQsTUFBYSxlQUFnQixTQUFRLHVDQUFrQjtJQUNyRDtRQUNFLEtBQUssQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRVEsTUFBTSxDQUFJLE1BQWUsRUFBRSxPQUFnQjtRQUNsRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxJQUFBLGVBQU8sRUFBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekMsT0FBTyxHQUFHLEdBQUcsY0FBYyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUM1RSxDQUFDO0lBRVEsT0FBTyxDQUF1QyxNQUFlLEVBQUUsR0FBTSxFQUFFLEdBQXlCLEVBQUUsSUFBNkI7UUFDdEksSUFBSSxHQUFHLEtBQUssT0FBTyxFQUFFO1lBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUEsZUFBTyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLE1BQU0sTUFBTSxHQUFHLEdBQWdDLENBQUM7WUFDaEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbkgsT0FBTyxlQUFlLE1BQU0sbUJBQW1CLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDOUU7UUFDRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVRLG9CQUFvQixDQUMzQixNQUFlLEVBQ2YsR0FBZ0IsRUFDaEIsRUFBSyxFQUNMLEdBQXNDLEVBQ3RDLElBQW1CO1FBRW5CLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9ELFFBQVEsRUFBRSxFQUFFO1lBQ1YsS0FBSyxjQUFjO2dCQUNqQixPQUFPLEdBQUcsYUFBYSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUQsS0FBSyxZQUFZO2dCQUNmLE9BQU8sR0FBRyxhQUFhLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxHQUFHLGFBQWEsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdELEtBQUssUUFBUTtnQkFDWCxPQUFPLEdBQUcsYUFBYSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxHQUFHLGFBQWEsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEQ7Z0JBQ0UsT0FBTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2pFO0lBQ0gsQ0FBQztDQUNGO0FBN0NELDBDQTZDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMsIFF1ZXJ5RmlsdGVyTWFwLCBRdWVyeU9wdGlvbnMsIFF1ZXJ5RmlsdGVyRmllbGRPcGVyYXRvck1hcCwgUXVlcnlUZXh0U2VhcmNoT3B0aW9ucywgVHlwZSwgRmllbGRLZXkgfSBmcm9tICcuLi90eXBlJztcbmltcG9ydCB7IGdldE1ldGEgfSBmcm9tICcuLi9lbnRpdHkvaW5kZXgnO1xuaW1wb3J0IHsgQWJzdHJhY3RTcWxEaWFsZWN0IH0gZnJvbSAnLi9hYnN0cmFjdFNxbERpYWxlY3QnO1xuXG5leHBvcnQgY2xhc3MgUG9zdGdyZXNEaWFsZWN0IGV4dGVuZHMgQWJzdHJhY3RTcWxEaWFsZWN0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ1wiJywgJ0JFR0lOIFRSQU5TQUNUSU9OJyk7XG4gIH1cblxuICBvdmVycmlkZSBpbnNlcnQ8RT4oZW50aXR5OiBUeXBlPEU+LCBwYXlsb2FkOiBFIHwgRVtdKTogc3RyaW5nIHtcbiAgICBjb25zdCBzcWwgPSBzdXBlci5pbnNlcnQoZW50aXR5LCBwYXlsb2FkKTtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IGlkTmFtZSA9IG1ldGEuZmllbGRzW21ldGEuaWRdLm5hbWU7XG4gICAgcmV0dXJuIGAke3NxbH0gUkVUVVJOSU5HICR7dGhpcy5lc2NhcGVJZChpZE5hbWUpfSAke3RoaXMuZXNjYXBlSWQoJ2lkJyl9YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbXBhcmU8RSwgSyBleHRlbmRzIGtleW9mIFF1ZXJ5RmlsdGVyTWFwPEU+PihlbnRpdHk6IFR5cGU8RT4sIGtleTogSywgdmFsOiBRdWVyeUZpbHRlck1hcDxFPltLXSwgb3B0cz86IFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGlmIChrZXkgPT09ICckdGV4dCcpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgICBjb25zdCBzZWFyY2ggPSB2YWwgYXMgUXVlcnlUZXh0U2VhcmNoT3B0aW9uczxFPjtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IHNlYXJjaC4kZmllbGRzLm1hcCgoZmllbGQpID0+IHRoaXMuZXNjYXBlSWQobWV0YS5maWVsZHNbZmllbGRdPy5uYW1lID8/IGZpZWxkKSkuam9pbihgIHx8ICcgJyB8fCBgKTtcbiAgICAgIHJldHVybiBgdG9fdHN2ZWN0b3IoJHtmaWVsZHN9KSBAQCB0b190c3F1ZXJ5KCR7dGhpcy5lc2NhcGUoc2VhcmNoLiR2YWx1ZSl9KWA7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5jb21wYXJlKGVudGl0eSwga2V5LCB2YWwsIG9wdHMpO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29tcGFyZUZpZWxkT3BlcmF0b3I8RSwgSyBleHRlbmRzIGtleW9mIFF1ZXJ5RmlsdGVyRmllbGRPcGVyYXRvck1hcDxFPj4oXG4gICAgZW50aXR5OiBUeXBlPEU+LFxuICAgIGtleTogRmllbGRLZXk8RT4sXG4gICAgb3A6IEssXG4gICAgdmFsOiBRdWVyeUZpbHRlckZpZWxkT3BlcmF0b3JNYXA8RT5bS10sXG4gICAgb3B0cz86IFF1ZXJ5T3B0aW9uc1xuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbXBhcmlzb25LZXkgPSB0aGlzLmdldENvbXBhcmlzb25LZXkoZW50aXR5LCBrZXksIG9wdHMpO1xuICAgIHN3aXRjaCAob3ApIHtcbiAgICAgIGNhc2UgJyRpc3RhcnRzV2l0aCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBJTElLRSAke3RoaXMuZXNjYXBlKGAke3ZhbH0lYCl9YDtcbiAgICAgIGNhc2UgJyRpZW5kc1dpdGgnOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gSUxJS0UgJHt0aGlzLmVzY2FwZShgJSR7dmFsfWApfWA7XG4gICAgICBjYXNlICckaWluY2x1ZGVzJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IElMSUtFICR7dGhpcy5lc2NhcGUoYCUke3ZhbH0lYCl9YDtcbiAgICAgIGNhc2UgJyRpbGlrZSc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBJTElLRSAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGNhc2UgJyRyZWdleCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSB+ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHN1cGVyLmNvbXBhcmVGaWVsZE9wZXJhdG9yKGVudGl0eSwga2V5LCBvcCwgdmFsLCBvcHRzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXNEaWFsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpYWxlY3QvcG9zdGdyZXNEaWFsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHNDQUFvQztBQUNwQyw2REFBMEQ7QUFFMUQsTUFBYSxlQUFnQixTQUFRLHVDQUFrQjtJQUNyRDtRQUNFLEtBQUssQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRVEsTUFBTSxDQUFJLE1BQWUsRUFBRSxPQUFnQjtRQUNsRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxJQUFBLGdCQUFPLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pDLE9BQU8sR0FBRyxHQUFHLGNBQWMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUVRLE9BQU8sQ0FBdUMsTUFBZSxFQUFFLEdBQU0sRUFBRSxHQUF5QixFQUFFLElBQTZCO1FBQ3RJLElBQUksR0FBRyxLQUFLLE9BQU8sRUFBRTtZQUNuQixNQUFNLElBQUksR0FBRyxJQUFBLGdCQUFPLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsR0FBZ0MsQ0FBQztZQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuSCxPQUFPLGVBQWUsTUFBTSxtQkFBbUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUM5RTtRQUNELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRVEsb0JBQW9CLENBQzNCLE1BQWUsRUFDZixHQUFnQixFQUNoQixFQUFLLEVBQ0wsR0FBc0MsRUFDdEMsSUFBbUI7UUFFbkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0QsUUFBUSxFQUFFLEVBQUU7WUFDVixLQUFLLGNBQWM7Z0JBQ2pCLE9BQU8sR0FBRyxhQUFhLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxHQUFHLGFBQWEsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzVELEtBQUssWUFBWTtnQkFDZixPQUFPLEdBQUcsYUFBYSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0QsS0FBSyxRQUFRO2dCQUNYLE9BQU8sR0FBRyxhQUFhLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RELEtBQUssUUFBUTtnQkFDWCxPQUFPLEdBQUcsYUFBYSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsRDtnQkFDRSxPQUFPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDakU7SUFDSCxDQUFDO0NBQ0Y7QUE3Q0QsMENBNkNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUXVlcnlDb21wYXJpc29uT3B0aW9ucywgUXVlcnlGaWx0ZXJNYXAsIFF1ZXJ5T3B0aW9ucywgUXVlcnlGaWx0ZXJGaWVsZE9wZXJhdG9yTWFwLCBRdWVyeVRleHRTZWFyY2hPcHRpb25zLCBUeXBlLCBGaWVsZEtleSB9IGZyb20gJy4uL3R5cGUnO1xuaW1wb3J0IHsgZ2V0TWV0YSB9IGZyb20gJy4uL2VudGl0eSc7XG5pbXBvcnQgeyBBYnN0cmFjdFNxbERpYWxlY3QgfSBmcm9tICcuL2Fic3RyYWN0U3FsRGlhbGVjdCc7XG5cbmV4cG9ydCBjbGFzcyBQb3N0Z3Jlc0RpYWxlY3QgZXh0ZW5kcyBBYnN0cmFjdFNxbERpYWxlY3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignXCInLCAnQkVHSU4gVFJBTlNBQ1RJT04nKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGluc2VydDxFPihlbnRpdHk6IFR5cGU8RT4sIHBheWxvYWQ6IEUgfCBFW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHNxbCA9IHN1cGVyLmluc2VydChlbnRpdHksIHBheWxvYWQpO1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgaWROYW1lID0gbWV0YS5maWVsZHNbbWV0YS5pZF0ubmFtZTtcbiAgICByZXR1cm4gYCR7c3FsfSBSRVRVUk5JTkcgJHt0aGlzLmVzY2FwZUlkKGlkTmFtZSl9ICR7dGhpcy5lc2NhcGVJZCgnaWQnKX1gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29tcGFyZTxFLCBLIGV4dGVuZHMga2V5b2YgUXVlcnlGaWx0ZXJNYXA8RT4+KGVudGl0eTogVHlwZTxFPiwga2V5OiBLLCB2YWw6IFF1ZXJ5RmlsdGVyTWFwPEU+W0tdLCBvcHRzPzogUXVlcnlDb21wYXJpc29uT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgaWYgKGtleSA9PT0gJyR0ZXh0Jykge1xuICAgICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICAgIGNvbnN0IHNlYXJjaCA9IHZhbCBhcyBRdWVyeVRleHRTZWFyY2hPcHRpb25zPEU+O1xuICAgICAgY29uc3QgZmllbGRzID0gc2VhcmNoLiRmaWVsZHMubWFwKChmaWVsZCkgPT4gdGhpcy5lc2NhcGVJZChtZXRhLmZpZWxkc1tmaWVsZF0/Lm5hbWUgPz8gZmllbGQpKS5qb2luKGAgfHwgJyAnIHx8IGApO1xuICAgICAgcmV0dXJuIGB0b190c3ZlY3Rvcigke2ZpZWxkc30pIEBAIHRvX3RzcXVlcnkoJHt0aGlzLmVzY2FwZShzZWFyY2guJHZhbHVlKX0pYDtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmNvbXBhcmUoZW50aXR5LCBrZXksIHZhbCwgb3B0cyk7XG4gIH1cblxuICBvdmVycmlkZSBjb21wYXJlRmllbGRPcGVyYXRvcjxFLCBLIGV4dGVuZHMga2V5b2YgUXVlcnlGaWx0ZXJGaWVsZE9wZXJhdG9yTWFwPEU+PihcbiAgICBlbnRpdHk6IFR5cGU8RT4sXG4gICAga2V5OiBGaWVsZEtleTxFPixcbiAgICBvcDogSyxcbiAgICB2YWw6IFF1ZXJ5RmlsdGVyRmllbGRPcGVyYXRvck1hcDxFPltLXSxcbiAgICBvcHRzPzogUXVlcnlPcHRpb25zXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tcGFyaXNvbktleSA9IHRoaXMuZ2V0Q29tcGFyaXNvbktleShlbnRpdHksIGtleSwgb3B0cyk7XG4gICAgc3dpdGNoIChvcCkge1xuICAgICAgY2FzZSAnJGlzdGFydHNXaXRoJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IElMSUtFICR7dGhpcy5lc2NhcGUoYCR7dmFsfSVgKX1gO1xuICAgICAgY2FzZSAnJGllbmRzV2l0aCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBJTElLRSAke3RoaXMuZXNjYXBlKGAlJHt2YWx9YCl9YDtcbiAgICAgIGNhc2UgJyRpaW5jbHVkZXMnOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gSUxJS0UgJHt0aGlzLmVzY2FwZShgJSR7dmFsfSVgKX1gO1xuICAgICAgY2FzZSAnJGlsaWtlJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IElMSUtFICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJHJlZ2V4JzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IH4gJHt0aGlzLmVzY2FwZSh2YWwpfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gc3VwZXIuY29tcGFyZUZpZWxkT3BlcmF0b3IoZW50aXR5LCBrZXksIG9wLCB2YWwsIG9wdHMpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isValidEntityType = exports.getMeta = exports.getEntities = exports.defineEntity = exports.defineRelation = exports.defineId = exports.defineField = void 0;
4
4
  require("reflect-metadata");
5
- const index_1 = require("../../util/index");
5
+ const util_1 = require("../../util");
6
6
  const holder = globalThis;
7
7
  const metaKey = '@uql/core/entity/decorator';
8
8
  const metas = holder[metaKey] ?? new Map();
@@ -38,10 +38,10 @@ function defineRelation(entity, key, opts) {
38
38
  exports.defineRelation = defineRelation;
39
39
  function defineEntity(entity, opts = {}) {
40
40
  const meta = ensureMeta(entity);
41
- if (!(0, index_1.hasKeys)(meta.fields)) {
41
+ if (!(0, util_1.hasKeys)(meta.fields)) {
42
42
  throw TypeError(`'${entity.name}' must have fields`);
43
43
  }
44
- const onDeleteKeys = (0, index_1.getKeys)(meta.fields).filter((key) => meta.fields[key].onDelete);
44
+ const onDeleteKeys = (0, util_1.getKeys)(meta.fields).filter((key) => meta.fields[key].onDelete);
45
45
  if (onDeleteKeys.length > 1) {
46
46
  throw TypeError(`'${entity.name}' must have one field with 'onDelete' as maximum`);
47
47
  }
@@ -112,8 +112,8 @@ function fillRelations(meta) {
112
112
  if (relOpts.cardinality === 'mm') {
113
113
  const idName = meta.fields[meta.id].name;
114
114
  const relIdName = relMeta.fields[relMeta.id].name;
115
- const source = (0, index_1.lowerFirst)(meta.name) + (0, index_1.upperFirst)(idName);
116
- const target = (0, index_1.lowerFirst)(relMeta.name) + (0, index_1.upperFirst)(relIdName);
115
+ const source = (0, util_1.lowerFirst)(meta.name) + (0, util_1.upperFirst)(idName);
116
+ const target = (0, util_1.lowerFirst)(relMeta.name) + (0, util_1.upperFirst)(relIdName);
117
117
  relOpts.references = [
118
118
  { local: source, foreign: meta.id },
119
119
  { local: target, foreign: relMeta.id },
@@ -149,7 +149,7 @@ function fillInverseSideRelations(relOpts) {
149
149
  }
150
150
  function fillThroughRelations(entity) {
151
151
  const meta = ensureMeta(entity);
152
- meta.relations = (0, index_1.getKeys)(meta.fields).reduce((relations, key) => {
152
+ meta.relations = (0, util_1.getKeys)(meta.fields).reduce((relations, key) => {
153
153
  const { reference } = meta.fields[key];
154
154
  if (reference) {
155
155
  const relEntity = reference();
@@ -175,15 +175,15 @@ function getMappedByRelationKey(relOpts) {
175
175
  return relOpts.mappedBy;
176
176
  }
177
177
  function getRelationKeyMap(meta) {
178
- return (0, index_1.getKeys)(meta.fields)
179
- .concat((0, index_1.getKeys)(meta.relations))
178
+ return (0, util_1.getKeys)(meta.fields)
179
+ .concat((0, util_1.getKeys)(meta.relations))
180
180
  .reduce((acc, key) => {
181
181
  acc[key] = key;
182
182
  return acc;
183
183
  }, {});
184
184
  }
185
185
  function getIdKey(meta) {
186
- const id = (0, index_1.getKeys)(meta.fields).find((key) => meta.fields[key]?.isId);
186
+ const id = (0, util_1.getKeys)(meta.fields).find((key) => meta.fields[key]?.isId);
187
187
  return id;
188
188
  }
189
189
  function extendMeta(target, source) {
@@ -220,4 +220,4 @@ function isValidEntityType(type) {
220
220
  type !== Object);
221
221
  }
222
222
  exports.isValidEntityType = isValidEntityType;
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnRpdHkvZGVjb3JhdG9yL2RlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNEJBQTBCO0FBRTFCLDRDQUE0RTtBQUU1RSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFDMUIsTUFBTSxPQUFPLEdBQUcsNEJBQTRCLENBQUM7QUFDN0MsTUFBTSxLQUFLLEdBQW9DLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzVFLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7QUFFeEIsU0FBZ0IsV0FBVyxDQUFJLE1BQWUsRUFBRSxHQUFXLEVBQUUsT0FBcUIsRUFBRTtJQUNsRixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDZCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0tBQzFCO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7SUFDdEUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBUkQsa0NBUUM7QUFFRCxTQUFnQixRQUFRLENBQUksTUFBZSxFQUFFLEdBQVcsRUFBRSxJQUFrQjtJQUMxRSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFD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dGVudCI6WyJpbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xuaW1wb3J0IHsgUmVsYXRpb25PcHRpb25zLCBGaWVsZE9wdGlvbnMsIEVudGl0eU9wdGlvbnMsIEVudGl0eU1ldGEsIFR5cGUsIFJlbGF0aW9uS2V5TWFwLCBSZWxhdGlvbktleSwgS2V5LCBGaWVsZEtleSwgSWRLZXkgfSBmcm9tICcuLi8uLi90eXBlJztcbmltcG9ydCB7IGhhc0tleXMsIGxvd2VyRmlyc3QsIGdldEtleXMsIHVwcGVyRmlyc3QgfSBmcm9tICcuLi8uLi91dGlsL2luZGV4JztcblxuY29uc3QgaG9sZGVyID0gZ2xvYmFsVGhpcztcbmNvbnN0IG1ldGFLZXkgPSAnQHVxbC9jb3JlL2VudGl0eS9kZWNvcmF0b3InO1xuY29uc3QgbWV0YXM6IE1hcDxUeXBlPGFueT4sIEVudGl0eU1ldGE8YW55Pj4gPSBob2xkZXJbbWV0YUtleV0gPz8gbmV3IE1hcCgpO1xuaG9sZGVyW21ldGFLZXldID0gbWV0YXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVGaWVsZDxFPihlbnRpdHk6IFR5cGU8RT4sIGtleTogc3RyaW5nLCBvcHRzOiBGaWVsZE9wdGlvbnMgPSB7fSk6IEVudGl0eU1ldGE8RT4ge1xuICBjb25zdCBtZXRhID0gZW5zdXJlTWV0YShlbnRpdHkpO1xuICBpZiAoIW9wdHMudHlwZSkge1xuICAgIGNvbnN0IHR5cGUgPSBpbmZlclR5cGUoZW50aXR5LCBrZXkpO1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIHR5cGUgfTtcbiAgfVxuICBtZXRhLmZpZWxkc1trZXldID0geyAuLi5tZXRhLmZpZWxkc1trZXldLCAuLi57IG5hbWU6IGtleSwgLi4ub3B0cyB9IH07XG4gIHJldHVybiBtZXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lSWQ8RT4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IHN0cmluZywgb3B0czogRmllbGRPcHRpb25zKTogRW50aXR5TWV0YTxFPiB7XG4gIGNvbnN0IG1ldGEgPSBlbnN1cmVNZXRhKGVudGl0eSk7XG4gIGNvbnN0IGlkID0gZ2V0SWRLZXkobWV0YSk7XG4gIGlmIChpZCkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBtdXN0IGhhdmUgYSBzaW5nbGUgZmllbGQgZGVjb3JhdGVkIHdpdGggQElkYCk7XG4gIH1cbiAgcmV0dXJuIGRlZmluZUZpZWxkKGVudGl0eSwga2V5LCB7IC4uLm9wdHMsIGlzSWQ6IHRydWUgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVSZWxhdGlvbjxFPihlbnRpdHk6IFR5cGU8RT4sIGtleTogc3RyaW5nLCBvcHRzOiBSZWxhdGlvbk9wdGlvbnM8RT4pOiBFbnRpdHlNZXRhPEU+IHtcbiAgaWYgKCFvcHRzLmVudGl0eSkge1xuICAgIGNvbnN0IGluZmVycmVkVHlwZSA9IGluZmVyRW50aXR5VHlwZShlbnRpdHksIGtleSk7XG4gICAgb3B0cy5lbnRpdHkgPSAoKSA9PiBpbmZlcnJlZFR5cGU7XG4gIH1cbiAgY29uc3QgbWV0YSA9IGVuc3VyZU1ldGEoZW50aXR5KTtcbiAgbWV0YS5yZWxhdGlvbnNba2V5XSA9IHsgLi4ubWV0YS5yZWxhdGlvbnNba2V5XSwgLi4ub3B0cyB9O1xuICByZXR1cm4gbWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUVudGl0eTxFPihlbnRpdHk6IFR5cGU8RT4sIG9wdHM6IEVudGl0eU9wdGlvbnMgPSB7fSk6IEVudGl0eU1ldGE8RT4ge1xuICBjb25zdCBtZXRhID0gZW5zdXJlTWV0YShlbnRpdHkpO1xuXG4gIGlmICghaGFzS2V5cyhtZXRhLmZpZWxkcykpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfScgbXVzdCBoYXZlIGZpZWxkc2ApO1xuICB9XG5cbiAgY29uc3Qgb25EZWxldGVLZXlzID0gZ2V0S2V5cyhtZXRhLmZpZWxkcykuZmlsdGVyKChrZXkpID0+IG1ldGEuZmllbGRzW2tleV0ub25EZWxldGUpIGFzIEZpZWxkS2V5PEU+W107XG5cbiAgaWYgKG9uRGVsZXRlS2V5cy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKGAnJHtlbnRpdHkubmFtZX0nIG11c3QgaGF2ZSBvbmUgZmllbGQgd2l0aCAnb25EZWxldGUnIGFzIG1heGltdW1gKTtcbiAgfVxuXG4gIGlmIChvcHRzLnNvZnREZWxldGUpIHtcbiAgICBpZiAoIW9uRGVsZXRlS2V5cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBtdXN0IGhhdmUgb25lIGZpZWxkIHdpdGggJ29uRGVsZXRlJyB0byBlbmFibGUgJ3NvZnREZWxldGUnYCk7XG4gICAgfVxuICAgIG1ldGEuc29mdERlbGV0ZSA9IG9uRGVsZXRlS2V5c1swXTtcbiAgfVxuXG4gIG1ldGEubmFtZSA9IG9wdHMubmFtZSA/PyBlbnRpdHkubmFtZTtcbiAgbGV0IHByb3RvOiBGdW5jdGlvbkNvbnN0cnVjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGVudGl0eS5wcm90b3R5cGUpO1xuXG4gIHdoaWxlIChwcm90by5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgY29uc3QgcGFyZW50TWV0YSA9IGVuc3VyZU1ldGEocHJvdG8uY29uc3RydWN0b3IgYXMgVHlwZTxFPik7XG4gICAgZXh0ZW5kTWV0YShtZXRhLCBwYXJlbnRNZXRhKTtcbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cblxuICBjb25zdCBpZCA9IGdldElkS2V5KG1ldGEpO1xuICBpZiAoIWlkKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKGAnJHtlbnRpdHkubmFtZX0nIG11c3QgaGF2ZSBvbmUgZmllbGQgZGVjb3JhdGVkIHdpdGggQElkYCk7XG4gIH1cbiAgbWV0YS5pZCA9IGlkO1xuXG4gIHJldHVybiBtZXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXRpZXMoKTogVHlwZTxhbnk+W10ge1xuICByZXR1cm4gWy4uLm1ldGFzLmVudHJpZXMoKV0ucmVkdWNlKChhY2MsIFtrZXksIHZhbF0pID0+IHtcbiAgICBpZiAodmFsLmlkKSB7XG4gICAgICBhY2MucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZU1ldGE8RT4oZW50aXR5OiBUeXBlPEU+KTogRW50aXR5TWV0YTxFPiB7XG4gIGxldCBtZXRhID0gbWV0YXMuZ2V0KGVudGl0eSk7XG4gIGlmIChtZXRhKSB7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cbiAgbWV0YSA9IHsgZW50aXR5LCBmaWVsZHM6IHt9LCByZWxhdGlvbnM6IHt9IH07XG4gIG1ldGFzLnNldChlbnRpdHksIG1ldGEpO1xuICByZXR1cm4gbWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGE8RT4oZW50aXR5OiBUeXBlPEU+KTogRW50aXR5TWV0YTxFPiB7XG4gIGNvbnN0IG1ldGEgPSBtZXRhcy5nZXQoZW50aXR5KTtcbiAgaWYgKCFtZXRhKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKGAnJHtlbnRpdHkubmFtZX0nIGlzIG5vdCBhbiBlbnRpdHlgKTtcbiAgfVxuICBpZiAobWV0YS5wcm9jZXNzZWQpIHtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuICBtZXRhLnByb2Nlc3NlZCA9IHRydWU7XG4gIHJldHVybiBmaWxsUmVsYXRpb25zKG1ldGEpO1xufVxuXG5mdW5jdGlvbiBmaWxsUmVsYXRpb25zPEU+KG1ldGE6IEVudGl0eU1ldGE8RT4pOiBFbnRpdHlNZXRhPEU+IHtcbiAgZm9yIChjb25zdCByZWxLZXkgaW4gbWV0YS5yZWxhdGlvbnMpIHtcbiAgICBjb25zdCByZWxPcHRzID0gbWV0YS5yZWxhdGlvbnNbcmVsS2V5IGFzIFJlbGF0aW9uS2V5PEU+XTtcblxuICAgIGlmIChyZWxPcHRzLnJlZmVyZW5jZXMpIHtcbiAgICAgIC8vIHJlZmVyZW5jZXMgd2VyZSBtYW51YWxseSBzcGVjaWZpZWRcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChyZWxPcHRzLm1hcHBlZEJ5KSB7XG4gICAgICBmaWxsSW52ZXJzZVNpZGVSZWxhdGlvbnMocmVsT3B0cyk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZWxFbnRpdHkgPSByZWxPcHRzLmVudGl0eSgpO1xuICAgIGNvbnN0IHJlbE1ldGEgPSBlbnN1cmVNZXRhKHJlbEVudGl0eSk7XG5cbiAgICBpZiAocmVsT3B0cy5jYXJkaW5hbGl0eSA9PT0gJ21tJykge1xuICAgICAgY29uc3QgaWROYW1lID0gbWV0YS5maWVsZHNbbWV0YS5pZF0ubmFtZTtcbiAgICAgIGNvbnN0IHJlbElkTmFtZSA9IHJlbE1ldGEuZmllbGRzW3JlbE1ldGEuaWRdLm5hbWU7XG4gICAgICBjb25zdCBzb3VyY2UgPSBsb3dlckZpcnN0KG1ldGEubmFtZSkgKyB1cHBlckZpcnN0KGlkTmFtZSk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBsb3dlckZpcnN0KHJlbE1ldGEubmFtZSkgKyB1cHBlckZpcnN0KHJlbElkTmFtZSk7XG4gICAgICByZWxPcHRzLnJlZmVyZW5jZXMgPSBbXG4gICAgICAgIHsgbG9jYWw6IHNvdXJjZSwgZm9yZWlnbjogbWV0YS5pZCB9LFxuICAgICAgICB7IGxvY2FsOiB0YXJnZXQsIGZvcmVpZ246IHJlbE1ldGEuaWQgfSxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbE9wdHMucmVmZXJlbmNlcyA9IFt7IGxvY2FsOiBgJHtyZWxLZXl9SWRgLCBmb3JlaWduOiByZWxNZXRhLmlkIH1dO1xuICAgIH1cblxuICAgIGlmIChyZWxPcHRzLnRocm91Z2gpIHtcbiAgICAgIGZpbGxUaHJvdWdoUmVsYXRpb25zKHJlbE9wdHMudGhyb3VnaCgpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0YTtcbn1cblxuZnVuY3Rpb24gZmlsbEludmVyc2VTaWRlUmVsYXRpb25zPEU+KHJlbE9wdHM6IFJlbGF0aW9uT3B0aW9uczxFPik6IHZvaWQge1xuICBjb25zdCByZWxFbnRpdHkgPSByZWxPcHRzLmVudGl0eSgpO1xuICBjb25zdCByZWxNZXRhID0gZ2V0TWV0YShyZWxFbnRpdHkpO1xuICByZWxPcHRzLm1hcHBlZEJ5ID0gZ2V0TWFwcGVkQnlSZWxhdGlvbktleShyZWxPcHRzKTtcblxuICBpZiAocmVsTWV0YS5maWVsZHNbcmVsT3B0cy5tYXBwZWRCeSBhcyBGaWVsZEtleTxFPl0pIHtcbiAgICByZWxPcHRzLnJlZmVyZW5jZXMgPSBbeyBsb2NhbDogcmVsTWV0YS5pZCwgZm9yZWlnbjogcmVsT3B0cy5tYXBwZWRCeSB9XTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtYXBwZWRCeVJlbGF0aW9uID0gcmVsTWV0YS5yZWxhdGlvbnNbcmVsT3B0cy5tYXBwZWRCeSBhcyBSZWxhdGlvbktleTxFPl07XG5cbiAgaWYgKHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICdtMScgfHwgcmVsT3B0cy5jYXJkaW5hbGl0eSA9PT0gJ21tJykge1xuICAgIHJlbE9wdHMucmVmZXJlbmNlcyA9IG1hcHBlZEJ5UmVsYXRpb24ucmVmZXJlbmNlcy5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByZWxPcHRzLnRocm91Z2ggPSBtYXBwZWRCeVJlbGF0aW9uLnRocm91Z2g7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVsT3B0cy5yZWZlcmVuY2VzID0gbWFwcGVkQnlSZWxhdGlvbi5yZWZlcmVuY2VzLm1hcCgoeyBsb2NhbCwgZm9yZWlnbiB9KSA9PiAoe1xuICAgIGxvY2FsOiBmb3JlaWduLFxuICAgIGZvcmVpZ246IGxvY2FsLFxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIGZpbGxUaHJvdWdoUmVsYXRpb25zPEU+KGVudGl0eTogVHlwZTxFPik6IHZvaWQge1xuICBjb25zdCBtZXRhID0gZW5zdXJlTWV0YShlbnRpdHkpO1xuICBtZXRhLnJlbGF0aW9ucyA9IGdldEtleXMobWV0YS5maWVsZHMpLnJlZHVjZSgocmVsYXRpb25zLCBrZXkpID0+IHtcbiAgICBjb25zdCB7IHJlZmVyZW5jZSB9ID0gbWV0YS5maWVsZHNba2V5IGFzIEZpZWxkS2V5PEU+XTtcbiAgICBpZiAocmVmZXJlbmNlKSB7XG4gICAgICBjb25zdCByZWxFbnRpdHkgPSByZWZlcmVuY2UoKTtcbiAgICAgIGNvbnN0IHJlbE1ldGEgPSBlbnN1cmVNZXRhKHJlbEVudGl0eSk7XG4gICAgICBjb25zdCByZWxLZXkgPSBrZXkuc2xpY2UoMCwgLXJlbE1ldGEuaWQubGVuZ3RoKTtcbiAgICAgIGNvbnN0IHJlbE9wdHM6IFJlbGF0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgZW50aXR5OiByZWZlcmVuY2UsXG4gICAgICAgIGNhcmRpbmFsaXR5OiAnbTEnLFxuICAgICAgICByZWZlcmVuY2VzOiBbeyBsb2NhbDoga2V5LCBmb3JlaWduOiByZWxNZXRhLmlkIH1dLFxuICAgICAgfTtcbiAgICAgIHJlbGF0aW9uc1tyZWxLZXldID0gcmVsT3B0cztcbiAgICB9XG4gICAgcmV0dXJuIHJlbGF0aW9ucztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBnZXRNYXBwZWRCeVJlbGF0aW9uS2V5PEU+KHJlbE9wdHM6IFJlbGF0aW9uT3B0aW9uczxFPik6IEtleTxFPiB7XG4gIGlmICh0eXBlb2YgcmVsT3B0cy5tYXBwZWRCeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IHJlbEVudGl0eSA9IHJlbE9wdHMuZW50aXR5KCk7XG4gICAgY29uc3QgcmVsTWV0YSA9IGVuc3VyZU1ldGEocmVsRW50aXR5KTtcbiAgICBjb25zdCBrZXlNYXAgPSBnZXRSZWxhdGlvbktleU1hcChyZWxNZXRhKTtcbiAgICByZXR1cm4gcmVsT3B0cy5tYXBwZWRCeShrZXlNYXApO1xuICB9XG4gIHJldHVybiByZWxPcHRzLm1hcHBlZEJ5O1xufVxuXG5mdW5jdGlvbiBnZXRSZWxhdGlvbktleU1hcDxFPihtZXRhOiBFbnRpdHlNZXRhPEU+KTogUmVsYXRpb25LZXlNYXA8RT4ge1xuICByZXR1cm4gZ2V0S2V5cyhtZXRhLmZpZWxkcylcbiAgICAuY29uY2F0KGdldEtleXMobWV0YS5yZWxhdGlvbnMpKVxuICAgIC5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IGtleTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVsYXRpb25LZXlNYXA8RT4pO1xufVxuXG5mdW5jdGlvbiBnZXRJZEtleTxFPihtZXRhOiBFbnRpdHlNZXRhPEU+KTogSWRLZXk8RT4ge1xuICBjb25zdCBpZCA9IGdldEtleXMobWV0YS5maWVsZHMpLmZpbmQoKGtleSkgPT4gbWV0YS5maWVsZHNba2V5XT8uaXNJZCk7XG4gIHJldHVybiBpZCBhcyBJZEtleTxFPjtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kTWV0YTxFPih0YXJnZXQ6IEVudGl0eU1ldGE8RT4sIHNvdXJjZTogRW50aXR5TWV0YTxFPik6IHZvaWQge1xuICBjb25zdCBzb3VyY2VGaWVsZHMgPSB7IC4uLnNvdXJjZS5maWVsZHMgfTtcbiAgY29uc3QgdGFyZ2V0SWQgPSBnZXRJZEtleSh0YXJnZXQpO1xuICBpZiAodGFyZ2V0SWQpIHtcbiAgICBjb25zdCBzb3VyY2VJZCA9IGdldElkS2V5KHNvdXJjZSk7XG4gICAgaWYgKHNvdXJjZUlkKSB7XG4gICAgICBkZWxldGUgc291cmNlRmllbGRzW3NvdXJjZUlkXTtcbiAgICB9XG4gIH1cbiAgdGFyZ2V0LmZpZWxkcyA9IHsgLi4uc291cmNlRmllbGRzLCAuLi50YXJnZXQuZmllbGRzIH07XG4gIHRhcmdldC5yZWxhdGlvbnMgPSB7IC4uLnNvdXJjZS5yZWxhdGlvbnMsIC4uLnRhcmdldC5yZWxhdGlvbnMgfTtcbn1cblxuZnVuY3Rpb24gaW5mZXJUeXBlPEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBzdHJpbmcpOiBhbnkge1xuICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YSgnZGVzaWduOnR5cGUnLCBlbnRpdHkucHJvdG90eXBlLCBrZXkpO1xufVxuXG5mdW5jdGlvbiBpbmZlckVudGl0eVR5cGU8RT4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IHN0cmluZyk6IFR5cGU8YW55PiB7XG4gIGNvbnN0IGluZmVycmVkVHlwZSA9IGluZmVyVHlwZShlbnRpdHksIGtleSk7XG4gIGNvbnN0IGlzVmFsaWRUeXBlID0gaXNWYWxpZEVudGl0eVR5cGUoaW5mZXJyZWRUeXBlKTtcbiAgaWYgKCFpc1ZhbGlkVHlwZSkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9LiR7a2V5fScgdHlwZSB3YXMgYXV0by1pbmZlcnJlZCB3aXRoIGludmFsaWQgdHlwZSAnJHtpbmZlcnJlZFR5cGU/Lm5hbWV9J2ApO1xuICB9XG4gIHJldHVybiBpbmZlcnJlZFR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRW50aXR5VHlwZSh0eXBlOiBhbnkpOiB0eXBlIGlzIFR5cGU8YW55PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlICE9PSBCb29sZWFuICYmXG4gICAgdHlwZSAhPT0gU3RyaW5nICYmXG4gICAgdHlwZSAhPT0gTnVtYmVyICYmXG4gICAgdHlwZSAhPT0gQmlnSW50ICYmXG4gICAgdHlwZSAhPT0gRGF0ZSAmJlxuICAgIHR5cGUgIT09IFN5bWJvbCAmJlxuICAgIHR5cGUgIT09IE9iamVjdFxuICApO1xufVxuIl19
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnRpdHkvZGVjb3JhdG9yL2RlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNEJBQTBCO0FBRTFCLHFDQUFzRTtBQUV0RSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFDMUIsTUFBTSxPQUFPLEdBQUcsNEJBQTRCLENBQUM7QUFDN0MsTUFBTSxLQUFLLEdBQW9DLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzVFLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7QUFFeEIsU0FBZ0IsV0FBVyxDQUFJLE1BQWUsRUFBRSxHQUFXLEVBQUUsT0FBcUIsRUFBRTtJQUNsRixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDZCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0tBQzFCO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7SUFDdEUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBUkQsa0NBUUM7QUFFRCxTQUFnQixRQUFRLENBQUksTUFBZSxFQUFFLEdBQVcsRUFBRSxJQUFrQjtJQUMxRSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFD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dGVudCI6WyJpbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xuaW1wb3J0IHsgUmVsYXRpb25PcHRpb25zLCBGaWVsZE9wdGlvbnMsIEVudGl0eU9wdGlvbnMsIEVudGl0eU1ldGEsIFR5cGUsIFJlbGF0aW9uS2V5TWFwLCBSZWxhdGlvbktleSwgS2V5LCBGaWVsZEtleSwgSWRLZXkgfSBmcm9tICcuLi8uLi90eXBlJztcbmltcG9ydCB7IGhhc0tleXMsIGxvd2VyRmlyc3QsIGdldEtleXMsIHVwcGVyRmlyc3QgfSBmcm9tICcuLi8uLi91dGlsJztcblxuY29uc3QgaG9sZGVyID0gZ2xvYmFsVGhpcztcbmNvbnN0IG1ldGFLZXkgPSAnQHVxbC9jb3JlL2VudGl0eS9kZWNvcmF0b3InO1xuY29uc3QgbWV0YXM6IE1hcDxUeXBlPGFueT4sIEVudGl0eU1ldGE8YW55Pj4gPSBob2xkZXJbbWV0YUtleV0gPz8gbmV3IE1hcCgpO1xuaG9sZGVyW21ldGFLZXldID0gbWV0YXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVGaWVsZDxFPihlbnRpdHk6IFR5cGU8RT4sIGtleTogc3RyaW5nLCBvcHRzOiBGaWVsZE9wdGlvbnMgPSB7fSk6IEVudGl0eU1ldGE8RT4ge1xuICBjb25zdCBtZXRhID0gZW5zdXJlTWV0YShlbnRpdHkpO1xuICBpZiAoIW9wdHMudHlwZSkge1xuICAgIGNvbnN0IHR5cGUgPSBpbmZlclR5cGUoZW50aXR5LCBrZXkpO1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIHR5cGUgfTtcbiAgfVxuICBtZXRhLmZpZWxkc1trZXldID0geyAuLi5tZXRhLmZpZWxkc1trZXldLCAuLi57IG5hbWU6IGtleSwgLi4ub3B0cyB9IH07XG4gIHJldHVybiBtZXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lSWQ8RT4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IHN0cmluZywgb3B0czogRmllbGRPcHRpb25zKTogRW50aXR5TWV0YTxFPiB7XG4gIGNvbnN0IG1ldGEgPSBlbnN1cmVNZXRhKGVudGl0eSk7XG4gIGNvbnN0IGlkID0gZ2V0SWRLZXkobWV0YSk7XG4gIGlmIChpZCkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBtdXN0IGhhdmUgYSBzaW5nbGUgZmllbGQgZGVjb3JhdGVkIHdpdGggQElkYCk7XG4gIH1cbiAgcmV0dXJuIGRlZmluZUZpZWxkKGVudGl0eSwga2V5LCB7IC4uLm9wdHMsIGlzSWQ6IHRydWUgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVSZWxhdGlvbjxFPihlbnRpdHk6IFR5cGU8RT4sIGtleTogc3RyaW5nLCBvcHRzOiBSZWxhdGlvbk9wdGlvbnM8RT4pOiBFbnRpdHlNZXRhPEU+IHtcbiAgaWYgKCFvcHRzLmVudGl0eSkge1xuICAgIGNvbnN0IGluZmVycmVkVHlwZSA9IGluZmVyRW50aXR5VHlwZShlbnRpdHksIGtleSk7XG4gICAgb3B0cy5lbnRpdHkgPSAoKSA9PiBpbmZlcnJlZFR5cGU7XG4gIH1cbiAgY29uc3QgbWV0YSA9IGVuc3VyZU1ldGEoZW50aXR5KTtcbiAgbWV0YS5yZWxhdGlvbnNba2V5XSA9IHsgLi4ubWV0YS5yZWxhdGlvbnNba2V5XSwgLi4ub3B0cyB9O1xuICByZXR1cm4gbWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUVudGl0eTxFPihlbnRpdHk6IFR5cGU8RT4sIG9wdHM6IEVudGl0eU9wdGlvbnMgPSB7fSk6IEVudGl0eU1ldGE8RT4ge1xuICBjb25zdCBtZXRhID0gZW5zdXJlTWV0YShlbnRpdHkpO1xuXG4gIGlmICghaGFzS2V5cyhtZXRhLmZpZWxkcykpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfScgbXVzdCBoYXZlIGZpZWxkc2ApO1xuICB9XG5cbiAgY29uc3Qgb25EZWxldGVLZXlzID0gZ2V0S2V5cyhtZXRhLmZpZWxkcykuZmlsdGVyKChrZXkpID0+IG1ldGEuZmllbGRzW2tleV0ub25EZWxldGUpIGFzIEZpZWxkS2V5PEU+W107XG5cbiAgaWYgKG9uRGVsZXRlS2V5cy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKGAnJHtlbnRpdHkubmFtZX0nIG11c3QgaGF2ZSBvbmUgZmllbGQgd2l0aCAnb25EZWxldGUnIGFzIG1heGltdW1gKTtcbiAgfVxuXG4gIGlmIChvcHRzLnNvZnREZWxldGUpIHtcbiAgICBpZiAoIW9uRGVsZXRlS2V5cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBtdXN0IGhhdmUgb25lIGZpZWxkIHdpdGggJ29uRGVsZXRlJyB0byBlbmFibGUgJ3NvZnREZWxldGUnYCk7XG4gICAgfVxuICAgIG1ldGEuc29mdERlbGV0ZSA9IG9uRGVsZXRlS2V5c1swXTtcbiAgfVxuXG4gIG1ldGEubmFtZSA9IG9wdHMubmFtZSA/PyBlbnRpdHkubmFtZTtcbiAgbGV0IHByb3RvOiBGdW5jdGlvbkNvbnN0cnVjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGVudGl0eS5wcm90b3R5cGUpO1xuXG4gIHdoaWxlIChwcm90by5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgY29uc3QgcGFyZW50TWV0YSA9IGVuc3VyZU1ldGEocHJvdG8uY29uc3RydWN0b3IgYXMgVHlwZTxFPik7XG4gICAgZXh0ZW5kTWV0YShtZXRhLCBwYXJlbnRNZXRhKTtcbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cblxuICBjb25zdCBpZCA9IGdldElkS2V5KG1ldGEpO1xuICBpZiAoIWlkKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKGAnJHtlbnRpdHkubmFtZX0nIG11c3QgaGF2ZSBvbmUgZmllbGQgZGVjb3JhdGVkIHdpdGggQElkYCk7XG4gIH1cbiAgbWV0YS5pZCA9IGlkO1xuXG4gIHJldHVybiBtZXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXRpZXMoKTogVHlwZTxhbnk+W10ge1xuICByZXR1cm4gWy4uLm1ldGFzLmVudHJpZXMoKV0ucmVkdWNlKChhY2MsIFtrZXksIHZhbF0pID0+IHtcbiAgICBpZiAodmFsLmlkKSB7XG4gICAgICBhY2MucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZU1ldGE8RT4oZW50aXR5OiBUeXBlPEU+KTogRW50aXR5TWV0YTxFPiB7XG4gIGxldCBtZXRhID0gbWV0YXMuZ2V0KGVudGl0eSk7XG4gIGlmIChtZXRhKSB7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cbiAgbWV0YSA9IHsgZW50aXR5LCBmaWVsZHM6IHt9LCByZWxhdGlvbnM6IHt9IH07XG4gIG1ldGFzLnNldChlbnRpdHksIG1ldGEpO1xuICByZXR1cm4gbWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGE8RT4oZW50aXR5OiBUeXBlPEU+KTogRW50aXR5TWV0YTxFPiB7XG4gIGNvbnN0IG1ldGEgPSBtZXRhcy5nZXQoZW50aXR5KTtcbiAgaWYgKCFtZXRhKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKGAnJHtlbnRpdHkubmFtZX0nIGlzIG5vdCBhbiBlbnRpdHlgKTtcbiAgfVxuICBpZiAobWV0YS5wcm9jZXNzZWQpIHtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuICBtZXRhLnByb2Nlc3NlZCA9IHRydWU7XG4gIHJldHVybiBmaWxsUmVsYXRpb25zKG1ldGEpO1xufVxuXG5mdW5jdGlvbiBmaWxsUmVsYXRpb25zPEU+KG1ldGE6IEVudGl0eU1ldGE8RT4pOiBFbnRpdHlNZXRhPEU+IHtcbiAgZm9yIChjb25zdCByZWxLZXkgaW4gbWV0YS5yZWxhdGlvbnMpIHtcbiAgICBjb25zdCByZWxPcHRzID0gbWV0YS5yZWxhdGlvbnNbcmVsS2V5IGFzIFJlbGF0aW9uS2V5PEU+XTtcblxuICAgIGlmIChyZWxPcHRzLnJlZmVyZW5jZXMpIHtcbiAgICAgIC8vIHJlZmVyZW5jZXMgd2VyZSBtYW51YWxseSBzcGVjaWZpZWRcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChyZWxPcHRzLm1hcHBlZEJ5KSB7XG4gICAgICBmaWxsSW52ZXJzZVNpZGVSZWxhdGlvbnMocmVsT3B0cyk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZWxFbnRpdHkgPSByZWxPcHRzLmVudGl0eSgpO1xuICAgIGNvbnN0IHJlbE1ldGEgPSBlbnN1cmVNZXRhKHJlbEVudGl0eSk7XG5cbiAgICBpZiAocmVsT3B0cy5jYXJkaW5hbGl0eSA9PT0gJ21tJykge1xuICAgICAgY29uc3QgaWROYW1lID0gbWV0YS5maWVsZHNbbWV0YS5pZF0ubmFtZTtcbiAgICAgIGNvbnN0IHJlbElkTmFtZSA9IHJlbE1ldGEuZmllbGRzW3JlbE1ldGEuaWRdLm5hbWU7XG4gICAgICBjb25zdCBzb3VyY2UgPSBsb3dlckZpcnN0KG1ldGEubmFtZSkgKyB1cHBlckZpcnN0KGlkTmFtZSk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBsb3dlckZpcnN0KHJlbE1ldGEubmFtZSkgKyB1cHBlckZpcnN0KHJlbElkTmFtZSk7XG4gICAgICByZWxPcHRzLnJlZmVyZW5jZXMgPSBbXG4gICAgICAgIHsgbG9jYWw6IHNvdXJjZSwgZm9yZWlnbjogbWV0YS5pZCB9LFxuICAgICAgICB7IGxvY2FsOiB0YXJnZXQsIGZvcmVpZ246IHJlbE1ldGEuaWQgfSxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbE9wdHMucmVmZXJlbmNlcyA9IFt7IGxvY2FsOiBgJHtyZWxLZXl9SWRgLCBmb3JlaWduOiByZWxNZXRhLmlkIH1dO1xuICAgIH1cblxuICAgIGlmIChyZWxPcHRzLnRocm91Z2gpIHtcbiAgICAgIGZpbGxUaHJvdWdoUmVsYXRpb25zKHJlbE9wdHMudGhyb3VnaCgpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0YTtcbn1cblxuZnVuY3Rpb24gZmlsbEludmVyc2VTaWRlUmVsYXRpb25zPEU+KHJlbE9wdHM6IFJlbGF0aW9uT3B0aW9uczxFPik6IHZvaWQge1xuICBjb25zdCByZWxFbnRpdHkgPSByZWxPcHRzLmVudGl0eSgpO1xuICBjb25zdCByZWxNZXRhID0gZ2V0TWV0YShyZWxFbnRpdHkpO1xuICByZWxPcHRzLm1hcHBlZEJ5ID0gZ2V0TWFwcGVkQnlSZWxhdGlvbktleShyZWxPcHRzKTtcblxuICBpZiAocmVsTWV0YS5maWVsZHNbcmVsT3B0cy5tYXBwZWRCeSBhcyBGaWVsZEtleTxFPl0pIHtcbiAgICByZWxPcHRzLnJlZmVyZW5jZXMgPSBbeyBsb2NhbDogcmVsTWV0YS5pZCwgZm9yZWlnbjogcmVsT3B0cy5tYXBwZWRCeSB9XTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtYXBwZWRCeVJlbGF0aW9uID0gcmVsTWV0YS5yZWxhdGlvbnNbcmVsT3B0cy5tYXBwZWRCeSBhcyBSZWxhdGlvbktleTxFPl07XG5cbiAgaWYgKHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICdtMScgfHwgcmVsT3B0cy5jYXJkaW5hbGl0eSA9PT0gJ21tJykge1xuICAgIHJlbE9wdHMucmVmZXJlbmNlcyA9IG1hcHBlZEJ5UmVsYXRpb24ucmVmZXJlbmNlcy5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByZWxPcHRzLnRocm91Z2ggPSBtYXBwZWRCeVJlbGF0aW9uLnRocm91Z2g7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmVsT3B0cy5yZWZlcmVuY2VzID0gbWFwcGVkQnlSZWxhdGlvbi5yZWZlcmVuY2VzLm1hcCgoeyBsb2NhbCwgZm9yZWlnbiB9KSA9PiAoe1xuICAgIGxvY2FsOiBmb3JlaWduLFxuICAgIGZvcmVpZ246IGxvY2FsLFxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIGZpbGxUaHJvdWdoUmVsYXRpb25zPEU+KGVudGl0eTogVHlwZTxFPik6IHZvaWQge1xuICBjb25zdCBtZXRhID0gZW5zdXJlTWV0YShlbnRpdHkpO1xuICBtZXRhLnJlbGF0aW9ucyA9IGdldEtleXMobWV0YS5maWVsZHMpLnJlZHVjZSgocmVsYXRpb25zLCBrZXkpID0+IHtcbiAgICBjb25zdCB7IHJlZmVyZW5jZSB9ID0gbWV0YS5maWVsZHNba2V5IGFzIEZpZWxkS2V5PEU+XTtcbiAgICBpZiAocmVmZXJlbmNlKSB7XG4gICAgICBjb25zdCByZWxFbnRpdHkgPSByZWZlcmVuY2UoKTtcbiAgICAgIGNvbnN0IHJlbE1ldGEgPSBlbnN1cmVNZXRhKHJlbEVudGl0eSk7XG4gICAgICBjb25zdCByZWxLZXkgPSBrZXkuc2xpY2UoMCwgLXJlbE1ldGEuaWQubGVuZ3RoKTtcbiAgICAgIGNvbnN0IHJlbE9wdHM6IFJlbGF0aW9uT3B0aW9ucyA9IHtcbiAgICAgICAgZW50aXR5OiByZWZlcmVuY2UsXG4gICAgICAgIGNhcmRpbmFsaXR5OiAnbTEnLFxuICAgICAgICByZWZlcmVuY2VzOiBbeyBsb2NhbDoga2V5LCBmb3JlaWduOiByZWxNZXRhLmlkIH1dLFxuICAgICAgfTtcbiAgICAgIHJlbGF0aW9uc1tyZWxLZXldID0gcmVsT3B0cztcbiAgICB9XG4gICAgcmV0dXJuIHJlbGF0aW9ucztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBnZXRNYXBwZWRCeVJlbGF0aW9uS2V5PEU+KHJlbE9wdHM6IFJlbGF0aW9uT3B0aW9uczxFPik6IEtleTxFPiB7XG4gIGlmICh0eXBlb2YgcmVsT3B0cy5tYXBwZWRCeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IHJlbEVudGl0eSA9IHJlbE9wdHMuZW50aXR5KCk7XG4gICAgY29uc3QgcmVsTWV0YSA9IGVuc3VyZU1ldGEocmVsRW50aXR5KTtcbiAgICBjb25zdCBrZXlNYXAgPSBnZXRSZWxhdGlvbktleU1hcChyZWxNZXRhKTtcbiAgICByZXR1cm4gcmVsT3B0cy5tYXBwZWRCeShrZXlNYXApO1xuICB9XG4gIHJldHVybiByZWxPcHRzLm1hcHBlZEJ5O1xufVxuXG5mdW5jdGlvbiBnZXRSZWxhdGlvbktleU1hcDxFPihtZXRhOiBFbnRpdHlNZXRhPEU+KTogUmVsYXRpb25LZXlNYXA8RT4ge1xuICByZXR1cm4gZ2V0S2V5cyhtZXRhLmZpZWxkcylcbiAgICAuY29uY2F0KGdldEtleXMobWV0YS5yZWxhdGlvbnMpKVxuICAgIC5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IGtleTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVsYXRpb25LZXlNYXA8RT4pO1xufVxuXG5mdW5jdGlvbiBnZXRJZEtleTxFPihtZXRhOiBFbnRpdHlNZXRhPEU+KTogSWRLZXk8RT4ge1xuICBjb25zdCBpZCA9IGdldEtleXMobWV0YS5maWVsZHMpLmZpbmQoKGtleSkgPT4gbWV0YS5maWVsZHNba2V5XT8uaXNJZCk7XG4gIHJldHVybiBpZCBhcyBJZEtleTxFPjtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kTWV0YTxFPih0YXJnZXQ6IEVudGl0eU1ldGE8RT4sIHNvdXJjZTogRW50aXR5TWV0YTxFPik6IHZvaWQge1xuICBjb25zdCBzb3VyY2VGaWVsZHMgPSB7IC4uLnNvdXJjZS5maWVsZHMgfTtcbiAgY29uc3QgdGFyZ2V0SWQgPSBnZXRJZEtleSh0YXJnZXQpO1xuICBpZiAodGFyZ2V0SWQpIHtcbiAgICBjb25zdCBzb3VyY2VJZCA9IGdldElkS2V5KHNvdXJjZSk7XG4gICAgaWYgKHNvdXJjZUlkKSB7XG4gICAgICBkZWxldGUgc291cmNlRmllbGRzW3NvdXJjZUlkXTtcbiAgICB9XG4gIH1cbiAgdGFyZ2V0LmZpZWxkcyA9IHsgLi4uc291cmNlRmllbGRzLCAuLi50YXJnZXQuZmllbGRzIH07XG4gIHRhcmdldC5yZWxhdGlvbnMgPSB7IC4uLnNvdXJjZS5yZWxhdGlvbnMsIC4uLnRhcmdldC5yZWxhdGlvbnMgfTtcbn1cblxuZnVuY3Rpb24gaW5mZXJUeXBlPEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBzdHJpbmcpOiBhbnkge1xuICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YSgnZGVzaWduOnR5cGUnLCBlbnRpdHkucHJvdG90eXBlLCBrZXkpO1xufVxuXG5mdW5jdGlvbiBpbmZlckVudGl0eVR5cGU8RT4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IHN0cmluZyk6IFR5cGU8YW55PiB7XG4gIGNvbnN0IGluZmVycmVkVHlwZSA9IGluZmVyVHlwZShlbnRpdHksIGtleSk7XG4gIGNvbnN0IGlzVmFsaWRUeXBlID0gaXNWYWxpZEVudGl0eVR5cGUoaW5mZXJyZWRUeXBlKTtcbiAgaWYgKCFpc1ZhbGlkVHlwZSkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9LiR7a2V5fScgdHlwZSB3YXMgYXV0by1pbmZlcnJlZCB3aXRoIGludmFsaWQgdHlwZSAnJHtpbmZlcnJlZFR5cGU/Lm5hbWV9J2ApO1xuICB9XG4gIHJldHVybiBpbmZlcnJlZFR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRW50aXR5VHlwZSh0eXBlOiBhbnkpOiB0eXBlIGlzIFR5cGU8YW55PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlICE9PSBCb29sZWFuICYmXG4gICAgdHlwZSAhPT0gU3RyaW5nICYmXG4gICAgdHlwZSAhPT0gTnVtYmVyICYmXG4gICAgdHlwZSAhPT0gQmlnSW50ICYmXG4gICAgdHlwZSAhPT0gRGF0ZSAmJlxuICAgIHR5cGUgIT09IFN5bWJvbCAmJlxuICAgIHR5cGUgIT09IE9iamVjdFxuICApO1xufVxuIl19