@uql/core 0.4.75 → 0.4.76

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.
@@ -313,20 +313,19 @@ class AbstractSqlDialect {
313
313
  }
314
314
  insert(entity, payload) {
315
315
  const meta = (0, entity_1.getMeta)(entity);
316
- payload = (0, util_1.getPersistables)(meta, payload, 'onInsert');
317
- const keys = (0, util_1.getKeys)(payload[0]);
316
+ const records = (0, util_1.getPersistables)(meta, payload, 'onInsert');
317
+ const keys = (0, util_1.getKeys)(records[0]);
318
318
  const columns = keys.map((key) => this.escapeId(meta.fields[key].name));
319
- const values = payload.map((it) => keys.map((key) => this.escape(it[key])).join(', ')).join('), (');
319
+ const values = records.map((record) => keys.map((key) => this.escape(record[key])).join(', ')).join('), (');
320
320
  return `INSERT INTO ${this.escapeId(meta.name)} (${columns.join(', ')}) VALUES (${values})`;
321
321
  }
322
322
  update(entity, qm, payload, opts) {
323
323
  const meta = (0, entity_1.getMeta)(entity);
324
- payload = (0, util_1.getPersistable)(meta, payload, 'onUpdate');
325
- const values = (0, util_1.getKeys)(payload)
326
- .map((key) => `${this.escapeId(key)} = ${this.escape(payload[key])}`)
327
- .join(', ');
324
+ const record = (0, util_1.getPersistable)(meta, payload, 'onUpdate');
325
+ const keys = (0, util_1.getKeys)(record);
326
+ const entries = keys.map((key) => `${this.escapeId(key)} = ${this.escape(payload[key])}`).join(', ');
328
327
  const criteria = this.criteria(entity, qm, opts);
329
- return `UPDATE ${this.escapeId(meta.name)} SET ${values}${criteria}`;
328
+ return `UPDATE ${this.escapeId(meta.name)} SET ${entries}${criteria}`;
330
329
  }
331
330
  delete(entity, qm, opts = {}) {
332
331
  const meta = (0, entity_1.getMeta)(entity);
@@ -359,8 +358,11 @@ class AbstractSqlDialect {
359
358
  return escaped + suffix;
360
359
  }
361
360
  escape(value) {
361
+ if (value instanceof util_1.Raw) {
362
+ return (0, util_1.getRawValue)({ value, dialect: this });
363
+ }
362
364
  return (0, sqlstring_1.escape)(value);
363
365
  }
364
366
  }
