sonamu 0.7.53 → 0.8.0

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 (271) hide show
  1. package/dist/api/config.d.ts +9 -1
  2. package/dist/api/config.d.ts.map +1 -1
  3. package/dist/api/config.js +1 -1
  4. package/dist/api/sonamu.d.ts +21 -1
  5. package/dist/api/sonamu.d.ts.map +1 -1
  6. package/dist/api/sonamu.js +159 -65
  7. package/dist/auth/plugins/entity-definitions/anonymous.d.ts +10 -0
  8. package/dist/auth/plugins/entity-definitions/anonymous.d.ts.map +1 -0
  9. package/dist/auth/plugins/entity-definitions/anonymous.js +23 -0
  10. package/dist/auth/plugins/entity-definitions/api-key.d.ts +9 -0
  11. package/dist/auth/plugins/entity-definitions/api-key.d.ts.map +1 -0
  12. package/dist/auth/plugins/entity-definitions/api-key.js +199 -0
  13. package/dist/auth/plugins/entity-definitions/index.d.ts +6 -0
  14. package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
  15. package/dist/auth/plugins/entity-definitions/index.js +20 -2
  16. package/dist/auth/plugins/entity-definitions/jwt.d.ts +9 -0
  17. package/dist/auth/plugins/entity-definitions/jwt.d.ts.map +1 -0
  18. package/dist/auth/plugins/entity-definitions/jwt.js +67 -0
  19. package/dist/auth/plugins/entity-definitions/organization.d.ts +9 -0
  20. package/dist/auth/plugins/entity-definitions/organization.d.ts.map +1 -0
  21. package/dist/auth/plugins/entity-definitions/organization.js +424 -0
  22. package/dist/auth/plugins/entity-definitions/passkey.d.ts +10 -0
  23. package/dist/auth/plugins/entity-definitions/passkey.d.ts.map +1 -0
  24. package/dist/auth/plugins/entity-definitions/passkey.js +129 -0
  25. package/dist/auth/plugins/entity-definitions/sso.d.ts +10 -0
  26. package/dist/auth/plugins/entity-definitions/sso.d.ts.map +1 -0
  27. package/dist/auth/plugins/entity-definitions/sso.js +110 -0
  28. package/dist/auth/plugins/entity-definitions/types.d.ts +1 -1
  29. package/dist/auth/plugins/entity-definitions/types.d.ts.map +1 -1
  30. package/dist/auth/plugins/entity-definitions/types.js +1 -1
  31. package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
  32. package/dist/auth/plugins/wrappers/admin.js +2 -4
  33. package/dist/auth/plugins/wrappers/anonymous.d.ts +18 -0
  34. package/dist/auth/plugins/wrappers/anonymous.d.ts.map +1 -0
  35. package/dist/auth/plugins/wrappers/anonymous.js +26 -0
  36. package/dist/auth/plugins/wrappers/api-key.d.ts +18 -0
  37. package/dist/auth/plugins/wrappers/api-key.d.ts.map +1 -0
  38. package/dist/auth/plugins/wrappers/api-key.js +38 -0
  39. package/dist/auth/plugins/wrappers/index.d.ts +6 -0
  40. package/dist/auth/plugins/wrappers/index.d.ts.map +1 -1
  41. package/dist/auth/plugins/wrappers/index.js +7 -1
  42. package/dist/auth/plugins/wrappers/jwt.d.ts +18 -0
  43. package/dist/auth/plugins/wrappers/jwt.d.ts.map +1 -0
  44. package/dist/auth/plugins/wrappers/jwt.js +30 -0
  45. package/dist/auth/plugins/wrappers/organization.d.ts +18 -0
  46. package/dist/auth/plugins/wrappers/organization.d.ts.map +1 -0
  47. package/dist/auth/plugins/wrappers/organization.js +67 -0
  48. package/dist/auth/plugins/wrappers/passkey.d.ts +18 -0
  49. package/dist/auth/plugins/wrappers/passkey.d.ts.map +1 -0
  50. package/dist/auth/plugins/wrappers/passkey.js +32 -0
  51. package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
  52. package/dist/auth/plugins/wrappers/phone-number.js +2 -4
  53. package/dist/auth/plugins/wrappers/sso.d.ts +853 -0
  54. package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -0
  55. package/dist/auth/plugins/wrappers/sso.js +36 -0
  56. package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
  57. package/dist/auth/plugins/wrappers/two-factor.js +2 -4
  58. package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
  59. package/dist/auth/plugins/wrappers/username.js +2 -4
  60. package/dist/bin/build-config.d.ts +2 -2
  61. package/dist/bin/build-config.js +6 -7
  62. package/dist/bin/cli.js +417 -32
  63. package/dist/bin/fixture.d.ts +27 -0
  64. package/dist/bin/fixture.d.ts.map +1 -0
  65. package/dist/bin/fixture.js +245 -0
  66. package/dist/cache/decorator.d.ts +4 -3
  67. package/dist/cache/decorator.d.ts.map +1 -1
  68. package/dist/cache/decorator.js +5 -4
  69. package/dist/cone/cone-generator.d.ts +33 -0
  70. package/dist/cone/cone-generator.d.ts.map +1 -0
  71. package/dist/cone/cone-generator.js +286 -0
  72. package/dist/database/_batch_update.d.ts.map +1 -1
  73. package/dist/database/_batch_update.js +16 -2
  74. package/dist/database/puri-subset.test-d.js +1 -1
  75. package/dist/database/puri-subset.types.d.ts +1 -1
  76. package/dist/database/puri-subset.types.d.ts.map +1 -1
  77. package/dist/database/puri-subset.types.js +1 -1
  78. package/dist/database/puri.d.ts +4 -0
  79. package/dist/database/puri.d.ts.map +1 -1
  80. package/dist/database/puri.js +20 -2
  81. package/dist/database/upsert-builder.d.ts.map +1 -1
  82. package/dist/database/upsert-builder.js +19 -3
  83. package/dist/dict/en.d.ts +15 -0
  84. package/dist/dict/en.d.ts.map +1 -1
  85. package/dist/dict/en.js +2 -1
  86. package/dist/dict/ko.d.ts +15 -0
  87. package/dist/dict/ko.d.ts.map +1 -1
  88. package/dist/dict/ko.js +2 -1
  89. package/dist/dict/rc-keys.d.ts +28 -0
  90. package/dist/dict/rc-keys.d.ts.map +1 -1
  91. package/dist/dict/rc-keys.js +31 -1
  92. package/dist/dict/sd.d.ts.map +1 -1
  93. package/dist/dict/sd.js +20 -4
  94. package/dist/entity/entity-manager.d.ts +298 -2
  95. package/dist/entity/entity-manager.d.ts.map +1 -1
  96. package/dist/entity/entity-manager.js +4 -1
  97. package/dist/entity/entity-template-cone.d.ts +14 -0
  98. package/dist/entity/entity-template-cone.d.ts.map +1 -0
  99. package/dist/entity/entity-template-cone.js +222 -0
  100. package/dist/entity/entity.d.ts +47 -2
  101. package/dist/entity/entity.d.ts.map +1 -1
  102. package/dist/entity/entity.js +161 -14
  103. package/dist/ssr/renderer.js +3 -3
  104. package/dist/syncer/api-parser.js +12 -1
  105. package/dist/syncer/checksum.d.ts +0 -14
  106. package/dist/syncer/checksum.d.ts.map +1 -1
  107. package/dist/syncer/checksum.js +1 -23
  108. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  109. package/dist/syncer/syncer-actions.js +8 -2
  110. package/dist/syncer/syncer.d.ts +1 -1
  111. package/dist/syncer/syncer.d.ts.map +1 -1
  112. package/dist/syncer/syncer.js +17 -10
  113. package/dist/tasks/workflow-manager.d.ts +13 -1
  114. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  115. package/dist/tasks/workflow-manager.js +18 -1
  116. package/dist/template/entity-converter.js +4 -4
  117. package/dist/template/helpers.d.ts +10 -0
  118. package/dist/template/helpers.d.ts.map +1 -1
  119. package/dist/template/helpers.js +48 -1
  120. package/dist/template/implementations/entry-server.template.d.ts +1 -1
  121. package/dist/template/implementations/entry-server.template.js +7 -2
  122. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  123. package/dist/template/implementations/generated.template.js +5 -1
  124. package/dist/template/implementations/generated_http.template.d.ts +1 -0
  125. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  126. package/dist/template/implementations/generated_http.template.js +6 -2
  127. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  128. package/dist/template/implementations/generated_sso.template.js +29 -8
  129. package/dist/template/implementations/queries.template.d.ts.map +1 -1
  130. package/dist/template/implementations/queries.template.js +9 -1
  131. package/dist/template/implementations/sd.template.d.ts +1 -1
  132. package/dist/template/implementations/sd.template.d.ts.map +1 -1
  133. package/dist/template/implementations/sd.template.js +28 -4
  134. package/dist/template/implementations/services.template.d.ts.map +1 -1
  135. package/dist/template/implementations/services.template.js +12 -12
  136. package/dist/template/implementations/view_form.template.d.ts +11 -7
  137. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  138. package/dist/template/implementations/view_form.template.js +97 -87
  139. package/dist/template/implementations/view_list.template.d.ts +3 -3
  140. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  141. package/dist/template/implementations/view_list.template.js +115 -109
  142. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
  143. package/dist/template/implementations/view_search_input.template.js +18 -14
  144. package/dist/template/zod-converter.d.ts.map +1 -1
  145. package/dist/template/zod-converter.js +95 -7
  146. package/dist/testing/_relation-graph.js +1 -1
  147. package/dist/testing/data-explorer.d.ts +61 -0
  148. package/dist/testing/data-explorer.d.ts.map +1 -0
  149. package/dist/testing/data-explorer.js +274 -0
  150. package/dist/testing/faker-mappings.d.ts +20 -0
  151. package/dist/testing/faker-mappings.d.ts.map +1 -0
  152. package/dist/testing/faker-mappings.js +421 -0
  153. package/dist/testing/fixture-generator.d.ts +161 -0
  154. package/dist/testing/fixture-generator.d.ts.map +1 -0
  155. package/dist/testing/fixture-generator.js +954 -0
  156. package/dist/testing/fixture-manager.d.ts +6 -1
  157. package/dist/testing/fixture-manager.d.ts.map +1 -1
  158. package/dist/testing/fixture-manager.js +72 -4
  159. package/dist/testing/index.d.ts +3 -0
  160. package/dist/testing/index.d.ts.map +1 -1
  161. package/dist/testing/index.js +4 -1
  162. package/dist/types/types.d.ts +1520 -26
  163. package/dist/types/types.d.ts.map +1 -1
  164. package/dist/types/types.js +136 -22
  165. package/dist/ui/ai-client.d.ts.map +1 -1
  166. package/dist/ui/ai-client.js +9 -4
  167. package/dist/ui/api.d.ts.map +1 -1
  168. package/dist/ui/api.js +303 -24
  169. package/dist/ui-web/assets/index-CsUr-_pV.js +254 -0
  170. package/dist/ui-web/assets/index-T42zzs1K.css +1 -0
  171. package/dist/ui-web/index.html +2 -2
  172. package/dist/utils/fs-utils.d.ts +2 -1
  173. package/dist/utils/fs-utils.d.ts.map +1 -1
  174. package/dist/utils/fs-utils.js +14 -3
  175. package/package.json +19 -11
  176. package/src/api/config.ts +12 -1
  177. package/src/api/sonamu.ts +179 -65
  178. package/src/auth/plugins/entity-definitions/anonymous.ts +17 -0
  179. package/src/auth/plugins/entity-definitions/api-key.ts +93 -0
  180. package/src/auth/plugins/entity-definitions/index.ts +18 -0
  181. package/src/auth/plugins/entity-definitions/jwt.ts +35 -0
  182. package/src/auth/plugins/entity-definitions/organization.ts +215 -0
  183. package/src/auth/plugins/entity-definitions/passkey.ts +64 -0
  184. package/src/auth/plugins/entity-definitions/sso.ts +62 -0
  185. package/src/auth/plugins/entity-definitions/types.ts +11 -1
  186. package/src/auth/plugins/wrappers/admin.ts +1 -3
  187. package/src/auth/plugins/wrappers/anonymous.ts +30 -0
  188. package/src/auth/plugins/wrappers/api-key.ts +42 -0
  189. package/src/auth/plugins/wrappers/index.ts +6 -0
  190. package/src/auth/plugins/wrappers/jwt.ts +34 -0
  191. package/src/auth/plugins/wrappers/organization.ts +73 -0
  192. package/src/auth/plugins/wrappers/passkey.ts +36 -0
  193. package/src/auth/plugins/wrappers/phone-number.ts +1 -3
  194. package/src/auth/plugins/wrappers/sso.ts +40 -0
  195. package/src/auth/plugins/wrappers/two-factor.ts +1 -3
  196. package/src/auth/plugins/wrappers/username.ts +1 -3
  197. package/src/bin/build-config.ts +6 -6
  198. package/src/bin/cli.ts +452 -31
  199. package/src/bin/fixture.ts +302 -0
  200. package/src/cache/decorator.ts +4 -3
  201. package/src/cone/cone-generator.ts +363 -0
  202. package/src/database/_batch_update.ts +11 -0
  203. package/src/database/puri-subset.test-d.ts +13 -13
  204. package/src/database/puri-subset.types.ts +1 -1
  205. package/src/database/puri.ts +43 -1
  206. package/src/database/upsert-builder.ts +16 -2
  207. package/src/dict/en.ts +1 -0
  208. package/src/dict/ko.ts +1 -0
  209. package/src/dict/rc-keys.ts +32 -0
  210. package/src/dict/sd.ts +23 -3
  211. package/src/entity/entity-manager.ts +4 -0
  212. package/src/entity/entity-template-cone.ts +298 -0
  213. package/src/entity/entity.ts +189 -13
  214. package/src/shared/app.shared.ts.txt +5 -0
  215. package/src/shared/web.shared.ts.txt +9 -5
  216. package/src/skills/project/README.md +21 -0
  217. package/src/skills/project/architecture.md +373 -0
  218. package/src/skills/project/business-logic.md +270 -0
  219. package/src/skills/project/requirements.md +160 -0
  220. package/src/skills/sonamu/SKILL.md +168 -3
  221. package/src/skills/sonamu/api.md +102 -0
  222. package/src/skills/sonamu/database.md +220 -1
  223. package/src/skills/sonamu/entity-relations.md +89 -1
  224. package/src/skills/sonamu/fixture-cli.md +501 -0
  225. package/src/skills/sonamu/frontend.md +214 -0
  226. package/src/skills/sonamu/i18n.md +95 -0
  227. package/src/skills/sonamu/model.md +153 -0
  228. package/src/skills/sonamu/project-init.md +178 -8
  229. package/src/skills/sonamu/scaffolding.md +112 -0
  230. package/src/skills/sonamu/subset.md +9 -3
  231. package/src/skills/sonamu/testing.md +287 -2
  232. package/src/skills/sonamu/workflow.md +70 -5
  233. package/src/ssr/renderer.ts +2 -2
  234. package/src/syncer/api-parser.ts +12 -0
  235. package/src/syncer/checksum.ts +0 -38
  236. package/src/syncer/syncer-actions.ts +7 -1
  237. package/src/syncer/syncer.ts +16 -5
  238. package/src/tasks/workflow-manager.ts +29 -8
  239. package/src/template/entity-converter.ts +3 -3
  240. package/src/template/helpers.ts +49 -0
  241. package/src/template/implementations/entry-server.template.ts +1 -1
  242. package/src/template/implementations/generated.template.ts +4 -0
  243. package/src/template/implementations/generated_http.template.ts +1 -0
  244. package/src/template/implementations/generated_sso.template.ts +40 -11
  245. package/src/template/implementations/queries.template.ts +8 -0
  246. package/src/template/implementations/sd.template.ts +22 -3
  247. package/src/template/implementations/services.template.ts +11 -10
  248. package/src/template/implementations/view_form.template.ts +111 -101
  249. package/src/template/implementations/view_list.template.ts +120 -119
  250. package/src/template/implementations/view_search_input.template.ts +17 -13
  251. package/src/template/zod-converter.ts +103 -6
  252. package/src/testing/_relation-graph.ts +1 -1
  253. package/src/testing/data-explorer.ts +427 -0
  254. package/src/testing/faker-mappings.ts +434 -0
  255. package/src/testing/fixture-generator.ts +1166 -0
  256. package/src/testing/fixture-manager.ts +91 -6
  257. package/src/testing/index.ts +3 -0
  258. package/src/types/types.ts +222 -26
  259. package/src/ui/ai-client.ts +9 -1
  260. package/src/ui/api.ts +429 -23
  261. package/src/utils/fs-utils.ts +14 -1
  262. package/dist/template/implementations/view_enums_select.template.d.ts +0 -17
  263. package/dist/template/implementations/view_enums_select.template.d.ts.map +0 -1
  264. package/dist/template/implementations/view_enums_select.template.js +0 -62
  265. package/dist/template/implementations/view_id_async_select.template.d.ts +0 -17
  266. package/dist/template/implementations/view_id_async_select.template.d.ts.map +0 -1
  267. package/dist/template/implementations/view_id_async_select.template.js +0 -125
  268. package/dist/ui-web/assets/index-Bd_2AkLb.css +0 -1
  269. package/dist/ui-web/assets/index-BpSbhQWo.js +0 -225
  270. package/src/template/implementations/view_enums_select.template.ts +0 -65
  271. package/src/template/implementations/view_id_async_select.template.ts +0 -139
