sonamu 0.9.3 → 0.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/providers/rtzr/utils.js +2 -2
- package/dist/api/config.d.ts +0 -8
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +1 -1
- package/dist/api/sonamu.d.ts +0 -1
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +2 -41
- package/dist/auth/audit-log/builders.d.ts +216 -0
- package/dist/auth/audit-log/builders.d.ts.map +1 -0
- package/dist/auth/audit-log/builders.js +307 -0
- package/dist/auth/audit-log/events.d.ts +143 -0
- package/dist/auth/audit-log/events.d.ts.map +1 -0
- package/dist/auth/audit-log/events.js +74 -0
- package/dist/auth/audit-log/plugin.d.ts +11 -0
- package/dist/auth/audit-log/plugin.d.ts.map +1 -0
- package/dist/auth/audit-log/plugin.js +427 -0
- package/dist/auth/audit-log-ingestor.d.ts +3 -3
- package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
- package/dist/auth/audit-log-ingestor.js +44 -50
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +4 -4
- package/dist/auth/plugins/entity-definitions/admin.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/admin.js +4 -4
- package/dist/auth/plugins/entity-definitions/audit-log.d.ts +2 -2
- package/dist/auth/plugins/entity-definitions/audit-log.js +3 -3
- package/dist/auth/plugins/wrappers/admin.d.ts +2 -2
- package/dist/auth/plugins/wrappers/sso.d.ts +1 -1
- package/dist/bin/fixture.d.ts.map +1 -1
- package/dist/bin/fixture.js +111 -1
- package/dist/database/_batch_update.d.ts +1 -1
- package/dist/database/_batch_update.js +2 -2
- package/dist/database/upsert-builder.js +4 -4
- package/dist/dict/sonamu-dictionary.js +2 -2
- package/dist/entity/entity-manager.d.ts +2 -2
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +14 -4
- package/dist/index.js +4 -3
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +2 -3
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +2 -9
- package/dist/template/implementations/entry-server.template.js +3 -2
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +2 -1
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_sso.template.js +2 -1
- package/dist/template/implementations/queries.template.d.ts.map +1 -1
- package/dist/template/implementations/queries.template.js +3 -1
- package/dist/template/implementations/sd.template.js +3 -2
- package/dist/template/implementations/services.template.d.ts.map +1 -1
- package/dist/template/implementations/services.template.js +44 -7
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +2 -2
- package/dist/testing/data-explorer.d.ts.map +1 -1
- package/dist/testing/data-explorer.js +5 -3
- package/dist/types/types.d.ts +14 -14
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +3 -2
- package/dist/ui-web/assets/index-D4rYm-Xz.css +1 -0
- package/dist/ui-web/assets/{index-DrTfl0Ts.js → index-DzZ7vBk4.js} +47 -47
- package/dist/ui-web/index.html +2 -2
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +4 -4
- package/package.json +4 -5
- package/src/ai/providers/rtzr/utils.ts +1 -1
- package/src/api/config.ts +0 -8
- package/src/api/sonamu.ts +1 -51
- package/src/auth/audit-log/builders.ts +791 -0
- package/src/auth/audit-log/events.ts +149 -0
- package/src/auth/audit-log/plugin.ts +913 -0
- package/src/auth/audit-log-ingestor.ts +3 -4
- package/src/auth/index.ts +2 -0
- package/src/auth/plugins/entity-definitions/admin.ts +3 -3
- package/src/auth/plugins/entity-definitions/audit-log.ts +2 -2
- package/src/bin/fixture.ts +143 -0
- package/src/database/_batch_update.ts +1 -1
- package/src/database/upsert-builder.ts +3 -3
- package/src/dict/sonamu-dictionary.ts +1 -1
- package/src/entity/entity-manager.ts +10 -3
- package/src/migration/code-generation.ts +1 -6
- package/src/shared/app.shared.ts.txt +60 -6
- package/src/shared/web.shared.ts.txt +60 -5
- package/src/syncer/syncer.ts +1 -11
- package/src/template/implementations/entry-server.template.ts +1 -1
- package/src/template/implementations/generated.template.ts +1 -0
- package/src/template/implementations/generated_sso.template.ts +1 -0
- package/src/template/implementations/queries.template.ts +10 -1
- package/src/template/implementations/sd.template.ts +1 -1
- package/src/template/implementations/services.template.ts +62 -6
- package/src/template/zod-converter.ts +2 -1
- package/src/testing/data-explorer.ts +3 -2
- package/src/ui/api.ts +10 -1
- package/src/utils/fs-utils.ts +6 -4
- package/dist/auth/audit-log-proxy-types.d.ts +0 -23
- package/dist/auth/audit-log-proxy-types.d.ts.map +0 -1
- package/dist/auth/audit-log-proxy-types.js +0 -1
- package/dist/ui-web/assets/index-Dr8pRJC_.css +0 -1
- package/src/auth/audit-log-proxy-types.ts +0 -23
|
@@ -331,12 +331,12 @@ function zodTypeToTsTypeDef(zt) {
|
|
|
331
331
|
case "number":
|
|
332
332
|
case "boolean":
|
|
333
333
|
case "bigint":
|
|
334
|
-
case "date":
|
|
335
334
|
case "null":
|
|
336
335
|
case "undefined":
|
|
337
336
|
case "any":
|
|
338
337
|
case "unknown":
|
|
339
338
|
case "never": return zt.def.type;
|
|
339
|
+
case "date": return "Date";
|
|
340
340
|
case "nullable": return `${zodTypeToTsTypeDef(zt.def.innerType)} | null`;
|
|
341
341
|
case "default": return zodTypeToTsTypeDef(zt.def.innerType);
|
|
342
342
|
case "record": {
|
|
@@ -622,4 +622,4 @@ var init_zod_converter = __esmMin((() => {
|
|
|
622
622
|
//#endregion
|
|
623
623
|
init_zod_converter();
|
|
624
624
|
export { BUILT_IN_TYPES, getZodTypeById, init_zod_converter, propNodeToZodTypeDef, propToZodType, propToZodTypeDef, zodTypeToRenderingNode, zodTypeToTsTypeDef, zodTypeToZodCode };
|
|
625
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kLWNvbnZlcnRlci5qcyIsIm5hbWVzIjpbImlzb0Zvcm1hdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJoYXNoRm9ybWF0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiIsInoiLCJ6b2RUeXBlOiB6LlpvZFR5cGVBbnkiLCJlbGVtZW50VHlwZTogei5ab2RUeXBlIiwic3RtdDogc3RyaW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL3pvZC1jb252ZXJ0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB6b2QtY29udmVydGVyIOq1rOyEsVxuICogMS4g7Jyg7Yu466as7YuwXG4gKiAgLSBnZXRab2RUeXBlQnlJZFxuICpcbiAqIDIuIFpvZCDtg4DsnoUg67OA7ZmYIChFbnRpdHlQcm9wIC0+IFpvZFR5cGUpXG4gKiAgLSBwcm9wVG9ab2RUeXBlXG4gKlxuICogMy4gRW50aXR5UHJvcC9Ob2RlIC0+IFpvZCDsvZTrk5wg66y47J6Q7Je0XG4gKiAgLSBwcm9wVG9ab2RUeXBlRGVmXG4gKiAgLSBwcm9wTm9kZVRvWm9kVHlwZURlZlxuICpcbiAqIDQuIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66W8IO2VtOuLue2VmOuKlCBab2Qg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZggKFpvZFR5cGUgLT4gWm9kQ29kZSlcbiAqICAtIHpvZFR5cGVUb1pvZENvZGVcbiAqXG4gKiA1LiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmCAoWm9kVHlwZSAtPiBSZW5kZXJpbmdOb2RlKVxuICogIC0gem9kVHlwZVRvUmVuZGVyaW5nTm9kZVxuICogIC0gcmVzb2x2ZVJlbmRlclR5cGVcbiAqL1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzQmlnSW50ZWdlckFycmF5UHJvcCxcbiAgaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcCxcbiAgaXNCb29sZWFuQXJyYXlQcm9wLFxuICBpc0Jvb2xlYW5TaW5nbGVQcm9wLFxuICBpc0RhdGVBcnJheVByb3AsXG4gIGlzRGF0ZVNpbmdsZVByb3AsXG4gIGlzRW51bUFycmF5UHJvcCxcbiAgaXNFbnVtU2luZ2xlUHJvcCxcbiAgaXNJbnRlZ2VyQXJyYXlQcm9wLFxuICBpc0ludGVnZXJTaW5nbGVQcm9wLFxuICBpc0pzb25Qcm9wLFxuICBpc051bWJlckFycmF5UHJvcCxcbiAgaXNOdW1iZXJTaW5nbGVQcm9wLFxuICBpc051bWVyaWNBcnJheVByb3AsXG4gIGlzTnVtZXJpY1NpbmdsZVByb3AsXG4gIGlzT25lVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzUmVsYXRpb25Qcm9wLFxuICBpc1NlYXJjaFRleHRQcm9wLFxuICBpc1N0cmluZ0FycmF5UHJvcCxcbiAgaXNTdHJpbmdTaW5nbGVQcm9wLFxuICBpc1RzVmVjdG9yUHJvcCxcbiAgaXNVdWlkQXJyYXlQcm9wLFxuICBpc1V1aWRTaW5nbGVQcm9wLFxuICBpc1ZlY3RvckFycmF5UHJvcCxcbiAgaXNWZWN0b3JTaW5nbGVQcm9wLFxuICBpc1ZpcnR1YWxQcm9wLFxuICBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gIFNvbmFtdUZpbGVTY2hlbWEsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbnRpdHlQcm9wLFxuICB0eXBlIEVudGl0eVByb3BOb2RlLFxuICB0eXBlIFJlbmRlcmluZ05vZGUsXG4gIHR5cGUgWm9kU3RyaW5nRm9ybWF0LFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUltcG9ydFVybCB9IGZyb20gXCIuLi91dGlscy9lc20tdXRpbHNcIjtcbmltcG9ydCB7IHJ1bnRpbWVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kUmVjb3JkID0gei5ab2RSZWNvcmQ8ei5ab2RTdHJpbmcgfCB6LlpvZE51bWJlciB8IHouWm9kU3ltYm9sLCB6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RPYmplY3QgPSB6LlpvZE9iamVjdDtcbnR5cGUgQW55Wm9kTnVsbGFibGUgPSB6LlpvZE51bGxhYmxlPHouWm9kVHlwZT47XG50eXBlIEFueVpvZERlZmF1bHQgPSB6LlpvZERlZmF1bHQ8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kVW5pb24gPSB6LlpvZFVuaW9uPHouWm9kVHlwZVtdPjtcbnR5cGUgQW55Wm9kQXJyYXkgPSB6LlpvZEFycmF5PHouWm9kVHlwZT47XG50eXBlIEFueVpvZE9wdGlvbmFsID0gei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RUZW1wbGF0ZUxpdGVyYWwgPSB6LlpvZFRlbXBsYXRlTGl0ZXJhbDtcblxuLyoqXG4gKiDrgrTsnqUg7YOA7J6FIOygleydmCAoWm9kIOyKpO2CpOuniCArIFVJIOugjOuNlOungSDtg4DsnoUpXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMVF9JTl9UWVBFUyA9IHtcbiAgU29uYW11RmlsZToge1xuICAgIHNjaGVtYTogU29uYW11RmlsZVNjaGVtYSxcbiAgICByZW5kZXJUeXBlOiBcImpzb24tc29uYW11ZmlsZVwiLFxuICAgIHNjaGVtYU5hbWU6IFwiU29uYW11RmlsZVNjaGVtYVwiLFxuICB9LFxuICBcIlNvbmFtdUZpbGVbXVwiOiB7XG4gICAgc2NoZW1hOiBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gICAgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIixcbiAgICBzY2hlbWFOYW1lOiBcIlNvbmFtdUZpbGVBcnJheVNjaGVtYVwiLFxuICB9LFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiB6b2RGb3JtYXTsnYQgWm9kIDQg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBab2QgNOyXkOyEnOuKlCB6LmVtYWlsKCksIHoudXVpZCgpIOuTsSDrj4Xrpr3soIHsnbgg7ZWo7IiYIO2Yle2DnOulvCDsgqzsmqntlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHpvZEZvcm1hdFRvQ29kZShmb3JtYXQ6IFpvZFN0cmluZ0Zvcm1hdCk6IHN0cmluZyB7XG4gIC8vIElTTyDtj6zrp7fsnYAgei5pc28ueHh4KCkg7ZiV7YOcXG4gIGNvbnN0IGlzb0Zvcm1hdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgaXNvRGF0ZTogXCJ6Lmlzby5kYXRlKClcIixcbiAgICBpc29UaW1lOiBcInouaXNvLnRpbWUoKVwiLFxuICAgIGlzb0RhdGV0aW1lOiBcInouaXNvLmRhdGV0aW1lKClcIixcbiAgICBpc29EdXJhdGlvbjogXCJ6Lmlzby5kdXJhdGlvbigpXCIsXG4gIH07XG5cbiAgLy8gaGFzaCDtj6zrp7fsnYAgei5oYXNoKFwiYWxnb3JpdGhtXCIpIO2Yle2DnFxuICBjb25zdCBoYXNoRm9ybWF0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBoYXNoTWQ1OiAnei5oYXNoKFwibWQ1XCIpJyxcbiAgICBoYXNoU2hhMTogJ3ouaGFzaChcInNoYTFcIiknLFxuICAgIGhhc2hTaGEyNTY6ICd6Lmhhc2goXCJzaGEyNTZcIiknLFxuICAgIGhhc2hTaGEzODQ6ICd6Lmhhc2goXCJzaGEzODRcIiknLFxuICAgIGhhc2hTaGE1MTI6ICd6Lmhhc2goXCJzaGE1MTJcIiknLFxuICB9O1xuXG4gIGlmIChmb3JtYXQgaW4gaXNvRm9ybWF0cykge1xuICAgIHJldHVybiBpc29Gb3JtYXRzW2Zvcm1hdF07XG4gIH1cblxuICBpZiAoZm9ybWF0IGluIGhhc2hGb3JtYXRzKSB7XG4gICAgcmV0dXJuIGhhc2hGb3JtYXRzW2Zvcm1hdF07XG4gIH1cblxuICAvLyDquLDrs7gg7Y+s66e37J2AIHoueHh4KCkg7ZiV7YOcIChab2QgNClcbiAgcmV0dXJuIGB6LiR7Zm9ybWF0fSgpYDtcbn1cblxuLyoqXG4gKiB6b2RGb3JtYXTsnYQgWm9kIDQg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIFpvZCA07JeQ7ISc64qUIHouZW1haWwoKSwgei51dWlkKCkg65OxIOuPheumveyggeyduCDtlajsiJgg7ZiV7YOc66W8IOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gem9kRm9ybWF0VG9UeXBlKGZvcm1hdDogWm9kU3RyaW5nRm9ybWF0KTogei5ab2RUeXBlIHtcbiAgLy8gSVNPIO2PrOunt+ydgCB6Lmlzby54eHgoKSDtmJXtg5xcbiAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICBjYXNlIFwiaXNvRGF0ZVwiOlxuICAgICAgcmV0dXJuIHouaXNvLmRhdGUoKTtcbiAgICBjYXNlIFwiaXNvVGltZVwiOlxuICAgICAgcmV0dXJuIHouaXNvLnRpbWUoKTtcbiAgICBjYXNlIFwiaXNvRGF0ZXRpbWVcIjpcbiAgICAgIHJldHVybiB6Lmlzby5kYXRldGltZSgpO1xuICAgIGNhc2UgXCJpc29EdXJhdGlvblwiOlxuICAgICAgcmV0dXJuIHouaXNvLmR1cmF0aW9uKCk7XG4gICAgLy8gaGFzaCDtj6zrp7fsnYAgei5oYXNoKFwiYWxnb3JpdGhtXCIpIO2Yle2DnFxuICAgIGNhc2UgXCJoYXNoTWQ1XCI6XG4gICAgICByZXR1cm4gei5oYXNoKFwibWQ1XCIpO1xuICAgIGNhc2UgXCJoYXNoU2hhMVwiOlxuICAgICAgcmV0dXJuIHouaGFzaChcInNoYTFcIik7XG4gICAgY2FzZSBcImhhc2hTaGEyNTZcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGEyNTZcIik7XG4gICAgY2FzZSBcImhhc2hTaGEzODRcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGEzODRcIik7XG4gICAgY2FzZSBcImhhc2hTaGE1MTJcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGE1MTJcIik7XG4gICAgLy8g6riw67O4IO2PrOunt+ydgCB6Lnh4eCgpIO2Yle2DnCAoWm9kIDQpXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAoeiBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsICgpID0+IHouWm9kVHlwZT4pW2Zvcm1hdF0oKTtcbiAgfVxufVxuXG4vKipcbiAqIFpvZCDtg4DsnoUgSUTroZzrtoDthLAg64+Z7KCB7Jy866GcIFpvZCDsiqTtgqTrp4jrpbwg66Gc65Oc7ZWp64uI64ukLlxuICog64K07J6lIO2DgOyehShCVUlMVF9JTl9UWVBFX0lEUynsnYAg67CU66GcIOuwmO2ZmO2VmOqzoCxcbiAqIOq3uCDsmbjripQgZGlzdCDrlJTroInthqDrpqzsl5DshJwgRVNN7Jy866GcIGltcG9ydO2VmOyXrCDqsIDsoLjsmLXri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRab2RUeXBlQnlJZCh6b2RUeXBlSWQ6IHN0cmluZyk6IFByb21pc2U8ei5ab2RUeXBlQW55PiB7XG4gIC8vIOuCtOyepSDtg4DsnoUg7LKY66asXG4gIGlmICgoQlVJTFRfSU5fVFlQRV9JRFMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHpvZFR5cGVJZCkpIHtcbiAgICBjb25zdCBidWlsdEluVHlwZSA9IEJVSUxUX0lOX1RZUEVTW3pvZFR5cGVJZCBhcyBrZXlvZiB0eXBlb2YgQlVJTFRfSU5fVFlQRVNdO1xuICAgIGlmICghYnVpbHRJblR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg64K07J6lIO2DgOyehSAke3pvZFR5cGVJZH3snZgg7Iqk7YKk66eI6rCAIOygleydmOuQmOyngCDslYrslZjsirXri4jri6RgKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWx0SW5UeXBlLnNjaGVtYS5kZXNjcmliZSh6b2RUeXBlSWQpO1xuICB9XG5cbiAgLy8g7ZSE66Gc7KCd7Yq47JeQ7IScIOygleydmO2VnCDtg4DsnoUg64+Z7KCBIOuhnOuTnFxuICBjb25zdCBtb2R1bGVQYXRoID0gRW50aXR5TWFuYWdlci5nZXRNb2R1bGVQYXRoKHpvZFR5cGVJZCk7XG4gIGNvbnN0IG1vZHVsZUFic1BhdGggPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIHJ1bnRpbWVQYXRoKGBkaXN0L2FwcGxpY2F0aW9uLyR7bW9kdWxlUGF0aH0uanNgKSxcbiAgKTtcbiAgY29uc3QgaW1wb3J0VXJsID0gY3JlYXRlSW1wb3J0VXJsKG1vZHVsZUFic1BhdGgpO1xuICBjb25zdCBpbXBvcnRlZCA9IGF3YWl0IGltcG9ydChpbXBvcnRVcmwpO1xuXG4gIGlmICghaW1wb3J0ZWRbem9kVHlwZUlkXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCB6b2RUeXBlSWQgJHt6b2RUeXBlSWR9YCk7XG4gIH1cbiAgcmV0dXJuIGltcG9ydGVkW3pvZFR5cGVJZF0uZGVzY3JpYmUoem9kVHlwZUlkKTtcbn1cblxuLyoqXG4gKiBFbnRpdHlQcm9w7J2EIFpvZCDtg4DsnoXsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICog6rCBIHByb3DsnZgg7YOA7J6F7JeQIOuUsOudvCDsoIHsoIjtlZwgWm9kIHZhbGlkYXRvcuulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9wVG9ab2RUeXBlKHByb3A6IEVudGl0eVByb3ApOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICBsZXQgem9kVHlwZTogei5ab2RUeXBlQW55ID0gei51bmtub3duKCk7XG4gIGlmIChpc0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0VudW1TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSAoYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCkpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICB6b2RUeXBlID0gem9kRm9ybWF0VG9UeXBlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCAmJiBcIm1heFwiIGluIHpvZFR5cGUpIHtcbiAgICAgICAgem9kVHlwZSA9ICh6b2RUeXBlIGFzIHouWm9kU3RyaW5nKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0cmluZ0FycmF5UHJvcChwcm9wKSkge1xuICAgIGxldCBlbGVtZW50VHlwZTogei5ab2RUeXBlO1xuICAgIGlmIChwcm9wLnpvZEZvcm1hdCkge1xuICAgICAgZWxlbWVudFR5cGUgPSB6b2RGb3JtYXRUb1R5cGUocHJvcC56b2RGb3JtYXQpO1xuICAgICAgaWYgKHByb3AubGVuZ3RoICYmIFwibWF4XCIgaW4gZWxlbWVudFR5cGUpIHtcbiAgICAgICAgZWxlbWVudFR5cGUgPSAoZWxlbWVudFR5cGUgYXMgei5ab2RTdHJpbmcpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgZWxlbWVudFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRUeXBlID0gei5zdHJpbmcoKTtcbiAgICB9XG4gICAgem9kVHlwZSA9IGVsZW1lbnRUeXBlLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5udW1iZXIoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5ib29sZWFuKCk7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYm9vbGVhbigpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmRhdGUoKTtcbiAgfSBlbHNlIGlmIChpc0RhdGVBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5kYXRlKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoudXVpZCgpO1xuICB9IGVsc2UgaWYgKGlzVXVpZEFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnV1aWQoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzSnNvblByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNTZWFyY2hUZXh0UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmFycmF5KHoubnVtYmVyKCkpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYXJyYXkoei5hcnJheSh6Lm51bWJlcigpKSk7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICAvLyBGSyDtg4DsnoXsnYQg7LC47KGwIOyXlO2LsO2LsCBQSyDtg4DsnoXsl5Ag65Sw6528IOqysOyglVxuICAgICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocHJvcC53aXRoKTtcbiAgICAgIGNvbnN0IHBrVHlwZSA9IHJlbEVudGl0eS5nZXRQa1R5cGUoKTtcbiAgICAgIGlmIChwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIikge1xuICAgICAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3DsnYQgem9kVHlwZeycvOuhnCDrs4DtmZjtlZjripTrjbAg7Iuk7YyoICR7cHJvcH19YCk7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICB6b2RUeXBlID0gKHpvZFR5cGUgYXMgei5ab2ROdW1iZXIpLm5vbm5lZ2F0aXZlKCk7XG4gIH1cbiAgaWYgKHByb3AubnVsbGFibGUpIHtcbiAgICB6b2RUeXBlID0gem9kVHlwZS5udWxsYWJsZSgpO1xuICB9XG5cbiAgcmV0dXJuIHpvZFR5cGU7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6FIOygleydmCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BUb1pvZFR5cGVEZWYocHJvcDogRW50aXR5UHJvcCwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgc3RtdDogc3RyaW5nO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmludCgpYDtcbiAgfSBlbHNlIGlmIChpc0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5pbnQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYmlnaW50KClgO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJpZ2ludCgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzRW51bVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtwcm9wLmlkfWA7XG4gICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9LmFycmF5KClgO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZ1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBpZiAocHJvcC56b2RGb3JtYXQpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB6b2RGb3JtYXRUb0NvZGUocHJvcC56b2RGb3JtYXQpO1xuICAgICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke2Jhc2V9Lm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpLm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICBjb25zdCBiYXNlID0gem9kRm9ybWF0VG9Db2RlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtiYXNlfS5tYXgoJHtwcm9wLmxlbmd0aH0pLmFycmF5KClgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX0uYXJyYXkoKWA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkubWF4KCR7cHJvcC5sZW5ndGh9KS5hcnJheSgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTnVtYmVyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpYDtcbiAgfSBlbHNlIGlmIChpc051bWJlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmRhdGUoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouZGF0ZSgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5ib29sZWFuKClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJvb2xlYW4oKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoudXVpZCgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei51dWlkKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNKc29uUHJvcChwcm9wKSkge1xuICAgIC8vIOuCtOyepSDtg4DsnoXsnbgg6rK97JqwIOyKpO2CpOuniCDsnbTrpoTsnLzroZwg67OA7ZmYXG4gICAgaWYgKChCVUlMVF9JTl9UWVBFX0lEUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMocHJvcC5pZCkpIHtcbiAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBwcm9wLmlkID09PSBcIlNvbmFtdUZpbGVcIiA/IFwiU29uYW11RmlsZVNjaGVtYVwiIDogXCJTb25hbXVGaWxlQXJyYXlTY2hlbWFcIjtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3NjaGVtYU5hbWV9YDtcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChzY2hlbWFOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1NlYXJjaFRleHRQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKClgO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmFycmF5KHoubnVtYmVyKCkpYDtcbiAgfSBlbHNlIGlmIChpc1ZlY3RvckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmFycmF5KHouYXJyYXkoei5udW1iZXIoKSkpYDtcbiAgfSBlbHNlIGlmIChpc1RzVmVjdG9yUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpYDtcbiAgfSBlbHNlIGlmIChpc1ZpcnR1YWxQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICAvLyBGSyBab2Qg7YOA7J6F7J2EIOywuOyhsCDsl5Tti7Dti7AgUEsg7YOA7J6F7JeQIOuUsOudvCDqsrDsoJVcbiAgICAgIGNvbnN0IHJlbEVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHByb3Aud2l0aCk7XG4gICAgICBjb25zdCBwa1R5cGUgPSByZWxFbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgICBpZiAocGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCIpIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX1faWQ6IHouc3RyaW5nKClgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX1faWQ6IHouaW50KClgO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyDqt7jsmbggcmVsYXRpb24g7LyA7J207IqkIOygnOyZuFxuICAgICAgcmV0dXJuIGAvLyAke3Byb3AubmFtZX06ICR7cHJvcC5yZWxhdGlvblR5cGV9ICR7cHJvcC53aXRofWA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIi8vIHVuYWJsZSB0byByZXNvbHZlXCI7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICBzdG10ICs9IFwiLm5vbm5lZ2F0aXZlKClcIjtcbiAgfVxuICBpZiAocHJvcC5udWxsYWJsZSkge1xuICAgIHN0bXQgKz0gXCIubnVsbGFibGUoKVwiO1xuICB9XG5cbiAgLy8gbnVtZXJpYyDtg4DsnoXsnZgg6rK97JqwIG51bGxhYmxlIOydtO2bhOyXkCBtZXRhIOy2lOqwgCAo66mU7YOA642w7J207YSw6rCAIOy1nOyDgeychCDroIjrsqjsl5Ag7J6I7Ja07JW8IO2VqClcbiAgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkgfHwgaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCArPSAnLm1ldGEoeyBTb25hbXVQcm9wVHlwZTogXCJudW1lcmljXCIgfSknO1xuICB9XG5cbiAgcmV0dXJuIGAke3N0bXR9LGA7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcE5vZGXrpbwgWm9kIO2DgOyehSDsoJXsnZgg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBwbGFpbiwgYXJyYXksIG9iamVjdCDrhbjrk5wg7YOA7J6F7J2EIOyerOq3gOyggeycvOuhnCDsspjrpqztlZjsl6wg7KSR7LKpIOq1rOyhsOulvCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcInBsYWluXCIpIHtcbiAgICByZXR1cm4gcHJvcFRvWm9kVHlwZURlZihwcm9wTm9kZS5wcm9wLCBpbmplY3RJbXBvcnRLZXlzKTtcbiAgfSBlbHNlIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5hcnJheSh6Lm9iamVjdCh7XCIsXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlblxuICAgICAgICAubWFwKChjaGlsZFByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihjaGlsZFByb3BOb2RlLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIiksXG4gICAgICBcIlwiLFxuICAgICAgXCJ9KSksXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9IGVsc2UgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgcHJvcE5vZGUuY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoY2hpbGRQcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYoY2hpbGRQcm9wTm9kZSwgaW5qZWN0SW1wb3J0S2V5cykpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgXCJcIixcbiAgICAgIGB9KSR7cHJvcE5vZGUucHJvcD8ubnVsbGFibGUgPyBcIi5udWxsYWJsZSgpXCIgOiBcIlwifSxgLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvVHNUeXBlRGVmKHp0OiB6LlpvZFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHp0LmRlZi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgIGNhc2UgXCJhbnlcIjpcbiAgICBjYXNlIFwidW5rbm93blwiOlxuICAgIGNhc2UgXCJuZXZlclwiOlxuICAgICAgcmV0dXJuIHp0LmRlZi50eXBlO1xuICAgIGNhc2UgXCJudWxsYWJsZVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigoenQgYXMgQW55Wm9kTnVsbGFibGUpLmRlZi5pbm5lclR5cGUpfSB8IG51bGxgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICByZXR1cm4gem9kVHlwZVRvVHNUeXBlRGVmKCh6dCBhcyBBbnlab2REZWZhdWx0KS5kZWYuaW5uZXJUeXBlKTtcbiAgICBjYXNlIFwicmVjb3JkXCI6IHtcbiAgICAgIGNvbnN0IHJlY29yZFR5cGUgPSB6dCBhcyBBbnlab2RSZWNvcmQ7XG4gICAgICByZXR1cm4gYHsgWyBrZXk6ICR7em9kVHlwZVRvVHNUeXBlRGVmKHJlY29yZFR5cGUuZGVmLmtleVR5cGUpfSBdOiAke3pvZFR5cGVUb1RzVHlwZURlZihyZWNvcmRUeXBlLmRlZi52YWx1ZVR5cGUpfX1gO1xuICAgIH1cbiAgICBjYXNlIFwibGl0ZXJhbFwiOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oKHp0IGFzIHouWm9kTGl0ZXJhbCkudmFsdWVzKVxuICAgICAgICAubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBgbnVsbGA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBgdW5kZWZpbmVkYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIgfCBcIik7XG4gICAgY2FzZSBcInVuaW9uXCI6XG4gICAgICByZXR1cm4gYCR7KHp0IGFzIEFueVpvZFVuaW9uKS5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4gem9kVHlwZVRvVHNUeXBlRGVmKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiIHwgXCIpfWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIHJldHVybiBgJHsoenQgYXMgei5ab2RFbnVtKS5vcHRpb25zLm1hcCgodmFsKSA9PiBgXCIke3ZhbH1cImApLmpvaW4oXCIgfCBcIil9YDtcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZEFycmF5KS5lbGVtZW50KX1bXWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChzaGFwZVtrZXldLmRlZi50eXBlID09PSBcIm9wdGlvbmFsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PzogJHt6b2RUeXBlVG9Uc1R5cGVEZWYoc2hhcGVba2V5XS5kZWYuaW5uZXJUeXBlKX0sYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7em9kVHlwZVRvVHNUeXBlRGVmKHNoYXBlW2tleV0pfSxgO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZE9wdGlvbmFsKS5kZWYuaW5uZXJUeXBlKX0gfCB1bmRlZmluZWRgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9ICh6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWwpLmRlZjtcblxuICAgICAgLy8g67mIIHRlbXBsYXRlIGxpdGVyYWzsnYAgc3RyaW5n7Jy866GcIO2PtOuwsVxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgVHlwZVNjcmlwdCDtg4DsnoUg66y47J6Q7Je066GcIOuzgO2ZmFxuICAgICAgY29uc3QgcGFydHMgPSBkZWYucGFydHMubWFwKChwYXJ0OiB1bmtub3duKSA9PiB7XG4gICAgICAgIC8vIOumrO2EsOuftCDqsJIgKHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBudWxsLCB1bmRlZmluZWQpXG4gICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBgJHtwYXJ0fWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUeXBlVG9Uc1R5cGVEZWYocGFydCBhcyB6LlpvZFR5cGUpO1xuICAgICAgICAgIHJldHVybiBgJFxceyR7aW5uZXJUeXBlfX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7Y+067CxXG4gICAgICAgIHJldHVybiBgXFwke3N0cmluZ31gO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgXFxgJHtwYXJ0cy5qb2luKFwiXCIpfVxcYGA7XG4gICAgfVxuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICByZXR1cm4gXCJGaWxlXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvWm9kQ29kZSh6dDogei5ab2RUeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoICh6dC5kZWYudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInouc3RyaW5nKClcIjtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bWJlcigpXCI7XG4gICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgcmV0dXJuIFwiei5iaWdpbnQoKVwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJ6LmJvb2xlYW4oKVwiO1xuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gXCJ6LmRhdGUoKVwiO1xuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bGwoKVwiO1xuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgIHJldHVybiBcInoudW5kZWZpbmVkKClcIjtcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgICByZXR1cm4gXCJ6LmFueSgpXCI7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIHJldHVybiBcInoudW5rbm93bigpXCI7XG4gICAgY2FzZSBcIm5ldmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm5ldmVyKClcIjtcbiAgICBjYXNlIFwibnVsbGFibGVcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyBBbnlab2ROdWxsYWJsZSkuZGVmLmlubmVyVHlwZSl9Lm51bGxhYmxlKClgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6IHtcbiAgICAgIGNvbnN0IHpEZWZhdWx0RGVmID0gKHp0IGFzIEFueVpvZERlZmF1bHQpLmRlZjtcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKHpEZWZhdWx0RGVmLmlubmVyVHlwZSl9LmRlZmF1bHQoJHt6RGVmYXVsdERlZi5kZWZhdWx0VmFsdWV9KWA7XG4gICAgfVxuICAgIGNhc2UgXCJyZWNvcmRcIjoge1xuICAgICAgY29uc3QgelJlY29yZERlZiA9ICh6dCBhcyBBbnlab2RSZWNvcmQpLmRlZjtcbiAgICAgIHJldHVybiBgei5yZWNvcmQoJHt6b2RUeXBlVG9ab2RDb2RlKHpSZWNvcmREZWYua2V5VHlwZSl9LCAke3pvZFR5cGVUb1pvZENvZGUoXG4gICAgICAgIHpSZWNvcmREZWYudmFsdWVUeXBlLFxuICAgICAgKX0pYDtcbiAgICB9XG4gICAgY2FzZSBcImxpdGVyYWxcIjoge1xuICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKCh6dCBhcyB6LlpvZExpdGVyYWw8c3RyaW5nIHwgbnVtYmVyPikudmFsdWVzKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gYG51bGxgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gYHVuZGVmaW5lZGA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBgei5saXRlcmFsKCR7aXRlbXNbMF19KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYHoubGl0ZXJhbChbJHtpdGVtcy5qb2luKFwiLCBcIil9XSlgO1xuICAgIH1cbiAgICBjYXNlIFwidW5pb25cIjpcbiAgICAgIHJldHVybiBgei51bmlvbihbJHsoenQgYXMgQW55Wm9kVW5pb24pLmRlZi5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbjogei5ab2RUeXBlKSA9PiB6b2RUeXBlVG9ab2RDb2RlKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiLFwiKX1dKWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIC8vIE5PVEU6IHouZW51bShbXCJBXCIsIFwiQlwiXSnrj4Qgei5lbnVtKHsgQTogXCJBXCIsIEI6IFwiQlwiIH0p66GcIOyymOumrOuQqC5cbiAgICAgIHJldHVybiBgei5lbnVtKHske09iamVjdC5lbnRyaWVzKCh6dCBhcyB6LlpvZEVudW0pLmRlZi5lbnRyaWVzKVxuICAgICAgICAubWFwKChba2V5LCB2YWxdKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IGAke2tleX06IFwiJHt2YWx9XCJgIDogYCR7a2V5fTogJHt2YWx9YCkpXG4gICAgICAgIC5qb2luKFwiLCBcIil9fSlgO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIGB6LmFycmF5KCR7em9kVHlwZVRvWm9kQ29kZSgoenQgYXMgei5ab2RBcnJheTx6LlpvZFR5cGU+KS5kZWYuZWxlbWVudCl9KWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ6Lm9iamVjdCh7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4gYCR7a2V5fTogJHt6b2RUeXBlVG9ab2RDb2RlKHNoYXBlW2tleV0pfSxgKSxcbiAgICAgICAgXCJ9KVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUpfS5vcHRpb25hbCgpYDtcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIGB6LmZpbGUoKWA7XG4gICAgY2FzZSBcInRlbXBsYXRlX2xpdGVyYWxcIjoge1xuICAgICAgY29uc3QgZGVmID0gKHp0IGFzIEFueVpvZFRlbXBsYXRlTGl0ZXJhbCkuZGVmO1xuXG4gICAgICAvLyDruYggdGVtcGxhdGUgbGl0ZXJhbFxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJ6LnRlbXBsYXRlTGl0ZXJhbChbXSlcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGRlZi5wYXJ0cy5tYXAoKHBhcnQ6IHVua25vd24pID0+IHtcbiAgICAgICAgLy8g66y47J6Q7Je0IOumrO2EsOuftFxuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHtwYXJ0fVwiYDtcbiAgICAgICAgfVxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICByZXR1cm4gem9kVHlwZVRvWm9kQ29kZShwYXJ0IGFzIHouWm9kVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDtj7TrsLFcbiAgICAgICAgcmV0dXJuIFwiei5zdHJpbmcoKVwiO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgei50ZW1wbGF0ZUxpdGVyYWwoWyR7cGFydHMuam9pbihcIiwgXCIpfV0pYDtcbiAgICB9XG4gICAgY2FzZSBcImludGVyc2VjdGlvblwiOiB7XG4gICAgICBjb25zdCB6SW50ZXJzZWN0aW9uRGVmID0gKHp0IGFzIHouWm9kSW50ZXJzZWN0aW9uPHouWm9kVHlwZSwgei5ab2RUeXBlPikuZGVmO1xuICAgICAgcmV0dXJuIGB6LmludGVyc2VjdGlvbigke3pvZFR5cGVUb1pvZENvZGUoekludGVyc2VjdGlvbkRlZi5sZWZ0KX0sICR7em9kVHlwZVRvWm9kQ29kZSh6SW50ZXJzZWN0aW9uRGVmLnJpZ2h0KX0pYDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyerOq3gOyggeycvOuhnCDspJHssqnrkJwg7YOA7J6F65Ok7J2EIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueSxcbiAgYmFzZUtleTogc3RyaW5nID0gXCJyb290XCIsXG4pOiBSZW5kZXJpbmdOb2RlIHtcbiAgY29uc3QgZGVmID0ge1xuICAgIG5hbWU6IGJhc2VLZXksXG4gICAgbGFiZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoYmFzZUtleSwgZmFsc2UpLFxuICAgIHpvZFR5cGUsXG4gIH07XG5cbiAgLyoqXG4gICAqIOy8gOydtOyKpCDsspjrpqwg7Iic7IScXG4gICAqXG4gICAqIDEuIO2KueyImCDsvIDsnbTsiqQgKGRlc2NyaXB0aW9uIOq4sOuwmClcbiAgICogICAgLSBTb25hbXVGaWxlL1NvbmFtdUZpbGVbXSA6IHoub2JqZWN0L3ouYXJyYXnsnbTsp4Drp4wg7YyM7J28IOyXheuhnOuTnOyaqSDrgrTsnqUg7YOA7J6FXG4gICAqXG4gICAqIDIuIOydvOuwmCDsvIDsnbTsiqQgKGluc3RhbmNlb2Yg6riw67CYKVxuICAgKiAgICAtIHouWm9kT2JqZWN0IDog7J2867CYIOqwneyytFxuICAgKiAgICAtIHouWm9kQXJyYXkgOiDsnbzrsJgg67Cw7Je0XG4gICAqICAgICAgLSB2ZWN0b3IgOiB6LmFycmF5KHoubnVtYmVyKeydtOyngOunjCDrhKTsnbTrsI0g6riw67CY7Jy866GcIOuyoe2EsCDsnoTrsqDrlKlcbiAgICogICAgICAtIOydvOuwmCDrsLDsl7QgOiDqt7gg7Jm4XG4gICAqICAgIC0gei5ab2RVbmlvbiwgei5ab2RPcHRpb25hbCwgei5ab2ROdWxsYWJsZSA6IOycoO2LuOumrO2LsCDtg4DsnoVcbiAgICogICAgLSDquLDtg4AgOiByZXNvbHZlUmVuZGVyVHlwZSgp7Jy866GcIOyymOumrFxuICAgKi9cblxuICAvLyDtirnsiJgg7LyA7J207IqkOiBTb25hbXVGaWxlW10g7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlW11cIikge1xuICAgIHJldHVybiB7IC4uLmRlZiwgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIiB9O1xuICB9XG5cbiAgLy8g7Yq57IiYIOy8gOydtOyKpDogU29uYW11RmlsZSDri6jsnbwg7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlXCIpIHtcbiAgICByZXR1cm4geyAuLi5kZWYsIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlXCIgfTtcbiAgfVxuXG4gIC8vIOydvOuwmCDsvIDsnbTsiqQ6IFpvZE9iamVjdCDssrTtgaxcbiAgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9iamVjdCkge1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSBPYmplY3Qua2V5cyh6b2RUeXBlLnNoYXBlKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNvbHVtbktleXMubWFwKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IGlubmVyVHlwZSA9IHpvZFR5cGUuc2hhcGVba2V5XTtcbiAgICAgIHJldHVybiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKGlubmVyVHlwZSwga2V5KTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICBjb25zdCBpbm5lclR5cGUgPSAoem9kVHlwZSBhcyB6LlpvZEFycmF5PHouWm9kVHlwZUFueT4pLmRlZi5lbGVtZW50O1xuICAgIC8vIHZlY3RvciDtg4DsnoUg7YyQ67OEOiBudW1iZXIg67Cw7Je07J2066m07IScIGVtYmVkZGluZywgdmVjdG9yIOuTseydmCDsnbTrpoTsnYQg6rCA7KeEIOqyveyasFxuICAgIGlmIChcbiAgICAgIGlubmVyVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyICYmXG4gICAgICAoYmFzZUtleS5pbmNsdWRlcyhcImVtYmVkZGluZ1wiKSB8fCBiYXNlS2V5LmluY2x1ZGVzKFwidmVjdG9yXCIpKVxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICByZW5kZXJUeXBlOiBcInZlY3RvclwiLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGVsZW1lbnQ6IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgY29uc3Qgb3B0aW9uTm9kZXMgPSAoem9kVHlwZSBhcyB6LlpvZFVuaW9uPHouWm9kVHlwZVtdPikuZGVmLm9wdGlvbnMubWFwKChvcHQpID0+XG4gICAgICB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKG9wdCwgYmFzZUtleSksXG4gICAgKTtcbiAgICAvLyBUT0RPOiBab2RVbmlvbuydtCDrk6TslrTsnojripQg6rK97JqwIO2VuOuTpOungVxuICAgIHJldHVybiBvcHRpb25Ob2Rlc1swXTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPcHRpb25hbCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi56b2RUeXBlVG9SZW5kZXJpbmdOb2RlKCh6b2RUeXBlIGFzIHouWm9kT3B0aW9uYWw8ei5ab2RUeXBlPikuZGVmLmlubmVyVHlwZSwgYmFzZUtleSksXG4gICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoKHpvZFR5cGUgYXMgei5ab2ROdWxsYWJsZTx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IHJlc29sdmVSZW5kZXJUeXBlKGJhc2VLZXksIHpvZFR5cGUpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F6rO8IO2CpCDsnbTrpoTsnLzroZzrtoDthLAg7KCB7KCI7ZWcIFJlbmRlclR5cGXsnYQg6rKw7KCV7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiByZXNvbHZlUmVuZGVyVHlwZShrZXk6IHN0cmluZywgem9kVHlwZTogei5ab2RUeXBlQW55KTogUmVuZGVyaW5nTm9kZVtcInJlbmRlclR5cGVcIl0ge1xuICBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGF0ZSkge1xuICAgIHJldHVybiBcImRhdGV0aW1lXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouY29yZS4kWm9kU3RyaW5nKSB7XG4gICAgLy8gTk9URTogei5ab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWY66m0IHoudXJsKCksIHouZW1haWwoKSDrk7HsnZgg7YOA7J6F7JeQ7IScIOusuOygnOqwgCDsg53quLDrr4DroZwgei5jb3JlLiRab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWoXG4gICAgLy8gRklYTUU6IGVtYWls7J2064KYIHVybCDtg4DsnoUg65Ox7JeQIOuMgO2VnCDsspjrpqzqsIAg7ZWE7JqU7ZWoXG4gICAgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU1FMRGF0ZVRpbWVTdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGV0aW1lXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJkYXRlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZGF0ZVwiO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcImlkXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZy1pZFwiO1xuICAgIH0gZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiX2lkXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZmtfaWRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcikge1xuICAgIGlmIChrZXkgPT09IFwiaWRcIikge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLWlkXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJfaWRcIikpIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1ma19pZFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItcGxhaW5cIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQm9vbGVhbikge1xuICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RFbnVtKSB7XG4gICAgcmV0dXJuIFwiZW51bXNcIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RSZWNvcmQpIHtcbiAgICByZXR1cm4gXCJyZWNvcmRcIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RBbnkgfHwgem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5rbm93bikge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTGl0ZXJhbCkge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFRlbXBsYXRlTGl0ZXJhbCkge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUuZGVmLnR5cGUgPT09IFwiY3VzdG9tXCIpIHtcbiAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYO2DgOyehSDtjIzsi7Eg67aI6rCAICR7a2V5fSAke3pvZFR5cGUuZGVmLnR5cGV9YCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtHQSxTQUFTLGdCQUFn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
|
|
625
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kLWNvbnZlcnRlci5qcyIsIm5hbWVzIjpbImlzb0Zvcm1hdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJoYXNoRm9ybWF0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiIsInoiLCJ6b2RUeXBlOiB6LlpvZFR5cGVBbnkiLCJlbGVtZW50VHlwZTogei5ab2RUeXBlIiwic3RtdDogc3RyaW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL3pvZC1jb252ZXJ0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB6b2QtY29udmVydGVyIOq1rOyEsVxuICogMS4g7Jyg7Yu466as7YuwXG4gKiAgLSBnZXRab2RUeXBlQnlJZFxuICpcbiAqIDIuIFpvZCDtg4DsnoUg67OA7ZmYIChFbnRpdHlQcm9wIC0+IFpvZFR5cGUpXG4gKiAgLSBwcm9wVG9ab2RUeXBlXG4gKlxuICogMy4gRW50aXR5UHJvcC9Ob2RlIC0+IFpvZCDsvZTrk5wg66y47J6Q7Je0XG4gKiAgLSBwcm9wVG9ab2RUeXBlRGVmXG4gKiAgLSBwcm9wTm9kZVRvWm9kVHlwZURlZlxuICpcbiAqIDQuIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66W8IO2VtOuLue2VmOuKlCBab2Qg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZggKFpvZFR5cGUgLT4gWm9kQ29kZSlcbiAqICAtIHpvZFR5cGVUb1pvZENvZGVcbiAqXG4gKiA1LiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmCAoWm9kVHlwZSAtPiBSZW5kZXJpbmdOb2RlKVxuICogIC0gem9kVHlwZVRvUmVuZGVyaW5nTm9kZVxuICogIC0gcmVzb2x2ZVJlbmRlclR5cGVcbiAqL1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzQmlnSW50ZWdlckFycmF5UHJvcCxcbiAgaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcCxcbiAgaXNCb29sZWFuQXJyYXlQcm9wLFxuICBpc0Jvb2xlYW5TaW5nbGVQcm9wLFxuICBpc0RhdGVBcnJheVByb3AsXG4gIGlzRGF0ZVNpbmdsZVByb3AsXG4gIGlzRW51bUFycmF5UHJvcCxcbiAgaXNFbnVtU2luZ2xlUHJvcCxcbiAgaXNJbnRlZ2VyQXJyYXlQcm9wLFxuICBpc0ludGVnZXJTaW5nbGVQcm9wLFxuICBpc0pzb25Qcm9wLFxuICBpc051bWJlckFycmF5UHJvcCxcbiAgaXNOdW1iZXJTaW5nbGVQcm9wLFxuICBpc051bWVyaWNBcnJheVByb3AsXG4gIGlzTnVtZXJpY1NpbmdsZVByb3AsXG4gIGlzT25lVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzUmVsYXRpb25Qcm9wLFxuICBpc1NlYXJjaFRleHRQcm9wLFxuICBpc1N0cmluZ0FycmF5UHJvcCxcbiAgaXNTdHJpbmdTaW5nbGVQcm9wLFxuICBpc1RzVmVjdG9yUHJvcCxcbiAgaXNVdWlkQXJyYXlQcm9wLFxuICBpc1V1aWRTaW5nbGVQcm9wLFxuICBpc1ZlY3RvckFycmF5UHJvcCxcbiAgaXNWZWN0b3JTaW5nbGVQcm9wLFxuICBpc1ZpcnR1YWxQcm9wLFxuICBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gIFNvbmFtdUZpbGVTY2hlbWEsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbnRpdHlQcm9wLFxuICB0eXBlIEVudGl0eVByb3BOb2RlLFxuICB0eXBlIFJlbmRlcmluZ05vZGUsXG4gIHR5cGUgWm9kU3RyaW5nRm9ybWF0LFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUltcG9ydFVybCB9IGZyb20gXCIuLi91dGlscy9lc20tdXRpbHNcIjtcbmltcG9ydCB7IHJ1bnRpbWVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kUmVjb3JkID0gei5ab2RSZWNvcmQ8ei5ab2RTdHJpbmcgfCB6LlpvZE51bWJlciB8IHouWm9kU3ltYm9sLCB6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RPYmplY3QgPSB6LlpvZE9iamVjdDtcbnR5cGUgQW55Wm9kTnVsbGFibGUgPSB6LlpvZE51bGxhYmxlPHouWm9kVHlwZT47XG50eXBlIEFueVpvZERlZmF1bHQgPSB6LlpvZERlZmF1bHQ8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kVW5pb24gPSB6LlpvZFVuaW9uPHouWm9kVHlwZVtdPjtcbnR5cGUgQW55Wm9kQXJyYXkgPSB6LlpvZEFycmF5PHouWm9kVHlwZT47XG50eXBlIEFueVpvZE9wdGlvbmFsID0gei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RUZW1wbGF0ZUxpdGVyYWwgPSB6LlpvZFRlbXBsYXRlTGl0ZXJhbDtcblxuLyoqXG4gKiDrgrTsnqUg7YOA7J6FIOygleydmCAoWm9kIOyKpO2CpOuniCArIFVJIOugjOuNlOungSDtg4DsnoUpXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMVF9JTl9UWVBFUyA9IHtcbiAgU29uYW11RmlsZToge1xuICAgIHNjaGVtYTogU29uYW11RmlsZVNjaGVtYSxcbiAgICByZW5kZXJUeXBlOiBcImpzb24tc29uYW11ZmlsZVwiLFxuICAgIHNjaGVtYU5hbWU6IFwiU29uYW11RmlsZVNjaGVtYVwiLFxuICB9LFxuICBcIlNvbmFtdUZpbGVbXVwiOiB7XG4gICAgc2NoZW1hOiBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gICAgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIixcbiAgICBzY2hlbWFOYW1lOiBcIlNvbmFtdUZpbGVBcnJheVNjaGVtYVwiLFxuICB9LFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiB6b2RGb3JtYXTsnYQgWm9kIDQg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBab2QgNOyXkOyEnOuKlCB6LmVtYWlsKCksIHoudXVpZCgpIOuTsSDrj4Xrpr3soIHsnbgg7ZWo7IiYIO2Yle2DnOulvCDsgqzsmqntlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHpvZEZvcm1hdFRvQ29kZShmb3JtYXQ6IFpvZFN0cmluZ0Zvcm1hdCk6IHN0cmluZyB7XG4gIC8vIElTTyDtj6zrp7fsnYAgei5pc28ueHh4KCkg7ZiV7YOcXG4gIGNvbnN0IGlzb0Zvcm1hdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgaXNvRGF0ZTogXCJ6Lmlzby5kYXRlKClcIixcbiAgICBpc29UaW1lOiBcInouaXNvLnRpbWUoKVwiLFxuICAgIGlzb0RhdGV0aW1lOiBcInouaXNvLmRhdGV0aW1lKClcIixcbiAgICBpc29EdXJhdGlvbjogXCJ6Lmlzby5kdXJhdGlvbigpXCIsXG4gIH07XG5cbiAgLy8gaGFzaCDtj6zrp7fsnYAgei5oYXNoKFwiYWxnb3JpdGhtXCIpIO2Yle2DnFxuICBjb25zdCBoYXNoRm9ybWF0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBoYXNoTWQ1OiAnei5oYXNoKFwibWQ1XCIpJyxcbiAgICBoYXNoU2hhMTogJ3ouaGFzaChcInNoYTFcIiknLFxuICAgIGhhc2hTaGEyNTY6ICd6Lmhhc2goXCJzaGEyNTZcIiknLFxuICAgIGhhc2hTaGEzODQ6ICd6Lmhhc2goXCJzaGEzODRcIiknLFxuICAgIGhhc2hTaGE1MTI6ICd6Lmhhc2goXCJzaGE1MTJcIiknLFxuICB9O1xuXG4gIGlmIChmb3JtYXQgaW4gaXNvRm9ybWF0cykge1xuICAgIHJldHVybiBpc29Gb3JtYXRzW2Zvcm1hdF07XG4gIH1cblxuICBpZiAoZm9ybWF0IGluIGhhc2hGb3JtYXRzKSB7XG4gICAgcmV0dXJuIGhhc2hGb3JtYXRzW2Zvcm1hdF07XG4gIH1cblxuICAvLyDquLDrs7gg7Y+s66e37J2AIHoueHh4KCkg7ZiV7YOcIChab2QgNClcbiAgcmV0dXJuIGB6LiR7Zm9ybWF0fSgpYDtcbn1cblxuLyoqXG4gKiB6b2RGb3JtYXTsnYQgWm9kIDQg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIFpvZCA07JeQ7ISc64qUIHouZW1haWwoKSwgei51dWlkKCkg65OxIOuPheumveyggeyduCDtlajsiJgg7ZiV7YOc66W8IOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gem9kRm9ybWF0VG9UeXBlKGZvcm1hdDogWm9kU3RyaW5nRm9ybWF0KTogei5ab2RUeXBlIHtcbiAgLy8gSVNPIO2PrOunt+ydgCB6Lmlzby54eHgoKSDtmJXtg5xcbiAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICBjYXNlIFwiaXNvRGF0ZVwiOlxuICAgICAgcmV0dXJuIHouaXNvLmRhdGUoKTtcbiAgICBjYXNlIFwiaXNvVGltZVwiOlxuICAgICAgcmV0dXJuIHouaXNvLnRpbWUoKTtcbiAgICBjYXNlIFwiaXNvRGF0ZXRpbWVcIjpcbiAgICAgIHJldHVybiB6Lmlzby5kYXRldGltZSgpO1xuICAgIGNhc2UgXCJpc29EdXJhdGlvblwiOlxuICAgICAgcmV0dXJuIHouaXNvLmR1cmF0aW9uKCk7XG4gICAgLy8gaGFzaCDtj6zrp7fsnYAgei5oYXNoKFwiYWxnb3JpdGhtXCIpIO2Yle2DnFxuICAgIGNhc2UgXCJoYXNoTWQ1XCI6XG4gICAgICByZXR1cm4gei5oYXNoKFwibWQ1XCIpO1xuICAgIGNhc2UgXCJoYXNoU2hhMVwiOlxuICAgICAgcmV0dXJuIHouaGFzaChcInNoYTFcIik7XG4gICAgY2FzZSBcImhhc2hTaGEyNTZcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGEyNTZcIik7XG4gICAgY2FzZSBcImhhc2hTaGEzODRcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGEzODRcIik7XG4gICAgY2FzZSBcImhhc2hTaGE1MTJcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGE1MTJcIik7XG4gICAgLy8g6riw67O4IO2PrOunt+ydgCB6Lnh4eCgpIO2Yle2DnCAoWm9kIDQpXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAoeiBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsICgpID0+IHouWm9kVHlwZT4pW2Zvcm1hdF0oKTtcbiAgfVxufVxuXG4vKipcbiAqIFpvZCDtg4DsnoUgSUTroZzrtoDthLAg64+Z7KCB7Jy866GcIFpvZCDsiqTtgqTrp4jrpbwg66Gc65Oc7ZWp64uI64ukLlxuICog64K07J6lIO2DgOyehShCVUlMVF9JTl9UWVBFX0lEUynsnYAg67CU66GcIOuwmO2ZmO2VmOqzoCxcbiAqIOq3uCDsmbjripQgZGlzdCDrlJTroInthqDrpqzsl5DshJwgRVNN7Jy866GcIGltcG9ydO2VmOyXrCDqsIDsoLjsmLXri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRab2RUeXBlQnlJZCh6b2RUeXBlSWQ6IHN0cmluZyk6IFByb21pc2U8ei5ab2RUeXBlQW55PiB7XG4gIC8vIOuCtOyepSDtg4DsnoUg7LKY66asXG4gIGlmICgoQlVJTFRfSU5fVFlQRV9JRFMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHpvZFR5cGVJZCkpIHtcbiAgICBjb25zdCBidWlsdEluVHlwZSA9IEJVSUxUX0lOX1RZUEVTW3pvZFR5cGVJZCBhcyBrZXlvZiB0eXBlb2YgQlVJTFRfSU5fVFlQRVNdO1xuICAgIGlmICghYnVpbHRJblR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg64K07J6lIO2DgOyehSAke3pvZFR5cGVJZH3snZgg7Iqk7YKk66eI6rCAIOygleydmOuQmOyngCDslYrslZjsirXri4jri6RgKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWx0SW5UeXBlLnNjaGVtYS5kZXNjcmliZSh6b2RUeXBlSWQpO1xuICB9XG5cbiAgLy8g7ZSE66Gc7KCd7Yq47JeQ7IScIOygleydmO2VnCDtg4DsnoUg64+Z7KCBIOuhnOuTnFxuICBjb25zdCBtb2R1bGVQYXRoID0gRW50aXR5TWFuYWdlci5nZXRNb2R1bGVQYXRoKHpvZFR5cGVJZCk7XG4gIGNvbnN0IG1vZHVsZUFic1BhdGggPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIHJ1bnRpbWVQYXRoKGBkaXN0L2FwcGxpY2F0aW9uLyR7bW9kdWxlUGF0aH0uanNgKSxcbiAgKTtcbiAgY29uc3QgaW1wb3J0VXJsID0gY3JlYXRlSW1wb3J0VXJsKG1vZHVsZUFic1BhdGgpO1xuICBjb25zdCBpbXBvcnRlZCA9IGF3YWl0IGltcG9ydChpbXBvcnRVcmwpO1xuXG4gIGlmICghaW1wb3J0ZWRbem9kVHlwZUlkXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCB6b2RUeXBlSWQgJHt6b2RUeXBlSWR9YCk7XG4gIH1cbiAgcmV0dXJuIGltcG9ydGVkW3pvZFR5cGVJZF0uZGVzY3JpYmUoem9kVHlwZUlkKTtcbn1cblxuLyoqXG4gKiBFbnRpdHlQcm9w7J2EIFpvZCDtg4DsnoXsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICog6rCBIHByb3DsnZgg7YOA7J6F7JeQIOuUsOudvCDsoIHsoIjtlZwgWm9kIHZhbGlkYXRvcuulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9wVG9ab2RUeXBlKHByb3A6IEVudGl0eVByb3ApOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICBsZXQgem9kVHlwZTogei5ab2RUeXBlQW55ID0gei51bmtub3duKCk7XG4gIGlmIChpc0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0VudW1TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSAoYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCkpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICB6b2RUeXBlID0gem9kRm9ybWF0VG9UeXBlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCAmJiBcIm1heFwiIGluIHpvZFR5cGUpIHtcbiAgICAgICAgem9kVHlwZSA9ICh6b2RUeXBlIGFzIHouWm9kU3RyaW5nKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0cmluZ0FycmF5UHJvcChwcm9wKSkge1xuICAgIGxldCBlbGVtZW50VHlwZTogei5ab2RUeXBlO1xuICAgIGlmIChwcm9wLnpvZEZvcm1hdCkge1xuICAgICAgZWxlbWVudFR5cGUgPSB6b2RGb3JtYXRUb1R5cGUocHJvcC56b2RGb3JtYXQpO1xuICAgICAgaWYgKHByb3AubGVuZ3RoICYmIFwibWF4XCIgaW4gZWxlbWVudFR5cGUpIHtcbiAgICAgICAgZWxlbWVudFR5cGUgPSAoZWxlbWVudFR5cGUgYXMgei5ab2RTdHJpbmcpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgZWxlbWVudFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRUeXBlID0gei5zdHJpbmcoKTtcbiAgICB9XG4gICAgem9kVHlwZSA9IGVsZW1lbnRUeXBlLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5udW1iZXIoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5ib29sZWFuKCk7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYm9vbGVhbigpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmRhdGUoKTtcbiAgfSBlbHNlIGlmIChpc0RhdGVBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5kYXRlKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoudXVpZCgpO1xuICB9IGVsc2UgaWYgKGlzVXVpZEFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnV1aWQoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzSnNvblByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNTZWFyY2hUZXh0UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmFycmF5KHoubnVtYmVyKCkpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYXJyYXkoei5hcnJheSh6Lm51bWJlcigpKSk7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICAvLyBGSyDtg4DsnoXsnYQg7LC47KGwIOyXlO2LsO2LsCBQSyDtg4DsnoXsl5Ag65Sw6528IOqysOyglVxuICAgICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocHJvcC53aXRoKTtcbiAgICAgIGNvbnN0IHBrVHlwZSA9IHJlbEVudGl0eS5nZXRQa1R5cGUoKTtcbiAgICAgIGlmIChwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIikge1xuICAgICAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3DsnYQgem9kVHlwZeycvOuhnCDrs4DtmZjtlZjripTrjbAg7Iuk7YyoICR7cHJvcH19YCk7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICB6b2RUeXBlID0gKHpvZFR5cGUgYXMgei5ab2ROdW1iZXIpLm5vbm5lZ2F0aXZlKCk7XG4gIH1cbiAgaWYgKHByb3AubnVsbGFibGUpIHtcbiAgICB6b2RUeXBlID0gem9kVHlwZS5udWxsYWJsZSgpO1xuICB9XG5cbiAgcmV0dXJuIHpvZFR5cGU7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6FIOygleydmCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BUb1pvZFR5cGVEZWYocHJvcDogRW50aXR5UHJvcCwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgc3RtdDogc3RyaW5nO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmludCgpYDtcbiAgfSBlbHNlIGlmIChpc0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5pbnQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYmlnaW50KClgO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJpZ2ludCgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzRW51bVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtwcm9wLmlkfWA7XG4gICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9LmFycmF5KClgO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZ1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBpZiAocHJvcC56b2RGb3JtYXQpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB6b2RGb3JtYXRUb0NvZGUocHJvcC56b2RGb3JtYXQpO1xuICAgICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke2Jhc2V9Lm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpLm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICBjb25zdCBiYXNlID0gem9kRm9ybWF0VG9Db2RlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtiYXNlfS5tYXgoJHtwcm9wLmxlbmd0aH0pLmFycmF5KClgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX0uYXJyYXkoKWA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkubWF4KCR7cHJvcC5sZW5ndGh9KS5hcnJheSgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTnVtYmVyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpYDtcbiAgfSBlbHNlIGlmIChpc051bWJlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmRhdGUoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouZGF0ZSgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5ib29sZWFuKClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJvb2xlYW4oKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoudXVpZCgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei51dWlkKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNKc29uUHJvcChwcm9wKSkge1xuICAgIC8vIOuCtOyepSDtg4DsnoXsnbgg6rK97JqwIOyKpO2CpOuniCDsnbTrpoTsnLzroZwg67OA7ZmYXG4gICAgaWYgKChCVUlMVF9JTl9UWVBFX0lEUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMocHJvcC5pZCkpIHtcbiAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBwcm9wLmlkID09PSBcIlNvbmFtdUZpbGVcIiA/IFwiU29uYW11RmlsZVNjaGVtYVwiIDogXCJTb25hbXVGaWxlQXJyYXlTY2hlbWFcIjtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3NjaGVtYU5hbWV9YDtcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChzY2hlbWFOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1NlYXJjaFRleHRQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKClgO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmFycmF5KHoubnVtYmVyKCkpYDtcbiAgfSBlbHNlIGlmIChpc1ZlY3RvckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmFycmF5KHouYXJyYXkoei5udW1iZXIoKSkpYDtcbiAgfSBlbHNlIGlmIChpc1RzVmVjdG9yUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpYDtcbiAgfSBlbHNlIGlmIChpc1ZpcnR1YWxQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICAvLyBGSyBab2Qg7YOA7J6F7J2EIOywuOyhsCDsl5Tti7Dti7AgUEsg7YOA7J6F7JeQIOuUsOudvCDqsrDsoJVcbiAgICAgIGNvbnN0IHJlbEVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHByb3Aud2l0aCk7XG4gICAgICBjb25zdCBwa1R5cGUgPSByZWxFbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgICBpZiAocGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCIpIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX1faWQ6IHouc3RyaW5nKClgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX1faWQ6IHouaW50KClgO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyDqt7jsmbggcmVsYXRpb24g7LyA7J207IqkIOygnOyZuFxuICAgICAgcmV0dXJuIGAvLyAke3Byb3AubmFtZX06ICR7cHJvcC5yZWxhdGlvblR5cGV9ICR7cHJvcC53aXRofWA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIi8vIHVuYWJsZSB0byByZXNvbHZlXCI7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICBzdG10ICs9IFwiLm5vbm5lZ2F0aXZlKClcIjtcbiAgfVxuICBpZiAocHJvcC5udWxsYWJsZSkge1xuICAgIHN0bXQgKz0gXCIubnVsbGFibGUoKVwiO1xuICB9XG5cbiAgLy8gbnVtZXJpYyDtg4DsnoXsnZgg6rK97JqwIG51bGxhYmxlIOydtO2bhOyXkCBtZXRhIOy2lOqwgCAo66mU7YOA642w7J207YSw6rCAIOy1nOyDgeychCDroIjrsqjsl5Ag7J6I7Ja07JW8IO2VqClcbiAgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkgfHwgaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCArPSAnLm1ldGEoeyBTb25hbXVQcm9wVHlwZTogXCJudW1lcmljXCIgfSknO1xuICB9XG5cbiAgcmV0dXJuIGAke3N0bXR9LGA7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcE5vZGXrpbwgWm9kIO2DgOyehSDsoJXsnZgg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBwbGFpbiwgYXJyYXksIG9iamVjdCDrhbjrk5wg7YOA7J6F7J2EIOyerOq3gOyggeycvOuhnCDsspjrpqztlZjsl6wg7KSR7LKpIOq1rOyhsOulvCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcInBsYWluXCIpIHtcbiAgICByZXR1cm4gcHJvcFRvWm9kVHlwZURlZihwcm9wTm9kZS5wcm9wLCBpbmplY3RJbXBvcnRLZXlzKTtcbiAgfSBlbHNlIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5hcnJheSh6Lm9iamVjdCh7XCIsXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlblxuICAgICAgICAubWFwKChjaGlsZFByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihjaGlsZFByb3BOb2RlLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIiksXG4gICAgICBcIlwiLFxuICAgICAgXCJ9KSksXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9IGVsc2UgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgcHJvcE5vZGUuY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoY2hpbGRQcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYoY2hpbGRQcm9wTm9kZSwgaW5qZWN0SW1wb3J0S2V5cykpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgXCJcIixcbiAgICAgIGB9KSR7cHJvcE5vZGUucHJvcD8ubnVsbGFibGUgPyBcIi5udWxsYWJsZSgpXCIgOiBcIlwifSxgLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvVHNUeXBlRGVmKHp0OiB6LlpvZFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHp0LmRlZi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICBjYXNlIFwibnVsbFwiOlxuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICBjYXNlIFwibmV2ZXJcIjpcbiAgICAgIHJldHVybiB6dC5kZWYudHlwZTtcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIFwiRGF0ZVwiO1xuICAgIGNhc2UgXCJudWxsYWJsZVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigoenQgYXMgQW55Wm9kTnVsbGFibGUpLmRlZi5pbm5lclR5cGUpfSB8IG51bGxgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICByZXR1cm4gem9kVHlwZVRvVHNUeXBlRGVmKCh6dCBhcyBBbnlab2REZWZhdWx0KS5kZWYuaW5uZXJUeXBlKTtcbiAgICBjYXNlIFwicmVjb3JkXCI6IHtcbiAgICAgIGNvbnN0IHJlY29yZFR5cGUgPSB6dCBhcyBBbnlab2RSZWNvcmQ7XG4gICAgICByZXR1cm4gYHsgWyBrZXk6ICR7em9kVHlwZVRvVHNUeXBlRGVmKHJlY29yZFR5cGUuZGVmLmtleVR5cGUpfSBdOiAke3pvZFR5cGVUb1RzVHlwZURlZihyZWNvcmRUeXBlLmRlZi52YWx1ZVR5cGUpfX1gO1xuICAgIH1cbiAgICBjYXNlIFwibGl0ZXJhbFwiOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oKHp0IGFzIHouWm9kTGl0ZXJhbCkudmFsdWVzKVxuICAgICAgICAubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBgbnVsbGA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBgdW5kZWZpbmVkYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIgfCBcIik7XG4gICAgY2FzZSBcInVuaW9uXCI6XG4gICAgICByZXR1cm4gYCR7KHp0IGFzIEFueVpvZFVuaW9uKS5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4gem9kVHlwZVRvVHNUeXBlRGVmKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiIHwgXCIpfWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIHJldHVybiBgJHsoenQgYXMgei5ab2RFbnVtKS5vcHRpb25zLm1hcCgodmFsKSA9PiBgXCIke3ZhbH1cImApLmpvaW4oXCIgfCBcIil9YDtcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZEFycmF5KS5lbGVtZW50KX1bXWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChzaGFwZVtrZXldLmRlZi50eXBlID09PSBcIm9wdGlvbmFsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PzogJHt6b2RUeXBlVG9Uc1R5cGVEZWYoc2hhcGVba2V5XS5kZWYuaW5uZXJUeXBlKX0sYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7em9kVHlwZVRvVHNUeXBlRGVmKHNoYXBlW2tleV0pfSxgO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZE9wdGlvbmFsKS5kZWYuaW5uZXJUeXBlKX0gfCB1bmRlZmluZWRgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9ICh6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWwpLmRlZjtcblxuICAgICAgLy8g67mIIHRlbXBsYXRlIGxpdGVyYWzsnYAgc3RyaW5n7Jy866GcIO2PtOuwsVxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgVHlwZVNjcmlwdCDtg4DsnoUg66y47J6Q7Je066GcIOuzgO2ZmFxuICAgICAgY29uc3QgcGFydHMgPSBkZWYucGFydHMubWFwKChwYXJ0OiB1bmtub3duKSA9PiB7XG4gICAgICAgIC8vIOumrO2EsOuftCDqsJIgKHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBudWxsLCB1bmRlZmluZWQpXG4gICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBgJHtwYXJ0fWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUeXBlVG9Uc1R5cGVEZWYocGFydCBhcyB6LlpvZFR5cGUpO1xuICAgICAgICAgIHJldHVybiBgJFxceyR7aW5uZXJUeXBlfX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7Y+067CxXG4gICAgICAgIHJldHVybiBgXFwke3N0cmluZ31gO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgXFxgJHtwYXJ0cy5qb2luKFwiXCIpfVxcYGA7XG4gICAgfVxuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICByZXR1cm4gXCJGaWxlXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvWm9kQ29kZSh6dDogei5ab2RUeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoICh6dC5kZWYudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInouc3RyaW5nKClcIjtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bWJlcigpXCI7XG4gICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgcmV0dXJuIFwiei5iaWdpbnQoKVwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJ6LmJvb2xlYW4oKVwiO1xuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gXCJ6LmRhdGUoKVwiO1xuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bGwoKVwiO1xuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgIHJldHVybiBcInoudW5kZWZpbmVkKClcIjtcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgICByZXR1cm4gXCJ6LmFueSgpXCI7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIHJldHVybiBcInoudW5rbm93bigpXCI7XG4gICAgY2FzZSBcIm5ldmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm5ldmVyKClcIjtcbiAgICBjYXNlIFwibnVsbGFibGVcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyBBbnlab2ROdWxsYWJsZSkuZGVmLmlubmVyVHlwZSl9Lm51bGxhYmxlKClgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6IHtcbiAgICAgIGNvbnN0IHpEZWZhdWx0RGVmID0gKHp0IGFzIEFueVpvZERlZmF1bHQpLmRlZjtcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKHpEZWZhdWx0RGVmLmlubmVyVHlwZSl9LmRlZmF1bHQoJHt6RGVmYXVsdERlZi5kZWZhdWx0VmFsdWV9KWA7XG4gICAgfVxuICAgIGNhc2UgXCJyZWNvcmRcIjoge1xuICAgICAgY29uc3QgelJlY29yZERlZiA9ICh6dCBhcyBBbnlab2RSZWNvcmQpLmRlZjtcbiAgICAgIHJldHVybiBgei5yZWNvcmQoJHt6b2RUeXBlVG9ab2RDb2RlKHpSZWNvcmREZWYua2V5VHlwZSl9LCAke3pvZFR5cGVUb1pvZENvZGUoXG4gICAgICAgIHpSZWNvcmREZWYudmFsdWVUeXBlLFxuICAgICAgKX0pYDtcbiAgICB9XG4gICAgY2FzZSBcImxpdGVyYWxcIjoge1xuICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKCh6dCBhcyB6LlpvZExpdGVyYWw8c3RyaW5nIHwgbnVtYmVyPikudmFsdWVzKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gYG51bGxgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gYHVuZGVmaW5lZGA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBgei5saXRlcmFsKCR7aXRlbXNbMF19KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYHoubGl0ZXJhbChbJHtpdGVtcy5qb2luKFwiLCBcIil9XSlgO1xuICAgIH1cbiAgICBjYXNlIFwidW5pb25cIjpcbiAgICAgIHJldHVybiBgei51bmlvbihbJHsoenQgYXMgQW55Wm9kVW5pb24pLmRlZi5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbjogei5ab2RUeXBlKSA9PiB6b2RUeXBlVG9ab2RDb2RlKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiLFwiKX1dKWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIC8vIE5PVEU6IHouZW51bShbXCJBXCIsIFwiQlwiXSnrj4Qgei5lbnVtKHsgQTogXCJBXCIsIEI6IFwiQlwiIH0p66GcIOyymOumrOuQqC5cbiAgICAgIHJldHVybiBgei5lbnVtKHske09iamVjdC5lbnRyaWVzKCh6dCBhcyB6LlpvZEVudW0pLmRlZi5lbnRyaWVzKVxuICAgICAgICAubWFwKChba2V5LCB2YWxdKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IGAke2tleX06IFwiJHt2YWx9XCJgIDogYCR7a2V5fTogJHt2YWx9YCkpXG4gICAgICAgIC5qb2luKFwiLCBcIil9fSlgO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIGB6LmFycmF5KCR7em9kVHlwZVRvWm9kQ29kZSgoenQgYXMgei5ab2RBcnJheTx6LlpvZFR5cGU+KS5kZWYuZWxlbWVudCl9KWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ6Lm9iamVjdCh7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4gYCR7a2V5fTogJHt6b2RUeXBlVG9ab2RDb2RlKHNoYXBlW2tleV0pfSxgKSxcbiAgICAgICAgXCJ9KVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUpfS5vcHRpb25hbCgpYDtcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIGB6LmZpbGUoKWA7XG4gICAgY2FzZSBcInRlbXBsYXRlX2xpdGVyYWxcIjoge1xuICAgICAgY29uc3QgZGVmID0gKHp0IGFzIEFueVpvZFRlbXBsYXRlTGl0ZXJhbCkuZGVmO1xuXG4gICAgICAvLyDruYggdGVtcGxhdGUgbGl0ZXJhbFxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJ6LnRlbXBsYXRlTGl0ZXJhbChbXSlcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGRlZi5wYXJ0cy5tYXAoKHBhcnQ6IHVua25vd24pID0+IHtcbiAgICAgICAgLy8g66y47J6Q7Je0IOumrO2EsOuftFxuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHtwYXJ0fVwiYDtcbiAgICAgICAgfVxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICByZXR1cm4gem9kVHlwZVRvWm9kQ29kZShwYXJ0IGFzIHouWm9kVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDtj7TrsLFcbiAgICAgICAgcmV0dXJuIFwiei5zdHJpbmcoKVwiO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgei50ZW1wbGF0ZUxpdGVyYWwoWyR7cGFydHMuam9pbihcIiwgXCIpfV0pYDtcbiAgICB9XG4gICAgY2FzZSBcImludGVyc2VjdGlvblwiOiB7XG4gICAgICBjb25zdCB6SW50ZXJzZWN0aW9uRGVmID0gKHp0IGFzIHouWm9kSW50ZXJzZWN0aW9uPHouWm9kVHlwZSwgei5ab2RUeXBlPikuZGVmO1xuICAgICAgcmV0dXJuIGB6LmludGVyc2VjdGlvbigke3pvZFR5cGVUb1pvZENvZGUoekludGVyc2VjdGlvbkRlZi5sZWZ0KX0sICR7em9kVHlwZVRvWm9kQ29kZSh6SW50ZXJzZWN0aW9uRGVmLnJpZ2h0KX0pYDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyerOq3gOyggeycvOuhnCDspJHssqnrkJwg7YOA7J6F65Ok7J2EIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueSxcbiAgYmFzZUtleTogc3RyaW5nID0gXCJyb290XCIsXG4pOiBSZW5kZXJpbmdOb2RlIHtcbiAgY29uc3QgZGVmID0ge1xuICAgIG5hbWU6IGJhc2VLZXksXG4gICAgbGFiZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoYmFzZUtleSwgZmFsc2UpLFxuICAgIHpvZFR5cGUsXG4gIH07XG5cbiAgLyoqXG4gICAqIOy8gOydtOyKpCDsspjrpqwg7Iic7IScXG4gICAqXG4gICAqIDEuIO2KueyImCDsvIDsnbTsiqQgKGRlc2NyaXB0aW9uIOq4sOuwmClcbiAgICogICAgLSBTb25hbXVGaWxlL1NvbmFtdUZpbGVbXSA6IHoub2JqZWN0L3ouYXJyYXnsnbTsp4Drp4wg7YyM7J28IOyXheuhnOuTnOyaqSDrgrTsnqUg7YOA7J6FXG4gICAqXG4gICAqIDIuIOydvOuwmCDsvIDsnbTsiqQgKGluc3RhbmNlb2Yg6riw67CYKVxuICAgKiAgICAtIHouWm9kT2JqZWN0IDog7J2867CYIOqwneyytFxuICAgKiAgICAtIHouWm9kQXJyYXkgOiDsnbzrsJgg67Cw7Je0XG4gICAqICAgICAgLSB2ZWN0b3IgOiB6LmFycmF5KHoubnVtYmVyKeydtOyngOunjCDrhKTsnbTrsI0g6riw67CY7Jy866GcIOuyoe2EsCDsnoTrsqDrlKlcbiAgICogICAgICAtIOydvOuwmCDrsLDsl7QgOiDqt7gg7Jm4XG4gICAqICAgIC0gei5ab2RVbmlvbiwgei5ab2RPcHRpb25hbCwgei5ab2ROdWxsYWJsZSA6IOycoO2LuOumrO2LsCDtg4DsnoVcbiAgICogICAgLSDquLDtg4AgOiByZXNvbHZlUmVuZGVyVHlwZSgp7Jy866GcIOyymOumrFxuICAgKi9cblxuICAvLyDtirnsiJgg7LyA7J207IqkOiBTb25hbXVGaWxlW10g7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlW11cIikge1xuICAgIHJldHVybiB7IC4uLmRlZiwgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIiB9O1xuICB9XG5cbiAgLy8g7Yq57IiYIOy8gOydtOyKpDogU29uYW11RmlsZSDri6jsnbwg7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlXCIpIHtcbiAgICByZXR1cm4geyAuLi5kZWYsIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlXCIgfTtcbiAgfVxuXG4gIC8vIOydvOuwmCDsvIDsnbTsiqQ6IFpvZE9iamVjdCDssrTtgaxcbiAgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9iamVjdCkge1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSBPYmplY3Qua2V5cyh6b2RUeXBlLnNoYXBlKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNvbHVtbktleXMubWFwKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IGlubmVyVHlwZSA9IHpvZFR5cGUuc2hhcGVba2V5XTtcbiAgICAgIHJldHVybiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKGlubmVyVHlwZSwga2V5KTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICBjb25zdCBpbm5lclR5cGUgPSAoem9kVHlwZSBhcyB6LlpvZEFycmF5PHouWm9kVHlwZUFueT4pLmRlZi5lbGVtZW50O1xuICAgIC8vIHZlY3RvciDtg4DsnoUg7YyQ67OEOiBudW1iZXIg67Cw7Je07J2066m07IScIGVtYmVkZGluZywgdmVjdG9yIOuTseydmCDsnbTrpoTsnYQg6rCA7KeEIOqyveyasFxuICAgIGlmIChcbiAgICAgIGlubmVyVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyICYmXG4gICAgICAoYmFzZUtleS5pbmNsdWRlcyhcImVtYmVkZGluZ1wiKSB8fCBiYXNlS2V5LmluY2x1ZGVzKFwidmVjdG9yXCIpKVxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICByZW5kZXJUeXBlOiBcInZlY3RvclwiLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGVsZW1lbnQ6IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgY29uc3Qgb3B0aW9uTm9kZXMgPSAoem9kVHlwZSBhcyB6LlpvZFVuaW9uPHouWm9kVHlwZVtdPikuZGVmLm9wdGlvbnMubWFwKChvcHQpID0+XG4gICAgICB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKG9wdCwgYmFzZUtleSksXG4gICAgKTtcbiAgICAvLyBUT0RPOiBab2RVbmlvbuydtCDrk6TslrTsnojripQg6rK97JqwIO2VuOuTpOungVxuICAgIHJldHVybiBvcHRpb25Ob2Rlc1swXTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPcHRpb25hbCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi56b2RUeXBlVG9SZW5kZXJpbmdOb2RlKCh6b2RUeXBlIGFzIHouWm9kT3B0aW9uYWw8ei5ab2RUeXBlPikuZGVmLmlubmVyVHlwZSwgYmFzZUtleSksXG4gICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoKHpvZFR5cGUgYXMgei5ab2ROdWxsYWJsZTx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IHJlc29sdmVSZW5kZXJUeXBlKGJhc2VLZXksIHpvZFR5cGUpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F6rO8IO2CpCDsnbTrpoTsnLzroZzrtoDthLAg7KCB7KCI7ZWcIFJlbmRlclR5cGXsnYQg6rKw7KCV7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiByZXNvbHZlUmVuZGVyVHlwZShrZXk6IHN0cmluZywgem9kVHlwZTogei5ab2RUeXBlQW55KTogUmVuZGVyaW5nTm9kZVtcInJlbmRlclR5cGVcIl0ge1xuICBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGF0ZSkge1xuICAgIHJldHVybiBcImRhdGV0aW1lXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouY29yZS4kWm9kU3RyaW5nKSB7XG4gICAgLy8gTk9URTogei5ab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWY66m0IHoudXJsKCksIHouZW1haWwoKSDrk7HsnZgg7YOA7J6F7JeQ7IScIOusuOygnOqwgCDsg53quLDrr4DroZwgei5jb3JlLiRab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWoXG4gICAgLy8gRklYTUU6IGVtYWls7J2064KYIHVybCDtg4DsnoUg65Ox7JeQIOuMgO2VnCDsspjrpqzqsIAg7ZWE7JqU7ZWoXG4gICAgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU1FMRGF0ZVRpbWVTdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGV0aW1lXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJkYXRlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZGF0ZVwiO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcImlkXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZy1pZFwiO1xuICAgIH0gZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiX2lkXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZmtfaWRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcikge1xuICAgIGlmIChrZXkgPT09IFwiaWRcIikge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLWlkXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJfaWRcIikpIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1ma19pZFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItcGxhaW5cIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQm9vbGVhbikge1xuICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RFbnVtKSB7XG4gICAgcmV0dXJuIFwiZW51bXNcIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RSZWNvcmQpIHtcbiAgICByZXR1cm4gXCJyZWNvcmRcIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RBbnkgfHwgem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5rbm93bikge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTGl0ZXJhbCkge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFRlbXBsYXRlTGl0ZXJhbCkge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUuZGVmLnR5cGUgPT09IFwiY3VzdG9tXCIpIHtcbiAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYO2DgOyehSDtjIzsi7Eg67aI6rCAICR7a2V5fSAke3pvZFR5cGUuZGVmLnR5cGV9YCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtHQSxTQUFTLGdCQUFnQixRQUFpQztDQUV4RCxNQUFNQSxhQUFxQztFQUN6QyxTQUFTO0VBQ1QsU0FBUztFQUNULGFBQWE7RUFDYixhQUFhO0VBQ2Q7Q0FHRCxNQUFNQyxjQUFzQztFQUMxQyxTQUFTO0VBQ1QsVUFBVTtFQUNWLFlBQVk7RUFDWixZQUFZO0VBQ1osWUFBWTtFQUNiO0FBRUQsS0FBSSxVQUFVLFlBQVk7QUFDeEIsU0FBTyxXQUFXOztBQUdwQixLQUFJLFVBQVUsYUFBYTtBQUN6QixTQUFPLFlBQVk7O0FBSXJCLFFBQU8sS0FBSyxPQUFPOzs7Ozs7QUFPckIsU0FBUyxnQkFBZ0IsUUFBb0M7QUFFM0QsU0FBUSxRQUFSO0VBQ0UsS0FBSyxVQUNILFFBQU9DLElBQUUsSUFBSSxNQUFNO0VBQ3JCLEtBQUssVUFDSCxRQUFPQSxJQUFFLElBQUksTUFBTTtFQUNyQixLQUFLLGNBQ0gsUUFBT0EsSUFBRSxJQUFJLFVBQVU7RUFDekIsS0FBSyxjQUNILFFBQU9BLElBQUUsSUFBSSxVQUFVO0VBRXpCLEtBQUssVUFDSCxRQUFPQSxJQUFFLEtBQUssTUFBTTtFQUN0QixLQUFLLFdBQ0gsUUFBT0EsSUFBRSxLQUFLLE9BQU87RUFDdkIsS0FBSyxhQUNILFFBQU9BLElBQUUsS0FBSyxTQUFTO0VBQ3pCLEtBQUssYUFDSCxRQUFPQSxJQUFFLEtBQUssU0FBUztFQUN6QixLQUFLLGFBQ0gsUUFBT0EsSUFBRSxLQUFLLFNBQVM7RUFFekIsUUFDRSxRQUFRQSxJQUFpRCxTQUFTOzs7Ozs7OztBQVN4RSxlQUFzQixlQUFlLFdBQTBDO0FBRTdFLEtBQUssa0JBQXdDLFNBQVMsVUFBVSxFQUFFO0VBQ2hFLE1BQU0sY0FBYyxlQUFlO0FBQ25DLE1BQUksQ0FBQyxhQUFhO0FBQ2hCLFNBQU0sSUFBSSxNQUFNLFNBQVMsVUFBVSxtQkFBbUI7O0FBRXhELFNBQU8sWUFBWSxPQUFPLFNBQVMsVUFBVTs7Q0FJL0MsTUFBTSxhQUFhLGNBQWMsY0FBYyxVQUFVO0NBQ3pELE1BQU0sZ0JBQWdCLEtBQUssS0FDekIsT0FBTyxhQUNQLFlBQVksb0JBQW9CLFdBQVcsS0FBSyxDQUNqRDtDQUNELE1BQU0sWUFBWSxnQkFBZ0IsY0FBYztDQUNoRCxNQUFNLFdBQVcsTUFBTSxPQUFPO0FBRTlCLEtBQUksQ0FBQyxTQUFTLFlBQVk7QUFDeEIsUUFBTSxJQUFJLE1BQU0scUJBQXFCLFlBQVk7O0FBRW5ELFFBQU8sU0FBUyxXQUFXLFNBQVMsVUFBVTs7Ozs7O0FBT2hELGVBQXNCLGNBQWMsTUFBeUM7Q0FDM0UsSUFBSUMsVUFBd0JELElBQUUsU0FBUztBQUN2QyxLQUFJLG9CQUFvQixLQUFLLEVBQUU7QUFDN0IsWUFBVUEsSUFBRSxRQUFRLENBQUMsS0FBSztZQUNqQixtQkFBbUIsS0FBSyxFQUFFO0FBQ25DLFlBQVVBLElBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQ3pCLHVCQUF1QixLQUFLLEVBQUU7QUFDdkMsWUFBVUEsSUFBRSxRQUFRO1lBQ1gsc0JBQXNCLEtBQUssRUFBRTtBQUN0QyxZQUFVQSxJQUFFLFFBQVEsQ0FBQyxPQUFPO1lBQ25CLGlCQUFpQixLQUFLLEVBQUU7QUFDakMsWUFBVSxNQUFNLGVBQWUsS0FBSyxHQUFHO1lBQzlCLGdCQUFnQixLQUFLLEVBQUU7QUFDaEMsYUFBVyxNQUFNLGVBQWUsS0FBSyxHQUFHLEVBQUUsT0FBTztZQUN4QyxtQkFBbUIsS0FBSyxFQUFFO0FBQ25DLE1BQUksS0FBSyxXQUFXO0FBQ2xCLGFBQVUsZ0JBQWdCLEtBQUssVUFBVTtBQUN6QyxPQUFJLEtBQUssVUFBVSxTQUFTLFNBQVM7QUFDbkMsY0FBVyxRQUF3QixJQUFJLEtBQUssT0FBTzs7YUFFNUMsS0FBSyxRQUFRO0FBQ3RCLGFBQVVBLElBQUUsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPO1NBQ2hDO0FBQ0wsYUFBVUEsSUFBRSxRQUFROztZQUViLGtCQUFrQixLQUFLLEVBQUU7RUFDbEMsSUFBSUU7QUFDSixNQUFJLEtBQUssV0FBVztBQUNsQixpQkFBYyxnQkFBZ0IsS0FBSyxVQUFVO0FBQzdDLE9BQUksS0FBSyxVQUFVLFNBQVMsYUFBYTtBQUN2QyxrQkFBZSxZQUE0QixJQUFJLEtBQUssT0FBTzs7YUFFcEQsS0FBSyxRQUFRO0FBQ3RCLGlCQUFjRixJQUFFLFFBQVEsQ0FBQyxJQUFJLEtBQUssT0FBTztTQUNwQztBQUNMLGlCQUFjQSxJQUFFLFFBQVE7O0FBRTFCLFlBQVUsWUFBWSxPQUFPO1lBQ3BCLG1CQUFtQixLQUFLLEVBQUU7QUFDbkMsWUFBVUEsSUFBRSxRQUFRO1lBQ1gsa0JBQWtCLEtBQUssRUFBRTtBQUNsQyxZQUFVQSxJQUFFLFFBQVEsQ0FBQyxPQUFPO1lBQ25CLG9CQUFvQixLQUFLLEVBQUU7QUFDcEMsWUFBVUEsSUFBRSxRQUFRO1lBQ1gsbUJBQW1CLEtBQUssRUFBRTtBQUNuQyxZQUFVQSxJQUFFLFFBQVEsQ0FBQyxPQUFPO1lBQ25CLG9CQUFvQixLQUFLLEVBQUU7QUFDcEMsWUFBVUEsSUFBRSxTQUFTO1lBQ1osbUJBQW1CLEtBQUssRUFBRTtBQUNuQyxZQUFVQSxJQUFFLFNBQVMsQ0FBQyxPQUFPO1lBQ3BCLGlCQUFpQixLQUFLLEVBQUU7QUFDakMsWUFBVUEsSUFBRSxNQUFNO1lBQ1QsZ0JBQWdCLEtBQUssRUFBRTtBQUNoQyxZQUFVQSxJQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ2pCLGlCQUFpQixLQUFLLEVBQUU7QUFDakMsWUFBVUEsSUFBRSxNQUFNO1lBQ1QsZ0JBQWdCLEtBQUssRUFBRTtBQUNoQyxZQUFVQSxJQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ2pCLFdBQVcsS0FBSyxFQUFFO0FBQzNCLFlBQVUsTUFBTSxlQUFlLEtBQUssR0FBRztZQUM5QixpQkFBaUIsS0FBSyxFQUFFO0FBQ2pDLFlBQVVBLElBQUUsUUFBUTtZQUNYLG1CQUFtQixLQUFLLEVBQUU7QUFDbkMsWUFBVUEsSUFBRSxNQUFNQSxJQUFFLFFBQVEsQ0FBQztZQUNwQixrQkFBa0IsS0FBSyxFQUFFO0FBQ2xDLFlBQVVBLElBQUUsTUFBTUEsSUFBRSxNQUFNQSxJQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzdCLGNBQWMsS0FBSyxFQUFFO0FBQzlCLFlBQVUsTUFBTSxlQUFlLEtBQUssR0FBRztZQUM5QixlQUFlLEtBQUssRUFBRTtBQUMvQixNQUFJLDJCQUEyQixLQUFLLElBQUssdUJBQXVCLEtBQUssSUFBSSxLQUFLLGVBQWdCO0dBRTVGLE1BQU0sWUFBWSxjQUFjLElBQUksS0FBSyxLQUFLO0dBQzlDLE1BQU0sU0FBUyxVQUFVLFdBQVc7QUFDcEMsT0FBSSxXQUFXLFlBQVksV0FBVyxRQUFRO0FBQzVDLGNBQVVBLElBQUUsUUFBUTtVQUNmO0FBQ0wsY0FBVUEsSUFBRSxRQUFRLENBQUMsS0FBSzs7O1FBR3pCO0FBQ0wsUUFBTSxJQUFJLE1BQU0sNEJBQTRCLEtBQUssR0FBRzs7QUFHdEQsS0FBSyxLQUFnQyxVQUFVO0FBQzdDLFlBQVcsUUFBd0IsYUFBYTs7QUFFbEQsS0FBSSxLQUFLLFVBQVU7QUFDakIsWUFBVSxRQUFRLFVBQVU7O0FBRzlCLFFBQU87Ozs7O0FBTVQsU0FBZ0IsaUJBQWlCLE1BQWtCLGtCQUFvQztDQUNyRixJQUFJRztBQUNKLEtBQUksb0JBQW9CLEtBQUssRUFBRTtBQUM3QixTQUFPLEdBQUcsS0FBSyxLQUFLO1lBQ1gsbUJBQW1CLEtBQUssRUFBRTtBQUNuQyxTQUFPLEdBQUcsS0FBSyxLQUFLO1lBQ1gsdUJBQXVCLEtBQUssRUFBRTtBQUN2QyxTQUFPLEdBQUcsS0FBSyxLQUFLO1lBQ1gsc0JBQXNCLEtBQUssRUFBRTtBQUN0QyxTQUFPLEdBQUcsS0FBSyxLQUFLO1lBQ1gsaUJBQWlCLEtBQUssRUFBRTtBQUNqQyxTQUFPLEdBQUcsS0FBSyxLQUFLLElBQUksS0FBSztBQUM3QixtQkFBaUIsS0FBSyxLQUFLLEdBQUc7WUFDckIsZ0JBQWdCLEtBQUssRUFBRTtBQUNoQyxTQUFPLEdBQUcsS0FBSyxLQUFLLElBQUksS0FBSyxHQUFHO0FBQ2hDLG1CQUFpQixLQUFLLEtBQUssR0FBRztZQUNyQixtQkFBbUIsS0FBSyxFQUFFO0FBQ25DLE1BQUksS0FBSyxXQUFXO0dBQ2xCLE1BQU0sT0FBTyxnQkFBZ0IsS0FBSyxVQUFVO0FBQzVDLE9BQUksS0FBSyxRQUFRO0FBQ2YsV0FBTyxHQUFHLEtBQUssS0FBSyxJQUFJLEtBQUssT0FBTyxLQUFLLE9BQU87VUFDM0M7QUFDTCxXQUFPLEdBQUcsS0FBSyxLQUFLLElBQUk7O2FBRWpCLEtBQUssUUFBUTtBQUN0QixVQUFPLEdBQUcsS0FBSyxLQUFLLG1CQUFtQixLQUFLLE9BQU87U0FDOUM7QUFDTCxVQUFPLEdBQUcsS0FBSyxLQUFLOztZQUViLGtCQUFrQixLQUFLLEVBQUU7QUFDbEMsTUFBSSxLQUFLLFdBQVc7R0FDbEIsTUFBTSxPQUFPLGdCQUFnQixLQUFLLFVBQVU7QUFDNUMsT0FBSSxLQUFLLFFBQVE7QUFDZixXQUFPLEdBQUcsS0FBSyxLQUFLLElBQUksS0FBSyxPQUFPLEtBQUssT0FBTztVQUMzQztBQUNMLFdBQU8sR0FBRyxLQUFLLEtBQUssSUFBSSxLQUFLOzthQUV0QixLQUFLLFFBQVE7QUFDdEIsVUFBTyxHQUFHLEtBQUssS0FBSyxtQkFBbUIsS0FBSyxPQUFPO1NBQzlDO0FBQ0wsVUFBTyxHQUFHLEtBQUssS0FBSzs7WUFFYixtQkFBbUIsS0FBSyxFQUFFO0FBQ25DLFNBQU8sR0FBRyxLQUFLLEtBQUs7WUFDWCxrQkFBa0IsS0FBSyxFQUFFO0FBQ2xDLFNBQU8sR0FBRyxLQUFLLEtBQUs7WUFDWCxvQkFBb0IsS0FBSyxFQUFFO0FBQ3BDLFNBQU8sR0FBRyxLQUFLLEtBQUs7WUFDWCxtQkFBbUIsS0FBSyxFQUFFO0FBQ25DLFNBQU8sR0FBRyxLQUFLLEtBQUs7WUFDWCxpQkFBaUIsS0FBSyxFQUFFO0FBQ2pDLFNBQU8sR0FBRyxLQUFLLEtBQUs7WUFDWCxnQkFBZ0IsS0FBSyxFQUFFO0FBQ2hDLFNBQU8sR0FBRyxLQUFLLEtBQUs7WUFDWCxvQkFBb0IsS0FBSyxFQUFFO0FBQ3BDLFNBQU8sR0FBRyxLQUFLLEtBQUs7WUFDWCxtQkFBbUIsS0FBSyxFQUFFO0FBQ25DLFNBQU8sR0FBRyxLQUFLLEtBQUs7WUFDWCxpQkFBaUIsS0FBSyxFQUFFO0FBQ2pDLFNBQU8sR0FBRyxLQUFLLEtBQUs7WUFDWCxnQkFBZ0IsS0FBSyxFQUFFO0FBQ2hDLFNBQU8sR0FBRyxLQUFLLEtBQUs7WUFDWCxXQUFXLEtBQUssRUFBRTtBQUUzQixNQUFLLGtCQUF3QyxTQUFTLEtBQUssR0FBRyxFQUFFO0dBQzlELE1BQU0sYUFBYSxLQUFLLE9BQU8sZUFBZSxxQkFBcUI7QUFDbkUsVUFBTyxHQUFHLEtBQUssS0FBSyxJQUFJO0FBQ3hCLG9CQUFpQixLQUFLLFdBQVc7U0FDNUI7QUFDTCxVQUFPLEdBQUcsS0FBSyxLQUFLLElBQUksS0FBSztBQUM3QixvQkFBaUIsS0FBSyxLQUFLLEdBQUc7O1lBRXZCLGlCQUFpQixLQUFLLEVBQUU7QUFDakMsU0FBTyxHQUFHLEtBQUssS0FBSztZQUNYLG1CQUFtQixLQUFLLEVBQUU7QUFDbkMsU0FBTyxHQUFHLEtBQUssS0FBSztZQUNYLGtCQUFrQixLQUFLLEVBQUU7QUFDbEMsU0FBTyxHQUFHLEtBQUssS0FBSztZQUNYLGVBQWUsS0FBSyxFQUFFO0FBQy9CLFNBQU8sR0FBRyxLQUFLLEtBQUs7WUFDWCxjQUFjLEtBQUssRUFBRTtBQUM5QixTQUFPLEdBQUcsS0FBSyxLQUFLLElBQUksS0FBSztBQUM3QixtQkFBaUIsS0FBSyxLQUFLLEdBQUc7WUFDckIsZUFBZSxLQUFLLEVBQUU7QUFDL0IsTUFBSSwyQkFBMkIsS0FBSyxJQUFLLHVCQUF1QixLQUFLLElBQUksS0FBSyxlQUFnQjtHQUU1RixNQUFNLFlBQVksY0FBYyxJQUFJLEtBQUssS0FBSztHQUM5QyxNQUFNLFNBQVMsVUFBVSxXQUFXO0FBQ3BDLE9BQUksV0FBVyxZQUFZLFdBQVcsUUFBUTtBQUM1QyxXQUFPLEdBQUcsS0FBSyxLQUFLO1VBQ2Y7QUFDTCxXQUFPLEdBQUcsS0FBSyxLQUFLOztTQUVqQjtBQUVMLFVBQU8sTUFBTSxLQUFLLEtBQUssSUFBSSxLQUFLLGFBQWEsR0FBRyxLQUFLOztRQUVsRDtBQUNMLFNBQU87O0FBR1QsS0FBSyxLQUFnQyxVQUFVO0FBQzdDLFVBQVE7O0FBRVYsS0FBSSxLQUFLLFVBQVU7QUFDakIsVUFBUTs7QUFJVixLQUFJLG9CQUFvQixLQUFLLElBQUksbUJBQW1CLEtBQUssRUFBRTtBQUN6RCxVQUFROztBQUdWLFFBQU8sR0FBRyxLQUFLOzs7Ozs7QUFPakIsU0FBZ0IscUJBQXFCLFVBQTBCLGtCQUFvQztBQUNqRyxLQUFJLFNBQVMsYUFBYSxTQUFTO0FBQ2pDLFNBQU8saUJBQWlCLFNBQVMsTUFBTSxpQkFBaUI7WUFDL0MsU0FBUyxhQUFhLFNBQVM7QUFDeEMsU0FBTztHQUNMLFNBQVMsT0FBTyxHQUFHLFNBQVMsS0FBSyxLQUFLLE1BQU07R0FDNUM7R0FDQSxTQUFTLFNBQ04sS0FBSyxrQkFBa0IscUJBQXFCLGVBQWUsaUJBQWlCLENBQUMsQ0FDN0UsS0FBSyxLQUFLO0dBQ2I7R0FDQTtHQUNELENBQUMsS0FBSyxLQUFLO1lBQ0gsU0FBUyxhQUFhLFVBQVU7QUFDekMsU0FBTztHQUNMLFNBQVMsT0FBTyxHQUFHLFNBQVMsS0FBSyxLQUFLLE1BQU07R0FDNUM7R0FDQSxTQUFTLFNBQ04sS0FBSyxrQkFBa0IscUJBQXFCLGVBQWUsaUJBQWlCLENBQUMsQ0FDN0UsS0FBSyxLQUFLO0dBQ2I7R0FDQSxLQUFLLFNBQVMsTUFBTSxXQUFXLGdCQUFnQixHQUFHO0dBQ25ELENBQUMsS0FBSyxLQUFLO1FBQ1A7QUFDTCxRQUFNOzs7QUFJVixTQUFnQixtQkFBbUIsSUFBdUI7QUFDeEQsU0FBUSxHQUFHLElBQUksTUFBZjtFQUNFLEtBQUs7RUFDTCxLQUFLO0VBQ0wsS0FBSztFQUNMLEtBQUs7RUFDTCxLQUFLO0VBQ0wsS0FBSztFQUNMLEtBQUs7RUFDTCxLQUFLO0VBQ0wsS0FBSyxRQUNILFFBQU8sR0FBRyxJQUFJO0VBQ2hCLEtBQUssT0FDSCxRQUFPO0VBQ1QsS0FBSyxXQUNILFFBQU8sR0FBRyxtQkFBb0IsR0FBc0IsSUFBSSxVQUFVLENBQUM7RUFDckUsS0FBSyxVQUNILFFBQU8sbUJBQW9CLEdBQXFCLElBQUksVUFBVTtFQUNoRSxLQUFLLFVBQVU7R0FDYixNQUFNLGFBQWE7QUFDbkIsVUFBTyxZQUFZLG1CQUFtQixXQUFXLElBQUksUUFBUSxDQUFDLE1BQU0sbUJBQW1CLFdBQVcsSUFBSSxVQUFVLENBQUM7O0VBRW5ILEtBQUssVUFDSCxRQUFPLE1BQU0sS0FBTSxHQUFvQixPQUFPLENBQzNDLEtBQUssVUFBVTtBQUNkLE9BQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsV0FBTyxJQUFJLE1BQU07O0FBR25CLE9BQUksVUFBVSxNQUFNO0FBQ2xCLFdBQU87O0FBR1QsT0FBSSxVQUFVLFdBQVc7QUFDdkIsV0FBTzs7QUFHVCxVQUFPLEdBQUc7SUFDVixDQUNELEtBQUssTUFBTTtFQUNoQixLQUFLLFFBQ0gsUUFBTyxHQUFJLEdBQW1CLFFBQzNCLEtBQUssV0FBVyxtQkFBbUIsT0FBTyxDQUFDLENBQzNDLEtBQUssTUFBTTtFQUNoQixLQUFLLE9BQ0gsUUFBTyxHQUFJLEdBQWlCLFFBQVEsS0FBSyxRQUFRLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxNQUFNO0VBQzFFLEtBQUssUUFDSCxRQUFPLEdBQUcsbUJBQW9CLEdBQW1CLFFBQVEsQ0FBQztFQUM1RCxLQUFLLFVBQVU7R0FDYixNQUFNLFFBQVMsR0FBb0I7QUFDbkMsVUFBTztJQUNMO0lBQ0EsR0FBRyxPQUFPLEtBQUssTUFBTSxDQUFDLEtBQUssUUFBUTtBQUNqQyxTQUFJLE1BQU0sS0FBSyxJQUFJLFNBQVMsWUFBWTtBQUN0QyxhQUFPLEdBQUcsSUFBSSxLQUFLLG1CQUFtQixNQUFNLEtBQUssSUFBSSxVQUFVLENBQUM7WUFDM0Q7QUFDTCxhQUFPLEdBQUcsSUFBSSxJQUFJLG1CQUFtQixNQUFNLEtBQUssQ0FBQzs7TUFFbkQ7SUFDRjtJQUNELENBQUMsS0FBSyxLQUFLOztFQUVkLEtBQUssV0FDSCxRQUFPLEdBQUcsbUJBQW9CLEdBQXNCLElBQUksVUFBVSxDQUFDO0VBQ3JFLEtBQUssb0JBQW9CO0dBQ3ZCLE1BQU0sTUFBTyxHQUE2QjtBQUcxQyxPQUFJLENBQUMsSUFBSSxTQUFTLElBQUksTUFBTSxXQUFXLEdBQUc7QUFDeEMsV0FBTzs7R0FJVCxNQUFNLFFBQVEsSUFBSSxNQUFNLEtBQUssU0FBa0I7QUFFN0MsUUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixZQUFPLEdBQUc7O0FBSVosUUFBSSxRQUFRLE9BQU8sU0FBUyxZQUFhLEtBQW1CLE1BQU07S0FDaEUsTUFBTSxZQUFZLG1CQUFtQixLQUFrQjtBQUN2RCxZQUFPLE1BQU0sVUFBVTs7QUFJekIsV0FBTztLQUNQO0FBRUYsVUFBTyxLQUFLLE1BQU0sS0FBSyxHQUFHLENBQUM7O0VBRTdCLEtBQUssT0FDSCxRQUFPO0VBQ1QsUUFDRSxPQUFNLElBQUksTUFBTSxtQkFBbUIsR0FBRyxJQUFJLE9BQU87Ozs7OztBQU92RCxTQUFnQixpQkFBaUIsSUFBdUI7QUFDdEQsU0FBUSxHQUFHLElBQUksTUFBZjtFQUNFLEtBQUssU0FDSCxRQUFPO0VBQ1QsS0FBSyxTQUNILFFBQU87RUFDVCxLQUFLLFNBQ0gsUUFBTztFQUNULEtBQUssVUFDSCxRQUFPO0VBQ1QsS0FBSyxPQUNILFFBQU87RUFDVCxLQUFLLE9BQ0gsUUFBTztFQUNULEtBQUssWUFDSCxRQUFPO0VBQ1QsS0FBSyxNQUNILFFBQU87RUFDVCxLQUFLLFVBQ0gsUUFBTztFQUNULEtBQUssUUFDSCxRQUFPO0VBQ1QsS0FBSyxXQUNILFFBQU8sR0FBRyxpQkFBa0IsR0FBc0IsSUFBSSxVQUFVLENBQUM7RUFDbkUsS0FBSyxXQUFXO0dBQ2QsTUFBTSxjQUFlLEdBQXFCO0FBQzFDLFVBQU8sR0FBRyxpQkFBaUIsWUFBWSxVQUFVLENBQUMsV0FBVyxZQUFZLGFBQWE7O0VBRXhGLEtBQUssVUFBVTtHQUNiLE1BQU0sYUFBYyxHQUFvQjtBQUN4QyxVQUFPLFlBQVksaUJBQWlCLFdBQVcsUUFBUSxDQUFDLElBQUksaUJBQzFELFdBQVcsVUFDWixDQUFDOztFQUVKLEtBQUssV0FBVztHQUNkLE1BQU0sUUFBUSxNQUFNLEtBQU0sR0FBcUMsT0FBTyxDQUFDLEtBQUssVUFBVTtBQUNwRixRQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzdCLFlBQU8sSUFBSSxNQUFNOztBQUduQixRQUFJLFVBQVUsTUFBTTtBQUNsQixZQUFPOztBQUdULFFBQUksVUFBVSxXQUFXO0FBQ3ZCLFlBQU87O0FBR1QsV0FBTyxHQUFHO0tBQ1Y7QUFFRixPQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3RCLFdBQU8sYUFBYSxNQUFNLEdBQUc7O0FBRS9CLFVBQU8sY0FBYyxNQUFNLEtBQUssS0FBSyxDQUFDOztFQUV4QyxLQUFLLFFBQ0gsUUFBTyxZQUFhLEdBQW1CLElBQUksUUFDeEMsS0FBSyxXQUFzQixpQkFBaUIsT0FBTyxDQUFDLENBQ3BELEtBQUssSUFBSSxDQUFDO0VBQ2YsS0FBSyxPQUVILFFBQU8sV0FBVyxPQUFPLFFBQVMsR0FBaUIsSUFBSSxRQUFRLENBQzVELEtBQUssQ0FBQyxLQUFLLFNBQVUsT0FBTyxRQUFRLFdBQVcsR0FBRyxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLE1BQU8sQ0FDdEYsS0FBSyxLQUFLLENBQUM7RUFDaEIsS0FBSyxRQUNILFFBQU8sV0FBVyxpQkFBa0IsR0FBNkIsSUFBSSxRQUFRLENBQUM7RUFDaEYsS0FBSyxVQUFVO0dBQ2IsTUFBTSxRQUFTLEdBQW9CO0FBQ25DLFVBQU87SUFDTDtJQUNBLEdBQUcsT0FBTyxLQUFLLE1BQU0sQ0FBQyxLQUFLLFFBQVEsR0FBRyxJQUFJLElBQUksaUJBQWlCLE1BQU0sS0FBSyxDQUFDLEdBQUc7SUFDOUU7SUFDRCxDQUFDLEtBQUssS0FBSzs7RUFFZCxLQUFLLFdBQ0gsUUFBTyxHQUFHLGlCQUFrQixHQUFnQyxJQUFJLFVBQVUsQ0FBQztFQUM3RSxLQUFLLE9BQ0gsUUFBTztFQUNULEtBQUssb0JBQW9CO0dBQ3ZCLE1BQU0sTUFBTyxHQUE2QjtBQUcxQyxPQUFJLENBQUMsSUFBSSxTQUFTLElBQUksTUFBTSxXQUFXLEdBQUc7QUFDeEMsV0FBTzs7R0FJVCxNQUFNLFFBQVEsSUFBSSxNQUFNLEtBQUssU0FBa0I7QUFFN0MsUUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixZQUFPLElBQUksS0FBSzs7QUFHbEIsUUFBSSxRQUFRLE9BQU8sU0FBUyxZQUFhLEtBQW1CLE1BQU07QUFDaEUsWUFBTyxpQkFBaUIsS0FBa0I7O0FBSTVDLFdBQU87S0FDUDtBQUVGLFVBQU8sc0JBQXNCLE1BQU0sS0FBSyxLQUFLLENBQUM7O0VBRWhELEtBQUssZ0JBQWdCO0dBQ25CLE1BQU0sbUJBQW9CLEdBQStDO0FBQ3pFLFVBQU8sa0JBQWtCLGlCQUFpQixpQkFBaUIsS0FBSyxDQUFDLElBQUksaUJBQWlCLGlCQUFpQixNQUFNLENBQUM7O0VBRWhILFFBQ0UsT0FBTSxJQUFJLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxPQUFPOzs7Ozs7O0FBUXZELFNBQWdCLHVCQUNkLFNBQ0EsVUFBa0IsUUFDSDtDQUNmLE1BQU0sTUFBTTtFQUNWLE1BQU07RUFDTixPQUFPLFdBQVcsU0FBUyxTQUFTLE1BQU07RUFDMUM7RUFDRDs7Ozs7Ozs7Ozs7Ozs7O0FBa0JELEtBQUksUUFBUSxnQkFBZ0IsZ0JBQWdCO0FBQzFDLFNBQU87R0FBRSxHQUFHO0dBQUssWUFBWTtHQUF5Qjs7QUFJeEQsS0FBSSxRQUFRLGdCQUFnQixjQUFjO0FBQ3hDLFNBQU87R0FBRSxHQUFHO0dBQUssWUFBWTtHQUFtQjs7QUFJbEQsS0FBSSxtQkFBbUJILElBQUUsV0FBVztFQUNsQyxNQUFNLGFBQWEsT0FBTyxLQUFLLFFBQVEsTUFBTTtFQUM3QyxNQUFNLFdBQVcsV0FBVyxLQUFLLFFBQVE7R0FDdkMsTUFBTSxZQUFZLFFBQVEsTUFBTTtBQUNoQyxVQUFPLHVCQUF1QixXQUFXLElBQUk7SUFDN0M7QUFDRixTQUFPO0dBQ0wsR0FBRztHQUNILFlBQVk7R0FDWjtHQUNEO1lBQ1EsbUJBQW1CQSxJQUFFLFVBQVU7RUFDeEMsTUFBTSxZQUFhLFFBQXFDLElBQUk7QUFFNUQsTUFDRSxxQkFBcUJBLElBQUUsY0FDdEIsUUFBUSxTQUFTLFlBQVksSUFBSSxRQUFRLFNBQVMsU0FBUyxHQUM1RDtBQUNBLFVBQU87SUFDTCxHQUFHO0lBQ0gsWUFBWTtJQUNiOztBQUVILFNBQU87R0FDTCxHQUFHO0dBQ0gsWUFBWTtHQUNaLFNBQVMsdUJBQXVCLFdBQVcsUUFBUTtHQUNwRDtZQUNRLG1CQUFtQkEsSUFBRSxVQUFVO0VBQ3hDLE1BQU0sY0FBZSxRQUFvQyxJQUFJLFFBQVEsS0FBSyxRQUN4RSx1QkFBdUIsS0FBSyxRQUFRLENBQ3JDO0FBRUQsU0FBTyxZQUFZO1lBQ1YsbUJBQW1CQSxJQUFFLGFBQWE7QUFDM0MsU0FBTztHQUNMLEdBQUcsdUJBQXdCLFFBQXFDLElBQUksV0FBVyxRQUFRO0dBQ3ZGLFVBQVU7R0FDWDtZQUNRLG1CQUFtQkEsSUFBRSxhQUFhO0FBQzNDLFNBQU87R0FDTCxHQUFHLHVCQUF3QixRQUFxQyxJQUFJLFdBQVcsUUFBUTtHQUN2RixVQUFVO0dBQ1g7UUFDSTtBQUNMLFNBQU87R0FDTCxHQUFHO0dBQ0gsWUFBWSxrQkFBa0IsU0FBUyxRQUFRO0dBQ2hEOzs7Ozs7QUFPTCxTQUFTLGtCQUFrQixLQUFhLFNBQW9EO0FBQzFGLEtBQUksbUJBQW1CQSxJQUFFLFNBQVM7QUFDaEMsU0FBTztZQUNFLG1CQUFtQkEsSUFBRSxLQUFLLFlBQVk7QUFHL0MsTUFBSSxRQUFRLGdCQUFnQixxQkFBcUI7QUFDL0MsVUFBTzthQUNFLElBQUksU0FBUyxPQUFPLEVBQUU7QUFDL0IsVUFBTzthQUNFLFFBQVEsTUFBTTtBQUN2QixVQUFPO2FBQ0UsSUFBSSxTQUFTLE1BQU0sRUFBRTtBQUM5QixVQUFPO1NBQ0Y7QUFDTCxVQUFPOztZQUVBLG1CQUFtQkEsSUFBRSxXQUFXO0FBQ3pDLE1BQUksUUFBUSxNQUFNO0FBQ2hCLFVBQU87YUFDRSxJQUFJLFNBQVMsTUFBTSxFQUFFO0FBQzlCLFVBQU87U0FDRjtBQUNMLFVBQU87O1lBRUEsbUJBQW1CQSxJQUFFLFlBQVk7QUFDMUMsU0FBTztZQUNFLG1CQUFtQkEsSUFBRSxTQUFTO0FBQ3ZDLFNBQU87WUFDRSxtQkFBbUJBLElBQUUsV0FBVztBQUN6QyxTQUFPO1lBQ0UsbUJBQW1CQSxJQUFFLFVBQVUsbUJBQW1CQSxJQUFFLFlBQVk7QUFDekUsU0FBTztZQUNFLG1CQUFtQkEsSUFBRSxVQUFVO0FBQ3hDLFNBQU87WUFDRSxtQkFBbUJBLElBQUUsWUFBWTtBQUMxQyxTQUFPO1lBQ0UsbUJBQW1CQSxJQUFFLG9CQUFvQjtBQUNsRCxTQUFPO1lBQ0UsUUFBUSxJQUFJLFNBQVMsVUFBVTtBQUN4QyxTQUFPO1FBQ0Y7QUFDTCxRQUFNLElBQUksTUFBTSxZQUFZLElBQUksR0FBRyxRQUFRLElBQUksT0FBTzs7Ozs7Y0E1dkJuQjtzQkFDa0I7YUFnQ2pDO2lCQU82QjtrQkFDSDtDQWVyQyxpQkFBaUI7RUFDNUIsWUFBWTtHQUNWLFFBQVE7R0FDUixZQUFZO0dBQ1osWUFBWTtHQUNiO0VBQ0QsZ0JBQWdCO0dBQ2QsUUFBUTtHQUNSLFlBQVk7R0FDWixZQUFZO0dBQ2I7RUFDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-explorer.d.ts","sourceRoot":"","sources":["../../src/testing/data-explorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"data-explorer.d.ts","sourceRoot":"","sources":["../../src/testing/data-explorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7F,+CAA+C;AAC/C,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;AAEnG,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,mBAAmB,GAAG;IAC9D,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,oBAAoB;IACpB,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;KACpC,CAAC;IACF,0CAA0C;IAC1C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;CACjD,CAAC;AAGF,qBAAa,YAAY;IAIrB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,aAAa;IAJvB,OAAO,CAAC,KAAK,CAAC,CAAe;gBAGnB,EAAE,EAAE,IAAI,EACR,aAAa,EAAE,OAAO,aAAa,EAC3C,YAAY,CAAC,EAAE,YAAY;IAKvB,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;YAmBvB,eAAe;YAsDf,UAAU;YAqCV,YAAY;IAO1B,OAAO,CAAC,mBAAmB;YAKb,YAAY;IA8BpB,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACrC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAuBrC;;OAEG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACrC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAWrD,OAAO,CAAC,gBAAgB;IAoBxB;;;OAGG;IACG,oBAAoB,CACxB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,0BAA0B,CAAC;IA6BtC;;OAEG;YACW,kBAAkB;CAkHjC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/rolldown_runtime.js";
|
|
2
|
+
import { init_utils, nonNullable } from "../utils/utils.js";
|
|
2
3
|
import { init_types, isBelongsToOneRelationProp, isOneToOneRelationProp, isRelationProp } from "../types/types.js";
|
|
3
4
|
|
|
4
5
|
//#region src/testing/data-explorer.ts
|
|
5
6
|
var DataExplorer;
|
|
6
7
|
var init_data_explorer = __esmMin((() => {
|
|
7
8
|
init_types();
|
|
9
|
+
init_utils();
|
|
8
10
|
DataExplorer = class {
|
|
9
11
|
cache;
|
|
10
12
|
constructor(db, entityManager, cacheManager) {
|
|
@@ -194,7 +196,7 @@ var init_data_explorer = __esmMin((() => {
|
|
|
194
196
|
return;
|
|
195
197
|
}
|
|
196
198
|
const entity = this.entityManager.get(entityName);
|
|
197
|
-
const recordIds = records.map((r) => r.id).filter(
|
|
199
|
+
const recordIds = records.map((r) => r.id).filter(nonNullable);
|
|
198
200
|
const forwardRelationProps = entity.props.filter((prop) => isRelationProp(prop) && (isBelongsToOneRelationProp(prop) || isOneToOneRelationProp(prop) && prop.hasJoinColumn));
|
|
199
201
|
for (const prop of forwardRelationProps) {
|
|
200
202
|
if (!isRelationProp(prop)) continue;
|
|
@@ -203,7 +205,7 @@ var init_data_explorer = __esmMin((() => {
|
|
|
203
205
|
continue;
|
|
204
206
|
}
|
|
205
207
|
const foreignKeyName = `${prop.name}_id`;
|
|
206
|
-
const referencedIds = records.map((record) => record[foreignKeyName]).filter(
|
|
208
|
+
const referencedIds = records.map((record) => record[foreignKeyName]).filter(Boolean);
|
|
207
209
|
if (referencedIds.length === 0) {
|
|
208
210
|
continue;
|
|
209
211
|
}
|
|
@@ -243,4 +245,4 @@ var init_data_explorer = __esmMin((() => {
|
|
|
243
245
|
//#endregion
|
|
244
246
|
init_data_explorer();
|
|
245
247
|
export { DataExplorer, init_data_explorer };
|
|
246
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1leHBsb3Jlci5qcyIsIm5hbWVzIjpbImRiOiBLbmV4IiwiZW50aXR5TWFuYWdlcjogdHlwZW9mIEVudGl0eU1hbmFnZXIiLCJyZXN1bHQ6IEV4cGxvcmVXaXRoUmVsYXRpb25zUmVzdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RpbmcvZGF0YS1leHBsb3Jlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuXG5pbXBvcnQgeyB0eXBlIENhY2hlTWFuYWdlciB9IGZyb20gXCIuLi9jYWNoZS90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eVwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AsIGlzT25lVG9PbmVSZWxhdGlvblByb3AsIGlzUmVsYXRpb25Qcm9wIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIERhdGFFeHBsb3JlclN0cmF0ZWd5ID0gXCJzYW1wbGVcIiB8IFwiaWRzXCIgfCBcInF1ZXJ5XCIgfCBcImZpbGVcIiB8IFwicmVjZW50XCIgfCBcInJhbmRvbVwiO1xuXG4vKiogV0hFUkUg7KGw6rG0IO2DgOyehSAo6rCd7LK0IOuYkOuKlCBLbmV4IFF1ZXJ5QnVpbGRlciDtlajsiJgpICovXG5leHBvcnQgdHlwZSBXaGVyZUNvbmRpdGlvbiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgKChxdWVyeUJ1aWxkZXI6IEtuZXguUXVlcnlCdWlsZGVyKSA9PiB2b2lkKTtcblxuZXhwb3J0IHR5cGUgRGF0YUV4cGxvcmVyT3B0aW9ucyA9IHtcbiAgc3RyYXRlZ3k6IERhdGFFeHBsb3JlclN0cmF0ZWd5O1xuICBsaW1pdD86IG51bWJlcjtcbiAgd2hlcmU/OiBXaGVyZUNvbmRpdGlvbjtcbiAgb3JkZXJCeT86IHN0cmluZztcbiAgaWRzPzogbnVtYmVyW107XG4gIGZpbGVQYXRoPzogc3RyaW5nO1xuICAvKiog7LqQ7IuxIOyCrOyaqSDsl6zrtoAgKOq4sOuzuOqwkjogZmFsc2UpICovXG4gIHVzZUNhY2hlPzogYm9vbGVhbjtcbiAgLyoqIOy6kOyLnCBUVEwgKOy0iCDri6jsnIQsIOq4sOuzuOqwkjogMzAwKSAqL1xuICBjYWNoZVR0bD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEV4cGxvcmVXaXRoUmVsYXRpb25zT3B0aW9ucyA9IERhdGFFeHBsb3Jlck9wdGlvbnMgJiB7XG4gIC8qKiDqtIDroKgg642w7J207YSwIO2PrO2VqCDsl6zrtoAgKOq4sOuzuOqwkjogdHJ1ZSkgKi9cbiAgaW5jbHVkZVJlbGF0aW9ucz86IGJvb2xlYW47XG4gIC8qKiDsnqzqt4Ag7YOQ7IOJIOy1nOuMgCDquYrsnbQgKOq4sOuzuOqwkjogMikgKi9cbiAgbWF4RGVwdGg/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBFeHBsb3JlV2l0aFJlbGF0aW9uc1Jlc3VsdCA9IHtcbiAgLyoqIOuplOyduCBlbnRpdHkg642w7J207YSwICovXG4gIG1haW46IHtcbiAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgIHJlY29yZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG4gIH07XG4gIC8qKiDqtIDroKggZW50aXR5IOuNsOydtO2EsCAoZW50aXR5SWQgLT4gcmVjb3JkcykgKi9cbiAgcmVsYXRlZDogTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT47XG59O1xuXG4vLyDquLDsobQgREIg642w7J207YSw66W8IO2DkOyDie2VmOyXrCBmaXh0dXJlIOyDneyEsSDsi5wg7LC47KGw7ZWgIOyImCDsnojripQg7Iuc7Iqk7YWcXG5leHBvcnQgY2xhc3MgRGF0YUV4cGxvcmVyIHtcbiAgcHJpdmF0ZSBjYWNoZT86IENhY2hlTWFuYWdlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRiOiBLbmV4LFxuICAgIHByaXZhdGUgZW50aXR5TWFuYWdlcjogdHlwZW9mIEVudGl0eU1hbmFnZXIsXG4gICAgY2FjaGVNYW5hZ2VyPzogQ2FjaGVNYW5hZ2VyLFxuICApIHtcbiAgICB0aGlzLmNhY2hlID0gY2FjaGVNYW5hZ2VyO1xuICB9XG5cbiAgYXN5bmMgZXhwbG9yZShcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9uczogRGF0YUV4cGxvcmVyT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5lbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlOYW1lKTtcbiAgICBpZiAoIWVudGl0eSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbnRpdHkgbm90IGZvdW5kOiAke2VudGl0eU5hbWV9YCk7XG4gICAgfVxuXG4gICAgLy8g7LqQ7IuxIOyngOybkFxuICAgIGlmIChvcHRpb25zLnVzZUNhY2hlICYmIHRoaXMuY2FjaGUpIHtcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gdGhpcy5nZW5lcmF0ZUNhY2hlS2V5KGVudGl0eU5hbWUsIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0T3JTZXQoe1xuICAgICAgICBrZXk6IGNhY2hlS2V5LFxuICAgICAgICB0dGw6IG9wdGlvbnMuY2FjaGVUdGwgfHwgMzAwLFxuICAgICAgICBmYWN0b3J5OiAoKSA9PiB0aGlzLmV4cGxvcmVJbnRlcm5hbChlbnRpdHksIG9wdGlvbnMpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhwbG9yZUludGVybmFsKGVudGl0eSwgb3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4cGxvcmVJbnRlcm5hbChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBvcHRpb25zOiBEYXRhRXhwbG9yZXJPcHRpb25zLFxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+IHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuZGIoZW50aXR5LnRhYmxlKTtcblxuICAgIHN3aXRjaCAob3B0aW9ucy5zdHJhdGVneSkge1xuICAgICAgY2FzZSBcInNhbXBsZVwiOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zYW1wbGVEYXRhKHF1ZXJ5LCBvcHRpb25zLmxpbWl0IHx8IDEwKTtcblxuICAgICAgY2FzZSBcInJlY2VudFwiOiB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRBdENvbCA9IHRoaXMuZmluZFRpbWVzdGFtcENvbHVtbihlbnRpdHksIFwiY3JlYXRlZF9hdFwiKTtcbiAgICAgICAgaWYgKGNyZWF0ZWRBdENvbCkge1xuICAgICAgICAgIHF1ZXJ5Lm9yZGVyQnkoY3JlYXRlZEF0Q29sLCBcImRlc2NcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJ5LmxpbWl0KG9wdGlvbnMubGltaXQgfHwgMTApO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFwicmFuZG9tXCI6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJhbmRvbVNhbXBsZShxdWVyeSwgb3B0aW9ucy5saW1pdCB8fCAxMCk7XG5cbiAgICAgIGNhc2UgXCJpZHNcIjpcbiAgICAgICAgaWYgKG9wdGlvbnMuaWRzICYmIG9wdGlvbnMuaWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBxdWVyeS53aGVyZUluKFwiaWRcIiwgb3B0aW9ucy5pZHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeTtcblxuICAgICAgY2FzZSBcInF1ZXJ5XCI6XG4gICAgICAgIGlmIChvcHRpb25zLndoZXJlKSB7XG4gICAgICAgICAgcXVlcnkud2hlcmUob3B0aW9ucy53aGVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMub3JkZXJCeSkge1xuICAgICAgICAgIGNvbnN0IFtjb2wsIGRpciA9IFwiYXNjXCJdID0gb3B0aW9ucy5vcmRlckJ5LnNwbGl0KFwiOlwiKTtcbiAgICAgICAgICAvLyBpZCDsu6zrn7zsnYAg7Iir7J6Q66GcIOy6kOyKpO2Mhe2VmOyXrCDsoJXroKztlanri4jri6QgKOusuOyekOyXtCDsoJXroKwg67Cp7KeAKVxuICAgICAgICAgIGlmIChjb2wgPT09IFwiaWRcIikge1xuICAgICAgICAgICAgcXVlcnkub3JkZXJCeVJhdyhgQ0FTVCg/PyBBUyBJTlRFR0VSKSAke2Rpcn1gLCBbY29sXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXJ5Lm9yZGVyQnkoY29sLCBkaXIgYXMgXCJhc2NcIiB8IFwiZGVzY1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJ5LmxpbWl0KG9wdGlvbnMubGltaXQgfHwgMTApO1xuXG4gICAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgICBpZiAoIW9wdGlvbnMuZmlsZVBhdGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaWxlUGF0aCBpcyByZXF1aXJlZCBmb3IgZmlsZSBzdHJhdGVneVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkRnJvbUZpbGUob3B0aW9ucy5maWxlUGF0aCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdHJhdGVneTogJHtvcHRpb25zLnN0cmF0ZWd5fWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIOq3oOuTsSDsg5jtlIzrp4EgKFBvc3RncmVTUUwgUk9XX05VTUJFUiDsgqzsmqkpXG4gIHByaXZhdGUgYXN5bmMgc2FtcGxlRGF0YShcbiAgICBxdWVyeTogS25leC5RdWVyeUJ1aWxkZXIsXG4gICAgbGltaXQ6IG51bWJlcixcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gICAgY29uc3QgW3sgY291bnQgfV0gPSBhd2FpdCBxdWVyeS5jbG9uZSgpLmNvdW50KFwiKiBhcyBjb3VudFwiKTtcbiAgICBjb25zdCB0b3RhbCA9IE51bWJlcihjb3VudCk7XG5cbiAgICBpZiAodG90YWwgPD0gbGltaXQpIHtcbiAgICAgIHJldHVybiBhd2FpdCBxdWVyeS5saW1pdChsaW1pdCk7XG4gICAgfVxuXG4gICAgLy8g6reg65OxIOqwhOqyqSDqs4TsgrBcbiAgICBjb25zdCBpbnRlcnZhbCA9IE1hdGguZmxvb3IodG90YWwgLyBsaW1pdCk7XG5cbiAgICAvLyDthYzsnbTruJTrqoUg7LaU7LacXG4gICAgY29uc3QgdGFibGVOYW1lID0gcXVlcnkudG9TdHJpbmcoKS5tYXRjaCgvZnJvbVxccytcIj8oXFx3KylcIj8vaSk/LlsxXTtcbiAgICBpZiAoIXRhYmxlTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGV4dHJhY3QgdGFibGUgbmFtZSBmcm9tIHF1ZXJ5XCIpO1xuICAgIH1cblxuICAgIC8vIFJPV19OVU1CRVIoKeuhnCDtlZwg67KI7JeQIOq3oOuTsSDsg5jtlIzrp4EgKOuLqOydvCDsv7zrpqwpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5kYi5yYXcoXG4gICAgICBgXG4gICAgICBXSVRIIG51bWJlcmVkX3Jvd3MgQVMgKFxuICAgICAgICBTRUxFQ1QgKiwgUk9XX05VTUJFUigpIE9WRVIgKE9SREVSIEJZIGlkKSBhcyByblxuICAgICAgICBGUk9NID8/XG4gICAgICApXG4gICAgICBTRUxFQ1QgKiBGUk9NIG51bWJlcmVkX3Jvd3NcbiAgICAgIFdIRVJFIE1PRChybiAtIDEsID8pID0gMFxuICAgICAgTElNSVQgP1xuICAgIGAsXG4gICAgICBbdGFibGVOYW1lLCBpbnRlcnZhbCwgbGltaXRdLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJhbmRvbVNhbXBsZShcbiAgICBxdWVyeTogS25leC5RdWVyeUJ1aWxkZXIsXG4gICAgbGltaXQ6IG51bWJlcixcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHF1ZXJ5Lm9yZGVyQnlSYXcoXCJSQU5ET00oKVwiKS5saW1pdChsaW1pdCk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRUaW1lc3RhbXBDb2x1bW4oZW50aXR5OiBFbnRpdHksIGNvbHVtbk5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHByb3AgPSBlbnRpdHkucHJvcHMuZmluZCgocCkgPT4gcC5uYW1lID09PSBjb2x1bW5OYW1lKTtcbiAgICByZXR1cm4gcHJvcD8ubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRnJvbUZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KFwiZnMvcHJvbWlzZXNcIik7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCBcInV0Zi04XCIpO1xuXG4gICAgaWYgKGZpbGVQYXRoLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJKU09OIGZpbGUgbXVzdCBjb250YWluIGFuIGFycmF5XCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuICAgIH0gZWxzZSBpZiAoZmlsZVBhdGguZW5kc1dpdGgoXCIuY3N2XCIpKSB7XG4gICAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIikuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnRyaW0oKSk7XG4gICAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBsaW5lc1swXS5zcGxpdChcIixcIikubWFwKChoKSA9PiBoLnRyaW0oKSk7XG4gICAgICByZXR1cm4gbGluZXMuc2xpY2UoMSkubWFwKChsaW5lKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGxpbmUuc3BsaXQoXCIsXCIpO1xuICAgICAgICByZXR1cm4gaGVhZGVycy5yZWR1Y2UoXG4gICAgICAgICAgKG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGhlYWRlcjogc3RyaW5nLCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIG9ialtoZWFkZXJdID0gdmFsdWVzW2ldPy50cmltKCk7XG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGZpbGUgZm9ybWF0OiAke2ZpbGVQYXRofWApO1xuICB9XG5cbiAgYXN5bmMgZXhwbG9yZVJlbGF0aW9uKFxuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICByZWxhdGlvblByb3A6IHN0cmluZyxcbiAgICBvcHRpb25zPzogUGFydGlhbDxEYXRhRXhwbG9yZXJPcHRpb25zPixcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5lbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlOYW1lKTtcbiAgICBjb25zdCBwcm9wID0gZW50aXR5LnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gcmVsYXRpb25Qcm9wKTtcblxuICAgIGlmICghcHJvcCB8fCAhaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVsYXRpb24gcHJvcGVydHkgbm90IGZvdW5kOiAke2VudGl0eU5hbWV9LiR7cmVsYXRpb25Qcm9wfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBwcm9wLmNvbmU/LmRhdGFTb3VyY2U7XG4gICAgY29uc3Qgc3RyYXRlZ3kgPSBkYXRhU291cmNlPy5zdHJhdGVneSB8fCBvcHRpb25zPy5zdHJhdGVneSB8fCBcInNhbXBsZVwiO1xuICAgIGNvbnN0IGNvbmZpZyA9XG4gICAgICBkYXRhU291cmNlPy5jb25maWcgJiYgdHlwZW9mIGRhdGFTb3VyY2UuY29uZmlnID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gKGRhdGFTb3VyY2UuY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhwbG9yZShwcm9wLndpdGgsIHtcbiAgICAgIHN0cmF0ZWd5LFxuICAgICAgbGltaXQ6IG9wdGlvbnM/LmxpbWl0IHx8ICh0eXBlb2YgY29uZmlnLmxpbWl0ID09PSBcIm51bWJlclwiID8gY29uZmlnLmxpbWl0IDogMTApLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09IFwib2JqZWN0XCIgPyBjb25maWcgOiB7fSksXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOyXrOufrCByZWxhdGlvbuydhCDrs5HroKzroZwg7KGw7ZqM7ZWp64uI64ukIChOKzEg66y47KCcIO2VtOqysClcbiAgICovXG4gIGFzeW5jIGV4cGxvcmVSZWxhdGlvbnMoXG4gICAgZW50aXR5TmFtZTogc3RyaW5nLFxuICAgIHJlbGF0aW9uUHJvcHM6IHN0cmluZ1tdLFxuICAgIG9wdGlvbnM/OiBQYXJ0aWFsPERhdGFFeHBsb3Jlck9wdGlvbnM+LFxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+PiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcmVsYXRpb25Qcm9wcy5tYXAoYXN5bmMgKHByb3ApID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZXhwbG9yZVJlbGF0aW9uKGVudGl0eU5hbWUsIHByb3AsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gW3Byb3AsIGRhdGFdIGFzIGNvbnN0O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMocmVzdWx0cyk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ2FjaGVLZXkoZW50aXR5TmFtZTogc3RyaW5nLCBvcHRpb25zOiBEYXRhRXhwbG9yZXJPcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtcbiAgICAgIGBEYXRhRXhwbG9yZXI6JHtlbnRpdHlOYW1lfWAsXG4gICAgICBvcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgb3B0aW9ucy5saW1pdD8udG9TdHJpbmcoKSB8fCBcImRlZmF1bHRcIixcbiAgICBdO1xuXG4gICAgaWYgKG9wdGlvbnMud2hlcmUpIHtcbiAgICAgIHBhcnRzLnB1c2goSlNPTi5zdHJpbmdpZnkob3B0aW9ucy53aGVyZSkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5vcmRlckJ5KSB7XG4gICAgICBwYXJ0cy5wdXNoKG9wdGlvbnMub3JkZXJCeSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmlkcykge1xuICAgICAgcGFydHMucHVzaChvcHRpb25zLmlkcy5qb2luKFwiLFwiKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oXCI6XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudGl0eeyZgCDqtIDroKjrkJwg642w7J207YSw66W8IOyerOq3gOyggeycvOuhnCDtg5Dsg4ntlanri4jri6QuXG4gICAqIEJlbG9uZ3NUb09uZSwgT25lVG9PbmUoaGFzSm9pbkNvbHVtbikgcmVsYXRpb27snYQg65Sw65286rCA66mwIOywuOyhsCDrjbDsnbTthLDrpbwg7IiY7KeR7ZWp64uI64ukLlxuICAgKi9cbiAgYXN5bmMgZXhwbG9yZVdpdGhSZWxhdGlvbnMoXG4gICAgZW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEV4cGxvcmVXaXRoUmVsYXRpb25zT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxFeHBsb3JlV2l0aFJlbGF0aW9uc1Jlc3VsdD4ge1xuICAgIGNvbnN0IGluY2x1ZGVSZWxhdGlvbnMgPSBvcHRpb25zLmluY2x1ZGVSZWxhdGlvbnMgPz8gdHJ1ZTtcbiAgICBjb25zdCBtYXhEZXB0aCA9IG9wdGlvbnMubWF4RGVwdGggPz8gMjtcblxuICAgIC8vIOuplOyduCBlbnRpdHkg7KGw7ZqMXG4gICAgY29uc3QgbWFpblJlY29yZHMgPSBhd2FpdCB0aGlzLmV4cGxvcmUoZW50aXR5TmFtZSwgb3B0aW9ucyk7XG5cbiAgICBjb25zdCByZXN1bHQ6IEV4cGxvcmVXaXRoUmVsYXRpb25zUmVzdWx0ID0ge1xuICAgICAgbWFpbjoge1xuICAgICAgICBlbnRpdHlJZDogZW50aXR5TmFtZSxcbiAgICAgICAgcmVjb3JkczogbWFpblJlY29yZHMsXG4gICAgICB9LFxuICAgICAgcmVsYXRlZDogbmV3IE1hcCgpLFxuICAgIH07XG5cbiAgICAvLyDqtIDroKgg642w7J207YSwIOyImOynke2VmOyngCDslYrsnLzrqbQg67CU66GcIOumrO2EtFxuICAgIGlmICghaW5jbHVkZVJlbGF0aW9ucyB8fCBtYXhEZXB0aCA8PSAwKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIOydtOuvuCDsobDtmoztlZwgZW50aXR5IOy2lOyggSAo7KSR67O1IOuwqeyngClcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmc+KFtlbnRpdHlOYW1lXSk7XG5cbiAgICAvLyDsnqzqt4DsoIHsnLzroZwg6rSA66CoIOuNsOydtO2EsCDsiJjsp5FcbiAgICBhd2FpdCB0aGlzLmNvbGxlY3RSZWxhdGVkRGF0YShlbnRpdHlOYW1lLCBtYWluUmVjb3JkcywgcmVzdWx0LnJlbGF0ZWQsIHZpc2l0ZWQsIG1heERlcHRoKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICog6rSA66CoIOuNsOydtO2EsOulvCDsnqzqt4DsoIHsnLzroZwg7IiY7KeR7ZWp64uI64ukIChwcml2YXRlIGhlbHBlcilcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY29sbGVjdFJlbGF0ZWREYXRhKFxuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICByZWNvcmRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICAgIHJlbGF0ZWRNYXA6IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+LFxuICAgIHZpc2l0ZWQ6IFNldDxzdHJpbmc+LFxuICAgIHJlbWFpbmluZ0RlcHRoOiBudW1iZXIsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChyZW1haW5pbmdEZXB0aCA8PSAwIHx8IHJlY29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5lbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlOYW1lKTtcbiAgICBjb25zdCByZWNvcmRJZHMgPSByZWNvcmRzLm1hcCgocikgPT4gci5pZCkuZmlsdGVyKChpZCkgPT4gaWQgIT0gbnVsbCk7XG5cbiAgICAvLyAxLiBGb3J3YXJkIHJlZmVyZW5jZXM6IOydtCBlbnRpdHnqsIAg7LC47KGw7ZWY64qUIOuLpOuluCBlbnRpdHlcbiAgICBjb25zdCBmb3J3YXJkUmVsYXRpb25Qcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoXG4gICAgICAocHJvcCkgPT5cbiAgICAgICAgaXNSZWxhdGlvblByb3AocHJvcCkgJiZcbiAgICAgICAgKGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApIHx8IChpc09uZVRvT25lUmVsYXRpb25Qcm9wKHByb3ApICYmIHByb3AuaGFzSm9pbkNvbHVtbikpLFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgZm9yd2FyZFJlbGF0aW9uUHJvcHMpIHtcbiAgICAgIGlmICghaXNSZWxhdGlvblByb3AocHJvcCkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCB0YXJnZXRFbnRpdHlOYW1lID0gcHJvcC53aXRoO1xuXG4gICAgICAvLyDsnbTrr7gg7KGw7ZqM7ZWcIGVudGl0eeuKlCDsiqTtgrUgKOyInO2ZmCDssLjsobAg67Cp7KeAKVxuICAgICAgaWYgKHZpc2l0ZWQuaGFzKHRhcmdldEVudGl0eU5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyDssLjsobDtlZjripQgSUTrk6Qg7IiY7KeRXG4gICAgICBjb25zdCBmb3JlaWduS2V5TmFtZSA9IGAke3Byb3AubmFtZX1faWRgO1xuICAgICAgY29uc3QgcmVmZXJlbmNlZElkcyA9IHJlY29yZHNcbiAgICAgICAgLm1hcCgocmVjb3JkKSA9PiByZWNvcmRbZm9yZWlnbktleU5hbWVdKVxuICAgICAgICAuZmlsdGVyKChpZCkgPT4gaWQgIT0gbnVsbCkgYXMgbnVtYmVyW107XG5cbiAgICAgIGlmIChyZWZlcmVuY2VkSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8g7KSR67O1IOygnOqxsFxuICAgICAgY29uc3QgdW5pcXVlSWRzID0gWy4uLm5ldyBTZXQocmVmZXJlbmNlZElkcyldO1xuXG4gICAgICAvLyDssLjsobAg642w7J207YSwIOyhsO2ajFxuICAgICAgY29uc3QgcmVmZXJlbmNlZFJlY29yZHMgPSBhd2FpdCB0aGlzLmV4cGxvcmUodGFyZ2V0RW50aXR5TmFtZSwge1xuICAgICAgICBzdHJhdGVneTogXCJpZHNcIixcbiAgICAgICAgaWRzOiB1bmlxdWVJZHMsXG4gICAgICB9KTtcblxuICAgICAgLy8g6rKw6rO87JeQIOy2lOqwgFxuICAgICAgcmVsYXRlZE1hcC5zZXQodGFyZ2V0RW50aXR5TmFtZSwgcmVmZXJlbmNlZFJlY29yZHMpO1xuICAgICAgdmlzaXRlZC5hZGQodGFyZ2V0RW50aXR5TmFtZSk7XG5cbiAgICAgIC8vIOyerOq3gDog7LC47KGw65CcIOuNsOydtO2EsOydmCDqtIDroKgg642w7J207YSw64+EIOyImOynkVxuICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0UmVsYXRlZERhdGEoXG4gICAgICAgIHRhcmdldEVudGl0eU5hbWUsXG4gICAgICAgIHJlZmVyZW5jZWRSZWNvcmRzLFxuICAgICAgICByZWxhdGVkTWFwLFxuICAgICAgICB2aXNpdGVkLFxuICAgICAgICByZW1haW5pbmdEZXB0aCAtIDEsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIDIuIEJhY2t3YXJkIHJlZmVyZW5jZXM6IOydtCBlbnRpdHnrpbwg7LC47KGw7ZWY64qUIOuLpOuluCBlbnRpdHlcbiAgICAvLyDrqqjrk6AgZW50aXR566W8IOyInO2ajO2VmOupsCDtmITsnqwgZW50aXR566W8IOywuOyhsO2VmOuKlCByZWxhdGlvbiDssL7quLBcbiAgICBjb25zdCBhbGxFbnRpdGllcyA9IHRoaXMuZW50aXR5TWFuYWdlci5nZXRBbGxFbnRpdGllcygpO1xuXG4gICAgZm9yIChjb25zdCBvdGhlckVudGl0eSBvZiBhbGxFbnRpdGllcykge1xuICAgICAgY29uc3Qgb3RoZXJFbnRpdHlOYW1lID0gb3RoZXJFbnRpdHkuaWQ7XG5cbiAgICAgIC8vIOydtOuvuCDsobDtmoztlojqsbDrgpgg7J6Q6riwIOyekOyLoOydtOuptCDsiqTtgrVcbiAgICAgIGlmICh2aXNpdGVkLmhhcyhvdGhlckVudGl0eU5hbWUpIHx8IG90aGVyRW50aXR5TmFtZSA9PT0gZW50aXR5TmFtZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8g7ZiE7J6sIGVudGl0eeulvCDssLjsobDtlZjripQgcmVsYXRpb24gcHJvcCDssL7quLBcbiAgICAgIGNvbnN0IGJhY2t3YXJkUmVsYXRpb25zID0gb3RoZXJFbnRpdHkucHJvcHMuZmlsdGVyKFxuICAgICAgICAocHJvcCkgPT5cbiAgICAgICAgICBpc1JlbGF0aW9uUHJvcChwcm9wKSAmJlxuICAgICAgICAgIHByb3Aud2l0aCA9PT0gZW50aXR5TmFtZSAmJlxuICAgICAgICAgIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fFxuICAgICAgICAgICAgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKSksXG4gICAgICApO1xuXG4gICAgICBmb3IgKGNvbnN0IHByb3Agb2YgYmFja3dhcmRSZWxhdGlvbnMpIHtcbiAgICAgICAgaWYgKCFpc1JlbGF0aW9uUHJvcChwcm9wKSkgY29udGludWU7XG5cbiAgICAgICAgLy8gb3RoZXJFbnRpdHnqsIAg7ZiE7J6sIGVudGl0eeulvCDssLjsobDtlZjripQgRksg7Lus65+8XG4gICAgICAgIGNvbnN0IGZvcmVpZ25LZXlOYW1lID0gYCR7cHJvcC5uYW1lfV9pZGA7XG5cbiAgICAgICAgLy8g7ZiE7J6sIOugiOy9lOuTnOuTpOydhCDssLjsobDtlZjripQgb3RoZXJFbnRpdHkg66CI7L2U65OcIOyhsO2ajFxuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZGIob3RoZXJFbnRpdHkudGFibGUpLndoZXJlSW4oZm9yZWlnbktleU5hbWUsIHJlY29yZElkcyk7XG4gICAgICAgIGNvbnN0IGJhY2t3YXJkUmVjb3JkcyA9IGF3YWl0IHF1ZXJ5O1xuXG4gICAgICAgIGlmIChiYWNrd2FyZFJlY29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDqsrDqs7zsl5Ag7LaU6rCAXG4gICAgICAgIHJlbGF0ZWRNYXAuc2V0KG90aGVyRW50aXR5TmFtZSwgYmFja3dhcmRSZWNvcmRzKTtcbiAgICAgICAgdmlzaXRlZC5hZGQob3RoZXJFbnRpdHlOYW1lKTtcblxuICAgICAgICAvLyDsnqzqt4A6IOyXreywuOyhsCDrjbDsnbTthLDsnZgg6rSA66CoIOuNsOydtO2EsOuPhCDsiJjsp5FcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0UmVsYXRlZERhdGEoXG4gICAgICAgICAgb3RoZXJFbnRpdHlOYW1lLFxuICAgICAgICAgIGJhY2t3YXJkUmVjb3JkcyxcbiAgICAgICAgICByZWxhdGVkTWFwLFxuICAgICAgICAgIHZpc2l0ZWQsXG4gICAgICAgICAgcmVtYWluaW5nRGVwdGggLSAxLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7YUFLb0c7Q0FzQ3ZGLGVBQWIsTUFBMEI7RUFDeEIsQUFBUTtFQUVSLFlBQ0UsQUFBUUEsSUFDUixBQUFRQyxlQUNSLGNBQ0E7R0FIUTtHQUNBO0FBR1IsUUFBSyxRQUFROztFQUdmLE1BQU0sUUFDSixZQUNBLFNBQ29DO0dBQ3BDLE1BQU0sU0FBUyxLQUFLLGNBQWMsSUFBSSxXQUFXO0FBQ2pELE9BQUksQ0FBQyxRQUFRO0FBQ1gsVUFBTSxJQUFJLE1BQU0scUJBQXFCLGFBQWE7O0FBSXBELE9BQUksUUFBUSxZQUFZLEtBQUssT0FBTztJQUNsQyxNQUFNLFdBQVcsS0FBSyxpQkFBaUIsWUFBWSxRQUFRO0FBQzNELFdBQU8sS0FBSyxNQUFNLFNBQVM7S0FDekIsS0FBSztLQUNMLEtBQUssUUFBUSxZQUFZO0tBQ3pCLGVBQWUsS0FBSyxnQkFBZ0IsUUFBUSxRQUFRO0tBQ3JELENBQUM7O0FBR0osVUFBTyxLQUFLLGdCQUFnQixRQUFRLFFBQVE7O0VBRzlDLE1BQWMsZ0JBQ1osUUFDQSxTQUNvQztHQUNwQyxNQUFNLFFBQVEsS0FBSyxHQUFHLE9BQU8sTUFBTTtBQUVuQyxXQUFRLFFBQVEsVUFBaEI7SUFDRSxLQUFLLFNBQ0gsUUFBTyxNQUFNLEtBQUssV0FBVyxPQUFPLFFBQVEsU0FBUyxHQUFHO0lBRTFELEtBQUssVUFBVTtLQUNiLE1BQU0sZUFBZSxLQUFLLG9CQUFvQixRQUFRLGFBQWE7QUFDbkUsU0FBSSxjQUFjO0FBQ2hCLFlBQU0sUUFBUSxjQUFjLE9BQU87O0FBRXJDLFlBQU8sTUFBTSxNQUFN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
|
|
248
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1leHBsb3Jlci5qcyIsIm5hbWVzIjpbImRiOiBLbmV4IiwiZW50aXR5TWFuYWdlcjogdHlwZW9mIEVudGl0eU1hbmFnZXIiLCJyZXN1bHQ6IEV4cGxvcmVXaXRoUmVsYXRpb25zUmVzdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RpbmcvZGF0YS1leHBsb3Jlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuXG5pbXBvcnQgeyB0eXBlIENhY2hlTWFuYWdlciB9IGZyb20gXCIuLi9jYWNoZS90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eVwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AsIGlzT25lVG9PbmVSZWxhdGlvblByb3AsIGlzUmVsYXRpb25Qcm9wIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBub25OdWxsYWJsZSB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG5leHBvcnQgdHlwZSBEYXRhRXhwbG9yZXJTdHJhdGVneSA9IFwic2FtcGxlXCIgfCBcImlkc1wiIHwgXCJxdWVyeVwiIHwgXCJmaWxlXCIgfCBcInJlY2VudFwiIHwgXCJyYW5kb21cIjtcblxuLyoqIFdIRVJFIOyhsOqxtCDtg4DsnoUgKOqwneyytCDrmJDripQgS25leCBRdWVyeUJ1aWxkZXIg7ZWo7IiYKSAqL1xuZXhwb3J0IHR5cGUgV2hlcmVDb25kaXRpb24gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8ICgocXVlcnlCdWlsZGVyOiBLbmV4LlF1ZXJ5QnVpbGRlcikgPT4gdm9pZCk7XG5cbmV4cG9ydCB0eXBlIERhdGFFeHBsb3Jlck9wdGlvbnMgPSB7XG4gIHN0cmF0ZWd5OiBEYXRhRXhwbG9yZXJTdHJhdGVneTtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIHdoZXJlPzogV2hlcmVDb25kaXRpb247XG4gIG9yZGVyQnk/OiBzdHJpbmc7XG4gIGlkcz86IG51bWJlcltdO1xuICBmaWxlUGF0aD86IHN0cmluZztcbiAgLyoqIOy6kOyLsSDsgqzsmqkg7Jes67aAICjquLDrs7jqsJI6IGZhbHNlKSAqL1xuICB1c2VDYWNoZT86IGJvb2xlYW47XG4gIC8qKiDsupDsi5wgVFRMICjstIgg64uo7JyELCDquLDrs7jqsJI6IDMwMCkgKi9cbiAgY2FjaGVUdGw/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBFeHBsb3JlV2l0aFJlbGF0aW9uc09wdGlvbnMgPSBEYXRhRXhwbG9yZXJPcHRpb25zICYge1xuICAvKiog6rSA66CoIOuNsOydtO2EsCDtj6ztlagg7Jes67aAICjquLDrs7jqsJI6IHRydWUpICovXG4gIGluY2x1ZGVSZWxhdGlvbnM/OiBib29sZWFuO1xuICAvKiog7J6s6reAIO2DkOyDiSDstZzrjIAg6rmK7J20ICjquLDrs7jqsJI6IDIpICovXG4gIG1heERlcHRoPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRXhwbG9yZVdpdGhSZWxhdGlvbnNSZXN1bHQgPSB7XG4gIC8qKiDrqZTsnbggZW50aXR5IOuNsOydtO2EsCAqL1xuICBtYWluOiB7XG4gICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICByZWNvcmRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuICB9O1xuICAvKiog6rSA66CoIGVudGl0eSDrjbDsnbTthLAgKGVudGl0eUlkIC0+IHJlY29yZHMpICovXG4gIHJlbGF0ZWQ6IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+O1xufTtcblxuLy8g6riw7KG0IERCIOuNsOydtO2EsOulvCDtg5Dsg4ntlZjsl6wgZml4dHVyZSDsg53shLEg7IucIOywuOyhsO2VoCDsiJgg7J6I64qUIOyLnOyKpO2FnFxuZXhwb3J0IGNsYXNzIERhdGFFeHBsb3JlciB7XG4gIHByaXZhdGUgY2FjaGU/OiBDYWNoZU1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYjogS25leCxcbiAgICBwcml2YXRlIGVudGl0eU1hbmFnZXI6IHR5cGVvZiBFbnRpdHlNYW5hZ2VyLFxuICAgIGNhY2hlTWFuYWdlcj86IENhY2hlTWFuYWdlcixcbiAgKSB7XG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlTWFuYWdlcjtcbiAgfVxuXG4gIGFzeW5jIGV4cGxvcmUoXG4gICAgZW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IERhdGFFeHBsb3Jlck9wdGlvbnMsXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXR5TWFuYWdlci5nZXQoZW50aXR5TmFtZSk7XG4gICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW50aXR5IG5vdCBmb3VuZDogJHtlbnRpdHlOYW1lfWApO1xuICAgIH1cblxuICAgIC8vIOy6kOyLsSDsp4Dsm5BcbiAgICBpZiAob3B0aW9ucy51c2VDYWNoZSAmJiB0aGlzLmNhY2hlKSB7XG4gICAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVDYWNoZUtleShlbnRpdHlOYW1lLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlLmdldE9yU2V0KHtcbiAgICAgICAga2V5OiBjYWNoZUtleSxcbiAgICAgICAgdHRsOiBvcHRpb25zLmNhY2hlVHRsIHx8IDMwMCxcbiAgICAgICAgZmFjdG9yeTogKCkgPT4gdGhpcy5leHBsb3JlSW50ZXJuYWwoZW50aXR5LCBvcHRpb25zKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4cGxvcmVJbnRlcm5hbChlbnRpdHksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleHBsb3JlSW50ZXJuYWwoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgb3B0aW9uczogRGF0YUV4cGxvcmVyT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmRiKGVudGl0eS50YWJsZSk7XG5cbiAgICBzd2l0Y2ggKG9wdGlvbnMuc3RyYXRlZ3kpIHtcbiAgICAgIGNhc2UgXCJzYW1wbGVcIjpcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2FtcGxlRGF0YShxdWVyeSwgb3B0aW9ucy5saW1pdCB8fCAxMCk7XG5cbiAgICAgIGNhc2UgXCJyZWNlbnRcIjoge1xuICAgICAgICBjb25zdCBjcmVhdGVkQXRDb2wgPSB0aGlzLmZpbmRUaW1lc3RhbXBDb2x1bW4oZW50aXR5LCBcImNyZWF0ZWRfYXRcIik7XG4gICAgICAgIGlmIChjcmVhdGVkQXRDb2wpIHtcbiAgICAgICAgICBxdWVyeS5vcmRlckJ5KGNyZWF0ZWRBdENvbCwgXCJkZXNjXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeS5saW1pdChvcHRpb25zLmxpbWl0IHx8IDEwKTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBcInJhbmRvbVwiOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yYW5kb21TYW1wbGUocXVlcnksIG9wdGlvbnMubGltaXQgfHwgMTApO1xuXG4gICAgICBjYXNlIFwiaWRzXCI6XG4gICAgICAgIGlmIChvcHRpb25zLmlkcyAmJiBvcHRpb25zLmlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcXVlcnkud2hlcmVJbihcImlkXCIsIG9wdGlvbnMuaWRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcXVlcnk7XG5cbiAgICAgIGNhc2UgXCJxdWVyeVwiOlxuICAgICAgICBpZiAob3B0aW9ucy53aGVyZSkge1xuICAgICAgICAgIHF1ZXJ5LndoZXJlKG9wdGlvbnMud2hlcmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm9yZGVyQnkpIHtcbiAgICAgICAgICBjb25zdCBbY29sLCBkaXIgPSBcImFzY1wiXSA9IG9wdGlvbnMub3JkZXJCeS5zcGxpdChcIjpcIik7XG4gICAgICAgICAgLy8gaWQg7Lus65+87J2AIOyIq+yekOuhnCDsupDsiqTtjIXtlZjsl6wg7KCV66Cs7ZWp64uI64ukICjrrLjsnpDsl7Qg7KCV66CsIOuwqeyngClcbiAgICAgICAgICBpZiAoY29sID09PSBcImlkXCIpIHtcbiAgICAgICAgICAgIHF1ZXJ5Lm9yZGVyQnlSYXcoYENBU1QoPz8gQVMgSU5URUdFUikgJHtkaXJ9YCwgW2NvbF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVyeS5vcmRlckJ5KGNvbCwgZGlyIGFzIFwiYXNjXCIgfCBcImRlc2NcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeS5saW1pdChvcHRpb25zLmxpbWl0IHx8IDEwKTtcblxuICAgICAgY2FzZSBcImZpbGVcIjpcbiAgICAgICAgaWYgKCFvcHRpb25zLmZpbGVQYXRoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmlsZVBhdGggaXMgcmVxdWlyZWQgZm9yIGZpbGUgc3RyYXRlZ3lcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZEZyb21GaWxlKG9wdGlvbnMuZmlsZVBhdGgpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3RyYXRlZ3k6ICR7b3B0aW9ucy5zdHJhdGVneX1gKTtcbiAgICB9XG4gIH1cblxuICAvLyDqt6Drk7Eg7IOY7ZSM66eBIChQb3N0Z3JlU1FMIFJPV19OVU1CRVIg7IKs7JqpKVxuICBwcml2YXRlIGFzeW5jIHNhbXBsZURhdGEoXG4gICAgcXVlcnk6IEtuZXguUXVlcnlCdWlsZGVyLFxuICAgIGxpbWl0OiBudW1iZXIsXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICAgIGNvbnN0IFt7IGNvdW50IH1dID0gYXdhaXQgcXVlcnkuY2xvbmUoKS5jb3VudChcIiogYXMgY291bnRcIik7XG4gICAgY29uc3QgdG90YWwgPSBOdW1iZXIoY291bnQpO1xuXG4gICAgaWYgKHRvdGFsIDw9IGxpbWl0KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcXVlcnkubGltaXQobGltaXQpO1xuICAgIH1cblxuICAgIC8vIOq3oOuTsSDqsITqsqkg6rOE7IKwXG4gICAgY29uc3QgaW50ZXJ2YWwgPSBNYXRoLmZsb29yKHRvdGFsIC8gbGltaXQpO1xuXG4gICAgLy8g7YWM7J2067iU66qFIOy2lOy2nFxuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHF1ZXJ5LnRvU3RyaW5nKCkubWF0Y2goL2Zyb21cXHMrXCI/KFxcdyspXCI/L2kpPy5bMV07XG4gICAgaWYgKCF0YWJsZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIG5hbWUgZnJvbSBxdWVyeVwiKTtcbiAgICB9XG5cbiAgICAvLyBST1dfTlVNQkVSKCnroZwg7ZWcIOuyiOyXkCDqt6Drk7Eg7IOY7ZSM66eBICjri6jsnbwg7L+866asKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZGIucmF3KFxuICAgICAgYFxuICAgICAgV0lUSCBudW1iZXJlZF9yb3dzIEFTIChcbiAgICAgICAgU0VMRUNUICosIFJPV19OVU1CRVIoKSBPVkVSIChPUkRFUiBCWSBpZCkgYXMgcm5cbiAgICAgICAgRlJPTSA/P1xuICAgICAgKVxuICAgICAgU0VMRUNUICogRlJPTSBudW1iZXJlZF9yb3dzXG4gICAgICBXSEVSRSBNT0Qocm4gLSAxLCA/KSA9IDBcbiAgICAgIExJTUlUID9cbiAgICBgLFxuICAgICAgW3RhYmxlTmFtZSwgaW50ZXJ2YWwsIGxpbWl0XSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByYW5kb21TYW1wbGUoXG4gICAgcXVlcnk6IEtuZXguUXVlcnlCdWlsZGVyLFxuICAgIGxpbWl0OiBudW1iZXIsXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeS5vcmRlckJ5UmF3KFwiUkFORE9NKClcIikubGltaXQobGltaXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kVGltZXN0YW1wQ29sdW1uKGVudGl0eTogRW50aXR5LCBjb2x1bW5OYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBwcm9wID0gZW50aXR5LnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gY29sdW1uTmFtZSk7XG4gICAgcmV0dXJuIHByb3A/Lm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZyb21GaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+IHtcbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcImZzL3Byb21pc2VzXCIpO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgXCJ1dGYtOFwiKTtcblxuICAgIGlmIChmaWxlUGF0aC5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSlNPTiBmaWxlIG11c3QgY29udGFpbiBhbiBhcnJheVwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJzZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbiAgICB9IGVsc2UgaWYgKGZpbGVQYXRoLmVuZHNXaXRoKFwiLmNzdlwiKSkge1xuICAgICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkpO1xuICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuXG4gICAgICBjb25zdCBoZWFkZXJzID0gbGluZXNbMF0uc3BsaXQoXCIsXCIpLm1hcCgoaCkgPT4gaC50cmltKCkpO1xuICAgICAgcmV0dXJuIGxpbmVzLnNsaWNlKDEpLm1hcCgobGluZSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBsaW5lLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnMucmVkdWNlKFxuICAgICAgICAgIChvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBoZWFkZXI6IHN0cmluZywgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBvYmpbaGVhZGVyXSA9IHZhbHVlc1tpXT8udHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBmaWxlIGZvcm1hdDogJHtmaWxlUGF0aH1gKTtcbiAgfVxuXG4gIGFzeW5jIGV4cGxvcmVSZWxhdGlvbihcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgcmVsYXRpb25Qcm9wOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFBhcnRpYWw8RGF0YUV4cGxvcmVyT3B0aW9ucz4sXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXR5TWFuYWdlci5nZXQoZW50aXR5TmFtZSk7XG4gICAgY29uc3QgcHJvcCA9IGVudGl0eS5wcm9wcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IHJlbGF0aW9uUHJvcCk7XG5cbiAgICBpZiAoIXByb3AgfHwgIWlzUmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlbGF0aW9uIHByb3BlcnR5IG5vdCBmb3VuZDogJHtlbnRpdHlOYW1lfS4ke3JlbGF0aW9uUHJvcH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhU291cmNlID0gcHJvcC5jb25lPy5kYXRhU291cmNlO1xuICAgIGNvbnN0IHN0cmF0ZWd5ID0gZGF0YVNvdXJjZT8uc3RyYXRlZ3kgfHwgb3B0aW9ucz8uc3RyYXRlZ3kgfHwgXCJzYW1wbGVcIjtcbiAgICBjb25zdCBjb25maWcgPVxuICAgICAgZGF0YVNvdXJjZT8uY29uZmlnICYmIHR5cGVvZiBkYXRhU291cmNlLmNvbmZpZyA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IChkYXRhU291cmNlLmNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgICAgOiB7fTtcblxuICAgIHJldHVybiB0aGlzLmV4cGxvcmUocHJvcC53aXRoLCB7XG4gICAgICBzdHJhdGVneSxcbiAgICAgIGxpbWl0OiBvcHRpb25zPy5saW1pdCB8fCAodHlwZW9mIGNvbmZpZy5saW1pdCA9PT0gXCJudW1iZXJcIiA/IGNvbmZpZy5saW1pdCA6IDEwKSxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSBcIm9iamVjdFwiID8gY29uZmlnIDoge30pLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDsl6zrn6wgcmVsYXRpb27snYQg67OR66Cs66GcIOyhsO2ajO2VqeuLiOuLpCAoTisxIOusuOygnCDtlbTqsrApXG4gICAqL1xuICBhc3luYyBleHBsb3JlUmVsYXRpb25zKFxuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICByZWxhdGlvblByb3BzOiBzdHJpbmdbXSxcbiAgICBvcHRpb25zPzogUGFydGlhbDxEYXRhRXhwbG9yZXJPcHRpb25zPixcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPj4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHJlbGF0aW9uUHJvcHMubWFwKGFzeW5jIChwcm9wKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmV4cGxvcmVSZWxhdGlvbihlbnRpdHlOYW1lLCBwcm9wLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIFtwcm9wLCBkYXRhXSBhcyBjb25zdDtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHJlc3VsdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNhY2hlS2V5KGVudGl0eU5hbWU6IHN0cmluZywgb3B0aW9uczogRGF0YUV4cGxvcmVyT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBbXG4gICAgICBgRGF0YUV4cGxvcmVyOiR7ZW50aXR5TmFtZX1gLFxuICAgICAgb3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIG9wdGlvbnMubGltaXQ/LnRvU3RyaW5nKCkgfHwgXCJkZWZhdWx0XCIsXG4gICAgXTtcblxuICAgIGlmIChvcHRpb25zLndoZXJlKSB7XG4gICAgICBwYXJ0cy5wdXNoKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMud2hlcmUpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMub3JkZXJCeSkge1xuICAgICAgcGFydHMucHVzaChvcHRpb25zLm9yZGVyQnkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgIHBhcnRzLnB1c2gob3B0aW9ucy5pZHMuam9pbihcIixcIikpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiOlwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnRpdHnsmYAg6rSA66Co65CcIOuNsOydtO2EsOulvCDsnqzqt4DsoIHsnLzroZwg7YOQ7IOJ7ZWp64uI64ukLlxuICAgKiBCZWxvbmdzVG9PbmUsIE9uZVRvT25lKGhhc0pvaW5Db2x1bW4pIHJlbGF0aW9u7J2EIOuUsOudvOqwgOupsCDssLjsobAg642w7J207YSw66W8IOyImOynke2VqeuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGV4cGxvcmVXaXRoUmVsYXRpb25zKFxuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBFeHBsb3JlV2l0aFJlbGF0aW9uc09wdGlvbnMsXG4gICk6IFByb21pc2U8RXhwbG9yZVdpdGhSZWxhdGlvbnNSZXN1bHQ+IHtcbiAgICBjb25zdCBpbmNsdWRlUmVsYXRpb25zID0gb3B0aW9ucy5pbmNsdWRlUmVsYXRpb25zID8/IHRydWU7XG4gICAgY29uc3QgbWF4RGVwdGggPSBvcHRpb25zLm1heERlcHRoID8/IDI7XG5cbiAgICAvLyDrqZTsnbggZW50aXR5IOyhsO2ajFxuICAgIGNvbnN0IG1haW5SZWNvcmRzID0gYXdhaXQgdGhpcy5leHBsb3JlKGVudGl0eU5hbWUsIG9wdGlvbnMpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBFeHBsb3JlV2l0aFJlbGF0aW9uc1Jlc3VsdCA9IHtcbiAgICAgIG1haW46IHtcbiAgICAgICAgZW50aXR5SWQ6IGVudGl0eU5hbWUsXG4gICAgICAgIHJlY29yZHM6IG1haW5SZWNvcmRzLFxuICAgICAgfSxcbiAgICAgIHJlbGF0ZWQ6IG5ldyBNYXAoKSxcbiAgICB9O1xuXG4gICAgLy8g6rSA66CoIOuNsOydtO2EsCDsiJjsp5HtlZjsp4Ag7JWK7Jy866m0IOuwlOuhnCDrpqzthLRcbiAgICBpZiAoIWluY2x1ZGVSZWxhdGlvbnMgfHwgbWF4RGVwdGggPD0gMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyDsnbTrr7gg7KGw7ZqM7ZWcIGVudGl0eSDstpTsoIEgKOykkeuztSDrsKnsp4ApXG4gICAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQ8c3RyaW5nPihbZW50aXR5TmFtZV0pO1xuXG4gICAgLy8g7J6s6reA7KCB7Jy866GcIOq0gOugqCDrjbDsnbTthLAg7IiY7KeRXG4gICAgYXdhaXQgdGhpcy5jb2xsZWN0UmVsYXRlZERhdGEoZW50aXR5TmFtZSwgbWFpblJlY29yZHMsIHJlc3VsdC5yZWxhdGVkLCB2aXNpdGVkLCBtYXhEZXB0aCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIOq0gOugqCDrjbDsnbTthLDrpbwg7J6s6reA7KCB7Jy866GcIOyImOynke2VqeuLiOuLpCAocHJpdmF0ZSBoZWxwZXIpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbGxlY3RSZWxhdGVkRGF0YShcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgcmVjb3JkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgICByZWxhdGVkTWFwOiBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPixcbiAgICB2aXNpdGVkOiBTZXQ8c3RyaW5nPixcbiAgICByZW1haW5pbmdEZXB0aDogbnVtYmVyLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocmVtYWluaW5nRGVwdGggPD0gMCB8fCByZWNvcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXR5TWFuYWdlci5nZXQoZW50aXR5TmFtZSk7XG4gICAgY29uc3QgcmVjb3JkSWRzID0gcmVjb3Jkcy5tYXAoKHIpID0+IHIuaWQpLmZpbHRlcihub25OdWxsYWJsZSk7XG5cbiAgICAvLyAxLiBGb3J3YXJkIHJlZmVyZW5jZXM6IOydtCBlbnRpdHnqsIAg7LC47KGw7ZWY64qUIOuLpOuluCBlbnRpdHlcbiAgICBjb25zdCBmb3J3YXJkUmVsYXRpb25Qcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoXG4gICAgICAocHJvcCkgPT5cbiAgICAgICAgaXNSZWxhdGlvblByb3AocHJvcCkgJiZcbiAgICAgICAgKGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApIHx8IChpc09uZVRvT25lUmVsYXRpb25Qcm9wKHByb3ApICYmIHByb3AuaGFzSm9pbkNvbHVtbikpLFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgZm9yd2FyZFJlbGF0aW9uUHJvcHMpIHtcbiAgICAgIGlmICghaXNSZWxhdGlvblByb3AocHJvcCkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCB0YXJnZXRFbnRpdHlOYW1lID0gcHJvcC53aXRoO1xuXG4gICAgICAvLyDsnbTrr7gg7KGw7ZqM7ZWcIGVudGl0eeuKlCDsiqTtgrUgKOyInO2ZmCDssLjsobAg67Cp7KeAKVxuICAgICAgaWYgKHZpc2l0ZWQuaGFzKHRhcmdldEVudGl0eU5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyDssLjsobDtlZjripQgSUTrk6Qg7IiY7KeRXG4gICAgICBjb25zdCBmb3JlaWduS2V5TmFtZSA9IGAke3Byb3AubmFtZX1faWRgO1xuICAgICAgY29uc3QgcmVmZXJlbmNlZElkcyA9IHJlY29yZHNcbiAgICAgICAgLm1hcCgocmVjb3JkKSA9PiByZWNvcmRbZm9yZWlnbktleU5hbWVdKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIG51bWJlcltdO1xuXG4gICAgICBpZiAocmVmZXJlbmNlZElkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIOykkeuztSDsoJzqsbBcbiAgICAgIGNvbnN0IHVuaXF1ZUlkcyA9IFsuLi5uZXcgU2V0KHJlZmVyZW5jZWRJZHMpXTtcblxuICAgICAgLy8g7LC47KGwIOuNsOydtO2EsCDsobDtmoxcbiAgICAgIGNvbnN0IHJlZmVyZW5jZWRSZWNvcmRzID0gYXdhaXQgdGhpcy5leHBsb3JlKHRhcmdldEVudGl0eU5hbWUsIHtcbiAgICAgICAgc3RyYXRlZ3k6IFwiaWRzXCIsXG4gICAgICAgIGlkczogdW5pcXVlSWRzLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIOqysOqzvOyXkCDstpTqsIBcbiAgICAgIHJlbGF0ZWRNYXAuc2V0KHRhcmdldEVudGl0eU5hbWUsIHJlZmVyZW5jZWRSZWNvcmRzKTtcbiAgICAgIHZpc2l0ZWQuYWRkKHRhcmdldEVudGl0eU5hbWUpO1xuXG4gICAgICAvLyDsnqzqt4A6IOywuOyhsOuQnCDrjbDsnbTthLDsnZgg6rSA66CoIOuNsOydtO2EsOuPhCDsiJjsp5FcbiAgICAgIGF3YWl0IHRoaXMuY29sbGVjdFJlbGF0ZWREYXRhKFxuICAgICAgICB0YXJnZXRFbnRpdHlOYW1lLFxuICAgICAgICByZWZlcmVuY2VkUmVjb3JkcyxcbiAgICAgICAgcmVsYXRlZE1hcCxcbiAgICAgICAgdmlzaXRlZCxcbiAgICAgICAgcmVtYWluaW5nRGVwdGggLSAxLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyAyLiBCYWNrd2FyZCByZWZlcmVuY2VzOiDsnbQgZW50aXR566W8IOywuOyhsO2VmOuKlCDri6TrpbggZW50aXR5XG4gICAgLy8g66qo65OgIGVudGl0eeulvCDsiJztmoztlZjrqbAg7ZiE7J6sIGVudGl0eeulvCDssLjsobDtlZjripQgcmVsYXRpb24g7LC+6riwXG4gICAgY29uc3QgYWxsRW50aXRpZXMgPSB0aGlzLmVudGl0eU1hbmFnZXIuZ2V0QWxsRW50aXRpZXMoKTtcblxuICAgIGZvciAoY29uc3Qgb3RoZXJFbnRpdHkgb2YgYWxsRW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IG90aGVyRW50aXR5TmFtZSA9IG90aGVyRW50aXR5LmlkO1xuXG4gICAgICAvLyDsnbTrr7gg7KGw7ZqM7ZaI6rGw64KYIOyekOq4sCDsnpDsi6DsnbTrqbQg7Iqk7YK1XG4gICAgICBpZiAodmlzaXRlZC5oYXMob3RoZXJFbnRpdHlOYW1lKSB8fCBvdGhlckVudGl0eU5hbWUgPT09IGVudGl0eU5hbWUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIO2YhOyerCBlbnRpdHnrpbwg7LC47KGw7ZWY64qUIHJlbGF0aW9uIHByb3Ag7LC+6riwXG4gICAgICBjb25zdCBiYWNrd2FyZFJlbGF0aW9ucyA9IG90aGVyRW50aXR5LnByb3BzLmZpbHRlcihcbiAgICAgICAgKHByb3ApID0+XG4gICAgICAgICAgaXNSZWxhdGlvblByb3AocHJvcCkgJiZcbiAgICAgICAgICBwcm9wLndpdGggPT09IGVudGl0eU5hbWUgJiZcbiAgICAgICAgICAoaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkgfHxcbiAgICAgICAgICAgIChpc09uZVRvT25lUmVsYXRpb25Qcm9wKHByb3ApICYmIHByb3AuaGFzSm9pbkNvbHVtbikpLFxuICAgICAgKTtcblxuICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGJhY2t3YXJkUmVsYXRpb25zKSB7XG4gICAgICAgIGlmICghaXNSZWxhdGlvblByb3AocHJvcCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIG90aGVyRW50aXR56rCAIO2YhOyerCBlbnRpdHnrpbwg7LC47KGw7ZWY64qUIEZLIOy7rOufvFxuICAgICAgICBjb25zdCBmb3JlaWduS2V5TmFtZSA9IGAke3Byb3AubmFtZX1faWRgO1xuXG4gICAgICAgIC8vIO2YhOyerCDroIjsvZTrk5zrk6TsnYQg7LC47KGw7ZWY64qUIG90aGVyRW50aXR5IOugiOy9lOuTnCDsobDtmoxcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmRiKG90aGVyRW50aXR5LnRhYmxlKS53aGVyZUluKGZvcmVpZ25LZXlOYW1lLCByZWNvcmRJZHMpO1xuICAgICAgICBjb25zdCBiYWNrd2FyZFJlY29yZHMgPSBhd2FpdCBxdWVyeTtcblxuICAgICAgICBpZiAoYmFja3dhcmRSZWNvcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g6rKw6rO87JeQIOy2lOqwgFxuICAgICAgICByZWxhdGVkTWFwLnNldChvdGhlckVudGl0eU5hbWUsIGJhY2t3YXJkUmVjb3Jkcyk7XG4gICAgICAgIHZpc2l0ZWQuYWRkKG90aGVyRW50aXR5TmFtZSk7XG5cbiAgICAgICAgLy8g7J6s6reAOiDsl63ssLjsobAg642w7J207YSw7J2YIOq0gOugqCDrjbDsnbTthLDrj4Qg7IiY7KeRXG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdFJlbGF0ZWREYXRhKFxuICAgICAgICAgIG90aGVyRW50aXR5TmFtZSxcbiAgICAgICAgICBiYWNrd2FyZFJlY29yZHMsXG4gICAgICAgICAgcmVsYXRlZE1hcCxcbiAgICAgICAgICB2aXNpdGVkLFxuICAgICAgICAgIHJlbWFpbmluZ0RlcHRoIC0gMSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OzthQUtvRzthQUN2RDtDQXNDaEMsZUFBYixNQUEwQjtFQUN4QixBQUFRO0VBRVIsWUFDRSxBQUFRQSxJQUNSLEFBQVFDLGVBQ1IsY0FDQTtHQUhRO0dBQ0E7QUFHUixRQUFLLFFBQVE7O0VBR2YsTUFBTSxRQUNKLFlBQ0EsU0FDb0M7R0FDcEMsTUFBTSxTQUFTLEtBQUssY0FBYyxJQUFJLFdBQVc7QUFDakQsT0FBSSxDQUFDLFFBQVE7QUFDWCxVQUFNLElBQUksTUFBTSxxQkFBcUIsYUFBYTs7QUFJcEQsT0FBSSxRQUFRLFlBQVksS0FBSyxPQUFPO0lBQ2xDLE1BQU0sV0FBVyxLQUFLLGlCQUFpQixZQUFZLFFBQVE7QUFDM0QsV0FBTyxLQUFLLE1BQU0sU0FBUztLQUN6QixLQUFLO0tBQ0wsS0FBSyxRQUFRLFlBQVk7S0FDekIsZUFBZSxLQUFLLGdCQUFnQixRQUFRLFFBQVE7S0FDckQsQ0FBQzs7QUFHSixVQUFPLEtBQUssZ0JBQWdCLFFBQVEsUUFBUTs7RUFHOUMsTUFBYyxnQkFDWixRQUNBLFNBQ29DO0dBQ3BDLE1BQU0sUUFBUSxLQUFLLEdBQUcsT0FBTyxNQUFNO0FBRW5DLFdBQVEsUUFBUSxVQUFoQjtJQUNFLEtBQUssU0FDSCxRQUFPLE1BQU0sS0FBSyxXQUFXLE9BQU8sUUFBUSxTQUFTLEdBQUc7SUFFMUQsS0FBSyxVQUFVO0tBQ2IsTUFBTSxlQUFlLEtBQUssb0JBQW9CLFFBQVEsYUFBYTtBQUNuRSxTQUFJLGNBQWM7QUFDaEIsWUFB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
|
package/dist/types/types.d.ts
CHANGED
|
@@ -86,11 +86,11 @@ export type BigIntegerArrayProp = CommonProp & {
|
|
|
86
86
|
* BaseSchema 생성 시 Zod의 string format validation을 적용합니다.
|
|
87
87
|
*/
|
|
88
88
|
export declare const ZodStringFormat: z.ZodEnum<{
|
|
89
|
+
uuid: "uuid";
|
|
90
|
+
email: "email";
|
|
89
91
|
base64: "base64";
|
|
90
92
|
base64url: "base64url";
|
|
91
93
|
hex: "hex";
|
|
92
|
-
uuid: "uuid";
|
|
93
|
-
email: "email";
|
|
94
94
|
url: "url";
|
|
95
95
|
httpUrl: "httpUrl";
|
|
96
96
|
hostname: "hostname";
|
|
@@ -995,11 +995,11 @@ export declare const NormalPropSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
995
995
|
type: z.ZodLiteral<"string">;
|
|
996
996
|
length: z.ZodOptional<z.ZodNumber>;
|
|
997
997
|
zodFormat: z.ZodOptional<z.ZodEnum<{
|
|
998
|
+
uuid: "uuid";
|
|
999
|
+
email: "email";
|
|
998
1000
|
base64: "base64";
|
|
999
1001
|
base64url: "base64url";
|
|
1000
1002
|
hex: "hex";
|
|
1001
|
-
uuid: "uuid";
|
|
1002
|
-
email: "email";
|
|
1003
1003
|
url: "url";
|
|
1004
1004
|
httpUrl: "httpUrl";
|
|
1005
1005
|
hostname: "hostname";
|
|
@@ -1064,11 +1064,11 @@ export declare const NormalPropSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1064
1064
|
type: z.ZodLiteral<"string[]">;
|
|
1065
1065
|
length: z.ZodOptional<z.ZodNumber>;
|
|
1066
1066
|
zodFormat: z.ZodOptional<z.ZodEnum<{
|
|
1067
|
+
uuid: "uuid";
|
|
1068
|
+
email: "email";
|
|
1067
1069
|
base64: "base64";
|
|
1068
1070
|
base64url: "base64url";
|
|
1069
1071
|
hex: "hex";
|
|
1070
|
-
uuid: "uuid";
|
|
1071
|
-
email: "email";
|
|
1072
1072
|
url: "url";
|
|
1073
1073
|
httpUrl: "httpUrl";
|
|
1074
1074
|
hostname: "hostname";
|
|
@@ -1731,11 +1731,11 @@ export declare const EntityJsonSchema: z.ZodObject<{
|
|
|
1731
1731
|
type: z.ZodLiteral<"string">;
|
|
1732
1732
|
length: z.ZodOptional<z.ZodNumber>;
|
|
1733
1733
|
zodFormat: z.ZodOptional<z.ZodEnum<{
|
|
1734
|
+
uuid: "uuid";
|
|
1735
|
+
email: "email";
|
|
1734
1736
|
base64: "base64";
|
|
1735
1737
|
base64url: "base64url";
|
|
1736
1738
|
hex: "hex";
|
|
1737
|
-
uuid: "uuid";
|
|
1738
|
-
email: "email";
|
|
1739
1739
|
url: "url";
|
|
1740
1740
|
httpUrl: "httpUrl";
|
|
1741
1741
|
hostname: "hostname";
|
|
@@ -1800,11 +1800,11 @@ export declare const EntityJsonSchema: z.ZodObject<{
|
|
|
1800
1800
|
type: z.ZodLiteral<"string[]">;
|
|
1801
1801
|
length: z.ZodOptional<z.ZodNumber>;
|
|
1802
1802
|
zodFormat: z.ZodOptional<z.ZodEnum<{
|
|
1803
|
+
uuid: "uuid";
|
|
1804
|
+
email: "email";
|
|
1803
1805
|
base64: "base64";
|
|
1804
1806
|
base64url: "base64url";
|
|
1805
1807
|
hex: "hex";
|
|
1806
|
-
uuid: "uuid";
|
|
1807
|
-
email: "email";
|
|
1808
1808
|
url: "url";
|
|
1809
1809
|
httpUrl: "httpUrl";
|
|
1810
1810
|
hostname: "hostname";
|
|
@@ -2780,11 +2780,11 @@ export declare const TemplateOptions: z.ZodObject<{
|
|
|
2780
2780
|
type: z.ZodLiteral<"string">;
|
|
2781
2781
|
length: z.ZodOptional<z.ZodNumber>;
|
|
2782
2782
|
zodFormat: z.ZodOptional<z.ZodEnum<{
|
|
2783
|
+
uuid: "uuid";
|
|
2784
|
+
email: "email";
|
|
2783
2785
|
base64: "base64";
|
|
2784
2786
|
base64url: "base64url";
|
|
2785
2787
|
hex: "hex";
|
|
2786
|
-
uuid: "uuid";
|
|
2787
|
-
email: "email";
|
|
2788
2788
|
url: "url";
|
|
2789
2789
|
httpUrl: "httpUrl";
|
|
2790
2790
|
hostname: "hostname";
|
|
@@ -2849,11 +2849,11 @@ export declare const TemplateOptions: z.ZodObject<{
|
|
|
2849
2849
|
type: z.ZodLiteral<"string[]">;
|
|
2850
2850
|
length: z.ZodOptional<z.ZodNumber>;
|
|
2851
2851
|
zodFormat: z.ZodOptional<z.ZodEnum<{
|
|
2852
|
+
uuid: "uuid";
|
|
2853
|
+
email: "email";
|
|
2852
2854
|
base64: "base64";
|
|
2853
2855
|
base64url: "base64url";
|
|
2854
2856
|
hex: "hex";
|
|
2855
|
-
uuid: "uuid";
|
|
2856
|
-
email: "email";
|
|
2857
2857
|
url: "url";
|
|
2858
2858
|
httpUrl: "httpUrl";
|
|
2859
2859
|
hostname: "hostname";
|
package/dist/ui/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/ui/api.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAmD/C,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/ui/api.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAmD/C,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBAi5C/D"}
|