@ruvector/ruvllm 2.5.6 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +282 -282
  2. package/bin/cli.js +1020 -1020
  3. package/dist/cjs/benchmarks/embedding-benchmark.js +1 -1
  4. package/dist/cjs/benchmarks/index.js +1 -1
  5. package/dist/cjs/benchmarks/model-comparison.js +1 -1
  6. package/dist/cjs/benchmarks/routing-benchmark.js +1 -1
  7. package/dist/cjs/contrastive.js +70 -70
  8. package/dist/cjs/engine.js +13 -13
  9. package/dist/cjs/export.js +31 -31
  10. package/dist/cjs/federated.js +1 -1
  11. package/dist/cjs/index.js +1 -1
  12. package/dist/cjs/intelligence.js +1 -1
  13. package/dist/cjs/lora.d.ts +11 -0
  14. package/dist/cjs/lora.d.ts.map +1 -1
  15. package/dist/cjs/lora.js +16 -1
  16. package/dist/cjs/models.js +1 -1
  17. package/dist/cjs/native.js +1 -1
  18. package/dist/cjs/session.js +1 -1
  19. package/dist/cjs/simd.js +1 -1
  20. package/dist/cjs/sona.js +1 -1
  21. package/dist/cjs/streaming.js +1 -1
  22. package/dist/cjs/training.d.ts +66 -8
  23. package/dist/cjs/training.d.ts.map +1 -1
  24. package/dist/cjs/training.js +145 -15
  25. package/dist/cjs/types.d.ts +7 -0
  26. package/dist/cjs/types.d.ts.map +1 -1
  27. package/dist/cjs/types.js +1 -1
  28. package/dist/esm/benchmarks/embedding-benchmark.js +1 -1
  29. package/dist/esm/benchmarks/index.js +1 -1
  30. package/dist/esm/benchmarks/model-comparison.js +1 -1
  31. package/dist/esm/benchmarks/routing-benchmark.js +1 -1
  32. package/dist/esm/contrastive.js +70 -70
  33. package/dist/esm/engine.js +13 -13
  34. package/dist/esm/export.js +31 -31
  35. package/dist/esm/federated.js +1 -1
  36. package/dist/esm/index.js +1 -1
  37. package/dist/esm/intelligence.js +1 -1
  38. package/dist/esm/lora.d.ts +11 -0
  39. package/dist/esm/lora.d.ts.map +1 -1
  40. package/dist/esm/lora.js +16 -1
  41. package/dist/esm/models.js +1 -1
  42. package/dist/esm/native.js +1 -1
  43. package/dist/esm/session.js +1 -1
  44. package/dist/esm/simd.js +1 -1
  45. package/dist/esm/sona.js +1 -1
  46. package/dist/esm/streaming.js +1 -1
  47. package/dist/esm/training.d.ts +66 -8
  48. package/dist/esm/training.d.ts.map +1 -1
  49. package/dist/esm/training.js +145 -15
  50. package/dist/esm/types.d.ts +7 -0
  51. package/dist/esm/types.d.ts.map +1 -1
  52. package/dist/esm/types.js +1 -1
  53. package/package.json +133 -133
  54. package/scripts/ensemble-model-compare.js +287 -287
  55. package/scripts/huggingface/README.md +537 -537
  56. package/scripts/huggingface/publish.sh +112 -112
  57. package/scripts/hybrid-model-compare.js +373 -373
  58. package/scripts/improved-model-compare.js +288 -288
  59. package/scripts/optimized-model-compare.js +364 -364
  60. package/scripts/real-model-compare.js +280 -280
  61. package/scripts/training/agentic-flow-capabilities.json +329 -329
  62. package/scripts/training/claude-code-synth.js +505 -505
  63. package/scripts/training/claude-flow-capabilities.json +1322 -1322
  64. package/scripts/training/claude-hard-negatives.js +222 -222
  65. package/scripts/training/contrastive-finetune.js +517 -517
  66. package/scripts/training/ecosystem-triplets.jsonl +1466 -1466
  67. package/scripts/training/generate-ecosystem-triplets.js +1324 -1324
  68. package/scripts/training/routing-dataset.js +634 -634
  69. package/scripts/training/ruvector-capabilities.json +798 -798
  70. package/scripts/training/validate-ecosystem.js +381 -381
  71. package/scripts/training/validation-results.json +22 -22
@@ -270,36 +270,36 @@ export class ModelExporter {
270
270
  ...model.metadata,
271
271
  lora_config: model.loraConfig,
272
272
  }, null, 2);
273
- const readme = `---
274
- license: mit
275
- tags:
276
- - sona
277
- - lora
278
- - ruvector
279
- ---
280
-
281
- # ${model.metadata.name}
282
-
283
- ${model.metadata.architecture} model trained with SONA adaptive learning.
284
-
285
- ## Usage
286
-
287
- \`\`\`typescript
288
- import { LoraAdapter, SafeTensorsReader } from '@ruvector/ruvllm';
289
-
290
- const reader = new SafeTensorsReader(buffer);
291
- const adapter = new LoraAdapter();
292
- adapter.setWeights({
293
- loraA: reader.getTensor2D('lora.A'),
294
- loraB: reader.getTensor2D('lora.B'),
295
- scaling: reader.getTensor1D('lora.scaling')[0],
296
- });
297
- \`\`\`
298
-
299
- ## Training Info
300
-
301
- - Steps: ${model.metadata.training?.steps || 'N/A'}
302
- - Final Loss: ${model.metadata.training?.loss || 'N/A'}
273
+ const readme = `---
274
+ license: mit
275
+ tags:
276
+ - sona
277
+ - lora
278
+ - ruvector
279
+ ---
280
+
281
+ # ${model.metadata.name}
282
+
283
+ ${model.metadata.architecture} model trained with SONA adaptive learning.
284
+
285
+ ## Usage
286
+
287
+ \`\`\`typescript
288
+ import { LoraAdapter, SafeTensorsReader } from '@ruvector/ruvllm';
289
+
290
+ const reader = new SafeTensorsReader(buffer);
291
+ const adapter = new LoraAdapter();
292
+ adapter.setWeights({
293
+ loraA: reader.getTensor2D('lora.A'),
294
+ loraB: reader.getTensor2D('lora.B'),
295
+ scaling: reader.getTensor1D('lora.scaling')[0],
296
+ });
297
+ \`\`\`
298
+
299
+ ## Training Info
300
+
301
+ - Steps: ${model.metadata.training?.steps || 'N/A'}
302
+ - Final Loss: ${model.metadata.training?.loss || 'N/A'}
303
303
  `;
304
304
  return { safetensors, config, readme };
305
305
  }
@@ -411,4 +411,4 @@ export class DatasetExporter {
411
411
  .join('\n');
412
412
  }
413
413
  }
