@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.
Files changed (86) hide show
  1. package/bundle/dist/application/qgrid/qgrid.frame.js +67 -30
  2. package/bundle/dist/application/qgrid/qgrid.types.js +6 -3
  3. package/bundle/dist/application/qgrid/token-trigger-setup.js +3 -2
  4. package/bundle/dist/application/qgrid/token-window-keepalive.js +10 -4
  5. package/bundle/dist/application/request-log/request-log.model.js +2 -2
  6. package/bundle/dist/application/setting/setting.constant.js +8 -4
  7. package/bundle/dist/application/setting/setting.model.js +4 -3
  8. package/bundle/dist/application/setting/setting.store.js +2 -2
  9. package/bundle/dist/application/setting/setting.types.js +4 -2
  10. package/bundle/dist/application/sonamu.generated.js +5 -3
  11. package/bundle/dist/application/sonamu.generated.sso.js +3 -2
  12. package/bundle/dist/application/token/token.model.js +7 -2
  13. package/bundle/dist/application/token/token.types.js +3 -2
  14. package/bundle/dist/i18n/sd.generated.js +2 -1
  15. package/bundle/dist/migrations/20260820153531_alter_tokens_add1_alter1.js +15 -0
  16. package/bundle/dist/sonamu.config.js +3 -1
  17. package/bundle/dist/utils/providers/openai/openai-callback-relay.js +86 -0
  18. package/bundle/dist/utils/providers/openai/openai-quota.js +4 -3
  19. package/bundle/src/application/qgrid/qgrid-oauth-redirect.test.ts +71 -8
  20. package/bundle/src/application/qgrid/qgrid.frame.test.ts +52 -0
  21. package/bundle/src/application/qgrid/qgrid.frame.ts +74 -26
  22. package/bundle/src/application/qgrid/qgrid.types.ts +4 -1
  23. package/bundle/src/application/qgrid/token-trigger-setup.test.ts +6 -0
  24. package/bundle/src/application/qgrid/token-trigger-setup.ts +2 -1
  25. package/bundle/src/application/qgrid/token-window-keepalive.test.ts +23 -2
  26. package/bundle/src/application/qgrid/token-window-keepalive.ts +13 -3
  27. package/bundle/src/application/request-log/request-log.model.test.ts +25 -0
  28. package/bundle/src/application/request-log/request-log.model.ts +3 -1
  29. package/bundle/src/application/setting/setting.constant.test.ts +2 -2
  30. package/bundle/src/application/setting/setting.constant.ts +8 -3
  31. package/bundle/src/application/setting/setting.model.ts +13 -2
  32. package/bundle/src/application/setting/setting.store.ts +2 -2
  33. package/bundle/src/application/setting/setting.types.ts +2 -0
  34. package/bundle/src/application/sonamu.generated.http +9 -4
  35. package/bundle/src/application/sonamu.generated.sso.ts +1 -0
  36. package/bundle/src/application/sonamu.generated.ts +3 -0
  37. package/bundle/src/application/token/token.entity.json +8 -1
  38. package/bundle/src/application/token/token.model.test.ts +29 -0
  39. package/bundle/src/application/token/token.model.ts +10 -1
  40. package/bundle/src/application/token/token.types.test.ts +10 -0
  41. package/bundle/src/application/token/token.types.ts +1 -0
  42. package/bundle/src/i18n/sd.generated.ts +1 -0
  43. package/bundle/src/migrations/20260820153531_alter_tokens_add1_alter1.ts +15 -0
  44. package/bundle/src/sonamu.config.ts +2 -0
  45. package/bundle/src/utils/providers/openai/openai-callback-relay.test.ts +109 -0
  46. package/bundle/src/utils/providers/openai/openai-callback-relay.ts +105 -0
  47. package/bundle/src/utils/providers/openai/openai-quota.test.ts +31 -0
  48. package/bundle/src/utils/providers/openai/openai-quota.ts +8 -2
  49. package/bundle/web-dist/client/assets/index-BshX4Gd8.css +1 -0
  50. package/bundle/web-dist/client/assets/{index-BbOyk01G.js → index-D59Q_9Z4.js} +4 -4
  51. package/bundle/web-dist/client/assets/{logs-B7Pc88bf.js → logs-BHVfI8ut.js} +1 -1
  52. package/bundle/web-dist/client/assets/{monit-CzMV4lZf.js → monit-EkLxH1oN.js} +1 -1
  53. package/bundle/web-dist/client/assets/{routes-COWTRxZo.js → routes-Kbvuclip.js} +2 -2
  54. package/bundle/web-dist/client/assets/{services.generated-CA7oRRYY.js → services.generated-Da1Eq5_R.js} +1 -1
  55. package/bundle/web-dist/client/assets/settings-B4uTFP3J.js +1 -0
  56. package/bundle/web-dist/client/assets/{show-YvdybkKd.js → show-BjIdSPTd.js} +1 -1
  57. package/bundle/web-dist/client/assets/tokens-BbCSxbFu.js +1 -0
  58. package/bundle/web-dist/client/assets/use-oauth-login-flow-4OltfVAd.js +1 -0
  59. package/bundle/web-dist/client/assets/use-update-token-mutation-CZ57EKA1.js +1 -0
  60. package/bundle/web-dist/client/index.html +3 -3
  61. package/bundle/web-dist/server/assets/{lazyRouteComponent-tS-rTksX.js → lazyRouteComponent-V1S8gqMS.js} +2 -2
  62. package/bundle/web-dist/server/assets/{logs-ttf79emP.js → logs-2Tkqcncq.js} +2 -2
  63. package/bundle/web-dist/server/assets/{monit-CJBUH0l6.js → monit-DrJ15xJL.js} +2 -2
  64. package/bundle/web-dist/server/assets/{plus-BuSuoeon.js → plus-DCai02Na.js} +1 -1
  65. package/bundle/web-dist/server/assets/{react-dom-7_SqhNWR.js → react-dom-BFiG5Daf.js} +1 -1
  66. package/bundle/web-dist/server/assets/{routes-z79f1sOM.js → routes-Ct3I9263.js} +7 -5
  67. package/bundle/web-dist/server/assets/{services.generated-B5UkNmgc.js → services.generated-y7xVOTCo.js} +4 -2
  68. package/bundle/web-dist/server/assets/{settings-CIYR7h3G.js → settings-JznSjwGQ.js} +79 -5
  69. package/bundle/web-dist/server/assets/{show-CLrA4ZQ-.js → show-D8kuAFbc.js} +2 -2
  70. package/bundle/web-dist/server/assets/{tokens-BwlkZELV.js → tokens-PR42jF1J.js} +6 -4
  71. package/bundle/web-dist/server/assets/{use-oauth-login-flow-B2QllVMi.js → use-oauth-login-flow-C-33Z5HA.js} +18 -17
  72. package/bundle/web-dist/server/assets/use-update-token-mutation-BNaRPVaX.js +7 -0
  73. package/bundle/web-dist/server/entry-server.generated.js +10 -10
  74. package/dist/cli.js +10 -11
  75. package/package.json +1 -1
  76. package/skills/qgrid/references/ai-sdk-provider-contract.md +2 -0
  77. package/skills/qgrid/references/cli-env-and-server-boot.md +2 -1
  78. package/skills/qgrid/references/openai-codex-runtime.md +12 -5
  79. package/skills/qgrid/references/request-log-run-lifecycle.md +2 -0
  80. package/skills/qgrid/references/sonamu-api-web-flow.md +2 -0
  81. package/skills/qgrid/references/token-auth-quota-lifecycle.md +27 -1
  82. package/bundle/web-dist/client/assets/index-D9xE_tO7.css +0 -1
  83. package/bundle/web-dist/client/assets/settings-Dpaosy-o.js +0 -1
  84. package/bundle/web-dist/client/assets/tokens-DynVDx0c.js +0 -1
  85. package/bundle/web-dist/client/assets/use-oauth-login-flow-OzmHElsE.js +0 -1
  86. /package/bundle/web-dist/client/assets/{plus-DqBd6gHk.js → plus-p4vtg6LN.js} +0 -0
@@ -175,7 +175,9 @@ const CreateRunInput = z.object({
175
175
  modelName: z.string().optional(),
176
176
  effort: z.string().optional(),
177
177
  projectName: z.string().optional(),
178
- history: z.string().optional()
178
+ history: z.string().optional(),
179
+ isStructured: z.boolean().optional(),
180
+ jsonSchema: z.string().nullable().optional()
179
181
  });