365
367
  exports.AbstractSqlDialect = AbstractSqlDialect;
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RTcWxEaWFsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpYWxlY3QvYWJzdHJhY3RTcWxEaWFsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUNuQyw2Q0FBMkM7QUFDM0MseUNBYXdCO0FBMEJ4QixNQUFzQixrQkFBa0I7SUFHdEMsWUFBcUIsWUFBdUIsRUFBVyx1QkFBK0I7UUFBakUsaUJBQVksR0FBWixZQUFZLENBQVc7UUFBVyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQVE7UUFDcEYsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxRQUFRLENBQUksTUFBZSxFQUFFLEVBQVksRUFBRSxPQUFxQixFQUFFOztRQUNoRSxNQUFNLElBQUksR0FBRyxJQUFBLGdCQUFPLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxNQUFNLG1DQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFBLDRCQUFxQixFQUFDLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3BILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENB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RyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUUvSCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRWpDLE9BQU8sT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQVU7UUFDZixPQUFPLElBQUEsa0JBQU0sRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0NBQ0Y7QUFyYUQsZ0RBcWFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXNjYXBlIH0gZnJvbSAnc3Fsc3RyaW5nJztcbmltcG9ydCB7IGdldE1ldGEgfSBmcm9tICdAdXFsL2NvcmUvZW50aXR5JztcbmltcG9ydCB7XG4gIGdldFBlcnNpc3RhYmxlLFxuICBnZXRQcm9qZWN0UmVsYXRpb25LZXlzLFxuICBnZXRQZXJzaXN0YWJsZXMsXG4gIGlzUHJvamVjdGluZ1JlbGF0aW9ucyxcbiAgZ2V0S2V5cyxcbiAgaGFzS2V5cyxcbiAgYnVpbGRTb3J0TWFwLFxuICBmbGF0T2JqZWN0LFxuICBnZXRSYXdWYWx1ZSxcbiAgcmF3LFxuICBSYXcsXG4gIGdldFF1ZXJ5RmlsdGVyQXNNYXAsXG59IGZyb20gJ0B1cWwvY29yZS91dGlsJztcblxuaW1wb3J0IHtcbiAgUXVlcnlGaWx0ZXIsXG4gIFF1ZXJ5LFxuICBTY2FsYXIsXG4gIFF1ZXJ5RmlsdGVyRmllbGRPcGVyYXRvck1hcCxcbiAgUXVlcnlTb3J0LFxuICBRdWVyeVBhZ2VyLFxuICBRdWVyeVRleHRTZWFyY2hPcHRpb25zLFxuICBGaWVsZEtleSxcbiAgUXVlcnlQcm9qZWN0LFxuICBUeXBlLFxuICBRdWVyeUNyaXRlcmlhLFxuICBRdWVyeVByb2plY3RBcnJheSxcbiAgUXVlcnlPcHRpb25zLFxuICBRdWVyeURpYWxlY3QsXG4gIFF1ZXJ5RmlsdGVyT3B0aW9ucyxcbiAgUXVlcnlDb21wYXJpc29uT3B0aW9ucyxcbiAgUXVlcnlGaWx0ZXJNYXAsXG4gIFF1ZXJ5U2VhcmNoLFxuICBRdWVyeVByb2plY3RPcHRpb25zLFxuICBRdWVyeVNvcnREaXJlY3Rpb24sXG4gIFF1ZXJ5RmlsdGVyTG9naWNhbCxcbn0gZnJvbSAnQHVxbC9jb3JlL3R5cGUnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTcWxEaWFsZWN0IGltcGxlbWVudHMgUXVlcnlEaWFsZWN0IHtcbiAgcmVhZG9ubHkgZXNjYXBlSWRSZWdleDogUmVnRXhwO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGVzY2FwZUlkQ2hhcjogJ2AnIHwgJ1wiJywgcmVhZG9ubHkgYmVnaW5UcmFuc2FjdGlvbkNvbW1hbmQ6IHN0cmluZykge1xuICAgIHRoaXMuZXNjYXBlSWRSZWdleCA9IFJlZ0V4cChlc2NhcGVJZENoYXIsICdnJyk7XG4gIH1cblxuICBjcml0ZXJpYTxFPihlbnRpdHk6IFR5cGU8RT4sIHFtOiBRdWVyeTxFPiwgb3B0czogUXVlcnlPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgcHJlZml4ID0gb3B0cy5wcmVmaXggPz8gKG9wdHMuYXV0b1ByZWZpeCB8fCBpc1Byb2plY3RpbmdSZWxhdGlvbnMobWV0YSwgcW0uJHByb2plY3QpKSA/IG1ldGEubmFtZSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCB3aGVyZSA9IHRoaXMud2hlcmU8RT4oZW50aXR5LCBxbS4kZmlsdGVyLCB7IC4uLm9wdHMsIHByZWZpeCB9KTtcbiAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXA8RT4oZW50aXR5LCBxbS4kZ3JvdXAsIHsgLi4ub3B0cywgcHJlZml4IH0pO1xuICAgIGNvbnN0IGhhdmluZyA9IHRoaXMud2hlcmU8RT4oZW50aXR5LCBxbS4kaGF2aW5nLCB7IC4uLm9wdHMsIHByZWZpeCwgY2xhdXNlOiAnSEFWSU5HJyB9KTtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5zb3J0PEU+KGVudGl0eSwgcW0uJHNvcnQsIHsgLi4ub3B0cywgcHJlZml4IH0pO1xuICAgIGNvbnN0IHBhZ2VyID0gdGhpcy5wYWdlcihxbSk7XG4gICAgcmV0dXJuIHdoZXJlICsgZ3JvdXAgKyBoYXZpbmcgKyBzb3J0ICsgcGFnZXI7XG4gIH1cblxuICBwcm9qZWN0RmllbGRzPEU+KGVudGl0eTogVHlwZTxFPiwgcHJvamVjdDogUXVlcnlQcm9qZWN0PEU+LCBvcHRzOiBRdWVyeVByb2plY3RPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgcHJlZml4ID0gb3B0cy5wcmVmaXggPyBvcHRzLnByZWZpeCArICcuJyA6ICcnO1xuICAgIGNvbnN0IGVzY2FwZWRQcmVmaXggPSB0aGlzLmVzY2FwZUlkKG9wdHMucHJlZml4LCB0cnVlLCB0cnVlKTtcblxuICAgIGxldCBmaWVsZHM6IFF1ZXJ5UHJvamVjdEFycmF5PEU+O1xuXG4gICAgaWYgKHByb2plY3QpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb2plY3QpKSB7XG4gICAgICAgIGZpZWxkcyA9IHByb2plY3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3NpdGl2ZVByb2plY3RLZXlzID0gZ2V0S2V5cyhwcm9qZWN0KS5maWx0ZXIoKGtleSkgPT4gcHJvamVjdFtrZXldKTtcbiAgICAgICAgZmllbGRzID0gcG9zaXRpdmVQcm9qZWN0S2V5cy5sZW5ndGhcbiAgICAgICAgICA/IHBvc2l0aXZlUHJvamVjdEtleXMubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gcHJvamVjdFtrZXldO1xuICAgICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgUmF3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhdyh2YWwudmFsdWUsIGtleSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGtleSBhcyBGaWVsZEtleTxFPjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiAoZ2V0S2V5cyhtZXRhLmZpZWxkcykuZmlsdGVyKChrZXkpID0+ICEoa2V5IGluIHByb2plY3QpKSBhcyBGaWVsZEtleTxFPltdKTtcbiAgICAgIH1cbiAgICAgIGZpZWxkcyA9IGZpZWxkcy5maWx0ZXIoKGtleSkgPT4ga2V5IGluc3RhbmNlb2YgUmF3IHx8IG1ldGEuZmllbGRzW2tleSBhcyBGaWVsZEtleTxFPl0pO1xuICAgICAgaWYgKCFmaWVsZHMubGVuZ3RoIHx8IChvcHRzLnByZWZpeCAmJiAhZmllbGRzLmluY2x1ZGVzKG1ldGEuaWQpKSkge1xuICAgICAgICBmaWVsZHMgPSBbbWV0YS5pZCwgLi4uZmllbGRzXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZmllbGRzID0gZ2V0S2V5cyhtZXRhLmZpZWxkcykgYXMgRmllbGRLZXk8RT5bXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGRzXG4gICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleSBpbnN0YW5jZW9mIFJhdykge1xuICAgICAgICAgIHJldHVybiBnZXRSYXdWYWx1ZSh7XG4gICAgICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICAgICAgZGlhbGVjdDogdGhpcyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICBhdXRvUHJlZml4QWxpYXM6IG9wdHMuYXV0b1ByZWZpeEFsaWFzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmllbGQgPSBtZXRhLmZpZWxkc1trZXkgYXMgRmllbGRLZXk8RT5dO1xuXG4gICAgICAgIGlmIChmaWVsZC52aXJ0dWFsKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFJhd1ZhbHVlKHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWVsZC52aXJ0dWFsLFxuICAgICAgICAgICAgYWxpYXM6IGtleSBhcyBzdHJpbmcsXG4gICAgICAgICAgICBkaWFsZWN0OiB0aGlzLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgIGF1dG9QcmVmaXhBbGlhczogb3B0cy5hdXRvUHJlZml4QWxpYXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuYW1lID0gZmllbGQ/Lm5hbWUgPz8gKGtleSBhcyBGaWVsZEtleTxFPik7XG4gICAgICAgIGNvbnN0IGZpZWxkUGF0aCA9IGAke2VzY2FwZWRQcmVmaXh9JHt0aGlzLmVzY2FwZUlkKG5hbWUpfWA7XG5cbiAgICAgICAgcmV0dXJuICFvcHRzLmF1dG9QcmVmaXhBbGlhcyAmJiAobmFtZSA9PT0ga2V5IHx8ICFmaWVsZCkgPyBmaWVsZFBhdGggOiBgJHtmaWVsZFBhdGh9ICR7dGhpcy5lc2NhcGVJZCgocHJlZml4ICsga2V5KSBhcyBGaWVsZEtleTxFPiwgdHJ1ZSl9YDtcbiAgICAgIH0pXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIHByb2plY3RSZWxhdGlvbnM8RT4oZW50aXR5OiBUeXBlPEU+LCBwcm9qZWN0OiBRdWVyeVByb2plY3Q8RT4gPSB7fSwgeyBwcmVmaXggfTogeyBwcmVmaXg/OiBzdHJpbmcgfSA9IHt9KTogeyBmaWVsZHM6IHN0cmluZzsgdGFibGVzOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCByZWxhdGlvbnMgPSBnZXRQcm9qZWN0UmVsYXRpb25LZXlzKG1ldGEsIHByb2plY3QpO1xuICAgIGNvbnN0IGlzUHJvamVjdEFycmF5ID0gQXJyYXkuaXNBcnJheShwcm9qZWN0KTtcbiAgICBsZXQgZmllbGRzID0gJyc7XG4gICAgbGV0IHRhYmxlcyA9ICcnO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgcmVsYXRpb25zKSB7XG4gICAgICBjb25zdCByZWxPcHRzID0gbWV0YS5yZWxhdGlvbnNba2V5XTtcblxuICAgICAgaWYgKHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICcxbScgfHwgcmVsT3B0cy5jYXJkaW5hbGl0eSA9PT0gJ21tJykge1xuICAgICAgICAvLyAnMW0nIGFuZCAnbW0nIHNob3VsZCBiZSByZXNvbHZlZCBpbiBhIGhpZ2hlciBsYXllciBiZWNhdXNlIHRoZXkgd2lsbCBuZWVkIG11bHRpcGxlIHF1ZXJpZXNcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpvaW5SZWxBbGlhcyA9IHByZWZpeCA/IHByZWZpeCArICcuJyArIGtleSA6IGtleTtcbiAgICAgIGNvbnN0IHJlbEVudGl0eSA9IHJlbE9wdHMuZW50aXR5KCk7XG4gICAgICBjb25zdCByZWxQcm9qZWN0ID0gcHJvamVjdFtrZXkgYXMgc3RyaW5nXTtcbiAgICAgIGNvbnN0IHJlbFF1ZXJ5ID0gaXNQcm9qZWN0QXJyYXkgPyB7fSA6IEFycmF5LmlzQXJyYXkocmVsUHJvamVjdCkgPyB7ICRwcm9qZWN0OiByZWxQcm9qZWN0IH0gOiByZWxQcm9qZWN0O1xuXG4gICAgICBjb25zdCByZWxDb2x1bW5zID0gdGhpcy5wcm9qZWN0RmllbGRzKHJlbEVudGl0eSwgcmVsUXVlcnkuJHByb2plY3QsIHtcbiAgICAgICAgcHJlZml4OiBqb2luUmVsQWxpYXMsXG4gICAgICAgIGF1dG9QcmVmaXhBbGlhczogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBmaWVsZHMgKz0gJywgJyArIHJlbENvbHVtbnM7XG5cbiAgICAgIGNvbnN0IHsgZmllbGRzOiBzdWJDb2x1bW5zLCB0YWJsZXM6IHN1YlRhYmxlcyB9ID0gdGhpcy5wcm9qZWN0UmVsYXRpb25zKHJlbEVudGl0eSwgcmVsUXVlcnkuJHByb2plY3QsIHtcbiAgICAgICAgcHJlZml4OiBqb2luUmVsQWxpYXMsXG4gICAgICB9KTtcblxuICAgICAgZmllbGRzICs9IHN1YkNvbHVtbnM7XG5cbiAgICAgIGNvbnN0IHJlbE1ldGEgPSBnZXRNZXRhKHJlbEVudGl0eSk7XG4gICAgICBjb25zdCByZWxFbnRpdHlOYW1lID0gdGhpcy5lc2NhcGVJZChyZWxNZXRhLm5hbWUpO1xuICAgICAgY29uc3QgcmVsUGF0aCA9IHByZWZpeCA/IHRoaXMuZXNjYXBlSWQocHJlZml4LCB0cnVlKSA6IHRoaXMuZXNjYXBlSWQobWV0YS5uYW1lKTtcbiAgICAgIGNvbnN0IGpvaW5UeXBlID0gcmVsUXVlcnkuJHJlcXVpcmVkID8gJ0lOTkVSJyA6ICdMRUZUJztcbiAgICAgIGNvbnN0IGpvaW5BbGlhcyA9IHRoaXMuZXNjYXBlSWQoam9pblJlbEFsaWFzLCB0cnVlKTtcblxuICAgICAgdGFibGVzICs9IGAgJHtqb2luVHlwZX0gSk9JTiAke3JlbEVudGl0eU5hbWV9ICR7am9pbkFsaWFzfSBPTiBgO1xuICAgICAgdGFibGVzICs9IHJlbE9wdHMucmVmZXJlbmNlcy5tYXAoKGl0KSA9PiBgJHtqb2luQWxpYXN9LiR7dGhpcy5lc2NhcGVJZChpdC5mb3JlaWduKX0gPSAke3JlbFBhdGh9LiR7dGhpcy5lc2NhcGVJZChpdC5sb2NhbCl9YCkuam9pbignIEFORCAnKTtcblxuICAgICAgaWYgKHJlbFF1ZXJ5LiRmaWx0ZXIpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy53aGVyZShyZWxFbnRpdHksIHJlbFF1ZXJ5LiRmaWx0ZXIsIHsgcHJlZml4OiBrZXksIGNsYXVzZTogZmFsc2UgfSk7XG4gICAgICAgIHRhYmxlcyArPSBgIEFORCAke2ZpbHRlcn1gO1xuICAgICAgfVxuXG4gICAgICB0YWJsZXMgKz0gc3ViVGFibGVzO1xuICAgIH1cblxuICAgIHJldHVybiB7IGZpZWxkcywgdGFibGVzIH07XG4gIH1cblxuICBzZWxlY3Q8RT4oZW50aXR5OiBUeXBlPEU+LCBxbTogUXVlcnk8RT4sIG9wdHM6IFF1ZXJ5T3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IHByZWZpeCA9IG9wdHMucHJlZml4ID8/IChvcHRzLmF1dG9QcmVmaXggfHwgaXNQcm9qZWN0aW5nUmVsYXRpb25zKG1ldGEsIHFtLiRwcm9qZWN0KSkgPyBtZXRhLm5hbWUgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLnByb2plY3RGaWVsZHMoZW50aXR5LCBxbS4kcHJvamVjdCwgeyBwcmVmaXggfSk7XG4gICAgY29uc3QgeyBmaWVsZHM6IHJlbGF0aW9uRmllbGRzLCB0YWJsZXMgfSA9IHRoaXMucHJvamVjdFJlbGF0aW9ucyhlbnRpdHksIHFtLiRwcm9qZWN0KTtcblxuICAgIHJldHVybiBgU0VMRUNUICR7ZmllbGRzfSR7cmVsYXRpb25GaWVsZHN9IEZST00gJHt0aGlzLmVzY2FwZUlkKG1ldGEubmFtZSl9JHt0YWJsZXN9YDtcbiAgfVxuXG4gIHdoZXJlPEU+KGVudGl0eTogVHlwZTxFPiwgZmlsdGVyOiBRdWVyeUZpbHRlcjxFPiA9IHt9LCBvcHRzOiBRdWVyeUZpbHRlck9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCB7IHVzZVByZWNlZGVuY2UsIGNsYXVzZSA9ICdXSEVSRScsIHNvZnREZWxldGUgfSA9IG9wdHM7XG5cbiAgICBmaWx0ZXIgPSBnZXRRdWVyeUZpbHRlckFzTWFwKG1ldGEsIGZpbHRlcik7XG5cbiAgICBpZiAobWV0YS5zb2Z0RGVsZXRlICYmIChzb2Z0RGVsZXRlIHx8IHNvZnREZWxldGUgPT09IHVuZGVmaW5lZCkgJiYgY2xhdXNlICE9PSAnSEFWSU5HJyAmJiAhZmlsdGVyW21ldGEuc29mdERlbGV0ZSBhcyBzdHJpbmddKSB7XG4gICAgICBmaWx0ZXJbbWV0YS5zb2Z0RGVsZXRlIGFzIHN0cmluZ10gPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhmaWx0ZXIpO1xuXG4gICAgaWYgKCFlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLm9wdHMsIHVzZVByZWNlZGVuY2U6IGVudHJpZXMubGVuZ3RoID4gMSB9O1xuXG4gICAgbGV0IHNxbCA9IGVudHJpZXMubWFwKChba2V5LCB2YWxdKSA9PiB0aGlzLmNvbXBhcmUoZW50aXR5LCBrZXkgYXMga2V5b2YgUXVlcnlGaWx0ZXJNYXA8RT4sIHZhbCBhcyBhbnksIG9wdGlvbnMpKS5qb2luKGAgQU5EIGApO1xuXG4gICAgaWYgKHVzZVByZWNlZGVuY2UpIHtcbiAgICAgIHNxbCA9IGAoJHtzcWx9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXVzZSA/IGAgJHtjbGF1c2V9ICR7c3FsfWAgOiBzcWw7XG4gIH1cblxuICBjb21wYXJlPEUsIEsgZXh0ZW5kcyBrZXlvZiBRdWVyeUZpbHRlck1hcDxFPj4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IEssIHZhbDogUXVlcnlGaWx0ZXJNYXA8RT5bS10sIG9wdHM/OiBRdWVyeUNvbXBhcmlzb25PcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuXG4gICAgaWYgKHZhbCBpbnN0YW5jZW9mIFJhdykge1xuICAgICAgaWYgKGtleSA9PT0gJyRleGlzdHMnIHx8IGtleSA9PT0gJyRuZXhpc3RzJykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbCBhcyBSYXc7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0UmF3VmFsdWUoe1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGRpYWxlY3Q6IHRoaXMsXG4gICAgICAgICAgcHJlZml4OiBtZXRhLm5hbWUsXG4gICAgICAgICAgZXNjYXBlZFByZWZpeDogdGhpcy5lc2NhcGVJZChtZXRhLm5hbWUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBgJHtrZXkgPT09ICckZXhpc3RzJyA/ICdFWElTVFMnIDogJ05PVCBFWElTVFMnfSAoJHtxdWVyeX0pYDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXBhcmlzb25LZXkgPSB0aGlzLmdldENvbXBhcmlzb25LZXkoZW50aXR5LCBrZXkgYXMgRmllbGRLZXk8RT4sIG9wdHMpO1xuICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9ID0gJHt2YWwudmFsdWV9YDtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnJHRleHQnKSB7XG4gICAgICBjb25zdCBzZWFyY2ggPSB2YWwgYXMgUXVlcnlUZXh0U2VhcmNoT3B0aW9uczxFPjtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IHNlYXJjaC4kZmllbGRzLm1hcCgoZmllbGQpID0+IHRoaXMuZXNjYXBlSWQobWV0YS5maWVsZHNbZmllbGRdPy5uYW1lID8/IGZpZWxkKSk7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lc2NhcGVJZChtZXRhLm5hbWUpfSBNQVRDSCB7JHtmaWVsZHMuam9pbignICcpfX0gOiAke3RoaXMuZXNjYXBlKHNlYXJjaC4kdmFsdWUpfWA7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJyRhbmQnIHx8IGtleSA9PT0gJyRvcicgfHwga2V5ID09PSAnJG5vdCcgfHwga2V5ID09PSAnJG5vcicpIHtcbiAgICAgIGNvbnN0IG5lZ2F0ZU9wZXJhdG9yTWFwID0ge1xuICAgICAgICAkbm90OiAnJGFuZCcsXG4gICAgICAgICRub3I6ICckb3InLFxuICAgICAgfSBhcyBjb25zdDtcblxuICAgICAgY29uc3Qgb3A6ICckYW5kJyB8ICckb3InID0gbmVnYXRlT3BlcmF0b3JNYXBba2V5IGFzIHN0cmluZ10gPz8ga2V5O1xuICAgICAgY29uc3QgbmVnYXRlID0ga2V5IGluIG5lZ2F0ZU9wZXJhdG9yTWFwID8gJ05PVCAnIDogJyc7XG5cbiAgICAgIGNvbnN0IHZhbHVlcyA9IHZhbCBhcyBRdWVyeUZpbHRlckxvZ2ljYWw8RT47XG4gICAgICBjb25zdCBoYXNNYW55SXRlbXMgPSB2YWx1ZXMubGVuZ3RoID4gMTtcbiAgICAgIGNvbnN0IGxvZ2ljYWxDb21wYXJpc29uID0gdmFsdWVzXG4gICAgICAgIC5tYXAoKGZpbHRlckVudHJ5KSA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlckVudHJ5IGluc3RhbmNlb2YgUmF3KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UmF3VmFsdWUoe1xuICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyRW50cnksXG4gICAgICAgICAgICAgIGRpYWxlY3Q6IHRoaXMsXG4gICAgICAgICAgICAgIHByZWZpeDogb3B0cy5wcmVmaXgsXG4gICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXg6IHRoaXMuZXNjYXBlSWQob3B0cy5wcmVmaXgsIHRydWUsIHRydWUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndoZXJlKGVudGl0eSwgZmlsdGVyRW50cnksIHtcbiAgICAgICAgICAgIHByZWZpeDogb3B0cy5wcmVmaXgsXG4gICAgICAgICAgICB1c2VQcmVjZWRlbmNlOiBoYXNNYW55SXRlbXMgJiYgIUFycmF5LmlzQXJyYXkoZmlsdGVyRW50cnkpICYmIGdldEtleXMoZmlsdGVyRW50cnkpLmxlbmd0aCA+IDEsXG4gICAgICAgICAgICBjbGF1c2U6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihvcCA9PT0gJyRvcicgPyAnIE9SICcgOiAnIEFORCAnKTtcblxuICAgICAgcmV0dXJuIChvcHRzLnVzZVByZWNlZGVuY2UgfHwgbmVnYXRlKSAmJiBoYXNNYW55SXRlbXMgPyBgJHtuZWdhdGV9KCR7bG9naWNhbENvbXBhcmlzb259KWAgOiBgJHtuZWdhdGV9JHtsb2dpY2FsQ29tcGFyaXNvbn1gO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWwpID8geyAkaW46IHZhbCB9IDogdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsID8gdmFsIDogeyAkZXE6IHZhbCB9O1xuICAgIGNvbnN0IG9wZXJhdG9ycyA9IGdldEtleXModmFsdWUpIGFzIChrZXlvZiBRdWVyeUZpbHRlckZpZWxkT3BlcmF0b3JNYXA8RT4pW107XG4gICAgY29uc3QgY29tcGFyaXNvbnMgPSBvcGVyYXRvcnMubWFwKChvcCkgPT4gdGhpcy5jb21wYXJlRmllbGRPcGVyYXRvcihlbnRpdHksIGtleSBhcyBGaWVsZEtleTxFPiwgb3AsIHZhbHVlW29wXSwgb3B0cykpLmpvaW4oJyBBTkQgJyk7XG5cbiAgICByZXR1cm4gb3BlcmF0b3JzLmxlbmd0aCA+IDEgPyBgKCR7Y29tcGFyaXNvbnN9KWAgOiBjb21wYXJpc29ucztcbiAgfVxuXG4gIGNvbXBhcmVGaWVsZE9wZXJhdG9yPEUsIEsgZXh0ZW5kcyBrZXlvZiBRdWVyeUZpbHRlckZpZWxkT3BlcmF0b3JNYXA8RT4+KFxuICAgIGVudGl0eTogVHlwZTxFPixcbiAgICBrZXk6IEZpZWxkS2V5PEU+LFxuICAgIG9wOiBLLFxuICAgIHZhbDogUXVlcnlGaWx0ZXJGaWVsZE9wZXJhdG9yTWFwPEU+W0tdLFxuICAgIG9wdHM/OiBRdWVyeU9wdGlvbnNcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb21wYXJpc29uS2V5ID0gdGhpcy5nZXRDb21wYXJpc29uS2V5KGVudGl0eSwga2V5LCBvcHRzKTtcbiAgICBzd2l0Y2ggKG9wKSB7XG4gICAgICBjYXNlICckZXEnOlxuICAgICAgICByZXR1cm4gdmFsID09PSBudWxsID8gYCR7Y29tcGFyaXNvbktleX0gSVMgTlVMTGAgOiBgJHtjb21wYXJpc29uS2V5fSA9ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJG5lJzpcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCA/IGAke2NvbXBhcmlzb25LZXl9IElTIE5PVCBOVUxMYCA6IGAke2NvbXBhcmlzb25LZXl9IDw+ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJG5vdCc6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUoZW50aXR5LCAnJG5vdCcsIFt7IFtrZXldOiB2YWwgfV0gYXMgYW55LCBvcHRzKTtcbiAgICAgIGNhc2UgJyRndCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA+ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJGd0ZSc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA+PSAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGNhc2UgJyRsdCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA8ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJGx0ZSc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA8PSAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGNhc2UgJyRzdGFydHNXaXRoJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IExJS0UgJHt0aGlzLmVzY2FwZShgJHt2YWx9JWApfWA7XG4gICAgICBjYXNlICckaXN0YXJ0c1dpdGgnOlxuICAgICAgICByZXR1cm4gYExPV0VSKCR7Y29tcGFyaXNvbktleX0pIExJS0UgJHt0aGlzLmVzY2FwZSgodmFsIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKSArICclJyl9YDtcbiAgICAgIGNhc2UgJyRlbmRzV2l0aCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBMSUtFICR7dGhpcy5lc2NhcGUoYCUke3ZhbH1gKX1gO1xuICAgICAgY2FzZSAnJGllbmRzV2l0aCc6XG4gICAgICAgIHJldHVybiBgTE9XRVIoJHtjb21wYXJpc29uS2V5fSkgTElLRSAke3RoaXMuZXNjYXBlKCclJyArICh2YWwgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpKX1gO1xuICAgICAgY2FzZSAnJGluY2x1ZGVzJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IExJS0UgJHt0aGlzLmVzY2FwZShgJSR7dmFsfSVgKX1gO1xuICAgICAgY2FzZSAnJGlpbmNsdWRlcyc6XG4gICAgICAgIHJldHVybiBgTE9XRVIoJHtjb21wYXJpc29uS2V5fSkgTElLRSAke3RoaXMuZXNjYXBlKCclJyArICh2YWwgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpICsgJyUnKX1gO1xuICAgICAgY2FzZSAnJGlsaWtlJzpcbiAgICAgICAgcmV0dXJuIGBMT1dFUigke2NvbXBhcmlzb25LZXl9KSBMSUtFICR7dGhpcy5lc2NhcGUoKHZhbCBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkpfWA7XG4gICAgICBjYXNlICckbGlrZSc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBMSUtFICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJGluJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IElOICgke3RoaXMuZXNjYXBlKHZhbCl9KWA7XG4gICAgICBjYXNlICckbmluJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IE5PVCBJTiAoJHt0aGlzLmVzY2FwZSh2YWwpfSlgO1xuICAgICAgY2FzZSAnJHJlZ2V4JzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IFJFR0VYUCAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IFR5cGVFcnJvcihgdW5rbm93biBvcGVyYXRvcjogJHtvcH1gKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb21wYXJpc29uS2V5PEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBGaWVsZEtleTxFPiwgeyBwcmVmaXggfTogUXVlcnlPcHRpb25zID0ge30pOiBTY2FsYXIge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgZXNjYXBlZFByZWZpeCA9IHRoaXMuZXNjYXBlSWQocHJlZml4LCB0cnVlLCB0cnVlKTtcbiAgICBjb25zdCBmaWVsZCA9IG1ldGEuZmllbGRzW2tleV07XG5cbiAgICBpZiAoZmllbGQ/LnZpcnR1YWwpIHtcbiAgICAgIHJldHVybiBnZXRSYXdWYWx1ZSh7XG4gICAgICAgIHZhbHVlOiBmaWVsZC52aXJ0dWFsLFxuICAgICAgICBkaWFsZWN0OiB0aGlzLFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXNjYXBlZFByZWZpeCArIHRoaXMuZXNjYXBlSWQoZmllbGQ/Lm5hbWUgPz8ga2V5KTtcbiAgfVxuXG4gIGdyb3VwPEU+KGVudGl0eTogVHlwZTxFPiwgZmllbGRzOiByZWFkb25seSBGaWVsZEtleTxFPltdLCBvcHRzOiBRdWVyeU9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgaWYgKCFmaWVsZHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IG5hbWVzID0gZmllbGRzLm1hcCgoa2V5KSA9PiB0aGlzLmVzY2FwZUlkKG1ldGEuZmllbGRzW2tleV0/Lm5hbWUgPz8ga2V5KSkuam9pbignLCAnKTtcbiAgICByZXR1cm4gYCBHUk9VUCBCWSAke25hbWVzfWA7XG4gIH1cblxuICBzb3J0PEU+KGVudGl0eTogVHlwZTxFPiwgc29ydDogUXVlcnlTb3J0PEU+LCB7IHByZWZpeCB9OiBRdWVyeU9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc29ydE1hcCA9IGJ1aWxkU29ydE1hcChzb3J0KTtcbiAgICBpZiAoIWhhc0tleXMoc29ydE1hcCkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCBmbGF0dGVuZWRTb3J0ID0gZmxhdE9iamVjdChzb3J0TWFwLCBwcmVmaXgpO1xuICAgIGNvbnN0IGRpcmVjdGlvbk1hcCA9IHsgMTogJycsIGFzYzogJycsICctMSc6ICcgREVTQycsIGRlc2M6ICcgREVTQycgfSBhcyBjb25zdDtcbiAgICBjb25zdCBvcmRlciA9IE9iamVjdC5lbnRyaWVzKGZsYXR0ZW5lZFNvcnQpXG4gICAgICAubWFwKChba2V5LCBzb3J0XSkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gbWV0YS5maWVsZHNba2V5XT8ubmFtZSA/PyBrZXk7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGRpcmVjdGlvbk1hcFtzb3J0IGFzIFF1ZXJ5U29ydERpcmVjdGlvbl07XG4gICAgICAgIHJldHVybiB0aGlzLmVzY2FwZUlkKG5hbWUpICsgZGlyZWN0aW9uO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcsICcpO1xuICAgIHJldHVybiBgIE9SREVSIEJZICR7b3JkZXJ9YDtcbiAgfVxuXG4gIHBhZ2VyKG9wdHM6IFF1ZXJ5UGFnZXIpOiBzdHJpbmcge1xuICAgIGxldCBzcWwgPSAnJztcbiAgICBpZiAob3B0cy4kbGltaXQpIHtcbiAgICAgIHNxbCArPSBgIExJTUlUICR7TnVtYmVyKG9wdHMuJGxpbWl0KX1gO1xuICAgIH1cbiAgICBpZiAob3B0cy4kc2tpcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzcWwgKz0gYCBPRkZTRVQgJHtOdW1iZXIob3B0cy4kc2tpcCl9YDtcbiAgICB9XG4gICAgcmV0dXJuIHNxbDtcbiAgfVxuXG4gIGNvdW50PEU+KGVudGl0eTogVHlwZTxFPiwgcW06IFF1ZXJ5U2VhcmNoPEU+LCBvcHRzPzogUXVlcnlPcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWFyY2g6IFF1ZXJ5PEU+ID0ge1xuICAgICAgLi4ucW0sXG4gICAgICAkcHJvamVjdDogW3JhdygnQ09VTlQoKiknLCAnY291bnQnKV0sXG4gICAgfTtcblxuICAgIGRlbGV0ZSBzZWFyY2guJHNvcnQ7XG4gICAgZGVsZXRlIHNlYXJjaC4kc2tpcDtcbiAgICBkZWxldGUgc2VhcmNoLiRsaW1pdDtcblxuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMuc2VsZWN0PEU+KGVudGl0eSwgc2VhcmNoKTtcbiAgICBjb25zdCBjcml0ZXJpYSA9IHRoaXMuY3JpdGVyaWEoZW50aXR5LCBzZWFyY2gsIG9wdHMpO1xuXG4gICAgcmV0dXJuIHNlbGVjdCArIGNyaXRlcmlhO1xuICB9XG5cbiAgZmluZDxFPihlbnRpdHk6IFR5cGU8RT4sIHFtOiBRdWVyeTxFPiwgb3B0cz86IFF1ZXJ5T3B0aW9ucyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZWN0ID0gdGhpcy5zZWxlY3Q8RT4oZW50aXR5LCBxbSwgb3B0cyk7XG4gICAgY29uc3QgY3JpdGVyaWEgPSB0aGlzLmNyaXRlcmlhKGVudGl0eSwgcW0sIG9wdHMpO1xuICAgIHJldHVybiBzZWxlY3QgKyBjcml0ZXJpYTtcbiAgfVxuXG4gIGluc2VydDxFPihlbnRpdHk6IFR5cGU8RT4sIHBheWxvYWQ6IEUgfCBFW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgcGF5bG9hZCA9IGdldFBlcnNpc3RhYmxlcyhtZXRhLCBwYXlsb2FkLCAnb25JbnNlcnQnKTtcbiAgICBjb25zdCBrZXlzID0gZ2V0S2V5cyhwYXlsb2FkWzBdKTtcbiAgICBjb25zdCBjb2x1bW5zID0ga2V5cy5tYXAoKGtleSkgPT4gdGhpcy5lc2NhcGVJZChtZXRhLmZpZWxkc1trZXldLm5hbWUpKTtcbiAgICBjb25zdCB2YWx1ZXMgPSBwYXlsb2FkLm1hcCgoaXQpID0+IGtleXMubWFwKChrZXkpID0+IHRoaXMuZXNjYXBlKGl0W2tleV0pKS5qb2luKCcsICcpKS5qb2luKCcpLCAoJyk7XG4gICAgcmV0dXJuIGBJTlNFUlQgSU5UTyAke3RoaXMuZXNjYXBlSWQobWV0YS5uYW1lKX0gKCR7Y29sdW1ucy5qb2luKCcsICcpfSkgVkFMVUVTICgke3ZhbHVlc30pYDtcbiAgfVxuXG4gIHVwZGF0ZTxFPihlbnRpdHk6IFR5cGU8RT4sIHFtOiBRdWVyeUNyaXRlcmlhPEU+LCBwYXlsb2FkOiBFLCBvcHRzPzogUXVlcnlPcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIHBheWxvYWQgPSBnZXRQZXJzaXN0YWJsZShtZXRhLCBwYXlsb2FkLCAnb25VcGRhdGUnKTtcbiAgICBjb25zdCB2YWx1ZXMgPSBnZXRLZXlzKHBheWxvYWQpXG4gICAgICAubWFwKChrZXkpID0+IGAke3RoaXMuZXNjYXBlSWQoa2V5KX0gPSAke3RoaXMuZXNjYXBlKHBheWxvYWRba2V5XSl9YClcbiAgICAgIC5qb2luKCcsICcpO1xuICAgIGNvbnN0IGNyaXRlcmlhID0gdGhpcy5jcml0ZXJpYShlbnRpdHksIHFtLCBvcHRzKTtcbiAgICByZXR1cm4gYFVQREFURSAke3RoaXMuZXNjYXBlSWQobWV0YS5uYW1lKX0gU0VUICR7dmFsdWVzfSR7Y3JpdGVyaWF9YDtcbiAgfVxuXG4gIGRlbGV0ZTxFPihlbnRpdHk6IFR5cGU8RT4sIHFtOiBRdWVyeUNyaXRlcmlhPEU+LCBvcHRzOiBRdWVyeU9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcblxuICAgIGlmIChvcHRzLnNvZnREZWxldGUgfHwgb3B0cy5zb2Z0RGVsZXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChtZXRhLnNvZnREZWxldGUpIHtcbiAgICAgICAgY29uc3QgY3JpdGVyaWEgPSB0aGlzLmNyaXRlcmlhKGVudGl0eSwgcW0sIG9wdHMpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG1ldGEuZmllbGRzW21ldGEuc29mdERlbGV0ZV0ub25EZWxldGUoKTtcbiAgICAgICAgcmV0dXJuIGBVUERBVEUgJHt0aGlzLmVzY2FwZUlkKG1ldGEubmFtZSl9IFNFVCAke3RoaXMuZXNjYXBlSWQobWV0YS5zb2Z0RGVsZXRlKX0gPSAke3RoaXMuZXNjYXBlKHZhbHVlKX0ke2NyaXRlcmlhfWA7XG4gICAgICB9IGVsc2UgaWYgKG9wdHMuc29mdERlbGV0ZSkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYCcke21ldGEubmFtZX0nIGhhcyBub3QgZW5hYmxlZCAnc29mdERlbGV0ZSdgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjcml0ZXJpYSA9IHRoaXMuY3JpdGVyaWEoZW50aXR5LCBxbSwgb3B0cyk7XG5cbiAgICByZXR1cm4gYERFTEVURSBGUk9NICR7dGhpcy5lc2NhcGVJZChtZXRhLm5hbWUpfSR7Y3JpdGVyaWF9YDtcbiAgfVxuXG4gIGVzY2FwZUlkKHZhbDogc3RyaW5nLCBmb3JiaWRRdWFsaWZpZWQ/OiBib29sZWFuLCBhZGREb3Q/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICghZm9yYmlkUXVhbGlmaWVkICYmIHZhbC5pbmNsdWRlcygnLicpKSB7XG4gICAgICByZXR1cm4gdmFsXG4gICAgICAgIC5zcGxpdCgnLicpXG4gICAgICAgIC5tYXAoKGl0KSA9PiB0aGlzLmVzY2FwZUlkKGl0KSlcbiAgICAgICAgLmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2VkIGZyb20gJ2VzY2FwZUlkJyBmdW5jdGlvbiBoZXJlIGh0dHBzOi8vZ2l0aHViLmNvbS9teXNxbGpzL3NxbHN0cmluZy9ibG9iL21hc3Rlci9saWIvU3FsU3RyaW5nLmpzXG4gICAgY29uc3QgZXNjYXBlZCA9IHRoaXMuZXNjYXBlSWRDaGFyICsgdmFsLnJlcGxhY2UodGhpcy5lc2NhcGVJZFJlZ2V4LCB0aGlzLmVzY2FwZUlkQ2hhciArIHRoaXMuZXNjYXBlSWRDaGFyKSArIHRoaXMuZXNjYXBlSWRDaGFyO1xuXG4gICAgY29uc3Qgc3VmZml4ID0gYWRkRG90ID8gJy4nIDogJyc7XG5cbiAgICByZXR1cm4gZXNjYXBlZCArIHN1ZmZpeDtcbiAgfVxuXG4gIGVzY2FwZSh2YWx1ZTogYW55KTogU2NhbGFyIHtcbiAgICByZXR1cm4gZXNjYXBlKHZhbHVlKTtcbiAgfVxufVxuIl19
368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RTcWxEaWFsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpYWxlY3QvYWJzdHJhY3RTcWxEaWFsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUNuQyw2Q0FBMkM7QUFDM0MseUNBYXdCO0FBMEJ4QixNQUFzQixrQkFBa0I7SUFHdEMsWUFBcUIsWUFBdUIsRUFBVyx1QkFBK0I7UUFBakUsaUJBQVksR0FBWixZQUFZLENBQVc7UUFBVyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQVE7UUFDcEYsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxRQUFRLENBQUksTUFBZSxFQUFFLEVBQVksRUFBRSxPQUFxQixFQUFFOztRQUNoRSxNQUFNLElBQUksR0FBRyxJQUFBLGdCQUFPLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxNQUFNLG1DQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFBLDRCQUFxQixFQUFDLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3BILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENB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QyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFFL0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVqQyxPQUFPLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFVO1FBQ2YsSUFBSSxLQUFLLFlBQVksVUFBRyxFQUFFO1lBQ3hCLE9BQU8sSUFBQSxrQkFBVyxFQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsT0FBTyxJQUFBLGtCQUFNLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBdmFELGdEQXVhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVzY2FwZSB9IGZyb20gJ3NxbHN0cmluZyc7XG5pbXBvcnQgeyBnZXRNZXRhIH0gZnJvbSAnQHVxbC9jb3JlL2VudGl0eSc7XG5pbXBvcnQge1xuICBnZXRQZXJzaXN0YWJsZSxcbiAgZ2V0UHJvamVjdFJlbGF0aW9uS2V5cyxcbiAgZ2V0UGVyc2lzdGFibGVzLFxuICBpc1Byb2plY3RpbmdSZWxhdGlvbnMsXG4gIGdldEtleXMsXG4gIGhhc0tleXMsXG4gIGJ1aWxkU29ydE1hcCxcbiAgZmxhdE9iamVjdCxcbiAgZ2V0UmF3VmFsdWUsXG4gIHJhdyxcbiAgUmF3LFxuICBnZXRRdWVyeUZpbHRlckFzTWFwLFxufSBmcm9tICdAdXFsL2NvcmUvdXRpbCc7XG5cbmltcG9ydCB7XG4gIFF1ZXJ5RmlsdGVyLFxuICBRdWVyeSxcbiAgU2NhbGFyLFxuICBRdWVyeUZpbHRlckZpZWxkT3BlcmF0b3JNYXAsXG4gIFF1ZXJ5U29ydCxcbiAgUXVlcnlQYWdlcixcbiAgUXVlcnlUZXh0U2VhcmNoT3B0aW9ucyxcbiAgRmllbGRLZXksXG4gIFF1ZXJ5UHJvamVjdCxcbiAgVHlwZSxcbiAgUXVlcnlDcml0ZXJpYSxcbiAgUXVlcnlQcm9qZWN0QXJyYXksXG4gIFF1ZXJ5T3B0aW9ucyxcbiAgUXVlcnlEaWFsZWN0LFxuICBRdWVyeUZpbHRlck9wdGlvbnMsXG4gIFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMsXG4gIFF1ZXJ5RmlsdGVyTWFwLFxuICBRdWVyeVNlYXJjaCxcbiAgUXVlcnlQcm9qZWN0T3B0aW9ucyxcbiAgUXVlcnlTb3J0RGlyZWN0aW9uLFxuICBRdWVyeUZpbHRlckxvZ2ljYWwsXG59IGZyb20gJ0B1cWwvY29yZS90eXBlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0U3FsRGlhbGVjdCBpbXBsZW1lbnRzIFF1ZXJ5RGlhbGVjdCB7XG4gIHJlYWRvbmx5IGVzY2FwZUlkUmVnZXg6IFJlZ0V4cDtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBlc2NhcGVJZENoYXI6ICdgJyB8ICdcIicsIHJlYWRvbmx5IGJlZ2luVHJhbnNhY3Rpb25Db21tYW5kOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVzY2FwZUlkUmVnZXggPSBSZWdFeHAoZXNjYXBlSWRDaGFyLCAnZycpO1xuICB9XG5cbiAgY3JpdGVyaWE8RT4oZW50aXR5OiBUeXBlPEU+LCBxbTogUXVlcnk8RT4sIG9wdHM6IFF1ZXJ5T3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IHByZWZpeCA9IG9wdHMucHJlZml4ID8/IChvcHRzLmF1dG9QcmVmaXggfHwgaXNQcm9qZWN0aW5nUmVsYXRpb25zKG1ldGEsIHFtLiRwcm9qZWN0KSkgPyBtZXRhLm5hbWUgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgd2hlcmUgPSB0aGlzLndoZXJlPEU+KGVudGl0eSwgcW0uJGZpbHRlciwgeyAuLi5vcHRzLCBwcmVmaXggfSk7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3VwPEU+KGVudGl0eSwgcW0uJGdyb3VwLCB7IC4uLm9wdHMsIHByZWZpeCB9KTtcbiAgICBjb25zdCBoYXZpbmcgPSB0aGlzLndoZXJlPEU+KGVudGl0eSwgcW0uJGhhdmluZywgeyAuLi5vcHRzLCBwcmVmaXgsIGNsYXVzZTogJ0hBVklORycgfSk7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMuc29ydDxFPihlbnRpdHksIHFtLiRzb3J0LCB7IC4uLm9wdHMsIHByZWZpeCB9KTtcbiAgICBjb25zdCBwYWdlciA9IHRoaXMucGFnZXIocW0pO1xuICAgIHJldHVybiB3aGVyZSArIGdyb3VwICsgaGF2aW5nICsgc29ydCArIHBhZ2VyO1xuICB9XG5cbiAgcHJvamVjdEZpZWxkczxFPihlbnRpdHk6IFR5cGU8RT4sIHByb2plY3Q6IFF1ZXJ5UHJvamVjdDxFPiwgb3B0czogUXVlcnlQcm9qZWN0T3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IHByZWZpeCA9IG9wdHMucHJlZml4ID8gb3B0cy5wcmVmaXggKyAnLicgOiAnJztcbiAgICBjb25zdCBlc2NhcGVkUHJlZml4ID0gdGhpcy5lc2NhcGVJZChvcHRzLnByZWZpeCwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICBsZXQgZmllbGRzOiBRdWVyeVByb2plY3RBcnJheTxFPjtcblxuICAgIGlmIChwcm9qZWN0KSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9qZWN0KSkge1xuICAgICAgICBmaWVsZHMgPSBwcm9qZWN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG9zaXRpdmVQcm9qZWN0S2V5cyA9IGdldEtleXMocHJvamVjdCkuZmlsdGVyKChrZXkpID0+IHByb2plY3Rba2V5XSk7XG4gICAgICAgIGZpZWxkcyA9IHBvc2l0aXZlUHJvamVjdEtleXMubGVuZ3RoXG4gICAgICAgICAgPyBwb3NpdGl2ZVByb2plY3RLZXlzLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHByb2plY3Rba2V5XTtcbiAgICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIFJhdykge1xuICAgICAgICAgICAgICAgIHJldHVybiByYXcodmFsLnZhbHVlLCBrZXkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBrZXkgYXMgRmllbGRLZXk8RT47XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogKGdldEtleXMobWV0YS5maWVsZHMpLmZpbHRlcigoa2V5KSA9PiAhKGtleSBpbiBwcm9qZWN0KSkgYXMgRmllbGRLZXk8RT5bXSk7XG4gICAgICB9XG4gICAgICBmaWVsZHMgPSBmaWVsZHMuZmlsdGVyKChrZXkpID0+IGtleSBpbnN0YW5jZW9mIFJhdyB8fCBtZXRhLmZpZWxkc1trZXkgYXMgRmllbGRLZXk8RT5dKTtcbiAgICAgIGlmICghZmllbGRzLmxlbmd0aCB8fCAob3B0cy5wcmVmaXggJiYgIWZpZWxkcy5pbmNsdWRlcyhtZXRhLmlkKSkpIHtcbiAgICAgICAgZmllbGRzID0gW21ldGEuaWQsIC4uLmZpZWxkc107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkcyA9IGdldEtleXMobWV0YS5maWVsZHMpIGFzIEZpZWxkS2V5PEU+W107XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkc1xuICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkgaW5zdGFuY2VvZiBSYXcpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0UmF3VmFsdWUoe1xuICAgICAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgICAgIGRpYWxlY3Q6IHRoaXMsXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICBlc2NhcGVkUHJlZml4LFxuICAgICAgICAgICAgYXV0b1ByZWZpeEFsaWFzOiBvcHRzLmF1dG9QcmVmaXhBbGlhcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpZWxkID0gbWV0YS5maWVsZHNba2V5IGFzIEZpZWxkS2V5PEU+XTtcblxuICAgICAgICBpZiAoZmllbGQudmlydHVhbCkge1xuICAgICAgICAgIHJldHVybiBnZXRSYXdWYWx1ZSh7XG4gICAgICAgICAgICB2YWx1ZTogZmllbGQudmlydHVhbCxcbiAgICAgICAgICAgIGFsaWFzOiBrZXkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgZGlhbGVjdDogdGhpcyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICBhdXRvUHJlZml4QWxpYXM6IG9wdHMuYXV0b1ByZWZpeEFsaWFzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmFtZSA9IGZpZWxkPy5uYW1lID8/IChrZXkgYXMgRmllbGRLZXk8RT4pO1xuICAgICAgICBjb25zdCBmaWVsZFBhdGggPSBgJHtlc2NhcGVkUHJlZml4fSR7dGhpcy5lc2NhcGVJZChuYW1lKX1gO1xuXG4gICAgICAgIHJldHVybiAhb3B0cy5hdXRvUHJlZml4QWxpYXMgJiYgKG5hbWUgPT09IGtleSB8fCAhZmllbGQpID8gZmllbGRQYXRoIDogYCR7ZmllbGRQYXRofSAke3RoaXMuZXNjYXBlSWQoKHByZWZpeCArIGtleSkgYXMgRmllbGRLZXk8RT4sIHRydWUpfWA7XG4gICAgICB9KVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuICBwcm9qZWN0UmVsYXRpb25zPEU+KGVudGl0eTogVHlwZTxFPiwgcHJvamVjdDogUXVlcnlQcm9qZWN0PEU+ID0ge30sIHsgcHJlZml4IH06IHsgcHJlZml4Pzogc3RyaW5nIH0gPSB7fSk6IHsgZmllbGRzOiBzdHJpbmc7IHRhYmxlczogc3RyaW5nIH0ge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgcmVsYXRpb25zID0gZ2V0UHJvamVjdFJlbGF0aW9uS2V5cyhtZXRhLCBwcm9qZWN0KTtcbiAgICBjb25zdCBpc1Byb2plY3RBcnJheSA9IEFycmF5LmlzQXJyYXkocHJvamVjdCk7XG4gICAgbGV0IGZpZWxkcyA9ICcnO1xuICAgIGxldCB0YWJsZXMgPSAnJztcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIHJlbGF0aW9ucykge1xuICAgICAgY29uc3QgcmVsT3B0cyA9IG1ldGEucmVsYXRpb25zW2tleV07XG5cbiAgICAgIGlmIChyZWxPcHRzLmNhcmRpbmFsaXR5ID09PSAnMW0nIHx8IHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICdtbScpIHtcbiAgICAgICAgLy8gJzFtJyBhbmQgJ21tJyBzaG91bGQgYmUgcmVzb2x2ZWQgaW4gYSBoaWdoZXIgbGF5ZXIgYmVjYXVzZSB0aGV5IHdpbGwgbmVlZCBtdWx0aXBsZSBxdWVyaWVzXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBqb2luUmVsQWxpYXMgPSBwcmVmaXggPyBwcmVmaXggKyAnLicgKyBrZXkgOiBrZXk7XG4gICAgICBjb25zdCByZWxFbnRpdHkgPSByZWxPcHRzLmVudGl0eSgpO1xuICAgICAgY29uc3QgcmVsUHJvamVjdCA9IHByb2plY3Rba2V5IGFzIHN0cmluZ107XG4gICAgICBjb25zdCByZWxRdWVyeSA9IGlzUHJvamVjdEFycmF5ID8ge30gOiBBcnJheS5pc0FycmF5KHJlbFByb2plY3QpID8geyAkcHJvamVjdDogcmVsUHJvamVjdCB9IDogcmVsUHJvamVjdDtcblxuICAgICAgY29uc3QgcmVsQ29sdW1ucyA9IHRoaXMucHJvamVjdEZpZWxkcyhyZWxFbnRpdHksIHJlbFF1ZXJ5LiRwcm9qZWN0LCB7XG4gICAgICAgIHByZWZpeDogam9pblJlbEFsaWFzLFxuICAgICAgICBhdXRvUHJlZml4QWxpYXM6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgZmllbGRzICs9ICcsICcgKyByZWxDb2x1bW5zO1xuXG4gICAgICBjb25zdCB7IGZpZWxkczogc3ViQ29sdW1ucywgdGFibGVzOiBzdWJUYWJsZXMgfSA9IHRoaXMucHJvamVjdFJlbGF0aW9ucyhyZWxFbnRpdHksIHJlbFF1ZXJ5LiRwcm9qZWN0LCB7XG4gICAgICAgIHByZWZpeDogam9pblJlbEFsaWFzLFxuICAgICAgfSk7XG5cbiAgICAgIGZpZWxkcyArPSBzdWJDb2x1bW5zO1xuXG4gICAgICBjb25zdCByZWxNZXRhID0gZ2V0TWV0YShyZWxFbnRpdHkpO1xuICAgICAgY29uc3QgcmVsRW50aXR5TmFtZSA9IHRoaXMuZXNjYXBlSWQocmVsTWV0YS5uYW1lKTtcbiAgICAgIGNvbnN0IHJlbFBhdGggPSBwcmVmaXggPyB0aGlzLmVzY2FwZUlkKHByZWZpeCwgdHJ1ZSkgOiB0aGlzLmVzY2FwZUlkKG1ldGEubmFtZSk7XG4gICAgICBjb25zdCBqb2luVHlwZSA9IHJlbFF1ZXJ5LiRyZXF1aXJlZCA/ICdJTk5FUicgOiAnTEVGVCc7XG4gICAgICBjb25zdCBqb2luQWxpYXMgPSB0aGlzLmVzY2FwZUlkKGpvaW5SZWxBbGlhcywgdHJ1ZSk7XG5cbiAgICAgIHRhYmxlcyArPSBgICR7am9pblR5cGV9IEpPSU4gJHtyZWxFbnRpdHlOYW1lfSAke2pvaW5BbGlhc30gT04gYDtcbiAgICAgIHRhYmxlcyArPSByZWxPcHRzLnJlZmVyZW5jZXMubWFwKChpdCkgPT4gYCR7am9pbkFsaWFzfS4ke3RoaXMuZXNjYXBlSWQoaXQuZm9yZWlnbil9ID0gJHtyZWxQYXRofS4ke3RoaXMuZXNjYXBlSWQoaXQubG9jYWwpfWApLmpvaW4oJyBBTkQgJyk7XG5cbiAgICAgIGlmIChyZWxRdWVyeS4kZmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMud2hlcmUocmVsRW50aXR5LCByZWxRdWVyeS4kZmlsdGVyLCB7IHByZWZpeDoga2V5LCBjbGF1c2U6IGZhbHNlIH0pO1xuICAgICAgICB0YWJsZXMgKz0gYCBBTkQgJHtmaWx0ZXJ9YDtcbiAgICAgIH1cblxuICAgICAgdGFibGVzICs9IHN1YlRhYmxlcztcbiAgICB9XG5cbiAgICByZXR1cm4geyBmaWVsZHMsIHRhYmxlcyB9O1xuICB9XG5cbiAgc2VsZWN0PEU+KGVudGl0eTogVHlwZTxFPiwgcW06IFF1ZXJ5PEU+LCBvcHRzOiBRdWVyeU9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCBwcmVmaXggPSBvcHRzLnByZWZpeCA/PyAob3B0cy5hdXRvUHJlZml4IHx8IGlzUHJvamVjdGluZ1JlbGF0aW9ucyhtZXRhLCBxbS4kcHJvamVjdCkpID8gbWV0YS5uYW1lIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5wcm9qZWN0RmllbGRzKGVudGl0eSwgcW0uJHByb2plY3QsIHsgcHJlZml4IH0pO1xuICAgIGNvbnN0IHsgZmllbGRzOiByZWxhdGlvbkZpZWxkcywgdGFibGVzIH0gPSB0aGlzLnByb2plY3RSZWxhdGlvbnMoZW50aXR5LCBxbS4kcHJvamVjdCk7XG5cbiAgICByZXR1cm4gYFNFTEVDVCAke2ZpZWxkc30ke3JlbGF0aW9uRmllbGRzfSBGUk9NICR7dGhpcy5lc2NhcGVJZChtZXRhLm5hbWUpfSR7dGFibGVzfWA7XG4gIH1cblxuICB3aGVyZTxFPihlbnRpdHk6IFR5cGU8RT4sIGZpbHRlcjogUXVlcnlGaWx0ZXI8RT4gPSB7fSwgb3B0czogUXVlcnlGaWx0ZXJPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgeyB1c2VQcmVjZWRlbmNlLCBjbGF1c2UgPSAnV0hFUkUnLCBzb2Z0RGVsZXRlIH0gPSBvcHRzO1xuXG4gICAgZmlsdGVyID0gZ2V0UXVlcnlGaWx0ZXJBc01hcChtZXRhLCBmaWx0ZXIpO1xuXG4gICAgaWYgKG1ldGEuc29mdERlbGV0ZSAmJiAoc29mdERlbGV0ZSB8fCBzb2Z0RGVsZXRlID09PSB1bmRlZmluZWQpICYmIGNsYXVzZSAhPT0gJ0hBVklORycgJiYgIWZpbHRlclttZXRhLnNvZnREZWxldGUgYXMgc3RyaW5nXSkge1xuICAgICAgZmlsdGVyW21ldGEuc29mdERlbGV0ZSBhcyBzdHJpbmddID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoZmlsdGVyKTtcblxuICAgIGlmICghZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0geyAuLi5vcHRzLCB1c2VQcmVjZWRlbmNlOiBlbnRyaWVzLmxlbmd0aCA+IDEgfTtcblxuICAgIGxldCBzcWwgPSBlbnRyaWVzLm1hcCgoW2tleSwgdmFsXSkgPT4gdGhpcy5jb21wYXJlKGVudGl0eSwga2V5IGFzIGtleW9mIFF1ZXJ5RmlsdGVyTWFwPEU+LCB2YWwgYXMgYW55LCBvcHRpb25zKSkuam9pbihgIEFORCBgKTtcblxuICAgIGlmICh1c2VQcmVjZWRlbmNlKSB7XG4gICAgICBzcWwgPSBgKCR7c3FsfSlgO1xuICAgIH1cblxuICAgIHJldHVybiBjbGF1c2UgPyBgICR7Y2xhdXNlfSAke3NxbH1gIDogc3FsO1xuICB9XG5cbiAgY29tcGFyZTxFLCBLIGV4dGVuZHMga2V5b2YgUXVlcnlGaWx0ZXJNYXA8RT4+KGVudGl0eTogVHlwZTxFPiwga2V5OiBLLCB2YWw6IFF1ZXJ5RmlsdGVyTWFwPEU+W0tdLCBvcHRzPzogUXVlcnlDb21wYXJpc29uT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcblxuICAgIGlmICh2YWwgaW5zdGFuY2VvZiBSYXcpIHtcbiAgICAgIGlmIChrZXkgPT09ICckZXhpc3RzJyB8fCBrZXkgPT09ICckbmV4aXN0cycpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWwgYXMgUmF3O1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFJhd1ZhbHVlKHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBkaWFsZWN0OiB0aGlzLFxuICAgICAgICAgIHByZWZpeDogbWV0YS5uYW1lLFxuICAgICAgICAgIGVzY2FwZWRQcmVmaXg6IHRoaXMuZXNjYXBlSWQobWV0YS5uYW1lLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYCR7a2V5ID09PSAnJGV4aXN0cycgPyAnRVhJU1RTJyA6ICdOT1QgRVhJU1RTJ30gKCR7cXVlcnl9KWA7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wYXJpc29uS2V5ID0gdGhpcy5nZXRDb21wYXJpc29uS2V5KGVudGl0eSwga2V5IGFzIEZpZWxkS2V5PEU+LCBvcHRzKTtcbiAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA9ICR7dmFsLnZhbHVlfWA7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJyR0ZXh0Jykge1xuICAgICAgY29uc3Qgc2VhcmNoID0gdmFsIGFzIFF1ZXJ5VGV4dFNlYXJjaE9wdGlvbnM8RT47XG4gICAgICBjb25zdCBmaWVsZHMgPSBzZWFyY2guJGZpZWxkcy5tYXAoKGZpZWxkKSA9PiB0aGlzLmVzY2FwZUlkKG1ldGEuZmllbGRzW2ZpZWxkXT8ubmFtZSA/PyBmaWVsZCkpO1xuICAgICAgcmV0dXJuIGAke3RoaXMuZXNjYXBlSWQobWV0YS5uYW1lKX0gTUFUQ0ggeyR7ZmllbGRzLmpvaW4oJyAnKX19IDogJHt0aGlzLmVzY2FwZShzZWFyY2guJHZhbHVlKX1gO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICckYW5kJyB8fCBrZXkgPT09ICckb3InIHx8IGtleSA9PT0gJyRub3QnIHx8IGtleSA9PT0gJyRub3InKSB7XG4gICAgICBjb25zdCBuZWdhdGVPcGVyYXRvck1hcCA9IHtcbiAgICAgICAgJG5vdDogJyRhbmQnLFxuICAgICAgICAkbm9yOiAnJG9yJyxcbiAgICAgIH0gYXMgY29uc3Q7XG5cbiAgICAgIGNvbnN0IG9wOiAnJGFuZCcgfCAnJG9yJyA9IG5lZ2F0ZU9wZXJhdG9yTWFwW2tleSBhcyBzdHJpbmddID8/IGtleTtcbiAgICAgIGNvbnN0IG5lZ2F0ZSA9IGtleSBpbiBuZWdhdGVPcGVyYXRvck1hcCA/ICdOT1QgJyA6ICcnO1xuXG4gICAgICBjb25zdCB2YWx1ZXMgPSB2YWwgYXMgUXVlcnlGaWx0ZXJMb2dpY2FsPEU+O1xuICAgICAgY29uc3QgaGFzTWFueUl0ZW1zID0gdmFsdWVzLmxlbmd0aCA+IDE7XG4gICAgICBjb25zdCBsb2dpY2FsQ29tcGFyaXNvbiA9IHZhbHVlc1xuICAgICAgICAubWFwKChmaWx0ZXJFbnRyeSkgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJFbnRyeSBpbnN0YW5jZW9mIFJhdykge1xuICAgICAgICAgICAgcmV0dXJuIGdldFJhd1ZhbHVlKHtcbiAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlckVudHJ5LFxuICAgICAgICAgICAgICBkaWFsZWN0OiB0aGlzLFxuICAgICAgICAgICAgICBwcmVmaXg6IG9wdHMucHJlZml4LFxuICAgICAgICAgICAgICBlc2NhcGVkUHJlZml4OiB0aGlzLmVzY2FwZUlkKG9wdHMucHJlZml4LCB0cnVlLCB0cnVlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53aGVyZShlbnRpdHksIGZpbHRlckVudHJ5LCB7XG4gICAgICAgICAgICBwcmVmaXg6IG9wdHMucHJlZml4LFxuICAgICAgICAgICAgdXNlUHJlY2VkZW5jZTogaGFzTWFueUl0ZW1zICYmICFBcnJheS5pc0FycmF5KGZpbHRlckVudHJ5KSAmJiBnZXRLZXlzKGZpbHRlckVudHJ5KS5sZW5ndGggPiAxLFxuICAgICAgICAgICAgY2xhdXNlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4ob3AgPT09ICckb3InID8gJyBPUiAnIDogJyBBTkQgJyk7XG5cbiAgICAgIHJldHVybiAob3B0cy51c2VQcmVjZWRlbmNlIHx8IG5lZ2F0ZSkgJiYgaGFzTWFueUl0ZW1zID8gYCR7bmVnYXRlfSgke2xvZ2ljYWxDb21wYXJpc29ufSlgIDogYCR7bmVnYXRlfSR7bG9naWNhbENvbXBhcmlzb259YDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsKSA/IHsgJGluOiB2YWwgfSA6IHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCA/IHZhbCA6IHsgJGVxOiB2YWwgfTtcbiAgICBjb25zdCBvcGVyYXRvcnMgPSBnZXRLZXlzKHZhbHVlKSBhcyAoa2V5b2YgUXVlcnlGaWx0ZXJGaWVsZE9wZXJhdG9yTWFwPEU+KVtdO1xuICAgIGNvbnN0IGNvbXBhcmlzb25zID0gb3BlcmF0b3JzLm1hcCgob3ApID0+IHRoaXMuY29tcGFyZUZpZWxkT3BlcmF0b3IoZW50aXR5LCBrZXkgYXMgRmllbGRLZXk8RT4sIG9wLCB2YWx1ZVtvcF0sIG9wdHMpKS5qb2luKCcgQU5EICcpO1xuXG4gICAgcmV0dXJuIG9wZXJhdG9ycy5sZW5ndGggPiAxID8gYCgke2NvbXBhcmlzb25zfSlgIDogY29tcGFyaXNvbnM7XG4gIH1cblxuICBjb21wYXJlRmllbGRPcGVyYXRvcjxFLCBLIGV4dGVuZHMga2V5b2YgUXVlcnlGaWx0ZXJGaWVsZE9wZXJhdG9yTWFwPEU+PihcbiAgICBlbnRpdHk6IFR5cGU8RT4sXG4gICAga2V5OiBGaWVsZEtleTxFPixcbiAgICBvcDogSyxcbiAgICB2YWw6IFF1ZXJ5RmlsdGVyRmllbGRPcGVyYXRvck1hcDxFPltLXSxcbiAgICBvcHRzPzogUXVlcnlPcHRpb25zXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tcGFyaXNvbktleSA9IHRoaXMuZ2V0Q29tcGFyaXNvbktleShlbnRpdHksIGtleSwgb3B0cyk7XG4gICAgc3dpdGNoIChvcCkge1xuICAgICAgY2FzZSAnJGVxJzpcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCA/IGAke2NvbXBhcmlzb25LZXl9IElTIE5VTExgIDogYCR7Y29tcGFyaXNvbktleX0gPSAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGNhc2UgJyRuZSc6XG4gICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgPyBgJHtjb21wYXJpc29uS2V5fSBJUyBOT1QgTlVMTGAgOiBgJHtjb21wYXJpc29uS2V5fSA8PiAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGNhc2UgJyRub3QnOlxuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKGVudGl0eSwgJyRub3QnLCBbeyBba2V5XTogdmFsIH1dIGFzIGFueSwgb3B0cyk7XG4gICAgICBjYXNlICckZ3QnOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gPiAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGNhc2UgJyRndGUnOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gPj0gJHt0aGlzLmVzY2FwZSh2YWwpfWA7XG4gICAgICBjYXNlICckbHQnOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gPCAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGNhc2UgJyRsdGUnOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gPD0gJHt0aGlzLmVzY2FwZSh2YWwpfWA7XG4gICAgICBjYXNlICckc3RhcnRzV2l0aCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBMSUtFICR7dGhpcy5lc2NhcGUoYCR7dmFsfSVgKX1gO1xuICAgICAgY2FzZSAnJGlzdGFydHNXaXRoJzpcbiAgICAgICAgcmV0dXJuIGBMT1dFUigke2NvbXBhcmlzb25LZXl9KSBMSUtFICR7dGhpcy5lc2NhcGUoKHZhbCBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkgKyAnJScpfWA7XG4gICAgICBjYXNlICckZW5kc1dpdGgnOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gTElLRSAke3RoaXMuZXNjYXBlKGAlJHt2YWx9YCl9YDtcbiAgICAgIGNhc2UgJyRpZW5kc1dpdGgnOlxuICAgICAgICByZXR1cm4gYExPV0VSKCR7Y29tcGFyaXNvbktleX0pIExJS0UgJHt0aGlzLmVzY2FwZSgnJScgKyAodmFsIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKSl9YDtcbiAgICAgIGNhc2UgJyRpbmNsdWRlcyc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBMSUtFICR7dGhpcy5lc2NhcGUoYCUke3ZhbH0lYCl9YDtcbiAgICAgIGNhc2UgJyRpaW5jbHVkZXMnOlxuICAgICAgICByZXR1cm4gYExPV0VSKCR7Y29tcGFyaXNvbktleX0pIExJS0UgJHt0aGlzLmVzY2FwZSgnJScgKyAodmFsIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKSArICclJyl9YDtcbiAgICAgIGNhc2UgJyRpbGlrZSc6XG4gICAgICAgIHJldHVybiBgTE9XRVIoJHtjb21wYXJpc29uS2V5fSkgTElLRSAke3RoaXMuZXNjYXBlKCh2YWwgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpKX1gO1xuICAgICAgY2FzZSAnJGxpa2UnOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gTElLRSAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGNhc2UgJyRpbic6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBJTiAoJHt0aGlzLmVzY2FwZSh2YWwpfSlgO1xuICAgICAgY2FzZSAnJG5pbic6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBOT1QgSU4gKCR7dGhpcy5lc2NhcGUodmFsKX0pYDtcbiAgICAgIGNhc2UgJyRyZWdleCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBSRUdFWFAgJHt0aGlzLmVzY2FwZSh2YWwpfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYHVua25vd24gb3BlcmF0b3I6ICR7b3B9YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29tcGFyaXNvbktleTxFPihlbnRpdHk6IFR5cGU8RT4sIGtleTogRmllbGRLZXk8RT4sIHsgcHJlZml4IH06IFF1ZXJ5T3B0aW9ucyA9IHt9KTogU2NhbGFyIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IGVzY2FwZWRQcmVmaXggPSB0aGlzLmVzY2FwZUlkKHByZWZpeCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgY29uc3QgZmllbGQgPSBtZXRhLmZpZWxkc1trZXldO1xuXG4gICAgaWYgKGZpZWxkPy52aXJ0dWFsKSB7XG4gICAgICByZXR1cm4gZ2V0UmF3VmFsdWUoe1xuICAgICAgICB2YWx1ZTogZmllbGQudmlydHVhbCxcbiAgICAgICAgZGlhbGVjdDogdGhpcyxcbiAgICAgICAgcHJlZml4LFxuICAgICAgICBlc2NhcGVkUHJlZml4LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVzY2FwZWRQcmVmaXggKyB0aGlzLmVzY2FwZUlkKGZpZWxkPy5uYW1lID8/IGtleSk7XG4gIH1cblxuICBncm91cDxFPihlbnRpdHk6IFR5cGU8RT4sIGZpZWxkczogcmVhZG9ubHkgRmllbGRLZXk8RT5bXSwgb3B0czogUXVlcnlPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICAgIGlmICghZmllbGRzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCBuYW1lcyA9IGZpZWxkcy5tYXAoKGtleSkgPT4gdGhpcy5lc2NhcGVJZChtZXRhLmZpZWxkc1trZXldPy5uYW1lID8/IGtleSkpLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIGAgR1JPVVAgQlkgJHtuYW1lc31gO1xuICB9XG5cbiAgc29ydDxFPihlbnRpdHk6IFR5cGU8RT4sIHNvcnQ6IFF1ZXJ5U29ydDxFPiwgeyBwcmVmaXggfTogUXVlcnlPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICAgIGNvbnN0IHNvcnRNYXAgPSBidWlsZFNvcnRNYXAoc29ydCk7XG4gICAgaWYgKCFoYXNLZXlzKHNvcnRNYXApKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgZmxhdHRlbmVkU29ydCA9IGZsYXRPYmplY3Qoc29ydE1hcCwgcHJlZml4KTtcbiAgICBjb25zdCBkaXJlY3Rpb25NYXAgPSB7IDE6ICcnLCBhc2M6ICcnLCAnLTEnOiAnIERFU0MnLCBkZXNjOiAnIERFU0MnIH0gYXMgY29uc3Q7XG4gICAgY29uc3Qgb3JkZXIgPSBPYmplY3QuZW50cmllcyhmbGF0dGVuZWRTb3J0KVxuICAgICAgLm1hcCgoW2tleSwgc29ydF0pID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IG1ldGEuZmllbGRzW2tleV0/Lm5hbWUgPz8ga2V5O1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBkaXJlY3Rpb25NYXBbc29ydCBhcyBRdWVyeVNvcnREaXJlY3Rpb25dO1xuICAgICAgICByZXR1cm4gdGhpcy5lc2NhcGVJZChuYW1lKSArIGRpcmVjdGlvbjtcbiAgICAgIH0pXG4gICAgICAuam9pbignLCAnKTtcbiAgICByZXR1cm4gYCBPUkRFUiBCWSAke29yZGVyfWA7XG4gIH1cblxuICBwYWdlcihvcHRzOiBRdWVyeVBhZ2VyKTogc3RyaW5nIHtcbiAgICBsZXQgc3FsID0gJyc7XG4gICAgaWYgKG9wdHMuJGxpbWl0KSB7XG4gICAgICBzcWwgKz0gYCBMSU1JVCAke051bWJlcihvcHRzLiRsaW1pdCl9YDtcbiAgICB9XG4gICAgaWYgKG9wdHMuJHNraXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3FsICs9IGAgT0ZGU0VUICR7TnVtYmVyKG9wdHMuJHNraXApfWA7XG4gICAgfVxuICAgIHJldHVybiBzcWw7XG4gIH1cblxuICBjb3VudDxFPihlbnRpdHk6IFR5cGU8RT4sIHFtOiBRdWVyeVNlYXJjaDxFPiwgb3B0cz86IFF1ZXJ5T3B0aW9ucyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VhcmNoOiBRdWVyeTxFPiA9IHtcbiAgICAgIC4uLnFtLFxuICAgICAgJHByb2plY3Q6IFtyYXcoJ0NPVU5UKCopJywgJ2NvdW50JyldLFxuICAgIH07XG5cbiAgICBkZWxldGUgc2VhcmNoLiRzb3J0O1xuICAgIGRlbGV0ZSBzZWFyY2guJHNraXA7XG4gICAgZGVsZXRlIHNlYXJjaC4kbGltaXQ7XG5cbiAgICBjb25zdCBzZWxlY3QgPSB0aGlzLnNlbGVjdDxFPihlbnRpdHksIHNlYXJjaCk7XG4gICAgY29uc3QgY3JpdGVyaWEgPSB0aGlzLmNyaXRlcmlhKGVudGl0eSwgc2VhcmNoLCBvcHRzKTtcblxuICAgIHJldHVybiBzZWxlY3QgKyBjcml0ZXJpYTtcbiAgfVxuXG4gIGZpbmQ8RT4oZW50aXR5OiBUeXBlPEU+LCBxbTogUXVlcnk8RT4sIG9wdHM/OiBRdWVyeU9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMuc2VsZWN0PEU+KGVudGl0eSwgcW0sIG9wdHMpO1xuICAgIGNvbnN0IGNyaXRlcmlhID0gdGhpcy5jcml0ZXJpYShlbnRpdHksIHFtLCBvcHRzKTtcbiAgICByZXR1cm4gc2VsZWN0ICsgY3JpdGVyaWE7XG4gIH1cblxuICBpbnNlcnQ8RT4oZW50aXR5OiBUeXBlPEU+LCBwYXlsb2FkOiBFIHwgRVtdKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IHJlY29yZHMgPSBnZXRQZXJzaXN0YWJsZXMobWV0YSwgcGF5bG9hZCwgJ29uSW5zZXJ0Jyk7XG4gICAgY29uc3Qga2V5cyA9IGdldEtleXMocmVjb3Jkc1swXSk7XG4gICAgY29uc3QgY29sdW1ucyA9IGtleXMubWFwKChrZXkpID0+IHRoaXMuZXNjYXBlSWQobWV0YS5maWVsZHNba2V5XS5uYW1lKSk7XG4gICAgY29uc3QgdmFsdWVzID0gcmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4ga2V5cy5tYXAoKGtleSkgPT4gdGhpcy5lc2NhcGUocmVjb3JkW2tleV0pKS5qb2luKCcsICcpKS5qb2luKCcpLCAoJyk7XG4gICAgcmV0dXJuIGBJTlNFUlQgSU5UTyAke3RoaXMuZXNjYXBlSWQobWV0YS5uYW1lKX0gKCR7Y29sdW1ucy5qb2luKCcsICcpfSkgVkFMVUVTICgke3ZhbHVlc30pYDtcbiAgfVxuXG4gIHVwZGF0ZTxFPihlbnRpdHk6IFR5cGU8RT4sIHFtOiBRdWVyeUNyaXRlcmlhPEU+LCBwYXlsb2FkOiBFLCBvcHRzPzogUXVlcnlPcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IHJlY29yZCA9IGdldFBlcnNpc3RhYmxlKG1ldGEsIHBheWxvYWQsICdvblVwZGF0ZScpO1xuICAgIGNvbnN0IGtleXMgPSBnZXRLZXlzKHJlY29yZCk7XG4gICAgY29uc3QgZW50cmllcyA9IGtleXMubWFwKChrZXkpID0+IGAke3RoaXMuZXNjYXBlSWQoa2V5KX0gPSAke3RoaXMuZXNjYXBlKHBheWxvYWRba2V5XSl9YCkuam9pbignLCAnKTtcbiAgICBjb25zdCBjcml0ZXJpYSA9IHRoaXMuY3JpdGVyaWEoZW50aXR5LCBxbSwgb3B0cyk7XG4gICAgcmV0dXJuIGBVUERBVEUgJHt0aGlzLmVzY2FwZUlkKG1ldGEubmFtZSl9IFNFVCAke2VudHJpZXN9JHtjcml0ZXJpYX1gO1xuICB9XG5cbiAgZGVsZXRlPEU+KGVudGl0eTogVHlwZTxFPiwgcW06IFF1ZXJ5Q3JpdGVyaWE8RT4sIG9wdHM6IFF1ZXJ5T3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuXG4gICAgaWYgKG9wdHMuc29mdERlbGV0ZSB8fCBvcHRzLnNvZnREZWxldGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG1ldGEuc29mdERlbGV0ZSkge1xuICAgICAgICBjb25zdCBjcml0ZXJpYSA9IHRoaXMuY3JpdGVyaWEoZW50aXR5LCBxbSwgb3B0cyk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbWV0YS5maWVsZHNbbWV0YS5zb2Z0RGVsZXRlXS5vbkRlbGV0ZSgpO1xuICAgICAgICByZXR1cm4gYFVQREFURSAke3RoaXMuZXNjYXBlSWQobWV0YS5uYW1lKX0gU0VUICR7dGhpcy5lc2NhcGVJZChtZXRhLnNvZnREZWxldGUpfSA9ICR7dGhpcy5lc2NhcGUodmFsdWUpfSR7Y3JpdGVyaWF9YDtcbiAgICAgIH0gZWxzZSBpZiAob3B0cy5zb2Z0RGVsZXRlKSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcihgJyR7bWV0YS5uYW1lfScgaGFzIG5vdCBlbmFibGVkICdzb2Z0RGVsZXRlJ2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNyaXRlcmlhID0gdGhpcy5jcml0ZXJpYShlbnRpdHksIHFtLCBvcHRzKTtcblxuICAgIHJldHVybiBgREVMRVRFIEZST00gJHt0aGlzLmVzY2FwZUlkKG1ldGEubmFtZSl9JHtjcml0ZXJpYX1gO1xuICB9XG5cbiAgZXNjYXBlSWQodmFsOiBzdHJpbmcsIGZvcmJpZFF1YWxpZmllZD86IGJvb2xlYW4sIGFkZERvdD86IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGlmICghdmFsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaWYgKCFmb3JiaWRRdWFsaWZpZWQgJiYgdmFsLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHJldHVybiB2YWxcbiAgICAgICAgLnNwbGl0KCcuJylcbiAgICAgICAgLm1hcCgoaXQpID0+IHRoaXMuZXNjYXBlSWQoaXQpKVxuICAgICAgICAuam9pbignLicpO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZWQgZnJvbSAnZXNjYXBlSWQnIGZ1bmN0aW9uIGhlcmUgaHR0cHM6Ly9naXRodWIuY29tL215c3FsanMvc3Fsc3RyaW5nL2Jsb2IvbWFzdGVyL2xpYi9TcWxTdHJpbmcuanNcbiAgICBjb25zdCBlc2NhcGVkID0gdGhpcy5lc2NhcGVJZENoYXIgKyB2YWwucmVwbGFjZSh0aGlzLmVzY2FwZUlkUmVnZXgsIHRoaXMuZXNjYXBlSWRDaGFyICsgdGhpcy5lc2NhcGVJZENoYXIpICsgdGhpcy5lc2NhcGVJZENoYXI7XG5cbiAgICBjb25zdCBzdWZmaXggPSBhZGREb3QgPyAnLicgOiAnJztcblxuICAgIHJldHVybiBlc2NhcGVkICsgc3VmZml4O1xuICB9XG5cbiAgZXNjYXBlKHZhbHVlOiBhbnkpOiBTY2FsYXIge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJhdykge1xuICAgICAgcmV0dXJuIGdldFJhd1ZhbHVlKHsgdmFsdWUsIGRpYWxlY3Q6IHRoaXMgfSk7XG4gICAgfVxuICAgIHJldHVybiBlc2NhcGUodmFsdWUpO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "homepage": "https://uql.io",
4
4
  "description": "flexible and efficient ORM, with declarative JSON syntax and smart type-safety",