414
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQWdDSDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFBOUI7UUFDVSxZQUFPLEdBQXlELElBQUksR0FBRyxFQUFFLENBQUM7UUFDMUUsYUFBUSxHQUEyQixFQUFFLENBQUM7SUEyR2hELENBQUM7SUF6R0M7O09BRUc7SUFDSCxTQUFTLENBQUMsSUFBWSxFQUFFLElBQWtCLEVBQUUsS0FBZTtRQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUFZLEVBQUUsSUFBZ0I7UUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FB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dkIsQ0FBQyxDQUFDO2FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFeHBvcnQvU2VyaWFsaXphdGlvbiBmb3IgU09OQSBNb2RlbHNcclxuICpcclxuICogU3VwcG9ydCBmb3IgU2FmZVRlbnNvcnMsIEpTT04sIGFuZCBvdGhlciBleHBvcnQgZm9ybWF0cy5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBpbXBvcnQgeyBNb2RlbEV4cG9ydGVyLCBTYWZlVGVuc29yc1dyaXRlciB9IGZyb20gJ0BydXZlY3Rvci9ydXZsbG0nO1xyXG4gKlxyXG4gKiAvLyBFeHBvcnQgbW9kZWwgdG8gU2FmZVRlbnNvcnMgZm9ybWF0XHJcbiAqIGNvbnN0IGV4cG9ydGVyID0gbmV3IE1vZGVsRXhwb3J0ZXIoKTtcclxuICogY29uc3QgYnVmZmVyID0gZXhwb3J0ZXIudG9TYWZlVGVuc29ycyh7XHJcbiAqICAgd2VpZ2h0czogbG9yYUFkYXB0ZXIuZ2V0V2VpZ2h0cygpLFxyXG4gKiAgIGNvbmZpZzogbG9yYUFkYXB0ZXIuZ2V0Q29uZmlnKCksXHJcbiAqIH0pO1xyXG4gKlxyXG4gKiAvLyBTYXZlIHRvIGZpbGVcclxuICogZnMud3JpdGVGaWxlU3luYygnbW9kZWwuc2FmZXRlbnNvcnMnLCBidWZmZXIpO1xyXG4gKiBgYGBcclxuICovXHJcblxyXG5pbXBvcnQgeyBMb1JBQ29uZmlnLCBMZWFybmVkUGF0dGVybiwgRXdjU3RhdHMsIEVtYmVkZGluZywgTW9kZWxNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBMb3JhV2VpZ2h0cyB9IGZyb20gJy4vbG9yYSc7XHJcblxyXG4vKipcclxuICogRXhwb3J0YWJsZSBtb2RlbCBkYXRhXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydGFibGVNb2RlbCB7XHJcbiAgLyoqIE1vZGVsIG1ldGFkYXRhICovXHJcbiAgbWV0YWRhdGE6IE1vZGVsTWV0YWRhdGE7XHJcbiAgLyoqIExvUkEgd2VpZ2h0cyAoaWYgYXBwbGljYWJsZSkgKi9cclxuICBsb3JhV2VpZ2h0cz86IExvcmFXZWlnaHRzO1xyXG4gIC8qKiBMb1JBIGNvbmZpZyAqL1xyXG4gIGxvcmFDb25maWc/OiBMb1JBQ29uZmlnO1xyXG4gIC8qKiBMZWFybmVkIHBhdHRlcm5zICovXHJcbiAgcGF0dGVybnM/OiBMZWFybmVkUGF0dGVybltdO1xyXG4gIC8qKiBFV0Mgc3RhdGlzdGljcyAqL1xyXG4gIGV3Y1N0YXRzPzogRXdjU3RhdHM7XHJcbiAgLyoqIFJhdyB0ZW5zb3JzICovXHJcbiAgdGVuc29ycz86IE1hcDxzdHJpbmcsIEZsb2F0MzJBcnJheT47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTYWZlVGVuc29ycyBoZWFkZXIgZW50cnlcclxuICovXHJcbmludGVyZmFjZSBTYWZlVGVuc29yc0hlYWRlciB7XHJcbiAgZHR5cGU6IHN0cmluZztcclxuICBzaGFwZTogbnVtYmVyW107XHJcbiAgZGF0YV9vZmZzZXRzOiBbbnVtYmVyLCBudW1iZXJdO1xyXG59XHJcblxyXG4vKipcclxuICogU2FmZVRlbnNvcnMgV3JpdGVyXHJcbiAqXHJcbiAqIFdyaXRlcyB0ZW5zb3JzIGluIFNhZmVUZW5zb3JzIGZvcm1hdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoXHJcbiAqIEh1Z2dpbmdGYWNlIGVjb3N5c3RlbS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBTYWZlVGVuc29yc1dyaXRlciB7XHJcbiAgcHJpdmF0ZSB0ZW5zb3JzOiBNYXA8c3RyaW5nLCB7IGRhdGE6IEZsb2F0MzJBcnJheTsgc2hhcGU6IG51bWJlcltdIH0+ID0gbmV3IE1hcCgpO1xyXG4gIHByaXZhdGUgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgdGVuc29yXHJcbiAgICovXHJcbiAgYWRkVGVuc29yKG5hbWU6IHN0cmluZywgZGF0YTogRmxvYXQzMkFycmF5LCBzaGFwZTogbnVtYmVyW10pOiB0aGlzIHtcclxuICAgIHRoaXMudGVuc29ycy5zZXQobmFtZSwgeyBkYXRhLCBzaGFwZSB9KTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIDJEIHRlbnNvciBmcm9tIG51bWJlciBhcnJheVxyXG4gICAqL1xyXG4gIGFkZDJEKG5hbWU6IHN0cmluZywgZGF0YTogbnVtYmVyW11bXSk6IHRoaXMge1xyXG4gICAgY29uc3Qgcm93cyA9IGRhdGEubGVuZ3RoO1xyXG4gICAgY29uc3QgY29scyA9IGRhdGFbMF0/Lmxlbmd0aCB8fCAwO1xyXG4gICAgY29uc3QgZmxhdCA9IG5ldyBGbG9hdDMyQXJyYXkocm93cyAqIGNvbHMpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sczsgaisrKSB7XHJcbiAgICAgICAgZmxhdFtpICogY29scyArIGpdID0gZGF0YVtpXVtqXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmFkZFRlbnNvcihuYW1lLCBmbGF0LCBbcm93cywgY29sc10pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIDFEIHRlbnNvciBmcm9tIG51bWJlciBhcnJheVxyXG4gICAqL1xyXG4gIGFkZDFEKG5hbWU6IHN0cmluZywgZGF0YTogbnVtYmVyW10pOiB0aGlzIHtcclxuICAgIHJldHVybiB0aGlzLmFkZFRlbnNvcihuYW1lLCBuZXcgRmxvYXQzMkFycmF5KGRhdGEpLCBbZGF0YS5sZW5ndGhdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBtZXRhZGF0YVxyXG4gICAqL1xyXG4gIGFkZE1ldGFkYXRhKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdGhpcyB7XHJcbiAgICB0aGlzLm1ldGFkYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGQgU2FmZVRlbnNvcnMgYnVmZmVyXHJcbiAgICovXHJcbiAgYnVpbGQoKTogVWludDhBcnJheSB7XHJcbiAgICAvLyBCdWlsZCBoZWFkZXJcclxuICAgIGNvbnN0IGhlYWRlcjogUmVjb3JkPHN0cmluZywgU2FmZVRlbnNvcnNIZWFkZXIgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHt9O1xyXG4gICAgbGV0IG9mZnNldCA9IDA7XHJcblxyXG4gICAgY29uc3QgdGVuc29yRGF0YTogVWludDhBcnJheVtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBbbmFtZSwgeyBkYXRhLCBzaGFwZSB9XSBvZiB0aGlzLnRlbnNvcnMpIHtcclxuICAgICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlcik7XHJcbiAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBieXRlcy5sZW5ndGg7XHJcblxyXG4gICAgICBoZWFkZXJbbmFtZV0gPSB7XHJcbiAgICAgICAgZHR5cGU6ICdGMzInLFxyXG4gICAgICAgIHNoYXBlLFxyXG4gICAgICAgIGRhdGFfb2Zmc2V0czogW29mZnNldCwgb2Zmc2V0ICsgZGF0YUxlbmd0aF0sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0ZW5zb3JEYXRhLnB1c2goYnl0ZXMpO1xyXG4gICAgICBvZmZzZXQgKz0gZGF0YUxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgbWV0YWRhdGFcclxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLm1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGhlYWRlclsnX19tZXRhZGF0YV9fJ10gPSB0aGlzLm1ldGFkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEVuY29kZSBoZWFkZXJcclxuICAgIGNvbnN0IGhlYWRlckpzb24gPSBKU09OLnN0cmluZ2lmeShoZWFkZXIpO1xyXG4gICAgY29uc3QgaGVhZGVyQnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoaGVhZGVySnNvbik7XHJcblxyXG4gICAgLy8gUGFkIGhlYWRlciB0byA4LWJ5dGUgYWxpZ25tZW50XHJcbiAgICBjb25zdCBoZWFkZXJQYWRkaW5nID0gKDggLSAoaGVhZGVyQnl0ZXMubGVuZ3RoICUgOCkpICUgODtcclxuICAgIGNvbnN0IHBhZGRlZEhlYWRlckxlbmd0aCA9IGhlYWRlckJ5dGVzLmxlbmd0aCArIGhlYWRlclBhZGRpbmc7XHJcblxyXG4gICAgLy8gQnVpbGQgZmluYWwgYnVmZmVyXHJcbiAgICBjb25zdCB0b3RhbExlbmd0aCA9IDggKyBwYWRkZWRIZWFkZXJMZW5ndGggKyBvZmZzZXQ7XHJcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh0b3RhbExlbmd0aCk7XHJcbiAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIpO1xyXG5cclxuICAgIC8vIFdyaXRlIGhlYWRlciBsZW5ndGggKDggYnl0ZXMsIGxpdHRsZS1lbmRpYW4pXHJcbiAgICB2aWV3LnNldEJpZ1VpbnQ2NCgwLCBCaWdJbnQocGFkZGVkSGVhZGVyTGVuZ3RoKSwgdHJ1ZSk7XHJcblxyXG4gICAgLy8gV3JpdGUgaGVhZGVyXHJcbiAgICBidWZmZXIuc2V0KGhlYWRlckJ5dGVzLCA4KTtcclxuXHJcbiAgICAvLyBXcml0ZSB0ZW5zb3IgZGF0YVxyXG4gICAgbGV0IGRhdGFPZmZzZXQgPSA4ICsgcGFkZGVkSGVhZGVyTGVuZ3RoO1xyXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIHRlbnNvckRhdGEpIHtcclxuICAgICAgYnVmZmVyLnNldChkYXRhLCBkYXRhT2Zmc2V0KTtcclxuICAgICAgZGF0YU9mZnNldCArPSBkYXRhLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYWxsIHRlbnNvcnMgYW5kIG1ldGFkYXRhXHJcbiAgICovXHJcbiAgY2xlYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRlbnNvcnMuY2xlYXIoKTtcclxuICAgIHRoaXMubWV0YWRhdGEgPSB7fTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTYWZlVGVuc29ycyBSZWFkZXJcclxuICpcclxuICogUmVhZHMgdGVuc29ycyBmcm9tIFNhZmVUZW5zb3JzIGZvcm1hdC5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBTYWZlVGVuc29yc1JlYWRlciB7XHJcbiAgcHJpdmF0ZSBidWZmZXI6IFVpbnQ4QXJyYXk7XHJcbiAgcHJpdmF0ZSBoZWFkZXI6IFJlY29yZDxzdHJpbmcsIFNhZmVUZW5zb3JzSGVhZGVyIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fTtcclxuICBwcml2YXRlIGRhdGFPZmZzZXQ6IG51bWJlciA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGJ1ZmZlcjogVWludDhBcnJheSkge1xyXG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XHJcbiAgICB0aGlzLnBhcnNlSGVhZGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGVuc29yIG5hbWVzXHJcbiAgICovXHJcbiAgZ2V0VGVuc29yTmFtZXMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaGVhZGVyKS5maWx0ZXIoayA9PiBrICE9PSAnX19tZXRhZGF0YV9fJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGVuc29yIGJ5IG5hbWVcclxuICAgKi9cclxuICBnZXRUZW5zb3IobmFtZTogc3RyaW5nKTogeyBkYXRhOiBGbG9hdDMyQXJyYXk7IHNoYXBlOiBudW1iZXJbXSB9IHwgbnVsbCB7XHJcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuaGVhZGVyW25hbWVdO1xyXG4gICAgaWYgKCFlbnRyeSB8fCB0eXBlb2YgZW50cnkgPT09ICdvYmplY3QnICYmICdkdHlwZScgaW4gZW50cnkgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRlbnNvckhlYWRlciA9IGVudHJ5IGFzIFNhZmVUZW5zb3JzSGVhZGVyO1xyXG4gICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gdGVuc29ySGVhZGVyLmRhdGFfb2Zmc2V0cztcclxuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5idWZmZXIuc2xpY2UodGhpcy5kYXRhT2Zmc2V0ICsgc3RhcnQsIHRoaXMuZGF0YU9mZnNldCArIGVuZCk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGF0YTogbmV3IEZsb2F0MzJBcnJheShieXRlcy5idWZmZXIsIGJ5dGVzLmJ5dGVPZmZzZXQsIGJ5dGVzLmxlbmd0aCAvIDQpLFxyXG4gICAgICBzaGFwZTogdGVuc29ySGVhZGVyLnNoYXBlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0ZW5zb3IgYXMgMkQgYXJyYXlcclxuICAgKi9cclxuICBnZXRUZW5zb3IyRChuYW1lOiBzdHJpbmcpOiBudW1iZXJbXVtdIHwgbnVsbCB7XHJcbiAgICBjb25zdCB0ZW5zb3IgPSB0aGlzLmdldFRlbnNvcihuYW1lKTtcclxuICAgIGlmICghdGVuc29yIHx8IHRlbnNvci5zaGFwZS5sZW5ndGggIT09IDIpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IFtyb3dzLCBjb2xzXSA9IHRlbnNvci5zaGFwZTtcclxuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyW11bXSA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHJvdzogbnVtYmVyW10gPSBbXTtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcclxuICAgICAgICByb3cucHVzaCh0ZW5zb3IuZGF0YVtpICogY29scyArIGpdKTtcclxuICAgICAgfVxyXG4gICAgICByZXN1bHQucHVzaChyb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGVuc29yIGFzIDFEIGFycmF5XHJcbiAgICovXHJcbiAgZ2V0VGVuc29yMUQobmFtZTogc3RyaW5nKTogbnVtYmVyW10gfCBudWxsIHtcclxuICAgIGNvbnN0IHRlbnNvciA9IHRoaXMuZ2V0VGVuc29yKG5hbWUpO1xyXG4gICAgaWYgKCF0ZW5zb3IpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIEFycmF5LmZyb20odGVuc29yLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IG1ldGFkYXRhXHJcbiAgICovXHJcbiAgZ2V0TWV0YWRhdGEoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICBjb25zdCBtZXRhID0gdGhpcy5oZWFkZXJbJ19fbWV0YWRhdGFfXyddO1xyXG4gICAgaWYgKCFtZXRhIHx8IHR5cGVvZiBtZXRhICE9PSAnb2JqZWN0JykgcmV0dXJuIHt9O1xyXG4gICAgcmV0dXJuIG1ldGEgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFyc2VIZWFkZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuYnVmZmVyLmJ1ZmZlciwgdGhpcy5idWZmZXIuYnl0ZU9mZnNldCk7XHJcbiAgICBjb25zdCBoZWFkZXJMZW5ndGggPSBOdW1iZXIodmlldy5nZXRCaWdVaW50NjQoMCwgdHJ1ZSkpO1xyXG5cclxuICAgIGNvbnN0IGhlYWRlckJ5dGVzID0gdGhpcy5idWZmZXIuc2xpY2UoOCwgOCArIGhlYWRlckxlbmd0aCk7XHJcbiAgICBjb25zdCBoZWFkZXJKc29uID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGhlYWRlckJ5dGVzKTtcclxuICAgIHRoaXMuaGVhZGVyID0gSlNPTi5wYXJzZShoZWFkZXJKc29uLnJlcGxhY2UoL1xcMCskLywgJycpKTsgLy8gUmVtb3ZlIHBhZGRpbmcgbnVsbHNcclxuXHJcbiAgICB0aGlzLmRhdGFPZmZzZXQgPSA4ICsgaGVhZGVyTGVuZ3RoO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE1vZGVsIEV4cG9ydGVyXHJcbiAqXHJcbiAqIFVuaWZpZWQgZXhwb3J0IGludGVyZmFjZSBmb3IgU09OQSBtb2RlbHMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTW9kZWxFeHBvcnRlciB7XHJcbiAgLyoqXHJcbiAgICogRXhwb3J0IHRvIFNhZmVUZW5zb3JzIGZvcm1hdFxyXG4gICAqL1xyXG4gIHRvU2FmZVRlbnNvcnMobW9kZWw6IEV4cG9ydGFibGVNb2RlbCk6IFVpbnQ4QXJyYXkge1xyXG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IFNhZmVUZW5zb3JzV3JpdGVyKCk7XHJcblxyXG4gICAgLy8gQWRkIG1ldGFkYXRhXHJcbiAgICB3cml0ZXIuYWRkTWV0YWRhdGEoJ25hbWUnLCBtb2RlbC5tZXRhZGF0YS5uYW1lKTtcclxuICAgIHdyaXRlci5hZGRNZXRhZGF0YSgndmVyc2lvbicsIG1vZGVsLm1ldGFkYXRhLnZlcnNpb24pO1xyXG4gICAgd3JpdGVyLmFkZE1ldGFkYXRhKCdhcmNoaXRlY3R1cmUnLCBtb2RlbC5tZXRhZGF0YS5hcmNoaXRlY3R1cmUpO1xyXG5cclxuICAgIGlmIChtb2RlbC5tZXRhZGF0YS50cmFpbmluZykge1xyXG4gICAgICB3cml0ZXIuYWRkTWV0YWRhdGEoJ3RyYWluaW5nX3N0ZXBzJywgU3RyaW5nKG1vZGVsLm1ldGFkYXRhLnRyYWluaW5nLnN0ZXBzKSk7XHJcbiAgICAgIHdyaXRlci5hZGRNZXRhZGF0YSgndHJhaW5pbmdfbG9zcycsIFN0cmluZyhtb2RlbC5tZXRhZGF0YS50cmFpbmluZy5sb3NzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIExvUkEgd2VpZ2h0c1xyXG4gICAgaWYgKG1vZGVsLmxvcmFXZWlnaHRzKSB7XHJcbiAgICAgIHdyaXRlci5hZGQyRCgnbG9yYS5BJywgbW9kZWwubG9yYVdlaWdodHMubG9yYUEpO1xyXG4gICAgICB3cml0ZXIuYWRkMkQoJ2xvcmEuQicsIG1vZGVsLmxvcmFXZWlnaHRzLmxvcmFCKTtcclxuICAgICAgd3JpdGVyLmFkZDFEKCdsb3JhLnNjYWxpbmcnLCBbbW9kZWwubG9yYVdlaWdodHMuc2NhbGluZ10pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCBwYXR0ZXJucyBhcyBlbWJlZGRpbmdzXHJcbiAgICBpZiAobW9kZWwucGF0dGVybnMgJiYgbW9kZWwucGF0dGVybnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBlbWJlZGRpbmdzOiBudW1iZXJbXVtdID0gbW9kZWwucGF0dGVybnMubWFwKHAgPT4gcC5lbWJlZGRpbmcpO1xyXG4gICAgICB3cml0ZXIuYWRkMkQoJ3BhdHRlcm5zLmVtYmVkZGluZ3MnLCBlbWJlZGRpbmdzKTtcclxuXHJcbiAgICAgIGNvbnN0IHN1Y2Nlc3NSYXRlcyA9IG1vZGVsLnBhdHRlcm5zLm1hcChwID0+IHAuc3VjY2Vzc1JhdGUpO1xyXG4gICAgICB3cml0ZXIuYWRkMUQoJ3BhdHRlcm5zLnN1Y2Nlc3NfcmF0ZXMnLCBzdWNjZXNzUmF0ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCByYXcgdGVuc29yc1xyXG4gICAgaWYgKG1vZGVsLnRlbnNvcnMpIHtcclxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgZGF0YV0gb2YgbW9kZWwudGVuc29ycykge1xyXG4gICAgICAgIHdyaXRlci5hZGRUZW5zb3IobmFtZSwgZGF0YSwgW2RhdGEubGVuZ3RoXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gd3JpdGVyLmJ1aWxkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgdG8gSlNPTiBmb3JtYXRcclxuICAgKi9cclxuICB0b0pTT04obW9kZWw6IEV4cG9ydGFibGVNb2RlbCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICBtZXRhZGF0YTogbW9kZWwubWV0YWRhdGEsXHJcbiAgICAgIGxvcmFDb25maWc6IG1vZGVsLmxvcmFDb25maWcsXHJcbiAgICAgIGxvcmFXZWlnaHRzOiBtb2RlbC5sb3JhV2VpZ2h0cyxcclxuICAgICAgcGF0dGVybnM6IG1vZGVsLnBhdHRlcm5zLFxyXG4gICAgICBld2NTdGF0czogbW9kZWwuZXdjU3RhdHMsXHJcbiAgICB9LCBudWxsLCAyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCB0byBjb21wYWN0IGJpbmFyeSBmb3JtYXRcclxuICAgKi9cclxuICB0b0JpbmFyeShtb2RlbDogRXhwb3J0YWJsZU1vZGVsKTogVWludDhBcnJheSB7XHJcbiAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04obW9kZWwpO1xyXG4gICAgY29uc3QganNvbkJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGpzb24pO1xyXG5cclxuICAgIC8vIFNpbXBsZSBmb3JtYXQ6IFs0LWJ5dGUgbGVuZ3RoXVtqc29uIGJ5dGVzXVxyXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoNCArIGpzb25CeXRlcy5sZW5ndGgpO1xyXG4gICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIuYnVmZmVyKTtcclxuICAgIHZpZXcuc2V0VWludDMyKDAsIGpzb25CeXRlcy5sZW5ndGgsIHRydWUpO1xyXG4gICAgYnVmZmVyLnNldChqc29uQnl0ZXMsIDQpO1xyXG5cclxuICAgIHJldHVybiBidWZmZXI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgZm9yIEh1Z2dpbmdGYWNlIEh1YiBjb21wYXRpYmlsaXR5XHJcbiAgICovXHJcbiAgdG9IdWdnaW5nRmFjZShtb2RlbDogRXhwb3J0YWJsZU1vZGVsKToge1xyXG4gICAgc2FmZXRlbnNvcnM6IFVpbnQ4QXJyYXk7XHJcbiAgICBjb25maWc6IHN0cmluZztcclxuICAgIHJlYWRtZTogc3RyaW5nO1xyXG4gIH0ge1xyXG4gICAgY29uc3Qgc2FmZXRlbnNvcnMgPSB0aGlzLnRvU2FmZVRlbnNvcnMobW9kZWwpO1xyXG5cclxuICAgIGNvbnN0IGNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgbW9kZWxfdHlwZTogJ3NvbmEtbG9yYScsXHJcbiAgICAgIC4uLm1vZGVsLm1ldGFkYXRhLFxyXG4gICAgICBsb3JhX2NvbmZpZzogbW9kZWwubG9yYUNvbmZpZyxcclxuICAgIH0sIG51bGwsIDIpO1xyXG5cclxuICAgIGNvbnN0IHJlYWRtZSA9IGAtLS1cclxubGljZW5zZTogbWl0XHJcbnRhZ3M6XHJcbi0gc29uYVxyXG4tIGxvcmFcclxuLSBydXZlY3RvclxyXG4tLS1cclxuXHJcbiMgJHttb2RlbC5tZXRhZGF0YS5uYW1lfVxyXG5cclxuJHttb2RlbC5tZXRhZGF0YS5hcmNoaXRlY3R1cmV9IG1vZGVsIHRyYWluZWQgd2l0aCBTT05BIGFkYXB0aXZlIGxlYXJuaW5nLlxyXG5cclxuIyMgVXNhZ2VcclxuXHJcblxcYFxcYFxcYHR5cGVzY3JpcHRcclxuaW1wb3J0IHsgTG9yYUFkYXB0ZXIsIFNhZmVUZW5zb3JzUmVhZGVyIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XHJcblxyXG5jb25zdCByZWFkZXIgPSBuZXcgU2FmZVRlbnNvcnNSZWFkZXIoYnVmZmVyKTtcclxuY29uc3QgYWRhcHRlciA9IG5ldyBMb3JhQWRhcHRlcigpO1xyXG5hZGFwdGVyLnNldFdlaWdodHMoe1xyXG4gIGxvcmFBOiByZWFkZXIuZ2V0VGVuc29yMkQoJ2xvcmEuQScpLFxyXG4gIGxvcmFCOiByZWFkZXIuZ2V0VGVuc29yMkQoJ2xvcmEuQicpLFxyXG4gIHNjYWxpbmc6IHJlYWRlci5nZXRUZW5zb3IxRCgnbG9yYS5zY2FsaW5nJylbMF0sXHJcbn0pO1xyXG5cXGBcXGBcXGBcclxuXHJcbiMjIFRyYWluaW5nIEluZm9cclxuXHJcbi0gU3RlcHM6ICR7bW9kZWwubWV0YWRhdGEudHJhaW5pbmc/LnN0ZXBzIHx8ICdOL0EnfVxyXG4tIEZpbmFsIExvc3M6ICR7bW9kZWwubWV0YWRhdGEudHJhaW5pbmc/Lmxvc3MgfHwgJ04vQSd9XHJcbmA7XHJcblxyXG4gICAgcmV0dXJuIHsgc2FmZXRlbnNvcnMsIGNvbmZpZywgcmVhZG1lIH07XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogTW9kZWwgSW1wb3J0ZXJcclxuICpcclxuICogSW1wb3J0IG1vZGVscyBmcm9tIHZhcmlvdXMgZm9ybWF0cy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBNb2RlbEltcG9ydGVyIHtcclxuICAvKipcclxuICAgKiBJbXBvcnQgZnJvbSBTYWZlVGVuc29ycyBmb3JtYXRcclxuICAgKi9cclxuICBmcm9tU2FmZVRlbnNvcnMoYnVmZmVyOiBVaW50OEFycmF5KTogUGFydGlhbDxFeHBvcnRhYmxlTW9kZWw+IHtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBTYWZlVGVuc29yc1JlYWRlcihidWZmZXIpO1xyXG4gICAgY29uc3QgbWV0YWRhdGEgPSByZWFkZXIuZ2V0TWV0YWRhdGEoKTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQ6IFBhcnRpYWw8RXhwb3J0YWJsZU1vZGVsPiA9IHtcclxuICAgICAgbWV0YWRhdGE6IHtcclxuICAgICAgICBuYW1lOiBtZXRhZGF0YS5uYW1lIHx8ICd1bmtub3duJyxcclxuICAgICAgICB2ZXJzaW9uOiBtZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAuMCcsXHJcbiAgICAgICAgYXJjaGl0ZWN0dXJlOiBtZXRhZGF0YS5hcmNoaXRlY3R1cmUgfHwgJ3NvbmEtbG9yYScsXHJcbiAgICAgICAgdHJhaW5pbmc6IG1ldGFkYXRhLnRyYWluaW5nX3N0ZXBzID8ge1xyXG4gICAgICAgICAgc3RlcHM6IHBhcnNlSW50KG1ldGFkYXRhLnRyYWluaW5nX3N0ZXBzKSxcclxuICAgICAgICAgIGxvc3M6IHBhcnNlRmxvYXQobWV0YWRhdGEudHJhaW5pbmdfbG9zcyB8fCAnMCcpLFxyXG4gICAgICAgICAgbGVhcm5pbmdSYXRlOiAwLFxyXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIExvYWQgTG9SQSB3ZWlnaHRzXHJcbiAgICBjb25zdCBsb3JhQSA9IHJlYWRlci5nZXRUZW5zb3IyRCgnbG9yYS5BJyk7XHJcbiAgICBjb25zdCBsb3JhQiA9IHJlYWRlci5nZXRUZW5zb3IyRCgnbG9yYS5CJyk7XHJcbiAgICBjb25zdCBsb3JhU2NhbGluZyA9IHJlYWRlci5nZXRUZW5zb3IxRCgnbG9yYS5zY2FsaW5nJyk7XHJcblxyXG4gICAgaWYgKGxvcmFBICYmIGxvcmFCICYmIGxvcmFTY2FsaW5nKSB7XHJcbiAgICAgIHJlc3VsdC5sb3JhV2VpZ2h0cyA9IHtcclxuICAgICAgICBsb3JhQSxcclxuICAgICAgICBsb3JhQixcclxuICAgICAgICBzY2FsaW5nOiBsb3JhU2NhbGluZ1swXSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBMb2FkIHBhdHRlcm5zXHJcbiAgICBjb25zdCBwYXR0ZXJuRW1iZWRkaW5ncyA9IHJlYWRlci5nZXRUZW5zb3IyRCgncGF0dGVybnMuZW1iZWRkaW5ncycpO1xyXG4gICAgY29uc3QgcGF0dGVyblJhdGVzID0gcmVhZGVyLmdldFRlbnNvcjFEKCdwYXR0ZXJucy5zdWNjZXNzX3JhdGVzJyk7XHJcblxyXG4gICAgaWYgKHBhdHRlcm5FbWJlZGRpbmdzICYmIHBhdHRlcm5SYXRlcykge1xyXG4gICAgICByZXN1bHQucGF0dGVybnMgPSBwYXR0ZXJuRW1iZWRkaW5ncy5tYXAoKGVtYmVkZGluZywgaSkgPT4gKHtcclxuICAgICAgICBpZDogYGltcG9ydGVkLSR7aX1gLFxyXG4gICAgICAgIHR5cGU6ICdxdWVyeV9yZXNwb25zZScgYXMgY29uc3QsXHJcbiAgICAgICAgZW1iZWRkaW5nLFxyXG4gICAgICAgIHN1Y2Nlc3NSYXRlOiBwYXR0ZXJuUmF0ZXNbaV0gfHwgMCxcclxuICAgICAgICB1c2VDb3VudDogMCxcclxuICAgICAgICBsYXN0VXNlZDogbmV3IERhdGUoKSxcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvcnQgZnJvbSBKU09OIGZvcm1hdFxyXG4gICAqL1xyXG4gIGZyb21KU09OKGpzb246IHN0cmluZyk6IFBhcnRpYWw8RXhwb3J0YWJsZU1vZGVsPiB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9ydCBmcm9tIGJpbmFyeSBmb3JtYXRcclxuICAgKi9cclxuICBmcm9tQmluYXJ5KGJ1ZmZlcjogVWludDhBcnJheSk6IFBhcnRpYWw8RXhwb3J0YWJsZU1vZGVsPiB7XHJcbiAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0KTtcclxuICAgIGNvbnN0IGxlbmd0aCA9IHZpZXcuZ2V0VWludDMyKDAsIHRydWUpO1xyXG4gICAgY29uc3QganNvbkJ5dGVzID0gYnVmZmVyLnNsaWNlKDQsIDQgKyBsZW5ndGgpO1xyXG4gICAgY29uc3QganNvbiA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShqc29uQnl0ZXMpO1xyXG4gICAgcmV0dXJuIHRoaXMuZnJvbUpTT04oanNvbik7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRGF0YXNldCBFeHBvcnRlclxyXG4gKlxyXG4gKiBFeHBvcnQgdHJhaW5pbmcgZGF0YSBpbiB2YXJpb3VzIGZvcm1hdHMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRGF0YXNldEV4cG9ydGVyIHtcclxuICAvKipcclxuICAgKiBFeHBvcnQgdG8gSlNPTkwgZm9ybWF0IChvbmUgSlNPTiBwZXIgbGluZSlcclxuICAgKi9cclxuICB0b0pTT05MKGRhdGE6IEFycmF5PHsgaW5wdXQ6IEVtYmVkZGluZzsgb3V0cHV0OiBFbWJlZGRpbmc7IHF1YWxpdHk6IG51bWJlciB9Pik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZGF0YVxyXG4gICAgICAubWFwKGl0ZW0gPT4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgIGlucHV0OiBpdGVtLmlucHV0LFxyXG4gICAgICAgIG91dHB1dDogaXRlbS5vdXRwdXQsXHJcbiAgICAgICAgcXVhbGl0eTogaXRlbS5xdWFsaXR5LFxyXG4gICAgICB9KSlcclxuICAgICAgLmpvaW4oJ1xcbicpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwb3J0IHRvIENTViBmb3JtYXRcclxuICAgKi9cclxuICB0b0NTVihkYXRhOiBBcnJheTx7IGlucHV0OiBFbWJlZGRpbmc7IG91dHB1dDogRW1iZWRkaW5nOyBxdWFsaXR5OiBudW1iZXIgfT4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgaGVhZGVyID0gJ3F1YWxpdHksaW5wdXQsb3V0cHV0JztcclxuICAgIGNvbnN0IHJvd3MgPSBkYXRhLm1hcChpdGVtID0+XHJcbiAgICAgIGAke2l0ZW0ucXVhbGl0eX0sXCIke2l0ZW0uaW5wdXQuam9pbignLCcpfVwiLFwiJHtpdGVtLm91dHB1dC5qb2luKCcsJyl9XCJgXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIFtoZWFkZXIsIC4uLnJvd3NdLmpvaW4oJ1xcbicpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwb3J0IHBhdHRlcm5zIGZvciBwcmUtdHJhaW5pbmdcclxuICAgKi9cclxuICB0b1ByZXRyYWluKHBhdHRlcm5zOiBMZWFybmVkUGF0dGVybltdKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBwYXR0ZXJuc1xyXG4gICAgICAuZmlsdGVyKHAgPT4gcC5zdWNjZXNzUmF0ZSA+PSAwLjcpXHJcbiAgICAgIC5tYXAocCA9PiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgZW1iZWRkaW5nOiBwLmVtYmVkZGluZyxcclxuICAgICAgICB0eXBlOiBwLnR5cGUsXHJcbiAgICAgICAgcXVhbGl0eTogcC5zdWNjZXNzUmF0ZSxcclxuICAgICAgfSkpXHJcbiAgICAgIC5qb2luKCdcXG4nKTtcclxuICB9XHJcbn1cclxuIl19
414
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQWdDSDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFBOUI7UUFDVSxZQUFPLEdBQXlELElBQUksR0FBRyxFQUFFLENBQUM7UUFDMUUsYUFBUSxHQUEyQixFQUFFLENBQUM7SUEyR2hELENBQUM7SUF6R0M7O09BRUc7SUFDSCxTQUFTLENBQUMsSUFBWSxFQUFFLElBQWtCLEVBQUUsS0FBZTtRQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUFZLEVBQUUsSUFBZ0I7UUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FB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dkIsQ0FBQyxDQUFDO2FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXhwb3J0L1NlcmlhbGl6YXRpb24gZm9yIFNPTkEgTW9kZWxzXG4gKlxuICogU3VwcG9ydCBmb3IgU2FmZVRlbnNvcnMsIEpTT04sIGFuZCBvdGhlciBleHBvcnQgZm9ybWF0cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgTW9kZWxFeHBvcnRlciwgU2FmZVRlbnNvcnNXcml0ZXIgfSBmcm9tICdAcnV2ZWN0b3IvcnV2bGxtJztcbiAqXG4gKiAvLyBFeHBvcnQgbW9kZWwgdG8gU2FmZVRlbnNvcnMgZm9ybWF0XG4gKiBjb25zdCBleHBvcnRlciA9IG5ldyBNb2RlbEV4cG9ydGVyKCk7XG4gKiBjb25zdCBidWZmZXIgPSBleHBvcnRlci50b1NhZmVUZW5zb3JzKHtcbiAqICAgd2VpZ2h0czogbG9yYUFkYXB0ZXIuZ2V0V2VpZ2h0cygpLFxuICogICBjb25maWc6IGxvcmFBZGFwdGVyLmdldENvbmZpZygpLFxuICogfSk7XG4gKlxuICogLy8gU2F2ZSB0byBmaWxlXG4gKiBmcy53cml0ZUZpbGVTeW5jKCdtb2RlbC5zYWZldGVuc29ycycsIGJ1ZmZlcik7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBMb1JBQ29uZmlnLCBMZWFybmVkUGF0dGVybiwgRXdjU3RhdHMsIEVtYmVkZGluZywgTW9kZWxNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgTG9yYVdlaWdodHMgfSBmcm9tICcuL2xvcmEnO1xuXG4vKipcbiAqIEV4cG9ydGFibGUgbW9kZWwgZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydGFibGVNb2RlbCB7XG4gIC8qKiBNb2RlbCBtZXRhZGF0YSAqL1xuICBtZXRhZGF0YTogTW9kZWxNZXRhZGF0YTtcbiAgLyoqIExvUkEgd2VpZ2h0cyAoaWYgYXBwbGljYWJsZSkgKi9cbiAgbG9yYVdlaWdodHM/OiBMb3JhV2VpZ2h0cztcbiAgLyoqIExvUkEgY29uZmlnICovXG4gIGxvcmFDb25maWc/OiBMb1JBQ29uZmlnO1xuICAvKiogTGVhcm5lZCBwYXR0ZXJucyAqL1xuICBwYXR0ZXJucz86IExlYXJuZWRQYXR0ZXJuW107XG4gIC8qKiBFV0Mgc3RhdGlzdGljcyAqL1xuICBld2NTdGF0cz86IEV3Y1N0YXRzO1xuICAvKiogUmF3IHRlbnNvcnMgKi9cbiAgdGVuc29ycz86IE1hcDxzdHJpbmcsIEZsb2F0MzJBcnJheT47XG59XG5cbi8qKlxuICogU2FmZVRlbnNvcnMgaGVhZGVyIGVudHJ5XG4gKi9cbmludGVyZmFjZSBTYWZlVGVuc29yc0hlYWRlciB7XG4gIGR0eXBlOiBzdHJpbmc7XG4gIHNoYXBlOiBudW1iZXJbXTtcbiAgZGF0YV9vZmZzZXRzOiBbbnVtYmVyLCBudW1iZXJdO1xufVxuXG4vKipcbiAqIFNhZmVUZW5zb3JzIFdyaXRlclxuICpcbiAqIFdyaXRlcyB0ZW5zb3JzIGluIFNhZmVUZW5zb3JzIGZvcm1hdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoXG4gKiBIdWdnaW5nRmFjZSBlY29zeXN0ZW0uXG4gKi9cbmV4cG9ydCBjbGFzcyBTYWZlVGVuc29yc1dyaXRlciB7XG4gIHByaXZhdGUgdGVuc29yczogTWFwPHN0cmluZywgeyBkYXRhOiBGbG9hdDMyQXJyYXk7IHNoYXBlOiBudW1iZXJbXSB9PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIC8qKlxuICAgKiBBZGQgYSB0ZW5zb3JcbiAgICovXG4gIGFkZFRlbnNvcihuYW1lOiBzdHJpbmcsIGRhdGE6IEZsb2F0MzJBcnJheSwgc2hhcGU6IG51bWJlcltdKTogdGhpcyB7XG4gICAgdGhpcy50ZW5zb3JzLnNldChuYW1lLCB7IGRhdGEsIHNoYXBlIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCAyRCB0ZW5zb3IgZnJvbSBudW1iZXIgYXJyYXlcbiAgICovXG4gIGFkZDJEKG5hbWU6IHN0cmluZywgZGF0YTogbnVtYmVyW11bXSk6IHRoaXMge1xuICAgIGNvbnN0IHJvd3MgPSBkYXRhLmxlbmd0aDtcbiAgICBjb25zdCBjb2xzID0gZGF0YVswXT8ubGVuZ3RoIHx8IDA7XG4gICAgY29uc3QgZmxhdCA9IG5ldyBGbG9hdDMyQXJyYXkocm93cyAqIGNvbHMpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sczsgaisrKSB7XG4gICAgICAgIGZsYXRbaSAqIGNvbHMgKyBqXSA9IGRhdGFbaV1bal07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWRkVGVuc29yKG5hbWUsIGZsYXQsIFtyb3dzLCBjb2xzXSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIDFEIHRlbnNvciBmcm9tIG51bWJlciBhcnJheVxuICAgKi9cbiAgYWRkMUQobmFtZTogc3RyaW5nLCBkYXRhOiBudW1iZXJbXSk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZFRlbnNvcihuYW1lLCBuZXcgRmxvYXQzMkFycmF5KGRhdGEpLCBbZGF0YS5sZW5ndGhdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbWV0YWRhdGFcbiAgICovXG4gIGFkZE1ldGFkYXRhKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5tZXRhZGF0YVtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgU2FmZVRlbnNvcnMgYnVmZmVyXG4gICAqL1xuICBidWlsZCgpOiBVaW50OEFycmF5IHtcbiAgICAvLyBCdWlsZCBoZWFkZXJcbiAgICBjb25zdCBoZWFkZXI6IFJlY29yZDxzdHJpbmcsIFNhZmVUZW5zb3JzSGVhZGVyIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcblxuICAgIGNvbnN0IHRlbnNvckRhdGE6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgeyBkYXRhLCBzaGFwZSB9XSBvZiB0aGlzLnRlbnNvcnMpIHtcbiAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIpO1xuICAgICAgY29uc3QgZGF0YUxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcblxuICAgICAgaGVhZGVyW25hbWVdID0ge1xuICAgICAgICBkdHlwZTogJ0YzMicsXG4gICAgICAgIHNoYXBlLFxuICAgICAgICBkYXRhX29mZnNldHM6IFtvZmZzZXQsIG9mZnNldCArIGRhdGFMZW5ndGhdLFxuICAgICAgfTtcblxuICAgICAgdGVuc29yRGF0YS5wdXNoKGJ5dGVzKTtcbiAgICAgIG9mZnNldCArPSBkYXRhTGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRhZGF0YVxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLm1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICBoZWFkZXJbJ19fbWV0YWRhdGFfXyddID0gdGhpcy5tZXRhZGF0YTtcbiAgICB9XG5cbiAgICAvLyBFbmNvZGUgaGVhZGVyXG4gICAgY29uc3QgaGVhZGVySnNvbiA9IEpTT04uc3RyaW5naWZ5KGhlYWRlcik7XG4gICAgY29uc3QgaGVhZGVyQnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoaGVhZGVySnNvbik7XG5cbiAgICAvLyBQYWQgaGVhZGVyIHRvIDgtYnl0ZSBhbGlnbm1lbnRcbiAgICBjb25zdCBoZWFkZXJQYWRkaW5nID0gKDggLSAoaGVhZGVyQnl0ZXMubGVuZ3RoICUgOCkpICUgODtcbiAgICBjb25zdCBwYWRkZWRIZWFkZXJMZW5ndGggPSBoZWFkZXJCeXRlcy5sZW5ndGggKyBoZWFkZXJQYWRkaW5nO1xuXG4gICAgLy8gQnVpbGQgZmluYWwgYnVmZmVyXG4gICAgY29uc3QgdG90YWxMZW5ndGggPSA4ICsgcGFkZGVkSGVhZGVyTGVuZ3RoICsgb2Zmc2V0O1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTtcbiAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIpO1xuXG4gICAgLy8gV3JpdGUgaGVhZGVyIGxlbmd0aCAoOCBieXRlcywgbGl0dGxlLWVuZGlhbilcbiAgICB2aWV3LnNldEJpZ1VpbnQ2NCgwLCBCaWdJbnQocGFkZGVkSGVhZGVyTGVuZ3RoKSwgdHJ1ZSk7XG5cbiAgICAvLyBXcml0ZSBoZWFkZXJcbiAgICBidWZmZXIuc2V0KGhlYWRlckJ5dGVzLCA4KTtcblxuICAgIC8vIFdyaXRlIHRlbnNvciBkYXRhXG4gICAgbGV0IGRhdGFPZmZzZXQgPSA4ICsgcGFkZGVkSGVhZGVyTGVuZ3RoO1xuICAgIGZvciAoY29uc3QgZGF0YSBvZiB0ZW5zb3JEYXRhKSB7XG4gICAgICBidWZmZXIuc2V0KGRhdGEsIGRhdGFPZmZzZXQpO1xuICAgICAgZGF0YU9mZnNldCArPSBkYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCB0ZW5zb3JzIGFuZCBtZXRhZGF0YVxuICAgKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy50ZW5zb3JzLmNsZWFyKCk7XG4gICAgdGhpcy5tZXRhZGF0YSA9IHt9O1xuICB9XG59XG5cbi8qKlxuICogU2FmZVRlbnNvcnMgUmVhZGVyXG4gKlxuICogUmVhZHMgdGVuc29ycyBmcm9tIFNhZmVUZW5zb3JzIGZvcm1hdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNhZmVUZW5zb3JzUmVhZGVyIHtcbiAgcHJpdmF0ZSBidWZmZXI6IFVpbnQ4QXJyYXk7XG4gIHByaXZhdGUgaGVhZGVyOiBSZWNvcmQ8c3RyaW5nLCBTYWZlVGVuc29yc0hlYWRlciB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge307XG4gIHByaXZhdGUgZGF0YU9mZnNldDogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihidWZmZXI6IFVpbnQ4QXJyYXkpIHtcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICB0aGlzLnBhcnNlSGVhZGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRlbnNvciBuYW1lc1xuICAgKi9cbiAgZ2V0VGVuc29yTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmhlYWRlcikuZmlsdGVyKGsgPT4gayAhPT0gJ19fbWV0YWRhdGFfXycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0ZW5zb3IgYnkgbmFtZVxuICAgKi9cbiAgZ2V0VGVuc29yKG5hbWU6IHN0cmluZyk6IHsgZGF0YTogRmxvYXQzMkFycmF5OyBzaGFwZTogbnVtYmVyW10gfSB8IG51bGwge1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5oZWFkZXJbbmFtZV07XG4gICAgaWYgKCFlbnRyeSB8fCB0eXBlb2YgZW50cnkgPT09ICdvYmplY3QnICYmICdkdHlwZScgaW4gZW50cnkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW5zb3JIZWFkZXIgPSBlbnRyeSBhcyBTYWZlVGVuc29yc0hlYWRlcjtcbiAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0ZW5zb3JIZWFkZXIuZGF0YV9vZmZzZXRzO1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5idWZmZXIuc2xpY2UodGhpcy5kYXRhT2Zmc2V0ICsgc3RhcnQsIHRoaXMuZGF0YU9mZnNldCArIGVuZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogbmV3IEZsb2F0MzJBcnJheShieXRlcy5idWZmZXIsIGJ5dGVzLmJ5dGVPZmZzZXQsIGJ5dGVzLmxlbmd0aCAvIDQpLFxuICAgICAgc2hhcGU6IHRlbnNvckhlYWRlci5zaGFwZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0ZW5zb3IgYXMgMkQgYXJyYXlcbiAgICovXG4gIGdldFRlbnNvcjJEKG5hbWU6IHN0cmluZyk6IG51bWJlcltdW10gfCBudWxsIHtcbiAgICBjb25zdCB0ZW5zb3IgPSB0aGlzLmdldFRlbnNvcihuYW1lKTtcbiAgICBpZiAoIXRlbnNvciB8fCB0ZW5zb3Iuc2hhcGUubGVuZ3RoICE9PSAyKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IFtyb3dzLCBjb2xzXSA9IHRlbnNvci5zaGFwZTtcbiAgICBjb25zdCByZXN1bHQ6IG51bWJlcltdW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBjb25zdCByb3c6IG51bWJlcltdID0gW107XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgICAgICByb3cucHVzaCh0ZW5zb3IuZGF0YVtpICogY29scyArIGpdKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHJvdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGVuc29yIGFzIDFEIGFycmF5XG4gICAqL1xuICBnZXRUZW5zb3IxRChuYW1lOiBzdHJpbmcpOiBudW1iZXJbXSB8IG51bGwge1xuICAgIGNvbnN0IHRlbnNvciA9IHRoaXMuZ2V0VGVuc29yKG5hbWUpO1xuICAgIGlmICghdGVuc29yKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0ZW5zb3IuZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1ldGFkYXRhXG4gICAqL1xuICBnZXRNZXRhZGF0YSgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5oZWFkZXJbJ19fbWV0YWRhdGFfXyddO1xuICAgIGlmICghbWV0YSB8fCB0eXBlb2YgbWV0YSAhPT0gJ29iamVjdCcpIHJldHVybiB7fTtcbiAgICByZXR1cm4gbWV0YSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUhlYWRlcigpOiB2b2lkIHtcbiAgICBjb25zdCB2aWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuYnVmZmVyLmJ1ZmZlciwgdGhpcy5idWZmZXIuYnl0ZU9mZnNldCk7XG4gICAgY29uc3QgaGVhZGVyTGVuZ3RoID0gTnVtYmVyKHZpZXcuZ2V0QmlnVWludDY0KDAsIHRydWUpKTtcblxuICAgIGNvbnN0IGhlYWRlckJ5dGVzID0gdGhpcy5idWZmZXIuc2xpY2UoOCwgOCArIGhlYWRlckxlbmd0aCk7XG4gICAgY29uc3QgaGVhZGVySnNvbiA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShoZWFkZXJCeXRlcyk7XG4gICAgdGhpcy5oZWFkZXIgPSBKU09OLnBhcnNlKGhlYWRlckpzb24ucmVwbGFjZSgvXFwwKyQvLCAnJykpOyAvLyBSZW1vdmUgcGFkZGluZyBudWxsc1xuXG4gICAgdGhpcy5kYXRhT2Zmc2V0ID0gOCArIGhlYWRlckxlbmd0aDtcbiAgfVxufVxuXG4vKipcbiAqIE1vZGVsIEV4cG9ydGVyXG4gKlxuICogVW5pZmllZCBleHBvcnQgaW50ZXJmYWNlIGZvciBTT05BIG1vZGVscy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGVsRXhwb3J0ZXIge1xuICAvKipcbiAgICogRXhwb3J0IHRvIFNhZmVUZW5zb3JzIGZvcm1hdFxuICAgKi9cbiAgdG9TYWZlVGVuc29ycyhtb2RlbDogRXhwb3J0YWJsZU1vZGVsKTogVWludDhBcnJheSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IFNhZmVUZW5zb3JzV3JpdGVyKCk7XG5cbiAgICAvLyBBZGQgbWV0YWRhdGFcbiAgICB3cml0ZXIuYWRkTWV0YWRhdGEoJ25hbWUnLCBtb2RlbC5tZXRhZGF0YS5uYW1lKTtcbiAgICB3cml0ZXIuYWRkTWV0YWRhdGEoJ3ZlcnNpb24nLCBtb2RlbC5tZXRhZGF0YS52ZXJzaW9uKTtcbiAgICB3cml0ZXIuYWRkTWV0YWRhdGEoJ2FyY2hpdGVjdHVyZScsIG1vZGVsLm1ldGFkYXRhLmFyY2hpdGVjdHVyZSk7XG5cbiAgICBpZiAobW9kZWwubWV0YWRhdGEudHJhaW5pbmcpIHtcbiAgICAgIHdyaXRlci5hZGRNZXRhZGF0YSgndHJhaW5pbmdfc3RlcHMnLCBTdHJpbmcobW9kZWwubWV0YWRhdGEudHJhaW5pbmcuc3RlcHMpKTtcbiAgICAgIHdyaXRlci5hZGRNZXRhZGF0YSgndHJhaW5pbmdfbG9zcycsIFN0cmluZyhtb2RlbC5tZXRhZGF0YS50cmFpbmluZy5sb3NzKSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIExvUkEgd2VpZ2h0c1xuICAgIGlmIChtb2RlbC5sb3JhV2VpZ2h0cykge1xuICAgICAgd3JpdGVyLmFkZDJEKCdsb3JhLkEnLCBtb2RlbC5sb3JhV2VpZ2h0cy5sb3JhQSk7XG4gICAgICB3cml0ZXIuYWRkMkQoJ2xvcmEuQicsIG1vZGVsLmxvcmFXZWlnaHRzLmxvcmFCKTtcbiAgICAgIHdyaXRlci5hZGQxRCgnbG9yYS5zY2FsaW5nJywgW21vZGVsLmxvcmFXZWlnaHRzLnNjYWxpbmddKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcGF0dGVybnMgYXMgZW1iZWRkaW5nc1xuICAgIGlmIChtb2RlbC5wYXR0ZXJucyAmJiBtb2RlbC5wYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBlbWJlZGRpbmdzOiBudW1iZXJbXVtdID0gbW9kZWwucGF0dGVybnMubWFwKHAgPT4gcC5lbWJlZGRpbmcpO1xuICAgICAgd3JpdGVyLmFkZDJEKCdwYXR0ZXJucy5lbWJlZGRpbmdzJywgZW1iZWRkaW5ncyk7XG5cbiAgICAgIGNvbnN0IHN1Y2Nlc3NSYXRlcyA9IG1vZGVsLnBhdHRlcm5zLm1hcChwID0+IHAuc3VjY2Vzc1JhdGUpO1xuICAgICAgd3JpdGVyLmFkZDFEKCdwYXR0ZXJucy5zdWNjZXNzX3JhdGVzJywgc3VjY2Vzc1JhdGVzKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmF3IHRlbnNvcnNcbiAgICBpZiAobW9kZWwudGVuc29ycykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgZGF0YV0gb2YgbW9kZWwudGVuc29ycykge1xuICAgICAgICB3cml0ZXIuYWRkVGVuc29yKG5hbWUsIGRhdGEsIFtkYXRhLmxlbmd0aF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB3cml0ZXIuYnVpbGQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gSlNPTiBmb3JtYXRcbiAgICovXG4gIHRvSlNPTihtb2RlbDogRXhwb3J0YWJsZU1vZGVsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgbWV0YWRhdGE6IG1vZGVsLm1ldGFkYXRhLFxuICAgICAgbG9yYUNvbmZpZzogbW9kZWwubG9yYUNvbmZpZyxcbiAgICAgIGxvcmFXZWlnaHRzOiBtb2RlbC5sb3JhV2VpZ2h0cyxcbiAgICAgIHBhdHRlcm5zOiBtb2RlbC5wYXR0ZXJucyxcbiAgICAgIGV3Y1N0YXRzOiBtb2RlbC5ld2NTdGF0cyxcbiAgICB9LCBudWxsLCAyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gY29tcGFjdCBiaW5hcnkgZm9ybWF0XG4gICAqL1xuICB0b0JpbmFyeShtb2RlbDogRXhwb3J0YWJsZU1vZGVsKTogVWludDhBcnJheSB7XG4gICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKG1vZGVsKTtcbiAgICBjb25zdCBqc29uQnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoanNvbik7XG5cbiAgICAvLyBTaW1wbGUgZm9ybWF0OiBbNC1ieXRlIGxlbmd0aF1banNvbiBieXRlc11cbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSg0ICsganNvbkJ5dGVzLmxlbmd0aCk7XG4gICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIuYnVmZmVyKTtcbiAgICB2aWV3LnNldFVpbnQzMigwLCBqc29uQnl0ZXMubGVuZ3RoLCB0cnVlKTtcbiAgICBidWZmZXIuc2V0KGpzb25CeXRlcywgNCk7XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBmb3IgSHVnZ2luZ0ZhY2UgSHViIGNvbXBhdGliaWxpdHlcbiAgICovXG4gIHRvSHVnZ2luZ0ZhY2UobW9kZWw6IEV4cG9ydGFibGVNb2RlbCk6IHtcbiAgICBzYWZldGVuc29yczogVWludDhBcnJheTtcbiAgICBjb25maWc6IHN0cmluZztcbiAgICByZWFkbWU6IHN0cmluZztcbiAgfSB7XG4gICAgY29uc3Qgc2FmZXRlbnNvcnMgPSB0aGlzLnRvU2FmZVRlbnNvcnMobW9kZWwpO1xuXG4gICAgY29uc3QgY29uZmlnID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgbW9kZWxfdHlwZTogJ3NvbmEtbG9yYScsXG4gICAgICAuLi5tb2RlbC5tZXRhZGF0YSxcbiAgICAgIGxvcmFfY29uZmlnOiBtb2RlbC5sb3JhQ29uZmlnLFxuICAgIH0sIG51bGwsIDIpO1xuXG4gICAgY29uc3QgcmVhZG1lID0gYC0tLVxubGljZW5zZTogbWl0XG50YWdzOlxuLSBzb25hXG4tIGxvcmFcbi0gcnV2ZWN0b3Jcbi0tLVxuXG4jICR7bW9kZWwubWV0YWRhdGEubmFtZX1cblxuJHttb2RlbC5tZXRhZGF0YS5hcmNoaXRlY3R1cmV9IG1vZGVsIHRyYWluZWQgd2l0aCBTT05BIGFkYXB0aXZlIGxlYXJuaW5nLlxuXG4jIyBVc2FnZVxuXG5cXGBcXGBcXGB0eXBlc2NyaXB0XG5pbXBvcnQgeyBMb3JhQWRhcHRlciwgU2FmZVRlbnNvcnNSZWFkZXIgfSBmcm9tICdAcnV2ZWN0b3IvcnV2bGxtJztcblxuY29uc3QgcmVhZGVyID0gbmV3IFNhZmVUZW5zb3JzUmVhZGVyKGJ1ZmZlcik7XG5jb25zdCBhZGFwdGVyID0gbmV3IExvcmFBZGFwdGVyKCk7XG5hZGFwdGVyLnNldFdlaWdodHMoe1xuICBsb3JhQTogcmVhZGVyLmdldFRlbnNvcjJEKCdsb3JhLkEnKSxcbiAgbG9yYUI6IHJlYWRlci5nZXRUZW5zb3IyRCgnbG9yYS5CJyksXG4gIHNjYWxpbmc6IHJlYWRlci5nZXRUZW5zb3IxRCgnbG9yYS5zY2FsaW5nJylbMF0sXG59KTtcblxcYFxcYFxcYFxuXG4jIyBUcmFpbmluZyBJbmZvXG5cbi0gU3RlcHM6ICR7bW9kZWwubWV0YWRhdGEudHJhaW5pbmc/LnN0ZXBzIHx8ICdOL0EnfVxuLSBGaW5hbCBMb3NzOiAke21vZGVsLm1ldGFkYXRhLnRyYWluaW5nPy5sb3NzIHx8ICdOL0EnfVxuYDtcblxuICAgIHJldHVybiB7IHNhZmV0ZW5zb3JzLCBjb25maWcsIHJlYWRtZSB9O1xuICB9XG59XG5cbi8qKlxuICogTW9kZWwgSW1wb3J0ZXJcbiAqXG4gKiBJbXBvcnQgbW9kZWxzIGZyb20gdmFyaW91cyBmb3JtYXRzLlxuICovXG5leHBvcnQgY2xhc3MgTW9kZWxJbXBvcnRlciB7XG4gIC8qKlxuICAgKiBJbXBvcnQgZnJvbSBTYWZlVGVuc29ycyBmb3JtYXRcbiAgICovXG4gIGZyb21TYWZlVGVuc29ycyhidWZmZXI6IFVpbnQ4QXJyYXkpOiBQYXJ0aWFsPEV4cG9ydGFibGVNb2RlbD4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBTYWZlVGVuc29yc1JlYWRlcihidWZmZXIpO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gcmVhZGVyLmdldE1ldGFkYXRhKCk7XG5cbiAgICBjb25zdCByZXN1bHQ6IFBhcnRpYWw8RXhwb3J0YWJsZU1vZGVsPiA9IHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG5hbWU6IG1ldGFkYXRhLm5hbWUgfHwgJ3Vua25vd24nLFxuICAgICAgICB2ZXJzaW9uOiBtZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAuMCcsXG4gICAgICAgIGFyY2hpdGVjdHVyZTogbWV0YWRhdGEuYXJjaGl0ZWN0dXJlIHx8ICdzb25hLWxvcmEnLFxuICAgICAgICB0cmFpbmluZzogbWV0YWRhdGEudHJhaW5pbmdfc3RlcHMgPyB7XG4gICAgICAgICAgc3RlcHM6IHBhcnNlSW50KG1ldGFkYXRhLnRyYWluaW5nX3N0ZXBzKSxcbiAgICAgICAgICBsb3NzOiBwYXJzZUZsb2F0KG1ldGFkYXRhLnRyYWluaW5nX2xvc3MgfHwgJzAnKSxcbiAgICAgICAgICBsZWFybmluZ1JhdGU6IDAsXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBMb2FkIExvUkEgd2VpZ2h0c1xuICAgIGNvbnN0IGxvcmFBID0gcmVhZGVyLmdldFRlbnNvcjJEKCdsb3JhLkEnKTtcbiAgICBjb25zdCBsb3JhQiA9IHJlYWRlci5nZXRUZW5zb3IyRCgnbG9yYS5CJyk7XG4gICAgY29uc3QgbG9yYVNjYWxpbmcgPSByZWFkZXIuZ2V0VGVuc29yMUQoJ2xvcmEuc2NhbGluZycpO1xuXG4gICAgaWYgKGxvcmFBICYmIGxvcmFCICYmIGxvcmFTY2FsaW5nKSB7XG4gICAgICByZXN1bHQubG9yYVdlaWdodHMgPSB7XG4gICAgICAgIGxvcmFBLFxuICAgICAgICBsb3JhQixcbiAgICAgICAgc2NhbGluZzogbG9yYVNjYWxpbmdbMF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIExvYWQgcGF0dGVybnNcbiAgICBjb25zdCBwYXR0ZXJuRW1iZWRkaW5ncyA9IHJlYWRlci5nZXRUZW5zb3IyRCgncGF0dGVybnMuZW1iZWRkaW5ncycpO1xuICAgIGNvbnN0IHBhdHRlcm5SYXRlcyA9IHJlYWRlci5nZXRUZW5zb3IxRCgncGF0dGVybnMuc3VjY2Vzc19yYXRlcycpO1xuXG4gICAgaWYgKHBhdHRlcm5FbWJlZGRpbmdzICYmIHBhdHRlcm5SYXRlcykge1xuICAgICAgcmVzdWx0LnBhdHRlcm5zID0gcGF0dGVybkVtYmVkZGluZ3MubWFwKChlbWJlZGRpbmcsIGkpID0+ICh7XG4gICAgICAgIGlkOiBgaW1wb3J0ZWQtJHtpfWAsXG4gICAgICAgIHR5cGU6ICdxdWVyeV9yZXNwb25zZScgYXMgY29uc3QsXG4gICAgICAgIGVtYmVkZGluZyxcbiAgICAgICAgc3VjY2Vzc1JhdGU6IHBhdHRlcm5SYXRlc1tpXSB8fCAwLFxuICAgICAgICB1c2VDb3VudDogMCxcbiAgICAgICAgbGFzdFVzZWQ6IG5ldyBEYXRlKCksXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgZnJvbSBKU09OIGZvcm1hdFxuICAgKi9cbiAgZnJvbUpTT04oanNvbjogc3RyaW5nKTogUGFydGlhbDxFeHBvcnRhYmxlTW9kZWw+IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgZnJvbSBiaW5hcnkgZm9ybWF0XG4gICAqL1xuICBmcm9tQmluYXJ5KGJ1ZmZlcjogVWludDhBcnJheSk6IFBhcnRpYWw8RXhwb3J0YWJsZU1vZGVsPiB7XG4gICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCk7XG4gICAgY29uc3QgbGVuZ3RoID0gdmlldy5nZXRVaW50MzIoMCwgdHJ1ZSk7XG4gICAgY29uc3QganNvbkJ5dGVzID0gYnVmZmVyLnNsaWNlKDQsIDQgKyBsZW5ndGgpO1xuICAgIGNvbnN0IGpzb24gPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoanNvbkJ5dGVzKTtcbiAgICByZXR1cm4gdGhpcy5mcm9tSlNPTihqc29uKTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGFzZXQgRXhwb3J0ZXJcbiAqXG4gKiBFeHBvcnQgdHJhaW5pbmcgZGF0YSBpbiB2YXJpb3VzIGZvcm1hdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhc2V0RXhwb3J0ZXIge1xuICAvKipcbiAgICogRXhwb3J0IHRvIEpTT05MIGZvcm1hdCAob25lIEpTT04gcGVyIGxpbmUpXG4gICAqL1xuICB0b0pTT05MKGRhdGE6IEFycmF5PHsgaW5wdXQ6IEVtYmVkZGluZzsgb3V0cHV0OiBFbWJlZGRpbmc7IHF1YWxpdHk6IG51bWJlciB9Pik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRhdGFcbiAgICAgIC5tYXAoaXRlbSA9PiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGlucHV0OiBpdGVtLmlucHV0LFxuICAgICAgICBvdXRwdXQ6IGl0ZW0ub3V0cHV0LFxuICAgICAgICBxdWFsaXR5OiBpdGVtLnF1YWxpdHksXG4gICAgICB9KSlcbiAgICAgIC5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gQ1NWIGZvcm1hdFxuICAgKi9cbiAgdG9DU1YoZGF0YTogQXJyYXk8eyBpbnB1dDogRW1iZWRkaW5nOyBvdXRwdXQ6IEVtYmVkZGluZzsgcXVhbGl0eTogbnVtYmVyIH0+KTogc3RyaW5nIHtcbiAgICBjb25zdCBoZWFkZXIgPSAncXVhbGl0eSxpbnB1dCxvdXRwdXQnO1xuICAgIGNvbnN0IHJvd3MgPSBkYXRhLm1hcChpdGVtID0+XG4gICAgICBgJHtpdGVtLnF1YWxpdHl9LFwiJHtpdGVtLmlucHV0LmpvaW4oJywnKX1cIixcIiR7aXRlbS5vdXRwdXQuam9pbignLCcpfVwiYFxuICAgICk7XG4gICAgcmV0dXJuIFtoZWFkZXIsIC4uLnJvd3NdLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBwYXR0ZXJucyBmb3IgcHJlLXRyYWluaW5nXG4gICAqL1xuICB0b1ByZXRyYWluKHBhdHRlcm5zOiBMZWFybmVkUGF0dGVybltdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0dGVybnNcbiAgICAgIC5maWx0ZXIocCA9PiBwLnN1Y2Nlc3NSYXRlID49IDAuNylcbiAgICAgIC5tYXAocCA9PiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGVtYmVkZGluZzogcC5lbWJlZGRpbmcsXG4gICAgICAgIHR5cGU6IHAudHlwZSxcbiAgICAgICAgcXVhbGl0eTogcC5zdWNjZXNzUmF0ZSxcbiAgICAgIH0pKVxuICAgICAgLmpvaW4oJ1xcbicpO1xuICB9XG59XG4iXX0=
@@ -517,4 +517,4 @@ export class FederatedCoordinator {
517
517
  }
