sonamu 0.7.10 → 0.7.12

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 (133) hide show
  1. package/dist/api/config.d.ts +10 -3
  2. package/dist/api/config.d.ts.map +1 -1
  3. package/dist/api/config.js +2 -1
  4. package/dist/api/sonamu.d.ts +4 -0
  5. package/dist/api/sonamu.d.ts.map +1 -1
  6. package/dist/api/sonamu.js +36 -2
  7. package/dist/bin/cli.js +121 -117
  8. package/dist/database/base-model.d.ts +10 -50
  9. package/dist/database/base-model.d.ts.map +1 -1
  10. package/dist/database/base-model.js +19 -84
  11. package/dist/database/base-model.types.d.ts +4 -4
  12. package/dist/database/base-model.types.d.ts.map +1 -1
  13. package/dist/database/base-model.types.js +1 -1
  14. package/dist/database/db.d.ts +1 -0
  15. package/dist/database/db.d.ts.map +1 -1
  16. package/dist/database/db.js +24 -13
  17. package/dist/database/puri-subset.test-d.js +1 -1
  18. package/dist/database/puri-subset.types.d.ts +1 -0
  19. package/dist/database/puri-subset.types.d.ts.map +1 -1
  20. package/dist/database/puri-subset.types.js +2 -2
  21. package/dist/database/puri.d.ts +96 -1
  22. package/dist/database/puri.d.ts.map +1 -1
  23. package/dist/database/puri.js +214 -2
  24. package/dist/database/puri.types.d.ts +60 -5
  25. package/dist/database/puri.types.d.ts.map +1 -1
  26. package/dist/database/puri.types.js +2 -3
  27. package/dist/database/puri.types.test-d.js +1 -1
  28. package/dist/database/upsert-builder.d.ts +3 -1
  29. package/dist/database/upsert-builder.d.ts.map +1 -1
  30. package/dist/database/upsert-builder.js +19 -4
  31. package/dist/entity/entity-manager.d.ts +5 -4
  32. package/dist/entity/entity-manager.d.ts.map +1 -1
  33. package/dist/entity/entity-manager.js +8 -1
  34. package/dist/index.d.ts +1 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +3 -3
  37. package/dist/migration/code-generation.d.ts.map +1 -1
  38. package/dist/migration/code-generation.js +33 -2
  39. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  40. package/dist/migration/postgresql-schema-reader.js +53 -22
  41. package/dist/naite/messaging-types.d.ts.map +1 -1
  42. package/dist/naite/messaging-types.js +1 -1
  43. package/dist/naite/naite-reporter.d.ts +7 -4
  44. package/dist/naite/naite-reporter.d.ts.map +1 -1
  45. package/dist/naite/naite-reporter.js +45 -21
  46. package/dist/naite/naite.js +2 -2
  47. package/dist/stream/sse.d.ts +2 -6
  48. package/dist/stream/sse.d.ts.map +1 -1
  49. package/dist/stream/sse.js +9 -3
  50. package/dist/syncer/api-parser.js +5 -1
  51. package/dist/syncer/file-patterns.d.ts +1 -1
  52. package/dist/syncer/file-patterns.d.ts.map +1 -1
  53. package/dist/syncer/file-patterns.js +6 -5
  54. package/dist/syncer/module-loader.d.ts +5 -0
  55. package/dist/syncer/module-loader.d.ts.map +1 -1
  56. package/dist/syncer/module-loader.js +17 -1
  57. package/dist/syncer/syncer.d.ts +3 -0
  58. package/dist/syncer/syncer.d.ts.map +1 -1
  59. package/dist/syncer/syncer.js +12 -2
  60. package/dist/tasks/decorator.d.ts +26 -0
  61. package/dist/tasks/decorator.d.ts.map +1 -0
  62. package/dist/tasks/decorator.js +28 -0
  63. package/dist/tasks/step-wrapper.d.ts +18 -0
  64. package/dist/tasks/step-wrapper.d.ts.map +1 -0
  65. package/dist/tasks/step-wrapper.js +38 -0
  66. package/dist/tasks/workflow-manager.d.ts +40 -0
  67. package/dist/tasks/workflow-manager.d.ts.map +1 -0
  68. package/dist/tasks/workflow-manager.js +193 -0
  69. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  70. package/dist/template/implementations/generated.template.js +7 -3
  71. package/dist/template/implementations/model.template.js +2 -2
  72. package/dist/template/zod-converter.d.ts.map +1 -1
  73. package/dist/template/zod-converter.js +4 -2
  74. package/dist/types/types.d.ts +28 -11
  75. package/dist/types/types.d.ts.map +1 -1
  76. package/dist/types/types.js +18 -2
  77. package/dist/utils/console-util.js +2 -2
  78. package/dist/utils/formatter.d.ts.map +1 -1
  79. package/dist/utils/formatter.js +10 -2
  80. package/dist/utils/model.d.ts +9 -2
  81. package/dist/utils/model.d.ts.map +1 -1
  82. package/dist/utils/model.js +16 -1
  83. package/dist/utils/type-utils.d.ts.map +1 -1
  84. package/dist/utils/type-utils.js +3 -1
  85. package/dist/vector/embedding.d.ts +2 -5
  86. package/dist/vector/embedding.d.ts.map +1 -1
  87. package/dist/vector/embedding.js +3 -7
  88. package/dist/vector/types.d.ts.map +1 -1
  89. package/dist/vector/types.js +1 -1
  90. package/package.json +4 -2
  91. package/src/api/config.ts +15 -8
  92. package/src/api/sonamu.ts +43 -2
  93. package/src/bin/cli.ts +58 -54
  94. package/src/database/base-model.ts +21 -128
  95. package/src/database/base-model.types.ts +3 -4
  96. package/src/database/db.ts +28 -18
  97. package/src/database/puri-subset.test-d.ts +1 -0
  98. package/src/database/puri-subset.types.ts +2 -0
  99. package/src/database/puri.ts +292 -1
  100. package/src/database/puri.types.test-d.ts +1 -1
  101. package/src/database/puri.types.ts +81 -7
  102. package/src/database/upsert-builder.ts +27 -9
  103. package/src/entity/entity-manager.ts +9 -0
  104. package/src/index.ts +1 -1
  105. package/src/migration/code-generation.ts +40 -1
  106. package/src/migration/postgresql-schema-reader.ts +53 -22
  107. package/src/naite/messaging-types.ts +43 -44
  108. package/src/naite/naite-reporter.ts +51 -20
  109. package/src/naite/naite.ts +1 -1
  110. package/src/shared/app.shared.ts.txt +13 -0
  111. package/src/shared/web.shared.ts.txt +13 -0
  112. package/src/stream/sse.ts +15 -3
  113. package/src/syncer/api-parser.ts +4 -0
  114. package/src/syncer/file-patterns.ts +11 -9
  115. package/src/syncer/module-loader.ts +35 -0
  116. package/src/syncer/syncer.ts +14 -0
  117. package/src/tasks/decorator.ts +71 -0
  118. package/src/tasks/step-wrapper.ts +84 -0
  119. package/src/tasks/workflow-manager.ts +330 -0
  120. package/src/template/implementations/generated.template.ts +19 -6
  121. package/src/template/implementations/model.template.ts +1 -1
  122. package/src/template/zod-converter.ts +3 -0
  123. package/src/types/types.ts +23 -4
  124. package/src/utils/console-util.ts +1 -1
  125. package/src/utils/formatter.ts +8 -1
  126. package/src/utils/model.ts +26 -2
  127. package/src/utils/type-utils.ts +2 -0
  128. package/src/vector/embedding.ts +2 -8
  129. package/src/vector/types.ts +1 -2
  130. package/dist/vector/vector-search.d.ts +0 -47
  131. package/dist/vector/vector-search.d.ts.map +0 -1
  132. package/dist/vector/vector-search.js +0 -176
  133. package/src/vector/vector-search.ts +0 -261
