sonamu 0.12.0 → 0.13.1

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 (275) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +1 -2
  2. package/dist/ai/agents/agent.js +2 -3
  3. package/dist/ai/agents/index.js +1 -2
  4. package/dist/ai/index.js +1 -2
  5. package/dist/ai/providers/rtzr/api.js +1 -2
  6. package/dist/ai/providers/rtzr/error.js +2 -3
  7. package/dist/ai/providers/rtzr/model.js +1 -2
  8. package/dist/ai/providers/rtzr/options.js +1 -2
  9. package/dist/ai/providers/rtzr/provider.js +1 -2
  10. package/dist/ai/providers/rtzr/utils.js +1 -2
  11. package/dist/api/base-frame.js +4 -4
  12. package/dist/api/caster.d.ts +1 -1
  13. package/dist/api/caster.d.ts.map +1 -1
  14. package/dist/api/caster.js +9 -9
  15. package/dist/api/code-converters.js +6 -5
  16. package/dist/api/config.d.ts +1 -1
  17. package/dist/api/config.d.ts.map +1 -1
  18. package/dist/api/config.js +2 -3
  19. package/dist/api/context.d.ts +2 -3
  20. package/dist/api/context.d.ts.map +1 -1
  21. package/dist/api/context.js +2 -3
  22. package/dist/api/decorators.js +2 -3
  23. package/dist/api/http-validator.js +2 -3
  24. package/dist/api/index.js +8 -3
  25. package/dist/api/secret.js +1 -2
  26. package/dist/api/sonamu.d.ts +3 -5
  27. package/dist/api/sonamu.d.ts.map +1 -1
  28. package/dist/api/sonamu.js +19 -18
  29. package/dist/api/validator.js +1 -2
  30. package/dist/api/websocket-helpers.js +2 -3
  31. package/dist/auth/audit-log/builders.js +1 -2
  32. package/dist/auth/audit-log/client-ip.js +2 -3
  33. package/dist/auth/audit-log/events.js +1 -2
  34. package/dist/auth/audit-log/plugin.d.ts.map +1 -1
  35. package/dist/auth/audit-log/plugin.js +2 -3
  36. package/dist/auth/audit-log-ingestor.js +2 -3
  37. package/dist/auth/auth-generator.js +2 -3
  38. package/dist/auth/better-auth-entities.js +1 -2
  39. package/dist/auth/better-auth-request.js +2 -3
  40. package/dist/auth/index.js +2 -3
  41. package/dist/auth/knex-adapter.js +2 -3
  42. package/dist/auth/plugins/entity-definitions/admin.js +1 -2
  43. package/dist/auth/plugins/entity-definitions/anonymous.js +1 -2
  44. package/dist/auth/plugins/entity-definitions/api-key.js +1 -2
  45. package/dist/auth/plugins/entity-definitions/audit-log.js +1 -2
  46. package/dist/auth/plugins/entity-definitions/index.js +1 -2
  47. package/dist/auth/plugins/entity-definitions/jwt.js +1 -2
  48. package/dist/auth/plugins/entity-definitions/organization.js +1 -2
  49. package/dist/auth/plugins/entity-definitions/passkey.js +1 -2
  50. package/dist/auth/plugins/entity-definitions/phone-number.js +1 -2
  51. package/dist/auth/plugins/entity-definitions/sso.js +1 -2
  52. package/dist/auth/plugins/entity-definitions/two-factor.js +1 -2
  53. package/dist/auth/plugins/entity-definitions/username.js +1 -2
  54. package/dist/auth/plugins/wrappers/admin.d.ts +33 -32
  55. package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
  56. package/dist/auth/plugins/wrappers/admin.js +2 -3
  57. package/dist/auth/plugins/wrappers/anonymous.js +2 -3
  58. package/dist/auth/plugins/wrappers/api-key.js +2 -3
  59. package/dist/auth/plugins/wrappers/jwt.js +2 -3
  60. package/dist/auth/plugins/wrappers/organization.js +2 -3
  61. package/dist/auth/plugins/wrappers/passkey.js +2 -3
  62. package/dist/auth/plugins/wrappers/phone-number.d.ts +43 -1
  63. package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
  64. package/dist/auth/plugins/wrappers/phone-number.js +2 -3
  65. package/dist/auth/plugins/wrappers/sso.d.ts +138 -187
  66. package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
  67. package/dist/auth/plugins/wrappers/sso.js +1 -2
  68. package/dist/auth/plugins/wrappers/two-factor.d.ts +51 -10
  69. package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
  70. package/dist/auth/plugins/wrappers/two-factor.js +2 -3
  71. package/dist/auth/plugins/wrappers/username.d.ts +39 -5
  72. package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
  73. package/dist/auth/plugins/wrappers/username.js +2 -3
  74. package/dist/bin/build-config.js +5 -5
  75. package/dist/bin/compiler-policy.js +2 -3
  76. package/dist/bin/fixture.js +7 -5
  77. package/dist/bin/hmr-hook-register.js +1 -2
  78. package/dist/bin/migrate-targets.js +2 -3
  79. package/dist/bin/test-command.js +2 -3
  80. package/dist/bin/ts-loader-register.js +2 -3
  81. package/dist/bin/ts-loader-registration.js +2 -3
  82. package/dist/bin/typecheck-web.js +2 -3
  83. package/dist/cache/cache-manager.js +1 -2
  84. package/dist/cache/decorator.js +2 -3
  85. package/dist/cache/drivers.js +1 -2
  86. package/dist/cache/index.js +2 -3
  87. package/dist/cache-control/cache-control.js +1 -2
  88. package/dist/code-formatting/index.js +2 -3
  89. package/dist/code-formatting/oxfmt.js +2 -3
  90. package/dist/code-formatting/oxlint.js +2 -3
  91. package/dist/compress/compress.js +1 -2
  92. package/dist/compress/index.js +2 -2
  93. package/dist/compress/types.d.ts +1 -1
  94. package/dist/compress/types.d.ts.map +1 -1
  95. package/dist/cone/cone-generator.js +2 -3
  96. package/dist/database/_batch_update.js +1 -2
  97. package/dist/database/base-model.js +4 -4
  98. package/dist/database/db.js +4 -4
  99. package/dist/database/knex.js +2 -3
  100. package/dist/database/puri-wrapper.js +2 -3
  101. package/dist/database/puri.js +23 -22
  102. package/dist/database/puri.types.js +1 -2
  103. package/dist/database/transaction-context.js +1 -2
  104. package/dist/database/upsert-builder.js +2 -3
  105. package/dist/dict/en.js +2 -3
  106. package/dist/dict/index.js +3 -3
  107. package/dist/dict/ko.js +2 -3
  108. package/dist/dict/rc-keys.js +1 -2
  109. package/dist/dict/sd.js +2 -3
  110. package/dist/dict/sonamu-dictionary.js +7 -6
  111. package/dist/dict/utils.js +2 -3
  112. package/dist/entity/entity-manager.d.ts +66 -66
  113. package/dist/entity/entity-manager.js +4 -4
  114. package/dist/entity/entity-template-cone.js +2 -3
  115. package/dist/entity/entity.js +21 -18
  116. package/dist/env.js +1 -2
  117. package/dist/exceptions/error-handler.d.ts.map +1 -1
  118. package/dist/exceptions/error-handler.js +2 -3
  119. package/dist/exceptions/so-exceptions.js +2 -3
  120. package/dist/filter/index.js +3 -2
  121. package/dist/filter/types.js +1 -2
  122. package/dist/filter/utils.js +7 -6
  123. package/dist/index.js +39 -5
  124. package/dist/logger/category.js +2 -3
  125. package/dist/logger/configure.js +5 -5
  126. package/dist/migration/code-generation.js +23 -16
  127. package/dist/migration/index-where-predicate.js +2 -3
  128. package/dist/migration/migration-set.js +2 -3
  129. package/dist/migration/migrator.js +2 -3
  130. package/dist/migration/postgresql-schema-reader.js +6 -9
  131. package/dist/migration/slack-confirm.js +2 -3
  132. package/dist/naite/naite-reporter.js +2 -3
  133. package/dist/naite/naite.js +10 -8
  134. package/dist/runtime-type.js +2 -3
  135. package/dist/ssr/hmr-opt-out.js +1 -2
  136. package/dist/ssr/index.js +7 -4
  137. package/dist/ssr/registry.js +1 -2
  138. package/dist/ssr/renderer.js +2 -3
  139. package/dist/storage/base-file.js +1 -2
  140. package/dist/storage/buffered-file.js +2 -3
  141. package/dist/storage/drivers.js +1 -2
  142. package/dist/storage/index.js +2 -3
  143. package/dist/storage/s3-driver.js +1 -2
  144. package/dist/storage/storage-manager.js +2 -3
  145. package/dist/storage/uploaded-file.js +2 -3
  146. package/dist/stream/__tests__/ws-test-helpers.js +2 -3
  147. package/dist/stream/index.js +11 -2
  148. package/dist/stream/sse.js +1 -2
  149. package/dist/stream/ws-audience-resolver.js +2 -3
  150. package/dist/stream/ws-audience.js +1 -2
  151. package/dist/stream/ws-cluster-bus.js +1 -2
  152. package/dist/stream/ws-delivery.js +2 -3
  153. package/dist/stream/ws-frame.js +1 -2
  154. package/dist/stream/ws-local-connection-store.js +2 -3
  155. package/dist/stream/ws-presence-index.js +1 -2
  156. package/dist/stream/ws-presence-store.js +2 -3
  157. package/dist/stream/ws-registry.js +2 -3
  158. package/dist/stream/ws-session-id.js +1 -2
  159. package/dist/stream/ws-telemetry-memory.js +3 -4
  160. package/dist/stream/ws-telemetry-trace.js +1 -2
  161. package/dist/stream/ws-telemetry.js +2 -3
  162. package/dist/stream/ws.js +2 -3
  163. package/dist/syncer/api-parser.js +2 -3
  164. package/dist/syncer/checksum.js +4 -4
  165. package/dist/syncer/code-generator.js +4 -4
  166. package/dist/syncer/entity-operations.js +2 -3
  167. package/dist/syncer/event-batcher.js +1 -2
  168. package/dist/syncer/file-copy.js +2 -3
  169. package/dist/syncer/file-patterns.js +2 -3
  170. package/dist/syncer/file-tracking.js +2 -3
  171. package/dist/syncer/filesystem-dependencies.js +1 -2
  172. package/dist/syncer/index.js +8 -2
  173. package/dist/syncer/module-loader.js +8 -6
  174. package/dist/syncer/syncer-actions.js +8 -7
  175. package/dist/syncer/syncer.js +13 -8
  176. package/dist/syncer/watcher.js +2 -3
  177. package/dist/tasks/decorator.js +1 -2
  178. package/dist/tasks/step-wrapper.js +2 -3
  179. package/dist/tasks/workflow-manager.js +2 -3
  180. package/dist/template/entity-converter.js +17 -16
  181. package/dist/template/helpers.js +2 -3
  182. package/dist/template/implementations/entity.template.js +2 -3
  183. package/dist/template/implementations/entry-server.template.js +2 -3
  184. package/dist/template/implementations/generated.template.js +2 -3
  185. package/dist/template/implementations/generated_http.template.js +6 -6
  186. package/dist/template/implementations/generated_sso.template.js +2 -3
  187. package/dist/template/implementations/http_validators.template.js +2 -3
  188. package/dist/template/implementations/init_types.template.js +2 -3
  189. package/dist/template/implementations/model.template.js +4 -4
  190. package/dist/template/implementations/model_test.template.js +2 -3
  191. package/dist/template/implementations/queries.template.js +2 -3
  192. package/dist/template/implementations/sd.template.js +2 -3
  193. package/dist/template/implementations/services.template.js +2 -3
  194. package/dist/template/implementations/view_form.template.js +12 -9
  195. package/dist/template/implementations/view_id_all_select.template.js +2 -3
  196. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  197. package/dist/template/implementations/view_list.template.js +19 -17
  198. package/dist/template/implementations/view_search_input.template.js +2 -3
  199. package/dist/template/index.js +9 -3
  200. package/dist/template/template-manager.js +2 -3
  201. package/dist/template/template-types.js +1 -2
  202. package/dist/template/template.js +2 -3
  203. package/dist/template/zod-converter.js +54 -47
  204. package/dist/testing/_relation-graph.js +2 -3
  205. package/dist/testing/bootstrap.js +2 -3
  206. package/dist/testing/data-explorer.js +2 -3
  207. package/dist/testing/dev-test-routes.js +2 -3
  208. package/dist/testing/dev-vitest-manager.js +15 -12
  209. package/dist/testing/faker-mappings.js +1 -2
  210. package/dist/testing/filesystem.js +2 -3
  211. package/dist/testing/fixture-generator.js +2 -3
  212. package/dist/testing/fixture-loader.js +1 -2
  213. package/dist/testing/fixture-manager.js +12 -9
  214. package/dist/testing/global-setup.js +5 -5
  215. package/dist/testing/index.js +6 -3
  216. package/dist/testing/naite-vitest-reporter.js +1 -2
  217. package/dist/testing/parallel-db-manager.js +2 -3
  218. package/dist/testing/vitest-helpers.js +2 -3
  219. package/dist/tooling/__tests__/helpers/sonamu-test-root.js +2 -3
  220. package/dist/tooling/cdd-service.js +1 -2
  221. package/dist/tooling/cli-tooling.js +1 -2
  222. package/dist/tooling/fixture-service.js +1 -2
  223. package/dist/tooling/index.js +1 -2
  224. package/dist/tooling/test-run-client.js +2 -3
  225. package/dist/tsdown.api.config.js +1 -2
  226. package/dist/types/types.js +2 -3
  227. package/dist/ui/ai-api.d.ts.map +1 -1
  228. package/dist/ui/ai-api.js +4 -5
  229. package/dist/ui/ai-client.d.ts +2 -2
  230. package/dist/ui/ai-client.d.ts.map +1 -1
  231. package/dist/ui/ai-client.js +9 -8
  232. package/dist/ui/api.d.ts.map +1 -1
  233. package/dist/ui/api.js +11 -8
  234. package/dist/ui/async-route.js +1 -2
  235. package/dist/ui/cdd-service.js +22 -21
  236. package/dist/ui/migrations-api.js +6 -5
  237. package/dist/ui-web/assets/index-QDMyy31K.js +180 -0
  238. package/dist/ui-web/assets/index-dV7akMFB.css +1 -0
  239. package/dist/ui-web/index.html +2 -2
  240. package/dist/utils/async-utils.js +1 -2
  241. package/dist/utils/class-name.js +1 -2
  242. package/dist/utils/console-util.js +1 -2
  243. package/dist/utils/controller.js +2 -3
  244. package/dist/utils/esm-utils.js +1 -2
  245. package/dist/utils/fs-utils.js +2 -3
  246. package/dist/utils/lodash-able.js +1 -2
  247. package/dist/utils/model.js +1 -2
  248. package/dist/utils/object-utils.js +2 -3
  249. package/dist/utils/path-utils.js +2 -3
  250. package/dist/utils/process-utils.js +2 -3
  251. package/dist/utils/runtime-value.js +1 -2
  252. package/dist/utils/sql-parser.js +2 -3
  253. package/dist/utils/type-utils.js +8 -8
  254. package/dist/utils/utils.js +2 -3
  255. package/dist/utils/zod-error.js +2 -3
  256. package/dist/vector/chunking.js +1 -2
  257. package/dist/vector/config.js +1 -2
  258. package/dist/vector/embedding.js +4 -4
  259. package/package.json +67 -67
  260. package/src/ai/agents/agent.ts +1 -1
  261. package/src/api/__tests__/sonamu.plugins.test.ts +11 -1
  262. package/src/api/__tests__/sonamu.websocket.test.ts +6 -10
  263. package/src/api/config.ts +1 -1
  264. package/src/api/context.ts +2 -8
  265. package/src/api/sonamu.ts +26 -21
  266. package/src/auth/audit-log/plugin.ts +2 -0
  267. package/src/compress/types.ts +1 -1
  268. package/src/exceptions/error-handler.ts +3 -2
  269. package/src/template/implementations/model.template.ts +3 -3
  270. package/src/template/implementations/view_list.template.ts +12 -13
  271. package/src/ui/ai-api.ts +4 -2
  272. package/src/ui/ai-client.ts +2 -2
  273. package/src/ui/api.ts +58 -62
  274. package/dist/ui-web/assets/index-BMdIyKXS.css +0 -1
  275. package/dist/ui-web/assets/index-LpE8u19O.js +0 -178
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { init_runtime_value, isObjectValue, isStringValue } from "../utils/runtime-value.js";
3
3
  import { z } from "zod";
4
- //#region src/types/types.ts
4
+ // src/types/types.ts
5
5
  function describeInputField(input, field) {
6
6
  if (!isObjectValue(input)) return "undefined";
7
7
  const fieldEntry = Object.entries(input).find(([key]) => key === field);
@@ -782,8 +782,7 @@ var init_types = __esmMin((() => {
782
782
  code: z.string()
783
783
  });
784
784
  }));
785
- //#endregion
786
785
  init_types();
787
786
  export { ApiParamType, BUILT_IN_TYPE_IDS, EntityJsonSchema, GenerateOptions, KnownOpclassValues, NormalPropSchema, PathAndCode, RelationPropSchema, RenderingNode, SonamuFileArraySchema, SonamuFileSchema, SonamuQueryMode, SonamuSemanticParams, TemplateKey, TemplateOptions, ZodStringFormat, getDescription, getEnumDefValues, getSubsetFields, init_types, isBelongsToOneRelationProp, isBigIntegerArrayProp, isBigIntegerProp, isBigIntegerSingleProp, isBooleanArrayProp, isBooleanProp, isBooleanSingleProp, isCustomJoinClause, isDateArrayProp, isDateProp, isDateSingleProp, isEnumArrayProp, isEnumDefWithCone, isEnumProp, isEnumSingleProp, isHasManyRelationProp, isIntegerArrayProp, isIntegerProp, isIntegerSingleProp, isInternalSubsetField, isJsonProp, isKnexError, isManyToManyRelationProp, isNumberArrayProp, isNumberProp, isNumberSingleProp, isNumericArrayProp, isNumericProp, isNumericSingleProp, isOneToOneRelationProp, isRelationProp, isSearchTextJsonSourceZodType, isSearchTextProp, isStringArrayProp, isStringProp, isStringSingleProp, isSubsetDefWithCone, isTsVectorProp, isUuidArrayProp, isUuidProp, isUuidSingleProp, isVectorArrayProp, isVectorProp, isVectorSingleProp, isVirtualCodeProp, isVirtualProp, isVirtualQueryProp, normalizeSubsetField, zArrayable };
788
787
 