@@ -1,8 +1,7 @@
1
- import inflection from "inflection";
2
1
  import { unique } from "radashi";
3
2
  import { z } from "zod";
4
3
  import { EntityManager } from "../../entity/entity-manager.js";
5
- import { getEnumInfoFromColName, getRelationPropFromColName } from "../helpers.js";
4
+ import { getEnumInfoFromColName, getRelationNameFromColumnName, getRelationPropFromColName } from "../helpers.js";
6
5
  import { Template } from "../template.js";
7
6
  export class Template__view_form extends Template {
8
7
  constructor(){
@@ -35,25 +34,40 @@ export class Template__view_form extends Template {
35
34
  }
36
35
  renderColumnImport(entityId, col) {
37
36
  if (col.renderType === "enums") {
38
- const { id, targetEntityNames } = getEnumInfoFromColName(entityId, col.name);
39
- const componentId = `${id}Select`;
40
- return `import { ${componentId} } from "@/components/${targetEntityNames.fs}/${componentId}";`;
41
- } else if (col.renderType === "number-fk_id") {
37
+ const { id } = getEnumInfoFromColName(entityId, col.name);
38
+ return {
39
+ type: "enum",
40
+ enumId: id
41
+ };
42
+ } else if (col.renderType === "number-fk_id" || col.renderType === "string-fk_id") {
42
43
  try {
43
44
  const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
44
- const targetNames = EntityManager.getNamesFromId(relProp.with);
45
- const componentId = `${relProp.with}IdAsyncSelect`;
46
- return `import { ${componentId} } from "@/components/${targetNames.fs}/${componentId}";`;
45
+ return {
46
+ type: "fk",
47
+ entityId: relProp.with
48
+ };
49
+ } catch {
50
+ return null;
51
+ }
52
+ } else if (col.renderType === "array" && col.name.endsWith("_ids")) {
53
+ // ManyToMany relation의 FK 배열
54
+ try {
55
+ const baseName = col.name.replace(/_ids$/, "");
56
+ const relProp = getRelationPropFromColName(entityId, baseName);
57
+ return {
58
+ type: "fk",
59
+ entityId: relProp.with
60
+ };
47
61
  } catch {
48
- return "";
62
+ return null;
49
63
  }
50
- } else {
51
- throw new Error(`렌더 불가능한 임포트 ${col.name} ${col.renderType}`);
52
64
  }
65
+ return null;
53
66
  }
54
- renderColumn(entityId, col, names) {
67
+ renderColumn(entityId, col) {
55
68
  const regExpr = `{...register("${col.name}")}`;
56
- const placeholder = `{SD("entity.${entityId}.${col.name}")}`;
69
+ const placeholderName = getRelationNameFromColumnName(entityId, col.name);
70
+ const placeholder = `{SD("entity.${entityId}.${placeholderName}")}`;
57
71
  switch(col.renderType){
58
72
  case "string-plain":
59
73
  if (col.zodType instanceof z.ZodString && (col.zodType.maxLength ?? 0) <= 256) {
@@ -67,6 +81,7 @@ export class Template__view_form extends Template {
67
81
  ${regExpr}
68
82
  />`;
69
83
  case "number-id":
84
+ case "string-id":
70
85
  return `<input type="hidden" ${regExpr} />`;
71
86
  case "number-plain":
72
87
  return `<Input type="number" className="h-8 text-xs bg-white" placeholder=${placeholder} ${regExpr} />`;
@@ -90,26 +105,44 @@ export class Template__view_form extends Template {
90
105
  />`;
91
106
  case "enums":
92
107
  try {
93
- let enumId;
94
- if (col.name === "orderBy") {
95
- enumId = `${names.capital}${inflection.camelize(col.name)}Select`;
96
- } else {
97
- const { id } = getEnumInfoFromColName(entityId, col.name);
98
- enumId = `${id}Select`;
99
- }
100
- return `<${enumId} ${regExpr} ${col.optional || col.nullable ? "clearable" : ""} />`;
108
+ const { id } = getEnumInfoFromColName(entityId, col.name);
109
+ return `<EnumSelect
110
+ enum={${id}}
111
+ labels={${id}Label}
112
+ ${regExpr}
113
+ />`;
101
114
  } catch {
102
115
  return `<Input className="h-8 text-xs bg-white" ${regExpr} />`;
103
116
  }
104
117
  case "number-fk_id":
118
+ case "string-fk_id":
105
119
  try {
106
120
  const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
107
- const fkId = `${relProp.with}IdAsyncSelect`;
108
- return `<${fkId} subset="A" ${regExpr} ${col.optional || col.nullable ? "clearable" : ""} className="h-8 text-xs" />`;
121
+ return `<IdAsyncSelect
122
+ config={${relProp.with}AsyncIdConfig}
123
+ subset="A"
124
+ ${regExpr}
125
+ />`;
109
126
  } catch {
110
127
  return `<Input type="number" className="h-8 text-xs bg-white" placeholder=${placeholder} ${regExpr} />`;
111
128
  }
112
129
  case "array":
130
+ // ManyToMany relation의 FK 배열인지 확인
131
+ if (col.name.endsWith("_ids")) {
132
+ try {
133
+ const baseName = col.name.replace(/_ids$/, "");
134
+ const relProp = getRelationPropFromColName(entityId, baseName);
135
+ return `<IdAsyncSelect
136
+ config={${relProp.with}AsyncIdConfig}
137
+ subset="A"
138
+ multiple
139
+ ${regExpr}
140
+ />`;
141
+ } catch {
142
+ return `<Input className="h-8 text-xs bg-white" placeholder="${col.name}" ${regExpr} />`;
143
+ }
144
+ }
145
+ return `<Input className="h-8 text-xs bg-white" placeholder="${col.name}" ${regExpr} />`;
113
146
  case "object":
114
147
  return `<Input className="h-8 text-xs bg-white" placeholder="${col.name}" ${regExpr} />`;
115
148
  default:
@@ -170,58 +203,34 @@ export class Template__view_form extends Template {
170
203
  return col;
171
204
  });
172
205
  const defaultValue = this.resolveDefaultValue(columns);
173
- // 프리 템플릿
174
- const preTemplates = columns.filter((col)=>{
175
- if (col.name === "id") {
176
- return false;
177
- } else if (col.name.endsWith("_id") || col.renderType === "number-id") {
206
+ // enum과 FK에 대한 import 정보 수집
207
+ const enumImports = new Set();
208
+ const fkConfigImports = new Set();
209
+ columns.forEach((col)=>{
210
+ if (col.renderType === "enums") {
178
211
  try {
179
- getRelationPropFromColName(entityId, col.name.replace("_id", ""));
180
- return true;
181
- } catch {
182
- return false;
183
- }
184
- } else if (col.renderType === "enums") {
212
+ const { id } = getEnumInfoFromColName(entityId, col.name);
213
+ enumImports.add(id);
214
+ } catch {}
215
+ } else if (col.renderType === "number-fk_id" || col.renderType === "string-fk_id") {
185
216
  try {
186
- getEnumInfoFromColName(entityId, col.name);
187
- return true;
188
- } catch {
189
- return false;
190
- }
191
- }
192
- return false;
193
- }).map((col)=>{
194
- let key;
195
- let targetMdId = entityId;
196
- let enumId;
197
- if (col.renderType === "enums") {
198
- key = "view_enums_select";
199
- const { targetEntityNames: targetMDNames, id } = getEnumInfoFromColName(entityId, col.name);
200
- targetMdId = targetMDNames.capital;
201
- enumId = id;
202
- } else {
203
- key = "view_id_async_select";
204
- const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
205
- targetMdId = relProp.with;
206
- }
207
- return {
208
- key: key,
209
- options: {
210
- entityId: targetMdId,
211
- node: col,
212
- enumId
213
- }
214
- };
215
- }).filter((preTemplate)=>{
216
- if (preTemplate.key === "view_id_async_select") {
217
+ const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
218
+ fkConfigImports.add(relProp.with);
219
+ } catch {}
220
+ } else if (col.renderType === "string-plain" && col.name.endsWith("_id") && col.name !== "id") {
221
+ // string FK 처리 (자신의 PK인 id는 제외)
217
222
  try {
218
- EntityManager.get(preTemplate.options.entityId);
219
- return true;
220
- } catch {
221
- return false;
222
- }
223
+ const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
224
+ fkConfigImports.add(relProp.with);
225
+ } catch {}
226
+ } else if (col.renderType === "array" && col.name.endsWith("_ids")) {
227
+ // ManyToMany relation의 FK 배열
228
+ try {
229
+ const baseName = col.name.replace(/_ids$/, "");
230
+ const relProp = getRelationPropFromColName(entityId, baseName);
231
+ fkConfigImports.add(relProp.with);
232
+ } catch {}
223
233
  }
224
- return true;
225
234
  });
226
235
  return {
227
236
  ...this.getTargetAndPath(names),
@@ -232,7 +241,7 @@ import {
232
241
  CardContent,
233
242
  CardHeader,
234
243
  CardTitle,
235
- Input,${columns.some((col)=>col.renderType === "string-plain" && col.zodType instanceof z.ZodString && (col.zodType.maxLength ?? 0) > 256) ? "\n Textarea," : ""}${columns.some((col)=>col.renderType === "enums") ? "\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue," : ""}${columns.some((col)=>col.renderType === "boolean") ? "\n Switch," : ""}${columns.some((col)=>[
244
+ Input,${columns.some((col)=>col.renderType === "string-plain" && col.zodType instanceof z.ZodString && (col.zodType.maxLength ?? 0) > 256) ? "\n Textarea," : ""}${columns.some((col)=>col.renderType === "enums") ? "\n EnumSelect," : ""}${columns.some((col)=>col.renderType === "number-fk_id" || col.renderType === "string-fk_id" || col.renderType === "array" && col.name.endsWith("_ids")) ? "\n IdAsyncSelect," : ""}${columns.some((col)=>col.renderType === "boolean") ? "\n Switch," : ""}${columns.some((col)=>[
236
245
  "json-sonamufile",
237
246
  "json-sonamufile-array"
238
247
  ].includes(col.renderType)) ? "\n FileInput," : ""}${columns.some((col)=>[
@@ -256,13 +265,7 @@ import type { ${names.capital}SubsetA } from "@/services/sonamu.generated";${col
256
265
  }
257
266
  })).filter(Boolean).join(", ") + ' } from "@/services/sonamu.generated";' : ""}
258
267
  import { defaultCatch } from "@/services/sonamu.shared";
259
- import { ${names.capital}SaveParams } from "@/services/${names.fs}/${names.fs}.types";
260
- ${unique(columns.filter((col)=>[
261
- "number-fk_id",
262
- "enums"
263
- ].includes(col.renderType)).map((col)=>{
264
- return this.renderColumnImport(entityId, col);
265
- })).join("\n")}
268
+ import { ${names.capital}SaveParams } from "@/services/${names.fs}/${names.fs}.types";${fkConfigImports.size > 0 ? `\nimport { ${Array.from(fkConfigImports).map((entity)=>`${entity}AsyncIdConfig`).join(", ")} } from "@/services/services.generated";` : ""}
266
269
  import { SD } from "@/i18n/sd.generated";
267
270
 
268
271
  import ArrowLeftIcon from "~icons/lucide/arrow-left";
@@ -340,8 +343,15 @@ ${(()=>{
340
343
  ...prevForm,
341
344
  ...row,${(()=>{
342
345
  // relation 필드들을 찾아서 변환 코드 생성
343
- const relationFields = columns.filter((col)=>col.renderType === "number-fk_id").map((col)=>{
344
- const relationName = col.name.replace(/_id$/, "");
346
+ // number FK, string FK (자신의 PK 제외), ManyToMany FK 배열만 필터링
347
+ const relationFields = columns.filter((col)=>col.renderType === "number-fk_id" || col.renderType === "string-fk_id" || col.renderType === "array" && col.name.endsWith("_ids")).map((col)=>{
348
+ // ManyToMany(array) 처리
349
+ if (col.renderType === "array" && col.name.endsWith("_ids")) {
350
+ const relationName = getRelationNameFromColumnName(entityId, col.name);
351
+ return `\n ${col.name}: row.${relationName}?.map((r) => r.id) ?? [],`;
352
+ }
353
+ // FK(number, string) 처리
354
+ const relationName = getRelationNameFromColumnName(entityId, col.name);
345
355
  if (col.nullable) {
346
356
  return `\n ${col.name}: row.${relationName}?.id ?? null,`;
347
357
  } else {
@@ -443,10 +453,11 @@ ${columns.filter((col)=>col.name !== "created_at").map((col)=>{
443
453
  }
444
454
  return col.label;
445
455
  })();
456
+ const labelName = getRelationNameFromColumnName(entityId, col.name);
446
457
  return ` {/* ${label} */}
447
458
  <div className="space-y-2">
448
- <label className="block text-xs mb-1 text-gray-600">{SD("entity.${entityId}.${col.name}")}</label>
449
- ${this.renderColumn(entityId, col, names)}
459
+ <label className="block text-xs mb-1 text-gray-600">{SD("entity.${entityId}.${labelName}")}</label>
460
+ ${this.renderColumn(entityId, col)}
450
461
  </div>`;
451
462
  }).join("\n\n")}
452
463
 
@@ -476,10 +487,9 @@ ${columns.filter((col)=>col.name !== "created_at").map((col)=>{
476
487
  );
477
488
  }
478
489
  `.trim(),
479
- importKeys: [],
480
- preTemplates
490
+ importKeys: []
481
491
  };
482
492
  }
483
493
  }
484
494
 
485
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19mb3JtLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFJlbmRlcmluZ05vZGUsIFRlbXBsYXRlS2V5LCBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGdldEVudW1JbmZvRnJvbUNvbE5hbWUsIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lIH0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyZWRUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX192aWV3X2Zvcm0gZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwidmlld19mb3JtXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvcm91dGVzL2FkbWluXCIsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc1BsdXJhbH0vZm9ybS50c3hgLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIFtcImVudGl0eS5jcmVhdGVcIiwgXCJlbnRpdHkuZWRpdFwiLCBcImNvbW1vbi5iYWNrVG9MaXN0XCIsIFwiZm9ybS5jcmVhdGVkQXRcIiwgXCJjb21tb24uc2F2ZVwiXTtcbiAgfVxuXG4gIHdyYXBGQyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgYDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+JHtsYWJlbCA/IGBcXG4gIDxMYWJlbD4ke2xhYmVsfTwvTGFiZWw+YCA6IFwiXCJ9YCxcbiAgICAgIGAgICR7Ym9keX1gLFxuICAgICAgYDwvZGl2PmAsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHdyYXBGRyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53cmFwRkMoYm9keSwgbGFiZWwpO1xuICB9XG5cbiAgcmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSkge1xuICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICBjb25zdCB7IGlkLCB0YXJnZXRFbnRpdHlOYW1lcyB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgY29uc3QgY29tcG9uZW50SWQgPSBgJHtpZH1TZWxlY3RgO1xuICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHt0YXJnZXRFbnRpdHlOYW1lcy5mc30vJHtjb21wb25lbnRJZH1cIjtgO1xuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChyZWxQcm9wLndpdGgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke3JlbFByb3Aud2l0aH1JZEFzeW5jU2VsZWN0YDtcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHt0YXJnZXROYW1lcy5mc30vJHtjb21wb25lbnRJZH1cIjtgO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOugjOuNlCDrtojqsIDriqXtlZwg7J6E7Y+s7Yq4ICR7Y29sLm5hbWV9ICR7Y29sLnJlbmRlclR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyQ29sdW1uKGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSwgbmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKTogc3RyaW5nIHtcbiAgICBjb25zdCByZWdFeHByID0gYHsuLi5yZWdpc3RlcihcIiR7Y29sLm5hbWV9XCIpfWA7XG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSBge1NEKFwiZW50aXR5LiR7ZW50aXR5SWR9LiR7Y29sLm5hbWV9XCIpfWA7XG5cbiAgICBzd2l0Y2ggKGNvbC5yZW5kZXJUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nLXBsYWluXCI6XG4gICAgICAgIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nICYmIChjb2wuem9kVHlwZS5tYXhMZW5ndGggPz8gMCkgPD0gMjU2KSB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYDxUZXh0YXJlYSBjbGFzc05hbWU9XCJ0ZXh0LXhzIGJnLXdoaXRlXCIgcm93cz17NH0gcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgICByZXR1cm4gYDxEYXRlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLWlkXCI6XG4gICAgICAgIHJldHVybiBgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItcGxhaW5cIjpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gYDxTd2l0Y2ggJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwianNvbi1zb25hbXVmaWxlXCI6XG4gICAgICAgIHJldHVybiBgPEZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRNb2RlPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlPVwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3U2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgY2FzZSBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiOlxuICAgICAgICByZXR1cm4gYDxGaWxlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1vZGU9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGU9XCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdTaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICBtYXhGaWxlcz17MTB9XG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgIGNhc2UgXCJlbnVtc1wiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBlbnVtSWQ6IHN0cmluZztcbiAgICAgICAgICBpZiAoY29sLm5hbWUgPT09IFwib3JkZXJCeVwiKSB7XG4gICAgICAgICAgICBlbnVtSWQgPSBgJHtuYW1lcy5jYXBpdGFsfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShjb2wubmFtZSl9U2VsZWN0YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgZW51bUlkID0gYCR7aWR9U2VsZWN0YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGA8JHtlbnVtSWR9ICR7cmVnRXhwcn0gJHtjb2wub3B0aW9uYWwgfHwgY29sLm51bGxhYmxlID8gXCJjbGVhcmFibGVcIiA6IFwiXCJ9IC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcIm51bWJlci1ma19pZFwiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgY29uc3QgZmtJZCA9IGAke3JlbFByb3Aud2l0aH1JZEFzeW5jU2VsZWN0YDtcbiAgICAgICAgICByZXR1cm4gYDwke2ZrSWR9IHN1YnNldD1cIkFcIiAke3JlZ0V4cHJ9ICR7XG4gICAgICAgICAgICBjb2wub3B0aW9uYWwgfHwgY29sLm51bGxhYmxlID8gXCJjbGVhcmFibGVcIiA6IFwiXCJcbiAgICAgICAgICB9IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzXCIgLz5gO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9XCIke2NvbC5uYW1lfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlRGVmYXVsdFZhbHVlKGNvbHVtbnM6IFJlbmRlcmluZ05vZGVbXSk6IG9iamVjdCB7XG4gICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wub3B0aW9uYWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlOiB1bmtub3duO1xuICAgICAgICBpZiAoY29sLm51bGxhYmxlID09PSB0cnVlKSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIpIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICAgICAgICB2YWx1ZSA9IE9iamVjdC5rZXlzKGNvbC56b2RUeXBlLmVudW0pWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouY29yZS4kWm9kU3RyaW5nKSB7XG4gICAgICAgICAgLy8gTk9URTogei5ab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWY66m0IHoudXJsKCksIHouZW1haWwoKSDrk7HsnZgg7YOA7J6F7JeQ7IScIOusuOygnOqwgCDsg53quLDrr4DroZwgei5jb3JlLiRab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWoXG4gICAgICAgICAgLy8gRklYTUU6IGVtYWls7J2064KYIHVybCDtg4DsnoUg65Ox7JeQIOuMgO2VnCDsspjrpqzqsIAg7ZWE7JqU7ZWoXG4gICAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRldGltZVwiKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFwibm93KClcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0W2NvbC5uYW1lXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxuICAgICk7XG4gIH1cblxuICBhc3luYyByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2Zvcm1cIl0pIHtcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIC8vIFBLIO2DgOyehSDqsJDsp4BcbiAgICBjb25zdCBwa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgY29uc3QgaWRUc1R5cGUgPSBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIiA/IFwic3RyaW5nXCIgOiBcIm51bWJlclwiO1xuICAgIGNvbnN0IGlkWm9kVHlwZSA9XG4gICAgICBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIiA/IFwiei5zdHJpbmcoKS5vcHRpb25hbCgpXCIgOiBcInoubnVtYmVyKCkub3B0aW9uYWwoKVwiO1xuXG4gICAgLy8gU2F2ZVBhcmFtcyDtg4DsnoXsnYQg66Gc65Oc7ZWY7JesIHNhdmVQYXJhbXNOb2RlIOyDneyEsVxuICAgIGNvbnN0IHsgbG9hZFR5cGVzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi8uLi9zeW5jZXIvbW9kdWxlLWxvYWRlclwiKTtcbiAgICBjb25zdCBsb2FkZWRUeXBlcyA9IGF3YWl0IGxvYWRUeXBlcygpO1xuICAgIGNvbnN0IFNhdmVQYXJhbXNab2RUeXBlID0gbG9hZGVkVHlwZXNbYCR7ZW50aXR5SWR9U2F2ZVBhcmFtc2BdO1xuXG4gICAgaWYgKCFTYXZlUGFyYW1zWm9kVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTYXZlUGFyYW1zIGZvciAke2VudGl0eUlkfSBub3QgZm91bmQuIERpZCB5b3UgcnVuICdzb25hbXUgc3luYyc/YCk7XG4gICAgfVxuXG4gICAgLy8gWm9kIO2DgOyeheydhCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmFxuICAgIGNvbnN0IHsgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vem9kLWNvbnZlcnRlclwiKTtcbiAgICBjb25zdCBzYXZlUGFyYW1zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoU2F2ZVBhcmFtc1pvZFR5cGUpO1xuXG4gICAgY29uc3QgY29sdW1ucyA9ICgoc2F2ZVBhcmFtc05vZGU/LmNoaWxkcmVuID8/IFtdKSBhcyBSZW5kZXJpbmdOb2RlW10pXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lICE9PSBcImlkXCIpXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcENhbmRpZGF0ZSA9IGVudGl0eS5wcm9wcy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IGNvbC5uYW1lKTtcbiAgICAgICAgY29sLmxhYmVsID0gcHJvcENhbmRpZGF0ZT8uZGVzYyA/PyBjb2wubGFiZWw7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRWYWx1ZShjb2x1bW5zKTtcblxuICAgIC8vIO2UhOumrCDthZztlIzrpr9cbiAgICBjb25zdCBwcmVUZW1wbGF0ZXM6IFJlbmRlcmVkVGVtcGxhdGVbXCJwcmVUZW1wbGF0ZXNcIl0gPSAoY29sdW1ucyBhcyBSZW5kZXJpbmdOb2RlW10pXG4gICAgICAuZmlsdGVyKChjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbC5uYW1lID09PSBcImlkXCIpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRcIikgfHwgY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWlkXCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgbGV0IGtleTogVGVtcGxhdGVLZXk7XG4gICAgICAgIGxldCB0YXJnZXRNZElkID0gZW50aXR5SWQ7XG4gICAgICAgIGxldCBlbnVtSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgICBrZXkgPSBcInZpZXdfZW51bXNfc2VsZWN0XCI7XG4gICAgICAgICAgY29uc3QgeyB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0TUROYW1lcywgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoXG4gICAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICAgIGNvbC5uYW1lLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGFyZ2V0TWRJZCA9IHRhcmdldE1ETmFtZXMuY2FwaXRhbDtcbiAgICAgICAgICBlbnVtSWQgPSBpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrZXkgPSBcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCI7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICB0YXJnZXRNZElkID0gcmVsUHJvcC53aXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXk6IGtleSBhcyBUZW1wbGF0ZUtleSxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBlbnRpdHlJZDogdGFyZ2V0TWRJZCxcbiAgICAgICAgICAgIG5vZGU6IGNvbCxcbiAgICAgICAgICAgIGVudW1JZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHByZVRlbXBsYXRlKSA9PiB7XG4gICAgICAgIGlmIChwcmVUZW1wbGF0ZS5rZXkgPT09IFwidmlld19pZF9hc3luY19zZWxlY3RcIikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBFbnRpdHlNYW5hZ2VyLmdldChwcmVUZW1wbGF0ZS5vcHRpb25zLmVudGl0eUlkKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcyksXG4gICAgICBib2R5OiBgXG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENhcmQsXG4gIENhcmRDb250ZW50LFxuICBDYXJkSGVhZGVyLFxuICBDYXJkVGl0bGUsXG4gIElucHV0LCR7Y29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1wbGFpblwiICYmIGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcgJiYgKGNvbC56b2RUeXBlLm1heExlbmd0aCA/PyAwKSA+IDI1NikgPyBcIlxcbiAgVGV4dGFyZWEsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpID8gXCJcXG4gIFNlbGVjdCxcXG4gIFNlbGVjdENvbnRlbnQsXFxuICBTZWxlY3RJdGVtLFxcbiAgU2VsZWN0VHJpZ2dlcixcXG4gIFNlbGVjdFZhbHVlLFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJib29sZWFuXCIpID8gXCJcXG4gIFN3aXRjaCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSkgPyBcIlxcbiAgRmlsZUlucHV0LFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBbXCJzdHJpbmctZGF0ZXRpbWVcIiwgXCJzdHJpbmctZGF0ZVwiLCBcImRhdGV0aW1lXCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSkgPyBcIlxcbiAgRGF0ZUlucHV0LFwiIDogXCJcIn1cbn0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgdXNlVHlwZUZvcm0gfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9saWJcIjtcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgY3JlYXRlRmlsZVJvdXRlLCB1c2VSb3V0ZXIgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zZXJ2aWNlcy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB0eXBlIHsgJHtuYW1lcy5jYXBpdGFsfVN1YnNldEEgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7JHtcbiAgICAgICAgY29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikubGVuZ3RoID4gMFxuICAgICAgICAgID8gXCJcXG5pbXBvcnQgeyBcIiArXG4gICAgICAgICAgICB1bmlxdWUoXG4gICAgICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpXG4gICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtpZH0sICR7aWR9TGFiZWxgO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgIC5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgJyB9IGZyb20gXCJAL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWRcIjsnXG4gICAgICAgICAgOiBcIlwiXG4gICAgICB9XG5pbXBvcnQgeyBkZWZhdWx0Q2F0Y2ggfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkXCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2F2ZVBhcmFtcyB9IGZyb20gXCJAL3NlcnZpY2VzLyR7bmFtZXMuZnN9LyR7bmFtZXMuZnN9LnR5cGVzXCI7XG4ke3VuaXF1ZShcbiAgY29sdW1uc1xuICAgIC5maWx0ZXIoKGNvbCkgPT4gW1wibnVtYmVyLWZrX2lkXCIsIFwiZW51bXNcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpKVxuICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkLCBjb2wpO1xuICAgIH0pLFxuKS5qb2luKFwiXFxuXCIpfVxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiQC9pMThuL3NkLmdlbmVyYXRlZFwiO1xuXG5pbXBvcnQgQXJyb3dMZWZ0SWNvbiBmcm9tIFwifmljb25zL2x1Y2lkZS9hcnJvdy1sZWZ0XCI7XG5pbXBvcnQgU2F2ZUljb24gZnJvbSBcIn5pY29ucy9sdWNpZGUvc2F2ZVwiO1xuaW1wb3J0IEZvcm1JY29uIGZyb20gXCJ+aWNvbnMvbWRpL2Zvcm0tc2VsZWN0XCI7XG5cbmNvbnN0IGZvcm1TZWFyY2hTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiAke2lkWm9kVHlwZX0sXG59KTtcblxuZXhwb3J0IGNvbnN0IFJvdXRlID0gY3JlYXRlRmlsZVJvdXRlKFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9L2Zvcm1cIikoe1xuICB2YWxpZGF0ZVNlYXJjaDogZm9ybVNlYXJjaFNjaGVtYSxcbiAgY29tcG9uZW50OiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVBhZ2UsXG59KTtcblxuZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1QYWdlKCkge1xuICBjb25zdCB7IGlkIH0gPSBSb3V0ZS51c2VTZWFyY2goKTtcbiAgcmV0dXJuIDwke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybSBpZD17aWR9IC8+O1xufVxuXG50eXBlICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUHJvcHMgPSB7XG4gIGlkPzogJHtpZFRzVHlwZX07XG4gIG1vZGU/OiBcInBhZ2VcIiB8IFwibW9kYWxcIjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybSh7IGlkLCBtb2RlIH06ICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUHJvcHMpIHtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IGZvcm0sIHNldEZvcm0sIHJlZ2lzdGVyJHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSkgPyBcIiwgc3VibWl0XCIgOiBcIlwifSB9ID0gdXNlVHlwZUZvcm0oJHtuYW1lcy5jYXBpdGFsfVNhdmVQYXJhbXMsICR7SlNPTi5zdHJpbmdpZnkoZGVmYXVsdFZhbHVlKS5yZXBsYWNlKC9cIm5vd1xcKFxcKVwiL2csICdcIlwiJyl9KTtcbiR7KCgpID0+IHtcbiAgY29uc3QgaGFzRGF0ZXRpbWUgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWRhdGV0aW1lXCIpO1xuICBjb25zdCBoYXNEYXRlID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRlXCIpO1xuICBpZiAoIWhhc0RhdGV0aW1lICYmICFoYXNEYXRlKSByZXR1cm4gXCJcIjtcblxuICBsZXQgaGVscGVycyA9IFwiXFxuXCI7XG4gIGlmIChoYXNEYXRldGltZSkge1xuICAgIGhlbHBlcnMgKz0gYCAgLy8gZGF0ZXRpbWUtbG9jYWwg7ZiV7Iud7Jy866GcIOuzgO2ZmCAoWVlZWS1NTS1ERFRISDpNTSlcbiAgY29uc3QgdG9EYXRldGltZUxvY2FsU3RyaW5nID0gKGRhdGU6IERhdGUgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IGQgPSB0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIiA/IG5ldyBEYXRlKGRhdGUpIDogZGF0ZTtcbiAgICByZXR1cm4gZC50b0lTT1N0cmluZygpLnNsaWNlKDAsIDE2KTtcbiAgfTtcblxuICAvLyBkYXRldGltZS1sb2NhbCDrrLjsnpDsl7TsnYQgRGF0ZeuhnCDrs4DtmZhcbiAgY29uc3QgZnJvbURhdGV0aW1lTG9jYWxTdHJpbmcgPSAodmFsdWU6IHN0cmluZyk6IERhdGUgfCBudWxsID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9O1xuYDtcbiAgfVxuICBpZiAoaGFzRGF0ZSkge1xuICAgIGhlbHBlcnMgKz0gYCAgLy8gZGF0ZSDtmJXsi53snLzroZwg67OA7ZmYIChZWVlZLU1NLUREKVxuICBjb25zdCB0b0RhdGVTdHJpbmcgPSAoZGF0ZTogRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghZGF0ZSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgZCA9IHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiID8gbmV3IERhdGUoZGF0ZSkgOiBkYXRlO1xuICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdO1xuICB9O1xuXG4gIC8vIGRhdGUg66y47J6Q7Je07J2EIERhdGXroZwg67OA7ZmYXG4gIGNvbnN0IGZyb21EYXRlU3RyaW5nID0gKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgfTtcbmA7XG4gIH1cbiAgcmV0dXJuIGhlbHBlcnM7XG59KSgpfVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpZCkge1xuICAgICAgJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UuZ2V0JHtuYW1lcy5jYXBpdGFsfShcIkFcIiwgaWQpLnRoZW4oKHJvdykgPT4ge1xuICAgICAgICBzZXRGb3JtKChwcmV2Rm9ybSkgPT4gKHtcbiAgICAgICAgICAuLi5wcmV2Rm9ybSxcbiAgICAgICAgICAuLi5yb3csJHsoKCkgPT4ge1xuICAgICAgICAgICAgLy8gcmVsYXRpb24g7ZWE65Oc65Ok7J2EIOywvuyVhOyEnCDrs4DtmZgg7L2U65OcIOyDneyEsVxuICAgICAgICAgICAgY29uc3QgcmVsYXRpb25GaWVsZHMgPSBjb2x1bW5zXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIpXG4gICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uTmFtZSA9IGNvbC5uYW1lLnJlcGxhY2UoL19pZCQvLCBcIlwiKTtcbiAgICAgICAgICAgICAgICBpZiAoY29sLm51bGxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYFxcbiAgICAgICAgICAke2NvbC5uYW1lfTogcm93LiR7cmVsYXRpb25OYW1lfT8uaWQgPz8gbnVsbCxgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYFxcbiAgICAgICAgICAke2NvbC5uYW1lfTogcm93LiR7cmVsYXRpb25OYW1lfT8uaWQsYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKFwiXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlbGF0aW9uRmllbGRzO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2lkLCBzZXRGb3JtXSk7XG5cbiAgY29uc3Qgc2F2ZU11dGF0aW9uID0gJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UudXNlU2F2ZU11dGF0aW9uKCk7XG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICR7XG4gICAgY29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpXG4gICAgICA/IGBzdWJtaXQoYXN5bmMgKGZvcm0pID0+IHtcbiAgICBzYXZlTXV0YXRpb24ubXV0YXRlKFxuICAgICAgeyBzcGE6IFtmb3JtXSB9LFxuICAgICAge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgICAgICBxdWVyeUtleTogW1wiJHtuYW1lcy5jYXBpdGFsfVwiXSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChtb2RlID09PSBcIm1vZGFsXCIpIHtcbiAgICAgICAgICAgIC8vIG1vZGFsIG1vZGVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKHsgdG86IFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9XCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yOiBkZWZhdWx0Q2F0Y2gsXG4gICAgICB9LFxuICAgICk7XG4gIH0pYFxuICAgICAgOiBgKCkgPT4ge1xuICAgIHNhdmVNdXRhdGlvbi5tdXRhdGUoXG4gICAgICB7IHNwYTogW2Zvcm1dIH0sXG4gICAgICB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBbXCIke25hbWVzLmNhcGl0YWx9XCJdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKG1vZGUgPT09IFwibW9kYWxcIikge1xuICAgICAgICAgICAgLy8gbW9kYWwgbW9kZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGRlZmF1bHRDYXRjaCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfWBcbiAgfTtcblxuICBjb25zdCBQQUdFID0ge1xuICAgIHRpdGxlOiBpZCA/IFNEKFwiZW50aXR5LmVkaXRcIikoU0QoXCJlbnRpdHkuJHtlbnRpdHlJZH1cIiksIGlkKSA6IFNEKFwiZW50aXR5LmNyZWF0ZVwiKShTRChcImVudGl0eS4ke2VudGl0eUlkfVwiKSksXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LVsxODAwcHhdIG14LWF1dG8gcC04XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS02IG1iLThcIj5cbiAgICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxGb3JtSWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkIGgtNVwiPntQQUdFLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge21vZGUgIT09IFwibW9kYWxcIiAmJiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcm91dGVyLm5hdmlnYXRlKHsgdG86IFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9XCIgfSl9XG4gICAgICAgICAgICAgICAgaWNvbj17PEFycm93TGVmdEljb24gLz59XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7U0QoXCJjb21tb24uYmFja1RvTGlzdFwiKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIEZvcm0gQ2FyZCAqL31cbiAgICAgICAgICA8Q2FyZCBjbGFzc05hbWU9XCJib3JkZXItYm9yZGVyLzQwIGJnLWdyYXktNTAgc2hhZG93LXNtXCI+XG4gICAgICAgICAgICA8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJweC00IGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIG0tMFwiPlxuICAgICAgICAgICAgICAgIHtQQUdFLnRpdGxlfVxuICAgICAgICAgICAgICA8L0NhcmRUaXRsZT5cbiAgICAgICAgICAgIDwvQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgIDxDYXJkQ29udGVudCBjbGFzc05hbWU9XCJwLTZcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTZcIj5cbiR7Y29sdW1uc1xuICAuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lICE9PSBcImNyZWF0ZWRfYXRcIilcbiAgLm1hcCgoY29sKSA9PiB7XG4gICAgY29uc3QgbGFiZWwgPSAoKCkgPT4ge1xuICAgICAgaWYgKGNvbC5sYWJlbC5lbmRzV2l0aChcIklkXCIpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoY29sLmxhYmVsLnJlcGxhY2UoXCJJZFwiLCBcIlwiKSk7XG4gICAgICAgICAgcmV0dXJuIGVudGl0eS50aXRsZSA/PyBjb2wubGFiZWw7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBjb2wubGFiZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2wubGFiZWw7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gYCAgICAgICAgICAgICAgICB7LyogJHtsYWJlbH0gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXhzIG1iLTEgdGV4dC1ncmF5LTYwMFwiPntTRChcImVudGl0eS4ke2VudGl0eUlkfS4ke2NvbC5uYW1lfVwiKX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlckNvbHVtbihlbnRpdHlJZCwgY29sLCBuYW1lcyl9XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgfSlcbiAgLmpvaW4oXCJcXG5cXG5cIil9XG5cbiAgICAgICAgICAgICAgICB7LyogU2F2ZSBCdXR0b24gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHQtNFwiPlxuICAgICAgICAgICAgICAgICAge2Zvcm0uaWQgJiYgZm9ybS5jcmVhdGVkX2F0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJtci0yIHRleHQteHMgdGV4dC1ncmF5LTYwMFwiPntTRChcImZvcm0uY3JlYXRlZEF0XCIpfTo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge1N0cmluZyhmb3JtLmNyZWF0ZWRfYXQpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgIGljb249ezxTYXZlSWNvbiAvPn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge1NEKFwiY29tbW9uLnNhdmVcIil9XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0NhcmRDb250ZW50PlxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICBwcmVUZW1wbGF0ZXMsXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImluZmxlY3Rpb24iLCJ1bmlxdWUiLCJ6IiwiRW50aXR5TWFuYWdlciIsImdldEVudW1JbmZvRnJvbUNvbE5hbWUiLCJnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZSIsIlRlbXBsYXRlIiwiVGVtcGxhdGVfX3ZpZXdfZm9ybSIsImdldFRhcmdldEFuZFBhdGgiLCJuYW1lcyIsInRhcmdldCIsInBhdGgiLCJmc1BsdXJhbCIsImdldFJlcXVpcmVkRGljdEtleXMiLCJ3cmFwRkMiLCJib2R5IiwibGFiZWwiLCJqb2luIiwid3JhcEZHIiwicmVuZGVyQ29sdW1uSW1wb3J0IiwiZW50aXR5SWQiLCJjb2wiLCJyZW5kZXJUeXBlIiwiaWQiLCJ0YXJnZXRFbnRpdHlOYW1lcyIsIm5hbWUiLCJjb21wb25lbnRJZCIsImZzIiwicmVsUHJvcCIsInJlcGxhY2UiLCJ0YXJnZXROYW1lcyIsImdldE5hbWVzRnJvbUlkIiwid2l0aCIsIkVycm9yIiwicmVuZGVyQ29sdW1uIiwicmVnRXhwciIsInBsYWNlaG9sZGVyIiwiem9kVHlwZSIsIlpvZFN0cmluZyIsIm1heExlbmd0aCIsImVudW1JZCIsImNhcGl0YWwiLCJjYW1lbGl6ZSIsIm9wdGlvbmFsIiwibnVsbGFibGUiLCJma0lkIiwicmVzb2x2ZURlZmF1bHRWYWx1ZSIsImNvbHVtbnMiLCJyZWR1Y2UiLCJyZXN1bHQiLCJ2YWx1ZSIsIlpvZE51bWJlciIsIlpvZEVudW0iLCJPYmplY3QiLCJrZXlzIiwiZW51bSIsIlpvZEJvb2xlYW4iLCJjb3JlIiwiJFpvZFN0cmluZyIsIlpvZEFycmF5IiwiWm9kT2JqZWN0IiwicmVuZGVyIiwiZW50aXR5IiwiZ2V0IiwicGtUeXBlIiwiZ2V0UGtUeXBlIiwiaWRUc1R5cGUiLCJpZFpvZFR5cGUiLCJsb2FkVHlwZXMiLCJsb2FkZWRUeXBlcyIsIlNhdmVQYXJhbXNab2RUeXBlIiwiem9kVHlwZVRvUmVuZGVyaW5nTm9kZSIsInNhdmVQYXJhbXNOb2RlIiwiY2hpbGRyZW4iLCJmaWx0ZXIiLCJtYXAiLCJwcm9wQ2FuZGlkYXRlIiwicHJvcHMiLCJmaW5kIiwicHJvcCIsImRlc2MiLCJkZWZhdWx0VmFsdWUiLCJwcmVUZW1wbGF0ZXMiLCJlbmRzV2l0aCIsImtleSIsInRhcmdldE1kSWQiLCJ0YXJnZXRNRE5hbWVzIiwib3B0aW9ucyIsIm5vZGUiLCJwcmVUZW1wbGF0ZSIsInNvbWUiLCJpbmNsdWRlcyIsImxlbmd0aCIsIkJvb2xlYW4iLCJjYXBpdGFsUGx1cmFsIiwiSlNPTiIsInN0cmluZ2lmeSIsImhhc0RhdGV0aW1lIiwiaGFzRGF0ZSIsImhlbHBlcnMiLCJyZWxhdGlvbkZpZWxkcyIsInJlbGF0aW9uTmFtZSIsInRpdGxlIiwidHJpbSIs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
495
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19mb3JtLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyaW5nTm9kZSwgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQge1xuICBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lLFxuICBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZSxcbiAgZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUsXG59IGZyb20gXCIuLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfZm9ybSBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJ2aWV3X2Zvcm1cIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyYy9yb3V0ZXMvYWRtaW5cIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzUGx1cmFsfS9mb3JtLnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFJlcXVpcmVkRGljdEtleXMoKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICByZXR1cm4gW1wiZW50aXR5LmNyZWF0ZVwiLCBcImVudGl0eS5lZGl0XCIsIFwiY29tbW9uLmJhY2tUb0xpc3RcIiwgXCJmb3JtLmNyZWF0ZWRBdFwiLCBcImNvbW1vbi5zYXZlXCJdO1xuICB9XG5cbiAgd3JhcEZDKGJvZHk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICBgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj4ke2xhYmVsID8gYFxcbiAgPExhYmVsPiR7bGFiZWx9PC9MYWJlbD5gIDogXCJcIn1gLFxuICAgICAgYCAgJHtib2R5fWAsXG4gICAgICBgPC9kaXY+YCxcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgd3JhcEZHKGJvZHk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndyYXBGQyhib2R5LCBsYWJlbCk7XG4gIH1cblxuICByZW5kZXJDb2x1bW5JbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgY29sOiBSZW5kZXJpbmdOb2RlKSB7XG4gICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwiZW51bVwiIGFzIGNvbnN0LCBlbnVtSWQ6IGlkIH07XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJma1wiIGFzIGNvbnN0LCBlbnRpdHlJZDogcmVsUHJvcC53aXRoIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgLy8gTWFueVRvTWFueSByZWxhdGlvbuydmCBGSyDrsLDsl7RcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhc2VOYW1lID0gY29sLm5hbWUucmVwbGFjZSgvX2lkcyQvLCBcIlwiKTtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiZmtcIiBhcyBjb25zdCwgZW50aXR5SWQ6IHJlbFByb3Aud2l0aCB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlckNvbHVtbihlbnRpdHlJZDogc3RyaW5nLCBjb2w6IFJlbmRlcmluZ05vZGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlZ0V4cHIgPSBgey4uLnJlZ2lzdGVyKFwiJHtjb2wubmFtZX1cIil9YDtcbiAgICBjb25zdCBwbGFjZWhvbGRlck5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gYHtTRChcImVudGl0eS4ke2VudGl0eUlkfS4ke3BsYWNlaG9sZGVyTmFtZX1cIil9YDtcblxuICAgIHN3aXRjaCAoY29sLnJlbmRlclR5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmctcGxhaW5cIjpcbiAgICAgICAgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcgJiYgKGNvbC56b2RUeXBlLm1heExlbmd0aCA/PyAwKSA8PSAyNTYpIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9ICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgPFRleHRhcmVhIGNsYXNzTmFtZT1cInRleHQteHMgYmctd2hpdGVcIiByb3dzPXs0fSBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICAgIHJldHVybiBgPERhdGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItaWRcIjpcbiAgICAgIGNhc2UgXCJzdHJpbmctaWRcIjpcbiAgICAgICAgcmV0dXJuIGA8aW5wdXQgdHlwZT1cImhpZGRlblwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgY2FzZSBcIm51bWJlci1wbGFpblwiOlxuICAgICAgICByZXR1cm4gYDxJbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBgPFN3aXRjaCAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJqc29uLXNvbmFtdWZpbGVcIjpcbiAgICAgICAgcmV0dXJuIGA8RmlsZUlucHV0XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1vZGU9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGU9XCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdTaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICBjYXNlIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCI6XG4gICAgICAgIHJldHVybiBgPEZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkTW9kZT1cImxhenlcIlxuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZT1cImltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlld1NpemU9XCJtZFwiXG4gICAgICAgICAgICAgICAgICAgIG1heEZpbGVzPXsxMH1cbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgY2FzZSBcImVudW1zXCI6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgIHJldHVybiBgPEVudW1TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgZW51bT17JHtpZH19XG4gICAgICAgICAgICAgICAgICAgIGxhYmVscz17JHtpZH1MYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwibnVtYmVyLWZrX2lkXCI6XG4gICAgICBjYXNlIFwic3RyaW5nLWZrX2lkXCI6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICByZXR1cm4gYDxJZEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZz17JHtyZWxQcm9wLndpdGh9QXN5bmNJZENvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgc3Vic2V0PVwiQVwiXG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAvLyBNYW55VG9NYW55IHJlbGF0aW9u7J2YIEZLIOuwsOyXtOyduOyngCDtmZXsnbhcbiAgICAgICAgaWYgKGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlTmFtZSA9IGNvbC5uYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGJhc2VOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBgPElkQXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnPXske3JlbFByb3Aud2l0aH1Bc3luY0lkQ29uZmlnfVxuICAgICAgICAgICAgICAgICAgICBzdWJzZXQ9XCJBXCJcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj1cIiR7Y29sLm5hbWV9XCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9XCIke2NvbC5uYW1lfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPVwiJHtjb2wubmFtZX1cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgJHtyZWdFeHByfSAvPmA7XG4gICAgfVxuICB9XG5cbiAgcmVzb2x2ZURlZmF1bHRWYWx1ZShjb2x1bW5zOiBSZW5kZXJpbmdOb2RlW10pOiBvYmplY3Qge1xuICAgIHJldHVybiBjb2x1bW5zLnJlZHVjZShcbiAgICAgIChyZXN1bHQsIGNvbCkgPT4ge1xuICAgICAgICBpZiAoY29sLm9wdGlvbmFsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2YWx1ZTogdW5rbm93bjtcbiAgICAgICAgaWYgKGNvbC5udWxsYWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyKSB7XG4gICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RFbnVtKSB7XG4gICAgICAgICAgdmFsdWUgPSBPYmplY3Qua2V5cyhjb2wuem9kVHlwZS5lbnVtKVswXTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQm9vbGVhbikge1xuICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LmNvcmUuJFpvZFN0cmluZykge1xuICAgICAgICAgIC8vIE5PVEU6IHouWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VmOuptCB6LnVybCgpLCB6LmVtYWlsKCkg65Ox7J2YIO2DgOyeheyXkOyEnCDrrLjsoJzqsIAg7IOd6riw66+A66GcIHouY29yZS4kWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VqFxuICAgICAgICAgIC8vIEZJWE1FOiBlbWFpbOydtOuCmCB1cmwg7YOA7J6FIOuTseyXkCDrjIDtlZwg7LKY66as6rCAIO2VhOyalO2VqFxuICAgICAgICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZGF0ZXRpbWVcIikge1xuICAgICAgICAgICAgdmFsdWUgPSBcIm5vdygpXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0KSB7XG4gICAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdFtjb2wubmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICB7fSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVuZGVyKHsgZW50aXR5SWQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19mb3JtXCJdKSB7XG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG5cbiAgICAvLyBQSyDtg4DsnoUg6rCQ7KeAXG4gICAgY29uc3QgcGtUeXBlID0gZW50aXR5LmdldFBrVHlwZSgpO1xuICAgIGNvbnN0IGlkVHNUeXBlID0gcGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCIgPyBcInN0cmluZ1wiIDogXCJudW1iZXJcIjtcbiAgICBjb25zdCBpZFpvZFR5cGUgPVxuICAgICAgcGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCIgPyBcInouc3RyaW5nKCkub3B0aW9uYWwoKVwiIDogXCJ6Lm51bWJlcigpLm9wdGlvbmFsKClcIjtcblxuICAgIC8vIFNhdmVQYXJhbXMg7YOA7J6F7J2EIOuhnOuTnO2VmOyXrCBzYXZlUGFyYW1zTm9kZSDsg53shLFcbiAgICBjb25zdCB7IGxvYWRUeXBlcyB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vLi4vc3luY2VyL21vZHVsZS1sb2FkZXJcIik7XG4gICAgY29uc3QgbG9hZGVkVHlwZXMgPSBhd2FpdCBsb2FkVHlwZXMoKTtcbiAgICBjb25zdCBTYXZlUGFyYW1zWm9kVHlwZSA9IGxvYWRlZFR5cGVzW2Ake2VudGl0eUlkfVNhdmVQYXJhbXNgXTtcblxuICAgIGlmICghU2F2ZVBhcmFtc1pvZFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2F2ZVBhcmFtcyBmb3IgJHtlbnRpdHlJZH0gbm90IGZvdW5kLiBEaWQgeW91IHJ1biAnc29uYW11IHN5bmMnP2ApO1xuICAgIH1cblxuICAgIC8vIFpvZCDtg4DsnoXsnYQgUmVuZGVyaW5nTm9kZeuhnCDrs4DtmZhcbiAgICBjb25zdCB7IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUgfSA9IGF3YWl0IGltcG9ydChcIi4uL3pvZC1jb252ZXJ0ZXJcIik7XG4gICAgY29uc3Qgc2F2ZVBhcmFtc05vZGUgPSB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKFNhdmVQYXJhbXNab2RUeXBlKTtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSAoKHNhdmVQYXJhbXNOb2RlPy5jaGlsZHJlbiA/PyBbXSkgYXMgUmVuZGVyaW5nTm9kZVtdKVxuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wubmFtZSAhPT0gXCJpZFwiKVxuICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BDYW5kaWRhdGUgPSBlbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBjb2wubmFtZSk7XG4gICAgICAgIGNvbC5sYWJlbCA9IHByb3BDYW5kaWRhdGU/LmRlc2MgPz8gY29sLmxhYmVsO1xuICAgICAgICByZXR1cm4gY29sO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLnJlc29sdmVEZWZhdWx0VmFsdWUoY29sdW1ucyk7XG5cbiAgICAvLyBlbnVt6rO8IEZL7JeQIOuMgO2VnCBpbXBvcnQg7KCV67O0IOyImOynkVxuICAgIGNvbnN0IGVudW1JbXBvcnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgZmtDb25maWdJbXBvcnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgZW51bUltcG9ydHMuYWRkKGlkKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgZmtDb25maWdJbXBvcnRzLmFkZChyZWxQcm9wLndpdGgpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctcGxhaW5cIiAmJlxuICAgICAgICBjb2wubmFtZS5lbmRzV2l0aChcIl9pZFwiKSAmJlxuICAgICAgICBjb2wubmFtZSAhPT0gXCJpZFwiXG4gICAgICApIHtcbiAgICAgICAgLy8gc3RyaW5nIEZLIOyymOumrCAo7J6Q7Iug7J2YIFBL7J24IGlk64qUIOygnOyZuClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgIGZrQ29uZmlnSW1wb3J0cy5hZGQocmVsUHJvcC53aXRoKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgICAvLyBNYW55VG9NYW55IHJlbGF0aW9u7J2YIEZLIOuwsOyXtFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGJhc2VOYW1lID0gY29sLm5hbWUucmVwbGFjZSgvX2lkcyQvLCBcIlwiKTtcbiAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGJhc2VOYW1lKTtcbiAgICAgICAgICBma0NvbmZpZ0ltcG9ydHMuYWRkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDYXJkLFxuICBDYXJkQ29udGVudCxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZFRpdGxlLFxuICBJbnB1dCwke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctcGxhaW5cIiAmJiBjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nICYmIChjb2wuem9kVHlwZS5tYXhMZW5ndGggPz8gMCkgPiAyNTYpID8gXCJcXG4gIFRleHRhcmVhLFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSA/IFwiXFxuICBFbnVtU2VsZWN0LFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIiB8fCAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJiBjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpKSA/IFwiXFxuICBJZEFzeW5jU2VsZWN0LFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJib29sZWFuXCIpID8gXCJcXG4gIFN3aXRjaCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSkgPyBcIlxcbiAgRmlsZUlucHV0LFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBbXCJzdHJpbmctZGF0ZXRpbWVcIiwgXCJzdHJpbmctZGF0ZVwiLCBcImRhdGV0aW1lXCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSkgPyBcIlxcbiAgRGF0ZUlucHV0LFwiIDogXCJcIn1cbn0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgdXNlVHlwZUZvcm0gfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9saWJcIjtcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgY3JlYXRlRmlsZVJvdXRlLCB1c2VSb3V0ZXIgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zZXJ2aWNlcy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB0eXBlIHsgJHtuYW1lcy5jYXBpdGFsfVN1YnNldEEgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7JHtcbiAgICAgICAgY29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikubGVuZ3RoID4gMFxuICAgICAgICAgID8gXCJcXG5pbXBvcnQgeyBcIiArXG4gICAgICAgICAgICB1bmlxdWUoXG4gICAgICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpXG4gICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtpZH0sICR7aWR9TGFiZWxgO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgIC5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgJyB9IGZyb20gXCJAL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWRcIjsnXG4gICAgICAgICAgOiBcIlwiXG4gICAgICB9XG5pbXBvcnQgeyBkZWZhdWx0Q2F0Y2ggfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkXCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2F2ZVBhcmFtcyB9IGZyb20gXCJAL3NlcnZpY2VzLyR7bmFtZXMuZnN9LyR7bmFtZXMuZnN9LnR5cGVzXCI7JHtcbiAgICAgICAgZmtDb25maWdJbXBvcnRzLnNpemUgPiAwXG4gICAgICAgICAgPyBgXFxuaW1wb3J0IHsgJHtBcnJheS5mcm9tKGZrQ29uZmlnSW1wb3J0cylcbiAgICAgICAgICAgICAgLm1hcCgoZW50aXR5KSA9PiBgJHtlbnRpdHl9QXN5bmNJZENvbmZpZ2ApXG4gICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9IH0gZnJvbSBcIkAvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkXCI7YFxuICAgICAgICAgIDogXCJcIlxuICAgICAgfVxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiQC9pMThuL3NkLmdlbmVyYXRlZFwiO1xuXG5pbXBvcnQgQXJyb3dMZWZ0SWNvbiBmcm9tIFwifmljb25zL2x1Y2lkZS9hcnJvdy1sZWZ0XCI7XG5pbXBvcnQgU2F2ZUljb24gZnJvbSBcIn5pY29ucy9sdWNpZGUvc2F2ZVwiO1xuaW1wb3J0IEZvcm1JY29uIGZyb20gXCJ+aWNvbnMvbWRpL2Zvcm0tc2VsZWN0XCI7XG5cbmNvbnN0IGZvcm1TZWFyY2hTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiAke2lkWm9kVHlwZX0sXG59KTtcblxuZXhwb3J0IGNvbnN0IFJvdXRlID0gY3JlYXRlRmlsZVJvdXRlKFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9L2Zvcm1cIikoe1xuICB2YWxpZGF0ZVNlYXJjaDogZm9ybVNlYXJjaFNjaGVtYSxcbiAgY29tcG9uZW50OiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVBhZ2UsXG59KTtcblxuZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1QYWdlKCkge1xuICBjb25zdCB7IGlkIH0gPSBSb3V0ZS51c2VTZWFyY2goKTtcbiAgcmV0dXJuIDwke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybSBpZD17aWR9IC8+O1xufVxuXG50eXBlICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUHJvcHMgPSB7XG4gIGlkPzogJHtpZFRzVHlwZX07XG4gIG1vZGU/OiBcInBhZ2VcIiB8IFwibW9kYWxcIjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybSh7IGlkLCBtb2RlIH06ICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUHJvcHMpIHtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IGZvcm0sIHNldEZvcm0sIHJlZ2lzdGVyJHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSkgPyBcIiwgc3VibWl0XCIgOiBcIlwifSB9ID0gdXNlVHlwZUZvcm0oJHtuYW1lcy5jYXBpdGFsfVNhdmVQYXJhbXMsICR7SlNPTi5zdHJpbmdpZnkoZGVmYXVsdFZhbHVlKS5yZXBsYWNlKC9cIm5vd1xcKFxcKVwiL2csICdcIlwiJyl9KTtcbiR7KCgpID0+IHtcbiAgY29uc3QgaGFzRGF0ZXRpbWUgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWRhdGV0aW1lXCIpO1xuICBjb25zdCBoYXNEYXRlID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRlXCIpO1xuICBpZiAoIWhhc0RhdGV0aW1lICYmICFoYXNEYXRlKSByZXR1cm4gXCJcIjtcblxuICBsZXQgaGVscGVycyA9IFwiXFxuXCI7XG4gIGlmIChoYXNEYXRldGltZSkge1xuICAgIGhlbHBlcnMgKz0gYCAgLy8gZGF0ZXRpbWUtbG9jYWwg7ZiV7Iud7Jy866GcIOuzgO2ZmCAoWVlZWS1NTS1ERFRISDpNTSlcbiAgY29uc3QgdG9EYXRldGltZUxvY2FsU3RyaW5nID0gKGRhdGU6IERhdGUgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IGQgPSB0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIiA/IG5ldyBEYXRlKGRhdGUpIDogZGF0ZTtcbiAgICByZXR1cm4gZC50b0lTT1N0cmluZygpLnNsaWNlKDAsIDE2KTtcbiAgfTtcblxuICAvLyBkYXRldGltZS1sb2NhbCDrrLjsnpDsl7TsnYQgRGF0ZeuhnCDrs4DtmZhcbiAgY29uc3QgZnJvbURhdGV0aW1lTG9jYWxTdHJpbmcgPSAodmFsdWU6IHN0cmluZyk6IERhdGUgfCBudWxsID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9O1xuYDtcbiAgfVxuICBpZiAoaGFzRGF0ZSkge1xuICAgIGhlbHBlcnMgKz0gYCAgLy8gZGF0ZSDtmJXsi53snLzroZwg67OA7ZmYIChZWVlZLU1NLUREKVxuICBjb25zdCB0b0RhdGVTdHJpbmcgPSAoZGF0ZTogRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghZGF0ZSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgZCA9IHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiID8gbmV3IERhdGUoZGF0ZSkgOiBkYXRlO1xuICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdO1xuICB9O1xuXG4gIC8vIGRhdGUg66y47J6Q7Je07J2EIERhdGXroZwg67OA7ZmYXG4gIGNvbnN0IGZyb21EYXRlU3RyaW5nID0gKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgfTtcbmA7XG4gIH1cbiAgcmV0dXJuIGhlbHBlcnM7XG59KSgpfVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpZCkge1xuICAgICAgJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UuZ2V0JHtuYW1lcy5jYXBpdGFsfShcIkFcIiwgaWQpLnRoZW4oKHJvdykgPT4ge1xuICAgICAgICBzZXRGb3JtKChwcmV2Rm9ybSkgPT4gKHtcbiAgICAgICAgICAuLi5wcmV2Rm9ybSxcbiAgICAgICAgICAuLi5yb3csJHsoKCkgPT4ge1xuICAgICAgICAgICAgLy8gcmVsYXRpb24g7ZWE65Oc65Ok7J2EIOywvuyVhOyEnCDrs4DtmZgg7L2U65OcIOyDneyEsVxuICAgICAgICAgICAgLy8gbnVtYmVyIEZLLCBzdHJpbmcgRksgKOyekOyLoOydmCBQSyDsoJzsmbgpLCBNYW55VG9NYW55IEZLIOuwsOyXtOunjCDtlYTthLDrp4FcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uRmllbGRzID0gY29sdW1uc1xuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjb2wpID0+XG4gICAgICAgICAgICAgICAgICBjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fFxuICAgICAgICAgICAgICAgICAgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWZrX2lkXCIgfHxcbiAgICAgICAgICAgICAgICAgIChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTWFueVRvTWFueShhcnJheSkg7LKY66asXG4gICAgICAgICAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZWxhdGlvbk5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcXG4gICAgICAgICAgJHtjb2wubmFtZX06IHJvdy4ke3JlbGF0aW9uTmFtZX0/Lm1hcCgocikgPT4gci5pZCkgPz8gW10sYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRksobnVtYmVyLCBzdHJpbmcpIOyymOumrFxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uTmFtZSA9IGdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbC5udWxsYWJsZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcXG4gICAgICAgICAgJHtjb2wubmFtZX06IHJvdy4ke3JlbGF0aW9uTmFtZX0/LmlkID8/IG51bGwsYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcXG4gICAgICAgICAgJHtjb2wubmFtZX06IHJvdy4ke3JlbGF0aW9uTmFtZX0/LmlkLGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbihcIlwiKTtcbiAgICAgICAgICAgIHJldHVybiByZWxhdGlvbkZpZWxkcztcbiAgICAgICAgICB9KSgpfVxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtpZCwgc2V0Rm9ybV0pO1xuXG4gIGNvbnN0IHNhdmVNdXRhdGlvbiA9ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLnVzZVNhdmVNdXRhdGlvbigpO1xuICBjb25zdCBoYW5kbGVTdWJtaXQgPSAke1xuICAgIGNvbHVtbnMuc29tZSgoY29sKSA9PiBbXCJqc29uLXNvbmFtdWZpbGVcIiwgXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpKVxuICAgICAgPyBgc3VibWl0KGFzeW5jIChmb3JtKSA9PiB7XG4gICAgc2F2ZU11dGF0aW9uLm11dGF0ZShcbiAgICAgIHsgc3BhOiBbZm9ybV0gfSxcbiAgICAgIHtcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgICAgcXVlcnlLZXk6IFtcIiR7bmFtZXMuY2FwaXRhbH1cIl0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAobW9kZSA9PT0gXCJtb2RhbFwiKSB7XG4gICAgICAgICAgICAvLyBtb2RhbCBtb2RlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZSh7IHRvOiBcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfVwiIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogZGVmYXVsdENhdGNoLFxuICAgICAgfSxcbiAgICApO1xuICB9KWBcbiAgICAgIDogYCgpID0+IHtcbiAgICBzYXZlTXV0YXRpb24ubXV0YXRlKFxuICAgICAgeyBzcGE6IFtmb3JtXSB9LFxuICAgICAge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgICAgICBxdWVyeUtleTogW1wiJHtuYW1lcy5jYXBpdGFsfVwiXSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChtb2RlID09PSBcIm1vZGFsXCIpIHtcbiAgICAgICAgICAgIC8vIG1vZGFsIG1vZGVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKHsgdG86IFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9XCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yOiBkZWZhdWx0Q2F0Y2gsXG4gICAgICB9LFxuICAgICk7XG4gIH1gXG4gIH07XG5cbiAgY29uc3QgUEFHRSA9IHtcbiAgICB0aXRsZTogaWQgPyBTRChcImVudGl0eS5lZGl0XCIpKFNEKFwiZW50aXR5LiR7ZW50aXR5SWR9XCIpLCBpZCkgOiBTRChcImVudGl0eS5jcmVhdGVcIikoU0QoXCJlbnRpdHkuJHtlbnRpdHlJZH1cIikpLFxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy1bMTgwMHB4XSBteC1hdXRvIHAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNiBtYi04XCI+XG4gICAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICA8Rm9ybUljb24gY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1zZW1pYm9sZCBoLTVcIj57UEFHRS50aXRsZX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHttb2RlICE9PSBcIm1vZGFsXCIgJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHJvdXRlci5uYXZpZ2F0ZSh7IHRvOiBcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfVwiIH0pfVxuICAgICAgICAgICAgICAgIGljb249ezxBcnJvd0xlZnRJY29uIC8+fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge1NEKFwiY29tbW9uLmJhY2tUb0xpc3RcIil9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBGb3JtIENhcmQgKi99XG4gICAgICAgICAgPENhcmQgY2xhc3NOYW1lPVwiYm9yZGVyLWJvcmRlci80MCBiZy1ncmF5LTUwIHNoYWRvdy1zbVwiPlxuICAgICAgICAgICAgPENhcmRIZWFkZXIgY2xhc3NOYW1lPVwicHgtNCBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPENhcmRUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIGxlYWRpbmctbm9uZSBtLTBcIj5cbiAgICAgICAgICAgICAgICB7UEFHRS50aXRsZX1cbiAgICAgICAgICAgICAgPC9DYXJkVGl0bGU+XG4gICAgICAgICAgICA8L0NhcmRIZWFkZXI+XG4gICAgICAgICAgICA8Q2FyZENvbnRlbnQgY2xhc3NOYW1lPVwicC02XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS02XCI+XG4ke2NvbHVtbnNcbiAgLmZpbHRlcigoY29sKSA9PiBjb2wubmFtZSAhPT0gXCJjcmVhdGVkX2F0XCIpXG4gIC5tYXAoKGNvbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsID0gKCgpID0+IHtcbiAgICAgIGlmIChjb2wubGFiZWwuZW5kc1dpdGgoXCJJZFwiKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGNvbC5sYWJlbC5yZXBsYWNlKFwiSWRcIiwgXCJcIikpO1xuICAgICAgICAgIHJldHVybiBlbnRpdHkudGl0bGUgPz8gY29sLmxhYmVsO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gY29sLmxhYmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sLmxhYmVsO1xuICAgIH0pKCk7XG4gICAgY29uc3QgbGFiZWxOYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICByZXR1cm4gYCAgICAgICAgICAgICAgICB7LyogJHtsYWJlbH0gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXhzIG1iLTEgdGV4dC1ncmF5LTYwMFwiPntTRChcImVudGl0eS4ke2VudGl0eUlkfS4ke2xhYmVsTmFtZX1cIil9PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICR7dGhpcy5yZW5kZXJDb2x1bW4oZW50aXR5SWQsIGNvbCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgfSlcbiAgLmpvaW4oXCJcXG5cXG5cIil9XG5cbiAgICAgICAgICAgICAgICB7LyogU2F2ZSBCdXR0b24gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHQtNFwiPlxuICAgICAgICAgICAgICAgICAge2Zvcm0uaWQgJiYgZm9ybS5jcmVhdGVkX2F0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJtci0yIHRleHQteHMgdGV4dC1ncmF5LTYwMFwiPntTRChcImZvcm0uY3JlYXRlZEF0XCIpfTo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge1N0cmluZyhmb3JtLmNyZWF0ZWRfYXQpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgIGljb249ezxTYXZlSWNvbiAvPn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge1NEKFwiY29tbW9uLnNhdmVcIil9XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0NhcmRDb250ZW50PlxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbInVuaXF1ZSIsInoiLCJFbnRpdHlNYW5hZ2VyIiwiZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSIsImdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lIiwiZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUiLCJUZW1wbGF0ZSIsIlRlbXBsYXRlX192aWV3X2Zvcm0iLCJnZXRUYXJnZXRBbmRQYXRoIiwibmFtZXMiLCJ0YXJnZXQiLCJwYXRoIiwiZnNQbHVyYWwiLCJnZXRSZXF1aXJlZERpY3RLZXlzIiwid3JhcEZDIiwiYm9keSIsImxhYmVsIiwiam9pbiIsIndyYXBGRyIsInJlbmRlckNvbHVtbkltcG9ydCIsImVudGl0eUlkIiwiY29sIiwicmVuZGVyVHlwZSIsImlkIiwibmFtZSIsInR5cGUiLCJlbnVtSWQiLCJyZWxQcm9wIiwicmVwbGFjZSIsIndpdGgiLCJlbmRzV2l0aCIsImJhc2VOYW1lIiwicmVuZGVyQ29sdW1uIiwicmVnRXhwciIsInBsYWNlaG9sZGVyTmFtZSIsInBsYWNlaG9sZGVyIiwiem9kVHlwZSIsIlpvZFN0cmluZyIsIm1heExlbmd0aCIsInJlc29sdmVEZWZhdWx0VmFsdWUiLCJjb2x1bW5zIiwicmVkdWNlIiwicmVzdWx0Iiwib3B0aW9uYWwiLCJ2YWx1ZSIsIm51bGxhYmxlIiwiWm9kTnVtYmVyIiwiWm9kRW51bSIsIk9iamVjdCIsImtleXMiLCJlbnVtIiwiWm9kQm9vbGVhbiIsImNvcmUiLCIkWm9kU3RyaW5nIiwiWm9kQXJyYXkiLCJab2RPYmplY3QiLCJyZW5kZXIiLCJlbnRpdHkiLCJnZXQiLCJnZXROYW1lc0Zyb21JZCIsInBrVHlwZSIsImdldFBrVHlwZSIsImlkVHNUeXBlIiwiaWRab2RUeXBlIiwibG9hZFR5cGVzIiwibG9hZGVkVHlwZXMiLCJTYXZlUGFyYW1zWm9kVHlwZSIsIkVycm9yIiwiem9kVHlwZVRvUmVuZGVyaW5nTm9kZSIsInNhdmVQYXJhbXNOb2RlIiwiY2hpbGRyZW4iLCJmaWx0ZXIiLCJtYXAiLCJwcm9wQ2FuZGlkYXRlIiwicHJvcHMiLCJmaW5kIiwicHJvcCIsImRlc2MiLCJkZWZhdWx0VmFsdWUiLCJlbnVtSW1wb3J0cyIsIlNldCIsImZrQ29uZmlnSW1wb3J0cyIsImZvckVhY2giLCJhZGQiLCJzb21lIiwiaW5jbHVkZXMiLCJjYXBpdGFsIiwibGVuZ3RoIiwiQm9vbGVhbiIsImZzIiwic2l6ZSIsIkFycmF5IiwiZnJvbSIsImNhcGl0YWxQbHVyYWwiLCJKU09OIiwic3RyaW5naWZ5IiwiaGFzRGF0ZXRpbWUiLCJoYXNEYXRlIiwiaGVscGVycyIsInJlbGF0aW9uRmllbGRzIiwicmVsYXRpb25OYW1lIiwidGl0bGUiLCJsYWJlbE5hbWUiLCJ0cmltIiwiaW1wb3J0S2V5cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFBTSxRQUFRLFVBQVU7QUFDakMsU0FBU0MsQ0FBQyxRQUFRLE1BQU07QUFDeEIsU0FBU0MsYUFBYSxRQUFnQyxpQ0FBOEI7QUFFcEYsU0FDRUMsc0JBQXNCLEVBQ3RCQyw2QkFBNkIsRUFDN0JDLDBCQUEwQixRQUNyQixnQkFBYTtBQUNwQixTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFFdkMsT0FBTyxNQUFNQyw0QkFBNEJEO0lBQ3ZDLGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBRSxpQkFBaUJDLEtBQXdCLEVBQUU7UUFDekMsT0FBTztZQUNMQyxRQUFRO1lBQ1JDLE1BQU0sR0FBR0YsTUFBTUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNwQztJQUNGO0lBRVNDLHNCQUF1QztRQUM5QyxPQUFPO1lBQUM7WUFBaUI7WUFBZTtZQUFxQjtZQUFrQjtTQUFjO0lBQy9GO0lBRUFDLE9BQU9DLElBQVksRUFBRUMsS0FBYyxFQUFVO1FBQzNDLE9BQU87WUFDTCxDQUFDLDJCQUEyQixFQUFFQSxRQUFRLENBQUMsV0FBVyxFQUFFQSxNQUFNLFFBQVEsQ0FBQyxHQUFHLElBQUk7WUFDMUUsQ0FBQyxFQUFFLEVBQUVELE1BQU07WUFDWCxDQUFDLE1BQU0sQ0FBQztTQUNULENBQUNFLElBQUksQ0FBQztJQUNUO0lBQ0FDLE9BQU9ILElBQVksRUFBRUMsS0FBYyxFQUFVO1FBQzNDLE9BQU8sSUFBSSxDQUFDRixNQUFNLENBQUNDLE1BQU1DO0lBQzNCO0lBRUFHLG1CQUFtQkMsUUFBZ0IsRUFBRUMsR0FBa0IsRUFBRTtRQUN2RCxJQUFJQSxJQUFJQyxVQUFVLEtB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
@@ -1,5 +1,5 @@
1
1
  import { type EntityNamesRecord } from "../../entity/entity-manager";
2
- import type { RenderingNode, TemplateKey, TemplateOptions } from "../../types/types";
2
+ import type { RenderingNode, TemplateOptions } from "../../types/types";
3
3
  import { Template } from "../template";
4
4
  export declare class Template__view_list extends Template {
5
5
  constructor();
@@ -23,8 +23,8 @@ export declare class Template__view_list extends Template {
23
23
  body: string;
24
24
  importKeys: never[];
25
25
  preTemplates: {
26
- key: TemplateKey;
27
- options: TemplateOptions[TemplateKey];
26
+ key: import("../..").TemplateKey;
27
+ options: TemplateOptions[import("../..").TemplateKey];
28
28
  }[];
29
29
  target: string;
30
30
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"view_list.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_list.template.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGrF,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOhC,mBAAmB,IAAI,MAAM,EAAE,GAAG,IAAI;IAI/C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAc,EAAE,SAAS,GAAE,MAAW;IAMpF,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,EACxB,SAAS,GAAE,MAAc,EACzB,WAAW,GAAE,OAAe,GAC3B,MAAM;IAuFT,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,GACvB,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IAwBpB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB;IAiCjF,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB;IAkC3E,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG;QACpC,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB;IAoBK,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC;;;;;;;;;;CA2fxD"}
1
+ {"version":3,"file":"view_list.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_list.template.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOxE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOhC,mBAAmB,IAAI,MAAM,EAAE,GAAG,IAAI;IAI/C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAc,EAAE,SAAS,GAAE,MAAW;IAMpF,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,EACxB,SAAS,GAAE,MAAc,EACzB,WAAW,GAAE,OAAe,GAC3B,MAAM;IAyFT,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,GACvB,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IAwBpB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB;IAiCjF,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB;IAkC3E,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG;QACpC,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB;IAoBK,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC;;;;;;;;;;CAsfxD"}