@@ -203,12 +203,27 @@ export class UpsertBuilder {
203
203
  resultRows = await wdb.insert(dataForDb).into(tableName).returning(selectFields);
204
204
  } else {
205
205
  // UPSERT 모드 - onConflict 사용 (unique index 없으면 PK fallback)
206
- const conflictColumns = table.uniqueIndexes.length > 0 ? table.uniqueIndexes[0].columns.map((c)=>c.name) : [
206
+ const conflictColumns = table.uniqueIndexes[0]?.columns.map((c)=>c.name) ?? [
207
207
  "id"
208
208
  ];
209
- const updateColumns = Object.keys(dataForDb[0]).filter((col)=>!conflictColumns.includes(col));
209
+ const allColumns = Object.keys(dataForDb[0]);
210
+ let updateColumns = allColumns.filter((c)=>!conflictColumns.includes(c));
211
+ // inherit 옵션 처리 - inherit 컬럼은 update 대상에서 제외
212
+ if (options?.inherit?.length) {
213
+ const inheritColumns = options.inherit;
214
+ const excludedFromUpdate = updateColumns.filter((c)=>inheritColumns.includes(c));
215
+ updateColumns = updateColumns.filter((c)=>!inheritColumns.includes(c));
216
+ // 실제로 제외된 컬럼 로깅
217
+ if (excludedFromUpdate.length) {
218
+ Naite.t("puri:ub-inherit", {
219
+ tableName,
220
+ inheritColumns,
221
+ excludedFromUpdate
222
+ });
223
+ }
224
+ }
210
225
  // updateColumns가 비어있어도 merge()를 사용하여 모든 행이 RETURNING되도록 보장
211
- const mergeColumns = updateColumns.length > 0 ? updateColumns : conflictColumns;
226
+ const mergeColumns = updateColumns.length ? updateColumns : conflictColumns;
212
227
  resultRows = await wdb.insert(dataForDb).into(tableName).onConflict(conflictColumns).merge(mergeColumns).returning(selectFields);
213
228
  }
214
229
  if (originalUuids.length !== resultRows.length) {
@@ -390,4 +405,4 @@ export class UpsertBuilder {
390
405
  }
391
406
  }
392
407
 
393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS91cHNlcnQtYnVpbGRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGlzQXJyYXksIHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VGb3JlaWduS2V5cywgRGF0YWJhc2VTY2hlbWFFeHRlbmQsIEVudGl0eUluZGV4IH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBhc3NlcnREZWZpbmVkLCBjaHVuaywgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IGJhdGNoVXBkYXRlLCB0eXBlIFJvd1dpdGhJZCB9IGZyb20gXCIuL19iYXRjaF91cGRhdGVcIjtcbmltcG9ydCB0eXBlIHsgRm9yZWlnbktleUNvbHVtbnMsIFRhYmxlTmFtZSB9IGZyb20gXCIuL3B1cmkudHlwZXNcIjtcblxuLyoqXG4gKiBGSyDtg4DsnoUg7LaU66Gg7J2EIOychO2VtCBEYXRhYmFzZUZvcmVpZ25LZXlzIGV4cG9ydFxuICogKG1vZHVsZSBhdWdtZW50YXRpb24g7J6Q64+ZIOuhnOuTnCDrs7TsnqUpXG4gKi9cbmV4cG9ydCB0eXBlIHsgRGF0YWJhc2VGb3JlaWduS2V5cyB9O1xuXG4vLyDthYzsnbTruJQg642w7J207YSwIO2DgOyehVxudHlwZSBUYWJsZURhdGEgPSB7XG4gIHJlZmVyZW5jZXM6IFNldDxzdHJpbmc+O1xuICByb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuICB1bmlxdWVJbmRleGVzOiBFbnRpdHlJbmRleFtdO1xuICB1bmlxdWVzTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuLy8g7LC47KGwIO2VhOuTnCDtg4DsnoVcbmV4cG9ydCB0eXBlIFVCUmVmID0ge1xuICB1dWlkOiBzdHJpbmc7XG4gIG9mOiBzdHJpbmc7XG4gIHVzZT86IHN0cmluZztcbn07XG5cbi8vIHVwc2VydCDsmLXshZhcbmV4cG9ydCB0eXBlIFVwc2VydE9wdGlvbnM8VFRhYmxlIGV4dGVuZHMgVGFibGVOYW1lPERhdGFiYXNlU2NoZW1hRXh0ZW5kPj4gPSB7XG4gIGNodW5rU2l6ZT86IG51bWJlcjtcbiAgY2xlYW5PcnBoYW5zPzogRm9yZWlnbktleUNvbHVtbnM8VFRhYmxlPiB8IEZvcmVpZ25LZXlDb2x1bW5zPFRUYWJsZT5bXTtcbn07XG5cbi8vIGluc2VydE9ubHkg7Ji17IWYXG5leHBvcnQgdHlwZSBJbnNlcnRPbmx5T3B0aW9ucyA9IHtcbiAgY2h1bmtTaXplPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmRmllbGQoZmllbGQ6IHVua25vd24pOiBmaWVsZCBpcyBVQlJlZiB7XG4gIHJldHVybiAoXG4gICAgZmllbGQgIT09IHVuZGVmaW5lZCAmJlxuICAgIGZpZWxkICE9PSBudWxsICYmXG4gICAgKGZpZWxkIGFzIFVCUmVmKT8ub2YgIT09IHVuZGVmaW5lZCAmJlxuICAgIChmaWVsZCBhcyBVQlJlZik/LnV1aWQgIT09IHVuZGVmaW5lZFxuICApO1xufVxuXG5leHBvcnQgY2xhc3MgVXBzZXJ0QnVpbGRlciB7XG4gIHRhYmxlczogTWFwPHN0cmluZywgVGFibGVEYXRhPjtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50YWJsZXMgPSBuZXcgTWFwKCk7XG4gIH1cblxuICBnZXRUYWJsZSh0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlRGF0YSB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlcy5nZXQodGFibGVOYW1lKTtcbiAgICBpZiAodGFibGUpIHtcbiAgICAgIHJldHVybiB0YWJsZTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZVNwZWMgPSAoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEVudGl0eU1hbmFnZXIuZ2V0VGFibGVTcGVjKHRhYmxlTmFtZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IHRhYmxlRGF0YSA9IHtcbiAgICAgIHJlZmVyZW5jZXM6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgICAgcm93czogW10sXG4gICAgICB1bmlxdWVJbmRleGVzOiB0YWJsZVNwZWM/LnVuaXF1ZUluZGV4ZXMgPz8gW10sXG4gICAgICB1bmlxdWVzTWFwOiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpLFxuICAgIH07XG4gICAgdGhpcy50YWJsZXMuc2V0KHRhYmxlTmFtZSwgdGFibGVEYXRhKTtcbiAgICByZXR1cm4gdGFibGVEYXRhO1xuICB9XG5cbiAgaGFzVGFibGUodGFibGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZXMuaGFzKHRhYmxlTmFtZSk7XG4gIH1cblxuICByZWdpc3RlcjxUIGV4dGVuZHMgc3RyaW5nPihcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICByb3c6IHtcbiAgICAgIFtrZXkgaW4gVF0/OiBVQlJlZiB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBiaWdpbnQgfCBudWxsIHwgb2JqZWN0IHwgdW5rbm93bjtcbiAgICB9LFxuICApOiBVQlJlZiB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLmdldFRhYmxlKHRhYmxlTmFtZSk7XG5cbiAgICAvLyDtlbTri7kg7YWM7J2067iU7J2YIHVuaXF1ZSDsnbjrjbHsiqTrpbwg7Iic7ZqM7ZWY66mwIO2CpCDsg53shLFcbiAgICBjb25zdCB1bmlxdWVLZXlzID0gdGFibGUudW5pcXVlSW5kZXhlc1xuICAgICAgLm1hcCgodW5xSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdW5pcXVlS2V5QXJyYXkgPSB1bnFJbmRleC5jb2x1bW5zLm1hcCgodW5xQ29sKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsID0gcm93W3VucUNvbC5uYW1lIGFzIGtleW9mIHR5cGVvZiByb3ddO1xuICAgICAgICAgIGlmIChpc1JlZkZpZWxkKHZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwudXVpZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJvd1t1bnFDb2wubmFtZSBhcyBrZXlvZiB0eXBlb2Ygcm93XSA/PyByYW5kb21VVUlEKCk7IC8vIG51bGxhYmxl7J24IOqyveyasCB1dWlk66GcIOuenOuNpOqwkiDsgr3snoVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIOqwkuydtCDrqqjrkZAgbnVsbOyduCDqsr3smrAg7YKkIOyDneyEsSDtjKjsiqRcbiAgICAgICAgaWYgKHVuaXF1ZUtleUFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmlxdWVLZXlBcnJheS5qb2luKFwiLS0tZGVsaW1pdGVyLS1cIik7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihub25OdWxsYWJsZSk7XG5cbiAgICAvLyB1dWlkIOyDneyEsSDroZzsp4FcbiAgICBjb25zdCB7IHV1aWQsIGlzUmV1c2VkIH0gPSAoKCkgPT4ge1xuICAgICAgLy8g7YKk66W8IOyInO2ajO2VmOyXrCDsnbTrr7gg7KG07J6s7ZWY64qUIO2CpOqwgCDsnojripTsp4Ag7ZmV7J24XG4gICAgICBpZiAodW5pcXVlS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgdW5pcXVlS2V5IG9mIHVuaXF1ZUtleXMpIHtcbiAgICAgICAgICBpZiAodGFibGUudW5pcXVlc01hcC5oYXModW5pcXVlS2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdXVpZDogYXNzZXJ0RGVmaW5lZCh0YWJsZS51bmlxdWVzTWFwLmdldCh1bmlxdWVLZXkpLCBcIlVuaXF1ZSBrZXkgbm90IGZvdW5kXCIpLFxuICAgICAgICAgICAgICBpc1JldXNlZDogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIOywvuydhCDsiJgg7JeG64qUIOqyveyasCDsg53shLFcbiAgICAgIHJldHVybiB7IHV1aWQ6IHJhbmRvbVVVSUQoKSwgaXNSZXVzZWQ6IGZhbHNlIH07XG4gICAgfSkoKTtcblxuICAgIC8vIOuqqOuToCDsnKDri4jtgaztgqTsl5Ag64yA7ZW0IOycoOuLiO2BrOunteyXkCB1dWlkIOyggOyepVxuICAgIGlmICh1bmlxdWVLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgdW5pcXVlS2V5IG9mIHVuaXF1ZUtleXMpIHtcbiAgICAgICAgdGFibGUudW5pcXVlc01hcC5zZXQodW5pcXVlS2V5LCB1dWlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDsnbQg7YWM7J2067iU7JeQIOyCrOyaqeuQnCBSZWZGaWVsZOulvCDsiJztmoztlZjsl6wsIO2YhOyerCDthYzsnbTruJQg7KCV67O07JeQIOyWtOuWpCDtlYTrk5zrpbwg7LC47KGw7ZWY64qU7KeAIOy2lOqwgFxuICAgIC8vIOydtCDsoJXrs7Trpbwg64KY7KSR7JeQIOy5mO2ZmO2VoCDrlYwg7IKs7JqpXG4gICAgcm93ID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMocm93KS5tYXAoKFtyb3dLZXksIHJvd1ZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAoaXNSZWZGaWVsZChyb3dWYWx1ZSkpIHtcbiAgICAgICAgICByb3dWYWx1ZS51c2UgPz89IFwiaWRcIjtcbiAgICAgICAgICB0YWJsZS5yZWZlcmVuY2VzLmFkZChgJHtyb3dWYWx1ZS5vZn0uJHtyb3dWYWx1ZS51c2V9YCk7XG4gICAgICAgICAgcmV0dXJuIFtyb3dLZXksIHJvd1ZhbHVlXTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygcm93VmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIShyb3dWYWx1ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgLy8gb2JqZWN07J24IOqyveyasCBKU09O7Jy866GcIOuzgO2ZmFxuICAgICAgICAgIHJldHVybiBbcm93S2V5LCByb3dWYWx1ZSA9PT0gbnVsbCA/IG51bGwgOiBKU09OLnN0cmluZ2lmeShyb3dWYWx1ZSldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbcm93S2V5LCByb3dWYWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICkgYXMgeyBba2V5IGluIFRdPzogdW5rbm93biB9O1xuXG4gICAgdGFibGUucm93cy5wdXNoKHtcbiAgICAgIHV1aWQsXG4gICAgICAuLi5yb3csXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQ6IFVCUmVmID0ge1xuICAgICAgb2Y6IHRhYmxlTmFtZSxcbiAgICAgIHV1aWQ6IChyb3cgYXMgeyB1dWlkPzogc3RyaW5nIH0pLnV1aWQgPz8gdXVpZCxcbiAgICB9O1xuXG4gICAgTmFpdGUudChcInB1cmk6dWItcmVnaXN0ZXJcIiwge1xuICAgICAgdGFibGVOYW1lLFxuICAgICAgdXVpZDogcmVzdWx0LnV1aWQsXG4gICAgICBpc1V1aWRSZXVzZWQ6IGlzUmV1c2VkLFxuICAgICAgcm93LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIHVwc2VydDxUVGFibGUgZXh0ZW5kcyBUYWJsZU5hbWU8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+PihcbiAgICB3ZGI6IEtuZXgsXG4gICAgdGFibGVOYW1lOiBUVGFibGUsXG4gICAgb3B0aW9ucz86IFVwc2VydE9wdGlvbnM8VFRhYmxlPixcbiAgKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLnVwc2VydE9ySW5zZXJ0KHdkYiwgdGFibGVOYW1lLCBcInVwc2VydFwiLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGluc2VydE9ubHk8VFRhYmxlIGV4dGVuZHMgVGFibGVOYW1lPERhdGFiYXNlU2NoZW1hRXh0ZW5kPj4oXG4gICAgd2RiOiBLbmV4LFxuICAgIHRhYmxlTmFtZTogVFRhYmxlLFxuICAgIG9wdGlvbnM/OiBJbnNlcnRPbmx5T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLnVwc2VydE9ySW5zZXJ0KHdkYiwgdGFibGVOYW1lLCBcImluc2VydFwiLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHVwc2VydE9ySW5zZXJ0PFRUYWJsZSBleHRlbmRzIFRhYmxlTmFtZTxEYXRhYmFzZVNjaGVtYUV4dGVuZD4+KFxuICAgIHdkYjogS25leCxcbiAgICB0YWJsZU5hbWU6IFRUYWJsZSxcbiAgICBtb2RlOiBcInVwc2VydFwiIHwgXCJpbnNlcnRcIixcbiAgICBvcHRpb25zPzogVXBzZXJ0T3B0aW9uczxUVGFibGU+LFxuICApOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgaWYgKHRoaXMuaGFzVGFibGUodGFibGVOYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGVzLmdldCh0YWJsZU5hbWUpO1xuICAgIGlmICh0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQg7YWM7J2067iUICR7dGFibGVOYW1lfeyXkCB1cHNlcnQg7JqU7LKtYCk7XG4gICAgfSBlbHNlIGlmICh0YWJsZS5yb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RhYmxlTmFtZX3sl5AgdXBzZXJ0IO2VoCDrjbDsnbTthLDqsIAg7JeG7Iq164uI64ukLmApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRhYmxlLnJvd3Muc29tZSgocm93KSA9PlxuICAgICAgICBPYmplY3QuZW50cmllcyhyb3cpLnNvbWUoKFssIHZhbHVlXSkgPT4gaXNSZWZGaWVsZCh2YWx1ZSkgJiYgdmFsdWUub2YgIT09IHRhYmxlTmFtZSksXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGFibGVOYW1lfSDtlbTqsrDrkJjsp4Ag7JWK7J2AIOywuOyhsOqwgCDsnojsirXri4jri6QuYCk7XG4gICAgfVxuXG4gICAgLy8g7KCE7LK0IO2FjOydtOu4lCDsiJztmoztlZjsl6wg7ZiE7J6sIO2FjOydtOu4lCDssLjsobDtlZjripQg66qo65OgIO2FjOydtOu4lCDstpTstpxcbiAgICBjb25zdCB7IHJlZmVyZW5jZXMsIHJlZlRhYmxlcyB9ID0gQXJyYXkuZnJvbSh0aGlzLnRhYmxlcykucmVkdWNlKFxuICAgICAgKHIsIFssIHRhYmxlXSkgPT4ge1xuICAgICAgICBjb25zdCByZWZlcmVuY2UgPSBBcnJheS5mcm9tKHRhYmxlLnJlZmVyZW5jZXMudmFsdWVzKCkpLmZpbmQoKHJlZikgPT5cbiAgICAgICAgICByZWYuaW5jbHVkZXMoYCR7dGFibGVOYW1lfS5gKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHJlZmVyZW5jZSkge1xuICAgICAgICAgIHIucmVmZXJlbmNlcy5wdXNoKHJlZmVyZW5jZSk7XG4gICAgICAgICAgci5yZWZUYWJsZXMucHVzaCh0YWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJlZmVyZW5jZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgICAgICByZWZUYWJsZXM6IFtdIGFzIFRhYmxlRGF0YVtdLFxuICAgICAgfSxcbiAgICApO1xuICAgIGNvbnN0IGV4dHJhY3RGaWVsZHMgPSB1bmlxdWUocmVmZXJlbmNlcylcbiAgICAgIC5tYXAoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLnNwbGl0KFwiLlwiKVsxXSlcbiAgICAgIC5maWx0ZXIoKGZpZWxkKTogZmllbGQgaXMgc3RyaW5nID0+IGZpZWxkICE9PSB1bmRlZmluZWQpO1xuXG4gICAgLy8g7J2Y7KG07ISxIOyInOyEnOyXkCDrlLDrnbwg66CI67Ko67OEIOq3uOujue2ZlCAo7J6Q6riwIOywuOyhsOqwgCDsl4bsnLzrqbQgTGV2ZWwgMCDtlZjrgpgpXG4gICAgY29uc3QgeyBsZXZlbHMsIGhhc0NpcmN1bGFyIH0gPSB0aGlzLmJ1aWxkSW5zZXJ0TGV2ZWxzKHRhYmxlLnJvd3MsIHRhYmxlTmFtZSk7XG5cbiAgICBpZiAoaGFzQ2lyY3VsYXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0YWJsZU5hbWV97JeQIOyInO2ZmCDsnpDquLAg7LC47KGw6rCAIOyeiOyKteuLiOuLpC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCB1dWlkTWFwID0gbmV3IE1hcDxzdHJpbmcsIHVua25vd24+KCk7XG4gICAgY29uc3QgYWxsSWRzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgLy8g66CI67Ko67OE66GcIOyInOywqCDsspjrpqxcbiAgICBmb3IgKGNvbnN0IGxldmVsUm93cyBvZiBsZXZlbHMpIHtcbiAgICAgIC8vIOydtOyghCDroIjrsqjsl5DshJwg7Ja77J2AIElE66GcIOyekOq4sCDssLjsobAg7ZW06rKwXG4gICAgICBjb25zdCByZXNvbHZlZFJvd3MgPSBsZXZlbFJvd3MubWFwKChyb3cpID0+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSB7IC4uLnJvdyB9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyb3cpKSB7XG4gICAgICAgICAgaWYgKGlzUmVmRmllbGQodmFsdWUpICYmIHZhbHVlLm9mID09PSB0YWJsZU5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHV1aWRNYXAuZ2V0KHZhbHVlLnV1aWQpO1xuXG4gICAgICAgICAgICBpZiAoIXBhcmVudCkgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIHV1aWQgJHt2YWx1ZS51dWlkfSAtLSBpbiAke3RhYmxlTmFtZX1gKTtcblxuICAgICAgICAgICAgcmVzb2x2ZWRba2V5XSA9IChwYXJlbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3ZhbHVlLnVzZSA/PyBcImlkXCJdO1xuXG4gICAgICAgICAgICBOYWl0ZS50KFwicHVyaTp1Yi1yZWYtcmVzb2x2ZWRcIiwge1xuICAgICAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkOiBrZXksXG4gICAgICAgICAgICAgIGZyb206IHsgb2Y6IHZhbHVlLm9mLCB1dWlkOiB2YWx1ZS51dWlkLCB1c2U6IHZhbHVlLnVzZSA/PyBcImlkXCIgfSxcbiAgICAgICAgICAgICAgdG86IHJlc29sdmVkW2tleV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIO2YhOyerCDroIjrsqggdXBzZXJ0XG4gICAgICBjb25zdCBjaHVua1NpemUgPSBvcHRpb25zPy5jaHVua1NpemU7XG4gICAgICBjb25zdCBsZXZlbENodW5rcyA9IGNodW5rU2l6ZSA/IGNodW5rKHJlc29sdmVkUm93cywgY2h1bmtTaXplKSA6IFtyZXNvbHZlZFJvd3NdO1xuICAgICAgY29uc3Qgc2VsZWN0RmllbGRzID0gdW5pcXVlKFtcImlkXCIsIC4uLmV4dHJhY3RGaWVsZHNdKTtcblxuICAgICAgZm9yIChjb25zdCBkYXRhQ2h1bmsgb2YgbGV2ZWxDaHVua3MpIHtcbiAgICAgICAgaWYgKGRhdGFDaHVuay5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIHV1aWTrpbwg67OE64+E66GcIOuztOq0gO2VmOqzoCwgRELsl5Ag7KCA7J6l7ZWgIOuNsOydtO2EsOyXkOyEnCDsoJzqsbBcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxVdWlkcyA9IGRhdGFDaHVuay5tYXAoKHIpID0+IHIudXVpZCBhcyBzdHJpbmcpO1xuICAgICAgICBjb25zdCBkYXRhRm9yRGIgPSBkYXRhQ2h1bmsubWFwKCh7IHV1aWQsIC4uLnJlc3QgfSkgPT4gcmVzdCk7XG5cbiAgICAgICAgbGV0IHJlc3VsdFJvd3M6IHsgaWQ6IG51bWJlcjsgW2tleTogc3RyaW5nXTogdW5rbm93biB9W107XG5cbiAgICAgICAgaWYgKG1vZGUgPT09IFwiaW5zZXJ0XCIpIHtcbiAgICAgICAgICAvLyBJTlNFUlQg66qo65OcIC0gUkVUVVJOSU5HIOyCrOyaqVxuICAgICAgICAgIHJlc3VsdFJvd3MgPSBhd2FpdCB3ZGIuaW5zZXJ0KGRhdGFGb3JEYikuaW50byh0YWJsZU5hbWUpLnJldHVybmluZyhzZWxlY3RGaWVsZHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFVQU0VSVCDrqqjrk5wgLSBvbkNvbmZsaWN0IOyCrOyaqSAodW5pcXVlIGluZGV4IOyXhuycvOuptCBQSyBmYWxsYmFjaylcbiAgICAgICAgICBjb25zdCBjb25mbGljdENvbHVtbnMgPVxuICAgICAgICAgICAgdGFibGUudW5pcXVlSW5kZXhlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gdGFibGUudW5pcXVlSW5kZXhlc1swXS5jb2x1bW5zLm1hcCgoYykgPT4gYy5uYW1lKVxuICAgICAgICAgICAgICA6IFtcImlkXCJdO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZUNvbHVtbnMgPSBPYmplY3Qua2V5cyhkYXRhRm9yRGJbMF0pLmZpbHRlcihcbiAgICAgICAgICAgIChjb2wpID0+ICFjb25mbGljdENvbHVtbnMuaW5jbHVkZXMoY29sKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gdXBkYXRlQ29sdW1uc+qwgCDruYTslrTsnojslrTrj4QgbWVyZ2UoKeulvCDsgqzsmqntlZjsl6wg66qo65OgIO2WieydtCBSRVRVUk5JTkfrkJjrj4TroZ0g67O07J6lXG4gICAgICAgICAgY29uc3QgbWVyZ2VDb2x1bW5zID0gdXBkYXRlQ29sdW1ucy5sZW5ndGggPiAwID8gdXBkYXRlQ29sdW1ucyA6IGNvbmZsaWN0Q29sdW1ucztcblxuICAgICAgICAgIHJlc3VsdFJvd3MgPSBhd2FpdCB3ZGJcbiAgICAgICAgICAgIC5pbnNlcnQoZGF0YUZvckRiKVxuICAgICAgICAgICAgLmludG8odGFibGVOYW1lKVxuICAgICAgICAgICAgLm9uQ29uZmxpY3QoY29uZmxpY3RDb2x1bW5zKVxuICAgICAgICAgICAgLm1lcmdlKG1lcmdlQ29sdW1ucylcbiAgICAgICAgICAgIC5yZXR1cm5pbmcoc2VsZWN0RmllbGRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcmlnaW5hbFV1aWRzLmxlbmd0aCAhPT0gcmVzdWx0Um93cy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGFibGVOYW1lfTogcmVnaXN0ZXIvcmV0dXJuaW5nIOu2iOydvOy5mGApO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdXVpZE1hcC5zZXQob3JpZ2luYWxVdWlkc1tpXSwgcmVzdWx0Um93c1tpXSk7XG4gICAgICAgICAgYWxsSWRzLnB1c2gocmVzdWx0Um93c1tpXS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDtlbTri7kg7YWM7J2067iUIOywuOyhsOulvCDsi6TsoJwg67C466WY66GcIOuzgOqyvVxuICAgIGZvciAoY29uc3QgdGFibGUgb2YgcmVmVGFibGVzKSB7XG4gICAgICB0YWJsZS5yb3dzID0gdGFibGUucm93cy5tYXAoKHJvdykgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyb3cpKSB7XG4gICAgICAgICAgY29uc3QgcHJvcCA9IHJvd1trZXldO1xuICAgICAgICAgIGlmIChpc1JlZkZpZWxkKHByb3ApICYmIHByb3Aub2YgPT09IHRhYmxlTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdXVpZE1hcC5nZXQocHJvcC51dWlkKTtcbiAgICAgICAgICAgIGlmICghcGFyZW50KSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocHJvcCk7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCB1dWlkICR7cHJvcC51dWlkfSAtLSBpbiAke3RhYmxlTmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkVmFsdWUgPSAocGFyZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtwcm9wLnVzZSA/PyBcImlkXCJdO1xuICAgICAgICAgICAgcm93W2tleV0gPSByZXNvbHZlZFZhbHVlO1xuXG4gICAgICAgICAgICBOYWl0ZS50KFwicHVyaTp1Yi1yZWYtcmVzb2x2ZWRcIiwge1xuICAgICAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkOiBrZXksXG4gICAgICAgICAgICAgIGZyb206IHsgb2Y6IHByb3Aub2YsIHV1aWQ6IHByb3AudXVpZCwgdXNlOiBwcm9wLnVzZSA/PyBcImlkXCIgfSxcbiAgICAgICAgICAgICAgdG86IHJlc29sdmVkVmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5jbGVhbk9ycGhhbnMpIHtcbiAgICAgIGNvbnN0IGNsZWFuT3JwaGFucyA9IG9wdGlvbnMuY2xlYW5PcnBoYW5zO1xuICAgICAgY29uc3QgZmtDb2x1bW5zID0gaXNBcnJheShjbGVhbk9ycGhhbnMpXG4gICAgICAgID8gKGNsZWFuT3JwaGFucyBhcyBGb3JlaWduS2V5Q29sdW1uczxUVGFibGU+W10pXG4gICAgICAgIDogW2NsZWFuT3JwaGFucyBhcyBGb3JlaWduS2V5Q29sdW1uczxUVGFibGU+XTtcblxuICAgICAgLy8g7ZiE7J6sIHJlZ2lzdGVy65CcIOugiOy9lOuTnOuTpOydmCBGSyDqsJLrk6Qg7LaU7LacXG4gICAgICBjb25zdCBma0NvbmRpdGlvbnMgPSBma0NvbHVtbnMubWFwKChma0NvbCkgPT4ge1xuICAgICAgICBjb25zdCBma1ZhbHVlcyA9IFsuLi5uZXcgU2V0KHRhYmxlLnJvd3MubWFwKChyb3cpID0+IHJvd1tma0NvbF0pLmZpbHRlcigodikgPT4gdiAhPSBudWxsKSldO1xuICAgICAgICByZXR1cm4geyBjb2x1bW46IGZrQ29sLCB2YWx1ZXM6IGZrVmFsdWVzIH07XG4gICAgICB9KTtcblxuICAgICAgLy8g66qo65OgIEZLIOy7rOufvOyXkCDqsJLsnbQg7J6I64qUIOqyveyasOyXkOunjCDsgq3soJwg7Iuk7ZaJXG4gICAgICBpZiAoZmtDb25kaXRpb25zLmV2ZXJ5KChmYykgPT4gZmMudmFsdWVzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgIGxldCBkZWxldGVRdWVyeSA9IHdkYih0YWJsZU5hbWUpO1xuXG4gICAgICAgIC8vIOqwgSBGSyDsu6zrn7zsl5Ag64yA7ZWcIFdIRVJFIElOIOyhsOqxtCDstpTqsIBcbiAgICAgICAgZm9yIChjb25zdCB7IGNvbHVtbiwgdmFsdWVzIH0gb2YgZmtDb25kaXRpb25zKSB7XG4gICAgICAgICAgZGVsZXRlUXVlcnkgPSBkZWxldGVRdWVyeS53aGVyZUluKGNvbHVtbiwgdmFsdWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOuwqeq4iCB1cHNlcnTtlZwgSUTripQg7KCc7Jm4XG4gICAgICAgIGRlbGV0ZVF1ZXJ5ID0gZGVsZXRlUXVlcnkud2hlcmVOb3RJbihcImlkXCIsIGFsbElkcyk7XG5cbiAgICAgICAgY29uc3QgZGVsZXRlZENvdW50ID0gYXdhaXQgZGVsZXRlUXVlcnkuZGVsZXRlKCk7XG5cbiAgICAgICAgTmFpdGUudChcInB1cmk6dWItY2xlYW4tb3JwaGFuc1wiLCB7XG4gICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgIGNsZWFuT3JwaGFuczogZmtDb2x1bW5zLFxuICAgICAgICAgIGRlbGV0ZWRDb3VudCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g7ZW064u5IO2FjOydtOu4lOydmCDrjbDsnbTthLAg7LSI6riw7ZmUXG4gICAgdGFibGUucm93cyA9IFtdO1xuICAgIHRhYmxlLnJlZmVyZW5jZXMuY2xlYXIoKTtcbiAgICB0YWJsZS51bmlxdWVzTWFwLmNsZWFyKCk7XG5cbiAgICBOYWl0ZS50KFwicHVyaTp1Yi11cHNlcnRlZFwiLCB7XG4gICAgICB0YWJsZU5hbWUsXG4gICAgICBtb2RlLFxuICAgICAgcm93Q291bnQ6IGFsbElkcy5sZW5ndGgsXG4gICAgICByZXR1cm5lZElkczogYWxsSWRzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFsbElkcztcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUJhdGNoKFxuICAgIHdkYjogS25leCxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzoge1xuICAgICAgY2h1bmtTaXplPzogbnVtYmVyO1xuICAgICAgd2hlcmU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICB9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGNodW5rU2l6ZTogb3B0aW9ucz8uY2h1bmtTaXplID8/IDUwMCxcbiAgICAgIHdoZXJlOiBvcHRpb25zPy53aGVyZSA/PyBcImlkXCIsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmhhc1RhYmxlKHRhYmxlTmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZXMuZ2V0KHRhYmxlTmFtZSk7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDrk7HroZ3rkJjsp4Ag7JWK7J2AIO2FjOydtOu4lCAke3RhYmxlTmFtZX3sl5AgdXBkYXRlQmF0Y2gg7JqU7LKtYCk7XG4gICAgfSBlbHNlIGlmICh0YWJsZS5yb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHdoZXJlQ29sdW1ucyA9IEFycmF5LmlzQXJyYXkob3B0aW9ucy53aGVyZSkgPyBvcHRpb25zLndoZXJlIDogW29wdGlvbnMud2hlcmUgPz8gXCJpZFwiXTtcbiAgICBjb25zdCByb3dzID0gdGFibGUucm93cy5tYXAoKF9yb3cpID0+IHtcbiAgICAgIGNvbnN0IHsgdXVpZDogXywgLi4ucm93IH0gPSBfcm93OyAvLyB1dWlkIOygnOyZuFxuICAgICAgcmV0dXJuIHJvdyBhcyBSb3dXaXRoSWQ8c3RyaW5nPjtcbiAgICB9KTtcblxuICAgIGF3YWl0IGJhdGNoVXBkYXRlKHdkYiwgdGFibGVOYW1lLCB3aGVyZUNvbHVtbnMsIHJvd3MsIG9wdGlvbnMuY2h1bmtTaXplKTtcblxuICAgIE5haXRlLnQoXCJwdXJpOnViLWJhdGNoLXVwZGF0ZWRcIiwge1xuICAgICAgdGFibGVOYW1lLFxuICAgICAgcm93Q291bnQ6IHJvd3MubGVuZ3RoLFxuICAgICAgd2hlcmVDb2x1bW5zLFxuICAgIH0pO1xuXG4gICAgLy8gdXBkYXRlQmF0Y2gg7JmE66OMIO2bhCDsspjrpqzrkJwg642w7J207YSwIOygnOqxsFxuICAgIHRhYmxlLnJvd3MgPSBbXTtcbiAgICB0YWJsZS5yZWZlcmVuY2VzLmNsZWFyKCk7XG4gICAgdGFibGUudW5pcXVlc01hcC5jbGVhcigpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQcml2YXRlIEhlbHBlciBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogcm93c+ulvCDsnZjsobTshLEg7Iic7ISc7JeQIOuUsOudvCDroIjrsqjrs4TroZwg6re466O57ZmUXG4gICAqIC0g7J6Q6riwIOywuOyhsCDsl4bripQg6rK97JqwIDog66qo65OgIHJvd3PqsIAgTGV2ZWwgMFxuICAgKiAtIOyekOq4sCDssLjsobAg7J6I64qUIOqyveyasCA6IOyekOq4sCDssLjsobAg6rSA6rOE66W8IOychOyDgSDsoJXroKztlZjsl6wg66CI67Ko67OE66GcIOq3uOujue2ZlFxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEluc2VydExldmVscyhcbiAgICByb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICApOiB7IGxldmVsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXVtdOyBoYXNDaXJjdWxhcjogYm9vbGVhbiB9IHtcbiAgICAvLyAxLiDsnpDquLAg7LC47KGw6rCAIOyXhuycvOuptCDtlZwg66CI67Ko66GcIOyymOumrFxuICAgIGNvbnN0IGhhc1NlbGZSZWYgPSByb3dzXG4gICAgICAuZmxhdE1hcCgocm93KSA9PiBPYmplY3QudmFsdWVzKHJvdykpXG4gICAgICAuc29tZSgodmFsdWUpID0+IGlzUmVmRmllbGQodmFsdWUpICYmIHZhbHVlLm9mID09PSB0YWJsZU5hbWUpO1xuICAgIGlmICghaGFzU2VsZlJlZikgcmV0dXJuIHsgbGV2ZWxzOiBbcm93c10sIGhhc0NpcmN1bGFyOiBmYWxzZSB9O1xuXG4gICAgLy8gMi4gdXVpZCDihpIgcm93IOunpO2VkSAo7KSR67O1IHV1aWQg67Cp7KeAKVxuICAgIGNvbnN0IHJvd0J5VXVpZCA9IG5ldyBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICBjb25zdCB1dWlkID0gcm93LnV1aWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKCF1dWlkKSB0aHJvdyBuZXcgRXJyb3IoYGJ1aWxkSW5zZXJ0TGV2ZWxzOiB1dWlk6rCAIOyXhuuKlCByb3cgLS0gaW4gJHt0YWJsZU5hbWV9YCk7XG4gICAgICByb3dCeVV1aWQuc2V0KHV1aWQsIHJvdyk7XG4gICAgfVxuXG4gICAgbGV0IHBlbmRpbmcgPSBBcnJheS5mcm9tKHJvd0J5VXVpZC52YWx1ZXMoKSk7XG4gICAgY29uc3QgbGV2ZWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdW10gPSBbXTtcbiAgICBjb25zdCBpbnNlcnRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgLy8gMy4g66CI67Ko67OEIOu2hOulmFxuICAgIHdoaWxlIChwZW5kaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRMZXZlbDogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuICAgICAgY29uc3QgbmV4dFBlbmRpbmc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCByb3cgb2YgcGVuZGluZykge1xuICAgICAgICAvLyDsnbQgcm936rCAIOywuOyhsO2VmOuKlCDsnpDquLAg7LC47KGw65OkXG4gICAgICAgIGNvbnN0IHNlbGZSZWZzID0gT2JqZWN0LnZhbHVlcyhyb3cpLmZpbHRlcihcbiAgICAgICAgICAodmFsdWUpID0+IGlzUmVmRmllbGQodmFsdWUpICYmIHZhbHVlLm9mID09PSB0YWJsZU5hbWUsXG4gICAgICAgICkgYXMgVUJSZWZbXTtcblxuICAgICAgICAvLyDssLjsobDtlZjripQg66qo65OgIHV1aWTqsIAg7J2066+4IGluc2VydGVk7JeQIOyeiOyWtOyVvCDsnbTrsogg66CI67Ko7JeQIO2PrO2VqFxuICAgICAgICBjb25zdCBjYW5JbnNlcnQgPSBzZWxmUmVmcy5ldmVyeSgocmVmKSA9PiB7XG4gICAgICAgICAgaWYgKCFyb3dCeVV1aWQuaGFzKHJlZi51dWlkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIHV1aWQgJHtyZWYudXVpZH0gLS0gaW4gJHt0YWJsZU5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpbnNlcnRlZC5oYXMocmVmLnV1aWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoY2FuSW5zZXJ0KSB7XG4gICAgICAgICAgY3VycmVudExldmVsLnB1c2gocm93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0UGVuZGluZy5wdXNoKHJvdyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8g7Iic7ZmYIOywuOyhsCDqsJDsp4BcbiAgICAgIGlmIChjdXJyZW50TGV2ZWwubGVuZ3RoID09PSAwKSByZXR1cm4geyBsZXZlbHM6IFtdLCBoYXNDaXJjdWxhcjogdHJ1ZSB9O1xuXG4gICAgICAvLyDroIjrsqgg7ZmV7KCVICsgaW5zZXJ0ZWQg6rCx7IugXG4gICAgICBsZXZlbHMucHVzaChjdXJyZW50TGV2ZWwpO1xuICAgICAgZm9yIChjb25zdCByb3cgb2YgY3VycmVudExldmVsKSB7XG4gICAgICAgIGluc2VydGVkLmFkZChyb3cudXVpZCBhcyBzdHJpbmcpO1xuICAgICAgfVxuXG4gICAgICBwZW5kaW5nID0gbmV4dFBlbmRpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgbGV2ZWxzLCBoYXNDaXJjdWxhcjogZmFsc2UgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbInJhbmRvbVVVSUQiLCJpc0FycmF5IiwidW5pcXVlIiwiRW50aXR5TWFuYWdlciIsIk5haXRlIiwiYXNzZXJ0RGVmaW5lZCIsImNodW5rIiwibm9uTnVsbGFibGUiLCJiYXRjaFVwZGF0ZSIsImlzUmVmRmllbGQiLCJmaWVsZCIsInVuZGVmaW5lZCIsIm9mIiwidXVpZCIsIlVwc2VydEJ1aWxkZXIiLCJ0YWJsZXMiLCJNYXAiLCJnZXRUYWJsZSIsInRhYmxlTmFtZSIsInRhYmxlIiwiZ2V0IiwidGFibGVTcGVjIiwiZ2V0VGFibGVTcGVjIiwidGFibGVEYXRhIiwicmVmZXJlbmNlcyIsIlNldCIsInJvd3MiLCJ1bmlxdWVJbmRleGVzIiwidW5pcXVlc01hcCIsInNldCIsImhhc1RhYmxlIiwiaGFzIiwicmVnaXN0ZXIiLCJyb3ciLCJ1bmlxdWVLZXlzIiwibWFwIiwidW5xSW5kZXgiLCJ1bmlxdWVLZXlBcnJheSIsImNvbHVtbnMiLCJ1bnFDb2wiLCJ2YWwiLCJuYW1lIiwibGVuZ3RoIiwiam9pbiIsImZpbHRlciIsImlzUmV1c2VkIiwidW5pcXVlS2V5IiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwicm93S2V5Iiwicm93VmFsdWUiLCJ1c2UiLCJhZGQiLCJEYXRlIiwiSlNPTiIsInN0cmluZ2lmeSIsInB1c2giLCJyZXN1bHQiLCJ0IiwiaXNVdWlkUmV1c2VkIiwidXBzZXJ0Iiwid2RiIiwib3B0aW9ucyIsInVwc2VydE9ySW5zZXJ0IiwiaW5zZXJ0T25seSIsIm1vZGUiLCJFcnJvciIsInNvbWUiLCJ2YWx1ZSIsInJlZlRhYmxlcyIsIkFycmF5IiwiZnJvbSIsInJlZHVjZSIsInIiLCJyZWZlcmVuY2UiLCJ2YWx1ZXMiLCJmaW5kIiwicmVmIiwiaW5jbHVkZXMiLCJleHRyYWN0RmllbGRzIiwic3BsaXQiLCJsZXZlbHMiLCJoYXNDaXJjdWxhciIsImJ1aWxkSW5zZXJ0TGV2ZWxzIiwidXVpZE1hcCIsImFsbElkcyIsImxldmVsUm93cyIsInJlc29sdmVkUm93cyIsInJlc29sdmVkIiwia2V5IiwicGFyZW50IiwidG8iLCJjaHVua1NpemUiLCJsZXZlbENodW5rcyIsInNlbGVjdEZpZWxkcyIsImRhdGFDaHVuayIsIm9yaWdpbmFsVXVpZHMiLCJkYXRhRm9yRGIiLCJyZXN0IiwicmVzdWx0Um93cyIsImluc2VydCIsImludG8iLCJyZXR1cm5pbmciLCJjb25mbGljdENvbHVtbnMiLCJjIiwidXBkYXRlQ29sdW1ucyIsImtleXMiLCJjb2wiLCJtZXJnZUNvbHVtbnMiLCJvbkNvbmZsaWN0IiwibWVyZ2UiLCJpIiwiaWQiLCJwcm9wIiwiY29uc29sZSIsImVycm9yIiwicmVzb2x2ZWRWYWx1ZSIsImNsZWFuT3JwaGFucyIsImZrQ29sdW1ucyIsImZrQ29uZGl0aW9ucyIsImZrQ29sIiwiZmtWYWx1ZXMiLCJ2IiwiY29sdW1uIiwiZXZlcnkiLCJmYyIsImRlbGV0ZVF1ZXJ5Iiwid2hlcmVJbiIsIndoZXJlTm90SW4iLCJkZWxldGVkQ291bnQiLCJkZWxldGUiLCJjbGVhciIsInJvd0NvdW50IiwicmV0dXJuZWRJZHMiLCJ1cGRhdGVCYXRjaCIsIndoZXJlIiwid2hlcmVDb2x1bW5zIiwiX3JvdyIsIl8iLCJoYXNTZWxmUmVmIiwiZmxhdE1hcCIsInJvd0J5VXVpZCIsInBlbmRpbmciLCJpbnNlcnRlZCIsImN1cnJlbnRMZXZlbCIsIm5leHRQZW5kaW5nIiwic2VsZlJlZnMiLCJjYW5JbnNlcnQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFVBQVUsUUFBUSxTQUFTO0FBRXBDLFNBQVNDLE9BQU8sRUFBRUMsTUFBTSxRQUFRLFVBQVU7QUFDMUMsU0FBU0MsYUFBYSxRQUFRLDhCQUEyQjtBQUN6RCxTQUFTQyxLQUFLLFFBQVEsb0JBQWlCO0FBRXZDLFNBQVNDLGFBQWEsRUFBRUMsS0FBSyxFQUFFQyxXQUFXLFFBQVEsb0JBQWlCO0FBQ25FLFNBQVNDLFdBQVcsUUFBd0IscUJBQWtCO0FBbUM5RCxPQUFPLFNBQVNDLFdBQVdDLEtBQWM7SUFDdkMsT0FDRUEsVUFBVUMsYUFDVkQsVUFBVSxRQUNWLEFBQUNBLE9BQWlCRSxPQUFPRCxhQUN6QixBQUFDRCxPQUFpQkcsU0FBU0Y7QUFFL0I7QUFFQSxPQUFPLE1BQU1HO0lBQ1hDLE9BQStCO0lBQy9CLGFBQWM7UUFDWixJQUFJLENBQUNBLE1BQU0sR0FBRyxJQUFJQztJQUNwQjtJQUVBQyxTQUFTQyxTQUFpQixFQUFhO1FBQ3JDLE1BQU1DLFFBQVEsSUFBSSxDQUFDSixNQUFNLENBQUNLLEdBQUcsQ0FBQ0Y7UUFDOUIsSUFBSUMsT0FBTztZQUNULE9BQU9BO1FBQ1Q7UUFFQSxNQUFNRSxZ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
408
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS91cHNlcnQtYnVpbGRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGlzQXJyYXksIHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VGb3JlaWduS2V5cywgRGF0YWJhc2VTY2hlbWFFeHRlbmQsIEVudGl0eUluZGV4IH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBhc3NlcnREZWZpbmVkLCBjaHVuaywgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IGJhdGNoVXBkYXRlLCB0eXBlIFJvd1dpdGhJZCB9IGZyb20gXCIuL19iYXRjaF91cGRhdGVcIjtcbmltcG9ydCB0eXBlIHsgQ29sdW1uS2V5cywgRm9yZWlnbktleUNvbHVtbnMsIFRhYmxlTmFtZSB9IGZyb20gXCIuL3B1cmkudHlwZXNcIjtcblxuLyoqXG4gKiBGSyDtg4DsnoUg7LaU66Gg7J2EIOychO2VtCBEYXRhYmFzZUZvcmVpZ25LZXlzIGV4cG9ydFxuICogKG1vZHVsZSBhdWdtZW50YXRpb24g7J6Q64+ZIOuhnOuTnCDrs7TsnqUpXG4gKi9cbmV4cG9ydCB0eXBlIHsgRGF0YWJhc2VGb3JlaWduS2V5cyB9O1xuXG50eXBlIEluaGVyaXRhYmxlQ29sdW1uczxUVGFibGUgZXh0ZW5kcyBUYWJsZU5hbWU8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+PiA9XG4gIFRUYWJsZSBleHRlbmRzIGtleW9mIERhdGFiYXNlU2NoZW1hRXh0ZW5kID8gQ29sdW1uS2V5czxEYXRhYmFzZVNjaGVtYUV4dGVuZFtUVGFibGVdPiA6IG5ldmVyO1xuXG4vLyDthYzsnbTruJQg642w7J207YSwIO2DgOyehVxudHlwZSBUYWJsZURhdGEgPSB7XG4gIHJlZmVyZW5jZXM6IFNldDxzdHJpbmc+O1xuICByb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuICB1bmlxdWVJbmRleGVzOiBFbnRpdHlJbmRleFtdO1xuICB1bmlxdWVzTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuLy8g7LC47KGwIO2VhOuTnCDtg4DsnoVcbmV4cG9ydCB0eXBlIFVCUmVmID0ge1xuICB1dWlkOiBzdHJpbmc7XG4gIG9mOiBzdHJpbmc7XG4gIHVzZT86IHN0cmluZztcbn07XG5cbi8vIHVwc2VydCDsmLXshZhcbmV4cG9ydCB0eXBlIFVwc2VydE9wdGlvbnM8VFRhYmxlIGV4dGVuZHMgVGFibGVOYW1lPERhdGFiYXNlU2NoZW1hRXh0ZW5kPj4gPSB7XG4gIGNodW5rU2l6ZT86IG51bWJlcjtcbiAgY2xlYW5PcnBoYW5zPzogRm9yZWlnbktleUNvbHVtbnM8VFRhYmxlPiB8IEZvcmVpZ25LZXlDb2x1bW5zPFRUYWJsZT5bXTtcbiAgaW5oZXJpdD86IEluaGVyaXRhYmxlQ29sdW1uczxUVGFibGU+W107XG59O1xuXG4vLyBpbnNlcnRPbmx5IOyYteyFmFxuZXhwb3J0IHR5cGUgSW5zZXJ0T25seU9wdGlvbnMgPSB7XG4gIGNodW5rU2l6ZT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZkZpZWxkKGZpZWxkOiB1bmtub3duKTogZmllbGQgaXMgVUJSZWYge1xuICByZXR1cm4gKFxuICAgIGZpZWxkICE9PSB1bmRlZmluZWQgJiZcbiAgICBmaWVsZCAhPT0gbnVsbCAmJlxuICAgIChmaWVsZCBhcyBVQlJlZik/Lm9mICE9PSB1bmRlZmluZWQgJiZcbiAgICAoZmllbGQgYXMgVUJSZWYpPy51dWlkICE9PSB1bmRlZmluZWRcbiAgKTtcbn1cblxuZXhwb3J0IGNsYXNzIFVwc2VydEJ1aWxkZXIge1xuICB0YWJsZXM6IE1hcDxzdHJpbmcsIFRhYmxlRGF0YT47XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMudGFibGVzID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgZ2V0VGFibGUodGFibGVOYW1lOiBzdHJpbmcpOiBUYWJsZURhdGEge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZXMuZ2V0KHRhYmxlTmFtZSk7XG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICByZXR1cm4gdGFibGU7XG4gICAgfVxuXG4gICAgY29uc3QgdGFibGVTcGVjID0gKCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBFbnRpdHlNYW5hZ2VyLmdldFRhYmxlU3BlYyh0YWJsZU5hbWUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICBjb25zdCB0YWJsZURhdGEgPSB7XG4gICAgICByZWZlcmVuY2VzOiBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICAgIHJvd3M6IFtdLFxuICAgICAgdW5pcXVlSW5kZXhlczogdGFibGVTcGVjPy51bmlxdWVJbmRleGVzID8/IFtdLFxuICAgICAgdW5pcXVlc01hcDogbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSxcbiAgICB9O1xuICAgIHRoaXMudGFibGVzLnNldCh0YWJsZU5hbWUsIHRhYmxlRGF0YSk7XG4gICAgcmV0dXJuIHRhYmxlRGF0YTtcbiAgfVxuXG4gIGhhc1RhYmxlKHRhYmxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVzLmhhcyh0YWJsZU5hbWUpO1xuICB9XG5cbiAgcmVnaXN0ZXI8VCBleHRlbmRzIHN0cmluZz4oXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgcm93OiB7XG4gICAgICBba2V5IGluIFRdPzogVUJSZWYgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgYmlnaW50IHwgbnVsbCB8IG9iamVjdCB8IHVua25vd247XG4gICAgfSxcbiAgKTogVUJSZWYge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5nZXRUYWJsZSh0YWJsZU5hbWUpO1xuXG4gICAgLy8g7ZW064u5IO2FjOydtOu4lOydmCB1bmlxdWUg7J24642x7Iqk66W8IOyInO2ajO2VmOupsCDtgqQg7IOd7ISxXG4gICAgY29uc3QgdW5pcXVlS2V5cyA9IHRhYmxlLnVuaXF1ZUluZGV4ZXNcbiAgICAgIC5tYXAoKHVucUluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHVuaXF1ZUtleUFycmF5ID0gdW5xSW5kZXguY29sdW1ucy5tYXAoKHVucUNvbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHJvd1t1bnFDb2wubmFtZSBhcyBrZXlvZiB0eXBlb2Ygcm93XTtcbiAgICAgICAgICBpZiAoaXNSZWZGaWVsZCh2YWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLnV1aWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByb3dbdW5xQ29sLm5hbWUgYXMga2V5b2YgdHlwZW9mIHJvd10gPz8gcmFuZG9tVVVJRCgpOyAvLyBudWxsYWJsZeyduCDqsr3smrAgdXVpZOuhnCDrnpzrjaTqsJIg7IK97J6FXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyDqsJLsnbQg66qo65GQIG51bGzsnbgg6rK97JqwIO2CpCDsg53shLEg7Yyo7IqkXG4gICAgICAgIGlmICh1bmlxdWVLZXlBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5pcXVlS2V5QXJyYXkuam9pbihcIi0tLWRlbGltaXRlci0tXCIpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIobm9uTnVsbGFibGUpO1xuXG4gICAgLy8gdXVpZCDsg53shLEg66Gc7KeBXG4gICAgY29uc3QgeyB1dWlkLCBpc1JldXNlZCB9ID0gKCgpID0+IHtcbiAgICAgIC8vIO2CpOulvCDsiJztmoztlZjsl6wg7J2066+4IOyhtOyerO2VmOuKlCDtgqTqsIAg7J6I64qU7KeAIO2ZleyduFxuICAgICAgaWYgKHVuaXF1ZUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IHVuaXF1ZUtleSBvZiB1bmlxdWVLZXlzKSB7XG4gICAgICAgICAgaWYgKHRhYmxlLnVuaXF1ZXNNYXAuaGFzKHVuaXF1ZUtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHV1aWQ6IGFzc2VydERlZmluZWQodGFibGUudW5pcXVlc01hcC5nZXQodW5pcXVlS2V5KSwgXCJVbmlxdWUga2V5IG5vdCBmb3VuZFwiKSxcbiAgICAgICAgICAgICAgaXNSZXVzZWQ6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDssL7snYQg7IiYIOyXhuuKlCDqsr3smrAg7IOd7ISxXG4gICAgICByZXR1cm4geyB1dWlkOiByYW5kb21VVUlEKCksIGlzUmV1c2VkOiBmYWxzZSB9O1xuICAgIH0pKCk7XG5cbiAgICAvLyDrqqjrk6Ag7Jyg64uI7YGs7YKk7JeQIOuMgO2VtCDsnKDri4jtgazrp7Xsl5AgdXVpZCDsoIDsnqVcbiAgICBpZiAodW5pcXVlS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHVuaXF1ZUtleSBvZiB1bmlxdWVLZXlzKSB7XG4gICAgICAgIHRhYmxlLnVuaXF1ZXNNYXAuc2V0KHVuaXF1ZUtleSwgdXVpZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g7J20IO2FjOydtOu4lOyXkCDsgqzsmqnrkJwgUmVmRmllbGTrpbwg7Iic7ZqM7ZWY7JesLCDtmITsnqwg7YWM7J2067iUIOygleuztOyXkCDslrTrlqQg7ZWE65Oc66W8IOywuOyhsO2VmOuKlOyngCDstpTqsIBcbiAgICAvLyDsnbQg7KCV67O066W8IOuCmOykkeyXkCDsuZjtmZjtlaAg65WMIOyCrOyaqVxuICAgIHJvdyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJvdykubWFwKChbcm93S2V5LCByb3dWYWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKGlzUmVmRmllbGQocm93VmFsdWUpKSB7XG4gICAgICAgICAgcm93VmFsdWUudXNlID8/PSBcImlkXCI7XG4gICAgICAgICAgdGFibGUucmVmZXJlbmNlcy5hZGQoYCR7cm93VmFsdWUub2Z9LiR7cm93VmFsdWUudXNlfWApO1xuICAgICAgICAgIHJldHVybiBbcm93S2V5LCByb3dWYWx1ZV07XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJvd1ZhbHVlID09PSBcIm9iamVjdFwiICYmICEocm93VmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgIC8vIG9iamVjdOyduCDqsr3smrAgSlNPTuycvOuhnCDrs4DtmZhcbiAgICAgICAgICByZXR1cm4gW3Jvd0tleSwgcm93VmFsdWUgPT09IG51bGwgPyBudWxsIDogSlNPTi5zdHJpbmdpZnkocm93VmFsdWUpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW3Jvd0tleSwgcm93VmFsdWVdO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApIGFzIHsgW2tleSBpbiBUXT86IHVua25vd24gfTtcblxuICAgIHRhYmxlLnJvd3MucHVzaCh7XG4gICAgICB1dWlkLFxuICAgICAgLi4ucm93LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0OiBVQlJlZiA9IHtcbiAgICAgIG9mOiB0YWJsZU5hbWUsXG4gICAgICB1dWlkOiAocm93IGFzIHsgdXVpZD86IHN0cmluZyB9KS51dWlkID8/IHV1aWQsXG4gICAgfTtcblxuICAgIE5haXRlLnQoXCJwdXJpOnViLXJlZ2lzdGVyXCIsIHtcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIHV1aWQ6IHJlc3VsdC51dWlkLFxuICAgICAgaXNVdWlkUmV1c2VkOiBpc1JldXNlZCxcbiAgICAgIHJvdyxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyB1cHNlcnQ8VFRhYmxlIGV4dGVuZHMgVGFibGVOYW1lPERhdGFiYXNlU2NoZW1hRXh0ZW5kPj4oXG4gICAgd2RiOiBLbmV4LFxuICAgIHRhYmxlTmFtZTogVFRhYmxlLFxuICAgIG9wdGlvbnM/OiBVcHNlcnRPcHRpb25zPFRUYWJsZT4sXG4gICk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICByZXR1cm4gdGhpcy51cHNlcnRPckluc2VydCh3ZGIsIHRhYmxlTmFtZSwgXCJ1cHNlcnRcIiwgb3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBpbnNlcnRPbmx5PFRUYWJsZSBleHRlbmRzIFRhYmxlTmFtZTxEYXRhYmFzZVNjaGVtYUV4dGVuZD4+KFxuICAgIHdkYjogS25leCxcbiAgICB0YWJsZU5hbWU6IFRUYWJsZSxcbiAgICBvcHRpb25zPzogSW5zZXJ0T25seU9wdGlvbnMsXG4gICk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICByZXR1cm4gdGhpcy51cHNlcnRPckluc2VydCh3ZGIsIHRhYmxlTmFtZSwgXCJpbnNlcnRcIiwgb3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyB1cHNlcnRPckluc2VydDxUVGFibGUgZXh0ZW5kcyBUYWJsZU5hbWU8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+PihcbiAgICB3ZGI6IEtuZXgsXG4gICAgdGFibGVOYW1lOiBUVGFibGUsXG4gICAgbW9kZTogXCJ1cHNlcnRcIiB8IFwiaW5zZXJ0XCIsXG4gICAgb3B0aW9ucz86IFVwc2VydE9wdGlvbnM8VFRhYmxlPixcbiAgKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGlmICh0aGlzLmhhc1RhYmxlKHRhYmxlTmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlcy5nZXQodGFibGVOYW1lKTtcbiAgICBpZiAodGFibGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIO2FjOydtOu4lCAke3RhYmxlTmFtZX3sl5AgdXBzZXJ0IOyalOyyrWApO1xuICAgIH0gZWxzZSBpZiAodGFibGUucm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0YWJsZU5hbWV97JeQIHVwc2VydCDtlaAg642w7J207YSw6rCAIOyXhuyKteuLiOuLpC5gKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0YWJsZS5yb3dzLnNvbWUoKHJvdykgPT5cbiAgICAgICAgT2JqZWN0LmVudHJpZXMocm93KS5zb21lKChbLCB2YWx1ZV0pID0+IGlzUmVmRmllbGQodmFsdWUpICYmIHZhbHVlLm9mICE9PSB0YWJsZU5hbWUpLFxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RhYmxlTmFtZX0g7ZW06rKw65CY7KeAIOyViuydgCDssLjsobDqsIAg7J6I7Iq164uI64ukLmApO1xuICAgIH1cblxuICAgIC8vIOyghOyytCDthYzsnbTruJQg7Iic7ZqM7ZWY7JesIO2YhOyerCDthYzsnbTruJQg7LC47KGw7ZWY64qUIOuqqOuToCDthYzsnbTruJQg7LaU7LacXG4gICAgY29uc3QgeyByZWZlcmVuY2VzLCByZWZUYWJsZXMgfSA9IEFycmF5LmZyb20odGhpcy50YWJsZXMpLnJlZHVjZShcbiAgICAgIChyLCBbLCB0YWJsZV0pID0+IHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlID0gQXJyYXkuZnJvbSh0YWJsZS5yZWZlcmVuY2VzLnZhbHVlcygpKS5maW5kKChyZWYpID0+XG4gICAgICAgICAgcmVmLmluY2x1ZGVzKGAke3RhYmxlTmFtZX0uYCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChyZWZlcmVuY2UpIHtcbiAgICAgICAgICByLnJlZmVyZW5jZXMucHVzaChyZWZlcmVuY2UpO1xuICAgICAgICAgIHIucmVmVGFibGVzLnB1c2godGFibGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICByZWZlcmVuY2VzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICAgICAgcmVmVGFibGVzOiBbXSBhcyBUYWJsZURhdGFbXSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCBleHRyYWN0RmllbGRzID0gdW5pcXVlKHJlZmVyZW5jZXMpXG4gICAgICAubWFwKChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5zcGxpdChcIi5cIilbMV0pXG4gICAgICAuZmlsdGVyKChmaWVsZCk6IGZpZWxkIGlzIHN0cmluZyA9PiBmaWVsZCAhPT0gdW5kZWZpbmVkKTtcblxuICAgIC8vIOydmOyhtOyEsSDsiJzshJzsl5Ag65Sw6528IOugiOuyqOuzhCDqt7jro7ntmZQgKOyekOq4sCDssLjsobDqsIAg7JeG7Jy866m0IExldmVsIDAg7ZWY64KYKVxuICAgIGNvbnN0IHsgbGV2ZWxzLCBoYXNDaXJjdWxhciB9ID0gdGhpcy5idWlsZEluc2VydExldmVscyh0YWJsZS5yb3dzLCB0YWJsZU5hbWUpO1xuXG4gICAgaWYgKGhhc0NpcmN1bGFyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGFibGVOYW1lfeyXkCDsiJztmZgg7J6Q6riwIOywuOyhsOqwgCDsnojsirXri4jri6QuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXVpZE1hcCA9IG5ldyBNYXA8c3RyaW5nLCB1bmtub3duPigpO1xuICAgIGNvbnN0IGFsbElkczogbnVtYmVyW10gPSBbXTtcblxuICAgIC8vIOugiOuyqOuzhOuhnCDsiJzssKgg7LKY66asXG4gICAgZm9yIChjb25zdCBsZXZlbFJvd3Mgb2YgbGV2ZWxzKSB7XG4gICAgICAvLyDsnbTsoIQg66CI67Ko7JeQ7IScIOyWu+ydgCBJROuhnCDsnpDquLAg7LC47KGwIO2VtOqysFxuICAgICAgY29uc3QgcmVzb2x2ZWRSb3dzID0gbGV2ZWxSb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0geyAuLi5yb3cgfTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocm93KSkge1xuICAgICAgICAgIGlmIChpc1JlZkZpZWxkKHZhbHVlKSAmJiB2YWx1ZS5vZiA9PT0gdGFibGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB1dWlkTWFwLmdldCh2YWx1ZS51dWlkKTtcblxuICAgICAgICAgICAgaWYgKCFwYXJlbnQpIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCB1dWlkICR7dmFsdWUudXVpZH0gLS0gaW4gJHt0YWJsZU5hbWV9YCk7XG5cbiAgICAgICAgICAgIHJlc29sdmVkW2tleV0gPSAocGFyZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVt2YWx1ZS51c2UgPz8gXCJpZFwiXTtcblxuICAgICAgICAgICAgTmFpdGUudChcInB1cmk6dWItcmVmLXJlc29sdmVkXCIsIHtcbiAgICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgICBmaWVsZDoga2V5LFxuICAgICAgICAgICAgICBmcm9tOiB7IG9mOiB2YWx1ZS5vZiwgdXVpZDogdmFsdWUudXVpZCwgdXNlOiB2YWx1ZS51c2UgPz8gXCJpZFwiIH0sXG4gICAgICAgICAgICAgIHRvOiByZXNvbHZlZFtrZXldLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyDtmITsnqwg66CI67KoIHVwc2VydFxuICAgICAgY29uc3QgY2h1bmtTaXplID0gb3B0aW9ucz8uY2h1bmtTaXplO1xuICAgICAgY29uc3QgbGV2ZWxDaHVua3MgPSBjaHVua1NpemUgPyBjaHVuayhyZXNvbHZlZFJvd3MsIGNodW5rU2l6ZSkgOiBbcmVzb2x2ZWRSb3dzXTtcbiAgICAgIGNvbnN0IHNlbGVjdEZpZWxkcyA9IHVuaXF1ZShbXCJpZFwiLCAuLi5leHRyYWN0RmllbGRzXSk7XG5cbiAgICAgIGZvciAoY29uc3QgZGF0YUNodW5rIG9mIGxldmVsQ2h1bmtzKSB7XG4gICAgICAgIGlmIChkYXRhQ2h1bmsubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICAvLyB1dWlk66W8IOuzhOuPhOuhnCDrs7TqtIDtlZjqs6AsIERC7JeQIOyggOyepe2VoCDrjbDsnbTthLDsl5DshJwg7KCc6rGwXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVXVpZHMgPSBkYXRhQ2h1bmsubWFwKChyKSA9PiByLnV1aWQgYXMgc3RyaW5nKTtcbiAgICAgICAgY29uc3QgZGF0YUZvckRiID0gZGF0YUNodW5rLm1hcCgoeyB1dWlkLCAuLi5yZXN0IH0pID0+IHJlc3QpO1xuXG4gICAgICAgIGxldCByZXN1bHRSb3dzOiB7IGlkOiBudW1iZXI7IFtrZXk6IHN0cmluZ106IHVua25vd24gfVtdO1xuXG4gICAgICAgIGlmIChtb2RlID09PSBcImluc2VydFwiKSB7XG4gICAgICAgICAgLy8gSU5TRVJUIOuqqOuTnCAtIFJFVFVSTklORyDsgqzsmqlcbiAgICAgICAgICByZXN1bHRSb3dzID0gYXdhaXQgd2RiLmluc2VydChkYXRhRm9yRGIpLmludG8odGFibGVOYW1lKS5yZXR1cm5pbmcoc2VsZWN0RmllbGRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVUFNFUlQg66qo65OcIC0gb25Db25mbGljdCDsgqzsmqkgKHVuaXF1ZSBpbmRleCDsl4bsnLzrqbQgUEsgZmFsbGJhY2spXG4gICAgICAgICAgY29uc3QgY29uZmxpY3RDb2x1bW5zID0gdGFibGUudW5pcXVlSW5kZXhlc1swXT8uY29sdW1ucy5tYXAoKGMpID0+IGMubmFtZSkgPz8gW1wiaWRcIl07XG5cbiAgICAgICAgICBjb25zdCBhbGxDb2x1bW5zID0gT2JqZWN0LmtleXMoZGF0YUZvckRiWzBdKTtcbiAgICAgICAgICBsZXQgdXBkYXRlQ29sdW1ucyA9IGFsbENvbHVtbnMuZmlsdGVyKChjKSA9PiAhY29uZmxpY3RDb2x1bW5zLmluY2x1ZGVzKGMpKTtcblxuICAgICAgICAgIC8vIGluaGVyaXQg7Ji17IWYIOyymOumrCAtIGluaGVyaXQg7Lus65+87J2AIHVwZGF0ZSDrjIDsg4Hsl5DshJwg7KCc7Jm4XG4gICAgICAgICAgaWYgKG9wdGlvbnM/LmluaGVyaXQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaW5oZXJpdENvbHVtbnMgPSBvcHRpb25zLmluaGVyaXQgYXMgc3RyaW5nW107XG5cbiAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVkRnJvbVVwZGF0ZSA9IHVwZGF0ZUNvbHVtbnMuZmlsdGVyKChjKSA9PiBpbmhlcml0Q29sdW1ucy5pbmNsdWRlcyhjKSk7XG4gICAgICAgICAgICB1cGRhdGVDb2x1bW5zID0gdXBkYXRlQ29sdW1ucy5maWx0ZXIoKGMpID0+ICFpbmhlcml0Q29sdW1ucy5pbmNsdWRlcyhjKSk7XG5cbiAgICAgICAgICAgIC8vIOyLpOygnOuhnCDsoJzsmbjrkJwg7Lus65+8IOuhnOq5hVxuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVkRnJvbVVwZGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgTmFpdGUudChcInB1cmk6dWItaW5oZXJpdFwiLCB7XG4gICAgICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgIGluaGVyaXRDb2x1bW5zLFxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVkRnJvbVVwZGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdXBkYXRlQ29sdW1uc+qwgCDruYTslrTsnojslrTrj4QgbWVyZ2UoKeulvCDsgqzsmqntlZjsl6wg66qo65OgIO2WieydtCBSRVRVUk5JTkfrkJjrj4TroZ0g67O07J6lXG4gICAgICAgICAgY29uc3QgbWVyZ2VDb2x1bW5zID0gdXBkYXRlQ29sdW1ucy5sZW5ndGggPyB1cGRhdGVDb2x1bW5zIDogY29uZmxpY3RDb2x1bW5zO1xuXG4gICAgICAgICAgcmVzdWx0Um93cyA9IGF3YWl0IHdkYlxuICAgICAgICAgICAgLmluc2VydChkYXRhRm9yRGIpXG4gICAgICAgICAgICAuaW50byh0YWJsZU5hbWUpXG4gICAgICAgICAgICAub25Db25mbGljdChjb25mbGljdENvbHVtbnMpXG4gICAgICAgICAgICAubWVyZ2UobWVyZ2VDb2x1bW5zKVxuICAgICAgICAgICAgLnJldHVybmluZyhzZWxlY3RGaWVsZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9yaWdpbmFsVXVpZHMubGVuZ3RoICE9PSByZXN1bHRSb3dzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0YWJsZU5hbWV9OiByZWdpc3Rlci9yZXR1cm5pbmcg67aI7J287LmYYCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdFJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB1dWlkTWFwLnNldChvcmlnaW5hbFV1aWRzW2ldLCByZXN1bHRSb3dzW2ldKTtcbiAgICAgICAgICBhbGxJZHMucHVzaChyZXN1bHRSb3dzW2ldLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIO2VtOuLuSDthYzsnbTruJQg7LC47KGw66W8IOyLpOygnCDrsLjrpZjroZwg67OA6rK9XG4gICAgZm9yIChjb25zdCB0YWJsZSBvZiByZWZUYWJsZXMpIHtcbiAgICAgIHRhYmxlLnJvd3MgPSB0YWJsZS5yb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJvdykpIHtcbiAgICAgICAgICBjb25zdCBwcm9wID0gcm93W2tleV07XG4gICAgICAgICAgaWYgKGlzUmVmRmllbGQocHJvcCkgJiYgcHJvcC5vZiA9PT0gdGFibGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB1dWlkTWFwLmdldChwcm9wLnV1aWQpO1xuICAgICAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihwcm9wKTtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIHV1aWQgJHtwcm9wLnV1aWR9IC0tIGluICR7dGFibGVOYW1lfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRWYWx1ZSA9IChwYXJlbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3Byb3AudXNlID8/IFwiaWRcIl07XG4gICAgICAgICAgICByb3dba2V5XSA9IHJlc29sdmVkVmFsdWU7XG5cbiAgICAgICAgICAgIE5haXRlLnQoXCJwdXJpOnViLXJlZi1yZXNvbHZlZFwiLCB7XG4gICAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICAgICAgZnJvbTogeyBvZjogcHJvcC5vZiwgdXVpZDogcHJvcC51dWlkLCB1c2U6IHByb3AudXNlID8/IFwiaWRcIiB9LFxuICAgICAgICAgICAgICB0bzogcmVzb2x2ZWRWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmNsZWFuT3JwaGFucykge1xuICAgICAgY29uc3QgY2xlYW5PcnBoYW5zID0gb3B0aW9ucy5jbGVhbk9ycGhhbnM7XG4gICAgICBjb25zdCBma0NvbHVtbnMgPSBpc0FycmF5KGNsZWFuT3JwaGFucylcbiAgICAgICAgPyAoY2xlYW5PcnBoYW5zIGFzIEZvcmVpZ25LZXlDb2x1bW5zPFRUYWJsZT5bXSlcbiAgICAgICAgOiBbY2xlYW5PcnBoYW5zIGFzIEZvcmVpZ25LZXlDb2x1bW5zPFRUYWJsZT5dO1xuXG4gICAgICAvLyDtmITsnqwgcmVnaXN0ZXLrkJwg66CI7L2U65Oc65Ok7J2YIEZLIOqwkuuTpCDstpTstpxcbiAgICAgIGNvbnN0IGZrQ29uZGl0aW9ucyA9IGZrQ29sdW1ucy5tYXAoKGZrQ29sKSA9PiB7XG4gICAgICAgIGNvbnN0IGZrVmFsdWVzID0gWy4uLm5ldyBTZXQodGFibGUucm93cy5tYXAoKHJvdykgPT4gcm93W2ZrQ29sXSkuZmlsdGVyKCh2KSA9PiB2ICE9IG51bGwpKV07XG4gICAgICAgIHJldHVybiB7IGNvbHVtbjogZmtDb2wsIHZhbHVlczogZmtWYWx1ZXMgfTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyDrqqjrk6AgRksg7Lus65+87JeQIOqwkuydtCDsnojripQg6rK97Jqw7JeQ66eMIOyCreygnCDsi6TtlolcbiAgICAgIGlmIChma0NvbmRpdGlvbnMuZXZlcnkoKGZjKSA9PiBmYy52YWx1ZXMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgbGV0IGRlbGV0ZVF1ZXJ5ID0gd2RiKHRhYmxlTmFtZSk7XG5cbiAgICAgICAgLy8g6rCBIEZLIOy7rOufvOyXkCDrjIDtlZwgV0hFUkUgSU4g7KGw6rG0IOy2lOqwgFxuICAgICAgICBmb3IgKGNvbnN0IHsgY29sdW1uLCB2YWx1ZXMgfSBvZiBma0NvbmRpdGlvbnMpIHtcbiAgICAgICAgICBkZWxldGVRdWVyeSA9IGRlbGV0ZVF1ZXJ5LndoZXJlSW4oY29sdW1uLCB2YWx1ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g67Cp6riIIHVwc2VydO2VnCBJROuKlCDsoJzsmbhcbiAgICAgICAgZGVsZXRlUXVlcnkgPSBkZWxldGVRdWVyeS53aGVyZU5vdEluKFwiaWRcIiwgYWxsSWRzKTtcblxuICAgICAgICBjb25zdCBkZWxldGVkQ291bnQgPSBhd2FpdCBkZWxldGVRdWVyeS5kZWxldGUoKTtcblxuICAgICAgICBOYWl0ZS50KFwicHVyaTp1Yi1jbGVhbi1vcnBoYW5zXCIsIHtcbiAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAgY2xlYW5PcnBoYW5zOiBma0NvbHVtbnMsXG4gICAgICAgICAgZGVsZXRlZENvdW50LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDtlbTri7kg7YWM7J2067iU7J2YIOuNsOydtO2EsCDstIjquLDtmZRcbiAgICB0YWJsZS5yb3dzID0gW107XG4gICAgdGFibGUucmVmZXJlbmNlcy5jbGVhcigpO1xuICAgIHRhYmxlLnVuaXF1ZXNNYXAuY2xlYXIoKTtcblxuICAgIE5haXRlLnQoXCJwdXJpOnViLXVwc2VydGVkXCIsIHtcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIG1vZGUsXG4gICAgICByb3dDb3VudDogYWxsSWRzLmxlbmd0aCxcbiAgICAgIHJldHVybmVkSWRzOiBhbGxJZHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWxsSWRzO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQmF0Y2goXG4gICAgd2RiOiBLbmV4LFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBjaHVua1NpemU/OiBudW1iZXI7XG4gICAgICB3aGVyZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgY2h1bmtTaXplOiBvcHRpb25zPy5jaHVua1NpemUgPz8gNTAwLFxuICAgICAgd2hlcmU6IG9wdGlvbnM/LndoZXJlID8/IFwiaWRcIixcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuaGFzVGFibGUodGFibGVOYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlcy5nZXQodGFibGVOYW1lKTtcbiAgICBpZiAoIXRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOuTseuhneuQmOyngCDslYrsnYAg7YWM7J2067iUICR7dGFibGVOYW1lfeyXkCB1cGRhdGVCYXRjaCDsmpTssq1gKTtcbiAgICB9IGVsc2UgaWYgKHRhYmxlLnJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgd2hlcmVDb2x1bW5zID0gQXJyYXkuaXNBcnJheShvcHRpb25zLndoZXJlKSA/IG9wdGlvbnMud2hlcmUgOiBbb3B0aW9ucy53aGVyZSA/PyBcImlkXCJdO1xuICAgIGNvbnN0IHJvd3MgPSB0YWJsZS5yb3dzLm1hcCgoX3JvdykgPT4ge1xuICAgICAgY29uc3QgeyB1dWlkOiBfLCAuLi5yb3cgfSA9IF9yb3c7IC8vIHV1aWQg7KCc7Jm4XG4gICAgICByZXR1cm4gcm93IGFzIFJvd1dpdGhJZDxzdHJpbmc+O1xuICAgIH0pO1xuXG4gICAgYXdhaXQgYmF0Y2hVcGRhdGUod2RiLCB0YWJsZU5hbWUsIHdoZXJlQ29sdW1ucywgcm93cywgb3B0aW9ucy5jaHVua1NpemUpO1xuXG4gICAgTmFpdGUudChcInB1cmk6dWItYmF0Y2gtdXBkYXRlZFwiLCB7XG4gICAgICB0YWJsZU5hbWUsXG4gICAgICByb3dDb3VudDogcm93cy5sZW5ndGgsXG4gICAgICB3aGVyZUNvbHVtbnMsXG4gICAgfSk7XG5cbiAgICAvLyB1cGRhdGVCYXRjaCDsmYTro4wg7ZuEIOyymOumrOuQnCDrjbDsnbTthLAg7KCc6rGwXG4gICAgdGFibGUucm93cyA9IFtdO1xuICAgIHRhYmxlLnJlZmVyZW5jZXMuY2xlYXIoKTtcbiAgICB0YWJsZS51bmlxdWVzTWFwLmNsZWFyKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFByaXZhdGUgSGVscGVyIE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiByb3dz66W8IOydmOyhtOyEsSDsiJzshJzsl5Ag65Sw6528IOugiOuyqOuzhOuhnCDqt7jro7ntmZRcbiAgICogLSDsnpDquLAg7LC47KGwIOyXhuuKlCDqsr3smrAgOiDrqqjrk6Agcm93c+qwgCBMZXZlbCAwXG4gICAqIC0g7J6Q6riwIOywuOyhsCDsnojripQg6rK97JqwIDog7J6Q6riwIOywuOyhsCDqtIDqs4Trpbwg7JyE7IOBIOygleugrO2VmOyXrCDroIjrsqjrs4TroZwg6re466O57ZmUXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkSW5zZXJ0TGV2ZWxzKFxuICAgIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICk6IHsgbGV2ZWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdW107IGhhc0NpcmN1bGFyOiBib29sZWFuIH0ge1xuICAgIC8vIDEuIOyekOq4sCDssLjsobDqsIAg7JeG7Jy866m0IO2VnCDroIjrsqjroZwg7LKY66asXG4gICAgY29uc3QgaGFzU2VsZlJlZiA9IHJvd3NcbiAgICAgIC5mbGF0TWFwKChyb3cpID0+IE9iamVjdC52YWx1ZXMocm93KSlcbiAgICAgIC5zb21lKCh2YWx1ZSkgPT4gaXNSZWZGaWVsZCh2YWx1ZSkgJiYgdmFsdWUub2YgPT09IHRhYmxlTmFtZSk7XG4gICAgaWYgKCFoYXNTZWxmUmVmKSByZXR1cm4geyBsZXZlbHM6IFtyb3dzXSwgaGFzQ2lyY3VsYXI6IGZhbHNlIH07XG5cbiAgICAvLyAyLiB1dWlkIOKGkiByb3cg66ek7ZWRICjspJHrs7UgdXVpZCDrsKnsp4ApXG4gICAgY29uc3Qgcm93QnlVdWlkID0gbmV3IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpO1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGNvbnN0IHV1aWQgPSByb3cudXVpZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXV1aWQpIHRocm93IG5ldyBFcnJvcihgYnVpbGRJbnNlcnRMZXZlbHM6IHV1aWTqsIAg7JeG64qUIHJvdyAtLSBpbiAke3RhYmxlTmFtZX1gKTtcbiAgICAgIHJvd0J5VXVpZC5zZXQodXVpZCwgcm93KTtcbiAgICB9XG5cbiAgICBsZXQgcGVuZGluZyA9IEFycmF5LmZyb20ocm93QnlVdWlkLnZhbHVlcygpKTtcbiAgICBjb25zdCBsZXZlbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W11bXSA9IFtdO1xuICAgIGNvbnN0IGluc2VydGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyAzLiDroIjrsqjrs4Qg67aE66WYXG4gICAgd2hpbGUgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VycmVudExldmVsOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG4gICAgICBjb25zdCBuZXh0UGVuZGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBwZW5kaW5nKSB7XG4gICAgICAgIC8vIOydtCByb3fqsIAg7LC47KGw7ZWY64qUIOyekOq4sCDssLjsobDrk6RcbiAgICAgICAgY29uc3Qgc2VsZlJlZnMgPSBPYmplY3QudmFsdWVzKHJvdykuZmlsdGVyKFxuICAgICAgICAgICh2YWx1ZSkgPT4gaXNSZWZGaWVsZCh2YWx1ZSkgJiYgdmFsdWUub2YgPT09IHRhYmxlTmFtZSxcbiAgICAgICAgKSBhcyBVQlJlZltdO1xuXG4gICAgICAgIC8vIOywuOyhsO2VmOuKlCDrqqjrk6AgdXVpZOqwgCDsnbTrr7ggaW5zZXJ0ZWTsl5Ag7J6I7Ja07JW8IOydtOuyiCDroIjrsqjsl5Ag7Y+s7ZWoXG4gICAgICAgIGNvbnN0IGNhbkluc2VydCA9IHNlbGZSZWZzLmV2ZXJ5KChyZWYpID0+IHtcbiAgICAgICAgICBpZiAoIXJvd0J5VXVpZC5oYXMocmVmLnV1aWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgdXVpZCAke3JlZi51dWlkfSAtLSBpbiAke3RhYmxlTmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGluc2VydGVkLmhhcyhyZWYudXVpZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjYW5JbnNlcnQpIHtcbiAgICAgICAgICBjdXJyZW50TGV2ZWwucHVzaChyb3cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRQZW5kaW5nLnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDsiJztmZgg7LC47KGwIOqwkOyngFxuICAgICAgaWYgKGN1cnJlbnRMZXZlbC5sZW5ndGggPT09IDApIHJldHVybiB7IGxldmVsczogW10sIGhhc0NpcmN1bGFyOiB0cnVlIH07XG5cbiAgICAgIC8vIOugiOuyqCDtmZXsoJUgKyBpbnNlcnRlZCDqsLHsi6BcbiAgICAgIGxldmVscy5wdXNoKGN1cnJlbnRMZXZlbCk7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBjdXJyZW50TGV2ZWwpIHtcbiAgICAgICAgaW5zZXJ0ZWQuYWRkKHJvdy51dWlkIGFzIHN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIHBlbmRpbmcgPSBuZXh0UGVuZGluZztcbiAgICB9XG5cbiAgICByZXR1cm4geyBsZXZlbHMsIGhhc0NpcmN1bGFyOiBmYWxzZSB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsicmFuZG9tVVVJRCIsImlzQXJyYXkiLCJ1bmlxdWUiLCJFbnRpdHlNYW5hZ2VyIiwiTmFpdGUiLCJhc3NlcnREZWZpbmVkIiwiY2h1bmsiLCJub25OdWxsYWJsZSIsImJhdGNoVXBkYXRlIiwiaXNSZWZGaWVsZCIsImZpZWxkIiwidW5kZWZpbmVkIiwib2YiLCJ1dWlkIiwiVXBzZXJ0QnVpbGRlciIsInRhYmxlcyIsIk1hcCIsImdldFRhYmxlIiwidGFibGVOYW1lIiwidGFibGUiLCJnZXQiLCJ0YWJsZVNwZWMiLCJnZXRUYWJsZVNwZWMiLCJ0YWJsZURhdGEiLCJyZWZlcmVuY2VzIiwiU2V0Iiwicm93cyIsInVuaXF1ZUluZGV4ZXMiLCJ1bmlxdWVzTWFwIiwic2V0IiwiaGFzVGFibGUiLCJoYXMiLCJyZWdpc3RlciIsInJvdyIsInVuaXF1ZUtleXMiLCJtYXAiLCJ1bnFJbmRleCIsInVuaXF1ZUtleUFycmF5IiwiY29sdW1ucyIsInVucUNvbCIsInZhbCIsIm5hbWUiLCJsZW5ndGgiLCJqb2luIiwiZmlsdGVyIiwiaXNSZXVzZWQiLCJ1bmlxdWVLZXkiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsImVudHJpZXMiLCJyb3dLZXkiLCJyb3dWYWx1ZSIsInVzZSIsImFkZCIsIkRhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwicHVzaCIsInJlc3VsdCIsInQiLCJpc1V1aWRSZXVzZWQiLCJ1cHNlcnQiLCJ3ZGIiLCJvcHRpb25zIiwidXBzZXJ0T3JJbnNlcnQiLCJpbnNlcnRPbmx5IiwibW9kZSIsIkVycm9yIiwic29tZSIsInZhbHVlIiwicmVmVGFibGVzIiwiQXJyYXkiLCJmcm9tIiwicmVkdWNlIiwiciIsInJlZmVyZW5jZSIsInZhbHVlcyIsImZpbmQiLCJyZWYiLCJpbmNsdWRlcyIsImV4dHJhY3RGaWVsZHMiLCJzcGxpdCIsImxldmVscyIsImhhc0NpcmN1bGFyIiwiYnVpbGRJbnNlcnRMZXZlbHMiLCJ1dWlkTWFwIiwiYWxsSWRzIiwibGV2ZWxSb3dzIiwicmVzb2x2ZWRSb3dzIiwicmVzb2x2ZWQiLCJrZXkiLCJwYXJlbnQiLCJ0byIsImNodW5rU2l6ZSIsImxldmVsQ2h1bmtzIiwic2VsZWN0RmllbGRzIiwiZGF0YUNodW5rIiwib3JpZ2luYWxVdWlkcyIsImRhdGFGb3JEYiIsInJlc3QiLCJyZXN1bHRSb3dzIiwiaW5zZXJ0IiwiaW50byIsInJldHVybmluZyIsImNvbmZsaWN0Q29sdW1ucyIsImMiLCJhbGxDb2x1bW5zIiwia2V5cyIsInVwZGF0ZUNvbHVtbnMiLCJpbmhlcml0IiwiaW5oZXJpdENvbHVtbnMiLCJleGNsdWRlZEZyb21VcGRhdGUiLCJtZXJnZUNvbHVtbnMiLCJvbkNvbmZsaWN0IiwibWVyZ2UiLCJpIiwiaWQiLCJwcm9wIiwiY29uc29sZSIsImVycm9yIiwicmVzb2x2ZWRWYWx1ZSIsImNsZWFuT3JwaGFucyIsImZrQ29sdW1ucyIsImZrQ29uZGl0aW9ucyIsImZrQ29sIiwiZmtWYWx1ZXMiLCJ2IiwiY29sdW1uIiwiZXZlcnkiLCJmYyIsImRlbGV0ZVF1ZXJ5Iiwid2hlcmVJbiIsIndoZXJlTm90SW4iLCJkZWxldGVkQ291bnQiLCJkZWxldGUiLCJjbGVhciIsInJvd0NvdW50IiwicmV0dXJuZWRJZHMiLCJ1cGRhdGVCYXRjaCIsIndoZXJlIiwid2hlcmVDb2x1bW5zIiwiX3JvdyIsIl8iLCJoYXNTZWxmUmVmIiwiZmxhdE1hcCIsInJvd0J5VXVpZCIsInBlbmRpbmciLCJpbnNlcnRlZCIsImN1cnJlbnRMZXZlbCIsIm5leHRQZW5kaW5nIiwic2VsZlJlZnMiLCJjYW5JbnNlcnQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFVBQVUsUUFBUSxTQUFTO0FBRXBDLFNBQVNDLE9BQU8sRUFBRUMsTUFBTSxRQUFRLFVBQVU7QUFDMUMsU0FBU0MsYUFBYSxRQUFRLDhCQUEyQjtBQUN6RCxTQUFTQyxLQUFLLFFBQVEsb0JBQWlCO0FBRXZDLFNBQVNDLGFBQWEsRUFBRUMsS0FBSyxFQUFFQyxXQUFXLFFBQVEsb0JBQWlCO0FBQ25FLFNBQVNDLFdBQVcsUUFBd0IscUJBQWtCO0FBdUM5RCxPQUFPLFNBQVNDLFdBQVdDLEtBQWM7SUFDdkMsT0FDRUEsVUFBVUMsYUFDVkQsVUFBVSxRQUNWLEFBQUNBLE9BQWlCRSxPQUFPRCxhQUN6QixBQUFDRCxPQUFpQkcsU0FBU0Y7QUFFL0I7QUFFQSxPQUFPLE1BQU1HO0lBQ1hDLE9BQStCO0lBQy9CLGFBQWM7UUFDWixJQUFJLENBQUNBLE1BQU0sR0FBRyxJQUFJQztJQUNwQjtJQUVBQyxTQUFTQyxTQUFpQixFQUFhO1FBQ3JDLE1BQU1DLFFBQVEsSUFBSSxDQUFDSixNQUFNLENBQUNLLEdBQUcsQ0FBQ0Y7UUFDOUIsSUFBSUMsT0FBTztZQUNULE9BQU9BO1FBQ1Q7UUFFQSxNQUFNRSxZQUFZLEFBQUMsQ0FBQTtZ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
@@ -17,7 +17,7 @@ declare class EntityManagerClass {
17
17
  title: string;
18
18
  table: string;
19
19
  props: ({
20
- type: "boolean" | "date" | "uuid" | "integer" | "integer[]" | "bigInteger" | "bigInteger[]" | "boolean[]" | "date[]" | "uuid[]" | "tsvector";
20
+ type: "boolean" | "date" | "integer" | "integer[]" | "bigInteger" | "bigInteger[]" | "boolean[]" | "date[]" | "uuid" | "uuid[]" | "tsvector";
21
21
  name: string;
22
22
  desc?: string | undefined;
23
23
  nullable?: boolean | undefined;
@@ -79,7 +79,7 @@ declare class EntityManagerClass {
79
79
  } | {
80
80
  type: "number";
81
81
  name: string;
82
- numberType?: "real" | "double precision" | "numeric" | undefined;
82
+ numberType?: "numeric" | "real" | "double precision" | undefined;
83
83
  precision?: number | undefined;
84
84
  scale?: number | undefined;
85
85
  desc?: string | undefined;
@@ -93,7 +93,7 @@ declare class EntityManagerClass {
93
93
  } | {
94
94
  type: "number[]";
95
95
  name: string;
96
- numberType?: "real" | "double precision" | "numeric" | undefined;
96
+ numberType?: "numeric" | "real" | "double precision" | undefined;
97
97
  precision?: number | undefined;
98
98
  scale?: number | undefined;
99
99
  desc?: string | undefined;
@@ -254,7 +254,7 @@ declare class EntityManagerClass {
254
254
  vectorOps?: "vector_cosine_ops" | "vector_ip_ops" | "vector_l2_ops" | undefined;
255
255
  }[];
256
256
  name: string;
257
- using?: "btree" | "hash" | "gin" | "gist" | undefined;
257
+ using?: "btree" | "hash" | "gin" | "gist" | "pgroonga" | undefined;
258
258
  nullsNotDistinct?: boolean | undefined;
259
259
  m?: number | undefined;
260
260
  efConstruction?: number | undefined;
@@ -267,6 +267,7 @@ declare class EntityManagerClass {
267
267
  reload(doSilent?: boolean): Promise<void>;
268
268
  register(json: EntityJson): Promise<void>;
269
269
  get(entityId: string): Entity;
270
+ getByTable(table: string): Entity;
270
271
  exists(entityId: string): boolean;
271
272
  getAllIds(): string[];
272
273
  getAllParentIds(): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../../src/entity/entity-manager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAoB,MAAM,gBAAgB,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CACpC,IAAI,GAAG,UAAU,GAAG,OAAO,GAAG,aAAa,GAAG,SAAS,GAAG,eAAe,GAAG,OAAO,GAAG,UAAU,EAChG,MAAM,CACP,CAAC;AACF,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,WAAW,EAAE,CAAC;CAC9B,CAAC;AACF,cAAM,kBAAkB;IACtB,OAAO,CAAC,QAAQ,CAAkC;IAC3C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IACpD,OAAO,CAAC,UAAU,CAAqC;IAChD,YAAY,EAAE,OAAO,CAAS;IAG/B,QAAQ,CAAC,CAAC,GAAE,OAAe;IA+BjC,cAAc,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKtB,MAAM,CAAC,QAAQ,GAAE,OAAe;IAShC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAS7B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKjC,SAAS,IAAI,MAAM,EAAE;IAIrB,eAAe,IAAI,MAAM,EAAE;IAO3B,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAO1C,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAKpD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASlC,YAAY,CAAC,SAAS,EAAE,SAAS;IAIjC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IASpC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB;IAmBnD;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM;CAKpD;AAED,eAAO,MAAM,aAAa,oBAA2B,CAAC"}
1
+ {"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../../src/entity/entity-manager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAoB,MAAM,gBAAgB,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CACpC,IAAI,GAAG,UAAU,GAAG,OAAO,GAAG,aAAa,GAAG,SAAS,GAAG,eAAe,GAAG,OAAO,GAAG,UAAU,EAChG,MAAM,CACP,CAAC;AACF,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,WAAW,EAAE,CAAC;CAC9B,CAAC;AACF,cAAM,kBAAkB;IACtB,OAAO,CAAC,QAAQ,CAAkC;IAC3C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IACpD,OAAO,CAAC,UAAU,CAAqC;IAChD,YAAY,EAAE,OAAO,CAAS;IAG/B,QAAQ,CAAC,CAAC,GAAE,OAAe;IA+BjC,cAAc,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKtB,MAAM,CAAC,QAAQ,GAAE,OAAe;IAShC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAS7B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IASjC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKjC,SAAS,IAAI,MAAM,EAAE;IAIrB,eAAe,IAAI,MAAM,EAAE;IAO3B,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAO1C,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAKpD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASlC,YAAY,CAAC,SAAS,EAAE,SAAS;IAIjC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IASpC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB;IAmBnD;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM;CAKpD;AAED,eAAO,MAAM,aAAa,oBAA2B,CAAC"}
@@ -61,6 +61,13 @@ class EntityManagerClass {
61
61
  }
62
62
  return entity;
63
63
  }
64
+ getByTable(table) {
65
+ const entity = Array.from(this.entities.values()).find((entity)=>entity.table === table);
66
+ if (entity === undefined) {
67
+ throw new Error(`존재하지 않는 Entity 요청 ${table}`);
68
+ }
69
+ return entity;
70
+ }
64
71
  exists(entityId) {
65
72
  const entity = this.entities.get(entityId);
66
73
  return entity !== undefined;
@@ -127,4 +134,4 @@ class EntityManagerClass {
127
134
  }
128
135
  export const EntityManager = new EntityManagerClass();
129
136
 
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRpdHkvZW50aXR5LW1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBnbG9iLCByZWFkRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwcmV0dGlmeUVycm9yIH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5SW5kZXgsIHR5cGUgRW50aXR5SnNvbiwgRW50aXR5SnNvblNjaGVtYSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4vZW50aXR5XCI7XG5cbmV4cG9ydCB0eXBlIEVudGl0eU5hbWVzUmVjb3JkID0gUmVjb3JkPFxuICBcImZzXCIgfCBcImZzUGx1cmFsXCIgfCBcImNhbWVsXCIgfCBcImNhbWVsUGx1cmFsXCIgfCBcImNhcGl0YWxcIiB8IFwiY2FwaXRhbFBsdXJhbFwiIHwgXCJ1cHBlclwiIHwgXCJjb25zdGFudFwiLFxuICBzdHJpbmdcbj47XG50eXBlIFRhYmxlU3BlYyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB1bmlxdWVJbmRleGVzOiBFbnRpdHlJbmRleFtdO1xufTtcbmNsYXNzIEVudGl0eU1hbmFnZXJDbGFzcyB7XG4gIHByaXZhdGUgZW50aXRpZXM6IE1hcDxzdHJpbmcsIEVudGl0eT4gPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBtb2R1bGVQYXRoczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSB0YWJsZVNwZWNzOiBNYXA8c3RyaW5nLCBUYWJsZVNwZWM+ID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgaXNBdXRvbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8g6rK966GcIOyghOuLrOuwm+yVhCDrqqjrk6AgZW50aXR5Lmpzb24g7YyM7J28IOuhnOuTnFxuICBhc3luYyBhdXRvbG9hZChfOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5pc0F1dG9sb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGF0aFBhdHRlcm4gPSBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBcIi9zcmMvYXBwbGljYXRpb24vKiovKi5lbnRpdHkuanNvblwiKTtcblxuICAgIGZvciBhd2FpdCAoY29uc3QgZmlsZSBvZiBnbG9iKHBhdGgucmVzb2x2ZShwYXRoUGF0dGVybikpKSB7XG4gICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZSgoYXdhaXQgcmVhZEZpbGUoZmlsZSkpLnRvU3RyaW5nKCkpO1xuXG4gICAgICAvLyBlbnRpdHkuanNvbiDsiqTtgqTrp4gg6rKA7KadXG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuc2NoZW1hVmFsaWRhdGUoanNvbik7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGZpbGUpO1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBwcmV0dGlmeUVycm9yKGVycm9yKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBjaGFsay5yZWQoYEludmFsaWQgZW50aXR5Lmpzb24gc2NoZW1hOiAke3JlbGF0aXZlUGF0aH1cXG4ke2NoYWxrLnllbGxvdyhlcnJvck1lc3NhZ2UpfWApLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyKGpzb24pO1xuICAgIH1cbiAgICAvLyAhZG9TaWxlbnQgJiZcbiAgICAvLyAgIGNvbnNvbGUubG9nKFxuICAgIC8vICAgICBjaGFsay5ncmF5KFxuICAgIC8vICAgICAgIGBbTG9hZGluZ10gTG9hZGVkIGVudGl0eSBkZWZpbml0aW9ucyBmcm9tIFwiKi5lbnRpdHkuanNvblwiIGZpbGVzOiAke2NvdW50fSBmaWxlcy5gXG4gICAgLy8gICAgIClcbiAgICAvLyAgICk7XG5cbiAgICB0aGlzLmlzQXV0b2xvYWRlZCA9IHRydWU7XG4gIH1cblxuICBzY2hlbWFWYWxpZGF0ZShqc29uOiB1bmtub3duKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gRW50aXR5SnNvblNjaGVtYS5zYWZlUGFyc2UoanNvbik7XG4gICAgcmV0dXJuIHJlc3VsdC5zdWNjZXNzID8gbnVsbCA6IHJlc3VsdC5lcnJvcjtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZChkb1NpbGVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5lbnRpdGllcy5jbGVhcigpO1xuICAgIHRoaXMubW9kdWxlUGF0aHMuY2xlYXIoKTtcbiAgICB0aGlzLnRhYmxlU3BlY3MuY2xlYXIoKTtcbiAgICB0aGlzLmlzQXV0b2xvYWRlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYXV0b2xvYWQoZG9TaWxlbnQpO1xuICB9XG5cbiAgYXN5bmMgcmVnaXN0ZXIoanNvbjogRW50aXR5SnNvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVudGl0eSA9IG5ldyBFbnRpdHkoanNvbik7XG4gICAgYXdhaXQgZW50aXR5LnJlZ2lzdGVyTW9kdWxlUGF0aHMoKTtcbiAgICBlbnRpdHkucmVnaXN0ZXJUYWJsZVNwZWNzKCk7XG4gICAgdGhpcy5lbnRpdGllcy5zZXQoanNvbi5pZCwgZW50aXR5KTtcbiAgfVxuXG4gIGdldChlbnRpdHlJZDogc3RyaW5nKTogRW50aXR5IHtcbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmVudGl0aWVzLmdldChlbnRpdHlJZCk7XG4gICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgRW50aXR5IOyalOyyrSAke2VudGl0eUlkfWApO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBleGlzdHMoZW50aXR5SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXRpZXMuZ2V0KGVudGl0eUlkKTtcbiAgICByZXR1cm4gZW50aXR5ICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRBbGxJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKEVudGl0eU1hbmFnZXIuZW50aXRpZXMua2V5cygpKS5zb3J0KCk7XG4gIH1cblxuICBnZXRBbGxQYXJlbnRJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbElkcygpLmZpbHRlcigoZW50aXR5SWQpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZ2V0KGVudGl0eUlkKTtcbiAgICAgIHJldHVybiBlbnRpdHkucGFyZW50SWQgPT09IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENoaWxkcmVuSWRzKHBhcmVudElkOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsSWRzKCkuZmlsdGVyKChlbnRpdHlJZCkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5nZXQoZW50aXR5SWQpO1xuICAgICAgcmV0dXJuIGVudGl0eS5wYXJlbnRJZCA9PT0gcGFyZW50SWQ7XG4gICAgfSk7XG4gIH1cblxuICBzZXRNb2R1bGVQYXRoKGtleTogc3RyaW5nLCBtb2R1bGVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBjb25zb2xlLmRlYnVnKGNoYWxrLmN5YW4oYHNldE1vZHVsZVBhdGggOjogJHtrZXl9IDo6ICR7bW9kdWxlUGF0aH1gKSk7XG4gICAgdGhpcy5tb2R1bGVQYXRocy5zZXQoa2V5LCBtb2R1bGVQYXRoKTtcbiAgfVxuXG4gIGdldE1vZHVsZVBhdGgoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1vZHVsZVBhdGggPSB0aGlzLm1vZHVsZVBhdGhzLmdldChrZXkpO1xuICAgIGlmIChtb2R1bGVQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCDrqqjrk4gg7Yyo7IqkIOyalOyyrSAke2tleX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kdWxlUGF0aDtcbiAgfVxuXG4gIHNldFRhYmxlU3BlYyh0YWJsZVNwZWM6IFRhYmxlU3BlYykge1xuICAgIHRoaXMudGFibGVTcGVjcy5zZXQodGFibGVTcGVjLm5hbWUsIHRhYmxlU3BlYyk7XG4gIH1cblxuICBnZXRUYWJsZVNwZWMoa2V5OiBzdHJpbmcpOiBUYWJsZVNwZWMge1xuICAgIGNvbnN0IHRhYmxlU3BlYyA9IHRoaXMudGFibGVTcGVjcy5nZXQoa2V5KTtcbiAgICBpZiAodGFibGVTcGVjID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCDthYzsnbTruJQg7Iqk7Y6ZIOyalOyyrSAke2tleX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFibGVTcGVjO1xuICB9XG5cbiAgZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQ6IHN0cmluZyk6IEVudGl0eU5hbWVzUmVjb3JkIHtcbiAgICAvLyBlbnRpdHlJZOqwgCDri6jrs7XsiJgg64+Z7ZiVIOuLqOyWtOyduCDqsr3smrAgTGlzdCDrtpnsl6zshJwg7IOd7ISxXG4gICAgY29uc3QgcGx1cmFsaXplZCA9XG4gICAgICBpbmZsZWN0aW9uLnBsdXJhbGl6ZShlbnRpdHlJZCkgPT09IGVudGl0eUlkXG4gICAgICAgID8gYCR7ZW50aXR5SWR9TGlzdGBcbiAgICAgICAgOiBpbmZsZWN0aW9uLnBsdXJhbGl6ZShlbnRpdHlJZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZnM6IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShlbnRpdHlJZCkpLnRvTG93ZXJDYXNlKCksXG4gICAgICBmc1BsdXJhbDogaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKHBsdXJhbGl6ZWQpKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgY2FtZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoZW50aXR5SWQsIHRydWUpLFxuICAgICAgY2FtZWxQbHVyYWw6IGluZmxlY3Rpb24uY2FtZWxpemUocGx1cmFsaXplZCwgdHJ1ZSksXG4gICAgICBjYXBpdGFsOiBlbnRpdHlJZCxcbiAgICAgIGNhcGl0YWxQbHVyYWw6IHBsdXJhbGl6ZWQsXG4gICAgICB1cHBlcjogZW50aXR5SWQudG9VcHBlckNhc2UoKSxcbiAgICAgIGNvbnN0YW50OiBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpLnRvVXBwZXJDYXNlKCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnRpdHlJZOuKlCBNb2RlbOydhCDsoJzsmbjtlZwgUGFzY2FsQ2FzZSDsnbTrpoTsnoXri4jri6QuIChleC4gXCJVc2VyXCIpXG4gICAqIEBwYXJhbSBmaWxlUGF0aFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0RW50aXR5SWRGcm9tUGF0aChmaWxlUGF0aDogQWJzb2x1dGVQYXRoKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXRjaGVkID0gZmlsZVBhdGgubWF0Y2goL2FwcGxpY2F0aW9uXFwvKC4rKVxcLy8pO1xuICAgIGFzc2VydChtYXRjaGVkPy5bMV0pO1xuICAgIHJldHVybiBpbmZsZWN0aW9uLmNhbWVsaXplKG1hdGNoZWRbMV0ucmVwbGFjZSgvLS9nLCBcIl9cIikpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBFbnRpdHlNYW5hZ2VyID0gbmV3IEVudGl0eU1hbmFnZXJDbGFzcygpO1xuIl0sIm5hbWVzIjpbImFzc2VydCIsImNoYWxrIiwiZ2xvYiIsInJlYWRGaWxlIiwiaW5mbGVjdGlvbiIsInBhdGgiLCJwcmV0dGlmeUVycm9yIiwiU29uYW11IiwiRW50aXR5SnNvblNjaGVtYSIsIkVudGl0eSIsIkVudGl0eU1hbmFnZXJDbGFzcyIsImVudGl0aWVzIiwiTWFwIiwibW9kdWxlUGF0aHMiLCJ0YWJsZVNwZWNzIiwiaXNBdXRvbG9hZGVkIiwiYXV0b2xvYWQiLCJfIiwicGF0aFBhdHRlcm4iLCJqb2luIiwiYXBpUm9vdFBhdGgiLCJmaWxlIiwicmVzb2x2ZSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJ0b1N0cmluZyIsImVycm9yIiwic2NoZW1hVmFsaWRhdGUiLCJyZWxhdGl2ZVBhdGgiLCJyZWxhdGl2ZSIsImVycm9yTWVzc2FnZSIsImNvbnNvbGUiLCJyZWQiLCJ5ZWxsb3ciLCJyZWdpc3RlciIsInJlc3VsdCIsInNhZmVQYXJzZSIsInN1Y2Nlc3MiLCJyZWxvYWQiLCJkb1NpbGVudCIsImNsZWFyIiwiZW50aXR5IiwicmVnaXN0ZXJNb2R1bGVQYXRocyIsInJlZ2lzdGVyVGFibGVTcGVjcyIsInNldCIsImlkIiwiZ2V0IiwiZW50aXR5SWQiLCJ1bmRlZmluZWQiLCJFcnJvciIsImV4aXN0cyIsImdldEFsbElkcyIsIkFycmF5IiwiZnJvbSIsIkVudGl0eU1hbmFnZXIiLCJrZXlzIiwic29ydCIsImdldEFsbFBhcmVudElkcyIsImZpbHRlciIsInBhcmVudElkIiwiZ2V0Q2hpbGRyZW5JZHMiLCJzZXRNb2R1bGVQYXRoIiwia2V5IiwibW9kdWxlUGF0aCIsImdldE1vZHVsZVBhdGgiLCJzZXRUYWJsZVNwZWMiLCJ0YWJsZVNwZWMiLCJuYW1lIiwiZ2V0VGFibGVTcGVjIiwiZ2V0TmFtZXNGcm9tSWQiLCJwbHVyYWxpemVkIiwicGx1cmFsaXplIiwiZnMiLCJkYXNoZXJpemUiLCJ1bmRlcnNjb3JlIiwidG9Mb3dlckNhc2UiLCJmc1BsdXJhbCIsImNhbWVsIiwiY2FtZWxpemUiLCJjYW1lbFBsdXJhbCIsImNhcGl0YWwiLCJjYXBpdGFsUGx1cmFsIiwidXBwZXIiLCJ0b1VwcGVyQ2FzZSIsImNvbnN0YW50IiwiZ2V0RW50aXR5SWRGcm9tUGF0aCIsImZpbGVQYXRoIiwibWF0Y2hlZCIsIm1hdGNoIiwicmVwbGFjZSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixTQUFTQyxJQUFJLEVBQUVDLFFBQVEsUUFBUSxtQkFBYztBQUM3QyxPQUFPQyxnQkFBZ0IsYUFBYTtBQUNwQyxPQUFPQyxVQUFVLE9BQU87QUFDeEIsU0FBU0MsYUFBYSxRQUFRLE1BQU07QUFDcEMsU0FBU0MsTUFBTSxRQUFRLG1CQUFnQjtBQUN2QyxTQUE0Q0MsZ0JBQWdCLFFBQVEsb0JBQWlCO0FBRXJGLFNBQVNDLE1BQU0sUUFBUSxjQUFXO0FBVWxDLE1BQU1DO0lBQ0lDLFdBQWdDLElBQUlDLE1BQU07SUFDM0NDLGNBQW1DLElBQUlELE1BQU07SUFDNUNFLGFBQXFDLElBQUlGLE1BQU07SUFDaERHLGVBQXdCLE1BQU07SUFFckMsK0JBQStCO0lBQy9CLE1BQU1DLFNBQVNDLElBQWEsS0FBSyxFQUFFO1FBQ2pDLElBQUksSUFBSSxDQUFDRixZQUFZLEVBQUU7WUFDckI7UUFDRjtRQUNBLE1BQU1HLGNBQWNiLEtBQUtjLElBQUksQ0FBQ1osT0FBT2EsV0FBVyxFQUFFO1FBRWxELFdBQVcsTUFBTUMsUUFBUW5CLEtBQUtHLEtBQUtpQixPQUFPLENBQUNKLGNBQWU7WUFDeEQsTUFBTUssT0FBT0MsS0FBS0MsS0FBSyxDQUFDLEFBQUMsQ0FBQSxNQUFNdEIsU0FBU2tCLEtBQUksRUFBR0ssUUFBUTtZQUV2RCxxQkFBcUI7WUFDckIsTUFBTUMsUUFBUSxJQUFJLENBQUNDLGNBQWMsQ0FBQ0w7WUFDbEMsSUFBSUksT0FBTztnQkFDVCxNQUFNRSxlQUFleEIsS0FBS3lCLFFBQVEsQ0FBQ3ZCLE9BQU9hLFdBQVcsRUFBRUM7Z0JBQ3ZELE1BQU1VLGVB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
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRpdHkvZW50aXR5LW1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBnbG9iLCByZWFkRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwcmV0dGlmeUVycm9yIH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5SW5kZXgsIHR5cGUgRW50aXR5SnNvbiwgRW50aXR5SnNvblNjaGVtYSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4vZW50aXR5XCI7XG5cbmV4cG9ydCB0eXBlIEVudGl0eU5hbWVzUmVjb3JkID0gUmVjb3JkPFxuICBcImZzXCIgfCBcImZzUGx1cmFsXCIgfCBcImNhbWVsXCIgfCBcImNhbWVsUGx1cmFsXCIgfCBcImNhcGl0YWxcIiB8IFwiY2FwaXRhbFBsdXJhbFwiIHwgXCJ1cHBlclwiIHwgXCJjb25zdGFudFwiLFxuICBzdHJpbmdcbj47XG50eXBlIFRhYmxlU3BlYyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB1bmlxdWVJbmRleGVzOiBFbnRpdHlJbmRleFtdO1xufTtcbmNsYXNzIEVudGl0eU1hbmFnZXJDbGFzcyB7XG4gIHByaXZhdGUgZW50aXRpZXM6IE1hcDxzdHJpbmcsIEVudGl0eT4gPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBtb2R1bGVQYXRoczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSB0YWJsZVNwZWNzOiBNYXA8c3RyaW5nLCBUYWJsZVNwZWM+ID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgaXNBdXRvbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8g6rK966GcIOyghOuLrOuwm+yVhCDrqqjrk6AgZW50aXR5Lmpzb24g7YyM7J28IOuhnOuTnFxuICBhc3luYyBhdXRvbG9hZChfOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5pc0F1dG9sb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGF0aFBhdHRlcm4gPSBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBcIi9zcmMvYXBwbGljYXRpb24vKiovKi5lbnRpdHkuanNvblwiKTtcblxuICAgIGZvciBhd2FpdCAoY29uc3QgZmlsZSBvZiBnbG9iKHBhdGgucmVzb2x2ZShwYXRoUGF0dGVybikpKSB7XG4gICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZSgoYXdhaXQgcmVhZEZpbGUoZmlsZSkpLnRvU3RyaW5nKCkpO1xuXG4gICAgICAvLyBlbnRpdHkuanNvbiDsiqTtgqTrp4gg6rKA7KadXG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuc2NoZW1hVmFsaWRhdGUoanNvbik7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGZpbGUpO1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBwcmV0dGlmeUVycm9yKGVycm9yKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBjaGFsay5yZWQoYEludmFsaWQgZW50aXR5Lmpzb24gc2NoZW1hOiAke3JlbGF0aXZlUGF0aH1cXG4ke2NoYWxrLnllbGxvdyhlcnJvck1lc3NhZ2UpfWApLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyKGpzb24pO1xuICAgIH1cbiAgICAvLyAhZG9TaWxlbnQgJiZcbiAgICAvLyAgIGNvbnNvbGUubG9nKFxuICAgIC8vICAgICBjaGFsay5ncmF5KFxuICAgIC8vICAgICAgIGBbTG9hZGluZ10gTG9hZGVkIGVudGl0eSBkZWZpbml0aW9ucyBmcm9tIFwiKi5lbnRpdHkuanNvblwiIGZpbGVzOiAke2NvdW50fSBmaWxlcy5gXG4gICAgLy8gICAgIClcbiAgICAvLyAgICk7XG5cbiAgICB0aGlzLmlzQXV0b2xvYWRlZCA9IHRydWU7XG4gIH1cblxuICBzY2hlbWFWYWxpZGF0ZShqc29uOiB1bmtub3duKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gRW50aXR5SnNvblNjaGVtYS5zYWZlUGFyc2UoanNvbik7XG4gICAgcmV0dXJuIHJlc3VsdC5zdWNjZXNzID8gbnVsbCA6IHJlc3VsdC5lcnJvcjtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZChkb1NpbGVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5lbnRpdGllcy5jbGVhcigpO1xuICAgIHRoaXMubW9kdWxlUGF0aHMuY2xlYXIoKTtcbiAgICB0aGlzLnRhYmxlU3BlY3MuY2xlYXIoKTtcbiAgICB0aGlzLmlzQXV0b2xvYWRlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYXV0b2xvYWQoZG9TaWxlbnQpO1xuICB9XG5cbiAgYXN5bmMgcmVnaXN0ZXIoanNvbjogRW50aXR5SnNvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVudGl0eSA9IG5ldyBFbnRpdHkoanNvbik7XG4gICAgYXdhaXQgZW50aXR5LnJlZ2lzdGVyTW9kdWxlUGF0aHMoKTtcbiAgICBlbnRpdHkucmVnaXN0ZXJUYWJsZVNwZWNzKCk7XG4gICAgdGhpcy5lbnRpdGllcy5zZXQoanNvbi5pZCwgZW50aXR5KTtcbiAgfVxuXG4gIGdldChlbnRpdHlJZDogc3RyaW5nKTogRW50aXR5IHtcbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmVudGl0aWVzLmdldChlbnRpdHlJZCk7XG4gICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgRW50aXR5IOyalOyyrSAke2VudGl0eUlkfWApO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBnZXRCeVRhYmxlKHRhYmxlOiBzdHJpbmcpOiBFbnRpdHkge1xuICAgIGNvbnN0IGVudGl0eSA9IEFycmF5LmZyb20odGhpcy5lbnRpdGllcy52YWx1ZXMoKSkuZmluZCgoZW50aXR5KSA9PiBlbnRpdHkudGFibGUgPT09IHRhYmxlKTtcbiAgICBpZiAoZW50aXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCBFbnRpdHkg7JqU7LKtICR7dGFibGV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIGV4aXN0cyhlbnRpdHlJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5lbnRpdGllcy5nZXQoZW50aXR5SWQpO1xuICAgIHJldHVybiBlbnRpdHkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEFsbElkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oRW50aXR5TWFuYWdlci5lbnRpdGllcy5rZXlzKCkpLnNvcnQoKTtcbiAgfVxuXG4gIGdldEFsbFBhcmVudElkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsSWRzKCkuZmlsdGVyKChlbnRpdHlJZCkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5nZXQoZW50aXR5SWQpO1xuICAgICAgcmV0dXJuIGVudGl0eS5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2hpbGRyZW5JZHMocGFyZW50SWQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxJZHMoKS5maWx0ZXIoKGVudGl0eUlkKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmdldChlbnRpdHlJZCk7XG4gICAgICByZXR1cm4gZW50aXR5LnBhcmVudElkID09PSBwYXJlbnRJZDtcbiAgICB9KTtcbiAgfVxuXG4gIHNldE1vZHVsZVBhdGgoa2V5OiBzdHJpbmcsIG1vZHVsZVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIGNvbnNvbGUuZGVidWcoY2hhbGsuY3lhbihgc2V0TW9kdWxlUGF0aCA6OiAke2tleX0gOjogJHttb2R1bGVQYXRofWApKTtcbiAgICB0aGlzLm1vZHVsZVBhdGhzLnNldChrZXksIG1vZHVsZVBhdGgpO1xuICB9XG5cbiAgZ2V0TW9kdWxlUGF0aChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IHRoaXMubW9kdWxlUGF0aHMuZ2V0KGtleSk7XG4gICAgaWYgKG1vZHVsZVBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIOuqqOuTiCDtjKjsiqQg7JqU7LKtICR7a2V5fWApO1xuICAgIH1cblxuICAgIHJldHVybiBtb2R1bGVQYXRoO1xuICB9XG5cbiAgc2V0VGFibGVTcGVjKHRhYmxlU3BlYzogVGFibGVTcGVjKSB7XG4gICAgdGhpcy50YWJsZVNwZWNzLnNldCh0YWJsZVNwZWMubmFtZSwgdGFibGVTcGVjKTtcbiAgfVxuXG4gIGdldFRhYmxlU3BlYyhrZXk6IHN0cmluZyk6IFRhYmxlU3BlYyB7XG4gICAgY29uc3QgdGFibGVTcGVjID0gdGhpcy50YWJsZVNwZWNzLmdldChrZXkpO1xuICAgIGlmICh0YWJsZVNwZWMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIO2FjOydtOu4lCDsiqTtjpkg7JqU7LKtICR7a2V5fWApO1xuICAgIH1cblxuICAgIHJldHVybiB0YWJsZVNwZWM7XG4gIH1cblxuICBnZXROYW1lc0Zyb21JZChlbnRpdHlJZDogc3RyaW5nKTogRW50aXR5TmFtZXNSZWNvcmQge1xuICAgIC8vIGVudGl0eUlk6rCAIOuLqOuzteyImCDrj5ntmJUg64uo7Ja07J24IOqyveyasCBMaXN0IOu2meyXrOyEnCDsg53shLFcbiAgICBjb25zdCBwbHVyYWxpemVkID1cbiAgICAgIGluZmxlY3Rpb24ucGx1cmFsaXplKGVudGl0eUlkKSA9PT0gZW50aXR5SWRcbiAgICAgICAgPyBgJHtlbnRpdHlJZH1MaXN0YFxuICAgICAgICA6IGluZmxlY3Rpb24ucGx1cmFsaXplKGVudGl0eUlkKTtcblxuICAgIHJldHVybiB7XG4gICAgICBmczogaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKGVudGl0eUlkKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGZzUGx1cmFsOiBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUocGx1cmFsaXplZCkpLnRvTG93ZXJDYXNlKCksXG4gICAgICBjYW1lbDogaW5mbGVjdGlvbi5jYW1lbGl6ZShlbnRpdHlJZCwgdHJ1ZSksXG4gICAgICBjYW1lbFBsdXJhbDogaW5mbGVjdGlvbi5jYW1lbGl6ZShwbHVyYWxpemVkLCB0cnVlKSxcbiAgICAgIGNhcGl0YWw6IGVudGl0eUlkLFxuICAgICAgY2FwaXRhbFBsdXJhbDogcGx1cmFsaXplZCxcbiAgICAgIHVwcGVyOiBlbnRpdHlJZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgY29uc3RhbnQ6IGluZmxlY3Rpb24udW5kZXJzY29yZShlbnRpdHlJZCkudG9VcHBlckNhc2UoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVudGl0eUlk64qUIE1vZGVs7J2EIOygnOyZuO2VnCBQYXNjYWxDYXNlIOydtOumhOyeheuLiOuLpC4gKGV4LiBcIlVzZXJcIilcbiAgICogQHBhcmFtIGZpbGVQYXRoXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRFbnRpdHlJZEZyb21QYXRoKGZpbGVQYXRoOiBBYnNvbHV0ZVBhdGgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hdGNoZWQgPSBmaWxlUGF0aC5tYXRjaCgvYXBwbGljYXRpb25cXC8oLispXFwvLyk7XG4gICAgYXNzZXJ0KG1hdGNoZWQ/LlsxXSk7XG4gICAgcmV0dXJuIGluZmxlY3Rpb24uY2FtZWxpemUobWF0Y2hlZFsxXS5yZXBsYWNlKC8tL2csIFwiX1wiKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVudGl0eU1hbmFnZXIgPSBuZXcgRW50aXR5TWFuYWdlckNsYXNzKCk7XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiY2hhbGsiLCJnbG9iIiwicmVhZEZpbGUiLCJpbmZsZWN0aW9uIiwicGF0aCIsInByZXR0aWZ5RXJyb3IiLCJTb25hbXUiLCJFbnRpdHlKc29uU2NoZW1hIiwiRW50aXR5IiwiRW50aXR5TWFuYWdlckNsYXNzIiwiZW50aXRpZXMiLCJNYXAiLCJtb2R1bGVQYXRocyIsInRhYmxlU3BlY3MiLCJpc0F1dG9sb2FkZWQiLCJhdXRvbG9hZCIsIl8iLCJwYXRoUGF0dGVybiIsImpvaW4iLCJhcGlSb290UGF0aCIsImZpbGUiLCJyZXNvbHZlIiwianNvbiIsIkpTT04iLCJwYXJzZSIsInRvU3RyaW5nIiwiZXJyb3IiLCJzY2hlbWFWYWxpZGF0ZSIsInJlbGF0aXZlUGF0aCIsInJlbGF0aXZlIiwiZXJyb3JNZXNzYWdlIiwiY29uc29sZSIsInJlZCIsInllbGxvdyIsInJlZ2lzdGVyIiwicmVzdWx0Iiwic2FmZVBhcnNlIiwic3VjY2VzcyIsInJlbG9hZCIsImRvU2lsZW50IiwiY2xlYXIiLCJlbnRpdHkiLCJyZWdpc3Rlck1vZHVsZVBhdGhzIiwicmVnaXN0ZXJUYWJsZVNwZWNzIiwic2V0IiwiaWQiLCJnZXQiLCJlbnRpdHlJZCIsInVuZGVmaW5lZCIsIkVycm9yIiwiZ2V0QnlUYWJsZSIsInRhYmxlIiwiQXJyYXkiLCJmcm9tIiwidmFsdWVzIiwiZmluZCIsImV4aXN0cyIsImdldEFsbElkcyIsIkVudGl0eU1hbmFnZXIiLCJrZXlzIiwic29ydCIsImdldEFsbFBhcmVudElkcyIsImZpbHRlciIsInBhcmVudElkIiwiZ2V0Q2hpbGRyZW5JZHMiLCJzZXRNb2R1bGVQYXRoIiwia2V5IiwibW9kdWxlUGF0aCIsImdldE1vZHVsZVBhdGgiLCJzZXRUYWJsZVNwZWMiLCJ0YWJsZVNwZWMiLCJuYW1lIiwiZ2V0VGFibGVTcGVjIiwiZ2V0TmFtZXNGcm9tSWQiLCJwbHVyYWxpemVkIiwicGx1cmFsaXplIiwiZnMiLCJkYXNoZXJpemUiLCJ1bmRlcnNjb3JlIiwidG9Mb3dlckNhc2UiLCJmc1BsdXJhbCIsImNhbWVsIiwiY2FtZWxpemUiLCJjYW1lbFBsdXJhbCIsImNhcGl0YWwiLCJjYXBpdGFsUGx1cmFsIiwidXBwZXIiLCJ0b1VwcGVyQ2FzZSIsImNvbnN0YW50IiwiZ2V0RW50aXR5SWRGcm9tUGF0aCIsImZpbGVQYXRoIiwibWF0Y2hlZCIsIm1hdGNoIiwicmVwbGFjZSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixTQUFTQyxJQUFJLEVBQUVDLFFBQVEsUUFBUSxtQkFBYztBQUM3QyxPQUFPQyxnQkFBZ0IsYUFBYTtBQUNwQyxPQUFPQyxVQUFVLE9BQU87QUFDeEIsU0FBU0MsYUFBYSxRQUFRLE1BQU07QUFDcEMsU0FBU0MsTUFBTSxRQUFRLG1CQUFnQjtBQUN2QyxTQUE0Q0MsZ0JBQWdCLFFBQVEsb0JBQWlCO0FBRXJGLFNBQVNDLE1BQU0sUUFBUSxjQUFXO0FBVWxDLE1BQU1DO0lBQ0lDLFdBQWdDLElBQUlDLE1BQU07SUFDM0NDLGNBQW1DLElBQUlELE1BQU07SUFDNUNFLGFBQXFDLElBQUlGLE1BQU07SUFDaERHLGVBQXdCLE1BQU07SUFFckMsK0JBQStCO0lBQy9CLE1BQU1DLFNBQVNDLElBQWEsS0FBSyxFQUFFO1FBQ2pDLElBQUksSUFBSSxDQUFDRixZQUFZLEVBQUU7WUFDckI7UUFDRjtRQUNB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
package/dist/index.d.ts CHANGED
@@ -22,6 +22,7 @@ export * from "./migration/types";
22
22
  export * from "./naite/naite";
23
23
  export * from "./naite/naite-reporter";
24
24
  export * from "./stream/sse";
25
+ export * from "./tasks/decorator";
25
26
  export * from "./template/template";
26
27
  export * from "./template/template-manager";
27
28
  export * from "./testing/fixture-manager";
@@ -34,5 +35,4 @@ export * from "./vector/chunking";
34
35
  export * from "./vector/config";
35
36
  export * from "./vector/embedding";
36
37
  export * from "./vector/types";
37
- export * from "./vector/vector-search";
38
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,mBAAmB,eAAe,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAE9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,mBAAmB,eAAe,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAE9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -21,6 +21,7 @@ export * from "./migration/types.js";
21
21
  export * from "./naite/naite.js";
22
22
  export * from "./naite/naite-reporter.js";
23
23
  export * from "./stream/sse.js";
24
+ export * from "./tasks/decorator.js";
24
25
  export * from "./template/template.js";
25
26
  export * from "./template/template-manager.js";
26
27
  export * from "./testing/fixture-manager.js";
@@ -33,8 +34,7 @@ export * from "./utils/utils.js";
33
34
  export * from "./vector/chunking.js";
34
35
  export * from "./vector/config.js";
35
36
  export * from "./vector/embedding.js";
36
- export * from "./vector/types.js";
37
- export * from "./vector/vector-search.js"; // export * from "./api/code-converters";
37
+ export * from "./vector/types.js"; // export * from "./api/code-converters";
38
38
  // export * from "./syncer/syncer";
39
39
 
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hcGkvYmFzZS1mcmFtZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBpL2NvbmZpZ1wiO1xuZXhwb3J0IHR5cGUgKiBmcm9tIFwiLi9hcGkvY29udGV4dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBpL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FwaS9zb25hbXVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL2Jhc2UtbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL2RiXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpLnR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpLXN1YnNldC50eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0YWJhc2UvcHVyaS13cmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS91cHNlcnQtYnVpbGRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW50aXR5L2VudGl0eVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGNlcHRpb25zL2Vycm9yLWhhbmRsZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZmlsZS1zdG9yYWdlL2RyaXZlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL21pZ3JhdGlvbi1zZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21pZ3JhdGlvbi9taWdyYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL3Bvc3RncmVzcWwtc2NoZW1hLXJlYWRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9uYWl0ZS9uYWl0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbmFpdGUvbmFpdGUtcmVwb3J0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmVhbS9zc2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RlbXBsYXRlL3RlbXBsYXRlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZW1wbGF0ZS90ZW1wbGF0ZS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZXN0aW5nL2ZpeHR1cmUtbWFuYWdlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvdHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL21vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlscy90eXBlLXV0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuLy8gVmVjdG9yIChwZ3ZlY3RvciBpbnRlZ3JhdGlvbilcbmV4cG9ydCAqIGZyb20gXCIuL3ZlY3Rvci9jaHVua2luZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmVjdG9yL2NvbmZpZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmVjdG9yL2VtYmVkZGluZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmVjdG9yL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92ZWN0b3IvdmVjdG9yLXNlYXJjaFwiO1xuXG4vLyBleHBvcnQgKiBmcm9tIFwiLi9hcGkvY29kZS1jb252ZXJ0ZXJzXCI7XG4vLyBleHBvcnQgKiBmcm9tIFwiLi9zeW5jZXIvc3luY2VyXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBbUI7QUFDakMsY0FBYyxrQkFBZTtBQUU3QixjQUFjLHNCQUFtQjtBQUNqQyxjQUFjLGtCQUFlO0FBQzdCLGNBQWMsMkJBQXdCO0FBQ3RDLGNBQWMsbUJBQWdCO0FBQzlCLGNBQWMscUJBQWtCO0FBQ2hDLGNBQWMsMkJBQXdCO0FBQ3RDLGNBQWMsa0NBQStCO0FBQzdDLGNBQWMsNkJBQTBCO0FBQ3hDLGNBQWMsK0JBQTRCO0FBQzFDLGNBQWMscUJBQWtCO0FBQ2hDLGNBQWMsNkJBQTBCO0FBQ3hDLGNBQWMsZ0NBQTZCO0FBQzNDLGNBQWMsZ0NBQTZCO0FBQzNDLGNBQWMsMkJBQXdCO0FBQ3RDLGNBQWMsK0JBQTRCO0FBQzFDLGNBQWMsMEJBQXVCO0FBQ3JDLGNBQWMsMENBQXVDO0FBQ3JELGNBQWMsdUJBQW9CO0FBQ2xDLGNBQWMsbUJBQWdCO0FBQzlCLGNBQWMsNEJBQXlCO0FBQ3ZDLGNBQWMsa0JBQWU7QUFDN0IsY0FBYyx5QkFBc0I7QUFDcEMsY0FBYyxpQ0FBOEI7QUFDNUMsY0FBYywrQkFBNEI7QUFDMUMsY0FBYyxtQkFBZ0I7QUFDOUIsY0FBYyx3QkFBcUI7QUFDbkMsY0FBYyxtQkFBZ0I7QUFDOUIsY0FBYyx3QkFBcUI7QUFDbkMsY0FBYyxtQkFBZ0I7QUFDOUIsZ0NBQWdDO0FBQ2hDLGNBQWMsdUJBQW9CO0FBQ2xDLGNBQWMscUJBQWtCO0FBQ2hDLGNBQWMsd0JBQXFCO0FBQ25DLGNBQWMsb0JBQWlCO0FBQy9CLGNBQWMsNEJBQXlCLENBRXZDLHlDQUF5QztDQUN6QyxtQ0FBbUMifQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hcGkvYmFzZS1mcmFtZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBpL2NvbmZpZ1wiO1xuZXhwb3J0IHR5cGUgKiBmcm9tIFwiLi9hcGkvY29udGV4dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBpL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FwaS9zb25hbXVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL2Jhc2UtbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL2RiXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpLnR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpLXN1YnNldC50eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0YWJhc2UvcHVyaS13cmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS91cHNlcnQtYnVpbGRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW50aXR5L2VudGl0eVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGNlcHRpb25zL2Vycm9yLWhhbmRsZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZmlsZS1zdG9yYWdlL2RyaXZlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL21pZ3JhdGlvbi1zZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21pZ3JhdGlvbi9taWdyYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL3Bvc3RncmVzcWwtc2NoZW1hLXJlYWRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9uYWl0ZS9uYWl0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbmFpdGUvbmFpdGUtcmVwb3J0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmVhbS9zc2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Rhc2tzL2RlY29yYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGVtcGxhdGUvdGVtcGxhdGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RlbXBsYXRlL3RlbXBsYXRlLW1hbmFnZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvY29udHJvbGxlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL3R5cGUtdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL3V0aWxzXCI7XG4vLyBWZWN0b3IgKHBndmVjdG9yIGludGVncmF0aW9uKVxuZXhwb3J0ICogZnJvbSBcIi4vdmVjdG9yL2NodW5raW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92ZWN0b3IvY29uZmlnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92ZWN0b3IvZW1iZWRkaW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92ZWN0b3IvdHlwZXNcIjtcblxuLy8gZXhwb3J0ICogZnJvbSBcIi4vYXBpL2NvZGUtY29udmVydGVyc1wiO1xuLy8gZXhwb3J0ICogZnJvbSBcIi4vc3luY2VyL3N5bmNlclwiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQW1CO0FBQ2pDLGNBQWMsa0JBQWU7QUFFN0IsY0FBYyxzQkFBbUI7QUFDakMsY0FBYyxrQkFBZTtBQUM3QixjQUFjLDJCQUF3QjtBQUN0QyxjQUFjLG1CQUFnQjtBQUM5QixjQUFjLHFCQUFrQjtBQUNoQyxjQUFjLDJCQUF3QjtBQUN0QyxjQUFjLGtDQUErQjtBQUM3QyxjQUFjLDZCQUEwQjtBQUN4QyxjQUFjLCtCQUE0QjtBQUMxQyxjQUFjLHFCQUFrQjtBQUNoQyxjQUFjLDZCQUEwQjtBQUN4QyxjQUFjLGdDQUE2QjtBQUMzQyxjQUFjLGdDQUE2QjtBQUMzQyxjQUFjLDJCQUF3QjtBQUN0QyxjQUFjLCtCQUE0QjtBQUMxQyxjQUFjLDBCQUF1QjtBQUNyQyxjQUFjLDBDQUF1QztBQUNyRCxjQUFjLHVCQUFvQjtBQUNsQyxjQUFjLG1CQUFnQjtBQUM5QixjQUFjLDRCQUF5QjtBQUN2QyxjQUFjLGtCQUFlO0FBQzdCLGNBQWMsdUJBQW9CO0FBQ2xDLGNBQWMseUJBQXNCO0FBQ3BDLGNBQWMsaUNBQThCO0FBQzVDLGNBQWMsK0JBQTRCO0FBQzFDLGNBQWMsbUJBQWdCO0FBQzlCLGNBQWMsd0JBQXFCO0FBQ25DLGNBQWMsbUJBQWdCO0FBQzlCLGNBQWMsd0JBQXFCO0FBQ25DLGNBQWMsbUJBQWdCO0FBQzlCLGdDQUFnQztBQUNoQyxjQUFjLHVCQUFvQjtBQUNsQyxjQUFjLHFCQUFrQjtBQUNoQyxjQUFjLHdCQUFxQjtBQUNuQyxjQUFjLG9CQUFpQixDQUUvQix5Q0FBeUM7Q0FDekMsbUNBQW1DIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"code-generation.d.ts","sourceRoot":"","sources":["../../src/migration/code-generation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAIhB,YAAY,EACb,MAAM,gBAAgB,CAAC;AAk2BxB;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAS7F;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAqG7B"}
1
+ {"version":3,"file":"code-generation.d.ts","sourceRoot":"","sources":["../../src/migration/code-generation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,gBAAgB,EAIhB,YAAY,EACb,MAAM,gBAAgB,CAAC;AAw4BxB;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAS7F;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAqG7B"}