518
518
  }
519
519
  }
520
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVkZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZlZGVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Q0c7QUFjSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXZDOztHQUVHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBOEI7SUFDMUQsU0FBUyxFQUFFLEdBQUc7SUFDZCxZQUFZLEVBQUUsR0FBRztJQUNqQixhQUFhLEVBQUUsQ0FBQztJQUNoQixZQUFZLEVBQUUsQ0FBQztJQUNmLGtCQUFrQixFQUFFLEdBQUc7SUFDdkIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsU0FBUyxFQUFFLElBQUk7SUFDZixnQkFBZ0IsRUFBRSxHQUFHO0NBQ3RCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBU3pCLFlBQVksT0FBZSxFQUFFLE1BQXdCO1FBTjdDLGlCQUFZLEdBQXVCLEVBQUUsQ0FBQztRQUV0QyxtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUU5QixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUdqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyx3QkFBd0IsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUMsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7YUFD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QUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEZlZGVyYXRlZCBMZWFybmluZyBmb3IgU09OQVxyXG4gKlxyXG4gKiBFbmFibGUgZGlzdHJpYnV0ZWQgbGVhcm5pbmcgYWNyb3NzIGVwaGVtZXJhbCBhZ2VudHMgdGhhdCBzaGFyZVxyXG4gKiB0cmFqZWN0b3JpZXMgd2l0aCBhIGNlbnRyYWwgY29vcmRpbmF0b3IuXHJcbiAqXHJcbiAqIEFyY2hpdGVjdHVyZTpcclxuICogYGBgXHJcbiAqIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcclxuICog4pSCICBBZ2VudCBBICAgIOKUgiAgICAg4pSCICBBZ2VudCBCICAgIOKUgiAgICAg4pSCICBBZ2VudCBDICAgIOKUglxyXG4gKiDilIIgKGVwaGVtZXJhbCkg4pSCICAgICDilIIgKGVwaGVtZXJhbCkg4pSCICAgICDilIIgKGVwaGVtZXJhbCkg4pSCXHJcbiAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICDilJTilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilJhcclxuICogICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAg4pSCXHJcbiAqICAgICAgICDilIIgICAgZXhwb3J0KCkgICAgICAg4pSCICAgIGV4cG9ydCgpICAgICAgIOKUgiAgICBleHBvcnQoKVxyXG4gKiAgICAgICAg4pa8ICAgICAgICAgICAgICAgICAgIOKWvCAgICAgICAgICAgICAgICAgICDilrxcclxuICogICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcclxuICogICDilIIgICAgICAgICAgICBGZWRlcmF0ZWQgQ29vcmRpbmF0b3IgICAgICAgICAgICAgICDilIJcclxuICogICDilIIgICAgICAgICAocGVyc2lzdGVudCwgbGFyZ2UgY2FwYWNpdHkpICAgICAgICAgICDilIJcclxuICogICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcclxuICogYGBgXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaW1wb3J0IHsgRXBoZW1lcmFsQWdlbnQsIEZlZGVyYXRlZENvb3JkaW5hdG9yIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XHJcbiAqXHJcbiAqIC8vIENyZWF0ZSBjb29yZGluYXRvciAocGVyc2lzdGVudClcclxuICogY29uc3QgY29vcmRpbmF0b3IgPSBuZXcgRmVkZXJhdGVkQ29vcmRpbmF0b3IoJ2Nvb3JkLTEnLCB7IGhpZGRlbkRpbTogMjU2IH0pO1xyXG4gKlxyXG4gKiAvLyBDcmVhdGUgZXBoZW1lcmFsIGFnZW50XHJcbiAqIGNvbnN0IGFnZW50ID0gbmV3IEVwaGVtZXJhbEFnZW50KCdhZ2VudC0xJywgeyBoaWRkZW5EaW06IDI1NiB9KTtcclxuICpcclxuICogLy8gQWdlbnQgcHJvY2Vzc2VzIHRhc2tzXHJcbiAqIGFnZW50LnByb2Nlc3NUYXNrKFswLjEsIDAuMiwgLi4uXSwgMC44NSk7XHJcbiAqIGFnZW50LnByb2Nlc3NUYXNrKFswLjMsIDAuNCwgLi4uXSwgMC45Mik7XHJcbiAqXHJcbiAqIC8vIEV4cG9ydCBhbmQgYWdncmVnYXRlIGJlZm9yZSBhZ2VudCB0ZXJtaW5hdGVzXHJcbiAqIGNvbnN0IGV4cG9ydERhdGEgPSBhZ2VudC5leHBvcnRTdGF0ZSgpO1xyXG4gKiBjb25zdCByZXN1bHQgPSBjb29yZGluYXRvci5hZ2dyZWdhdGUoZXhwb3J0RGF0YSk7XHJcbiAqXHJcbiAqIGNvbnNvbGUubG9nKGBBY2NlcHRlZDogJHtyZXN1bHQudHJhamVjdG9yaWVzQWNjZXB0ZWR9YCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuXHJcbmltcG9ydCB7XHJcbiAgRW1iZWRkaW5nLFxyXG4gIExlYXJuZWRQYXR0ZXJuLFxyXG4gIFBhdHRlcm5UeXBlLFxyXG4gIEZlZGVyYXRlZENvbmZpZyxcclxuICBUcmFqZWN0b3J5RXhwb3J0LFxyXG4gIEFnZW50RXhwb3J0U3RhdHMsXHJcbiAgQWdlbnRFeHBvcnQsXHJcbiAgQWdlbnRDb250cmlidXRpb24sXHJcbiAgQWdncmVnYXRpb25SZXN1bHQsXHJcbiAgQ29vcmRpbmF0b3JTdGF0cyxcclxufSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgUmVhc29uaW5nQmFuayB9IGZyb20gJy4vc29uYSc7XHJcblxyXG4vKipcclxuICogRGVmYXVsdCBmZWRlcmF0ZWQgY29uZmlnXHJcbiAqL1xyXG5jb25zdCBERUZBVUxUX0ZFREVSQVRFRF9DT05GSUc6IFJlcXVpcmVkPEZlZGVyYXRlZENvbmZpZz4gPSB7XHJcbiAgaGlkZGVuRGltOiAyNTYsXHJcbiAgZW1iZWRkaW5nRGltOiAyNTYsXHJcbiAgbWljcm9Mb3JhUmFuazogMixcclxuICBiYXNlTG9yYVJhbms6IDgsXHJcbiAgdHJhamVjdG9yeUNhcGFjaXR5OiA1MDAsXHJcbiAgcGF0dGVybkNsdXN0ZXJzOiAyNSxcclxuICBld2NMYW1iZGE6IDIwMDAsXHJcbiAgcXVhbGl0eVRocmVzaG9sZDogMC40LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEVwaGVtZXJhbCBBZ2VudCBmb3IgZmVkZXJhdGVkIGxlYXJuaW5nXHJcbiAqXHJcbiAqIENvbGxlY3RzIHRyYWplY3RvcmllcyBkdXJpbmcgaXRzIHNlc3Npb24gYW5kIGV4cG9ydHMgc3RhdGUgYmVmb3JlIHRlcm1pbmF0aW9uLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGFnZW50ID0gbmV3IEVwaGVtZXJhbEFnZW50KCdhZ2VudC0xJywgeyBoaWRkZW5EaW06IDI1NiB9KTtcclxuICpcclxuICogLy8gUHJvY2VzcyB0YXNrcyBkdXJpbmcgc2Vzc2lvblxyXG4gKiBhZ2VudC5wcm9jZXNzVGFzayhlbWJlZGRpbmcxLCAwLjg1KTtcclxuICogYWdlbnQucHJvY2Vzc1Rhc2tXaXRoUm91dGUoZW1iZWRkaW5nMiwgMC45MiwgJ2NvZGUtbW9kZWwnKTtcclxuICpcclxuICogLy8gRXhwb3J0IGJlZm9yZSB0ZXJtaW5hdGlvblxyXG4gKiBjb25zdCBleHBvcnREYXRhID0gYWdlbnQuZXhwb3J0U3RhdGUoKTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRXBoZW1lcmFsQWdlbnQge1xyXG4gIHByaXZhdGUgYWdlbnRJZDogc3RyaW5nO1xyXG4gIHByaXZhdGUgY29uZmlnOiBSZXF1aXJlZDxGZWRlcmF0ZWRDb25maWc+O1xyXG4gIHByaXZhdGUgdHJhamVjdG9yaWVzOiBUcmFqZWN0b3J5RXhwb3J0W10gPSBbXTtcclxuICBwcml2YXRlIHN0YXJ0VGltZTogbnVtYmVyO1xyXG4gIHByaXZhdGUgcXVhbGl0eVNhbXBsZXM6IG51bWJlcltdID0gW107XHJcbiAgcHJpdmF0ZSByZWFzb25pbmdCYW5rOiBSZWFzb25pbmdCYW5rO1xyXG4gIHByaXZhdGUgbG9yYVdlaWdodHM6IG51bWJlcltdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKGFnZW50SWQ6IHN0cmluZywgY29uZmlnPzogRmVkZXJhdGVkQ29uZmlnKSB7XHJcbiAgICB0aGlzLmFnZW50SWQgPSBhZ2VudElkO1xyXG4gICAgdGhpcy5jb25maWcgPSB7IC4uLkRFRkFVTFRfRkVERVJBVEVEX0NPTkZJRywgLi4uY29uZmlnIH07XHJcbiAgICB0aGlzLnN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcbiAgICB0aGlzLnJlYXNvbmluZ0JhbmsgPSBuZXcgUmVhc29uaW5nQmFuaygwLjcpO1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgbWljcm8tTG9SQSB3ZWlnaHRzXHJcbiAgICB0aGlzLmxvcmFXZWlnaHRzID0gbmV3IEFycmF5KHRoaXMuY29uZmlnLmhpZGRlbkRpbSAqIHRoaXMuY29uZmlnLm1pY3JvTG9yYVJhbmspXHJcbiAgICAgIC5maWxsKDApXHJcbiAgICAgIC5tYXAoKCkgPT4gKE1hdGgucmFuZG9tKCkgLSAwLjUpICogMC4wMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWdlbnQgSURcclxuICAgKi9cclxuICBnZXRBZ2VudElkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5hZ2VudElkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyBhIHRhc2sgYW5kIHJlY29yZCB0cmFqZWN0b3J5XHJcbiAgICovXHJcbiAgcHJvY2Vzc1RyYWplY3RvcnkoXHJcbiAgICBlbWJlZGRpbmc6IEVtYmVkZGluZyxcclxuICAgIGFjdGl2YXRpb25zOiBFbWJlZGRpbmcsXHJcbiAgICBxdWFsaXR5OiBudW1iZXIsXHJcbiAgICByb3V0ZT86IHN0cmluZyxcclxuICAgIGNvbnRleHQ6IHN0cmluZ1tdID0gW11cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcblxyXG4gICAgLy8gU3RvcmUgdHJhamVjdG9yeSBmb3IgZXhwb3J0XHJcbiAgICB0aGlzLnRyYWplY3Rvcmllcy5wdXNoKHtcclxuICAgICAgZW1iZWRkaW5nOiBbLi4uZW1iZWRkaW5nXSxcclxuICAgICAgcXVhbGl0eSxcclxuICAgICAgcm91dGUsXHJcbiAgICAgIGNvbnRleHQ6IFsuLi5jb250ZXh0XSxcclxuICAgICAgdGltZXN0YW1wOiBub3csXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnF1YWxpdHlTYW1wbGVzLnB1c2gocXVhbGl0eSk7XHJcblxyXG4gICAgLy8gU3RvcmUgaW4gbG9jYWwgcmVhc29uaW5nIGJhbmsgaWYgaGlnaCBxdWFsaXR5XHJcbiAgICBpZiAocXVhbGl0eSA+PSAwLjcpIHtcclxuICAgICAgdGhpcy5yZWFzb25pbmdCYW5rLnN0b3JlKCdxdWVyeV9yZXNwb25zZScsIGVtYmVkZGluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGxvY2FsIExvUkEgd2VpZ2h0cyBiYXNlZCBvbiBxdWFsaXR5XHJcbiAgICB0aGlzLnVwZGF0ZUxvcmFXZWlnaHRzKGVtYmVkZGluZywgcXVhbGl0eSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaW1wbGUgcHJvY2VzcyB0YXNrIG1ldGhvZFxyXG4gICAqL1xyXG4gIHByb2Nlc3NUYXNrKGVtYmVkZGluZzogRW1iZWRkaW5nLCBxdWFsaXR5OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvY2Vzc1RyYWplY3RvcnkoZW1iZWRkaW5nLCBlbWJlZGRpbmcsIHF1YWxpdHkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyB0YXNrIHdpdGggcm91dGUgaW5mb3JtYXRpb25cclxuICAgKi9cclxuICBwcm9jZXNzVGFza1dpdGhSb3V0ZShlbWJlZGRpbmc6IEVtYmVkZGluZywgcXVhbGl0eTogbnVtYmVyLCByb3V0ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnByb2Nlc3NUcmFqZWN0b3J5KGVtYmVkZGluZywgZW1iZWRkaW5nLCBxdWFsaXR5LCByb3V0ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBseSBtaWNyby1Mb1JBIHRvIGhpZGRlbiBzdGF0ZXNcclxuICAgKi9cclxuICBhcHBseU1pY3JvTG9yYShpbnB1dDogbnVtYmVyW10sIG91dHB1dDogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IHJhbmsgPSB0aGlzLmNvbmZpZy5taWNyb0xvcmFSYW5rO1xyXG4gICAgY29uc3QgZGltID0gTWF0aC5taW4oaW5wdXQubGVuZ3RoLCB0aGlzLmNvbmZpZy5oaWRkZW5EaW0pO1xyXG5cclxuICAgIC8vIFNpbXBsZSBsb3ctcmFuayBkZWNvbXBvc2l0aW9uOiBvdXRwdXQgPSBpbnB1dCArIEEgQCBCIEAgaW5wdXRcclxuICAgIC8vIEEgaXMgKGRpbSB4IHJhbmspLCBCIGlzIChyYW5rIHggZGltKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW07IGkrKykge1xyXG4gICAgICBsZXQgZGVsdGEgPSAwO1xyXG4gICAgICBmb3IgKGxldCByID0gMDsgciA8IHJhbms7IHIrKykge1xyXG4gICAgICAgIGxldCBiU3VtID0gMDtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpbTsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBiSWR4ID0gciAqIGRpbSArIGo7XHJcbiAgICAgICAgICBpZiAoYklkeCA8IHRoaXMubG9yYVdlaWdodHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGJTdW0gKz0gdGhpcy5sb3JhV2VpZ2h0c1tiSWR4XSAqIChpbnB1dFtqXSB8fCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYUlkeCA9IGkgKiByYW5rICsgcjtcclxuICAgICAgICBpZiAoYUlkeCA8IHRoaXMubG9yYVdlaWdodHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBkZWx0YSArPSB0aGlzLmxvcmFXZWlnaHRzW2FJZHhdICogYlN1bTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgb3V0cHV0W2ldID0gKGlucHV0W2ldIHx8IDApICsgZGVsdGEgKiAwLjE7IC8vIFNjYWxlIGZhY3RvclxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IG51bWJlciBvZiBjb2xsZWN0ZWQgdHJhamVjdG9yaWVzXHJcbiAgICovXHJcbiAgdHJhamVjdG9yeUNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFqZWN0b3JpZXMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGF2ZXJhZ2UgcXVhbGl0eVxyXG4gICAqL1xyXG4gIGF2Z1F1YWxpdHkoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLnF1YWxpdHlTYW1wbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XHJcbiAgICByZXR1cm4gdGhpcy5xdWFsaXR5U2FtcGxlcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSAvIHRoaXMucXVhbGl0eVNhbXBsZXMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHVwdGltZSBpbiBzZWNvbmRzXHJcbiAgICovXHJcbiAgdXB0aW1lU2Vjb25kcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKERhdGUubm93KCkgLSB0aGlzLnN0YXJ0VGltZSkgLyAxMDAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhZ2VudCBzdGF0c1xyXG4gICAqL1xyXG4gIHN0YXRzKCk6IEFnZW50RXhwb3J0U3RhdHMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdG90YWxUcmFqZWN0b3JpZXM6IHRoaXMudHJhamVjdG9yaWVzLmxlbmd0aCxcclxuICAgICAgYXZnUXVhbGl0eTogdGhpcy5hdmdRdWFsaXR5KCksXHJcbiAgICAgIHBhdHRlcm5zTGVhcm5lZDogdGhpcy5yZWFzb25pbmdCYW5rLnN0YXRzKCkudG90YWxQYXR0ZXJucyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSBsb2NhbCBsZWFybmluZ1xyXG4gICAqL1xyXG4gIGZvcmNlTGVhcm4oKTogc3RyaW5nIHtcclxuICAgIC8vIFBydW5lIGxvdy1wZXJmb3JtaW5nIHBhdHRlcm5zXHJcbiAgICBjb25zdCBwcnVuZWQgPSB0aGlzLnJlYXNvbmluZ0JhbmsucHJ1bmUoMC4zLCAzKTtcclxuICAgIHJldHVybiBgUHJ1bmVkICR7cHJ1bmVkfSBwYXR0ZXJucywgJHt0aGlzLnJlYXNvbmluZ0Jhbmsuc3RhdHMoKS50b3RhbFBhdHRlcm5zfSByZW1haW5pbmdgO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGxlYXJuZWQgcGF0dGVybnNcclxuICAgKi9cclxuICBnZXRQYXR0ZXJucygpOiBMZWFybmVkUGF0dGVybltdIHtcclxuICAgIHJldHVybiB0aGlzLnJlYXNvbmluZ0JhbmsuZ2V0QnlUeXBlKCdxdWVyeV9yZXNwb25zZScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgdHJhamVjdG9yaWVzIChhZnRlciBleHBvcnQpXHJcbiAgICovXHJcbiAgY2xlYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRyYWplY3RvcmllcyA9IFtdO1xyXG4gICAgdGhpcy5xdWFsaXR5U2FtcGxlcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwb3J0IGFnZW50IHN0YXRlIGZvciBmZWRlcmF0aW9uXHJcbiAgICpcclxuICAgKiBDYWxsIHRoaXMgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZSBhZ2VudC5cclxuICAgKi9cclxuICBleHBvcnRTdGF0ZSgpOiBBZ2VudEV4cG9ydCB7XHJcbiAgICAvLyBGb3JjZSBsZWFybmluZyBiZWZvcmUgZXhwb3J0XHJcbiAgICB0aGlzLmZvcmNlTGVhcm4oKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhZ2VudElkOiB0aGlzLmFnZW50SWQsXHJcbiAgICAgIHRyYWplY3RvcmllczogWy4uLnRoaXMudHJhamVjdG9yaWVzXSxcclxuICAgICAgc3RhdHM6IHRoaXMuc3RhdHMoKSxcclxuICAgICAgc2Vzc2lvbkR1cmF0aW9uTXM6IERhdGUubm93KCkgLSB0aGlzLnN0YXJ0VGltZSxcclxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlcmlhbGl6ZSB0byBKU09OXHJcbiAgICovXHJcbiAgdG9KU09OKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5leHBvcnRTdGF0ZSgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlTG9yYVdlaWdodHMoZW1iZWRkaW5nOiBFbWJlZGRpbmcsIHF1YWxpdHk6IG51bWJlcik6IHZvaWQge1xyXG4gICAgLy8gU2ltcGxlIGdyYWRpZW50IHVwZGF0ZSBiYXNlZCBvbiBxdWFsaXR5XHJcbiAgICBjb25zdCBsciA9IDAuMDAxICogcXVhbGl0eTtcclxuICAgIGNvbnN0IGRpbSA9IE1hdGgubWluKGVtYmVkZGluZy5sZW5ndGgsIHRoaXMuY29uZmlnLmhpZGRlbkRpbSk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihkaW0sIHRoaXMubG9yYVdlaWdodHMubGVuZ3RoKTsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGdyYWQgPSBlbWJlZGRpbmdbaSAlIGVtYmVkZGluZy5sZW5ndGhdICogKHF1YWxpdHkgLSAwLjUpO1xyXG4gICAgICB0aGlzLmxvcmFXZWlnaHRzW2ldICs9IGxyICogZ3JhZDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGZWRlcmF0ZWQgTGVhcm5pbmcgQ29vcmRpbmF0b3JcclxuICpcclxuICogQWdncmVnYXRlcyBsZWFybmluZyBmcm9tIG11bHRpcGxlIGVwaGVtZXJhbCBhZ2VudHMuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgY29vcmRpbmF0b3IgPSBuZXcgRmVkZXJhdGVkQ29vcmRpbmF0b3IoJ2Nvb3JkLTEnLCB7IGhpZGRlbkRpbTogMjU2IH0pO1xyXG4gKlxyXG4gKiAvLyBBZ2dyZWdhdGUgZXhwb3J0cyBmcm9tIG11bHRpcGxlIGFnZW50c1xyXG4gKiBmb3IgKGNvbnN0IGFnZW50RXhwb3J0IG9mIGFnZW50RXhwb3J0cykge1xyXG4gKiAgIGNvbnN0IHJlc3VsdCA9IGNvb3JkaW5hdG9yLmFnZ3JlZ2F0ZShhZ2VudEV4cG9ydCk7XHJcbiAqICAgY29uc29sZS5sb2coYEFnZW50ICR7cmVzdWx0LmFnZW50SWR9OiAke3Jlc3VsdC50cmFqZWN0b3JpZXNBY2NlcHRlZH0gYWNjZXB0ZWRgKTtcclxuICogfVxyXG4gKlxyXG4gKiAvLyBHZXQgY29vcmRpbmF0b3Igc3RhdGlzdGljc1xyXG4gKiBjb25zdCBzdGF0cyA9IGNvb3JkaW5hdG9yLnN0YXRzKCk7XHJcbiAqIGNvbnNvbGUubG9nKGBUb3RhbCBwYXR0ZXJuczogJHtzdGF0cy5wYXR0ZXJuc0xlYXJuZWR9YCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEZlZGVyYXRlZENvb3JkaW5hdG9yIHtcclxuICBwcml2YXRlIGNvb3JkaW5hdG9ySWQ6IHN0cmluZztcclxuICBwcml2YXRlIGNvbmZpZzogUmVxdWlyZWQ8RmVkZXJhdGVkQ29uZmlnPjtcclxuICBwcml2YXRlIGNvbnRyaWJ1dGlvbnM6IE1hcDxzdHJpbmcsIEFnZW50Q29udHJpYnV0aW9uPiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIHRvdGFsVHJhamVjdG9yaWVzOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgY29uc29saWRhdGlvbkludGVydmFsOiBudW1iZXIgPSA1MDtcclxuICBwcml2YXRlIHJlYXNvbmluZ0Jhbms6IFJlYXNvbmluZ0Jhbms7XHJcbiAgcHJpdmF0ZSBxdWFsaXR5U2FtcGxlczogbnVtYmVyW10gPSBbXTtcclxuICBwcml2YXRlIG1hc3RlckxvcmFXZWlnaHRzOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb29yZGluYXRvcklkOiBzdHJpbmcsIGNvbmZpZz86IEZlZGVyYXRlZENvbmZpZykge1xyXG4gICAgdGhpcy5jb29yZGluYXRvcklkID0gY29vcmRpbmF0b3JJZDtcclxuICAgIHRoaXMuY29uZmlnID0ge1xyXG4gICAgICAuLi5ERUZBVUxUX0ZFREVSQVRFRF9DT05GSUcsXHJcbiAgICAgIHRyYWplY3RvcnlDYXBhY2l0eTogNTAwMDAsIC8vIExhcmdlIGNhcGFjaXR5IGZvciBjb29yZGluYXRvclxyXG4gICAgICBwYXR0ZXJuQ2x1c3RlcnM6IDIwMCxcclxuICAgICAgYmFzZUxvcmFSYW5rOiAxNiwgLy8gRGVlcGVyIGZvciBhZ2dyZWdhdGlvblxyXG4gICAgICAuLi5jb25maWcsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZWFzb25pbmdCYW5rID0gbmV3IFJlYXNvbmluZ0JhbmsodGhpcy5jb25maWcucXVhbGl0eVRocmVzaG9sZCk7XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBtYXN0ZXIgTG9SQSB3ZWlnaHRzXHJcbiAgICB0aGlzLm1hc3RlckxvcmFXZWlnaHRzID0gbmV3IEFycmF5KHRoaXMuY29uZmlnLmhpZGRlbkRpbSAqIHRoaXMuY29uZmlnLmJhc2VMb3JhUmFuaylcclxuICAgICAgLmZpbGwoMClcclxuICAgICAgLm1hcCgoKSA9PiAoTWF0aC5yYW5kb20oKSAtIDAuNSkgKiAwLjAxKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBjb29yZGluYXRvciBJRFxyXG4gICAqL1xyXG4gIGdldENvb3JkaW5hdG9ySWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdG9ySWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgcXVhbGl0eSB0aHJlc2hvbGQgZm9yIGFjY2VwdGluZyB0cmFqZWN0b3JpZXNcclxuICAgKi9cclxuICBzZXRRdWFsaXR5VGhyZXNob2xkKHRocmVzaG9sZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZy5xdWFsaXR5VGhyZXNob2xkID0gdGhyZXNob2xkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGNvbnNvbGlkYXRpb24gaW50ZXJ2YWxcclxuICAgKi9cclxuICBzZXRDb25zb2xpZGF0aW9uSW50ZXJ2YWwoaW50ZXJ2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zb2xpZGF0aW9uSW50ZXJ2YWwgPSBpbnRlcnZhbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFnZ3JlZ2F0ZSBhZ2VudCBleHBvcnQgaW50byBjb29yZGluYXRvclxyXG4gICAqL1xyXG4gIGFnZ3JlZ2F0ZShleHBvcnREYXRhOiBBZ2VudEV4cG9ydCk6IEFnZ3JlZ2F0aW9uUmVzdWx0IHtcclxuICAgIGxldCBhY2NlcHRlZCA9IDA7XHJcbiAgICBsZXQgcmVqZWN0ZWQgPSAwO1xyXG5cclxuICAgIC8vIFJlcGxheSB0cmFqZWN0b3JpZXMgaW50byBtYXN0ZXJcclxuICAgIGZvciAoY29uc3QgdHJhaiBvZiBleHBvcnREYXRhLnRyYWplY3Rvcmllcykge1xyXG4gICAgICBpZiAodHJhai5xdWFsaXR5ID49IHRoaXMuY29uZmlnLnF1YWxpdHlUaHJlc2hvbGQpIHtcclxuICAgICAgICAvLyBTdG9yZSBwYXR0ZXJuXHJcbiAgICAgICAgY29uc3QgcGF0dGVyblR5cGUgPSB0aGlzLnJvdXRlVG9QYXR0ZXJuVHlwZSh0cmFqLnJvdXRlKTtcclxuICAgICAgICB0aGlzLnJlYXNvbmluZ0Jhbmsuc3RvcmUocGF0dGVyblR5cGUsIHRyYWouZW1iZWRkaW5nKTtcclxuICAgICAgICB0aGlzLnF1YWxpdHlTYW1wbGVzLnB1c2godHJhai5xdWFsaXR5KTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIG1hc3RlciBMb1JBIHdlaWdodHNcclxuICAgICAgICB0aGlzLnVwZGF0ZU1hc3RlckxvcmEodHJhai5lbWJlZGRpbmcsIHRyYWoucXVhbGl0eSk7XHJcblxyXG4gICAgICAgIGFjY2VwdGVkKys7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVqZWN0ZWQrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudG90YWxUcmFqZWN0b3JpZXMgKz0gYWNjZXB0ZWQ7XHJcblxyXG4gICAgLy8gUmVjb3JkIGNvbnRyaWJ1dGlvblxyXG4gICAgdGhpcy5jb250cmlidXRpb25zLnNldChleHBvcnREYXRhLmFnZW50SWQsIHtcclxuICAgICAgdHJhamVjdG9yeUNvdW50OiBleHBvcnREYXRhLnRyYWplY3Rvcmllcy5sZW5ndGgsXHJcbiAgICAgIGF2Z1F1YWxpdHk6IGV4cG9ydERhdGEuc3RhdHMuYXZnUXVhbGl0eSxcclxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxyXG4gICAgICBzZXNzaW9uRHVyYXRpb25NczogZXhwb3J0RGF0YS5zZXNzaW9uRHVyYXRpb25NcyxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEF1dG8tY29uc29saWRhdGUgaWYgbmVlZGVkXHJcbiAgICBjb25zdCBjb25zb2xpZGF0ZWQgPSB0aGlzLnNob3VsZENvbnNvbGlkYXRlKCk7XHJcbiAgICBpZiAoY29uc29saWRhdGVkKSB7XHJcbiAgICAgIHRoaXMuZm9yY2VDb25zb2xpZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFnZW50SWQ6IGV4cG9ydERhdGEuYWdlbnRJZCxcclxuICAgICAgdHJhamVjdG9yaWVzQWNjZXB0ZWQ6IGFjY2VwdGVkLFxyXG4gICAgICB0cmFqZWN0b3JpZXNSZWplY3RlZDogcmVqZWN0ZWQsXHJcbiAgICAgIGNvbnNvbGlkYXRlZCxcclxuICAgICAgdG90YWxBZ2VudHM6IHRoaXMuY29udHJpYnV0aW9ucy5zaXplLFxyXG4gICAgICB0b3RhbFRyYWplY3RvcmllczogdGhpcy50b3RhbFRyYWplY3RvcmllcyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSBjb25zb2xpZGF0aW9uIChsZWFybmluZylcclxuICAgKi9cclxuICBmb3JjZUNvbnNvbGlkYXRlKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwcnVuZWQgPSB0aGlzLnJlYXNvbmluZ0JhbmsucHJ1bmUoMC4zLCA1KTtcclxuICAgIHJldHVybiBgQ29uc29saWRhdGVkOiBwcnVuZWQgJHtwcnVuZWR9IHBhdHRlcm5zLCAke3RoaXMucmVhc29uaW5nQmFuay5zdGF0cygpLnRvdGFsUGF0dGVybnN9IHJlbWFpbmluZ2A7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25zb2xpZGF0ZSBsZWFybmluZyAoYWxpYXMpXHJcbiAgICovXHJcbiAgY29uc29saWRhdGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZvcmNlQ29uc29saWRhdGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBpbml0aWFsIHBhdHRlcm5zIGZvciBuZXcgYWdlbnRzICh3YXJtIHN0YXJ0KVxyXG4gICAqL1xyXG4gIGdldEluaXRpYWxQYXR0ZXJucyhrOiBudW1iZXIgPSAxMCk6IExlYXJuZWRQYXR0ZXJuW10ge1xyXG4gICAgY29uc3QgYWxsUGF0dGVybnMgPSBbXHJcbiAgICAgIC4uLnRoaXMucmVhc29uaW5nQmFuay5nZXRCeVR5cGUoJ3F1ZXJ5X3Jlc3BvbnNlJyksXHJcbiAgICAgIC4uLnRoaXMucmVhc29uaW5nQmFuay5nZXRCeVR5cGUoJ3JvdXRpbmcnKSxcclxuICAgIF07XHJcblxyXG4gICAgLy8gU29ydCBieSBzdWNjZXNzIHJhdGUgYW5kIHJldHVybiB0b3Aga1xyXG4gICAgcmV0dXJuIGFsbFBhdHRlcm5zXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiLnN1Y2Nlc3NSYXRlIC0gYS5zdWNjZXNzUmF0ZSlcclxuICAgICAgLnNsaWNlKDAsIGspO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFsbCBsZWFybmVkIHBhdHRlcm5zXHJcbiAgICovXHJcbiAgZ2V0QWxsUGF0dGVybnMoKTogTGVhcm5lZFBhdHRlcm5bXSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAuLi50aGlzLnJlYXNvbmluZ0JhbmsuZ2V0QnlUeXBlKCdxdWVyeV9yZXNwb25zZScpLFxyXG4gICAgICAuLi50aGlzLnJlYXNvbmluZ0JhbmsuZ2V0QnlUeXBlKCdyb3V0aW5nJyksXHJcbiAgICAgIC4uLnRoaXMucmVhc29uaW5nQmFuay5nZXRCeVR5cGUoJ2NvbnRleHRfcmV0cmlldmFsJyksXHJcbiAgICAgIC4uLnRoaXMucmVhc29uaW5nQmFuay5nZXRCeVR5cGUoJ2NvcnJlY3Rpb24nKSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaW5kIHNpbWlsYXIgcGF0dGVybnNcclxuICAgKi9cclxuICBmaW5kUGF0dGVybnMocXVlcnk6IEVtYmVkZGluZywgazogbnVtYmVyKTogTGVhcm5lZFBhdHRlcm5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWFzb25pbmdCYW5rLmZpbmRTaW1pbGFyKHF1ZXJ5LCBrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IGNvb3JkaW5hdG9yJ3MgTG9SQSB0byBpbnB1dFxyXG4gICAqIE9QVElNSVpFRDogUHJlLWNvbXB1dGUgaGlkZGVuIGxheWVyIG9uY2UsIHJldXNlIHR5cGVkIGFycmF5c1xyXG4gICAqL1xyXG4gIGFwcGx5TG9yYShpbnB1dDogbnVtYmVyW10pOiBudW1iZXJbXSB7XHJcbiAgICBjb25zdCByYW5rID0gdGhpcy5jb25maWcuYmFzZUxvcmFSYW5rO1xyXG4gICAgY29uc3QgZGltID0gTWF0aC5taW4oaW5wdXQubGVuZ3RoLCB0aGlzLmNvbmZpZy5oaWRkZW5EaW0pO1xyXG4gICAgY29uc3Qgd2VpZ2h0c0xlbiA9IHRoaXMubWFzdGVyTG9yYVdlaWdodHMubGVuZ3RoO1xyXG5cclxuICAgIC8vIFByZS1jb21wdXRlIGhpZGRlbiBsYXllciAoaW5wdXQgQCBCKVxyXG4gICAgY29uc3QgaGlkZGVuID0gbmV3IEZsb2F0NjRBcnJheShyYW5rKTtcclxuICAgIGZvciAobGV0IHIgPSAwOyByIDwgcmFuazsgcisrKSB7XHJcbiAgICAgIGxldCBzdW0gPSAwO1xyXG4gICAgICBjb25zdCBiYXNlSWR4ID0gciAqIGRpbTtcclxuICAgICAgLy8gVW5yb2xsIHRoZSBpbm5lciBsb29wXHJcbiAgICAgIGxldCBqID0gMDtcclxuICAgICAgZm9yICg7IGogKyAzIDwgZGltICYmIGJhc2VJZHggKyBqICsgMyA8IHdlaWdodHNMZW47IGogKz0gNCkge1xyXG4gICAgICAgIHN1bSArPSB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2Jhc2VJZHggKyBqXSAqIChpbnB1dFtqXSB8fCAwKSArXHJcbiAgICAgICAgICAgICAgIHRoaXMubWFzdGVyTG9yYVdlaWdodHNbYmFzZUlkeCArIGogKyAxXSAqIChpbnB1dFtqICsgMV0gfHwgMCkgK1xyXG4gICAgICAgICAgICAgICB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2Jhc2VJZHggKyBqICsgMl0gKiAoaW5wdXRbaiArIDJdIHx8IDApICtcclxuICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0c1tiYXNlSWR4ICsgaiArIDNdICogKGlucHV0W2ogKyAzXSB8fCAwKTtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKDsgaiA8IGRpbSAmJiBiYXNlSWR4ICsgaiA8IHdlaWdodHNMZW47IGorKykge1xyXG4gICAgICAgIHN1bSArPSB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2Jhc2VJZHggKyBqXSAqIChpbnB1dFtqXSB8fCAwKTtcclxuICAgICAgfVxyXG4gICAgICBoaWRkZW5bcl0gPSBzdW07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29tcHV0ZSBvdXRwdXQgKGhpZGRlbiBAIEEgKyBpbnB1dClcclxuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBBcnJheShpbnB1dC5sZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoaSA8IGRpbSkge1xyXG4gICAgICAgIGxldCBkZWx0YSA9IDA7XHJcbiAgICAgICAgY29uc3QgYmFzZUlkeCA9IGkgKiByYW5rO1xyXG4gICAgICAgIGZvciAobGV0IHIgPSAwOyByIDwgcmFuayAmJiBiYXNlSWR4ICsgciA8IHdlaWdodHNMZW47IHIrKykge1xyXG4gICAgICAgICAgZGVsdGEgKz0gdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0c1tiYXNlSWR4ICsgcl0gKiBoaWRkZW5bcl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dHB1dFtpXSA9IChpbnB1dFtpXSB8fCAwKSArIGRlbHRhICogMC4xO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dHB1dFtpXSA9IGlucHV0W2ldIHx8IDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGNvb3JkaW5hdG9yIHN0YXRpc3RpY3NcclxuICAgKi9cclxuICBzdGF0cygpOiBDb29yZGluYXRvclN0YXRzIHtcclxuICAgIGNvbnN0IGF2Z1F1YWxpdHkgPSB0aGlzLnF1YWxpdHlTYW1wbGVzLmxlbmd0aCA+IDBcclxuICAgICAgPyB0aGlzLnF1YWxpdHlTYW1wbGVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApIC8gdGhpcy5xdWFsaXR5U2FtcGxlcy5sZW5ndGhcclxuICAgICAgOiAwO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvb3JkaW5hdG9ySWQ6IHRoaXMuY29vcmRpbmF0b3JJZCxcclxuICAgICAgdG90YWxBZ2VudHM6IHRoaXMuY29udHJpYnV0aW9ucy5zaXplLFxyXG4gICAgICB0b3RhbFRyYWplY3RvcmllczogdGhpcy50b3RhbFRyYWplY3RvcmllcyxcclxuICAgICAgcGF0dGVybnNMZWFybmVkOiB0aGlzLnJlYXNvbmluZ0Jhbmsuc3RhdHMoKS50b3RhbFBhdHRlcm5zLFxyXG4gICAgICBhdmdRdWFsaXR5LFxyXG4gICAgICBxdWFsaXR5VGhyZXNob2xkOiB0aGlzLmNvbmZpZy5xdWFsaXR5VGhyZXNob2xkLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBjb250cmlidXRpb24gaGlzdG9yeVxyXG4gICAqL1xyXG4gIGdldENvbnRyaWJ1dGlvbnMoKTogTWFwPHN0cmluZywgQWdlbnRDb250cmlidXRpb24+IHtcclxuICAgIHJldHVybiBuZXcgTWFwKHRoaXMuY29udHJpYnV0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdG90YWwgYWdlbnQgY291bnRcclxuICAgKi9cclxuICBhZ2VudENvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250cmlidXRpb25zLnNpemU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdG90YWwgdHJhamVjdG9yeSBjb3VudFxyXG4gICAqL1xyXG4gIGdldFRvdGFsVHJhamVjdG9yaWVzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy50b3RhbFRyYWplY3RvcmllcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGFsbCBjb250cmlidXRpb25zXHJcbiAgICovXHJcbiAgY2xlYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnRyaWJ1dGlvbnMuY2xlYXIoKTtcclxuICAgIHRoaXMudG90YWxUcmFqZWN0b3JpZXMgPSAwO1xyXG4gICAgdGhpcy5xdWFsaXR5U2FtcGxlcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwb3J0IGNvb3JkaW5hdG9yIHN0YXRlXHJcbiAgICovXHJcbiAgdG9KU09OKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICBjb29yZGluYXRvcklkOiB0aGlzLmNvb3JkaW5hdG9ySWQsXHJcbiAgICAgIHN0YXRzOiB0aGlzLnN0YXRzKCksXHJcbiAgICAgIGNvbnRyaWJ1dGlvbnM6IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLmNvbnRyaWJ1dGlvbnMpLFxyXG4gICAgICBwYXR0ZXJuczogdGhpcy5nZXRBbGxQYXR0ZXJucygpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYWdlbnQgd2l0aCBjb29yZGluYXRvcidzIGxlYXJuZWQgcGF0dGVybnNcclxuICAgKi9cclxuICBjcmVhdGVBZ2VudChhZ2VudElkOiBzdHJpbmcpOiBFcGhlbWVyYWxBZ2VudCB7XHJcbiAgICBjb25zdCBhZ2VudCA9IG5ldyBFcGhlbWVyYWxBZ2VudChhZ2VudElkLCB7XHJcbiAgICAgIGhpZGRlbkRpbTogdGhpcy5jb25maWcuaGlkZGVuRGltLFxyXG4gICAgICBlbWJlZGRpbmdEaW06IHRoaXMuY29uZmlnLmVtYmVkZGluZ0RpbSxcclxuICAgICAgbWljcm9Mb3JhUmFuazogdGhpcy5jb25maWcubWljcm9Mb3JhUmFuayxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFdhcm0gc3RhcnQ6IHByb2Nlc3MgaW5pdGlhbCBwYXR0ZXJucyBhcyBwb3NpdGl2ZSBleGFtcGxlc1xyXG4gICAgY29uc3QgaW5pdGlhbFBhdHRlcm5zID0gdGhpcy5nZXRJbml0aWFsUGF0dGVybnMoNSk7XHJcbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgaW5pdGlhbFBhdHRlcm5zKSB7XHJcbiAgICAgIGFnZW50LnByb2Nlc3NUYXNrKHBhdHRlcm4uZW1iZWRkaW5nLCBwYXR0ZXJuLnN1Y2Nlc3NSYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYWdlbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3VsZENvbnNvbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udHJpYnV0aW9ucy5zaXplICUgdGhpcy5jb25zb2xpZGF0aW9uSW50ZXJ2YWwgPT09IDAgJiZcclxuICAgICAgICAgICB0aGlzLmNvbnRyaWJ1dGlvbnMuc2l6ZSA+IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJvdXRlVG9QYXR0ZXJuVHlwZShyb3V0ZT86IHN0cmluZyk6IFBhdHRlcm5UeXBlIHtcclxuICAgIGlmICghcm91dGUpIHJldHVybiAncXVlcnlfcmVzcG9uc2UnO1xyXG4gICAgaWYgKHJvdXRlLmluY2x1ZGVzKCdjb2RlJykpIHJldHVybiAncXVlcnlfcmVzcG9uc2UnO1xyXG4gICAgaWYgKHJvdXRlLmluY2x1ZGVzKCdyb3V0ZScpKSByZXR1cm4gJ3JvdXRpbmcnO1xyXG4gICAgaWYgKHJvdXRlLmluY2x1ZGVzKCdtZW1vcnknKSkgcmV0dXJuICdjb250ZXh0X3JldHJpZXZhbCc7XHJcbiAgICByZXR1cm4gJ3F1ZXJ5X3Jlc3BvbnNlJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlTWFzdGVyTG9yYShlbWJlZGRpbmc6IEVtYmVkZGluZywgcXVhbGl0eTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBsciA9IDAuMDAwNSAqIHF1YWxpdHk7IC8vIFNsb3dlciBsZWFybmluZyBmb3IgY29vcmRpbmF0b3JcclxuICAgIGNvbnN0IGRpbSA9IE1hdGgubWluKGVtYmVkZGluZy5sZW5ndGgsIHRoaXMuY29uZmlnLmhpZGRlbkRpbSk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihkaW0sIHRoaXMubWFzdGVyTG9yYVdlaWdodHMubGVuZ3RoKTsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGdyYWQgPSBlbWJlZGRpbmdbaSAlIGVtYmVkZGluZy5sZW5ndGhdICogKHF1YWxpdHkgLSAwLjUpO1xyXG4gICAgICB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2ldICs9IGxyICogZ3JhZDtcclxuXHJcbiAgICAgIC8vIEVXQyByZWd1bGFyaXphdGlvbiAtIHByZXZlbnQgbGFyZ2Ugd2VpZ2h0IGNoYW5nZXNcclxuICAgICAgY29uc3QgcGVuYWx0eSA9IHRoaXMuY29uZmlnLmV3Y0xhbWJkYSAqIHRoaXMubWFzdGVyTG9yYVdlaWdodHNbaV0gKiAwLjAwMDE7XHJcbiAgICAgIHRoaXMubWFzdGVyTG9yYVdlaWdodHNbaV0gLT0gcGVuYWx0eTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
520
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVkZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZlZGVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Q0c7QUFjSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXZDOztHQUVHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBOEI7SUFDMUQsU0FBUyxFQUFFLEdBQUc7SUFDZCxZQUFZLEVBQUUsR0FBRztJQUNqQixhQUFhLEVBQUUsQ0FBQztJQUNoQixZQUFZLEVBQUUsQ0FBQztJQUNmLGtCQUFrQixFQUFFLEdBQUc7SUFDdkIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsU0FBUyxFQUFFLElBQUk7SUFDZixnQkFBZ0IsRUFBRSxHQUFHO0NBQ3RCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBU3pCLFlBQVksT0FBZSxFQUFFLE1BQXdCO1FBTjdDLGlCQUFZLEdBQXVCLEVBQUUsQ0FBQztRQUV0QyxtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUU5QixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUdqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyx3QkFBd0IsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUMsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7YUFD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QUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGZWRlcmF0ZWQgTGVhcm5pbmcgZm9yIFNPTkFcbiAqXG4gKiBFbmFibGUgZGlzdHJpYnV0ZWQgbGVhcm5pbmcgYWNyb3NzIGVwaGVtZXJhbCBhZ2VudHMgdGhhdCBzaGFyZVxuICogdHJhamVjdG9yaWVzIHdpdGggYSBjZW50cmFsIGNvb3JkaW5hdG9yLlxuICpcbiAqIEFyY2hpdGVjdHVyZTpcbiAqIGBgYFxuICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICog4pSCICBBZ2VudCBBICAgIOKUgiAgICAg4pSCICBBZ2VudCBCICAgIOKUgiAgICAg4pSCICBBZ2VudCBDICAgIOKUglxuICog4pSCIChlcGhlbWVyYWwpIOKUgiAgICAg4pSCIChlcGhlbWVyYWwpIOKUgiAgICAg4pSCIChlcGhlbWVyYWwpIOKUglxuICog4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICDilJTilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilJggICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICogICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICAgICAg4pSCXG4gKiAgICAgICAg4pSCICAgIGV4cG9ydCgpICAgICAgIOKUgiAgICBleHBvcnQoKSAgICAgICDilIIgICAgZXhwb3J0KClcbiAqICAgICAgICDilrwgICAgICAgICAgICAgICAgICAg4pa8ICAgICAgICAgICAgICAgICAgIOKWvFxuICogICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAqICAg4pSCICAgICAgICAgICAgRmVkZXJhdGVkIENvb3JkaW5hdG9yICAgICAgICAgICAgICAg4pSCXG4gKiAgIOKUgiAgICAgICAgIChwZXJzaXN0ZW50LCBsYXJnZSBjYXBhY2l0eSkgICAgICAgICAgIOKUglxuICogICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBFcGhlbWVyYWxBZ2VudCwgRmVkZXJhdGVkQ29vcmRpbmF0b3IgfSBmcm9tICdAcnV2ZWN0b3IvcnV2bGxtJztcbiAqXG4gKiAvLyBDcmVhdGUgY29vcmRpbmF0b3IgKHBlcnNpc3RlbnQpXG4gKiBjb25zdCBjb29yZGluYXRvciA9IG5ldyBGZWRlcmF0ZWRDb29yZGluYXRvcignY29vcmQtMScsIHsgaGlkZGVuRGltOiAyNTYgfSk7XG4gKlxuICogLy8gQ3JlYXRlIGVwaGVtZXJhbCBhZ2VudFxuICogY29uc3QgYWdlbnQgPSBuZXcgRXBoZW1lcmFsQWdlbnQoJ2FnZW50LTEnLCB7IGhpZGRlbkRpbTogMjU2IH0pO1xuICpcbiAqIC8vIEFnZW50IHByb2Nlc3NlcyB0YXNrc1xuICogYWdlbnQucHJvY2Vzc1Rhc2soWzAuMSwgMC4yLCAuLi5dLCAwLjg1KTtcbiAqIGFnZW50LnByb2Nlc3NUYXNrKFswLjMsIDAuNCwgLi4uXSwgMC45Mik7XG4gKlxuICogLy8gRXhwb3J0IGFuZCBhZ2dyZWdhdGUgYmVmb3JlIGFnZW50IHRlcm1pbmF0ZXNcbiAqIGNvbnN0IGV4cG9ydERhdGEgPSBhZ2VudC5leHBvcnRTdGF0ZSgpO1xuICogY29uc3QgcmVzdWx0ID0gY29vcmRpbmF0b3IuYWdncmVnYXRlKGV4cG9ydERhdGEpO1xuICpcbiAqIGNvbnNvbGUubG9nKGBBY2NlcHRlZDogJHtyZXN1bHQudHJhamVjdG9yaWVzQWNjZXB0ZWR9YCk7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQge1xuICBFbWJlZGRpbmcsXG4gIExlYXJuZWRQYXR0ZXJuLFxuICBQYXR0ZXJuVHlwZSxcbiAgRmVkZXJhdGVkQ29uZmlnLFxuICBUcmFqZWN0b3J5RXhwb3J0LFxuICBBZ2VudEV4cG9ydFN0YXRzLFxuICBBZ2VudEV4cG9ydCxcbiAgQWdlbnRDb250cmlidXRpb24sXG4gIEFnZ3JlZ2F0aW9uUmVzdWx0LFxuICBDb29yZGluYXRvclN0YXRzLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFJlYXNvbmluZ0JhbmsgfSBmcm9tICcuL3NvbmEnO1xuXG4vKipcbiAqIERlZmF1bHQgZmVkZXJhdGVkIGNvbmZpZ1xuICovXG5jb25zdCBERUZBVUxUX0ZFREVSQVRFRF9DT05GSUc6IFJlcXVpcmVkPEZlZGVyYXRlZENvbmZpZz4gPSB7XG4gIGhpZGRlbkRpbTogMjU2LFxuICBlbWJlZGRpbmdEaW06IDI1NixcbiAgbWljcm9Mb3JhUmFuazogMixcbiAgYmFzZUxvcmFSYW5rOiA4LFxuICB0cmFqZWN0b3J5Q2FwYWNpdHk6IDUwMCxcbiAgcGF0dGVybkNsdXN0ZXJzOiAyNSxcbiAgZXdjTGFtYmRhOiAyMDAwLFxuICBxdWFsaXR5VGhyZXNob2xkOiAwLjQsXG59O1xuXG4vKipcbiAqIEVwaGVtZXJhbCBBZ2VudCBmb3IgZmVkZXJhdGVkIGxlYXJuaW5nXG4gKlxuICogQ29sbGVjdHMgdHJhamVjdG9yaWVzIGR1cmluZyBpdHMgc2Vzc2lvbiBhbmQgZXhwb3J0cyBzdGF0ZSBiZWZvcmUgdGVybWluYXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFnZW50ID0gbmV3IEVwaGVtZXJhbEFnZW50KCdhZ2VudC0xJywgeyBoaWRkZW5EaW06IDI1NiB9KTtcbiAqXG4gKiAvLyBQcm9jZXNzIHRhc2tzIGR1cmluZyBzZXNzaW9uXG4gKiBhZ2VudC5wcm9jZXNzVGFzayhlbWJlZGRpbmcxLCAwLjg1KTtcbiAqIGFnZW50LnByb2Nlc3NUYXNrV2l0aFJvdXRlKGVtYmVkZGluZzIsIDAuOTIsICdjb2RlLW1vZGVsJyk7XG4gKlxuICogLy8gRXhwb3J0IGJlZm9yZSB0ZXJtaW5hdGlvblxuICogY29uc3QgZXhwb3J0RGF0YSA9IGFnZW50LmV4cG9ydFN0YXRlKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEVwaGVtZXJhbEFnZW50IHtcbiAgcHJpdmF0ZSBhZ2VudElkOiBzdHJpbmc7XG4gIHByaXZhdGUgY29uZmlnOiBSZXF1aXJlZDxGZWRlcmF0ZWRDb25maWc+O1xuICBwcml2YXRlIHRyYWplY3RvcmllczogVHJhamVjdG9yeUV4cG9ydFtdID0gW107XG4gIHByaXZhdGUgc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcXVhbGl0eVNhbXBsZXM6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgcmVhc29uaW5nQmFuazogUmVhc29uaW5nQmFuaztcbiAgcHJpdmF0ZSBsb3JhV2VpZ2h0czogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihhZ2VudElkOiBzdHJpbmcsIGNvbmZpZz86IEZlZGVyYXRlZENvbmZpZykge1xuICAgIHRoaXMuYWdlbnRJZCA9IGFnZW50SWQ7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLkRFRkFVTFRfRkVERVJBVEVEX0NPTkZJRywgLi4uY29uZmlnIH07XG4gICAgdGhpcy5zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMucmVhc29uaW5nQmFuayA9IG5ldyBSZWFzb25pbmdCYW5rKDAuNyk7XG5cbiAgICAvLyBJbml0aWFsaXplIG1pY3JvLUxvUkEgd2VpZ2h0c1xuICAgIHRoaXMubG9yYVdlaWdodHMgPSBuZXcgQXJyYXkodGhpcy5jb25maWcuaGlkZGVuRGltICogdGhpcy5jb25maWcubWljcm9Mb3JhUmFuaylcbiAgICAgIC5maWxsKDApXG4gICAgICAubWFwKCgpID0+IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIDAuMDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhZ2VudCBJRFxuICAgKi9cbiAgZ2V0QWdlbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFnZW50SWQ7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhIHRhc2sgYW5kIHJlY29yZCB0cmFqZWN0b3J5XG4gICAqL1xuICBwcm9jZXNzVHJhamVjdG9yeShcbiAgICBlbWJlZGRpbmc6IEVtYmVkZGluZyxcbiAgICBhY3RpdmF0aW9uczogRW1iZWRkaW5nLFxuICAgIHF1YWxpdHk6IG51bWJlcixcbiAgICByb3V0ZT86IHN0cmluZyxcbiAgICBjb250ZXh0OiBzdHJpbmdbXSA9IFtdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAvLyBTdG9yZSB0cmFqZWN0b3J5IGZvciBleHBvcnRcbiAgICB0aGlzLnRyYWplY3Rvcmllcy5wdXNoKHtcbiAgICAgIGVtYmVkZGluZzogWy4uLmVtYmVkZGluZ10sXG4gICAgICBxdWFsaXR5LFxuICAgICAgcm91dGUsXG4gICAgICBjb250ZXh0OiBbLi4uY29udGV4dF0sXG4gICAgICB0aW1lc3RhbXA6IG5vdyxcbiAgICB9KTtcblxuICAgIHRoaXMucXVhbGl0eVNhbXBsZXMucHVzaChxdWFsaXR5KTtcblxuICAgIC8vIFN0b3JlIGluIGxvY2FsIHJlYXNvbmluZyBiYW5rIGlmIGhpZ2ggcXVhbGl0eVxuICAgIGlmIChxdWFsaXR5ID49IDAuNykge1xuICAgICAgdGhpcy5yZWFzb25pbmdCYW5rLnN0b3JlKCdxdWVyeV9yZXNwb25zZScsIGVtYmVkZGluZyk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGxvY2FsIExvUkEgd2VpZ2h0cyBiYXNlZCBvbiBxdWFsaXR5XG4gICAgdGhpcy51cGRhdGVMb3JhV2VpZ2h0cyhlbWJlZGRpbmcsIHF1YWxpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbXBsZSBwcm9jZXNzIHRhc2sgbWV0aG9kXG4gICAqL1xuICBwcm9jZXNzVGFzayhlbWJlZGRpbmc6IEVtYmVkZGluZywgcXVhbGl0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wcm9jZXNzVHJhamVjdG9yeShlbWJlZGRpbmcsIGVtYmVkZGluZywgcXVhbGl0eSk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB0YXNrIHdpdGggcm91dGUgaW5mb3JtYXRpb25cbiAgICovXG4gIHByb2Nlc3NUYXNrV2l0aFJvdXRlKGVtYmVkZGluZzogRW1iZWRkaW5nLCBxdWFsaXR5OiBudW1iZXIsIHJvdXRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnByb2Nlc3NUcmFqZWN0b3J5KGVtYmVkZGluZywgZW1iZWRkaW5nLCBxdWFsaXR5LCByb3V0ZSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgbWljcm8tTG9SQSB0byBoaWRkZW4gc3RhdGVzXG4gICAqL1xuICBhcHBseU1pY3JvTG9yYShpbnB1dDogbnVtYmVyW10sIG91dHB1dDogbnVtYmVyW10pOiB2b2lkIHtcbiAgICBjb25zdCByYW5rID0gdGhpcy5jb25maWcubWljcm9Mb3JhUmFuaztcbiAgICBjb25zdCBkaW0gPSBNYXRoLm1pbihpbnB1dC5sZW5ndGgsIHRoaXMuY29uZmlnLmhpZGRlbkRpbSk7XG5cbiAgICAvLyBTaW1wbGUgbG93LXJhbmsgZGVjb21wb3NpdGlvbjogb3V0cHV0ID0gaW5wdXQgKyBBIEAgQiBAIGlucHV0XG4gICAgLy8gQSBpcyAoZGltIHggcmFuayksIEIgaXMgKHJhbmsgeCBkaW0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW07IGkrKykge1xuICAgICAgbGV0IGRlbHRhID0gMDtcbiAgICAgIGZvciAobGV0IHIgPSAwOyByIDwgcmFuazsgcisrKSB7XG4gICAgICAgIGxldCBiU3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkaW07IGorKykge1xuICAgICAgICAgIGNvbnN0IGJJZHggPSByICogZGltICsgajtcbiAgICAgICAgICBpZiAoYklkeCA8IHRoaXMubG9yYVdlaWdodHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBiU3VtICs9IHRoaXMubG9yYVdlaWdodHNbYklkeF0gKiAoaW5wdXRbal0gfHwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFJZHggPSBpICogcmFuayArIHI7XG4gICAgICAgIGlmIChhSWR4IDwgdGhpcy5sb3JhV2VpZ2h0cy5sZW5ndGgpIHtcbiAgICAgICAgICBkZWx0YSArPSB0aGlzLmxvcmFXZWlnaHRzW2FJZHhdICogYlN1bTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0cHV0W2ldID0gKGlucHV0W2ldIHx8IDApICsgZGVsdGEgKiAwLjE7IC8vIFNjYWxlIGZhY3RvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbnVtYmVyIG9mIGNvbGxlY3RlZCB0cmFqZWN0b3JpZXNcbiAgICovXG4gIHRyYWplY3RvcnlDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRyYWplY3Rvcmllcy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGF2ZXJhZ2UgcXVhbGl0eVxuICAgKi9cbiAgYXZnUXVhbGl0eSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnF1YWxpdHlTYW1wbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHRoaXMucXVhbGl0eVNhbXBsZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgLyB0aGlzLnF1YWxpdHlTYW1wbGVzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdXB0aW1lIGluIHNlY29uZHNcbiAgICovXG4gIHVwdGltZVNlY29uZHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRUaW1lKSAvIDEwMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhZ2VudCBzdGF0c1xuICAgKi9cbiAgc3RhdHMoKTogQWdlbnRFeHBvcnRTdGF0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsVHJhamVjdG9yaWVzOiB0aGlzLnRyYWplY3Rvcmllcy5sZW5ndGgsXG4gICAgICBhdmdRdWFsaXR5OiB0aGlzLmF2Z1F1YWxpdHkoKSxcbiAgICAgIHBhdHRlcm5zTGVhcm5lZDogdGhpcy5yZWFzb25pbmdCYW5rLnN0YXRzKCkudG90YWxQYXR0ZXJucyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIGxvY2FsIGxlYXJuaW5nXG4gICAqL1xuICBmb3JjZUxlYXJuKCk6IHN0cmluZyB7XG4gICAgLy8gUHJ1bmUgbG93LXBlcmZvcm1pbmcgcGF0dGVybnNcbiAgICBjb25zdCBwcnVuZWQgPSB0aGlzLnJlYXNvbmluZ0JhbmsucHJ1bmUoMC4zLCAzKTtcbiAgICByZXR1cm4gYFBydW5lZCAke3BydW5lZH0gcGF0dGVybnMsICR7dGhpcy5yZWFzb25pbmdCYW5rLnN0YXRzKCkudG90YWxQYXR0ZXJuc30gcmVtYWluaW5nYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGVhcm5lZCBwYXR0ZXJuc1xuICAgKi9cbiAgZ2V0UGF0dGVybnMoKTogTGVhcm5lZFBhdHRlcm5bXSB7XG4gICAgcmV0dXJuIHRoaXMucmVhc29uaW5nQmFuay5nZXRCeVR5cGUoJ3F1ZXJ5X3Jlc3BvbnNlJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdHJhamVjdG9yaWVzIChhZnRlciBleHBvcnQpXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnRyYWplY3RvcmllcyA9IFtdO1xuICAgIHRoaXMucXVhbGl0eVNhbXBsZXMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgYWdlbnQgc3RhdGUgZm9yIGZlZGVyYXRpb25cbiAgICpcbiAgICogQ2FsbCB0aGlzIGJlZm9yZSB0ZXJtaW5hdGluZyB0aGUgYWdlbnQuXG4gICAqL1xuICBleHBvcnRTdGF0ZSgpOiBBZ2VudEV4cG9ydCB7XG4gICAgLy8gRm9yY2UgbGVhcm5pbmcgYmVmb3JlIGV4cG9ydFxuICAgIHRoaXMuZm9yY2VMZWFybigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFnZW50SWQ6IHRoaXMuYWdlbnRJZCxcbiAgICAgIHRyYWplY3RvcmllczogWy4uLnRoaXMudHJhamVjdG9yaWVzXSxcbiAgICAgIHN0YXRzOiB0aGlzLnN0YXRzKCksXG4gICAgICBzZXNzaW9uRHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRUaW1lLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRvIEpTT05cbiAgICovXG4gIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmV4cG9ydFN0YXRlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMb3JhV2VpZ2h0cyhlbWJlZGRpbmc6IEVtYmVkZGluZywgcXVhbGl0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gU2ltcGxlIGdyYWRpZW50IHVwZGF0ZSBiYXNlZCBvbiBxdWFsaXR5XG4gICAgY29uc3QgbHIgPSAwLjAwMSAqIHF1YWxpdHk7XG4gICAgY29uc3QgZGltID0gTWF0aC5taW4oZW1iZWRkaW5nLmxlbmd0aCwgdGhpcy5jb25maWcuaGlkZGVuRGltKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4oZGltLCB0aGlzLmxvcmFXZWlnaHRzLmxlbmd0aCk7IGkrKykge1xuICAgICAgY29uc3QgZ3JhZCA9IGVtYmVkZGluZ1tpICUgZW1iZWRkaW5nLmxlbmd0aF0gKiAocXVhbGl0eSAtIDAuNSk7XG4gICAgICB0aGlzLmxvcmFXZWlnaHRzW2ldICs9IGxyICogZ3JhZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGZWRlcmF0ZWQgTGVhcm5pbmcgQ29vcmRpbmF0b3JcbiAqXG4gKiBBZ2dyZWdhdGVzIGxlYXJuaW5nIGZyb20gbXVsdGlwbGUgZXBoZW1lcmFsIGFnZW50cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY29vcmRpbmF0b3IgPSBuZXcgRmVkZXJhdGVkQ29vcmRpbmF0b3IoJ2Nvb3JkLTEnLCB7IGhpZGRlbkRpbTogMjU2IH0pO1xuICpcbiAqIC8vIEFnZ3JlZ2F0ZSBleHBvcnRzIGZyb20gbXVsdGlwbGUgYWdlbnRzXG4gKiBmb3IgKGNvbnN0IGFnZW50RXhwb3J0IG9mIGFnZW50RXhwb3J0cykge1xuICogICBjb25zdCByZXN1bHQgPSBjb29yZGluYXRvci5hZ2dyZWdhdGUoYWdlbnRFeHBvcnQpO1xuICogICBjb25zb2xlLmxvZyhgQWdlbnQgJHtyZXN1bHQuYWdlbnRJZH06ICR7cmVzdWx0LnRyYWplY3Rvcmllc0FjY2VwdGVkfSBhY2NlcHRlZGApO1xuICogfVxuICpcbiAqIC8vIEdldCBjb29yZGluYXRvciBzdGF0aXN0aWNzXG4gKiBjb25zdCBzdGF0cyA9IGNvb3JkaW5hdG9yLnN0YXRzKCk7XG4gKiBjb25zb2xlLmxvZyhgVG90YWwgcGF0dGVybnM6ICR7c3RhdHMucGF0dGVybnNMZWFybmVkfWApO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBGZWRlcmF0ZWRDb29yZGluYXRvciB7XG4gIHByaXZhdGUgY29vcmRpbmF0b3JJZDogc3RyaW5nO1xuICBwcml2YXRlIGNvbmZpZzogUmVxdWlyZWQ8RmVkZXJhdGVkQ29uZmlnPjtcbiAgcHJpdmF0ZSBjb250cmlidXRpb25zOiBNYXA8c3RyaW5nLCBBZ2VudENvbnRyaWJ1dGlvbj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgdG90YWxUcmFqZWN0b3JpZXM6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgY29uc29saWRhdGlvbkludGVydmFsOiBudW1iZXIgPSA1MDtcbiAgcHJpdmF0ZSByZWFzb25pbmdCYW5rOiBSZWFzb25pbmdCYW5rO1xuICBwcml2YXRlIHF1YWxpdHlTYW1wbGVzOiBudW1iZXJbXSA9IFtdO1xuICBwcml2YXRlIG1hc3RlckxvcmFXZWlnaHRzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGNvb3JkaW5hdG9ySWQ6IHN0cmluZywgY29uZmlnPzogRmVkZXJhdGVkQ29uZmlnKSB7XG4gICAgdGhpcy5jb29yZGluYXRvcklkID0gY29vcmRpbmF0b3JJZDtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIC4uLkRFRkFVTFRfRkVERVJBVEVEX0NPTkZJRyxcbiAgICAgIHRyYWplY3RvcnlDYXBhY2l0eTogNTAwMDAsIC8vIExhcmdlIGNhcGFjaXR5IGZvciBjb29yZGluYXRvclxuICAgICAgcGF0dGVybkNsdXN0ZXJzOiAyMDAsXG4gICAgICBiYXNlTG9yYVJhbms6IDE2LCAvLyBEZWVwZXIgZm9yIGFnZ3JlZ2F0aW9uXG4gICAgICAuLi5jb25maWcsXG4gICAgfTtcbiAgICB0aGlzLnJlYXNvbmluZ0JhbmsgPSBuZXcgUmVhc29uaW5nQmFuayh0aGlzLmNvbmZpZy5xdWFsaXR5VGhyZXNob2xkKTtcblxuICAgIC8vIEluaXRpYWxpemUgbWFzdGVyIExvUkEgd2VpZ2h0c1xuICAgIHRoaXMubWFzdGVyTG9yYVdlaWdodHMgPSBuZXcgQXJyYXkodGhpcy5jb25maWcuaGlkZGVuRGltICogdGhpcy5jb25maWcuYmFzZUxvcmFSYW5rKVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKCkgPT4gKE1hdGgucmFuZG9tKCkgLSAwLjUpICogMC4wMSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvb3JkaW5hdG9yIElEXG4gICAqL1xuICBnZXRDb29yZGluYXRvcklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29vcmRpbmF0b3JJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcXVhbGl0eSB0aHJlc2hvbGQgZm9yIGFjY2VwdGluZyB0cmFqZWN0b3JpZXNcbiAgICovXG4gIHNldFF1YWxpdHlUaHJlc2hvbGQodGhyZXNob2xkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5xdWFsaXR5VGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjb25zb2xpZGF0aW9uIGludGVydmFsXG4gICAqL1xuICBzZXRDb25zb2xpZGF0aW9uSW50ZXJ2YWwoaW50ZXJ2YWw6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29uc29saWRhdGlvbkludGVydmFsID0gaW50ZXJ2YWw7XG4gIH1cblxuICAvKipcbiAgICogQWdncmVnYXRlIGFnZW50IGV4cG9ydCBpbnRvIGNvb3JkaW5hdG9yXG4gICAqL1xuICBhZ2dyZWdhdGUoZXhwb3J0RGF0YTogQWdlbnRFeHBvcnQpOiBBZ2dyZWdhdGlvblJlc3VsdCB7XG4gICAgbGV0IGFjY2VwdGVkID0gMDtcbiAgICBsZXQgcmVqZWN0ZWQgPSAwO1xuXG4gICAgLy8gUmVwbGF5IHRyYWplY3RvcmllcyBpbnRvIG1hc3RlclxuICAgIGZvciAoY29uc3QgdHJhaiBvZiBleHBvcnREYXRhLnRyYWplY3Rvcmllcykge1xuICAgICAgaWYgKHRyYWoucXVhbGl0eSA+PSB0aGlzLmNvbmZpZy5xdWFsaXR5VGhyZXNob2xkKSB7XG4gICAgICAgIC8vIFN0b3JlIHBhdHRlcm5cbiAgICAgICAgY29uc3QgcGF0dGVyblR5cGUgPSB0aGlzLnJvdXRlVG9QYXR0ZXJuVHlwZSh0cmFqLnJvdXRlKTtcbiAgICAgICAgdGhpcy5yZWFzb25pbmdCYW5rLnN0b3JlKHBhdHRlcm5UeXBlLCB0cmFqLmVtYmVkZGluZyk7XG4gICAgICAgIHRoaXMucXVhbGl0eVNhbXBsZXMucHVzaCh0cmFqLnF1YWxpdHkpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBtYXN0ZXIgTG9SQSB3ZWlnaHRzXG4gICAgICAgIHRoaXMudXBkYXRlTWFzdGVyTG9yYSh0cmFqLmVtYmVkZGluZywgdHJhai5xdWFsaXR5KTtcblxuICAgICAgICBhY2NlcHRlZCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0ZWQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnRvdGFsVHJhamVjdG9yaWVzICs9IGFjY2VwdGVkO1xuXG4gICAgLy8gUmVjb3JkIGNvbnRyaWJ1dGlvblxuICAgIHRoaXMuY29udHJpYnV0aW9ucy5zZXQoZXhwb3J0RGF0YS5hZ2VudElkLCB7XG4gICAgICB0cmFqZWN0b3J5Q291bnQ6IGV4cG9ydERhdGEudHJhamVjdG9yaWVzLmxlbmd0aCxcbiAgICAgIGF2Z1F1YWxpdHk6IGV4cG9ydERhdGEuc3RhdHMuYXZnUXVhbGl0eSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIHNlc3Npb25EdXJhdGlvbk1zOiBleHBvcnREYXRhLnNlc3Npb25EdXJhdGlvbk1zLFxuICAgIH0pO1xuXG4gICAgLy8gQXV0by1jb25zb2xpZGF0ZSBpZiBuZWVkZWRcbiAgICBjb25zdCBjb25zb2xpZGF0ZWQgPSB0aGlzLnNob3VsZENvbnNvbGlkYXRlKCk7XG4gICAgaWYgKGNvbnNvbGlkYXRlZCkge1xuICAgICAgdGhpcy5mb3JjZUNvbnNvbGlkYXRlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFnZW50SWQ6IGV4cG9ydERhdGEuYWdlbnRJZCxcbiAgICAgIHRyYWplY3Rvcmllc0FjY2VwdGVkOiBhY2NlcHRlZCxcbiAgICAgIHRyYWplY3Rvcmllc1JlamVjdGVkOiByZWplY3RlZCxcbiAgICAgIGNvbnNvbGlkYXRlZCxcbiAgICAgIHRvdGFsQWdlbnRzOiB0aGlzLmNvbnRyaWJ1dGlvbnMuc2l6ZSxcbiAgICAgIHRvdGFsVHJhamVjdG9yaWVzOiB0aGlzLnRvdGFsVHJhamVjdG9yaWVzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9yY2UgY29uc29saWRhdGlvbiAobGVhcm5pbmcpXG4gICAqL1xuICBmb3JjZUNvbnNvbGlkYXRlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJ1bmVkID0gdGhpcy5yZWFzb25pbmdCYW5rLnBydW5lKDAuMywgNSk7XG4gICAgcmV0dXJuIGBDb25zb2xpZGF0ZWQ6IHBydW5lZCAke3BydW5lZH0gcGF0dGVybnMsICR7dGhpcy5yZWFzb25pbmdCYW5rLnN0YXRzKCkudG90YWxQYXR0ZXJuc30gcmVtYWluaW5nYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zb2xpZGF0ZSBsZWFybmluZyAoYWxpYXMpXG4gICAqL1xuICBjb25zb2xpZGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZvcmNlQ29uc29saWRhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaW5pdGlhbCBwYXR0ZXJucyBmb3IgbmV3IGFnZW50cyAod2FybSBzdGFydClcbiAgICovXG4gIGdldEluaXRpYWxQYXR0ZXJucyhrOiBudW1iZXIgPSAxMCk6IExlYXJuZWRQYXR0ZXJuW10ge1xuICAgIGNvbnN0IGFsbFBhdHRlcm5zID0gW1xuICAgICAgLi4udGhpcy5yZWFzb25pbmdCYW5rLmdldEJ5VHlwZSgncXVlcnlfcmVzcG9uc2UnKSxcbiAgICAgIC4uLnRoaXMucmVhc29uaW5nQmFuay5nZXRCeVR5cGUoJ3JvdXRpbmcnKSxcbiAgICBdO1xuXG4gICAgLy8gU29ydCBieSBzdWNjZXNzIHJhdGUgYW5kIHJldHVybiB0b3Aga1xuICAgIHJldHVybiBhbGxQYXR0ZXJuc1xuICAgICAgLnNvcnQoKGEsIGIpID0+IGIuc3VjY2Vzc1JhdGUgLSBhLnN1Y2Nlc3NSYXRlKVxuICAgICAgLnNsaWNlKDAsIGspO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgbGVhcm5lZCBwYXR0ZXJuc1xuICAgKi9cbiAgZ2V0QWxsUGF0dGVybnMoKTogTGVhcm5lZFBhdHRlcm5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnRoaXMucmVhc29uaW5nQmFuay5nZXRCeVR5cGUoJ3F1ZXJ5X3Jlc3BvbnNlJyksXG4gICAgICAuLi50aGlzLnJlYXNvbmluZ0JhbmsuZ2V0QnlUeXBlKCdyb3V0aW5nJyksXG4gICAgICAuLi50aGlzLnJlYXNvbmluZ0JhbmsuZ2V0QnlUeXBlKCdjb250ZXh0X3JldHJpZXZhbCcpLFxuICAgICAgLi4udGhpcy5yZWFzb25pbmdCYW5rLmdldEJ5VHlwZSgnY29ycmVjdGlvbicpLFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogRmluZCBzaW1pbGFyIHBhdHRlcm5zXG4gICAqL1xuICBmaW5kUGF0dGVybnMocXVlcnk6IEVtYmVkZGluZywgazogbnVtYmVyKTogTGVhcm5lZFBhdHRlcm5bXSB7XG4gICAgcmV0dXJuIHRoaXMucmVhc29uaW5nQmFuay5maW5kU2ltaWxhcihxdWVyeSwgayk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgY29vcmRpbmF0b3IncyBMb1JBIHRvIGlucHV0XG4gICAqIE9QVElNSVpFRDogUHJlLWNvbXB1dGUgaGlkZGVuIGxheWVyIG9uY2UsIHJldXNlIHR5cGVkIGFycmF5c1xuICAgKi9cbiAgYXBwbHlMb3JhKGlucHV0OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCByYW5rID0gdGhpcy5jb25maWcuYmFzZUxvcmFSYW5rO1xuICAgIGNvbnN0IGRpbSA9IE1hdGgubWluKGlucHV0Lmxlbmd0aCwgdGhpcy5jb25maWcuaGlkZGVuRGltKTtcbiAgICBjb25zdCB3ZWlnaHRzTGVuID0gdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0cy5sZW5ndGg7XG5cbiAgICAvLyBQcmUtY29tcHV0ZSBoaWRkZW4gbGF5ZXIgKGlucHV0IEAgQilcbiAgICBjb25zdCBoaWRkZW4gPSBuZXcgRmxvYXQ2NEFycmF5KHJhbmspO1xuICAgIGZvciAobGV0IHIgPSAwOyByIDwgcmFuazsgcisrKSB7XG4gICAgICBsZXQgc3VtID0gMDtcbiAgICAgIGNvbnN0IGJhc2VJZHggPSByICogZGltO1xuICAgICAgLy8gVW5yb2xsIHRoZSBpbm5lciBsb29wXG4gICAgICBsZXQgaiA9IDA7XG4gICAgICBmb3IgKDsgaiArIDMgPCBkaW0gJiYgYmFzZUlkeCArIGogKyAzIDwgd2VpZ2h0c0xlbjsgaiArPSA0KSB7XG4gICAgICAgIHN1bSArPSB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2Jhc2VJZHggKyBqXSAqIChpbnB1dFtqXSB8fCAwKSArXG4gICAgICAgICAgICAgICB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2Jhc2VJZHggKyBqICsgMV0gKiAoaW5wdXRbaiArIDFdIHx8IDApICtcbiAgICAgICAgICAgICAgIHRoaXMubWFzdGVyTG9yYVdlaWdodHNbYmFzZUlkeCArIGogKyAyXSAqIChpbnB1dFtqICsgMl0gfHwgMCkgK1xuICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0c1tiYXNlSWR4ICsgaiArIDNdICogKGlucHV0W2ogKyAzXSB8fCAwKTtcbiAgICAgIH1cbiAgICAgIGZvciAoOyBqIDwgZGltICYmIGJhc2VJZHggKyBqIDwgd2VpZ2h0c0xlbjsgaisrKSB7XG4gICAgICAgIHN1bSArPSB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2Jhc2VJZHggKyBqXSAqIChpbnB1dFtqXSB8fCAwKTtcbiAgICAgIH1cbiAgICAgIGhpZGRlbltyXSA9IHN1bTtcbiAgICB9XG5cbiAgICAvLyBDb21wdXRlIG91dHB1dCAoaGlkZGVuIEAgQSArIGlucHV0KVxuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBBcnJheShpbnB1dC5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpIDwgZGltKSB7XG4gICAgICAgIGxldCBkZWx0YSA9IDA7XG4gICAgICAgIGNvbnN0IGJhc2VJZHggPSBpICogcmFuaztcbiAgICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCByYW5rICYmIGJhc2VJZHggKyByIDwgd2VpZ2h0c0xlbjsgcisrKSB7XG4gICAgICAgICAgZGVsdGEgKz0gdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0c1tiYXNlSWR4ICsgcl0gKiBoaWRkZW5bcl07XG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0W2ldID0gKGlucHV0W2ldIHx8IDApICsgZGVsdGEgKiAwLjE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRbaV0gPSBpbnB1dFtpXSB8fCAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvb3JkaW5hdG9yIHN0YXRpc3RpY3NcbiAgICovXG4gIHN0YXRzKCk6IENvb3JkaW5hdG9yU3RhdHMge1xuICAgIGNvbnN0IGF2Z1F1YWxpdHkgPSB0aGlzLnF1YWxpdHlTYW1wbGVzLmxlbmd0aCA+IDBcbiAgICAgID8gdGhpcy5xdWFsaXR5U2FtcGxlcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSAvIHRoaXMucXVhbGl0eVNhbXBsZXMubGVuZ3RoXG4gICAgICA6IDA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29vcmRpbmF0b3JJZDogdGhpcy5jb29yZGluYXRvcklkLFxuICAgICAgdG90YWxBZ2VudHM6IHRoaXMuY29udHJpYnV0aW9ucy5zaXplLFxuICAgICAgdG90YWxUcmFqZWN0b3JpZXM6IHRoaXMudG90YWxUcmFqZWN0b3JpZXMsXG4gICAgICBwYXR0ZXJuc0xlYXJuZWQ6IHRoaXMucmVhc29uaW5nQmFuay5zdGF0cygpLnRvdGFsUGF0dGVybnMsXG4gICAgICBhdmdRdWFsaXR5LFxuICAgICAgcXVhbGl0eVRocmVzaG9sZDogdGhpcy5jb25maWcucXVhbGl0eVRocmVzaG9sZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb250cmlidXRpb24gaGlzdG9yeVxuICAgKi9cbiAgZ2V0Q29udHJpYnV0aW9ucygpOiBNYXA8c3RyaW5nLCBBZ2VudENvbnRyaWJ1dGlvbj4ge1xuICAgIHJldHVybiBuZXcgTWFwKHRoaXMuY29udHJpYnV0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRvdGFsIGFnZW50IGNvdW50XG4gICAqL1xuICBhZ2VudENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJpYnV0aW9ucy5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0b3RhbCB0cmFqZWN0b3J5IGNvdW50XG4gICAqL1xuICBnZXRUb3RhbFRyYWplY3RvcmllcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRvdGFsVHJhamVjdG9yaWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjb250cmlidXRpb25zXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyaWJ1dGlvbnMuY2xlYXIoKTtcbiAgICB0aGlzLnRvdGFsVHJhamVjdG9yaWVzID0gMDtcbiAgICB0aGlzLnF1YWxpdHlTYW1wbGVzID0gW107XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGNvb3JkaW5hdG9yIHN0YXRlXG4gICAqL1xuICB0b0pTT04oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgY29vcmRpbmF0b3JJZDogdGhpcy5jb29yZGluYXRvcklkLFxuICAgICAgc3RhdHM6IHRoaXMuc3RhdHMoKSxcbiAgICAgIGNvbnRyaWJ1dGlvbnM6IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLmNvbnRyaWJ1dGlvbnMpLFxuICAgICAgcGF0dGVybnM6IHRoaXMuZ2V0QWxsUGF0dGVybnMoKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWdlbnQgd2l0aCBjb29yZGluYXRvcidzIGxlYXJuZWQgcGF0dGVybnNcbiAgICovXG4gIGNyZWF0ZUFnZW50KGFnZW50SWQ6IHN0cmluZyk6IEVwaGVtZXJhbEFnZW50IHtcbiAgICBjb25zdCBhZ2VudCA9IG5ldyBFcGhlbWVyYWxBZ2VudChhZ2VudElkLCB7XG4gICAgICBoaWRkZW5EaW06IHRoaXMuY29uZmlnLmhpZGRlbkRpbSxcbiAgICAgIGVtYmVkZGluZ0RpbTogdGhpcy5jb25maWcuZW1iZWRkaW5nRGltLFxuICAgICAgbWljcm9Mb3JhUmFuazogdGhpcy5jb25maWcubWljcm9Mb3JhUmFuayxcbiAgICB9KTtcblxuICAgIC8vIFdhcm0gc3RhcnQ6IHByb2Nlc3MgaW5pdGlhbCBwYXR0ZXJucyBhcyBwb3NpdGl2ZSBleGFtcGxlc1xuICAgIGNvbnN0IGluaXRpYWxQYXR0ZXJucyA9IHRoaXMuZ2V0SW5pdGlhbFBhdHRlcm5zKDUpO1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBpbml0aWFsUGF0dGVybnMpIHtcbiAgICAgIGFnZW50LnByb2Nlc3NUYXNrKHBhdHRlcm4uZW1iZWRkaW5nLCBwYXR0ZXJuLnN1Y2Nlc3NSYXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWdlbnQ7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZENvbnNvbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyaWJ1dGlvbnMuc2l6ZSAlIHRoaXMuY29uc29saWRhdGlvbkludGVydmFsID09PSAwICYmXG4gICAgICAgICAgIHRoaXMuY29udHJpYnV0aW9ucy5zaXplID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgcm91dGVUb1BhdHRlcm5UeXBlKHJvdXRlPzogc3RyaW5nKTogUGF0dGVyblR5cGUge1xuICAgIGlmICghcm91dGUpIHJldHVybiAncXVlcnlfcmVzcG9uc2UnO1xuICAgIGlmIChyb3V0ZS5pbmNsdWRlcygnY29kZScpKSByZXR1cm4gJ3F1ZXJ5X3Jlc3BvbnNlJztcbiAgICBpZiAocm91dGUuaW5jbHVkZXMoJ3JvdXRlJykpIHJldHVybiAncm91dGluZyc7XG4gICAgaWYgKHJvdXRlLmluY2x1ZGVzKCdtZW1vcnknKSkgcmV0dXJuICdjb250ZXh0X3JldHJpZXZhbCc7XG4gICAgcmV0dXJuICdxdWVyeV9yZXNwb25zZSc7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1hc3RlckxvcmEoZW1iZWRkaW5nOiBFbWJlZGRpbmcsIHF1YWxpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGxyID0gMC4wMDA1ICogcXVhbGl0eTsgLy8gU2xvd2VyIGxlYXJuaW5nIGZvciBjb29yZGluYXRvclxuICAgIGNvbnN0IGRpbSA9IE1hdGgubWluKGVtYmVkZGluZy5sZW5ndGgsIHRoaXMuY29uZmlnLmhpZGRlbkRpbSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKGRpbSwgdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0cy5sZW5ndGgpOyBpKyspIHtcbiAgICAgIGNvbnN0IGdyYWQgPSBlbWJlZGRpbmdbaSAlIGVtYmVkZGluZy5sZW5ndGhdICogKHF1YWxpdHkgLSAwLjUpO1xuICAgICAgdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0c1tpXSArPSBsciAqIGdyYWQ7XG5cbiAgICAgIC8vIEVXQyByZWd1bGFyaXphdGlvbiAtIHByZXZlbnQgbGFyZ2Ugd2VpZ2h0IGNoYW5nZXNcbiAgICAgIGNvbnN0IHBlbmFsdHkgPSB0aGlzLmNvbmZpZy5ld2NMYW1iZGEgKiB0aGlzLm1hc3RlckxvcmFXZWlnaHRzW2ldICogMC4wMDAxO1xuICAgICAgdGhpcy5tYXN0ZXJMb3JhV2VpZ2h0c1tpXSAtPSBwZW5hbHR5O1xuICAgIH1cbiAgfVxufVxuIl19
package/dist/esm/index.js CHANGED
@@ -81,4 +81,4 @@ export * from './intelligence';
81
81
  export { version, hasSimdSupport } from './native';