5
5
  "license": "MIT",
6
- "version": "0.4.75",
6
+ "version": "0.4.76",
7
7
  "main": "index.js",
8
8
  "types": "index.d.ts",
9
9
  "scripts": {
package/type/entity.d.ts CHANGED
@@ -34,7 +34,7 @@ export declare type FieldOptions = {
34
34
  readonly onUpdate?: OnFieldCallback;
35
35
  readonly onDelete?: OnFieldCallback;
36
36
  };
37
- export declare type OnFieldCallback = (opts?: QueryRawFnOptions) => Scalar;
37
+ export declare type OnFieldCallback = (opts?: QueryRawFnOptions) => Scalar | QueryRaw;
38
38
  export declare type EntityGetter<E = any> = () => Type<E>;
39
39
  export declare type ReferenceOptions<E = any> = {
40
40
  entity: EntityGetter<E>;
package/type/entity.js CHANGED
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.idKey = void 0;
4
4
  exports.idKey = Symbol('idKey');
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGUvZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdhLFFBQUEsS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFF1ZXJ5UmF3LCBRdWVyeVJhd0ZuT3B0aW9ucyB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgU2NhbGFyLCBUeXBlIH0gZnJvbSAnLi91dGlsaXR5JztcblxuZXhwb3J0IGNvbnN0IGlkS2V5ID0gU3ltYm9sKCdpZEtleScpO1xuXG5leHBvcnQgdHlwZSBLZXk8RT4gPSB7XG4gIHJlYWRvbmx5IFtLIGluIGtleW9mIEVdPzogSyAmIHN0cmluZztcbn1ba2V5b2YgRSAmIHN0cmluZ107XG5cbmV4cG9ydCB0eXBlIEZpZWxkS2V5PEU+ID0ge1xuICByZWFkb25seSBbSyBpbiBLZXk8RT5dPzogRVtLXSBleHRlbmRzIFNjYWxhciA/IEsgOiBuZXZlcjtcbn1bS2V5PEU+XTtcblxuZXhwb3J0IHR5cGUgRmllbGRWYWx1ZTxFPiA9IEVbRmllbGRLZXk8RT5dO1xuXG5leHBvcnQgdHlwZSBJZEtleTxFPiA9IEUgZXh0ZW5kcyB7IFtpZEtleV0/OiBpbmZlciBLIH1cbiAgPyBLICYgRmllbGRLZXk8RT5cbiAgOiBFIGV4dGVuZHMgeyBfaWQ/OiB1bmtub3duIH1cbiAgPyAnX2lkJyAmIEZpZWxkS2V5PEU+XG4gIDogRSBleHRlbmRzIHsgaWQ/OiB1bmtub3duIH1cbiAgPyAnaWQnICYgRmllbGRLZXk8RT5cbiAgOiBGaWVsZEtleTxFPjtcblxuZXhwb3J0IHR5cGUgSWRWYWx1ZTxFPiA9IEVbSWRLZXk8RT5dO1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbktleTxFPiA9IHtcbiAgcmVhZG9ubHkgW0sgaW4gS2V5PEU+XT86IEVbS10gZXh0ZW5kcyBTY2FsYXIgPyBuZXZlciA6IEs7XG59W0tleTxFPl07XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uVmFsdWU8RT4gPSBFW1JlbGF0aW9uS2V5PEU+XTtcblxuZXhwb3J0IHR5cGUgRW50aXR5T3B0aW9ucyA9IHtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgc29mdERlbGV0ZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZE9wdGlvbnMgPSB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzSWQ/OiB0cnVlO1xuICByZWFkb25seSB0eXBlPzogYW55O1xuICByZWFkb25seSByZWZlcmVuY2U/OiBFbnRpdHlHZXR0ZXIgfCBSZWZlcmVuY2VPcHRpb25zO1xuICByZWFkb25seSB2aXJ0dWFsPzogUXVlcnlSYXc7XG4gIHJlYWRvbmx5IG9uSW5zZXJ0PzogT25GaWVsZENhbGxiYWNrO1xuICByZWFkb25seSBvblVwZGF0ZT86IE9uRmllbGRDYWxsYmFjaztcbiAgcmVhZG9ubHkgb25EZWxldGU/OiBPbkZpZWxkQ2FsbGJhY2s7XG59O1xuXG5leHBvcnQgdHlwZSBPbkZpZWxkQ2FsbGJhY2sgPSAob3B0cz86IFF1ZXJ5UmF3Rm5PcHRpb25zKSA9PiBTY2FsYXI7XG5cbmV4cG9ydCB0eXBlIEVudGl0eUdldHRlcjxFID0gYW55PiA9ICgpID0+IFR5cGU8RT47XG5cbmV4cG9ydCB0eXBlIFJlZmVyZW5jZU9wdGlvbnM8RSA9IGFueT4gPSB7IGVudGl0eTogRW50aXR5R2V0dGVyPEU+IH07XG5cbmV4cG9ydCB0eXBlIENhc2NhZGVUeXBlID0gJ3BlcnNpc3QnIHwgJ2RlbGV0ZSc7XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uT3B0aW9uczxFID0gYW55PiA9IHtcbiAgZW50aXR5PzogRW50aXR5R2V0dGVyPEU+O1xuICByZWFkb25seSBjYXJkaW5hbGl0eT86IFJlbGF0aW9uQ2FyZGluYWxpdHk7XG4gIHJlYWRvbmx5IGNhc2NhZGU/OiBib29sZWFuIHwgQ2FzY2FkZVR5cGU7XG4gIG1hcHBlZEJ5PzogUmVsYXRpb25NYXBwZWRCeTxFPjtcbiAgdGhyb3VnaD86IEVudGl0eUdldHRlcjxSZWxhdGlvblZhbHVlPEU+PjtcbiAgcmVmZXJlbmNlcz86IFJlbGF0aW9uUmVmZXJlbmNlcztcbn07XG5cbnR5cGUgUmVsYXRpb25PcHRpb25zT3duZXI8RT4gPSBQaWNrPFJlbGF0aW9uT3B0aW9uczxFPiwgJ2VudGl0eScgfCAncmVmZXJlbmNlcycgfCAnY2FzY2FkZSc+O1xudHlwZSBSZWxhdGlvbk9wdGlvbnNJbnZlcnNlU2lkZTxFPiA9IFBpY2s8UmVsYXRpb25PcHRpb25zPEU+LCAnZW50aXR5JyB8ICdtYXBwZWRCeScgfCAnY2FzY2FkZSc+O1xudHlwZSBSZWxhdGlvbk9wdGlvbnNUaHJvdWdoT3duZXI8RT4gPSBQaWNrPFJlbGF0aW9uT3B0aW9uczxFPiwgJ2VudGl0eScgfCAndGhyb3VnaCcgfCAncmVmZXJlbmNlcycgfCAnY2FzY2FkZSc+O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbktleU1hcDxFPiA9IHsgcmVhZG9ubHkgW0sgaW4gUmVsYXRpb25LZXk8RT5dOiBLIH07XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uS2V5TWFwcGVyPEU+ID0gKGtleU1hcDogUmVsYXRpb25LZXlNYXA8RT4pID0+IFJlbGF0aW9uS2V5PEU+O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvblJlZmVyZW5jZXMgPSB7IGxvY2FsOiBzdHJpbmc7IGZvcmVpZ246IHN0cmluZyB9W107XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uTWFwcGVkQnk8RT4gPSBSZWxhdGlvbktleTxFPiB8IFJlbGF0aW9uS2V5TWFwcGVyPEU+O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbkNhcmRpbmFsaXR5ID0gJzExJyB8ICdtMScgfCAnMW0nIHwgJ21tJztcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25PbmVUb09uZU9wdGlvbnM8RT4gPSBSZWxhdGlvbk9wdGlvbnNPd25lcjxFPiB8IFJlbGF0aW9uT3B0aW9uc0ludmVyc2VTaWRlPEU+O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbk9uZVRvTWFueU9wdGlvbnM8RT4gPSBSZWxhdGlvbk9wdGlvbnNPd25lcjxFPiB8IFJlbGF0aW9uT3B0aW9uc0ludmVyc2VTaWRlPEU+IHwgUmVsYXRpb25PcHRpb25zVGhyb3VnaE93bmVyPEU+O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbk1hbnlUb09uZU9wdGlvbnM8RT4gPSBSZWxhdGlvbk9wdGlvbnNPd25lcjxFPiB8IFJlbGF0aW9uT3B0aW9uc0ludmVyc2VTaWRlPEU+O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbk1hbnlUb01hbnlPcHRpb25zPEU+ID0gUmVsYXRpb25PcHRpb25zVGhyb3VnaE93bmVyPEU+IHwgUmVsYXRpb25PcHRpb25zSW52ZXJzZVNpZGU8RT47XG5cbmV4cG9ydCB0eXBlIEVudGl0eU1ldGE8RT4gPSB7XG4gIHJlYWRvbmx5IGVudGl0eTogVHlwZTxFPjtcbiAgbmFtZT86IHN0cmluZztcbiAgaWQ/OiBJZEtleTxFPjtcbiAgc29mdERlbGV0ZT86IEZpZWxkS2V5PEU+O1xuICBmaWVsZHM6IHtcbiAgICBbSyBpbiBGaWVsZEtleTxFPl0/OiBGaWVsZE9wdGlvbnM7XG4gIH07XG4gIHJlbGF0aW9uczoge1xuICAgIFtLIGluIFJlbGF0aW9uS2V5PEU+XT86IFJlbGF0aW9uT3B0aW9ucztcbiAgfTtcbiAgcHJvY2Vzc2VkPzogYm9vbGVhbjtcbn07XG4iXX0=
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGUvZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdhLFFBQUEsS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFF1ZXJ5UmF3LCBRdWVyeVJhd0ZuT3B0aW9ucyB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgU2NhbGFyLCBUeXBlIH0gZnJvbSAnLi91dGlsaXR5JztcblxuZXhwb3J0IGNvbnN0IGlkS2V5ID0gU3ltYm9sKCdpZEtleScpO1xuXG5leHBvcnQgdHlwZSBLZXk8RT4gPSB7XG4gIHJlYWRvbmx5IFtLIGluIGtleW9mIEVdPzogSyAmIHN0cmluZztcbn1ba2V5b2YgRSAmIHN0cmluZ107XG5cbmV4cG9ydCB0eXBlIEZpZWxkS2V5PEU+ID0ge1xuICByZWFkb25seSBbSyBpbiBLZXk8RT5dPzogRVtLXSBleHRlbmRzIFNjYWxhciA/IEsgOiBuZXZlcjtcbn1bS2V5PEU+XTtcblxuZXhwb3J0IHR5cGUgRmllbGRWYWx1ZTxFPiA9IEVbRmllbGRLZXk8RT5dO1xuXG5leHBvcnQgdHlwZSBJZEtleTxFPiA9IEUgZXh0ZW5kcyB7IFtpZEtleV0/OiBpbmZlciBLIH1cbiAgPyBLICYgRmllbGRLZXk8RT5cbiAgOiBFIGV4dGVuZHMgeyBfaWQ/OiB1bmtub3duIH1cbiAgPyAnX2lkJyAmIEZpZWxkS2V5PEU+XG4gIDogRSBleHRlbmRzIHsgaWQ/OiB1bmtub3duIH1cbiAgPyAnaWQnICYgRmllbGRLZXk8RT5cbiAgOiBGaWVsZEtleTxFPjtcblxuZXhwb3J0IHR5cGUgSWRWYWx1ZTxFPiA9IEVbSWRLZXk8RT5dO1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbktleTxFPiA9IHtcbiAgcmVhZG9ubHkgW0sgaW4gS2V5PEU+XT86IEVbS10gZXh0ZW5kcyBTY2FsYXIgPyBuZXZlciA6IEs7XG59W0tleTxFPl07XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uVmFsdWU8RT4gPSBFW1JlbGF0aW9uS2V5PEU+XTtcblxuZXhwb3J0IHR5cGUgRW50aXR5T3B0aW9ucyA9IHtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgc29mdERlbGV0ZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZE9wdGlvbnMgPSB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzSWQ/OiB0cnVlO1xuICByZWFkb25seSB0eXBlPzogYW55O1xuICByZWFkb25seSByZWZlcmVuY2U/OiBFbnRpdHlHZXR0ZXIgfCBSZWZlcmVuY2VPcHRpb25zO1xuICByZWFkb25seSB2aXJ0dWFsPzogUXVlcnlSYXc7XG4gIHJlYWRvbmx5IG9uSW5zZXJ0PzogT25GaWVsZENhbGxiYWNrO1xuICByZWFkb25seSBvblVwZGF0ZT86IE9uRmllbGRDYWxsYmFjaztcbiAgcmVhZG9ubHkgb25EZWxldGU/OiBPbkZpZWxkQ2FsbGJhY2s7XG59O1xuXG5leHBvcnQgdHlwZSBPbkZpZWxkQ2FsbGJhY2sgPSAob3B0cz86IFF1ZXJ5UmF3Rm5PcHRpb25zKSA9PiBTY2FsYXIgfCBRdWVyeVJhdztcblxuZXhwb3J0IHR5cGUgRW50aXR5R2V0dGVyPEUgPSBhbnk+ID0gKCkgPT4gVHlwZTxFPjtcblxuZXhwb3J0IHR5cGUgUmVmZXJlbmNlT3B0aW9uczxFID0gYW55PiA9IHsgZW50aXR5OiBFbnRpdHlHZXR0ZXI8RT4gfTtcblxuZXhwb3J0IHR5cGUgQ2FzY2FkZVR5cGUgPSAncGVyc2lzdCcgfCAnZGVsZXRlJztcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25PcHRpb25zPEUgPSBhbnk+ID0ge1xuICBlbnRpdHk/OiBFbnRpdHlHZXR0ZXI8RT47XG4gIHJlYWRvbmx5IGNhcmRpbmFsaXR5PzogUmVsYXRpb25DYXJkaW5hbGl0eTtcbiAgcmVhZG9ubHkgY2FzY2FkZT86IGJvb2xlYW4gfCBDYXNjYWRlVHlwZTtcbiAgbWFwcGVkQnk/OiBSZWxhdGlvbk1hcHBlZEJ5PEU+O1xuICB0aHJvdWdoPzogRW50aXR5R2V0dGVyPFJlbGF0aW9uVmFsdWU8RT4+O1xuICByZWZlcmVuY2VzPzogUmVsYXRpb25SZWZlcmVuY2VzO1xufTtcblxudHlwZSBSZWxhdGlvbk9wdGlvbnNPd25lcjxFPiA9IFBpY2s8UmVsYXRpb25PcHRpb25zPEU+LCAnZW50aXR5JyB8ICdyZWZlcmVuY2VzJyB8ICdjYXNjYWRlJz47XG50eXBlIFJlbGF0aW9uT3B0aW9uc0ludmVyc2VTaWRlPEU+ID0gUGljazxSZWxhdGlvbk9wdGlvbnM8RT4sICdlbnRpdHknIHwgJ21hcHBlZEJ5JyB8ICdjYXNjYWRlJz47XG50eXBlIFJlbGF0aW9uT3B0aW9uc1Rocm91Z2hPd25lcjxFPiA9IFBpY2s8UmVsYXRpb25PcHRpb25zPEU+LCAnZW50aXR5JyB8ICd0aHJvdWdoJyB8ICdyZWZlcmVuY2VzJyB8ICdjYXNjYWRlJz47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uS2V5TWFwPEU+ID0geyByZWFkb25seSBbSyBpbiBSZWxhdGlvbktleTxFPl06IEsgfTtcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25LZXlNYXBwZXI8RT4gPSAoa2V5TWFwOiBSZWxhdGlvbktleU1hcDxFPikgPT4gUmVsYXRpb25LZXk8RT47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uUmVmZXJlbmNlcyA9IHsgbG9jYWw6IHN0cmluZzsgZm9yZWlnbjogc3RyaW5nIH1bXTtcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25NYXBwZWRCeTxFPiA9IFJlbGF0aW9uS2V5PEU+IHwgUmVsYXRpb25LZXlNYXBwZXI8RT47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uQ2FyZGluYWxpdHkgPSAnMTEnIHwgJ20xJyB8ICcxbScgfCAnbW0nO1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbk9uZVRvT25lT3B0aW9uczxFPiA9IFJlbGF0aW9uT3B0aW9uc093bmVyPEU+IHwgUmVsYXRpb25PcHRpb25zSW52ZXJzZVNpZGU8RT47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uT25lVG9NYW55T3B0aW9uczxFPiA9IFJlbGF0aW9uT3B0aW9uc093bmVyPEU+IHwgUmVsYXRpb25PcHRpb25zSW52ZXJzZVNpZGU8RT4gfCBSZWxhdGlvbk9wdGlvbnNUaHJvdWdoT3duZXI8RT47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uTWFueVRvT25lT3B0aW9uczxFPiA9IFJlbGF0aW9uT3B0aW9uc093bmVyPEU+IHwgUmVsYXRpb25PcHRpb25zSW52ZXJzZVNpZGU8RT47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uTWFueVRvTWFueU9wdGlvbnM8RT4gPSBSZWxhdGlvbk9wdGlvbnNUaHJvdWdoT3duZXI8RT4gfCBSZWxhdGlvbk9wdGlvbnNJbnZlcnNlU2lkZTxFPjtcblxuZXhwb3J0IHR5cGUgRW50aXR5TWV0YTxFPiA9IHtcbiAgcmVhZG9ubHkgZW50aXR5OiBUeXBlPEU+O1xuICBuYW1lPzogc3RyaW5nO1xuICBpZD86IElkS2V5PEU+O1xuICBzb2Z0RGVsZXRlPzogRmllbGRLZXk8RT47XG4gIGZpZWxkczoge1xuICAgIFtLIGluIEZpZWxkS2V5PEU+XT86IEZpZWxkT3B0aW9ucztcbiAgfTtcbiAgcmVsYXRpb25zOiB7XG4gICAgW0sgaW4gUmVsYXRpb25LZXk8RT5dPzogUmVsYXRpb25PcHRpb25zO1xuICB9O1xuICBwcm9jZXNzZWQ/OiBib29sZWFuO1xufTtcbiJdfQ==
@@ -30,7 +30,7 @@ function getPersistables(meta, payload, callbackKey) {
30
30
  exports.getPersistables = getPersistables;
31
31
  function fillOnFields(meta, payload, callbackKey) {
32
32
  const payloads = Array.isArray(payload) ? payload : [payload];
33
- const keys = (0, util_1.getKeys)(meta.fields).filter((col) => meta.fields[col][callbackKey]);
33
+ const keys = (0, util_1.getKeys)(meta.fields).filter((key) => meta.fields[key][callbackKey]);
34
34
  return payloads.map((it) => {
35
35
  for (const key of keys) {
36
36
  if (it[key] === undefined) {
@@ -107,4 +107,4 @@ function getQueryFilterAsMap(meta, filter = {}) {
107
107
  return filter;
108
108
  }
109
109
  exports.getQueryFilterAsMap = getQueryFilterAsMap;
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbGVjdC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZGlhbGVjdC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWNBLHlDQUE4QztBQUk5QyxTQUFnQixXQUFXLENBQUMsSUFBbUY7O0lBQzdHLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQzlELE1BQU0sR0FBRyxHQUFHLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3pGLE1BQU0sS0FBSyxHQUFHLE1BQUEsSUFBSSxDQUFDLEtBQUssbUNBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztJQUN4QyxJQUFJLEtBQUssRUFBRTtRQUNULE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzNELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0QsT0FBTyxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0tBQ3JDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBVkQsa0NBVUM7QUFFRCxTQUFnQixjQUFjLENBQUksSUFBbUIsRUFBRSxPQUFVLEVBQUUsV0FBd0I7SUFDekYsT0FBTyxlQUFlLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRkQsd0NBRUM7QUFFRCxTQUFnQixlQUFlLENBQUksSUFBbUIsRUFBRSxPQUFnQixFQUFFLFdB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QUFnQixHQUFHLG1CQUFtQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxPQUFPO1FBQ0wsR0FBRyxnQkFBZ0I7UUFDbkIsR0FBRyxnQkFBZ0I7S0FDcEIsQ0FBQztBQUNKLENBQUM7QUFQRCxzQ0FPQztBQUVELFNBQWdCLG1CQUFtQixDQUFJLElBQW1CLEVBQUUsU0FBeUIsRUFBRTtJQUNyRixJQUFJLE1BQU0sWUFBWSxVQUFHLEVBQUU7UUFDekIsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUF1QixDQUFDO0tBQ2hEO0lBQ0QsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFRLE1BQWtCLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRTtRQUNoSCxPQUFPO1lBQ0wsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTTtTQUNHLENBQUM7S0FDeEI7SUFDRCxPQUFPLE1BQTJCLENBQUM7QUFDckMsQ0FBQztBQVZELGtEQVVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRW50aXR5TWV0YSxcbiAgRmllbGRLZXksXG4gIFF1ZXJ5UHJvamVjdCxcbiAgQ2FzY2FkZVR5cGUsXG4gIFJlbGF0aW9uS2V5LFxuICBGaWVsZE9wdGlvbnMsXG4gIEtleSxcbiAgUXVlcnlTb3J0LFxuICBRdWVyeVNvcnRNYXAsXG4gIFF1ZXJ5UmF3Rm5PcHRpb25zLFxuICBRdWVyeUZpbHRlcixcbiAgUXVlcnlGaWx0ZXJNYXAsXG59IGZyb20gJ0B1cWwvY29yZS90eXBlJztcbmltcG9ydCB7IGdldEtleXMsIFJhdyB9IGZyb20gJ0B1cWwvY29yZS91dGlsJztcblxudHlwZSBDYWxsYmFja0tleSA9IGtleW9mIFBpY2s8RmllbGRPcHRpb25zLCAnb25JbnNlcnQnIHwgJ29uVXBkYXRlJyB8ICdvbkRlbGV0ZSc+O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmF3VmFsdWUob3B0czogUXVlcnlSYXdGbk9wdGlvbnMgJiB7IHZhbHVlOiBSYXc7IGFsaWFzPzogc3RyaW5nOyBhdXRvUHJlZml4QWxpYXM/OiBib29sZWFuIH0pIHtcbiAgY29uc3QgeyB2YWx1ZSwgcHJlZml4ID0gJycsIGRpYWxlY3QsIGF1dG9QcmVmaXhBbGlhcyB9ID0gb3B0cztcbiAgY29uc3QgdmFsID0gdHlwZW9mIHZhbHVlLnZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWUob3B0cykgOiBwcmVmaXggKyB2YWx1ZS52YWx1ZTtcbiAgY29uc3QgYWxpYXMgPSBvcHRzLmFsaWFzID8/IHZhbHVlLmFsaWFzO1xuICBpZiAoYWxpYXMpIHtcbiAgICBjb25zdCBmdWxsQWxpYXMgPSBhdXRvUHJlZml4QWxpYXMgPyBwcmVmaXggKyBhbGlhcyA6IGFsaWFzO1xuICAgIGNvbnN0IGVzY2FwZWRGdWxsQWxpYXMgPSBkaWFsZWN0LmVzY2FwZUlkKGZ1bGxBbGlhcywgdHJ1ZSk7XG4gICAgcmV0dXJuIGAke3ZhbH0gJHtlc2NhcGVkRnVsbEFsaWFzfWA7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcnNpc3RhYmxlPEU+KG1ldGE6IEVudGl0eU1ldGE8RT4sIHBheWxvYWQ6IEUsIGNhbGxiYWNrS2V5OiBDYWxsYmFja0tleSk6IEUge1xuICByZXR1cm4gZ2V0UGVyc2lzdGFibGVzKG1ldGEsIHBheWxvYWQsIGNhbGxiYWNrS2V5KVswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcnNpc3RhYmxlczxFPihtZXRhOiBFbnRpdHlNZXRhPEU+LCBwYXlsb2FkOiBFIHwgRVtdLCBjYWxsYmFja0tleTogQ2FsbGJhY2tLZXkpOiBFW10ge1xuICBjb25zdCBwYXlsb2FkcyA9IGZpbGxPbkZpZWxkcyhtZXRhLCBwYXlsb2FkLCBjYWxsYmFja0tleSk7XG4gIGNvbnN0IHBlcnNpc3RhYmxlS2V5cyA9IGdldEtleXMocGF5bG9hZHNbMF0pLmZpbHRlcigoa2V5KSA9PiBtZXRhLmZpZWxkc1trZXldKSBhcyBGaWVsZEtleTxFPltdO1xuICByZXR1cm4gcGF5bG9hZHMubWFwKChpdCkgPT5cbiAgICBwZXJzaXN0YWJsZUtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBpdFtrZXldO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBFKVxuICApO1xufVxuXG5mdW5jdGlvbiBmaWxsT25GaWVsZHM8RT4obWV0YTogRW50aXR5TWV0YTxFPiwgcGF5bG9hZDogRSB8IEVbXSwgY2FsbGJhY2tLZXk6IENhbGxiYWNrS2V5KTogRVtdIHtcbiAgY29uc3QgcGF5bG9hZHMgPSBBcnJheS5pc0FycmF5KHBheWxvYWQpID8gcGF5bG9hZCA6IFtwYXlsb2FkXTtcbiAgY29uc3Qga2V5cyA9IGdldEtleXMobWV0YS5maWVsZHMpLmZpbHRlcigoY29sKSA9PiBtZXRhLmZpZWxkc1tjb2xdW2NhbGxiYWNrS2V5XSk7XG4gIHJldHVybiBwYXlsb2Fkcy5tYXAoKGl0KSA9PiB7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKGl0W2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpdFtrZXldID0gbWV0YS5maWVsZHNba2V5XVtjYWxsYmFja0tleV0oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0O1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcnNpc3RhYmxlUmVsYXRpb25zPEU+KG1ldGE6IEVudGl0eU1ldGE8RT4sIHBheWxvYWQ6IEUsIGFjdGlvbjogQ2FzY2FkZVR5cGUpOiBSZWxhdGlvbktleTxFPltdIHtcbiAgY29uc3Qga2V5cyA9IGdldEtleXMocGF5bG9hZCk7XG4gIHJldHVybiBrZXlzLmZpbHRlcigoa2V5KSA9PiB7XG4gICAgY29uc3QgcmVsT3B0cyA9IG1ldGEucmVsYXRpb25zW2tleSBhcyBSZWxhdGlvbktleTxFPl07XG4gICAgcmV0dXJuIHJlbE9wdHMgJiYgaXNDYXNjYWRhYmxlKGFjdGlvbiwgcmVsT3B0cy5jYXNjYWRlKTtcbiAgfSkgYXMgUmVsYXRpb25LZXk8RT5bXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FzY2FkYWJsZShhY3Rpb246IENhc2NhZGVUeXBlLCBjb25maWd1cmF0aW9uPzogYm9vbGVhbiB8IENhc2NhZGVUeXBlKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cbiAgcmV0dXJuIGNvbmZpZ3VyYXRpb24gPT09IGFjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb2plY3RSZWxhdGlvbktleXM8RT4obWV0YTogRW50aXR5TWV0YTxFPiwgcHJvamVjdDogUXVlcnlQcm9qZWN0PEU+KTogUmVsYXRpb25LZXk8RT5bXSB7XG4gIGNvbnN0IGtleXMgPSBnZXRQcm9qZWN0S2V5cyhwcm9qZWN0KTtcbiAgcmV0dXJuIGtleXMuZmlsdGVyKChrZXkpID0+IG1ldGEucmVsYXRpb25zW2tleSBhcyBSZWxhdGlvbktleTxFPl0pIGFzIFJlbGF0aW9uS2V5PEU+W107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2plY3RpbmdSZWxhdGlvbnM8RT4obWV0YTogRW50aXR5TWV0YTxFPiwgcHJvamVjdDogUXVlcnlQcm9qZWN0PEU+KTogYm9vbGVhbiB7XG4gIGNvbnN0IGtleXMgPSBnZXRQcm9qZWN0S2V5cyhwcm9qZWN0KTtcbiAgcmV0dXJuIGtleXMuc29tZSgoa2V5KSA9PiBtZXRhLnJlbGF0aW9uc1trZXkgYXMgUmVsYXRpb25LZXk8RT5dKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvamVjdEtleXM8RT4ocHJvamVjdDogUXVlcnlQcm9qZWN0PEU+KTogS2V5PEU+W10ge1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9qZWN0KSkge1xuICAgIHJldHVybiBwcm9qZWN0IGFzIEtleTxFPltdO1xuICB9XG4gIHJldHVybiBnZXRLZXlzKHByb2plY3QpLmZpbHRlcigoa2V5KSA9PiBwcm9qZWN0W2tleV0pIGFzIEtleTxFPltdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTb3J0TWFwPEU+KHNvcnQ6IFF1ZXJ5U29ydDxFPik6IFF1ZXJ5U29ydE1hcDxFPiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHNvcnQpKSB7XG4gICAgcmV0dXJuIHNvcnQucmVkdWNlKChhY2MsIGl0KSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpdCkpIHtcbiAgICAgICAgYWNjW2l0WzBdXSA9IGl0WzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjW2l0LmZpZWxkXSA9IGl0LnNvcnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFF1ZXJ5U29ydE1hcDxFPik7XG4gIH1cbiAgcmV0dXJuIHNvcnQgYXMgUXVlcnlTb3J0TWFwPEU+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXVnbWVudEZpbHRlcjxFPihtZXRhOiBFbnRpdHlNZXRhPEU+LCB0YXJnZXQ6IFF1ZXJ5RmlsdGVyPEU+ID0ge30sIHNvdXJjZTogUXVlcnlGaWx0ZXI8RT4gPSB7fSk6IFF1ZXJ5RmlsdGVyPEU+IHtcbiAgY29uc3QgdGFyZ2V0Q29tcGFyaXNvbiA9IGdldFF1ZXJ5RmlsdGVyQXNNYXAobWV0YSwgdGFyZ2V0KTtcbiAgY29uc3Qgc291cmNlQ29tcGFyaXNvbiA9IGdldFF1ZXJ5RmlsdGVyQXNNYXAobWV0YSwgc291cmNlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi50YXJnZXRDb21wYXJpc29uLFxuICAgIC4uLnNvdXJjZUNvbXBhcmlzb24sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRRdWVyeUZpbHRlckFzTWFwPEU+KG1ldGE6IEVudGl0eU1ldGE8RT4sIGZpbHRlcjogUXVlcnlGaWx0ZXI8RT4gPSB7fSk6IFF1ZXJ5RmlsdGVyTWFwPEU+IHtcbiAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIFJhdykge1xuICAgIHJldHVybiB7ICRhbmQ6IFtmaWx0ZXJdIH0gYXMgUXVlcnlGaWx0ZXJNYXA8RT47XG4gIH1cbiAgaWYgKHR5cGVvZiBmaWx0ZXIgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZmlsdGVyKSB8fCB0eXBlb2YgKGZpbHRlciBhcyBNb25nb0lkKS50b0hleFN0cmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB7XG4gICAgICBbbWV0YS5pZF06IGZpbHRlcixcbiAgICB9IGFzIFF1ZXJ5RmlsdGVyTWFwPEU+O1xuICB9XG4gIHJldHVybiBmaWx0ZXIgYXMgUXVlcnlGaWx0ZXJNYXA8RT47XG59XG5cbnR5cGUgTW9uZ29JZCA9IHtcbiAgcmVhZG9ubHkgdG9IZXhTdHJpbmc6IEZ1bmN0aW9uO1xufTtcbiJdfQ==
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbGVjdC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvZGlhbGVjdC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWNBLHlDQUE4QztBQUk5QyxTQUFnQixXQUFXLENBQUMsSUFBbUY7O0lBQzdHLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQzlELE1BQU0sR0FBRyxHQUFHLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3pGLE1BQU0sS0FBSyxHQUFHLE1BQUEsSUFBSSxDQUFDLEtBQUssbUNBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztJQUN4QyxJQUFJLEtBQUssRUFBRTtRQUNULE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzNELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0QsT0FBTyxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0tBQ3JDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBVkQsa0NBVUM7QUFFRCxTQUFnQixjQUFjLENBQUksSUFBbUIsRUFBRSxPQUFVLEVBQUUsV0FBd0I7SUFDekYsT0FBTyxlQUFlLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRkQsd0NBRUM7QUFFRCxTQUFnQixlQUFlLENBQUksSUFBbUIsRUFBRSxPQUFnQixFQUFFLFdBQXdCO0lBQ2hHLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzFELE1BQU0sZUFBZSxHQUFHLElBQUEsY0FBTyxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBa0IsQ0FBQztJQUNoRyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUN6QixlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2xDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBTyxDQUFDLENBQ1osQ0FBQztBQUNKLENBQUM7QUFURCwwQ0FTQztBQUVELFNBQVMsWUFBWSxDQUFJLElBQW1CLEVBQUUsT0FBZ0IsRUFBRSxXQUF3QjtJQUN0RixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsTUFBTSxJQUFJLEdBQUcsSUFBQSxjQUFPLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1FBQ3pCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3RCLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFDekIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQzthQUMzQztTQUNGO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FBSSxJQUFtQixFQUFFLE9BQVUsRUFBRSxNQUFtQjtJQUM3RixNQUFNLElBQUksR0FBRyxJQUFBLGNBQU8sRUFBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQXFCLENBQUMsQ0FBQztRQUN0RCxPQUFPLE9BQU8sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQXFCLENBQUM7QUFDekIsQ0FBQztBQU5ELDBEQU1DO0FBRUQsU0FBZ0IsWUFBWSxDQUFDLE1BQW1CLEVBQUUsYUFBcUM7SUFDckYsSUFBSSxPQUFPLGFBQWEsS0FBSyxTQUFTLEVBQUU7UUFDdEMsT0FBTyxhQUFhLENBQUM7S0FDdEI7SUFDRCxPQUFPLGFBQWEsS0FBSyxNQUFNLENBQUM7QUFDbEMsQ0FBQztBQUxELG9DQUtDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQUksSUFBbUIsRUFBRSxPQUF3QjtJQUNyRixNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQXFCLENBQUMsQ0FBcUIsQ0FBQztBQUN6RixDQUFDO0FBSEQsd0RBR0M7QUFFRCxTQUFnQixxQkFBcUIsQ0FBSSxJQUFtQixFQUFFLE9BQXdCO0lBQ3BGLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBcUIsQ0FBQyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUhELHNEQUdDO0FBRUQsU0FBUyxjQUFjLENBQUksT0FBd0I7SUFDakQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzFCLE9BQU8sT0FBbUIsQ0FBQztLQUM1QjtJQUNELE9BQU8sSUFBQSxjQUFPLEVBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQWEsQ0FBQztBQUNwRSxDQUFDO0FBRUQsU0FBZ0IsWUFBWSxDQUFJLElBQWtCO0lBQ2hELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN2QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNyQixHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BCO2lCQUFNO2dCQUNMLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzthQUN6QjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQXFCLENBQUMsQ0FBQztLQUMzQjtJQUNELE9BQU8sSUFBdUIsQ0FBQztBQUNqQyxDQUFDO0FBWkQsb0NBWUM7QUFFRCxTQUFnQixhQUFhLENBQUksSUFBbUIsRUFBRSxTQUF5QixFQUFFLEVBQUUsU0FBeUIsRUFBRTtJQUM1RyxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxPQUFPO1FBQ0wsR0FBRyxnQkFBZ0I7UUFDbkIsR0FBRyxnQkFBZ0I7S0FDcEIsQ0FBQztBQUNKLENBQUM7QUFQRCxzQ0FPQztBQUVELFNBQWdCLG1CQUFtQixDQUFJLElBQW1CLEVBQUUsU0FBeUIsRUFBRTtJQUNyRixJQUFJLE1BQU0sWUFBWSxVQUFHLEVBQUU7UUFDekIsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUF1QixDQUFDO0tBQ2hEO0lBQ0QsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFRLE1BQWtCLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRTtRQUNoSCxPQUFPO1lBQ0wsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTTtTQUNHLENBQUM7S0FDeEI7SUFDRCxPQUFPLE1BQTJCLENBQUM7QUFDckMsQ0FBQztBQVZELGtEQVVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRW50aXR5TWV0YSxcbiAgRmllbGRLZXksXG4gIFF1ZXJ5UHJvamVjdCxcbiAgQ2FzY2FkZVR5cGUsXG4gIFJlbGF0aW9uS2V5LFxuICBGaWVsZE9wdGlvbnMsXG4gIEtleSxcbiAgUXVlcnlTb3J0LFxuICBRdWVyeVNvcnRNYXAsXG4gIFF1ZXJ5UmF3Rm5PcHRpb25zLFxuICBRdWVyeUZpbHRlcixcbiAgUXVlcnlGaWx0ZXJNYXAsXG59IGZyb20gJ0B1cWwvY29yZS90eXBlJztcbmltcG9ydCB7IGdldEtleXMsIFJhdyB9IGZyb20gJ0B1cWwvY29yZS91dGlsJztcblxudHlwZSBDYWxsYmFja0tleSA9IGtleW9mIFBpY2s8RmllbGRPcHRpb25zLCAnb25JbnNlcnQnIHwgJ29uVXBkYXRlJyB8ICdvbkRlbGV0ZSc+O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmF3VmFsdWUob3B0czogUXVlcnlSYXdGbk9wdGlvbnMgJiB7IHZhbHVlOiBSYXc7IGFsaWFzPzogc3RyaW5nOyBhdXRvUHJlZml4QWxpYXM/OiBib29sZWFuIH0pIHtcbiAgY29uc3QgeyB2YWx1ZSwgcHJlZml4ID0gJycsIGRpYWxlY3QsIGF1dG9QcmVmaXhBbGlhcyB9ID0gb3B0cztcbiAgY29uc3QgdmFsID0gdHlwZW9mIHZhbHVlLnZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUudmFsdWUob3B0cykgOiBwcmVmaXggKyB2YWx1ZS52YWx1ZTtcbiAgY29uc3QgYWxpYXMgPSBvcHRzLmFsaWFzID8/IHZhbHVlLmFsaWFzO1xuICBpZiAoYWxpYXMpIHtcbiAgICBjb25zdCBmdWxsQWxpYXMgPSBhdXRvUHJlZml4QWxpYXMgPyBwcmVmaXggKyBhbGlhcyA6IGFsaWFzO1xuICAgIGNvbnN0IGVzY2FwZWRGdWxsQWxpYXMgPSBkaWFsZWN0LmVzY2FwZUlkKGZ1bGxBbGlhcywgdHJ1ZSk7XG4gICAgcmV0dXJuIGAke3ZhbH0gJHtlc2NhcGVkRnVsbEFsaWFzfWA7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcnNpc3RhYmxlPEU+KG1ldGE6IEVudGl0eU1ldGE8RT4sIHBheWxvYWQ6IEUsIGNhbGxiYWNrS2V5OiBDYWxsYmFja0tleSk6IEUge1xuICByZXR1cm4gZ2V0UGVyc2lzdGFibGVzKG1ldGEsIHBheWxvYWQsIGNhbGxiYWNrS2V5KVswXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcnNpc3RhYmxlczxFPihtZXRhOiBFbnRpdHlNZXRhPEU+LCBwYXlsb2FkOiBFIHwgRVtdLCBjYWxsYmFja0tleTogQ2FsbGJhY2tLZXkpOiBFW10ge1xuICBjb25zdCBwYXlsb2FkcyA9IGZpbGxPbkZpZWxkcyhtZXRhLCBwYXlsb2FkLCBjYWxsYmFja0tleSk7XG4gIGNvbnN0IHBlcnNpc3RhYmxlS2V5cyA9IGdldEtleXMocGF5bG9hZHNbMF0pLmZpbHRlcigoa2V5KSA9PiBtZXRhLmZpZWxkc1trZXldKSBhcyBGaWVsZEtleTxFPltdO1xuICByZXR1cm4gcGF5bG9hZHMubWFwKChpdCkgPT5cbiAgICBwZXJzaXN0YWJsZUtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBpdFtrZXldO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBFKVxuICApO1xufVxuXG5mdW5jdGlvbiBmaWxsT25GaWVsZHM8RT4obWV0YTogRW50aXR5TWV0YTxFPiwgcGF5bG9hZDogRSB8IEVbXSwgY2FsbGJhY2tLZXk6IENhbGxiYWNrS2V5KTogRVtdIHtcbiAgY29uc3QgcGF5bG9hZHMgPSBBcnJheS5pc0FycmF5KHBheWxvYWQpID8gcGF5bG9hZCA6IFtwYXlsb2FkXTtcbiAgY29uc3Qga2V5cyA9IGdldEtleXMobWV0YS5maWVsZHMpLmZpbHRlcigoa2V5KSA9PiBtZXRhLmZpZWxkc1trZXldW2NhbGxiYWNrS2V5XSk7XG4gIHJldHVybiBwYXlsb2Fkcy5tYXAoKGl0KSA9PiB7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKGl0W2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpdFtrZXldID0gbWV0YS5maWVsZHNba2V5XVtjYWxsYmFja0tleV0oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0O1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcnNpc3RhYmxlUmVsYXRpb25zPEU+KG1ldGE6IEVudGl0eU1ldGE8RT4sIHBheWxvYWQ6IEUsIGFjdGlvbjogQ2FzY2FkZVR5cGUpOiBSZWxhdGlvbktleTxFPltdIHtcbiAgY29uc3Qga2V5cyA9IGdldEtleXMocGF5bG9hZCk7XG4gIHJldHVybiBrZXlzLmZpbHRlcigoa2V5KSA9PiB7XG4gICAgY29uc3QgcmVsT3B0cyA9IG1ldGEucmVsYXRpb25zW2tleSBhcyBSZWxhdGlvbktleTxFPl07XG4gICAgcmV0dXJuIHJlbE9wdHMgJiYgaXNDYXNjYWRhYmxlKGFjdGlvbiwgcmVsT3B0cy5jYXNjYWRlKTtcbiAgfSkgYXMgUmVsYXRpb25LZXk8RT5bXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FzY2FkYWJsZShhY3Rpb246IENhc2NhZGVUeXBlLCBjb25maWd1cmF0aW9uPzogYm9vbGVhbiB8IENhc2NhZGVUeXBlKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cbiAgcmV0dXJuIGNvbmZpZ3VyYXRpb24gPT09IGFjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb2plY3RSZWxhdGlvbktleXM8RT4obWV0YTogRW50aXR5TWV0YTxFPiwgcHJvamVjdDogUXVlcnlQcm9qZWN0PEU+KTogUmVsYXRpb25LZXk8RT5bXSB7XG4gIGNvbnN0IGtleXMgPSBnZXRQcm9qZWN0S2V5cyhwcm9qZWN0KTtcbiAgcmV0dXJuIGtleXMuZmlsdGVyKChrZXkpID0+IG1ldGEucmVsYXRpb25zW2tleSBhcyBSZWxhdGlvbktleTxFPl0pIGFzIFJlbGF0aW9uS2V5PEU+W107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2plY3RpbmdSZWxhdGlvbnM8RT4obWV0YTogRW50aXR5TWV0YTxFPiwgcHJvamVjdDogUXVlcnlQcm9qZWN0PEU+KTogYm9vbGVhbiB7XG4gIGNvbnN0IGtleXMgPSBnZXRQcm9qZWN0S2V5cyhwcm9qZWN0KTtcbiAgcmV0dXJuIGtleXMuc29tZSgoa2V5KSA9PiBtZXRhLnJlbGF0aW9uc1trZXkgYXMgUmVsYXRpb25LZXk8RT5dKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvamVjdEtleXM8RT4ocHJvamVjdDogUXVlcnlQcm9qZWN0PEU+KTogS2V5PEU+W10ge1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9qZWN0KSkge1xuICAgIHJldHVybiBwcm9qZWN0IGFzIEtleTxFPltdO1xuICB9XG4gIHJldHVybiBnZXRLZXlzKHByb2plY3QpLmZpbHRlcigoa2V5KSA9PiBwcm9qZWN0W2tleV0pIGFzIEtleTxFPltdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTb3J0TWFwPEU+KHNvcnQ6IFF1ZXJ5U29ydDxFPik6IFF1ZXJ5U29ydE1hcDxFPiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHNvcnQpKSB7XG4gICAgcmV0dXJuIHNvcnQucmVkdWNlKChhY2MsIGl0KSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpdCkpIHtcbiAgICAgICAgYWNjW2l0WzBdXSA9IGl0WzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjW2l0LmZpZWxkXSA9IGl0LnNvcnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFF1ZXJ5U29ydE1hcDxFPik7XG4gIH1cbiAgcmV0dXJuIHNvcnQgYXMgUXVlcnlTb3J0TWFwPEU+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXVnbWVudEZpbHRlcjxFPihtZXRhOiBFbnRpdHlNZXRhPEU+LCB0YXJnZXQ6IFF1ZXJ5RmlsdGVyPEU+ID0ge30sIHNvdXJjZTogUXVlcnlGaWx0ZXI8RT4gPSB7fSk6IFF1ZXJ5RmlsdGVyPEU+IHtcbiAgY29uc3QgdGFyZ2V0Q29tcGFyaXNvbiA9IGdldFF1ZXJ5RmlsdGVyQXNNYXAobWV0YSwgdGFyZ2V0KTtcbiAgY29uc3Qgc291cmNlQ29tcGFyaXNvbiA9IGdldFF1ZXJ5RmlsdGVyQXNNYXAobWV0YSwgc291cmNlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi50YXJnZXRDb21wYXJpc29uLFxuICAgIC4uLnNvdXJjZUNvbXBhcmlzb24sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRRdWVyeUZpbHRlckFzTWFwPEU+KG1ldGE6IEVudGl0eU1ldGE8RT4sIGZpbHRlcjogUXVlcnlGaWx0ZXI8RT4gPSB7fSk6IFF1ZXJ5RmlsdGVyTWFwPEU+IHtcbiAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIFJhdykge1xuICAgIHJldHVybiB7ICRhbmQ6IFtmaWx0ZXJdIH0gYXMgUXVlcnlGaWx0ZXJNYXA8RT47XG4gIH1cbiAgaWYgKHR5cGVvZiBmaWx0ZXIgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZmlsdGVyKSB8fCB0eXBlb2YgKGZpbHRlciBhcyBNb25nb0lkKS50b0hleFN0cmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB7XG4gICAgICBbbWV0YS5pZF06IGZpbHRlcixcbiAgICB9IGFzIFF1ZXJ5RmlsdGVyTWFwPEU+O1xuICB9XG4gIHJldHVybiBmaWx0ZXIgYXMgUXVlcnlGaWx0ZXJNYXA8RT47XG59XG5cbnR5cGUgTW9uZ29JZCA9IHtcbiAgcmVhZG9ubHkgdG9IZXhTdHJpbmc6IEZ1bmN0aW9uO1xufTtcbiJdfQ==