789
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRmFzdGlmeVJlcGx5LCB0eXBlIEZhc3RpZnlSZXF1ZXN0IH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IHR5cGUgQXBpRGVjb3JhdG9yT3B0aW9ucywgdHlwZSBDb250ZXh0IGFzIEFwaUNvbnRleHQgfSBmcm9tIFwiLi4vYXBpXCI7XG5pbXBvcnQgeyB0eXBlIENhY2hlQ29udHJvbEhhbmRsZXIgfSBmcm9tIFwiLi4vY2FjaGUtY29udHJvbC90eXBlc1wiO1xuaW1wb3J0IHsgaXNPYmplY3RWYWx1ZSwgaXNTdHJpbmdWYWx1ZSB9IGZyb20gXCIuLi91dGlscy9ydW50aW1lLXZhbHVlXCI7XG5pbXBvcnQgeyB0eXBlIEd1YXJkS2V5IH0gZnJvbSBcIi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcblxuZnVuY3Rpb24gZGVzY3JpYmVJbnB1dEZpZWxkPFZhbHVlPihpbnB1dDogVmFsdWUsIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWlzT2JqZWN0VmFsdWUoaW5wdXQpKSB7XG4gICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gIH1cbiAgY29uc3QgZmllbGRFbnRyeSA9IE9iamVjdC5lbnRyaWVzKGlucHV0KS5maW5kKChba2V5XSkgPT4ga2V5ID09PSBmaWVsZCk7XG4gIHJldHVybiBTdHJpbmcoZmllbGRFbnRyeT8uWzFdKTtcbn1cblxuLypcbiAgVXRpbGl0eSBUeXBlc1xuKi9cbmV4cG9ydCBmdW5jdGlvbiB6QXJyYXlhYmxlPFQgZXh0ZW5kcyB6LlpvZFR5cGVBbnk+KHNjaGVtYTogVCk6IHouWm9kVW5pb248W1QsIHouWm9kQXJyYXk8VD5dPiB7XG4gIHJldHVybiB6LnVuaW9uKFtzY2hlbWEsIHNjaGVtYS5hcnJheSgpXSk7XG59XG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBhbnkgaXMgdXNlZCB0byBtYWtlIHRoZSB0eXBlIGRpc3RyaWJ1dGl2ZVxuZXhwb3J0IHR5cGUgRGlzdHJpYnV0aXZlT21pdDxULCBLIGV4dGVuZHMga2V5b2YgYW55PiA9IFQgZXh0ZW5kcyBhbnkgPyBPbWl0PFQsIEs+IDogbmV2ZXI7XG5cbi8qXG4gIE1vZGVsLURlZmluaXRpb25cbiovXG5cbi8qKlxuICog67aA66qoIEVudGl0eSBmaXh0dXJlIOyDneyEsSDsi5wg7ZWo6ruYIOyDneyEse2VoCBjb21wYW5pb24gRW50aXR5IOyEpOyglVxuICpcbiAqIOyYiDogVXNlciBmaXh0dXJlIOyDneyEsSDsi5wgY3JlZGVudGlhbHMgQWNjb3VudOulvCDtlajqu5gg7IOd7ISxXG4gKi9cbmV4cG9ydCB0eXBlIEpzb25WYWx1ZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IG51bGxcbiAgfCBKc29uVmFsdWVbXVxuICB8IHsgW2tleTogc3RyaW5nXTogSnNvblZhbHVlIH07XG5cbmNvbnN0IEZpeHR1cmVDb21wYW5pb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGVudGl0eTogei5zdHJpbmcoKSxcbiAgb3ZlcnJpZGVzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgY291bnQ6IHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKiBjb25lIOuplO2DgOuNsOydtO2EsOulvCDqsoDspp3tlZjrqbTshJwg7IKs7Jqp7J6QIOygleydmCDtmZXsnqUg6rCS7J2AIOq3uOuMgOuhnCDrs7TsobTtlanri4jri6QuICovXG5jb25zdCBDb25lU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBub3RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgdGFnczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIGZpeHR1cmVHZW5lcmF0b3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBmaXh0dXJlRGVmYXVsdDogei51bmtub3duKCkub3B0aW9uYWwoKSxcbiAgICBmaXh0dXJlU3RyYXRlZ3k6IHoubGl0ZXJhbChcInNlcXVlbmNlXCIpLm9wdGlvbmFsKCksXG4gICAgZml4dHVyZUNvbXBhbmlvbnM6IHouYXJyYXkoRml4dHVyZUNvbXBhbmlvblNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICBmaXh0dXJlUGFyZW50T3ZlcnJpZGVzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgICBkYXRhU291cmNlOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgc3RyYXRlZ3k6IHouZW51bShbXCJzYW1wbGVcIiwgXCJpZHNcIiwgXCJxdWVyeVwiLCBcImZpbGVcIiwgXCJyZWNlbnRcIiwgXCJyYW5kb21cIl0pLFxuICAgICAgICBjb25maWc6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICAgLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5jYXRjaGFsbCh6LnVua25vd24oKSk7XG5cbmV4cG9ydCB0eXBlIEZpeHR1cmVDb21wYW5pb24gPSB6LmluZmVyPHR5cGVvZiBGaXh0dXJlQ29tcGFuaW9uU2NoZW1hPjtcbmV4cG9ydCB0eXBlIENvbmUgPSB6LmluZmVyPHR5cGVvZiBDb25lU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuZXJhdGVkQ29sdW1uVHlwZSA9IFwiU1RPUkVEXCIgfCBcIlZJUlRVQUxcIjtcbmV4cG9ydCB0eXBlIEdlbmVyYXRlZENvbHVtbiA9IHtcbiAgdHlwZTogR2VuZXJhdGVkQ29sdW1uVHlwZTtcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIENvbW1vblByb3AgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVsbGFibGU/OiBib29sZWFuO1xuICB0b0ZpbHRlcj86IHRydWU7XG4gIGRlc2M/OiBzdHJpbmc7XG4gIGRiRGVmYXVsdD86IHN0cmluZztcbiAgZ2VuZXJhdGVkPzogR2VuZXJhdGVkQ29sdW1uO1xuICBjb25lPzogQ29uZTsgLy8gY29uZSDrqZTtg4DrjbDsnbTthLBcbn07XG5cbi8qKlxuICogcHJvcOydmCDshKTrqoXsnYQg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIGNvbmUubm90ZeqwgCDsnojsnLzrqbQg7Jqw7ISgIOyCrOyaqe2VmOqzoCwg7JeG7Jy866m0IHByb3AuZGVzY+ulvCDsgqzsmqntlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXNjcmlwdGlvbihpdGVtOiB7IGRlc2M/OiBzdHJpbmc7IGNvbmU/OiBDb25lIH0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaXRlbS5jb25lPy5ub3RlIHx8IGl0ZW0uZGVzYztcbn1cbmV4cG9ydCB0eXBlIEludGVnZXJQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJpbnRlZ2VyXCI7XG59OyAvLyBQRzogaW50ZWdlciAvIFRTOiBudW1iZXIgLyBKU09OOiBudW1iZXJcbmV4cG9ydCB0eXBlIEludGVnZXJBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImludGVnZXJbXVwiO1xufTsgLy8gUEc6IGludGVnZXJbXSAvIFRTOiBudW1iZXJbXSAvIEpTT046IG51bWJlcltdXG5leHBvcnQgdHlwZSBCaWdJbnRlZ2VyUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiYmlnSW50ZWdlclwiO1xufTsgLy8gUEc6IGJpZ2ludCAvIFRTOiBiaWdpbnQgLyBKU09OOiBiaWdpbnRcbmV4cG9ydCB0eXBlIEJpZ0ludGVnZXJBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImJpZ0ludGVnZXJbXVwiO1xufTsgLy8gUEc6IGJpZ2ludFtdIC8gVFM6IGJpZ2ludFtdIC8gSlNPTjogYmlnaW50W11cblxuLyoqXG4gKiBab2QgNCBTdHJpbmcgRm9ybWF0IO2DgOyehVxuICogZW50aXR5Lmpzb27sl5DshJwgc3RyaW5nIO2DgOyeheydmCBwcm9w7JeQIHpvZEZvcm1hdCDsmLXshZjsnYQg7KeA7KCV7ZWY7JesXG4gKiBCYXNlU2NoZW1hIOyDneyEsSDsi5wgWm9k7J2YIHN0cmluZyBmb3JtYXQgdmFsaWRhdGlvbuydhCDsoIHsmqntlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCBab2RTdHJpbmdGb3JtYXQgPSB6LmVudW0oW1xuICAvLyDquLDrs7gg7Y+s66e3XG4gIFwiZW1haWxcIixcbiAgXCJ1dWlkXCIsXG4gIFwidXJsXCIsXG4gIFwiaHR0cFVybFwiLFxuICBcImhvc3RuYW1lXCIsXG4gIFwiZW1vamlcIixcbiAgXCJiYXNlNjRcIixcbiAgXCJiYXNlNjR1cmxcIixcbiAgXCJoZXhcIixcbiAgXCJqd3RcIixcbiAgXCJuYW5vaWRcIixcbiAgXCJjdWlkXCIsXG4gIFwiY3VpZDJcIixcbiAgXCJ1bGlkXCIsXG4gIFwiaXB2NFwiLFxuICBcImlwdjZcIixcbiAgXCJtYWNcIixcbiAgXCJjaWRydjRcIixcbiAgXCJjaWRydjZcIixcbiAgLy8gaGFzaCDtj6zrp7cgKOyVjOqzoOumrOymmOuzhClcbiAgXCJoYXNoTWQ1XCIsXG4gIFwiaGFzaFNoYTFcIixcbiAgXCJoYXNoU2hhMjU2XCIsXG4gIFwiaGFzaFNoYTM4NFwiLFxuICBcImhhc2hTaGE1MTJcIixcbiAgLy8gSVNPIO2PrOunt1xuICBcImlzb0RhdGVcIixcbiAgXCJpc29UaW1lXCIsXG4gIFwiaXNvRGF0ZXRpbWVcIixcbiAgXCJpc29EdXJhdGlvblwiLFxuXSk7XG5leHBvcnQgdHlwZSBab2RTdHJpbmdGb3JtYXQgPSB6LmluZmVyPHR5cGVvZiBab2RTdHJpbmdGb3JtYXQ+O1xuXG5leHBvcnQgdHlwZSBTdHJpbmdQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJzdHJpbmdcIjtcbiAgbGVuZ3RoPzogbnVtYmVyOyAvLyBQRzogdmFyY2hhcihuKSwgdGV4dCAvIFRTOiBzdHJpbmcgLyBKU09OOiBzdHJpbmdcbiAgem9kRm9ybWF0PzogWm9kU3RyaW5nRm9ybWF0O1xufTsgLy8gUEc6IHRleHQgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBTdHJpbmdBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInN0cmluZ1tdXCI7XG4gIGxlbmd0aD86IG51bWJlcjsgLy8gUEc6IHZhcmNoYXIobilbXSwgdGV4dFtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbiAgem9kRm9ybWF0PzogWm9kU3RyaW5nRm9ybWF0O1xufTsgLy8gUEc6IHZhcmNoYXIobilbXSwgdGV4dFtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIEVudW1Qcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJlbnVtXCI7XG4gIGlkOiBzdHJpbmc7XG4gIGxlbmd0aD86IG51bWJlcjtcbn07IC8vIFBHOiB0ZXh0IC8gVFM6IHN0cmluZyAvIEpTT046IHN0cmluZ1xuZXhwb3J0IHR5cGUgRW51bUFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZW51bVtdXCI7XG4gIGlkOiBzdHJpbmc7XG59OyAvLyBQRzogdGV4dFtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIE51bWJlclByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcIm51bWJlclwiO1xuICBwcmVjaXNpb24/OiBudW1iZXI7IC8vIFBHOiBudW1lcmljKHAsIHMpIC8gVFM6IG51bWJlciAvIEpTT046IG51bWJlclxuICBzY2FsZT86IG51bWJlcjsgLy8gUEc6IG51bWVyaWMocCwgcykgLyBUUzogbnVtYmVyIC8gSlNPTjogbnVtYmVyXG4gIG51bWJlclR5cGU/OiBcInJlYWxcIiB8IFwiZG91YmxlIHByZWNpc2lvblwiIHwgXCJudW1lcmljXCI7IC8vIOq4sOuzuOqwkjogbnVtZXJpY1xufTsgLy8gUEc6IG51bWVyaWMocCwgcykgLyBUUzogbnVtYmVyIC8gSlNPTjogbnVtYmVyXG5leHBvcnQgdHlwZSBOdW1iZXJBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcIm51bWJlcltdXCI7XG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgc2NhbGU/OiBudW1iZXI7XG4gIG51bWJlclR5cGU/OiBcInJlYWxcIiB8IFwiZG91YmxlIHByZWNpc2lvblwiIHwgXCJudW1lcmljXCI7IC8vIOq4sOuzuOqwkjogbnVtZXJpY1xufTsgLy8gUEc6IG51bWVyaWMocCwgcylbXSAvIFRTOiBudW1iZXJbXSAvIEpTT046IG51bWJlcltdXG5leHBvcnQgdHlwZSBOdW1lcmljUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwibnVtZXJpY1wiO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xufTsgLy8gUEc6IG51bWVyaWMocCwgcykgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBOdW1lcmljQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJudW1lcmljW11cIjtcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICBzY2FsZT86IG51bWJlcjtcbn07IC8vIFBHOiBudW1lcmljKHAsIHMpW10gLyBUUzogc3RyaW5nW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgQm9vbGVhblByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImJvb2xlYW5cIjtcbn07IC8vIFBHOiBib29sZWFuIC8gVFM6IGJvb2xlYW4gLyBKU09OOiBib29sZWFuXG5leHBvcnQgdHlwZSBCb29sZWFuQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJib29sZWFuW11cIjtcbn07IC8vIFBHOiBib29sZWFuW10gLyBUUzogYm9vbGVhbltdIC8gSlNPTjogYm9vbGVhbltdXG5leHBvcnQgdHlwZSBEYXRlUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZGF0ZVwiO1xuICAvLyDquLDrs7jqsJLsnYAgMywgbWljcm9zZWNvbmRz66W8IOyTsOugpOuptCA27J2EIOyNqOyVvO2VqCAoMCB+IDYpXG4gIHByZWNpc2lvbj86IG51bWJlcjtcbn07IC8vIFBHOiB0aW1lc3RhbXB6IC8gVFM6IERhdGUgLyBKU09OOiBzdHJpbmcoSVNPU3RyaW5nKVxuZXhwb3J0IHR5cGUgRGF0ZUFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZGF0ZVtdXCI7XG4gIC8vIOq4sOuzuOqwkuydgCAzLCBtaWNyb3NlY29uZHPrpbwg7JOw66Ck66m0IDbsnYQg7I2o7JW87ZWoICgwIH4gNilcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xufTsgLy8gUEc6IHRpbWVzdGFtcHR6W10gLyBUUzogRGF0ZVtdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIEpzb25Qcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJqc29uXCI7XG4gIGlkOiBzdHJpbmc7XG59OyAvLyBQRzoganNvbiAvIFRTOiBhbnkoaWQpIC8gSlNPTjogYW55XG5leHBvcnQgdHlwZSBTZWFyY2hUZXh0U291cmNlQ29sdW1uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhc2VJbnNlbnNpdGl2ZT86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgU2VhcmNoVGV4dFByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInNlYXJjaFRleHRcIjtcbiAgc291cmNlQ29sdW1uczogU2VhcmNoVGV4dFNvdXJjZUNvbHVtbltdO1xufTsgLy8gUEc6IHRleHQgKGdlbmVyYXRlZCkgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBVdWlkUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwidXVpZFwiO1xufTsgLy8gUEc6IHV1aWQgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBVdWlkQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ1dWlkW11cIjtcbn07IC8vIFBHOiB1dWlkW10gLyBUUzogc3RyaW5nW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgVmlydHVhbFByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInZpcnR1YWxcIjtcbiAgaWQ6IHN0cmluZztcbiAgdmlydHVhbFR5cGU/OiBcInF1ZXJ5XCIgfCBcImNvZGVcIjsgLy8gZGVmYXVsdDogXCJjb2RlXCJcbn07IC8vIFBHOiBub25lIC8gVFM6IGFueShpZCkgLyBKU09OOiBhbnlcbmV4cG9ydCB0eXBlIFZlY3RvclByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInZlY3RvclwiO1xuICBkaW1lbnNpb25zOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVmVjdG9yQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ2ZWN0b3JbXVwiO1xuICBkaW1lbnNpb25zOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVHNWZWN0b3JQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ0c3ZlY3RvclwiO1xufTtcbmV4cG9ydCB0eXBlIFJlbGF0aW9uVHlwZSA9IFwiSGFzTWFueVwiIHwgXCJCZWxvbmdzVG9PbmVcIiB8IFwiTWFueVRvTWFueVwiIHwgXCJPbmVUb09uZVwiO1xuZXhwb3J0IHR5cGUgUmVsYXRpb25PbiA9IFwiQ0FTQ0FERVwiIHwgXCJTRVQgTlVMTFwiIHwgXCJOTyBBQ1RJT05cIiB8IFwiU0VUIERFRkFVTFRcIiB8IFwiUkVTVFJJQ1RcIjtcbnR5cGUgX1JlbGF0aW9uUHJvcCA9IHtcbiAgdHlwZTogXCJyZWxhdGlvblwiO1xuICBuYW1lOiBzdHJpbmc7XG4gIHdpdGg6IHN0cmluZztcbiAgbnVsbGFibGU/OiBib29sZWFuOyAvLyBERUZBVUxUOiBmYWxzZVxuICB0b0ZpbHRlcj86IHRydWU7IC8vIERFRkFVTFQ6IGZhbHNlXG4gIGRlc2M/OiBzdHJpbmc7XG4gIGNvbmU/OiBDb25lOyAvLyBjb25lIOuplO2DgOuNsOydtO2EsFxufTtcbmV4cG9ydCB0eXBlIE9uZVRvT25lUmVsYXRpb25Qcm9wID0gX1JlbGF0aW9uUHJvcCAmIHtcbiAgcmVsYXRpb25UeXBlOiBcIk9uZVRvT25lXCI7XG4gIGN1c3RvbUpvaW5DbGF1c2U/OiBzdHJpbmc7XG59ICYgKFxuICAgIHwge1xuICAgICAgICBoYXNKb2luQ29sdW1uOiB0cnVlO1xuICAgICAgICB1c2VDb25zdHJhaW50PzogYm9vbGVhbjsgLy8gREVGQVVMVDogdHJ1ZVxuICAgICAgICBvblVwZGF0ZT86IFJlbGF0aW9uT247IC8vIERFRkFVTFQ6IFJFU1RSSUNUXG4gICAgICAgIG9uRGVsZXRlPzogUmVsYXRpb25PbjsgLy8gREVGQVVMVDogUkVTVFJJQ1RcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgaGFzSm9pbkNvbHVtbjogZmFsc2U7XG4gICAgICB9XG4gICk7XG5leHBvcnQgdHlwZSBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AgPSBfUmVsYXRpb25Qcm9wICYge1xuICByZWxhdGlvblR5cGU6IFwiQmVsb25nc1RvT25lXCI7XG4gIGN1c3RvbUpvaW5DbGF1c2U/OiBzdHJpbmc7XG4gIHVzZUNvbnN0cmFpbnQ/OiBib29sZWFuOyAvLyBERUZBVUxUOiB0cnVlXG4gIG9uVXBkYXRlPzogUmVsYXRpb25PbjsgLy8gREVGQVVMVDogUkVTVFJJQ1RcbiAgb25EZWxldGU/OiBSZWxhdGlvbk9uOyAvLyBERUZBVUxUOiBSRVNUUklDVFxufTtcbmV4cG9ydCB0eXBlIEhhc01hbnlSZWxhdGlvblByb3AgPSBfUmVsYXRpb25Qcm9wICYge1xuICByZWxhdGlvblR5cGU6IFwiSGFzTWFueVwiO1xuICBqb2luQ29sdW1uOiBzdHJpbmc7XG4gIGZyb21Db2x1bW4/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgTWFueVRvTWFueVJlbGF0aW9uUHJvcCA9IF9SZWxhdGlvblByb3AgJiB7XG4gIHJlbGF0aW9uVHlwZTogXCJNYW55VG9NYW55XCI7XG4gIGpvaW5UYWJsZTogYCR7c3RyaW5nfV9fJHtzdHJpbmd9YDtcbiAgb25VcGRhdGU6IFJlbGF0aW9uT247XG4gIG9uRGVsZXRlOiBSZWxhdGlvbk9uO1xufTtcbmV4cG9ydCB0eXBlIFJlbGF0aW9uUHJvcCA9XG4gIHwgT25lVG9PbmVSZWxhdGlvblByb3BcbiAgfCBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3BcbiAgfCBIYXNNYW55UmVsYXRpb25Qcm9wXG4gIHwgTWFueVRvTWFueVJlbGF0aW9uUHJvcDtcblxuZXhwb3J0IHR5cGUgRW50aXR5UHJvcCA9XG4gIHwgSW50ZWdlclByb3BcbiAgfCBJbnRlZ2VyQXJyYXlQcm9wXG4gIHwgQmlnSW50ZWdlclByb3BcbiAgfCBCaWdJbnRlZ2VyQXJyYXlQcm9wXG4gIHwgU3RyaW5nUHJvcFxuICB8IFN0cmluZ0FycmF5UHJvcFxuICB8IEVudW1Qcm9wXG4gIHwgRW51bUFycmF5UHJvcFxuICB8IE51bWJlclByb3BcbiAgfCBOdW1iZXJBcnJheVByb3BcbiAgfCBOdW1lcmljUHJvcFxuICB8IE51bWVyaWNBcnJheVByb3BcbiAgfCBCb29sZWFuUHJvcFxuICB8IEJvb2xlYW5BcnJheVByb3BcbiAgfCBEYXRlUHJvcFxuICB8IERhdGVBcnJheVByb3BcbiAgfCBVdWlkUHJvcFxuICB8IFV1aWRBcnJheVByb3BcbiAgfCBKc29uUHJvcFxuICB8IFNlYXJjaFRleHRQcm9wXG4gIHwgVmlydHVhbFByb3BcbiAgfCBWZWN0b3JQcm9wXG4gIHwgVmVjdG9yQXJyYXlQcm9wXG4gIHwgVHNWZWN0b3JQcm9wXG4gIHwgUmVsYXRpb25Qcm9wO1xuXG4vKipcbiAqIFNvbmFtdUZpbGUgVHlwZXNcbiAqXG4gKiDtjIzsnbwg7JeF66Gc65Oc66W8IOychO2VnCBKU09OIO2DgOyeheyeheuLiOuLpC5cbiAqIEVudGl0eeydmCBqc29uIOyGjeyEseyXkOyEnCBpZOuhnCBcIlNvbmFtdUZpbGVcIiDrmJDripQgXCJTb25hbXVGaWxlW11cIuydhCDsp4DsoJXtlZjsl6wg7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIO2UhOuhnOygne2KuOuzhCDrj4TrqZTsnbgg7ZWE65Oc66W8IOy2lOqwgO2VmOugpOuptCBgU29uYW11RmlsZUV4dGVuZGDrpbwg7ZmV7J6l7ZWp64uI64ukLlxuICogKENvbnRleHTsnZggYENvbnRleHRFeHRlbmRg7JmAIOuPmeydvO2VnCBkZWNsYXJhdGlvbiBtZXJnaW5nIO2MqO2EtClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hbXVGaWxlRXh0ZW5kIHt9XG5cbmV4cG9ydCB0eXBlIFNvbmFtdUZpbGVCYXNlID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBtaW1lX3R5cGU6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTb25hbXVGaWxlIGV4dGVuZHMgU29uYW11RmlsZUJhc2UsIFNvbmFtdUZpbGVFeHRlbmQge31cblxuLyoqXG4gKiBVcGxvYWRQYXJhbXNcbiAqXG4gKiBGaWxlSW5wdXTsnZggdXBsb2FkZXIg7Zi47LacIOyLnCDsoITri6ztlaAg7JeF66Gc65OcIO2MjOudvOuvuO2EsCDtg4DsnoXsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrs4Qg7JeF66Gc65OcIO2MjOudvOuvuO2EsOulvCDstpTqsIDtlZjroKTrqbQgZGVjbGFyYXRpb24gbWVyZ2luZ+ycvOuhnCDtmZXsnqXtlanri4jri6QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkUGFyYW1zIHt9XG5cbmV4cG9ydCBjb25zdCBTb25hbXVGaWxlU2NoZW1hOiB6LlpvZFR5cGU8U29uYW11RmlsZT4gPSB6XG4gIC5sb29zZU9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICB1cmw6IHouc3RyaW5nKCksXG4gICAgbWltZV90eXBlOiB6LnN0cmluZygpLFxuICAgIHNpemU6IHoubnVtYmVyKCksXG4gIH0pXG4gIC5kZXNjcmliZShcIlNvbmFtdUZpbGVcIik7XG5cbmV4cG9ydCBjb25zdCBTb25hbXVGaWxlQXJyYXlTY2hlbWEgPSB6LmFycmF5KFNvbmFtdUZpbGVTY2hlbWEpLmRlc2NyaWJlKFwiU29uYW11RmlsZVtdXCIpO1xuXG4vKipcbiAqIFNvbmFtdSDsvZTslrTsl5DshJwg7KCc6rO17ZWY64qUIOuCtOyepSBKU09OIO2DgOyehSBJRCDrqqnroZ1cbiAqIOyDiOuhnOyatCDrgrTsnqUg7YOA7J6FIOy2lOqwgCDsi5wg7J20IOuwsOyXtOyXkCDstpTqsIDtlZjrqbQg7J6Q64+Z7Jy866GcIFVJ7JeQIOuFuOy2nOuQqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IEJVSUxUX0lOX1RZUEVfSURTID0gW1wiU29uYW11RmlsZVwiLCBcIlNvbmFtdUZpbGVbXVwiXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWx0SW5UeXBlSWQgPSAodHlwZW9mIEJVSUxUX0lOX1RZUEVfSURTKVtudW1iZXJdO1xuXG4vKipcbiAqIHBndmVjdG9yIOqxsOumrCDsl7DsgrDsnpAg7YG0656Y7IqkXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiAtIGB2ZWN0b3JfY29zaW5lX29wc2A6IOy9lOyCrOyduCDqsbDrpqwgKENvc2luZSBEaXN0YW5jZSkgLSDqtozsnqVcbiAqICAgLSBTUUwg7Jew7IKw7J6QOiBgPD0+YFxuICogICAtIOuyoe2EsOydmCDrsKntlqXrp4wg67mE6rWQICjtgazquLAg66y07IucKSwgMSAtIGNvc2luZV9zaW1pbGFyaXR5XG4gKiAgIC0g7YWN7Iqk7Yq4IOyehOuyoOuUqSwg7Iuc66eo7YuxIOqygOyDieyXkCDqsIDsnqUg7J2867CY7KCB7Jy866GcIOyCrOyaqVxuICogICAtIOyCrOyaqSDsmIg6IE9wZW5BSSwgVm95YWdlIOuTsSDrjIDrtoDrtoTsnZgg7J6E67Kg65SpIOuqqOuNuOyXkCDqtozsnqVcbiAqXG4gKiAtIGB2ZWN0b3JfaXBfb3BzYDog64K07KCBIChJbm5lciBQcm9kdWN0KVxuICogICAtIFNRTCDsl7DsgrDsnpA6IGA8Iz5gXG4gKiAgIC0g65GQIOuyoe2EsOydmCDrgrTsoIHsnYQg6rOE7IKwIChzdW0oYVtpXSAqIGJbaV0pKVxuICogICAtIOygleq3nO2ZlOuQnCDrsqHthLDsl5DshJwg7L2U7IKs7J24IOycoOyCrOuPhOyZgCDrj5nsnbztlZwg6rKw6rO8XG4gKiAgIC0g6rCS7J20IO2BtOyImOuhnSDsnKDsgqwgKOydjOyImCDsl7DsgrDsnpDsnbTrr4DroZwgT1JERVIgQlnsl5DshJwg7KO87J2YKVxuICogICAtIOyCrOyaqSDsmIg6IOydtOuvuCDsoJXqt5ztmZTrkJwg7J6E67Kg65Sp7JeQ7IScIOqwgOyepSDruaDrpbgg7ISx64qlXG4gKlxuICogLSBgdmVjdG9yX2wyX29wc2A6IOycoO2BtOumrOuTnCDqsbDrpqwgKEwyIERpc3RhbmNlKVxuICogICAtIFNRTCDsl7DsgrDsnpA6IGA8LT5gXG4gKiAgIC0g65GQIOuyoe2EsCDqsITsnZgg7KeB7ISgIOqxsOumrOulvCDqs4TsgrAgKHNxcnQoc3VtKChhW2ldIC0gYltpXSleMikpKVxuICogICAtIOuyoe2EsOydmCDtgazquLAobWFnbml0dWRlKeqwgCDspJHsmpTtlaAg65WMIOyCrOyaqVxuICogICAtIOyCrOyaqSDsmIg6IOydtOuvuOyngCDsnKDsgqzrj4QsIOygiOuMgOyggSDqsbDrpqwg7Lih7KCV7J20IO2VhOyalO2VnCDqsr3smrBcbiAqL1xuZXhwb3J0IHR5cGUgVmVjdG9yT3BzID0gXCJ2ZWN0b3JfY29zaW5lX29wc1wiIHwgXCJ2ZWN0b3JfaXBfb3BzXCIgfCBcInZlY3Rvcl9sMl9vcHNcIjtcblxuZXhwb3J0IGNvbnN0IEtub3duT3BjbGFzc1ZhbHVlcyA9IFtcbiAgXCJnaW5fdHJnbV9vcHNcIixcbiAgXCJnaXN0X3RyZ21fb3BzXCIsXG4gIFwiZ2luX2JpZ21fb3BzXCIsXG4gIFwidmVjdG9yX2Nvc2luZV9vcHNcIixcbiAgXCJ2ZWN0b3JfaXBfb3BzXCIsXG4gIFwidmVjdG9yX2wyX29wc1wiLFxuICBcInBncm9vbmdhX3ZhcmNoYXJfZnVsbF90ZXh0X3NlYXJjaF9vcHNfdjJcIixcbiAgXCJwZ3Jvb25nYV9qc29uYl9mdWxsX3RleHRfc2VhcmNoX29wc192MlwiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEtub3duT3BjbGFzcyA9ICh0eXBlb2YgS25vd25PcGNsYXNzVmFsdWVzKVtudW1iZXJdO1xuXG50eXBlIEVudGl0eUluZGV4Q29sdW1uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bGxzRmlyc3Q/OiBib29sZWFuO1xuICBzb3J0T3JkZXI/OiBcIkFTQ1wiIHwgXCJERVNDXCI7XG4gIC8qKiBwZ3ZlY3RvciDsnbjrjbHsiqTsl5DshJwg7IKs7Jqp7ZWgIOqxsOumrCDsl7DsgrDsnpAgKHZlY3RvciDsu6zrn7zsl5Drp4wg7KCB7JqpKSAqL1xuICB2ZWN0b3JPcHM/OiBWZWN0b3JPcHM7XG4gIC8qKiBnZW5lcmljIOyduOuNseyKpCBvcGNsYXNzICh2ZWN0b3JPcHPripQg7ZWY7JyE7Zi47ZmYIOuqqeyggeycvOuhnCDsnKDsp4ApICovXG4gIG9wY2xhc3M/OiBLbm93bk9wY2xhc3MgfCBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRW50aXR5SW5kZXggPSB7XG4gIHR5cGU6IFwiaW5kZXhcIiB8IFwidW5pcXVlXCIgfCBcImhuc3dcIiB8IFwiaXZmZmxhdFwiO1xuICBjb2x1bW5zOiBFbnRpdHlJbmRleENvbHVtbltdO1xuICBuYW1lOiBzdHJpbmc7XG4gIHVzaW5nPzogXCJidHJlZVwiIHwgXCJoYXNoXCIgfCBcImdpblwiIHwgXCJnaXN0XCIgfCBcInBncm9vbmdhXCI7XG4gIG51bGxzTm90RGlzdGluY3Q/OiBib29sZWFuOyAvLyB1bmlxdWUgaW5kZXggb25seVxuICAvKiogUG9zdGdyZVNRTCBwYXJ0aWFsIGluZGV4IHByZWRpY2F0ZS4gUmF3IFNRTCBXSEVSRSBleHByZXNzaW9uIHdpdGhvdXQgdGhlIFdIRVJFIGtleXdvcmQuICovXG4gIHdoZXJlPzogc3RyaW5nO1xuICAvKipcbiAgICogSE5TVyAoSGllcmFyY2hpY2FsIE5hdmlnYWJsZSBTbWFsbCBXb3JsZCkg7J24642x7IqkOiDqsIEg64W465Oc7J2YIOy1nOuMgCDsl7DqsrAg7IiYXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDqt7jrnpjtlITsl5DshJwg6rCBIOuFuOuTnOqwgCDqsIDsp4gg7IiYIOyeiOuKlCDstZzrjIAg7Jew6rKwIOyImOyeheuLiOuLpC5cbiAgICogSE5TV+uKlCDruaDrpbgg6rKA7IOJIOyGjeuPhOyZgCDrhpLsnYAg7KCV7ZmV64+E66W8IOygnOqzte2VmOuvgOuhnCDqtozsnqXrkKnri4jri6QuXG4gICAqIC0g6riw67O46rCSOiAxNlxuICAgKiAtIOuylOychDogMiB+IDEwMFxuICAgKiAtIOuGkuydhOyImOuhnTog7KCV7ZmV64+E4oaRLCDruYzrk5wg7Iuc6rCE4oaRLCDrqZTrqqjrpqzihpFcbiAgICogLSDqtozsnqU6IOu5oOuluCDruYzrk5woOCksIOq3oO2YlSgxNiksIOuGkuydgCDsoJXtmZXrj4QoMzIpLCDstZzqs6Ag7KCV7ZmV64+EKDY0KVxuICAgKi9cbiAgbT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpIOyduOuNseyKpDog6rWs7ISxIOyLnCDtg5Dsg4kg67KU7JyEXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDsnbjrjbHsiqQg6rWs7ISxIOyLnCDqsIEg64W465Oc7JeQ7IScIO2DkOyDie2VoCDrspTsnITsnoXri4jri6QuXG4gICAqIC0g6riw67O46rCSOiA2NFxuICAgKiAtIOuylOychDogNCB+IDEwMDBcbiAgICogLSDrhpLsnYTsiJjroZ06IOygle2ZleuPhOKGkSwg67mM65OcIOyLnOqwhOKGkVxuICAgKiAtIOq2jOyepTog67mg66W4IOu5jOuTnCgzMiksIOq3oO2YlSg2NCksIOuGkuydgCDsoJXtmZXrj4QoMTI4KSwg7LWc6rOgIOygle2ZleuPhCgyNTYpXG4gICAqL1xuICBlZkNvbnN0cnVjdGlvbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIElWRkZsYXQgKEludmVydGVkIEZpbGUgd2l0aCBGbGF0IENvbXByZXNzaW9uKSDsnbjrjbHsiqQ6IO2BtOufrOyKpO2EsOungSDrpqzsiqTtirgg7IiYXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDrsqHthLDrpbwg7YG065+s7Iqk7YSw66eB7ZWgIOuyhO2CtyDsiJjrpbwg7KeA7KCV7ZWp64uI64ukLlxuICAgKiBJVkZGbGF07J2AIOu5oOuluCDruYzrk5zsmYAg64Ku7J2AIOuplOuqqOumrCDsgqzsmqnsnbQg7ZWE7JqU7ZWgIOuVjCDsgqzsmqntlanri4jri6QuXG4gICAqIC0g6raM7J6l6rCSOiBzcXJ0KHJvd19jb3VudCkgfiByb3dfY291bnQgLyAxMDAwXG4gICAqIC0g7JiI7IucOiAxMCwwMDDtlokg4oaSIDEwMCwgMTAwLDAwMO2WiSDihpIgMzAwLCAxLDAwMCwwMDDtlokg4oaSIDEwMDBcbiAgICogLSDrp47snYTsiJjroZ0g7KCV7ZmV64+E4oaRLCDqsoDsg4kg7IaN64+E4oaTXG4gICAqL1xuICBsaXN0cz86IG51bWJlcjtcbn07XG5cbi8vIFN1YnNldEZpZWxkIO2DgOyehTogc3RyaW5nIOuYkOuKlCBpbnRlcm5hbCDsmLXshZjsnbQg7J6I64qUIOqwneyytFxuZXhwb3J0IHR5cGUgU3Vic2V0RmllbGQgPSBzdHJpbmcgfCB7IGZpZWxkOiBzdHJpbmc7IGludGVybmFsPzogYm9vbGVhbiB9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU3Vic2V0RmllbGQoZjogU3Vic2V0RmllbGQpOiBzdHJpbmcge1xuICByZXR1cm4gaXNTdHJpbmdWYWx1ZShmKSA/IGYgOiBmLmZpZWxkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJuYWxTdWJzZXRGaWVsZChmOiBTdWJzZXRGaWVsZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gIWlzU3RyaW5nVmFsdWUoZikgJiYgZi5pbnRlcm5hbCA9PT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBTdWJzZXREZWY6IFN1YnNldCDsoJXsnZhcbiAqXG4gKiDtlZjsnIQg7Zi47ZmY7ISx7J2EIOychO2VtCBTdWJzZXRGaWVsZFtdIOuwsOyXtCDtmJXtg5zrj4Qg7KeA7JuQ7ZWp64uI64ukLlxuICovXG5leHBvcnQgdHlwZSBTdWJzZXREZWYgPVxuICB8IFN1YnNldEZpZWxkW10gLy8g6riw7KG0IOuwsOyXtCDtmJXtg5xcbiAgfCB7XG4gICAgICAvLyDsg4jroZzsmrQg6rCd7LK0IO2Yle2DnFxuICAgICAgZmllbGRzOiBTdWJzZXRGaWVsZFtdO1xuICAgICAgY29uZT86IENvbmU7XG4gICAgfTtcblxuLyoqXG4gKiBFbnVtRGVmOiBFbnVtIOygleydmFxuICpcbiAqIO2VmOychCDtmLjtmZjshLHsnYQg7JyE7ZW0IFJlY29yZDxzdHJpbmcsIHN0cmluZz4g7ZiV7YOc64+EIOyngOybkO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IHR5cGUgRW51bURlZiA9XG4gIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPiAvLyDquLDsobQgUmVjb3JkIO2Yle2DnFxuICB8IHtcbiAgICAgIC8vIOyDiOuhnOyatCDqsJ3ssrQg7ZiV7YOcXG4gICAgICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICBjb25lPzogQ29uZTtcbiAgICB9O1xuXG4vKipcbiAqIFN1YnNldERlZuqwgCDsg4jroZzsmrQg6rCd7LK0IO2Yle2DnOyduOyngCDtmZXsnbhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3Vic2V0RGVmV2l0aENvbmUoZGVmOiBTdWJzZXREZWYpOiBkZWYgaXMgeyBmaWVsZHM6IFN1YnNldEZpZWxkW107IGNvbmU/OiBDb25lIH0ge1xuICByZXR1cm4gIUFycmF5LmlzQXJyYXkoZGVmKSAmJiBcImZpZWxkc1wiIGluIGRlZjtcbn1cblxuLyoqXG4gKiBFbnVtRGVm6rCAIOyDiOuhnOyatCDqsJ3ssrQg7ZiV7YOc7J247KeAIO2ZleyduFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbnVtRGVmV2l0aENvbmUoXG4gIGRlZjogRW51bURlZixcbik6IGRlZiBpcyB7IHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgY29uZT86IENvbmUgfSB7XG4gIHJldHVybiAoXG4gICAgXCJ2YWx1ZXNcIiBpbiBkZWYgJiYgIShcImNvbmVcIiBpbiBkZWYgJiYgZGVmLmNvbmUgPT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhkZWYpLmxlbmd0aCA+IDEpXG4gICk7XG59XG5cbi8qKlxuICogU3Vic2V0RGVm7JeQ7IScIGZpZWxkcyDstpTstpxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN1YnNldEZpZWxkcyhkZWY6IFN1YnNldERlZik6IFN1YnNldEZpZWxkW10ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShkZWYpID8gZGVmIDogZGVmLmZpZWxkcztcbn1cblxuLyoqXG4gKiBFbnVtRGVm7JeQ7IScIHZhbHVlcyDstpTstpxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1EZWZWYWx1ZXMoZGVmOiBFbnVtRGVmKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBpc0VudW1EZWZXaXRoQ29uZShkZWYpID8gZGVmLnZhbHVlcyA6IGRlZjtcbn1cblxuZXhwb3J0IHR5cGUgRW50aXR5SnNvbiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBjb25lPzogQ29uZTsgLy8gY29uZSDrqZTtg4DrjbDsnbTthLBcbiAgcHJvcHM6IEVudGl0eVByb3BbXTtcbiAgaW5kZXhlczogRW50aXR5SW5kZXhbXTtcbiAgc3Vic2V0czoge1xuICAgIFtzdWJzZXQ6IHN0cmluZ106IFN1YnNldERlZjtcbiAgfTtcbiAgZW51bXM6IHtcbiAgICBbZW51bUlkOiBzdHJpbmddOiBFbnVtRGVmO1xuICB9O1xufTtcbmV4cG9ydCB0eXBlIEVudGl0eVN1YnNldFJvdyA9IHtcbiAgZmllbGQ6IHN0cmluZztcbiAgaGFzOiB7XG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbiAgfTtcbiAgaXNJbnRlcm5hbDoge1xuICAgIFtrZXk6IHN0cmluZ106IGJvb2xlYW47XG4gIH07XG4gIGNoaWxkcmVuOiBFbnRpdHlTdWJzZXRSb3dbXTtcbiAgcHJlZml4ZXM6IHN0cmluZ1tdO1xuICByZWxhdGlvbkVudGl0eT86IHN0cmluZztcbiAgaXNPcGVuPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBGbGF0dGVuU3Vic2V0Um93ID0gT21pdDxFbnRpdHlTdWJzZXRSb3csIFwiY2hpbGRyZW5cIj47XG5cbi8qXG4gIFByb3BOb2RlXG4qL1xuXG4vKipcbiAqIOyXlO2LsO2LsOydmCDtlYTrk5wg6rWs7KGw66W8IO2KuOumrCDtmJXtg5zroZwg7ZGc7ZiE7ZWY64qUIOykkeqwhCDrhbjrk5zsnoXri4jri6QuXG4gKlxuICogKirrqqnsoIEqKjogRW50aXR57J2YIHN1YnNldCDtlYTrk5wg7ZGc7ZiE7IudKOyYiDogXCJpZFwiLCBcInVzZXIubmFtZVwiLCBcInRhZ3NbXVwiKeydhFxuICog7J6s6reA7KCB7J24IO2KuOumrCDqtazsobDroZwg7YyM7Iux7ZWY7JesIFpvZCDsiqTtgqTrp4gg7IOd7ISx7J2YIOykkeqwhCDri6jqs4TroZwg7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqICoq67OA7ZmYIO2dkOumhCoqOlxuICogRW50aXR5IHN1YnNldCDihpIgRW50aXR5UHJvcE5vZGUgKO2KuOumrCDqtazsobApIOKGkiBab2Qg7Iqk7YKk66eIIOKGkiBSZW5kZXJpbmdOb2RlIChVSeyaqSlcbiAqXG4gKiAqKm5vZGVUeXBlKio6XG4gKiAtIFwicGxhaW5cIjog64uo7J28IO2VhOuTnCAo7JiIOiBcImlkXCIsIFwibmFtZVwiKVxuICogLSBcIm9iamVjdFwiOiDspJHssqkg6rCd7LK0ICjsmIg6IFwidXNlci5uYW1lXCIg4oaSIHVzZXIg6rCd7LK0KVxuICogLSBcImFycmF5XCI6IOuwsOyXtCAo7JiIOiBcInRhZ3NbXVwiIOKGkiB0YWdzIOuwsOyXtClcbiAqXG4gKiAqKuyCrOyaqSDsnITsuZgqKjogZW50aXR5LWNvbnZlcnRlci50c+ydmCBwcm9wTm9kZVRvWm9kVHlwZSgpXG4gKi9cbmV4cG9ydCB0eXBlIEVudGl0eVByb3BOb2RlID1cbiAgfCB7XG4gICAgICBub2RlVHlwZTogXCJwbGFpblwiO1xuICAgICAgcHJvcDogRW50aXR5UHJvcDtcbiAgICB9XG4gIHwge1xuICAgICAgbm9kZVR5cGU6IFwib2JqZWN0XCIgfCBcImFycmF5XCI7XG4gICAgICBwcm9wPzogRW50aXR5UHJvcDtcbiAgICAgIGNoaWxkcmVuOiBFbnRpdHlQcm9wTm9kZVtdO1xuICAgIH07XG5cbi8qXG4gIFByb3AgVHlwZSBHdWFyZHNcbiovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyU2luZ2xlUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgSW50ZWdlclByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIEludGVnZXJQcm9wKT8udHlwZSA9PT0gXCJpbnRlZ2VyXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBJbnRlZ2VyQXJyYXlQcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBJbnRlZ2VyQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJpbnRlZ2VyW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXJQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiAoSW50ZWdlclByb3AgfCBJbnRlZ2VyQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc0ludGVnZXJTaW5nbGVQcm9wKHApIHx8IGlzSW50ZWdlckFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JpZ0ludGVnZXJTaW5nbGVQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBCaWdJbnRlZ2VyUHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgQmlnSW50ZWdlclByb3ApPy50eXBlID09PSBcImJpZ0ludGVnZXJcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JpZ0ludGVnZXJBcnJheVByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIEJpZ0ludGVnZXJBcnJheVByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIEJpZ0ludGVnZXJBcnJheVByb3ApPy50eXBlID09PSBcImJpZ0ludGVnZXJbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmlnSW50ZWdlclByb3A8VmFsdWU+KFxuICBwOiBWYWx1ZSxcbik6IHAgaXMgVmFsdWUgJiAoQmlnSW50ZWdlclByb3AgfCBCaWdJbnRlZ2VyQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHApIHx8IGlzQmlnSW50ZWdlckFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ1NpbmdsZVByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIFN0cmluZ1Byb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIFN0cmluZ1Byb3ApPy50eXBlID09PSBcInN0cmluZ1wiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBTdHJpbmdBcnJheVByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIFN0cmluZ0FycmF5UHJvcCk/LnR5cGUgPT09IFwic3RyaW5nW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ1Byb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIChTdHJpbmdQcm9wIHwgU3RyaW5nQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc1N0cmluZ1NpbmdsZVByb3AocCkgfHwgaXNTdHJpbmdBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbnVtU2luZ2xlUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgRW51bVByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIEVudW1Qcm9wKT8udHlwZSA9PT0gXCJlbnVtXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbnVtQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBFbnVtQXJyYXlQcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBFbnVtQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJlbnVtW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1Qcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiAoRW51bVByb3AgfCBFbnVtQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc0VudW1TaW5nbGVQcm9wKHApIHx8IGlzRW51bUFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlclNpbmdsZVByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIE51bWJlclByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIE51bWJlclByb3ApPy50eXBlID09PSBcIm51bWJlclwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBOdW1iZXJBcnJheVByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIE51bWJlckFycmF5UHJvcCk/LnR5cGUgPT09IFwibnVtYmVyW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlclByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIChOdW1iZXJQcm9wIHwgTnVtYmVyQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc051bWJlclNpbmdsZVByb3AocCkgfHwgaXNOdW1iZXJBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljU2luZ2xlUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgTnVtZXJpY1Byb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIE51bWVyaWNQcm9wKT8udHlwZSA9PT0gXCJudW1lcmljXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBOdW1lcmljQXJyYXlQcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBOdW1lcmljQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJudW1lcmljW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiAoTnVtZXJpY1Byb3AgfCBOdW1lcmljQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc051bWVyaWNTaW5nbGVQcm9wKHApIHx8IGlzTnVtZXJpY0FycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW5TaW5nbGVQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBCb29sZWFuUHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgQm9vbGVhblByb3ApPy50eXBlID09PSBcImJvb2xlYW5cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW5BcnJheVByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIEJvb2xlYW5BcnJheVByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIEJvb2xlYW5BcnJheVByb3ApPy50eXBlID09PSBcImJvb2xlYW5bXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhblByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIChCb29sZWFuUHJvcCB8IEJvb2xlYW5BcnJheVByb3ApIHtcbiAgcmV0dXJuIGlzQm9vbGVhblNpbmdsZVByb3AocCkgfHwgaXNCb29sZWFuQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZVNpbmdsZVByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIERhdGVQcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBEYXRlUHJvcCk/LnR5cGUgPT09IFwiZGF0ZVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZUFycmF5UHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgRGF0ZUFycmF5UHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgRGF0ZUFycmF5UHJvcCk/LnR5cGUgPT09IFwiZGF0ZVtdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgKERhdGVQcm9wIHwgRGF0ZUFycmF5UHJvcCkge1xuICByZXR1cm4gaXNEYXRlU2luZ2xlUHJvcChwKSB8fCBpc0RhdGVBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkU2luZ2xlUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgVXVpZFByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIFV1aWRQcm9wKT8udHlwZSA9PT0gXCJ1dWlkXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBVdWlkQXJyYXlQcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBVdWlkQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJ1dWlkW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1V1aWRQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiAoVXVpZFByb3AgfCBVdWlkQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc1V1aWRTaW5nbGVQcm9wKHApIHx8IGlzVXVpZEFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0pzb25Qcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBKc29uUHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgSnNvblByb3ApPy50eXBlID09PSBcImpzb25cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1NlYXJjaFRleHRQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBTZWFyY2hUZXh0UHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgU2VhcmNoVGV4dFByb3ApPy50eXBlID09PSBcInNlYXJjaFRleHRcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpcnR1YWxQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBWaXJ0dWFsUHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgVmlydHVhbFByb3ApPy50eXBlID09PSBcInZpcnR1YWxcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpcnR1YWxDb2RlUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgVmlydHVhbFByb3Age1xuICBpZiAoIWlzVmlydHVhbFByb3AocCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHAudmlydHVhbFR5cGUgIT09IFwicXVlcnlcIjsgLy8gdW5kZWZpbmVk64+EIFwiY29kZVwi66GcIOy3qOq4iVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbFF1ZXJ5UHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgVmlydHVhbFByb3Age1xuICBpZiAoIWlzVmlydHVhbFByb3AocCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHAudmlydHVhbFR5cGUgPT09IFwicXVlcnlcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3RvclNpbmdsZVByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIFZlY3RvclByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIFZlY3RvclByb3ApPy50eXBlID09PSBcInZlY3RvclwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmVjdG9yQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBWZWN0b3JBcnJheVByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIFZlY3RvckFycmF5UHJvcCk/LnR5cGUgPT09IFwidmVjdG9yW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3RvclByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIChWZWN0b3JQcm9wIHwgVmVjdG9yQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc1ZlY3RvclNpbmdsZVByb3AocCkgfHwgaXNWZWN0b3JBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUc1ZlY3RvclByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIFRzVmVjdG9yUHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgVHNWZWN0b3JQcm9wKT8udHlwZSA9PT0gXCJ0c3ZlY3RvclwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVsYXRpb25Qcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBSZWxhdGlvblByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIFJlbGF0aW9uUHJvcCk/LnR5cGUgPT09IFwicmVsYXRpb25cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc09uZVRvT25lUmVsYXRpb25Qcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBPbmVUb09uZVJlbGF0aW9uUHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgT25lVG9PbmVSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiT25lVG9PbmVcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiQmVsb25nc1RvT25lXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNIYXNNYW55UmVsYXRpb25Qcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBIYXNNYW55UmVsYXRpb25Qcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBIYXNNYW55UmVsYXRpb25Qcm9wKT8ucmVsYXRpb25UeXBlID09PSBcIkhhc01hbnlcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc01hbnlUb01hbnlSZWxhdGlvblByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIE1hbnlUb01hbnlSZWxhdGlvblByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIE1hbnlUb01hbnlSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiTWFueVRvTWFueVwiO1xufVxuXG50eXBlIEpvaW5DbGF1c2UgPVxuICB8IHtcbiAgICAgIGZyb206IHN0cmluZztcbiAgICAgIHRvOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIGN1c3RvbTogc3RyaW5nO1xuICAgIH07XG5leHBvcnQgZnVuY3Rpb24gaXNDdXN0b21Kb2luQ2xhdXNlPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiB7IGN1c3RvbTogc3RyaW5nIH0ge1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuICEhKHAgYXMgeyBjdXN0b206IHN0cmluZyB9KT8uY3VzdG9tO1xufVxuXG50eXBlIFN1YnNldExvYWRlciA9IHtcbiAgYXM6IHN0cmluZztcbiAgdGFibGU6IHN0cmluZztcbiAgbWFueUpvaW46IHtcbiAgICBmcm9tVGFibGU6IHN0cmluZztcbiAgICBmcm9tQ29sOiBzdHJpbmc7XG4gICAgaWRGaWVsZDogc3RyaW5nO1xuICAgIHRvVGFibGU6IHN0cmluZztcbiAgICB0b0NvbDogc3RyaW5nO1xuICAgIHRocm91Z2g/OiB7XG4gICAgICB0YWJsZTogc3RyaW5nO1xuICAgICAgZnJvbUNvbDogc3RyaW5nO1xuICAgICAgdG9Db2w6IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBvbmVKb2luczogKHtcbiAgICBhczogc3RyaW5nO1xuICAgIGpvaW46IFwiaW5uZXJcIiB8IFwib3V0ZXJcIjtcbiAgICB0YWJsZTogc3RyaW5nO1xuICB9ICYgSm9pbkNsYXVzZSlbXTtcbiAgc2VsZWN0OiBzdHJpbmdbXTtcbiAgbG9hZGVycz86IFN1YnNldExvYWRlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgU3Vic2V0UXVlcnkgPSB7XG4gIHNlbGVjdDogc3RyaW5nW107XG4gIHZpcnR1YWw6IHN0cmluZ1tdO1xuICBqb2luczogKHtcbiAgICBhczogc3RyaW5nO1xuICAgIGpvaW46IFwiaW5uZXJcIiB8IFwib3V0ZXJcIjtcbiAgICB0YWJsZTogc3RyaW5nO1xuICB9ICYgSm9pbkNsYXVzZSlbXTtcbiAgbG9hZGVyczogU3Vic2V0TG9hZGVyW107XG59O1xuXG4vKiBCYXNlTW9kZWwgKi9cbmV4cG9ydCBjb25zdCBTb25hbXVRdWVyeU1vZGUgPSB6LmVudW0oW1wiYm90aFwiLCBcImxpc3RcIiwgXCJjb3VudFwiXSk7XG5leHBvcnQgdHlwZSBTb25hbXVRdWVyeU1vZGUgPSB6LmluZmVyPHR5cGVvZiBTb25hbXVRdWVyeU1vZGU+O1xuXG4vKiBTZW1hbnRpYyBRdWVyeSAqL1xuZXhwb3J0IGNvbnN0IFNvbmFtdVNlbWFudGljUGFyYW1zID0gei5vYmplY3Qoe1xuICBzZW1hbnRpY1F1ZXJ5OiB6Lm9iamVjdCh7XG4gICAgZW1iZWRkaW5nOiB6LmFycmF5KHoubnVtYmVyKCkpLm1pbigxMDI0KS5tYXgoMTAyNCksXG4gICAgdGhyZXNob2xkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgbWV0aG9kOiB6LmVudW0oW1wiY29zaW5lXCIsIFwibDJcIiwgXCJpbm5lcl9wcm9kdWN0XCJdKS5vcHRpb25hbCgpLFxuICB9KSxcbn0pO1xuZXhwb3J0IHR5cGUgU29uYW11U2VtYW50aWNQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiBTb25hbXVTZW1hbnRpY1BhcmFtcz47XG5cbi8qIEtuZXggTWlncmF0aW9uICovXG5leHBvcnQgdHlwZSBLbmV4RXJyb3IgPSB7XG4gIGNvZGU6IHN0cmluZztcbiAgZXJybm86IG51bWJlcjtcbiAgc3FsOiBzdHJpbmc7XG4gIHNxbE1lc3NhZ2U6IHN0cmluZztcbiAgc3FsU3RhdGU6IHN0cmluZztcbn07XG5leHBvcnQgZnVuY3Rpb24gaXNLbmV4RXJyb3I8VmFsdWU+KGU6IFZhbHVlKTogZSBpcyBWYWx1ZSAmIEtuZXhFcnJvciB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gISEoZSBhcyBLbmV4RXJyb3IpPy5jb2RlICYmICEhKGUgYXMgS25leEVycm9yKT8uc3FsTWVzc2FnZSAmJiAhIShlIGFzIEtuZXhFcnJvcik/LnNxbFN0YXRlO1xufVxuXG5leHBvcnQgdHlwZSBLbmV4Q29sdW1uVHlwZSA9XG4gIHwgXCJzdHJpbmdcIlxuICB8IFwidGV4dFwiXG4gIHwgXCJzbWFsbHRleHRcIlxuICB8IFwibWVkaXVtdGV4dFwiXG4gIHwgXCJsb25ndGV4dFwiXG4gIHwgXCJpbnRlZ2VyXCJcbiAgfCBcImJpZ0ludGVnZXJcIlxuICB8IFwiZGVjaW1hbFwiXG4gIHwgXCJ0aW1lc3RhbXBcIlxuICB8IFwiYm9vbGVhblwiXG4gIHwgXCJmb3JlaWduXCJcbiAgfCBcInV1aWRcIlxuICB8IFwianNvblwiXG4gIHwgXCJmbG9hdFwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcInRpbWVcIlxuICB8IFwiZGF0ZXRpbWVcIjtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkNvbHVtblR5cGUgPVxuICB8IFwic3RyaW5nXCJcbiAgfCBcInN0cmluZ1tdXCJcbiAgfCBcImludGVnZXJcIlxuICB8IFwiaW50ZWdlcltdXCJcbiAgfCBcImJpZ0ludGVnZXJcIlxuICB8IFwiYmlnSW50ZWdlcltdXCJcbiAgfCBcIm51bWJlck9yTnVtZXJpY1wiXG4gIHwgXCJudW1iZXJPck51bWVyaWNbXVwiXG4gIHwgXCJib29sZWFuXCJcbiAgfCBcImJvb2xlYW5bXVwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGVbXVwiXG4gIHwgXCJ1dWlkXCJcbiAgfCBcInV1aWRbXVwiXG4gIHwgXCJqc29uXCJcbiAgfCBcInZlY3RvclwiXG4gIHwgXCJ2ZWN0b3JbXVwiXG4gIHwgXCJ0c3ZlY3RvclwiO1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uQ29sdW1uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IE1pZ3JhdGlvbkNvbHVtblR5cGU7XG4gIG51bGxhYmxlOiBib29sZWFuO1xuICBudW1iZXJUeXBlPzogXCJyZWFsXCIgfCBcImRvdWJsZSBwcmVjaXNpb25cIiB8IFwibnVtZXJpY1wiO1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIGRlZmF1bHRUbz86IHN0cmluZztcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICBzY2FsZT86IG51bWJlcjtcbiAgZGltZW5zaW9ucz86IG51bWJlcjtcbiAgZ2VuZXJhdGVkPzogR2VuZXJhdGVkQ29sdW1uO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkluZGV4ID0ge1xuICB0eXBlOiBcInVuaXF1ZVwiIHwgXCJpbmRleFwiIHwgXCJobnN3XCIgfCBcIml2ZmZsYXRcIjtcbiAgY29sdW1uczogRW50aXR5SW5kZXhDb2x1bW5bXTtcbiAgbmFtZTogc3RyaW5nO1xuICB1c2luZz86IFwiYnRyZWVcIiB8IFwiaGFzaFwiIHwgXCJnaW5cIiB8IFwiZ2lzdFwiIHwgXCJwZ3Jvb25nYVwiO1xuICBudWxsc05vdERpc3RpbmN0PzogYm9vbGVhbjtcbiAgLyoqIFBvc3RncmVTUUwgcGFydGlhbCBpbmRleCBwcmVkaWNhdGUuIFJhdyBTUUwgV0hFUkUgZXhwcmVzc2lvbiB3aXRob3V0IHRoZSBXSEVSRSBrZXl3b3JkLiAqL1xuICB3aGVyZT86IHN0cmluZztcbiAgLyoqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpOiDqsIEg64W465Oc7J2YIOy1nOuMgCDsl7DqsrAg7IiYICovXG4gIG0/OiBudW1iZXI7XG4gIC8qKiBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKTog6rWs7ISxIOyLnCDtg5Dsg4kg67KU7JyEICovXG4gIGVmQ29uc3RydWN0aW9uPzogbnVtYmVyO1xuICAvKiogSVZGRmxhdCAoSW52ZXJ0ZWQgRmlsZSB3aXRoIEZsYXQgQ29tcHJlc3Npb24pOiDtgbTrn6zsiqTthLDrp4Eg66as7Iqk7Yq4IOyImCAqL1xuICBsaXN0cz86IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBNaWdyYXRpb25Gb3JlaWduID0ge1xuICBjb2x1bW5zOiBzdHJpbmdbXTtcbiAgdG86IHN0cmluZztcbiAgb25VcGRhdGU6IFJlbGF0aW9uT247XG4gIG9uRGVsZXRlOiBSZWxhdGlvbk9uO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkpvaW5UYWJsZSA9IHtcbiAgdGFibGU6IHN0cmluZztcbiAgaW5kZXhlczogTWlncmF0aW9uSW5kZXhbXTtcbiAgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW107XG4gIGZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW107XG59O1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uU2V0ID0ge1xuICB0YWJsZTogc3RyaW5nO1xuICBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXTtcbiAgaW5kZXhlczogTWlncmF0aW9uSW5kZXhbXTtcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXTtcbn07XG5leHBvcnQgdHlwZSBNaWdyYXRpb25TZXRBbmRKb2luVGFibGUgPSBNaWdyYXRpb25TZXQgJiB7XG4gIGpvaW5UYWJsZXM6IE1pZ3JhdGlvbkpvaW5UYWJsZVtdO1xufTtcbmV4cG9ydCB0eXBlIEdlbk1pZ3JhdGlvbkNvZGUgPSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIHR5cGU6IFwibm9ybWFsXCIgfCBcImZvcmVpZ25cIjtcbiAgZm9ybWF0dGVkOiBzdHJpbmcgfCBudWxsO1xufTtcblxuLyogQXBpICovXG5leHBvcnQgdHlwZSBBcGlQYXJhbSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBBcGlQYXJhbVR5cGU7XG4gIG9wdGlvbmFsOiBib29sZWFuO1xuICBkZWZhdWx0RGVmPzogc3RyaW5nO1xufTtcbmV4cG9ydCBuYW1lc3BhY2UgQXBpUGFyYW1UeXBlIHtcbiAgZXhwb3J0IHR5cGUgRnVuY3Rpb24gPSB7XG4gICAgdDogXCJmdW5jdGlvblwiO1xuICAgIHBhcmFtZXRlcnM6IEFwaVBhcmFtW107XG4gICAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlO1xuICB9O1xuICBleHBvcnQgdHlwZSBPYmplY3QgPSB7XG4gICAgdDogXCJvYmplY3RcIjtcbiAgICBwcm9wczogQXBpUGFyYW1bXTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgVW5pb24gPSB7XG4gICAgdDogXCJ1bmlvblwiO1xuICAgIHR5cGVzOiBBcGlQYXJhbVR5cGVbXTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgSW50ZXJzZWN0aW9uID0ge1xuICAgIHQ6IFwiaW50ZXJzZWN0aW9uXCI7XG4gICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICB9O1xuICBleHBvcnQgdHlwZSBTdHJpbmdMaXRlcmFsID0ge1xuICAgIHQ6IFwic3RyaW5nLWxpdGVyYWxcIjtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBOdW1lcmljTGl0ZXJhbCA9IHtcbiAgICB0OiBcIm51bWVyaWMtbGl0ZXJhbFwiO1xuICAgIHZhbHVlOiBudW1iZXI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEFycmF5ID0ge1xuICAgIHQ6IFwiYXJyYXlcIjtcbiAgICBlbGVtZW50c1R5cGU6IEFwaVBhcmFtVHlwZTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgUmVmID0ge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IHN0cmluZztcbiAgICBhcmdzPzogQXBpUGFyYW1UeXBlW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIEluZGV4ZWRBY2Nlc3MgPSB7XG4gICAgdDogXCJpbmRleGVkLWFjY2Vzc1wiO1xuICAgIG9iamVjdDogQXBpUGFyYW1UeXBlO1xuICAgIGluZGV4OiBBcGlQYXJhbVR5cGU7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFR1cGxlVHlwZSA9IHtcbiAgICB0OiBcInR1cGxlLXR5cGVcIjtcbiAgICBlbGVtZW50czogQXBpUGFyYW1UeXBlW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIFBpY2sgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJQaWNrXCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIE9taXQgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJPbWl0XCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFBhcnRpYWwgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJQYXJ0aWFsXCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFByb21pc2UgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJQcm9taXNlXCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIENvbnRleHQgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJDb250ZXh0XCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFR5cGVQYXJhbSA9IHtcbiAgICB0OiBcInR5cGUtcGFyYW1cIjtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNvbnN0cmFpbnQ/OiBBcGlQYXJhbVR5cGU7XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0PFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuT2JqZWN0IHtcbiAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLk9iamVjdCk/LnQgPT09IFwib2JqZWN0XCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzVW5pb248VmFsdWU+KHY6IFZhbHVlKTogdiBpcyBWYWx1ZSAmIEFwaVBhcmFtVHlwZS5VbmlvbiB7XG4gICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5Vbmlvbik/LnQgPT09IFwidW5pb25cIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNJbnRlcnNlY3Rpb248VmFsdWU+KHY6IFZhbHVlKTogdiBpcyBWYWx1ZSAmIEFwaVBhcmFtVHlwZS5JbnRlcnNlY3Rpb24ge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuSW50ZXJzZWN0aW9uKT8udCA9PT0gXCJpbnRlcnNlY3Rpb25cIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNTdHJpbmdMaXRlcmFsPFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuU3RyaW5nTGl0ZXJhbCB7XG4gICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5TdHJpbmdMaXRlcmFsKT8udCA9PT0gXCJzdHJpbmctbGl0ZXJhbFwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNMaXRlcmFsPFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuTnVtZXJpY0xpdGVyYWwge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuTnVtZXJpY0xpdGVyYWwpPy50ID09PSBcIm51bWVyaWMtbGl0ZXJhbFwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc0FycmF5PFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuQXJyYXkge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuQXJyYXkpPy50ID09PSBcImFycmF5XCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUmVmPFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuUmVmIHtcbiAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICByZXR1cm4gaXNPYmplY3RWYWx1ZSh2KSAmJiAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzSW5kZXhlZEFjY2VzczxWYWx1ZT4odjogVmFsdWUpOiB2IGlzIFZhbHVlICYgQXBpUGFyYW1UeXBlLkluZGV4ZWRBY2Nlc3Mge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIHJldHVybiBpc09iamVjdFZhbHVlKHYpICYmICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJpbmRleGVkLWFjY2Vzc1wiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1R1cGxlVHlwZTxWYWx1ZT4odjogVmFsdWUpOiB2IGlzIFZhbHVlICYgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZSB7XG4gICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgcmV0dXJuIGlzT2JqZWN0VmFsdWUodikgJiYgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInR1cGxlLXR5cGVcIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNQaWNrPFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuUGljayB7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzT2JqZWN0VmFsdWUodikgJiZcbiAgICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIlBpY2tcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzT21pdDxWYWx1ZT4odjogVmFsdWUpOiB2IGlzIFZhbHVlICYgQXBpUGFyYW1UeXBlLk9taXQge1xuICAgIHJldHVybiAoXG4gICAgICBpc09iamVjdFZhbHVlKHYpICYmXG4gICAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICAgICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJyZWZcIiAmJlxuICAgICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgICAodiBhcyB7IGlkPzogdW5rbm93biB9KS5pZCA9PT0gXCJPbWl0XCJcbiAgICApO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1BhcnRpYWw8VmFsdWU+KHY6IFZhbHVlKTogdiBpcyBWYWx1ZSAmIEFwaVBhcmFtVHlwZS5QYXJ0aWFsIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXNPYmplY3RWYWx1ZSh2KSAmJlxuICAgICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgICAgKHYgYXMgeyBpZD86IHVua25vd24gfSkuaWQgPT09IFwiUGFydGlhbFwiXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNQcm9taXNlPFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuUHJvbWlzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzT2JqZWN0VmFsdWUodikgJiZcbiAgICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIlByb21pc2VcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGV4dDxWYWx1ZT4odjogVmFsdWUpOiB2IGlzIFZhbHVlICYgQXBpUGFyYW1UeXBlLkNvbnRleHQge1xuICAgIHJldHVybiAoXG4gICAgICBpc09iamVjdFZhbHVlKHYpICYmXG4gICAgICBcInRcIiBpbiB2ICYmXG4gICAgICB2LnQgPT09IFwicmVmXCIgJiZcbiAgICAgIFwiaWRcIiBpbiB2ICYmXG4gICAgICAodi5pZCA9PT0gXCJDb250ZXh0XCIgfHwgdi5pZCA9PT0gXCJXZWJTb2NrZXRDb250ZXh0XCIpXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNSZWZLbmV4PFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuUmVmIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXNPYmplY3RWYWx1ZSh2KSAmJlxuICAgICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgICAgKHYgYXMgeyBpZD86IHVua25vd24gfSkuaWQgPT09IFwiS25leFwiXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNUeXBlUGFyYW08VmFsdWU+KHY6IFZhbHVlKTogdiBpcyBWYWx1ZSAmIEFwaVBhcmFtVHlwZS5UeXBlUGFyYW0ge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIHJldHVybiBpc09iamVjdFZhbHVlKHYpICYmICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJ0eXBlLXBhcmFtXCI7XG4gIH1cbn1cbmV4cG9ydCB0eXBlIEFwaVBhcmFtVHlwZSA9XG4gIHwgXCJzdHJpbmdcIlxuICB8IFwibnVtYmVyXCJcbiAgfCBcImJvb2xlYW5cIlxuICB8IFwibnVsbFwiXG4gIHwgXCJ1bmRlZmluZWRcIlxuICB8IFwidm9pZFwiXG4gIHwgXCJhbnlcIlxuICB8IFwidW5rbm93blwiXG4gIHwgXCJ0cnVlXCJcbiAgfCBcImZhbHNlXCJcbiAgfCBBcGlQYXJhbVR5cGUuU3RyaW5nTGl0ZXJhbFxuICB8IEFwaVBhcmFtVHlwZS5OdW1lcmljTGl0ZXJhbFxuICB8IEFwaVBhcmFtVHlwZS5PYmplY3RcbiAgfCBBcGlQYXJhbVR5cGUuVW5pb25cbiAgfCBBcGlQYXJhbVR5cGUuSW50ZXJzZWN0aW9uXG4gIHwgQXBpUGFyYW1UeXBlLkFycmF5XG4gIHwgQXBpUGFyYW1UeXBlLlJlZlxuICB8IEFwaVBhcmFtVHlwZS5JbmRleGVkQWNjZXNzXG4gIHwgQXBpUGFyYW1UeXBlLlR5cGVQYXJhbVxuICB8IEFwaVBhcmFtVHlwZS5UdXBsZVR5cGVcbiAgfCBBcGlQYXJhbVR5cGUuRnVuY3Rpb247XG5cbi8qIFRlbXBsYXRlICovXG4vKipcbiAqIFVJIOy7tO2PrOuEjO2KuCDroIzrjZTrp4HsnYQg7JyE7ZWcIOuplO2DgOuNsOydtO2EsCDrhbjrk5zsnoXri4jri6QuXG4gKlxuICogKirrqqnsoIEqKjogWm9kIOyKpO2CpOuniOuhnOu2gO2EsCDtlITroaDtirjsl5Trk5wgVUkg7Lu07Y+s64SM7Yq466W8IOyekOuPmSDsg53shLHtlZjquLAg7JyE7ZWcXG4gKiDroIzrjZTrp4Eg7KCV67O066W8IOuLtOydgCDtirjrpqwg6rWs7KGw7J6F64uI64ukLiDqsIEg7ZWE65Oc6rCAIOyWtOuWpCBVSSDsu7Ttj6zrhIztirjroZxcbiAqIO2RnO2YhOuQmOyWtOyVvCDtlZjripTsp4Ao7YWN7Iqk7Yq4LCDsnbTrr7jsp4AsIOuCoOynnCwgRW51bSDshKDtg50g65OxKeulvCDrqoXsi5ztlanri4jri6QuXG4gKlxuICogKirrs4DtmZgg7Z2Q66aEKio6XG4gKiBFbnRpdHkgc3Vic2V0IOKGkiBFbnRpdHlQcm9wTm9kZSDihpIgWm9kIOyKpO2CpOuniCDihpIgUmVuZGVyaW5nTm9kZSAoVUnsmqkpIOKGkiBSZWFjdCDsu7Ttj6zrhIztirgg7L2U65OcIOyDneyEsVxuICpcbiAqICoq7KO87JqUIO2VhOuTnCoqOlxuICogLSBgcmVuZGVyVHlwZWA6IFVJIOy7tO2PrOuEjO2KuCDsnKDtmJUgKHN0cmluZy1wbGFpbiwgbnVtYmVyLWZrX2lkLCBlbnVtcywgYXJyYXkg65OxKVxuICogLSBgem9kVHlwZWA6IOybkOuzuCBab2Qg7Iqk7YKk66eIICh2YWxpZGF0aW9uIOyaqSlcbiAqIC0gYGNoaWxkcmVuYDog7KSR7LKp65CcIOqwneyytCDtlYTrk5zrk6QgKG9iamVjdOydvCDrlYwpXG4gKiAtIGBlbGVtZW50YDog67Cw7Je0IOyalOyGjCDtg4DsnoUgKGFycmF57J28IOuVjClcbiAqXG4gKiAqKuyCrOyaqSDsnITsuZgqKjpcbiAqIC0gem9kLWNvbnZlcnRlci50c+ydmCB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKCnsl5DshJwg7IOd7ISxXG4gKiAtIHZpZXdfZm9ybS50ZW1wbGF0ZS50cywgdmlld19saXN0LnRlbXBsYXRlLnRzIOuTseyXkOyEnCBSZWFjdCDsu7Ttj6zrhIztirgg7L2U65OcIOyDneyEseyXkCDsgqzsmqlcbiAqL1xuLy8g7IWA7ZSEIOywuOyhsCDtg4DsnoXsnbTrr4DroZwgWm9kIOyDneuete2VmOqzoCDsp4HsoJEg7KCV7J2YXG5leHBvcnQgY29uc3QgUmVuZGVyaW5nTm9kZSA9IHouYW55KCk7XG5leHBvcnQgdHlwZSBSZW5kZXJpbmdOb2RlID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHJlbmRlclR5cGU6XG4gICAgfCBcInN0cmluZy1wbGFpblwiXG4gICAgfCBcInN0cmluZy1pbWFnZVwiXG4gICAgfCBcInN0cmluZy1kYXRldGltZVwiXG4gICAgfCBcInN0cmluZy1kYXRlXCJcbiAgICB8IFwic3RyaW5nLWlkXCJcbiAgICB8IFwic3RyaW5nLWZrX2lkXCJcbiAgICB8IFwiZGF0ZXRpbWVcIlxuICAgIHwgXCJudW1iZXItcGxhaW5cIlxuICAgIHwgXCJudW1iZXItaWRcIlxuICAgIHwgXCJudW1iZXItZmtfaWRcIlxuICAgIHwgXCJib29sZWFuXCJcbiAgICB8IFwiZW51bXNcIlxuICAgIHwgXCJhcnJheVwiXG4gICAgfCBcImFycmF5LWltYWdlc1wiXG4gICAgfCBcImpzb24tc29uYW11ZmlsZVwiXG4gICAgfCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXG4gICAgfCBcIm9iamVjdFwiXG4gICAgfCBcIm9iamVjdC1waWNrXCJcbiAgICB8IFwicmVjb3JkXCJcbiAgICB8IFwidmVjdG9yXCI7XG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueTtcbiAgZWxlbWVudD86IFJlbmRlcmluZ05vZGU7XG4gIGNoaWxkcmVuPzogUmVuZGVyaW5nTm9kZVtdO1xuICBjb25maWc/OiB7XG4gICAgcGlja2VkOiBzdHJpbmc7XG4gIH07XG4gIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgbnVsbGFibGU/OiBib29sZWFuO1xufTtcblxuY29uc3QgR2VuZXJhdGVkQ29sdW1uU2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmVudW0oW1wiU1RPUkVEXCIsIFwiVklSVFVBTFwiXSksXG4gIGV4cHJlc3Npb246IHouc3RyaW5nKCksXG59KTtcblxuY29uc3QgQmFzZVByb3BGaWVsZHMgPSB7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2M6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbnVsbGFibGU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHRvRmlsdGVyOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKS5vcHRpb25hbCgpLFxuICBkYkRlZmF1bHQ6IHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCksIHouYm9vbGVhbigpXSkub3B0aW9uYWwoKSxcbiAgZ2VuZXJhdGVkOiBHZW5lcmF0ZWRDb2x1bW5TY2hlbWEub3B0aW9uYWwoKSxcbiAgY29uZTogQ29uZVNjaGVtYS5vcHRpb25hbCgpLFxufTtcblxuLy8g67aA6rCAIO2VhOuTnOqwgCDtlYTsmpTsl4bripQgcHJvcFxuY29uc3QgQmFzZVByb3BGaWVsZHNXaXRob3V0QWRkaXRpb25hbCA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei51bmlvbihbXG4gICAgICB6LmxpdGVyYWwoXCJpbnRlZ2VyXCIpLFxuICAgICAgei5saXRlcmFsKFwiaW50ZWdlcltdXCIpLFxuICAgICAgei5saXRlcmFsKFwiYmlnSW50ZWdlclwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJpZ0ludGVnZXJbXVwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJvb2xlYW5cIiksXG4gICAgICB6LmxpdGVyYWwoXCJib29sZWFuW11cIiksXG4gICAgICB6LmxpdGVyYWwoXCJ1dWlkXCIpLFxuICAgICAgei5saXRlcmFsKFwidXVpZFtdXCIpLFxuICAgICAgei5saXRlcmFsKFwidHN2ZWN0b3JcIiksXG4gICAgXSksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuLy8gcHJlY2lzaW9uL3NjYWxlIO2VhOuTnFxuY29uc3QgUHJlY2lzaW9uU2NhbGVGaWVsZHMgPSB7XG4gIHByZWNpc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBzY2FsZTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxufTtcblxuLy8g6rCBIO2DgOyeheuzhCDsiqTtgqTrp4gg7KCV7J2YXG5cbmNvbnN0IFN0cmluZ1Byb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcInN0cmluZ1wiKSxcbiAgICBsZW5ndGg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICB6b2RGb3JtYXQ6IFpvZFN0cmluZ0Zvcm1hdC5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5jb25zdCBTdHJpbmdBcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcInN0cmluZ1tdXCIpLFxuICAgIGxlbmd0aDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIHpvZEZvcm1hdDogWm9kU3RyaW5nRm9ybWF0Lm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgRW51bVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImVudW1cIiksXG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgbGVuZ3RoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IEVudW1BcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImVudW1bXVwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBOdW1iZXJQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1iZXJcIiksXG4gICAgLi4uUHJlY2lzaW9uU2NhbGVGaWVsZHMsXG4gICAgbnVtYmVyVHlwZTogei5lbnVtKFtcInJlYWxcIiwgXCJkb3VibGUgcHJlY2lzaW9uXCIsIFwibnVtZXJpY1wiXSkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgTnVtYmVyQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1iZXJbXVwiKSxcbiAgICAuLi5QcmVjaXNpb25TY2FsZUZpZWxkcyxcbiAgICBudW1iZXJUeXBlOiB6LmVudW0oW1wicmVhbFwiLCBcImRvdWJsZSBwcmVjaXNpb25cIiwgXCJudW1lcmljXCJdKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IERhdGVQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJkYXRlXCIpLFxuICAgIHByZWNpc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5jb25zdCBEYXRlQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJkYXRlW11cIiksXG4gICAgcHJlY2lzaW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgTnVtZXJpY1Byb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcIm51bWVyaWNcIiksXG4gICAgLi4uUHJlY2lzaW9uU2NhbGVGaWVsZHMsXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IE51bWVyaWNBcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcIm51bWVyaWNbXVwiKSxcbiAgICAuLi5QcmVjaXNpb25TY2FsZUZpZWxkcyxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBKc29uUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwianNvblwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBTZWFyY2hUZXh0U291cmNlQ29sdW1uU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGNhc2VJbnNlbnNpdGl2ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBTZWFyY2hUZXh0UHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwic2VhcmNoVGV4dFwiKSxcbiAgICBzb3VyY2VDb2x1bW5zOiB6LmFycmF5KFNlYXJjaFRleHRTb3VyY2VDb2x1bW5TY2hlbWEpLm1pbigxKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBWaXJ0dWFsUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwidmlydHVhbFwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgICB2aXJ0dWFsVHlwZTogei5lbnVtKFtcInF1ZXJ5XCIsIFwiY29kZVwiXSkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBWZWN0b3JQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2ZWN0b3JcIiksXG4gICAgZGltZW5zaW9uczogei5udW1iZXIoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgVmVjdG9yQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2ZWN0b3JbXVwiKSxcbiAgICBkaW1lbnNpb25zOiB6Lm51bWJlcigpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbi8vIFJlbGF0aW9uIO2DgOyeheydgCByZWxhdGlvblR5cGXsl5Ag65Sw6528IOyEuOu2hO2ZlFxuY29uc3QgQmFzZVJlbGF0aW9uRmllbGRzID0ge1xuICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgdHlwZTogei5saXRlcmFsKFwicmVsYXRpb25cIiksXG4gIHdpdGg6IHouc3RyaW5nKCksXG59O1xuXG4vLyBSZWxhdGlvbk9uIO2DgOyehVxuY29uc3QgUmVsYXRpb25PblNjaGVtYSA9IHouZW51bShbXCJDQVNDQURFXCIsIFwiU0VUIE5VTExcIiwgXCJOTyBBQ1RJT05cIiwgXCJTRVQgREVGQVVMVFwiLCBcIlJFU1RSSUNUXCJdKTtcblxuY29uc3QgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUmVsYXRpb25GaWVsZHMsXG4gICAgcmVsYXRpb25UeXBlOiB6LmxpdGVyYWwoXCJCZWxvbmdzVG9PbmVcIiksXG4gICAgY3VzdG9tSm9pbkNsYXVzZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHVzZUNvbnN0cmFpbnQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgb25VcGRhdGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBvbkRlbGV0ZTogUmVsYXRpb25PblNjaGVtYS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IEhhc01hbnlSZWxhdGlvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VSZWxhdGlvbkZpZWxkcyxcbiAgICByZWxhdGlvblR5cGU6IHoubGl0ZXJhbChcIkhhc01hbnlcIiksXG4gICAgam9pbkNvbHVtbjogei5zdHJpbmcoKSxcbiAgICBmcm9tQ29sdW1uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgTWFueVRvTWFueVJlbGF0aW9uUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVJlbGF0aW9uRmllbGRzLFxuICAgIHJlbGF0aW9uVHlwZTogei5saXRlcmFsKFwiTWFueVRvTWFueVwiKSxcbiAgICBqb2luVGFibGU6IHouc3RyaW5nKCksXG4gICAgb25VcGRhdGU6IFJlbGF0aW9uT25TY2hlbWEsXG4gICAgb25EZWxldGU6IFJlbGF0aW9uT25TY2hlbWEsXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgT25lVG9PbmVSZWxhdGlvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VSZWxhdGlvbkZpZWxkcyxcbiAgICByZWxhdGlvblR5cGU6IHoubGl0ZXJhbChcIk9uZVRvT25lXCIpLFxuICAgIGN1c3RvbUpvaW5DbGF1c2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBoYXNKb2luQ29sdW1uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIHVzZUNvbnN0cmFpbnQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgb25VcGRhdGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBvbkRlbGV0ZTogUmVsYXRpb25PblNjaGVtYS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFJlbGF0aW9uVHlwZXMgPSBbXCJCZWxvbmdzVG9PbmVcIiwgXCJIYXNNYW55XCIsIFwiTWFueVRvTWFueVwiLCBcIk9uZVRvT25lXCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFJlbGF0aW9uUHJvcFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFxuICBcInJlbGF0aW9uVHlwZVwiLFxuICBbXG4gICAgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wU2NoZW1hLFxuICAgIEhhc01hbnlSZWxhdGlvblByb3BTY2hlbWEsXG4gICAgTWFueVRvTWFueVJlbGF0aW9uUHJvcFNjaGVtYSxcbiAgICBPbmVUb09uZVJlbGF0aW9uUHJvcFNjaGVtYSxcbiAgXSxcbiAge1xuICAgIGVycm9yOiAoaXNzKSA9PlxuICAgICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgICBgcmVsYXRpb25UeXBl7J2AICR7UmVsYXRpb25UeXBlcy5tYXAoKHQpID0+IGAnJHt0fSdgKS5qb2luKFwiLCBcIil9IOykkSDtlZjrgpjsl6zslbwg7ZWp64uI64ukLiDsnoXroKXqsJI6IFwiJHtkZXNjcmliZUlucHV0RmllbGQoaXNzLmlucHV0LCBcInJlbGF0aW9uVHlwZVwiKX1cImAsXG4gIH0sXG4pO1xuXG5jb25zdCBOb3JtYWxQcm9wVHlwZXMgPSBbXG4gIFwiaW50ZWdlclwiLFxuICBcImludGVnZXJbXVwiLFxuICBcImJpZ0ludGVnZXJcIixcbiAgXCJiaWdJbnRlZ2VyW11cIixcbiAgXCJzdHJpbmdcIixcbiAgXCJzdHJpbmdbXVwiLFxuICBcImVudW1cIixcbiAgXCJlbnVtW11cIixcbiAgXCJudW1iZXJcIixcbiAgXCJudW1iZXJbXVwiLFxuICBcIm51bWVyaWNcIixcbiAgXCJudW1lcmljW11cIixcbiAgXCJib29sZWFuXCIsXG4gIFwiYm9vbGVhbltdXCIsXG4gIFwiZGF0ZVwiLFxuICBcImRhdGVbXVwiLFxuICBcInV1aWRcIixcbiAgXCJ1dWlkW11cIixcbiAgXCJqc29uXCIsXG4gIFwic2VhcmNoVGV4dFwiLFxuICBcInZpcnR1YWxcIixcbiAgXCJ2ZWN0b3JcIixcbiAgXCJ2ZWN0b3JbXVwiLFxuICBcInRzdmVjdG9yXCIsXG5dIGFzIGNvbnN0O1xuXG4vLyBWSVJUVUFMIEdlbmVyYXRlZCBDb2x1bW7sl5DshJwg7IKs7JqpIOu2iOqwgOuKpe2VnCDtg4DsnoXrk6RcbmNvbnN0IFZpcnR1YWxHZW5lcmF0ZWREaXNhbGxvd2VkVHlwZXMgPSBbXG4gIFwianNvblwiLFxuICBcInZlY3RvclwiLFxuICBcInZlY3RvcltdXCIsXG4gIFwic3RyaW5nW11cIixcbiAgXCJpbnRlZ2VyW11cIixcbiAgXCJiaWdJbnRlZ2VyW11cIixcbiAgXCJib29sZWFuW11cIixcbiAgXCJkYXRlW11cIixcbiAgXCJ1dWlkW11cIixcbiAgXCJudW1iZXJbXVwiLFxuICBcIm51bWVyaWNbXVwiLFxuICBcImVudW1bXVwiLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IE5vcm1hbFByb3BTY2hlbWEgPSB6XG4gIC5kaXNjcmltaW5hdGVkVW5pb24oXG4gICAgXCJ0eXBlXCIsXG4gICAgW1xuICAgICAgQmFzZVByb3BGaWVsZHNXaXRob3V0QWRkaXRpb25hbCxcbiAgICAgIFN0cmluZ1Byb3BTY2hlbWEsXG4gICAgICBTdHJpbmdBcnJheVByb3BTY2hlbWEsXG4gICAgICBFbnVtUHJvcFNjaGVtYSxcbiAgICAgIEVudW1BcnJheVByb3BTY2hlbWEsXG4gICAgICBOdW1iZXJQcm9wU2NoZW1hLFxuICAgICAgTnVtYmVyQXJyYXlQcm9wU2NoZW1hLFxuICAgICAgRGF0ZVByb3BTY2hlbWEsXG4gICAgICBEYXRlQXJyYXlQcm9wU2NoZW1hLFxuICAgICAgTnVtZXJpY1Byb3BTY2hlbWEsXG4gICAgICBOdW1lcmljQXJyYXlQcm9wU2NoZW1hLFxuICAgICAgSnNvblByb3BTY2hlbWEsXG4gICAgICBTZWFyY2hUZXh0UHJvcFNjaGVtYSxcbiAgICAgIFZpcnR1YWxQcm9wU2NoZW1hLFxuICAgICAgVmVjdG9yUHJvcFNjaGVtYSxcbiAgICAgIFZlY3RvckFycmF5UHJvcFNjaGVtYSxcbiAgICBdLFxuICAgIHtcbiAgICAgIGVycm9yOiAoaXNzKSA9PlxuICAgICAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICAgICAgYHR5cGXsnYAgJHtOb3JtYWxQcm9wVHlwZXMubWFwKCh0KSA9PiBgJyR7dH0nYCkuam9pbihcIiwgXCIpfSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpC4g7J6F66Cl6rCSOiBcIiR7ZGVzY3JpYmVJbnB1dEZpZWxkKGlzcy5pbnB1dCwgXCJ0eXBlXCIpfVwiYCxcbiAgICB9LFxuICApXG4gIC5zdXBlclJlZmluZSgoZGF0YSwgY3R4KSA9PiB7XG4gICAgaWYgKCFkYXRhLmdlbmVyYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGRiRGVmYXVsdOyZgCBnZW5lcmF0ZWQg64+Z7IucIOyCrOyaqSDrtojqsIBcbiAgICBpZiAoZGF0YS5kYkRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgbWVzc2FnZTogXCJkYkRlZmF1bHTsmYAgZ2VuZXJhdGVk64qUIO2VqOq7mCDsgqzsmqntlaAg7IiYIOyXhuyKteuLiOuLpFwiLFxuICAgICAgICBwYXRoOiBbXCJnZW5lcmF0ZWRcIl0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB2aXJ0dWFsIO2DgOyeheydgCBnZW5lcmF0ZWQg67aI6rCAXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gXCJ2aXJ0dWFsXCIpIHtcbiAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwidmlydHVhbCDtg4DsnoXsnYAgZ2VuZXJhdGVkIGNvbHVtbuydhCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukXCIsXG4gICAgICAgIHBhdGg6IFtcImdlbmVyYXRlZFwiXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFZJUlRVQUwgR2VuZXJhdGVkIENvbHVtbiDtg4DsnoUg7KCc7ZWcIOqygOymnVxuICAgIGlmIChkYXRhLmdlbmVyYXRlZC50eXBlID09PSBcIlZJUlRVQUxcIikge1xuICAgICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgICBpZiAoKFZpcnR1YWxHZW5lcmF0ZWREaXNhbGxvd2VkVHlwZXMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKGRhdGEudHlwZSkpIHtcbiAgICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IGBWSVJUVUFMIGdlbmVyYXRlZCBjb2x1bW7snYAgJHtkYXRhLnR5cGV9IO2DgOyeheydhCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukLiBTVE9SRUTrpbwg7IKs7Jqp7ZWY7IS47JqULmAsXG4gICAgICAgICAgcGF0aDogW1wiZ2VuZXJhdGVkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuY29uc3QgQWxsUHJvcFR5cGVzID0gWy4uLk5vcm1hbFByb3BUeXBlcywgXCJyZWxhdGlvblwiXSBhcyBjb25zdDtcbmNvbnN0IEVudGl0eVByb3BTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW05vcm1hbFByb3BTY2hlbWEsIFJlbGF0aW9uUHJvcFNjaGVtYV0sIHtcbiAgZXJyb3I6IChpc3MpID0+XG4gICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgYHR5cGXsnYAgJHtBbGxQcm9wVHlwZXMubWFwKCh0KSA9PiBgJyR7dH0nYCkuam9pbihcIiwgXCIpfSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpC4g7J6F66Cl6rCSOiBcIiR7ZGVzY3JpYmVJbnB1dEZpZWxkKGlzcy5pbnB1dCwgXCJ0eXBlXCIpfVwiYCxcbn0pO1xuXG5jb25zdCBFbnRpdHlJbmRleENvbHVtblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgbnVsbHNGaXJzdDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgc29ydE9yZGVyOiB6LmVudW0oW1wiQVNDXCIsIFwiREVTQ1wiXSkub3B0aW9uYWwoKSxcbiAgdmVjdG9yT3BzOiB6LmVudW0oW1widmVjdG9yX2Nvc2luZV9vcHNcIiwgXCJ2ZWN0b3JfaXBfb3BzXCIsIFwidmVjdG9yX2wyX29wc1wiXSkub3B0aW9uYWwoKSxcbiAgb3BjbGFzczogei51bmlvbihbei5lbnVtKEtub3duT3BjbGFzc1ZhbHVlcyksIHouc3RyaW5nKCkubWluKDEpXSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vLyBFbnRpdHlJbmRleCDsiqTtgqTrp4gg7KCV7J2YXG5jb25zdCBFbnRpdHlJbmRleFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdHlwZTogei5lbnVtKFtcImluZGV4XCIsIFwidW5pcXVlXCIsIFwiaG5zd1wiLCBcIml2ZmZsYXRcIl0pLFxuICAgIGNvbHVtbnM6IHouYXJyYXkoRW50aXR5SW5kZXhDb2x1bW5TY2hlbWEpLFxuICAgIG5hbWU6IHouc3RyaW5nKCkubWluKDEpLm1heCg2MyksXG4gICAgdXNpbmc6IHouZW51bShbXCJidHJlZVwiLCBcImhhc2hcIiwgXCJnaW5cIiwgXCJnaXN0XCIsIFwicGdyb29uZ2FcIl0pLm9wdGlvbmFsKCksXG4gICAgbnVsbHNOb3REaXN0aW5jdDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICB3aGVyZTogei5zdHJpbmcoKS50cmltKCkubWluKDEpLm9wdGlvbmFsKCksXG4gICAgbTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGVmQ29uc3RydWN0aW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgbGlzdHM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG4vKipcbiAqIFN1YnNldERlZiDsiqTtgqTrp4hcbiAqXG4gKiDtlZjsnIQg7Zi47ZmY7ISx7J2EIOychO2VtCDrsLDsl7Qg7ZiV7YOc7JmAIOqwneyytCDtmJXtg5wg65GYIOuLpCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmNvbnN0IFN1YnNldERlZlNjaGVtYSA9IHoudW5pb24oW1xuICAvLyDquLDsobQg67Cw7Je0IO2Yle2DnFxuICB6LmFycmF5KHoudW5pb24oW3ouc3RyaW5nKCksIHoub2JqZWN0KHsgZmllbGQ6IHouc3RyaW5nKCksIGludGVybmFsOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpIH0pXSkpLFxuICAvLyDsg4jroZzsmrQg6rCd7LK0IO2Yle2DnFxuICB6Lm9iamVjdCh7XG4gICAgZmllbGRzOiB6LmFycmF5KFxuICAgICAgei51bmlvbihbei5zdHJpbmcoKSwgei5vYmplY3QoeyBmaWVsZDogei5zdHJpbmcoKSwgaW50ZXJuYWw6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkgfSldKSxcbiAgICApLFxuICAgIGNvbmU6IENvbmVTY2hlbWEub3B0aW9uYWwoKSxcbiAgfSksXG5dKTtcblxuLyoqXG4gKiBFbnVtRGVmIOyKpO2CpOuniFxuICpcbiAqIO2VmOychCDtmLjtmZjshLHsnYQg7JyE7ZW0IFJlY29yZCDtmJXtg5zsmYAg6rCd7LK0IO2Yle2DnCDrkZgg64ukIOyngOybkO2VqeuLiOuLpC5cbiAqL1xuY29uc3QgRW51bURlZlNjaGVtYSA9IHoudW5pb24oW1xuICAvLyDquLDsobQgUmVjb3JkIO2Yle2DnFxuICB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKSxcbiAgLy8g7IOI66Gc7Jq0IOqwneyytCDtmJXtg5xcbiAgei5vYmplY3Qoe1xuICAgIHZhbHVlczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSksXG4gICAgY29uZTogQ29uZVNjaGVtYS5vcHRpb25hbCgpLFxuICB9KSxcbl0pO1xuXG5mdW5jdGlvbiB1bndyYXBTZWFyY2hUZXh0SnNvblNvdXJjZVR5cGUoem9kVHlwZTogei5ab2RUeXBlQW55KTogei5ab2RUeXBlQW55IHtcbiAgbGV0IGN1cnJlbnQgPSB6b2RUeXBlO1xuXG4gIHdoaWxlIChjdXJyZW50IGluc3RhbmNlb2Ygei5ab2RPcHRpb25hbCB8fCBjdXJyZW50IGluc3RhbmNlb2Ygei5ab2ROdWxsYWJsZSkge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIGN1cnJlbnQgPSBjdXJyZW50LnVud3JhcCgpIGFzIHouWm9kVHlwZUFueTtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTZWFyY2hUZXh0SnNvblNvdXJjZVpvZFR5cGUoem9kVHlwZTogei5ab2RUeXBlQW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGJhc2VUeXBlID0gdW53cmFwU2VhcmNoVGV4dEpzb25Tb3VyY2VUeXBlKHpvZFR5cGUpO1xuICBpZiAoIShiYXNlVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudFR5cGUgPSBiYXNlVHlwZS5kZWYuZWxlbWVudDtcbiAgcmV0dXJuIGVsZW1lbnRUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2VhcmNoVGV4dFNvdXJjZXMoXG4gIHByb3BzOiByZWFkb25seSB6LmluZmVyPHR5cGVvZiBFbnRpdHlQcm9wU2NoZW1hPltdLFxuICBjdHg6IHouUmVmaW5lbWVudEN0eCxcbiAgcHJvcHNQYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW1wicHJvcHNcIl0sXG4pOiB2b2lkIHtcbiAgY29uc3QgcHJvcHNCeU5hbWUgPSBuZXcgTWFwKFxuICAgIHByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgcmV0dXJuIFtwcm9wLm5hbWUsIHByb3BdO1xuICAgIH0pLFxuICApO1xuXG4gIHByb3BzLmZvckVhY2goKHByb3AsIHByb3BJbmRleCkgPT4ge1xuICAgIGlmIChwcm9wLnR5cGUgIT09IFwic2VhcmNoVGV4dFwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvcC5zb3VyY2VDb2x1bW5zLmZvckVhY2goKHNvdXJjZSwgc291cmNlSW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZVByb3AgPSBwcm9wc0J5TmFtZS5nZXQoc291cmNlLm5hbWUpO1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IFsuLi5wcm9wc1BhdGgsIHByb3BJbmRleCwgXCJzb3VyY2VDb2x1bW5zXCIsIHNvdXJjZUluZGV4LCBcIm5hbWVcIl07XG5cbiAgICAgIGlmICghc291cmNlUHJvcCkge1xuICAgICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgICAgbWVzc2FnZTogYHNlYXJjaFRleHQgc291cmNlIGNvbHVtbiBcIiR7c291cmNlLm5hbWV9XCLsnYQo66W8KSDssL7snYQg7IiYIOyXhuyKteuLiOuLpC5gLFxuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3VyY2VQcm9wLnR5cGUgPT09IFwic3RyaW5nXCIgfHwgc291cmNlUHJvcC50eXBlID09PSBcInN0cmluZ1tdXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoc291cmNlUHJvcC50eXBlID09PSBcImpzb25cIikge1xuICAgICAgICAvLyBqc29uIHNvdXJjZeydmCDstZzsooUg7YOA7J6FIOycoO2aqOyEseydgCBFbnRpdHlNYW5hZ2VyLnJlZ2lzdGVyKCkg64uo6rOE7JeQ7IScXG4gICAgICAgIC8vIOyLpOygnCBab2Qg7YOA7J6F7J2EIO2VtOyEne2VmOyXrCDqtazsobDsoIHsnLzroZwg6rKA7Kad7ZWp64uI64ukLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgIG1lc3NhZ2U6IGBzZWFyY2hUZXh0IHNvdXJjZSBjb2x1bW4gXCIke3NvdXJjZS5uYW1lfVwi7J2YIO2DgOyehSBcIiR7c291cmNlUHJvcC50eXBlfVwi7J2AKOuKlCkg7KeA7JuQ65CY7KeAIOyViuyKteuLiOuLpC5gLFxuICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCBFbnRpdHlKc29uQmFzZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJQYXNjYWxDYXNl66GcIOuQnCBFbnRpdHkgSURcIiksXG4gICAgdGl0bGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJFbnRpdHkg7J2066aEXCIpLFxuICAgIHRhYmxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwic25ha2VfY2FzZeuhnCDrkJwg7YWM7J2067iU66qFXCIpLFxuICAgIHBhcmVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCLrtoDrqqggRW50aXR5IElEXCIpLFxuICAgIGNvbmU6IENvbmVTY2hlbWEub3B0aW9uYWwoKSxcbiAgICBwcm9wczogei5hcnJheShFbnRpdHlQcm9wU2NoZW1hKSxcbiAgICBpbmRleGVzOiB6LmFycmF5KEVudGl0eUluZGV4U2NoZW1hKSxcbiAgICBzdWJzZXRzOiB6LnJlY29yZCh6LnN0cmluZygpLCBTdWJzZXREZWZTY2hlbWEpLFxuICAgIGVudW1zOiB6LnJlY29yZCh6LnN0cmluZygpLCBFbnVtRGVmU2NoZW1hKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5leHBvcnQgY29uc3QgRW50aXR5SnNvblNjaGVtYSA9IEVudGl0eUpzb25CYXNlU2NoZW1hLnN1cGVyUmVmaW5lKChlbnRpdHksIGN0eCkgPT4ge1xuICB2YWxpZGF0ZVNlYXJjaFRleHRTb3VyY2VzKGVudGl0eS5wcm9wcywgY3R4KTtcbn0pO1xuXG5jb25zdCBUZW1wbGF0ZUVudGl0eVNjaGVtYSA9IEVudGl0eUpzb25CYXNlU2NoZW1hLm9taXQoeyBpZDogdHJ1ZSB9KVxuICAuZXh0ZW5kKHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSlcbiAgLnBhcnRpYWwoe1xuICAgIHRhYmxlOiB0cnVlLFxuICAgIHByb3BzOiB0cnVlLFxuICAgIGluZGV4ZXM6IHRydWUsXG4gICAgc3Vic2V0czogdHJ1ZSxcbiAgICBlbnVtczogdHJ1ZSxcbiAgfSlcbiAgLnN1cGVyUmVmaW5lKChlbnRpdHksIGN0eCkgPT4ge1xuICAgIGlmICghZW50aXR5LnByb3BzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsaWRhdGVTZWFyY2hUZXh0U291cmNlcyhlbnRpdHkucHJvcHMsIGN0eCk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgVGVtcGxhdGVPcHRpb25zID0gei5vYmplY3Qoe1xuICBlbnRpdHk6IFRlbXBsYXRlRW50aXR5U2NoZW1hLFxuICBpbml0X3R5cGVzOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBnZW5lcmF0ZWQ6IHoub2JqZWN0KHt9KSxcbiAgZ2VuZXJhdGVkX3Nzbzogei5vYmplY3Qoe30pLFxuICBnZW5lcmF0ZWRfaHR0cDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgaHR0cF92YWxpZGF0b3JzOiB6Lm9iamVjdCh7fSksXG4gIG1vZGVsOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgZGVmYXVsdFNlYXJjaEZpZWxkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGVmYXVsdE9yZGVyQnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIG1vZGVsX3Rlc3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGJyaWRnZTogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgc2VydmljZXM6IHoub2JqZWN0KHt9KSxcbiAgdmlld19saXN0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgZXh0cmE6IHoudW5rbm93bigpLFxuICB9KSxcbiAgdmlld19saXN0X2NvbHVtbnM6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBjb2x1bW5zOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgbGFiZWw6IHouc3RyaW5nKCksXG4gICAgICAgIHRjOiB6LnN0cmluZygpLFxuICAgICAgfSlcbiAgICAgIC5hcnJheSgpLFxuICAgIGNvbHVtbkltcG9ydHM6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X3NlYXJjaF9pbnB1dDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19mb3JtOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2lkX2FsbF9zZWxlY3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHZpZXdfZW51bXNfYnV0dG9uc2V0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgZW51bUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgcXVlcmllczogei5vYmplY3Qoe30pLFxuICBlbnRyeV9zZXJ2ZXI6IHoub2JqZWN0KHt9KSxcbiAgc2Q6IHoub2JqZWN0KHtcbiAgICB0YXJnZXQ6IHouZW51bShbXCJhcGlcIiwgXCJ3ZWJcIiwgXCJhcHBcIl0pLFxuICB9KSxcbn0pO1xuZXhwb3J0IHR5cGUgVGVtcGxhdGVPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgVGVtcGxhdGVPcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFRlbXBsYXRlS2V5ID0gei5lbnVtKFtcbiAgXCJlbnRpdHlcIixcbiAgXCJpbml0X3R5cGVzXCIsXG4gIFwiZ2VuZXJhdGVkXCIsXG4gIFwiZ2VuZXJhdGVkX3Nzb1wiLFxuICBcImdlbmVyYXRlZF9odHRwXCIsXG4gIFwiaHR0cF92YWxpZGF0b3JzXCIsXG4gIFwibW9kZWxcIixcbiAgXCJtb2RlbF90ZXN0XCIsXG4gIFwiYnJpZGdlXCIsXG4gIFwic2VydmljZXNcIixcbiAgXCJ2aWV3X2xpc3RcIixcbiAgXCJ2aWV3X2xpc3RfY29sdW1uc1wiLFxuICBcInZpZXdfc2VhcmNoX2lucHV0XCIsXG4gIFwidmlld19mb3JtXCIsXG4gIFwidmlld19pZF9hbGxfc2VsZWN0XCIsXG4gIFwidmlld19lbnVtc19idXR0b25zZXRcIixcbiAgXCJxdWVyaWVzXCIsXG4gIFwiZW50cnlfc2VydmVyXCIsXG4gIFwic2RcIixcbl0pO1xuZXhwb3J0IHR5cGUgVGVtcGxhdGVLZXkgPSB6LmluZmVyPHR5cGVvZiBUZW1wbGF0ZUtleT47XG5cbmV4cG9ydCBjb25zdCBHZW5lcmF0ZU9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gIG92ZXJ3cml0ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgR2VuZXJhdGVPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgR2VuZXJhdGVPcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFBhdGhBbmRDb2RlID0gei5vYmplY3Qoe1xuICBwYXRoOiB6LnN0cmluZygpLFxuICBjb2RlOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBQYXRoQW5kQ29kZSA9IHouaW5mZXI8dHlwZW9mIFBhdGhBbmRDb2RlPjtcblxuZXhwb3J0IHR5cGUgRml4dHVyZVNlYXJjaE9wdGlvbnMgPSB7XG4gIGVudGl0eUlkOiBzdHJpbmc7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHNlYXJjaFR5cGU6IFwiZXF1YWxzXCIgfCBcImxpa2VcIjtcbn07XG5cbnR5cGUgQ29sdW1uVmFsdWUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZSB8IG51bGw7XG5leHBvcnQgdHlwZSBGaXh0dXJlUmVjb3JkID0ge1xuICBmaXh0dXJlSWQ6IHN0cmluZztcbiAgZW50aXR5SWQ6IHN0cmluZztcbiAgaWQ6IG51bWJlciB8IHN0cmluZztcbiAgY29sdW1uczoge1xuICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgIHByb3A6IEVudGl0eVByb3A7XG4gICAgICB2YWx1ZTogQ29sdW1uVmFsdWUgfCBDb2x1bW5WYWx1ZVtdO1xuICAgIH07XG4gIH07XG4gIGZldGNoZWRSZWNvcmRzOiBzdHJpbmdbXTtcbiAgYmVsb25nc1JlY29yZHM6IHN0cmluZ1tdO1xuICB0YXJnZXQ/OiBGaXh0dXJlUmVjb3JkOyAvLyBJbXBvcnQg64yA7IOBIERCIOugiOy9lOuTnChpZOqwgCDqsJnsnYApXG4gIHVuaXF1ZT86IEZpeHR1cmVSZWNvcmQ7IC8vIEltcG9ydCDrjIDsg4EgREIg66CI7L2U65OcKHVuaXF1ZSBrZXnqsIAg6rCZ7J2AKVxuICBvdmVycmlkZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBGaXh0dXJlSW1wb3J0UmVzdWx0ID0ge1xuICBlbnRpdHlJZDogc3RyaW5nO1xuICBkYXRhOiB7XG4gICAgW2tleTogc3RyaW5nXTogQ29sdW1uVmFsdWU7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbk5vZGUgPSB7XG4gIGZpeHR1cmVJZDogc3RyaW5nO1xuICBlbnRpdHlJZDogc3RyaW5nO1xuICByZWxhdGVkOiBTZXQ8c3RyaW5nPjtcbn07XG5cbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlIC0tIHNvbmFtdS5nZW5lcmF0ZWQuc3NvIOyXkOyEnCDtmZXsnqXsnYQg7JyE7ZW0IOykgOu5hOuQnCDruYgg7J247YSw7Y6Y7J207IqkXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlU2NoZW1hRXh0ZW5kIHt9XG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZSAtLSBzb25hbXUuZ2VuZXJhdGVkLnNzbyDsl5DshJwg7ZmV7J6l7J2EIOychO2VtCDspIDruYTrkJwg67mIIOyduO2EsO2OmOydtOyKpFxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUZvcmVpZ25LZXlzIHt9XG5leHBvcnQgdHlwZSBNYW55VG9NYW55QmFzZVNjaGVtYTxcbiAgRnJvbUlkS2V5IGV4dGVuZHMgc3RyaW5nLFxuICBUb0lkS2V5IGV4dGVuZHMgc3RyaW5nLFxuICBGcm9tUGtUeXBlID0gbnVtYmVyLFxuICBUb1BrVHlwZSA9IG51bWJlcixcbj4gPSB7XG4gIGlkOiBudW1iZXI7XG59ICYge1xuICBbSyBpbiBgJHtGcm9tSWRLZXl9X2lkYF06IEZyb21Qa1R5cGU7XG59ICYge1xuICBbSyBpbiBgJHtUb0lkS2V5fV9pZGBdOiBUb1BrVHlwZTtcbn07XG5cbi8vIOqwneyytCwg7ZWo7IiYLCDruYTrj5nquLAg7ZWo7IiY66W8IOuqqOuRkCDtj6zqtITtlZjripQg7YOA7J6FXG5leHBvcnQgdHlwZSBFeGVjdXRhYmxlPFQ+ID0gVCB8IFByb21pc2U8VD4gfCAoKCkgPT4gVCkgfCAoKCkgPT4gUHJvbWlzZTxUPik7XG5cbmV4cG9ydCB0eXBlIFNvbmFtdUZhc3RpZnlDb25maWcgPSB7XG4gIGNvbnRleHRQcm92aWRlcjogKFxuICAgIGRlZmF1bHRDb250ZXh0OiBQaWNrPFxuICAgICAgQXBpQ29udGV4dCxcbiAgICAgIHwgXCJ0cmFuc3BvcnRcIlxuICAgICAgfCBcInJlcXVlc3RcIlxuICAgICAgfCBcInJlcGx5XCJcbiAgICAgIHwgXCJoZWFkZXJzXCJcbiAgICAgIHwgXCJjcmVhdGVTU0VcIlxuICAgICAgfCBcIm5haXRlU3RvcmVcIlxuICAgICAgfCBcImxvY2FsZVwiXG4gICAgICB8IFwidXNlclwiXG4gICAgICB8IFwic2Vzc2lvblwiXG4gICAgPixcbiAgICByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCxcbiAgICByZXBseTogRmFzdGlmeVJlcGx5LFxuICApID0+IEFwaUNvbnRleHQgfCBQcm9taXNlPEFwaUNvbnRleHQ+O1xuICB3ZWJzb2NrZXRDb250ZXh0UHJvdmlkZXI/OiAoXG4gICAgZGVmYXVsdENvbnRleHQ6IFBpY2s8XG4gICAgICBpbXBvcnQoXCIuLi9hcGkvY29udGV4dFwiKS5XZWJTb2NrZXRDb250ZXh0LFxuICAgICAgXCJ0cmFuc3BvcnRcIiB8IFwicmVxdWVzdFwiIHwgXCJoZWFkZXJzXCIgfCBcIndzXCIgfCBcIm5haXRlU3RvcmVcIiB8IFwibG9jYWxlXCIgfCBcInVzZXJcIiB8IFwic2Vzc2lvblwiXG4gICAgPixcbiAgICByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCxcbiAgKSA9PlxuICAgIHwgaW1wb3J0KFwiLi4vYXBpL2NvbnRleHRcIikuV2ViU29ja2V0Q29udGV4dFxuICAgIHwgUHJvbWlzZTxpbXBvcnQoXCIuLi9hcGkvY29udGV4dFwiKS5XZWJTb2NrZXRDb250ZXh0PjtcbiAgZ3VhcmRIYW5kbGVyOiAoXG4gICAgZ3VhcmQ6IEd1YXJkS2V5LFxuICAgIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LFxuICAgIGFwaToge1xuICAgICAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgICAgIHBhcmFtZXRlcnM6IEFwaVBhcmFtW107XG4gICAgICByZXR1cm5UeXBlOiBBcGlQYXJhbVR5cGU7XG4gICAgICBtb2RlbE5hbWU6IHN0cmluZztcbiAgICAgIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICAgIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gICAgfSxcbiAgKSA9PiB2b2lkO1xuICAvKipcbiAgICog7KCE7JetIENhY2hlLUNvbnRyb2wg7ZW465Ok65+s7J6F64uI64ukLlxuICAgKiDsmpTssq0g7YOA7J6FKGFwaSwgYXNzZXRzLCBzc3IsIGNzcinsl5Ag65Sw6528IENhY2hlLUNvbnRyb2wg7ISk7KCV7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAgICogdW5kZWZpbmVk66W8IOuwmO2ZmO2VmOuptCDtg4DsnoXrs4Qg6riw67O46rCS7J20IOyggeyaqeuQqeuLiOuLpC5cbiAgICovXG4gIGNhY2hlQ29udHJvbEhhbmRsZXI/OiBDYWNoZUNvbnRyb2xIYW5kbGVyO1xufTtc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
788
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRmFzdGlmeVJlcGx5LCB0eXBlIEZhc3RpZnlSZXF1ZXN0IH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IHR5cGUgQXBpRGVjb3JhdG9yT3B0aW9ucywgdHlwZSBDb250ZXh0IGFzIEFwaUNvbnRleHQgfSBmcm9tIFwiLi4vYXBpXCI7XG5pbXBvcnQgeyB0eXBlIENhY2hlQ29udHJvbEhhbmRsZXIgfSBmcm9tIFwiLi4vY2FjaGUtY29udHJvbC90eXBlc1wiO1xuaW1wb3J0IHsgaXNPYmplY3RWYWx1ZSwgaXNTdHJpbmdWYWx1ZSB9IGZyb20gXCIuLi91dGlscy9ydW50aW1lLXZhbHVlXCI7XG5pbXBvcnQgeyB0eXBlIEd1YXJkS2V5IH0gZnJvbSBcIi4vLi4vYXBpL2RlY29yYXRvcnNcIjtcblxuZnVuY3Rpb24gZGVzY3JpYmVJbnB1dEZpZWxkPFZhbHVlPihpbnB1dDogVmFsdWUsIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWlzT2JqZWN0VmFsdWUoaW5wdXQpKSB7XG4gICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gIH1cbiAgY29uc3QgZmllbGRFbnRyeSA9IE9iamVjdC5lbnRyaWVzKGlucHV0KS5maW5kKChba2V5XSkgPT4ga2V5ID09PSBmaWVsZCk7XG4gIHJldHVybiBTdHJpbmcoZmllbGRFbnRyeT8uWzFdKTtcbn1cblxuLypcbiAgVXRpbGl0eSBUeXBlc1xuKi9cbmV4cG9ydCBmdW5jdGlvbiB6QXJyYXlhYmxlPFQgZXh0ZW5kcyB6LlpvZFR5cGVBbnk+KHNjaGVtYTogVCk6IHouWm9kVW5pb248W1QsIHouWm9kQXJyYXk8VD5dPiB7XG4gIHJldHVybiB6LnVuaW9uKFtzY2hlbWEsIHNjaGVtYS5hcnJheSgpXSk7XG59XG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBhbnkgaXMgdXNlZCB0byBtYWtlIHRoZSB0eXBlIGRpc3RyaWJ1dGl2ZVxuZXhwb3J0IHR5cGUgRGlzdHJpYnV0aXZlT21pdDxULCBLIGV4dGVuZHMga2V5b2YgYW55PiA9IFQgZXh0ZW5kcyBhbnkgPyBPbWl0PFQsIEs+IDogbmV2ZXI7XG5cbi8qXG4gIE1vZGVsLURlZmluaXRpb25cbiovXG5cbi8qKlxuICog67aA66qoIEVudGl0eSBmaXh0dXJlIOyDneyEsSDsi5wg7ZWo6ruYIOyDneyEse2VoCBjb21wYW5pb24gRW50aXR5IOyEpOyglVxuICpcbiAqIOyYiDogVXNlciBmaXh0dXJlIOyDneyEsSDsi5wgY3JlZGVudGlhbHMgQWNjb3VudOulvCDtlajqu5gg7IOd7ISxXG4gKi9cbmV4cG9ydCB0eXBlIEpzb25WYWx1ZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IG51bGxcbiAgfCBKc29uVmFsdWVbXVxuICB8IHsgW2tleTogc3RyaW5nXTogSnNvblZhbHVlIH07XG5cbmNvbnN0IEZpeHR1cmVDb21wYW5pb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGVudGl0eTogei5zdHJpbmcoKSxcbiAgb3ZlcnJpZGVzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgY291bnQ6IHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKiBjb25lIOuplO2DgOuNsOydtO2EsOulvCDqsoDspp3tlZjrqbTshJwg7IKs7Jqp7J6QIOygleydmCDtmZXsnqUg6rCS7J2AIOq3uOuMgOuhnCDrs7TsobTtlanri4jri6QuICovXG5jb25zdCBDb25lU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBub3RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgdGFnczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIGZpeHR1cmVHZW5lcmF0b3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBmaXh0dXJlRGVmYXVsdDogei51bmtub3duKCkub3B0aW9uYWwoKSxcbiAgICBmaXh0dXJlU3RyYXRlZ3k6IHoubGl0ZXJhbChcInNlcXVlbmNlXCIpLm9wdGlvbmFsKCksXG4gICAgZml4dHVyZUNvbXBhbmlvbnM6IHouYXJyYXkoRml4dHVyZUNvbXBhbmlvblNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICBmaXh0dXJlUGFyZW50T3ZlcnJpZGVzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgICBkYXRhU291cmNlOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgc3RyYXRlZ3k6IHouZW51bShbXCJzYW1wbGVcIiwgXCJpZHNcIiwgXCJxdWVyeVwiLCBcImZpbGVcIiwgXCJyZWNlbnRcIiwgXCJyYW5kb21cIl0pLFxuICAgICAgICBjb25maWc6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICAgLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5jYXRjaGFsbCh6LnVua25vd24oKSk7XG5cbmV4cG9ydCB0eXBlIEZpeHR1cmVDb21wYW5pb24gPSB6LmluZmVyPHR5cGVvZiBGaXh0dXJlQ29tcGFuaW9uU2NoZW1hPjtcbmV4cG9ydCB0eXBlIENvbmUgPSB6LmluZmVyPHR5cGVvZiBDb25lU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgR2VuZXJhdGVkQ29sdW1uVHlwZSA9IFwiU1RPUkVEXCIgfCBcIlZJUlRVQUxcIjtcbmV4cG9ydCB0eXBlIEdlbmVyYXRlZENvbHVtbiA9IHtcbiAgdHlwZTogR2VuZXJhdGVkQ29sdW1uVHlwZTtcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIENvbW1vblByb3AgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVsbGFibGU/OiBib29sZWFuO1xuICB0b0ZpbHRlcj86IHRydWU7XG4gIGRlc2M/OiBzdHJpbmc7XG4gIGRiRGVmYXVsdD86IHN0cmluZztcbiAgZ2VuZXJhdGVkPzogR2VuZXJhdGVkQ29sdW1uO1xuICBjb25lPzogQ29uZTsgLy8gY29uZSDrqZTtg4DrjbDsnbTthLBcbn07XG5cbi8qKlxuICogcHJvcOydmCDshKTrqoXsnYQg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIGNvbmUubm90ZeqwgCDsnojsnLzrqbQg7Jqw7ISgIOyCrOyaqe2VmOqzoCwg7JeG7Jy866m0IHByb3AuZGVzY+ulvCDsgqzsmqntlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXNjcmlwdGlvbihpdGVtOiB7IGRlc2M/OiBzdHJpbmc7IGNvbmU/OiBDb25lIH0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaXRlbS5jb25lPy5ub3RlIHx8IGl0ZW0uZGVzYztcbn1cbmV4cG9ydCB0eXBlIEludGVnZXJQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJpbnRlZ2VyXCI7XG59OyAvLyBQRzogaW50ZWdlciAvIFRTOiBudW1iZXIgLyBKU09OOiBudW1iZXJcbmV4cG9ydCB0eXBlIEludGVnZXJBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImludGVnZXJbXVwiO1xufTsgLy8gUEc6IGludGVnZXJbXSAvIFRTOiBudW1iZXJbXSAvIEpTT046IG51bWJlcltdXG5leHBvcnQgdHlwZSBCaWdJbnRlZ2VyUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiYmlnSW50ZWdlclwiO1xufTsgLy8gUEc6IGJpZ2ludCAvIFRTOiBiaWdpbnQgLyBKU09OOiBiaWdpbnRcbmV4cG9ydCB0eXBlIEJpZ0ludGVnZXJBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImJpZ0ludGVnZXJbXVwiO1xufTsgLy8gUEc6IGJpZ2ludFtdIC8gVFM6IGJpZ2ludFtdIC8gSlNPTjogYmlnaW50W11cblxuLyoqXG4gKiBab2QgNCBTdHJpbmcgRm9ybWF0IO2DgOyehVxuICogZW50aXR5Lmpzb27sl5DshJwgc3RyaW5nIO2DgOyeheydmCBwcm9w7JeQIHpvZEZvcm1hdCDsmLXshZjsnYQg7KeA7KCV7ZWY7JesXG4gKiBCYXNlU2NoZW1hIOyDneyEsSDsi5wgWm9k7J2YIHN0cmluZyBmb3JtYXQgdmFsaWRhdGlvbuydhCDsoIHsmqntlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCBab2RTdHJpbmdGb3JtYXQgPSB6LmVudW0oW1xuICAvLyDquLDrs7gg7Y+s66e3XG4gIFwiZW1haWxcIixcbiAgXCJ1dWlkXCIsXG4gIFwidXJsXCIsXG4gIFwiaHR0cFVybFwiLFxuICBcImhvc3RuYW1lXCIsXG4gIFwiZW1vamlcIixcbiAgXCJiYXNlNjRcIixcbiAgXCJiYXNlNjR1cmxcIixcbiAgXCJoZXhcIixcbiAgXCJqd3RcIixcbiAgXCJuYW5vaWRcIixcbiAgXCJjdWlkXCIsXG4gIFwiY3VpZDJcIixcbiAgXCJ1bGlkXCIsXG4gIFwiaXB2NFwiLFxuICBcImlwdjZcIixcbiAgXCJtYWNcIixcbiAgXCJjaWRydjRcIixcbiAgXCJjaWRydjZcIixcbiAgLy8gaGFzaCDtj6zrp7cgKOyVjOqzoOumrOymmOuzhClcbiAgXCJoYXNoTWQ1XCIsXG4gIFwiaGFzaFNoYTFcIixcbiAgXCJoYXNoU2hhMjU2XCIsXG4gIFwiaGFzaFNoYTM4NFwiLFxuICBcImhhc2hTaGE1MTJcIixcbiAgLy8gSVNPIO2PrOunt1xuICBcImlzb0RhdGVcIixcbiAgXCJpc29UaW1lXCIsXG4gIFwiaXNvRGF0ZXRpbWVcIixcbiAgXCJpc29EdXJhdGlvblwiLFxuXSk7XG5leHBvcnQgdHlwZSBab2RTdHJpbmdGb3JtYXQgPSB6LmluZmVyPHR5cGVvZiBab2RTdHJpbmdGb3JtYXQ+O1xuXG5leHBvcnQgdHlwZSBTdHJpbmdQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJzdHJpbmdcIjtcbiAgbGVuZ3RoPzogbnVtYmVyOyAvLyBQRzogdmFyY2hhcihuKSwgdGV4dCAvIFRTOiBzdHJpbmcgLyBKU09OOiBzdHJpbmdcbiAgem9kRm9ybWF0PzogWm9kU3RyaW5nRm9ybWF0O1xufTsgLy8gUEc6IHRleHQgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBTdHJpbmdBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInN0cmluZ1tdXCI7XG4gIGxlbmd0aD86IG51bWJlcjsgLy8gUEc6IHZhcmNoYXIobilbXSwgdGV4dFtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbiAgem9kRm9ybWF0PzogWm9kU3RyaW5nRm9ybWF0O1xufTsgLy8gUEc6IHZhcmNoYXIobilbXSwgdGV4dFtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIEVudW1Qcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJlbnVtXCI7XG4gIGlkOiBzdHJpbmc7XG4gIGxlbmd0aD86IG51bWJlcjtcbn07IC8vIFBHOiB0ZXh0IC8gVFM6IHN0cmluZyAvIEpTT046IHN0cmluZ1xuZXhwb3J0IHR5cGUgRW51bUFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZW51bVtdXCI7XG4gIGlkOiBzdHJpbmc7XG59OyAvLyBQRzogdGV4dFtdIC8gVFM6IHN0cmluZ1tdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIE51bWJlclByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcIm51bWJlclwiO1xuICBwcmVjaXNpb24/OiBudW1iZXI7IC8vIFBHOiBudW1lcmljKHAsIHMpIC8gVFM6IG51bWJlciAvIEpTT046IG51bWJlclxuICBzY2FsZT86IG51bWJlcjsgLy8gUEc6IG51bWVyaWMocCwgcykgLyBUUzogbnVtYmVyIC8gSlNPTjogbnVtYmVyXG4gIG51bWJlclR5cGU/OiBcInJlYWxcIiB8IFwiZG91YmxlIHByZWNpc2lvblwiIHwgXCJudW1lcmljXCI7IC8vIOq4sOuzuOqwkjogbnVtZXJpY1xufTsgLy8gUEc6IG51bWVyaWMocCwgcykgLyBUUzogbnVtYmVyIC8gSlNPTjogbnVtYmVyXG5leHBvcnQgdHlwZSBOdW1iZXJBcnJheVByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcIm51bWJlcltdXCI7XG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgc2NhbGU/OiBudW1iZXI7XG4gIG51bWJlclR5cGU/OiBcInJlYWxcIiB8IFwiZG91YmxlIHByZWNpc2lvblwiIHwgXCJudW1lcmljXCI7IC8vIOq4sOuzuOqwkjogbnVtZXJpY1xufTsgLy8gUEc6IG51bWVyaWMocCwgcylbXSAvIFRTOiBudW1iZXJbXSAvIEpTT046IG51bWJlcltdXG5leHBvcnQgdHlwZSBOdW1lcmljUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwibnVtZXJpY1wiO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xufTsgLy8gUEc6IG51bWVyaWMocCwgcykgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBOdW1lcmljQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJudW1lcmljW11cIjtcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICBzY2FsZT86IG51bWJlcjtcbn07IC8vIFBHOiBudW1lcmljKHAsIHMpW10gLyBUUzogc3RyaW5nW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgQm9vbGVhblByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcImJvb2xlYW5cIjtcbn07IC8vIFBHOiBib29sZWFuIC8gVFM6IGJvb2xlYW4gLyBKU09OOiBib29sZWFuXG5leHBvcnQgdHlwZSBCb29sZWFuQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJib29sZWFuW11cIjtcbn07IC8vIFBHOiBib29sZWFuW10gLyBUUzogYm9vbGVhbltdIC8gSlNPTjogYm9vbGVhbltdXG5leHBvcnQgdHlwZSBEYXRlUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZGF0ZVwiO1xuICAvLyDquLDrs7jqsJLsnYAgMywgbWljcm9zZWNvbmRz66W8IOyTsOugpOuptCA27J2EIOyNqOyVvO2VqCAoMCB+IDYpXG4gIHByZWNpc2lvbj86IG51bWJlcjtcbn07IC8vIFBHOiB0aW1lc3RhbXB6IC8gVFM6IERhdGUgLyBKU09OOiBzdHJpbmcoSVNPU3RyaW5nKVxuZXhwb3J0IHR5cGUgRGF0ZUFycmF5UHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwiZGF0ZVtdXCI7XG4gIC8vIOq4sOuzuOqwkuydgCAzLCBtaWNyb3NlY29uZHPrpbwg7JOw66Ck66m0IDbsnYQg7I2o7JW87ZWoICgwIH4gNilcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xufTsgLy8gUEc6IHRpbWVzdGFtcHR6W10gLyBUUzogRGF0ZVtdIC8gSlNPTjogc3RyaW5nW11cbmV4cG9ydCB0eXBlIEpzb25Qcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJqc29uXCI7XG4gIGlkOiBzdHJpbmc7XG59OyAvLyBQRzoganNvbiAvIFRTOiBhbnkoaWQpIC8gSlNPTjogYW55XG5leHBvcnQgdHlwZSBTZWFyY2hUZXh0U291cmNlQ29sdW1uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhc2VJbnNlbnNpdGl2ZT86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgU2VhcmNoVGV4dFByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInNlYXJjaFRleHRcIjtcbiAgc291cmNlQ29sdW1uczogU2VhcmNoVGV4dFNvdXJjZUNvbHVtbltdO1xufTsgLy8gUEc6IHRleHQgKGdlbmVyYXRlZCkgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBVdWlkUHJvcCA9IENvbW1vblByb3AgJiB7XG4gIHR5cGU6IFwidXVpZFwiO1xufTsgLy8gUEc6IHV1aWQgLyBUUzogc3RyaW5nIC8gSlNPTjogc3RyaW5nXG5leHBvcnQgdHlwZSBVdWlkQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ1dWlkW11cIjtcbn07IC8vIFBHOiB1dWlkW10gLyBUUzogc3RyaW5nW10gLyBKU09OOiBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgVmlydHVhbFByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInZpcnR1YWxcIjtcbiAgaWQ6IHN0cmluZztcbiAgdmlydHVhbFR5cGU/OiBcInF1ZXJ5XCIgfCBcImNvZGVcIjsgLy8gZGVmYXVsdDogXCJjb2RlXCJcbn07IC8vIFBHOiBub25lIC8gVFM6IGFueShpZCkgLyBKU09OOiBhbnlcbmV4cG9ydCB0eXBlIFZlY3RvclByb3AgPSBDb21tb25Qcm9wICYge1xuICB0eXBlOiBcInZlY3RvclwiO1xuICBkaW1lbnNpb25zOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVmVjdG9yQXJyYXlQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ2ZWN0b3JbXVwiO1xuICBkaW1lbnNpb25zOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVHNWZWN0b3JQcm9wID0gQ29tbW9uUHJvcCAmIHtcbiAgdHlwZTogXCJ0c3ZlY3RvclwiO1xufTtcbmV4cG9ydCB0eXBlIFJlbGF0aW9uVHlwZSA9IFwiSGFzTWFueVwiIHwgXCJCZWxvbmdzVG9PbmVcIiB8IFwiTWFueVRvTWFueVwiIHwgXCJPbmVUb09uZVwiO1xuZXhwb3J0IHR5cGUgUmVsYXRpb25PbiA9IFwiQ0FTQ0FERVwiIHwgXCJTRVQgTlVMTFwiIHwgXCJOTyBBQ1RJT05cIiB8IFwiU0VUIERFRkFVTFRcIiB8IFwiUkVTVFJJQ1RcIjtcbnR5cGUgX1JlbGF0aW9uUHJvcCA9IHtcbiAgdHlwZTogXCJyZWxhdGlvblwiO1xuICBuYW1lOiBzdHJpbmc7XG4gIHdpdGg6IHN0cmluZztcbiAgbnVsbGFibGU/OiBib29sZWFuOyAvLyBERUZBVUxUOiBmYWxzZVxuICB0b0ZpbHRlcj86IHRydWU7IC8vIERFRkFVTFQ6IGZhbHNlXG4gIGRlc2M/OiBzdHJpbmc7XG4gIGNvbmU/OiBDb25lOyAvLyBjb25lIOuplO2DgOuNsOydtO2EsFxufTtcbmV4cG9ydCB0eXBlIE9uZVRvT25lUmVsYXRpb25Qcm9wID0gX1JlbGF0aW9uUHJvcCAmIHtcbiAgcmVsYXRpb25UeXBlOiBcIk9uZVRvT25lXCI7XG4gIGN1c3RvbUpvaW5DbGF1c2U/OiBzdHJpbmc7XG59ICYgKFxuICAgIHwge1xuICAgICAgICBoYXNKb2luQ29sdW1uOiB0cnVlO1xuICAgICAgICB1c2VDb25zdHJhaW50PzogYm9vbGVhbjsgLy8gREVGQVVMVDogdHJ1ZVxuICAgICAgICBvblVwZGF0ZT86IFJlbGF0aW9uT247IC8vIERFRkFVTFQ6IFJFU1RSSUNUXG4gICAgICAgIG9uRGVsZXRlPzogUmVsYXRpb25PbjsgLy8gREVGQVVMVDogUkVTVFJJQ1RcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgaGFzSm9pbkNvbHVtbjogZmFsc2U7XG4gICAgICB9XG4gICk7XG5leHBvcnQgdHlwZSBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AgPSBfUmVsYXRpb25Qcm9wICYge1xuICByZWxhdGlvblR5cGU6IFwiQmVsb25nc1RvT25lXCI7XG4gIGN1c3RvbUpvaW5DbGF1c2U/OiBzdHJpbmc7XG4gIHVzZUNvbnN0cmFpbnQ/OiBib29sZWFuOyAvLyBERUZBVUxUOiB0cnVlXG4gIG9uVXBkYXRlPzogUmVsYXRpb25PbjsgLy8gREVGQVVMVDogUkVTVFJJQ1RcbiAgb25EZWxldGU/OiBSZWxhdGlvbk9uOyAvLyBERUZBVUxUOiBSRVNUUklDVFxufTtcbmV4cG9ydCB0eXBlIEhhc01hbnlSZWxhdGlvblByb3AgPSBfUmVsYXRpb25Qcm9wICYge1xuICByZWxhdGlvblR5cGU6IFwiSGFzTWFueVwiO1xuICBqb2luQ29sdW1uOiBzdHJpbmc7XG4gIGZyb21Db2x1bW4/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgTWFueVRvTWFueVJlbGF0aW9uUHJvcCA9IF9SZWxhdGlvblByb3AgJiB7XG4gIHJlbGF0aW9uVHlwZTogXCJNYW55VG9NYW55XCI7XG4gIGpvaW5UYWJsZTogYCR7c3RyaW5nfV9fJHtzdHJpbmd9YDtcbiAgb25VcGRhdGU6IFJlbGF0aW9uT247XG4gIG9uRGVsZXRlOiBSZWxhdGlvbk9uO1xufTtcbmV4cG9ydCB0eXBlIFJlbGF0aW9uUHJvcCA9XG4gIHwgT25lVG9PbmVSZWxhdGlvblByb3BcbiAgfCBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3BcbiAgfCBIYXNNYW55UmVsYXRpb25Qcm9wXG4gIHwgTWFueVRvTWFueVJlbGF0aW9uUHJvcDtcblxuZXhwb3J0IHR5cGUgRW50aXR5UHJvcCA9XG4gIHwgSW50ZWdlclByb3BcbiAgfCBJbnRlZ2VyQXJyYXlQcm9wXG4gIHwgQmlnSW50ZWdlclByb3BcbiAgfCBCaWdJbnRlZ2VyQXJyYXlQcm9wXG4gIHwgU3RyaW5nUHJvcFxuICB8IFN0cmluZ0FycmF5UHJvcFxuICB8IEVudW1Qcm9wXG4gIHwgRW51bUFycmF5UHJvcFxuICB8IE51bWJlclByb3BcbiAgfCBOdW1iZXJBcnJheVByb3BcbiAgfCBOdW1lcmljUHJvcFxuICB8IE51bWVyaWNBcnJheVByb3BcbiAgfCBCb29sZWFuUHJvcFxuICB8IEJvb2xlYW5BcnJheVByb3BcbiAgfCBEYXRlUHJvcFxuICB8IERhdGVBcnJheVByb3BcbiAgfCBVdWlkUHJvcFxuICB8IFV1aWRBcnJheVByb3BcbiAgfCBKc29uUHJvcFxuICB8IFNlYXJjaFRleHRQcm9wXG4gIHwgVmlydHVhbFByb3BcbiAgfCBWZWN0b3JQcm9wXG4gIHwgVmVjdG9yQXJyYXlQcm9wXG4gIHwgVHNWZWN0b3JQcm9wXG4gIHwgUmVsYXRpb25Qcm9wO1xuXG4vKipcbiAqIFNvbmFtdUZpbGUgVHlwZXNcbiAqXG4gKiDtjIzsnbwg7JeF66Gc65Oc66W8IOychO2VnCBKU09OIO2DgOyeheyeheuLiOuLpC5cbiAqIEVudGl0eeydmCBqc29uIOyGjeyEseyXkOyEnCBpZOuhnCBcIlNvbmFtdUZpbGVcIiDrmJDripQgXCJTb25hbXVGaWxlW11cIuydhCDsp4DsoJXtlZjsl6wg7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIO2UhOuhnOygne2KuOuzhCDrj4TrqZTsnbgg7ZWE65Oc66W8IOy2lOqwgO2VmOugpOuptCBgU29uYW11RmlsZUV4dGVuZGDrpbwg7ZmV7J6l7ZWp64uI64ukLlxuICogKENvbnRleHTsnZggYENvbnRleHRFeHRlbmRg7JmAIOuPmeydvO2VnCBkZWNsYXJhdGlvbiBtZXJnaW5nIO2MqO2EtClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hbXVGaWxlRXh0ZW5kIHt9XG5cbmV4cG9ydCB0eXBlIFNvbmFtdUZpbGVCYXNlID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBtaW1lX3R5cGU6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTb25hbXVGaWxlIGV4dGVuZHMgU29uYW11RmlsZUJhc2UsIFNvbmFtdUZpbGVFeHRlbmQge31cblxuLyoqXG4gKiBVcGxvYWRQYXJhbXNcbiAqXG4gKiBGaWxlSW5wdXTsnZggdXBsb2FkZXIg7Zi47LacIOyLnCDsoITri6ztlaAg7JeF66Gc65OcIO2MjOudvOuvuO2EsCDtg4DsnoXsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrs4Qg7JeF66Gc65OcIO2MjOudvOuvuO2EsOulvCDstpTqsIDtlZjroKTrqbQgZGVjbGFyYXRpb24gbWVyZ2luZ+ycvOuhnCDtmZXsnqXtlanri4jri6QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkUGFyYW1zIHt9XG5cbmV4cG9ydCBjb25zdCBTb25hbXVGaWxlU2NoZW1hOiB6LlpvZFR5cGU8U29uYW11RmlsZT4gPSB6XG4gIC5sb29zZU9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICB1cmw6IHouc3RyaW5nKCksXG4gICAgbWltZV90eXBlOiB6LnN0cmluZygpLFxuICAgIHNpemU6IHoubnVtYmVyKCksXG4gIH0pXG4gIC5kZXNjcmliZShcIlNvbmFtdUZpbGVcIik7XG5cbmV4cG9ydCBjb25zdCBTb25hbXVGaWxlQXJyYXlTY2hlbWEgPSB6LmFycmF5KFNvbmFtdUZpbGVTY2hlbWEpLmRlc2NyaWJlKFwiU29uYW11RmlsZVtdXCIpO1xuXG4vKipcbiAqIFNvbmFtdSDsvZTslrTsl5DshJwg7KCc6rO17ZWY64qUIOuCtOyepSBKU09OIO2DgOyehSBJRCDrqqnroZ1cbiAqIOyDiOuhnOyatCDrgrTsnqUg7YOA7J6FIOy2lOqwgCDsi5wg7J20IOuwsOyXtOyXkCDstpTqsIDtlZjrqbQg7J6Q64+Z7Jy866GcIFVJ7JeQIOuFuOy2nOuQqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IEJVSUxUX0lOX1RZUEVfSURTID0gW1wiU29uYW11RmlsZVwiLCBcIlNvbmFtdUZpbGVbXVwiXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWx0SW5UeXBlSWQgPSAodHlwZW9mIEJVSUxUX0lOX1RZUEVfSURTKVtudW1iZXJdO1xuXG4vKipcbiAqIHBndmVjdG9yIOqxsOumrCDsl7DsgrDsnpAg7YG0656Y7IqkXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiAtIGB2ZWN0b3JfY29zaW5lX29wc2A6IOy9lOyCrOyduCDqsbDrpqwgKENvc2luZSBEaXN0YW5jZSkgLSDqtozsnqVcbiAqICAgLSBTUUwg7Jew7IKw7J6QOiBgPD0+YFxuICogICAtIOuyoe2EsOydmCDrsKntlqXrp4wg67mE6rWQICjtgazquLAg66y07IucKSwgMSAtIGNvc2luZV9zaW1pbGFyaXR5XG4gKiAgIC0g7YWN7Iqk7Yq4IOyehOuyoOuUqSwg7Iuc66eo7YuxIOqygOyDieyXkCDqsIDsnqUg7J2867CY7KCB7Jy866GcIOyCrOyaqVxuICogICAtIOyCrOyaqSDsmIg6IE9wZW5BSSwgVm95YWdlIOuTsSDrjIDrtoDrtoTsnZgg7J6E67Kg65SpIOuqqOuNuOyXkCDqtozsnqVcbiAqXG4gKiAtIGB2ZWN0b3JfaXBfb3BzYDog64K07KCBIChJbm5lciBQcm9kdWN0KVxuICogICAtIFNRTCDsl7DsgrDsnpA6IGA8Iz5gXG4gKiAgIC0g65GQIOuyoe2EsOydmCDrgrTsoIHsnYQg6rOE7IKwIChzdW0oYVtpXSAqIGJbaV0pKVxuICogICAtIOygleq3nO2ZlOuQnCDrsqHthLDsl5DshJwg7L2U7IKs7J24IOycoOyCrOuPhOyZgCDrj5nsnbztlZwg6rKw6rO8XG4gKiAgIC0g6rCS7J20IO2BtOyImOuhnSDsnKDsgqwgKOydjOyImCDsl7DsgrDsnpDsnbTrr4DroZwgT1JERVIgQlnsl5DshJwg7KO87J2YKVxuICogICAtIOyCrOyaqSDsmIg6IOydtOuvuCDsoJXqt5ztmZTrkJwg7J6E67Kg65Sp7JeQ7IScIOqwgOyepSDruaDrpbgg7ISx64qlXG4gKlxuICogLSBgdmVjdG9yX2wyX29wc2A6IOycoO2BtOumrOuTnCDqsbDrpqwgKEwyIERpc3RhbmNlKVxuICogICAtIFNRTCDsl7DsgrDsnpA6IGA8LT5gXG4gKiAgIC0g65GQIOuyoe2EsCDqsITsnZgg7KeB7ISgIOqxsOumrOulvCDqs4TsgrAgKHNxcnQoc3VtKChhW2ldIC0gYltpXSleMikpKVxuICogICAtIOuyoe2EsOydmCDtgazquLAobWFnbml0dWRlKeqwgCDspJHsmpTtlaAg65WMIOyCrOyaqVxuICogICAtIOyCrOyaqSDsmIg6IOydtOuvuOyngCDsnKDsgqzrj4QsIOygiOuMgOyggSDqsbDrpqwg7Lih7KCV7J20IO2VhOyalO2VnCDqsr3smrBcbiAqL1xuZXhwb3J0IHR5cGUgVmVjdG9yT3BzID0gXCJ2ZWN0b3JfY29zaW5lX29wc1wiIHwgXCJ2ZWN0b3JfaXBfb3BzXCIgfCBcInZlY3Rvcl9sMl9vcHNcIjtcblxuZXhwb3J0IGNvbnN0IEtub3duT3BjbGFzc1ZhbHVlcyA9IFtcbiAgXCJnaW5fdHJnbV9vcHNcIixcbiAgXCJnaXN0X3RyZ21fb3BzXCIsXG4gIFwiZ2luX2JpZ21fb3BzXCIsXG4gIFwidmVjdG9yX2Nvc2luZV9vcHNcIixcbiAgXCJ2ZWN0b3JfaXBfb3BzXCIsXG4gIFwidmVjdG9yX2wyX29wc1wiLFxuICBcInBncm9vbmdhX3ZhcmNoYXJfZnVsbF90ZXh0X3NlYXJjaF9vcHNfdjJcIixcbiAgXCJwZ3Jvb25nYV9qc29uYl9mdWxsX3RleHRfc2VhcmNoX29wc192MlwiLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEtub3duT3BjbGFzcyA9ICh0eXBlb2YgS25vd25PcGNsYXNzVmFsdWVzKVtudW1iZXJdO1xuXG50eXBlIEVudGl0eUluZGV4Q29sdW1uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bGxzRmlyc3Q/OiBib29sZWFuO1xuICBzb3J0T3JkZXI/OiBcIkFTQ1wiIHwgXCJERVNDXCI7XG4gIC8qKiBwZ3ZlY3RvciDsnbjrjbHsiqTsl5DshJwg7IKs7Jqp7ZWgIOqxsOumrCDsl7DsgrDsnpAgKHZlY3RvciDsu6zrn7zsl5Drp4wg7KCB7JqpKSAqL1xuICB2ZWN0b3JPcHM/OiBWZWN0b3JPcHM7XG4gIC8qKiBnZW5lcmljIOyduOuNseyKpCBvcGNsYXNzICh2ZWN0b3JPcHPripQg7ZWY7JyE7Zi47ZmYIOuqqeyggeycvOuhnCDsnKDsp4ApICovXG4gIG9wY2xhc3M/OiBLbm93bk9wY2xhc3MgfCBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRW50aXR5SW5kZXggPSB7XG4gIHR5cGU6IFwiaW5kZXhcIiB8IFwidW5pcXVlXCIgfCBcImhuc3dcIiB8IFwiaXZmZmxhdFwiO1xuICBjb2x1bW5zOiBFbnRpdHlJbmRleENvbHVtbltdO1xuICBuYW1lOiBzdHJpbmc7XG4gIHVzaW5nPzogXCJidHJlZVwiIHwgXCJoYXNoXCIgfCBcImdpblwiIHwgXCJnaXN0XCIgfCBcInBncm9vbmdhXCI7XG4gIG51bGxzTm90RGlzdGluY3Q/OiBib29sZWFuOyAvLyB1bmlxdWUgaW5kZXggb25seVxuICAvKiogUG9zdGdyZVNRTCBwYXJ0aWFsIGluZGV4IHByZWRpY2F0ZS4gUmF3IFNRTCBXSEVSRSBleHByZXNzaW9uIHdpdGhvdXQgdGhlIFdIRVJFIGtleXdvcmQuICovXG4gIHdoZXJlPzogc3RyaW5nO1xuICAvKipcbiAgICogSE5TVyAoSGllcmFyY2hpY2FsIE5hdmlnYWJsZSBTbWFsbCBXb3JsZCkg7J24642x7IqkOiDqsIEg64W465Oc7J2YIOy1nOuMgCDsl7DqsrAg7IiYXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDqt7jrnpjtlITsl5DshJwg6rCBIOuFuOuTnOqwgCDqsIDsp4gg7IiYIOyeiOuKlCDstZzrjIAg7Jew6rKwIOyImOyeheuLiOuLpC5cbiAgICogSE5TV+uKlCDruaDrpbgg6rKA7IOJIOyGjeuPhOyZgCDrhpLsnYAg7KCV7ZmV64+E66W8IOygnOqzte2VmOuvgOuhnCDqtozsnqXrkKnri4jri6QuXG4gICAqIC0g6riw67O46rCSOiAxNlxuICAgKiAtIOuylOychDogMiB+IDEwMFxuICAgKiAtIOuGkuydhOyImOuhnTog7KCV7ZmV64+E4oaRLCDruYzrk5wg7Iuc6rCE4oaRLCDrqZTrqqjrpqzihpFcbiAgICogLSDqtozsnqU6IOu5oOuluCDruYzrk5woOCksIOq3oO2YlSgxNiksIOuGkuydgCDsoJXtmZXrj4QoMzIpLCDstZzqs6Ag7KCV7ZmV64+EKDY0KVxuICAgKi9cbiAgbT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpIOyduOuNseyKpDog6rWs7ISxIOyLnCDtg5Dsg4kg67KU7JyEXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDsnbjrjbHsiqQg6rWs7ISxIOyLnCDqsIEg64W465Oc7JeQ7IScIO2DkOyDie2VoCDrspTsnITsnoXri4jri6QuXG4gICAqIC0g6riw67O46rCSOiA2NFxuICAgKiAtIOuylOychDogNCB+IDEwMDBcbiAgICogLSDrhpLsnYTsiJjroZ06IOygle2ZleuPhOKGkSwg67mM65OcIOyLnOqwhOKGkVxuICAgKiAtIOq2jOyepTog67mg66W4IOu5jOuTnCgzMiksIOq3oO2YlSg2NCksIOuGkuydgCDsoJXtmZXrj4QoMTI4KSwg7LWc6rOgIOygle2ZleuPhCgyNTYpXG4gICAqL1xuICBlZkNvbnN0cnVjdGlvbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIElWRkZsYXQgKEludmVydGVkIEZpbGUgd2l0aCBGbGF0IENvbXByZXNzaW9uKSDsnbjrjbHsiqQ6IO2BtOufrOyKpO2EsOungSDrpqzsiqTtirgg7IiYXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiDrsqHthLDrpbwg7YG065+s7Iqk7YSw66eB7ZWgIOuyhO2CtyDsiJjrpbwg7KeA7KCV7ZWp64uI64ukLlxuICAgKiBJVkZGbGF07J2AIOu5oOuluCDruYzrk5zsmYAg64Ku7J2AIOuplOuqqOumrCDsgqzsmqnsnbQg7ZWE7JqU7ZWgIOuVjCDsgqzsmqntlanri4jri6QuXG4gICAqIC0g6raM7J6l6rCSOiBzcXJ0KHJvd19jb3VudCkgfiByb3dfY291bnQgLyAxMDAwXG4gICAqIC0g7JiI7IucOiAxMCwwMDDtlokg4oaSIDEwMCwgMTAwLDAwMO2WiSDihpIgMzAwLCAxLDAwMCwwMDDtlokg4oaSIDEwMDBcbiAgICogLSDrp47snYTsiJjroZ0g7KCV7ZmV64+E4oaRLCDqsoDsg4kg7IaN64+E4oaTXG4gICAqL1xuICBsaXN0cz86IG51bWJlcjtcbn07XG5cbi8vIFN1YnNldEZpZWxkIO2DgOyehTogc3RyaW5nIOuYkOuKlCBpbnRlcm5hbCDsmLXshZjsnbQg7J6I64qUIOqwneyytFxuZXhwb3J0IHR5cGUgU3Vic2V0RmllbGQgPSBzdHJpbmcgfCB7IGZpZWxkOiBzdHJpbmc7IGludGVybmFsPzogYm9vbGVhbiB9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU3Vic2V0RmllbGQoZjogU3Vic2V0RmllbGQpOiBzdHJpbmcge1xuICByZXR1cm4gaXNTdHJpbmdWYWx1ZShmKSA/IGYgOiBmLmZpZWxkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJuYWxTdWJzZXRGaWVsZChmOiBTdWJzZXRGaWVsZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gIWlzU3RyaW5nVmFsdWUoZikgJiYgZi5pbnRlcm5hbCA9PT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBTdWJzZXREZWY6IFN1YnNldCDsoJXsnZhcbiAqXG4gKiDtlZjsnIQg7Zi47ZmY7ISx7J2EIOychO2VtCBTdWJzZXRGaWVsZFtdIOuwsOyXtCDtmJXtg5zrj4Qg7KeA7JuQ7ZWp64uI64ukLlxuICovXG5leHBvcnQgdHlwZSBTdWJzZXREZWYgPVxuICB8IFN1YnNldEZpZWxkW10gLy8g6riw7KG0IOuwsOyXtCDtmJXtg5xcbiAgfCB7XG4gICAgICAvLyDsg4jroZzsmrQg6rCd7LK0IO2Yle2DnFxuICAgICAgZmllbGRzOiBTdWJzZXRGaWVsZFtdO1xuICAgICAgY29uZT86IENvbmU7XG4gICAgfTtcblxuLyoqXG4gKiBFbnVtRGVmOiBFbnVtIOygleydmFxuICpcbiAqIO2VmOychCDtmLjtmZjshLHsnYQg7JyE7ZW0IFJlY29yZDxzdHJpbmcsIHN0cmluZz4g7ZiV7YOc64+EIOyngOybkO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IHR5cGUgRW51bURlZiA9XG4gIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPiAvLyDquLDsobQgUmVjb3JkIO2Yle2DnFxuICB8IHtcbiAgICAgIC8vIOyDiOuhnOyatCDqsJ3ssrQg7ZiV7YOcXG4gICAgICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICBjb25lPzogQ29uZTtcbiAgICB9O1xuXG4vKipcbiAqIFN1YnNldERlZuqwgCDsg4jroZzsmrQg6rCd7LK0IO2Yle2DnOyduOyngCDtmZXsnbhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3Vic2V0RGVmV2l0aENvbmUoZGVmOiBTdWJzZXREZWYpOiBkZWYgaXMgeyBmaWVsZHM6IFN1YnNldEZpZWxkW107IGNvbmU/OiBDb25lIH0ge1xuICByZXR1cm4gIUFycmF5LmlzQXJyYXkoZGVmKSAmJiBcImZpZWxkc1wiIGluIGRlZjtcbn1cblxuLyoqXG4gKiBFbnVtRGVm6rCAIOyDiOuhnOyatCDqsJ3ssrQg7ZiV7YOc7J247KeAIO2ZleyduFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbnVtRGVmV2l0aENvbmUoXG4gIGRlZjogRW51bURlZixcbik6IGRlZiBpcyB7IHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgY29uZT86IENvbmUgfSB7XG4gIHJldHVybiAoXG4gICAgXCJ2YWx1ZXNcIiBpbiBkZWYgJiYgIShcImNvbmVcIiBpbiBkZWYgJiYgZGVmLmNvbmUgPT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhkZWYpLmxlbmd0aCA+IDEpXG4gICk7XG59XG5cbi8qKlxuICogU3Vic2V0RGVm7JeQ7IScIGZpZWxkcyDstpTstpxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN1YnNldEZpZWxkcyhkZWY6IFN1YnNldERlZik6IFN1YnNldEZpZWxkW10ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShkZWYpID8gZGVmIDogZGVmLmZpZWxkcztcbn1cblxuLyoqXG4gKiBFbnVtRGVm7JeQ7IScIHZhbHVlcyDstpTstpxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1EZWZWYWx1ZXMoZGVmOiBFbnVtRGVmKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBpc0VudW1EZWZXaXRoQ29uZShkZWYpID8gZGVmLnZhbHVlcyA6IGRlZjtcbn1cblxuZXhwb3J0IHR5cGUgRW50aXR5SnNvbiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBjb25lPzogQ29uZTsgLy8gY29uZSDrqZTtg4DrjbDsnbTthLBcbiAgcHJvcHM6IEVudGl0eVByb3BbXTtcbiAgaW5kZXhlczogRW50aXR5SW5kZXhbXTtcbiAgc3Vic2V0czoge1xuICAgIFtzdWJzZXQ6IHN0cmluZ106IFN1YnNldERlZjtcbiAgfTtcbiAgZW51bXM6IHtcbiAgICBbZW51bUlkOiBzdHJpbmddOiBFbnVtRGVmO1xuICB9O1xufTtcbmV4cG9ydCB0eXBlIEVudGl0eVN1YnNldFJvdyA9IHtcbiAgZmllbGQ6IHN0cmluZztcbiAgaGFzOiB7XG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbiAgfTtcbiAgaXNJbnRlcm5hbDoge1xuICAgIFtrZXk6IHN0cmluZ106IGJvb2xlYW47XG4gIH07XG4gIGNoaWxkcmVuOiBFbnRpdHlTdWJzZXRSb3dbXTtcbiAgcHJlZml4ZXM6IHN0cmluZ1tdO1xuICByZWxhdGlvbkVudGl0eT86IHN0cmluZztcbiAgaXNPcGVuPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBGbGF0dGVuU3Vic2V0Um93ID0gT21pdDxFbnRpdHlTdWJzZXRSb3csIFwiY2hpbGRyZW5cIj47XG5cbi8qXG4gIFByb3BOb2RlXG4qL1xuXG4vKipcbiAqIOyXlO2LsO2LsOydmCDtlYTrk5wg6rWs7KGw66W8IO2KuOumrCDtmJXtg5zroZwg7ZGc7ZiE7ZWY64qUIOykkeqwhCDrhbjrk5zsnoXri4jri6QuXG4gKlxuICogKirrqqnsoIEqKjogRW50aXR57J2YIHN1YnNldCDtlYTrk5wg7ZGc7ZiE7IudKOyYiDogXCJpZFwiLCBcInVzZXIubmFtZVwiLCBcInRhZ3NbXVwiKeydhFxuICog7J6s6reA7KCB7J24IO2KuOumrCDqtazsobDroZwg7YyM7Iux7ZWY7JesIFpvZCDsiqTtgqTrp4gg7IOd7ISx7J2YIOykkeqwhCDri6jqs4TroZwg7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqICoq67OA7ZmYIO2dkOumhCoqOlxuICogRW50aXR5IHN1YnNldCDihpIgRW50aXR5UHJvcE5vZGUgKO2KuOumrCDqtazsobApIOKGkiBab2Qg7Iqk7YKk66eIIOKGkiBSZW5kZXJpbmdOb2RlIChVSeyaqSlcbiAqXG4gKiAqKm5vZGVUeXBlKio6XG4gKiAtIFwicGxhaW5cIjog64uo7J28IO2VhOuTnCAo7JiIOiBcImlkXCIsIFwibmFtZVwiKVxuICogLSBcIm9iamVjdFwiOiDspJHssqkg6rCd7LK0ICjsmIg6IFwidXNlci5uYW1lXCIg4oaSIHVzZXIg6rCd7LK0KVxuICogLSBcImFycmF5XCI6IOuwsOyXtCAo7JiIOiBcInRhZ3NbXVwiIOKGkiB0YWdzIOuwsOyXtClcbiAqXG4gKiAqKuyCrOyaqSDsnITsuZgqKjogZW50aXR5LWNvbnZlcnRlci50c+ydmCBwcm9wTm9kZVRvWm9kVHlwZSgpXG4gKi9cbmV4cG9ydCB0eXBlIEVudGl0eVByb3BOb2RlID1cbiAgfCB7XG4gICAgICBub2RlVHlwZTogXCJwbGFpblwiO1xuICAgICAgcHJvcDogRW50aXR5UHJvcDtcbiAgICB9XG4gIHwge1xuICAgICAgbm9kZVR5cGU6IFwib2JqZWN0XCIgfCBcImFycmF5XCI7XG4gICAgICBwcm9wPzogRW50aXR5UHJvcDtcbiAgICAgIGNoaWxkcmVuOiBFbnRpdHlQcm9wTm9kZVtdO1xuICAgIH07XG5cbi8qXG4gIFByb3AgVHlwZSBHdWFyZHNcbiovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyU2luZ2xlUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgSW50ZWdlclByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIEludGVnZXJQcm9wKT8udHlwZSA9PT0gXCJpbnRlZ2VyXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ2VyQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBJbnRlZ2VyQXJyYXlQcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBJbnRlZ2VyQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJpbnRlZ2VyW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXJQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiAoSW50ZWdlclByb3AgfCBJbnRlZ2VyQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc0ludGVnZXJTaW5nbGVQcm9wKHApIHx8IGlzSW50ZWdlckFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JpZ0ludGVnZXJTaW5nbGVQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBCaWdJbnRlZ2VyUHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgQmlnSW50ZWdlclByb3ApPy50eXBlID09PSBcImJpZ0ludGVnZXJcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JpZ0ludGVnZXJBcnJheVByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIEJpZ0ludGVnZXJBcnJheVByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIEJpZ0ludGVnZXJBcnJheVByb3ApPy50eXBlID09PSBcImJpZ0ludGVnZXJbXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQmlnSW50ZWdlclByb3A8VmFsdWU+KFxuICBwOiBWYWx1ZSxcbik6IHAgaXMgVmFsdWUgJiAoQmlnSW50ZWdlclByb3AgfCBCaWdJbnRlZ2VyQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHApIHx8IGlzQmlnSW50ZWdlckFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ1NpbmdsZVByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIFN0cmluZ1Byb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIFN0cmluZ1Byb3ApPy50eXBlID09PSBcInN0cmluZ1wiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBTdHJpbmdBcnJheVByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIFN0cmluZ0FycmF5UHJvcCk/LnR5cGUgPT09IFwic3RyaW5nW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ1Byb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIChTdHJpbmdQcm9wIHwgU3RyaW5nQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc1N0cmluZ1NpbmdsZVByb3AocCkgfHwgaXNTdHJpbmdBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbnVtU2luZ2xlUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgRW51bVByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIEVudW1Qcm9wKT8udHlwZSA9PT0gXCJlbnVtXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbnVtQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBFbnVtQXJyYXlQcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBFbnVtQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJlbnVtW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1Qcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiAoRW51bVByb3AgfCBFbnVtQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc0VudW1TaW5nbGVQcm9wKHApIHx8IGlzRW51bUFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlclNpbmdsZVByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIE51bWJlclByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIE51bWJlclByb3ApPy50eXBlID09PSBcIm51bWJlclwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBOdW1iZXJBcnJheVByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIE51bWJlckFycmF5UHJvcCk/LnR5cGUgPT09IFwibnVtYmVyW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlclByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIChOdW1iZXJQcm9wIHwgTnVtYmVyQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc051bWJlclNpbmdsZVByb3AocCkgfHwgaXNOdW1iZXJBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljU2luZ2xlUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgTnVtZXJpY1Byb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIE51bWVyaWNQcm9wKT8udHlwZSA9PT0gXCJudW1lcmljXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1lcmljQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBOdW1lcmljQXJyYXlQcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBOdW1lcmljQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJudW1lcmljW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiAoTnVtZXJpY1Byb3AgfCBOdW1lcmljQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc051bWVyaWNTaW5nbGVQcm9wKHApIHx8IGlzTnVtZXJpY0FycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW5TaW5nbGVQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBCb29sZWFuUHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgQm9vbGVhblByb3ApPy50eXBlID09PSBcImJvb2xlYW5cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW5BcnJheVByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIEJvb2xlYW5BcnJheVByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIEJvb2xlYW5BcnJheVByb3ApPy50eXBlID09PSBcImJvb2xlYW5bXVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhblByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIChCb29sZWFuUHJvcCB8IEJvb2xlYW5BcnJheVByb3ApIHtcbiAgcmV0dXJuIGlzQm9vbGVhblNpbmdsZVByb3AocCkgfHwgaXNCb29sZWFuQXJyYXlQcm9wKHApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZVNpbmdsZVByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIERhdGVQcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBEYXRlUHJvcCk/LnR5cGUgPT09IFwiZGF0ZVwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZUFycmF5UHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgRGF0ZUFycmF5UHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgRGF0ZUFycmF5UHJvcCk/LnR5cGUgPT09IFwiZGF0ZVtdXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgKERhdGVQcm9wIHwgRGF0ZUFycmF5UHJvcCkge1xuICByZXR1cm4gaXNEYXRlU2luZ2xlUHJvcChwKSB8fCBpc0RhdGVBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkU2luZ2xlUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgVXVpZFByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIFV1aWRQcm9wKT8udHlwZSA9PT0gXCJ1dWlkXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBVdWlkQXJyYXlQcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBVdWlkQXJyYXlQcm9wKT8udHlwZSA9PT0gXCJ1dWlkW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1V1aWRQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiAoVXVpZFByb3AgfCBVdWlkQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc1V1aWRTaW5nbGVQcm9wKHApIHx8IGlzVXVpZEFycmF5UHJvcChwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0pzb25Qcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBKc29uUHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgSnNvblByb3ApPy50eXBlID09PSBcImpzb25cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1NlYXJjaFRleHRQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBTZWFyY2hUZXh0UHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgU2VhcmNoVGV4dFByb3ApPy50eXBlID09PSBcInNlYXJjaFRleHRcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpcnR1YWxQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBWaXJ0dWFsUHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgVmlydHVhbFByb3ApPy50eXBlID09PSBcInZpcnR1YWxcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpcnR1YWxDb2RlUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgVmlydHVhbFByb3Age1xuICBpZiAoIWlzVmlydHVhbFByb3AocCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHAudmlydHVhbFR5cGUgIT09IFwicXVlcnlcIjsgLy8gdW5kZWZpbmVk64+EIFwiY29kZVwi66GcIOy3qOq4iVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbFF1ZXJ5UHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgVmlydHVhbFByb3Age1xuICBpZiAoIWlzVmlydHVhbFByb3AocCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHAudmlydHVhbFR5cGUgPT09IFwicXVlcnlcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3RvclNpbmdsZVByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIFZlY3RvclByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIFZlY3RvclByb3ApPy50eXBlID09PSBcInZlY3RvclwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmVjdG9yQXJyYXlQcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBWZWN0b3JBcnJheVByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIFZlY3RvckFycmF5UHJvcCk/LnR5cGUgPT09IFwidmVjdG9yW11cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3RvclByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIChWZWN0b3JQcm9wIHwgVmVjdG9yQXJyYXlQcm9wKSB7XG4gIHJldHVybiBpc1ZlY3RvclNpbmdsZVByb3AocCkgfHwgaXNWZWN0b3JBcnJheVByb3AocCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUc1ZlY3RvclByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIFRzVmVjdG9yUHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgVHNWZWN0b3JQcm9wKT8udHlwZSA9PT0gXCJ0c3ZlY3RvclwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVsYXRpb25Qcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBSZWxhdGlvblByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIFJlbGF0aW9uUHJvcCk/LnR5cGUgPT09IFwicmVsYXRpb25cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc09uZVRvT25lUmVsYXRpb25Qcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBPbmVUb09uZVJlbGF0aW9uUHJvcCB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gKHAgYXMgT25lVG9PbmVSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiT25lVG9PbmVcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcDxWYWx1ZT4ocDogVmFsdWUpOiBwIGlzIFZhbHVlICYgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBCZWxvbmdzVG9PbmVSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiQmVsb25nc1RvT25lXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNIYXNNYW55UmVsYXRpb25Qcm9wPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiBIYXNNYW55UmVsYXRpb25Qcm9wIHtcbiAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gIHJldHVybiAocCBhcyBIYXNNYW55UmVsYXRpb25Qcm9wKT8ucmVsYXRpb25UeXBlID09PSBcIkhhc01hbnlcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc01hbnlUb01hbnlSZWxhdGlvblByb3A8VmFsdWU+KHA6IFZhbHVlKTogcCBpcyBWYWx1ZSAmIE1hbnlUb01hbnlSZWxhdGlvblByb3Age1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuIChwIGFzIE1hbnlUb01hbnlSZWxhdGlvblByb3ApPy5yZWxhdGlvblR5cGUgPT09IFwiTWFueVRvTWFueVwiO1xufVxuXG50eXBlIEpvaW5DbGF1c2UgPVxuICB8IHtcbiAgICAgIGZyb206IHN0cmluZztcbiAgICAgIHRvOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIGN1c3RvbTogc3RyaW5nO1xuICAgIH07XG5leHBvcnQgZnVuY3Rpb24gaXNDdXN0b21Kb2luQ2xhdXNlPFZhbHVlPihwOiBWYWx1ZSk6IHAgaXMgVmFsdWUgJiB7IGN1c3RvbTogc3RyaW5nIH0ge1xuICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgcmV0dXJuICEhKHAgYXMgeyBjdXN0b206IHN0cmluZyB9KT8uY3VzdG9tO1xufVxuXG50eXBlIFN1YnNldExvYWRlciA9IHtcbiAgYXM6IHN0cmluZztcbiAgdGFibGU6IHN0cmluZztcbiAgbWFueUpvaW46IHtcbiAgICBmcm9tVGFibGU6IHN0cmluZztcbiAgICBmcm9tQ29sOiBzdHJpbmc7XG4gICAgaWRGaWVsZDogc3RyaW5nO1xuICAgIHRvVGFibGU6IHN0cmluZztcbiAgICB0b0NvbDogc3RyaW5nO1xuICAgIHRocm91Z2g/OiB7XG4gICAgICB0YWJsZTogc3RyaW5nO1xuICAgICAgZnJvbUNvbDogc3RyaW5nO1xuICAgICAgdG9Db2w6IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBvbmVKb2luczogKHtcbiAgICBhczogc3RyaW5nO1xuICAgIGpvaW46IFwiaW5uZXJcIiB8IFwib3V0ZXJcIjtcbiAgICB0YWJsZTogc3RyaW5nO1xuICB9ICYgSm9pbkNsYXVzZSlbXTtcbiAgc2VsZWN0OiBzdHJpbmdbXTtcbiAgbG9hZGVycz86IFN1YnNldExvYWRlcltdO1xufTtcblxuZXhwb3J0IHR5cGUgU3Vic2V0UXVlcnkgPSB7XG4gIHNlbGVjdDogc3RyaW5nW107XG4gIHZpcnR1YWw6IHN0cmluZ1tdO1xuICBqb2luczogKHtcbiAgICBhczogc3RyaW5nO1xuICAgIGpvaW46IFwiaW5uZXJcIiB8IFwib3V0ZXJcIjtcbiAgICB0YWJsZTogc3RyaW5nO1xuICB9ICYgSm9pbkNsYXVzZSlbXTtcbiAgbG9hZGVyczogU3Vic2V0TG9hZGVyW107XG59O1xuXG4vKiBCYXNlTW9kZWwgKi9cbmV4cG9ydCBjb25zdCBTb25hbXVRdWVyeU1vZGUgPSB6LmVudW0oW1wiYm90aFwiLCBcImxpc3RcIiwgXCJjb3VudFwiXSk7XG5leHBvcnQgdHlwZSBTb25hbXVRdWVyeU1vZGUgPSB6LmluZmVyPHR5cGVvZiBTb25hbXVRdWVyeU1vZGU+O1xuXG4vKiBTZW1hbnRpYyBRdWVyeSAqL1xuZXhwb3J0IGNvbnN0IFNvbmFtdVNlbWFudGljUGFyYW1zID0gei5vYmplY3Qoe1xuICBzZW1hbnRpY1F1ZXJ5OiB6Lm9iamVjdCh7XG4gICAgZW1iZWRkaW5nOiB6LmFycmF5KHoubnVtYmVyKCkpLm1pbigxMDI0KS5tYXgoMTAyNCksXG4gICAgdGhyZXNob2xkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgbWV0aG9kOiB6LmVudW0oW1wiY29zaW5lXCIsIFwibDJcIiwgXCJpbm5lcl9wcm9kdWN0XCJdKS5vcHRpb25hbCgpLFxuICB9KSxcbn0pO1xuZXhwb3J0IHR5cGUgU29uYW11U2VtYW50aWNQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiBTb25hbXVTZW1hbnRpY1BhcmFtcz47XG5cbi8qIEtuZXggTWlncmF0aW9uICovXG5leHBvcnQgdHlwZSBLbmV4RXJyb3IgPSB7XG4gIGNvZGU6IHN0cmluZztcbiAgZXJybm86IG51bWJlcjtcbiAgc3FsOiBzdHJpbmc7XG4gIHNxbE1lc3NhZ2U6IHN0cmluZztcbiAgc3FsU3RhdGU6IHN0cmluZztcbn07XG5leHBvcnQgZnVuY3Rpb24gaXNLbmV4RXJyb3I8VmFsdWU+KGU6IFZhbHVlKTogZSBpcyBWYWx1ZSAmIEtuZXhFcnJvciB7XG4gIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICByZXR1cm4gISEoZSBhcyBLbmV4RXJyb3IpPy5jb2RlICYmICEhKGUgYXMgS25leEVycm9yKT8uc3FsTWVzc2FnZSAmJiAhIShlIGFzIEtuZXhFcnJvcik/LnNxbFN0YXRlO1xufVxuXG5leHBvcnQgdHlwZSBLbmV4Q29sdW1uVHlwZSA9XG4gIHwgXCJzdHJpbmdcIlxuICB8IFwidGV4dFwiXG4gIHwgXCJzbWFsbHRleHRcIlxuICB8IFwibWVkaXVtdGV4dFwiXG4gIHwgXCJsb25ndGV4dFwiXG4gIHwgXCJpbnRlZ2VyXCJcbiAgfCBcImJpZ0ludGVnZXJcIlxuICB8IFwiZGVjaW1hbFwiXG4gIHwgXCJ0aW1lc3RhbXBcIlxuICB8IFwiYm9vbGVhblwiXG4gIHwgXCJmb3JlaWduXCJcbiAgfCBcInV1aWRcIlxuICB8IFwianNvblwiXG4gIHwgXCJmbG9hdFwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcInRpbWVcIlxuICB8IFwiZGF0ZXRpbWVcIjtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkNvbHVtblR5cGUgPVxuICB8IFwic3RyaW5nXCJcbiAgfCBcInN0cmluZ1tdXCJcbiAgfCBcImludGVnZXJcIlxuICB8IFwiaW50ZWdlcltdXCJcbiAgfCBcImJpZ0ludGVnZXJcIlxuICB8IFwiYmlnSW50ZWdlcltdXCJcbiAgfCBcIm51bWJlck9yTnVtZXJpY1wiXG4gIHwgXCJudW1iZXJPck51bWVyaWNbXVwiXG4gIHwgXCJib29sZWFuXCJcbiAgfCBcImJvb2xlYW5bXVwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGVbXVwiXG4gIHwgXCJ1dWlkXCJcbiAgfCBcInV1aWRbXVwiXG4gIHwgXCJqc29uXCJcbiAgfCBcInZlY3RvclwiXG4gIHwgXCJ2ZWN0b3JbXVwiXG4gIHwgXCJ0c3ZlY3RvclwiO1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uQ29sdW1uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IE1pZ3JhdGlvbkNvbHVtblR5cGU7XG4gIG51bGxhYmxlOiBib29sZWFuO1xuICBudW1iZXJUeXBlPzogXCJyZWFsXCIgfCBcImRvdWJsZSBwcmVjaXNpb25cIiB8IFwibnVtZXJpY1wiO1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIGRlZmF1bHRUbz86IHN0cmluZztcbiAgcHJlY2lzaW9uPzogbnVtYmVyO1xuICBzY2FsZT86IG51bWJlcjtcbiAgZGltZW5zaW9ucz86IG51bWJlcjtcbiAgZ2VuZXJhdGVkPzogR2VuZXJhdGVkQ29sdW1uO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkluZGV4ID0ge1xuICB0eXBlOiBcInVuaXF1ZVwiIHwgXCJpbmRleFwiIHwgXCJobnN3XCIgfCBcIml2ZmZsYXRcIjtcbiAgY29sdW1uczogRW50aXR5SW5kZXhDb2x1bW5bXTtcbiAgbmFtZTogc3RyaW5nO1xuICB1c2luZz86IFwiYnRyZWVcIiB8IFwiaGFzaFwiIHwgXCJnaW5cIiB8IFwiZ2lzdFwiIHwgXCJwZ3Jvb25nYVwiO1xuICBudWxsc05vdERpc3RpbmN0PzogYm9vbGVhbjtcbiAgLyoqIFBvc3RncmVTUUwgcGFydGlhbCBpbmRleCBwcmVkaWNhdGUuIFJhdyBTUUwgV0hFUkUgZXhwcmVzc2lvbiB3aXRob3V0IHRoZSBXSEVSRSBrZXl3b3JkLiAqL1xuICB3aGVyZT86IHN0cmluZztcbiAgLyoqIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpOiDqsIEg64W465Oc7J2YIOy1nOuMgCDsl7DqsrAg7IiYICovXG4gIG0/OiBudW1iZXI7XG4gIC8qKiBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKTog6rWs7ISxIOyLnCDtg5Dsg4kg67KU7JyEICovXG4gIGVmQ29uc3RydWN0aW9uPzogbnVtYmVyO1xuICAvKiogSVZGRmxhdCAoSW52ZXJ0ZWQgRmlsZSB3aXRoIEZsYXQgQ29tcHJlc3Npb24pOiDtgbTrn6zsiqTthLDrp4Eg66as7Iqk7Yq4IOyImCAqL1xuICBsaXN0cz86IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBNaWdyYXRpb25Gb3JlaWduID0ge1xuICBjb2x1bW5zOiBzdHJpbmdbXTtcbiAgdG86IHN0cmluZztcbiAgb25VcGRhdGU6IFJlbGF0aW9uT247XG4gIG9uRGVsZXRlOiBSZWxhdGlvbk9uO1xufTtcbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkpvaW5UYWJsZSA9IHtcbiAgdGFibGU6IHN0cmluZztcbiAgaW5kZXhlczogTWlncmF0aW9uSW5kZXhbXTtcbiAgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW107XG4gIGZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW107XG59O1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uU2V0ID0ge1xuICB0YWJsZTogc3RyaW5nO1xuICBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXTtcbiAgaW5kZXhlczogTWlncmF0aW9uSW5kZXhbXTtcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXTtcbn07XG5leHBvcnQgdHlwZSBNaWdyYXRpb25TZXRBbmRKb2luVGFibGUgPSBNaWdyYXRpb25TZXQgJiB7XG4gIGpvaW5UYWJsZXM6IE1pZ3JhdGlvbkpvaW5UYWJsZVtdO1xufTtcbmV4cG9ydCB0eXBlIEdlbk1pZ3JhdGlvbkNvZGUgPSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIHR5cGU6IFwibm9ybWFsXCIgfCBcImZvcmVpZ25cIjtcbiAgZm9ybWF0dGVkOiBzdHJpbmcgfCBudWxsO1xufTtcblxuLyogQXBpICovXG5leHBvcnQgdHlwZSBBcGlQYXJhbSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBBcGlQYXJhbVR5cGU7XG4gIG9wdGlvbmFsOiBib29sZWFuO1xuICBkZWZhdWx0RGVmPzogc3RyaW5nO1xufTtcbmV4cG9ydCBuYW1lc3BhY2UgQXBpUGFyYW1UeXBlIHtcbiAgZXhwb3J0IHR5cGUgRnVuY3Rpb24gPSB7XG4gICAgdDogXCJmdW5jdGlvblwiO1xuICAgIHBhcmFtZXRlcnM6IEFwaVBhcmFtW107XG4gICAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlO1xuICB9O1xuICBleHBvcnQgdHlwZSBPYmplY3QgPSB7XG4gICAgdDogXCJvYmplY3RcIjtcbiAgICBwcm9wczogQXBpUGFyYW1bXTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgVW5pb24gPSB7XG4gICAgdDogXCJ1bmlvblwiO1xuICAgIHR5cGVzOiBBcGlQYXJhbVR5cGVbXTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgSW50ZXJzZWN0aW9uID0ge1xuICAgIHQ6IFwiaW50ZXJzZWN0aW9uXCI7XG4gICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICB9O1xuICBleHBvcnQgdHlwZSBTdHJpbmdMaXRlcmFsID0ge1xuICAgIHQ6IFwic3RyaW5nLWxpdGVyYWxcIjtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBOdW1lcmljTGl0ZXJhbCA9IHtcbiAgICB0OiBcIm51bWVyaWMtbGl0ZXJhbFwiO1xuICAgIHZhbHVlOiBudW1iZXI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEFycmF5ID0ge1xuICAgIHQ6IFwiYXJyYXlcIjtcbiAgICBlbGVtZW50c1R5cGU6IEFwaVBhcmFtVHlwZTtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgUmVmID0ge1xuICAgIHQ6IFwicmVmXCI7XG4gICAgaWQ6IHN0cmluZztcbiAgICBhcmdzPzogQXBpUGFyYW1UeXBlW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIEluZGV4ZWRBY2Nlc3MgPSB7XG4gICAgdDogXCJpbmRleGVkLWFjY2Vzc1wiO1xuICAgIG9iamVjdDogQXBpUGFyYW1UeXBlO1xuICAgIGluZGV4OiBBcGlQYXJhbVR5cGU7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFR1cGxlVHlwZSA9IHtcbiAgICB0OiBcInR1cGxlLXR5cGVcIjtcbiAgICBlbGVtZW50czogQXBpUGFyYW1UeXBlW107XG4gIH07XG4gIGV4cG9ydCB0eXBlIFBpY2sgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJQaWNrXCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIE9taXQgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJPbWl0XCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFBhcnRpYWwgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJQYXJ0aWFsXCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFByb21pc2UgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJQcm9taXNlXCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIENvbnRleHQgPSBSZWYgJiB7XG4gICAgdDogXCJyZWZcIjtcbiAgICBpZDogXCJDb250ZXh0XCI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFR5cGVQYXJhbSA9IHtcbiAgICB0OiBcInR5cGUtcGFyYW1cIjtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNvbnN0cmFpbnQ/OiBBcGlQYXJhbVR5cGU7XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0PFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuT2JqZWN0IHtcbiAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICByZXR1cm4gKHYgYXMgQXBpUGFyYW1UeXBlLk9iamVjdCk/LnQgPT09IFwib2JqZWN0XCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzVW5pb248VmFsdWU+KHY6IFZhbHVlKTogdiBpcyBWYWx1ZSAmIEFwaVBhcmFtVHlwZS5VbmlvbiB7XG4gICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5Vbmlvbik/LnQgPT09IFwidW5pb25cIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNJbnRlcnNlY3Rpb248VmFsdWU+KHY6IFZhbHVlKTogdiBpcyBWYWx1ZSAmIEFwaVBhcmFtVHlwZS5JbnRlcnNlY3Rpb24ge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuSW50ZXJzZWN0aW9uKT8udCA9PT0gXCJpbnRlcnNlY3Rpb25cIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNTdHJpbmdMaXRlcmFsPFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuU3RyaW5nTGl0ZXJhbCB7XG4gICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgcmV0dXJuICh2IGFzIEFwaVBhcmFtVHlwZS5TdHJpbmdMaXRlcmFsKT8udCA9PT0gXCJzdHJpbmctbGl0ZXJhbFwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNMaXRlcmFsPFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuTnVtZXJpY0xpdGVyYWwge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuTnVtZXJpY0xpdGVyYWwpPy50ID09PSBcIm51bWVyaWMtbGl0ZXJhbFwiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc0FycmF5PFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuQXJyYXkge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIHJldHVybiAodiBhcyBBcGlQYXJhbVR5cGUuQXJyYXkpPy50ID09PSBcImFycmF5XCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUmVmPFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuUmVmIHtcbiAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICByZXR1cm4gaXNPYmplY3RWYWx1ZSh2KSAmJiAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCI7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzSW5kZXhlZEFjY2VzczxWYWx1ZT4odjogVmFsdWUpOiB2IGlzIFZhbHVlICYgQXBpUGFyYW1UeXBlLkluZGV4ZWRBY2Nlc3Mge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIHJldHVybiBpc09iamVjdFZhbHVlKHYpICYmICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJpbmRleGVkLWFjY2Vzc1wiO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1R1cGxlVHlwZTxWYWx1ZT4odjogVmFsdWUpOiB2IGlzIFZhbHVlICYgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZSB7XG4gICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgcmV0dXJuIGlzT2JqZWN0VmFsdWUodikgJiYgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInR1cGxlLXR5cGVcIjtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNQaWNrPFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuUGljayB7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzT2JqZWN0VmFsdWUodikgJiZcbiAgICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIlBpY2tcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzT21pdDxWYWx1ZT4odjogVmFsdWUpOiB2IGlzIFZhbHVlICYgQXBpUGFyYW1UeXBlLk9taXQge1xuICAgIHJldHVybiAoXG4gICAgICBpc09iamVjdFZhbHVlKHYpICYmXG4gICAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICAgICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJyZWZcIiAmJlxuICAgICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgICAodiBhcyB7IGlkPzogdW5rbm93biB9KS5pZCA9PT0gXCJPbWl0XCJcbiAgICApO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBpc1BhcnRpYWw8VmFsdWU+KHY6IFZhbHVlKTogdiBpcyBWYWx1ZSAmIEFwaVBhcmFtVHlwZS5QYXJ0aWFsIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXNPYmplY3RWYWx1ZSh2KSAmJlxuICAgICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgICAgKHYgYXMgeyBpZD86IHVua25vd24gfSkuaWQgPT09IFwiUGFydGlhbFwiXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNQcm9taXNlPFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuUHJvbWlzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGlzT2JqZWN0VmFsdWUodikgJiZcbiAgICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgICAgKHYgYXMgeyB0PzogdW5rbm93biB9KS50ID09PSBcInJlZlwiICYmXG4gICAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICAgICh2IGFzIHsgaWQ/OiB1bmtub3duIH0pLmlkID09PSBcIlByb21pc2VcIlxuICAgICk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGV4dDxWYWx1ZT4odjogVmFsdWUpOiB2IGlzIFZhbHVlICYgQXBpUGFyYW1UeXBlLkNvbnRleHQge1xuICAgIHJldHVybiAoXG4gICAgICBpc09iamVjdFZhbHVlKHYpICYmXG4gICAgICBcInRcIiBpbiB2ICYmXG4gICAgICB2LnQgPT09IFwicmVmXCIgJiZcbiAgICAgIFwiaWRcIiBpbiB2ICYmXG4gICAgICAodi5pZCA9PT0gXCJDb250ZXh0XCIgfHwgdi5pZCA9PT0gXCJXZWJTb2NrZXRDb250ZXh0XCIpXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNSZWZLbmV4PFZhbHVlPih2OiBWYWx1ZSk6IHYgaXMgVmFsdWUgJiBBcGlQYXJhbVR5cGUuUmVmIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXNPYmplY3RWYWx1ZSh2KSAmJlxuICAgICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgICAodiBhcyB7IHQ/OiB1bmtub3duIH0pLnQgPT09IFwicmVmXCIgJiZcbiAgICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgICAgKHYgYXMgeyBpZD86IHVua25vd24gfSkuaWQgPT09IFwiS25leFwiXG4gICAgKTtcbiAgfVxuICBleHBvcnQgZnVuY3Rpb24gaXNUeXBlUGFyYW08VmFsdWU+KHY6IFZhbHVlKTogdiBpcyBWYWx1ZSAmIEFwaVBhcmFtVHlwZS5UeXBlUGFyYW0ge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIHJldHVybiBpc09iamVjdFZhbHVlKHYpICYmICh2IGFzIHsgdD86IHVua25vd24gfSkudCA9PT0gXCJ0eXBlLXBhcmFtXCI7XG4gIH1cbn1cbmV4cG9ydCB0eXBlIEFwaVBhcmFtVHlwZSA9XG4gIHwgXCJzdHJpbmdcIlxuICB8IFwibnVtYmVyXCJcbiAgfCBcImJvb2xlYW5cIlxuICB8IFwibnVsbFwiXG4gIHwgXCJ1bmRlZmluZWRcIlxuICB8IFwidm9pZFwiXG4gIHwgXCJhbnlcIlxuICB8IFwidW5rbm93blwiXG4gIHwgXCJ0cnVlXCJcbiAgfCBcImZhbHNlXCJcbiAgfCBBcGlQYXJhbVR5cGUuU3RyaW5nTGl0ZXJhbFxuICB8IEFwaVBhcmFtVHlwZS5OdW1lcmljTGl0ZXJhbFxuICB8IEFwaVBhcmFtVHlwZS5PYmplY3RcbiAgfCBBcGlQYXJhbVR5cGUuVW5pb25cbiAgfCBBcGlQYXJhbVR5cGUuSW50ZXJzZWN0aW9uXG4gIHwgQXBpUGFyYW1UeXBlLkFycmF5XG4gIHwgQXBpUGFyYW1UeXBlLlJlZlxuICB8IEFwaVBhcmFtVHlwZS5JbmRleGVkQWNjZXNzXG4gIHwgQXBpUGFyYW1UeXBlLlR5cGVQYXJhbVxuICB8IEFwaVBhcmFtVHlwZS5UdXBsZVR5cGVcbiAgfCBBcGlQYXJhbVR5cGUuRnVuY3Rpb247XG5cbi8qIFRlbXBsYXRlICovXG4vKipcbiAqIFVJIOy7tO2PrOuEjO2KuCDroIzrjZTrp4HsnYQg7JyE7ZWcIOuplO2DgOuNsOydtO2EsCDrhbjrk5zsnoXri4jri6QuXG4gKlxuICogKirrqqnsoIEqKjogWm9kIOyKpO2CpOuniOuhnOu2gO2EsCDtlITroaDtirjsl5Trk5wgVUkg7Lu07Y+s64SM7Yq466W8IOyekOuPmSDsg53shLHtlZjquLAg7JyE7ZWcXG4gKiDroIzrjZTrp4Eg7KCV67O066W8IOuLtOydgCDtirjrpqwg6rWs7KGw7J6F64uI64ukLiDqsIEg7ZWE65Oc6rCAIOyWtOuWpCBVSSDsu7Ttj6zrhIztirjroZxcbiAqIO2RnO2YhOuQmOyWtOyVvCDtlZjripTsp4Ao7YWN7Iqk7Yq4LCDsnbTrr7jsp4AsIOuCoOynnCwgRW51bSDshKDtg50g65OxKeulvCDrqoXsi5ztlanri4jri6QuXG4gKlxuICogKirrs4DtmZgg7Z2Q66aEKio6XG4gKiBFbnRpdHkgc3Vic2V0IOKGkiBFbnRpdHlQcm9wTm9kZSDihpIgWm9kIOyKpO2CpOuniCDihpIgUmVuZGVyaW5nTm9kZSAoVUnsmqkpIOKGkiBSZWFjdCDsu7Ttj6zrhIztirgg7L2U65OcIOyDneyEsVxuICpcbiAqICoq7KO87JqUIO2VhOuTnCoqOlxuICogLSBgcmVuZGVyVHlwZWA6IFVJIOy7tO2PrOuEjO2KuCDsnKDtmJUgKHN0cmluZy1wbGFpbiwgbnVtYmVyLWZrX2lkLCBlbnVtcywgYXJyYXkg65OxKVxuICogLSBgem9kVHlwZWA6IOybkOuzuCBab2Qg7Iqk7YKk66eIICh2YWxpZGF0aW9uIOyaqSlcbiAqIC0gYGNoaWxkcmVuYDog7KSR7LKp65CcIOqwneyytCDtlYTrk5zrk6QgKG9iamVjdOydvCDrlYwpXG4gKiAtIGBlbGVtZW50YDog67Cw7Je0IOyalOyGjCDtg4DsnoUgKGFycmF57J28IOuVjClcbiAqXG4gKiAqKuyCrOyaqSDsnITsuZgqKjpcbiAqIC0gem9kLWNvbnZlcnRlci50c+ydmCB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKCnsl5DshJwg7IOd7ISxXG4gKiAtIHZpZXdfZm9ybS50ZW1wbGF0ZS50cywgdmlld19saXN0LnRlbXBsYXRlLnRzIOuTseyXkOyEnCBSZWFjdCDsu7Ttj6zrhIztirgg7L2U65OcIOyDneyEseyXkCDsgqzsmqlcbiAqL1xuLy8g7IWA7ZSEIOywuOyhsCDtg4DsnoXsnbTrr4DroZwgWm9kIOyDneuete2VmOqzoCDsp4HsoJEg7KCV7J2YXG5leHBvcnQgY29uc3QgUmVuZGVyaW5nTm9kZSA9IHouYW55KCk7XG5leHBvcnQgdHlwZSBSZW5kZXJpbmdOb2RlID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHJlbmRlclR5cGU6XG4gICAgfCBcInN0cmluZy1wbGFpblwiXG4gICAgfCBcInN0cmluZy1pbWFnZVwiXG4gICAgfCBcInN0cmluZy1kYXRldGltZVwiXG4gICAgfCBcInN0cmluZy1kYXRlXCJcbiAgICB8IFwic3RyaW5nLWlkXCJcbiAgICB8IFwic3RyaW5nLWZrX2lkXCJcbiAgICB8IFwiZGF0ZXRpbWVcIlxuICAgIHwgXCJudW1iZXItcGxhaW5cIlxuICAgIHwgXCJudW1iZXItaWRcIlxuICAgIHwgXCJudW1iZXItZmtfaWRcIlxuICAgIHwgXCJib29sZWFuXCJcbiAgICB8IFwiZW51bXNcIlxuICAgIHwgXCJhcnJheVwiXG4gICAgfCBcImFycmF5LWltYWdlc1wiXG4gICAgfCBcImpzb24tc29uYW11ZmlsZVwiXG4gICAgfCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXG4gICAgfCBcIm9iamVjdFwiXG4gICAgfCBcIm9iamVjdC1waWNrXCJcbiAgICB8IFwicmVjb3JkXCJcbiAgICB8IFwidmVjdG9yXCI7XG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueTtcbiAgZWxlbWVudD86IFJlbmRlcmluZ05vZGU7XG4gIGNoaWxkcmVuPzogUmVuZGVyaW5nTm9kZVtdO1xuICBjb25maWc/OiB7XG4gICAgcGlja2VkOiBzdHJpbmc7XG4gIH07XG4gIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgbnVsbGFibGU/OiBib29sZWFuO1xufTtcblxuY29uc3QgR2VuZXJhdGVkQ29sdW1uU2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmVudW0oW1wiU1RPUkVEXCIsIFwiVklSVFVBTFwiXSksXG4gIGV4cHJlc3Npb246IHouc3RyaW5nKCksXG59KTtcblxuY29uc3QgQmFzZVByb3BGaWVsZHMgPSB7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2M6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbnVsbGFibGU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHRvRmlsdGVyOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKS5vcHRpb25hbCgpLFxuICBkYkRlZmF1bHQ6IHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCksIHouYm9vbGVhbigpXSkub3B0aW9uYWwoKSxcbiAgZ2VuZXJhdGVkOiBHZW5lcmF0ZWRDb2x1bW5TY2hlbWEub3B0aW9uYWwoKSxcbiAgY29uZTogQ29uZVNjaGVtYS5vcHRpb25hbCgpLFxufTtcblxuLy8g67aA6rCAIO2VhOuTnOqwgCDtlYTsmpTsl4bripQgcHJvcFxuY29uc3QgQmFzZVByb3BGaWVsZHNXaXRob3V0QWRkaXRpb25hbCA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei51bmlvbihbXG4gICAgICB6LmxpdGVyYWwoXCJpbnRlZ2VyXCIpLFxuICAgICAgei5saXRlcmFsKFwiaW50ZWdlcltdXCIpLFxuICAgICAgei5saXRlcmFsKFwiYmlnSW50ZWdlclwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJpZ0ludGVnZXJbXVwiKSxcbiAgICAgIHoubGl0ZXJhbChcImJvb2xlYW5cIiksXG4gICAgICB6LmxpdGVyYWwoXCJib29sZWFuW11cIiksXG4gICAgICB6LmxpdGVyYWwoXCJ1dWlkXCIpLFxuICAgICAgei5saXRlcmFsKFwidXVpZFtdXCIpLFxuICAgICAgei5saXRlcmFsKFwidHN2ZWN0b3JcIiksXG4gICAgXSksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuLy8gcHJlY2lzaW9uL3NjYWxlIO2VhOuTnFxuY29uc3QgUHJlY2lzaW9uU2NhbGVGaWVsZHMgPSB7XG4gIHByZWNpc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBzY2FsZTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxufTtcblxuLy8g6rCBIO2DgOyeheuzhCDsiqTtgqTrp4gg7KCV7J2YXG5cbmNvbnN0IFN0cmluZ1Byb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcInN0cmluZ1wiKSxcbiAgICBsZW5ndGg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICB6b2RGb3JtYXQ6IFpvZFN0cmluZ0Zvcm1hdC5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5jb25zdCBTdHJpbmdBcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcInN0cmluZ1tdXCIpLFxuICAgIGxlbmd0aDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIHpvZEZvcm1hdDogWm9kU3RyaW5nRm9ybWF0Lm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgRW51bVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImVudW1cIiksXG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgbGVuZ3RoOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IEVudW1BcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcImVudW1bXVwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBOdW1iZXJQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1iZXJcIiksXG4gICAgLi4uUHJlY2lzaW9uU2NhbGVGaWVsZHMsXG4gICAgbnVtYmVyVHlwZTogei5lbnVtKFtcInJlYWxcIiwgXCJkb3VibGUgcHJlY2lzaW9uXCIsIFwibnVtZXJpY1wiXSkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgTnVtYmVyQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJudW1iZXJbXVwiKSxcbiAgICAuLi5QcmVjaXNpb25TY2FsZUZpZWxkcyxcbiAgICBudW1iZXJUeXBlOiB6LmVudW0oW1wicmVhbFwiLCBcImRvdWJsZSBwcmVjaXNpb25cIiwgXCJudW1lcmljXCJdKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IERhdGVQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJkYXRlXCIpLFxuICAgIHByZWNpc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5jb25zdCBEYXRlQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJkYXRlW11cIiksXG4gICAgcHJlY2lzaW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgTnVtZXJpY1Byb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcIm51bWVyaWNcIiksXG4gICAgLi4uUHJlY2lzaW9uU2NhbGVGaWVsZHMsXG4gIH0pXG4gIC5zdHJpY3QoKTtcbmNvbnN0IE51bWVyaWNBcnJheVByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VQcm9wRmllbGRzLFxuICAgIHR5cGU6IHoubGl0ZXJhbChcIm51bWVyaWNbXVwiKSxcbiAgICAuLi5QcmVjaXNpb25TY2FsZUZpZWxkcyxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBKc29uUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwianNvblwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBTZWFyY2hUZXh0U291cmNlQ29sdW1uU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGNhc2VJbnNlbnNpdGl2ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBTZWFyY2hUZXh0UHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwic2VhcmNoVGV4dFwiKSxcbiAgICBzb3VyY2VDb2x1bW5zOiB6LmFycmF5KFNlYXJjaFRleHRTb3VyY2VDb2x1bW5TY2hlbWEpLm1pbigxKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBWaXJ0dWFsUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVByb3BGaWVsZHMsXG4gICAgdHlwZTogei5saXRlcmFsKFwidmlydHVhbFwiKSxcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgICB2aXJ0dWFsVHlwZTogei5lbnVtKFtcInF1ZXJ5XCIsIFwiY29kZVwiXSkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBWZWN0b3JQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2ZWN0b3JcIiksXG4gICAgZGltZW5zaW9uczogei5udW1iZXIoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuY29uc3QgVmVjdG9yQXJyYXlQcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ2ZWN0b3JbXVwiKSxcbiAgICBkaW1lbnNpb25zOiB6Lm51bWJlcigpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbi8vIFJlbGF0aW9uIO2DgOyeheydgCByZWxhdGlvblR5cGXsl5Ag65Sw6528IOyEuOu2hO2ZlFxuY29uc3QgQmFzZVJlbGF0aW9uRmllbGRzID0ge1xuICAuLi5CYXNlUHJvcEZpZWxkcyxcbiAgdHlwZTogei5saXRlcmFsKFwicmVsYXRpb25cIiksXG4gIHdpdGg6IHouc3RyaW5nKCksXG59O1xuXG4vLyBSZWxhdGlvbk9uIO2DgOyehVxuY29uc3QgUmVsYXRpb25PblNjaGVtYSA9IHouZW51bShbXCJDQVNDQURFXCIsIFwiU0VUIE5VTExcIiwgXCJOTyBBQ1RJT05cIiwgXCJTRVQgREVGQVVMVFwiLCBcIlJFU1RSSUNUXCJdKTtcblxuY29uc3QgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICAuLi5CYXNlUmVsYXRpb25GaWVsZHMsXG4gICAgcmVsYXRpb25UeXBlOiB6LmxpdGVyYWwoXCJCZWxvbmdzVG9PbmVcIiksXG4gICAgY3VzdG9tSm9pbkNsYXVzZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHVzZUNvbnN0cmFpbnQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgb25VcGRhdGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBvbkRlbGV0ZTogUmVsYXRpb25PblNjaGVtYS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IEhhc01hbnlSZWxhdGlvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VSZWxhdGlvbkZpZWxkcyxcbiAgICByZWxhdGlvblR5cGU6IHoubGl0ZXJhbChcIkhhc01hbnlcIiksXG4gICAgam9pbkNvbHVtbjogei5zdHJpbmcoKSxcbiAgICBmcm9tQ29sdW1uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgTWFueVRvTWFueVJlbGF0aW9uUHJvcFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgLi4uQmFzZVJlbGF0aW9uRmllbGRzLFxuICAgIHJlbGF0aW9uVHlwZTogei5saXRlcmFsKFwiTWFueVRvTWFueVwiKSxcbiAgICBqb2luVGFibGU6IHouc3RyaW5nKCksXG4gICAgb25VcGRhdGU6IFJlbGF0aW9uT25TY2hlbWEsXG4gICAgb25EZWxldGU6IFJlbGF0aW9uT25TY2hlbWEsXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgT25lVG9PbmVSZWxhdGlvblByb3BTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLkJhc2VSZWxhdGlvbkZpZWxkcyxcbiAgICByZWxhdGlvblR5cGU6IHoubGl0ZXJhbChcIk9uZVRvT25lXCIpLFxuICAgIGN1c3RvbUpvaW5DbGF1c2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBoYXNKb2luQ29sdW1uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIHVzZUNvbnN0cmFpbnQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgb25VcGRhdGU6IFJlbGF0aW9uT25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBvbkRlbGV0ZTogUmVsYXRpb25PblNjaGVtYS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFJlbGF0aW9uVHlwZXMgPSBbXCJCZWxvbmdzVG9PbmVcIiwgXCJIYXNNYW55XCIsIFwiTWFueVRvTWFueVwiLCBcIk9uZVRvT25lXCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFJlbGF0aW9uUHJvcFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFxuICBcInJlbGF0aW9uVHlwZVwiLFxuICBbXG4gICAgQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wU2NoZW1hLFxuICAgIEhhc01hbnlSZWxhdGlvblByb3BTY2hlbWEsXG4gICAgTWFueVRvTWFueVJlbGF0aW9uUHJvcFNjaGVtYSxcbiAgICBPbmVUb09uZVJlbGF0aW9uUHJvcFNjaGVtYSxcbiAgXSxcbiAge1xuICAgIGVycm9yOiAoaXNzKSA9PlxuICAgICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgICBgcmVsYXRpb25UeXBl7J2AICR7UmVsYXRpb25UeXBlcy5tYXAoKHQpID0+IGAnJHt0fSdgKS5qb2luKFwiLCBcIil9IOykkSDtlZjrgpjsl6zslbwg7ZWp64uI64ukLiDsnoXroKXqsJI6IFwiJHtkZXNjcmliZUlucHV0RmllbGQoaXNzLmlucHV0LCBcInJlbGF0aW9uVHlwZVwiKX1cImAsXG4gIH0sXG4pO1xuXG5jb25zdCBOb3JtYWxQcm9wVHlwZXMgPSBbXG4gIFwiaW50ZWdlclwiLFxuICBcImludGVnZXJbXVwiLFxuICBcImJpZ0ludGVnZXJcIixcbiAgXCJiaWdJbnRlZ2VyW11cIixcbiAgXCJzdHJpbmdcIixcbiAgXCJzdHJpbmdbXVwiLFxuICBcImVudW1cIixcbiAgXCJlbnVtW11cIixcbiAgXCJudW1iZXJcIixcbiAgXCJudW1iZXJbXVwiLFxuICBcIm51bWVyaWNcIixcbiAgXCJudW1lcmljW11cIixcbiAgXCJib29sZWFuXCIsXG4gIFwiYm9vbGVhbltdXCIsXG4gIFwiZGF0ZVwiLFxuICBcImRhdGVbXVwiLFxuICBcInV1aWRcIixcbiAgXCJ1dWlkW11cIixcbiAgXCJqc29uXCIsXG4gIFwic2VhcmNoVGV4dFwiLFxuICBcInZpcnR1YWxcIixcbiAgXCJ2ZWN0b3JcIixcbiAgXCJ2ZWN0b3JbXVwiLFxuICBcInRzdmVjdG9yXCIsXG5dIGFzIGNvbnN0O1xuXG4vLyBWSVJUVUFMIEdlbmVyYXRlZCBDb2x1bW7sl5DshJwg7IKs7JqpIOu2iOqwgOuKpe2VnCDtg4DsnoXrk6RcbmNvbnN0IFZpcnR1YWxHZW5lcmF0ZWREaXNhbGxvd2VkVHlwZXMgPSBbXG4gIFwianNvblwiLFxuICBcInZlY3RvclwiLFxuICBcInZlY3RvcltdXCIsXG4gIFwic3RyaW5nW11cIixcbiAgXCJpbnRlZ2VyW11cIixcbiAgXCJiaWdJbnRlZ2VyW11cIixcbiAgXCJib29sZWFuW11cIixcbiAgXCJkYXRlW11cIixcbiAgXCJ1dWlkW11cIixcbiAgXCJudW1iZXJbXVwiLFxuICBcIm51bWVyaWNbXVwiLFxuICBcImVudW1bXVwiLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IE5vcm1hbFByb3BTY2hlbWEgPSB6XG4gIC5kaXNjcmltaW5hdGVkVW5pb24oXG4gICAgXCJ0eXBlXCIsXG4gICAgW1xuICAgICAgQmFzZVByb3BGaWVsZHNXaXRob3V0QWRkaXRpb25hbCxcbiAgICAgIFN0cmluZ1Byb3BTY2hlbWEsXG4gICAgICBTdHJpbmdBcnJheVByb3BTY2hlbWEsXG4gICAgICBFbnVtUHJvcFNjaGVtYSxcbiAgICAgIEVudW1BcnJheVByb3BTY2hlbWEsXG4gICAgICBOdW1iZXJQcm9wU2NoZW1hLFxuICAgICAgTnVtYmVyQXJyYXlQcm9wU2NoZW1hLFxuICAgICAgRGF0ZVByb3BTY2hlbWEsXG4gICAgICBEYXRlQXJyYXlQcm9wU2NoZW1hLFxuICAgICAgTnVtZXJpY1Byb3BTY2hlbWEsXG4gICAgICBOdW1lcmljQXJyYXlQcm9wU2NoZW1hLFxuICAgICAgSnNvblByb3BTY2hlbWEsXG4gICAgICBTZWFyY2hUZXh0UHJvcFNjaGVtYSxcbiAgICAgIFZpcnR1YWxQcm9wU2NoZW1hLFxuICAgICAgVmVjdG9yUHJvcFNjaGVtYSxcbiAgICAgIFZlY3RvckFycmF5UHJvcFNjaGVtYSxcbiAgICBdLFxuICAgIHtcbiAgICAgIGVycm9yOiAoaXNzKSA9PlxuICAgICAgICAvLyBTQUZFVFk6IOyKpO2CpOuniCDqsoDspp3qs7wg66mU7YOA642w7J207YSwIOqzhOyVveydtCDsnbQg7YOA7J6F7J2EIOuztOyepe2VqeuLiOuLpC5cbiAgICAgICAgYHR5cGXsnYAgJHtOb3JtYWxQcm9wVHlwZXMubWFwKCh0KSA9PiBgJyR7dH0nYCkuam9pbihcIiwgXCIpfSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpC4g7J6F66Cl6rCSOiBcIiR7ZGVzY3JpYmVJbnB1dEZpZWxkKGlzcy5pbnB1dCwgXCJ0eXBlXCIpfVwiYCxcbiAgICB9LFxuICApXG4gIC5zdXBlclJlZmluZSgoZGF0YSwgY3R4KSA9PiB7XG4gICAgaWYgKCFkYXRhLmdlbmVyYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGRiRGVmYXVsdOyZgCBnZW5lcmF0ZWQg64+Z7IucIOyCrOyaqSDrtojqsIBcbiAgICBpZiAoZGF0YS5kYkRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgbWVzc2FnZTogXCJkYkRlZmF1bHTsmYAgZ2VuZXJhdGVk64qUIO2VqOq7mCDsgqzsmqntlaAg7IiYIOyXhuyKteuLiOuLpFwiLFxuICAgICAgICBwYXRoOiBbXCJnZW5lcmF0ZWRcIl0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB2aXJ0dWFsIO2DgOyeheydgCBnZW5lcmF0ZWQg67aI6rCAXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gXCJ2aXJ0dWFsXCIpIHtcbiAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwidmlydHVhbCDtg4DsnoXsnYAgZ2VuZXJhdGVkIGNvbHVtbuydhCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukXCIsXG4gICAgICAgIHBhdGg6IFtcImdlbmVyYXRlZFwiXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFZJUlRVQUwgR2VuZXJhdGVkIENvbHVtbiDtg4DsnoUg7KCc7ZWcIOqygOymnVxuICAgIGlmIChkYXRhLmdlbmVyYXRlZC50eXBlID09PSBcIlZJUlRVQUxcIikge1xuICAgICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgICBpZiAoKFZpcnR1YWxHZW5lcmF0ZWREaXNhbGxvd2VkVHlwZXMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKGRhdGEudHlwZSkpIHtcbiAgICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IGBWSVJUVUFMIGdlbmVyYXRlZCBjb2x1bW7snYAgJHtkYXRhLnR5cGV9IO2DgOyeheydhCDsp4Dsm5DtlZjsp4Ag7JWK7Iq164uI64ukLiBTVE9SRUTrpbwg7IKs7Jqp7ZWY7IS47JqULmAsXG4gICAgICAgICAgcGF0aDogW1wiZ2VuZXJhdGVkXCIsIFwidHlwZVwiXSxcbiAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuY29uc3QgQWxsUHJvcFR5cGVzID0gWy4uLk5vcm1hbFByb3BUeXBlcywgXCJyZWxhdGlvblwiXSBhcyBjb25zdDtcbmNvbnN0IEVudGl0eVByb3BTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW05vcm1hbFByb3BTY2hlbWEsIFJlbGF0aW9uUHJvcFNjaGVtYV0sIHtcbiAgZXJyb3I6IChpc3MpID0+XG4gICAgLy8gU0FGRVRZOiDsiqTtgqTrp4gg6rKA7Kad6rO8IOuplO2DgOuNsOydtO2EsCDqs4Tslb3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgYHR5cGXsnYAgJHtBbGxQcm9wVHlwZXMubWFwKCh0KSA9PiBgJyR7dH0nYCkuam9pbihcIiwgXCIpfSDspJEg7ZWY64KY7Jes7JW8IO2VqeuLiOuLpC4g7J6F66Cl6rCSOiBcIiR7ZGVzY3JpYmVJbnB1dEZpZWxkKGlzcy5pbnB1dCwgXCJ0eXBlXCIpfVwiYCxcbn0pO1xuXG5jb25zdCBFbnRpdHlJbmRleENvbHVtblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgbnVsbHNGaXJzdDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgc29ydE9yZGVyOiB6LmVudW0oW1wiQVNDXCIsIFwiREVTQ1wiXSkub3B0aW9uYWwoKSxcbiAgdmVjdG9yT3BzOiB6LmVudW0oW1widmVjdG9yX2Nvc2luZV9vcHNcIiwgXCJ2ZWN0b3JfaXBfb3BzXCIsIFwidmVjdG9yX2wyX29wc1wiXSkub3B0aW9uYWwoKSxcbiAgb3BjbGFzczogei51bmlvbihbei5lbnVtKEtub3duT3BjbGFzc1ZhbHVlcyksIHouc3RyaW5nKCkubWluKDEpXSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vLyBFbnRpdHlJbmRleCDsiqTtgqTrp4gg7KCV7J2YXG5jb25zdCBFbnRpdHlJbmRleFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdHlwZTogei5lbnVtKFtcImluZGV4XCIsIFwidW5pcXVlXCIsIFwiaG5zd1wiLCBcIml2ZmZsYXRcIl0pLFxuICAgIGNvbHVtbnM6IHouYXJyYXkoRW50aXR5SW5kZXhDb2x1bW5TY2hlbWEpLFxuICAgIG5hbWU6IHouc3RyaW5nKCkubWluKDEpLm1heCg2MyksXG4gICAgdXNpbmc6IHouZW51bShbXCJidHJlZVwiLCBcImhhc2hcIiwgXCJnaW5cIiwgXCJnaXN0XCIsIFwicGdyb29uZ2FcIl0pLm9wdGlvbmFsKCksXG4gICAgbnVsbHNOb3REaXN0aW5jdDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICB3aGVyZTogei5zdHJpbmcoKS50cmltKCkubWluKDEpLm9wdGlvbmFsKCksXG4gICAgbTogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGVmQ29uc3RydWN0aW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgbGlzdHM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG4vKipcbiAqIFN1YnNldERlZiDsiqTtgqTrp4hcbiAqXG4gKiDtlZjsnIQg7Zi47ZmY7ISx7J2EIOychO2VtCDrsLDsl7Qg7ZiV7YOc7JmAIOqwneyytCDtmJXtg5wg65GYIOuLpCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmNvbnN0IFN1YnNldERlZlNjaGVtYSA9IHoudW5pb24oW1xuICAvLyDquLDsobQg67Cw7Je0IO2Yle2DnFxuICB6LmFycmF5KHoudW5pb24oW3ouc3RyaW5nKCksIHoub2JqZWN0KHsgZmllbGQ6IHouc3RyaW5nKCksIGludGVybmFsOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpIH0pXSkpLFxuICAvLyDsg4jroZzsmrQg6rCd7LK0IO2Yle2DnFxuICB6Lm9iamVjdCh7XG4gICAgZmllbGRzOiB6LmFycmF5KFxuICAgICAgei51bmlvbihbei5zdHJpbmcoKSwgei5vYmplY3QoeyBmaWVsZDogei5zdHJpbmcoKSwgaW50ZXJuYWw6IHouYm9vbGVhbigpLm9wdGlvbmFsKCkgfSldKSxcbiAgICApLFxuICAgIGNvbmU6IENvbmVTY2hlbWEub3B0aW9uYWwoKSxcbiAgfSksXG5dKTtcblxuLyoqXG4gKiBFbnVtRGVmIOyKpO2CpOuniFxuICpcbiAqIO2VmOychCDtmLjtmZjshLHsnYQg7JyE7ZW0IFJlY29yZCDtmJXtg5zsmYAg6rCd7LK0IO2Yle2DnCDrkZgg64ukIOyngOybkO2VqeuLiOuLpC5cbiAqL1xuY29uc3QgRW51bURlZlNjaGVtYSA9IHoudW5pb24oW1xuICAvLyDquLDsobQgUmVjb3JkIO2Yle2DnFxuICB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKSxcbiAgLy8g7IOI66Gc7Jq0IOqwneyytCDtmJXtg5xcbiAgei5vYmplY3Qoe1xuICAgIHZhbHVlczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSksXG4gICAgY29uZTogQ29uZVNjaGVtYS5vcHRpb25hbCgpLFxuICB9KSxcbl0pO1xuXG5mdW5jdGlvbiB1bndyYXBTZWFyY2hUZXh0SnNvblNvdXJjZVR5cGUoem9kVHlwZTogei5ab2RUeXBlQW55KTogei5ab2RUeXBlQW55IHtcbiAgbGV0IGN1cnJlbnQgPSB6b2RUeXBlO1xuXG4gIHdoaWxlIChjdXJyZW50IGluc3RhbmNlb2Ygei5ab2RPcHRpb25hbCB8fCBjdXJyZW50IGluc3RhbmNlb2Ygei5ab2ROdWxsYWJsZSkge1xuICAgIC8vIFNBRkVUWTog7Iqk7YKk66eIIOqygOymneqzvCDrqZTtg4DrjbDsnbTthLAg6rOE7JW97J20IOydtCDtg4DsnoXsnYQg67O07J6l7ZWp64uI64ukLlxuICAgIGN1cnJlbnQgPSBjdXJyZW50LnVud3JhcCgpIGFzIHouWm9kVHlwZUFueTtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTZWFyY2hUZXh0SnNvblNvdXJjZVpvZFR5cGUoem9kVHlwZTogei5ab2RUeXBlQW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGJhc2VUeXBlID0gdW53cmFwU2VhcmNoVGV4dEpzb25Tb3VyY2VUeXBlKHpvZFR5cGUpO1xuICBpZiAoIShiYXNlVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudFR5cGUgPSBiYXNlVHlwZS5kZWYuZWxlbWVudDtcbiAgcmV0dXJuIGVsZW1lbnRUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2VhcmNoVGV4dFNvdXJjZXMoXG4gIHByb3BzOiByZWFkb25seSB6LmluZmVyPHR5cGVvZiBFbnRpdHlQcm9wU2NoZW1hPltdLFxuICBjdHg6IHouUmVmaW5lbWVudEN0eCxcbiAgcHJvcHNQYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW1wicHJvcHNcIl0sXG4pOiB2b2lkIHtcbiAgY29uc3QgcHJvcHNCeU5hbWUgPSBuZXcgTWFwKFxuICAgIHByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgcmV0dXJuIFtwcm9wLm5hbWUsIHByb3BdO1xuICAgIH0pLFxuICApO1xuXG4gIHByb3BzLmZvckVhY2goKHByb3AsIHByb3BJbmRleCkgPT4ge1xuICAgIGlmIChwcm9wLnR5cGUgIT09IFwic2VhcmNoVGV4dFwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvcC5zb3VyY2VDb2x1bW5zLmZvckVhY2goKHNvdXJjZSwgc291cmNlSW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZVByb3AgPSBwcm9wc0J5TmFtZS5nZXQoc291cmNlLm5hbWUpO1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IFsuLi5wcm9wc1BhdGgsIHByb3BJbmRleCwgXCJzb3VyY2VDb2x1bW5zXCIsIHNvdXJjZUluZGV4LCBcIm5hbWVcIl07XG5cbiAgICAgIGlmICghc291cmNlUHJvcCkge1xuICAgICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgICAgbWVzc2FnZTogYHNlYXJjaFRleHQgc291cmNlIGNvbHVtbiBcIiR7c291cmNlLm5hbWV9XCLsnYQo66W8KSDssL7snYQg7IiYIOyXhuyKteuLiOuLpC5gLFxuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3VyY2VQcm9wLnR5cGUgPT09IFwic3RyaW5nXCIgfHwgc291cmNlUHJvcC50eXBlID09PSBcInN0cmluZ1tdXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoc291cmNlUHJvcC50eXBlID09PSBcImpzb25cIikge1xuICAgICAgICAvLyBqc29uIHNvdXJjZeydmCDstZzsooUg7YOA7J6FIOycoO2aqOyEseydgCBFbnRpdHlNYW5hZ2VyLnJlZ2lzdGVyKCkg64uo6rOE7JeQ7IScXG4gICAgICAgIC8vIOyLpOygnCBab2Qg7YOA7J6F7J2EIO2VtOyEne2VmOyXrCDqtazsobDsoIHsnLzroZwg6rKA7Kad7ZWp64uI64ukLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgIG1lc3NhZ2U6IGBzZWFyY2hUZXh0IHNvdXJjZSBjb2x1bW4gXCIke3NvdXJjZS5uYW1lfVwi7J2YIO2DgOyehSBcIiR7c291cmNlUHJvcC50eXBlfVwi7J2AKOuKlCkg7KeA7JuQ65CY7KeAIOyViuyKteuLiOuLpC5gLFxuICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCBFbnRpdHlKc29uQmFzZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJQYXNjYWxDYXNl66GcIOuQnCBFbnRpdHkgSURcIiksXG4gICAgdGl0bGU6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJFbnRpdHkg7J2066aEXCIpLFxuICAgIHRhYmxlOiB6LnN0cmluZygpLmRlc2NyaWJlKFwic25ha2VfY2FzZeuhnCDrkJwg7YWM7J2067iU66qFXCIpLFxuICAgIHBhcmVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCLrtoDrqqggRW50aXR5IElEXCIpLFxuICAgIGNvbmU6IENvbmVTY2hlbWEub3B0aW9uYWwoKSxcbiAgICBwcm9wczogei5hcnJheShFbnRpdHlQcm9wU2NoZW1hKSxcbiAgICBpbmRleGVzOiB6LmFycmF5KEVudGl0eUluZGV4U2NoZW1hKSxcbiAgICBzdWJzZXRzOiB6LnJlY29yZCh6LnN0cmluZygpLCBTdWJzZXREZWZTY2hlbWEpLFxuICAgIGVudW1zOiB6LnJlY29yZCh6LnN0cmluZygpLCBFbnVtRGVmU2NoZW1hKSxcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5leHBvcnQgY29uc3QgRW50aXR5SnNvblNjaGVtYSA9IEVudGl0eUpzb25CYXNlU2NoZW1hLnN1cGVyUmVmaW5lKChlbnRpdHksIGN0eCkgPT4ge1xuICB2YWxpZGF0ZVNlYXJjaFRleHRTb3VyY2VzKGVudGl0eS5wcm9wcywgY3R4KTtcbn0pO1xuXG5jb25zdCBUZW1wbGF0ZUVudGl0eVNjaGVtYSA9IEVudGl0eUpzb25CYXNlU2NoZW1hLm9taXQoeyBpZDogdHJ1ZSB9KVxuICAuZXh0ZW5kKHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSlcbiAgLnBhcnRpYWwoe1xuICAgIHRhYmxlOiB0cnVlLFxuICAgIHByb3BzOiB0cnVlLFxuICAgIGluZGV4ZXM6IHRydWUsXG4gICAgc3Vic2V0czogdHJ1ZSxcbiAgICBlbnVtczogdHJ1ZSxcbiAgfSlcbiAgLnN1cGVyUmVmaW5lKChlbnRpdHksIGN0eCkgPT4ge1xuICAgIGlmICghZW50aXR5LnByb3BzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsaWRhdGVTZWFyY2hUZXh0U291cmNlcyhlbnRpdHkucHJvcHMsIGN0eCk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgVGVtcGxhdGVPcHRpb25zID0gei5vYmplY3Qoe1xuICBlbnRpdHk6IFRlbXBsYXRlRW50aXR5U2NoZW1hLFxuICBpbml0X3R5cGVzOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBnZW5lcmF0ZWQ6IHoub2JqZWN0KHt9KSxcbiAgZ2VuZXJhdGVkX3Nzbzogei5vYmplY3Qoe30pLFxuICBnZW5lcmF0ZWRfaHR0cDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgaHR0cF92YWxpZGF0b3JzOiB6Lm9iamVjdCh7fSksXG4gIG1vZGVsOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgZGVmYXVsdFNlYXJjaEZpZWxkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGVmYXVsdE9yZGVyQnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIG1vZGVsX3Rlc3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGJyaWRnZTogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgc2VydmljZXM6IHoub2JqZWN0KHt9KSxcbiAgdmlld19saXN0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgZXh0cmE6IHoudW5rbm93bigpLFxuICB9KSxcbiAgdmlld19saXN0X2NvbHVtbnM6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgICBjb2x1bW5zOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgbGFiZWw6IHouc3RyaW5nKCksXG4gICAgICAgIHRjOiB6LnN0cmluZygpLFxuICAgICAgfSlcbiAgICAgIC5hcnJheSgpLFxuICAgIGNvbHVtbkltcG9ydHM6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X3NlYXJjaF9pbnB1dDogei5vYmplY3Qoe1xuICAgIGVudGl0eUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgdmlld19mb3JtOiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB2aWV3X2lkX2FsbF9zZWxlY3Q6IHoub2JqZWN0KHtcbiAgICBlbnRpdHlJZDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHZpZXdfZW51bXNfYnV0dG9uc2V0OiB6Lm9iamVjdCh7XG4gICAgZW50aXR5SWQ6IHouc3RyaW5nKCksXG4gICAgZW51bUlkOiB6LnN0cmluZygpLFxuICB9KSxcbiAgcXVlcmllczogei5vYmplY3Qoe30pLFxuICBlbnRyeV9zZXJ2ZXI6IHoub2JqZWN0KHt9KSxcbiAgc2Q6IHoub2JqZWN0KHtcbiAgICB0YXJnZXQ6IHouZW51bShbXCJhcGlcIiwgXCJ3ZWJcIiwgXCJhcHBcIl0pLFxuICB9KSxcbn0pO1xuZXhwb3J0IHR5cGUgVGVtcGxhdGVPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgVGVtcGxhdGVPcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFRlbXBsYXRlS2V5ID0gei5lbnVtKFtcbiAgXCJlbnRpdHlcIixcbiAgXCJpbml0X3R5cGVzXCIsXG4gIFwiZ2VuZXJhdGVkXCIsXG4gIFwiZ2VuZXJhdGVkX3Nzb1wiLFxuICBcImdlbmVyYXRlZF9odHRwXCIsXG4gIFwiaHR0cF92YWxpZGF0b3JzXCIsXG4gIFwibW9kZWxcIixcbiAgXCJtb2RlbF90ZXN0XCIsXG4gIFwiYnJpZGdlXCIsXG4gIFwic2VydmljZXNcIixcbiAgXCJ2aWV3X2xpc3RcIixcbiAgXCJ2aWV3X2xpc3RfY29sdW1uc1wiLFxuICBcInZpZXdfc2VhcmNoX2lucHV0XCIsXG4gIFwidmlld19mb3JtXCIsXG4gIFwidmlld19pZF9hbGxfc2VsZWN0XCIsXG4gIFwidmlld19lbnVtc19idXR0b25zZXRcIixcbiAgXCJxdWVyaWVzXCIsXG4gIFwiZW50cnlfc2VydmVyXCIsXG4gIFwic2RcIixcbl0pO1xuZXhwb3J0IHR5cGUgVGVtcGxhdGVLZXkgPSB6LmluZmVyPHR5cGVvZiBUZW1wbGF0ZUtleT47XG5cbmV4cG9ydCBjb25zdCBHZW5lcmF0ZU9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gIG92ZXJ3cml0ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgR2VuZXJhdGVPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgR2VuZXJhdGVPcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFBhdGhBbmRDb2RlID0gei5vYmplY3Qoe1xuICBwYXRoOiB6LnN0cmluZygpLFxuICBjb2RlOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgdHlwZSBQYXRoQW5kQ29kZSA9IHouaW5mZXI8dHlwZW9mIFBhdGhBbmRDb2RlPjtcblxuZXhwb3J0IHR5cGUgRml4dHVyZVNlYXJjaE9wdGlvbnMgPSB7XG4gIGVudGl0eUlkOiBzdHJpbmc7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHNlYXJjaFR5cGU6IFwiZXF1YWxzXCIgfCBcImxpa2VcIjtcbn07XG5cbnR5cGUgQ29sdW1uVmFsdWUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZSB8IG51bGw7XG5leHBvcnQgdHlwZSBGaXh0dXJlUmVjb3JkID0ge1xuICBmaXh0dXJlSWQ6IHN0cmluZztcbiAgZW50aXR5SWQ6IHN0cmluZztcbiAgaWQ6IG51bWJlciB8IHN0cmluZztcbiAgY29sdW1uczoge1xuICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgIHByb3A6IEVudGl0eVByb3A7XG4gICAgICB2YWx1ZTogQ29sdW1uVmFsdWUgfCBDb2x1bW5WYWx1ZVtdO1xuICAgIH07XG4gIH07XG4gIGZldGNoZWRSZWNvcmRzOiBzdHJpbmdbXTtcbiAgYmVsb25nc1JlY29yZHM6IHN0cmluZ1tdO1xuICB0YXJnZXQ/OiBGaXh0dXJlUmVjb3JkOyAvLyBJbXBvcnQg64yA7IOBIERCIOugiOy9lOuTnChpZOqwgCDqsJnsnYApXG4gIHVuaXF1ZT86IEZpeHR1cmVSZWNvcmQ7IC8vIEltcG9ydCDrjIDsg4EgREIg66CI7L2U65OcKHVuaXF1ZSBrZXnqsIAg6rCZ7J2AKVxuICBvdmVycmlkZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBGaXh0dXJlSW1wb3J0UmVzdWx0ID0ge1xuICBlbnRpdHlJZDogc3RyaW5nO1xuICBkYXRhOiB7XG4gICAgW2tleTogc3RyaW5nXTogQ29sdW1uVmFsdWU7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbk5vZGUgPSB7XG4gIGZpeHR1cmVJZDogc3RyaW5nO1xuICBlbnRpdHlJZDogc3RyaW5nO1xuICByZWxhdGVkOiBTZXQ8c3RyaW5nPjtcbn07XG5cbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlIC0tIHNvbmFtdS5nZW5lcmF0ZWQuc3NvIOyXkOyEnCDtmZXsnqXsnYQg7JyE7ZW0IOykgOu5hOuQnCDruYgg7J247YSw7Y6Y7J207IqkXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlU2NoZW1hRXh0ZW5kIHt9XG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZSAtLSBzb25hbXUuZ2VuZXJhdGVkLnNzbyDsl5DshJwg7ZmV7J6l7J2EIOychO2VtCDspIDruYTrkJwg67mIIOyduO2EsO2OmOydtOyKpFxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUZvcmVpZ25LZXlzIHt9XG5leHBvcnQgdHlwZSBNYW55VG9NYW55QmFzZVNjaGVtYTxcbiAgRnJvbUlkS2V5IGV4dGVuZHMgc3RyaW5nLFxuICBUb0lkS2V5IGV4dGVuZHMgc3RyaW5nLFxuICBGcm9tUGtUeXBlID0gbnVtYmVyLFxuICBUb1BrVHlwZSA9IG51bWJlcixcbj4gPSB7XG4gIGlkOiBudW1iZXI7XG59ICYge1xuICBbSyBpbiBgJHtGcm9tSWRLZXl9X2lkYF06IEZyb21Qa1R5cGU7XG59ICYge1xuICBbSyBpbiBgJHtUb0lkS2V5fV9pZGBdOiBUb1BrVHlwZTtcbn07XG5cbi8vIOqwneyytCwg7ZWo7IiYLCDruYTrj5nquLAg7ZWo7IiY66W8IOuqqOuRkCDtj6zqtITtlZjripQg7YOA7J6FXG5leHBvcnQgdHlwZSBFeGVjdXRhYmxlPFQ+ID0gVCB8IFByb21pc2U8VD4gfCAoKCkgPT4gVCkgfCAoKCkgPT4gUHJvbWlzZTxUPik7XG5cbmV4cG9ydCB0eXBlIFNvbmFtdUZhc3RpZnlDb25maWcgPSB7XG4gIGNvbnRleHRQcm92aWRlcjogKFxuICAgIGRlZmF1bHRDb250ZXh0OiBQaWNrPFxuICAgICAgQXBpQ29udGV4dCxcbiAgICAgIHwgXCJ0cmFuc3BvcnRcIlxuICAgICAgfCBcInJlcXVlc3RcIlxuICAgICAgfCBcInJlcGx5XCJcbiAgICAgIHwgXCJoZWFkZXJzXCJcbiAgICAgIHwgXCJjcmVhdGVTU0VcIlxuICAgICAgfCBcIm5haXRlU3RvcmVcIlxuICAgICAgfCBcImxvY2FsZVwiXG4gICAgICB8IFwidXNlclwiXG4gICAgICB8IFwic2Vzc2lvblwiXG4gICAgPixcbiAgICByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCxcbiAgICByZXBseTogRmFzdGlmeVJlcGx5LFxuICApID0+IEFwaUNvbnRleHQgfCBQcm9taXNlPEFwaUNvbnRleHQ+O1xuICB3ZWJzb2NrZXRDb250ZXh0UHJvdmlkZXI/OiAoXG4gICAgZGVmYXVsdENvbnRleHQ6IFBpY2s8XG4gICAgICBpbXBvcnQoXCIuLi9hcGkvY29udGV4dFwiKS5XZWJTb2NrZXRDb250ZXh0LFxuICAgICAgXCJ0cmFuc3BvcnRcIiB8IFwicmVxdWVzdFwiIHwgXCJoZWFkZXJzXCIgfCBcIndzXCIgfCBcIm5haXRlU3RvcmVcIiB8IFwibG9jYWxlXCIgfCBcInVzZXJcIiB8IFwic2Vzc2lvblwiXG4gICAgPixcbiAgICByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCxcbiAgKSA9PlxuICAgIHwgaW1wb3J0KFwiLi4vYXBpL2NvbnRleHRcIikuV2ViU29ja2V0Q29udGV4dFxuICAgIHwgUHJvbWlzZTxpbXBvcnQoXCIuLi9hcGkvY29udGV4dFwiKS5XZWJTb2NrZXRDb250ZXh0PjtcbiAgZ3VhcmRIYW5kbGVyOiAoXG4gICAgZ3VhcmQ6IEd1YXJkS2V5LFxuICAgIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LFxuICAgIGFwaToge1xuICAgICAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgICAgIHBhcmFtZXRlcnM6IEFwaVBhcmFtW107XG4gICAgICByZXR1cm5UeXBlOiBBcGlQYXJhbVR5cGU7XG4gICAgICBtb2RlbE5hbWU6IHN0cmluZztcbiAgICAgIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICAgIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gICAgfSxcbiAgKSA9PiB2b2lkO1xuICAvKipcbiAgICog7KCE7JetIENhY2hlLUNvbnRyb2wg7ZW465Ok65+s7J6F64uI64ukLlxuICAgKiDsmpTssq0g7YOA7J6FKGFwaSwgYXNzZXRzLCBzc3IsIGNzcinsl5Ag65Sw6528IENhY2hlLUNvbnRyb2wg7ISk7KCV7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAgICogdW5kZWZpbmVk66W8IOuwmO2ZmO2VmOuptCDtg4DsnoXrs4Qg6riw67O46rCS7J20IOyggeyaqeuQqeuLiOuLpC5cbiAgICovXG4gIGNhY2hlQ29udHJvbEhhbmRsZXI/OiBDYWNoZUNvbnRyb2xIYW5kbGVyO1xufTtc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
@@ -1 +1 @@
1
- {"version":3,"file":"ai-api.d.ts","sourceRoot":"","sources":["../../src/ui/ai-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAO/C,wBAAsB,QAAQ,CAAC,MAAM,EAAE,eAAe,iBAwDrD"}
1
+ {"version":3,"file":"ai-api.d.ts","sourceRoot":"","sources":["../../src/ui/ai-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAO/C,wBAAsB,QAAQ,CAAC,MAAM,EAAE,eAAe,iBA0DrD"}
package/dist/ui/ai-api.js CHANGED
@@ -3,14 +3,14 @@ import { SD, init_sd } from "../dict/sd.js";
3
3
  import { BadRequestException, init_so_exceptions } from "../exceptions/so-exceptions.js";
4
4
  import { aiClient, init_ai_client } from "./ai-client.js";
5
5
  import { convertToModelMessages } from "ai";
6
- //#region src/ui/ai-api.ts
6
+ // src/ui/ai-api.ts
7
7
  async function setAiApi(server) {
8
8
  await aiClient.init();
9
9
  server.post("/api/ai/fixture/chat", async (request, reply) => {
10
10
  const { messages, fixtureRecords } = request.body;
11
11
  if (!fixtureRecords || fixtureRecords.length === 0) throw new BadRequestException(SD("sonamu.error.fixtureRecordRequired"));
12
12
  const response = aiClient.handleFixture(await convertToModelMessages(messages), fixtureRecords).toUIMessageStreamResponse();
13
- reply.raw.writeHead(response.status, Object.fromEntries(Object.entries(response.headers)));
13
+ reply.raw.writeHead(response.status, Object.fromEntries(response.headers.entries()));
14
14
  if (response.body) {
15
15
  const reader = response.body.getReader();
16
16
  while (true) {
@@ -25,7 +25,7 @@ async function setAiApi(server) {
25
25
  server.post("/api/ai/entity/chat", async (request, reply) => {
26
26
  const { messages } = request.body;
27
27
  const response = aiClient.handleEntity(await convertToModelMessages(messages)).toUIMessageStreamResponse();
28
- reply.raw.writeHead(response.status, Object.fromEntries(Object.entries(response.headers)));
28
+ reply.raw.writeHead(response.status, Object.fromEntries(response.headers.entries()));
29
29
  if (response.body) {
30
30
  const reader = response.body.getReader();
31
31
  while (true) {
@@ -43,8 +43,7 @@ var init_ai_api = __esmMin((() => {
43
43
  init_so_exceptions();
44
44
  init_ai_client();
45
45
  }));
46
- //#endregion
47
46
  init_ai_api();
48
47
  export { init_ai_api, setAiApi };
49
48
 
50
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXBpLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9haS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29udmVydFRvTW9kZWxNZXNzYWdlcyB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgdHlwZSBVSU1lc3NhZ2UgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IHR5cGUgRmFzdGlmeUluc3RhbmNlIH0gZnJvbSBcImZhc3RpZnlcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgQmFkUmVxdWVzdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IHR5cGUgRml4dHVyZVJlY29yZCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgYWlDbGllbnQgfSBmcm9tIFwiLi9haS1jbGllbnRcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldEFpQXBpKHNlcnZlcjogRmFzdGlmeUluc3RhbmNlKSB7XG4gIGF3YWl0IGFpQ2xpZW50LmluaXQoKTtcblxuICBzZXJ2ZXIucG9zdChcIi9hcGkvYWkvZml4dHVyZS9jaGF0XCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgIGNvbnN0IHsgbWVzc2FnZXMsIGZpeHR1cmVSZWNvcmRzIH0gPVxuICAgICAgLyogU0FGRVRZOiBVSSDrj4TqtazsnZggWm9kIOyeheugpSDsiqTtgqTrp4jqsIAg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyByZXF1ZXN0LmJvZHkgYXMge1xuICAgICAgICBtZXNzYWdlczogVUlNZXNzYWdlW107XG4gICAgICAgIGZpeHR1cmVSZWNvcmRzPzogRml4dHVyZVJlY29yZFtdO1xuICAgICAgfTtcblxuICAgIGlmICghZml4dHVyZVJlY29yZHMgfHwgZml4dHVyZVJlY29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5maXh0dXJlUmVjb3JkUmVxdWlyZWRcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGFpQ2xpZW50LmhhbmRsZUZpeHR1cmUoYXdhaXQgY29udmVydFRvTW9kZWxNZXNzYWdlcyhtZXNzYWdlcyksIGZpeHR1cmVSZWNvcmRzKTtcbiAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC50b1VJTWVzc2FnZVN0cmVhbVJlc3BvbnNlKCk7XG5cbiAgICByZXBseS5yYXcud3JpdGVIZWFkKHJlc3BvbnNlLnN0YXR1cywgT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmhlYWRlcnMpKSk7XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSkge1xuICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICAgIGlmIChkb25lKSBicmVhaztcbiAgICAgICAgcmVwbHkucmF3LndyaXRlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXBseS5yYXcuZW5kKCk7XG4gICAgcmV0dXJuIHJlcGx5O1xuICB9KTtcblxuICAvLyBFbnRpdHkvRW51bSDsg53shLHsmqkgQUkgQ2hhdCBTdHJlYW1cbiAgc2VydmVyLnBvc3QoXCIvYXBpL2FpL2VudGl0eS9jaGF0XCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9XG4gICAgICAvKiBTQUZFVFk6IFVJIOuPhOq1rOydmCBab2Qg7J6F66ClIOyKpO2CpOuniOqwgCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHJlcXVlc3QuYm9keSBhcyB7XG4gICAgICAgIG1lc3NhZ2VzOiBVSU1lc3NhZ2VbXTtcbiAgICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhaUNsaWVudC5oYW5kbGVFbnRpdHkoYXdhaXQgY29udmVydFRvTW9kZWxNZXNzYWdlcyhtZXNzYWdlcykpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnRvVUlNZXNzYWdlU3RyZWFtUmVzcG9uc2UoKTtcblxuICAgIHJlcGx5LnJhdy53cml0ZUhlYWQocmVzcG9uc2Uuc3RhdHVzLCBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuaGVhZGVycykpKTtcblxuICAgIGlmIChyZXNwb25zZS5ib2R5KSB7XG4gICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgICAgaWYgKGRvbmUpIGJyZWFrO1xuICAgICAgICByZXBseS5yYXcud3JpdGUodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlcGx5LnJhdy5lbmQoKTtcbiAgICByZXR1cm4gcmVwbHk7XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQSxlQUFzQixTQUFTLFFBQXlCO0NBQ3RELE1BQU0sU0FBUyxLQUFLO0NBRXBCLE9BQU8sS0FBSyx3QkFBd0IsT0FBTyxTQUFTLFVBQVU7RUFDNUQsTUFBTSxFQUFFLFVBQVUsbUJBQ2dDLFFBQVE7RUFLMUQsSUFBSSxDQUFDLGtCQUFrQixlQUFlLFdBQVcsR0FDL0MsTUFBTSxJQUFJLG9CQUFvQixHQUFHLG9DQUFvQyxDQUFDO0VBSXhFLE1BQU0sV0FEUyxTQUFTLGNBQWMsTUFBTSx1QkFBdUIsUUFBUSxHQUFHLGNBQzdELENBQUEsQ0FBTywwQkFBMEI7RUFFbEQsTUFBTSxJQUFJLFVBQVUsU0FBUyxRQUFRLE9BQU8sWUFBWSxPQUFPLFFBQVEsU0FBUyxPQUFPLENBQUMsQ0FBQztFQUV6RixJQUFJLFNBQVMsTUFBTTtHQUNqQixNQUFNLFNBQVMsU0FBUyxLQUFLLFVBQVU7R0FDdkMsT0FBTyxNQUFNO0lBQ1gsTUFBTSxFQUFFLE1BQU0sVUFBVSxNQUFNLE9BQU8sS0FBSztJQUMxQyxJQUFJLE1BQU07SUFDVixNQUFNLElBQUksTUFBTSxLQUFLO0dBQ3ZCO0VBQ0Y7RUFFQSxNQUFNLElBQUksSUFBSTtFQUNkLE9BQU87Q0FDVCxDQUFDO0NBR0QsT0FBTyxLQUFLLHVCQUF1QixPQUFPLFNBQVMsVUFBVTtFQUMzRCxNQUFNLEVBQUUsYUFDMEMsUUFBUTtFQUsxRCxNQUFNLFdBRFMsU0FBUyxhQUFhLE1BQU0sdUJBQXVCLFFBQVEsQ0FDekQsQ0FBQSxDQUFPLDBCQUEwQjtFQUVsRCxNQUFNLElBQUksVUFBVSxTQUFTLFFBQVEsT0FBTyxZQUFZLE9BQU8sUUFBUSxTQUFTLE9BQU8sQ0FBQyxDQUFDO0VBRXpGLElBQUksU0FBUyxNQUFNO0dBQ2pCLE1BQU0sU0FBUyxTQUFTLEtBQUssVUFBVTtHQUN2QyxPQUFPLE1BQU07SUFDWCxNQUFNLEVBQUUsTUFBTSxVQUFVLE1BQU0sT0FBTyxLQUFLO0lBQzFDLElBQUksTUFBTTtJQUNWLE1BQU0sSUFBSSxNQUFNLEtBQUs7R0FDdkI7RUFDRjtFQUVBLE1BQU0sSUFBSSxJQUFJO0VBQ2QsT0FBTztDQUNULENBQUM7QUFDSDs7U0E3RCtCO29CQUNrQztnQkFFM0IifQ==
49
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXBpLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9haS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29udmVydFRvTW9kZWxNZXNzYWdlcyB9IGZyb20gXCJhaVwiO1xuaW1wb3J0IHsgdHlwZSBVSU1lc3NhZ2UgfSBmcm9tIFwiYWlcIjtcbmltcG9ydCB7IHR5cGUgRmFzdGlmeUluc3RhbmNlIH0gZnJvbSBcImZhc3RpZnlcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgQmFkUmVxdWVzdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IHR5cGUgRml4dHVyZVJlY29yZCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgYWlDbGllbnQgfSBmcm9tIFwiLi9haS1jbGllbnRcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldEFpQXBpKHNlcnZlcjogRmFzdGlmeUluc3RhbmNlKSB7XG4gIGF3YWl0IGFpQ2xpZW50LmluaXQoKTtcblxuICBzZXJ2ZXIucG9zdChcIi9hcGkvYWkvZml4dHVyZS9jaGF0XCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgIGNvbnN0IHsgbWVzc2FnZXMsIGZpeHR1cmVSZWNvcmRzIH0gPVxuICAgICAgLyogU0FGRVRZOiBVSSDrj4TqtazsnZggWm9kIOyeheugpSDsiqTtgqTrp4jqsIAg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyByZXF1ZXN0LmJvZHkgYXMge1xuICAgICAgICBtZXNzYWdlczogVUlNZXNzYWdlW107XG4gICAgICAgIGZpeHR1cmVSZWNvcmRzPzogRml4dHVyZVJlY29yZFtdO1xuICAgICAgfTtcblxuICAgIGlmICghZml4dHVyZVJlY29yZHMgfHwgZml4dHVyZVJlY29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5maXh0dXJlUmVjb3JkUmVxdWlyZWRcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGFpQ2xpZW50LmhhbmRsZUZpeHR1cmUoYXdhaXQgY29udmVydFRvTW9kZWxNZXNzYWdlcyhtZXNzYWdlcyksIGZpeHR1cmVSZWNvcmRzKTtcbiAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC50b1VJTWVzc2FnZVN0cmVhbVJlc3BvbnNlKCk7XG5cbiAgICAvLyBhaSA37J2YIFJlc3BvbnNlLmhlYWRlcnPripQgSGVhZGVycyDsnbjsiqTthLTsiqTrnbwgZW50cmllcygp66GcIO2SgOyWtOyVvCBOb2RlIOydkeuLtSDtl6TrjZTroZwg7KCE64us65Cc64ukXG4gICAgcmVwbHkucmF3LndyaXRlSGVhZChyZXNwb25zZS5zdGF0dXMsIE9iamVjdC5mcm9tRW50cmllcyhyZXNwb25zZS5oZWFkZXJzLmVudHJpZXMoKSkpO1xuXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkpIHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICBpZiAoZG9uZSkgYnJlYWs7XG4gICAgICAgIHJlcGx5LnJhdy53cml0ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVwbHkucmF3LmVuZCgpO1xuICAgIHJldHVybiByZXBseTtcbiAgfSk7XG5cbiAgLy8gRW50aXR5L0VudW0g7IOd7ISx7JqpIEFJIENoYXQgU3RyZWFtXG4gIHNlcnZlci5wb3N0KFwiL2FwaS9haS9lbnRpdHkvY2hhdFwiLCBhc3luYyAocmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPVxuICAgICAgLyogU0FGRVRZOiBVSSDrj4TqtazsnZggWm9kIOyeheugpSDsiqTtgqTrp4jqsIAg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyByZXF1ZXN0LmJvZHkgYXMge1xuICAgICAgICBtZXNzYWdlczogVUlNZXNzYWdlW107XG4gICAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYWlDbGllbnQuaGFuZGxlRW50aXR5KGF3YWl0IGNvbnZlcnRUb01vZGVsTWVzc2FnZXMobWVzc2FnZXMpKTtcbiAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC50b1VJTWVzc2FnZVN0cmVhbVJlc3BvbnNlKCk7XG5cbiAgICAvLyBhaSA37J2YIFJlc3BvbnNlLmhlYWRlcnPripQgSGVhZGVycyDsnbjsiqTthLTsiqTrnbwgZW50cmllcygp66GcIO2SgOyWtOyVvCBOb2RlIOydkeuLtSDtl6TrjZTroZwg7KCE64us65Cc64ukXG4gICAgcmVwbHkucmF3LndyaXRlSGVhZChyZXNwb25zZS5zdGF0dXMsIE9iamVjdC5mcm9tRW50cmllcyhyZXNwb25zZS5oZWFkZXJzLmVudHJpZXMoKSkpO1xuXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkpIHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICBpZiAoZG9uZSkgYnJlYWs7XG4gICAgICAgIHJlcGx5LnJhdy53cml0ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVwbHkucmF3LmVuZCgpO1xuICAgIHJldHVybiByZXBseTtcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQVNBLGVBQXNCLFNBQVMsUUFBeUI7Q0FDdEQsTUFBTSxTQUFTLEtBQUs7Q0FFcEIsT0FBTyxLQUFLLHdCQUF3QixPQUFPLFNBQVMsVUFBVTtFQUM1RCxNQUFNLEVBQUUsVUFBVSxtQkFDZ0MsUUFBUTtFQUsxRCxJQUFJLENBQUMsa0JBQWtCLGVBQWUsV0FBVyxHQUMvQyxNQUFNLElBQUksb0JBQW9CLEdBQUcsb0NBQW9DLENBQUM7RUFJeEUsTUFBTSxXQURTLFNBQVMsY0FBYyxNQUFNLHVCQUF1QixRQUFRLEdBQUcsY0FDN0QsQ0FBQSxDQUFPLDBCQUEwQjtFQUdsRCxNQUFNLElBQUksVUFBVSxTQUFTLFFBQVEsT0FBTyxZQUFZLFNBQVMsUUFBUSxRQUFRLENBQUMsQ0FBQztFQUVuRixJQUFJLFNBQVMsTUFBTTtHQUNqQixNQUFNLFNBQVMsU0FBUyxLQUFLLFVBQVU7R0FDdkMsT0FBTyxNQUFNO0lBQ1gsTUFBTSxFQUFFLE1BQU0sVUFBVSxNQUFNLE9BQU8sS0FBSztJQUMxQyxJQUFJLE1BQU07SUFDVixNQUFNLElBQUksTUFBTSxLQUFLO0dBQ3ZCO0VBQ0Y7RUFFQSxNQUFNLElBQUksSUFBSTtFQUNkLE9BQU87Q0FDVCxDQUFDO0NBR0QsT0FBTyxLQUFLLHVCQUF1QixPQUFPLFNBQVMsVUFBVTtFQUMzRCxNQUFNLEVBQUUsYUFDMEMsUUFBUTtFQUsxRCxNQUFNLFdBRFMsU0FBUyxhQUFhLE1BQU0sdUJBQXVCLFFBQVEsQ0FDekQsQ0FBQSxDQUFPLDBCQUEwQjtFQUdsRCxNQUFNLElBQUksVUFBVSxTQUFTLFFBQVEsT0FBTyxZQUFZLFNBQVMsUUFBUSxRQUFRLENBQUMsQ0FBQztFQUVuRixJQUFJLFNBQVMsTUFBTTtHQUNqQixNQUFNLFNBQVMsU0FBUyxLQUFLLFVBQVU7R0FDdkMsT0FBTyxNQUFNO0lBQ1gsTUFBTSxFQUFFLE1BQU0sVUFBVSxNQUFNLE9BQU8sS0FBSztJQUMxQyxJQUFJLE1BQU07SUFDVixNQUFNLElBQUksTUFBTSxLQUFLO0dBQ3ZCO0VBQ0Y7RUFFQSxNQUFNLElBQUksSUFBSTtFQUNkLE9BQU87Q0FDVCxDQUFDO0FBQ0g7O0NBL0QrQixRQUFBO0NBQ2tDLG1CQUFBO0NBRTNCLGVBQUEifQ==
@@ -4,8 +4,8 @@ declare class AIClient {
4
4
  private model;
5
5
  private aiSdk;
6
6
  init(): Promise<void>;
7
- handleFixture(messages: ModelMessage[], fixtureRecords: FixtureRecord[]): StreamTextResult<any, any>;
8
- handleEntity(messages: ModelMessage[]): StreamTextResult<any, any>;
7
+ handleFixture(messages: ModelMessage[], fixtureRecords: FixtureRecord[]): StreamTextResult<any, any, any>;
8
+ handleEntity(messages: ModelMessage[]): StreamTextResult<any, any, any>;
9
9
  }
10
10
  export declare const aiClient: AIClient;
11
11
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"ai-client.d.ts","sourceRoot":"","sources":["../../src/ui/ai-client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,IAAI,CAAC;AAWlF,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAarE,cAAM,QAAQ;IACZ,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,KAAK,CAIG;IAEV,IAAI,kBAYT;IAED,aAAa,CACX,QAAQ,EAAE,YAAY,EAAE,EACxB,cAAc,EAAE,aAAa,EAAE,GAC9B,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAuM5B;IAED,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAmRjE;CACF;AAiDD,eAAO,MAAM,QAAQ,UAAiB,CAAC"}
1
+ {"version":3,"file":"ai-client.d.ts","sourceRoot":"","sources":["../../src/ui/ai-client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsB,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,IAAI,CAAC;AAWlF,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAarE,cAAM,QAAQ;IACZ,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,KAAK,CAIG;IAEV,IAAI,kBAYT;IAED,aAAa,CACX,QAAQ,EAAE,YAAY,EAAE,EACxB,cAAc,EAAE,aAAa,EAAE,GAC9B,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAuMjC;IAED,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAmRtE;CACF;AAiDD,eAAO,MAAM,QAAQ,UAAiB,CAAC"}