82
82
  // Default export
83
83
  export { RuvLLM as default } from './engine';
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0RHO0FBRUgsYUFBYTtBQUNiLGNBQWMsU0FBUyxDQUFDO0FBRXhCLGNBQWM7QUFDZCxjQUFjLFVBQVUsQ0FBQztBQUV6QixrQkFBa0I7QUFDbEIsY0FBYyxRQUFRLENBQUM7QUFFdkIscUJBQXFCO0FBQ3JCLGNBQWMsV0FBVyxDQUFDO0FBRTFCLG9CQUFvQjtBQUNwQixjQUFjLGFBQWEsQ0FBQztBQUU1Qix1QkFBdUI7QUFDdkIsY0FBYyxRQUFRLENBQUM7QUFFdkIscUJBQXFCO0FBQ3JCLGNBQWMsYUFBYSxDQUFDO0FBRTVCLGdCQUFnQjtBQUNoQixjQUFjLFFBQVEsQ0FBQztBQUV2Qix1QkFBdUI7QUFDdkIsY0FBYyxVQUFVLENBQUM7QUFFekIsb0JBQW9CO0FBQ3BCLGNBQWMsWUFBWSxDQUFDO0FBRTNCLDBCQUEwQjtBQUMxQixjQUFjLGVBQWUsQ0FBQztBQUU5QixnQ0FBZ0M7QUFDaEMsY0FBYyxVQUFVLENBQUM7QUFFekIsdUNBQXVDO0FBQ3ZDLGNBQWMsY0FBYyxDQUFDO0FBRTdCLDRDQUE0QztBQUM1QyxjQUFjLGdCQUFnQixDQUFDO0FBRS9CLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuRCxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLE1BQU0sSUFBSSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQHJ1dmVjdG9yL3J1dmxsbSAtIFNlbGYtbGVhcm5pbmcgTExNIG9yY2hlc3RyYXRpb25cclxuICpcclxuICogUnV2TExNIGNvbWJpbmVzIFNPTkEgYWRhcHRpdmUgbGVhcm5pbmcgd2l0aCBITlNXIG1lbW9yeSxcclxuICogRmFzdEdSTk4gcm91dGluZywgYW5kIFNJTUQtb3B0aW1pemVkIGluZmVyZW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBpbXBvcnQgeyBSdXZMTE0sIFNlc3Npb25NYW5hZ2VyLCBTb25hQ29vcmRpbmF0b3IgfSBmcm9tICdAcnV2ZWN0b3IvcnV2bGxtJztcclxuICpcclxuICogY29uc3QgbGxtID0gbmV3IFJ1dkxMTSh7IGxlYXJuaW5nRW5hYmxlZDogdHJ1ZSB9KTtcclxuICogY29uc3Qgc2Vzc2lvbnMgPSBuZXcgU2Vzc2lvbk1hbmFnZXIobGxtKTtcclxuICogY29uc3Qgc29uYSA9IG5ldyBTb25hQ29vcmRpbmF0b3IoKTtcclxuICpcclxuICogLy8gUXVlcnkgd2l0aCBzZXNzaW9uIGNvbnRleHRcclxuICogY29uc3Qgc2Vzc2lvbiA9IHNlc3Npb25zLmNyZWF0ZSgpO1xyXG4gKiBjb25zdCByZXNwb25zZSA9IHNlc3Npb25zLmNoYXQoc2Vzc2lvbi5pZCwgJ1doYXQgaXMgQUk/Jyk7XHJcbiAqXHJcbiAqIC8vIFRyYWNrIGxlYXJuaW5nIHRyYWplY3RvcnlcclxuICogY29uc3QgdHJhamVjdG9yeSA9IG5ldyBUcmFqZWN0b3J5QnVpbGRlcigpXHJcbiAqICAgLnN0YXJ0U3RlcCgncXVlcnknLCAnV2hhdCBpcyBBST8nKVxyXG4gKiAgIC5lbmRTdGVwKHJlc3BvbnNlLnRleHQsIHJlc3BvbnNlLmNvbmZpZGVuY2UpXHJcbiAqICAgLmNvbXBsZXRlKCdzdWNjZXNzJyk7XHJcbiAqXHJcbiAqIHNvbmEucmVjb3JkVHJhamVjdG9yeSh0cmFqZWN0b3J5KTtcclxuICogYGBgXHJcbiAqXHJcbiAqIEBleGFtcGxlIEZlZGVyYXRlZCBMZWFybmluZ1xyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IEVwaGVtZXJhbEFnZW50LCBGZWRlcmF0ZWRDb29yZGluYXRvciB9IGZyb20gJ0BydXZlY3Rvci9ydXZsbG0nO1xyXG4gKlxyXG4gKiAvLyBDZW50cmFsIGNvb3JkaW5hdG9yXHJcbiAqIGNvbnN0IGNvb3JkaW5hdG9yID0gbmV3IEZlZGVyYXRlZENvb3JkaW5hdG9yKCdjb29yZC0xJyk7XHJcbiAqXHJcbiAqIC8vIEVwaGVtZXJhbCBhZ2VudHMgcHJvY2VzcyB0YXNrcyBhbmQgZXhwb3J0XHJcbiAqIGNvbnN0IGFnZW50ID0gbmV3IEVwaGVtZXJhbEFnZW50KCdhZ2VudC0xJyk7XHJcbiAqIGFnZW50LnByb2Nlc3NUYXNrKGVtYmVkZGluZywgMC45KTtcclxuICogY29uc3QgZXhwb3J0RGF0YSA9IGFnZW50LmV4cG9ydFN0YXRlKCk7XHJcbiAqXHJcbiAqIC8vIEFnZ3JlZ2F0ZSBsZWFybmluZ1xyXG4gKiBjb29yZGluYXRvci5hZ2dyZWdhdGUoZXhwb3J0RGF0YSk7XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAZXhhbXBsZSBMb1JBIEFkYXB0ZXJzXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaW1wb3J0IHsgTG9yYUFkYXB0ZXIsIExvcmFNYW5hZ2VyIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XHJcbiAqXHJcbiAqIGNvbnN0IGFkYXB0ZXIgPSBuZXcgTG9yYUFkYXB0ZXIoeyByYW5rOiA4LCBhbHBoYTogMTYgfSk7XHJcbiAqIGNvbnN0IG91dHB1dCA9IGFkYXB0ZXIuZm9yd2FyZChpbnB1dCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuXHJcbi8vIENvcmUgdHlwZXNcclxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XHJcblxyXG4vLyBNYWluIGVuZ2luZVxyXG5leHBvcnQgKiBmcm9tICcuL2VuZ2luZSc7XHJcblxyXG4vLyBTSU1EIG9wZXJhdGlvbnNcclxuZXhwb3J0ICogZnJvbSAnLi9zaW1kJztcclxuXHJcbi8vIFNlc3Npb24gbWFuYWdlbWVudFxyXG5leHBvcnQgKiBmcm9tICcuL3Nlc3Npb24nO1xyXG5cclxuLy8gU3RyZWFtaW5nIHN1cHBvcnRcclxuZXhwb3J0ICogZnJvbSAnLi9zdHJlYW1pbmcnO1xyXG5cclxuLy8gU09OQSBsZWFybmluZyBzeXN0ZW1cclxuZXhwb3J0ICogZnJvbSAnLi9zb25hJztcclxuXHJcbi8vIEZlZGVyYXRlZCBsZWFybmluZ1xyXG5leHBvcnQgKiBmcm9tICcuL2ZlZGVyYXRlZCc7XHJcblxyXG4vLyBMb1JBIGFkYXB0ZXJzXHJcbmV4cG9ydCAqIGZyb20gJy4vbG9yYSc7XHJcblxyXG4vLyBFeHBvcnQvc2VyaWFsaXphdGlvblxyXG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydCc7XHJcblxyXG4vLyBUcmFpbmluZyBwaXBlbGluZVxyXG5leHBvcnQgKiBmcm9tICcuL3RyYWluaW5nJztcclxuXHJcbi8vIENvbnRyYXN0aXZlIGZpbmUtdHVuaW5nXHJcbmV4cG9ydCAqIGZyb20gJy4vY29udHJhc3RpdmUnO1xyXG5cclxuLy8gTW9kZWwgZG93bmxvYWRlciBhbmQgcmVnaXN0cnlcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xyXG5cclxuLy8gQmVuY2htYXJrcyBmb3IgQ2xhdWRlIENvZGUgdXNlIGNhc2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vYmVuY2htYXJrcyc7XHJcblxyXG4vLyBFeHRlcm5hbCBJbnRlbGxpZ2VuY2UgUHJvdmlkZXJzIChBRFItMDQzKVxyXG5leHBvcnQgKiBmcm9tICcuL2ludGVsbGlnZW5jZSc7XHJcblxyXG4vLyBOYXRpdmUgYmluZGluZ3MgdXRpbGl0aWVzXHJcbmV4cG9ydCB7IHZlcnNpb24sIGhhc1NpbWRTdXBwb3J0IH0gZnJvbSAnLi9uYXRpdmUnO1xyXG5cclxuLy8gRGVmYXVsdCBleHBvcnRcclxuZXhwb3J0IHsgUnV2TExNIGFzIGRlZmF1bHQgfSBmcm9tICcuL2VuZ2luZSc7XHJcbiJdfQ==
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0RHO0FBRUgsYUFBYTtBQUNiLGNBQWMsU0FBUyxDQUFDO0FBRXhCLGNBQWM7QUFDZCxjQUFjLFVBQVUsQ0FBQztBQUV6QixrQkFBa0I7QUFDbEIsY0FBYyxRQUFRLENBQUM7QUFFdkIscUJBQXFCO0FBQ3JCLGNBQWMsV0FBVyxDQUFDO0FBRTFCLG9CQUFvQjtBQUNwQixjQUFjLGFBQWEsQ0FBQztBQUU1Qix1QkFBdUI7QUFDdkIsY0FBYyxRQUFRLENBQUM7QUFFdkIscUJBQXFCO0FBQ3JCLGNBQWMsYUFBYSxDQUFDO0FBRTVCLGdCQUFnQjtBQUNoQixjQUFjLFFBQVEsQ0FBQztBQUV2Qix1QkFBdUI7QUFDdkIsY0FBYyxVQUFVLENBQUM7QUFFekIsb0JBQW9CO0FBQ3BCLGNBQWMsWUFBWSxDQUFDO0FBRTNCLDBCQUEwQjtBQUMxQixjQUFjLGVBQWUsQ0FBQztBQUU5QixnQ0FBZ0M7QUFDaEMsY0FBYyxVQUFVLENBQUM7QUFFekIsdUNBQXVDO0FBQ3ZDLGNBQWMsY0FBYyxDQUFDO0FBRTdCLDRDQUE0QztBQUM1QyxjQUFjLGdCQUFnQixDQUFDO0FBRS9CLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuRCxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLE1BQU0sSUFBSSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBydXZlY3Rvci9ydXZsbG0gLSBTZWxmLWxlYXJuaW5nIExMTSBvcmNoZXN0cmF0aW9uXG4gKlxuICogUnV2TExNIGNvbWJpbmVzIFNPTkEgYWRhcHRpdmUgbGVhcm5pbmcgd2l0aCBITlNXIG1lbW9yeSxcbiAqIEZhc3RHUk5OIHJvdXRpbmcsIGFuZCBTSU1ELW9wdGltaXplZCBpbmZlcmVuY2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IFJ1dkxMTSwgU2Vzc2lvbk1hbmFnZXIsIFNvbmFDb29yZGluYXRvciB9IGZyb20gJ0BydXZlY3Rvci9ydXZsbG0nO1xuICpcbiAqIGNvbnN0IGxsbSA9IG5ldyBSdXZMTE0oeyBsZWFybmluZ0VuYWJsZWQ6IHRydWUgfSk7XG4gKiBjb25zdCBzZXNzaW9ucyA9IG5ldyBTZXNzaW9uTWFuYWdlcihsbG0pO1xuICogY29uc3Qgc29uYSA9IG5ldyBTb25hQ29vcmRpbmF0b3IoKTtcbiAqXG4gKiAvLyBRdWVyeSB3aXRoIHNlc3Npb24gY29udGV4dFxuICogY29uc3Qgc2Vzc2lvbiA9IHNlc3Npb25zLmNyZWF0ZSgpO1xuICogY29uc3QgcmVzcG9uc2UgPSBzZXNzaW9ucy5jaGF0KHNlc3Npb24uaWQsICdXaGF0IGlzIEFJPycpO1xuICpcbiAqIC8vIFRyYWNrIGxlYXJuaW5nIHRyYWplY3RvcnlcbiAqIGNvbnN0IHRyYWplY3RvcnkgPSBuZXcgVHJhamVjdG9yeUJ1aWxkZXIoKVxuICogICAuc3RhcnRTdGVwKCdxdWVyeScsICdXaGF0IGlzIEFJPycpXG4gKiAgIC5lbmRTdGVwKHJlc3BvbnNlLnRleHQsIHJlc3BvbnNlLmNvbmZpZGVuY2UpXG4gKiAgIC5jb21wbGV0ZSgnc3VjY2VzcycpO1xuICpcbiAqIHNvbmEucmVjb3JkVHJhamVjdG9yeSh0cmFqZWN0b3J5KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEZlZGVyYXRlZCBMZWFybmluZ1xuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgRXBoZW1lcmFsQWdlbnQsIEZlZGVyYXRlZENvb3JkaW5hdG9yIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XG4gKlxuICogLy8gQ2VudHJhbCBjb29yZGluYXRvclxuICogY29uc3QgY29vcmRpbmF0b3IgPSBuZXcgRmVkZXJhdGVkQ29vcmRpbmF0b3IoJ2Nvb3JkLTEnKTtcbiAqXG4gKiAvLyBFcGhlbWVyYWwgYWdlbnRzIHByb2Nlc3MgdGFza3MgYW5kIGV4cG9ydFxuICogY29uc3QgYWdlbnQgPSBuZXcgRXBoZW1lcmFsQWdlbnQoJ2FnZW50LTEnKTtcbiAqIGFnZW50LnByb2Nlc3NUYXNrKGVtYmVkZGluZywgMC45KTtcbiAqIGNvbnN0IGV4cG9ydERhdGEgPSBhZ2VudC5leHBvcnRTdGF0ZSgpO1xuICpcbiAqIC8vIEFnZ3JlZ2F0ZSBsZWFybmluZ1xuICogY29vcmRpbmF0b3IuYWdncmVnYXRlKGV4cG9ydERhdGEpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgTG9SQSBBZGFwdGVyc1xuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgTG9yYUFkYXB0ZXIsIExvcmFNYW5hZ2VyIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XG4gKlxuICogY29uc3QgYWRhcHRlciA9IG5ldyBMb3JhQWRhcHRlcih7IHJhbms6IDgsIGFscGhhOiAxNiB9KTtcbiAqIGNvbnN0IG91dHB1dCA9IGFkYXB0ZXIuZm9yd2FyZChpbnB1dCk7XG4gKiBgYGBcbiAqL1xuXG4vLyBDb3JlIHR5cGVzXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcblxuLy8gTWFpbiBlbmdpbmVcbmV4cG9ydCAqIGZyb20gJy4vZW5naW5lJztcblxuLy8gU0lNRCBvcGVyYXRpb25zXG5leHBvcnQgKiBmcm9tICcuL3NpbWQnO1xuXG4vLyBTZXNzaW9uIG1hbmFnZW1lbnRcbmV4cG9ydCAqIGZyb20gJy4vc2Vzc2lvbic7XG5cbi8vIFN0cmVhbWluZyBzdXBwb3J0XG5leHBvcnQgKiBmcm9tICcuL3N0cmVhbWluZyc7XG5cbi8vIFNPTkEgbGVhcm5pbmcgc3lzdGVtXG5leHBvcnQgKiBmcm9tICcuL3NvbmEnO1xuXG4vLyBGZWRlcmF0ZWQgbGVhcm5pbmdcbmV4cG9ydCAqIGZyb20gJy4vZmVkZXJhdGVkJztcblxuLy8gTG9SQSBhZGFwdGVyc1xuZXhwb3J0ICogZnJvbSAnLi9sb3JhJztcblxuLy8gRXhwb3J0L3NlcmlhbGl6YXRpb25cbmV4cG9ydCAqIGZyb20gJy4vZXhwb3J0JztcblxuLy8gVHJhaW5pbmcgcGlwZWxpbmVcbmV4cG9ydCAqIGZyb20gJy4vdHJhaW5pbmcnO1xuXG4vLyBDb250cmFzdGl2ZSBmaW5lLXR1bmluZ1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmFzdGl2ZSc7XG5cbi8vIE1vZGVsIGRvd25sb2FkZXIgYW5kIHJlZ2lzdHJ5XG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7XG5cbi8vIEJlbmNobWFya3MgZm9yIENsYXVkZSBDb2RlIHVzZSBjYXNlc1xuZXhwb3J0ICogZnJvbSAnLi9iZW5jaG1hcmtzJztcblxuLy8gRXh0ZXJuYWwgSW50ZWxsaWdlbmNlIFByb3ZpZGVycyAoQURSLTA0MylcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWxsaWdlbmNlJztcblxuLy8gTmF0aXZlIGJpbmRpbmdzIHV0aWxpdGllc1xuZXhwb3J0IHsgdmVyc2lvbiwgaGFzU2ltZFN1cHBvcnQgfSBmcm9tICcuL25hdGl2ZSc7XG5cbi8vIERlZmF1bHQgZXhwb3J0XG5leHBvcnQgeyBSdXZMTE0gYXMgZGVmYXVsdCB9IGZyb20gJy4vZW5naW5lJztcbiJdfQ==
@@ -185,4 +185,4 @@ export class IntelligenceLoader {
185
185
  });
