@cartanova/qgrid-cli 2.7.6 → 2.7.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/dist/application/qgrid/qgrid.frame.js +67 -30
- package/bundle/dist/application/qgrid/qgrid.types.js +6 -3
- package/bundle/dist/application/qgrid/token-trigger-setup.js +3 -2
- package/bundle/dist/application/qgrid/token-window-keepalive.js +10 -4
- package/bundle/dist/application/request-log/request-log.model.js +2 -2
- package/bundle/dist/application/setting/setting.constant.js +8 -4
- package/bundle/dist/application/setting/setting.model.js +4 -3
- package/bundle/dist/application/setting/setting.store.js +2 -2
- package/bundle/dist/application/setting/setting.types.js +4 -2
- package/bundle/dist/application/sonamu.generated.js +5 -3
- package/bundle/dist/application/sonamu.generated.sso.js +3 -2
- package/bundle/dist/application/token/token.model.js +7 -2
- package/bundle/dist/application/token/token.types.js +3 -2
- package/bundle/dist/i18n/sd.generated.js +2 -1
- package/bundle/dist/migrations/20260820153531_alter_tokens_add1_alter1.js +15 -0
- package/bundle/dist/sonamu.config.js +3 -1
- package/bundle/dist/utils/providers/openai/openai-callback-relay.js +86 -0
- package/bundle/dist/utils/providers/openai/openai-quota.js +4 -3
- package/bundle/src/application/qgrid/qgrid-oauth-redirect.test.ts +71 -8
- package/bundle/src/application/qgrid/qgrid.frame.test.ts +52 -0
- package/bundle/src/application/qgrid/qgrid.frame.ts +74 -26
- package/bundle/src/application/qgrid/qgrid.types.ts +4 -1
- package/bundle/src/application/qgrid/token-trigger-setup.test.ts +6 -0
- package/bundle/src/application/qgrid/token-trigger-setup.ts +2 -1
- package/bundle/src/application/qgrid/token-window-keepalive.test.ts +23 -2
- package/bundle/src/application/qgrid/token-window-keepalive.ts +13 -3
- package/bundle/src/application/request-log/request-log.model.test.ts +25 -0
- package/bundle/src/application/request-log/request-log.model.ts +3 -1
- package/bundle/src/application/setting/setting.constant.test.ts +2 -2
- package/bundle/src/application/setting/setting.constant.ts +8 -3
- package/bundle/src/application/setting/setting.model.ts +13 -2
- package/bundle/src/application/setting/setting.store.ts +2 -2
- package/bundle/src/application/setting/setting.types.ts +2 -0
- package/bundle/src/application/sonamu.generated.http +9 -4
- package/bundle/src/application/sonamu.generated.sso.ts +1 -0
- package/bundle/src/application/sonamu.generated.ts +3 -0
- package/bundle/src/application/token/token.entity.json +8 -1
- package/bundle/src/application/token/token.model.test.ts +29 -0
- package/bundle/src/application/token/token.model.ts +10 -1
- package/bundle/src/application/token/token.types.test.ts +10 -0
- package/bundle/src/application/token/token.types.ts +1 -0
- package/bundle/src/i18n/sd.generated.ts +1 -0
- package/bundle/src/migrations/20260820153531_alter_tokens_add1_alter1.ts +15 -0
- package/bundle/src/sonamu.config.ts +2 -0
- package/bundle/src/utils/providers/openai/openai-callback-relay.test.ts +109 -0
- package/bundle/src/utils/providers/openai/openai-callback-relay.ts +105 -0
- package/bundle/src/utils/providers/openai/openai-quota.test.ts +31 -0
- package/bundle/src/utils/providers/openai/openai-quota.ts +8 -2
- package/bundle/web-dist/client/assets/index-BshX4Gd8.css +1 -0
- package/bundle/web-dist/client/assets/{index-BbOyk01G.js → index-D59Q_9Z4.js} +4 -4
- package/bundle/web-dist/client/assets/{logs-B7Pc88bf.js → logs-BHVfI8ut.js} +1 -1
- package/bundle/web-dist/client/assets/{monit-CzMV4lZf.js → monit-EkLxH1oN.js} +1 -1
- package/bundle/web-dist/client/assets/{routes-COWTRxZo.js → routes-Kbvuclip.js} +2 -2
- package/bundle/web-dist/client/assets/{services.generated-CA7oRRYY.js → services.generated-Da1Eq5_R.js} +1 -1
- package/bundle/web-dist/client/assets/settings-B4uTFP3J.js +1 -0
- package/bundle/web-dist/client/assets/{show-YvdybkKd.js → show-BjIdSPTd.js} +1 -1
- package/bundle/web-dist/client/assets/tokens-BbCSxbFu.js +1 -0
- package/bundle/web-dist/client/assets/use-oauth-login-flow-4OltfVAd.js +1 -0
- package/bundle/web-dist/client/assets/use-update-token-mutation-CZ57EKA1.js +1 -0
- package/bundle/web-dist/client/index.html +3 -3
- package/bundle/web-dist/server/assets/{lazyRouteComponent-tS-rTksX.js → lazyRouteComponent-V1S8gqMS.js} +2 -2
- package/bundle/web-dist/server/assets/{logs-ttf79emP.js → logs-2Tkqcncq.js} +2 -2
- package/bundle/web-dist/server/assets/{monit-CJBUH0l6.js → monit-DrJ15xJL.js} +2 -2
- package/bundle/web-dist/server/assets/{plus-BuSuoeon.js → plus-DCai02Na.js} +1 -1
- package/bundle/web-dist/server/assets/{react-dom-7_SqhNWR.js → react-dom-BFiG5Daf.js} +1 -1
- package/bundle/web-dist/server/assets/{routes-z79f1sOM.js → routes-Ct3I9263.js} +7 -5
- package/bundle/web-dist/server/assets/{services.generated-B5UkNmgc.js → services.generated-y7xVOTCo.js} +4 -2
- package/bundle/web-dist/server/assets/{settings-CIYR7h3G.js → settings-JznSjwGQ.js} +79 -5
- package/bundle/web-dist/server/assets/{show-CLrA4ZQ-.js → show-D8kuAFbc.js} +2 -2
- package/bundle/web-dist/server/assets/{tokens-BwlkZELV.js → tokens-PR42jF1J.js} +6 -4
- package/bundle/web-dist/server/assets/{use-oauth-login-flow-B2QllVMi.js → use-oauth-login-flow-C-33Z5HA.js} +18 -17
- package/bundle/web-dist/server/assets/use-update-token-mutation-BNaRPVaX.js +7 -0
- package/bundle/web-dist/server/entry-server.generated.js +10 -10
- package/dist/cli.js +10 -11
- package/package.json +1 -1
- package/skills/qgrid/references/ai-sdk-provider-contract.md +2 -0
- package/skills/qgrid/references/cli-env-and-server-boot.md +2 -1
- package/skills/qgrid/references/openai-codex-runtime.md +12 -5
- package/skills/qgrid/references/request-log-run-lifecycle.md +2 -0
- package/skills/qgrid/references/sonamu-api-web-flow.md +2 -0
- package/skills/qgrid/references/token-auth-quota-lifecycle.md +27 -1
- package/bundle/web-dist/client/assets/index-D9xE_tO7.css +0 -1
- package/bundle/web-dist/client/assets/settings-Dpaosy-o.js +0 -1
- package/bundle/web-dist/client/assets/tokens-DynVDx0c.js +0 -1
- package/bundle/web-dist/client/assets/use-oauth-login-flow-OzmHElsE.js +0 -1
- /package/bundle/web-dist/client/assets/{plus-DqBd6gHk.js → plus-p4vtg6LN.js} +0 -0
|
@@ -293,7 +293,7 @@ var RequestLogModelClass = class extends BaseModelClass {
|
|
|
293
293
|
tool_call_count: 0,
|
|
294
294
|
is_image_generation: params.is_image_generation ?? false,
|
|
295
295
|
json_schema: params.json_schema ?? null,
|
|
296
|
-
is_structured: params.json_schema !== null && params.json_schema !== void 0,
|
|
296
|
+
is_structured: params.is_structured ?? (params.json_schema !== null && params.json_schema !== void 0),
|
|
297
297
|
...params.history !== void 0 ? { history: params.history } : {},
|
|
298
298
|
...params.tools !== void 0 ? { tools: params.tools } : {}
|
|
299
299
|
});
|
|
@@ -577,4 +577,4 @@ const RequestLogModel = new RequestLogModelClass();
|
|
|
577
577
|
//#endregion
|
|
578
578
|
export { MICRO_USD, RequestLogModel };
|
|
579
579
|
|
|
580
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzb25TY2hlbWFUb1pvZCB9IGZyb20gXCJqc29uLXNjaGVtYS10by16b2RcIjtcbmltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG4gIFB1cmksXG4gIHRyYW5zYWN0aW9uYWwsXG59IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3RVc2QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0XCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dTdWJzZXRLZXksIHR5cGUgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWQuc3NvXCI7XG5pbXBvcnQge1xuICByZW5kZXJKc29uU2NoZW1hWm9kU2hhcGVUZXh0LFxuICByZW5kZXJQYXJzZWRKc29uU2NoZW1hVHlwZVRleHQsXG59IGZyb20gXCIuL2pzb24tc2NoZW1hLXR5cGUtdGV4dFwiO1xuaW1wb3J0IHtcbiAgdHlwZSBSZXF1ZXN0TG9nTGlzdFBhcmFtcyxcbiAgdHlwZSBSZXF1ZXN0TG9nU2F2ZVBhcmFtcyxcbiAgdHlwZSBUb29sRGVmaW5pdGlvbnMsXG4gIHR5cGUgVG9vbFZpZXcsXG59IGZyb20gXCIuL3JlcXVlc3QtbG9nLnR5cGVzXCI7XG5pbXBvcnQgeyBmb3JtYXRab2RDb2RlIH0gZnJvbSBcIi4vem9kLWNvZGUtZm9ybWF0XCI7XG5cbi8vIGNvc3RfdXNk64qUIOygleyImCBtaWNyby1VU0TroZwg7KCA7J6lLiDsi6TsoJwgVVNEID0gY29zdF91c2QgLyBNSUNST19VU0QuXG5leHBvcnQgY29uc3QgTUlDUk9fVVNEID0gMV8wMDBfMDAwO1xuY29uc3QgUkVRVUVTVF9MT0dfUlVOX0xPQ0tfQ0xBU1NfSUQgPSA3MTg7XG5jb25zdCBUT09MX0VOVU1fVkFMVUVfTElNSVQgPSA2O1xuXG5mdW5jdGlvbiBkZWNvZGVTdG9yZWRUb29scyh2YWx1ZTogdW5rbm93bik6IFRvb2xEZWZpbml0aW9ucyB8IG51bGwge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbHVlIGFzIFRvb2xEZWZpbml0aW9ucztcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSkgYXMgVG9vbERlZmluaXRpb25zO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG50eXBlIFRvb2xSZXN1bHRDb250aW51YXRpb24gPSB7XG4gIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgb3V0cHV0OiBzdHJpbmc7XG4gIGlzRXJyb3I/OiBib29sZWFuO1xufTtcblxudHlwZSBSZXF1ZXN0TG9nU3RlcEFnZ3JlZ2F0ZSA9IHtcbiAgaW5wdXRfdG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dF90b2tlbnM6IG51bWJlcjtcbiAgY2FjaGVfcmVhZF90b2tlbnM6IG51bWJlcjtcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vucz86IG51bWJlcjtcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zPzogbnVtYmVyO1xuICBkdXJhdGlvbl9tczogbnVtYmVyO1xuICBmYWxsYmFja19jb3VudDogbnVtYmVyO1xuICBjb3N0X3VzZDogbnVtYmVyO1xuICBjb3N0X3NvdXJjZT86IHN0cmluZztcbn07XG5cbmNvbnN0IFNURVBfQUdHUkVHQVRFX1NFTEVDVCA9IHtcbiAgaW5wdXRfdG9rZW5zOiBcImlucHV0X3Rva2Vuc1wiLFxuICBvdXRwdXRfdG9rZW5zOiBcIm91dHB1dF90b2tlbnNcIixcbiAgY2FjaGVfcmVhZF90b2tlbnM6IFwiY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IFwiY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIsXG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogXCJjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIixcbiAgZHVyYXRpb25fbXM6IFwiZHVyYXRpb25fbXNcIixcbiAgZmFsbGJhY2tfY291bnQ6IFwiZmFsbGJhY2tfY291bnRcIixcbiAgY29zdF91c2Q6IFwiY29zdF91c2RcIixcbiAgY29zdF9zb3VyY2U6IFwiY29zdF9zb3VyY2VcIixcbn0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGFnZ3JlZ2F0ZUdlbmVyYXRlU3RlcFJvd3Mocm93czogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTogUmVxdWVzdExvZ1N0ZXBBZ2dyZWdhdGUge1xuICBjb25zdCBzdW0gPSAoZmllbGQ6IHN0cmluZyk6IG51bWJlciA9PlxuICAgIHJvd3MucmVkdWNlKCh0b3RhbCwgcm93KSA9PiB0b3RhbCArIE51bWJlcihyb3dbZmllbGRdID8/IDApLCAwKTtcbiAgY29uc3Qgb3B0aW9uYWxTdW0gPSAoZmllbGQ6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCA9PlxuICAgIHJvd3Muc29tZSgocm93KSA9PiByb3dbZmllbGRdICE9PSBudWxsICYmIHJvd1tmaWVsZF0gIT09IHVuZGVmaW5lZCkgPyBzdW0oZmllbGQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBjb2xsYXBzZSA9IChmaWVsZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCB2YWx1ZXMgPSBbXG4gICAgICAuLi5uZXcgU2V0KFxuICAgICAgICByb3dzXG4gICAgICAgICAgLm1hcCgocm93KSA9PiByb3dbZmllbGRdKVxuICAgICAgICAgIC5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgc3RyaW5nID0+IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5sZW5ndGggPiAwKSxcbiAgICAgICksXG4gICAgXTtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdmFsdWVzLmxlbmd0aCA9PT0gMSA/IHZhbHVlc1swXSA6IFwibWl4ZWRcIjtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dF90b2tlbnM6IHN1bShcImlucHV0X3Rva2Vuc1wiKSxcbiAgICBvdXRwdXRfdG9rZW5zOiBzdW0oXCJvdXRwdXRfdG9rZW5zXCIpLFxuICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBzdW0oXCJjYWNoZV9yZWFkX3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHN1bShcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IG9wdGlvbmFsU3VtKFwiY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuczogb3B0aW9uYWxTdW0oXCJjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIiksXG4gICAgZHVyYXRpb25fbXM6IHN1bShcImR1cmF0aW9uX21zXCIpLFxuICAgIGZhbGxiYWNrX2NvdW50OiBzdW0oXCJmYWxsYmFja19jb3VudFwiKSxcbiAgICBjb3N0X3VzZDogc3VtKFwiY29zdF91c2RcIiksXG4gICAgY29zdF9zb3VyY2U6IGNvbGxhcHNlKFwiY29zdF9zb3VyY2VcIiksXG4gIH07XG59XG5cbnR5cGUgUmVxdWVzdExvZ1VzYWdlUm93ID0ge1xuICB0b2tlbl9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgbW9kZWxfbmFtZT86IHN0cmluZyB8IG51bGw7XG4gIGlucHV0X3Rva2VuczogbnVtYmVyO1xuICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuICBjb3N0X3VzZD86IG51bWJlciB8IG51bGw7XG4gIGNvc3Rfc291cmNlPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmZ1bmN0aW9uIGlzQW50aHJvcGljVXNhZ2VSb3cocm93OiBQaWNrPFJlcXVlc3RMb2dVc2FnZVJvdywgXCJ0b2tlbl9uYW1lXCIgfCBcIm1vZGVsX25hbWVcIj4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICByb3cudG9rZW5fbmFtZT8uc3RhcnRzV2l0aChcImFudGhyb3BpYy9cIikgPT09IHRydWUgfHxcbiAgICByb3cubW9kZWxfbmFtZT8uc3RhcnRzV2l0aChcImNsYXVkZS1cIikgPT09IHRydWUgfHxcbiAgICByb3cubW9kZWxfbmFtZT8uc3RhcnRzV2l0aChcImFudGhyb3BpYy9jbGF1ZGUtXCIpID09PSB0cnVlXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbE1vZGVsTmFtZShtb2RlbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBtb2RlbE5hbWUuaW5jbHVkZXMoXCIvXCIpID8gbW9kZWxOYW1lLnNwbGl0KFwiL1wiKS5wb3AoKSEgOiBtb2RlbE5hbWU7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZWRVc2FnZUZvckNvc3Qocm93OiBSZXF1ZXN0TG9nVXNhZ2VSb3cpOiB7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBpbnB1dFRva2VuczogbnVtYmVyO1xuICBvdXRwdXRUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVkSW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtPzogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaD86IG51bWJlcjtcbn0ge1xuICBjb25zdCBjYWNoZVJlYWQgPSByb3cuY2FjaGVfcmVhZF90b2tlbnM7XG4gIGNvbnN0IGNhY2hlQ3JlYXRpb24gPSByb3cuY2FjaGVfY3JlYXRpb25fdG9rZW5zO1xuICBjb25zdCBzdG9yZWRJbnB1dCA9IHJvdy5pbnB1dF90b2tlbnM7XG4gIGNvbnN0IGxlZ2FjeUFudGhyb3BpY1NwbGl0SW5wdXQgPVxuICAgIGlzQW50aHJvcGljVXNhZ2VSb3cocm93KSAmJiBzdG9yZWRJbnB1dCA8IGNhY2hlUmVhZCArIGNhY2hlQ3JlYXRpb247XG4gIHJldHVybiB7XG4gICAgbW9kZWw6IHJvdy5tb2RlbF9uYW1lID8gY2Fub25pY2FsTW9kZWxOYW1lKHJvdy5tb2RlbF9uYW1lKSA6IG51bGwsXG4gICAgaW5wdXRUb2tlbnM6IGxlZ2FjeUFudGhyb3BpY1NwbGl0SW5wdXQgPyBzdG9yZWRJbnB1dCArIGNhY2hlUmVhZCArIGNhY2hlQ3JlYXRpb24gOiBzdG9yZWRJbnB1dCxcbiAgICBvdXRwdXRUb2tlbnM6IHJvdy5vdXRwdXRfdG9rZW5zLFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiBjYWNoZVJlYWQsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiBjYWNoZUNyZWF0aW9uLFxuICAgIC4uLihyb3cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zICE9PSBudWxsICYmIHJvdy5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtOiByb3cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zIH1cbiAgICAgIDoge30pLFxuICAgIC4uLihyb3cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zICE9PSBudWxsICYmIHJvdy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoOiByb3cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zIH1cbiAgICAgIDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVMZWdhY3lBbnRocm9waWNSb3c8VCBleHRlbmRzIFJlcXVlc3RMb2dVc2FnZVJvdz4ocm93OiBUKTogVCB7XG4gIC8vIOyDiCByb3cg64qUIOuLueyLnOydmCBwcm92aWRlci/qsIDqsqntkZwg67mE7Jqp7J2EIO2ZleyglSDsoIDsnqXtlZzri6QuIO2YhOyerCDqsIDqsqntkZzroZwg642u7Ja07JOw7KeAIOyViuuKlOuLpC5cbiAgaWYgKHJvdy5jb3N0X3NvdXJjZSkgcmV0dXJuIHJvdztcbiAgY29uc3QgdXNhZ2UgPSBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdyk7XG4gIGlmICh1c2FnZS5pbnB1dFRva2VucyA9PT0gcm93LmlucHV0X3Rva2VucykgcmV0dXJuIHJvdztcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHsgLi4ucm93LCBpbnB1dF90b2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zIH07XG4gIGlmICh1c2FnZS5tb2RlbCkge1xuICAgIG5vcm1hbGl6ZWQuY29zdF91c2QgPSBNYXRoLnJvdW5kKGNhbGN1bGF0ZUNvc3RVc2QodXNhZ2UubW9kZWwsIHVzYWdlKSAqIE1JQ1JPX1VTRCk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogYG9yZGVyQnlgIGVudW0g6rCSKGDsu6zrn7wt67Cp7ZalYCnsnYQg7KCV66CsIOygiOuhnCDsmK7quLTri6QuXG4gKlxuICogZW51bSDsnbQgMTgg7KKF7J206528IOy8gOydtOyKpOulvCDsnbzsnbzsnbQg7KCB64qUIOuMgOyLoCDtjIzsi7HtlZjrkJgsIOy7rOufvOydgCDslYTrnpgg66qp66Gd7Jy866GcIO2VnOygle2VnOuLpCDigJRcbiAqIOusuOyekOyXtOydhCDqt7jrjIDroZwg7Lus65+866qF7JeQIOuEmOq4sOuptCBlbnVtIOydtCDrsJTrgJQg65WMIOqygOymnSDsl4bripQg7Iud67OE7J6Q6rCAIFNRTCDroZwg7Z2Y65+s65Og64ukLlxuICog66qp66Gd7JeQIOyXhuuKlCDqsJLsnYAg6riw67O4IOygleugrChpZCBkZXNjKeuhnCDrlqjslrTsp4Tri6QuXG4gKi9cbmNvbnN0IE9SREVSQUJMRV9DT0xVTU5TID0ge1xuICBpZDogXCJyZXF1ZXN0X2xvZ3MuaWRcIixcbiAgY3JlYXRlZF9hdDogXCJyZXF1ZXN0X2xvZ3MuY3JlYXRlZF9hdFwiLFxuICB0dGZ0X21zOiBcInJlcXVlc3RfbG9ncy50dGZ0X21zXCIsXG4gIGR1cmF0aW9uX21zOiBcInJlcXVlc3RfbG9ncy5kdXJhdGlvbl9tc1wiLFxuICBpbnB1dF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmlucHV0X3Rva2Vuc1wiLFxuICBvdXRwdXRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5vdXRwdXRfdG9rZW5zXCIsXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICBjb3N0X3VzZDogXCJyZXF1ZXN0X2xvZ3MuY29zdF91c2RcIixcbn0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGFwcGx5T3JkZXJCeShcbiAgcWI6IFJldHVyblR5cGU8UmVxdWVzdExvZ01vZGVsQ2xhc3NbXCJnZXRTdWJzZXRRdWVyaWVzXCJdPltcInFiXCJdLFxuICBvcmRlckJ5OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgY29uc3Qgc2VwYXJhdG9yID0gb3JkZXJCeS5sYXN0SW5kZXhPZihcIi1cIik7XG4gIGNvbnN0IGtleSA9IG9yZGVyQnkuc2xpY2UoMCwgc2VwYXJhdG9yKSBhcyBrZXlvZiB0eXBlb2YgT1JERVJBQkxFX0NPTFVNTlM7XG4gIGNvbnN0IGRpcmVjdGlvbiA9IG9yZGVyQnkuc2xpY2Uoc2VwYXJhdG9yICsgMSkgPT09IFwiYXNjXCIgPyBcImFzY1wiIDogXCJkZXNjXCI7XG4gIGNvbnN0IGNvbHVtbiA9IE9SREVSQUJMRV9DT0xVTU5TW2tleV07XG5cbiAgaWYgKCFjb2x1bW4pIHtcbiAgICBxYi5vcmRlckJ5KFwicmVxdWVzdF9sb2dzLmlkXCIsIFwiZGVzY1wiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcWIub3JkZXJCeShjb2x1bW4sIGRpcmVjdGlvbik7XG4gIC8vIOuPmeygkCDtlonsnZgg7Iic7ISc6rCAIO2OmOydtOyngOuniOuLpCDtnZTrk6Trpqzsp4Ag7JWK6rKMIOqzoOycoCDsu6zrn7zsnLzroZwgdGllLWJyZWFrIO2VnOuLpC5cbiAgaWYgKGtleSAhPT0gXCJpZFwiKSBxYi5vcmRlckJ5KFwicmVxdWVzdF9sb2dzLmlkXCIsIFwiZGVzY1wiKTtcbn1cblxuLypcbiAgUmVxdWVzdExvZyBNb2RlbFxuKi9cbmNsYXNzIFJlcXVlc3RMb2dNb2RlbENsYXNzIGV4dGVuZHMgQmFzZU1vZGVsQ2xhc3M8XG4gIFJlcXVlc3RMb2dTdWJzZXRLZXksXG4gIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nLFxuICB0eXBlb2YgcmVxdWVzdExvZ1N1YnNldFF1ZXJpZXMsXG4gIHR5cGVvZiByZXF1ZXN0TG9nTG9hZGVyUXVlcmllc1xuPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiUmVxdWVzdExvZ1wiLCByZXF1ZXN0TG9nU3Vic2V0UXVlcmllcywgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0sIHJlc291cmNlTmFtZTogXCJSZXF1ZXN0TG9nXCIgfSlcbiAgYXN5bmMgZmluZEJ5SWQ8VCBleHRlbmRzIFJlcXVlc3RMb2dTdWJzZXRLZXk+KFxuICAgIHN1YnNldDogVCxcbiAgICBpZDogbnVtYmVyLFxuICApOiBQcm9taXNlPFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdPiB7XG4gICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLmZpbmRNYW55KHN1YnNldCwge1xuICAgICAgaWQsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuICAgIGlmICghcm93c1swXSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKFNEKFwiZXJyb3IuZW50aXR5Tm90Rm91bmRcIikoXCJSZXF1ZXN0TG9nXCIsIGlkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3NbMF07XG4gIH1cblxuICBhc3luYyBmaW5kT25lPFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgbGlzdFBhcmFtczogUmVxdWVzdExvZ0xpc3RQYXJhbXMsXG4gICk6IFByb21pc2U8UmVxdWVzdExvZ1N1YnNldE1hcHBpbmdbVF0gfCBudWxsPiB7XG4gICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLmZpbmRNYW55KHN1YnNldCwge1xuICAgICAgLi4ubGlzdFBhcmFtcyxcbiAgICAgIG51bTogMSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm93c1swXSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIOuqqeuhnSDtlYTthLDsnZgg64uo7J28IOygleydmC4gZmluZE1hbnkg7JmAIHRvdGFsQ29zdCDqsIAg6rCZ7J2AIOyhsOqxtOydhCDrs7Trj4TroZ0g6rO17Jyg7ZWc64ukIOKAlFxuICAgKiDtmZTrqbTsl5DshJwg7ZWE7YSw66W8IOqxuOuptCDtlokg7IiY7JmAIOu5hOyaqeydtCDtlajqu5gg7KKB7ZiA7KC47JW8IO2VmOuKlOuNsCwg65GQIOy/vOumrOqwgCDqsIHsnpAg7ZWE7YSw66W8XG4gICAqIOq1rO2YhO2VmOuptCDtlZzsqr3sl5Ag7LaV7J2EIOy2lOqwgO2VoCDrlYwg7KGw7Jqp7Z6IIOyWtOq4i+uCnOuLpC5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlMaXN0RmlsdGVycyhcbiAgICBxYjogUmV0dXJuVHlwZTxSZXF1ZXN0TG9nTW9kZWxDbGFzc1tcImdldFN1YnNldFF1ZXJpZXNcIl0+W1wicWJcIl0sXG4gICAgcGFyYW1zOiBSZXF1ZXN0TG9nTGlzdFBhcmFtcyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHBhcmFtcy5pZCkge1xuICAgICAgcWIud2hlcmVJbihcInJlcXVlc3RfbG9ncy5pZFwiLCBhc0FycmF5KHBhcmFtcy5pZCkpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLCBwYXJhbXMudG9rZW5fbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWVfaXNfbnVsbCkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIG51bGwpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLnByb2plY3RfbmFtZV9pc19ub3RfbnVsbCkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIFwiIT1cIiwgbnVsbCk7XG4gICAgfSBlbHNlIGlmIChwYXJhbXMucHJvamVjdF9uYW1lKSB7XG4gICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5wcm9qZWN0X25hbWVcIiwgcGFyYW1zLnByb2plY3RfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5tb2RlbF9uYW1lKSB7XG4gICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5tb2RlbF9uYW1lXCIsIHBhcmFtcy5tb2RlbF9uYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNlYXJjaCAmJiBwYXJhbXMua2V5d29yZCAmJiBwYXJhbXMua2V5d29yZC5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJpZFwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLmlkXCIsIE51bWJlcihwYXJhbXMua2V5d29yZCkpO1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuc2VhcmNoID09PSBcInRva2VuX25hbWVcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy50b2tlbl9uYW1lXCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuc2VhcmNoID09PSBcInVzZXJfcHJvbXB0XCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudXNlcl9wcm9tcHRcIiwgXCJsaWtlXCIsIGAlJHtwYXJhbXMua2V5d29yZH0lYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcImVycm9yLnVua25vd25TZWFyY2hGaWVsZFwiKShwYXJhbXMuc2VhcmNoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0sIHJlc291cmNlTmFtZTogXCJSZXF1ZXN0TG9nc1wiIH0pXG4gIGFzeW5jIGZpbmRNYW55PFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5LCBMUCBleHRlbmRzIFJlcXVlc3RMb2dMaXN0UGFyYW1zPihcbiAgICBzdWJzZXQ6IFQsXG4gICAgcmF3UGFyYW1zPzogTFAsXG4gICk6IFByb21pc2U8TGlzdFJlc3VsdDxMUCwgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmdbVF0+PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgbnVtOiAyNCxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBzZWFyY2g6IFwiaWRcIiBhcyBjb25zdCxcbiAgICAgIG9yZGVyQnk6IFwiaWQtZGVzY1wiIGFzIGNvbnN0LFxuICAgICAgLi4ucmF3UGFyYW1zLFxuICAgIH0gc2F0aXNmaWVzIFJlcXVlc3RMb2dMaXN0UGFyYW1zO1xuXG4gICAgY29uc3QgeyBxYiwgb25TdWJzZXQ6IF8gfSA9IHRoaXMuZ2V0U3Vic2V0UXVlcmllcyhzdWJzZXQpO1xuXG4gICAgdGhpcy5hcHBseUxpc3RGaWx0ZXJzKHFiLCBwYXJhbXMpO1xuXG4gICAgaWYgKHBhcmFtcy5vcmRlckJ5KSBhcHBseU9yZGVyQnkocWIsIHBhcmFtcy5vcmRlckJ5KTtcblxuICAgIGNvbnN0IGVuaGFuY2VycyA9IHRoaXMuY3JlYXRlRW5oYW5jZXJzKHtcbiAgICAgIEE6IChyb3cpID0+IG5vcm1hbGl6ZUxlZ2FjeUFudGhyb3BpY1Jvdyhyb3cpLFxuICAgICAgQzogKHJvdykgPT4gbm9ybWFsaXplTGVnYWN5QW50aHJvcGljUm93KHJvdyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlU3Vic2V0UXVlcnkoe1xuICAgICAgc3Vic2V0LFxuICAgICAgcWIsXG4gICAgICBwYXJhbXMsXG4gICAgICBlbmhhbmNlcnMsXG4gICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgc2F2ZShzcGE6IFJlcXVlc3RMb2dTYXZlUGFyYW1zW10pOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcblxuICAgIC8vIHJlZ2lzdGVyXG4gICAgc3BhLmZvckVhY2goKHNwKSA9PiB7XG4gICAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCBzcCk7XG4gICAgfSk7XG5cbiAgICAvLyB0cmFuc2FjdGlvblxuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dzXCIpO1xuXG4gICAgICByZXR1cm4gaWRzO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOy1nOq3vCDqtazqsITsnZggcHJvdmlkZXIg67OEIOqyveufiSDthrXqs4Qo66qo64uI7YSw66eB7JqpKS4gcHJvdmlkZXIg64qUIHJlcXVlc3RlZF9tb2RlbF9uYW1lIOydmFxuICAgKiBcIm9wZW5haS8uLi5cIiB8IFwiYW50aHJvcGljLy4uLlwiIHByZWZpeCDroZwg7YyQ7KCV7ZWc64ukIOKAlCBzZXJ2aW5nIG1vZGVsX25hbWUg7J2AIHByZWZpeCDqsIBcbiAgICog7JeG6rOgLCBydW5uaW5nIOy0iOq4sOyXlCDslYTsp4Eg67mE7Ja0IOyeiOuLpC4g7KeR6rOE64qUIEpTIOyXkOyEnCDtlZzri6Q6IO2PtOungSDso7zquLDqsIAg64qQ7Iqo7ZWY6rOgXG4gICAqIOq1rOqwhOydtCDsp6fslYQgcm93IOyImOqwgCDsnpHsnLzrqbAsIHByZWZpeCBDQVNFIOyLneydhCDsv7zrpqwg67mM642U7JeQIOuwleyngCDslYrslYTrj4Qg65Cc64ukLlxuICAgKi9cbiAgYXN5bmMgcHJvdmlkZXJTdGF0c1NpbmNlKHNpbmNlOiBEYXRlKTogUHJvbWlzZTxcbiAgICBBcnJheTx7XG4gICAgICBwcm92aWRlcjogc3RyaW5nO1xuICAgICAgcmVxdWVzdHM6IG51bWJlcjtcbiAgICAgIGVycm9yczogbnVtYmVyO1xuICAgICAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgICAgIGNhY2hlUmVhZFRva2VuczogbnVtYmVyO1xuICAgIH0+XG4gID4ge1xuICAgIGNvbnN0IHJkYiA9IHRoaXMuZ2V0UHVyaShcInJcIik7XG4gICAgY29uc3Qgcm93cyA9IChhd2FpdCByZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IFwicmVxdWVzdF9sb2dzLnJlcXVlc3RlZF9tb2RlbF9uYW1lXCIsXG4gICAgICAgIHN0YXR1czogXCJyZXF1ZXN0X2xvZ3Muc3RhdHVzXCIsXG4gICAgICAgIGlucHV0X3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuaW5wdXRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICAgICAgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9ncy5jcmVhdGVkX2F0XCIsIFwiPj1cIiwgc2luY2UpKSBhcyB1bmtub3duIGFzIEFycmF5PHtcbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gICAgfT47XG5cbiAgICBjb25zdCBieVByb3ZpZGVyID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIHsgcmVxdWVzdHM6IG51bWJlcjsgZXJyb3JzOiBudW1iZXI7IGlucHV0VG9rZW5zOiBudW1iZXI7IGNhY2hlUmVhZFRva2VuczogbnVtYmVyIH1cbiAgICA+KCk7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgY29uc3QgbW9kZWwgPSByb3cucmVxdWVzdGVkX21vZGVsX25hbWUgPz8gXCJcIjtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gbW9kZWwuc3RhcnRzV2l0aChcIm9wZW5haS9cIilcbiAgICAgICAgPyBcIm9wZW5haVwiXG4gICAgICAgIDogbW9kZWwuc3RhcnRzV2l0aChcImFudGhyb3BpYy9cIilcbiAgICAgICAgICA/IFwiYW50aHJvcGljXCJcbiAgICAgICAgICA6IFwidW5rbm93blwiO1xuICAgICAgY29uc3QgYWdnID0gYnlQcm92aWRlci5nZXQocHJvdmlkZXIpID8/IHtcbiAgICAgICAgcmVxdWVzdHM6IDAsXG4gICAgICAgIGVycm9yczogMCxcbiAgICAgICAgaW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIGNhY2hlUmVhZFRva2VuczogMCxcbiAgICAgIH07XG4gICAgICBhZ2cucmVxdWVzdHMgKz0gMTtcbiAgICAgIGlmIChyb3cuc3RhdHVzID09PSBcImVycm9yXCIpIGFnZy5lcnJvcnMgKz0gMTtcbiAgICAgIGFnZy5pbnB1dFRva2VucyArPSByb3cuaW5wdXRfdG9rZW5zO1xuICAgICAgYWdnLmNhY2hlUmVhZFRva2VucyArPSByb3cuY2FjaGVfcmVhZF90b2tlbnM7XG4gICAgICBieVByb3ZpZGVyLnNldChwcm92aWRlciwgYWdnKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5ieVByb3ZpZGVyLmVudHJpZXMoKV1cbiAgICAgIC5tYXAoKFtwcm92aWRlciwgYWdnXSkgPT4gKHsgcHJvdmlkZXIsIC4uLmFnZyB9KSlcbiAgICAgIC50b1NvcnRlZCgoYSwgYikgPT4gYS5wcm92aWRlci5sb2NhbGVDb21wYXJlKGIucHJvdmlkZXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdHJ1Y3R1cmVkIG91dHB1dCDsmpTssq3snZggSlNPTiBTY2hlbWEg66W8IO2RnOyLnOyaqSDtg4DsnoUg7YWN7Iqk7Yq466GcIOuzgO2ZmO2VnOuLpC5cbiAgICogdHlwZXNjcmlwdCDripQg6rCE6rKw7ZWcIGB0eXBlYCDshKDslrgsIHpvZCDripQg7J6s6rWs7ISx65CcIHpvZCDtkZztmITsi53snbTri6Qg4oCUIOybkOuzuCB6b2RcbiAgICog7IaM7Iqk64qUIHdpcmUg66W8IOqxtOuEiOyYpOupsCDshozsi6TrkJjrr4DroZwgcmVmaW5lL3RyYW5zZm9ybSDrpZjripQg67O17JuQ65CY7KeAIOyViuuKlOuLpC5cbiAgICog7Iqk7YKk66eI6rCAIOyXhuqxsOuCmCDrs4DtmZgg7Iuk7Yyo66m0IG51bGwg4oCUIO2ZlOuptOydgCDtlbTri7kg67iU66GdIO2RnOyLnOulvCDsg53rnrXtlZzri6QuXG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyByZXNwb25zZVR5cGVUcyhpZDogbnVtYmVyKTogUHJvbWlzZTx7XG4gICAgdHlwZXNjcmlwdDogc3RyaW5nIHwgbnVsbDtcbiAgICB6b2Q6IHN0cmluZyB8IG51bGw7XG4gIH0+IHtcbiAgICBjb25zdCByZGIgPSB0aGlzLmdldFB1cmkoXCJyXCIpO1xuICAgIGNvbnN0IHJvd3MgPSAoYXdhaXQgcmRiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdCh7IGpzb25fc2NoZW1hOiBcInJlcXVlc3RfbG9ncy5qc29uX3NjaGVtYVwiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgaWQpKSBhcyB1bmtub3duIGFzIEFycmF5PHsganNvbl9zY2hlbWE6IHN0cmluZyB8IG51bGwgfT47XG4gICAgY29uc3Qgc2NoZW1hID0gcm93c1swXT8uanNvbl9zY2hlbWE7XG4gICAgaWYgKCFzY2hlbWEpIHJldHVybiB7IHR5cGVzY3JpcHQ6IG51bGwsIHpvZDogbnVsbCB9O1xuXG4gICAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZShzY2hlbWEpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHsgdHlwZXNjcmlwdDogbnVsbCwgem9kOiBudWxsIH07XG4gICAgfVxuICAgIGxldCB6b2Q6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICB6b2QgPSBmb3JtYXRab2RDb2RlKFxuICAgICAgICBqc29uU2NoZW1hVG9ab2QocGFyc2VkIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGpzb25TY2hlbWFUb1pvZD5bMF0sIHsgbW9kdWxlOiBcIm5vbmVcIiB9KSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB6b2QgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlc2NyaXB0OiByZW5kZXJQYXJzZWRKc29uU2NoZW1hVHlwZVRleHQocGFyc2VkKSwgem9kIH07XG4gIH1cblxuICAvLyDilIDilIAgVG9vbCBDb250cmFjdCBWaWV3XG5cbiAgLyoqXG4gICAqIOyalOyyreyXkCDsnqXssKnrkJwgdG9vbCDqs4Tslb3snYQgZGV0YWlsIO2ZlOuptOyaqeycvOuhnCDstpXslb3tlZzri6QuIEpTT05CIOuKlCDsnbTrr7ggZGVjb2RlIOuQnFxuICAgKiDrsLDsl7TroZwg7Jik66mwIOusuOyekOyXtOyduCDqsr3smrDrp4wg67Cp7Ja07KCB7Jy866GcIHBhcnNlIO2VnOuLpC4g7KCA7J6l65CcIFFncmlkVG9vbCDqs4Tslb3snYBcbiAgICog7KCE7IiYIOqygOyCrOuhnCDtmZXsnbjrkJDsnLzrr4DroZwg7ZWt66qp67OEIOuztOygleydtOuCmCB1bnJlYWRhYmxlIHNlbnRpbmVsIOydgCDrp4zrk6Tsp4Ag7JWK64qU64ukLlxuICAgKiDri6Trp4wgYFFncmlkVG9vbC5pbnB1dFNjaGVtYWAg64qUIGB6LnVua25vd24oKWAg7J206528IO2CpOqwgCDsl4bqsbDrgpggbnVsbCDsnbgg6rCS64+EXG4gICAqIHdpcmUg6rKA7Kad7J2EIO2GteqzvO2VmOuvgOuhnCDruYgg7Iqk7YKk66eI66GcIOygleq3nO2ZlO2VnOuLpCDigJQgU0RLIOuKlCBge31gIOuhnCDssYTsm4wg67O064K464ukLlxuICAgKi9cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgdG9vbHNWaWV3KGlkOiBudW1iZXIpOiBQcm9taXNlPFRvb2xWaWV3W10+IHtcbiAgICBjb25zdCByb3cgPSAoYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5zZWxlY3QoeyB0b29sczogXCJyZXF1ZXN0X2xvZ3MudG9vbHNcIiB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dzLmlkXCIsIGlkKVxuICAgICAgLmZpcnN0KCkpIGFzIHsgdG9vbHM6IHVua25vd24gfSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0b29scyA9IGRlY29kZVN0b3JlZFRvb2xzKHJvdz8udG9vbHMpO1xuICAgIGlmICghdG9vbHMpIHJldHVybiBbXTtcblxuICAgIHJldHVybiB0b29scy5tYXAoKHRvb2wpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0U2NoZW1hID0gKHRvb2wuaW5wdXRTY2hlbWEgPz8ge30pIGFzIHtcbiAgICAgICAgcHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlucHV0Wm9kID0gcmVuZGVySnNvblNjaGVtYVpvZFNoYXBlVGV4dChpbnB1dFNjaGVtYSwgVE9PTF9FTlVNX1ZBTFVFX0xJTUlUKTtcbiAgICAgIGNvbnN0IGZ1bGxJbnB1dFpvZCA9IHJlbmRlckpzb25TY2hlbWFab2RTaGFwZVRleHQoaW5wdXRTY2hlbWEpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0b29sLm5hbWUsXG4gICAgICAgIC4uLih0b29sLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgPyB7IGRlc2NyaXB0aW9uOiB0b29sLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAgIHBhcmFtZXRlckNvdW50OiBPYmplY3Qua2V5cyhpbnB1dFNjaGVtYS5wcm9wZXJ0aWVzID8/IHt9KS5sZW5ndGgsXG4gICAgICAgIGlucHV0Wm9kLFxuICAgICAgICAuLi4oaW5wdXRab2QgIT09IGZ1bGxJbnB1dFpvZCA/IHsgZnVsbElucHV0Wm9kIH0gOiB7fSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFJ1biBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgYXN5bmMgY3JlYXRlUnVuKHBhcmFtczoge1xuICAgIHVzZXJfcHJvbXB0OiBzdHJpbmc7XG4gICAgc3lzdGVtX3Byb21wdD86IHN0cmluZyB8IG51bGw7XG4gICAgcmVxdWVzdGVkX21vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVmZm9ydD86IHN0cmluZyB8IG51bGw7XG4gICAgcHJvamVjdF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgICB0b29scz86IFRvb2xEZWZpbml0aW9ucztcbiAgICBpc19pbWFnZV9nZW5lcmF0aW9uPzogYm9vbGVhbjtcbiAgICBqc29uX3NjaGVtYT86IHN0cmluZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwge1xuICAgICAgdXNlcl9wcm9tcHQ6IHBhcmFtcy51c2VyX3Byb21wdCxcbiAgICAgIHN5c3RlbV9wcm9tcHQ6IHBhcmFtcy5zeXN0ZW1fcHJvbXB0ID8/IG51bGwsXG4gICAgICAvLyBwcm92aWRlciDsi6Ttlokg7KCE7J2066+A66GcIHNlcnZpbmcgbW9kZWzsnYAg7JWE7KeBIOyVjCDsiJgg7JeG64ukLlxuICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHBhcmFtcy5yZXF1ZXN0ZWRfbW9kZWxfbmFtZSA/PyBudWxsLFxuICAgICAgbW9kZWxfbmFtZTogbnVsbCxcbiAgICAgIGVmZm9ydDogcGFyYW1zLmVmZm9ydCA/PyBudWxsLFxuICAgICAgcHJvamVjdF9uYW1lOiBwYXJhbXMucHJvamVjdF9uYW1lID8/IG51bGwsXG4gICAgICBzdGF0dXM6IFwicnVubmluZ1wiLFxuICAgICAgcmVzcG9uc2U6IFwiXCIsXG4gICAgICBpbnB1dF90b2tlbnM6IDAsXG4gICAgICBvdXRwdXRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IDAsXG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IDAsXG4gICAgICBkdXJhdGlvbl9tczogMCxcbiAgICAgIHRvb2xfY2FsbF9jb3VudDogMCxcbiAgICAgIC8vIOydtOuvuOyngCB0dXJuIOyLneuzhChSMTMpLiBydW4g6rK966GcKHRvb2xzK2ltYWdlIOyhsO2VqSnrj4QgYXV0byDqsr3roZzsmYAg64+Z7J287ZWY6rKMIOuniO2CuS5cbiAgICAgIGlzX2ltYWdlX2dlbmVyYXRpb246IHBhcmFtcy5pc19pbWFnZV9nZW5lcmF0aW9uID8/IGZhbHNlLFxuICAgICAganNvbl9zY2hlbWE6IHBhcmFtcy5qc29uX3NjaGVtYSA/PyBudWxsLFxuICAgICAgaXNfc3RydWN0dXJlZDogcGFyYW1zLmpzb25fc2NoZW1hICE9PSBudWxsICYmIHBhcmFtcy5qc29uX3NjaGVtYSAhPT0gdW5kZWZpbmVkLFxuICAgICAgLi4uKHBhcmFtcy5oaXN0b3J5ICE9PSB1bmRlZmluZWQgPyB7IGhpc3Rvcnk6IHBhcmFtcy5oaXN0b3J5IGFzIHsgdHlwZTogc3RyaW5nIH1bXSB9IDoge30pLFxuICAgICAgLi4uKHBhcmFtcy50b29scyAhPT0gdW5kZWZpbmVkID8geyB0b29sczogcGFyYW1zLnRvb2xzIH0gOiB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkOiBudW1iZXIsIHN0ZXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgeyByZXF1ZXN0X2xvZ19pZDogcmVxdWVzdExvZ0lkLCAuLi5zdGVwIH0pO1xuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dfc3RlcHNcIik7XG4gICAgICBpZiAoc3RlcC50eXBlID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgICAgIGF3YWl0IHRyeC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKS5pbmNyZW1lbnQoXCJ0b29sX2NhbGxfY291bnRcIiwgMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFJ1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgcmVzcG9uc2U/OiBzdHJpbmc7XG4gICAgICB0b2tlbl9uYW1lPzogc3RyaW5nO1xuICAgICAgaW5wdXRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgb3V0cHV0X3Rva2Vucz86IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vucz86IG51bWJlciB8IG51bGw7XG4gICAgICBkdXJhdGlvbl9tcz86IG51bWJlcjtcbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgZmFsbGJhY2tfY291bnQ/OiBudW1iZXIgfCBudWxsO1xuICAgICAgY29zdF91c2Q/OiBudW1iZXIgfCBudWxsO1xuICAgICAgY29zdF9zb3VyY2U/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgaGlzdG9yeT86IHVua25vd247XG4gICAgICBlcnJvcl9tZXNzYWdlPzogc3RyaW5nO1xuICAgICAgdG9vbF9jYWxsX2NvdW50PzogbnVtYmVyO1xuICAgICAgaW1hZ2VfY29zdF91c2Q/OiBudW1iZXIgfCBudWxsO1xuICAgICAgaW1hZ2VfY29zdF9tZXRob2Q/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgcmVzcG9uc2VfanNvbl9vaz86IGJvb2xlYW4gfCBudWxsO1xuICAgIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChwYXJhbXMuc3RhdHVzID09PSBcInN1Y2NlZWRlZFwiICYmICFwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidG9rZW5OYW1lIGlzIHJlcXVpcmVkIGZvciBzdWNjZWVkZWQgcnVuc1wiKTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaWQ6IHJlcXVlc3RMb2dJZCwgc3RhdHVzOiBwYXJhbXMuc3RhdHVzIH07XG4gICAgY29uc3QgZmllbGRzID0gW1xuICAgICAgXCJyZXNwb25zZVwiLFxuICAgICAgXCJ0b2tlbl9uYW1lXCIsXG4gICAgICBcImlucHV0X3Rva2Vuc1wiLFxuICAgICAgXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9jcmVhdGlvbl81bV90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgICBcInJlcXVlc3RlZF9tb2RlbF9uYW1lXCIsXG4gICAgICBcIm1vZGVsX25hbWVcIixcbiAgICAgIFwiZmFsbGJhY2tfY291bnRcIixcbiAgICAgIFwiY29zdF91c2RcIixcbiAgICAgIFwiY29zdF9zb3VyY2VcIixcbiAgICAgIFwiZXJyb3JfbWVzc2FnZVwiLFxuICAgICAgXCJ0b29sX2NhbGxfY291bnRcIixcbiAgICAgIFwiaW1hZ2VfY29zdF91c2RcIixcbiAgICAgIFwiaW1hZ2VfY29zdF9tZXRob2RcIixcbiAgICAgIFwicmVzcG9uc2VfanNvbl9va1wiLFxuICAgIF0gYXMgY29uc3Q7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRzKSB7XG4gICAgICBpZiAocGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCkgdXBkYXRlW2tleV0gPSBwYXJhbXNba2V5XTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5oaXN0b3J5ICE9PSB1bmRlZmluZWQpIHVwZGF0ZS5oaXN0b3J5ID0gcGFyYW1zLmhpc3Rvcnk7XG4gICAgdXBkYXRlLnR0ZnRfbXMgPSAoYXdhaXQgdGhpcy5maXJzdEdlbmVyYXRlU3RlcFR0ZnQocmVxdWVzdExvZ0lkKSkgPz8gMDtcblxuICAgIC8vIOyEnOuyhCBydW4g6rK966Gc64qUIHN0ZXAg7JeQ7IScIO2Zleygle2VnCBleGFjdCBjb3N0IOulvCDrhJjquLTri6QuIOyZuOu2gC9sZWdhY3kgY2FsbGVyIOqwgCDruYTsmqnsnYRcbiAgICAvLyDsg53rnrXtlZwg6rK97Jqw7JeQ66eMIOyggOyepeuQnCDrqqjrjbgrdXNhZ2Ug66GcIOqzhOyCsO2VnOuLpC5cbiAgICBpZiAoXG4gICAgICBwYXJhbXMuY29zdF91c2QgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcGFyYW1zLmlucHV0X3Rva2VucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwYXJhbXMub3V0cHV0X3Rva2VucyAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJyXCIpXG4gICAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAgIC5zZWxlY3QoeyBtb2RlbF9uYW1lOiBcIm1vZGVsX25hbWVcIiB9KVxuICAgICAgICAud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAgIC5maXJzdCgpO1xuICAgICAgY29uc3QgZWZmZWN0aXZlTW9kZWxOYW1lID0gcGFyYW1zLm1vZGVsX25hbWUgPz8gcm93Py5tb2RlbF9uYW1lO1xuICAgICAgaWYgKGVmZmVjdGl2ZU1vZGVsTmFtZSkge1xuICAgICAgICBjb25zdCBtb2RlbCA9IGNhbm9uaWNhbE1vZGVsTmFtZShlZmZlY3RpdmVNb2RlbE5hbWUpO1xuICAgICAgICBjb25zdCB1c2FnZSA9IG5vcm1hbGl6ZWRVc2FnZUZvckNvc3Qoe1xuICAgICAgICAgIHRva2VuX25hbWU6IHBhcmFtcy50b2tlbl9uYW1lLFxuICAgICAgICAgIG1vZGVsX25hbWU6IGVmZmVjdGl2ZU1vZGVsTmFtZSxcbiAgICAgICAgICBpbnB1dF90b2tlbnM6IHBhcmFtcy5pbnB1dF90b2tlbnMsXG4gICAgICAgICAgb3V0cHV0X3Rva2VuczogcGFyYW1zLm91dHB1dF90b2tlbnMsXG4gICAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IHBhcmFtcy5jYWNoZV9yZWFkX3Rva2VucyA/PyAwLFxuICAgICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogcGFyYW1zLmNhY2hlX2NyZWF0aW9uX3Rva2VucyA/PyAwLFxuICAgICAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogcGFyYW1zLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyxcbiAgICAgICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHBhcmFtcy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMsXG4gICAgICAgIH0pO1xuICAgICAgICB1cGRhdGUuY29zdF91c2QgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIGNhbGN1bGF0ZUNvc3RVc2QobW9kZWwsIHtcbiAgICAgICAgICAgIGlucHV0VG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyxcbiAgICAgICAgICAgIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlZElucHV0VG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMsXG4gICAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW0sXG4gICAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaDogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWgsXG4gICAgICAgICAgfSkgKiAxXzAwMF8wMDAsXG4gICAgICAgICk7XG4gICAgICAgIHVwZGF0ZS5jb3N0X3NvdXJjZSA9IFwicHJpY2luZ190YWJsZVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwgdXBkYXRlKTtcbiAgICBhd2FpdCB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dzXCIpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmlyc3RHZW5lcmF0ZVN0ZXBUdGZ0KHJlcXVlc3RMb2dJZDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IHR0ZnRfbXM6IFwidHRmdF9tc1wiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIilcbiAgICAgIC53aGVyZShcInR0ZnRfbXNcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJzdGVwX2luZGV4XCIsIFwiYXNjXCIpXG4gICAgICAub3JkZXJCeShcImlkXCIsIFwiYXNjXCIpXG4gICAgICAuZmlyc3QoKTtcbiAgICByZXR1cm4gcm93Py50dGZ0X21zID09PSBudWxsIHx8IHJvdz8udHRmdF9tcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IE51bWJlcihyb3cudHRmdF9tcyk7XG4gIH1cblxuICBhc3luYyBhZ2dyZWdhdGVTdGVwVXNhZ2UocmVxdWVzdExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPFJlcXVlc3RMb2dTdGVwQWdncmVnYXRlPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoU1RFUF9BR0dSRUdBVEVfU0VMRUNUKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcImdlbmVyYXRlXCIpO1xuICAgIHJldHVybiBhZ2dyZWdhdGVHZW5lcmF0ZVN0ZXBSb3dzKHJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBzdGFsZSBjYW5kaWRhdGVzLCB0aGVuIGV4cGlyZXMgZWFjaCBydW4gaW4gaXRzIG93biBzaG9ydCB0cmFuc2FjdGlvbi5cbiAgICogVGhlIGNhbmRpZGF0ZSBxdWVyeSBpcyBvbmx5IGEgaGludDsgdGhlIHRyYW5zYWN0aW9uYWwgb3BlcmF0aW9uIHJlY2hlY2tzIGl0XG4gICAqIGFmdGVyIGFjcXVpcmluZyB0aGUgYWR2aXNvcnkgbG9jayBzaGFyZWQgd2l0aCB0b29sIGZvbGxvdy11cHMuXG4gICAqL1xuICBhc3luYyBleHBpcmVTdGFsZVRvb2xXYWl0aW5nUnVucyhcbiAgICB0aHJlc2hvbGRNczogbnVtYmVyLFxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICAgIGxpbWl0OiBudW1iZXIgPSAxMCxcbiAgKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IG5ldyBEYXRlKERhdGUubm93KCkgLSB0aHJlc2hvbGRNcyk7XG4gICAgY29uc3QgY2FuZGlkYXRlSWRzID0gYXdhaXQgdGhpcy5maW5kU3RhbGVUb29sV2FpdGluZ1J1bkNhbmRpZGF0ZXModGhyZXNob2xkLCBsaW1pdCk7XG4gICAgY29uc3QgZXhwaXJlZElkczogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RMb2dJZCBvZiBjYW5kaWRhdGVJZHMpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLnRyeUV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW4ocmVxdWVzdExvZ0lkLCB0aHJlc2hvbGQsIGVycm9yTWVzc2FnZSkpIHtcbiAgICAgICAgZXhwaXJlZElkcy5wdXNoKHJlcXVlc3RMb2dJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHBpcmVkSWRzO1xuICB9XG5cbiAgYXN5bmMgZmluZFN0YWxlVG9vbFdhaXRpbmdSdW5DYW5kaWRhdGVzKHRocmVzaG9sZDogRGF0ZSwgbGltaXQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwid1wiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5qb2luKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgXCJyZXF1ZXN0X2xvZ19zdGVwcy5yZXF1ZXN0X2xvZ19pZFwiKVxuICAgICAgLmRpc3RpbmN0KFwicmVxdWVzdF9sb2dzLmlkXCIpXG4gICAgICAuc2VsZWN0KHsgaWQ6IFwicmVxdWVzdF9sb2dzLmlkXCIgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9ncy5zdGF0dXNcIiwgXCJydW5uaW5nXCIpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy50eXBlXCIsIFwidG9vbF9jYWxsXCIpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy5jcmVhdGVkX2F0XCIsIFwiPFwiLCB0aHJlc2hvbGQpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy50b29sX3Jlc3VsdFwiLCBudWxsKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfc3RlcHMuZXJyb3JcIiwgbnVsbClcbiAgICAgIC5saW1pdChsaW1pdCk7XG4gICAgcmV0dXJuIHJvd3MubWFwKCh7IGlkIH0pID0+IGlkKTtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKHsgZGJQcmVzZXQ6IFwid1wiIH0pXG4gIGFzeW5jIHRyeUV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW4oXG4gICAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gICAgdGhyZXNob2xkOiBEYXRlLFxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIGNvbnN0IGxvY2tSZXN1bHQgPSAoYXdhaXQgd2RiLmtuZXgucmF3KFwiU0VMRUNUIHBnX3RyeV9hZHZpc29yeV94YWN0X2xvY2soPywgPykgQVMgYWNxdWlyZWRcIiwgW1xuICAgICAgUkVRVUVTVF9MT0dfUlVOX0xPQ0tfQ0xBU1NfSUQsXG4gICAgICByZXF1ZXN0TG9nSWQsXG4gICAgXSkpIGFzIHsgcm93cz86IEFycmF5PHsgYWNxdWlyZWQ/OiBib29sZWFuIH0+IH07XG4gICAgaWYgKGxvY2tSZXN1bHQucm93cz8uWzBdPy5hY3F1aXJlZCAhPT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gVGhlIGZvbGxvdy11cCBwYXRoIHVzZXMgdGhlIHNhbWUgd3JpdGVyIHRyYW5zYWN0aW9uIGxvY2suIFJlY2hlY2sgYWZ0ZXJcbiAgICAvLyBsb2NraW5nIHNvIGEgcmVzdWx0IGNvbW1pdHRlZCBkdXJpbmcgY2FuZGlkYXRlIGRpc2NvdmVyeSBtYWtlcyB0aGlzIGEgbm8tb3AuXG4gICAgY29uc3QgdW5yZXNvbHZlZCA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IGlkOiBcImlkXCIgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJ0b29sX2NhbGxcIilcbiAgICAgIC53aGVyZShcImNyZWF0ZWRfYXRcIiwgXCI8XCIsIHRocmVzaG9sZClcbiAgICAgIC53aGVyZShcInRvb2xfcmVzdWx0XCIsIG51bGwpXG4gICAgICAud2hlcmUoXCJlcnJvclwiLCBudWxsKVxuICAgICAgLmZpcnN0KCk7XG4gICAgaWYgKCF1bnJlc29sdmVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBzdGVwUm93cyA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdChTVEVQX0FHR1JFR0FURV9TRUxFQ1QpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIik7XG4gICAgY29uc3QgYWdncmVnYXRlID0gYWdncmVnYXRlR2VuZXJhdGVTdGVwUm93cyhzdGVwUm93cyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pO1xuICAgIGNvbnN0IGZpcnN0VHRmdCA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IHR0ZnRfbXM6IFwidHRmdF9tc1wiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIilcbiAgICAgIC53aGVyZShcInR0ZnRfbXNcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJzdGVwX2luZGV4XCIsIFwiYXNjXCIpXG4gICAgICAub3JkZXJCeShcImlkXCIsIFwiYXNjXCIpXG4gICAgICAuZmlyc3QoKTtcblxuICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJzdGF0dXNcIiwgXCJydW5uaW5nXCIpXG4gICAgICAudXBkYXRlKHtcbiAgICAgICAgc3RhdHVzOiBcImVycm9yXCIsXG4gICAgICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgaW5wdXRfdG9rZW5zOiBhZ2dyZWdhdGUuaW5wdXRfdG9rZW5zLFxuICAgICAgICBvdXRwdXRfdG9rZW5zOiBhZ2dyZWdhdGUub3V0cHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9yZWFkX3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fdG9rZW5zLFxuICAgICAgICAuLi4oYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgZHVyYXRpb25fbXM6IGFnZ3JlZ2F0ZS5kdXJhdGlvbl9tcyxcbiAgICAgICAgZmFsbGJhY2tfY291bnQ6IGFnZ3JlZ2F0ZS5mYWxsYmFja19jb3VudCxcbiAgICAgICAgY29zdF91c2Q6IGFnZ3JlZ2F0ZS5jb3N0X3VzZCxcbiAgICAgICAgLi4uKGFnZ3JlZ2F0ZS5jb3N0X3NvdXJjZSAhPT0gdW5kZWZpbmVkID8geyBjb3N0X3NvdXJjZTogYWdncmVnYXRlLmNvc3Rfc291cmNlIH0gOiB7fSksXG4gICAgICAgIHR0ZnRfbXM6XG4gICAgICAgICAgZmlyc3RUdGZ0Py50dGZ0X21zID09PSBudWxsIHx8IGZpcnN0VHRmdD8udHRmdF9tcyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogTnVtYmVyKGZpcnN0VHRmdC50dGZ0X21zKSxcbiAgICAgIH0pO1xuICAgIHJldHVybiB1cGRhdGVkID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgbmF0aXZlIHFncmlkIHRvb2wgZm9sbG93LXVwIGFuZCBjb21wdXRlcyBpdHMgbmV4dCBzdGVwIGluZGV4IHdoaWxlXG4gICAqIGhvbGRpbmcgdGhlIHBlci1ydW4gYWR2aXNvcnkgbG9jayBzaGFyZWQgd2l0aCBzdGFsZSBjbGVhbnVwLlxuICAgKi9cbiAgQHRyYW5zYWN0aW9uYWwoeyBkYlByZXNldDogXCJ3XCIgfSlcbiAgYXN5bmMgY29udGludWVUb29sUnVuKFxuICAgIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICAgIHRvb2xSZXN1bHRzOiBUb29sUmVzdWx0Q29udGludWF0aW9uW10sXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICBhd2FpdCB3ZGIua25leC5yYXcoXCJTRUxFQ1QgcGdfYWR2aXNvcnlfeGFjdF9sb2NrKD8sID8pXCIsIFtcbiAgICAgIFJFUVVFU1RfTE9HX1JVTl9MT0NLX0NMQVNTX0lELFxuICAgICAgcmVxdWVzdExvZ0lkLFxuICAgIF0pO1xuXG4gICAgY29uc3QgcnVuID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdCh7IHN0YXR1czogXCJzdGF0dXNcIiB9KVxuICAgICAgLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLmZpcnN0KCk7XG4gICAgaWYgKCFydW4pIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdCBsb2cgcnVuICR7cmVxdWVzdExvZ0lkfSBub3QgZm91bmRgKTtcbiAgICBpZiAocnVuLnN0YXR1cyAhPT0gXCJydW5uaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdCBsb2cgcnVuICR7cmVxdWVzdExvZ0lkfSBpcyBhbHJlYWR5ICR7cnVuLnN0YXR1c31gKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiB0b29sUmVzdWx0cykge1xuICAgICAgYXdhaXQgd2RiXG4gICAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAud2hlcmUoXCJ0b29sX2NhbGxfaWRcIiwgcmVzdWx0LnRvb2xDYWxsSWQpXG4gICAgICAgIC53aGVyZShcInR5cGVcIiwgXCJ0b29sX2NhbGxcIilcbiAgICAgICAgLnVwZGF0ZShyZXN1bHQuaXNFcnJvciA/IHsgZXJyb3I6IHJlc3VsdC5vdXRwdXQgfSA6IHsgdG9vbF9yZXN1bHQ6IHJlc3VsdC5vdXRwdXQgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93ID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KHsgbWF4X3N0ZXA6IFB1cmkubWF4KFwic3RlcF9pbmRleFwiKSB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLmZpcnN0KCk7XG4gICAgcmV0dXJuIChyb3c/Lm1heF9zdGVwID8/IC0xKSArIDE7XG4gIH1cblxuICAvKipcbiAgICog7ZmU66m0IO2RnOyLnOyaqSDstJ0g67mE7JqpLiDrqqnroZ3qs7wg6rCZ7J2AIO2VhO2EsOulvCDsoIHsmqntlZzri6QuXG4gICAqXG4gICAqIOyghOyytOulvCDsobDqsbQg7JeG7J20IFNVTSDtlZwg65KkLCBgY29zdF9zb3VyY2VgIOqwgCDsl4bripQgbGVnYWN5IHJvdyDsnZgg7LCo7JWh66eMIOuztOygle2VnOuLpC5cbiAgICog7KGw6rG0IOyXhuuKlCBTVU0g7J207Ja07JW8IGAocHJvamVjdF9uYW1lLCBjb3N0X3VzZClgIOy7pOuyhOungSDsnbjrjbHsiqTqsIAgSW5kZXggT25seSBTY2FuIOydhFxuICAgKiDtg4Tri6Qg4oCUIGBjb3N0X3NvdXJjZSBJUyBOT1QgTlVMTGAg7J2EIOqxuOuptCDqt7gg7Lus65+87J20IOyduOuNseyKpOyXkCDsl4bslrQgaGVhcCDsnYQg64uk7IucIOu0kOyVvFxuICAgKiDtlZjrr4DroZwg7ZSM656Y64SI6rCAIOyduOuNseyKpOulvCDrsoTrpqzqs6Agc2VxIHNjYW4g7Jy866GcIOuPjOyVhOqwhOuLpCjsi6TsuKEgMjMwbXMg4oaSIDgxNG1zKS5cbiAgICpcbiAgICogbGVnYWN5IOuztOygleydhCDrgqjqsqjrkZQg7J207JygOiDrsLHtlYTroZwg6riw7KG0IGxlZ2FjeSDripQgMCDsnbQg65CY7JeI7KeA66eMLCDsmbjrtoAg66Gc6rGw6rCAXG4gICAqIGBBcHBlbmRTdGVwSW5wdXRgL2BGaW5pc2hSdW5JbnB1dGAg7Jy866GcIGNvc3RTb3VyY2Ug7JeG7J20IOuEo+ycvOuptCDri6Tsi5wg7IOd6ri4IOyImCDsnojri6QuXG4gICAqIOq3uOufsCByb3cg64qUIOyggOyepeqwkiDrjIDsi6Ag7ZiE7J6sIOqwgOqyqe2RnCDsnqzqs4TsgrDqsJLsnbQg66ee7Jy866+A66GcIOywqOyVoeydhCDrjZTtlZzri6QuXG4gICAqXG4gICAqIO2VhO2EsCDsobDqsbTsnYQg7Jes6riw7IScIOuLpOyLnCDqtaztmITtlZjsp4Ag7JWK6rOgIGBhcHBseUxpc3RGaWx0ZXJzYCDrpbwg6rO17Jyg7ZWY64qUIOqyg+ydtCDtlbXsi6zsnbTri6Qg4oCUXG4gICAqIOuRkCDsv7zrpqzqsIAg6rCB7J6QIO2VhO2EsOulvCDqsIDsp4DrqbQg7ZmU66m07JeQ7IScIO2VhO2EsOulvCDqsbjsl4jsnYQg65WMIO2WiSDsiJjsmYAg67mE7Jqp7J20IOyhsOyaqe2eiCDslrTquIvrgpzri6QuXG4gICAqL1xuICBhc3luYyB0b3RhbENvc3QocmF3UGFyYW1zOiBSZXF1ZXN0TG9nTGlzdFBhcmFtcyA9IHsgbnVtOiAwLCBwYWdlOiAxIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMCxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBzZWFyY2g6IFwiaWRcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWI6IHRvdGFsUWIgfSA9IHRoaXMuZ2V0U3Vic2V0UXVlcmllcyhcIkNcIik7XG4gICAgdGhpcy5hcHBseUxpc3RGaWx0ZXJzKHRvdGFsUWIsIHBhcmFtcyk7XG4gICAgLy8gc3Vic2V0IHFiIOuKlCDsu6zrn7wg66qp66Gd7J20IOydtOuvuCBTRUxFQ1Qg7JeQIOuwle2YgCDsnojslrQg7KeR6rOE66W8IOyWueycvOuptCBHUk9VUCBCWSDsl5Drn6zqsIAg64Kc64ukLlxuICAgIC8vIGV4ZWN1dGVDb3VudFF1ZXJ5IOyZgCDqsJnsnYAg67Cp7Iud7Jy866GcIHNlbGVjdCDrpbwg67mE7Jqw6rOgIOynkeqzhOunjCDrgqjquLTri6QuXG4gICAgY29uc3Qgc3RvcmVkID0gYXdhaXQgdG90YWxRYlxuICAgICAgLmNsZWFyKFwic2VsZWN0XCIpXG4gICAgICAvLyDsnYzsiJgg7KCA7J6l6rCSKOqzvOqxsCDrsoTqt7gp7J2AIDAg7Jy866GcIOuIjOufrOyEnCDrjZTtlZzri6Qg4oCUIEpTIOyqvSBNYXRoLm1heCDsmYAg6rCZ7J2AIOq3nOy5mS5cbiAgICAgIC5zZWxlY3Qoe1xuICAgICAgICB0b3RhbDogUHVyaS5yYXdOdW1iZXIoXCJDT0FMRVNDRShTVU0oR1JFQVRFU1QocmVxdWVzdF9sb2dzLmNvc3RfdXNkLCAwKSksIDApXCIpLFxuICAgICAgfSlcbiAgICAgIC5maXJzdCgpO1xuXG4gICAgY29uc3QgeyBxYjogbGVnYWN5UWIgfSA9IHRoaXMuZ2V0U3Vic2V0UXVlcmllcyhcIkNcIik7XG4gICAgdGhpcy5hcHBseUxpc3RGaWx0ZXJzKGxlZ2FjeVFiLCBwYXJhbXMpO1xuICAgIGNvbnN0IGxlZ2FjeVJvd3MgPSBhd2FpdCBsZWdhY3lRYlxuICAgICAgLndoZXJlUmF3KFwicmVxdWVzdF9sb2dzLmNvc3Rfc291cmNlIElTIE5VTEwgT1IgcmVxdWVzdF9sb2dzLmNvc3RfdXNkIElTIE5VTExcIilcbiAgICAgIC5jbGVhcihcInNlbGVjdFwiKVxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIHRva2VuX25hbWU6IFwicmVxdWVzdF9sb2dzLnRva2VuX25hbWVcIixcbiAgICAgICAgbW9kZWxfbmFtZTogXCJyZXF1ZXN0X2xvZ3MubW9kZWxfbmFtZVwiLFxuICAgICAgICBpbnB1dF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmlucHV0X3Rva2Vuc1wiLFxuICAgICAgICBvdXRwdXRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5vdXRwdXRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuc1wiLFxuICAgICAgICBjb3N0X3VzZDogXCJyZXF1ZXN0X2xvZ3MuY29zdF91c2RcIixcbiAgICAgIH0pO1xuXG4gICAgY29uc3Qgc3RvcmVkVG90YWwgPSBOdW1iZXIoc3RvcmVkPy50b3RhbCA/PyAwKSAvIE1JQ1JPX1VTRDtcblxuICAgIC8vIGxlZ2FjeSByb3cg64qUIOychCBTVU0g7JeQIOyggOyepeqwkuycvOuhnCDsnbTrr7gg7Y+s7ZWo65CY7Ja0IOyeiOuLpC4g7J6s6rOE7IKw6rCS6rO87J2YIOywqOyVoeunjCDrjZTtlZzri6QuXG4gICAgcmV0dXJuIGxlZ2FjeVJvd3MucmVkdWNlKChzdW0sIHJvdykgPT4ge1xuICAgICAgY29uc3QgYWxyZWFkeVN1bW1lZCA9IE1hdGgubWF4KHJvdy5jb3N0X3VzZCA/PyAwLCAwKSAvIE1JQ1JPX1VTRDtcbiAgICAgIGNvbnN0IHVzYWdlID0gbm9ybWFsaXplZFVzYWdlRm9yQ29zdChyb3cpO1xuICAgICAgaWYgKCF1c2FnZS5tb2RlbCkgcmV0dXJuIHN1bTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHN1bSArXG4gICAgICAgIGNhbGN1bGF0ZUNvc3RVc2QodXNhZ2UubW9kZWwsIHtcbiAgICAgICAgICBpbnB1dFRva2VuczogdXNhZ2UuaW5wdXRUb2tlbnMsXG4gICAgICAgICAgb3V0cHV0VG9rZW5zOiB1c2FnZS5vdXRwdXRUb2tlbnMsXG4gICAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlZElucHV0VG9rZW5zLFxuICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zLFxuICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bSxcbiAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaDogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWgsXG4gICAgICAgIH0pIC1cbiAgICAgICAgYWxyZWFkeVN1bW1lZFxuICAgICAgKTtcbiAgICB9LCBzdG9yZWRUb3RhbCk7XG4gIH1cblxuICBhc3luYyBkaXN0aW5jdFByb2plY3ROYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuZGlzdGluY3QoXCJwcm9qZWN0X25hbWVcIilcbiAgICAgIC53aGVyZShcInByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpXG4gICAgICAub3JkZXJCeShcInByb2plY3RfbmFtZVwiLCBcImFzY1wiKVxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIHByb2plY3RfbmFtZTogXCJwcm9qZWN0X25hbWVcIixcbiAgICAgIH0pO1xuICAgIHJldHVybiByb3dzLm1hcCgocikgPT4gci5wcm9qZWN0X25hbWUhKTtcbiAgfVxuXG4gIGFzeW5jIGRpc3RpbmN0TW9kZWxOYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuZGlzdGluY3QoXCJtb2RlbF9uYW1lXCIpXG4gICAgICAud2hlcmUoXCJtb2RlbF9uYW1lXCIsIFwiIT1cIiwgbnVsbClcbiAgICAgIC5vcmRlckJ5KFwibW9kZWxfbmFtZVwiLCBcImFzY1wiKVxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIG1vZGVsX25hbWU6IFwibW9kZWxfbmFtZVwiLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHJvd3MubWFwKChyKSA9PiByLm1vZGVsX25hbWUhKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBkZWwoaWRzOiBudW1iZXJbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcblxuICAgIC8vIHRyYW5zYWN0aW9uXG4gICAgYXdhaXQgd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGF3YWl0IHRyeFxuICAgICAgICAudGFibGUoXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgICAud2hlcmVJbihcInJlcXVlc3RfbG9nX3N0ZXBzLnJlcXVlc3RfbG9nX2lkXCIsIGlkcylcbiAgICAgICAgLmRlbGV0ZSgpO1xuICAgICAgcmV0dXJuIHRyeC50YWJsZShcInJlcXVlc3RfbG9nc1wiKS53aGVyZUluKFwicmVxdWVzdF9sb2dzLmlkXCIsIGlkcykuZGVsZXRlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzLmxlbmd0aDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ01vZGVsID0gbmV3IFJlcXVlc3RMb2dNb2RlbENsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUE2QkEsTUFBYSxZQUFZO0FBQ3pCLE1BQU0sZ0NBQWdDO0FBQ3RDLE1BQU0sd0JBQXdCO0FBRTlCLFNBQVMsa0JBQWtCLE9BQXdDO0NBQ2pFLElBQUksQ0FBQyxPQUFPLE9BQU87Q0FDbkIsSUFBSSxPQUFPLFVBQVUsVUFBVSxPQUFPO0NBQ3RDLElBQUk7RUFDRixPQUFPLEtBQUssTUFBTSxLQUFLO0NBQ3pCLFFBQVE7RUFDTixPQUFPO0NBQ1Q7QUFDRjtBQXFCQSxNQUFNLHdCQUF3QjtDQUM1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
|
|
580
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzb25TY2hlbWFUb1pvZCB9IGZyb20gXCJqc29uLXNjaGVtYS10by16b2RcIjtcbmltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG4gIFB1cmksXG4gIHRyYW5zYWN0aW9uYWwsXG59IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3RVc2QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0XCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dTdWJzZXRLZXksIHR5cGUgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWQuc3NvXCI7XG5pbXBvcnQge1xuICByZW5kZXJKc29uU2NoZW1hWm9kU2hhcGVUZXh0LFxuICByZW5kZXJQYXJzZWRKc29uU2NoZW1hVHlwZVRleHQsXG59IGZyb20gXCIuL2pzb24tc2NoZW1hLXR5cGUtdGV4dFwiO1xuaW1wb3J0IHtcbiAgdHlwZSBSZXF1ZXN0TG9nTGlzdFBhcmFtcyxcbiAgdHlwZSBSZXF1ZXN0TG9nU2F2ZVBhcmFtcyxcbiAgdHlwZSBUb29sRGVmaW5pdGlvbnMsXG4gIHR5cGUgVG9vbFZpZXcsXG59IGZyb20gXCIuL3JlcXVlc3QtbG9nLnR5cGVzXCI7XG5pbXBvcnQgeyBmb3JtYXRab2RDb2RlIH0gZnJvbSBcIi4vem9kLWNvZGUtZm9ybWF0XCI7XG5cbi8vIGNvc3RfdXNk64qUIOygleyImCBtaWNyby1VU0TroZwg7KCA7J6lLiDsi6TsoJwgVVNEID0gY29zdF91c2QgLyBNSUNST19VU0QuXG5leHBvcnQgY29uc3QgTUlDUk9fVVNEID0gMV8wMDBfMDAwO1xuY29uc3QgUkVRVUVTVF9MT0dfUlVOX0xPQ0tfQ0xBU1NfSUQgPSA3MTg7XG5jb25zdCBUT09MX0VOVU1fVkFMVUVfTElNSVQgPSA2O1xuXG5mdW5jdGlvbiBkZWNvZGVTdG9yZWRUb29scyh2YWx1ZTogdW5rbm93bik6IFRvb2xEZWZpbml0aW9ucyB8IG51bGwge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbHVlIGFzIFRvb2xEZWZpbml0aW9ucztcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSkgYXMgVG9vbERlZmluaXRpb25zO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG50eXBlIFRvb2xSZXN1bHRDb250aW51YXRpb24gPSB7XG4gIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgb3V0cHV0OiBzdHJpbmc7XG4gIGlzRXJyb3I/OiBib29sZWFuO1xufTtcblxudHlwZSBSZXF1ZXN0TG9nU3RlcEFnZ3JlZ2F0ZSA9IHtcbiAgaW5wdXRfdG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dF90b2tlbnM6IG51bWJlcjtcbiAgY2FjaGVfcmVhZF90b2tlbnM6IG51bWJlcjtcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vucz86IG51bWJlcjtcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zPzogbnVtYmVyO1xuICBkdXJhdGlvbl9tczogbnVtYmVyO1xuICBmYWxsYmFja19jb3VudDogbnVtYmVyO1xuICBjb3N0X3VzZDogbnVtYmVyO1xuICBjb3N0X3NvdXJjZT86IHN0cmluZztcbn07XG5cbmNvbnN0IFNURVBfQUdHUkVHQVRFX1NFTEVDVCA9IHtcbiAgaW5wdXRfdG9rZW5zOiBcImlucHV0X3Rva2Vuc1wiLFxuICBvdXRwdXRfdG9rZW5zOiBcIm91dHB1dF90b2tlbnNcIixcbiAgY2FjaGVfcmVhZF90b2tlbnM6IFwiY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IFwiY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIsXG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogXCJjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIixcbiAgZHVyYXRpb25fbXM6IFwiZHVyYXRpb25fbXNcIixcbiAgZmFsbGJhY2tfY291bnQ6IFwiZmFsbGJhY2tfY291bnRcIixcbiAgY29zdF91c2Q6IFwiY29zdF91c2RcIixcbiAgY29zdF9zb3VyY2U6IFwiY29zdF9zb3VyY2VcIixcbn0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGFnZ3JlZ2F0ZUdlbmVyYXRlU3RlcFJvd3Mocm93czogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTogUmVxdWVzdExvZ1N0ZXBBZ2dyZWdhdGUge1xuICBjb25zdCBzdW0gPSAoZmllbGQ6IHN0cmluZyk6IG51bWJlciA9PlxuICAgIHJvd3MucmVkdWNlKCh0b3RhbCwgcm93KSA9PiB0b3RhbCArIE51bWJlcihyb3dbZmllbGRdID8/IDApLCAwKTtcbiAgY29uc3Qgb3B0aW9uYWxTdW0gPSAoZmllbGQ6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCA9PlxuICAgIHJvd3Muc29tZSgocm93KSA9PiByb3dbZmllbGRdICE9PSBudWxsICYmIHJvd1tmaWVsZF0gIT09IHVuZGVmaW5lZCkgPyBzdW0oZmllbGQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBjb2xsYXBzZSA9IChmaWVsZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCB2YWx1ZXMgPSBbXG4gICAgICAuLi5uZXcgU2V0KFxuICAgICAgICByb3dzXG4gICAgICAgICAgLm1hcCgocm93KSA9PiByb3dbZmllbGRdKVxuICAgICAgICAgIC5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgc3RyaW5nID0+IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5sZW5ndGggPiAwKSxcbiAgICAgICksXG4gICAgXTtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdmFsdWVzLmxlbmd0aCA9PT0gMSA/IHZhbHVlc1swXSA6IFwibWl4ZWRcIjtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dF90b2tlbnM6IHN1bShcImlucHV0X3Rva2Vuc1wiKSxcbiAgICBvdXRwdXRfdG9rZW5zOiBzdW0oXCJvdXRwdXRfdG9rZW5zXCIpLFxuICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBzdW0oXCJjYWNoZV9yZWFkX3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHN1bShcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IG9wdGlvbmFsU3VtKFwiY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuczogb3B0aW9uYWxTdW0oXCJjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIiksXG4gICAgZHVyYXRpb25fbXM6IHN1bShcImR1cmF0aW9uX21zXCIpLFxuICAgIGZhbGxiYWNrX2NvdW50OiBzdW0oXCJmYWxsYmFja19jb3VudFwiKSxcbiAgICBjb3N0X3VzZDogc3VtKFwiY29zdF91c2RcIiksXG4gICAgY29zdF9zb3VyY2U6IGNvbGxhcHNlKFwiY29zdF9zb3VyY2VcIiksXG4gIH07XG59XG5cbnR5cGUgUmVxdWVzdExvZ1VzYWdlUm93ID0ge1xuICB0b2tlbl9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgbW9kZWxfbmFtZT86IHN0cmluZyB8IG51bGw7XG4gIGlucHV0X3Rva2VuczogbnVtYmVyO1xuICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuICBjb3N0X3VzZD86IG51bWJlciB8IG51bGw7XG4gIGNvc3Rfc291cmNlPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmZ1bmN0aW9uIGlzQW50aHJvcGljVXNhZ2VSb3cocm93OiBQaWNrPFJlcXVlc3RMb2dVc2FnZVJvdywgXCJ0b2tlbl9uYW1lXCIgfCBcIm1vZGVsX25hbWVcIj4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICByb3cudG9rZW5fbmFtZT8uc3RhcnRzV2l0aChcImFudGhyb3BpYy9cIikgPT09IHRydWUgfHxcbiAgICByb3cubW9kZWxfbmFtZT8uc3RhcnRzV2l0aChcImNsYXVkZS1cIikgPT09IHRydWUgfHxcbiAgICByb3cubW9kZWxfbmFtZT8uc3RhcnRzV2l0aChcImFudGhyb3BpYy9jbGF1ZGUtXCIpID09PSB0cnVlXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbE1vZGVsTmFtZShtb2RlbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBtb2RlbE5hbWUuaW5jbHVkZXMoXCIvXCIpID8gbW9kZWxOYW1lLnNwbGl0KFwiL1wiKS5wb3AoKSEgOiBtb2RlbE5hbWU7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZWRVc2FnZUZvckNvc3Qocm93OiBSZXF1ZXN0TG9nVXNhZ2VSb3cpOiB7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBpbnB1dFRva2VuczogbnVtYmVyO1xuICBvdXRwdXRUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVkSW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtPzogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaD86IG51bWJlcjtcbn0ge1xuICBjb25zdCBjYWNoZVJlYWQgPSByb3cuY2FjaGVfcmVhZF90b2tlbnM7XG4gIGNvbnN0IGNhY2hlQ3JlYXRpb24gPSByb3cuY2FjaGVfY3JlYXRpb25fdG9rZW5zO1xuICBjb25zdCBzdG9yZWRJbnB1dCA9IHJvdy5pbnB1dF90b2tlbnM7XG4gIGNvbnN0IGxlZ2FjeUFudGhyb3BpY1NwbGl0SW5wdXQgPVxuICAgIGlzQW50aHJvcGljVXNhZ2VSb3cocm93KSAmJiBzdG9yZWRJbnB1dCA8IGNhY2hlUmVhZCArIGNhY2hlQ3JlYXRpb247XG4gIHJldHVybiB7XG4gICAgbW9kZWw6IHJvdy5tb2RlbF9uYW1lID8gY2Fub25pY2FsTW9kZWxOYW1lKHJvdy5tb2RlbF9uYW1lKSA6IG51bGwsXG4gICAgaW5wdXRUb2tlbnM6IGxlZ2FjeUFudGhyb3BpY1NwbGl0SW5wdXQgPyBzdG9yZWRJbnB1dCArIGNhY2hlUmVhZCArIGNhY2hlQ3JlYXRpb24gOiBzdG9yZWRJbnB1dCxcbiAgICBvdXRwdXRUb2tlbnM6IHJvdy5vdXRwdXRfdG9rZW5zLFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiBjYWNoZVJlYWQsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiBjYWNoZUNyZWF0aW9uLFxuICAgIC4uLihyb3cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zICE9PSBudWxsICYmIHJvdy5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtOiByb3cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zIH1cbiAgICAgIDoge30pLFxuICAgIC4uLihyb3cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zICE9PSBudWxsICYmIHJvdy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoOiByb3cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zIH1cbiAgICAgIDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVMZWdhY3lBbnRocm9waWNSb3c8VCBleHRlbmRzIFJlcXVlc3RMb2dVc2FnZVJvdz4ocm93OiBUKTogVCB7XG4gIC8vIOyDiCByb3cg64qUIOuLueyLnOydmCBwcm92aWRlci/qsIDqsqntkZwg67mE7Jqp7J2EIO2ZleyglSDsoIDsnqXtlZzri6QuIO2YhOyerCDqsIDqsqntkZzroZwg642u7Ja07JOw7KeAIOyViuuKlOuLpC5cbiAgaWYgKHJvdy5jb3N0X3NvdXJjZSkgcmV0dXJuIHJvdztcbiAgY29uc3QgdXNhZ2UgPSBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdyk7XG4gIGlmICh1c2FnZS5pbnB1dFRva2VucyA9PT0gcm93LmlucHV0X3Rva2VucykgcmV0dXJuIHJvdztcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHsgLi4ucm93LCBpbnB1dF90b2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zIH07XG4gIGlmICh1c2FnZS5tb2RlbCkge1xuICAgIG5vcm1hbGl6ZWQuY29zdF91c2QgPSBNYXRoLnJvdW5kKGNhbGN1bGF0ZUNvc3RVc2QodXNhZ2UubW9kZWwsIHVzYWdlKSAqIE1JQ1JPX1VTRCk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogYG9yZGVyQnlgIGVudW0g6rCSKGDsu6zrn7wt67Cp7ZalYCnsnYQg7KCV66CsIOygiOuhnCDsmK7quLTri6QuXG4gKlxuICogZW51bSDsnbQgMTgg7KKF7J206528IOy8gOydtOyKpOulvCDsnbzsnbzsnbQg7KCB64qUIOuMgOyLoCDtjIzsi7HtlZjrkJgsIOy7rOufvOydgCDslYTrnpgg66qp66Gd7Jy866GcIO2VnOygle2VnOuLpCDigJRcbiAqIOusuOyekOyXtOydhCDqt7jrjIDroZwg7Lus65+866qF7JeQIOuEmOq4sOuptCBlbnVtIOydtCDrsJTrgJQg65WMIOqygOymnSDsl4bripQg7Iud67OE7J6Q6rCAIFNRTCDroZwg7Z2Y65+s65Og64ukLlxuICog66qp66Gd7JeQIOyXhuuKlCDqsJLsnYAg6riw67O4IOygleugrChpZCBkZXNjKeuhnCDrlqjslrTsp4Tri6QuXG4gKi9cbmNvbnN0IE9SREVSQUJMRV9DT0xVTU5TID0ge1xuICBpZDogXCJyZXF1ZXN0X2xvZ3MuaWRcIixcbiAgY3JlYXRlZF9hdDogXCJyZXF1ZXN0X2xvZ3MuY3JlYXRlZF9hdFwiLFxuICB0dGZ0X21zOiBcInJlcXVlc3RfbG9ncy50dGZ0X21zXCIsXG4gIGR1cmF0aW9uX21zOiBcInJlcXVlc3RfbG9ncy5kdXJhdGlvbl9tc1wiLFxuICBpbnB1dF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmlucHV0X3Rva2Vuc1wiLFxuICBvdXRwdXRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5vdXRwdXRfdG9rZW5zXCIsXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICBjb3N0X3VzZDogXCJyZXF1ZXN0X2xvZ3MuY29zdF91c2RcIixcbn0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGFwcGx5T3JkZXJCeShcbiAgcWI6IFJldHVyblR5cGU8UmVxdWVzdExvZ01vZGVsQ2xhc3NbXCJnZXRTdWJzZXRRdWVyaWVzXCJdPltcInFiXCJdLFxuICBvcmRlckJ5OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgY29uc3Qgc2VwYXJhdG9yID0gb3JkZXJCeS5sYXN0SW5kZXhPZihcIi1cIik7XG4gIGNvbnN0IGtleSA9IG9yZGVyQnkuc2xpY2UoMCwgc2VwYXJhdG9yKSBhcyBrZXlvZiB0eXBlb2YgT1JERVJBQkxFX0NPTFVNTlM7XG4gIGNvbnN0IGRpcmVjdGlvbiA9IG9yZGVyQnkuc2xpY2Uoc2VwYXJhdG9yICsgMSkgPT09IFwiYXNjXCIgPyBcImFzY1wiIDogXCJkZXNjXCI7XG4gIGNvbnN0IGNvbHVtbiA9IE9SREVSQUJMRV9DT0xVTU5TW2tleV07XG5cbiAgaWYgKCFjb2x1bW4pIHtcbiAgICBxYi5vcmRlckJ5KFwicmVxdWVzdF9sb2dzLmlkXCIsIFwiZGVzY1wiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcWIub3JkZXJCeShjb2x1bW4sIGRpcmVjdGlvbik7XG4gIC8vIOuPmeygkCDtlonsnZgg7Iic7ISc6rCAIO2OmOydtOyngOuniOuLpCDtnZTrk6Trpqzsp4Ag7JWK6rKMIOqzoOycoCDsu6zrn7zsnLzroZwgdGllLWJyZWFrIO2VnOuLpC5cbiAgaWYgKGtleSAhPT0gXCJpZFwiKSBxYi5vcmRlckJ5KFwicmVxdWVzdF9sb2dzLmlkXCIsIFwiZGVzY1wiKTtcbn1cblxuLypcbiAgUmVxdWVzdExvZyBNb2RlbFxuKi9cbmNsYXNzIFJlcXVlc3RMb2dNb2RlbENsYXNzIGV4dGVuZHMgQmFzZU1vZGVsQ2xhc3M8XG4gIFJlcXVlc3RMb2dTdWJzZXRLZXksXG4gIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nLFxuICB0eXBlb2YgcmVxdWVzdExvZ1N1YnNldFF1ZXJpZXMsXG4gIHR5cGVvZiByZXF1ZXN0TG9nTG9hZGVyUXVlcmllc1xuPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiUmVxdWVzdExvZ1wiLCByZXF1ZXN0TG9nU3Vic2V0UXVlcmllcywgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0sIHJlc291cmNlTmFtZTogXCJSZXF1ZXN0TG9nXCIgfSlcbiAgYXN5bmMgZmluZEJ5SWQ8VCBleHRlbmRzIFJlcXVlc3RMb2dTdWJzZXRLZXk+KFxuICAgIHN1YnNldDogVCxcbiAgICBpZDogbnVtYmVyLFxuICApOiBQcm9taXNlPFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdPiB7XG4gICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLmZpbmRNYW55KHN1YnNldCwge1xuICAgICAgaWQsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuICAgIGlmICghcm93c1swXSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKFNEKFwiZXJyb3IuZW50aXR5Tm90Rm91bmRcIikoXCJSZXF1ZXN0TG9nXCIsIGlkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3NbMF07XG4gIH1cblxuICBhc3luYyBmaW5kT25lPFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgbGlzdFBhcmFtczogUmVxdWVzdExvZ0xpc3RQYXJhbXMsXG4gICk6IFByb21pc2U8UmVxdWVzdExvZ1N1YnNldE1hcHBpbmdbVF0gfCBudWxsPiB7XG4gICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLmZpbmRNYW55KHN1YnNldCwge1xuICAgICAgLi4ubGlzdFBhcmFtcyxcbiAgICAgIG51bTogMSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm93c1swXSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIOuqqeuhnSDtlYTthLDsnZgg64uo7J28IOygleydmC4gZmluZE1hbnkg7JmAIHRvdGFsQ29zdCDqsIAg6rCZ7J2AIOyhsOqxtOydhCDrs7Trj4TroZ0g6rO17Jyg7ZWc64ukIOKAlFxuICAgKiDtmZTrqbTsl5DshJwg7ZWE7YSw66W8IOqxuOuptCDtlokg7IiY7JmAIOu5hOyaqeydtCDtlajqu5gg7KKB7ZiA7KC47JW8IO2VmOuKlOuNsCwg65GQIOy/vOumrOqwgCDqsIHsnpAg7ZWE7YSw66W8XG4gICAqIOq1rO2YhO2VmOuptCDtlZzsqr3sl5Ag7LaV7J2EIOy2lOqwgO2VoCDrlYwg7KGw7Jqp7Z6IIOyWtOq4i+uCnOuLpC5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlMaXN0RmlsdGVycyhcbiAgICBxYjogUmV0dXJuVHlwZTxSZXF1ZXN0TG9nTW9kZWxDbGFzc1tcImdldFN1YnNldFF1ZXJpZXNcIl0+W1wicWJcIl0sXG4gICAgcGFyYW1zOiBSZXF1ZXN0TG9nTGlzdFBhcmFtcyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHBhcmFtcy5pZCkge1xuICAgICAgcWIud2hlcmVJbihcInJlcXVlc3RfbG9ncy5pZFwiLCBhc0FycmF5KHBhcmFtcy5pZCkpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLCBwYXJhbXMudG9rZW5fbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWVfaXNfbnVsbCkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIG51bGwpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLnByb2plY3RfbmFtZV9pc19ub3RfbnVsbCkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIFwiIT1cIiwgbnVsbCk7XG4gICAgfSBlbHNlIGlmIChwYXJhbXMucHJvamVjdF9uYW1lKSB7XG4gICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5wcm9qZWN0X25hbWVcIiwgcGFyYW1zLnByb2plY3RfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5tb2RlbF9uYW1lKSB7XG4gICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5tb2RlbF9uYW1lXCIsIHBhcmFtcy5tb2RlbF9uYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNlYXJjaCAmJiBwYXJhbXMua2V5d29yZCAmJiBwYXJhbXMua2V5d29yZC5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJpZFwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLmlkXCIsIE51bWJlcihwYXJhbXMua2V5d29yZCkpO1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuc2VhcmNoID09PSBcInRva2VuX25hbWVcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy50b2tlbl9uYW1lXCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuc2VhcmNoID09PSBcInVzZXJfcHJvbXB0XCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudXNlcl9wcm9tcHRcIiwgXCJsaWtlXCIsIGAlJHtwYXJhbXMua2V5d29yZH0lYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcImVycm9yLnVua25vd25TZWFyY2hGaWVsZFwiKShwYXJhbXMuc2VhcmNoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0sIHJlc291cmNlTmFtZTogXCJSZXF1ZXN0TG9nc1wiIH0pXG4gIGFzeW5jIGZpbmRNYW55PFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5LCBMUCBleHRlbmRzIFJlcXVlc3RMb2dMaXN0UGFyYW1zPihcbiAgICBzdWJzZXQ6IFQsXG4gICAgcmF3UGFyYW1zPzogTFAsXG4gICk6IFByb21pc2U8TGlzdFJlc3VsdDxMUCwgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmdbVF0+PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgbnVtOiAyNCxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBzZWFyY2g6IFwiaWRcIiBhcyBjb25zdCxcbiAgICAgIG9yZGVyQnk6IFwiaWQtZGVzY1wiIGFzIGNvbnN0LFxuICAgICAgLi4ucmF3UGFyYW1zLFxuICAgIH0gc2F0aXNmaWVzIFJlcXVlc3RMb2dMaXN0UGFyYW1zO1xuXG4gICAgY29uc3QgeyBxYiwgb25TdWJzZXQ6IF8gfSA9IHRoaXMuZ2V0U3Vic2V0UXVlcmllcyhzdWJzZXQpO1xuXG4gICAgdGhpcy5hcHBseUxpc3RGaWx0ZXJzKHFiLCBwYXJhbXMpO1xuXG4gICAgaWYgKHBhcmFtcy5vcmRlckJ5KSBhcHBseU9yZGVyQnkocWIsIHBhcmFtcy5vcmRlckJ5KTtcblxuICAgIGNvbnN0IGVuaGFuY2VycyA9IHRoaXMuY3JlYXRlRW5oYW5jZXJzKHtcbiAgICAgIEE6IChyb3cpID0+IG5vcm1hbGl6ZUxlZ2FjeUFudGhyb3BpY1Jvdyhyb3cpLFxuICAgICAgQzogKHJvdykgPT4gbm9ybWFsaXplTGVnYWN5QW50aHJvcGljUm93KHJvdyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlU3Vic2V0UXVlcnkoe1xuICAgICAgc3Vic2V0LFxuICAgICAgcWIsXG4gICAgICBwYXJhbXMsXG4gICAgICBlbmhhbmNlcnMsXG4gICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgc2F2ZShzcGE6IFJlcXVlc3RMb2dTYXZlUGFyYW1zW10pOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcblxuICAgIC8vIHJlZ2lzdGVyXG4gICAgc3BhLmZvckVhY2goKHNwKSA9PiB7XG4gICAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCBzcCk7XG4gICAgfSk7XG5cbiAgICAvLyB0cmFuc2FjdGlvblxuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dzXCIpO1xuXG4gICAgICByZXR1cm4gaWRzO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOy1nOq3vCDqtazqsITsnZggcHJvdmlkZXIg67OEIOqyveufiSDthrXqs4Qo66qo64uI7YSw66eB7JqpKS4gcHJvdmlkZXIg64qUIHJlcXVlc3RlZF9tb2RlbF9uYW1lIOydmFxuICAgKiBcIm9wZW5haS8uLi5cIiB8IFwiYW50aHJvcGljLy4uLlwiIHByZWZpeCDroZwg7YyQ7KCV7ZWc64ukIOKAlCBzZXJ2aW5nIG1vZGVsX25hbWUg7J2AIHByZWZpeCDqsIBcbiAgICog7JeG6rOgLCBydW5uaW5nIOy0iOq4sOyXlCDslYTsp4Eg67mE7Ja0IOyeiOuLpC4g7KeR6rOE64qUIEpTIOyXkOyEnCDtlZzri6Q6IO2PtOungSDso7zquLDqsIAg64qQ7Iqo7ZWY6rOgXG4gICAqIOq1rOqwhOydtCDsp6fslYQgcm93IOyImOqwgCDsnpHsnLzrqbAsIHByZWZpeCBDQVNFIOyLneydhCDsv7zrpqwg67mM642U7JeQIOuwleyngCDslYrslYTrj4Qg65Cc64ukLlxuICAgKi9cbiAgYXN5bmMgcHJvdmlkZXJTdGF0c1NpbmNlKHNpbmNlOiBEYXRlKTogUHJvbWlzZTxcbiAgICBBcnJheTx7XG4gICAgICBwcm92aWRlcjogc3RyaW5nO1xuICAgICAgcmVxdWVzdHM6IG51bWJlcjtcbiAgICAgIGVycm9yczogbnVtYmVyO1xuICAgICAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgICAgIGNhY2hlUmVhZFRva2VuczogbnVtYmVyO1xuICAgIH0+XG4gID4ge1xuICAgIGNvbnN0IHJkYiA9IHRoaXMuZ2V0UHVyaShcInJcIik7XG4gICAgY29uc3Qgcm93cyA9IChhd2FpdCByZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IFwicmVxdWVzdF9sb2dzLnJlcXVlc3RlZF9tb2RlbF9uYW1lXCIsXG4gICAgICAgIHN0YXR1czogXCJyZXF1ZXN0X2xvZ3Muc3RhdHVzXCIsXG4gICAgICAgIGlucHV0X3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuaW5wdXRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICAgICAgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9ncy5jcmVhdGVkX2F0XCIsIFwiPj1cIiwgc2luY2UpKSBhcyB1bmtub3duIGFzIEFycmF5PHtcbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gICAgfT47XG5cbiAgICBjb25zdCBieVByb3ZpZGVyID0gbmV3IE1hcDxcbiAgICAgIHN0cmluZyxcbiAgICAgIHsgcmVxdWVzdHM6IG51bWJlcjsgZXJyb3JzOiBudW1iZXI7IGlucHV0VG9rZW5zOiBudW1iZXI7IGNhY2hlUmVhZFRva2VuczogbnVtYmVyIH1cbiAgICA+KCk7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgY29uc3QgbW9kZWwgPSByb3cucmVxdWVzdGVkX21vZGVsX25hbWUgPz8gXCJcIjtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gbW9kZWwuc3RhcnRzV2l0aChcIm9wZW5haS9cIilcbiAgICAgICAgPyBcIm9wZW5haVwiXG4gICAgICAgIDogbW9kZWwuc3RhcnRzV2l0aChcImFudGhyb3BpYy9cIilcbiAgICAgICAgICA/IFwiYW50aHJvcGljXCJcbiAgICAgICAgICA6IFwidW5rbm93blwiO1xuICAgICAgY29uc3QgYWdnID0gYnlQcm92aWRlci5nZXQocHJvdmlkZXIpID8/IHtcbiAgICAgICAgcmVxdWVzdHM6IDAsXG4gICAgICAgIGVycm9yczogMCxcbiAgICAgICAgaW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIGNhY2hlUmVhZFRva2VuczogMCxcbiAgICAgIH07XG4gICAgICBhZ2cucmVxdWVzdHMgKz0gMTtcbiAgICAgIGlmIChyb3cuc3RhdHVzID09PSBcImVycm9yXCIpIGFnZy5lcnJvcnMgKz0gMTtcbiAgICAgIGFnZy5pbnB1dFRva2VucyArPSByb3cuaW5wdXRfdG9rZW5zO1xuICAgICAgYWdnLmNhY2hlUmVhZFRva2VucyArPSByb3cuY2FjaGVfcmVhZF90b2tlbnM7XG4gICAgICBieVByb3ZpZGVyLnNldChwcm92aWRlciwgYWdnKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5ieVByb3ZpZGVyLmVudHJpZXMoKV1cbiAgICAgIC5tYXAoKFtwcm92aWRlciwgYWdnXSkgPT4gKHsgcHJvdmlkZXIsIC4uLmFnZyB9KSlcbiAgICAgIC50b1NvcnRlZCgoYSwgYikgPT4gYS5wcm92aWRlci5sb2NhbGVDb21wYXJlKGIucHJvdmlkZXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdHJ1Y3R1cmVkIG91dHB1dCDsmpTssq3snZggSlNPTiBTY2hlbWEg66W8IO2RnOyLnOyaqSDtg4DsnoUg7YWN7Iqk7Yq466GcIOuzgO2ZmO2VnOuLpC5cbiAgICogdHlwZXNjcmlwdCDripQg6rCE6rKw7ZWcIGB0eXBlYCDshKDslrgsIHpvZCDripQg7J6s6rWs7ISx65CcIHpvZCDtkZztmITsi53snbTri6Qg4oCUIOybkOuzuCB6b2RcbiAgICog7IaM7Iqk64qUIHdpcmUg66W8IOqxtOuEiOyYpOupsCDshozsi6TrkJjrr4DroZwgcmVmaW5lL3RyYW5zZm9ybSDrpZjripQg67O17JuQ65CY7KeAIOyViuuKlOuLpC5cbiAgICog7Iqk7YKk66eI6rCAIOyXhuqxsOuCmCDrs4DtmZgg7Iuk7Yyo66m0IG51bGwg4oCUIO2ZlOuptOydgCDtlbTri7kg67iU66GdIO2RnOyLnOulvCDsg53rnrXtlZzri6QuXG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyByZXNwb25zZVR5cGVUcyhpZDogbnVtYmVyKTogUHJvbWlzZTx7XG4gICAgdHlwZXNjcmlwdDogc3RyaW5nIHwgbnVsbDtcbiAgICB6b2Q6IHN0cmluZyB8IG51bGw7XG4gIH0+IHtcbiAgICBjb25zdCByZGIgPSB0aGlzLmdldFB1cmkoXCJyXCIpO1xuICAgIGNvbnN0IHJvd3MgPSAoYXdhaXQgcmRiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdCh7IGpzb25fc2NoZW1hOiBcInJlcXVlc3RfbG9ncy5qc29uX3NjaGVtYVwiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgaWQpKSBhcyB1bmtub3duIGFzIEFycmF5PHsganNvbl9zY2hlbWE6IHN0cmluZyB8IG51bGwgfT47XG4gICAgY29uc3Qgc2NoZW1hID0gcm93c1swXT8uanNvbl9zY2hlbWE7XG4gICAgaWYgKCFzY2hlbWEpIHJldHVybiB7IHR5cGVzY3JpcHQ6IG51bGwsIHpvZDogbnVsbCB9O1xuXG4gICAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZShzY2hlbWEpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHsgdHlwZXNjcmlwdDogbnVsbCwgem9kOiBudWxsIH07XG4gICAgfVxuICAgIGxldCB6b2Q6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICB6b2QgPSBmb3JtYXRab2RDb2RlKFxuICAgICAgICBqc29uU2NoZW1hVG9ab2QocGFyc2VkIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGpzb25TY2hlbWFUb1pvZD5bMF0sIHsgbW9kdWxlOiBcIm5vbmVcIiB9KSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB6b2QgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlc2NyaXB0OiByZW5kZXJQYXJzZWRKc29uU2NoZW1hVHlwZVRleHQocGFyc2VkKSwgem9kIH07XG4gIH1cblxuICAvLyDilIDilIAgVG9vbCBDb250cmFjdCBWaWV3XG5cbiAgLyoqXG4gICAqIOyalOyyreyXkCDsnqXssKnrkJwgdG9vbCDqs4Tslb3snYQgZGV0YWlsIO2ZlOuptOyaqeycvOuhnCDstpXslb3tlZzri6QuIEpTT05CIOuKlCDsnbTrr7ggZGVjb2RlIOuQnFxuICAgKiDrsLDsl7TroZwg7Jik66mwIOusuOyekOyXtOyduCDqsr3smrDrp4wg67Cp7Ja07KCB7Jy866GcIHBhcnNlIO2VnOuLpC4g7KCA7J6l65CcIFFncmlkVG9vbCDqs4Tslb3snYBcbiAgICog7KCE7IiYIOqygOyCrOuhnCDtmZXsnbjrkJDsnLzrr4DroZwg7ZWt66qp67OEIOuztOygleydtOuCmCB1bnJlYWRhYmxlIHNlbnRpbmVsIOydgCDrp4zrk6Tsp4Ag7JWK64qU64ukLlxuICAgKiDri6Trp4wgYFFncmlkVG9vbC5pbnB1dFNjaGVtYWAg64qUIGB6LnVua25vd24oKWAg7J206528IO2CpOqwgCDsl4bqsbDrgpggbnVsbCDsnbgg6rCS64+EXG4gICAqIHdpcmUg6rKA7Kad7J2EIO2GteqzvO2VmOuvgOuhnCDruYgg7Iqk7YKk66eI66GcIOygleq3nO2ZlO2VnOuLpCDigJQgU0RLIOuKlCBge31gIOuhnCDssYTsm4wg67O064K464ukLlxuICAgKi9cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgdG9vbHNWaWV3KGlkOiBudW1iZXIpOiBQcm9taXNlPFRvb2xWaWV3W10+IHtcbiAgICBjb25zdCByb3cgPSAoYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5zZWxlY3QoeyB0b29sczogXCJyZXF1ZXN0X2xvZ3MudG9vbHNcIiB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dzLmlkXCIsIGlkKVxuICAgICAgLmZpcnN0KCkpIGFzIHsgdG9vbHM6IHVua25vd24gfSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0b29scyA9IGRlY29kZVN0b3JlZFRvb2xzKHJvdz8udG9vbHMpO1xuICAgIGlmICghdG9vbHMpIHJldHVybiBbXTtcblxuICAgIHJldHVybiB0b29scy5tYXAoKHRvb2wpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0U2NoZW1hID0gKHRvb2wuaW5wdXRTY2hlbWEgPz8ge30pIGFzIHtcbiAgICAgICAgcHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGlucHV0Wm9kID0gcmVuZGVySnNvblNjaGVtYVpvZFNoYXBlVGV4dChpbnB1dFNjaGVtYSwgVE9PTF9FTlVNX1ZBTFVFX0xJTUlUKTtcbiAgICAgIGNvbnN0IGZ1bGxJbnB1dFpvZCA9IHJlbmRlckpzb25TY2hlbWFab2RTaGFwZVRleHQoaW5wdXRTY2hlbWEpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiB0b29sLm5hbWUsXG4gICAgICAgIC4uLih0b29sLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgPyB7IGRlc2NyaXB0aW9uOiB0b29sLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAgIHBhcmFtZXRlckNvdW50OiBPYmplY3Qua2V5cyhpbnB1dFNjaGVtYS5wcm9wZXJ0aWVzID8/IHt9KS5sZW5ndGgsXG4gICAgICAgIGlucHV0Wm9kLFxuICAgICAgICAuLi4oaW5wdXRab2QgIT09IGZ1bGxJbnB1dFpvZCA/IHsgZnVsbElucHV0Wm9kIH0gOiB7fSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFJ1biBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgYXN5bmMgY3JlYXRlUnVuKHBhcmFtczoge1xuICAgIHVzZXJfcHJvbXB0OiBzdHJpbmc7XG4gICAgc3lzdGVtX3Byb21wdD86IHN0cmluZyB8IG51bGw7XG4gICAgcmVxdWVzdGVkX21vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVmZm9ydD86IHN0cmluZyB8IG51bGw7XG4gICAgcHJvamVjdF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgICB0b29scz86IFRvb2xEZWZpbml0aW9ucztcbiAgICBpc19pbWFnZV9nZW5lcmF0aW9uPzogYm9vbGVhbjtcbiAgICBpc19zdHJ1Y3R1cmVkPzogYm9vbGVhbjtcbiAgICBqc29uX3NjaGVtYT86IHN0cmluZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwge1xuICAgICAgdXNlcl9wcm9tcHQ6IHBhcmFtcy51c2VyX3Byb21wdCxcbiAgICAgIHN5c3RlbV9wcm9tcHQ6IHBhcmFtcy5zeXN0ZW1fcHJvbXB0ID8/IG51bGwsXG4gICAgICAvLyBwcm92aWRlciDsi6Ttlokg7KCE7J2066+A66GcIHNlcnZpbmcgbW9kZWzsnYAg7JWE7KeBIOyVjCDsiJgg7JeG64ukLlxuICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHBhcmFtcy5yZXF1ZXN0ZWRfbW9kZWxfbmFtZSA/PyBudWxsLFxuICAgICAgbW9kZWxfbmFtZTogbnVsbCxcbiAgICAgIGVmZm9ydDogcGFyYW1zLmVmZm9ydCA/PyBudWxsLFxuICAgICAgcHJvamVjdF9uYW1lOiBwYXJhbXMucHJvamVjdF9uYW1lID8/IG51bGwsXG4gICAgICBzdGF0dXM6IFwicnVubmluZ1wiLFxuICAgICAgcmVzcG9uc2U6IFwiXCIsXG4gICAgICBpbnB1dF90b2tlbnM6IDAsXG4gICAgICBvdXRwdXRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IDAsXG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IDAsXG4gICAgICBkdXJhdGlvbl9tczogMCxcbiAgICAgIHRvb2xfY2FsbF9jb3VudDogMCxcbiAgICAgIC8vIOydtOuvuOyngCB0dXJuIOyLneuzhChSMTMpLiBydW4g6rK966GcKHRvb2xzK2ltYWdlIOyhsO2VqSnrj4QgYXV0byDqsr3roZzsmYAg64+Z7J287ZWY6rKMIOuniO2CuS5cbiAgICAgIGlzX2ltYWdlX2dlbmVyYXRpb246IHBhcmFtcy5pc19pbWFnZV9nZW5lcmF0aW9uID8/IGZhbHNlLFxuICAgICAganNvbl9zY2hlbWE6IHBhcmFtcy5qc29uX3NjaGVtYSA/PyBudWxsLFxuICAgICAgaXNfc3RydWN0dXJlZDpcbiAgICAgICAgcGFyYW1zLmlzX3N0cnVjdHVyZWQgPz8gKHBhcmFtcy5qc29uX3NjaGVtYSAhPT0gbnVsbCAmJiBwYXJhbXMuanNvbl9zY2hlbWEgIT09IHVuZGVmaW5lZCksXG4gICAgICAuLi4ocGFyYW1zLmhpc3RvcnkgIT09IHVuZGVmaW5lZCA/IHsgaGlzdG9yeTogcGFyYW1zLmhpc3RvcnkgYXMgeyB0eXBlOiBzdHJpbmcgfVtdIH0gOiB7fSksXG4gICAgICAuLi4ocGFyYW1zLnRvb2xzICE9PSB1bmRlZmluZWQgPyB7IHRvb2xzOiBwYXJhbXMudG9vbHMgfSA6IHt9KSxcbiAgICB9KTtcbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcbiAgICAgIHJldHVybiBpZHNbMF0hO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQ6IG51bWJlciwgc3RlcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ19zdGVwc1wiLCB7IHJlcXVlc3RfbG9nX2lkOiByZXF1ZXN0TG9nSWQsIC4uLnN0ZXAgfSk7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKTtcbiAgICAgIGlmIChzdGVwLnR5cGUgPT09IFwidG9vbF9jYWxsXCIpIHtcbiAgICAgICAgYXdhaXQgdHJ4LmZyb20oXCJyZXF1ZXN0X2xvZ3NcIikud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpLmluY3JlbWVudChcInRvb2xfY2FsbF9jb3VudFwiLCAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpZHNbMF0hO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoUnVuKFxuICAgIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICAgIHBhcmFtczoge1xuICAgICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgICByZXNwb25zZT86IHN0cmluZztcbiAgICAgIHRva2VuX25hbWU/OiBzdHJpbmc7XG4gICAgICBpbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gICAgICBvdXRwdXRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfcmVhZF90b2tlbnM/OiBudW1iZXI7XG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM/OiBudW1iZXI7XG4gICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuICAgICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGR1cmF0aW9uX21zPzogbnVtYmVyO1xuICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgbW9kZWxfbmFtZT86IHN0cmluZyB8IG51bGw7XG4gICAgICBmYWxsYmFja19jb3VudD86IG51bWJlciB8IG51bGw7XG4gICAgICBjb3N0X3VzZD86IG51bWJlciB8IG51bGw7XG4gICAgICBjb3N0X3NvdXJjZT86IHN0cmluZyB8IG51bGw7XG4gICAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgICAgIGVycm9yX21lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB0b29sX2NhbGxfY291bnQ/OiBudW1iZXI7XG4gICAgICBpbWFnZV9jb3N0X3VzZD86IG51bWJlciB8IG51bGw7XG4gICAgICBpbWFnZV9jb3N0X21ldGhvZD86IHN0cmluZyB8IG51bGw7XG4gICAgICByZXNwb25zZV9qc29uX29rPzogYm9vbGVhbiB8IG51bGw7XG4gICAgfSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHBhcmFtcy5zdGF0dXMgPT09IFwic3VjY2VlZGVkXCIgJiYgIXBhcmFtcy50b2tlbl9uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0b2tlbk5hbWUgaXMgcmVxdWlyZWQgZm9yIHN1Y2NlZWRlZCBydW5zXCIpO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBpZDogcmVxdWVzdExvZ0lkLCBzdGF0dXM6IHBhcmFtcy5zdGF0dXMgfTtcbiAgICBjb25zdCBmaWVsZHMgPSBbXG4gICAgICBcInJlc3BvbnNlXCIsXG4gICAgICBcInRva2VuX25hbWVcIixcbiAgICAgIFwiaW5wdXRfdG9rZW5zXCIsXG4gICAgICBcIm91dHB1dF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIixcbiAgICAgIFwiZHVyYXRpb25fbXNcIixcbiAgICAgIFwicmVxdWVzdGVkX21vZGVsX25hbWVcIixcbiAgICAgIFwibW9kZWxfbmFtZVwiLFxuICAgICAgXCJmYWxsYmFja19jb3VudFwiLFxuICAgICAgXCJjb3N0X3VzZFwiLFxuICAgICAgXCJjb3N0X3NvdXJjZVwiLFxuICAgICAgXCJlcnJvcl9tZXNzYWdlXCIsXG4gICAgICBcInRvb2xfY2FsbF9jb3VudFwiLFxuICAgICAgXCJpbWFnZV9jb3N0X3VzZFwiLFxuICAgICAgXCJpbWFnZV9jb3N0X21ldGhvZFwiLFxuICAgICAgXCJyZXNwb25zZV9qc29uX29rXCIsXG4gICAgXSBhcyBjb25zdDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZHMpIHtcbiAgICAgIGlmIChwYXJhbXNba2V5XSAhPT0gdW5kZWZpbmVkKSB1cGRhdGVba2V5XSA9IHBhcmFtc1trZXldO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmhpc3RvcnkgIT09IHVuZGVmaW5lZCkgdXBkYXRlLmhpc3RvcnkgPSBwYXJhbXMuaGlzdG9yeTtcbiAgICB1cGRhdGUudHRmdF9tcyA9IChhd2FpdCB0aGlzLmZpcnN0R2VuZXJhdGVTdGVwVHRmdChyZXF1ZXN0TG9nSWQpKSA/PyAwO1xuXG4gICAgLy8g7ISc67KEIHJ1biDqsr3roZzripQgc3RlcCDsl5DshJwg7ZmV7KCV7ZWcIGV4YWN0IGNvc3Qg66W8IOuEmOq4tOuLpC4g7Jm467aAL2xlZ2FjeSBjYWxsZXIg6rCAIOu5hOyaqeydhFxuICAgIC8vIOyDneuete2VnCDqsr3smrDsl5Drp4wg7KCA7J6l65CcIOuqqOuNuCt1c2FnZSDroZwg6rOE7IKw7ZWc64ukLlxuICAgIGlmIChcbiAgICAgIHBhcmFtcy5jb3N0X3VzZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBwYXJhbXMuaW5wdXRfdG9rZW5zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHBhcmFtcy5vdXRwdXRfdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IHJvdyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgICAgLnNlbGVjdCh7IG1vZGVsX25hbWU6IFwibW9kZWxfbmFtZVwiIH0pXG4gICAgICAgIC53aGVyZShcImlkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgICAgLmZpcnN0KCk7XG4gICAgICBjb25zdCBlZmZlY3RpdmVNb2RlbE5hbWUgPSBwYXJhbXMubW9kZWxfbmFtZSA/PyByb3c/Lm1vZGVsX25hbWU7XG4gICAgICBpZiAoZWZmZWN0aXZlTW9kZWxOYW1lKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gY2Fub25pY2FsTW9kZWxOYW1lKGVmZmVjdGl2ZU1vZGVsTmFtZSk7XG4gICAgICAgIGNvbnN0IHVzYWdlID0gbm9ybWFsaXplZFVzYWdlRm9yQ29zdCh7XG4gICAgICAgICAgdG9rZW5fbmFtZTogcGFyYW1zLnRva2VuX25hbWUsXG4gICAgICAgICAgbW9kZWxfbmFtZTogZWZmZWN0aXZlTW9kZWxOYW1lLFxuICAgICAgICAgIGlucHV0X3Rva2VuczogcGFyYW1zLmlucHV0X3Rva2VucyxcbiAgICAgICAgICBvdXRwdXRfdG9rZW5zOiBwYXJhbXMub3V0cHV0X3Rva2VucyxcbiAgICAgICAgICBjYWNoZV9yZWFkX3Rva2VuczogcGFyYW1zLmNhY2hlX3JlYWRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBwYXJhbXMuY2FjaGVfY3JlYXRpb25fdG9rZW5zID8/IDAsXG4gICAgICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBwYXJhbXMuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zLFxuICAgICAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogcGFyYW1zLmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHVwZGF0ZS5jb3N0X3VzZCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgY2FsY3VsYXRlQ29zdFVzZChtb2RlbCwge1xuICAgICAgICAgICAgaW5wdXRUb2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zLFxuICAgICAgICAgICAgb3V0cHV0VG9rZW5zOiB1c2FnZS5vdXRwdXRUb2tlbnMsXG4gICAgICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogdXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMsXG4gICAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyxcbiAgICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bSxcbiAgICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaCxcbiAgICAgICAgICB9KSAqIDFfMDAwXzAwMCxcbiAgICAgICAgKTtcbiAgICAgICAgdXBkYXRlLmNvc3Rfc291cmNlID0gXCJwcmljaW5nX3RhYmxlXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB1cGRhdGUpO1xuICAgIGF3YWl0IHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaXJzdEdlbmVyYXRlU3RlcFR0ZnQocmVxdWVzdExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcbiAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJyXCIpXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KHsgdHRmdF9tczogXCJ0dGZ0X21zXCIgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJnZW5lcmF0ZVwiKVxuICAgICAgLndoZXJlKFwidHRmdF9tc1wiLCBcIiE9XCIsIG51bGwpXG4gICAgICAub3JkZXJCeShcInN0ZXBfaW5kZXhcIiwgXCJhc2NcIilcbiAgICAgIC5vcmRlckJ5KFwiaWRcIiwgXCJhc2NcIilcbiAgICAgIC5maXJzdCgpO1xuICAgIHJldHVybiByb3c/LnR0ZnRfbXMgPT09IG51bGwgfHwgcm93Py50dGZ0X21zID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHJvdy50dGZ0X21zKTtcbiAgfVxuXG4gIGFzeW5jIGFnZ3JlZ2F0ZVN0ZXBVc2FnZShyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IFByb21pc2U8UmVxdWVzdExvZ1N0ZXBBZ2dyZWdhdGU+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdChTVEVQX0FHR1JFR0FURV9TRUxFQ1QpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIik7XG4gICAgcmV0dXJuIGFnZ3JlZ2F0ZUdlbmVyYXRlU3RlcFJvd3Mocm93cyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHN0YWxlIGNhbmRpZGF0ZXMsIHRoZW4gZXhwaXJlcyBlYWNoIHJ1biBpbiBpdHMgb3duIHNob3J0IHRyYW5zYWN0aW9uLlxuICAgKiBUaGUgY2FuZGlkYXRlIHF1ZXJ5IGlzIG9ubHkgYSBoaW50OyB0aGUgdHJhbnNhY3Rpb25hbCBvcGVyYXRpb24gcmVjaGVja3MgaXRcbiAgICogYWZ0ZXIgYWNxdWlyaW5nIHRoZSBhZHZpc29yeSBsb2NrIHNoYXJlZCB3aXRoIHRvb2wgZm9sbG93LXVwcy5cbiAgICovXG4gIGFzeW5jIGV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW5zKFxuICAgIHRocmVzaG9sZE1zOiBudW1iZXIsXG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcsXG4gICAgbGltaXQ6IG51bWJlciA9IDEwLFxuICApOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3QgdGhyZXNob2xkID0gbmV3IERhdGUoRGF0ZS5ub3coKSAtIHRocmVzaG9sZE1zKTtcbiAgICBjb25zdCBjYW5kaWRhdGVJZHMgPSBhd2FpdCB0aGlzLmZpbmRTdGFsZVRvb2xXYWl0aW5nUnVuQ2FuZGlkYXRlcyh0aHJlc2hvbGQsIGxpbWl0KTtcbiAgICBjb25zdCBleHBpcmVkSWRzOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcmVxdWVzdExvZ0lkIG9mIGNhbmRpZGF0ZUlkcykge1xuICAgICAgaWYgKGF3YWl0IHRoaXMudHJ5RXhwaXJlU3RhbGVUb29sV2FpdGluZ1J1bihyZXF1ZXN0TG9nSWQsIHRocmVzaG9sZCwgZXJyb3JNZXNzYWdlKSkge1xuICAgICAgICBleHBpcmVkSWRzLnB1c2gocmVxdWVzdExvZ0lkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cGlyZWRJZHM7XG4gIH1cblxuICBhc3luYyBmaW5kU3RhbGVUb29sV2FpdGluZ1J1bkNhbmRpZGF0ZXModGhyZXNob2xkOiBEYXRlLCBsaW1pdDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJ3XCIpXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLmpvaW4oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiLCBcInJlcXVlc3RfbG9ncy5pZFwiLCBcInJlcXVlc3RfbG9nX3N0ZXBzLnJlcXVlc3RfbG9nX2lkXCIpXG4gICAgICAuZGlzdGluY3QoXCJyZXF1ZXN0X2xvZ3MuaWRcIilcbiAgICAgIC5zZWxlY3QoeyBpZDogXCJyZXF1ZXN0X2xvZ3MuaWRcIiB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dzLnN0YXR1c1wiLCBcInJ1bm5pbmdcIilcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX3N0ZXBzLnR5cGVcIiwgXCJ0b29sX2NhbGxcIilcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX3N0ZXBzLmNyZWF0ZWRfYXRcIiwgXCI8XCIsIHRocmVzaG9sZClcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX3N0ZXBzLnRvb2xfcmVzdWx0XCIsIG51bGwpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy5lcnJvclwiLCBudWxsKVxuICAgICAgLmxpbWl0KGxpbWl0KTtcbiAgICByZXR1cm4gcm93cy5tYXAoKHsgaWQgfSkgPT4gaWQpO1xuICB9XG5cbiAgQHRyYW5zYWN0aW9uYWwoeyBkYlByZXNldDogXCJ3XCIgfSlcbiAgYXN5bmMgdHJ5RXhwaXJlU3RhbGVUb29sV2FpdGluZ1J1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICB0aHJlc2hvbGQ6IERhdGUsXG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcsXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgY29uc3QgbG9ja1Jlc3VsdCA9IChhd2FpdCB3ZGIua25leC5yYXcoXCJTRUxFQ1QgcGdfdHJ5X2Fkdmlzb3J5X3hhY3RfbG9jayg/LCA/KSBBUyBhY3F1aXJlZFwiLCBbXG4gICAgICBSRVFVRVNUX0xPR19SVU5fTE9DS19DTEFTU19JRCxcbiAgICAgIHJlcXVlc3RMb2dJZCxcbiAgICBdKSkgYXMgeyByb3dzPzogQXJyYXk8eyBhY3F1aXJlZD86IGJvb2xlYW4gfT4gfTtcbiAgICBpZiAobG9ja1Jlc3VsdC5yb3dzPy5bMF0/LmFjcXVpcmVkICE9PSB0cnVlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBUaGUgZm9sbG93LXVwIHBhdGggdXNlcyB0aGUgc2FtZSB3cml0ZXIgdHJhbnNhY3Rpb24gbG9jay4gUmVjaGVjayBhZnRlclxuICAgIC8vIGxvY2tpbmcgc28gYSByZXN1bHQgY29tbWl0dGVkIGR1cmluZyBjYW5kaWRhdGUgZGlzY292ZXJ5IG1ha2VzIHRoaXMgYSBuby1vcC5cbiAgICBjb25zdCB1bnJlc29sdmVkID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KHsgaWQ6IFwiaWRcIiB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcInRvb2xfY2FsbFwiKVxuICAgICAgLndoZXJlKFwiY3JlYXRlZF9hdFwiLCBcIjxcIiwgdGhyZXNob2xkKVxuICAgICAgLndoZXJlKFwidG9vbF9yZXN1bHRcIiwgbnVsbClcbiAgICAgIC53aGVyZShcImVycm9yXCIsIG51bGwpXG4gICAgICAuZmlyc3QoKTtcbiAgICBpZiAoIXVucmVzb2x2ZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHN0ZXBSb3dzID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KFNURVBfQUdHUkVHQVRFX1NFTEVDVClcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJnZW5lcmF0ZVwiKTtcbiAgICBjb25zdCBhZ2dyZWdhdGUgPSBhZ2dyZWdhdGVHZW5lcmF0ZVN0ZXBSb3dzKHN0ZXBSb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik7XG4gICAgY29uc3QgZmlyc3RUdGZ0ID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KHsgdHRmdF9tczogXCJ0dGZ0X21zXCIgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJnZW5lcmF0ZVwiKVxuICAgICAgLndoZXJlKFwidHRmdF9tc1wiLCBcIiE9XCIsIG51bGwpXG4gICAgICAub3JkZXJCeShcInN0ZXBfaW5kZXhcIiwgXCJhc2NcIilcbiAgICAgIC5vcmRlckJ5KFwiaWRcIiwgXCJhc2NcIilcbiAgICAgIC5maXJzdCgpO1xuXG4gICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC53aGVyZShcImlkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInN0YXR1c1wiLCBcInJ1bm5pbmdcIilcbiAgICAgIC51cGRhdGUoe1xuICAgICAgICBzdGF0dXM6IFwiZXJyb3JcIixcbiAgICAgICAgZXJyb3JfbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgICAgICBpbnB1dF90b2tlbnM6IGFnZ3JlZ2F0ZS5pbnB1dF90b2tlbnMsXG4gICAgICAgIG91dHB1dF90b2tlbnM6IGFnZ3JlZ2F0ZS5vdXRwdXRfdG9rZW5zLFxuICAgICAgICBjYWNoZV9yZWFkX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX3JlYWRfdG9rZW5zLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl90b2tlbnMsXG4gICAgICAgIC4uLihhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICBkdXJhdGlvbl9tczogYWdncmVnYXRlLmR1cmF0aW9uX21zLFxuICAgICAgICBmYWxsYmFja19jb3VudDogYWdncmVnYXRlLmZhbGxiYWNrX2NvdW50LFxuICAgICAgICBjb3N0X3VzZDogYWdncmVnYXRlLmNvc3RfdXNkLFxuICAgICAgICAuLi4oYWdncmVnYXRlLmNvc3Rfc291cmNlICE9PSB1bmRlZmluZWQgPyB7IGNvc3Rfc291cmNlOiBhZ2dyZWdhdGUuY29zdF9zb3VyY2UgfSA6IHt9KSxcbiAgICAgICAgdHRmdF9tczpcbiAgICAgICAgICBmaXJzdFR0ZnQ/LnR0ZnRfbXMgPT09IG51bGwgfHwgZmlyc3RUdGZ0Py50dGZ0X21zID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBOdW1iZXIoZmlyc3RUdGZ0LnR0ZnRfbXMpLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHVwZGF0ZWQgPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBuYXRpdmUgcWdyaWQgdG9vbCBmb2xsb3ctdXAgYW5kIGNvbXB1dGVzIGl0cyBuZXh0IHN0ZXAgaW5kZXggd2hpbGVcbiAgICogaG9sZGluZyB0aGUgcGVyLXJ1biBhZHZpc29yeSBsb2NrIHNoYXJlZCB3aXRoIHN0YWxlIGNsZWFudXAuXG4gICAqL1xuICBAdHJhbnNhY3Rpb25hbCh7IGRiUHJlc2V0OiBcIndcIiB9KVxuICBhc3luYyBjb250aW51ZVRvb2xSdW4oXG4gICAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gICAgdG9vbFJlc3VsdHM6IFRvb2xSZXN1bHRDb250aW51YXRpb25bXSxcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIGF3YWl0IHdkYi5rbmV4LnJhdyhcIlNFTEVDVCBwZ19hZHZpc29yeV94YWN0X2xvY2soPywgPylcIiwgW1xuICAgICAgUkVRVUVTVF9MT0dfUlVOX0xPQ0tfQ0xBU1NfSUQsXG4gICAgICByZXF1ZXN0TG9nSWQsXG4gICAgXSk7XG5cbiAgICBjb25zdCBydW4gPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuc2VsZWN0KHsgc3RhdHVzOiBcInN0YXR1c1wiIH0pXG4gICAgICAud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAuZmlyc3QoKTtcbiAgICBpZiAoIXJ1bikgdGhyb3cgbmV3IEVycm9yKGByZXF1ZXN0IGxvZyBydW4gJHtyZXF1ZXN0TG9nSWR9IG5vdCBmb3VuZGApO1xuICAgIGlmIChydW4uc3RhdHVzICE9PSBcInJ1bm5pbmdcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXF1ZXN0IGxvZyBydW4gJHtyZXF1ZXN0TG9nSWR9IGlzIGFscmVhZHkgJHtydW4uc3RhdHVzfWApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHRvb2xSZXN1bHRzKSB7XG4gICAgICBhd2FpdCB3ZGJcbiAgICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAgIC53aGVyZShcInRvb2xfY2FsbF9pZFwiLCByZXN1bHQudG9vbENhbGxJZClcbiAgICAgICAgLndoZXJlKFwidHlwZVwiLCBcInRvb2xfY2FsbFwiKVxuICAgICAgICAudXBkYXRlKHJlc3VsdC5pc0Vycm9yID8geyBlcnJvcjogcmVzdWx0Lm91dHB1dCB9IDogeyB0b29sX3Jlc3VsdDogcmVzdWx0Lm91dHB1dCB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByb3cgPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoeyBtYXhfc3RlcDogUHVyaS5tYXgoXCJzdGVwX2luZGV4XCIpIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAuZmlyc3QoKTtcbiAgICByZXR1cm4gKHJvdz8ubWF4X3N0ZXAgPz8gLTEpICsgMTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtmZTrqbQg7ZGc7Iuc7JqpIOy0nSDruYTsmqkuIOuqqeuhneqzvCDqsJnsnYAg7ZWE7YSw66W8IOyggeyaqe2VnOuLpC5cbiAgICpcbiAgICog7KCE7LK066W8IOyhsOqxtCDsl4bsnbQgU1VNIO2VnCDrkqQsIGBjb3N0X3NvdXJjZWAg6rCAIOyXhuuKlCBsZWdhY3kgcm93IOydmCDssKjslaHrp4wg67O07KCV7ZWc64ukLlxuICAgKiDsobDqsbQg7JeG64qUIFNVTSDsnbTslrTslbwgYChwcm9qZWN0X25hbWUsIGNvc3RfdXNkKWAg7Luk67KE66eBIOyduOuNseyKpOqwgCBJbmRleCBPbmx5IFNjYW4g7J2EXG4gICAqIO2DhOuLpCDigJQgYGNvc3Rfc291cmNlIElTIE5PVCBOVUxMYCDsnYQg6rG466m0IOq3uCDsu6zrn7zsnbQg7J24642x7Iqk7JeQIOyXhuyWtCBoZWFwIOydhCDri6Tsi5wg67SQ7JW8XG4gICAqIO2VmOuvgOuhnCDtlIzrnpjrhIjqsIAg7J24642x7Iqk66W8IOuyhOumrOqzoCBzZXEgc2NhbiDsnLzroZwg64+M7JWE6rCE64ukKOyLpOy4oSAyMzBtcyDihpIgODE0bXMpLlxuICAgKlxuICAgKiBsZWdhY3kg67O07KCV7J2EIOuCqOqyqOuRlCDsnbTsnKA6IOuwse2VhOuhnCDquLDsobQgbGVnYWN5IOuKlCAwIOydtCDrkJjsl4jsp4Drp4wsIOyZuOu2gCDroZzqsbDqsIBcbiAgICogYEFwcGVuZFN0ZXBJbnB1dGAvYEZpbmlzaFJ1bklucHV0YCDsnLzroZwgY29zdFNvdXJjZSDsl4bsnbQg64Sj7Jy866m0IOuLpOyLnCDsg53quLgg7IiYIOyeiOuLpC5cbiAgICog6re465+wIHJvdyDripQg7KCA7J6l6rCSIOuMgOyLoCDtmITsnqwg6rCA6rKp7ZGcIOyerOqzhOyCsOqwkuydtCDrp57snLzrr4DroZwg7LCo7JWh7J2EIOuNlO2VnOuLpC5cbiAgICpcbiAgICog7ZWE7YSwIOyhsOqxtOydhCDsl6zquLDshJwg64uk7IucIOq1rO2YhO2VmOyngCDslYrqs6AgYGFwcGx5TGlzdEZpbHRlcnNgIOulvCDqs7XsnKDtlZjripQg6rKD7J20IO2VteyLrOydtOuLpCDigJRcbiAgICog65GQIOy/vOumrOqwgCDqsIHsnpAg7ZWE7YSw66W8IOqwgOyngOuptCDtmZTrqbTsl5DshJwg7ZWE7YSw66W8IOqxuOyXiOydhCDrlYwg7ZaJIOyImOyZgCDruYTsmqnsnbQg7KGw7Jqp7Z6IIOyWtOq4i+uCnOuLpC5cbiAgICovXG4gIGFzeW5jIHRvdGFsQ29zdChyYXdQYXJhbXM6IFJlcXVlc3RMb2dMaXN0UGFyYW1zID0geyBudW06IDAsIHBhZ2U6IDEgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgbnVtOiAwLFxuICAgICAgcGFnZTogMSxcbiAgICAgIHNlYXJjaDogXCJpZFwiIGFzIGNvbnN0LFxuICAgICAgLi4ucmF3UGFyYW1zLFxuICAgIH0gc2F0aXNmaWVzIFJlcXVlc3RMb2dMaXN0UGFyYW1zO1xuXG4gICAgY29uc3QgeyBxYjogdG90YWxRYiB9ID0gdGhpcy5nZXRTdWJzZXRRdWVyaWVzKFwiQ1wiKTtcbiAgICB0aGlzLmFwcGx5TGlzdEZpbHRlcnModG90YWxRYiwgcGFyYW1zKTtcbiAgICAvLyBzdWJzZXQgcWIg64qUIOy7rOufvCDrqqnroZ3snbQg7J2066+4IFNFTEVDVCDsl5Ag67CV7ZiAIOyeiOyWtCDsp5Hqs4Trpbwg7Ja57Jy866m0IEdST1VQIEJZIOyXkOufrOqwgCDrgpzri6QuXG4gICAgLy8gZXhlY3V0ZUNvdW50UXVlcnkg7JmAIOqwmeydgCDrsKnsi53snLzroZwgc2VsZWN0IOulvCDruYTsmrDqs6Ag7KeR6rOE66eMIOuCqOq4tOuLpC5cbiAgICBjb25zdCBzdG9yZWQgPSBhd2FpdCB0b3RhbFFiXG4gICAgICAuY2xlYXIoXCJzZWxlY3RcIilcbiAgICAgIC8vIOydjOyImCDsoIDsnqXqsJIo6rO86rGwIOuyhOq3uCnsnYAgMCDsnLzroZwg64iM65+s7IScIOuNlO2VnOuLpCDigJQgSlMg7Kq9IE1hdGgubWF4IOyZgCDqsJnsnYAg6rec7LmZLlxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIHRvdGFsOiBQdXJpLnJhd051bWJlcihcIkNPQUxFU0NFKFNVTShHUkVBVEVTVChyZXF1ZXN0X2xvZ3MuY29zdF91c2QsIDApKSwgMClcIiksXG4gICAgICB9KVxuICAgICAgLmZpcnN0KCk7XG5cbiAgICBjb25zdCB7IHFiOiBsZWdhY3lRYiB9ID0gdGhpcy5nZXRTdWJzZXRRdWVyaWVzKFwiQ1wiKTtcbiAgICB0aGlzLmFwcGx5TGlzdEZpbHRlcnMobGVnYWN5UWIsIHBhcmFtcyk7XG4gICAgY29uc3QgbGVnYWN5Um93cyA9IGF3YWl0IGxlZ2FjeVFiXG4gICAgICAud2hlcmVSYXcoXCJyZXF1ZXN0X2xvZ3MuY29zdF9zb3VyY2UgSVMgTlVMTCBPUiByZXF1ZXN0X2xvZ3MuY29zdF91c2QgSVMgTlVMTFwiKVxuICAgICAgLmNsZWFyKFwic2VsZWN0XCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgdG9rZW5fbmFtZTogXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLFxuICAgICAgICBtb2RlbF9uYW1lOiBcInJlcXVlc3RfbG9ncy5tb2RlbF9uYW1lXCIsXG4gICAgICAgIGlucHV0X3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuaW5wdXRfdG9rZW5zXCIsXG4gICAgICAgIG91dHB1dF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLm91dHB1dF90b2tlbnNcIixcbiAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfY3JlYXRpb25fdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgICAgIGNvc3RfdXNkOiBcInJlcXVlc3RfbG9ncy5jb3N0X3VzZFwiLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCBzdG9yZWRUb3RhbCA9IE51bWJlcihzdG9yZWQ/LnRvdGFsID8/IDApIC8gTUlDUk9fVVNEO1xuXG4gICAgLy8gbGVnYWN5IHJvdyDripQg7JyEIFNVTSDsl5Ag7KCA7J6l6rCS7Jy866GcIOydtOuvuCDtj6ztlajrkJjslrQg7J6I64ukLiDsnqzqs4TsgrDqsJLqs7zsnZgg7LCo7JWh66eMIOuNlO2VnOuLpC5cbiAgICByZXR1cm4gbGVnYWN5Um93cy5yZWR1Y2UoKHN1bSwgcm93KSA9PiB7XG4gICAgICBjb25zdCBhbHJlYWR5U3VtbWVkID0gTWF0aC5tYXgocm93LmNvc3RfdXNkID8/IDAsIDApIC8gTUlDUk9fVVNEO1xuICAgICAgY29uc3QgdXNhZ2UgPSBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdyk7XG4gICAgICBpZiAoIXVzYWdlLm1vZGVsKSByZXR1cm4gc3VtO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc3VtICtcbiAgICAgICAgY2FsY3VsYXRlQ29zdFVzZCh1c2FnZS5tb2RlbCwge1xuICAgICAgICAgIGlucHV0VG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyxcbiAgICAgICAgICBvdXRwdXRUb2tlbnM6IHVzYWdlLm91dHB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogdXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMsXG4gICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMsXG4gICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW06IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtLFxuICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaCxcbiAgICAgICAgfSkgLVxuICAgICAgICBhbHJlYWR5U3VtbWVkXG4gICAgICApO1xuICAgIH0sIHN0b3JlZFRvdGFsKTtcbiAgfVxuXG4gIGFzeW5jIGRpc3RpbmN0UHJvamVjdE5hbWVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5kaXN0aW5jdChcInByb2plY3RfbmFtZVwiKVxuICAgICAgLndoZXJlKFwicHJvamVjdF9uYW1lXCIsIFwiIT1cIiwgbnVsbClcbiAgICAgIC5vcmRlckJ5KFwicHJvamVjdF9uYW1lXCIsIFwiYXNjXCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgcHJvamVjdF9uYW1lOiBcInByb2plY3RfbmFtZVwiLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHJvd3MubWFwKChyKSA9PiByLnByb2plY3RfbmFtZSEpO1xuICB9XG5cbiAgYXN5bmMgZGlzdGluY3RNb2RlbE5hbWVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5kaXN0aW5jdChcIm1vZGVsX25hbWVcIilcbiAgICAgIC53aGVyZShcIm1vZGVsX25hbWVcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJtb2RlbF9uYW1lXCIsIFwiYXNjXCIpXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgbW9kZWxfbmFtZTogXCJtb2RlbF9uYW1lXCIsXG4gICAgICB9KTtcbiAgICByZXR1cm4gcm93cy5tYXAoKHIpID0+IHIubW9kZWxfbmFtZSEpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGRlbChpZHM6IG51bWJlcltdKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICBhd2FpdCB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgYXdhaXQgdHJ4XG4gICAgICAgIC50YWJsZShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAgIC53aGVyZUluKFwicmVxdWVzdF9sb2dfc3RlcHMucmVxdWVzdF9sb2dfaWRcIiwgaWRzKVxuICAgICAgICAuZGVsZXRlKCk7XG4gICAgICByZXR1cm4gdHJ4LnRhYmxlKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgaWRzKS5kZWxldGUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpZHMubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nTW9kZWwgPSBuZXcgUmVxdWVzdExvZ01vZGVsQ2xhc3MoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQTZCQSxNQUFhLFlBQVk7QUFDekIsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSx3QkFBd0I7QUFFOUIsU0FBUyxrQkFBa0IsT0FBd0M7Q0FDakUsSUFBSSxDQUFDLE9BQU8sT0FBTztDQUNuQixJQUFJLE9BQU8sVUFBVSxVQUFVLE9BQU87Q0FDdEMsSUFBSTtFQUNGLE9BQU8sS0FB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
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
//#region src/application/setting/setting.constant.ts
|
|
2
|
+
/**
|
|
3
|
+
* keepalive 스케줄러를 실제로 소유할 인스턴스만 켠다. Settings DB 값과 일부러 분리한다 —
|
|
4
|
+
* 같은 DB를 보는 개발자 로컬 인스턴스가 전역 설정을 읽고 함께 발사하면 중복 요청이 된다.
|
|
5
|
+
*/
|
|
6
|
+
const TOKEN_WINDOW_KEEPALIVE_RUNNER_ENV_KEY = "QGRID_TOKEN_WINDOW_KEEPALIVE_ENABLED";
|
|
2
7
|
const SETTING_DEFS = [
|
|
3
8
|
{
|
|
4
9
|
key: "qgrid.tokenWindowKeepaliveEnabled",
|
|
5
10
|
fallback: "true",
|
|
6
11
|
group: "qgrid",
|
|
7
|
-
envKey: "QGRID_TOKEN_WINDOW_KEEPALIVE_ENABLED",
|
|
8
12
|
label: "토큰 윈도우 keepalive",
|
|
9
13
|
kind: "boolean",
|
|
10
14
|
applies: "immediate",
|
|
11
|
-
help: "끄면
|
|
15
|
+
help: "끄면 이 서버에서 선택한 Anthropic 토큰의 5시간 윈도우 자동 유지 요청을 중단합니다"
|
|
12
16
|
},
|
|
13
17
|
{
|
|
14
18
|
key: "slack.enabled",
|
|
@@ -171,6 +175,6 @@ function maskSecret(value) {
|
|
|
171
175
|
return `${value.slice(0, 8)}...${value.slice(-4)}`;
|
|
172
176
|
}
|
|
173
177
|
//#endregion
|
|
174
|
-
export { SETTING_DEFS, findSettingDef, maskSecret, validateSettingValue };
|
|
178
|
+
export { SETTING_DEFS, TOKEN_WINDOW_KEEPALIVE_RUNNER_ENV_KEY, findSettingDef, maskSecret, validateSettingValue };
|
|
175
179
|
|
|
176
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5jb25zdGFudC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vc2V0dGluZy9zZXR0aW5nLmNvbnN0YW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog6rSA66asIOqwgOuKpe2VnCDrn7Dtg4DsnoQg7ISk7KCVIOuqqeuhnS5cbiAqXG4gKiDtgqTCt2VudiDsnbTrpoTCt+2DgOyehcK36rKA7Kad7J2EIO2VnCDqs7Psl5Ag66qo7JWEIEFQSSDsmYAgVUkg6rCAIOqwmeydgCDsoJXsnZjrpbwg67O464ukLiDsl6zquLAg7JeG64qUIGVudiDripRcbiAqIO2ZlOuptOyXkOyEnCDrsJTqv4Ag7IiYIOyXhuuLpCDigJQgREIg7KCR7IaNIOygleuztOuCmCDtj6ztirjsspjrn7wg7ISc67KE6rCAIOucqOq4sCDsoITsl5Ag7ZWE7JqU7ZWcIOqwkuuTpOydtOuLpC5cbiAqXG4gKiBgc2V0dGluZ3NgIO2FjOydtOu4lOydgCBgKGtleSwgdmFsdWUpYCDrrLjsnpDsl7Qg7IyN66eMIOuLtOuKlCDqt7jrpofsnbTrnbwoYHNldHRpbmcuZW50aXR5Lmpzb25gKSxcbiAqIFwi7J20IO2CpOqwgCDsoJXsiJjsnbjsp4DCt+uylOychOqwgCDslrzrp4jsnbjsp4DCt+2ZlOuptOyXkCDrrZDrnbzqs6Ag7JO47KeAXCLrpbwg64u07J2EIOqzs+ydtCDrlLDroZwg7ZWE7JqU7ZWY64ukLlxuICog6re4IOuplO2DgOuNsOydtO2EsOqwgCDsl6zquLAg7J6I64ukIOKAlCBEQiDsiqTtgqTrp4jqsIAg7JWE64uI6528IOyVseydtCDslYTripQg7IOB7IiYIOuqqeuhneydtOuLpC5cbiAqL1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nS2luZCA9IFwiYm9vbGVhblwiIHwgXCJpbnRlZ2VyXCIgfCBcIm51bWJlclwiIHwgXCJzdHJpbmdcIiB8IFwic2VjcmV0XCIgfCBcInByZXNldFwiO1xuXG4vKipcbiAqIO2ZlOuptOyXkOyEnCDrrLbslrQg67O07Jes7KSEIOuLqOychC4g7Y+J7Y+J7ZWY6rKMIOuCmOyXtO2VmOuptCDslrTrlJTrpbwg67SQ7JW8IO2VoOyngCDslYwg7IiYIOyXhuuLpC5cbiAqXG4gKiBTbGFjayDsnYAgXCLslrjsoJwg67O064K86rmMXCIoc2xhY2sp7JmAIFwi7Ja065SU66GcIOuztOuCvOq5jFwiKHNsYWNrQ29ubmVjdGlvbinrpbwg64KY64iI64ukIOKAlCDslZ7snYAg7Jq07JiBXG4gKiDspJEg7J6Q7KO8IOunjOyngOqzoCDrkqTripQg7ZWcIOuyiCDrp57stpTrqbQg64Gd7J206528IOyImOuqheydtCDri6TrpbTri6QuXG4gKi9cbmV4cG9ydCB0eXBlIFNldHRpbmdHcm91cCA9IFwicWdyaWRcIiB8IFwic2xhY2tcIiB8IFwic2xhY2tDb25uZWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIFNldHRpbmdEZWYgPSB7XG4gIGtleTogc3RyaW5nO1xuICBncm91cDogU2V0dGluZ0dyb3VwO1xuICBlbnZLZXk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAga2luZDogU2V0dGluZ0tpbmQ7XG4gIC8qKiDsoIHsmqkg7Iuc7KCQLiDrtoDtjIUg7IucIO2VnCDrsojrp4wg7J297Z6I64qUIOqwkuydgCDsnqzsi5zsnpHsnbQg7ZWE7JqU7ZWY64ukLiAqL1xuICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiIHwgXCJyZXN0YXJ0XCI7XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xuICAvKiogYHByZXNldGAg7KKF66WY7JeQ7IScIOqzoOulvCDsiJgg7J6I64qUIOqwki4g7J20IOuqqeuhnSDrsJbsnZgg6rCS7J2AIOyggOyepeuQmOyngCDslYrripTri6QuICovXG4gIHByZXNldHM/OiBudW1iZXJbXTtcbiAgLyoqXG4gICAqIOyggOyepeqwkuuPhCBlbnYg64+EIOyXhuydhCDrlYwg7Iuk7KCc66GcIOyggeyaqeuQmOuKlCDqsJIuIO2ZlOuptOydhCDruYTsm4zrkZDrqbQgXCLshKTsoJUg7JWIIOuQqFwi7Jy866GcIOydve2eiOyngOunjFxuICAgKiDsi6TsoJzroZzripQg7J20IOqwkuydtCDrj4zqs6Ag7J6I64ukIOKAlCDshozruYTsspjsnZgg6riw67O46rCS6rO8IOuwmOuTnOyLnCDqsJnslYTslbwg7ZWc64ukLlxuICAgKi9cbiAgZmFsbGJhY2s6IHN0cmluZztcbiAgaGVscD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBTRVRUSU5HX0RFRlM6IFNldHRpbmdEZWZbXSA9IFtcbiAge1xuICAgIGtleTogXCJxZ3JpZC50b2tlbldpbmRvd0tlZXBhbGl2ZUVuYWJsZWRcIixcbiAgICBmYWxsYmFjazogXCJ0cnVlXCIsXG4gICAgZ3JvdXA6IFwicWdyaWRcIixcbiAgICBlbnZLZXk6IFwiUUdSSURfVE9LRU5fV0lORE9XX0tFRVBBTElWRV9FTkFCTEVEXCIsXG4gICAgbGFiZWw6IFwi7Yag7YGwIOyciOuPhOyasCBrZWVwYWxpdmVcIixcbiAgICBraW5kOiBcImJvb2xlYW5cIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICAgIGhlbHA6IFwi64GE66m0IO2ZnOyEsSBBbnRocm9waWMg7Yag7YGw7J2YIDXsi5zqsIQg7JyI64+E7JqwIOyekOuPmSDsnKDsp4Ag7JqU7LKt7J2EIOykkeuLqO2VqeuLiOuLpFwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcInNsYWNrLmVuYWJsZWRcIixcbiAgICBmYWxsYmFjazogXCJ0cnVlXCIsXG4gICAgZ3JvdXA6IFwic2xhY2tcIixcbiAgICBlbnZLZXk6IFwiU0xBQ0tfRU5BQkxFRFwiLFxuICAgIGxhYmVsOiBcIlNsYWNrIOyVjOumvFwiLFxuICAgIGtpbmQ6IFwiYm9vbGVhblwiLFxuICAgIGFwcGxpZXM6IFwiaW1tZWRpYXRlXCIsXG4gICAgaGVscDogXCLsl7DtnLTsspjrn7wg6rec7LmZ7Jy866GcIOyeoeydhCDsiJgg7JeG64qUIOq4sOqwhOyXkCDrgZXri4jri6QuIOyEnOu5hOyKpCDsoJXsp4DquIkg7J6l7JWgIOyVjOumvOydgCDqurzrj4Qg7KCE64us65Cp64uI64ukXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwic2xhY2sucmVtaW5kZXJzRW5hYmxlZFwiLFxuICAgIGZhbGxiYWNrOiBcInRydWVcIixcbiAgICBncm91cDogXCJzbGFja1wiLFxuICAgIGVudktleTogXCJTTEFDS19SRU1JTkRFUlNfRU5BQkxFRFwiLFxuICAgIGxhYmVsOiBcIuunjOujjCDslYzrprwg67CY67O1XCIsXG4gICAga2luZDogXCJib29sZWFuXCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgICBoZWxwOiBcIuuBhOuptCDrsJjrs7Xrp4wg66mI7LaU6rOgIOunjOujjCDsiJzqsITsnZgg7JWM66a87J2AIOq3uOuMgOuhnCDqsJHri4jri6RcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay5leHBpcnlSZW1pbmRlck1pbnV0ZXNcIixcbiAgICBmYWxsYmFjazogXCI2MFwiLFxuICAgIGdyb3VwOiBcInNsYWNrXCIsXG4gICAgZW52S2V5OiBcIlNMQUNLX0VYUElSWV9SRU1JTkRFUl9JTlRFUlZBTF9NSU5VVEVTXCIsXG4gICAgbGFiZWw6IFwi67CY67O1IOyjvOq4sFwiLFxuICAgIGtpbmQ6IFwicHJlc2V0XCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgICAvLyDsnpDsnKAg7J6F66ClIOuMgOyLoCDqs6DsoJUg7ISg7YOd7KeA66W8IOyTtOuLpCDigJQgXCLslrzrp4jrgpgg7J6Q7KO8IOyerOy0ie2VoOq5jFwi65287IScIDHrtoQg64uo7JyEIOygleuwgOuPhOqwgFxuICAgIC8vIOydmOuvuCDsl4bqs6AsIOyemOuquyDrhKPsnLzrqbQg7LGE64SQ7J20IOyLnOuBhOufrOybjOynhOuLpC4g64GE64qUIOqyg+ydgCByZW1pbmRlcnNFbmFibGVkIOqwgCDrp6HripTri6QuXG4gICAgcHJlc2V0czogWzEwLCAzMCwgNjAsIDE4MF0sXG4gICAgaGVscDogXCLsnqzroZzqt7jsnbjsnbQg7ZWE7JqU7ZWcIO2GoO2BsOydtCDrgqjslYQg7J6I64qUIOuPmeyViCDsnbQg7KO86riw66GcIOuLpOyLnCDslYzrpr3ri4jri6RcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay5xdWlldEZyb21Ib3VyXCIsXG4gICAgZmFsbGJhY2s6IFwiMjBcIixcbiAgICBncm91cDogXCJzbGFja1wiLFxuICAgIGVudktleTogXCJTTEFDS19RVUlFVF9GUk9NX0hPVVJcIixcbiAgICBsYWJlbDogXCLsobDsmqkg7Iuc6rCEIOyLnOyekVwiLFxuICAgIGtpbmQ6IFwiaW50ZWdlclwiLFxuICAgIGFwcGxpZXM6IFwiaW1tZWRpYXRlXCIsXG4gICAgbWluOiAwLFxuICAgIG1heDogMjMsXG4gICAgaGVscDogXCLsnbQg7Iuc6rCB67aA7YSwIOyVjOumrOyngCDslYrsirXri4jri6QgKO2VnOq1rSDsi5zqsIQpXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwic2xhY2sucXVpZXRVbnRpbEhvdXJcIixcbiAgICBmYWxsYmFjazogXCI4XCIsXG4gICAgZ3JvdXA6IFwic2xhY2tcIixcbiAgICBlbnZLZXk6IFwiU0xBQ0tfUVVJRVRfVU5USUxfSE9VUlwiLFxuICAgIGxhYmVsOiBcIuyhsOyaqSDsi5zqsIQg7KKF66OMXCIsXG4gICAga2luZDogXCJpbnRlZ2VyXCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgICBtaW46IDAsXG4gICAgbWF4OiAyMyxcbiAgICBoZWxwOiBcIuydtCDsi5zqsIHrtoDthLAg64uk7IucIOyVjOumveuLiOuLpC4g7Iuc7J6R67O064ukIOu5oOultOuptCDsnpDsoJXsnYQg64SY64qUIOq1rOqwhOydtCDrkKnri4jri6RcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay5ub3RpZnlPbldlZWtlbmRzXCIsXG4gICAgZmFsbGJhY2s6IFwiZmFsc2VcIixcbiAgICBncm91cDogXCJzbGFja1wiLFxuICAgIGVudktleTogXCJTTEFDS19OT1RJRllfT05fV0VFS0VORFNcIixcbiAgICBsYWJlbDogXCLso7zrp5Dsl5Drj4Qg7JWM66a8XCIsXG4gICAga2luZDogXCJib29sZWFuXCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgICBoZWxwOiBcIuy8nOuptCDso7zrp5Dsl5Drj4Qg7JyE7J2YIOyhsOyaqSDsi5zqsIQg6rec7LmZ66eMIOyggeyaqeuQqeuLiOuLpFwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcInNsYWNrLmNoYW5uZWxJZFwiLFxuICAgIGZhbGxiYWNrOiBcIlwiLFxuICAgIGdyb3VwOiBcInNsYWNrQ29ubmVjdGlvblwiLFxuICAgIGVudktleTogXCJTTEFDS19DSEFOTkVMX0lEXCIsXG4gICAgbGFiZWw6IFwiU2xhY2sg7LGE64SQIElEXCIsXG4gICAga2luZDogXCJzdHJpbmdcIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICAgIGhlbHA6IFwi7IKs7Jqp7J6QIElEKFUuLi4p66W8IOuEo+ycvOuptCDqt7gg7IKs656MIERNIOycvOuhnCDqsJHri4jri6RcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay51c2VyTWFwXCIsXG4gICAgZmFsbGJhY2s6IFwiXCIsXG4gICAgZ3JvdXA6IFwic2xhY2tDb25uZWN0aW9uXCIsXG4gICAgZW52S2V5OiBcIlNMQUNLX1VTRVJfTUFQXCIsXG4gICAgbGFiZWw6IFwiU2xhY2sg7IKs7Jqp7J6QIOunpO2VkVwiLFxuICAgIGtpbmQ6IFwic3RyaW5nXCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgICBoZWxwOiBcIu2GoO2BsOuqhTpTbGFja1VzZXJJZCDrpbwg7Im87ZGc66GcLiDqs7Xsmqkg6rOE7KCV7J2AIOuEo+yngCDslYrsirXri4jri6RcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay5ib3RUb2tlblwiLFxuICAgIGZhbGxiYWNrOiBcIlwiLFxuICAgIGdyb3VwOiBcInNsYWNrQ29ubmVjdGlvblwiLFxuICAgIGVudktleTogXCJTTEFDS19CT1RfVE9LRU5cIixcbiAgICBsYWJlbDogXCJTbGFjayDrtIcg7Yag7YGwXCIsXG4gICAga2luZDogXCJzZWNyZXRcIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICB9LFxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTZXR0aW5nRGVmKGtleTogc3RyaW5nKTogU2V0dGluZ0RlZiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBTRVRUSU5HX0RFRlMuZmluZCgoZCkgPT4gZC5rZXkgPT09IGtleSk7XG59XG5cbi8qKiDsoIDsnqUg7KCEIOqygOymnS4g7J6Y66q765CcIOqwkuydtCDrk6TslrTqsIDrqbQg65+w7YOA7J6E7JeQ7IScIOyhsOyaqe2eiCDquLDrs7jqsJLsnLzroZwg65ao7Ja07KC4IOybkOyduOydhCDssL7quLAg7Ja066C164ukLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2V0dGluZ1ZhbHVlKFxuICBkZWY6IFNldHRpbmdEZWYsXG4gIHJhdzogc3RyaW5nLFxuKTogeyBvazogdHJ1ZTsgdmFsdWU6IHN0cmluZyB9IHwgeyBvazogZmFsc2U7IGVycm9yOiBzdHJpbmcgfSB7XG4gIGNvbnN0IHRyaW1tZWQgPSByYXcudHJpbSgpO1xuXG4gIGlmIChkZWYua2luZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICBpZiAoIVtcInRydWVcIiwgXCJmYWxzZVwiXS5pbmNsdWRlcyh0cmltbWVkKSkgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogXCJ0cnVlIOuYkOuKlCBmYWxzZVwiIH07XG4gICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiB0cmltbWVkIH07XG4gIH1cblxuICBpZiAoZGVmLmtpbmQgPT09IFwicHJlc2V0XCIpIHtcbiAgICAvLyDtmZTrqbTsnYAg67KE7Yq866eMIOyjvOyngOunjCBBUEkg64qUIOyVhOustCDqsJLsnbTrgpgg67Cb7J2EIOyImCDsnojri6QuIOuqqeuhnSDrsJbsnZgg6rCS7J20IOuTpOyWtOyYpOuptFxuICAgIC8vIO2ZlOuptOyXkOyEnCDslYTrrLQg67KE7Yq864+EIOyEoO2DneuPvCDrs7TsnbTsp4Ag7JWK7JWEIFwi7JmcIOyViCDrsJTrgIzsp4BcIuqwgCDrkJzri6QuXG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHRyaW1tZWQpO1xuICAgIGlmICghZGVmLnByZXNldHM/LmluY2x1ZGVzKHBhcnNlZCkpIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGAke2RlZi5wcmVzZXRzPy5qb2luKFwiLCBcIikgPz8gXCJcIn0g7KSRIO2VmOuCmOyXrOyVvCDtlanri4jri6RgIH07XG4gICAgfVxuICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogU3RyaW5nKHBhcnNlZCkgfTtcbiAgfVxuXG4gIGlmIChkZWYua2luZCA9PT0gXCJpbnRlZ2VyXCIgfHwgZGVmLmtpbmQgPT09IFwibnVtYmVyXCIpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodHJpbW1lZCk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSkgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogXCLsiKvsnpDrpbwg7J6F66Cl7ZWY7IS47JqUXCIgfTtcbiAgICBpZiAoZGVmLmtpbmQgPT09IFwiaW50ZWdlclwiICYmICFOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlZCkpIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IFwi7KCV7IiY66W8IOyeheugpe2VmOyEuOyalFwiIH07XG4gICAgfVxuICAgIGlmIChkZWYubWluICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkIDwgZGVmLm1pbikge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogYCR7ZGVmLm1pbn0g7J207IOB7J207Ja07JW8IO2VqeuLiOuLpGAgfTtcbiAgICB9XG4gICAgaWYgKGRlZi5tYXggIT09IHVuZGVmaW5lZCAmJiBwYXJzZWQgPiBkZWYubWF4KSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBgJHtkZWYubWF4fSDsnbTtlZjsl6zslbwg7ZWp64uI64ukYCB9O1xuICAgIH1cbiAgICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IFN0cmluZyhwYXJzZWQpIH07XG4gIH1cblxuICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IHRyaW1tZWQgfTtcbn1cblxuLyoqIO2ZlOuptOyXkCDqt7jrjIDroZwg64K066Ck67O064K066m0IOyViCDrkJjripQg6rCSLiDslZ7rkqTrp4wg64Ko6ri064ukLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hc2tTZWNyZXQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPD0gMTIpIHJldHVybiBcIioqKlwiO1xuICByZXR1cm4gYCR7dmFsdWUuc2xpY2UoMCwgOCl9Li4uJHt2YWx1ZS5zbGljZSgtNCl9YDtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQXlDQSxNQUFhLGVBQTZCO0NBQ3hDO0VBQ0UsS0FBSztFQUNMLFVBQVU7RUFDVixPQUFPO0VBQ1AsUUFBUTtFQUNSLE9BQU87RUFDUCxNQUFNO0VBQ04sU0FBUztFQUNULE1BQU07Q0FDUjtDQUNBO0VBQ0UsS0FBSztFQUNMLFVBQVU7RUFDVixPQUFPO0VBQ1AsUUFBUTtFQUNSLE9BQU87RUFDUCxNQUFNO0VBQ04sU0FBUztFQUNULE1BQU07Q0FDUjtDQUNBO0VBQ0UsS0FBSztFQUNMLFVBQVU7RUFDVixPQUFPO0VBQ1AsUUFBUTtFQUNSLE9BQU87RUFDUCxNQUFNO0VBQ04sU0FBUztFQUNULE1BQU07Q0FDUjtDQUNBO0VBQ0UsS0FBSztFQUNMLFVBQVU7RUFDVixPQUFPO0VBQ1AsUUFBUTtFQUNSLE9BQU87RUFDUCxNQUFNO0VBQ04sU0FBUztFQUdULFNBQVM7R0FBQztHQUFJO0dBQUk7R0FBSTtFQUFHO0VBQ3pCLE1BQU07Q0FDUjtDQUNBO0VBQ0UsS0FBSztFQUNMLFVBQVU7RUFDVixPQUFPO0VBQ1AsUUFBUTtFQUNSLE9BQU87RUFDUCxNQUFNO0VBQ04sU0FBUztFQUNULEtBQUs7RUFDTCxLQUFLO0VBQ0ws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
|
|
180
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5jb25zdGFudC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vc2V0dGluZy9zZXR0aW5nLmNvbnN0YW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog6rSA66asIOqwgOuKpe2VnCDrn7Dtg4DsnoQg7ISk7KCVIOuqqeuhnS5cbiAqXG4gKiDtgqTCt2VudiDsnbTrpoTCt+2DgOyehcK36rKA7Kad7J2EIO2VnCDqs7Psl5Ag66qo7JWEIEFQSSDsmYAgVUkg6rCAIOqwmeydgCDsoJXsnZjrpbwg67O464ukLiDsl6zquLAg7JeG64qUIGVudiDripRcbiAqIO2ZlOuptOyXkOyEnCDrsJTqv4Ag7IiYIOyXhuuLpCDigJQgREIg7KCR7IaNIOygleuztOuCmCDtj6ztirjsspjrn7wg7ISc67KE6rCAIOucqOq4sCDsoITsl5Ag7ZWE7JqU7ZWcIOqwkuuTpOydtOuLpC5cbiAqXG4gKiBgc2V0dGluZ3NgIO2FjOydtOu4lOydgCBgKGtleSwgdmFsdWUpYCDrrLjsnpDsl7Qg7IyN66eMIOuLtOuKlCDqt7jrpofsnbTrnbwoYHNldHRpbmcuZW50aXR5Lmpzb25gKSxcbiAqIFwi7J20IO2CpOqwgCDsoJXsiJjsnbjsp4DCt+uylOychOqwgCDslrzrp4jsnbjsp4DCt+2ZlOuptOyXkCDrrZDrnbzqs6Ag7JO47KeAXCLrpbwg64u07J2EIOqzs+ydtCDrlLDroZwg7ZWE7JqU7ZWY64ukLlxuICog6re4IOuplO2DgOuNsOydtO2EsOqwgCDsl6zquLAg7J6I64ukIOKAlCBEQiDsiqTtgqTrp4jqsIAg7JWE64uI6528IOyVseydtCDslYTripQg7IOB7IiYIOuqqeuhneydtOuLpC5cbiAqL1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nS2luZCA9IFwiYm9vbGVhblwiIHwgXCJpbnRlZ2VyXCIgfCBcIm51bWJlclwiIHwgXCJzdHJpbmdcIiB8IFwic2VjcmV0XCIgfCBcInByZXNldFwiO1xuXG4vKipcbiAqIO2ZlOuptOyXkOyEnCDrrLbslrQg67O07Jes7KSEIOuLqOychC4g7Y+J7Y+J7ZWY6rKMIOuCmOyXtO2VmOuptCDslrTrlJTrpbwg67SQ7JW8IO2VoOyngCDslYwg7IiYIOyXhuuLpC5cbiAqXG4gKiBTbGFjayDsnYAgXCLslrjsoJwg67O064K86rmMXCIoc2xhY2sp7JmAIFwi7Ja065SU66GcIOuztOuCvOq5jFwiKHNsYWNrQ29ubmVjdGlvbinrpbwg64KY64iI64ukIOKAlCDslZ7snYAg7Jq07JiBXG4gKiDspJEg7J6Q7KO8IOunjOyngOqzoCDrkqTripQg7ZWcIOuyiCDrp57stpTrqbQg64Gd7J206528IOyImOuqheydtCDri6TrpbTri6QuXG4gKi9cbmV4cG9ydCB0eXBlIFNldHRpbmdHcm91cCA9IFwicWdyaWRcIiB8IFwic2xhY2tcIiB8IFwic2xhY2tDb25uZWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIFNldHRpbmdEZWYgPSB7XG4gIGtleTogc3RyaW5nO1xuICBncm91cDogU2V0dGluZ0dyb3VwO1xuICBlbnZLZXk/OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGtpbmQ6IFNldHRpbmdLaW5kO1xuICAvKiog7KCB7JqpIOyLnOygkC4g67aA7YyFIOyLnCDtlZwg67KI66eMIOydve2eiOuKlCDqsJLsnYAg7J6s7Iuc7J6R7J20IO2VhOyalO2VmOuLpC4gKi9cbiAgYXBwbGllczogXCJpbW1lZGlhdGVcIiB8IFwicmVzdGFydFwiO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgLyoqIGBwcmVzZXRgIOyiheulmOyXkOyEnCDqs6Drpbwg7IiYIOyeiOuKlCDqsJIuIOydtCDrqqnroZ0g67CW7J2YIOqwkuydgCDsoIDsnqXrkJjsp4Ag7JWK64qU64ukLiAqL1xuICBwcmVzZXRzPzogbnVtYmVyW107XG4gIC8qKlxuICAgKiDsoIDsnqXqsJLrj4QgZW52IOuPhCDsl4bsnYQg65WMIOyLpOygnOuhnCDsoIHsmqnrkJjripQg6rCSLiDtmZTrqbTsnYQg67mE7JuM65GQ66m0IFwi7ISk7KCVIOyViCDrkKhcIuycvOuhnCDsnb3tnojsp4Drp4xcbiAgICog7Iuk7KCc66Gc64qUIOydtCDqsJLsnbQg64+M6rOgIOyeiOuLpCDigJQg7IaM67mE7LKY7J2YIOq4sOuzuOqwkuqzvCDrsJjrk5zsi5wg6rCZ7JWE7JW8IO2VnOuLpC5cbiAgICovXG4gIGZhbGxiYWNrOiBzdHJpbmc7XG4gIGhlbHA/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIGtlZXBhbGl2ZSDsiqTsvIDspITrn6zrpbwg7Iuk7KCc66GcIOyGjOycoO2VoCDsnbjsiqTthLTsiqTrp4wg7Lyg64ukLiBTZXR0aW5ncyBEQiDqsJLqs7wg7J2867aA65+sIOu2hOumrO2VnOuLpCDigJRcbiAqIOqwmeydgCBEQuulvCDrs7TripQg6rCc67Cc7J6QIOuhnOy7rCDsnbjsiqTthLTsiqTqsIAg7KCE7JetIOyEpOygleydhCDsnb3qs6Ag7ZWo6ruYIOuwnOyCrO2VmOuptCDspJHrs7Ug7JqU7LKt7J20IOuQnOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRPS0VOX1dJTkRPV19LRUVQQUxJVkVfUlVOTkVSX0VOVl9LRVkgPSBcIlFHUklEX1RPS0VOX1dJTkRPV19LRUVQQUxJVkVfRU5BQkxFRFwiO1xuXG5leHBvcnQgY29uc3QgU0VUVElOR19ERUZTOiBTZXR0aW5nRGVmW10gPSBbXG4gIHtcbiAgICBrZXk6IFwicWdyaWQudG9rZW5XaW5kb3dLZWVwYWxpdmVFbmFibGVkXCIsXG4gICAgZmFsbGJhY2s6IFwidHJ1ZVwiLFxuICAgIGdyb3VwOiBcInFncmlkXCIsXG4gICAgbGFiZWw6IFwi7Yag7YGwIOyciOuPhOyasCBrZWVwYWxpdmVcIixcbiAgICBraW5kOiBcImJvb2xlYW5cIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICAgIGhlbHA6IFwi64GE66m0IOydtCDshJzrsoTsl5DshJwg7ISg7YOd7ZWcIEFudGhyb3BpYyDthqDtgbDsnZggNeyLnOqwhCDsnIjrj4TsmrAg7J6Q64+ZIOycoOyngCDsmpTssq3snYQg7KSR64uo7ZWp64uI64ukXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwic2xhY2suZW5hYmxlZFwiLFxuICAgIGZhbGxiYWNrOiBcInRydWVcIixcbiAgICBncm91cDogXCJzbGFja1wiLFxuICAgIGVudktleTogXCJTTEFDS19FTkFCTEVEXCIsXG4gICAgbGFiZWw6IFwiU2xhY2sg7JWM66a8XCIsXG4gICAga2luZDogXCJib29sZWFuXCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgICBoZWxwOiBcIuyXsO2ctOyymOufvCDqt5zsuZnsnLzroZwg7J6h7J2EIOyImCDsl4bripQg6riw6rCE7JeQIOuBleuLiOuLpC4g7ISc67mE7IqkIOygleyngOq4iSDsnqXslaAg7JWM66a87J2AIOq6vOuPhCDsoITri6zrkKnri4jri6RcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay5yZW1pbmRlcnNFbmFibGVkXCIsXG4gICAgZmFsbGJhY2s6IFwidHJ1ZVwiLFxuICAgIGdyb3VwOiBcInNsYWNrXCIsXG4gICAgZW52S2V5OiBcIlNMQUNLX1JFTUlOREVSU19FTkFCTEVEXCIsXG4gICAgbGFiZWw6IFwi66eM66OMIOyVjOumvCDrsJjrs7VcIixcbiAgICBraW5kOiBcImJvb2xlYW5cIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICAgIGhlbHA6IFwi64GE66m0IOuwmOuzteunjCDrqYjstpTqs6Ag66eM66OMIOyInOqwhOydmCDslYzrprzsnYAg6re464yA66GcIOqwkeuLiOuLpFwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcInNsYWNrLmV4cGlyeVJlbWluZGVyTWludXRlc1wiLFxuICAgIGZhbGxiYWNrOiBcIjYwXCIsXG4gICAgZ3JvdXA6IFwic2xhY2tcIixcbiAgICBlbnZLZXk6IFwiU0xBQ0tfRVhQSVJZX1JFTUlOREVSX0lOVEVSVkFMX01JTlVURVNcIixcbiAgICBsYWJlbDogXCLrsJjrs7Ug7KO86riwXCIsXG4gICAga2luZDogXCJwcmVzZXRcIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICAgIC8vIOyekOycoCDsnoXroKUg64yA7IugIOqzoOyglSDshKDtg53sp4Drpbwg7JO064ukIOKAlCBcIuyWvOuniOuCmCDsnpDso7wg7J6s7LSJ7ZWg6rmMXCLrnbzshJwgMeu2hCDri6jsnIQg7KCV67CA64+E6rCAXG4gICAgLy8g7J2Y66+4IOyXhuqzoCwg7J6Y66q7IOuEo+ycvOuptCDssYTrhJDsnbQg7Iuc64GE65+s7JuM7KeE64ukLiDrgYTripQg6rKD7J2AIHJlbWluZGVyc0VuYWJsZWQg6rCAIOunoeuKlOuLpC5cbiAgICBwcmVzZXRzOiBbMTAsIDMwLCA2MCwgMTgwXSxcbiAgICBoZWxwOiBcIuyerOuhnOq3uOyduOydtCDtlYTsmpTtlZwg7Yag7YGw7J20IOuCqOyVhCDsnojripQg64+Z7JWIIOydtCDso7zquLDroZwg64uk7IucIOyVjOumveuLiOuLpFwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcInNsYWNrLnF1aWV0RnJvbUhvdXJcIixcbiAgICBmYWxsYmFjazogXCIyMFwiLFxuICAgIGdyb3VwOiBcInNsYWNrXCIsXG4gICAgZW52S2V5OiBcIlNMQUNLX1FVSUVUX0ZST01fSE9VUlwiLFxuICAgIGxhYmVsOiBcIuyhsOyaqSDsi5zqsIQg7Iuc7J6RXCIsXG4gICAga2luZDogXCJpbnRlZ2VyXCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgICBtaW46IDAsXG4gICAgbWF4OiAyMyxcbiAgICBoZWxwOiBcIuydtCDsi5zqsIHrtoDthLAg7JWM66as7KeAIOyViuyKteuLiOuLpCAo7ZWc6rWtIOyLnOqwhClcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay5xdWlldFVudGlsSG91clwiLFxuICAgIGZhbGxiYWNrOiBcIjhcIixcbiAgICBncm91cDogXCJzbGFja1wiLFxuICAgIGVudktleTogXCJTTEFDS19RVUlFVF9VTlRJTF9IT1VSXCIsXG4gICAgbGFiZWw6IFwi7KGw7JqpIOyLnOqwhCDsooXro4xcIixcbiAgICBraW5kOiBcImludGVnZXJcIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICAgIG1pbjogMCxcbiAgICBtYXg6IDIzLFxuICAgIGhlbHA6IFwi7J20IOyLnOqwgeu2gO2EsCDri6Tsi5wg7JWM66a964uI64ukLiDsi5zsnpHrs7Tri6Qg67mg66W066m0IOyekOygleydhCDrhJjripQg6rWs6rCE7J20IOuQqeuLiOuLpFwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcInNsYWNrLm5vdGlmeU9uV2Vla2VuZHNcIixcbiAgICBmYWxsYmFjazogXCJmYWxzZVwiLFxuICAgIGdyb3VwOiBcInNsYWNrXCIsXG4gICAgZW52S2V5OiBcIlNMQUNLX05PVElGWV9PTl9XRUVLRU5EU1wiLFxuICAgIGxhYmVsOiBcIuyjvOunkOyXkOuPhCDslYzrprxcIixcbiAgICBraW5kOiBcImJvb2xlYW5cIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICAgIGhlbHA6IFwi7Lyc66m0IOyjvOunkOyXkOuPhCDsnITsnZgg7KGw7JqpIOyLnOqwhCDqt5zsuZnrp4wg7KCB7Jqp65Cp64uI64ukXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwic2xhY2suY2hhbm5lbElkXCIsXG4gICAgZmFsbGJhY2s6IFwiXCIsXG4gICAgZ3JvdXA6IFwic2xhY2tDb25uZWN0aW9uXCIsXG4gICAgZW52S2V5OiBcIlNMQUNLX0NIQU5ORUxfSURcIixcbiAgICBsYWJlbDogXCJTbGFjayDssYTrhJAgSURcIixcbiAgICBraW5kOiBcInN0cmluZ1wiLFxuICAgIGFwcGxpZXM6IFwiaW1tZWRpYXRlXCIsXG4gICAgaGVscDogXCLsgqzsmqnsnpAgSUQoVS4uLinrpbwg64Sj7Jy866m0IOq3uCDsgqzrnowgRE0g7Jy866GcIOqwkeuLiOuLpFwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcInNsYWNrLnVzZXJNYXBcIixcbiAgICBmYWxsYmFjazogXCJcIixcbiAgICBncm91cDogXCJzbGFja0Nvbm5lY3Rpb25cIixcbiAgICBlbnZLZXk6IFwiU0xBQ0tfVVNFUl9NQVBcIixcbiAgICBsYWJlbDogXCJTbGFjayDsgqzsmqnsnpAg66ek7ZWRXCIsXG4gICAga2luZDogXCJzdHJpbmdcIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICAgIGhlbHA6IFwi7Yag7YGw66qFOlNsYWNrVXNlcklkIOulvCDsibztkZzroZwuIOqzteyaqSDqs4TsoJXsnYAg64Sj7KeAIOyViuyKteuLiOuLpFwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcInNsYWNrLmJvdFRva2VuXCIsXG4gICAgZmFsbGJhY2s6IFwiXCIsXG4gICAgZ3JvdXA6IFwic2xhY2tDb25uZWN0aW9uXCIsXG4gICAgZW52S2V5OiBcIlNMQUNLX0JPVF9UT0tFTlwiLFxuICAgIGxhYmVsOiBcIlNsYWNrIOu0hyDthqDtgbBcIixcbiAgICBraW5kOiBcInNlY3JldFwiLFxuICAgIGFwcGxpZXM6IFwiaW1tZWRpYXRlXCIsXG4gIH0sXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZFNldHRpbmdEZWYoa2V5OiBzdHJpbmcpOiBTZXR0aW5nRGVmIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIFNFVFRJTkdfREVGUy5maW5kKChkKSA9PiBkLmtleSA9PT0ga2V5KTtcbn1cblxuLyoqIOyggOyepSDsoIQg6rKA7KadLiDsnpjrqrvrkJwg6rCS7J20IOuTpOyWtOqwgOuptCDrn7Dtg4DsnoTsl5DshJwg7KGw7Jqp7Z6IIOq4sOuzuOqwkuycvOuhnCDrlqjslrTsoLgg7JuQ7J247J2EIOywvuq4sCDslrTroLXri6QuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTZXR0aW5nVmFsdWUoXG4gIGRlZjogU2V0dGluZ0RlZixcbiAgcmF3OiBzdHJpbmcsXG4pOiB7IG9rOiB0cnVlOyB2YWx1ZTogc3RyaW5nIH0gfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHN0cmluZyB9IHtcbiAgY29uc3QgdHJpbW1lZCA9IHJhdy50cmltKCk7XG5cbiAgaWYgKGRlZi5raW5kID09PSBcImJvb2xlYW5cIikge1xuICAgIGlmICghW1widHJ1ZVwiLCBcImZhbHNlXCJdLmluY2x1ZGVzKHRyaW1tZWQpKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBcInRydWUg65iQ64qUIGZhbHNlXCIgfTtcbiAgICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IHRyaW1tZWQgfTtcbiAgfVxuXG4gIGlmIChkZWYua2luZCA9PT0gXCJwcmVzZXRcIikge1xuICAgIC8vIO2ZlOuptOydgCDrsoTtirzrp4wg7KO87KeA66eMIEFQSSDripQg7JWE66y0IOqwkuydtOuCmCDrsJvsnYQg7IiYIOyeiOuLpC4g66qp66GdIOuwluydmCDqsJLsnbQg65Ok7Ja07Jik66m0XG4gICAgLy8g7ZmU66m07JeQ7IScIOyVhOustCDrsoTtirzrj4Qg7ISg7YOd64+8IOuztOydtOyngCDslYrslYQgXCLsmZwg7JWIIOuwlOuAjOyngFwi6rCAIOuQnOuLpC5cbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodHJpbW1lZCk7XG4gICAgaWYgKCFkZWYucHJlc2V0cz8uaW5jbHVkZXMocGFyc2VkKSkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogYCR7ZGVmLnByZXNldHM/LmpvaW4oXCIsIFwiKSA/PyBcIlwifSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpGAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiBTdHJpbmcocGFyc2VkKSB9O1xuICB9XG5cbiAgaWYgKGRlZi5raW5kID09PSBcImludGVnZXJcIiB8fCBkZWYua2luZCA9PT0gXCJudW1iZXJcIikge1xuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcih0cmltbWVkKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShwYXJzZWQpKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBcIuyIq+yekOulvCDsnoXroKXtlZjshLjsmpRcIiB9O1xuICAgIGlmIChkZWYua2luZCA9PT0gXCJpbnRlZ2VyXCIgJiYgIU51bWJlci5pc0ludGVnZXIocGFyc2VkKSkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogXCLsoJXsiJjrpbwg7J6F66Cl7ZWY7IS47JqUXCIgfTtcbiAgICB9XG4gICAgaWYgKGRlZi5taW4gIT09IHVuZGVmaW5lZCAmJiBwYXJzZWQgPCBkZWYubWluKSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBgJHtkZWYubWlufSDsnbTsg4HsnbTslrTslbwg7ZWp64uI64ukYCB9O1xuICAgIH1cbiAgICBpZiAoZGVmLm1heCAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZCA+IGRlZi5tYXgpIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGAke2RlZi5tYXh9IOydtO2VmOyXrOyVvCDtlanri4jri6RgIH07XG4gICAgfVxuICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogU3RyaW5nKHBhcnNlZCkgfTtcbiAgfVxuXG4gIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogdHJpbW1lZCB9O1xufVxuXG4vKiog7ZmU66m07JeQIOq3uOuMgOuhnCDrgrTroKTrs7TrgrTrqbQg7JWIIOuQmOuKlCDqsJIuIOyVnuuSpOunjCDrgqjquLTri6QuICovXG5leHBvcnQgZnVuY3Rpb24gbWFza1NlY3JldCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA8PSAxMikgcmV0dXJuIFwiKioqXCI7XG4gIHJldHVybiBgJHt2YWx1ZS5zbGljZSgwLCA4KX0uLi4ke3ZhbHVlLnNsaWNlKC00KX1gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQTZDQSxNQUFhLHdDQUF3QztBQUVyRCxNQUFhLGVBQTZCO0NBQ3hDO0VBQ0UsS0FBSztFQUNMLFVBQVU7RUFDVixPQUFPO0VBQ1AsT0FBTztFQUNQLE1BQU07RUFDTixTQUFTO0VBQ1QsTUFBTTtDQUNSO0NBQ0E7RUFDRSxLQUFLO0VBQ0wsVUFBVTtFQUNWLE9BQU87RUFDUCxRQUFRO0VBQ1IsT0FBTztFQUNQLE1BQU07RUFDTixTQUFT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
|
|
@@ -4,7 +4,7 @@ import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.140.0/hel
|
|
|
4
4
|
import __decorate from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
|
|
5
5
|
import { detectSupervisor } from "../../utils/process-supervisor.js";
|
|
6
6
|
import { armServerRestartExit, beginServerRestart } from "../../utils/server-restart.js";
|
|
7
|
-
import { SETTING_DEFS, findSettingDef, maskSecret, validateSettingValue } from "./setting.constant.js";
|
|
7
|
+
import { SETTING_DEFS, TOKEN_WINDOW_KEEPALIVE_RUNNER_ENV_KEY, findSettingDef, maskSecret, validateSettingValue } from "./setting.constant.js";
|
|
8
8
|
import { getSetting, isStored, resetSetting, saveSetting } from "./setting.store.js";
|
|
9
9
|
import { BadRequestException, BaseModelClass, NotFoundException, SoException, Sonamu, api, asArray, exhaustive } from "sonamu";
|
|
10
10
|
import { getLogger } from "@logtape/logtape";
|
|
@@ -152,7 +152,8 @@ var SettingModelClass = class extends BaseModelClass {
|
|
|
152
152
|
};
|
|
153
153
|
}),
|
|
154
154
|
runtime: this.runtimeInfo(),
|
|
155
|
-
supervisor: detectSupervisor()
|
|
155
|
+
supervisor: detectSupervisor(),
|
|
156
|
+
keepaliveRunnerEnabled: process.env[TOKEN_WINDOW_KEEPALIVE_RUNNER_ENV_KEY] === "true"
|
|
156
157
|
};
|
|
157
158
|
}
|
|
158
159
|
runtimeInfo() {
|
|
@@ -313,4 +314,4 @@ const SettingModel = new SettingModelClass();
|
|
|
313
314
|
//#endregion
|
|
314
315
|
export { SettingModel };
|
|
315
316
|
|
|
316
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5tb2RlbC5qcyIsIm5hbWVzIjpbInNhdmVTdG9yZWRTZXR0aW5nIiwicmVzZXRTdG9yZWRTZXR0aW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3NldHRpbmcvc2V0dGluZy5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHtcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgYXNBcnJheSxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG4gIEJhZFJlcXVlc3RFeGNlcHRpb24sXG4gIFNvRXhjZXB0aW9uLFxuICBTb25hbXUsXG4gIGFwaSxcbiAgZXhoYXVzdGl2ZSxcbn0gZnJvbSBcInNvbmFtdVwiO1xuXG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi8uLi9pMThuL3NkLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgZGV0ZWN0U3VwZXJ2aXNvciB9IGZyb20gXCIuLi8uLi91dGlscy9wcm9jZXNzLXN1cGVydmlzb3JcIjtcbmltcG9ydCB7IGFybVNlcnZlclJlc3RhcnRFeGl0LCBiZWdpblNlcnZlclJlc3RhcnQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc2VydmVyLXJlc3RhcnRcIjtcbmltcG9ydCB7IHR5cGUgU2V0dGluZ1N1YnNldEtleSwgdHlwZSBTZXR0aW5nU3Vic2V0TWFwcGluZyB9IGZyb20gXCIuLi9zb25hbXUuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyBzZXR0aW5nU3Vic2V0UXVlcmllcywgc2V0dGluZ0xvYWRlclF1ZXJpZXMgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZC5zc29cIjtcbmltcG9ydCB7IGZpbmRTZXR0aW5nRGVmLCBtYXNrU2VjcmV0LCBTRVRUSU5HX0RFRlMsIHZhbGlkYXRlU2V0dGluZ1ZhbHVlIH0gZnJvbSBcIi4vc2V0dGluZy5jb25zdGFudFwiO1xuaW1wb3J0IHtcbiAgZ2V0U2V0dGluZyxcbiAgaXNTdG9yZWQsXG4gIHJlc2V0U2V0dGluZyBhcyByZXNldFN0b3JlZFNldHRpbmcsXG4gIHNhdmVTZXR0aW5nIGFzIHNhdmVTdG9yZWRTZXR0aW5nLFxufSBmcm9tIFwiLi9zZXR0aW5nLnN0b3JlXCI7XG5pbXBvcnQge1xuICB0eXBlIFJ1bnRpbWVJbmZvSXRlbSxcbiAgdHlwZSBTZXR0aW5nQXBwbGllcyxcbiAgdHlwZSBTZXR0aW5nSXRlbSxcbiAgdHlwZSBTZXR0aW5nTGlzdFBhcmFtcyxcbiAgdHlwZSBTZXR0aW5nU2F2ZVBhcmFtcyxcbiAgdHlwZSBTZXR0aW5nc1Jlc3BvbnNlLFxuICB0eXBlIFN1cGVydmlzb3JLaW5kLFxufSBmcm9tIFwiLi9zZXR0aW5nLnR5cGVzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcInNldHRpbmdcIl0pO1xuXG5jbGFzcyBGb3JiaWRkZW5FeGNlcHRpb24gZXh0ZW5kcyBTb0V4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKDQwMywgU0QoXCJlcnJvci5mb3JiaWRkZW5cIikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpcnN0SGVhZGVyVmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWUpPy5zcGxpdChcIixcIilbMF0/LnRyaW0oKTtcbn1cblxuLyoqIE9yaWdpbiDsl4bripQg7Jq07JiBIENMSSDsmpTssq3snYAg7Ya16rO87Iuc7YKk65CYLCDruIzrnbzsmrDsoIAg6rWQ7LCoIOy2nOyymCBQT1NUIOuKlCDrp4nripTri6QuICovXG5mdW5jdGlvbiBhc3NlcnRSZXN0YXJ0T3JpZ2luKCk6IHZvaWQge1xuICBjb25zdCB7IGhlYWRlcnMgfSA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gIGNvbnN0IG9yaWdpbiA9IGZpcnN0SGVhZGVyVmFsdWUoaGVhZGVycy5vcmlnaW4pO1xuICBpZiAoaGVhZGVycy5vcmlnaW4gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICBpZiAoIW9yaWdpbikgdGhyb3cgbmV3IEZvcmJpZGRlbkV4Y2VwdGlvbigpO1xuXG4gIGNvbnN0IGhvc3QgPSBmaXJzdEhlYWRlclZhbHVlKGhlYWRlcnNbXCJ4LWZvcndhcmRlZC1ob3N0XCJdKSA/PyBmaXJzdEhlYWRlclZhbHVlKGhlYWRlcnMuaG9zdCk7XG4gIHRyeSB7XG4gICAgaWYgKCFob3N0IHx8IG5ldyBVUkwob3JpZ2luKS5ob3N0ICE9PSBob3N0KSB0aHJvdyBuZXcgRm9yYmlkZGVuRXhjZXB0aW9uKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRm9yYmlkZGVuRXhjZXB0aW9uKSB0aHJvdyBlcnJvcjtcbiAgICB0aHJvdyBuZXcgRm9yYmlkZGVuRXhjZXB0aW9uKCk7XG4gIH1cbn1cblxuLypcbiAgU2V0dGluZyBNb2RlbFxuKi9cbmNsYXNzIFNldHRpbmdNb2RlbENsYXNzIGV4dGVuZHMgQmFzZU1vZGVsQ2xhc3M8XG4gIFNldHRpbmdTdWJzZXRLZXksXG4gIFNldHRpbmdTdWJzZXRNYXBwaW5nLFxuICB0eXBlb2Ygc2V0dGluZ1N1YnNldFF1ZXJpZXMsXG4gIHR5cGVvZiBzZXR0aW5nTG9hZGVyUXVlcmllc1xuPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiU2V0dGluZ1wiLCBzZXR0aW5nU3Vic2V0UXVlcmllcywgc2V0dGluZ0xvYWRlclF1ZXJpZXMpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0sIHJlc291cmNlTmFtZTogXCJTZXR0aW5nXCIgfSlcbiAgYXN5bmMgZmluZEJ5SWQ8VCBleHRlbmRzIFNldHRpbmdTdWJzZXRLZXk+KFxuICAgIHN1YnNldDogVCxcbiAgICBpZDogbnVtYmVyLFxuICApOiBQcm9taXNlPFNldHRpbmdTdWJzZXRNYXBwaW5nW1RdPiB7XG4gICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLmZpbmRNYW55KHN1YnNldCwge1xuICAgICAgaWQsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuICAgIGlmICghcm93c1swXSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKFNEKFwiZXJyb3IuZW50aXR5Tm90Rm91bmRcIikoXCJTZXR0aW5nXCIsIGlkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3NbMF07XG4gIH1cblxuICBhc3luYyBmaW5kT25lPFQgZXh0ZW5kcyBTZXR0aW5nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgbGlzdFBhcmFtczogU2V0dGluZ0xpc3RQYXJhbXMsXG4gICk6IFByb21pc2U8U2V0dGluZ1N1YnNldE1hcHBpbmdbVF0gfCBudWxsPiB7XG4gICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLmZpbmRNYW55KHN1YnNldCwge1xuICAgICAgLi4ubGlzdFBhcmFtcyxcbiAgICAgIG51bTogMSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm93c1swXSA/PyBudWxsO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0sIHJlc291cmNlTmFtZTogXCJTZXR0aW5nc1wiIH0pXG4gIGFzeW5jIGZpbmRNYW55PFQgZXh0ZW5kcyBTZXR0aW5nU3Vic2V0S2V5LCBMUCBleHRlbmRzIFNldHRpbmdMaXN0UGFyYW1zPihcbiAgICBzdWJzZXQ6IFQsXG4gICAgcmF3UGFyYW1zPzogTFAsXG4gICk6IFByb21pc2U8TGlzdFJlc3VsdDxMUCwgU2V0dGluZ1N1YnNldE1hcHBpbmdbVF0+PiB7XG4gICAgLy8gcGFyYW1zIHdpdGggZGVmYXVsdHNcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBudW06IDI0LFxuICAgICAgcGFnZTogMSxcbiAgICAgIHNlYXJjaDogXCJrZXlcIiBhcyBjb25zdCxcbiAgICAgIG9yZGVyQnk6IFwia2V5LWFzY1wiIGFzIGNvbnN0LFxuICAgICAgLi4ucmF3UGFyYW1zLFxuICAgIH0gc2F0aXNmaWVzIFNldHRpbmdMaXN0UGFyYW1zO1xuXG4gICAgLy8gYnVpbGQgcXVlcmllc1xuICAgIGNvbnN0IHsgcWIsIG9uU3Vic2V0OiBfIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoc3Vic2V0KTtcblxuICAgIC8vIGlkXG4gICAgaWYgKHBhcmFtcy5pZCkge1xuICAgICAgcWIud2hlcmVJbihcInNldHRpbmdzLmlkXCIsIGFzQXJyYXkocGFyYW1zLmlkKSk7XG4gICAgfVxuXG4gICAgLy8ga2V5IOKAlCB0b0ZpbHRlciBwcm9wIOydtOyngOunjCDsiqTsupDtj7TrlKnsnbQg66eM65Ok7Ja07KO87KeAIOyViuyVhCDsp4HsoJEg6rG064ukLlxuICAgIGlmIChwYXJhbXMua2V5KSB7XG4gICAgICBxYi53aGVyZShcInNldHRpbmdzLmtleVwiLCBwYXJhbXMua2V5KTtcbiAgICB9XG5cbiAgICAvLyBzZWFyY2gta2V5d29yZFxuICAgIGlmIChwYXJhbXMuc2VhcmNoICYmIHBhcmFtcy5rZXl3b3JkICYmIHBhcmFtcy5rZXl3b3JkLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChwYXJhbXMuc2VhcmNoID09PSBcImtleVwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwic2V0dGluZ3Mua2V5XCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJlcnJvci51bmtub3duU2VhcmNoRmllbGRcIikocGFyYW1zLnNlYXJjaCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyQnlcbiAgICBpZiAocGFyYW1zLm9yZGVyQnkpIHtcbiAgICAgIC8vIGRlZmF1bHQgb3JkZXJCeVxuICAgICAgaWYgKHBhcmFtcy5vcmRlckJ5ID09PSBcImtleS1hc2NcIikge1xuICAgICAgICBxYi5vcmRlckJ5KFwic2V0dGluZ3Mua2V5XCIsIFwiYXNjXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhoYXVzdGl2ZShwYXJhbXMub3JkZXJCeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZW5oYW5jZXJzID0gdGhpcy5jcmVhdGVFbmhhbmNlcnMoe1xuICAgICAgQTogKHJvdykgPT4gKHtcbiAgICAgICAgLi4ucm93LFxuICAgICAgICAvLyDshJzruIzshYvrs4TroZwgdmlydHVhbCDtlYTrk5wg6rOE7IKw66Gc7KeBIOy2lOqwgFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlU3Vic2V0UXVlcnkoe1xuICAgICAgc3Vic2V0LFxuICAgICAgcWIsXG4gICAgICBwYXJhbXMsXG4gICAgICBlbmhhbmNlcnMsXG4gICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzYXZlKHNwYTogU2V0dGluZ1NhdmVQYXJhbXNbXSk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuXG4gICAgLy8gcmVnaXN0ZXJcbiAgICBzcGEuZm9yRWFjaCgoc3ApID0+IHtcbiAgICAgIHdkYi51YlJlZ2lzdGVyKFwic2V0dGluZ3NcIiwgc3ApO1xuICAgIH0pO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInNldHRpbmdzXCIpO1xuXG4gICAgICByZXR1cm4gaWRzO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsKGlkczogbnVtYmVyW10pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyB0cmFuc2FjdGlvblxuICAgIGF3YWl0IHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICByZXR1cm4gdHJ4LnRhYmxlKFwic2V0dGluZ3NcIikud2hlcmVJbihcInNldHRpbmdzLmlkXCIsIGlkcykuZGVsZXRlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiDsoIDsnqXrkJwg7ISk7KCVIOyghOyytOulvCBrZXnihpJ2YWx1ZSDroZwuIOu2gO2MhSDsi5wg7ZWcIOuyiCDsnb3slrQg66mU66qo66as7JeQIOyYrOumsOuLpC4gKi9cbiAgYXN5bmMgZmluZEFsbEFzTWFwKCk6IFByb21pc2U8TWFwPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShcIkFcIiwgeyBudW06IDAsIHBhZ2U6IDEgfSk7XG4gICAgcmV0dXJuIG5ldyBNYXAocm93cy5tYXAoKHIpID0+IFtyLmtleSwgci52YWx1ZV0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBrZXkg66GcIHVwc2VydCDtlZzri6QuIGBzYXZlYCDripQgaWQg6riw7KSA7J206528IGtleSDspJHrs7XsnYQg6rG465+s64K07KeAIOuqu+2VtCwg6riw7KG0IO2WieydhCDrqLzsoIAg7LC+7JWEXG4gICAqIGlkIOulvCDsi6TslrQg67O064K464ukLlxuICAgKi9cbiAgYXN5bmMgc2V0QnlLZXkoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZmluZE9uZShcIkFcIiwgeyBrZXksIG51bTogMSwgcGFnZTogMSB9KTtcbiAgICBhd2FpdCB0aGlzLnNhdmUoW1xuICAgICAge1xuICAgICAgICAuLi4oZXhpc3RpbmcgPyB7IGlkOiBleGlzdGluZy5pZCB9IDoge30pLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZSgpLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKiDsoIDsnqXqsJLsnYQg7KeA7JuMIGVudiDquLDrs7jqsJLsnLzroZwg65CY64+M66aw64ukLiAqL1xuICBhc3luYyBjbGVhckJ5S2V5KGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLmZpbmRPbmUoXCJBXCIsIHsga2V5LCBudW06IDEsIHBhZ2U6IDEgfSk7XG4gICAgaWYgKGV4aXN0aW5nKSBhd2FpdCB0aGlzLmRlbChbZXhpc3RpbmcuaWRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtjrjsp5Eg6rCA64ql7ZWcIOyEpOygleqzvCDsnb3quLAg7KCE7JqpIOufsO2DgOyehCDsoJXrs7QuIO2OuOynkSDrjIDsg4HsnYAgYFNFVFRJTkdfREVGU2Ag7JeQIOygleydmOuQnCDqsoPrv5DsnbTri6Qg4oCUXG4gICAqIERCIOygkeyGjSDsoJXrs7Trgpgg7Y+s7Yq464qUIOyEnOuyhOqwgCDrnKjquLAg7KCE7JeQIO2VhOyalO2VtCDtmZTrqbTsl5DshJwg67CU6r+AIOyImCDsl4bri6QuXG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSwgcmVzb3VyY2VOYW1lOiBcIlNldHRpbmdMaXN0XCIgfSlcbiAgYXN5bmMgbGlzdFNldHRpbmdzKCk6IFByb21pc2U8U2V0dGluZ3NSZXNwb25zZT4ge1xuICAgIGNvbnN0IHNldHRpbmdzOiBTZXR0aW5nSXRlbVtdID0gU0VUVElOR19ERUZTLm1hcCgoZGVmKSA9PiB7XG4gICAgICAvLyDsoIDsnqXqsJLrj4QgZW52IOuPhCDsl4bsnLzrqbQg7L2U65OcIOq4sOuzuOqwkuydtCDsi6TsoJzroZwg7KCB7JqpIOykkeydtOuLpC4g67mI7Lm47Jy866GcIOuRkOuptCDtmZTrqbTqs7xcbiAgICAgIC8vIOufsO2DgOyehOydtCDslrTquIvrgpgg67O07J2464ukLlxuICAgICAgY29uc3Qgc3RvcmVkID0gaXNTdG9yZWQoZGVmLmtleSk7XG4gICAgICBjb25zdCByYXcgPSBnZXRTZXR0aW5nKGRlZi5rZXksIGRlZi5lbnZLZXkpO1xuICAgICAgY29uc3QgZWZmZWN0aXZlID0gcmF3ID8/IGRlZi5mYWxsYmFjaztcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHN0b3JlZCA/IFwiZGJcIiA6IHJhdyAhPT0gdW5kZWZpbmVkID8gXCJlbnZcIiA6IFwiZGVmYXVsdFwiO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGRlZi5rZXksXG4gICAgICAgIGdyb3VwOiBkZWYuZ3JvdXAsXG4gICAgICAgIGxhYmVsOiBkZWYubGFiZWwsXG4gICAgICAgIGtpbmQ6IGRlZi5raW5kLFxuICAgICAgICBhcHBsaWVzOiBkZWYuYXBwbGllcyxcbiAgICAgICAgLy8g64iIIO2GoOq4gOydhCDsnITtlbQgc2VjcmV0IOuPhCDsm5Drs7jsnYQg64K066Ck67O064K464ukLiDsnbQg7JeU65Oc7Y+s7J247Yq464qUIOuwsO2PrCDqsr3qs4Tsl5DshJxcbiAgICAgICAgLy8g67CY65Oc7IucIOyduOymne2VtOyVvCDtlZzri6QuXG4gICAgICAgIHZhbHVlOiBlZmZlY3RpdmUsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgbWluOiBkZWYubWluID8/IG51bGwsXG4gICAgICAgIG1heDogZGVmLm1heCA/PyBudWxsLFxuICAgICAgICBwcmVzZXRzOiBkZWYucHJlc2V0cyA/PyBbXSxcbiAgICAgICAgaGVscDogZGVmLmhlbHAgPz8gbnVsbCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBzZXR0aW5ncywgcnVudGltZTogdGhpcy5ydW50aW1lSW5mbygpLCBzdXBlcnZpc29yOiBkZXRlY3RTdXBlcnZpc29yKCkgfTtcbiAgfVxuXG4gIHByaXZhdGUgcnVudGltZUluZm8oKTogUnVudGltZUluZm9JdGVtW10ge1xuICAgIGNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuICAgIGNvbnN0IHBhc3N3b3JkID0gZW52LlFHUklEX0RCX1BBU1NXT1JEID8/IGVudi5TT05BTVVfREJfUEFTU1dPUkQgPz8gXCJcIjtcbiAgICByZXR1cm4gW1xuICAgICAgeyBsYWJlbDogXCJOT0RFX0VOVlwiLCB2YWx1ZTogZW52Lk5PREVfRU5WID8/IFwiLVwiIH0sXG4gICAgICB7IGxhYmVsOiBcIkhPU1RcIiwgdmFsdWU6IGVudi5IT1NUID8/IFwibG9jYWxob3N0XCIgfSxcbiAgICAgIHsgbGFiZWw6IFwiUE9SVFwiLCB2YWx1ZTogZW52LlBPUlQgPz8gXCI0NDkwMFwiIH0sXG4gICAgICB7IGxhYmVsOiBcIkRCIEhvc3RcIiwgdmFsdWU6IGVudi5RR1JJRF9EQl9IT1NUID8/IGVudi5TT05BTVVfREJfSE9TVCA/PyBcIi1cIiB9LFxuICAgICAgeyBsYWJlbDogXCJEQiBQb3J0XCIsIHZhbHVlOiBlbnYuUUdSSURfREJfUE9SVCA/PyBlbnYuU09OQU1VX0RCX1BPUlQgPz8gXCItXCIgfSxcbiAgICAgIHsgbGFiZWw6IFwiREIgTmFtZVwiLCB2YWx1ZTogZW52LlFHUklEX0RCX05BTUUgPz8gZW52LlNPTkFNVV9EQl9OQU1FID8/IFwiLVwiIH0sXG4gICAgICB7IGxhYmVsOiBcIkRCIFVzZXJcIiwgdmFsdWU6IGVudi5RR1JJRF9EQl9VU0VSID8/IGVudi5TT05BTVVfREJfVVNFUiA/PyBcIi1cIiB9LFxuICAgICAgeyBsYWJlbDogXCJEQiBQYXNzd29yZFwiLCB2YWx1ZTogcGFzc3dvcmQgPyBtYXNrU2VjcmV0KHBhc3N3b3JkKSA6IFwiLVwiIH0sXG4gICAgXTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyB1cGRhdGVTZXR0aW5nKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx7IGFwcGxpZXM6IFNldHRpbmdBcHBsaWVzIH0+IHtcbiAgICBjb25zdCBkZWYgPSBmaW5kU2V0dGluZ0RlZihrZXkpO1xuICAgIGlmICghZGVmKSB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNldHRpbmcudW5rbm93bktleVwiKShrZXkpKTtcblxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB2YWxpZGF0ZVNldHRpbmdWYWx1ZShkZWYsIHZhbHVlKTtcbiAgICBpZiAoIXZhbGlkYXRpb24ub2spIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic2V0dGluZy5pbnZhbGlkVmFsdWVcIikodmFsaWRhdGlvbi5lcnJvcikpO1xuICAgIH1cblxuICAgIGF3YWl0IHNhdmVTdG9yZWRTZXR0aW5nKGtleSwgdmFsaWRhdGlvbi52YWx1ZSk7XG4gICAgcmV0dXJuIHsgYXBwbGllczogZGVmLmFwcGxpZXMgfTtcbiAgfVxuXG4gIC8qKiDsoIDsnqXqsJLsnYQg7KeA7JuMIGVudiDquLDrs7jqsJLsnLzroZwg65CY64+M66aw64ukLiAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgcmVzZXRTZXR0aW5nKGtleTogc3RyaW5nKTogUHJvbWlzZTx7IGFwcGxpZXM6IFNldHRpbmdBcHBsaWVzIH0+IHtcbiAgICBjb25zdCBkZWYgPSBmaW5kU2V0dGluZ0RlZihrZXkpO1xuICAgIGlmICghZGVmKSB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNldHRpbmcudW5rbm93bktleVwiKShrZXkpKTtcblxuICAgIGF3YWl0IHJlc2V0U3RvcmVkU2V0dGluZyhrZXkpO1xuICAgIHJldHVybiB7IGFwcGxpZXM6IGRlZi5hcHBsaWVzIH07XG4gIH1cblxuICAvKipcbiAgICog66eM66OMIOyVjOumvOydhCDsp4DquIgg7ZWcIOuyiCDrs7Trgrjri6QuIOyjvOq4sOulvCDquLDri6Trpqzsp4Ag7JWK6rOgIOyEpOygleydtCDsoJzrjIDroZwg67aZ7JeI64qU7KeAIO2ZleyduO2VmOqxsOuCmCxcbiAgICog7J6s66Gc6re47J247J2EIOyerOy0ie2VoCDrlYwg7JO064ukLiDrs7Trgrgg6rG07IiY66W8IOuPjOugpOykmCBcIuuztOuCvCDrjIDsg4Eg7JeG7J2MXCLqs7wg6rWs67aE7ZWc64ukLlxuICAgKi9cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHRyaWdnZXJFeHBpcnlSZW1pbmRlcigpOiBQcm9taXNlPHsgc2VudDogbnVtYmVyIH0+IHtcbiAgICAvLyDrj5nsoIEgaW1wb3J0IOuhnCDslYzrprwg66qo65OI7J2EIO2YuOy2nCDsi5zsoJDsl5Drp4wg64GM7Ja07Jio64ukLiDsoJXsoIHsnLzroZwg6rG466m0XG4gICAgLy8gc2V0dGluZy5tb2RlbCDihpIgZXhwaXJlZC10b2tlbi1yZW1pbmRlciDihpIgdG9rZW4ubW9kZWwg6rK966Gc6rCAIOyDneqyqCxcbiAgICAvLyB0b2tlbi5tb2RlbCDsnYQgbW9jayDtlZjripQg7YWM7Iqk7Yq46rCAIOyLpOygnCDrqqjrk4jsnYQg66i87KCAIOuhnOuTnO2VmOqyjCDrkJzri6QuXG4gICAgY29uc3QgeyBzZW5kRXhwaXJlZFRva2VuUmVtaW5kZXJOb3cgfSA9IGF3YWl0IGltcG9ydChcIi4uL3FncmlkL2V4cGlyZWQtdG9rZW4tcmVtaW5kZXJcIik7XG4gICAgcmV0dXJuIHsgc2VudDogYXdhaXQgc2VuZEV4cGlyZWRUb2tlblJlbWluZGVyTm93KCkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDshJzrsoTrpbwg7J6s7Iuc7J6R7ZWc64ukIOKAlCDsoJXtmZXtnojripQg7Iqk7Iqk66GcIOyiheujjO2VmOqzoCwgcG0yIOqwgCDri6Tsi5wg652E7Jqw64qUIOqyg+yXkCDrp6HquLTri6QuXG4gICAqXG4gICAqIGByZXN0YXJ0YCDroZwg7ZGc7Iuc65CcIOybjOy7pCDshKTsoJXsnYAgZGlzcGF0Y2hlciDsg53shLHsnpDsl5DshJwg7ZWcIOuyiOunjCDsnb3tnojrr4DroZwg7J20IOqyveuhnCDrp5Dqs6DripRcbiAgICog67CY7JiB7ZWgIOuwqeuyleydtCDsl4bsl4jri6QuIOyngOq4iOq5jOyngOuKlCBTU0gg66GcIGBwbTIgcmVzdGFydGAg66W8IOyzkOyVvCDtlojri6QuXG4gICAqXG4gICAqIOu2gOyImCDtmqjqs7zqsIAg7ZWY64KYIOuNlCDsnojri6Q6IHBtMiDripQgYGVjb3N5c3RlbS5jb25maWcuY2pzYCDsnZgg7JuQ656YIOuqheugueycvOuhnCDri6Tsi5wg652E7Jqw6rOgLFxuICAgKiDqt7gg66qF66C57JeQIGAtLXNraXAtdXBkYXRlYCDqsIAg7JeG7Jy866m0IENMSSDqsIAgbnBtIOy1nOyLoCDrsoTsoITsnYQg67Cb7JWEIOyYrOumsOuLpC4g7KaJIOyerOyLnOyekeydgFxuICAgKiDrsLDtj6zsnbTquLDrj4Qg7ZWY64ukIOKAlCDtmZTrqbQg66y46rWs6rCAIOydtCDsgqzsi6TsnYQg7ZWo6ruYIOyVjOumsOuLpC5cbiAgICovXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyByZXN0YXJ0U2VydmVyKCk6IFByb21pc2U8eyBzdXBlcnZpc29yOiBTdXBlcnZpc29yS2luZCB9PiB7XG4gICAgYXNzZXJ0UmVzdGFydE9yaWdpbigpO1xuICAgIGNvbnN0IHN1cGVydmlzb3IgPSBkZXRlY3RTdXBlcnZpc29yKCk7XG4gICAgaWYgKCFzdXBlcnZpc29yKSB7XG4gICAgICAvLyDri6Tsi5wg652E7JuM7KSEIOyjvOyytOqwgCDsl4bsnLzrqbQg7KKF66OM6rCAIOqzpyDsoJXsp4Dri6QuIOyCtOumtCDsiJgg7JeG64qU642wIOyjveydtOyngCDslYrripTri6QuXG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNldHRpbmcubm9TdXBlcnZpc29yXCIpKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcmVwbHkgfSA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgY29uc3Qgc3RhcnRlZCA9IGJlZ2luU2VydmVyUmVzdGFydCgpO1xuICAgIGlmIChzdGFydGVkKSB7XG4gICAgICBsb2dnZXIud2FybihgcmVzdGFydCByZXF1ZXN0ZWQgdmlhIGRhc2hib2FyZCwgZXhpdGluZyBmb3IgJHtzdXBlcnZpc29yfSB0byByZXNwYXduYCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIOygleyggSBpbXBvcnTroZwgcWdyaWQuZnJhbWUvdG9rZW4g6re4656Y7ZSE66W8IOuLueqyqOyYpOuptCDrqqjrk4gg66qpIO2FjOyKpO2KuOqwgCDsmKTsl7zrkJzri6QuXG4gICAgICAgIC8vIOyerOyLnOyekeydtCDsi6TsoJzroZwg7ZmV7KCV65CcIOyLnOygkOyXkCBhY3RpdmUgbmF0aXZlIHJ1biDsoJXtlanshLEg7LKY66as66eMIOuhnOuTnO2VnOuLpC5cbiAgICAgICAgY29uc3QgeyBmaW5pc2hBY3RpdmVOYXRpdmVSdW5zRm9yUmVzdGFydCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vcWdyaWQvcWdyaWQtcnVuLWxpZmVjeWNsZVwiKTtcbiAgICAgICAgYXdhaXQgZmluaXNoQWN0aXZlTmF0aXZlUnVuc0ZvclJlc3RhcnQoKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIC8vIOygle2VqeyEsSDsspjrpqzqsIAg7Iuk7Yyo7ZW064+EIOydkeuLteydtCBmbHVzaCDrkJwg65Kk7JeQ64qUIOyerOyLnOyekeydhCDrgZ3quYzsp4Ag7KeE7ZaJ7ZWc64ukLlxuICAgICAgICBhcm1TZXJ2ZXJSZXN0YXJ0RXhpdChyZXBseS5yYXcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHN1cGVydmlzb3IgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgU2V0dGluZ01vZGVsID0gbmV3IFNldHRpbmdNb2RlbENsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBbUNBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyxTQUFTLENBQUM7QUFFN0MsSUFBTSxxQkFBTixjQUFpQyxZQUFZO0NBQzNDLGNBQWM7RUFDWixNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQztDQUNsQztBQUNGO0FBRUEsU0FBUyxpQkFBaUIsT0FBMEQ7Q0FDbEYsUUFBUSxNQUFNLFFBQVEsS0FBSyxJQUFJLE1BQU0sS0FBSyxNQUFBLEVBQVEsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUN4RTs7QUFHQSxTQUFTLHNCQUE0QjtDQUNuQyxNQUFNLEVBQUUsWUFBWSxPQUFPLFdBQVc7Q0FDdEMsTUFBTSxTQUFTLGlCQUFpQixRQUFRLE1BQU07Q0FDOUMsSUFBSSxRQUFRLFdBQVcsUUFBVztDQUNsQyxJQUFJLENBQUMsUUFBUSxNQUFNLElBQUksbUJBQW1CO0NBRTFDLE1BQU0sT0FBTyxpQkFBaUIsUUFBUSxtQkFBbUIsS0FBSyxpQkFBaUIsUUFBUSxJQUFJO0NBQzNGLElBQUk7RUFDRixJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsU0FBUyxNQUFNLE1BQU0sSUFBSSxtQkFBbUI7Q0FDM0UsU0FBUyxPQUFPO0VBQ2QsSUFBSSxpQkFBaUIsb0JBQW9CLE1BQU07RUFDL0MsTUFBTSxJQUFJLG1CQUFtQjtDQUMvQjtBQUNGO0FBS0EsSUFBTSxvQkFBTixjQUFnQyxlQUs5QjtDQUNBLGNBQWM7RUFDWixNQUFNLFdBQVcsc0JBQXNCLG9CQUFvQjtDQUM3RDtDQUVBLE1BQ00sU0FDSixRQUNBLElBQ2tDO0VBQ2xDLE1BQU0sRUFBRSxTQUFTLE1BQU0sS0FBSyxTQUFTLFFBQVE7R0FDM0M7R0FDQSxLQUFLO0dBQ0wsTUFBTTtFQUNSLENBQUM7RUFDRCxJ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
|
|
317
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5tb2RlbC5qcyIsIm5hbWVzIjpbInNhdmVTdG9yZWRTZXR0aW5nIiwicmVzZXRTdG9yZWRTZXR0aW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3NldHRpbmcvc2V0dGluZy5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHtcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgYXNBcnJheSxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG4gIEJhZFJlcXVlc3RFeGNlcHRpb24sXG4gIFNvRXhjZXB0aW9uLFxuICBTb25hbXUsXG4gIGFwaSxcbiAgZXhoYXVzdGl2ZSxcbn0gZnJvbSBcInNvbmFtdVwiO1xuXG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi8uLi9pMThuL3NkLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgZGV0ZWN0U3VwZXJ2aXNvciB9IGZyb20gXCIuLi8uLi91dGlscy9wcm9jZXNzLXN1cGVydmlzb3JcIjtcbmltcG9ydCB7IGFybVNlcnZlclJlc3RhcnRFeGl0LCBiZWdpblNlcnZlclJlc3RhcnQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc2VydmVyLXJlc3RhcnRcIjtcbmltcG9ydCB7IHR5cGUgU2V0dGluZ1N1YnNldEtleSwgdHlwZSBTZXR0aW5nU3Vic2V0TWFwcGluZyB9IGZyb20gXCIuLi9zb25hbXUuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyBzZXR0aW5nU3Vic2V0UXVlcmllcywgc2V0dGluZ0xvYWRlclF1ZXJpZXMgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZC5zc29cIjtcbmltcG9ydCB7XG4gIGZpbmRTZXR0aW5nRGVmLFxuICBtYXNrU2VjcmV0LFxuICBTRVRUSU5HX0RFRlMsXG4gIFRPS0VOX1dJTkRPV19LRUVQQUxJVkVfUlVOTkVSX0VOVl9LRVksXG4gIHZhbGlkYXRlU2V0dGluZ1ZhbHVlLFxufSBmcm9tIFwiLi9zZXR0aW5nLmNvbnN0YW50XCI7XG5pbXBvcnQge1xuICBnZXRTZXR0aW5nLFxuICBpc1N0b3JlZCxcbiAgcmVzZXRTZXR0aW5nIGFzIHJlc2V0U3RvcmVkU2V0dGluZyxcbiAgc2F2ZVNldHRpbmcgYXMgc2F2ZVN0b3JlZFNldHRpbmcsXG59IGZyb20gXCIuL3NldHRpbmcuc3RvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgUnVudGltZUluZm9JdGVtLFxuICB0eXBlIFNldHRpbmdBcHBsaWVzLFxuICB0eXBlIFNldHRpbmdJdGVtLFxuICB0eXBlIFNldHRpbmdMaXN0UGFyYW1zLFxuICB0eXBlIFNldHRpbmdTYXZlUGFyYW1zLFxuICB0eXBlIFNldHRpbmdzUmVzcG9uc2UsXG4gIHR5cGUgU3VwZXJ2aXNvcktpbmQsXG59IGZyb20gXCIuL3NldHRpbmcudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwic2V0dGluZ1wiXSk7XG5cbmNsYXNzIEZvcmJpZGRlbkV4Y2VwdGlvbiBleHRlbmRzIFNvRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoNDAzLCBTRChcImVycm9yLmZvcmJpZGRlblwiKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmlyc3RIZWFkZXJWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZSk/LnNwbGl0KFwiLFwiKVswXT8udHJpbSgpO1xufVxuXG4vKiogT3JpZ2luIOyXhuuKlCDsmrTsmIEgQ0xJIOyalOyyreydgCDthrXqs7zsi5ztgqTrkJgsIOu4jOudvOyasOyggCDqtZDssKgg7Lac7LKYIFBPU1Qg64qUIOunieuKlOuLpC4gKi9cbmZ1bmN0aW9uIGFzc2VydFJlc3RhcnRPcmlnaW4oKTogdm9pZCB7XG4gIGNvbnN0IHsgaGVhZGVycyB9ID0gU29uYW11LmdldENvbnRleHQoKTtcbiAgY29uc3Qgb3JpZ2luID0gZmlyc3RIZWFkZXJWYWx1ZShoZWFkZXJzLm9yaWdpbik7XG4gIGlmIChoZWFkZXJzLm9yaWdpbiA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIGlmICghb3JpZ2luKSB0aHJvdyBuZXcgRm9yYmlkZGVuRXhjZXB0aW9uKCk7XG5cbiAgY29uc3QgaG9zdCA9IGZpcnN0SGVhZGVyVmFsdWUoaGVhZGVyc1tcIngtZm9yd2FyZGVkLWhvc3RcIl0pID8/IGZpcnN0SGVhZGVyVmFsdWUoaGVhZGVycy5ob3N0KTtcbiAgdHJ5IHtcbiAgICBpZiAoIWhvc3QgfHwgbmV3IFVSTChvcmlnaW4pLmhvc3QgIT09IGhvc3QpIHRocm93IG5ldyBGb3JiaWRkZW5FeGNlcHRpb24oKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBGb3JiaWRkZW5FeGNlcHRpb24pIHRocm93IGVycm9yO1xuICAgIHRocm93IG5ldyBGb3JiaWRkZW5FeGNlcHRpb24oKTtcbiAgfVxufVxuXG4vKlxuICBTZXR0aW5nIE1vZGVsXG4qL1xuY2xhc3MgU2V0dGluZ01vZGVsQ2xhc3MgZXh0ZW5kcyBCYXNlTW9kZWxDbGFzczxcbiAgU2V0dGluZ1N1YnNldEtleSxcbiAgU2V0dGluZ1N1YnNldE1hcHBpbmcsXG4gIHR5cGVvZiBzZXR0aW5nU3Vic2V0UXVlcmllcyxcbiAgdHlwZW9mIHNldHRpbmdMb2FkZXJRdWVyaWVzXG4+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJTZXR0aW5nXCIsIHNldHRpbmdTdWJzZXRRdWVyaWVzLCBzZXR0aW5nTG9hZGVyUXVlcmllcyk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSwgcmVzb3VyY2VOYW1lOiBcIlNldHRpbmdcIiB9KVxuICBhc3luYyBmaW5kQnlJZDxUIGV4dGVuZHMgU2V0dGluZ1N1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIGlkOiBudW1iZXIsXG4gICk6IFByb21pc2U8U2V0dGluZ1N1YnNldE1hcHBpbmdbVF0+IHtcbiAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMuZmluZE1hbnkoc3Vic2V0LCB7XG4gICAgICBpZCxcbiAgICAgIG51bTogMSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgfSk7XG4gICAgaWYgKCFyb3dzWzBdKSB7XG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24oU0QoXCJlcnJvci5lbnRpdHlOb3RGb3VuZFwiKShcIlNldHRpbmdcIiwgaWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93c1swXTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRPbmU8VCBleHRlbmRzIFNldHRpbmdTdWJzZXRLZXk+KFxuICAgIHN1YnNldDogVCxcbiAgICBsaXN0UGFyYW1zOiBTZXR0aW5nTGlzdFBhcmFtcyxcbiAgKTogUHJvbWlzZTxTZXR0aW5nU3Vic2V0TWFwcGluZ1tUXSB8IG51bGw+IHtcbiAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMuZmluZE1hbnkoc3Vic2V0LCB7XG4gICAgICAuLi5saXN0UGFyYW1zLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICB9KTtcblxuICAgIHJldHVybiByb3dzWzBdID8/IG51bGw7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSwgcmVzb3VyY2VOYW1lOiBcIlNldHRpbmdzXCIgfSlcbiAgYXN5bmMgZmluZE1hbnk8VCBleHRlbmRzIFNldHRpbmdTdWJzZXRLZXksIExQIGV4dGVuZHMgU2V0dGluZ0xpc3RQYXJhbXM+KFxuICAgIHN1YnNldDogVCxcbiAgICByYXdQYXJhbXM/OiBMUCxcbiAgKTogUHJvbWlzZTxMaXN0UmVzdWx0PExQLCBTZXR0aW5nU3Vic2V0TWFwcGluZ1tUXT4+IHtcbiAgICAvLyBwYXJhbXMgd2l0aCBkZWZhdWx0c1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMjQsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoOiBcImtleVwiIGFzIGNvbnN0LFxuICAgICAgb3JkZXJCeTogXCJrZXktYXNjXCIgYXMgY29uc3QsXG4gICAgICAuLi5yYXdQYXJhbXMsXG4gICAgfSBzYXRpc2ZpZXMgU2V0dGluZ0xpc3RQYXJhbXM7XG5cbiAgICAvLyBidWlsZCBxdWVyaWVzXG4gICAgY29uc3QgeyBxYiwgb25TdWJzZXQ6IF8gfSA9IHRoaXMuZ2V0U3Vic2V0UXVlcmllcyhzdWJzZXQpO1xuXG4gICAgLy8gaWRcbiAgICBpZiAocGFyYW1zLmlkKSB7XG4gICAgICBxYi53aGVyZUluKFwic2V0dGluZ3MuaWRcIiwgYXNBcnJheShwYXJhbXMuaWQpKTtcbiAgICB9XG5cbiAgICAvLyBrZXkg4oCUIHRvRmlsdGVyIHByb3Ag7J207KeA66eMIOyKpOy6kO2PtOuUqeydtCDrp4zrk6TslrTso7zsp4Ag7JWK7JWEIOyngeygkSDqsbTri6QuXG4gICAgaWYgKHBhcmFtcy5rZXkpIHtcbiAgICAgIHFiLndoZXJlKFwic2V0dGluZ3Mua2V5XCIsIHBhcmFtcy5rZXkpO1xuICAgIH1cblxuICAgIC8vIHNlYXJjaC1rZXl3b3JkXG4gICAgaWYgKHBhcmFtcy5zZWFyY2ggJiYgcGFyYW1zLmtleXdvcmQgJiYgcGFyYW1zLmtleXdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwia2V5XCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJzZXR0aW5ncy5rZXlcIiwgXCJsaWtlXCIsIGAlJHtwYXJhbXMua2V5d29yZH0lYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcImVycm9yLnVua25vd25TZWFyY2hGaWVsZFwiKShwYXJhbXMuc2VhcmNoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3JkZXJCeVxuICAgIGlmIChwYXJhbXMub3JkZXJCeSkge1xuICAgICAgLy8gZGVmYXVsdCBvcmRlckJ5XG4gICAgICBpZiAocGFyYW1zLm9yZGVyQnkgPT09IFwia2V5LWFzY1wiKSB7XG4gICAgICAgIHFiLm9yZGVyQnkoXCJzZXR0aW5ncy5rZXlcIiwgXCJhc2NcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGhhdXN0aXZlKHBhcmFtcy5vcmRlckJ5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlbmhhbmNlcnMgPSB0aGlzLmNyZWF0ZUVuaGFuY2Vycyh7XG4gICAgICBBOiAocm93KSA9PiAoe1xuICAgICAgICAuLi5yb3csXG4gICAgICAgIC8vIOyEnOu4jOyFi+uzhOuhnCB2aXJ0dWFsIO2VhOuTnCDqs4TsgrDroZzsp4Eg7LaU6rCAXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVTdWJzZXRRdWVyeSh7XG4gICAgICBzdWJzZXQsXG4gICAgICBxYixcbiAgICAgIHBhcmFtcyxcbiAgICAgIGVuaGFuY2VycyxcbiAgICAgIGRlYnVnOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoc3BhOiBTZXR0aW5nU2F2ZVBhcmFtc1tdKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyByZWdpc3RlclxuICAgIHNwYS5mb3JFYWNoKChzcCkgPT4ge1xuICAgICAgd2RiLnViUmVnaXN0ZXIoXCJzZXR0aW5nc1wiLCBzcCk7XG4gICAgfSk7XG5cbiAgICAvLyB0cmFuc2FjdGlvblxuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwic2V0dGluZ3NcIik7XG5cbiAgICAgIHJldHVybiBpZHM7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWwoaWRzOiBudW1iZXJbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcblxuICAgIC8vIHRyYW5zYWN0aW9uXG4gICAgYXdhaXQgd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIHJldHVybiB0cngudGFibGUoXCJzZXR0aW5nc1wiKS53aGVyZUluKFwic2V0dGluZ3MuaWRcIiwgaWRzKS5kZWxldGUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpZHMubGVuZ3RoO1xuICB9XG5cbiAgLyoqIOyggOyepeuQnCDshKTsoJUg7KCE7LK066W8IGtleeKGknZhbHVlIOuhnC4g67aA7YyFIOyLnCDtlZwg67KIIOydveyWtCDrqZTrqqjrpqzsl5Ag7Jis66aw64ukLiAqL1xuICBhc3luYyBmaW5kQWxsQXNNYXAoKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBzdHJpbmc+PiB7XG4gICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLmZpbmRNYW55KFwiQVwiLCB7IG51bTogMCwgcGFnZTogMSB9KTtcbiAgICByZXR1cm4gbmV3IE1hcChyb3dzLm1hcCgocikgPT4gW3Iua2V5LCByLnZhbHVlXSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGtleSDroZwgdXBzZXJ0IO2VnOuLpC4gYHNhdmVgIOuKlCBpZCDquLDspIDsnbTrnbwga2V5IOykkeuzteydhCDqsbjrn6zrgrTsp4Ag66q77ZW0LCDquLDsobQg7ZaJ7J2EIOuovOyggCDssL7slYRcbiAgICogaWQg66W8IOyLpOyWtCDrs7Trgrjri6QuXG4gICAqL1xuICBhc3luYyBzZXRCeUtleShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5maW5kT25lKFwiQVwiLCB7IGtleSwgbnVtOiAxLCBwYWdlOiAxIH0pO1xuICAgIGF3YWl0IHRoaXMuc2F2ZShbXG4gICAgICB7XG4gICAgICAgIC4uLihleGlzdGluZyA/IHsgaWQ6IGV4aXN0aW5nLmlkIH0gOiB7fSksXG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKCksXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgLyoqIOyggOyepeqwkuydhCDsp4Dsm4wgZW52IOq4sOuzuOqwkuycvOuhnCDrkJjrj4zrprDri6QuICovXG4gIGFzeW5jIGNsZWFyQnlLZXkoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZmluZE9uZShcIkFcIiwgeyBrZXksIG51bTogMSwgcGFnZTogMSB9KTtcbiAgICBpZiAoZXhpc3RpbmcpIGF3YWl0IHRoaXMuZGVsKFtleGlzdGluZy5pZF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIO2OuOynkSDqsIDriqXtlZwg7ISk7KCV6rO8IOydveq4sCDsoITsmqkg65+w7YOA7J6EIOygleuztC4g7Y647KeRIOuMgOyDgeydgCBgU0VUVElOR19ERUZTYCDsl5Ag7KCV7J2Y65CcIOqyg+u/kOydtOuLpCDigJRcbiAgICogREIg7KCR7IaNIOygleuztOuCmCDtj6ztirjripQg7ISc67KE6rCAIOucqOq4sCDsoITsl5Ag7ZWE7JqU7ZW0IO2ZlOuptOyXkOyEnCDrsJTqv4Ag7IiYIOyXhuuLpC5cbiAgICovXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiU2V0dGluZ0xpc3RcIiB9KVxuICBhc3luYyBsaXN0U2V0dGluZ3MoKTogUHJvbWlzZTxTZXR0aW5nc1Jlc3BvbnNlPiB7XG4gICAgY29uc3Qgc2V0dGluZ3M6IFNldHRpbmdJdGVtW10gPSBTRVRUSU5HX0RFRlMubWFwKChkZWYpID0+IHtcbiAgICAgIC8vIOyggOyepeqwkuuPhCBlbnYg64+EIOyXhuycvOuptCDsvZTrk5wg6riw67O46rCS7J20IOyLpOygnOuhnCDsoIHsmqkg7KSR7J2064ukLiDruYjsubjsnLzroZwg65GQ66m0IO2ZlOuptOqzvFxuICAgICAgLy8g65+w7YOA7J6E7J20IOyWtOq4i+uCmCDrs7Tsnbjri6QuXG4gICAgICBjb25zdCBzdG9yZWQgPSBpc1N0b3JlZChkZWYua2V5KTtcbiAgICAgIGNvbnN0IHJhdyA9IGdldFNldHRpbmcoZGVmLmtleSwgZGVmLmVudktleSk7XG4gICAgICBjb25zdCBlZmZlY3RpdmUgPSByYXcgPz8gZGVmLmZhbGxiYWNrO1xuICAgICAgY29uc3Qgc291cmNlID0gc3RvcmVkID8gXCJkYlwiIDogcmF3ICE9PSB1bmRlZmluZWQgPyBcImVudlwiIDogXCJkZWZhdWx0XCI7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogZGVmLmtleSxcbiAgICAgICAgZ3JvdXA6IGRlZi5ncm91cCxcbiAgICAgICAgbGFiZWw6IGRlZi5sYWJlbCxcbiAgICAgICAga2luZDogZGVmLmtpbmQsXG4gICAgICAgIGFwcGxpZXM6IGRlZi5hcHBsaWVzLFxuICAgICAgICAvLyDriIgg7Yag6riA7J2EIOychO2VtCBzZWNyZXQg64+EIOybkOuzuOydhCDrgrTroKTrs7Trgrjri6QuIOydtCDsl5Trk5ztj6zsnbjtirjripQg67Cw7Y+sIOqyveqzhOyXkOyEnFxuICAgICAgICAvLyDrsJjrk5zsi5wg7J247Kad7ZW07JW8IO2VnOuLpC5cbiAgICAgICAgdmFsdWU6IGVmZmVjdGl2ZSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBtaW46IGRlZi5taW4gPz8gbnVsbCxcbiAgICAgICAgbWF4OiBkZWYubWF4ID8/IG51bGwsXG4gICAgICAgIHByZXNldHM6IGRlZi5wcmVzZXRzID8/IFtdLFxuICAgICAgICBoZWxwOiBkZWYuaGVscCA/PyBudWxsLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBzZXR0aW5ncyxcbiAgICAgIHJ1bnRpbWU6IHRoaXMucnVudGltZUluZm8oKSxcbiAgICAgIHN1cGVydmlzb3I6IGRldGVjdFN1cGVydmlzb3IoKSxcbiAgICAgIGtlZXBhbGl2ZVJ1bm5lckVuYWJsZWQ6IHByb2Nlc3MuZW52W1RPS0VOX1dJTkRPV19LRUVQQUxJVkVfUlVOTkVSX0VOVl9LRVldID09PSBcInRydWVcIixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBydW50aW1lSW5mbygpOiBSdW50aW1lSW5mb0l0ZW1bXSB7XG4gICAgY29uc3QgZW52ID0gcHJvY2Vzcy5lbnY7XG4gICAgY29uc3QgcGFzc3dvcmQgPSBlbnYuUUdSSURfREJfUEFTU1dPUkQgPz8gZW52LlNPTkFNVV9EQl9QQVNTV09SRCA/PyBcIlwiO1xuICAgIHJldHVybiBbXG4gICAgICB7IGxhYmVsOiBcIk5PREVfRU5WXCIsIHZhbHVlOiBlbnYuTk9ERV9FTlYgPz8gXCItXCIgfSxcbiAgICAgIHsgbGFiZWw6IFwiSE9TVFwiLCB2YWx1ZTogZW52LkhPU1QgPz8gXCJsb2NhbGhvc3RcIiB9LFxuICAgICAgeyBsYWJlbDogXCJQT1JUXCIsIHZhbHVlOiBlbnYuUE9SVCA/PyBcIjQ0OTAwXCIgfSxcbiAgICAgIHsgbGFiZWw6IFwiREIgSG9zdFwiLCB2YWx1ZTogZW52LlFHUklEX0RCX0hPU1QgPz8gZW52LlNPTkFNVV9EQl9IT1NUID8/IFwiLVwiIH0sXG4gICAgICB7IGxhYmVsOiBcIkRCIFBvcnRcIiwgdmFsdWU6IGVudi5RR1JJRF9EQl9QT1JUID8/IGVudi5TT05BTVVfREJfUE9SVCA/PyBcIi1cIiB9LFxuICAgICAgeyBsYWJlbDogXCJEQiBOYW1lXCIsIHZhbHVlOiBlbnYuUUdSSURfREJfTkFNRSA/PyBlbnYuU09OQU1VX0RCX05BTUUgPz8gXCItXCIgfSxcbiAgICAgIHsgbGFiZWw6IFwiREIgVXNlclwiLCB2YWx1ZTogZW52LlFHUklEX0RCX1VTRVIgPz8gZW52LlNPTkFNVV9EQl9VU0VSID8/IFwiLVwiIH0sXG4gICAgICB7IGxhYmVsOiBcIkRCIFBhc3N3b3JkXCIsIHZhbHVlOiBwYXNzd29yZCA/IG1hc2tTZWNyZXQocGFzc3dvcmQpIDogXCItXCIgfSxcbiAgICBdO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHVwZGF0ZVNldHRpbmcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHsgYXBwbGllczogU2V0dGluZ0FwcGxpZXMgfT4ge1xuICAgIGNvbnN0IGRlZiA9IGZpbmRTZXR0aW5nRGVmKGtleSk7XG4gICAgaWYgKCFkZWYpIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic2V0dGluZy51bmtub3duS2V5XCIpKGtleSkpO1xuXG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHZhbGlkYXRlU2V0dGluZ1ZhbHVlKGRlZiwgdmFsdWUpO1xuICAgIGlmICghdmFsaWRhdGlvbi5vaykge1xuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzZXR0aW5nLmludmFsaWRWYWx1ZVwiKSh2YWxpZGF0aW9uLmVycm9yKSk7XG4gICAgfVxuXG4gICAgYXdhaXQgc2F2ZVN0b3JlZFNldHRpbmcoa2V5LCB2YWxpZGF0aW9uLnZhbHVlKTtcbiAgICByZXR1cm4geyBhcHBsaWVzOiBkZWYuYXBwbGllcyB9O1xuICB9XG5cbiAgLyoqIOyggOyepeqwkuydhCDsp4Dsm4wgZW52IOq4sOuzuOqwkuycvOuhnCDrkJjrj4zrprDri6QuICovXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyByZXNldFNldHRpbmcoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHsgYXBwbGllczogU2V0dGluZ0FwcGxpZXMgfT4ge1xuICAgIGNvbnN0IGRlZiA9IGZpbmRTZXR0aW5nRGVmKGtleSk7XG4gICAgaWYgKCFkZWYpIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic2V0dGluZy51bmtub3duS2V5XCIpKGtleSkpO1xuXG4gICAgYXdhaXQgcmVzZXRTdG9yZWRTZXR0aW5nKGtleSk7XG4gICAgcmV0dXJuIHsgYXBwbGllczogZGVmLmFwcGxpZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrp4zro4wg7JWM66a87J2EIOyngOq4iCDtlZwg67KIIOuztOuCuOuLpC4g7KO86riw66W8IOq4sOuLpOumrOyngCDslYrqs6Ag7ISk7KCV7J20IOygnOuMgOuhnCDrtpnsl4jripTsp4Ag7ZmV7J247ZWY6rGw64KYLFxuICAgKiDsnqzroZzqt7jsnbjsnYQg7J6s7LSJ7ZWgIOuVjCDsk7Tri6QuIOuztOuCuCDqsbTsiJjrpbwg64+M66Ck7KSYIFwi67O064K8IOuMgOyDgSDsl4bsnYxcIuqzvCDqtazrtoTtlZzri6QuXG4gICAqL1xuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgdHJpZ2dlckV4cGlyeVJlbWluZGVyKCk6IFByb21pc2U8eyBzZW50OiBudW1iZXIgfT4ge1xuICAgIC8vIOuPmeyggSBpbXBvcnQg66GcIOyVjOumvCDrqqjrk4jsnYQg7Zi47LacIOyLnOygkOyXkOunjCDrgYzslrTsmKjri6QuIOygleyggeycvOuhnCDqsbjrqbRcbiAgICAvLyBzZXR0aW5nLm1vZGVsIOKGkiBleHBpcmVkLXRva2VuLXJlbWluZGVyIOKGkiB0b2tlbi5tb2RlbCDqsr3roZzqsIAg7IOd6rKoLFxuICAgIC8vIHRva2VuLm1vZGVsIOydhCBtb2NrIO2VmOuKlCDthYzsiqTtirjqsIAg7Iuk7KCcIOuqqOuTiOydhCDrqLzsoIAg66Gc65Oc7ZWY6rKMIOuQnOuLpC5cbiAgICBjb25zdCB7IHNlbmRFeHBpcmVkVG9rZW5SZW1pbmRlck5vdyB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vcWdyaWQvZXhwaXJlZC10b2tlbi1yZW1pbmRlclwiKTtcbiAgICByZXR1cm4geyBzZW50OiBhd2FpdCBzZW5kRXhwaXJlZFRva2VuUmVtaW5kZXJOb3coKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOyEnOuyhOulvCDsnqzsi5zsnpHtlZzri6Qg4oCUIOygle2Zle2eiOuKlCDsiqTsiqTroZwg7KKF66OM7ZWY6rOgLCBwbTIg6rCAIOuLpOyLnCDrnYTsmrDripQg6rKD7JeQIOunoeq4tOuLpC5cbiAgICpcbiAgICogYHJlc3RhcnRgIOuhnCDtkZzsi5zrkJwg7JuM7LukIOyEpOygleydgCBkaXNwYXRjaGVyIOyDneyEseyekOyXkOyEnCDtlZwg67KI66eMIOydve2eiOuvgOuhnCDsnbQg6rK966GcIOunkOqzoOuKlFxuICAgKiDrsJjsmIHtlaAg67Cp67KV7J20IOyXhuyXiOuLpC4g7KeA6riI6rmM7KeA64qUIFNTSCDroZwgYHBtMiByZXN0YXJ0YCDrpbwg7LOQ7JW8IO2WiOuLpC5cbiAgICpcbiAgICog67aA7IiYIO2aqOqzvOqwgCDtlZjrgpgg642UIOyeiOuLpDogcG0yIOuKlCBgZWNvc3lzdGVtLmNvbmZpZy5janNgIOydmCDsm5Drnpgg66qF66C57Jy866GcIOuLpOyLnCDrnYTsmrDqs6AsXG4gICAqIOq3uCDrqoXroLnsl5AgYC0tc2tpcC11cGRhdGVgIOqwgCDsl4bsnLzrqbQgQ0xJIOqwgCBucG0g7LWc7IugIOuyhOyghOydhCDrsJvslYQg7Jis66aw64ukLiDspokg7J6s7Iuc7J6R7J2AXG4gICAqIOuwsO2PrOydtOq4sOuPhCDtlZjri6Qg4oCUIO2ZlOuptCDrrLjqtazqsIAg7J20IOyCrOyLpOydhCDtlajqu5gg7JWM66aw64ukLlxuICAgKi9cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHJlc3RhcnRTZXJ2ZXIoKTogUHJvbWlzZTx7IHN1cGVydmlzb3I6IFN1cGVydmlzb3JLaW5kIH0+IHtcbiAgICBhc3NlcnRSZXN0YXJ0T3JpZ2luKCk7XG4gICAgY29uc3Qgc3VwZXJ2aXNvciA9IGRldGVjdFN1cGVydmlzb3IoKTtcbiAgICBpZiAoIXN1cGVydmlzb3IpIHtcbiAgICAgIC8vIOuLpOyLnCDrnYTsm4zspIQg7KO87LK06rCAIOyXhuycvOuptCDsooXro4zqsIAg6rOnIOygleyngOuLpC4g7IK066a0IOyImCDsl4bripTrjbAg7KO97J207KeAIOyViuuKlOuLpC5cbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic2V0dGluZy5ub1N1cGVydmlzb3JcIikoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyByZXBseSB9ID0gU29uYW11LmdldENvbnRleHQoKTtcbiAgICBjb25zdCBzdGFydGVkID0gYmVnaW5TZXJ2ZXJSZXN0YXJ0KCk7XG4gICAgaWYgKHN0YXJ0ZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKGByZXN0YXJ0IHJlcXVlc3RlZCB2aWEgZGFzaGJvYXJkLCBleGl0aW5nIGZvciAke3N1cGVydmlzb3J9IHRvIHJlc3Bhd25gKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8g7KCV7KCBIGltcG9ydOuhnCBxZ3JpZC5mcmFtZS90b2tlbiDqt7jrnpjtlITrpbwg64u56rKo7Jik66m0IOuqqOuTiCDrqqkg7YWM7Iqk7Yq46rCAIOyYpOyXvOuQnOuLpC5cbiAgICAgICAgLy8g7J6s7Iuc7J6R7J20IOyLpOygnOuhnCDtmZXsoJXrkJwg7Iuc7KCQ7JeQIGFjdGl2ZSBuYXRpdmUgcnVuIOygle2VqeyEsSDsspjrpqzrp4wg66Gc65Oc7ZWc64ukLlxuICAgICAgICBjb25zdCB7IGZpbmlzaEFjdGl2ZU5hdGl2ZVJ1bnNGb3JSZXN0YXJ0IH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9xZ3JpZC9xZ3JpZC1ydW4tbGlmZWN5Y2xlXCIpO1xuICAgICAgICBhd2FpdCBmaW5pc2hBY3RpdmVOYXRpdmVSdW5zRm9yUmVzdGFydCgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgLy8g7KCV7ZWp7ISxIOyymOumrOqwgCDsi6TtjKjtlbTrj4Qg7J2R64u17J20IGZsdXNoIOuQnCDrkqTsl5DripQg7J6s7Iuc7J6R7J2EIOuBneq5jOyngCDsp4TtlontlZzri6QuXG4gICAgICAgIGFybVNlcnZlclJlc3RhcnRFeGl0KHJlcGx5LnJhdyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3VwZXJ2aXNvciB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBTZXR0aW5nTW9kZWwgPSBuZXcgU2V0dGluZ01vZGVsQ2xhc3MoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUF5Q0EsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLFNBQVMsQ0FBQztBQUU3QyxJQUFNLHFCQUFOLGNBQWlDLFlBQVk7Q0FDM0MsY0FBYztFQUNaLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDO0NBQ2xDO0FBQ0Y7QUFFQSxTQUFTLGlCQUFpQixPQUEwRDtDQUNsRixRQUFRLE1BQU0sUUFBUSxLQUFLLElBQUksTUFBTSxLQUFLLE1BQUEsRUFBUSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQ3hFOztBQUdBLFNBQVMsc0JBQTRCO0NBQ25DLE1BQU0sRUFBRSxZQUFZLE9BQU8sV0FBVztDQUN0QyxNQUFNLFNBQVMsaUJBQWlCLFFBQVEsTUFBTTtDQUM5QyxJQUFJLFFBQVEsV0FBVyxRQUFXO0NBQ2xDLElBQUksQ0FBQyxRQUFRLE1BQU0sSUFBSSxtQkFBbUI7Q0FFMUMsTUFBTSxPQUFPLGlCQUFpQixRQUFRLG1CQUFtQixLQUFLLGlCQUFpQixRQUFRLElBQUk7Q0FDM0YsSUFBSTtFQUNGLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxTQUFTLE1BQU0sTUFBTSxJQUFJLG1CQUFtQjtDQUMzRSxTQUFTLE9BQU87RUFDZCxJQUFJLGlCQUFpQixvQkFBb0IsTUFBTTtFQUMvQyxNQUFNLElBQUksbUJBQW1CO0NBQy9CO0FBQ0Y7QUFL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
|
|
@@ -42,7 +42,7 @@ async function loadSettings(persistence = SettingModel) {
|
|
|
42
42
|
}
|
|
43
43
|
/** DB → env 순. 둘 다 없으면 undefined 라 호출부의 기본값으로 떨어진다. */
|
|
44
44
|
function getSetting(key, envKey) {
|
|
45
|
-
return cache?.get(key) ?? process.env[envKey];
|
|
45
|
+
return cache?.get(key) ?? (envKey ? process.env[envKey] : void 0);
|
|
46
46
|
}
|
|
47
47
|
/** 저장된 값인지 — 화면에서 출처를 구분해 보여준다. */
|
|
48
48
|
function isStored(key) {
|
|
@@ -63,4 +63,4 @@ async function resetSetting(key, persistence = SettingModel) {
|
|
|
63
63
|
//#endregion
|
|
64
64
|
export { getSetting, isStored, loadSettings, resetSetting, saveSetting, setSettingChangeHandler };
|
|
65
65
|
|
|
66
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5zdG9yZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vc2V0dGluZy9zZXR0aW5nLnN0b3JlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog65+w7YOA7J6EIOyEpOyglSDsobDtmowg7LqQ7IucLlxuICpcbiAqIOqwkuydmCDstpzsspjripQgREIoYHNldHRpbmdzYCkg4oaSIGVudiDsiJzsnbTri6QuIGVudiDrpbwg64Ko6rKo65GQ64qUIOydtOycoOuKlCDsoITtmZgg65WM66y47J2064ukIOKAlCBkZXYwIOuKlFxuICogYGVjb3N5c3RlbS5jb25maWcuanNvbmAg7Jy866GcIOqwkuydhCDso7zsnoXtlZjripTrjbAsIERCIOunjCDrs7Tqsowg66eM65Ok66m0IOuwsO2PrCDsp4Htm4Qg7ISk7KCV7J20IOyghOu2gFxuICog6riw67O46rCS7Jy866GcIOuWqOyWtOynhOuLpC5cbiAqXG4gKiDshKTsoJXsnYAg7JqU7LKtIOqyveuhnChwZXJtaXQg7ZW07ISdLCDslYzrprwg7KCE7IahKeyXkOyEnCDsnb3tnojrr4DroZwg66ek67KIIERCIOulvCDrlYzrpqzsp4Ag7JWK6rOgIOuplOuqqOumrOyXkFxuICog65GU64ukLiBgaW1tZWRpYXRlYCDrs4Dqsr3rj4Qg7ZiE7J6sIEFQSSDtlITroZzshLjsiqTsl5Drp4wg7KaJ7IucIOuwmOyYgeuQnOuLpC4g7J247Iqk7YS07Iqk6rCAIOyXrOufrCDqsJzrqbQg64uk66W4XG4gKiDsnbjsiqTthLTsiqTsnZgg7LqQ7Iuc64qUIOqwseyLoOuQmOyngCDslYrsnLzrqbAsIOydtCDrspTsnITsl5DshJzripQg7ZSE66Gc7IS47IqkIOqwhCDsoITtjIzrpbwg65GQ7KeAIOyViuuKlOuLpC5cbiAqL1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgU2V0dGluZ01vZGVsIH0gZnJvbSBcIi4vc2V0dGluZy5tb2RlbFwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJzZXR0aW5nXCJdKTtcblxuLyoqIOuhnOuTnCDsoITsl5DripQgbnVsbCDsnbTrnbwg7KCE67aAIGVudiDroZwg65ao7Ja07KeE64ukLiAqL1xubGV0IGNhY2hlOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCA9IG51bGw7XG5cbnR5cGUgU2V0dGluZ0NoYW5nZUhhbmRsZXIgPSAoa2V5OiBzdHJpbmcpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBTZXR0aW5nUGVyc2lzdGVuY2UgPSBQaWNrPFxuICB0eXBlb2YgU2V0dGluZ01vZGVsLFxuICBcImNsZWFyQnlLZXlcIiB8IFwiZmluZEFsbEFzTWFwXCIgfCBcInNldEJ5S2V5XCJcbj47XG5sZXQgc2V0dGluZ0NoYW5nZUhhbmRsZXI6IFNldHRpbmdDaGFuZ2VIYW5kbGVyIHwgbnVsbCA9IG51bGw7XG5cbi8qKlxuICog65+w7YOA7J6EIOyGjOu5hOyekOuKlCDsg4HsnIQg7KGw66a9IOqzhOy4teyXkOyEnCDtlZjrgpjrp4wg65Ox66Gd7ZWc64ukLiBoYW5kbGVyIOuKlCDrj5nquLAg7J6R7JeF66eMIO2VtOyVvCDtlZjrqbAsXG4gKiDsi6TtjKjtlbTrj4Qg7J2066+4IOyEseqzte2VnCBEQiDsoIDsnqXsnYQg7Iuk7Yyo66GcIOuwlOq+uOyngCDslYrripTri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRTZXR0aW5nQ2hhbmdlSGFuZGxlcihoYW5kbGVyOiBTZXR0aW5nQ2hhbmdlSGFuZGxlciB8IG51bGwpOiB2b2lkIHtcbiAgc2V0dGluZ0NoYW5nZUhhbmRsZXIgPSBoYW5kbGVyO1xufVxuXG5mdW5jdGlvbiBub3RpZnlTZXR0aW5nQ2hhbmdlZChrZXk6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIHNldHRpbmdDaGFuZ2VIYW5kbGVyPy4oa2V5KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgbG9nZ2VyLndhcm4oYHNldHRpbmcgY2hhbmdlIGhhbmRsZXIgZmFpbGVkIGZvciAke2tleX06ICR7bWVzc2FnZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFNldHRpbmdzKHBlcnNpc3RlbmNlOiBTZXR0aW5nUGVyc2lzdGVuY2UgPSBTZXR0aW5nTW9kZWwpOiBQcm9taXNlPHZvaWQ+
|
|
66
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5zdG9yZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vc2V0dGluZy9zZXR0aW5nLnN0b3JlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog65+w7YOA7J6EIOyEpOyglSDsobDtmowg7LqQ7IucLlxuICpcbiAqIOqwkuydmCDstpzsspjripQgREIoYHNldHRpbmdzYCkg4oaSIGVudiDsiJzsnbTri6QuIGVudiDrpbwg64Ko6rKo65GQ64qUIOydtOycoOuKlCDsoITtmZgg65WM66y47J2064ukIOKAlCBkZXYwIOuKlFxuICogYGVjb3N5c3RlbS5jb25maWcuanNvbmAg7Jy866GcIOqwkuydhCDso7zsnoXtlZjripTrjbAsIERCIOunjCDrs7Tqsowg66eM65Ok66m0IOuwsO2PrCDsp4Htm4Qg7ISk7KCV7J20IOyghOu2gFxuICog6riw67O46rCS7Jy866GcIOuWqOyWtOynhOuLpC5cbiAqXG4gKiDshKTsoJXsnYAg7JqU7LKtIOqyveuhnChwZXJtaXQg7ZW07ISdLCDslYzrprwg7KCE7IahKeyXkOyEnCDsnb3tnojrr4DroZwg66ek67KIIERCIOulvCDrlYzrpqzsp4Ag7JWK6rOgIOuplOuqqOumrOyXkFxuICog65GU64ukLiBgaW1tZWRpYXRlYCDrs4Dqsr3rj4Qg7ZiE7J6sIEFQSSDtlITroZzshLjsiqTsl5Drp4wg7KaJ7IucIOuwmOyYgeuQnOuLpC4g7J247Iqk7YS07Iqk6rCAIOyXrOufrCDqsJzrqbQg64uk66W4XG4gKiDsnbjsiqTthLTsiqTsnZgg7LqQ7Iuc64qUIOqwseyLoOuQmOyngCDslYrsnLzrqbAsIOydtCDrspTsnITsl5DshJzripQg7ZSE66Gc7IS47IqkIOqwhCDsoITtjIzrpbwg65GQ7KeAIOyViuuKlOuLpC5cbiAqL1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgU2V0dGluZ01vZGVsIH0gZnJvbSBcIi4vc2V0dGluZy5tb2RlbFwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJzZXR0aW5nXCJdKTtcblxuLyoqIOuhnOuTnCDsoITsl5DripQgbnVsbCDsnbTrnbwg7KCE67aAIGVudiDroZwg65ao7Ja07KeE64ukLiAqL1xubGV0IGNhY2hlOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCA9IG51bGw7XG5cbnR5cGUgU2V0dGluZ0NoYW5nZUhhbmRsZXIgPSAoa2V5OiBzdHJpbmcpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBTZXR0aW5nUGVyc2lzdGVuY2UgPSBQaWNrPFxuICB0eXBlb2YgU2V0dGluZ01vZGVsLFxuICBcImNsZWFyQnlLZXlcIiB8IFwiZmluZEFsbEFzTWFwXCIgfCBcInNldEJ5S2V5XCJcbj47XG5sZXQgc2V0dGluZ0NoYW5nZUhhbmRsZXI6IFNldHRpbmdDaGFuZ2VIYW5kbGVyIHwgbnVsbCA9IG51bGw7XG5cbi8qKlxuICog65+w7YOA7J6EIOyGjOu5hOyekOuKlCDsg4HsnIQg7KGw66a9IOqzhOy4teyXkOyEnCDtlZjrgpjrp4wg65Ox66Gd7ZWc64ukLiBoYW5kbGVyIOuKlCDrj5nquLAg7J6R7JeF66eMIO2VtOyVvCDtlZjrqbAsXG4gKiDsi6TtjKjtlbTrj4Qg7J2066+4IOyEseqzte2VnCBEQiDsoIDsnqXsnYQg7Iuk7Yyo66GcIOuwlOq+uOyngCDslYrripTri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRTZXR0aW5nQ2hhbmdlSGFuZGxlcihoYW5kbGVyOiBTZXR0aW5nQ2hhbmdlSGFuZGxlciB8IG51bGwpOiB2b2lkIHtcbiAgc2V0dGluZ0NoYW5nZUhhbmRsZXIgPSBoYW5kbGVyO1xufVxuXG5mdW5jdGlvbiBub3RpZnlTZXR0aW5nQ2hhbmdlZChrZXk6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIHNldHRpbmdDaGFuZ2VIYW5kbGVyPy4oa2V5KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgbG9nZ2VyLndhcm4oYHNldHRpbmcgY2hhbmdlIGhhbmRsZXIgZmFpbGVkIGZvciAke2tleX06ICR7bWVzc2FnZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFNldHRpbmdzKHBlcnNpc3RlbmNlOiBTZXR0aW5nUGVyc2lzdGVuY2UgPSBTZXR0aW5nTW9kZWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjYWNoZSA9IGF3YWl0IHBlcnNpc3RlbmNlLmZpbmRBbGxBc01hcCgpO1xuICAgIGxvZ2dlci5pbmZvKGBzZXR0aW5ncyBsb2FkZWQ6ICR7Y2FjaGUuc2l6ZX0gc3RvcmVkYCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyDthYzsnbTruJTsnbQg7JWE7KeBIOyXhuuKlCDrsLDtj6wo66eI7J206re466CI7J207IWYIOyghCnsl5DshJzrj4Qg7ISc67KE64qUIOuWoOyVvCDtlZzri6QuXG4gICAgY2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgbG9nZ2VyLndhcm4oYHNldHRpbmdzIGxvYWQgZmFpbGVkLCB1c2luZyBlbnYgb25seTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgfVxufVxuXG4vKiogREIg4oaSIGVudiDsiJwuIOuRmCDri6Qg7JeG7Jy866m0IHVuZGVmaW5lZCDrnbwg7Zi47Lac67aA7J2YIOq4sOuzuOqwkuycvOuhnCDrlqjslrTsp4Tri6QuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dGluZyhrZXk6IHN0cmluZywgZW52S2V5Pzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGNhY2hlPy5nZXQoa2V5KSA/PyAoZW52S2V5ID8gcHJvY2Vzcy5lbnZbZW52S2V5XSA6IHVuZGVmaW5lZCk7XG59XG5cbi8qKiDsoIDsnqXrkJwg6rCS7J247KeAIOKAlCDtmZTrqbTsl5DshJwg7Lac7LKY66W8IOq1rOu2hO2VtCDrs7Tsl6zspIDri6QuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdG9yZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNhY2hlPy5oYXMoa2V5KSA/PyBmYWxzZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVTZXR0aW5nKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZyxcbiAgcGVyc2lzdGVuY2U6IFNldHRpbmdQZXJzaXN0ZW5jZSA9IFNldHRpbmdNb2RlbCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBwZXJzaXN0ZW5jZS5zZXRCeUtleShrZXksIHZhbHVlKTtcbiAgY2FjaGUgPz89IG5ldyBNYXAoKTtcbiAgY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICBub3RpZnlTZXR0aW5nQ2hhbmdlZChrZXkpO1xufVxuXG4vKiog7KCA7J6l6rCS7J2EIOyngOybjCBlbnYg6riw67O46rCS7Jy866GcIOuQmOuPjOumsOuLpC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNldFNldHRpbmcoXG4gIGtleTogc3RyaW5nLFxuICBwZXJzaXN0ZW5jZTogU2V0dGluZ1BlcnNpc3RlbmNlID0gU2V0dGluZ01vZGVsLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHBlcnNpc3RlbmNlLmNsZWFyQnlLZXkoa2V5KTtcbiAgY2FjaGU/LmRlbGV0ZShrZXkpO1xuICBub3RpZnlTZXR0aW5nQ2hhbmdlZChrZXkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQWVBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyxTQUFTLENBQUM7O0FBRzdDLElBQUksUUFBb0M7QUFPeEMsSUFBSSx1QkFBb0Q7Ozs7O0FBTXhELFNBQWdCLHdCQUF3QixTQUE0QztDQUNsRix1QkFBdUI7QUFDekI7QUFFQSxTQUFTLHFCQUFxQixLQUFtQjtDQUMvQyxJQUFJO0VBQ0YsdUJBQXVCLEdBQUc7Q0FDNUIsU0FBUyxHQUFHO0VBQ1YsTUFBTSxVQUFVLGFBQWEsUUFBUSxFQUFFLFVBQVUsT0FBTyxDQUFDO0VBQ3pELE9BQU8sS0FBSyxxQ0FBcUMsSUFBSSxJQUFJLFNBQVM7Q0FDcEU7QUFDRjtBQUVBLGVBQXNCLGFBQWEsY0FBa0MsY0FBNkI7Q0FDaEcsSUFBSTtFQUNGLFFBQVEsTUFBTSxZQUFZLGFBQWE7RUFDdkMsT0FBTyxLQUFLLG9CQUFvQixNQUFNLEtBQUssUUFBUTtDQUNyRCxTQUFTLEdBQUc7RUFFVix3QkFBUSxJQUFJLElBQUk7RUFDaEIsT0FBTyxLQUFLLHlDQUEwQyxFQUFZLFNBQVM7Q0FDN0U7QUFDRjs7QUFHQSxTQUFnQixXQUFXLEtBQWEsUUFBcUM7Q0FDM0UsT0FBTyxPQUFPLElBQUksR0FBRyxNQUFNLFNBQVMsUUFBUSxJQUFJLFVBQVU7QUFDNUQ7O0FBR0EsU0FBZ0IsU0FBUyxLQUFzQjtDQUM3QyxPQUFPLE9BQU8sSUFBSSxHQUFHLEtBQUs7QUFDNUI7QUFFQSxlQUFzQixZQUNwQixLQUNBLE9BQ0EsY0FBa0MsY0FDbkI7Q0FDZixNQUFNLFlBQVksU0FBUyxLQUFLLEtBQUs7Q0FDckMsMEJBQVUsSUFBSSxJQUFJO0NBQ2xCLE1BQU0sSUFBSSxLQUFLLEtBQUs7Q0FDcEIscUJBQXFCLEdBQUc7QUFDMUI7O0FBR0EsZUFBc0IsYUFDcEIsS0FDQSxjQUFrQyxjQUNuQjtDQUNmLE1BQU0sWUFBWSxXQUFXLEdBQUc7Q0FDaEMsT0FBTyxPQUFPLEdBQUc7Q0FDakIscUJBQXFCLEdBQUc7QUFDMUIifQ==
|