180
182
  const AppendStepInput = z.object({
181
183
  requestLogId: z.number(),
@@ -227,7 +229,8 @@ const FinishRunInput = z.object({
227
229
  costSource: CostSource.optional(),
228
230
  totalDurationMs: z.number().optional(),
229
231
  history: z.string().optional(),
230
- errorMessage: z.string().optional()
232
+ errorMessage: z.string().optional(),
233
+ responseJsonOk: z.boolean().optional()
231
234
  });
232
235
  const TokenStats = z.object({
233
236
  token: z.string(),
@@ -289,4 +292,4 @@ function maskToken(token) {
289
292
  //#endregion
290
293
  export { AppendStepInput, CostSource, CreateRunInput, Effort, FinishReason, FinishRunInput, HealthResponse, ImageGenerationOptions, ImageGenerationQuality, ImageGenerationSize, MAX_QUERY_TIMEOUT_MS, ModelFallback, OAuthStartResult, ProcessError, ProviderStartupState, QgridContent, QgridInputPart, QgridRunContext, QgridThreadCoord, QgridTool, QgridToolResultInput, QueryInput, QueryOutput, QueryTimeoutMs, QuotaError, QuotaThresholdExceededError, ReasoningSummary, ServiceTier, StreamEvents, SubscriberStatus, TimeoutError, TokenStats, UsageResponse, Verbosity, maskToken };
291
294
 
292
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2wgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlucHV0U2NoZW1hOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUb29sID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkQ29udGVudCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ0ZXh0XCIpLFxuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidG9vbC1jYWxsXCIpLFxuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgLy8gQ29kZXggaW1hZ2VfZ2VuZXJhdGlvbiByZXN1bHQgYmFzZTY0LiBxZ3JpZCDripQg7Y+s66e3L+2ZleyepeyekCDssYXsnoTsnYQg7KeA7KeAIOyViuuKlOuLpC5cbiAgICBkYXRhOiB6LnN0cmluZygpLFxuICAgIHJldmlzZWRQcm9tcHQ6IHouc3RyaW5nKCkubnVsbGlzaCgpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRDb250ZW50ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRDb250ZW50PjtcblxuZXhwb3J0IGNvbnN0IEZpbmlzaFJlYXNvbiA9IHouZW51bShbXCJzdG9wXCIsIFwidG9vbC1jYWxsc1wiXSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSZWFzb24gPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSZWFzb24+O1xuXG5leHBvcnQgY29uc3QgVmVyYm9zaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgVmVyYm9zaXR5ID0gei5pbmZlcjx0eXBlb2YgVmVyYm9zaXR5PjtcblxuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1N1bW1hcnkgPSB6LmVudW0oW1wiYXV0b1wiLCBcImNvbmNpc2VcIiwgXCJkZXRhaWxlZFwiLCBcIm5vbmVcIl0pO1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nU3VtbWFyeSA9IHouaW5mZXI8dHlwZW9mIFJlYXNvbmluZ1N1bW1hcnk+O1xuXG5leHBvcnQgY29uc3QgU2VydmljZVRpZXIgPSB6LmVudW0oW1wiZmFzdFwiLCBcImZsZXhcIl0pO1xuZXhwb3J0IHR5cGUgU2VydmljZVRpZXIgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aWNlVGllcj47XG5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25RdWFsaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblF1YWxpdHk+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouZW51bShbXCIxMDI0eDEwMjRcIiwgXCIxMDI0eDE1MzZcIiwgXCIxNTM2eDEwMjRcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblNpemU+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgcXVhbGl0eTogSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eS5vcHRpb25hbCgpLFxuICBzaXplOiBJbWFnZUdlbmVyYXRpb25TaXplLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25PcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkSW5wdXRQYXJ0ID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRleHRcIiksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICB0ZXh0X2VsZW1lbnRzOiB6LmFycmF5KHoubmV2ZXIoKSkuZGVmYXVsdChbXSksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgdXJsOiB6LnN0cmluZygpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRJbnB1dFBhcnQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZElucHV0UGFydD47XG5cbmV4cG9ydCBjb25zdCBNQVhfUVVFUllfVElNRU9VVF9NUyA9IDMwICogNjBfMDAwO1xuZXhwb3J0IGNvbnN0IFF1ZXJ5VGltZW91dE1zID0gei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpLm1heChNQVhfUVVFUllfVElNRU9VVF9NUyk7XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIENvbnRleHQgKFNESyDihpQgU2VydmVyIGNvbnRyYWN0KSDilIDilIDilIBcblxuLy8gT3BlbkFJIGNhY2hlIGFmZmluaXR5IOyijO2RnCjqtawgY29kZXggdGhyZWFkIOyijO2RnCkuIHByb21wdF9jYWNoZV9rZXkg66W8IOqzoOygle2VtFxuLy8gT3BlbkFJIHByb21wdCBjYWNoaW5nIOydhCDsgrTrpqzquLAg7JyE7ZWcIO2VuOuTpC4g7ISc67KE6rCAIOuwnOq4ie2VmOqzoCDtgbTrnbzqsIAg64uk7J2MIOyalOyyreyXkCDqt7jrjIDroZwg7ZqM7Iah7ZWc64ukLlxuLy8g7ZW465OkIOuvuOyghOyGoSDsi5wg6riw7KG0IFwi66ekIHR1cm4g7IOIIHRocmVhZCArIGhpc3RvcnkgaW5qZWN0XCIg64+Z7J6R7Jy866GcIO2PtOuwsShRZ3JpZFJ1bkNvbnRleHQg7LC47KGwKS5cbmV4cG9ydCBjb25zdCBRZ3JpZFRocmVhZENvb3JkID0gei5vYmplY3Qoe1xuICB3b3JrZXJJZDogei5udW1iZXIoKSwgLy8g6rOg7KCVIOudvOyasO2MhSAodGhyZWFkIOuKlCB3b3JrZXIg7ZSE66Gc7IS47IqkIOuplOuqqOumrOyXkOunjCDsobTsnqwpXG4gIHRocmVhZElkOiB6LnN0cmluZygpLCAvLyBvcGFxdWUgY2FjaGUgYWZmaW5pdHkga2V5ID0gcHJvbXB0X2NhY2hlX2tleVxuICBlcG9jaDogei5udW1iZXIoKSwgLy8gd29ya2VyIHNwYXduIOy5tOyatO2EsC4gcmVzdGFydCDroZwgdGhyZWFkIOymneuwnCDqsJDsp4BcbiAgc3lzdGVtSGFzaDogei5zdHJpbmcoKSwgLy8gc3lzdGVtX3Byb21wdCDtlbTsi5wuIOuLpOuluCDrjIDtmZQg7Jik7KCR7IaNIOuwqeyngFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRocmVhZENvb3JkID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUaHJlYWRDb29yZD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFJ1bkNvbnRleHQgPSB6Lm9iamVjdCh7XG4gIC8vIHRvb2wtY2FsbCBydW7snYQg6rOE7IaN7ZWgIOuVjOunjCDrsJzquIkuIOydvOuwmCDrjIDtmZTripQgdGhyZWFkQ29vcmQg66eMIOyZleuztS5cbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRocmVhZENvb3JkOiBRZ3JpZFRocmVhZENvb3JkLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkUnVuQ29udGV4dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkUnVuQ29udGV4dD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHoub2JqZWN0KHtcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgdG9vbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0OiB6LnN0cmluZygpLFxuICBpc0Vycm9yOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkVG9vbFJlc3VsdElucHV0PjtcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5SW5wdXQgPSB6Lmxvb3NlT2JqZWN0KHtcbiAgc3lzdGVtOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb21wdDogei5zdHJpbmcoKSxcbiAgaW5wdXQ6IHouYXJyYXkoUWdyaWRJbnB1dFBhcnQpLm9wdGlvbmFsKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRpbWVvdXQ6IFF1ZXJ5VGltZW91dE1zLm9wdGlvbmFsKCksXG4gIGpzb25TY2hlbWE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbHM6IHouYXJyYXkoUWdyaWRUb29sKS5vcHRpb25hbCgpLFxuICBlZmZvcnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdmVyYm9zaXR5OiBWZXJib3NpdHkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nU3VtbWFyeTogUmVhc29uaW5nU3VtbWFyeS5vcHRpb25hbCgpLFxuICBzZXJ2aWNlVGllcjogU2VydmljZVRpZXIub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvLyDrgrTrtoDCt+uMgOyLnOuztOuTnCDtmLjstpzsmqkg7KeA7KCVIOyjvOyGjC4g6rO16rCcIEFJIFNESyBwcm92aWRlciBvcHRpb25zIOyXkOuKlCDrhbjstpztlZjsp4Ag7JWK64qU64ukLlxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLy8gU0RLLWRlcml2ZWQgb3BhcXVlIGFmZmluaXR5LiBJdCBpcyBpbnRlbnRpb25hbGx5IGRpc3RpbmN0IGZyb20gdGhlIGNhbGxlcidzIHNlc3Npb25LZXkuXG4gIGNhY2hlQWZmaW5pdHlLZXk6IHpcbiAgICAuc3RyaW5nKClcbiAgICAucmVnZXgoL15bMC05YS1mXXs2NH0kLylcbiAgICAub3B0aW9uYWwoKSxcbiAgLy8g7IOd65617ZWY66m0IOuhnOq5he2VnOuLpC4gZmFsc2XripQgcmVxdWVzdCBsb2cg7JOw6riw66eMIOuBhOqzoCBkaXNwYXRjaC90aHJlYWTripQg7Jyg7KeA7ZWc64ukLlxuICBsb2dnZXI6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHJ1bkNvbnRleHQ6IFFncmlkUnVuQ29udGV4dC5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0czogei5hcnJheShRZ3JpZFRvb2xSZXN1bHRJbnB1dCkub3B0aW9uYWwoKSxcbiAgLy8gT3BlbkFJIFJlc3BvbnNlcyBpbWFnZV9nZW5lcmF0aW9uIHRvb2wg7J2EIOy8oOuLpChPcGVuQUkg6rK966GcIOyghOyaqSwgb3B0LWluLCBub24tc3RyZWFtKS5cbiAgaW1hZ2VHZW5lcmF0aW9uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAvLyBxZ3JpZCDqsIDqsqkg7LaU7KCVIOuwjyBDb2RleCDsnbTrr7jsp4Ag7JqU7LKtIO2ejO2KuC4g7J2066+47KeAIOuqqOuNuOydgCBncHQtaW1hZ2UtMiDroZwg6rOg7KCVIOqwgOygle2VnOuLpC5cbiAgaW1hZ2VHZW5lcmF0aW9uT3B0aW9uczogSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucy5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRdWVyeUlucHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBNb2RlbEZhbGxiYWNrID0gei5vYmplY3Qoe1xuICB0cmlnZ2VyOiB6LmxpdGVyYWwoXCJyZWZ1c2FsXCIpLFxuICBmcm9tTW9kZWw6IHouc3RyaW5nKCksXG4gIHRvTW9kZWw6IHouc3RyaW5nKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4cGxhbmF0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIE1vZGVsRmFsbGJhY2sgPSB6LmluZmVyPHR5cGVvZiBNb2RlbEZhbGxiYWNrPjtcblxuZXhwb3J0IGNvbnN0IENvc3RTb3VyY2UgPSB6LmVudW0oW1wicHJvdmlkZXJcIiwgXCJwcmljaW5nX3RhYmxlXCIsIFwibWl4ZWRcIl0pO1xuZXhwb3J0IHR5cGUgQ29zdFNvdXJjZSA9IHouaW5mZXI8dHlwZW9mIENvc3RTb3VyY2U+O1xuXG5leHBvcnQgY29uc3QgUXVlcnlPdXRwdXQgPSB6Lm9iamVjdCh7XG4gIHRleHQ6IHouc3RyaW5nKCksXG4gIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgZmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24sXG4gIHRva2VuTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXF1ZXN0ZWRNb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbEZhbGxiYWNrczogei5hcnJheShNb2RlbEZhbGxiYWNrKS5vcHRpb25hbCgpLFxuICB1c2FnZTogei5vYmplY3Qoe1xuICAgIGlucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBvdXRwdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIHJlYXNvbmluZ190b2tlbnM6IHoubnVtYmVyKCksXG4gICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzVtX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICB9KSxcbiAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLFxuICBjb3N0VXNkOiB6Lm51bWJlcigpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLFxuICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUXVlcnlPdXRwdXQgPSB6LmluZmVyPHR5cGVvZiBRdWVyeU91dHB1dD47XG5cbi8vIOKUgOKUgOKUgCBTdHJlYW0gRXZlbnRzIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgU3RyZWFtRXZlbnRzID0gei5vYmplY3Qoe1xuICBkZWx0YTogei5vYmplY3QoeyB0ZXh0OiB6LnN0cmluZygpIH0pLFxuICB0b29sQ2FsbDogei5vYmplY3Qoe1xuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBkb25lOiB6Lm9iamVjdCh7XG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHJlcXVlc3RlZE1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbW9kZWxGYWxsYmFja3M6IHouYXJyYXkoTW9kZWxGYWxsYmFjaykub3B0aW9uYWwoKSxcbiAgICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbixcbiAgICB1c2FnZTogei5vYmplY3Qoe1xuICAgICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgb3V0cHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIHJlYXNvbmluZ190b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgfSksXG4gICAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgICB0dGZ0TXM6IHoubnVtYmVyKCksXG4gICAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgICBjb3N0U291cmNlOiBDb3N0U291cmNlLFxuICAgIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbiAgfSksXG4gIGVycm9yOiB6Lm9iamVjdCh7IG1lc3NhZ2U6IHouc3RyaW5nKCkgfSksXG59KTtcbmV4cG9ydCB0eXBlIFN0cmVhbUV2ZW50cyA9IHouaW5mZXI8dHlwZW9mIFN0cmVhbUV2ZW50cz47XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgQ3JlYXRlUnVuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHVzZXJQcm9tcHQ6IHouc3RyaW5nKCksXG4gIHN5c3RlbVByb21wdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb2plY3ROYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgQ3JlYXRlUnVuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBDcmVhdGVSdW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBBcHBlbmRTdGVwSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKSxcbiAgc3RlcEluZGV4OiB6Lm51bWJlcigpLFxuICB0eXBlOiB6LmVudW0oW1wiZ2VuZXJhdGVcIiwgXCJ0b29sX2NhbGxcIl0pLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkTW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZhbGxiYWNrQ291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlQ3JlYXRpb241bVRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uMWhUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLm9wdGlvbmFsKCksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgZmluaXNoUmVhc29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1RleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvb2xDYWxsSW5kZXg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sQXJnczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEFwcGVuZFN0ZXBJbnB1dCA9IHouaW5mZXI8dHlwZW9mIEFwcGVuZFN0ZXBJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBGaW5pc2hSdW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLFxuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZWVkZWRcIiwgXCJlcnJvclwiLCBcImFib3J0ZWRcIl0pLFxuICByZXNwb25zZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlcXVlc3RlZE1vZGVsTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmYWxsYmFja0NvdW50OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsSW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxPdXRwdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZVJlYWRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjVtVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjFoVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvc3RVc2Q6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFNvdXJjZTogQ29zdFNvdXJjZS5vcHRpb25hbCgpLFxuICB0b3RhbER1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlcnJvck1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgRmluaXNoUnVuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSdW5JbnB1dD47XG5cbi8vIOKUgOKUgOKUgCBUb2tlbiBNYW5hZ2VtZW50IOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgVG9rZW5TdGF0cyA9IHoub2JqZWN0KHtcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICByZXF1ZXN0czogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVG9rZW5TdGF0cyA9IHouaW5mZXI8dHlwZW9mIFRva2VuU3RhdHM+O1xuXG4vLyDilIDilIDilIAgT0F1dGgg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBPQXV0aFN0YXJ0UmVzdWx0ID0gei5vYmplY3Qoe1xuICBhdXRoVXJsOiB6LnN0cmluZygpLFxuICAvLyByZWRpcmVjdDog67iM65287Jqw7KCAIOyekOuPmSDrs7Xqt4Ao66Oo7ZSE67CxIOygkeyGjSkuIGNvZGU6IOy9mOyGlCDsvZzrsLEgKyDsvZTrk5wg67aZ7Jes64Sj6riwKOybkOqyqSDsoJHsho0pLlxuICAvLyBPcGVuQUkg6rK966Gc64qUIOqzoOyglSBsb29wYmFjayDsvZzrsLHsnZgg7KeB7KCRIFBLQ0Ug6528IO2VreyDgSByZWRpcmVjdCDrpbwg67CY7ZmY7ZWc64ukLlxuICBtb2RlOiB6LmVudW0oW1wicmVkaXJlY3RcIiwgXCJjb2RlXCJdKSxcbn0pO1xuZXhwb3J0IHR5cGUgT0F1dGhTdGFydFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIE9BdXRoU3RhcnRSZXN1bHQ+O1xuXG5jb25zdCBSYXRlV2luZG93ID0gelxuICAub2JqZWN0KHtcbiAgICB1dGlsaXphdGlvbjogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICAgIHJlc2V0c0F0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgd2luZG93RHVyYXRpb25NaW5zOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLm51bGxhYmxlKCk7XG5cbmV4cG9ydCBjb25zdCBVc2FnZVJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm92aWRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmaXZlSG91cjogUmF0ZVdpbmRvdy5vcHRpb25hbCgpLFxuICBzZXZlbkRheTogUmF0ZVdpbmRvdy5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBVc2FnZVJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgVXNhZ2VSZXNwb25zZT47XG5cbi8vIOKUgOKUgOKUgCBIZWFsdGgg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBTdWJzY3JpYmVyU3RhdHVzID0gei5vYmplY3Qoe1xuICBjb25uZWN0ZWQ6IHouYm9vbGVhbigpLFxuICBjb25uZWN0ZWRBdDogei5kYXRlKCkubnVsbGFibGUoKSxcbiAgbGFzdFJlY29uY2lsZUF0OiB6LmRhdGUoKS5udWxsYWJsZSgpLFxuICBhdHRlbXB0OiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBTdWJzY3JpYmVyU3RhdHVzID0gei5pbmZlcjx0eXBlb2YgU3Vic2NyaWJlclN0YXR1cz47XG5cbmV4cG9ydCBjb25zdCBQcm92aWRlclN0YXJ0dXBTdGF0ZSA9IHouZW51bShbXCJzdGFydGluZ1wiLCBcInJlYWR5XCIsIFwiZmFpbGVkXCJdKTtcbmV4cG9ydCB0eXBlIFByb3ZpZGVyU3RhcnR1cFN0YXRlID0gei5pbmZlcjx0eXBlb2YgUHJvdmlkZXJTdGFydHVwU3RhdGU+O1xuXG5leHBvcnQgY29uc3QgSGVhbHRoUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5zdHJpbmcoKSxcbiAgYWN0aXZlVG9rZW5zOiB6Lm51bWJlcigpLFxuICBzdWJzY3JpYmVyOiBTdWJzY3JpYmVyU3RhdHVzLm51bGxhYmxlKCksXG4gIC8vIEhUVFAg66as7Iqk64ud7J2AIGRpc3BhdGNoZXIg6riw64+Z67O064ukIOuovOyggCDsl7TrprDri6QuIDIwMCDsnZHri7Xrp4zsnLzroZzripQg7JqU7LKt7J2EIOyymOumrO2VoCDsiJhcbiAgLy8g7J6I64qU7KeAIOyVjCDsiJgg7JeG7Ja0IHByb3ZpZGVyIOuzhCDspIDruYQg7IOB7YOc66W8IO2VqOq7mCDrhbjstpztlZzri6QuXG4gIHJlYWR5OiB6LmJvb2xlYW4oKSxcbiAgcHJvdmlkZXJzOiB6Lm9iamVjdCh7XG4gICAgb3BlbmFpOiBQcm92aWRlclN0YXJ0dXBTdGF0ZSxcbiAgICBhbnRocm9waWM6IFByb3ZpZGVyU3RhcnR1cFN0YXRlLFxuICB9KSxcbn0pO1xuZXhwb3J0IHR5cGUgSGVhbHRoUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBIZWFsdGhSZXNwb25zZT47XG5cbi8vIOKUgOKUgOKUgCBFcnJvcnMg4pSA4pSA4pSAXG5cbmV4cG9ydCBjbGFzcyBRdW90YUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJRVU9UQV9FWEhBVVNURURcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBRdW90YVRocmVzaG9sZEV4Y2VlZGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlFVT1RBX1RIUkVTSE9MRF9FWENFRURFRFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiVElNRU9VVFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUFJPQ0VTU19FUlJPUlwiIGFzIGNvbnN0O1xufVxuXG4vLyDilIDilIDilIAgVXRpbHMg4pSA4pSA4pSAXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXNrVG9rZW4odG9rZW46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b2tlbi5sZW5ndGggPiA0ID8gYC4uLiR7dG9rZW4uc2xpY2UoLTQpfWAgOiB0b2tlbjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFJQSxNQUFhLFNBQVMsRUFBRSxLQUFLO0NBQUM7Q0FBTztDQUFVO0FBQU0sQ0FBQztBQUd0RCxNQUFhLFlBQVksRUFBRSxPQUFPO0NBQ2hDLE1BQU0sRUFBRSxPQUFPO0NBQ2YsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDakMsYUFBYSxFQUFFLFFBQVE7QUFDekIsQ0FBQztBQUdELE1BQWEsZUFBZSxFQUFFLG1CQUFtQixRQUFRO0NBQ3ZELEVBQUUsT0FBTztFQUNQLE1BQU0sRUFBRSxRQUFRLE1BQU07RUFDdEIsTUFBTSxFQUFFLE9BQU87Q0FDakIsQ0FBQztDQUNELEVBQUUsT0FBTztFQUNQLE1BQU0sRUFBRSxRQUFRLFdBQVc7RUFDM0IsWUFBWSxFQUFFLE9BQU87RUFDckIsVUFBVSxFQUFFLE9BQU87RUFDbkIsT0FBTyxFQUFFLE9BQU87Q0FDbEIsQ0FBQztDQUNELEVBQUUsT0FBTztFQUNQLE1BQU0sRUFBRSxRQUFRLE9BQU87RUFFdkIsTUFBTSxFQUFFLE9BQU87RUFDZixlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUTtDQUNwQyxDQUFDO0FBQ0gsQ0FBQztBQUdELE1BQWEsZUFBZSxFQUFFLEtBQUssQ0FBQyxRQUFRLFlBQVksQ0FBQztBQUd6RCxNQUFhLFlB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
295
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2wgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlucHV0U2NoZW1hOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUb29sID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkQ29udGVudCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ0ZXh0XCIpLFxuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidG9vbC1jYWxsXCIpLFxuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgLy8gQ29kZXggaW1hZ2VfZ2VuZXJhdGlvbiByZXN1bHQgYmFzZTY0LiBxZ3JpZCDripQg7Y+s66e3L+2ZleyepeyekCDssYXsnoTsnYQg7KeA7KeAIOyViuuKlOuLpC5cbiAgICBkYXRhOiB6LnN0cmluZygpLFxuICAgIHJldmlzZWRQcm9tcHQ6IHouc3RyaW5nKCkubnVsbGlzaCgpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRDb250ZW50ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRDb250ZW50PjtcblxuZXhwb3J0IGNvbnN0IEZpbmlzaFJlYXNvbiA9IHouZW51bShbXCJzdG9wXCIsIFwidG9vbC1jYWxsc1wiXSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSZWFzb24gPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSZWFzb24+O1xuXG5leHBvcnQgY29uc3QgVmVyYm9zaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgVmVyYm9zaXR5ID0gei5pbmZlcjx0eXBlb2YgVmVyYm9zaXR5PjtcblxuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1N1bW1hcnkgPSB6LmVudW0oW1wiYXV0b1wiLCBcImNvbmNpc2VcIiwgXCJkZXRhaWxlZFwiLCBcIm5vbmVcIl0pO1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nU3VtbWFyeSA9IHouaW5mZXI8dHlwZW9mIFJlYXNvbmluZ1N1bW1hcnk+O1xuXG5leHBvcnQgY29uc3QgU2VydmljZVRpZXIgPSB6LmVudW0oW1wiZmFzdFwiLCBcImZsZXhcIl0pO1xuZXhwb3J0IHR5cGUgU2VydmljZVRpZXIgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aWNlVGllcj47XG5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25RdWFsaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblF1YWxpdHk+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouZW51bShbXCIxMDI0eDEwMjRcIiwgXCIxMDI0eDE1MzZcIiwgXCIxNTM2eDEwMjRcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblNpemU+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgcXVhbGl0eTogSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eS5vcHRpb25hbCgpLFxuICBzaXplOiBJbWFnZUdlbmVyYXRpb25TaXplLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25PcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkSW5wdXRQYXJ0ID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRleHRcIiksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICB0ZXh0X2VsZW1lbnRzOiB6LmFycmF5KHoubmV2ZXIoKSkuZGVmYXVsdChbXSksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgdXJsOiB6LnN0cmluZygpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRJbnB1dFBhcnQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZElucHV0UGFydD47XG5cbmV4cG9ydCBjb25zdCBNQVhfUVVFUllfVElNRU9VVF9NUyA9IDMwICogNjBfMDAwO1xuZXhwb3J0IGNvbnN0IFF1ZXJ5VGltZW91dE1zID0gei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpLm1heChNQVhfUVVFUllfVElNRU9VVF9NUyk7XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIENvbnRleHQgKFNESyDihpQgU2VydmVyIGNvbnRyYWN0KSDilIDilIDilIBcblxuLy8gT3BlbkFJIGNhY2hlIGFmZmluaXR5IOyijO2RnCjqtawgY29kZXggdGhyZWFkIOyijO2RnCkuIHByb21wdF9jYWNoZV9rZXkg66W8IOqzoOygle2VtFxuLy8gT3BlbkFJIHByb21wdCBjYWNoaW5nIOydhCDsgrTrpqzquLAg7JyE7ZWcIO2VuOuTpC4g7ISc67KE6rCAIOuwnOq4ie2VmOqzoCDtgbTrnbzqsIAg64uk7J2MIOyalOyyreyXkCDqt7jrjIDroZwg7ZqM7Iah7ZWc64ukLlxuLy8g7ZW465OkIOuvuOyghOyGoSDsi5wg6riw7KG0IFwi66ekIHR1cm4g7IOIIHRocmVhZCArIGhpc3RvcnkgaW5qZWN0XCIg64+Z7J6R7Jy866GcIO2PtOuwsShRZ3JpZFJ1bkNvbnRleHQg7LC47KGwKS5cbmV4cG9ydCBjb25zdCBRZ3JpZFRocmVhZENvb3JkID0gei5vYmplY3Qoe1xuICB3b3JrZXJJZDogei5udW1iZXIoKSwgLy8g6rOg7KCVIOudvOyasO2MhSAodGhyZWFkIOuKlCB3b3JrZXIg7ZSE66Gc7IS47IqkIOuplOuqqOumrOyXkOunjCDsobTsnqwpXG4gIHRocmVhZElkOiB6LnN0cmluZygpLCAvLyBvcGFxdWUgY2FjaGUgYWZmaW5pdHkga2V5ID0gcHJvbXB0X2NhY2hlX2tleVxuICBlcG9jaDogei5udW1iZXIoKSwgLy8gd29ya2VyIHNwYXduIOy5tOyatO2EsC4gcmVzdGFydCDroZwgdGhyZWFkIOymneuwnCDqsJDsp4BcbiAgc3lzdGVtSGFzaDogei5zdHJpbmcoKSwgLy8gc3lzdGVtX3Byb21wdCDtlbTsi5wuIOuLpOuluCDrjIDtmZQg7Jik7KCR7IaNIOuwqeyngFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRocmVhZENvb3JkID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUaHJlYWRDb29yZD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFJ1bkNvbnRleHQgPSB6Lm9iamVjdCh7XG4gIC8vIHRvb2wtY2FsbCBydW7snYQg6rOE7IaN7ZWgIOuVjOunjCDrsJzquIkuIOydvOuwmCDrjIDtmZTripQgdGhyZWFkQ29vcmQg66eMIOyZleuztS5cbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRocmVhZENvb3JkOiBRZ3JpZFRocmVhZENvb3JkLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkUnVuQ29udGV4dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkUnVuQ29udGV4dD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHoub2JqZWN0KHtcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgdG9vbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0OiB6LnN0cmluZygpLFxuICBpc0Vycm9yOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkVG9vbFJlc3VsdElucHV0PjtcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5SW5wdXQgPSB6Lmxvb3NlT2JqZWN0KHtcbiAgc3lzdGVtOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb21wdDogei5zdHJpbmcoKSxcbiAgaW5wdXQ6IHouYXJyYXkoUWdyaWRJbnB1dFBhcnQpLm9wdGlvbmFsKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRpbWVvdXQ6IFF1ZXJ5VGltZW91dE1zLm9wdGlvbmFsKCksXG4gIGpzb25TY2hlbWE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbHM6IHouYXJyYXkoUWdyaWRUb29sKS5vcHRpb25hbCgpLFxuICBlZmZvcnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdmVyYm9zaXR5OiBWZXJib3NpdHkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nU3VtbWFyeTogUmVhc29uaW5nU3VtbWFyeS5vcHRpb25hbCgpLFxuICBzZXJ2aWNlVGllcjogU2VydmljZVRpZXIub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvLyDrgrTrtoDCt+uMgOyLnOuztOuTnCDtmLjstpzsmqkg7KeA7KCVIOyjvOyGjC4g6rO16rCcIEFJIFNESyBwcm92aWRlciBvcHRpb25zIOyXkOuKlCDrhbjstpztlZjsp4Ag7JWK64qU64ukLlxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLy8gU0RLLWRlcml2ZWQgb3BhcXVlIGFmZmluaXR5LiBJdCBpcyBpbnRlbnRpb25hbGx5IGRpc3RpbmN0IGZyb20gdGhlIGNhbGxlcidzIHNlc3Npb25LZXkuXG4gIGNhY2hlQWZmaW5pdHlLZXk6IHpcbiAgICAuc3RyaW5nKClcbiAgICAucmVnZXgoL15bMC05YS1mXXs2NH0kLylcbiAgICAub3B0aW9uYWwoKSxcbiAgLy8g7IOd65617ZWY66m0IOuhnOq5he2VnOuLpC4gZmFsc2XripQgcmVxdWVzdCBsb2cg7JOw6riw66eMIOuBhOqzoCBkaXNwYXRjaC90aHJlYWTripQg7Jyg7KeA7ZWc64ukLlxuICBsb2dnZXI6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHJ1bkNvbnRleHQ6IFFncmlkUnVuQ29udGV4dC5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0czogei5hcnJheShRZ3JpZFRvb2xSZXN1bHRJbnB1dCkub3B0aW9uYWwoKSxcbiAgLy8gT3BlbkFJIFJlc3BvbnNlcyBpbWFnZV9nZW5lcmF0aW9uIHRvb2wg7J2EIOy8oOuLpChPcGVuQUkg6rK966GcIOyghOyaqSwgb3B0LWluLCBub24tc3RyZWFtKS5cbiAgaW1hZ2VHZW5lcmF0aW9uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAvLyBxZ3JpZCDqsIDqsqkg7LaU7KCVIOuwjyBDb2RleCDsnbTrr7jsp4Ag7JqU7LKtIO2ejO2KuC4g7J2066+47KeAIOuqqOuNuOydgCBncHQtaW1hZ2UtMiDroZwg6rOg7KCVIOqwgOygle2VnOuLpC5cbiAgaW1hZ2VHZW5lcmF0aW9uT3B0aW9uczogSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucy5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRdWVyeUlucHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBNb2RlbEZhbGxiYWNrID0gei5vYmplY3Qoe1xuICB0cmlnZ2VyOiB6LmxpdGVyYWwoXCJyZWZ1c2FsXCIpLFxuICBmcm9tTW9kZWw6IHouc3RyaW5nKCksXG4gIHRvTW9kZWw6IHouc3RyaW5nKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4cGxhbmF0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIE1vZGVsRmFsbGJhY2sgPSB6LmluZmVyPHR5cGVvZiBNb2RlbEZhbGxiYWNrPjtcblxuZXhwb3J0IGNvbnN0IENvc3RTb3VyY2UgPSB6LmVudW0oW1wicHJvdmlkZXJcIiwgXCJwcmljaW5nX3RhYmxlXCIsIFwibWl4ZWRcIl0pO1xuZXhwb3J0IHR5cGUgQ29zdFNvdXJjZSA9IHouaW5mZXI8dHlwZW9mIENvc3RTb3VyY2U+O1xuXG5leHBvcnQgY29uc3QgUXVlcnlPdXRwdXQgPSB6Lm9iamVjdCh7XG4gIHRleHQ6IHouc3RyaW5nKCksXG4gIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgZmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24sXG4gIHRva2VuTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXF1ZXN0ZWRNb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbEZhbGxiYWNrczogei5hcnJheShNb2RlbEZhbGxiYWNrKS5vcHRpb25hbCgpLFxuICB1c2FnZTogei5vYmplY3Qoe1xuICAgIGlucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBvdXRwdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIHJlYXNvbmluZ190b2tlbnM6IHoubnVtYmVyKCksXG4gICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzVtX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICB9KSxcbiAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLFxuICBjb3N0VXNkOiB6Lm51bWJlcigpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLFxuICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUXVlcnlPdXRwdXQgPSB6LmluZmVyPHR5cGVvZiBRdWVyeU91dHB1dD47XG5cbi8vIOKUgOKUgOKUgCBTdHJlYW0gRXZlbnRzIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgU3RyZWFtRXZlbnRzID0gei5vYmplY3Qoe1xuICBkZWx0YTogei5vYmplY3QoeyB0ZXh0OiB6LnN0cmluZygpIH0pLFxuICB0b29sQ2FsbDogei5vYmplY3Qoe1xuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBkb25lOiB6Lm9iamVjdCh7XG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHJlcXVlc3RlZE1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbW9kZWxGYWxsYmFja3M6IHouYXJyYXkoTW9kZWxGYWxsYmFjaykub3B0aW9uYWwoKSxcbiAgICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbixcbiAgICB1c2FnZTogei5vYmplY3Qoe1xuICAgICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgb3V0cHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIHJlYXNvbmluZ190b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgfSksXG4gICAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgICB0dGZ0TXM6IHoubnVtYmVyKCksXG4gICAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgICBjb3N0U291cmNlOiBDb3N0U291cmNlLFxuICAgIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbiAgfSksXG4gIGVycm9yOiB6Lm9iamVjdCh7IG1lc3NhZ2U6IHouc3RyaW5nKCkgfSksXG59KTtcbmV4cG9ydCB0eXBlIFN0cmVhbUV2ZW50cyA9IHouaW5mZXI8dHlwZW9mIFN0cmVhbUV2ZW50cz47XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgQ3JlYXRlUnVuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHVzZXJQcm9tcHQ6IHouc3RyaW5nKCksXG4gIHN5c3RlbVByb21wdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb2plY3ROYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgaXNTdHJ1Y3R1cmVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBqc29uU2NoZW1hOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgQ3JlYXRlUnVuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBDcmVhdGVSdW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBBcHBlbmRTdGVwSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKSxcbiAgc3RlcEluZGV4OiB6Lm51bWJlcigpLFxuICB0eXBlOiB6LmVudW0oW1wiZ2VuZXJhdGVcIiwgXCJ0b29sX2NhbGxcIl0pLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkTW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZhbGxiYWNrQ291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlQ3JlYXRpb241bVRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uMWhUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLm9wdGlvbmFsKCksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgZmluaXNoUmVhc29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1RleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvb2xDYWxsSW5kZXg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sQXJnczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEFwcGVuZFN0ZXBJbnB1dCA9IHouaW5mZXI8dHlwZW9mIEFwcGVuZFN0ZXBJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBGaW5pc2hSdW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLFxuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZWVkZWRcIiwgXCJlcnJvclwiLCBcImFib3J0ZWRcIl0pLFxuICByZXNwb25zZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlcXVlc3RlZE1vZGVsTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmYWxsYmFja0NvdW50OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsSW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxPdXRwdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZVJlYWRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjVtVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjFoVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvc3RVc2Q6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFNvdXJjZTogQ29zdFNvdXJjZS5vcHRpb25hbCgpLFxuICB0b3RhbER1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlcnJvck1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVzcG9uc2VKc29uT2s6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEZpbmlzaFJ1bklucHV0ID0gei5pbmZlcjx0eXBlb2YgRmluaXNoUnVuSW5wdXQ+O1xuXG4vLyDilIDilIDilIAgVG9rZW4gTWFuYWdlbWVudCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFRva2VuU3RhdHMgPSB6Lm9iamVjdCh7XG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBuYW1lOiB6LnN0cmluZygpLFxuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcmVxdWVzdHM6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIFRva2VuU3RhdHMgPSB6LmluZmVyPHR5cGVvZiBUb2tlblN0YXRzPjtcblxuLy8g4pSA4pSA4pSAIE9BdXRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgT0F1dGhTdGFydFJlc3VsdCA9IHoub2JqZWN0KHtcbiAgYXV0aFVybDogei5zdHJpbmcoKSxcbiAgLy8gcmVkaXJlY3Q6IOu4jOudvOyasOyggCDsnpDrj5kg67O16reAKOujqO2UhOuwsSDsoJHsho0pLiBjb2RlOiDsvZjshpQg7L2c67CxICsg7L2U65OcIOu2meyXrOuEo+q4sCjsm5Dqsqkg7KCR7IaNKS5cbiAgLy8gT3BlbkFJIOybkOqyqSDqsr3roZzripQg65Ox66Gd65CcIGxvb3BiYWNrIGNhbGxiYWNrIFVSTCDsoITssrTrpbwg67aZ7Jes64Sj64qUIGNvZGUg66qo65Oc66W8IOyTtOuLpC5cbiAgbW9kZTogei5lbnVtKFtcInJlZGlyZWN0XCIsIFwiY29kZVwiXSksXG59KTtcbmV4cG9ydCB0eXBlIE9BdXRoU3RhcnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBPQXV0aFN0YXJ0UmVzdWx0PjtcblxuY29uc3QgUmF0ZVdpbmRvdyA9IHpcbiAgLm9iamVjdCh7XG4gICAgdXRpbGl6YXRpb246IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgICByZXNldHNBdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIHdpbmRvd0R1cmF0aW9uTWluczogei5udW1iZXIoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5udWxsYWJsZSgpO1xuXG5leHBvcnQgY29uc3QgVXNhZ2VSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZml2ZUhvdXI6IFJhdGVXaW5kb3cub3B0aW9uYWwoKSxcbiAgc2V2ZW5EYXk6IFJhdGVXaW5kb3cub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVXNhZ2VSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIFVzYWdlUmVzcG9uc2U+O1xuXG4vLyDilIDilIDilIAgSGVhbHRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgU3Vic2NyaWJlclN0YXR1cyA9IHoub2JqZWN0KHtcbiAgY29ubmVjdGVkOiB6LmJvb2xlYW4oKSxcbiAgY29ubmVjdGVkQXQ6IHouZGF0ZSgpLm51bGxhYmxlKCksXG4gIGxhc3RSZWNvbmNpbGVBdDogei5kYXRlKCkubnVsbGFibGUoKSxcbiAgYXR0ZW1wdDogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3Vic2NyaWJlclN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIFN1YnNjcmliZXJTdGF0dXM+O1xuXG5leHBvcnQgY29uc3QgUHJvdmlkZXJTdGFydHVwU3RhdGUgPSB6LmVudW0oW1wic3RhcnRpbmdcIiwgXCJyZWFkeVwiLCBcImZhaWxlZFwiXSk7XG5leHBvcnQgdHlwZSBQcm92aWRlclN0YXJ0dXBTdGF0ZSA9IHouaW5mZXI8dHlwZW9mIFByb3ZpZGVyU3RhcnR1cFN0YXRlPjtcblxuZXhwb3J0IGNvbnN0IEhlYWx0aFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouc3RyaW5nKCksXG4gIGFjdGl2ZVRva2Vuczogei5udW1iZXIoKSxcbiAgc3Vic2NyaWJlcjogU3Vic2NyaWJlclN0YXR1cy5udWxsYWJsZSgpLFxuICAvLyBIVFRQIOumrOyKpOuLneydgCBkaXNwYXRjaGVyIOq4sOuPmeuztOuLpCDrqLzsoIAg7Je066aw64ukLiAyMDAg7J2R64u166eM7Jy866Gc64qUIOyalOyyreydhCDsspjrpqztlaAg7IiYXG4gIC8vIOyeiOuKlOyngCDslYwg7IiYIOyXhuyWtCBwcm92aWRlciDrs4Qg7KSA67mEIOyDge2DnOulvCDtlajqu5gg64W47Lac7ZWc64ukLlxuICByZWFkeTogei5ib29sZWFuKCksXG4gIHByb3ZpZGVyczogei5vYmplY3Qoe1xuICAgIG9wZW5haTogUHJvdmlkZXJTdGFydHVwU3RhdGUsXG4gICAgYW50aHJvcGljOiBQcm92aWRlclN0YXJ0dXBTdGF0ZSxcbiAgfSksXG59KTtcbmV4cG9ydCB0eXBlIEhlYWx0aFJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgSGVhbHRoUmVzcG9uc2U+O1xuXG4vLyDilIDilIDilIAgRXJyb3JzIOKUgOKUgOKUgFxuXG5leHBvcnQgY2xhc3MgUXVvdGFFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUVVPVEFfRVhIQVVTVEVEXCIgYXMgY29uc3Q7XG59XG5leHBvcnQgY2xhc3MgUXVvdGFUaHJlc2hvbGRFeGNlZWRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJRVU9UQV9USFJFU0hPTERfRVhDRUVERURcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlRJTUVPVVRcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBQcm9jZXNzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlBST0NFU1NfRVJST1JcIiBhcyBjb25zdDtcbn1cblxuLy8g4pSA4pSA4pSAIFV0aWxzIOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gbWFza1Rva2VuKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9rZW4ubGVuZ3RoID4gNCA/IGAuLi4ke3Rva2VuLnNsaWNlKC00KX1gIDogdG9rZW47XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBSUEsTUFBYSxTQUFTLEVBQUUsS0FBSztDQUFDO0NBQU87Q0FBVTtBQUFNLENBQUM7QUFHdEQsTUFBYSxZQUFZLEVBQUUsT0FBTztDQUNoQyxNQUFNLEVBQUUsT0FBTztDQUNmLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2pDLGFBQWEsRUFBRSxRQUFRO0FBQ3pCLENBQUM7QUFHRCxNQUFhLGVBQWUsRUFBRSxtQkFBbUIsUUFBUTtDQUN2RCxFQUFFLE9BQU87RUFDUCxNQUFNLEVBQUUsUUFBUSxNQUFNO0VBQ3RCLE1BQU0sRUFBRSxPQUFPO0NBQ2pCLENBQUM7Q0FDRCxFQUFFLE9BQU87RUFDUCxNQUFNLEVBQUUsUUFBUSxXQUFXO0VBQzNCLFlBQVksRUFBRSxPQUFPO0VBQ3JCLFVBQVUsRUFBRSxPQUFPO0VBQ25CLE9BQU8sRUFBRSxPQUFPO0NBQ2xCLENBQUM7Q0FDRCxFQUFFLE9BQU87RUFDUCxNQUFNLEVBQUUsUUFBUSxPQUFPO0VBRXZCLE1BQU0sRUFBRSxPQUFPO0VBQ2YsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVE7Q0FDcEMsQ0FBQztBQUNILENBQUM7QUFHRCxNQUFhLGVBQWUsRUFBRSxLQUFLLENBQUMsUUFBUSxZQUFZLENBQUM7QUFHekQsTUFBYSxZQUFZLEVBQUUsS0FBSztDQUFDO0NBQU87Q0FBVTtBQUFNLENBQUM7QUFHekQsTUFBYSxtQkFBbUIsRUFBRSxLQUFLO0NBQUM7Q0FBUTtDQUFXO0NBQVk7QUFBTSxDQUFDO0FBRzlFLE1BQWEsY0FBYyxFQUFFLEtBQUssQ0FBQyxRQUFRLE1BQU0sQ0FBQztBQUdsRCxNQUFhLHlCQUF5QixFQUFFLEtBQUs7Q0FBQztDQUFPO0NBQVU7QUFBTSxDQUFDO0FBR3RFLE1BQWEsc0JBQXNCLEVBQUUsS0FBSztDQUFDO0NBQWE7Q0FBYTtBQUFXLENBQUM7QUFHakYsTUFBYSx5QkFBeUIsRUFBRSxPQUFPO0NBQzdDLFNBQVMsdUJBQXVCLFNBQVM7Q0FDekMsTUFBTSxvQkFBb0IsU0FBUztBQUNyQyxDQUFDO0FBR0QsTUFBYSxpQkFBaUIsRUFBRSxtQkFBbUIsUUFBUSxDQUN6RCxFQUFFLE9BQU87Q0FDUCxNQUFNLEVBQUUsUUFBUSxNQUFNO0NBQ3RCLE1BQU0sRUFBRSxPQUFPO0NBQ2YsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlDLENBQUMsR0FDRCxFQUFFLE9BQU87Q0FDUCxNQUFNLEVBQUUsUUFBUSxPQUFPO0NBQ3ZCLEtBQUssRUFBRSxPQUFPO0FBQ2hCLENBQUMsQ0FDSCxDQUFDO0FBR0QsTUFBYSx1QkFBdUIsS0FBSztBQUN6QyxNQUFhLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksb0JBQW9CO0FBT2xGLE1BQWEsbUJBQW1CLEVBQUUsT0FBTztDQUN2QyxVQUFVLEVBQUUsT0FBTztDQUNuQixVQUFVLEVBQUUsT0FBTztDQUNuQixPQUFPLEVBQUUsT0FBTztDQUNoQixZQUFZLEVBQUUsT0FBTztBQUN2QixDQUFDO0FBR0QsTUFBYSxrQkFBa0IsRUFBRSxPQUFPO0NBRXRDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2xDLGFBQWEsaUJBQWlCLFNBQVM7QUFDekMsQ0FBQztBQUdELE1BQWEsdUJBQXVCLEVBQUUsT0FBTztDQUMzQyxZQUFZLEVBQUUsT0FBTztDQUNyQixVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM5QixRQUFRLEVBQUUsT0FBTztDQUNqQixTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsU0FBUztBQUNoQyxDQUFDO0FBR0QsTUFBYSxhQUFhLEVBQUUsWUFBWTtDQUN0QyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM1QixRQUFRLEVBQUUsT0FBTztDQUNqQixPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUMsQ0FBQyxTQUFTO0NBQ3hDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzNCLFNBQVMsZUFBZSxTQUFTO0NBQ2pDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2hDLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQyxDQUFDLFNBQVM7Q0FDbkMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDNUIsV0FBVyxVQUFVLFNBQVM7Q0FDOUIsa0JBQWtCLGlCQUFpQixTQUFTO0NBQzVDLGFBQWEsWUFBWSxTQUFTO0NBQ2xDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzdCLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBRWpDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBRS9CLGtCQUFrQixFQUNmLE9BQU8sQ0FBQyxDQUNSLE1BQU0sZ0JBQWdCLENBQUMsQ0FDdkIsU0FBUztDQUVaLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTO0NBQzdCLFlBQVksZ0JBQWdCLFNBQVM7Q0FDckMsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUMsQ0FBQyxTQUFTO0NBRXBELGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVM7Q0FFdEMsd0JBQXdCLHVCQUF1QixTQUFTO0FBQzFELENBQUM7QUFHRCxNQUFhLGdCQUFnQixFQUFFLE9BQU87Q0FDcEMsU0FBUyxFQUFFLFFBQVEsU0FBUztDQUM1QixXQUFXLEVBQUUsT0FBTztDQUNwQixTQUFTLEVBQUUsT0FBTztDQUNsQixVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM5QixhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztBQUNuQyxDQUFDO0FBR0QsTUFBYSxhQUFhLEVBQUUsS0FBSztDQUFDO0NBQVk7Q0FBaUI7QUFBTyxDQUFDO0FBR3ZFLE1BQWEsY0FBYyxFQUFFLE9BQU87Q0FDbEMsTUFBTSxFQUFFLE9BQU87Q0FDZixTQUFTLEVBQUUsTUFBTSxZQUFZO0NBQzdCLGNBQWM7Q0FDZCxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMvQixPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMzQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3BDLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDLENBQUMsU0FBUztDQUNoRCxPQUFPLEVBQUUsT0FBTztFQUNkLGNBQWMsRUFBRSxPQUFPO0VBQ3ZCLGVBQWUsRUFBRSxPQUFPO0VBQ3hCLGtCQUFrQixFQUFFLE9BQU87RUFDM0IsNkJBQTZCLEVBQUUsT0FBTztFQUN0QyxnQ0FBZ0MsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0VBQ3BELGdDQUFnQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7RUFDcEQseUJBQXlCLEVBQUUsT0FBTztDQUNwQyxDQUFDO0NBQ0QsWUFBWSxFQUFFLE9BQU87Q0FDckIsUUFBUSxFQUFFLE9BQU87Q0FDakIsU0FBUyxFQUFFLE9BQU87Q0FDbEIsWUFBWTtDQUNaLFlBQVksZ0JBQWdCLFNBQVM7QUFDdkMsQ0FBQztBQUtELE1BQWEsZUFBZSxFQUFFLE9BQU87Q0FDbkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7Q0FDcEMsVUFBVSxFQUFFLE9BQU87RUFDakIsWUFBWSxFQUFFLE9BQU87RUFDckIsVUFBVSxFQUFFLE9BQU87RUFDbkIsT0FBTyxFQUFFLE9BQU87Q0FDbEIsQ0FBQztDQUNELE1BQU0sRUFBRSxPQUFPO0VBQ2IsTUFBTSxFQUFFLE9BQU87RUFDZixPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztFQUMzQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0VBQ3BDLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDLENBQUMsU0FBUztFQUNoRCxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztFQUMvQixjQUFjO0VBQ2QsT0FBTyxFQUFFLE9BQU87R0FDZCxjQUFjLEVBQUUsT0FBTztHQUN2QixlQUFlLEVBQUUsT0FBTztHQUN4QixrQkFBa0IsRUFBRSxPQUFPO0dBQzNCLDZCQUE2QixFQUFFLE9BQU87R0FDdEMsZ0NBQWdDLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztHQUNwRCxnQ0FBZ0MsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0dBQ3BELHlCQUF5QixFQUFFLE9BQU87RUFDcEMsQ0FBQztFQUNELFlBQVksRUFBRSxPQUFPO0VBQ3JCLFFBQVEsRUFBRSxPQUFPO0VBQ2pCLFNBQVMsRUFBRSxPQUFPO0VBQ2xCLFlBQVk7RUFDWixTQUFTLEVBQUUsTUFBTSxZQUFZO0VBQzdCLFlBQVksZ0JBQWdCLFNBQVM7Q0FDdkMsQ0FBQztDQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ3pDLENBQUM7QUFLRCxNQUFhLGlCQUFpQixFQUFFLE9BQU87Q0FDckMsWUFBWSxFQUFFLE9BQU87Q0FDckIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDbEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDL0IsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDNUIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDakMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDN0IsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVM7Q0FDbkMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVM7QUFDN0MsQ0FBQztBQUdELE1BQWEsa0JBQWtCLEVBQUUsT0FBTztDQUN0QyxjQUFjLEVBQUUsT0FBTztDQUN2QixXQUFXLEVBQUUsT0FBTztDQUNwQixNQUFNLEVBQUUsS0FBSyxDQUFDLFlBQVksV0FBVyxDQUFDO0NBQ3RDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQy9CLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDeEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDbkMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDakMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDbEMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNyQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3pDLHVCQUF1QixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDM0MsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMzQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM3QixZQUFZLFdBQVcsU0FBUztDQUNoQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNoQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUztDQUN2QyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNsQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNuQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3JDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ25DLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2hDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzlCLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzlCLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2hDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDcEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7QUFDN0IsQ0FBQztBQUdELE1BQWEsaUJBQWlCLEVBQUUsT0FBTztDQUNyQyxjQUFjLEVBQUUsT0FBTztDQUN2QixRQUFRLEVBQUUsS0FBSztFQUFDO0VBQWE7RUFBUztDQUFTLENBQUM7Q0FDaEQsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDOUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDL0IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDL0Isb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUN4QyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNuQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3RDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDdkMsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMxQywwQkFBMEIsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzlDLDRCQUE0QixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDaEQsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNoRCxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM3QixZQUFZLFdBQVcsU0FBUztDQUNoQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3JDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzdCLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2xDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVM7QUFDdkMsQ0FBQztBQUtELE1BQWEsYUFBYSxFQUFFLE9BQU87Q0FDakMsT0FBTyxFQUFFLE9BQU87Q0FDaEIsTUFBTSxFQUFFLE9BQU87Q0FDZixVQUFVLEVBQUUsT0FBTztDQUNuQixVQUFVLEVBQUUsT0FBTztBQUNyQixDQUFDO0FBS0QsTUFBYSxtQkFBbUIsRUFBRSxPQUFPO0NBQ3ZDLFNBQVMsRUFBRSxPQUFPO0NBR2xCLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxNQUFNLENBQUM7QUFDbkMsQ0FBQztBQUdELE1BQU0sYUFBYSxFQUNoQixPQUFPO0NBQ04sYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDakMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDOUIsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUztBQUNyRCxDQUFDLENBQUMsQ0FDRCxTQUFTO0FBRVosTUFBYSxnQkFBZ0IsRUFBRSxPQUFPO0NBQ3BDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzNCLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzlCLFVBQVUsV0FBVyxTQUFTO0NBQzlCLFVBQVUsV0FBVyxTQUFTO0FBQ2hDLENBQUM7QUFLRCxNQUFhLG1CQUFtQixFQUFFLE9BQU87Q0FDdkMsV0FBVyxFQUFFLFFBQVE7Q0FDckIsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDLFNBQVM7Q0FDL0IsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUMsU0FBUztDQUNuQyxTQUFTLEVBQUUsT0FBTztBQUNwQixDQUFDO0FBR0QsTUFBYSx1QkFBdUIsRUFBRSxLQUFLO0NBQUM7Q0FBWTtDQUFTO0FBQVEsQ0FBQztBQUcxRSxNQUFhLGlCQUFpQixFQUFFLE9BQU87Q0FDckMsUUFBUSxFQUFFLE9BQU87Q0FDakIsY0FBYyxFQUFFLE9BQU87Q0FDdkIsWUFBWSxpQkFBaUIsU0FBUztDQUd0QyxPQUFPLEVBQUUsUUFBUTtDQUNqQixXQUFXLEVBQUUsT0FBTztFQUNsQixRQUFRO0VBQ1IsV0FBVztDQUNiLENBQUM7QUFDSCxDQUFDO0FBS0QsSUFBYSxhQUFiLGNBQWdDLE1BQU07Q0FDcEMsT0FBZ0I7QUFDbEI7QUFDQSxJQUFhLDhCQUFiLGNBQWlELE1BQU07Q0FDckQsT0FBZ0I7QUFDbEI7QUFDQSxJQUFhLGVBQWIsY0FBa0MsTUFBTTtDQUN0QyxPQUFnQjtBQUNsQjtBQUNBLElBQWEsZUFBYixjQUFrQyxNQUFNO0NBQ3RDLE9BQWdCO0FBQ2xCO0FBSUEsU0FBZ0IsVUFBVSxPQUF1QjtDQUMvQyxPQUFPLE1BQU0sU0FBUyxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsTUFBTTtBQUN0RCJ9
@@ -37,7 +37,8 @@ const TOKENS_TRIGGER_SETUP_SQL = `
37
37
  OLD.credentials IS DISTINCT FROM NEW.credentials OR
38
38
  OLD.provider IS DISTINCT FROM NEW.provider OR
39
39
  OLD.name IS DISTINCT FROM NEW.name OR
40
- OLD.quota_threshold IS DISTINCT FROM NEW.quota_threshold
40
+ OLD.quota_threshold IS DISTINCT FROM NEW.quota_threshold OR
41
+ OLD.keepalive_enabled IS DISTINCT FROM NEW.keepalive_enabled
41
42
  )
42
43
  EXECUTE FUNCTION public.tokens_notify();
43
44
  `;
@@ -65,4 +66,4 @@ async function ensureTokensTrigger(connConfig) {
65
66
  //#endregion
66
67
  export { TOKENS_TRIGGER_SETUP_SQL, ensureTokensTrigger };
67
68
 
68
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tdHJpZ2dlci1zZXR1cC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4tdHJpZ2dlci1zZXR1cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogT25lLXRpbWUgc2V0dXAgZm9yIHB1YmxpYy50b2tlbnMgLT4gdG9rZW5zX2NoYW5nZWQgTk9USUZZIHRyaWdnZXJzLiAqL1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IENsaWVudCwgdHlwZSBDbGllbnRDb25maWcgfSBmcm9tIFwicGdcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwidHJpZ2dlci1zZXR1cFwiXSk7XG5cbmNvbnN0IENPTk5FQ1RJT05fVElNRU9VVF9NUyA9IDVfMDAwO1xuY29uc3QgU0VUVVBfTE9DS19USU1FT1VUX01TID0gM18wMDA7XG5jb25zdCBTRVRVUF9TVEFURU1FTlRfVElNRU9VVF9NUyA9IDEwXzAwMDtcblxuY29uc3QgQURWSVNPUllfTE9DS19DTEFTU19JRCA9IDcxNztcbmNvbnN0IEFEVklTT1JZX0xPQ0tfT0JKRUNUX0lEID0gNDQ5MDA7XG5cbmV4cG9ydCBjb25zdCBUT0tFTlNfVFJJR0dFUl9TRVRVUF9TUUwgPSBgXG4gIENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHB1YmxpYy50b2tlbnNfbm90aWZ5KCkgUkVUVVJOUyB0cmlnZ2VyXG4gIExBTkdVQUdFIHBscGdzcWxcbiAgU0VUIHNlYXJjaF9wYXRoID0gcGdfY2F0YWxvZywgcHVibGljXG4gIEFTICRmdW5jJFxuICBCRUdJTlxuICAgIFBFUkZPUk0gcGdfbm90aWZ5KCd0b2tlbnNfY2hhbmdlZCcsIGpzb25fYnVpbGRfb2JqZWN0KFxuICAgICAgJ29wJywgVEdfT1AsXG4gICAgICAnaWQnLCBDT0FMRVNDRShORVcuaWQsIE9MRC5pZClcbiAgICApOjp0ZXh0KTtcbiAgICBSRVRVUk4gQ09BTEVTQ0UoTkVXLCBPTEQpO1xuICBFTkQ7XG4gICRmdW5jJDtcblxuICBEUk9QIFRSSUdHRVIgSUYgRVhJU1RTIHRva2Vuc19jaGFuZ2VkX3RyaWdnZXIgT04gcHVibGljLnRva2VucztcbiAgRFJPUCBUUklHR0VSIElGIEVYSVNUUyB0b2tlbnNfY2hhbmdlZCBPTiBwdWJsaWMudG9rZW5zO1xuXG4gIENSRUFURSBPUiBSRVBMQUNFIFRSSUdHRVIgdG9rZW5zX2NoYW5nZWRfaW5zX2RlbFxuICBBRlRFUiBJTlNFUlQgT1IgREVMRVRFIE9OIHB1YmxpYy50b2tlbnNcbiAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gcHVibGljLnRva2Vuc19ub3RpZnkoKTtcblxuICBDUkVBVEUgT1IgUkVQTEFDRSBUUklHR0VSIHRva2Vuc19jaGFuZ2VkX3VwZFxuICBBRlRFUiBVUERBVEUgT04gcHVibGljLnRva2Vuc1xuICBGT1IgRUFDSCBST1dcbiAgV0hFTiAoXG4gICAgT0xELmFjdGl2ZSBJUyBESVNUSU5DVCBGUk9NIE5FVy5hY3RpdmUgT1JcbiAgICBPTEQuY3JlZGVudGlhbHMgSVMgRElTVElOQ1QgRlJPTSBORVcuY3JlZGVudGlhbHMgT1JcbiAgICBPTEQucHJvdmlkZXIgSVMgRElTVElOQ1QgRlJPTSBORVcucHJvdmlkZXIgT1JcbiAgICBPTEQubmFtZSBJUyBESVNUSU5DVCBGUk9NIE5FVy5uYW1lIE9SXG4gICAgT0xELnF1b3RhX3RocmVzaG9sZCBJUyBESVNUSU5DVCBGUk9NIE5FVy5xdW90YV90aHJlc2hvbGRcbiAgKVxuICBFWEVDVVRFIEZVTkNUSU9OIHB1YmxpYy50b2tlbnNfbm90aWZ5KCk7XG5gO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlVG9rZW5zVHJpZ2dlcihjb25uQ29uZmlnOiBDbGllbnRDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCh7XG4gICAgLi4uY29ubkNvbmZpZyxcbiAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogQ09OTkVDVElPTl9USU1FT1VUX01TLFxuICAgIGFwcGxpY2F0aW9uX25hbWU6IFwicWdyaWQtdHJpZ2dlci1zZXR1cFwiLFxuICB9KTtcblxuICBsZXQgbG9ja0FjcXVpcmVkID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoKTtcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoXCJTRVQgc2VhcmNoX3BhdGggVE8gcHVibGljXCIpO1xuICAgIGF3YWl0IGNsaWVudC5xdWVyeShgU0VUIGxvY2tfdGltZW91dCA9ICcke1NFVFVQX0xPQ0tfVElNRU9VVF9NU31tcydgKTtcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFNFVCBzdGF0ZW1lbnRfdGltZW91dCA9ICcke1NFVFVQX1NUQVRFTUVOVF9USU1FT1VUX01TfW1zJ2ApO1xuICAgIGF3YWl0IGNsaWVudC5xdWVyeShcIlNFTEVDVCBwZ19hZHZpc29yeV9sb2NrKCQxLCAkMilcIiwgW1xuICAgICAgQURWSVNPUllfTE9DS19DTEFTU19JRCxcbiAgICAgIEFEVklTT1JZX0xPQ0tfT0JKRUNUX0lELFxuICAgIF0pO1xuICAgIGxvY2tBY3F1aXJlZCA9IHRydWU7XG5cbiAgICBhd2FpdCBjbGllbnQucXVlcnkoVE9LRU5TX1RSSUdHRVJfU0VUVVBfU1FMKTtcbiAgICBsb2dnZXIuaW5mbyhcInRyaWdnZXIgZW5zdXJlZCAocHVibGljLnRva2Vuc19ub3RpZnkgKyB0b2tlbnNfY2hhbmdlZF8qIHRyaWdnZXJzKVwiKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAobG9ja0FjcXVpcmVkKSB7XG4gICAgICBhd2FpdCBjbGllbnRcbiAgICAgICAgLnF1ZXJ5KFwiU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9jaygkMSwgJDIpXCIsIFtcbiAgICAgICAgICBBRFZJU09SWV9MT0NLX0NMQVNTX0lELFxuICAgICAgICAgIEFEVklTT1JZX0xPQ0tfT0JKRUNUX0lELFxuICAgICAgICBdKVxuICAgICAgICAuY2F0Y2goKCkgPT4ge30pO1xuICAgIH1cbiAgICBhd2FpdCBjbGllbnQuZW5kKCkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFJQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsZUFBZSxDQUFDO0FBRW5ELE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0sNkJBQTZCO0FBRW5DLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0sMEJBQTBCO0FBRWhDLE1BQWEsMkJBQTJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQ3hDLGVBQXNCLG9CQUFvQixZQUF5QztDQUNqRixNQUFNLFNBQVMsSUFBSSxPQUFPO0VBQ3hCLEdBQUc7RUFDSCx5QkFBeUI7RUFDekIsa0JBQWtCO0NBQ3BCLENBQUM7Q0FFRCxJQUFJLGVBQWU7Q0FDbkIsSUFBSTtFQUNGLE1BQU0sT0FBTyxRQUFRO0VBQ3JCLE1BQU0sT0FBTyxNQUFNLDJCQUEyQjtFQUM5QyxNQUFNLE9BQU8sTUFBTSx1QkFBdUIsc0JBQXNCLElBQUk7RUFDcEUsTUFBTSxPQUFPLE1BQU0sNEJBQTRCLDJCQUEyQixJQUFJO0VBQzlFLE1BQU0sT0FBTyxNQUFNLG1DQUFtQyxDQUNwRCx3QkFDQSx1QkFDRixDQUFDO0VBQ0QsZUFBZTtFQUVmLE1BQU0sT0FBTyxNQUFNLHdCQUF3QjtFQUMzQyxPQUFPLEtBQUssb0VBQW9FO0NBQ2xGLFVBQVU7RUFDUixJQUFJLGNBQ0YsTUFBTSxPQUNILE1BQU0scUNBQXFDLENBQzFDLHdCQUNBLHVCQUNGLENBQUMsQ0FBQyxDQUNELFlBQVksQ0FBQyxDQUFDO0VBRW5CLE1BQU0sT0FBTyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztDQUNuQztBQUNGIn0=
69
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tdHJpZ2dlci1zZXR1cC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4tdHJpZ2dlci1zZXR1cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogT25lLXRpbWUgc2V0dXAgZm9yIHB1YmxpYy50b2tlbnMgLT4gdG9rZW5zX2NoYW5nZWQgTk9USUZZIHRyaWdnZXJzLiAqL1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IENsaWVudCwgdHlwZSBDbGllbnRDb25maWcgfSBmcm9tIFwicGdcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwidHJpZ2dlci1zZXR1cFwiXSk7XG5cbmNvbnN0IENPTk5FQ1RJT05fVElNRU9VVF9NUyA9IDVfMDAwO1xuY29uc3QgU0VUVVBfTE9DS19USU1FT1VUX01TID0gM18wMDA7XG5jb25zdCBTRVRVUF9TVEFURU1FTlRfVElNRU9VVF9NUyA9IDEwXzAwMDtcblxuY29uc3QgQURWSVNPUllfTE9DS19DTEFTU19JRCA9IDcxNztcbmNvbnN0IEFEVklTT1JZX0xPQ0tfT0JKRUNUX0lEID0gNDQ5MDA7XG5cbmV4cG9ydCBjb25zdCBUT0tFTlNfVFJJR0dFUl9TRVRVUF9TUUwgPSBgXG4gIENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHB1YmxpYy50b2tlbnNfbm90aWZ5KCkgUkVUVVJOUyB0cmlnZ2VyXG4gIExBTkdVQUdFIHBscGdzcWxcbiAgU0VUIHNlYXJjaF9wYXRoID0gcGdfY2F0YWxvZywgcHVibGljXG4gIEFTICRmdW5jJFxuICBCRUdJTlxuICAgIFBFUkZPUk0gcGdfbm90aWZ5KCd0b2tlbnNfY2hhbmdlZCcsIGpzb25fYnVpbGRfb2JqZWN0KFxuICAgICAgJ29wJywgVEdfT1AsXG4gICAgICAnaWQnLCBDT0FMRVNDRShORVcuaWQsIE9MRC5pZClcbiAgICApOjp0ZXh0KTtcbiAgICBSRVRVUk4gQ09BTEVTQ0UoTkVXLCBPTEQpO1xuICBFTkQ7XG4gICRmdW5jJDtcblxuICBEUk9QIFRSSUdHRVIgSUYgRVhJU1RTIHRva2Vuc19jaGFuZ2VkX3RyaWdnZXIgT04gcHVibGljLnRva2VucztcbiAgRFJPUCBUUklHR0VSIElGIEVYSVNUUyB0b2tlbnNfY2hhbmdlZCBPTiBwdWJsaWMudG9rZW5zO1xuXG4gIENSRUFURSBPUiBSRVBMQUNFIFRSSUdHRVIgdG9rZW5zX2NoYW5nZWRfaW5zX2RlbFxuICBBRlRFUiBJTlNFUlQgT1IgREVMRVRFIE9OIHB1YmxpYy50b2tlbnNcbiAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gcHVibGljLnRva2Vuc19ub3RpZnkoKTtcblxuICBDUkVBVEUgT1IgUkVQTEFDRSBUUklHR0VSIHRva2Vuc19jaGFuZ2VkX3VwZFxuICBBRlRFUiBVUERBVEUgT04gcHVibGljLnRva2Vuc1xuICBGT1IgRUFDSCBST1dcbiAgV0hFTiAoXG4gICAgT0xELmFjdGl2ZSBJUyBESVNUSU5DVCBGUk9NIE5FVy5hY3RpdmUgT1JcbiAgICBPTEQuY3JlZGVudGlhbHMgSVMgRElTVElOQ1QgRlJPTSBORVcuY3JlZGVudGlhbHMgT1JcbiAgICBPTEQucHJvdmlkZXIgSVMgRElTVElOQ1QgRlJPTSBORVcucHJvdmlkZXIgT1JcbiAgICBPTEQubmFtZSBJUyBESVNUSU5DVCBGUk9NIE5FVy5uYW1lIE9SXG4gICAgT0xELnF1b3RhX3RocmVzaG9sZCBJUyBESVNUSU5DVCBGUk9NIE5FVy5xdW90YV90aHJlc2hvbGQgT1JcbiAgICBPTEQua2VlcGFsaXZlX2VuYWJsZWQgSVMgRElTVElOQ1QgRlJPTSBORVcua2VlcGFsaXZlX2VuYWJsZWRcbiAgKVxuICBFWEVDVVRFIEZVTkNUSU9OIHB1YmxpYy50b2tlbnNfbm90aWZ5KCk7XG5gO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlVG9rZW5zVHJpZ2dlcihjb25uQ29uZmlnOiBDbGllbnRDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCh7XG4gICAgLi4uY29ubkNvbmZpZyxcbiAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogQ09OTkVDVElPTl9USU1FT1VUX01TLFxuICAgIGFwcGxpY2F0aW9uX25hbWU6IFwicWdyaWQtdHJpZ2dlci1zZXR1cFwiLFxuICB9KTtcblxuICBsZXQgbG9ja0FjcXVpcmVkID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoKTtcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoXCJTRVQgc2VhcmNoX3BhdGggVE8gcHVibGljXCIpO1xuICAgIGF3YWl0IGNsaWVudC5xdWVyeShgU0VUIGxvY2tfdGltZW91dCA9ICcke1NFVFVQX0xPQ0tfVElNRU9VVF9NU31tcydgKTtcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFNFVCBzdGF0ZW1lbnRfdGltZW91dCA9ICcke1NFVFVQX1NUQVRFTUVOVF9USU1FT1VUX01TfW1zJ2ApO1xuICAgIGF3YWl0IGNsaWVudC5xdWVyeShcIlNFTEVDVCBwZ19hZHZpc29yeV9sb2NrKCQxLCAkMilcIiwgW1xuICAgICAgQURWSVNPUllfTE9DS19DTEFTU19JRCxcbiAgICAgIEFEVklTT1JZX0xPQ0tfT0JKRUNUX0lELFxuICAgIF0pO1xuICAgIGxvY2tBY3F1aXJlZCA9IHRydWU7XG5cbiAgICBhd2FpdCBjbGllbnQucXVlcnkoVE9LRU5TX1RSSUdHRVJfU0VUVVBfU1FMKTtcbiAgICBsb2dnZXIuaW5mbyhcInRyaWdnZXIgZW5zdXJlZCAocHVibGljLnRva2Vuc19ub3RpZnkgKyB0b2tlbnNfY2hhbmdlZF8qIHRyaWdnZXJzKVwiKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAobG9ja0FjcXVpcmVkKSB7XG4gICAgICBhd2FpdCBjbGllbnRcbiAgICAgICAgLnF1ZXJ5KFwiU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9jaygkMSwgJDIpXCIsIFtcbiAgICAgICAgICBBRFZJU09SWV9MT0NLX0NMQVNTX0lELFxuICAgICAgICAgIEFEVklTT1JZX0xPQ0tfT0JKRUNUX0lELFxuICAgICAgICBdKVxuICAgICAgICAuY2F0Y2goKCkgPT4ge30pO1xuICAgIH1cbiAgICBhd2FpdCBjbGllbnQuZW5kKCkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFJQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsZUFBZSxDQUFDO0FBRW5ELE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0sNkJBQTZCO0FBRW5DLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0sMEJBQTBCO0FBRWhDLE1BQWEsMkJBQTJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUN4QyxlQUFzQixvQkFBb0IsWUFBeUM7Q0FDakYsTUFBTSxTQUFTLElBQUksT0FBTztFQUN4QixHQUFHO0VBQ0gseUJBQXlCO0VBQ3pCLGtCQUFrQjtDQUNwQixDQUFDO0NBRUQsSUFBSSxlQUFlO0NBQ25CLElBQUk7RUFDRixNQUFNLE9BQU8sUUFBUTtFQUNyQixNQUFNLE9BQU8sTUFBTSwyQkFBMkI7RUFDOUMsTUFBTSxPQUFPLE1BQU0sdUJBQXVCLHNCQUFzQixJQUFJO0VBQ3BFLE1BQU0sT0FBTyxNQUFNLDRCQUE0QiwyQkFBMkIsSUFBSTtFQUM5RSxNQUFNLE9BQU8sTUFBTSxtQ0FBbUMsQ0FDcEQsd0JBQ0EsdUJBQ0YsQ0FBQztFQUNELGVBQWU7RUFFZixNQUFNLE9BQU8sTUFBTSx3QkFBd0I7RUFDM0MsT0FBTyxLQUFLLG9FQUFvRTtDQUNsRixVQUFVO0VBQ1IsSUFBSSxjQUNGLE1BQU0sT0FDSCxNQUFNLHFDQUFxQyxDQUMxQyx3QkFDQSx1QkFDRixDQUFDLENBQUMsQ0FDRCxZQUFZLENBQUMsQ0FBQztFQUVuQixNQUFNLE9BQU8sSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7Q0FDbkM7QUFDRiJ9
@@ -1,3 +1,4 @@
1
+ import { TOKEN_WINDOW_KEEPALIVE_RUNNER_ENV_KEY } from "../setting/setting.constant.js";
1
2
  import { getSetting } from "../setting/setting.store.js";
2
3
  import { TokenModel } from "../token/token.model.js";
3
4
  import { QgridFrame } from "./qgrid.frame.js";
@@ -10,12 +11,13 @@ const POST_KEEPALIVE_USAGE_DELAY_MS = 61e3;
10
11
  const KEEPALIVE_MODEL = "anthropic/claude-haiku-4-5";
11
12
  const KEEPALIVE_PROJECT_NAME = "qgrid-token-window-keepalive";
12
13
  const KEEPALIVE_SETTING_KEY = "qgrid.tokenWindowKeepaliveEnabled";
13
- const KEEPALIVE_ENV_KEY = "QGRID_TOKEN_WINDOW_KEEPALIVE_ENABLED";
14
+ const KEEPALIVE_ENV_KEY = TOKEN_WINDOW_KEEPALIVE_RUNNER_ENV_KEY;
14
15
  const defaultDeps = {
15
16
  findTokens: () => TokenModel.findActiveByProvider("A", "anthropic"),
16
17
  readUsage: (tokenId) => QgridFrame.usage(tokenId),
17
18
  dispatch: (input) => QgridFrame.query(input),
18
19
  readSetting: getSetting,
20
+ isRunnerEnabled: () => process.env[KEEPALIVE_ENV_KEY] === "true",
19
21
  now: () => Date.now(),
20
22
  setTimer: (callback, delayMs) => setTimeout(callback, delayMs),
21
23
  clearTimer: (handle) => clearTimeout(handle)
@@ -121,7 +123,11 @@ function clearScheduledTimers() {
121
123
  }
122
124
  async function startTokenWindowKeepalive(deps = defaultDeps) {
123
125
  clearScheduledTimers();
124
- if (deps.readSetting("qgrid.tokenWindowKeepaliveEnabled", "QGRID_TOKEN_WINDOW_KEEPALIVE_ENABLED") === "false") {
126
+ if (!deps.isRunnerEnabled()) {
127
+ logger.info("token window keepalive runner disabled for this instance");
128
+ return;
129
+ }
130
+ if (deps.readSetting("qgrid.tokenWindowKeepaliveEnabled") === "false") {
125
131
  logger.info("token window keepalive disabled");
126
132
  return;
127
133
  }
@@ -134,7 +140,7 @@ async function startTokenWindowKeepalive(deps = defaultDeps) {
134
140
  return;
135
141
  }
136
142
  if (generation !== expectedGeneration) return;
137
- const targets = tokens.filter((token) => token.active && token.provider === "anthropic");
143
+ const targets = tokens.filter((token) => token.active && token.provider === "anthropic" && token.keepalive_enabled);
138
144
  const targetIds = new Set(targets.map((token) => token.id));
139
145
  for (const tokenId of fireGuards.keys()) if (!targetIds.has(tokenId)) fireGuards.delete(tokenId);
140
146
  logger.info(`token window keepalive scheduling ${targets.length} token(s)`);
@@ -150,4 +156,4 @@ function stopTokenWindowKeepalive() {
150
156
  //#endregion
151
157
  export { KEEPALIVE_ENV_KEY, KEEPALIVE_MODEL, KEEPALIVE_PROJECT_NAME, KEEPALIVE_SETTING_KEY, POST_KEEPALIVE_USAGE_DELAY_MS, rescheduleTokenWindowKeepalive, startTokenWindowKeepalive, stopTokenWindowKeepalive };
152
158
 
153
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4td2luZG93LWtlZXBhbGl2ZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4td2luZG93LWtlZXBhbGl2ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBnZXRTZXR0aW5nIH0gZnJvbSBcIi4uL3NldHRpbmcvc2V0dGluZy5zdG9yZVwiO1xuaW1wb3J0IHsgVG9rZW5Nb2RlbCB9IGZyb20gXCIuLi90b2tlbi90b2tlbi5tb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBJbnRlcm5hbFF1ZXJ5SW5wdXQgfSBmcm9tIFwiLi9xZ3JpZC5kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBRZ3JpZEZyYW1lIH0gZnJvbSBcIi4vcWdyaWQuZnJhbWVcIjtcbmltcG9ydCB7IHR5cGUgVXNhZ2VSZXNwb25zZSB9IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcInRva2VuLXdpbmRvdy1rZWVwYWxpdmVcIl0pO1xuXG5jb25zdCBGSVZFX0hPVVJTX01TID0gNSAqIDYwICogNjAgKiAxXzAwMDtcbmNvbnN0IFJFU0VUX0dSQUNFX01TID0gMV8wMDA7XG5cbi8vIHVzYWdlIEFQSSDshLHqs7Ug7J2R64u17J2AIDHrtoQg7LqQ7Iuc65Cc64ukLiBrZWVwYWxpdmUg7KeB7ZuEIOymieyLnCDsnqzsobDtmoztlZjrqbQg7J207KCEIOyciOuPhOyasOulvFxuLy8g64uk7IucIOuztOuvgOuhnCDsupDsi5zqsIAg7KeA64KcIOuSpCDtlZwg67KIIO2ZleyduO2VmOqzoCwg6re465WM64+EIOyDiCDsnIjrj4TsmrDqsIAg7JeG7Jy866m0IOuLpOydjCA1aOq5jOyngCDquLDri6TrprDri6QuXG5leHBvcnQgY29uc3QgUE9TVF9LRUVQQUxJVkVfVVNBR0VfREVMQVlfTVMgPSA2MV8wMDA7XG5leHBvcnQgY29uc3QgS0VFUEFMSVZFX01PREVMID0gXCJhbnRocm9waWMvY2xhdWRlLWhhaWt1LTQtNVwiO1xuZXhwb3J0IGNvbnN0IEtFRVBBTElWRV9QUk9KRUNUX05BTUUgPSBcInFncmlkLXRva2VuLXdpbmRvdy1rZWVwYWxpdmVcIjtcbmV4cG9ydCBjb25zdCBLRUVQQUxJVkVfU0VUVElOR19LRVkgPSBcInFncmlkLnRva2VuV2luZG93S2VlcGFsaXZlRW5hYmxlZFwiO1xuZXhwb3J0IGNvbnN0IEtFRVBBTElWRV9FTlZfS0VZID0gXCJRR1JJRF9UT0tFTl9XSU5ET1dfS0VFUEFMSVZFX0VOQUJMRURcIjtcblxudHlwZSBLZWVwYWxpdmVUb2tlbiA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBwcm92aWRlcjogc3RyaW5nO1xuICBhY3RpdmU6IGJvb2xlYW47XG59O1xuXG50eXBlIFRpbWVySGFuZGxlID0gUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cbmV4cG9ydCB0eXBlIFRva2VuV2luZG93S2VlcGFsaXZlRGVwcyA9IHtcbiAgZmluZFRva2VuczogKCkgPT4gUHJvbWlzZTxLZWVwYWxpdmVUb2tlbltdPjtcbiAgcmVhZFVzYWdlOiAodG9rZW5JZDogbnVtYmVyKSA9PiBQcm9taXNlPFVzYWdlUmVzcG9uc2U+O1xuICBkaXNwYXRjaDogKGlucHV0OiBJbnRlcm5hbFF1ZXJ5SW5wdXQpID0+IFByb21pc2U8dW5rbm93bj47XG4gIHJlYWRTZXR0aW5nOiB0eXBlb2YgZ2V0U2V0dGluZztcbiAgbm93OiAoKSA9PiBudW1iZXI7XG4gIHNldFRpbWVyOiAoY2FsbGJhY2s6ICgpID0+IHZvaWQsIGRlbGF5TXM6IG51bWJlcikgPT4gVGltZXJIYW5kbGU7XG4gIGNsZWFyVGltZXI6IChoYW5kbGU6IFRpbWVySGFuZGxlKSA9PiB2b2lkO1xufTtcblxuY29uc3QgZGVmYXVsdERlcHM6IFRva2VuV2luZG93S2VlcGFsaXZlRGVwcyA9IHtcbiAgZmluZFRva2VuczogKCkgPT4gVG9rZW5Nb2RlbC5maW5kQWN0aXZlQnlQcm92aWRlcihcIkFcIiwgXCJhbnRocm9waWNcIiksXG4gIHJlYWRVc2FnZTogKHRva2VuSWQpID0+IFFncmlkRnJhbWUudXNhZ2UodG9rZW5JZCksXG4gIGRpc3BhdGNoOiAoaW5wdXQpID0+IFFncmlkRnJhbWUucXVlcnkoaW5wdXQpLFxuICByZWFkU2V0dGluZzogZ2V0U2V0dGluZyxcbiAgbm93OiAoKSA9PiBEYXRlLm5vdygpLFxuICBzZXRUaW1lcjogKGNhbGxiYWNrLCBkZWxheU1zKSA9PiBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheU1zKSxcbiAgY2xlYXJUaW1lcjogKGhhbmRsZSkgPT4gY2xlYXJUaW1lb3V0KGhhbmRsZSksXG59O1xuXG5jb25zdCB0aW1lcnMgPSBuZXcgTWFwPG51bWJlciwgeyBoYW5kbGU6IFRpbWVySGFuZGxlOyBjbGVhcjogKGhhbmRsZTogVGltZXJIYW5kbGUpID0+IHZvaWQgfT4oKTtcbmNvbnN0IGZpcmVHdWFyZHMgPSBuZXcgTWFwPG51bWJlciwgeyB1bnRpbE1zOiBudW1iZXI7IGFsbG93RmlyZUF0RXhwaXJ5OiBib29sZWFuIH0+KCk7XG5sZXQgZ2VuZXJhdGlvbiA9IDA7XG5cbmZ1bmN0aW9uIGNsZWFyVG9rZW5UaW1lcih0b2tlbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgdGltZXIgPSB0aW1lcnMuZ2V0KHRva2VuSWQpO1xuICBpZiAoIXRpbWVyKSByZXR1cm47XG4gIHRpbWVyLmNsZWFyKHRpbWVyLmhhbmRsZSk7XG4gIHRpbWVycy5kZWxldGUodG9rZW5JZCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlVG9rZW4oXG4gIHRva2VuOiBLZWVwYWxpdmVUb2tlbixcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzLFxuICBleHBlY3RlZEdlbmVyYXRpb246IG51bWJlcixcbiAgZGVsYXlNczogbnVtYmVyLFxuICBhbGxvd0ZpcmU6IGJvb2xlYW4sXG4pOiB2b2lkIHtcbiAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuICBjbGVhclRva2VuVGltZXIodG9rZW4uaWQpO1xuICBjb25zdCBoYW5kbGUgPSBkZXBzLnNldFRpbWVyKFxuICAgICgpID0+IHtcbiAgICAgIHRpbWVycy5kZWxldGUodG9rZW4uaWQpO1xuICAgICAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuICAgICAgdm9pZCBpbnNwZWN0VG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgYWxsb3dGaXJlKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYGtlZXBhbGl2ZSBjeWNsZSBmYWlsZWQgZm9yICR7dG9rZW4ubmFtZX06ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICBzY2hlZHVsZUZhbGxiYWNrKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBNYXRoLm1heCgwLCBkZWxheU1zKSxcbiAgKTtcbiAgdGltZXJzLnNldCh0b2tlbi5pZCwgeyBoYW5kbGUsIGNsZWFyOiBkZXBzLmNsZWFyVGltZXIgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmVyVG9rZW4oXG4gIHRva2VuOiBLZWVwYWxpdmVUb2tlbixcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzLFxuICBleHBlY3RlZEdlbmVyYXRpb246IG51bWJlcixcbiAgZGVsYXlNczogbnVtYmVyLFxuICBhbGxvd0ZpcmVBdEV4cGlyeTogYm9vbGVhbixcbik6IHZvaWQge1xuICBjb25zdCB1bnRpbE1zID0gZGVwcy5ub3coKSArIGRlbGF5TXM7XG4gIGZpcmVHdWFyZHMuc2V0KHRva2VuLmlkLCB7IHVudGlsTXMsIGFsbG93RmlyZUF0RXhwaXJ5IH0pO1xuICBzY2hlZHVsZVRva2VuKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24sIGRlbGF5TXMsIGFsbG93RmlyZUF0RXhwaXJ5KTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVGYWxsYmFjayhcbiAgdG9rZW46IEtlZXBhbGl2ZVRva2VuLFxuICBkZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMsXG4gIGV4cGVjdGVkR2VuZXJhdGlvbjogbnVtYmVyLFxuKTogdm9pZCB7XG4gIGRlZmVyVG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgRklWRV9IT1VSU19NUywgdHJ1ZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluc3BlY3RUb2tlbihcbiAgdG9rZW46IEtlZXBhbGl2ZVRva2VuLFxuICBkZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMsXG4gIGV4cGVjdGVkR2VuZXJhdGlvbjogbnVtYmVyLFxuICBhbGxvd0ZpcmU6IGJvb2xlYW4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgbm93ID0gZGVwcy5ub3coKTtcbiAgY29uc3QgZ3VhcmQgPSBmaXJlR3VhcmRzLmdldCh0b2tlbi5pZCk7XG4gIGlmIChndWFyZCAmJiBndWFyZC51bnRpbE1zID4gbm93KSB7XG4gICAgc2NoZWR1bGVUb2tlbih0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uLCBndWFyZC51bnRpbE1zIC0gbm93LCBndWFyZC5hbGxvd0ZpcmVBdEV4cGlyeSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChndWFyZCkgZmlyZUd1YXJkcy5kZWxldGUodG9rZW4uaWQpO1xuXG4gIGxldCB1c2FnZTogVXNhZ2VSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICB1c2FnZSA9IGF3YWl0IGRlcHMucmVhZFVzYWdlKHRva2VuLmlkKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIud2FybihgdXNhZ2UgbG9va3VwIGZhaWxlZCBmb3IgJHt0b2tlbi5uYW1lfTogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuXG4gIGlmICh1c2FnZS5lcnJvcikge1xuICAgIGxvZ2dlci53YXJuKGB1c2FnZSBsb29rdXAgZmFpbGVkIGZvciAke3Rva2VuLm5hbWV9OiAke3VzYWdlLmVycm9yfWApO1xuICAgIHNjaGVkdWxlRmFsbGJhY2sodG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzZXRzQXQgPSB1c2FnZS5maXZlSG91cj8ucmVzZXRzQXQ7XG4gIGlmIChyZXNldHNBdCkge1xuICAgIGNvbnN0IHJlc2V0TXMgPSBEYXRlLnBhcnNlKHJlc2V0c0F0KTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShyZXNldE1zKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYGludmFsaWQgZml2ZS1ob3VyIHJlc2V0IGZvciAke3Rva2VuLm5hbWV9OiAke3Jlc2V0c0F0fWApO1xuICAgICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zcGVjdGVkQXQgPSBkZXBzLm5vdygpO1xuICAgIGlmIChyZXNldE1zID4gaW5zcGVjdGVkQXQpIHtcbiAgICAgIGZpcmVHdWFyZHMuZGVsZXRlKHRva2VuLmlkKTtcbiAgICAgIHNjaGVkdWxlVG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgcmVzZXRNcyAtIGluc3BlY3RlZEF0ICsgUkVTRVRfR1JBQ0VfTVMsIHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIOuwnOyCrCDsp4Htm4Qg7ZmV7J247JeQ7ISc64qUIOy6kOyLnOuQnCBudWxsL+qzvOqxsCByZXNldOydhCDrtJDrj4Qg64uk7IucIOuwnOyCrO2VmOyngCDslYrripTri6QuXG4gIGlmICghYWxsb3dGaXJlKSB7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkZWZlclRva2VuKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24sIFBPU1RfS0VFUEFMSVZFX1VTQUdFX0RFTEFZX01TLCBmYWxzZSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZGVwcy5kaXNwYXRjaCh7XG4gICAgICBwcm9tcHQ6IFwiUmVwbHkgT0suXCIsXG4gICAgICBtb2RlbDogS0VFUEFMSVZFX01PREVMLFxuICAgICAgZWZmb3J0OiBcImxvd1wiLFxuICAgICAgcHJvamVjdE5hbWU6IEtFRVBBTElWRV9QUk9KRUNUX05BTUUsXG4gICAgICBwcmVmZXJyZWRUb2tlbklkOiB0b2tlbi5pZCxcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbyhga2VlcGFsaXZlIHNlbnQgZm9yICR7dG9rZW4ubmFtZX1gKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIud2Fybihga2VlcGFsaXZlIGZhaWxlZCBmb3IgJHt0b2tlbi5uYW1lfTogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwb3N0RmlyZUd1YXJkID0gZmlyZUd1YXJkcy5nZXQodG9rZW4uaWQpO1xuICBpZiAocG9zdEZpcmVHdWFyZCkge1xuICAgIHNjaGVkdWxlVG9rZW4oXG4gICAgICB0b2tlbixcbiAgICAgIGRlcHMsXG4gICAgICBleHBlY3RlZEdlbmVyYXRpb24sXG4gICAgICBNYXRoLm1heCgwLCBwb3N0RmlyZUd1YXJkLnVudGlsTXMgLSBkZXBzLm5vdygpKSxcbiAgICAgIHBvc3RGaXJlR3VhcmQuYWxsb3dGaXJlQXRFeHBpcnksXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhclNjaGVkdWxlZFRpbWVycygpOiB2b2lkIHtcbiAgZ2VuZXJhdGlvbisrO1xuICBmb3IgKGNvbnN0IHRva2VuSWQgb2YgdGltZXJzLmtleXMoKSkgY2xlYXJUb2tlblRpbWVyKHRva2VuSWQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRUb2tlbldpbmRvd0tlZXBhbGl2ZShcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzID0gZGVmYXVsdERlcHMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY2xlYXJTY2hlZHVsZWRUaW1lcnMoKTtcbiAgaWYgKGRlcHMucmVhZFNldHRpbmcoS0VFUEFMSVZFX1NFVFRJTkdfS0VZLCBLRUVQQUxJVkVfRU5WX0tFWSkgPT09IFwiZmFsc2VcIikge1xuICAgIGxvZ2dlci5pbmZvKFwidG9rZW4gd2luZG93IGtlZXBhbGl2ZSBkaXNhYmxlZFwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZXhwZWN0ZWRHZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjtcblxuICBsZXQgdG9rZW5zOiBLZWVwYWxpdmVUb2tlbltdO1xuICB0cnkge1xuICAgIHRva2VucyA9IGF3YWl0IGRlcHMuZmluZFRva2VucygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci53YXJuKGB0b2tlbiBkaXNjb3ZlcnkgZmFpbGVkOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuXG4gIGNvbnN0IHRhcmdldHMgPSB0b2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4uYWN0aXZlICYmIHRva2VuLnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKTtcbiAgY29uc3QgdGFyZ2V0SWRzID0gbmV3IFNldCh0YXJnZXRzLm1hcCgodG9rZW4pID0+IHRva2VuLmlkKSk7XG4gIGZvciAoY29uc3QgdG9rZW5JZCBvZiBmaXJlR3VhcmRzLmtleXMoKSkge1xuICAgIGlmICghdGFyZ2V0SWRzLmhhcyh0b2tlbklkKSkgZmlyZUd1YXJkcy5kZWxldGUodG9rZW5JZCk7XG4gIH1cbiAgbG9nZ2VyLmluZm8oYHRva2VuIHdpbmRvdyBrZWVwYWxpdmUgc2NoZWR1bGluZyAke3RhcmdldHMubGVuZ3RofSB0b2tlbihzKWApO1xuICBhd2FpdCBQcm9taXNlLmFsbCh0YXJnZXRzLm1hcCgodG9rZW4pID0+IGluc3BlY3RUb2tlbih0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uLCB0cnVlKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzY2hlZHVsZVRva2VuV2luZG93S2VlcGFsaXZlKFxuICBkZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMgPSBkZWZhdWx0RGVwcyxcbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gc3RhcnRUb2tlbldpbmRvd0tlZXBhbGl2ZShkZXBzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BUb2tlbldpbmRvd0tlZXBhbGl2ZSgpOiB2b2lkIHtcbiAgY2xlYXJTY2hlZHVsZWRUaW1lcnMoKTtcbiAgZmlyZUd1YXJkcy5jbGVhcigpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQVFBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyx3QkFBd0IsQ0FBQztBQUU1RCxNQUFNLGdCQUFnQixNQUFTLEtBQUs7QUFDcEMsTUFBTSxpQkFBaUI7QUFJdkIsTUFBYSxnQ0FBZ0M7QUFDN0MsTUFBYSxrQkFBa0I7QUFDL0IsTUFBYSx5QkFBeUI7QUFDdEMsTUFBYSx3QkFBd0I7QUFDckMsTUFBYSxvQkFBb0I7QUFxQmpDLE1BQU0sY0FBd0M7Q0FDNUMsa0JBQWtCLFdBQVcscUJBQXFCLEtBQUssV0FBVztDQUNsRSxZQUFZLFlBQVksV0FBVyxNQUFNLE9BQU87Q0FDaEQsV0FBVyxVQUFVLFdBQVcsTUFBTSxLQUFLO0NBQzNDLGFBQWE7Q0FDYixX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
159
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4td2luZG93LWtlZXBhbGl2ZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4td2luZG93LWtlZXBhbGl2ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBUT0tFTl9XSU5ET1dfS0VFUEFMSVZFX1JVTk5FUl9FTlZfS0VZIH0gZnJvbSBcIi4uL3NldHRpbmcvc2V0dGluZy5jb25zdGFudFwiO1xuaW1wb3J0IHsgZ2V0U2V0dGluZyB9IGZyb20gXCIuLi9zZXR0aW5nL3NldHRpbmcuc3RvcmVcIjtcbmltcG9ydCB7IFRva2VuTW9kZWwgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4ubW9kZWxcIjtcbmltcG9ydCB7IHR5cGUgSW50ZXJuYWxRdWVyeUlucHV0IH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgUWdyaWRGcmFtZSB9IGZyb20gXCIuL3FncmlkLmZyYW1lXCI7XG5pbXBvcnQgeyB0eXBlIFVzYWdlUmVzcG9uc2UgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJ0b2tlbi13aW5kb3cta2VlcGFsaXZlXCJdKTtcblxuY29uc3QgRklWRV9IT1VSU19NUyA9IDUgKiA2MCAqIDYwICogMV8wMDA7XG5jb25zdCBSRVNFVF9HUkFDRV9NUyA9IDFfMDAwO1xuXG4vLyB1c2FnZSBBUEkg7ISx6rO1IOydkeuLteydgCAx67aEIOy6kOyLnOuQnOuLpC4ga2VlcGFsaXZlIOynge2bhCDsponsi5wg7J6s7KGw7ZqM7ZWY66m0IOydtOyghCDsnIjrj4TsmrDrpbxcbi8vIOuLpOyLnCDrs7Trr4DroZwg7LqQ7Iuc6rCAIOyngOuCnCDrkqQg7ZWcIOuyiCDtmZXsnbjtlZjqs6AsIOq3uOuVjOuPhCDsg4gg7JyI64+E7Jqw6rCAIOyXhuycvOuptCDri6TsnYwgNWjquYzsp4Ag6riw64uk66aw64ukLlxuZXhwb3J0IGNvbnN0IFBPU1RfS0VFUEFMSVZFX1VTQUdFX0RFTEFZX01TID0gNjFfMDAwO1xuZXhwb3J0IGNvbnN0IEtFRVBBTElWRV9NT0RFTCA9IFwiYW50aHJvcGljL2NsYXVkZS1oYWlrdS00LTVcIjtcbmV4cG9ydCBjb25zdCBLRUVQQUxJVkVfUFJPSkVDVF9OQU1FID0gXCJxZ3JpZC10b2tlbi13aW5kb3cta2VlcGFsaXZlXCI7XG5leHBvcnQgY29uc3QgS0VFUEFMSVZFX1NFVFRJTkdfS0VZID0gXCJxZ3JpZC50b2tlbldpbmRvd0tlZXBhbGl2ZUVuYWJsZWRcIjtcbmV4cG9ydCBjb25zdCBLRUVQQUxJVkVfRU5WX0tFWSA9IFRPS0VOX1dJTkRPV19LRUVQQUxJVkVfUlVOTkVSX0VOVl9LRVk7XG5cbnR5cGUgS2VlcGFsaXZlVG9rZW4gPSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgcHJvdmlkZXI6IHN0cmluZztcbiAgYWN0aXZlOiBib29sZWFuO1xuICBrZWVwYWxpdmVfZW5hYmxlZDogYm9vbGVhbjtcbn07XG5cbnR5cGUgVGltZXJIYW5kbGUgPSBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuZXhwb3J0IHR5cGUgVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzID0ge1xuICBmaW5kVG9rZW5zOiAoKSA9PiBQcm9taXNlPEtlZXBhbGl2ZVRva2VuW10+O1xuICByZWFkVXNhZ2U6ICh0b2tlbklkOiBudW1iZXIpID0+IFByb21pc2U8VXNhZ2VSZXNwb25zZT47XG4gIGRpc3BhdGNoOiAoaW5wdXQ6IEludGVybmFsUXVlcnlJbnB1dCkgPT4gUHJvbWlzZTx1bmtub3duPjtcbiAgcmVhZFNldHRpbmc6IHR5cGVvZiBnZXRTZXR0aW5nO1xuICBpc1J1bm5lckVuYWJsZWQ6ICgpID0+IGJvb2xlYW47XG4gIG5vdzogKCkgPT4gbnVtYmVyO1xuICBzZXRUaW1lcjogKGNhbGxiYWNrOiAoKSA9PiB2b2lkLCBkZWxheU1zOiBudW1iZXIpID0+IFRpbWVySGFuZGxlO1xuICBjbGVhclRpbWVyOiAoaGFuZGxlOiBUaW1lckhhbmRsZSkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IGRlZmF1bHREZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMgPSB7XG4gIGZpbmRUb2tlbnM6ICgpID0+IFRva2VuTW9kZWwuZmluZEFjdGl2ZUJ5UHJvdmlkZXIoXCJBXCIsIFwiYW50aHJvcGljXCIpLFxuICByZWFkVXNhZ2U6ICh0b2tlbklkKSA9PiBRZ3JpZEZyYW1lLnVzYWdlKHRva2VuSWQpLFxuICBkaXNwYXRjaDogKGlucHV0KSA9PiBRZ3JpZEZyYW1lLnF1ZXJ5KGlucHV0KSxcbiAgcmVhZFNldHRpbmc6IGdldFNldHRpbmcsXG4gIGlzUnVubmVyRW5hYmxlZDogKCkgPT4gcHJvY2Vzcy5lbnZbS0VFUEFMSVZFX0VOVl9LRVldID09PSBcInRydWVcIixcbiAgbm93OiAoKSA9PiBEYXRlLm5vdygpLFxuICBzZXRUaW1lcjogKGNhbGxiYWNrLCBkZWxheU1zKSA9PiBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheU1zKSxcbiAgY2xlYXJUaW1lcjogKGhhbmRsZSkgPT4gY2xlYXJUaW1lb3V0KGhhbmRsZSksXG59O1xuXG5jb25zdCB0aW1lcnMgPSBuZXcgTWFwPG51bWJlciwgeyBoYW5kbGU6IFRpbWVySGFuZGxlOyBjbGVhcjogKGhhbmRsZTogVGltZXJIYW5kbGUpID0+IHZvaWQgfT4oKTtcbmNvbnN0IGZpcmVHdWFyZHMgPSBuZXcgTWFwPG51bWJlciwgeyB1bnRpbE1zOiBudW1iZXI7IGFsbG93RmlyZUF0RXhwaXJ5OiBib29sZWFuIH0+KCk7XG5sZXQgZ2VuZXJhdGlvbiA9IDA7XG5cbmZ1bmN0aW9uIGNsZWFyVG9rZW5UaW1lcih0b2tlbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgdGltZXIgPSB0aW1lcnMuZ2V0KHRva2VuSWQpO1xuICBpZiAoIXRpbWVyKSByZXR1cm47XG4gIHRpbWVyLmNsZWFyKHRpbWVyLmhhbmRsZSk7XG4gIHRpbWVycy5kZWxldGUodG9rZW5JZCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlVG9rZW4oXG4gIHRva2VuOiBLZWVwYWxpdmVUb2tlbixcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzLFxuICBleHBlY3RlZEdlbmVyYXRpb246IG51bWJlcixcbiAgZGVsYXlNczogbnVtYmVyLFxuICBhbGxvd0ZpcmU6IGJvb2xlYW4sXG4pOiB2b2lkIHtcbiAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuICBjbGVhclRva2VuVGltZXIodG9rZW4uaWQpO1xuICBjb25zdCBoYW5kbGUgPSBkZXBzLnNldFRpbWVyKFxuICAgICgpID0+IHtcbiAgICAgIHRpbWVycy5kZWxldGUodG9rZW4uaWQpO1xuICAgICAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuICAgICAgdm9pZCBpbnNwZWN0VG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgYWxsb3dGaXJlKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYGtlZXBhbGl2ZSBjeWNsZSBmYWlsZWQgZm9yICR7dG9rZW4ubmFtZX06ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICBzY2hlZHVsZUZhbGxiYWNrKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBNYXRoLm1heCgwLCBkZWxheU1zKSxcbiAgKTtcbiAgdGltZXJzLnNldCh0b2tlbi5pZCwgeyBoYW5kbGUsIGNsZWFyOiBkZXBzLmNsZWFyVGltZXIgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmVyVG9rZW4oXG4gIHRva2VuOiBLZWVwYWxpdmVUb2tlbixcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzLFxuICBleHBlY3RlZEdlbmVyYXRpb246IG51bWJlcixcbiAgZGVsYXlNczogbnVtYmVyLFxuICBhbGxvd0ZpcmVBdEV4cGlyeTogYm9vbGVhbixcbik6IHZvaWQge1xuICBjb25zdCB1bnRpbE1zID0gZGVwcy5ub3coKSArIGRlbGF5TXM7XG4gIGZpcmVHdWFyZHMuc2V0KHRva2VuLmlkLCB7IHVudGlsTXMsIGFsbG93RmlyZUF0RXhwaXJ5IH0pO1xuICBzY2hlZHVsZVRva2VuKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24sIGRlbGF5TXMsIGFsbG93RmlyZUF0RXhwaXJ5KTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVGYWxsYmFjayhcbiAgdG9rZW46IEtlZXBhbGl2ZVRva2VuLFxuICBkZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMsXG4gIGV4cGVjdGVkR2VuZXJhdGlvbjogbnVtYmVyLFxuKTogdm9pZCB7XG4gIGRlZmVyVG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgRklWRV9IT1VSU19NUywgdHJ1ZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluc3BlY3RUb2tlbihcbiAgdG9rZW46IEtlZXBhbGl2ZVRva2VuLFxuICBkZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMsXG4gIGV4cGVjdGVkR2VuZXJhdGlvbjogbnVtYmVyLFxuICBhbGxvd0ZpcmU6IGJvb2xlYW4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgbm93ID0gZGVwcy5ub3coKTtcbiAgY29uc3QgZ3VhcmQgPSBmaXJlR3VhcmRzLmdldCh0b2tlbi5pZCk7XG4gIGlmIChndWFyZCAmJiBndWFyZC51bnRpbE1zID4gbm93KSB7XG4gICAgc2NoZWR1bGVUb2tlbih0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uLCBndWFyZC51bnRpbE1zIC0gbm93LCBndWFyZC5hbGxvd0ZpcmVBdEV4cGlyeSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChndWFyZCkgZmlyZUd1YXJkcy5kZWxldGUodG9rZW4uaWQpO1xuXG4gIGxldCB1c2FnZTogVXNhZ2VSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICB1c2FnZSA9IGF3YWl0IGRlcHMucmVhZFVzYWdlKHRva2VuLmlkKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIud2FybihgdXNhZ2UgbG9va3VwIGZhaWxlZCBmb3IgJHt0b2tlbi5uYW1lfTogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuXG4gIGlmICh1c2FnZS5lcnJvcikge1xuICAgIGxvZ2dlci53YXJuKGB1c2FnZSBsb29rdXAgZmFpbGVkIGZvciAke3Rva2VuLm5hbWV9OiAke3VzYWdlLmVycm9yfWApO1xuICAgIHNjaGVkdWxlRmFsbGJhY2sodG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzZXRzQXQgPSB1c2FnZS5maXZlSG91cj8ucmVzZXRzQXQ7XG4gIGlmIChyZXNldHNBdCkge1xuICAgIGNvbnN0IHJlc2V0TXMgPSBEYXRlLnBhcnNlKHJlc2V0c0F0KTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShyZXNldE1zKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYGludmFsaWQgZml2ZS1ob3VyIHJlc2V0IGZvciAke3Rva2VuLm5hbWV9OiAke3Jlc2V0c0F0fWApO1xuICAgICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zcGVjdGVkQXQgPSBkZXBzLm5vdygpO1xuICAgIGlmIChyZXNldE1zID4gaW5zcGVjdGVkQXQpIHtcbiAgICAgIGZpcmVHdWFyZHMuZGVsZXRlKHRva2VuLmlkKTtcbiAgICAgIHNjaGVkdWxlVG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgcmVzZXRNcyAtIGluc3BlY3RlZEF0ICsgUkVTRVRfR1JBQ0VfTVMsIHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIOuwnOyCrCDsp4Htm4Qg7ZmV7J247JeQ7ISc64qUIOy6kOyLnOuQnCBudWxsL+qzvOqxsCByZXNldOydhCDrtJDrj4Qg64uk7IucIOuwnOyCrO2VmOyngCDslYrripTri6QuXG4gIGlmICghYWxsb3dGaXJlKSB7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkZWZlclRva2VuKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24sIFBPU1RfS0VFUEFMSVZFX1VTQUdFX0RFTEFZX01TLCBmYWxzZSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZGVwcy5kaXNwYXRjaCh7XG4gICAgICBwcm9tcHQ6IFwiUmVwbHkgT0suXCIsXG4gICAgICBtb2RlbDogS0VFUEFMSVZFX01PREVMLFxuICAgICAgZWZmb3J0OiBcImxvd1wiLFxuICAgICAgcHJvamVjdE5hbWU6IEtFRVBBTElWRV9QUk9KRUNUX05BTUUsXG4gICAgICBwcmVmZXJyZWRUb2tlbklkOiB0b2tlbi5pZCxcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbyhga2VlcGFsaXZlIHNlbnQgZm9yICR7dG9rZW4ubmFtZX1gKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIud2Fybihga2VlcGFsaXZlIGZhaWxlZCBmb3IgJHt0b2tlbi5uYW1lfTogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwb3N0RmlyZUd1YXJkID0gZmlyZUd1YXJkcy5nZXQodG9rZW4uaWQpO1xuICBpZiAocG9zdEZpcmVHdWFyZCkge1xuICAgIHNjaGVkdWxlVG9rZW4oXG4gICAgICB0b2tlbixcbiAgICAgIGRlcHMsXG4gICAgICBleHBlY3RlZEdlbmVyYXRpb24sXG4gICAgICBNYXRoLm1heCgwLCBwb3N0RmlyZUd1YXJkLnVudGlsTXMgLSBkZXBzLm5vdygpKSxcbiAgICAgIHBvc3RGaXJlR3VhcmQuYWxsb3dGaXJlQXRFeHBpcnksXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhclNjaGVkdWxlZFRpbWVycygpOiB2b2lkIHtcbiAgZ2VuZXJhdGlvbisrO1xuICBmb3IgKGNvbnN0IHRva2VuSWQgb2YgdGltZXJzLmtleXMoKSkgY2xlYXJUb2tlblRpbWVyKHRva2VuSWQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRUb2tlbldpbmRvd0tlZXBhbGl2ZShcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzID0gZGVmYXVsdERlcHMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY2xlYXJTY2hlZHVsZWRUaW1lcnMoKTtcbiAgaWYgKCFkZXBzLmlzUnVubmVyRW5hYmxlZCgpKSB7XG4gICAgbG9nZ2VyLmluZm8oXCJ0b2tlbiB3aW5kb3cga2VlcGFsaXZlIHJ1bm5lciBkaXNhYmxlZCBmb3IgdGhpcyBpbnN0YW5jZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGRlcHMucmVhZFNldHRpbmcoS0VFUEFMSVZFX1NFVFRJTkdfS0VZKSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgbG9nZ2VyLmluZm8oXCJ0b2tlbiB3aW5kb3cga2VlcGFsaXZlIGRpc2FibGVkXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBleHBlY3RlZEdlbmVyYXRpb24gPSBnZW5lcmF0aW9uO1xuXG4gIGxldCB0b2tlbnM6IEtlZXBhbGl2ZVRva2VuW107XG4gIHRyeSB7XG4gICAgdG9rZW5zID0gYXdhaXQgZGVwcy5maW5kVG9rZW5zKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLndhcm4oYHRva2VuIGRpc2NvdmVyeSBmYWlsZWQ6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZ2VuZXJhdGlvbiAhPT0gZXhwZWN0ZWRHZW5lcmF0aW9uKSByZXR1cm47XG5cbiAgY29uc3QgdGFyZ2V0cyA9IHRva2Vucy5maWx0ZXIoXG4gICAgKHRva2VuKSA9PiB0b2tlbi5hY3RpdmUgJiYgdG9rZW4ucHJvdmlkZXIgPT09IFwiYW50aHJvcGljXCIgJiYgdG9rZW4ua2VlcGFsaXZlX2VuYWJsZWQsXG4gICk7XG4gIGNvbnN0IHRhcmdldElkcyA9IG5ldyBTZXQodGFyZ2V0cy5tYXAoKHRva2VuKSA9PiB0b2tlbi5pZCkpO1xuICBmb3IgKGNvbnN0IHRva2VuSWQgb2YgZmlyZUd1YXJkcy5rZXlzKCkpIHtcbiAgICBpZiAoIXRhcmdldElkcy5oYXModG9rZW5JZCkpIGZpcmVHdWFyZHMuZGVsZXRlKHRva2VuSWQpO1xuICB9XG4gIGxvZ2dlci5pbmZvKGB0b2tlbiB3aW5kb3cga2VlcGFsaXZlIHNjaGVkdWxpbmcgJHt0YXJnZXRzLmxlbmd0aH0gdG9rZW4ocylgKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwodGFyZ2V0cy5tYXAoKHRva2VuKSA9PiBpbnNwZWN0VG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgdHJ1ZSkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2NoZWR1bGVUb2tlbldpbmRvd0tlZXBhbGl2ZShcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzID0gZGVmYXVsdERlcHMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIHN0YXJ0VG9rZW5XaW5kb3dLZWVwYWxpdmUoZGVwcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wVG9rZW5XaW5kb3dLZWVwYWxpdmUoKTogdm9pZCB7XG4gIGNsZWFyU2No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