186
186
  }
187
187
  }
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWxsaWdlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVsbGlnZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLHdDQUF3QztBQUN4QyxNQUFNLG9CQUFvQixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBRTlDLHlDQUF5QztBQUN6QyxNQUFNLG9CQUFvQixHQUFHLEtBQU0sQ0FBQztBQUVwQywyQkFBMkI7QUFDM0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUUxRSxpQ0FBaUM7QUFDakMsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztBQXNGekQsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFZO0lBQ3BDLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3hELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsR0FBWTtJQUNuQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFD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ZWxsaWdlbmNlIFByb3ZpZGVycyBmb3IgU09OQSBMZWFybmluZyAoQURSLTA0MylcclxuICpcclxuICogVHlwZVNjcmlwdCBiaW5kaW5ncyBmb3IgdGhlIEludGVsbGlnZW5jZVByb3ZpZGVyIHRyYWl0LCBlbmFibGluZ1xyXG4gKiBleHRlcm5hbCBzeXN0ZW1zIHRvIGZlZWQgcXVhbGl0eSBzaWduYWxzIGludG8gUnV2TExNJ3MgbGVhcm5pbmcgbG9vcHMuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogaW1wb3J0IHsgSW50ZWxsaWdlbmNlTG9hZGVyLCBGaWxlU2lnbmFsUHJvdmlkZXIsIFF1YWxpdHlTaWduYWwgfSBmcm9tICdAcnV2ZWN0b3IvcnV2bGxtJztcclxuICpcclxuICogY29uc3QgbG9hZGVyID0gbmV3IEludGVsbGlnZW5jZUxvYWRlcigpO1xyXG4gKiBsb2FkZXIucmVnaXN0ZXJQcm92aWRlcihuZXcgRmlsZVNpZ25hbFByb3ZpZGVyKCcuL3NpZ25hbHMuanNvbicpKTtcclxuICpcclxuICogY29uc3QgeyBzaWduYWxzLCBlcnJvcnMgfSA9IGxvYWRlci5sb2FkQWxsU2lnbmFscygpO1xyXG4gKiBjb25zb2xlLmxvZyhgTG9hZGVkICR7c2lnbmFscy5sZW5ndGh9IHNpZ25hbHNgKTtcclxuICogYGBgXHJcbiAqL1xyXG5cclxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xyXG5cclxuLyoqIE1heGltdW0gc2lnbmFsIGZpbGUgc2l6ZSAoMTAgTWlCKSAqL1xyXG5jb25zdCBNQVhfU0lHTkFMX0ZJTEVfU0laRSA9IDEwICogMTAyNCAqIDEwMjQ7XHJcblxyXG4vKiogTWF4aW11bSBudW1iZXIgb2Ygc2lnbmFscyBwZXIgZmlsZSAqL1xyXG5jb25zdCBNQVhfU0lHTkFMU19QRVJfRklMRSA9IDEwXzAwMDtcclxuXHJcbi8qKiBWYWxpZCBvdXRjb21lIHZhbHVlcyAqL1xyXG5jb25zdCBWQUxJRF9PVVRDT01FUyA9IG5ldyBTZXQoWydzdWNjZXNzJywgJ3BhcnRpYWxfc3VjY2VzcycsICdmYWlsdXJlJ10pO1xyXG5cclxuLyoqIFZhbGlkIGh1bWFuIHZlcmRpY3QgdmFsdWVzICovXHJcbmNvbnN0IFZBTElEX1ZFUkRJQ1RTID0gbmV3IFNldChbJ2FwcHJvdmVkJywgJ3JlamVjdGVkJ10pO1xyXG5cclxuLyoqXHJcbiAqIEEgcXVhbGl0eSBzaWduYWwgZnJvbSBhbiBleHRlcm5hbCBzeXN0ZW0uXHJcbiAqXHJcbiAqIFJlcHJlc2VudHMgb25lIGNvbXBsZXRlZCB0YXNrIHdpdGggcXVhbGl0eSBhc3Nlc3NtZW50IGRhdGFcclxuICogdGhhdCBjYW4gZmVlZCBpbnRvIFNPTkEgdHJhamVjdG9yaWVzLCB0aGUgZW1iZWRkaW5nIGNsYXNzaWZpZXIsXHJcbiAqIGFuZCBtb2RlbCByb3V0ZXIgY2FsaWJyYXRpb24uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFF1YWxpdHlTaWduYWwge1xyXG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzaWduYWwgKi9cclxuICBpZDogc3RyaW5nO1xyXG4gIC8qKiBIdW1hbi1yZWFkYWJsZSB0YXNrIGRlc2NyaXB0aW9uICh1c2VkIGZvciBlbWJlZGRpbmcgZ2VuZXJhdGlvbikgKi9cclxuICB0YXNrRGVzY3JpcHRpb246IHN0cmluZztcclxuICAvKiogRXhlY3V0aW9uIG91dGNvbWUgKi9cclxuICBvdXRjb21lOiAnc3VjY2VzcycgfCAncGFydGlhbF9zdWNjZXNzJyB8ICdmYWlsdXJlJztcclxuICAvKiogQ29tcG9zaXRlIHF1YWxpdHkgc2NvcmUgKDAuMCAtIDEuMCkgKi9cclxuICBxdWFsaXR5U2NvcmU6IG51bWJlcjtcclxuICAvKiogT3B0aW9uYWwgaHVtYW4gdmVyZGljdCAqL1xyXG4gIGh1bWFuVmVyZGljdD86ICdhcHByb3ZlZCcgfCAncmVqZWN0ZWQnO1xyXG4gIC8qKiBPcHRpb25hbCBzdHJ1Y3R1cmVkIHF1YWxpdHkgZmFjdG9ycyBmb3IgZGV0YWlsZWQgYW5hbHlzaXMgKi9cclxuICBxdWFsaXR5RmFjdG9ycz86IFF1YWxpdHlGYWN0b3JzO1xyXG4gIC8qKiBJU08gODYwMSB0aW1lc3RhbXAgb2YgdGFzayBjb21wbGV0aW9uICovXHJcbiAgY29tcGxldGVkQXQ6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEdyYW51bGFyIHF1YWxpdHkgZmFjdG9yIGJyZWFrZG93bi5cclxuICpcclxuICogTm90IGFsbCBwcm92aWRlcnMgd2lsbCBoYXZlIGFsbCBmYWN0b3JzLiBVbmRlZmluZWQgZmllbGRzIG1lYW5cclxuICogXCJub3QgYXNzZXNzZWRcIiAoZGlzdGluY3QgZnJvbSAwLjAsIHdoaWNoIG1lYW5zIFwiYXNzZXNzZWQgYXMgemVyb1wiKS5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVhbGl0eUZhY3RvcnMge1xyXG4gIGFjY2VwdGFuY2VDcml0ZXJpYU1ldD86IG51bWJlcjtcclxuICB0ZXN0c1Bhc3Npbmc/OiBudW1iZXI7XHJcbiAgbm9SZWdyZXNzaW9ucz86IG51bWJlcjtcclxuICBsaW50Q2xlYW4/OiBudW1iZXI7XHJcbiAgdHlwZUNoZWNrQ2xlYW4/OiBudW1iZXI7XHJcbiAgZm9sbG93c1BhdHRlcm5zPzogbnVtYmVyO1xyXG4gIGNvbnRleHRSZWxldmFuY2U/OiBudW1iZXI7XHJcbiAgcmVhc29uaW5nQ29oZXJlbmNlPzogbnVtYmVyO1xyXG4gIGV4ZWN1dGlvbkVmZmljaWVuY3k/OiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBRdWFsaXR5IHdlaWdodCBvdmVycmlkZXMgZnJvbSBhIHByb3ZpZGVyLlxyXG4gKlxyXG4gKiBXZWlnaHRzIHNob3VsZCBzdW0gdG8gYXBwcm94aW1hdGVseSAxLjAuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyUXVhbGl0eVdlaWdodHMge1xyXG4gIHRhc2tDb21wbGV0aW9uOiBudW1iZXI7XHJcbiAgY29kZVF1YWxpdHk6IG51bWJlcjtcclxuICBwcm9jZXNzOiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFcnJvciBmcm9tIGEgc2luZ2xlIHByb3ZpZGVyIGR1cmluZyBiYXRjaCBsb2FkaW5nLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlckVycm9yIHtcclxuICBwcm92aWRlck5hbWU6IHN0cmluZztcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXN1bHQgZnJvbSBhIHNpbmdsZSBwcm92aWRlciBkdXJpbmcgZ3JvdXBlZCBsb2FkaW5nLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlclJlc3VsdCB7XHJcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmc7XHJcbiAgc2lnbmFsczogUXVhbGl0eVNpZ25hbFtdO1xyXG4gIHdlaWdodHM/OiBQcm92aWRlclF1YWxpdHlXZWlnaHRzO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIGZvciBleHRlcm5hbCBzeXN0ZW1zIHRoYXQgc3VwcGx5IHF1YWxpdHkgc2lnbmFscyB0byBSdXZMTE0uXHJcbiAqXHJcbiAqIEltcGxlbWVudCB0aGlzIGludGVyZmFjZSBhbmQgcmVnaXN0ZXIgd2l0aCBJbnRlbGxpZ2VuY2VMb2FkZXIuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEludGVsbGlnZW5jZVByb3ZpZGVyIHtcclxuICAvKiogSHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhpcyBwcm92aWRlciAqL1xyXG4gIG5hbWUoKTogc3RyaW5nO1xyXG4gIC8qKiBMb2FkIHF1YWxpdHkgc2lnbmFscyBmcm9tIHRoaXMgcHJvdmlkZXIncyBkYXRhIHNvdXJjZSAqL1xyXG4gIGxvYWRTaWduYWxzKCk6IFF1YWxpdHlTaWduYWxbXTtcclxuICAvKiogT3B0aW9uYWwgcXVhbGl0eSB3ZWlnaHQgb3ZlcnJpZGVzICovXHJcbiAgcXVhbGl0eVdlaWdodHM/KCk6IFByb3ZpZGVyUXVhbGl0eVdlaWdodHMgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFzT3B0aW9uYWxOdW1iZXIodmFsOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIGNvbnN0IG4gPSBOdW1iZXIodmFsKTtcclxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pICYmIG4gPj0gMCAmJiBuIDw9IDEgPyBuIDogdW5kZWZpbmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiB2YWxpZGF0ZU91dGNvbWUodmFsOiB1bmtub3duKTogUXVhbGl0eVNpZ25hbFsnb3V0Y29tZSddIHtcclxuICBjb25zdCBzID0gU3RyaW5nKHZhbCA/PyAnZmFpbHVyZScpO1xyXG4gIHJldHVybiBWQUxJRF9PVVRDT01FUy5oYXMocykgPyBzIGFzIFF1YWxpdHlTaWduYWxbJ291dGNvbWUnXSA6ICdmYWlsdXJlJztcclxufVxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVWZXJkaWN0KHZhbDogdW5rbm93bik6IFF1YWxpdHlTaWduYWxbJ2h1bWFuVmVyZGljdCddIHwgdW5kZWZpbmVkIHtcclxuICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIGNvbnN0IHMgPSBTdHJpbmcodmFsKTtcclxuICByZXR1cm4gVkFMSURfVkVSRElDVFMuaGFzKHMpID8gcyBhcyBRdWFsaXR5U2lnbmFsWydodW1hblZlcmRpY3QnXSA6IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVTY29yZSh2YWw6IHVua25vd24pOiBudW1iZXIge1xyXG4gIGNvbnN0IG4gPSBOdW1iZXIodmFsID8/IDApO1xyXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG4pIHx8IG4gPCAwIHx8IG4gPiAxKSByZXR1cm4gMDtcclxuICByZXR1cm4gbjtcclxufVxyXG5cclxuZnVuY3Rpb24gbWFwUXVhbGl0eUZhY3RvcnMocmF3OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFF1YWxpdHlGYWN0b3JzIHtcclxuICByZXR1cm4ge1xyXG4gICAgYWNjZXB0YW5jZUNyaXRlcmlhTWV0OiBhc09wdGlvbmFsTnVtYmVyKHJhdy5hY2NlcHRhbmNlX2NyaXRlcmlhX21ldCksXHJcbiAgICB0ZXN0c1Bhc3Npbmc6IGFzT3B0aW9uYWxOdW1iZXIocmF3LnRlc3RzX3Bhc3NpbmcpLFxyXG4gICAgbm9SZWdyZXNzaW9uczogYXNPcHRpb25hbE51bWJlcihyYXcubm9fcmVncmVzc2lvbnMpLFxyXG4gICAgbGludENsZWFuOiBhc09wdGlvbmFsTnVtYmVyKHJhdy5saW50X2NsZWFuKSxcclxuICAgIHR5cGVDaGVja0NsZWFuOiBhc09wdGlvbmFsTnVtYmVyKHJhdy50eXBlX2NoZWNrX2NsZWFuKSxcclxuICAgIGZvbGxvd3NQYXR0ZXJuczogYXNPcHRpb25hbE51bWJlcihyYXcuZm9sbG93c19wYXR0ZXJucyksXHJcbiAgICBjb250ZXh0UmVsZXZhbmNlOiBhc09wdGlvbmFsTnVtYmVyKHJhdy5jb250ZXh0X3JlbGV2YW5jZSksXHJcbiAgICByZWFzb25pbmdDb2hlcmVuY2U6IGFzT3B0aW9uYWxOdW1iZXIocmF3LnJlYXNvbmluZ19jb2hlcmVuY2UpLFxyXG4gICAgZXhlY3V0aW9uRWZmaWNpZW5jeTogYXNPcHRpb25hbE51bWJlcihyYXcuZXhlY3V0aW9uX2VmZmljaWVuY3kpLFxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCdWlsdC1pbiBmaWxlLWJhc2VkIGludGVsbGlnZW5jZSBwcm92aWRlci5cclxuICpcclxuICogUmVhZHMgcXVhbGl0eSBzaWduYWxzIGZyb20gYSBKU09OIGZpbGUuIFRoaXMgaXMgdGhlIGRlZmF1bHQgcHJvdmlkZXJcclxuICogZm9yIG5vbi1SdXN0IGludGVncmF0aW9ucyB0aGF0IHdyaXRlIHNpZ25hbCBmaWxlcy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBGaWxlU2lnbmFsUHJvdmlkZXIgaW1wbGVtZW50cyBJbnRlbGxpZ2VuY2VQcm92aWRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihmaWxlUGF0aDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGZpbGVQYXRoKTtcclxuICB9XHJcblxyXG4gIG5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnZmlsZS1zaWduYWxzJztcclxuICB9XHJcblxyXG4gIGxvYWRTaWduYWxzKCk6IFF1YWxpdHlTaWduYWxbXSB7XHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5maWxlUGF0aCkpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGZpbGUgc2l6ZSBiZWZvcmUgcmVhZGluZyAocHJldmVudCBPT00pXHJcbiAgICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmModGhpcy5maWxlUGF0aCk7XHJcbiAgICBpZiAoc3RhdC5zaXplID4gTUFYX1NJR05BTF9GSUxFX1NJWkUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBTaWduYWwgZmlsZSBleGNlZWRzIG1heCBzaXplICgke3N0YXQuc2l6ZX0gYnl0ZXMsIGxpbWl0ICR7TUFYX1NJR05BTF9GSUxFX1NJWkV9KWBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmModGhpcy5maWxlUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICBjb25zdCBkYXRhOiB1bmtub3duID0gSlNPTi5wYXJzZShyYXcpO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBzaWduYWwgY291bnRcclxuICAgIGlmIChkYXRhLmxlbmd0aCA+IE1BWF9TSUdOQUxTX1BFUl9GSUxFKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgU2lnbmFsIGZpbGUgY29udGFpbnMgJHtkYXRhLmxlbmd0aH0gc2lnbmFscywgbWF4IGlzICR7TUFYX1NJR05BTFNfUEVSX0ZJTEV9YFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRhLm1hcCgoaXRlbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcclxuICAgICAgY29uc3QgcWZSYXcgPSAoaXRlbS5xdWFsaXR5X2ZhY3RvcnMgPz8gaXRlbS5xdWFsaXR5RmFjdG9ycykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaWQ6IFN0cmluZyhpdGVtLmlkID8/ICcnKSxcclxuICAgICAgICB0YXNrRGVzY3JpcHRpb246IFN0cmluZyhpdGVtLnRhc2tfZGVzY3JpcHRpb24gPz8gaXRlbS50YXNrRGVzY3JpcHRpb24gPz8gJycpLFxyXG4gICAgICAgIG91dGNvbWU6IHZhbGlkYXRlT3V0Y29tZShpdGVtLm91dGNvbWUpLFxyXG4gICAgICAgIHF1YWxpdHlTY29yZTogdmFsaWRhdGVTY29yZShpdGVtLnF1YWxpdHlfc2NvcmUgPz8gaXRlbS5xdWFsaXR5U2NvcmUpLFxyXG4gICAgICAgIGh1bWFuVmVyZGljdDogdmFsaWRhdGVWZXJkaWN0KGl0ZW0uaHVtYW5fdmVyZGljdCA/PyBpdGVtLmh1bWFuVmVyZGljdCksXHJcbiAgICAgICAgcXVhbGl0eUZhY3RvcnM6IHFmUmF3ID8gbWFwUXVhbGl0eUZhY3RvcnMocWZSYXcpIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGNvbXBsZXRlZEF0OiBTdHJpbmcoaXRlbS5jb21wbGV0ZWRfYXQgPz8gaXRlbS5jb21wbGV0ZWRBdCA/PyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkpLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBxdWFsaXR5V2VpZ2h0cygpOiBQcm92aWRlclF1YWxpdHlXZWlnaHRzIHwgdW5kZWZpbmVkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHdlaWdodHNQYXRoID0gcGF0aC5qb2luKHBhdGguZGlybmFtZSh0aGlzLmZpbGVQYXRoKSwgJ3F1YWxpdHktd2VpZ2h0cy5qc29uJyk7XHJcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyh3ZWlnaHRzUGF0aCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyh3ZWlnaHRzUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHJhdykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGFza0NvbXBsZXRpb246IE51bWJlcihkYXRhLnRhc2tfY29tcGxldGlvbiA/PyBkYXRhLnRhc2tDb21wbGV0aW9uID8/IDAuNSksXHJcbiAgICAgICAgY29kZVF1YWxpdHk6IE51bWJlcihkYXRhLmNvZGVfcXVhbGl0eSA/PyBkYXRhLmNvZGVRdWFsaXR5ID8/IDAuMyksXHJcbiAgICAgICAgcHJvY2VzczogTnVtYmVyKGRhdGEucHJvY2VzcyA/PyAwLjIpLFxyXG4gICAgICB9O1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQWdncmVnYXRlcyBxdWFsaXR5IHNpZ25hbHMgZnJvbSBtdWx0aXBsZSByZWdpc3RlcmVkIHByb3ZpZGVycy5cclxuICpcclxuICogSWYgbm8gcHJvdmlkZXJzIGFyZSByZWdpc3RlcmVkLCBsb2FkQWxsU2lnbmFscyByZXR1cm5zIGVtcHR5IGFycmF5c1xyXG4gKiB3aXRoIHplcm8gb3ZlcmhlYWQuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSW50ZWxsaWdlbmNlTG9hZGVyIHtcclxuICBwcml2YXRlIHByb3ZpZGVyczogSW50ZWxsaWdlbmNlUHJvdmlkZXJbXSA9IFtdO1xyXG5cclxuICAvKiogUmVnaXN0ZXIgYW4gZXh0ZXJuYWwgaW50ZWxsaWdlbmNlIHByb3ZpZGVyICovXHJcbiAgcmVnaXN0ZXJQcm92aWRlcihwcm92aWRlcjogSW50ZWxsaWdlbmNlUHJvdmlkZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvdmlkZXJzLnB1c2gocHJvdmlkZXIpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiByZWdpc3RlcmVkIHByb3ZpZGVycyAqL1xyXG4gIGdldCBwcm92aWRlckNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlcnMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIG5hbWVzIG9mIGFsbCByZWdpc3RlcmVkIHByb3ZpZGVycyAqL1xyXG4gIGdldCBwcm92aWRlck5hbWVzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLnByb3ZpZGVycy5tYXAocCA9PiBwLm5hbWUoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIHNpZ25hbHMgZnJvbSBhbGwgcmVnaXN0ZXJlZCBwcm92aWRlcnMuXHJcbiAgICpcclxuICAgKiBOb24tZmF0YWw6IGlmIGEgcHJvdmlkZXIgZmFpbHMsIGl0cyBlcnJvciBpcyBjYXB0dXJlZCBidXRcclxuICAgKiBvdGhlciBwcm92aWRlcnMgY29udGludWUgbG9hZGluZy5cclxuICAgKi9cclxuICBsb2FkQWxsU2lnbmFscygpOiB7IHNpZ25hbHM6IFF1YWxpdHlTaWduYWxbXTsgZXJyb3JzOiBQcm92aWRlckVycm9yW10gfSB7XHJcbiAgICBjb25zdCBzaWduYWxzOiBRdWFsaXR5U2lnbmFsW10gPSBbXTtcclxuICAgIGNvbnN0IGVycm9yczogUHJvdmlkZXJFcnJvcltdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBwcm92aWRlciBvZiB0aGlzLnByb3ZpZGVycykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyU2lnbmFscyA9IHByb3ZpZGVyLmxvYWRTaWduYWxzKCk7XHJcbiAgICAgICAgc2lnbmFscy5wdXNoKC4uLnByb3ZpZGVyU2lnbmFscyk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBlcnJvcnMucHVzaCh7XHJcbiAgICAgICAgICBwcm92aWRlck5hbWU6IHByb3ZpZGVyLm5hbWUoKSxcclxuICAgICAgICAgIG1lc3NhZ2U6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IHNpZ25hbHMsIGVycm9ycyB9O1xyXG4gIH1cclxuXHJcbiAgLyoqIExvYWQgc2lnbmFscyBncm91cGVkIGJ5IHByb3ZpZGVyIHdpdGggd2VpZ2h0IG92ZXJyaWRlcyAqL1xyXG4gIGxvYWRHcm91cGVkKCk6IFByb3ZpZGVyUmVzdWx0W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzLm1hcChwcm92aWRlciA9PiB7XHJcbiAgICAgIGxldCBwcm92aWRlclNpZ25hbHM6IFF1YWxpdHlTaWduYWxbXSA9IFtdO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHByb3ZpZGVyU2lnbmFscyA9IHByb3ZpZGVyLmxvYWRTaWduYWxzKCk7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIC8vIE5vbi1mYXRhbFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcHJvdmlkZXJOYW1lOiBwcm92aWRlci5uYW1lKCksXHJcbiAgICAgICAgc2lnbmFsczogcHJvdmlkZXJTaWduYWxzLFxyXG4gICAgICAgIHdlaWdodHM6IHByb3ZpZGVyLnF1YWxpdHlXZWlnaHRzPy4oKSxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWxsaWdlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVsbGlnZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLHdDQUF3QztBQUN4QyxNQUFNLG9CQUFvQixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBRTlDLHlDQUF5QztBQUN6QyxNQUFNLG9CQUFvQixHQUFHLEtBQU0sQ0FBQztBQUVwQywyQkFBMkI7QUFDM0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUUxRSxpQ0FBaUM7QUFDakMsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztBQXNGekQsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFZO0lBQ3BDLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3hELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsR0FBWTtJQUNuQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFD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bGlnZW5jZSBQcm92aWRlcnMgZm9yIFNPTkEgTGVhcm5pbmcgKEFEUi0wNDMpXG4gKlxuICogVHlwZVNjcmlwdCBiaW5kaW5ncyBmb3IgdGhlIEludGVsbGlnZW5jZVByb3ZpZGVyIHRyYWl0LCBlbmFibGluZ1xuICogZXh0ZXJuYWwgc3lzdGVtcyB0byBmZWVkIHF1YWxpdHkgc2lnbmFscyBpbnRvIFJ1dkxMTSdzIGxlYXJuaW5nIGxvb3BzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBJbnRlbGxpZ2VuY2VMb2FkZXIsIEZpbGVTaWduYWxQcm92aWRlciwgUXVhbGl0eVNpZ25hbCB9IGZyb20gJ0BydXZlY3Rvci9ydXZsbG0nO1xuICpcbiAqIGNvbnN0IGxvYWRlciA9IG5ldyBJbnRlbGxpZ2VuY2VMb2FkZXIoKTtcbiAqIGxvYWRlci5yZWdpc3RlclByb3ZpZGVyKG5ldyBGaWxlU2lnbmFsUHJvdmlkZXIoJy4vc2lnbmFscy5qc29uJykpO1xuICpcbiAqIGNvbnN0IHsgc2lnbmFscywgZXJyb3JzIH0gPSBsb2FkZXIubG9hZEFsbFNpZ25hbHMoKTtcbiAqIGNvbnNvbGUubG9nKGBMb2FkZWQgJHtzaWduYWxzLmxlbmd0aH0gc2lnbmFsc2ApO1xuICogYGBgXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuLyoqIE1heGltdW0gc2lnbmFsIGZpbGUgc2l6ZSAoMTAgTWlCKSAqL1xuY29uc3QgTUFYX1NJR05BTF9GSUxFX1NJWkUgPSAxMCAqIDEwMjQgKiAxMDI0O1xuXG4vKiogTWF4aW11bSBudW1iZXIgb2Ygc2lnbmFscyBwZXIgZmlsZSAqL1xuY29uc3QgTUFYX1NJR05BTFNfUEVSX0ZJTEUgPSAxMF8wMDA7XG5cbi8qKiBWYWxpZCBvdXRjb21lIHZhbHVlcyAqL1xuY29uc3QgVkFMSURfT1VUQ09NRVMgPSBuZXcgU2V0KFsnc3VjY2VzcycsICdwYXJ0aWFsX3N1Y2Nlc3MnLCAnZmFpbHVyZSddKTtcblxuLyoqIFZhbGlkIGh1bWFuIHZlcmRpY3QgdmFsdWVzICovXG5jb25zdCBWQUxJRF9WRVJESUNUUyA9IG5ldyBTZXQoWydhcHByb3ZlZCcsICdyZWplY3RlZCddKTtcblxuLyoqXG4gKiBBIHF1YWxpdHkgc2lnbmFsIGZyb20gYW4gZXh0ZXJuYWwgc3lzdGVtLlxuICpcbiAqIFJlcHJlc2VudHMgb25lIGNvbXBsZXRlZCB0YXNrIHdpdGggcXVhbGl0eSBhc3Nlc3NtZW50IGRhdGFcbiAqIHRoYXQgY2FuIGZlZWQgaW50byBTT05BIHRyYWplY3RvcmllcywgdGhlIGVtYmVkZGluZyBjbGFzc2lmaWVyLFxuICogYW5kIG1vZGVsIHJvdXRlciBjYWxpYnJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWFsaXR5U2lnbmFsIHtcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHNpZ25hbCAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgdGFzayBkZXNjcmlwdGlvbiAodXNlZCBmb3IgZW1iZWRkaW5nIGdlbmVyYXRpb24pICovXG4gIHRhc2tEZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogRXhlY3V0aW9uIG91dGNvbWUgKi9cbiAgb3V0Y29tZTogJ3N1Y2Nlc3MnIHwgJ3BhcnRpYWxfc3VjY2VzcycgfCAnZmFpbHVyZSc7XG4gIC8qKiBDb21wb3NpdGUgcXVhbGl0eSBzY29yZSAoMC4wIC0gMS4wKSAqL1xuICBxdWFsaXR5U2NvcmU6IG51bWJlcjtcbiAgLyoqIE9wdGlvbmFsIGh1bWFuIHZlcmRpY3QgKi9cbiAgaHVtYW5WZXJkaWN0PzogJ2FwcHJvdmVkJyB8ICdyZWplY3RlZCc7XG4gIC8qKiBPcHRpb25hbCBzdHJ1Y3R1cmVkIHF1YWxpdHkgZmFjdG9ycyBmb3IgZGV0YWlsZWQgYW5hbHlzaXMgKi9cbiAgcXVhbGl0eUZhY3RvcnM/OiBRdWFsaXR5RmFjdG9ycztcbiAgLyoqIElTTyA4NjAxIHRpbWVzdGFtcCBvZiB0YXNrIGNvbXBsZXRpb24gKi9cbiAgY29tcGxldGVkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBHcmFudWxhciBxdWFsaXR5IGZhY3RvciBicmVha2Rvd24uXG4gKlxuICogTm90IGFsbCBwcm92aWRlcnMgd2lsbCBoYXZlIGFsbCBmYWN0b3JzLiBVbmRlZmluZWQgZmllbGRzIG1lYW5cbiAqIFwibm90IGFzc2Vzc2VkXCIgKGRpc3RpbmN0IGZyb20gMC4wLCB3aGljaCBtZWFucyBcImFzc2Vzc2VkIGFzIHplcm9cIikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVhbGl0eUZhY3RvcnMge1xuICBhY2NlcHRhbmNlQ3JpdGVyaWFNZXQ/OiBudW1iZXI7XG4gIHRlc3RzUGFzc2luZz86IG51bWJlcjtcbiAgbm9SZWdyZXNzaW9ucz86IG51bWJlcjtcbiAgbGludENsZWFuPzogbnVtYmVyO1xuICB0eXBlQ2hlY2tDbGVhbj86IG51bWJlcjtcbiAgZm9sbG93c1BhdHRlcm5zPzogbnVtYmVyO1xuICBjb250ZXh0UmVsZXZhbmNlPzogbnVtYmVyO1xuICByZWFzb25pbmdDb2hlcmVuY2U/OiBudW1iZXI7XG4gIGV4ZWN1dGlvbkVmZmljaWVuY3k/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUXVhbGl0eSB3ZWlnaHQgb3ZlcnJpZGVzIGZyb20gYSBwcm92aWRlci5cbiAqXG4gKiBXZWlnaHRzIHNob3VsZCBzdW0gdG8gYXBwcm94aW1hdGVseSAxLjAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJRdWFsaXR5V2VpZ2h0cyB7XG4gIHRhc2tDb21wbGV0aW9uOiBudW1iZXI7XG4gIGNvZGVRdWFsaXR5OiBudW1iZXI7XG4gIHByb2Nlc3M6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFcnJvciBmcm9tIGEgc2luZ2xlIHByb3ZpZGVyIGR1cmluZyBiYXRjaCBsb2FkaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyRXJyb3Ige1xuICBwcm92aWRlck5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3VsdCBmcm9tIGEgc2luZ2xlIHByb3ZpZGVyIGR1cmluZyBncm91cGVkIGxvYWRpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJSZXN1bHQge1xuICBwcm92aWRlck5hbWU6IHN0cmluZztcbiAgc2lnbmFsczogUXVhbGl0eVNpZ25hbFtdO1xuICB3ZWlnaHRzPzogUHJvdmlkZXJRdWFsaXR5V2VpZ2h0cztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGV4dGVybmFsIHN5c3RlbXMgdGhhdCBzdXBwbHkgcXVhbGl0eSBzaWduYWxzIHRvIFJ1dkxMTS5cbiAqXG4gKiBJbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UgYW5kIHJlZ2lzdGVyIHdpdGggSW50ZWxsaWdlbmNlTG9hZGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVsbGlnZW5jZVByb3ZpZGVyIHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoaXMgcHJvdmlkZXIgKi9cbiAgbmFtZSgpOiBzdHJpbmc7XG4gIC8qKiBMb2FkIHF1YWxpdHkgc2lnbmFscyBmcm9tIHRoaXMgcHJvdmlkZXIncyBkYXRhIHNvdXJjZSAqL1xuICBsb2FkU2lnbmFscygpOiBRdWFsaXR5U2lnbmFsW107XG4gIC8qKiBPcHRpb25hbCBxdWFsaXR5IHdlaWdodCBvdmVycmlkZXMgKi9cbiAgcXVhbGl0eVdlaWdodHM/KCk6IFByb3ZpZGVyUXVhbGl0eVdlaWdodHMgfCB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxOdW1iZXIodmFsOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgbiA9IE51bWJlcih2YWwpO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pICYmIG4gPj0gMCAmJiBuIDw9IDEgPyBuIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU91dGNvbWUodmFsOiB1bmtub3duKTogUXVhbGl0eVNpZ25hbFsnb3V0Y29tZSddIHtcbiAgY29uc3QgcyA9IFN0cmluZyh2YWwgPz8gJ2ZhaWx1cmUnKTtcbiAgcmV0dXJuIFZBTElEX09VVENPTUVTLmhhcyhzKSA/IHMgYXMgUXVhbGl0eVNpZ25hbFsnb3V0Y29tZSddIDogJ2ZhaWx1cmUnO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVZlcmRpY3QodmFsOiB1bmtub3duKTogUXVhbGl0eVNpZ25hbFsnaHVtYW5WZXJkaWN0J10gfCB1bmRlZmluZWQge1xuICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBzID0gU3RyaW5nKHZhbCk7XG4gIHJldHVybiBWQUxJRF9WRVJESUNUUy5oYXMocykgPyBzIGFzIFF1YWxpdHlTaWduYWxbJ2h1bWFuVmVyZGljdCddIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNjb3JlKHZhbDogdW5rbm93bik6IG51bWJlciB7XG4gIGNvbnN0IG4gPSBOdW1iZXIodmFsID8/IDApO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShuKSB8fCBuIDwgMCB8fCBuID4gMSkgcmV0dXJuIDA7XG4gIHJldHVybiBuO1xufVxuXG5mdW5jdGlvbiBtYXBRdWFsaXR5RmFjdG9ycyhyYXc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUXVhbGl0eUZhY3RvcnMge1xuICByZXR1cm4ge1xuICAgIGFjY2VwdGFuY2VDcml0ZXJpYU1ldDogYXNPcHRpb25hbE51bWJlcihyYXcuYWNjZXB0YW5jZV9jcml0ZXJpYV9tZXQpLFxuICAgIHRlc3RzUGFzc2luZzogYXNPcHRpb25hbE51bWJlcihyYXcudGVzdHNfcGFzc2luZyksXG4gICAgbm9SZWdyZXNzaW9uczogYXNPcHRpb25hbE51bWJlcihyYXcubm9fcmVncmVzc2lvbnMpLFxuICAgIGxpbnRDbGVhbjogYXNPcHRpb25hbE51bWJlcihyYXcubGludF9jbGVhbiksXG4gICAgdHlwZUNoZWNrQ2xlYW46IGFzT3B0aW9uYWxOdW1iZXIocmF3LnR5cGVfY2hlY2tfY2xlYW4pLFxuICAgIGZvbGxvd3NQYXR0ZXJuczogYXNPcHRpb25hbE51bWJlcihyYXcuZm9sbG93c19wYXR0ZXJucyksXG4gICAgY29udGV4dFJlbGV2YW5jZTogYXNPcHRpb25hbE51bWJlcihyYXcuY29udGV4dF9yZWxldmFuY2UpLFxuICAgIHJlYXNvbmluZ0NvaGVyZW5jZTogYXNPcHRpb25hbE51bWJlcihyYXcucmVhc29uaW5nX2NvaGVyZW5jZSksXG4gICAgZXhlY3V0aW9uRWZmaWNpZW5jeTogYXNPcHRpb25hbE51bWJlcihyYXcuZXhlY3V0aW9uX2VmZmljaWVuY3kpLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWx0LWluIGZpbGUtYmFzZWQgaW50ZWxsaWdlbmNlIHByb3ZpZGVyLlxuICpcbiAqIFJlYWRzIHF1YWxpdHkgc2lnbmFscyBmcm9tIGEgSlNPTiBmaWxlLiBUaGlzIGlzIHRoZSBkZWZhdWx0IHByb3ZpZGVyXG4gKiBmb3Igbm9uLVJ1c3QgaW50ZWdyYXRpb25zIHRoYXQgd3JpdGUgc2lnbmFsIGZpbGVzLlxuICovXG5leHBvcnQgY2xhc3MgRmlsZVNpZ25hbFByb3ZpZGVyIGltcGxlbWVudHMgSW50ZWxsaWdlbmNlUHJvdmlkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIHRoaXMuZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoZmlsZVBhdGgpO1xuICB9XG5cbiAgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZmlsZS1zaWduYWxzJztcbiAgfVxuXG4gIGxvYWRTaWduYWxzKCk6IFF1YWxpdHlTaWduYWxbXSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZmlsZVBhdGgpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZmlsZSBzaXplIGJlZm9yZSByZWFkaW5nIChwcmV2ZW50IE9PTSlcbiAgICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmModGhpcy5maWxlUGF0aCk7XG4gICAgaWYgKHN0YXQuc2l6ZSA+IE1BWF9TSUdOQUxfRklMRV9TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTaWduYWwgZmlsZSBleGNlZWRzIG1heCBzaXplICgke3N0YXQuc2l6ZX0gYnl0ZXMsIGxpbWl0ICR7TUFYX1NJR05BTF9GSUxFX1NJWkV9KWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKHRoaXMuZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IGRhdGE6IHVua25vd24gPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgc2lnbmFsIGNvdW50XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gTUFYX1NJR05BTFNfUEVSX0ZJTEUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFNpZ25hbCBmaWxlIGNvbnRhaW5zICR7ZGF0YS5sZW5ndGh9IHNpZ25hbHMsIG1heCBpcyAke01BWF9TSUdOQUxTX1BFUl9GSUxFfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGEubWFwKChpdGVtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgY29uc3QgcWZSYXcgPSAoaXRlbS5xdWFsaXR5X2ZhY3RvcnMgPz8gaXRlbS5xdWFsaXR5RmFjdG9ycykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogU3RyaW5nKGl0ZW0uaWQgPz8gJycpLFxuICAgICAgICB0YXNrRGVzY3JpcHRpb246IFN0cmluZyhpdGVtLnRhc2tfZGVzY3JpcHRpb24gPz8gaXRlbS50YXNrRGVzY3JpcHRpb24gPz8gJycpLFxuICAgICAgICBvdXRjb21lOiB2YWxpZGF0ZU91dGNvbWUoaXRlbS5vdXRjb21lKSxcbiAgICAgICAgcXVhbGl0eVNjb3JlOiB2YWxpZGF0ZVNjb3JlKGl0ZW0ucXVhbGl0eV9zY29yZSA/PyBpdGVtLnF1YWxpdHlTY29yZSksXG4gICAgICAgIGh1bWFuVmVyZGljdDogdmFsaWRhdGVWZXJkaWN0KGl0ZW0uaHVtYW5fdmVyZGljdCA/PyBpdGVtLmh1bWFuVmVyZGljdCksXG4gICAgICAgIHF1YWxpdHlGYWN0b3JzOiBxZlJhdyA/IG1hcFF1YWxpdHlGYWN0b3JzKHFmUmF3KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgY29tcGxldGVkQXQ6IFN0cmluZyhpdGVtLmNvbXBsZXRlZF9hdCA/PyBpdGVtLmNvbXBsZXRlZEF0ID8/IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcXVhbGl0eVdlaWdodHMoKTogUHJvdmlkZXJRdWFsaXR5V2VpZ2h0cyB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdlaWdodHNQYXRoID0gcGF0aC5qb2luKHBhdGguZGlybmFtZSh0aGlzLmZpbGVQYXRoKSwgJ3F1YWxpdHktd2VpZ2h0cy5qc29uJyk7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMod2VpZ2h0c1BhdGgpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKHdlaWdodHNQYXRoLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHJhdykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXNrQ29tcGxldGlvbjogTnVtYmVyKGRhdGEudGFza19jb21wbGV0aW9uID8/IGRhdGEudGFza0NvbXBsZXRpb24gPz8gMC41KSxcbiAgICAgICAgY29kZVF1YWxpdHk6IE51bWJlcihkYXRhLmNvZGVfcXVhbGl0eSA/PyBkYXRhLmNvZGVRdWFsaXR5ID8/IDAuMyksXG4gICAgICAgIHByb2Nlc3M6IE51bWJlcihkYXRhLnByb2Nlc3MgPz8gMC4yKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFnZ3JlZ2F0ZXMgcXVhbGl0eSBzaWduYWxzIGZyb20gbXVsdGlwbGUgcmVnaXN0ZXJlZCBwcm92aWRlcnMuXG4gKlxuICogSWYgbm8gcHJvdmlkZXJzIGFyZSByZWdpc3RlcmVkLCBsb2FkQWxsU2lnbmFscyByZXR1cm5zIGVtcHR5IGFycmF5c1xuICogd2l0aCB6ZXJvIG92ZXJoZWFkLlxuICovXG5leHBvcnQgY2xhc3MgSW50ZWxsaWdlbmNlTG9hZGVyIHtcbiAgcHJpdmF0ZSBwcm92aWRlcnM6IEludGVsbGlnZW5jZVByb3ZpZGVyW10gPSBbXTtcblxuICAvKiogUmVnaXN0ZXIgYW4gZXh0ZXJuYWwgaW50ZWxsaWdlbmNlIHByb3ZpZGVyICovXG4gIHJlZ2lzdGVyUHJvdmlkZXIocHJvdmlkZXI6IEludGVsbGlnZW5jZVByb3ZpZGVyKTogdm9pZCB7XG4gICAgdGhpcy5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgcHJvdmlkZXJzICovXG4gIGdldCBwcm92aWRlckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBhbGwgcmVnaXN0ZXJlZCBwcm92aWRlcnMgKi9cbiAgZ2V0IHByb3ZpZGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVycy5tYXAocCA9PiBwLm5hbWUoKSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBzaWduYWxzIGZyb20gYWxsIHJlZ2lzdGVyZWQgcHJvdmlkZXJzLlxuICAgKlxuICAgKiBOb24tZmF0YWw6IGlmIGEgcHJvdmlkZXIgZmFpbHMsIGl0cyBlcnJvciBpcyBjYXB0dXJlZCBidXRcbiAgICogb3RoZXIgcHJvdmlkZXJzIGNvbnRpbnVlIGxvYWRpbmcuXG4gICAqL1xuICBsb2FkQWxsU2lnbmFscygpOiB7IHNpZ25hbHM6IFF1YWxpdHlTaWduYWxbXTsgZXJyb3JzOiBQcm92aWRlckVycm9yW10gfSB7XG4gICAgY29uc3Qgc2lnbmFsczogUXVhbGl0eVNpZ25hbFtdID0gW107XG4gICAgY29uc3QgZXJyb3JzOiBQcm92aWRlckVycm9yW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgcHJvdmlkZXIgb2YgdGhpcy5wcm92aWRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyU2lnbmFscyA9IHByb3ZpZGVyLmxvYWRTaWduYWxzKCk7XG4gICAgICAgIHNpZ25hbHMucHVzaCguLi5wcm92aWRlclNpZ25hbHMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgcHJvdmlkZXJOYW1lOiBwcm92aWRlci5uYW1lKCksXG4gICAgICAgICAgbWVzc2FnZTogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBzaWduYWxzLCBlcnJvcnMgfTtcbiAgfVxuXG4gIC8qKiBMb2FkIHNpZ25hbHMgZ3JvdXBlZCBieSBwcm92aWRlciB3aXRoIHdlaWdodCBvdmVycmlkZXMgKi9cbiAgbG9hZEdyb3VwZWQoKTogUHJvdmlkZXJSZXN1bHRbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzLm1hcChwcm92aWRlciA9PiB7XG4gICAgICBsZXQgcHJvdmlkZXJTaWduYWxzOiBRdWFsaXR5U2lnbmFsW10gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb3ZpZGVyU2lnbmFscyA9IHByb3ZpZGVyLmxvYWRTaWduYWxzKCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTm9uLWZhdGFsXG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm92aWRlck5hbWU6IHByb3ZpZGVyLm5hbWUoKSxcbiAgICAgICAgc2lnbmFsczogcHJvdmlkZXJTaWduYWxzLFxuICAgICAgICB3ZWlnaHRzOiBwcm92aWRlci5xdWFsaXR5V2VpZ2h0cz8uKCksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -121,6 +121,17 @@ export declare class LoraAdapter {
121
121
  * Get adapter config
122
122
  */
123
123
  getConfig(): Required<LoRAConfig>;
124
+ /**
125
+ * Get input dimension (rows of loraA).
126
+ *
127
+ * The adapter's geometry (inputDim/outputDim) is not part of LoRAConfig,
128
+ * so these getters expose it for checkpoint metadata and shape validation.
129
+ */
130
+ getInputDim(): number;
131
+ /**
132
+ * Get output dimension (cols of loraB).
133
+ */
134
+ getOutputDim(): number;
124
135
  /**
125
136
  * Get adapter weights
126
137
  */
@@ -1 +1 @@
1
- {"version":3,"file":"lora.d.ts","sourceRoot":"","sources":["../../src/lora.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lora.d.ts","sourceRoot":"","sources":["../../src/lora.ts"],"names":[],"mappings":"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"}