@microsoft/terraform-cdk-constructs 0.0.3-pre.7 → 1.2.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 (1290) hide show
  1. package/.devcontainer/devcontainer.json +2 -2
  2. package/.jsii +67552 -10179
  3. package/API.md +69252 -9464
  4. package/LICENSE +16 -18
  5. package/README.md +186 -75
  6. package/cdktf.json +1 -1
  7. package/docs/ARCHITECTURE.md +836 -0
  8. package/docs/azapi-testing-architecture.md +482 -0
  9. package/docs/monitoring-guide.md +206 -0
  10. package/docs/testing.md +99 -114
  11. package/docs/versioning-and-migrations-user-guide.md +409 -0
  12. package/go.mod +12 -12
  13. package/go.sum +27 -23
  14. package/lib/azure-actiongroup/index.d.ts +10 -0
  15. package/lib/azure-actiongroup/index.js +11 -1
  16. package/lib/azure-actiongroup/lib/action-group-schemas.d.ts +24 -0
  17. package/lib/azure-actiongroup/lib/action-group-schemas.js +201 -0
  18. package/lib/azure-actiongroup/lib/action-group.d.ts +312 -0
  19. package/lib/azure-actiongroup/lib/action-group.js +201 -0
  20. package/lib/azure-actiongroup/lib/index.d.ts +5 -1
  21. package/lib/azure-actiongroup/lib/index.js +6 -2
  22. package/lib/azure-actiongroup/test/action-group.integ.d.ts +9 -0
  23. package/lib/azure-actiongroup/test/action-group.integ.js +79 -0
  24. package/lib/azure-actiongroup/test/action-group.spec.d.ts +8 -0
  25. package/lib/azure-actiongroup/test/action-group.spec.js +602 -0
  26. package/lib/azure-activitylogalert/index.d.ts +11 -0
  27. package/lib/azure-activitylogalert/index.js +28 -0
  28. package/lib/azure-activitylogalert/lib/activity-log-alert-schemas.d.ts +24 -0
  29. package/lib/azure-activitylogalert/lib/activity-log-alert-schemas.js +182 -0
  30. package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +236 -0
  31. package/lib/azure-activitylogalert/lib/activity-log-alert.js +212 -0
  32. package/lib/azure-activitylogalert/lib/index.d.ts +5 -0
  33. package/lib/azure-activitylogalert/lib/index.js +22 -0
  34. package/lib/azure-activitylogalert/test/activity-log-alert.integ.d.ts +9 -0
  35. package/lib/azure-activitylogalert/test/activity-log-alert.integ.js +98 -0
  36. package/lib/azure-activitylogalert/test/activity-log-alert.spec.d.ts +9 -0
  37. package/lib/azure-activitylogalert/test/activity-log-alert.spec.js +1101 -0
  38. package/lib/azure-aks/index.d.ts +9 -0
  39. package/lib/azure-aks/index.js +28 -0
  40. package/lib/azure-aks/lib/aks-cluster-schemas.d.ts +505 -0
  41. package/lib/azure-aks/lib/aks-cluster-schemas.js +572 -0
  42. package/lib/azure-aks/lib/aks-cluster.d.ts +395 -0
  43. package/lib/azure-aks/lib/aks-cluster.js +489 -0
  44. package/lib/azure-aks/lib/index.d.ts +11 -0
  45. package/lib/azure-aks/lib/index.js +38 -0
  46. package/lib/azure-aks/test/aks-cluster.integ.d.ts +9 -0
  47. package/lib/azure-aks/test/aks-cluster.integ.js +260 -0
  48. package/lib/azure-aks/test/aks-cluster.spec.d.ts +8 -0
  49. package/lib/azure-aks/test/aks-cluster.spec.js +1396 -0
  50. package/lib/azure-diagnosticsettings/index.d.ts +7 -0
  51. package/lib/azure-diagnosticsettings/index.js +24 -0
  52. package/lib/azure-diagnosticsettings/lib/diagnostic-settings-schemas.d.ts +50 -0
  53. package/lib/azure-diagnosticsettings/lib/diagnostic-settings-schemas.js +207 -0
  54. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +193 -0
  55. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +200 -0
  56. package/lib/azure-diagnosticsettings/lib/index.d.ts +8 -0
  57. package/lib/azure-diagnosticsettings/lib/index.js +25 -0
  58. package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.d.ts +8 -0
  59. package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.js +432 -0
  60. package/lib/azure-metricalert/index.d.ts +10 -1
  61. package/lib/azure-metricalert/index.js +11 -2
  62. package/lib/azure-metricalert/lib/index.d.ts +4 -0
  63. package/lib/azure-metricalert/lib/index.js +5 -1
  64. package/lib/azure-metricalert/lib/metric-alert-schemas.d.ts +24 -0
  65. package/lib/azure-metricalert/lib/metric-alert-schemas.js +242 -0
  66. package/lib/azure-metricalert/lib/metric-alert.d.ts +337 -49
  67. package/lib/azure-metricalert/lib/metric-alert.js +228 -104
  68. package/lib/azure-metricalert/test/metric-alert.integ.d.ts +9 -0
  69. package/lib/azure-metricalert/test/metric-alert.integ.js +123 -0
  70. package/lib/azure-metricalert/test/metric-alert.spec.d.ts +9 -0
  71. package/lib/azure-metricalert/test/metric-alert.spec.js +1266 -0
  72. package/lib/azure-networkinterface/index.d.ts +4 -0
  73. package/lib/azure-networkinterface/index.js +21 -0
  74. package/lib/azure-networkinterface/lib/index.d.ts +6 -0
  75. package/lib/azure-networkinterface/lib/index.js +22 -0
  76. package/lib/azure-networkinterface/lib/network-interface-schemas.d.ts +32 -0
  77. package/lib/azure-networkinterface/lib/network-interface-schemas.js +222 -0
  78. package/lib/azure-networkinterface/lib/network-interface.d.ts +265 -0
  79. package/lib/azure-networkinterface/lib/network-interface.js +228 -0
  80. package/lib/azure-networkinterface/test/network-interface.integ.d.ts +9 -0
  81. package/lib/azure-networkinterface/test/network-interface.integ.js +102 -0
  82. package/lib/azure-networkinterface/test/network-interface.spec.d.ts +8 -0
  83. package/lib/azure-networkinterface/test/network-interface.spec.js +655 -0
  84. package/lib/azure-networksecuritygroup/index.d.ts +5 -0
  85. package/lib/azure-networksecuritygroup/index.js +6 -1
  86. package/lib/azure-networksecuritygroup/lib/index.d.ts +5 -2
  87. package/lib/azure-networksecuritygroup/lib/index.js +14 -17
  88. package/lib/azure-networksecuritygroup/lib/network-security-group-schemas.d.ts +32 -0
  89. package/lib/azure-networksecuritygroup/lib/network-security-group-schemas.js +198 -0
  90. package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +268 -0
  91. package/lib/azure-networksecuritygroup/lib/network-security-group.js +248 -0
  92. package/lib/azure-networksecuritygroup/test/network-security-group.integ.d.ts +9 -0
  93. package/lib/azure-networksecuritygroup/test/network-security-group.integ.js +151 -0
  94. package/lib/azure-networksecuritygroup/test/network-security-group.spec.d.ts +8 -0
  95. package/lib/azure-networksecuritygroup/test/network-security-group.spec.js +652 -0
  96. package/lib/azure-publicipaddress/index.d.ts +6 -0
  97. package/lib/azure-publicipaddress/index.js +23 -0
  98. package/lib/azure-publicipaddress/lib/index.d.ts +9 -0
  99. package/lib/azure-publicipaddress/lib/index.js +19 -0
  100. package/lib/azure-publicipaddress/lib/public-ip-address-schemas.d.ts +32 -0
  101. package/lib/azure-publicipaddress/lib/public-ip-address-schemas.js +227 -0
  102. package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +256 -0
  103. package/lib/azure-publicipaddress/lib/public-ip-address.js +267 -0
  104. package/lib/azure-publicipaddress/test/public-ip-address.integ.d.ts +9 -0
  105. package/lib/azure-publicipaddress/test/public-ip-address.integ.js +75 -0
  106. package/lib/azure-publicipaddress/test/public-ip-address.spec.d.ts +15 -0
  107. package/lib/azure-publicipaddress/test/public-ip-address.spec.js +498 -0
  108. package/lib/azure-resourcegroup/index.d.ts +37 -0
  109. package/lib/azure-resourcegroup/index.js +39 -1
  110. package/lib/azure-resourcegroup/lib/index.d.ts +44 -0
  111. package/lib/azure-resourcegroup/lib/index.js +43 -1
  112. package/lib/azure-resourcegroup/lib/resource-group-schemas.d.ts +40 -0
  113. package/lib/azure-resourcegroup/lib/resource-group-schemas.js +243 -0
  114. package/lib/azure-resourcegroup/lib/resource-group.d.ts +170 -46
  115. package/lib/azure-resourcegroup/lib/resource-group.js +222 -56
  116. package/lib/azure-resourcegroup/test/resource-group.integ.d.ts +9 -0
  117. package/lib/azure-resourcegroup/test/resource-group.integ.js +72 -0
  118. package/lib/azure-resourcegroup/test/resource-group.spec.d.ts +9 -0
  119. package/lib/azure-resourcegroup/test/resource-group.spec.js +554 -0
  120. package/lib/azure-storageaccount/index.d.ts +19 -0
  121. package/lib/azure-storageaccount/index.js +20 -1
  122. package/lib/azure-storageaccount/lib/index.d.ts +8 -5
  123. package/lib/azure-storageaccount/lib/index.js +9 -6
  124. package/lib/azure-storageaccount/lib/storage-account-schemas.d.ts +138 -0
  125. package/lib/azure-storageaccount/lib/storage-account-schemas.js +378 -0
  126. package/lib/azure-storageaccount/lib/storage-account.d.ts +348 -0
  127. package/lib/azure-storageaccount/lib/storage-account.js +365 -0
  128. package/lib/azure-storageaccount/test/storage-account.integ.d.ts +9 -0
  129. package/lib/azure-storageaccount/test/storage-account.integ.js +151 -0
  130. package/lib/azure-storageaccount/test/storage-account.spec.d.ts +4 -0
  131. package/lib/azure-storageaccount/test/storage-account.spec.js +315 -0
  132. package/lib/azure-subnet/index.d.ts +4 -0
  133. package/lib/azure-subnet/index.js +21 -0
  134. package/lib/azure-subnet/lib/index.d.ts +5 -0
  135. package/lib/azure-subnet/lib/index.js +22 -0
  136. package/lib/azure-subnet/lib/subnet-schemas.d.ts +32 -0
  137. package/lib/azure-subnet/lib/subnet-schemas.js +237 -0
  138. package/lib/azure-subnet/lib/subnet.d.ts +285 -0
  139. package/lib/azure-subnet/lib/subnet.js +254 -0
  140. package/lib/azure-subnet/test/subnet.integ.d.ts +11 -0
  141. package/lib/azure-subnet/test/subnet.integ.js +80 -0
  142. package/lib/azure-subnet/test/subnet.spec.d.ts +8 -0
  143. package/lib/azure-subnet/test/subnet.spec.js +396 -0
  144. package/lib/azure-virtualmachine/index.d.ts +6 -0
  145. package/lib/azure-virtualmachine/index.js +7 -1
  146. package/lib/azure-virtualmachine/lib/index.d.ts +11 -2
  147. package/lib/azure-virtualmachine/lib/index.js +22 -3
  148. package/lib/azure-virtualmachine/lib/virtual-machine-schemas.d.ts +327 -0
  149. package/lib/azure-virtualmachine/lib/virtual-machine-schemas.js +544 -0
  150. package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +377 -0
  151. package/lib/azure-virtualmachine/lib/virtual-machine.js +462 -0
  152. package/lib/azure-virtualmachine/test/virtual-machine.integ.d.ts +9 -0
  153. package/lib/azure-virtualmachine/test/virtual-machine.integ.js +220 -0
  154. package/lib/azure-virtualmachine/test/virtual-machine.spec.d.ts +9 -0
  155. package/lib/azure-virtualmachine/test/virtual-machine.spec.js +1032 -0
  156. package/lib/azure-virtualnetwork/index.d.ts +9 -0
  157. package/lib/azure-virtualnetwork/index.js +11 -1
  158. package/lib/azure-virtualnetwork/lib/index.d.ts +9 -2
  159. package/lib/azure-virtualnetwork/lib/index.js +20 -17
  160. package/lib/azure-virtualnetwork/lib/virtual-network-schemas.d.ts +32 -0
  161. package/lib/azure-virtualnetwork/lib/virtual-network-schemas.js +236 -0
  162. package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +213 -0
  163. package/lib/azure-virtualnetwork/lib/virtual-network.js +245 -0
  164. package/lib/azure-virtualnetwork/test/virtual-network.integ.d.ts +9 -0
  165. package/lib/azure-virtualnetwork/test/virtual-network.integ.js +91 -0
  166. package/lib/azure-virtualnetwork/test/virtual-network.spec.d.ts +8 -0
  167. package/lib/azure-virtualnetwork/test/virtual-network.spec.js +398 -0
  168. package/lib/azure-vmss/index.d.ts +6 -0
  169. package/lib/azure-vmss/index.js +23 -0
  170. package/lib/azure-vmss/lib/index.d.ts +9 -0
  171. package/lib/azure-vmss/lib/index.js +39 -0
  172. package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +258 -0
  173. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +503 -0
  174. package/lib/azure-vmss/lib/vmss-schemas.d.ts +472 -0
  175. package/lib/azure-vmss/lib/vmss-schemas.js +444 -0
  176. package/lib/azure-vmss/test/virtual-machine-scale-set.integ.d.ts +15 -0
  177. package/lib/azure-vmss/test/virtual-machine-scale-set.integ.js +261 -0
  178. package/lib/azure-vmss/test/virtual-machine-scale-set.spec.d.ts +8 -0
  179. package/lib/azure-vmss/test/virtual-machine-scale-set.spec.js +997 -0
  180. package/lib/core-azure/lib/azapi/azapi-exports.d.ts +16 -0
  181. package/lib/core-azure/lib/azapi/azapi-exports.js +38 -0
  182. package/lib/core-azure/lib/azapi/azapi-resource.d.ts +481 -0
  183. package/lib/core-azure/lib/azapi/azapi-resource.js +505 -0
  184. package/lib/core-azure/lib/azapi/azapi-resource.spec.d.ts +7 -0
  185. package/lib/core-azure/lib/azapi/azapi-resource.spec.js +545 -0
  186. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.d.ts +74 -0
  187. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +203 -0
  188. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.d.ts +341 -0
  189. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +671 -0
  190. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.d.ts +344 -0
  191. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.js +583 -0
  192. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.d.ts +128 -0
  193. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.js +281 -0
  194. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.d.ts +285 -0
  195. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.js +491 -0
  196. package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.d.ts +518 -0
  197. package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.js +839 -0
  198. package/lib/core-azure/lib/azapi/providers-azapi/index.d.ts +10 -0
  199. package/lib/core-azure/lib/azapi/providers-azapi/index.js +15 -0
  200. package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.d.ts +0 -0
  201. package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.js +13 -0
  202. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.d.ts +447 -0
  203. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +844 -0
  204. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.d.ts +689 -0
  205. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +1140 -0
  206. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.d.ts +400 -0
  207. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +706 -0
  208. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.d.ts +450 -0
  209. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +788 -0
  210. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.d.ts +215 -0
  211. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +567 -0
  212. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.spec.d.ts +7 -0
  213. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.spec.js +630 -0
  214. package/lib/core-azure/lib/index.d.ts +18 -3
  215. package/lib/core-azure/lib/index.js +24 -4
  216. package/lib/core-azure/lib/version-manager/api-version-manager.d.ts +253 -0
  217. package/lib/core-azure/lib/version-manager/api-version-manager.js +509 -0
  218. package/lib/core-azure/lib/version-manager/api-version-manager.spec.d.ts +7 -0
  219. package/lib/core-azure/lib/version-manager/api-version-manager.spec.js +510 -0
  220. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.d.ts +669 -0
  221. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +202 -0
  222. package/lib/core-azure/lib/version-manager/version-manager.d.ts +9 -0
  223. package/lib/core-azure/lib/version-manager/version-manager.js +23 -0
  224. package/lib/index.d.ts +54 -13
  225. package/lib/index.js +76 -15
  226. package/lib/testing/index.d.ts +124 -1
  227. package/lib/testing/index.js +480 -4
  228. package/lib/testing/lib/cleanup.d.ts +229 -0
  229. package/lib/testing/lib/cleanup.js +331 -0
  230. package/lib/testing/lib/metadata.d.ts +151 -0
  231. package/lib/testing/lib/metadata.js +180 -0
  232. package/lib/testing/lib/naming.d.ts +96 -0
  233. package/lib/testing/lib/naming.js +336 -0
  234. package/lib/util/azureTenantIdHelpers.js +3 -4
  235. package/lib/util/randomName.js +2 -3
  236. package/node_modules/uuid/LICENSE.md +9 -0
  237. package/node_modules/uuid/README.md +510 -0
  238. package/node_modules/uuid/dist/cjs/index.d.ts +15 -0
  239. package/node_modules/uuid/dist/cjs/index.js +31 -0
  240. package/node_modules/uuid/dist/cjs/max.d.ts +2 -0
  241. package/node_modules/uuid/dist/cjs/max.js +3 -0
  242. package/node_modules/uuid/dist/cjs/md5.d.ts +4 -0
  243. package/node_modules/uuid/dist/cjs/md5.js +13 -0
  244. package/node_modules/uuid/dist/cjs/native.d.ts +6 -0
  245. package/node_modules/uuid/dist/cjs/native.js +4 -0
  246. package/node_modules/uuid/dist/cjs/nil.d.ts +2 -0
  247. package/node_modules/uuid/dist/cjs/nil.js +3 -0
  248. package/node_modules/uuid/dist/cjs/package.json +1 -0
  249. package/node_modules/uuid/dist/cjs/parse.d.ts +2 -0
  250. package/node_modules/uuid/dist/cjs/parse.js +11 -0
  251. package/node_modules/uuid/dist/cjs/regex.d.ts +2 -0
  252. package/node_modules/uuid/dist/cjs/regex.js +3 -0
  253. package/node_modules/uuid/dist/cjs/rng.d.ts +1 -0
  254. package/node_modules/uuid/dist/cjs/rng.js +13 -0
  255. package/node_modules/uuid/dist/cjs/sha1.d.ts +4 -0
  256. package/node_modules/uuid/dist/cjs/sha1.js +13 -0
  257. package/node_modules/uuid/dist/cjs/stringify.d.ts +3 -0
  258. package/node_modules/uuid/dist/cjs/stringify.js +39 -0
  259. package/node_modules/uuid/dist/cjs/types.d.ts +21 -0
  260. package/node_modules/uuid/dist/cjs/types.js +2 -0
  261. package/node_modules/uuid/dist/cjs/uuid-bin.d.ts +1 -0
  262. package/node_modules/uuid/dist/cjs/uuid-bin.js +72 -0
  263. package/node_modules/uuid/dist/cjs/v1.d.ts +11 -0
  264. package/node_modules/uuid/dist/cjs/v1.js +87 -0
  265. package/node_modules/uuid/dist/cjs/v1ToV6.d.ts +2 -0
  266. package/node_modules/uuid/dist/cjs/v1ToV6.js +13 -0
  267. package/node_modules/uuid/dist/cjs/v3.d.ts +9 -0
  268. package/node_modules/uuid/dist/cjs/v3.js +14 -0
  269. package/node_modules/uuid/dist/cjs/v35.d.ts +7 -0
  270. package/node_modules/uuid/dist/cjs/v35.js +41 -0
  271. package/node_modules/uuid/dist/cjs/v4.d.ts +4 -0
  272. package/node_modules/uuid/dist/cjs/v4.js +29 -0
  273. package/node_modules/uuid/dist/cjs/v5.d.ts +9 -0
  274. package/node_modules/uuid/dist/cjs/v5.js +14 -0
  275. package/node_modules/uuid/dist/cjs/v6.d.ts +4 -0
  276. package/node_modules/uuid/dist/cjs/v6.js +19 -0
  277. package/node_modules/uuid/dist/cjs/v6ToV1.d.ts +2 -0
  278. package/node_modules/uuid/dist/cjs/v6ToV1.js +13 -0
  279. package/node_modules/uuid/dist/cjs/v7.d.ts +9 -0
  280. package/node_modules/uuid/dist/cjs/v7.js +69 -0
  281. package/node_modules/uuid/dist/cjs/validate.d.ts +2 -0
  282. package/node_modules/uuid/dist/cjs/validate.js +7 -0
  283. package/node_modules/uuid/dist/cjs/version.d.ts +2 -0
  284. package/node_modules/uuid/dist/cjs/version.js +10 -0
  285. package/node_modules/uuid/dist/cjs-browser/index.d.ts +15 -0
  286. package/node_modules/uuid/dist/cjs-browser/index.js +31 -0
  287. package/node_modules/uuid/dist/cjs-browser/max.d.ts +2 -0
  288. package/node_modules/uuid/dist/cjs-browser/max.js +3 -0
  289. package/node_modules/uuid/dist/cjs-browser/md5.d.ts +2 -0
  290. package/node_modules/uuid/dist/cjs-browser/md5.js +137 -0
  291. package/node_modules/uuid/dist/cjs-browser/native.d.ts +4 -0
  292. package/node_modules/uuid/dist/cjs-browser/native.js +4 -0
  293. package/node_modules/uuid/dist/cjs-browser/nil.d.ts +2 -0
  294. package/node_modules/uuid/dist/cjs-browser/nil.js +3 -0
  295. package/node_modules/uuid/dist/cjs-browser/package.json +1 -0
  296. package/node_modules/uuid/dist/cjs-browser/parse.d.ts +2 -0
  297. package/node_modules/uuid/dist/cjs-browser/parse.js +11 -0
  298. package/node_modules/uuid/dist/cjs-browser/regex.d.ts +2 -0
  299. package/node_modules/uuid/dist/cjs-browser/regex.js +3 -0
  300. package/node_modules/uuid/dist/cjs-browser/rng.d.ts +1 -0
  301. package/node_modules/uuid/dist/cjs-browser/rng.js +14 -0
  302. package/node_modules/uuid/dist/cjs-browser/sha1.d.ts +2 -0
  303. package/node_modules/uuid/dist/cjs-browser/sha1.js +72 -0
  304. package/node_modules/uuid/dist/cjs-browser/stringify.d.ts +3 -0
  305. package/node_modules/uuid/dist/cjs-browser/stringify.js +39 -0
  306. package/node_modules/uuid/dist/cjs-browser/types.d.ts +21 -0
  307. package/node_modules/uuid/dist/cjs-browser/types.js +2 -0
  308. package/node_modules/uuid/dist/cjs-browser/uuid-bin.d.ts +1 -0
  309. package/node_modules/uuid/dist/cjs-browser/uuid-bin.js +72 -0
  310. package/node_modules/uuid/dist/cjs-browser/v1.d.ts +11 -0
  311. package/node_modules/uuid/dist/cjs-browser/v1.js +87 -0
  312. package/node_modules/uuid/dist/cjs-browser/v1ToV6.d.ts +2 -0
  313. package/node_modules/uuid/dist/cjs-browser/v1ToV6.js +13 -0
  314. package/node_modules/uuid/dist/cjs-browser/v3.d.ts +9 -0
  315. package/node_modules/uuid/dist/cjs-browser/v3.js +14 -0
  316. package/node_modules/uuid/dist/cjs-browser/v35.d.ts +7 -0
  317. package/node_modules/uuid/dist/cjs-browser/v35.js +41 -0
  318. package/node_modules/uuid/dist/cjs-browser/v4.d.ts +4 -0
  319. package/node_modules/uuid/dist/cjs-browser/v4.js +29 -0
  320. package/node_modules/uuid/dist/cjs-browser/v5.d.ts +9 -0
  321. package/node_modules/uuid/dist/cjs-browser/v5.js +14 -0
  322. package/node_modules/uuid/dist/cjs-browser/v6.d.ts +4 -0
  323. package/node_modules/uuid/dist/cjs-browser/v6.js +19 -0
  324. package/node_modules/uuid/dist/cjs-browser/v6ToV1.d.ts +2 -0
  325. package/node_modules/uuid/dist/cjs-browser/v6ToV1.js +13 -0
  326. package/node_modules/uuid/dist/cjs-browser/v7.d.ts +9 -0
  327. package/node_modules/uuid/dist/cjs-browser/v7.js +69 -0
  328. package/node_modules/uuid/dist/cjs-browser/validate.d.ts +2 -0
  329. package/node_modules/uuid/dist/cjs-browser/validate.js +7 -0
  330. package/node_modules/uuid/dist/cjs-browser/version.d.ts +2 -0
  331. package/node_modules/uuid/dist/cjs-browser/version.js +10 -0
  332. package/node_modules/uuid/dist/esm/bin/uuid +2 -0
  333. package/node_modules/uuid/dist/esm/index.d.ts +15 -0
  334. package/node_modules/uuid/dist/esm/index.js +14 -0
  335. package/node_modules/uuid/dist/esm/max.d.ts +2 -0
  336. package/node_modules/uuid/dist/esm/max.js +1 -0
  337. package/node_modules/uuid/dist/esm/md5.d.ts +4 -0
  338. package/node_modules/uuid/dist/esm/md5.js +11 -0
  339. package/node_modules/uuid/dist/esm/native.d.ts +6 -0
  340. package/node_modules/uuid/dist/esm/native.js +2 -0
  341. package/node_modules/uuid/dist/esm/nil.d.ts +2 -0
  342. package/node_modules/uuid/dist/esm/nil.js +1 -0
  343. package/node_modules/uuid/dist/esm/parse.d.ts +2 -0
  344. package/node_modules/uuid/dist/esm/parse.js +9 -0
  345. package/node_modules/uuid/dist/esm/regex.d.ts +2 -0
  346. package/node_modules/uuid/dist/esm/regex.js +1 -0
  347. package/node_modules/uuid/dist/esm/rng.d.ts +1 -0
  348. package/node_modules/uuid/dist/esm/rng.js +10 -0
  349. package/node_modules/uuid/dist/esm/sha1.d.ts +4 -0
  350. package/node_modules/uuid/dist/esm/sha1.js +11 -0
  351. package/node_modules/uuid/dist/esm/stringify.d.ts +3 -0
  352. package/node_modules/uuid/dist/esm/stringify.js +35 -0
  353. package/node_modules/uuid/dist/esm/types.d.ts +21 -0
  354. package/node_modules/uuid/dist/esm/types.js +1 -0
  355. package/node_modules/uuid/dist/esm/uuid-bin.d.ts +1 -0
  356. package/node_modules/uuid/dist/esm/uuid-bin.js +70 -0
  357. package/node_modules/uuid/dist/esm/v1.d.ts +11 -0
  358. package/node_modules/uuid/dist/esm/v1.js +83 -0
  359. package/node_modules/uuid/dist/esm/v1ToV6.d.ts +2 -0
  360. package/node_modules/uuid/dist/esm/v1ToV6.js +10 -0
  361. package/node_modules/uuid/dist/esm/v3.d.ts +9 -0
  362. package/node_modules/uuid/dist/esm/v3.js +9 -0
  363. package/node_modules/uuid/dist/esm/v35.d.ts +7 -0
  364. package/node_modules/uuid/dist/esm/v35.js +36 -0
  365. package/node_modules/uuid/dist/esm/v4.d.ts +4 -0
  366. package/node_modules/uuid/dist/esm/v4.js +27 -0
  367. package/node_modules/uuid/dist/esm/v5.d.ts +9 -0
  368. package/node_modules/uuid/dist/esm/v5.js +9 -0
  369. package/node_modules/uuid/dist/esm/v6.d.ts +4 -0
  370. package/node_modules/uuid/dist/esm/v6.js +17 -0
  371. package/node_modules/uuid/dist/esm/v6ToV1.d.ts +2 -0
  372. package/node_modules/uuid/dist/esm/v6ToV1.js +10 -0
  373. package/node_modules/uuid/dist/esm/v7.d.ts +9 -0
  374. package/node_modules/uuid/dist/esm/v7.js +65 -0
  375. package/node_modules/uuid/dist/esm/validate.d.ts +2 -0
  376. package/node_modules/uuid/dist/esm/validate.js +5 -0
  377. package/node_modules/uuid/dist/esm/version.d.ts +2 -0
  378. package/node_modules/uuid/dist/esm/version.js +8 -0
  379. package/node_modules/uuid/dist/esm-browser/index.d.ts +15 -0
  380. package/node_modules/uuid/dist/esm-browser/index.js +14 -0
  381. package/node_modules/uuid/dist/esm-browser/max.d.ts +2 -0
  382. package/node_modules/uuid/dist/esm-browser/max.js +1 -0
  383. package/node_modules/uuid/dist/esm-browser/md5.d.ts +2 -0
  384. package/node_modules/uuid/dist/esm-browser/md5.js +135 -0
  385. package/node_modules/uuid/dist/esm-browser/native.d.ts +4 -0
  386. package/node_modules/uuid/dist/esm-browser/native.js +2 -0
  387. package/node_modules/uuid/dist/esm-browser/nil.d.ts +2 -0
  388. package/node_modules/uuid/dist/esm-browser/nil.js +1 -0
  389. package/node_modules/uuid/dist/esm-browser/parse.d.ts +2 -0
  390. package/node_modules/uuid/dist/esm-browser/parse.js +9 -0
  391. package/node_modules/uuid/dist/esm-browser/regex.d.ts +2 -0
  392. package/node_modules/uuid/dist/esm-browser/regex.js +1 -0
  393. package/node_modules/uuid/dist/esm-browser/rng.d.ts +1 -0
  394. package/node_modules/uuid/dist/esm-browser/rng.js +11 -0
  395. package/node_modules/uuid/dist/esm-browser/sha1.d.ts +2 -0
  396. package/node_modules/uuid/dist/esm-browser/sha1.js +70 -0
  397. package/node_modules/uuid/dist/esm-browser/stringify.d.ts +3 -0
  398. package/node_modules/uuid/dist/esm-browser/stringify.js +35 -0
  399. package/node_modules/uuid/dist/esm-browser/types.d.ts +21 -0
  400. package/node_modules/uuid/dist/esm-browser/types.js +1 -0
  401. package/node_modules/uuid/dist/esm-browser/uuid-bin.d.ts +1 -0
  402. package/node_modules/uuid/dist/esm-browser/uuid-bin.js +70 -0
  403. package/node_modules/uuid/dist/esm-browser/v1.d.ts +11 -0
  404. package/node_modules/uuid/dist/esm-browser/v1.js +83 -0
  405. package/node_modules/uuid/dist/esm-browser/v1ToV6.d.ts +2 -0
  406. package/node_modules/uuid/dist/esm-browser/v1ToV6.js +10 -0
  407. package/node_modules/uuid/dist/esm-browser/v3.d.ts +9 -0
  408. package/node_modules/uuid/dist/esm-browser/v3.js +9 -0
  409. package/node_modules/uuid/dist/esm-browser/v35.d.ts +7 -0
  410. package/node_modules/uuid/dist/esm-browser/v35.js +36 -0
  411. package/node_modules/uuid/dist/esm-browser/v4.d.ts +4 -0
  412. package/node_modules/uuid/dist/esm-browser/v4.js +27 -0
  413. package/node_modules/uuid/dist/esm-browser/v5.d.ts +9 -0
  414. package/node_modules/uuid/dist/esm-browser/v5.js +9 -0
  415. package/node_modules/uuid/dist/esm-browser/v6.d.ts +4 -0
  416. package/node_modules/uuid/dist/esm-browser/v6.js +17 -0
  417. package/node_modules/uuid/dist/esm-browser/v6ToV1.d.ts +2 -0
  418. package/node_modules/uuid/dist/esm-browser/v6ToV1.js +10 -0
  419. package/node_modules/uuid/dist/esm-browser/v7.d.ts +9 -0
  420. package/node_modules/uuid/dist/esm-browser/v7.js +65 -0
  421. package/node_modules/uuid/dist/esm-browser/validate.d.ts +2 -0
  422. package/node_modules/uuid/dist/esm-browser/validate.js +5 -0
  423. package/node_modules/uuid/dist/esm-browser/version.d.ts +2 -0
  424. package/node_modules/uuid/dist/esm-browser/version.js +8 -0
  425. package/node_modules/uuid/package.json +132 -0
  426. package/package.json +51 -33
  427. package/scripts/cleanup-test-resources.ts +369 -0
  428. package/cdktf.out/manifest.json +0 -13
  429. package/cdktf.out/stacks/testAzureActionGroup/cdk.tf.json +0 -111
  430. package/cdktf.out/stacks/testAzureApplicationGateway/cdk.tf.json +0 -588
  431. package/cdktf.out/stacks/testAzureApplicationInsights/cdk.tf.json +0 -245
  432. package/cdktf.out/stacks/testAzureContainerRegistry/cdk.tf.json +0 -179
  433. package/cdktf.out/stacks/testAzureEventhub/cdk.tf.json +0 -236
  434. package/cdktf.out/stacks/testAzureKeyVault/cdk.tf.json +0 -436
  435. package/cdktf.out/stacks/testAzureKubernetesCluster/cdk.tf.json +0 -152
  436. package/cdktf.out/stacks/testAzureKusto/cdk.tf.json +0 -209
  437. package/cdktf.out/stacks/testAzureLinuxFunctionApp/cdk.tf.json +0 -439
  438. package/cdktf.out/stacks/testAzureLinuxVirtualMachineExample/cdk.tf.json +0 -283
  439. package/cdktf.out/stacks/testAzureLinuxVirtualMachineScaleSetExample/cdk.tf.json +0 -261
  440. package/cdktf.out/stacks/testAzureLogAnalytics/cdk.tf.json +0 -309
  441. package/cdktf.out/stacks/testAzureMetricAlert/cdk.tf.json +0 -161
  442. package/cdktf.out/stacks/testAzureNetworkSecurityGroup/cdk.tf.json +0 -271
  443. package/cdktf.out/stacks/testAzureQueryRuleAlert/cdk.tf.json +0 -122
  444. package/cdktf.out/stacks/testAzureResourceGroup/cdk.tf.json +0 -88
  445. package/cdktf.out/stacks/testAzureStorageAccount/cdk.tf.json +0 -339
  446. package/cdktf.out/stacks/testAzureVirtualNetwork/cdk.tf.json +0 -264
  447. package/cdktf.out/stacks/testAzureWindowVirtualMachineScaleSetExample/cdk.tf.json +0 -261
  448. package/cdktf.out/stacks/testAzureWindowsVirtualMachineExample/cdk.tf.json +0 -280
  449. package/cdktf.out/stacks/testExampleAzureResource/cdk.tf.json +0 -167
  450. package/lib/azure-actiongroup/lib/actiongroup.d.ts +0 -49
  451. package/lib/azure-actiongroup/lib/actiongroup.js +0 -85
  452. package/lib/azure-actiongroup/model/action-group-props.d.ts +0 -47
  453. package/lib/azure-actiongroup/model/action-group-props.js +0 -3
  454. package/lib/azure-actiongroup/model/arm-role-receiver-props.d.ts +0 -20
  455. package/lib/azure-actiongroup/model/arm-role-receiver-props.js +0 -3
  456. package/lib/azure-actiongroup/model/azure-app-push-receiver-props.d.ts +0 -14
  457. package/lib/azure-actiongroup/model/azure-app-push-receiver-props.js +0 -3
  458. package/lib/azure-actiongroup/model/email-receiver-props.d.ts +0 -19
  459. package/lib/azure-actiongroup/model/email-receiver-props.js +0 -3
  460. package/lib/azure-actiongroup/model/eventhub-receiver-props.d.ts +0 -23
  461. package/lib/azure-actiongroup/model/eventhub-receiver-props.js +0 -3
  462. package/lib/azure-actiongroup/model/function.d.ts +0 -40
  463. package/lib/azure-actiongroup/model/function.js +0 -118
  464. package/lib/azure-actiongroup/model/index.d.ts +0 -10
  465. package/lib/azure-actiongroup/model/index.js +0 -27
  466. package/lib/azure-actiongroup/model/logic-app-receiver-props.d.ts +0 -23
  467. package/lib/azure-actiongroup/model/logic-app-receiver-props.js +0 -3
  468. package/lib/azure-actiongroup/model/sms-receiver-props.d.ts +0 -18
  469. package/lib/azure-actiongroup/model/sms-receiver-props.js +0 -3
  470. package/lib/azure-actiongroup/model/voice-receiver-props.d.ts +0 -18
  471. package/lib/azure-actiongroup/model/voice-receiver-props.js +0 -3
  472. package/lib/azure-actiongroup/model/webhook-receiver-props.d.ts +0 -18
  473. package/lib/azure-actiongroup/model/webhook-receiver-props.js +0 -3
  474. package/lib/azure-actiongroup/test/AzureActionGroup.spec.d.ts +0 -1
  475. package/lib/azure-actiongroup/test/AzureActionGroup.spec.js +0 -294
  476. package/lib/azure-actiongroup/test/ExampleAzureActionGroup.d.ts +0 -5
  477. package/lib/azure-actiongroup/test/ExampleAzureActionGroup.js +0 -66
  478. package/lib/azure-applicationgateway/index.d.ts +0 -1
  479. package/lib/azure-applicationgateway/index.js +0 -18
  480. package/lib/azure-applicationgateway/lib/gateway.d.ts +0 -248
  481. package/lib/azure-applicationgateway/lib/gateway.js +0 -199
  482. package/lib/azure-applicationgateway/lib/index.d.ts +0 -1
  483. package/lib/azure-applicationgateway/lib/index.js +0 -18
  484. package/lib/azure-applicationgateway/test/AzureApplicationGateway.spec.d.ts +0 -1
  485. package/lib/azure-applicationgateway/test/AzureApplicationGateway.spec.js +0 -106
  486. package/lib/azure-applicationgateway/test/ExampleAzureApplicationGateway.d.ts +0 -5
  487. package/lib/azure-applicationgateway/test/ExampleAzureApplicationGateway.js +0 -267
  488. package/lib/azure-applicationinsights/index.d.ts +0 -1
  489. package/lib/azure-applicationinsights/index.js +0 -18
  490. package/lib/azure-applicationinsights/lib/appinsights.d.ts +0 -110
  491. package/lib/azure-applicationinsights/lib/appinsights.js +0 -134
  492. package/lib/azure-applicationinsights/lib/index.d.ts +0 -1
  493. package/lib/azure-applicationinsights/lib/index.js +0 -18
  494. package/lib/azure-applicationinsights/test/AzureAppInsights.spec.d.ts +0 -1
  495. package/lib/azure-applicationinsights/test/AzureAppInsights.spec.js +0 -55
  496. package/lib/azure-applicationinsights/test/ExampleAzureApplicationInsights.d.ts +0 -5
  497. package/lib/azure-applicationinsights/test/ExampleAzureApplicationInsights.js +0 -87
  498. package/lib/azure-containerregistry/index.d.ts +0 -1
  499. package/lib/azure-containerregistry/index.js +0 -18
  500. package/lib/azure-containerregistry/lib/index.d.ts +0 -1
  501. package/lib/azure-containerregistry/lib/index.js +0 -18
  502. package/lib/azure-containerregistry/lib/registry.d.ts +0 -70
  503. package/lib/azure-containerregistry/lib/registry.js +0 -76
  504. package/lib/azure-containerregistry/test/AzureContainerRegistry.spec.d.ts +0 -1
  505. package/lib/azure-containerregistry/test/AzureContainerRegistry.spec.js +0 -50
  506. package/lib/azure-containerregistry/test/ExampleAzureContainerRegistry.d.ts +0 -5
  507. package/lib/azure-containerregistry/test/ExampleAzureContainerRegistry.js +0 -57
  508. package/lib/azure-datalake/index.d.ts +0 -1
  509. package/lib/azure-datalake/index.js +0 -18
  510. package/lib/azure-datalake/lib/datalake.d.ts +0 -64
  511. package/lib/azure-datalake/lib/datalake.js +0 -92
  512. package/lib/azure-datalake/lib/filesystem.d.ts +0 -70
  513. package/lib/azure-datalake/lib/filesystem.js +0 -83
  514. package/lib/azure-datalake/lib/index.d.ts +0 -3
  515. package/lib/azure-datalake/lib/index.js +0 -20
  516. package/lib/azure-datalake/lib/path.d.ts +0 -49
  517. package/lib/azure-datalake/lib/path.js +0 -51
  518. package/lib/azure-eventhub/index.d.ts +0 -1
  519. package/lib/azure-eventhub/index.js +0 -18
  520. package/lib/azure-eventhub/lib/authorization.d.ts +0 -58
  521. package/lib/azure-eventhub/lib/authorization.js +0 -84
  522. package/lib/azure-eventhub/lib/cluster.d.ts +0 -56
  523. package/lib/azure-eventhub/lib/cluster.js +0 -64
  524. package/lib/azure-eventhub/lib/consumer.d.ts +0 -54
  525. package/lib/azure-eventhub/lib/consumer.js +0 -59
  526. package/lib/azure-eventhub/lib/index.d.ts +0 -6
  527. package/lib/azure-eventhub/lib/index.js +0 -23
  528. package/lib/azure-eventhub/lib/instance.d.ts +0 -164
  529. package/lib/azure-eventhub/lib/instance.js +0 -184
  530. package/lib/azure-eventhub/lib/kusto-connection.d.ts +0 -109
  531. package/lib/azure-eventhub/lib/kusto-connection.js +0 -76
  532. package/lib/azure-eventhub/lib/namespace.d.ts +0 -151
  533. package/lib/azure-eventhub/lib/namespace.js +0 -131
  534. package/lib/azure-eventhub/test/AzureEventhub.spec.d.ts +0 -1
  535. package/lib/azure-eventhub/test/AzureEventhub.spec.js +0 -56
  536. package/lib/azure-eventhub/test/ExampleAzureEventhub.d.ts +0 -5
  537. package/lib/azure-eventhub/test/ExampleAzureEventhub.js +0 -72
  538. package/lib/azure-functionapp/index.d.ts +0 -1
  539. package/lib/azure-functionapp/index.js +0 -18
  540. package/lib/azure-functionapp/lib/functionapplinux.d.ts +0 -211
  541. package/lib/azure-functionapp/lib/functionapplinux.js +0 -141
  542. package/lib/azure-functionapp/lib/index.d.ts +0 -1
  543. package/lib/azure-functionapp/lib/index.js +0 -18
  544. package/lib/azure-functionapp/serviceplanskus.d.ts +0 -70
  545. package/lib/azure-functionapp/serviceplanskus.js +0 -81
  546. package/lib/azure-functionapp/test/AzureLinuxFunctionApp.spec.d.ts +0 -1
  547. package/lib/azure-functionapp/test/AzureLinuxFunctionApp.spec.js +0 -48
  548. package/lib/azure-functionapp/test/ExampleAzureLinuxFunctionApp.d.ts +0 -5
  549. package/lib/azure-functionapp/test/ExampleAzureLinuxFunctionApp.js +0 -123
  550. package/lib/azure-keyvault/index.d.ts +0 -1
  551. package/lib/azure-keyvault/index.js +0 -18
  552. package/lib/azure-keyvault/lib/certificate.d.ts +0 -133
  553. package/lib/azure-keyvault/lib/certificate.js +0 -146
  554. package/lib/azure-keyvault/lib/index.d.ts +0 -5
  555. package/lib/azure-keyvault/lib/index.js +0 -22
  556. package/lib/azure-keyvault/lib/key.d.ts +0 -72
  557. package/lib/azure-keyvault/lib/key.js +0 -69
  558. package/lib/azure-keyvault/lib/policy.d.ts +0 -76
  559. package/lib/azure-keyvault/lib/policy.js +0 -56
  560. package/lib/azure-keyvault/lib/secret.d.ts +0 -70
  561. package/lib/azure-keyvault/lib/secret.js +0 -64
  562. package/lib/azure-keyvault/lib/vault.d.ts +0 -282
  563. package/lib/azure-keyvault/lib/vault.js +0 -392
  564. package/lib/azure-keyvault/test/AzureKeyVault.spec.d.ts +0 -1
  565. package/lib/azure-keyvault/test/AzureKeyVault.spec.js +0 -63
  566. package/lib/azure-keyvault/test/ExampleAzureKeyVault.d.ts +0 -5
  567. package/lib/azure-keyvault/test/ExampleAzureKeyVault.js +0 -112
  568. package/lib/azure-kubernetes/index.d.ts +0 -1
  569. package/lib/azure-kubernetes/index.js +0 -18
  570. package/lib/azure-kubernetes/lib/cluster.d.ts +0 -93
  571. package/lib/azure-kubernetes/lib/cluster.js +0 -63
  572. package/lib/azure-kubernetes/lib/index.d.ts +0 -1
  573. package/lib/azure-kubernetes/lib/index.js +0 -18
  574. package/lib/azure-kubernetes/test/AzureKubernetesCluster.spec.d.ts +0 -1
  575. package/lib/azure-kubernetes/test/AzureKubernetesCluster.spec.js +0 -56
  576. package/lib/azure-kubernetes/test/ExampleAzureKubernetesCluster.d.ts +0 -5
  577. package/lib/azure-kubernetes/test/ExampleAzureKubernetesCluster.js +0 -65
  578. package/lib/azure-kusto/index.d.ts +0 -1
  579. package/lib/azure-kusto/index.js +0 -18
  580. package/lib/azure-kusto/lib/cluster.d.ts +0 -136
  581. package/lib/azure-kusto/lib/cluster.js +0 -138
  582. package/lib/azure-kusto/lib/compute-specification.d.ts +0 -71
  583. package/lib/azure-kusto/lib/compute-specification.js +0 -651
  584. package/lib/azure-kusto/lib/database.d.ts +0 -162
  585. package/lib/azure-kusto/lib/database.js +0 -180
  586. package/lib/azure-kusto/lib/index.d.ts +0 -3
  587. package/lib/azure-kusto/lib/index.js +0 -20
  588. package/lib/azure-kusto/test/AzureKusto.spec.d.ts +0 -1
  589. package/lib/azure-kusto/test/AzureKusto.spec.js +0 -50
  590. package/lib/azure-kusto/test/ExampleAzureKusto.d.ts +0 -5
  591. package/lib/azure-kusto/test/ExampleAzureKusto.js +0 -71
  592. package/lib/azure-loganalytics/index.d.ts +0 -1
  593. package/lib/azure-loganalytics/index.js +0 -18
  594. package/lib/azure-loganalytics/lib/index.d.ts +0 -1
  595. package/lib/azure-loganalytics/lib/index.js +0 -18
  596. package/lib/azure-loganalytics/lib/workspace.d.ts +0 -163
  597. package/lib/azure-loganalytics/lib/workspace.js +0 -126
  598. package/lib/azure-loganalytics/test/AzureLogAnalytics.spec.d.ts +0 -1
  599. package/lib/azure-loganalytics/test/AzureLogAnalytics.spec.js +0 -50
  600. package/lib/azure-loganalytics/test/ExampleAzureLogAnalytics.d.ts +0 -5
  601. package/lib/azure-loganalytics/test/ExampleAzureLogAnalytics.js +0 -115
  602. package/lib/azure-metricalert/model/action-props.d.ts +0 -11
  603. package/lib/azure-metricalert/model/action-props.js +0 -3
  604. package/lib/azure-metricalert/model/criteria-base-props.d.ts +0 -38
  605. package/lib/azure-metricalert/model/criteria-base-props.js +0 -3
  606. package/lib/azure-metricalert/model/criteria-dimension-props.d.ts +0 -21
  607. package/lib/azure-metricalert/model/criteria-dimension-props.js +0 -3
  608. package/lib/azure-metricalert/model/criteria-props.d.ts +0 -12
  609. package/lib/azure-metricalert/model/criteria-props.js +0 -3
  610. package/lib/azure-metricalert/model/dynamic-criteria-props.d.ts +0 -29
  611. package/lib/azure-metricalert/model/dynamic-criteria-props.js +0 -3
  612. package/lib/azure-metricalert/model/function.d.ts +0 -28
  613. package/lib/azure-metricalert/model/function.js +0 -78
  614. package/lib/azure-metricalert/model/index.d.ts +0 -7
  615. package/lib/azure-metricalert/model/index.js +0 -24
  616. package/lib/azure-metricalert/model/metric-alert-props.d.ts +0 -86
  617. package/lib/azure-metricalert/model/metric-alert-props.js +0 -3
  618. package/lib/azure-metricalert/test/AzureMetricAlert.spec.d.ts +0 -1
  619. package/lib/azure-metricalert/test/AzureMetricAlert.spec.js +0 -63
  620. package/lib/azure-metricalert/test/ExampleAzureMetricAlert.d.ts +0 -5
  621. package/lib/azure-metricalert/test/ExampleAzureMetricAlert.js +0 -81
  622. package/lib/azure-networksecuritygroup/lib/preconfigured-rules.d.ts +0 -77
  623. package/lib/azure-networksecuritygroup/lib/preconfigured-rules.js +0 -608
  624. package/lib/azure-networksecuritygroup/lib/securitygroup.d.ts +0 -190
  625. package/lib/azure-networksecuritygroup/lib/securitygroup.js +0 -172
  626. package/lib/azure-networksecuritygroup/test/AzureNetworkSecurityGroup.spec.d.ts +0 -1
  627. package/lib/azure-networksecuritygroup/test/AzureNetworkSecurityGroup.spec.js +0 -54
  628. package/lib/azure-networksecuritygroup/test/ExampleAzureNetworkSecurityGroup.d.ts +0 -5
  629. package/lib/azure-networksecuritygroup/test/ExampleAzureNetworkSecurityGroup.js +0 -97
  630. package/lib/azure-queryrulealert/index.d.ts +0 -1
  631. package/lib/azure-queryrulealert/index.js +0 -18
  632. package/lib/azure-queryrulealert/lib/index.d.ts +0 -1
  633. package/lib/azure-queryrulealert/lib/index.js +0 -18
  634. package/lib/azure-queryrulealert/lib/query-rule-alert.d.ts +0 -175
  635. package/lib/azure-queryrulealert/lib/query-rule-alert.js +0 -205
  636. package/lib/azure-queryrulealert/test/AzureQueryRuleAlert.spec.d.ts +0 -1
  637. package/lib/azure-queryrulealert/test/AzureQueryRuleAlert.spec.js +0 -67
  638. package/lib/azure-queryrulealert/test/ExampleAzureQueryRuleAlert.d.ts +0 -5
  639. package/lib/azure-queryrulealert/test/ExampleAzureQueryRuleAlert.js +0 -67
  640. package/lib/azure-resourcegroup/test/AzureResourceGroup.spec.d.ts +0 -1
  641. package/lib/azure-resourcegroup/test/AzureResourceGroup.spec.js +0 -41
  642. package/lib/azure-resourcegroup/test/ExampleAzureResourceGroup.d.ts +0 -5
  643. package/lib/azure-resourcegroup/test/ExampleAzureResourceGroup.js +0 -29
  644. package/lib/azure-storageaccount/lib/account.d.ts +0 -232
  645. package/lib/azure-storageaccount/lib/account.js +0 -225
  646. package/lib/azure-storageaccount/lib/container.d.ts +0 -122
  647. package/lib/azure-storageaccount/lib/container.js +0 -167
  648. package/lib/azure-storageaccount/lib/fileshare.d.ts +0 -105
  649. package/lib/azure-storageaccount/lib/fileshare.js +0 -126
  650. package/lib/azure-storageaccount/lib/queue.d.ts +0 -35
  651. package/lib/azure-storageaccount/lib/queue.js +0 -52
  652. package/lib/azure-storageaccount/lib/table.d.ts +0 -38
  653. package/lib/azure-storageaccount/lib/table.js +0 -55
  654. package/lib/azure-storageaccount/test/AzureStorageAccount.spec.d.ts +0 -1
  655. package/lib/azure-storageaccount/test/AzureStorageAccount.spec.js +0 -45
  656. package/lib/azure-storageaccount/test/ExampleAzureStorageAccount.d.ts +0 -5
  657. package/lib/azure-storageaccount/test/ExampleAzureStorageAccount.js +0 -102
  658. package/lib/azure-virtualmachine/lib/image-references.d.ts +0 -22
  659. package/lib/azure-virtualmachine/lib/image-references.js +0 -128
  660. package/lib/azure-virtualmachine/lib/vm.d.ts +0 -281
  661. package/lib/azure-virtualmachine/lib/vm.js +0 -283
  662. package/lib/azure-virtualmachine/test/AzureLinuxVirtualMachine.spec.d.ts +0 -1
  663. package/lib/azure-virtualmachine/test/AzureLinuxVirtualMachine.spec.js +0 -48
  664. package/lib/azure-virtualmachine/test/AzureWindowsVirtualMachine.spec.d.ts +0 -1
  665. package/lib/azure-virtualmachine/test/AzureWindowsVirtualMachine.spec.js +0 -50
  666. package/lib/azure-virtualmachine/test/ExampleAzureLinuxVirtualMachine.d.ts +0 -5
  667. package/lib/azure-virtualmachine/test/ExampleAzureLinuxVirtualMachine.js +0 -106
  668. package/lib/azure-virtualmachine/test/ExampleAzureWindowsVirtualMachine.d.ts +0 -5
  669. package/lib/azure-virtualmachine/test/ExampleAzureWindowsVirtualMachine.js +0 -102
  670. package/lib/azure-virtualmachinescaleset/index.d.ts +0 -1
  671. package/lib/azure-virtualmachinescaleset/index.js +0 -18
  672. package/lib/azure-virtualmachinescaleset/lib/cluster.d.ts +0 -324
  673. package/lib/azure-virtualmachinescaleset/lib/cluster.js +0 -264
  674. package/lib/azure-virtualmachinescaleset/lib/index.d.ts +0 -1
  675. package/lib/azure-virtualmachinescaleset/lib/index.js +0 -18
  676. package/lib/azure-virtualmachinescaleset/test/AzureLinuxVirtualMachineScaleSet.spec.d.ts +0 -1
  677. package/lib/azure-virtualmachinescaleset/test/AzureLinuxVirtualMachineScaleSet.spec.js +0 -48
  678. package/lib/azure-virtualmachinescaleset/test/AzureWindowsVirtualMachineScaleSet.spec.d.ts +0 -1
  679. package/lib/azure-virtualmachinescaleset/test/AzureWindowsVirtualMachineScaleSet.spec.js +0 -50
  680. package/lib/azure-virtualmachinescaleset/test/ExampleAzureLinuxVirtualMachineScaleSet.d.ts +0 -5
  681. package/lib/azure-virtualmachinescaleset/test/ExampleAzureLinuxVirtualMachineScaleSet.js +0 -107
  682. package/lib/azure-virtualmachinescaleset/test/ExampleAzureWindowsVirtualMachineScaleSet.d.ts +0 -5
  683. package/lib/azure-virtualmachinescaleset/test/ExampleAzureWindowsVirtualMachineScaleSet.js +0 -103
  684. package/lib/azure-virtualnetwork/lib/network.d.ts +0 -122
  685. package/lib/azure-virtualnetwork/lib/network.js +0 -120
  686. package/lib/azure-virtualnetwork/lib/peering.d.ts +0 -90
  687. package/lib/azure-virtualnetwork/lib/peering.js +0 -71
  688. package/lib/azure-virtualnetwork/test/AzureVirtualNetwork.spec.d.ts +0 -1
  689. package/lib/azure-virtualnetwork/test/AzureVirtualNetwork.spec.js +0 -48
  690. package/lib/azure-virtualnetwork/test/ExampleAzureVirtualNetwork.d.ts +0 -5
  691. package/lib/azure-virtualnetwork/test/ExampleAzureVirtualNetwork.js +0 -88
  692. package/lib/core-azure/lib/diagsettings.d.ts +0 -89
  693. package/lib/core-azure/lib/diagsettings.js +0 -83
  694. package/lib/core-azure/lib/rbac.d.ts +0 -50
  695. package/lib/core-azure/lib/rbac.js +0 -48
  696. package/lib/core-azure/lib/resource.d.ts +0 -62
  697. package/lib/core-azure/lib/resource.js +0 -118
  698. package/lib/core-azure/test/AzureResource.spec.d.ts +0 -1
  699. package/lib/core-azure/test/AzureResource.spec.js +0 -19
  700. package/lib/core-azure/test/ExampleAzureResource.d.ts +0 -5
  701. package/lib/core-azure/test/ExampleAzureResource.js +0 -67
  702. package/node_modules/moment/CHANGELOG.md +0 -996
  703. package/node_modules/moment/LICENSE +0 -22
  704. package/node_modules/moment/README.md +0 -55
  705. package/node_modules/moment/dist/locale/af.js +0 -71
  706. package/node_modules/moment/dist/locale/ar-dz.js +0 -156
  707. package/node_modules/moment/dist/locale/ar-kw.js +0 -55
  708. package/node_modules/moment/dist/locale/ar-ly.js +0 -171
  709. package/node_modules/moment/dist/locale/ar-ma.js +0 -56
  710. package/node_modules/moment/dist/locale/ar-ps.js +0 -112
  711. package/node_modules/moment/dist/locale/ar-sa.js +0 -105
  712. package/node_modules/moment/dist/locale/ar-tn.js +0 -55
  713. package/node_modules/moment/dist/locale/ar.js +0 -189
  714. package/node_modules/moment/dist/locale/az.js +0 -102
  715. package/node_modules/moment/dist/locale/be.js +0 -142
  716. package/node_modules/moment/dist/locale/bg.js +0 -87
  717. package/node_modules/moment/dist/locale/bm.js +0 -52
  718. package/node_modules/moment/dist/locale/bn-bd.js +0 -129
  719. package/node_modules/moment/dist/locale/bn.js +0 -119
  720. package/node_modules/moment/dist/locale/bo.js +0 -124
  721. package/node_modules/moment/dist/locale/br.js +0 -168
  722. package/node_modules/moment/dist/locale/bs.js +0 -160
  723. package/node_modules/moment/dist/locale/ca.js +0 -100
  724. package/node_modules/moment/dist/locale/cs.js +0 -181
  725. package/node_modules/moment/dist/locale/cv.js +0 -63
  726. package/node_modules/moment/dist/locale/cy.js +0 -98
  727. package/node_modules/moment/dist/locale/da.js +0 -53
  728. package/node_modules/moment/dist/locale/de-at.js +0 -79
  729. package/node_modules/moment/dist/locale/de-ch.js +0 -78
  730. package/node_modules/moment/dist/locale/de.js +0 -78
  731. package/node_modules/moment/dist/locale/dv.js +0 -90
  732. package/node_modules/moment/dist/locale/el.js +0 -106
  733. package/node_modules/moment/dist/locale/en-au.js +0 -68
  734. package/node_modules/moment/dist/locale/en-ca.js +0 -64
  735. package/node_modules/moment/dist/locale/en-gb.js +0 -68
  736. package/node_modules/moment/dist/locale/en-ie.js +0 -68
  737. package/node_modules/moment/dist/locale/en-il.js +0 -64
  738. package/node_modules/moment/dist/locale/en-in.js +0 -68
  739. package/node_modules/moment/dist/locale/en-nz.js +0 -68
  740. package/node_modules/moment/dist/locale/en-sg.js +0 -68
  741. package/node_modules/moment/dist/locale/eo.js +0 -68
  742. package/node_modules/moment/dist/locale/es-do.js +0 -108
  743. package/node_modules/moment/dist/locale/es-mx.js +0 -110
  744. package/node_modules/moment/dist/locale/es-us.js +0 -110
  745. package/node_modules/moment/dist/locale/es.js +0 -110
  746. package/node_modules/moment/dist/locale/et.js +0 -78
  747. package/node_modules/moment/dist/locale/eu.js +0 -65
  748. package/node_modules/moment/dist/locale/fa.js +0 -113
  749. package/node_modules/moment/dist/locale/fi.js +0 -124
  750. package/node_modules/moment/dist/locale/fil.js +0 -58
  751. package/node_modules/moment/dist/locale/fo.js +0 -57
  752. package/node_modules/moment/dist/locale/fr-ca.js +0 -70
  753. package/node_modules/moment/dist/locale/fr-ch.js +0 -74
  754. package/node_modules/moment/dist/locale/fr.js +0 -108
  755. package/node_modules/moment/dist/locale/fy.js +0 -75
  756. package/node_modules/moment/dist/locale/ga.js +0 -95
  757. package/node_modules/moment/dist/locale/gd.js +0 -95
  758. package/node_modules/moment/dist/locale/gl.js +0 -75
  759. package/node_modules/moment/dist/locale/gom-deva.js +0 -126
  760. package/node_modules/moment/dist/locale/gom-latn.js +0 -124
  761. package/node_modules/moment/dist/locale/gu.js +0 -122
  762. package/node_modules/moment/dist/locale/he.js +0 -94
  763. package/node_modules/moment/dist/locale/hi.js +0 -168
  764. package/node_modules/moment/dist/locale/hr.js +0 -156
  765. package/node_modules/moment/dist/locale/hu.js +0 -118
  766. package/node_modules/moment/dist/locale/hy-am.js +0 -94
  767. package/node_modules/moment/dist/locale/id.js +0 -76
  768. package/node_modules/moment/dist/locale/is.js +0 -140
  769. package/node_modules/moment/dist/locale/it-ch.js +0 -64
  770. package/node_modules/moment/dist/locale/it.js +0 -106
  771. package/node_modules/moment/dist/locale/ja.js +0 -148
  772. package/node_modules/moment/dist/locale/jv.js +0 -76
  773. package/node_modules/moment/dist/locale/ka.js +0 -92
  774. package/node_modules/moment/dist/locale/kk.js +0 -82
  775. package/node_modules/moment/dist/locale/km.js +0 -103
  776. package/node_modules/moment/dist/locale/kn.js +0 -124
  777. package/node_modules/moment/dist/locale/ko.js +0 -75
  778. package/node_modules/moment/dist/locale/ku-kmr.js +0 -121
  779. package/node_modules/moment/dist/locale/ku.js +0 -118
  780. package/node_modules/moment/dist/locale/ky.js +0 -84
  781. package/node_modules/moment/dist/locale/lb.js +0 -137
  782. package/node_modules/moment/dist/locale/lo.js +0 -66
  783. package/node_modules/moment/dist/locale/lt.js +0 -125
  784. package/node_modules/moment/dist/locale/lv.js +0 -94
  785. package/node_modules/moment/dist/locale/me.js +0 -117
  786. package/node_modules/moment/dist/locale/mi.js +0 -60
  787. package/node_modules/moment/dist/locale/mk.js +0 -85
  788. package/node_modules/moment/dist/locale/ml.js +0 -82
  789. package/node_modules/moment/dist/locale/mn.js +0 -100
  790. package/node_modules/moment/dist/locale/mr.js +0 -203
  791. package/node_modules/moment/dist/locale/ms-my.js +0 -76
  792. package/node_modules/moment/dist/locale/ms.js +0 -75
  793. package/node_modules/moment/dist/locale/mt.js +0 -56
  794. package/node_modules/moment/dist/locale/my.js +0 -91
  795. package/node_modules/moment/dist/locale/nb.js +0 -60
  796. package/node_modules/moment/dist/locale/ne.js +0 -121
  797. package/node_modules/moment/dist/locale/nl-be.js +0 -102
  798. package/node_modules/moment/dist/locale/nl.js +0 -104
  799. package/node_modules/moment/dist/locale/nn.js +0 -59
  800. package/node_modules/moment/dist/locale/oc-lnc.js +0 -85
  801. package/node_modules/moment/dist/locale/pa-in.js +0 -122
  802. package/node_modules/moment/dist/locale/pl.js +0 -140
  803. package/node_modules/moment/dist/locale/pt-br.js +0 -58
  804. package/node_modules/moment/dist/locale/pt.js +0 -63
  805. package/node_modules/moment/dist/locale/ro.js +0 -76
  806. package/node_modules/moment/dist/locale/ru.js +0 -213
  807. package/node_modules/moment/dist/locale/sd.js +0 -81
  808. package/node_modules/moment/dist/locale/se.js +0 -57
  809. package/node_modules/moment/dist/locale/si.js +0 -69
  810. package/node_modules/moment/dist/locale/sk.js +0 -145
  811. package/node_modules/moment/dist/locale/sl.js +0 -171
  812. package/node_modules/moment/dist/locale/sq.js +0 -65
  813. package/node_modules/moment/dist/locale/sr-cyrl.js +0 -127
  814. package/node_modules/moment/dist/locale/sr.js +0 -129
  815. package/node_modules/moment/dist/locale/ss.js +0 -84
  816. package/node_modules/moment/dist/locale/sv.js +0 -68
  817. package/node_modules/moment/dist/locale/sw.js +0 -55
  818. package/node_modules/moment/dist/locale/ta.js +0 -131
  819. package/node_modules/moment/dist/locale/te.js +0 -88
  820. package/node_modules/moment/dist/locale/tet.js +0 -68
  821. package/node_modules/moment/dist/locale/tg.js +0 -117
  822. package/node_modules/moment/dist/locale/th.js +0 -65
  823. package/node_modules/moment/dist/locale/tk.js +0 -91
  824. package/node_modules/moment/dist/locale/tl-ph.js +0 -57
  825. package/node_modules/moment/dist/locale/tlh.js +0 -124
  826. package/node_modules/moment/dist/locale/tr.js +0 -106
  827. package/node_modules/moment/dist/locale/tzl.js +0 -89
  828. package/node_modules/moment/dist/locale/tzm-latn.js +0 -54
  829. package/node_modules/moment/dist/locale/tzm.js +0 -54
  830. package/node_modules/moment/dist/locale/ug-cn.js +0 -111
  831. package/node_modules/moment/dist/locale/uk.js +0 -167
  832. package/node_modules/moment/dist/locale/ur.js +0 -82
  833. package/node_modules/moment/dist/locale/uz-latn.js +0 -54
  834. package/node_modules/moment/dist/locale/uz.js +0 -51
  835. package/node_modules/moment/dist/locale/vi.js +0 -80
  836. package/node_modules/moment/dist/locale/x-pseudo.js +0 -73
  837. package/node_modules/moment/dist/locale/yo.js +0 -53
  838. package/node_modules/moment/dist/locale/zh-cn.js +0 -120
  839. package/node_modules/moment/dist/locale/zh-hk.js +0 -101
  840. package/node_modules/moment/dist/locale/zh-mo.js +0 -100
  841. package/node_modules/moment/dist/locale/zh-tw.js +0 -99
  842. package/node_modules/moment/dist/moment.js +0 -5680
  843. package/node_modules/moment/ender.js +0 -1
  844. package/node_modules/moment/locale/af.js +0 -82
  845. package/node_modules/moment/locale/ar-dz.js +0 -167
  846. package/node_modules/moment/locale/ar-kw.js +0 -66
  847. package/node_modules/moment/locale/ar-ly.js +0 -182
  848. package/node_modules/moment/locale/ar-ma.js +0 -67
  849. package/node_modules/moment/locale/ar-ps.js +0 -123
  850. package/node_modules/moment/locale/ar-sa.js +0 -116
  851. package/node_modules/moment/locale/ar-tn.js +0 -66
  852. package/node_modules/moment/locale/ar.js +0 -200
  853. package/node_modules/moment/locale/az.js +0 -113
  854. package/node_modules/moment/locale/be.js +0 -153
  855. package/node_modules/moment/locale/bg.js +0 -98
  856. package/node_modules/moment/locale/bm.js +0 -62
  857. package/node_modules/moment/locale/bn-bd.js +0 -140
  858. package/node_modules/moment/locale/bn.js +0 -130
  859. package/node_modules/moment/locale/bo.js +0 -135
  860. package/node_modules/moment/locale/br.js +0 -179
  861. package/node_modules/moment/locale/bs.js +0 -171
  862. package/node_modules/moment/locale/ca.js +0 -111
  863. package/node_modules/moment/locale/cs.js +0 -192
  864. package/node_modules/moment/locale/cv.js +0 -74
  865. package/node_modules/moment/locale/cy.js +0 -109
  866. package/node_modules/moment/locale/da.js +0 -64
  867. package/node_modules/moment/locale/de-at.js +0 -90
  868. package/node_modules/moment/locale/de-ch.js +0 -87
  869. package/node_modules/moment/locale/de.js +0 -89
  870. package/node_modules/moment/locale/dv.js +0 -101
  871. package/node_modules/moment/locale/el.js +0 -117
  872. package/node_modules/moment/locale/en-au.js +0 -79
  873. package/node_modules/moment/locale/en-ca.js +0 -75
  874. package/node_modules/moment/locale/en-gb.js +0 -79
  875. package/node_modules/moment/locale/en-ie.js +0 -79
  876. package/node_modules/moment/locale/en-il.js +0 -75
  877. package/node_modules/moment/locale/en-in.js +0 -79
  878. package/node_modules/moment/locale/en-nz.js +0 -79
  879. package/node_modules/moment/locale/en-sg.js +0 -79
  880. package/node_modules/moment/locale/eo.js +0 -79
  881. package/node_modules/moment/locale/es-do.js +0 -119
  882. package/node_modules/moment/locale/es-mx.js +0 -121
  883. package/node_modules/moment/locale/es-us.js +0 -121
  884. package/node_modules/moment/locale/es.js +0 -121
  885. package/node_modules/moment/locale/et.js +0 -89
  886. package/node_modules/moment/locale/eu.js +0 -76
  887. package/node_modules/moment/locale/fa.js +0 -124
  888. package/node_modules/moment/locale/fi.js +0 -135
  889. package/node_modules/moment/locale/fil.js +0 -69
  890. package/node_modules/moment/locale/fo.js +0 -68
  891. package/node_modules/moment/locale/fr-ca.js +0 -81
  892. package/node_modules/moment/locale/fr-ch.js +0 -85
  893. package/node_modules/moment/locale/fr.js +0 -119
  894. package/node_modules/moment/locale/fy.js +0 -86
  895. package/node_modules/moment/locale/ga.js +0 -106
  896. package/node_modules/moment/locale/gd.js +0 -106
  897. package/node_modules/moment/locale/gl.js +0 -86
  898. package/node_modules/moment/locale/gom-deva.js +0 -137
  899. package/node_modules/moment/locale/gom-latn.js +0 -135
  900. package/node_modules/moment/locale/gu.js +0 -133
  901. package/node_modules/moment/locale/he.js +0 -105
  902. package/node_modules/moment/locale/hi.js +0 -179
  903. package/node_modules/moment/locale/hr.js +0 -167
  904. package/node_modules/moment/locale/hu.js +0 -129
  905. package/node_modules/moment/locale/hy-am.js +0 -105
  906. package/node_modules/moment/locale/id.js +0 -87
  907. package/node_modules/moment/locale/is.js +0 -151
  908. package/node_modules/moment/locale/it-ch.js +0 -75
  909. package/node_modules/moment/locale/it.js +0 -117
  910. package/node_modules/moment/locale/ja.js +0 -159
  911. package/node_modules/moment/locale/jv.js +0 -87
  912. package/node_modules/moment/locale/ka.js +0 -103
  913. package/node_modules/moment/locale/kk.js +0 -93
  914. package/node_modules/moment/locale/km.js +0 -114
  915. package/node_modules/moment/locale/kn.js +0 -135
  916. package/node_modules/moment/locale/ko.js +0 -86
  917. package/node_modules/moment/locale/ku-kmr.js +0 -125
  918. package/node_modules/moment/locale/ku.js +0 -129
  919. package/node_modules/moment/locale/ky.js +0 -95
  920. package/node_modules/moment/locale/lb.js +0 -148
  921. package/node_modules/moment/locale/lo.js +0 -77
  922. package/node_modules/moment/locale/lt.js +0 -136
  923. package/node_modules/moment/locale/lv.js +0 -105
  924. package/node_modules/moment/locale/me.js +0 -128
  925. package/node_modules/moment/locale/mi.js +0 -71
  926. package/node_modules/moment/locale/mk.js +0 -97
  927. package/node_modules/moment/locale/ml.js +0 -93
  928. package/node_modules/moment/locale/mn.js +0 -111
  929. package/node_modules/moment/locale/mr.js +0 -214
  930. package/node_modules/moment/locale/ms-my.js +0 -87
  931. package/node_modules/moment/locale/ms.js +0 -86
  932. package/node_modules/moment/locale/mt.js +0 -67
  933. package/node_modules/moment/locale/my.js +0 -102
  934. package/node_modules/moment/locale/nb.js +0 -71
  935. package/node_modules/moment/locale/ne.js +0 -132
  936. package/node_modules/moment/locale/nl-be.js +0 -113
  937. package/node_modules/moment/locale/nl.js +0 -115
  938. package/node_modules/moment/locale/nn.js +0 -70
  939. package/node_modules/moment/locale/oc-lnc.js +0 -96
  940. package/node_modules/moment/locale/pa-in.js +0 -133
  941. package/node_modules/moment/locale/pl.js +0 -151
  942. package/node_modules/moment/locale/pt-br.js +0 -69
  943. package/node_modules/moment/locale/pt.js +0 -74
  944. package/node_modules/moment/locale/ro.js +0 -87
  945. package/node_modules/moment/locale/ru.js +0 -224
  946. package/node_modules/moment/locale/sd.js +0 -92
  947. package/node_modules/moment/locale/se.js +0 -68
  948. package/node_modules/moment/locale/si.js +0 -80
  949. package/node_modules/moment/locale/sk.js +0 -156
  950. package/node_modules/moment/locale/sl.js +0 -182
  951. package/node_modules/moment/locale/sq.js +0 -76
  952. package/node_modules/moment/locale/sr-cyrl.js +0 -138
  953. package/node_modules/moment/locale/sr.js +0 -140
  954. package/node_modules/moment/locale/ss.js +0 -95
  955. package/node_modules/moment/locale/sv.js +0 -79
  956. package/node_modules/moment/locale/sw.js +0 -66
  957. package/node_modules/moment/locale/ta.js +0 -142
  958. package/node_modules/moment/locale/te.js +0 -99
  959. package/node_modules/moment/locale/tet.js +0 -79
  960. package/node_modules/moment/locale/tg.js +0 -128
  961. package/node_modules/moment/locale/th.js +0 -76
  962. package/node_modules/moment/locale/tk.js +0 -102
  963. package/node_modules/moment/locale/tl-ph.js +0 -68
  964. package/node_modules/moment/locale/tlh.js +0 -135
  965. package/node_modules/moment/locale/tr.js +0 -117
  966. package/node_modules/moment/locale/tzl.js +0 -100
  967. package/node_modules/moment/locale/tzm-latn.js +0 -65
  968. package/node_modules/moment/locale/tzm.js +0 -65
  969. package/node_modules/moment/locale/ug-cn.js +0 -122
  970. package/node_modules/moment/locale/uk.js +0 -178
  971. package/node_modules/moment/locale/ur.js +0 -93
  972. package/node_modules/moment/locale/uz-latn.js +0 -65
  973. package/node_modules/moment/locale/uz.js +0 -62
  974. package/node_modules/moment/locale/vi.js +0 -91
  975. package/node_modules/moment/locale/x-pseudo.js +0 -84
  976. package/node_modules/moment/locale/yo.js +0 -64
  977. package/node_modules/moment/locale/zh-cn.js +0 -131
  978. package/node_modules/moment/locale/zh-hk.js +0 -112
  979. package/node_modules/moment/locale/zh-mo.js +0 -111
  980. package/node_modules/moment/locale/zh-tw.js +0 -110
  981. package/node_modules/moment/min/locales.js +0 -12800
  982. package/node_modules/moment/min/locales.min.js +0 -2
  983. package/node_modules/moment/min/locales.min.js.map +0 -1
  984. package/node_modules/moment/min/moment-with-locales.js +0 -18472
  985. package/node_modules/moment/min/moment-with-locales.min.js +0 -2
  986. package/node_modules/moment/min/moment-with-locales.min.js.map +0 -1
  987. package/node_modules/moment/min/moment.min.js +0 -2
  988. package/node_modules/moment/min/moment.min.js.map +0 -1
  989. package/node_modules/moment/moment.d.ts +0 -796
  990. package/node_modules/moment/moment.js +0 -5688
  991. package/node_modules/moment/package.js +0 -11
  992. package/node_modules/moment/package.json +0 -116
  993. package/node_modules/moment/src/lib/create/check-overflow.js +0 -57
  994. package/node_modules/moment/src/lib/create/date-from-array.js +0 -35
  995. package/node_modules/moment/src/lib/create/from-anything.js +0 -117
  996. package/node_modules/moment/src/lib/create/from-array.js +0 -187
  997. package/node_modules/moment/src/lib/create/from-object.js +0 -20
  998. package/node_modules/moment/src/lib/create/from-string-and-array.js +0 -67
  999. package/node_modules/moment/src/lib/create/from-string-and-format.js +0 -135
  1000. package/node_modules/moment/src/lib/create/from-string.js +0 -258
  1001. package/node_modules/moment/src/lib/create/local.js +0 -5
  1002. package/node_modules/moment/src/lib/create/parsing-flags.js +0 -28
  1003. package/node_modules/moment/src/lib/create/utc.js +0 -5
  1004. package/node_modules/moment/src/lib/create/valid.js +0 -51
  1005. package/node_modules/moment/src/lib/duration/abs.js +0 -18
  1006. package/node_modules/moment/src/lib/duration/add-subtract.js +0 -21
  1007. package/node_modules/moment/src/lib/duration/as.js +0 -76
  1008. package/node_modules/moment/src/lib/duration/bubble.js +0 -68
  1009. package/node_modules/moment/src/lib/duration/clone.js +0 -5
  1010. package/node_modules/moment/src/lib/duration/constructor.js +0 -42
  1011. package/node_modules/moment/src/lib/duration/create.js +0 -133
  1012. package/node_modules/moment/src/lib/duration/duration.js +0 -16
  1013. package/node_modules/moment/src/lib/duration/get.js +0 -27
  1014. package/node_modules/moment/src/lib/duration/humanize.js +0 -114
  1015. package/node_modules/moment/src/lib/duration/iso-string.js +0 -68
  1016. package/node_modules/moment/src/lib/duration/prototype.js +0 -78
  1017. package/node_modules/moment/src/lib/duration/valid.js +0 -55
  1018. package/node_modules/moment/src/lib/format/format.js +0 -104
  1019. package/node_modules/moment/src/lib/locale/base-config.js +0 -41
  1020. package/node_modules/moment/src/lib/locale/calendar.js +0 -15
  1021. package/node_modules/moment/src/lib/locale/constructor.js +0 -5
  1022. package/node_modules/moment/src/lib/locale/en.js +0 -39
  1023. package/node_modules/moment/src/lib/locale/formats.js +0 -36
  1024. package/node_modules/moment/src/lib/locale/invalid.js +0 -5
  1025. package/node_modules/moment/src/lib/locale/lists.js +0 -93
  1026. package/node_modules/moment/src/lib/locale/locale.js +0 -45
  1027. package/node_modules/moment/src/lib/locale/locales.js +0 -249
  1028. package/node_modules/moment/src/lib/locale/ordinal.js +0 -8
  1029. package/node_modules/moment/src/lib/locale/pre-post-format.js +0 -3
  1030. package/node_modules/moment/src/lib/locale/prototype.js +0 -88
  1031. package/node_modules/moment/src/lib/locale/relative.js +0 -32
  1032. package/node_modules/moment/src/lib/locale/set.js +0 -56
  1033. package/node_modules/moment/src/lib/moment/add-subtract.js +0 -61
  1034. package/node_modules/moment/src/lib/moment/calendar.js +0 -53
  1035. package/node_modules/moment/src/lib/moment/clone.js +0 -5
  1036. package/node_modules/moment/src/lib/moment/compare.js +0 -72
  1037. package/node_modules/moment/src/lib/moment/constructor.js +0 -80
  1038. package/node_modules/moment/src/lib/moment/creation-data.js +0 -9
  1039. package/node_modules/moment/src/lib/moment/diff.js +0 -79
  1040. package/node_modules/moment/src/lib/moment/format.js +0 -78
  1041. package/node_modules/moment/src/lib/moment/from.js +0 -20
  1042. package/node_modules/moment/src/lib/moment/get-set.js +0 -117
  1043. package/node_modules/moment/src/lib/moment/locale.js +0 -34
  1044. package/node_modules/moment/src/lib/moment/min-max.js +0 -62
  1045. package/node_modules/moment/src/lib/moment/moment.js +0 -28
  1046. package/node_modules/moment/src/lib/moment/now.js +0 -3
  1047. package/node_modules/moment/src/lib/moment/prototype.js +0 -197
  1048. package/node_modules/moment/src/lib/moment/start-end-of.js +0 -164
  1049. package/node_modules/moment/src/lib/moment/to-type.js +0 -42
  1050. package/node_modules/moment/src/lib/moment/to.js +0 -20
  1051. package/node_modules/moment/src/lib/moment/valid.js +0 -15
  1052. package/node_modules/moment/src/lib/parse/regex.js +0 -84
  1053. package/node_modules/moment/src/lib/parse/token.js +0 -36
  1054. package/node_modules/moment/src/lib/units/aliases.js +0 -75
  1055. package/node_modules/moment/src/lib/units/constants.js +0 -9
  1056. package/node_modules/moment/src/lib/units/day-of-month.js +0 -35
  1057. package/node_modules/moment/src/lib/units/day-of-week.js +0 -432
  1058. package/node_modules/moment/src/lib/units/day-of-year.js +0 -28
  1059. package/node_modules/moment/src/lib/units/era.js +0 -293
  1060. package/node_modules/moment/src/lib/units/hour.js +0 -152
  1061. package/node_modules/moment/src/lib/units/millisecond.js +0 -66
  1062. package/node_modules/moment/src/lib/units/minute.js +0 -24
  1063. package/node_modules/moment/src/lib/units/month.js +0 -340
  1064. package/node_modules/moment/src/lib/units/offset.js +0 -249
  1065. package/node_modules/moment/src/lib/units/priorities.js +0 -34
  1066. package/node_modules/moment/src/lib/units/quarter.js +0 -24
  1067. package/node_modules/moment/src/lib/units/second.js +0 -24
  1068. package/node_modules/moment/src/lib/units/timestamp.js +0 -20
  1069. package/node_modules/moment/src/lib/units/timezone.js +0 -16
  1070. package/node_modules/moment/src/lib/units/units.js +0 -20
  1071. package/node_modules/moment/src/lib/units/week-calendar-utils.js +0 -66
  1072. package/node_modules/moment/src/lib/units/week-year.js +0 -128
  1073. package/node_modules/moment/src/lib/units/week.js +0 -62
  1074. package/node_modules/moment/src/lib/units/year.js +0 -75
  1075. package/node_modules/moment/src/lib/utils/abs-ceil.js +0 -7
  1076. package/node_modules/moment/src/lib/utils/abs-floor.js +0 -8
  1077. package/node_modules/moment/src/lib/utils/abs-round.js +0 -7
  1078. package/node_modules/moment/src/lib/utils/compare-arrays.js +0 -18
  1079. package/node_modules/moment/src/lib/utils/defaults.js +0 -10
  1080. package/node_modules/moment/src/lib/utils/deprecate.js +0 -69
  1081. package/node_modules/moment/src/lib/utils/extend.js +0 -19
  1082. package/node_modules/moment/src/lib/utils/has-own-prop.js +0 -3
  1083. package/node_modules/moment/src/lib/utils/hooks.js +0 -13
  1084. package/node_modules/moment/src/lib/utils/index-of.js +0 -18
  1085. package/node_modules/moment/src/lib/utils/is-array.js +0 -6
  1086. package/node_modules/moment/src/lib/utils/is-calendar-spec.js +0 -25
  1087. package/node_modules/moment/src/lib/utils/is-date.js +0 -6
  1088. package/node_modules/moment/src/lib/utils/is-function.js +0 -6
  1089. package/node_modules/moment/src/lib/utils/is-leap-year.js +0 -3
  1090. package/node_modules/moment/src/lib/utils/is-moment-input.js +0 -75
  1091. package/node_modules/moment/src/lib/utils/is-number.js +0 -6
  1092. package/node_modules/moment/src/lib/utils/is-object-empty.js +0 -15
  1093. package/node_modules/moment/src/lib/utils/is-object.js +0 -8
  1094. package/node_modules/moment/src/lib/utils/is-string.js +0 -3
  1095. package/node_modules/moment/src/lib/utils/is-undefined.js +0 -3
  1096. package/node_modules/moment/src/lib/utils/keys.js +0 -20
  1097. package/node_modules/moment/src/lib/utils/map.js +0 -9
  1098. package/node_modules/moment/src/lib/utils/mod.js +0 -3
  1099. package/node_modules/moment/src/lib/utils/some.js +0 -20
  1100. package/node_modules/moment/src/lib/utils/to-int.js +0 -12
  1101. package/node_modules/moment/src/lib/utils/zero-fill.js +0 -10
  1102. package/node_modules/moment/src/locale/af.js +0 -71
  1103. package/node_modules/moment/src/locale/ar-dz.js +0 -156
  1104. package/node_modules/moment/src/locale/ar-kw.js +0 -55
  1105. package/node_modules/moment/src/locale/ar-ly.js +0 -171
  1106. package/node_modules/moment/src/locale/ar-ma.js +0 -56
  1107. package/node_modules/moment/src/locale/ar-ps.js +0 -112
  1108. package/node_modules/moment/src/locale/ar-sa.js +0 -105
  1109. package/node_modules/moment/src/locale/ar-tn.js +0 -55
  1110. package/node_modules/moment/src/locale/ar.js +0 -189
  1111. package/node_modules/moment/src/locale/az.js +0 -102
  1112. package/node_modules/moment/src/locale/be.js +0 -142
  1113. package/node_modules/moment/src/locale/bg.js +0 -87
  1114. package/node_modules/moment/src/locale/bm.js +0 -52
  1115. package/node_modules/moment/src/locale/bn-bd.js +0 -129
  1116. package/node_modules/moment/src/locale/bn.js +0 -119
  1117. package/node_modules/moment/src/locale/bo.js +0 -124
  1118. package/node_modules/moment/src/locale/br.js +0 -168
  1119. package/node_modules/moment/src/locale/bs.js +0 -160
  1120. package/node_modules/moment/src/locale/ca.js +0 -100
  1121. package/node_modules/moment/src/locale/cs.js +0 -181
  1122. package/node_modules/moment/src/locale/cv.js +0 -63
  1123. package/node_modules/moment/src/locale/cy.js +0 -98
  1124. package/node_modules/moment/src/locale/da.js +0 -53
  1125. package/node_modules/moment/src/locale/de-at.js +0 -79
  1126. package/node_modules/moment/src/locale/de-ch.js +0 -78
  1127. package/node_modules/moment/src/locale/de.js +0 -78
  1128. package/node_modules/moment/src/locale/dv.js +0 -90
  1129. package/node_modules/moment/src/locale/el.js +0 -106
  1130. package/node_modules/moment/src/locale/en-au.js +0 -68
  1131. package/node_modules/moment/src/locale/en-ca.js +0 -64
  1132. package/node_modules/moment/src/locale/en-gb.js +0 -68
  1133. package/node_modules/moment/src/locale/en-ie.js +0 -68
  1134. package/node_modules/moment/src/locale/en-il.js +0 -64
  1135. package/node_modules/moment/src/locale/en-in.js +0 -68
  1136. package/node_modules/moment/src/locale/en-nz.js +0 -68
  1137. package/node_modules/moment/src/locale/en-sg.js +0 -68
  1138. package/node_modules/moment/src/locale/eo.js +0 -68
  1139. package/node_modules/moment/src/locale/es-do.js +0 -108
  1140. package/node_modules/moment/src/locale/es-mx.js +0 -110
  1141. package/node_modules/moment/src/locale/es-us.js +0 -110
  1142. package/node_modules/moment/src/locale/es.js +0 -110
  1143. package/node_modules/moment/src/locale/et.js +0 -78
  1144. package/node_modules/moment/src/locale/eu.js +0 -65
  1145. package/node_modules/moment/src/locale/fa.js +0 -113
  1146. package/node_modules/moment/src/locale/fi.js +0 -124
  1147. package/node_modules/moment/src/locale/fil.js +0 -58
  1148. package/node_modules/moment/src/locale/fo.js +0 -57
  1149. package/node_modules/moment/src/locale/fr-ca.js +0 -70
  1150. package/node_modules/moment/src/locale/fr-ch.js +0 -74
  1151. package/node_modules/moment/src/locale/fr.js +0 -108
  1152. package/node_modules/moment/src/locale/fy.js +0 -75
  1153. package/node_modules/moment/src/locale/ga.js +0 -95
  1154. package/node_modules/moment/src/locale/gd.js +0 -95
  1155. package/node_modules/moment/src/locale/gl.js +0 -75
  1156. package/node_modules/moment/src/locale/gom-deva.js +0 -126
  1157. package/node_modules/moment/src/locale/gom-latn.js +0 -124
  1158. package/node_modules/moment/src/locale/gu.js +0 -122
  1159. package/node_modules/moment/src/locale/he.js +0 -94
  1160. package/node_modules/moment/src/locale/hi.js +0 -168
  1161. package/node_modules/moment/src/locale/hr.js +0 -156
  1162. package/node_modules/moment/src/locale/hu.js +0 -118
  1163. package/node_modules/moment/src/locale/hy-am.js +0 -94
  1164. package/node_modules/moment/src/locale/id.js +0 -76
  1165. package/node_modules/moment/src/locale/is.js +0 -140
  1166. package/node_modules/moment/src/locale/it-ch.js +0 -64
  1167. package/node_modules/moment/src/locale/it.js +0 -106
  1168. package/node_modules/moment/src/locale/ja.js +0 -148
  1169. package/node_modules/moment/src/locale/jv.js +0 -76
  1170. package/node_modules/moment/src/locale/ka.js +0 -92
  1171. package/node_modules/moment/src/locale/kk.js +0 -82
  1172. package/node_modules/moment/src/locale/km.js +0 -103
  1173. package/node_modules/moment/src/locale/kn.js +0 -124
  1174. package/node_modules/moment/src/locale/ko.js +0 -75
  1175. package/node_modules/moment/src/locale/ku-kmr.js +0 -121
  1176. package/node_modules/moment/src/locale/ku.js +0 -118
  1177. package/node_modules/moment/src/locale/ky.js +0 -84
  1178. package/node_modules/moment/src/locale/lb.js +0 -137
  1179. package/node_modules/moment/src/locale/lo.js +0 -66
  1180. package/node_modules/moment/src/locale/lt.js +0 -125
  1181. package/node_modules/moment/src/locale/lv.js +0 -94
  1182. package/node_modules/moment/src/locale/me.js +0 -117
  1183. package/node_modules/moment/src/locale/mi.js +0 -60
  1184. package/node_modules/moment/src/locale/mk.js +0 -85
  1185. package/node_modules/moment/src/locale/ml.js +0 -82
  1186. package/node_modules/moment/src/locale/mn.js +0 -100
  1187. package/node_modules/moment/src/locale/mr.js +0 -203
  1188. package/node_modules/moment/src/locale/ms-my.js +0 -76
  1189. package/node_modules/moment/src/locale/ms.js +0 -75
  1190. package/node_modules/moment/src/locale/mt.js +0 -56
  1191. package/node_modules/moment/src/locale/my.js +0 -91
  1192. package/node_modules/moment/src/locale/nb.js +0 -60
  1193. package/node_modules/moment/src/locale/ne.js +0 -121
  1194. package/node_modules/moment/src/locale/nl-be.js +0 -102
  1195. package/node_modules/moment/src/locale/nl.js +0 -104
  1196. package/node_modules/moment/src/locale/nn.js +0 -59
  1197. package/node_modules/moment/src/locale/oc-lnc.js +0 -85
  1198. package/node_modules/moment/src/locale/pa-in.js +0 -122
  1199. package/node_modules/moment/src/locale/pl.js +0 -140
  1200. package/node_modules/moment/src/locale/pt-br.js +0 -58
  1201. package/node_modules/moment/src/locale/pt.js +0 -63
  1202. package/node_modules/moment/src/locale/ro.js +0 -76
  1203. package/node_modules/moment/src/locale/ru.js +0 -213
  1204. package/node_modules/moment/src/locale/sd.js +0 -81
  1205. package/node_modules/moment/src/locale/se.js +0 -57
  1206. package/node_modules/moment/src/locale/si.js +0 -69
  1207. package/node_modules/moment/src/locale/sk.js +0 -145
  1208. package/node_modules/moment/src/locale/sl.js +0 -171
  1209. package/node_modules/moment/src/locale/sq.js +0 -65
  1210. package/node_modules/moment/src/locale/sr-cyrl.js +0 -127
  1211. package/node_modules/moment/src/locale/sr.js +0 -129
  1212. package/node_modules/moment/src/locale/ss.js +0 -84
  1213. package/node_modules/moment/src/locale/sv.js +0 -68
  1214. package/node_modules/moment/src/locale/sw.js +0 -55
  1215. package/node_modules/moment/src/locale/ta.js +0 -131
  1216. package/node_modules/moment/src/locale/te.js +0 -88
  1217. package/node_modules/moment/src/locale/tet.js +0 -68
  1218. package/node_modules/moment/src/locale/tg.js +0 -117
  1219. package/node_modules/moment/src/locale/th.js +0 -65
  1220. package/node_modules/moment/src/locale/tk.js +0 -91
  1221. package/node_modules/moment/src/locale/tl-ph.js +0 -57
  1222. package/node_modules/moment/src/locale/tlh.js +0 -124
  1223. package/node_modules/moment/src/locale/tr.js +0 -106
  1224. package/node_modules/moment/src/locale/tzl.js +0 -89
  1225. package/node_modules/moment/src/locale/tzm-latn.js +0 -54
  1226. package/node_modules/moment/src/locale/tzm.js +0 -54
  1227. package/node_modules/moment/src/locale/ug-cn.js +0 -111
  1228. package/node_modules/moment/src/locale/uk.js +0 -167
  1229. package/node_modules/moment/src/locale/ur.js +0 -82
  1230. package/node_modules/moment/src/locale/uz-latn.js +0 -54
  1231. package/node_modules/moment/src/locale/uz.js +0 -51
  1232. package/node_modules/moment/src/locale/vi.js +0 -80
  1233. package/node_modules/moment/src/locale/x-pseudo.js +0 -73
  1234. package/node_modules/moment/src/locale/yo.js +0 -53
  1235. package/node_modules/moment/src/locale/zh-cn.js +0 -120
  1236. package/node_modules/moment/src/locale/zh-hk.js +0 -101
  1237. package/node_modules/moment/src/locale/zh-mo.js +0 -100
  1238. package/node_modules/moment/src/locale/zh-tw.js +0 -99
  1239. package/node_modules/moment/src/moment.js +0 -93
  1240. package/node_modules/moment/ts3.1-typings/moment.d.ts +0 -785
  1241. package/node_modules/nanoid/LICENSE +0 -20
  1242. package/node_modules/nanoid/README.md +0 -38
  1243. package/node_modules/nanoid/async/index.browser.js +0 -33
  1244. package/node_modules/nanoid/async/index.d.ts +0 -56
  1245. package/node_modules/nanoid/async/index.js +0 -34
  1246. package/node_modules/nanoid/async/index.native.js +0 -25
  1247. package/node_modules/nanoid/bin/nanoid.js +0 -46
  1248. package/node_modules/nanoid/index.browser.js +0 -33
  1249. package/node_modules/nanoid/index.d.ts +0 -91
  1250. package/node_modules/nanoid/index.js +0 -45
  1251. package/node_modules/nanoid/nanoid.js +0 -1
  1252. package/node_modules/nanoid/non-secure/index.d.ts +0 -33
  1253. package/node_modules/nanoid/non-secure/index.js +0 -20
  1254. package/node_modules/nanoid/package.json +0 -46
  1255. package/node_modules/nanoid/url-alphabet/index.js +0 -2
  1256. package/node_modules/ts-md5/LICENSE +0 -21
  1257. package/node_modules/ts-md5/README.md +0 -101
  1258. package/node_modules/ts-md5/dist/cjs/index.d.ts +0 -3
  1259. package/node_modules/ts-md5/dist/cjs/index.js +0 -10
  1260. package/node_modules/ts-md5/dist/cjs/index.js.map +0 -1
  1261. package/node_modules/ts-md5/dist/cjs/md5.d.ts +0 -70
  1262. package/node_modules/ts-md5/dist/cjs/md5.js +0 -429
  1263. package/node_modules/ts-md5/dist/cjs/md5.js.map +0 -1
  1264. package/node_modules/ts-md5/dist/cjs/md5_file_hasher.d.ts +0 -25
  1265. package/node_modules/ts-md5/dist/cjs/md5_file_hasher.js +0 -96
  1266. package/node_modules/ts-md5/dist/cjs/md5_file_hasher.js.map +0 -1
  1267. package/node_modules/ts-md5/dist/cjs/parallel_hasher.d.ts +0 -22
  1268. package/node_modules/ts-md5/dist/cjs/parallel_hasher.js +0 -69
  1269. package/node_modules/ts-md5/dist/cjs/parallel_hasher.js.map +0 -1
  1270. package/node_modules/ts-md5/dist/esm/index.d.ts +0 -3
  1271. package/node_modules/ts-md5/dist/esm/index.js +0 -4
  1272. package/node_modules/ts-md5/dist/esm/index.js.map +0 -1
  1273. package/node_modules/ts-md5/dist/esm/md5.d.ts +0 -70
  1274. package/node_modules/ts-md5/dist/esm/md5.js +0 -421
  1275. package/node_modules/ts-md5/dist/esm/md5.js.map +0 -1
  1276. package/node_modules/ts-md5/dist/esm/md5_file_hasher.d.ts +0 -25
  1277. package/node_modules/ts-md5/dist/esm/md5_file_hasher.js +0 -89
  1278. package/node_modules/ts-md5/dist/esm/md5_file_hasher.js.map +0 -1
  1279. package/node_modules/ts-md5/dist/esm/parallel_hasher.d.ts +0 -22
  1280. package/node_modules/ts-md5/dist/esm/parallel_hasher.js +0 -64
  1281. package/node_modules/ts-md5/dist/esm/parallel_hasher.js.map +0 -1
  1282. package/node_modules/ts-md5/dist/md5.js +0 -429
  1283. package/node_modules/ts-md5/dist/md5_worker.js +0 -523
  1284. package/node_modules/ts-md5/package.json +0 -82
  1285. package/node_modules/ts-md5/src/index.ts +0 -4
  1286. package/node_modules/ts-md5/src/md5.ts +0 -473
  1287. package/node_modules/ts-md5/src/md5_file_hasher.ts +0 -110
  1288. package/node_modules/ts-md5/src/parallel_hasher.ts +0 -90
  1289. package/node_modules/ts-md5/src/worker.js +0 -20
  1290. package/tfsec.json +0 -4
@@ -0,0 +1,1396 @@
1
+ "use strict";
2
+ /**
3
+ * Comprehensive unit tests for Azure Kubernetes Service (AKS) Cluster
4
+ *
5
+ * This test suite validates the unified AksCluster class that uses the VersionedAzapiResource
6
+ * framework. Tests cover automatic version resolution, explicit version pinning, schema validation,
7
+ * property transformation, and full backward compatibility.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const cdktf_1 = require("cdktf");
11
+ const cdktf = require("cdktf");
12
+ const azure_resourcegroup_1 = require("../../azure-resourcegroup");
13
+ const api_version_manager_1 = require("../../core-azure/lib/version-manager/api-version-manager");
14
+ const aks_cluster_1 = require("../lib/aks-cluster");
15
+ const aks_cluster_schemas_1 = require("../lib/aks-cluster-schemas");
16
+ describe("AksCluster - Unified Implementation", () => {
17
+ let app;
18
+ let stack;
19
+ let manager;
20
+ let resourceGroup;
21
+ beforeEach(() => {
22
+ app = cdktf_1.Testing.app();
23
+ stack = new cdktf.TerraformStack(app, "TestStack");
24
+ manager = api_version_manager_1.ApiVersionManager.instance();
25
+ // Create a resource group for AKS cluster tests
26
+ resourceGroup = new azure_resourcegroup_1.ResourceGroup(stack, "TestRG", {
27
+ name: "test-rg",
28
+ location: "eastus",
29
+ });
30
+ // Ensure AKS Cluster schemas are registered
31
+ try {
32
+ manager.registerResourceType(aks_cluster_schemas_1.AKS_CLUSTER_TYPE, aks_cluster_schemas_1.ALL_AKS_CLUSTER_VERSIONS);
33
+ }
34
+ catch (error) {
35
+ // Ignore if already registered
36
+ }
37
+ });
38
+ describe("Basic Construction", () => {
39
+ it("should create cluster with required properties only", () => {
40
+ const props = {
41
+ name: "test-aks",
42
+ location: "eastus",
43
+ resourceGroupId: resourceGroup.id,
44
+ dnsPrefix: "testaks",
45
+ agentPoolProfiles: [
46
+ {
47
+ name: "default",
48
+ count: 3,
49
+ vmSize: "Standard_D2s_v3",
50
+ mode: "System",
51
+ },
52
+ ],
53
+ };
54
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", props);
55
+ expect(aksCluster).toBeInstanceOf(aks_cluster_1.AksCluster);
56
+ expect(aksCluster.props).toBe(props);
57
+ expect(aksCluster.resolvedApiVersion).toBe("2025-07-01"); // Latest version
58
+ });
59
+ it("should create cluster with full configuration", () => {
60
+ const props = {
61
+ name: "test-aks-full",
62
+ location: "westus",
63
+ resourceGroupId: resourceGroup.id,
64
+ dnsPrefix: "testaksfull",
65
+ kubernetesVersion: "1.28.3",
66
+ sku: { name: "Standard", tier: "Standard" },
67
+ identity: { type: "SystemAssigned" },
68
+ agentPoolProfiles: [
69
+ {
70
+ name: "system",
71
+ count: 3,
72
+ vmSize: "Standard_D4s_v3",
73
+ mode: "System",
74
+ enableAutoScaling: true,
75
+ minCount: 3,
76
+ maxCount: 10,
77
+ },
78
+ ],
79
+ networkProfile: {
80
+ networkPlugin: "azure",
81
+ serviceCidr: "10.0.0.0/16",
82
+ dnsServiceIP: "10.0.0.10",
83
+ },
84
+ enableRBAC: true,
85
+ tags: {
86
+ environment: "test",
87
+ project: "cdktf-constructs",
88
+ },
89
+ };
90
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", props);
91
+ expect(aksCluster).toBeInstanceOf(aks_cluster_1.AksCluster);
92
+ expect(aksCluster.props.kubernetesVersion).toBe("1.28.3");
93
+ expect(aksCluster.props.enableRBAC).toBe(true);
94
+ expect(aksCluster.tags).toEqual(props.tags);
95
+ });
96
+ it("should generate correct Terraform resource name", () => {
97
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
98
+ name: "test-aks",
99
+ location: "eastus",
100
+ resourceGroupId: resourceGroup.id,
101
+ dnsPrefix: "testaks",
102
+ agentPoolProfiles: [
103
+ {
104
+ name: "default",
105
+ count: 3,
106
+ vmSize: "Standard_D2s_v3",
107
+ },
108
+ ],
109
+ });
110
+ expect(aksCluster.id).toMatch(/^\$\{.*\.id\}$/);
111
+ });
112
+ it("should set correct resource type", () => {
113
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
114
+ name: "test-aks",
115
+ location: "eastus",
116
+ resourceGroupId: resourceGroup.id,
117
+ dnsPrefix: "testaks",
118
+ agentPoolProfiles: [
119
+ {
120
+ name: "default",
121
+ count: 3,
122
+ vmSize: "Standard_D2s_v3",
123
+ },
124
+ ],
125
+ });
126
+ expect(aksCluster.schema.resourceType).toBe(aks_cluster_schemas_1.AKS_CLUSTER_TYPE);
127
+ });
128
+ it("should validate required properties are present", () => {
129
+ expect(() => {
130
+ new aks_cluster_1.AksCluster(stack, "InvalidAksCluster", {
131
+ name: "test-aks",
132
+ location: "eastus",
133
+ resourceGroupId: resourceGroup.id,
134
+ dnsPrefix: "",
135
+ agentPoolProfiles: [],
136
+ });
137
+ }).toThrow();
138
+ });
139
+ it("should handle optional properties correctly", () => {
140
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
141
+ name: "test-aks",
142
+ location: "eastus",
143
+ resourceGroupId: resourceGroup.id,
144
+ dnsPrefix: "testaks",
145
+ agentPoolProfiles: [
146
+ {
147
+ name: "default",
148
+ count: 3,
149
+ vmSize: "Standard_D2s_v3",
150
+ },
151
+ ],
152
+ kubernetesVersion: "1.28.3",
153
+ nodeResourceGroup: "test-node-rg",
154
+ });
155
+ expect(aksCluster.props.kubernetesVersion).toBe("1.28.3");
156
+ expect(aksCluster.props.nodeResourceGroup).toBe("test-node-rg");
157
+ });
158
+ it("should apply default values when appropriate", () => {
159
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
160
+ name: "test-aks",
161
+ location: "eastus",
162
+ resourceGroupId: resourceGroup.id,
163
+ dnsPrefix: "testaks",
164
+ agentPoolProfiles: [
165
+ {
166
+ name: "default",
167
+ count: 3,
168
+ vmSize: "Standard_D2s_v3",
169
+ },
170
+ ],
171
+ });
172
+ expect(aksCluster.tags).toEqual({});
173
+ });
174
+ });
175
+ describe("Schema Registration", () => {
176
+ it("should register schemas on first instantiation", () => {
177
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
178
+ name: "test-aks",
179
+ location: "eastus",
180
+ resourceGroupId: resourceGroup.id,
181
+ dnsPrefix: "testaks",
182
+ agentPoolProfiles: [
183
+ {
184
+ name: "default",
185
+ count: 3,
186
+ vmSize: "Standard_D2s_v3",
187
+ },
188
+ ],
189
+ });
190
+ expect(aksCluster.schema).toBeDefined();
191
+ });
192
+ it("should not re-register schemas on subsequent instantiations", () => {
193
+ new aks_cluster_1.AksCluster(stack, "FirstAksCluster", {
194
+ name: "test-aks-1",
195
+ location: "eastus",
196
+ resourceGroupId: resourceGroup.id,
197
+ dnsPrefix: "testaks1",
198
+ agentPoolProfiles: [
199
+ {
200
+ name: "default",
201
+ count: 3,
202
+ vmSize: "Standard_D2s_v3",
203
+ },
204
+ ],
205
+ });
206
+ expect(() => {
207
+ new aks_cluster_1.AksCluster(stack, "SecondAksCluster", {
208
+ name: "test-aks-2",
209
+ location: "eastus",
210
+ resourceGroupId: resourceGroup.id,
211
+ dnsPrefix: "testaks2",
212
+ agentPoolProfiles: [
213
+ {
214
+ name: "default",
215
+ count: 3,
216
+ vmSize: "Standard_D2s_v3",
217
+ },
218
+ ],
219
+ });
220
+ }).not.toThrow();
221
+ });
222
+ it("should have all three API versions registered", () => {
223
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
224
+ name: "test-aks",
225
+ location: "eastus",
226
+ resourceGroupId: resourceGroup.id,
227
+ dnsPrefix: "testaks",
228
+ agentPoolProfiles: [
229
+ {
230
+ name: "default",
231
+ count: 3,
232
+ vmSize: "Standard_D2s_v3",
233
+ },
234
+ ],
235
+ });
236
+ const supportedVersions = aksCluster.supportedVersions();
237
+ expect(supportedVersions).toContain("2024-10-01");
238
+ expect(supportedVersions).toContain("2025-01-01");
239
+ expect(supportedVersions).toContain("2025-07-01");
240
+ });
241
+ it("should set correct default API version", () => {
242
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
243
+ name: "test-aks",
244
+ location: "eastus",
245
+ resourceGroupId: resourceGroup.id,
246
+ dnsPrefix: "testaks",
247
+ agentPoolProfiles: [
248
+ {
249
+ name: "default",
250
+ count: 3,
251
+ vmSize: "Standard_D2s_v3",
252
+ },
253
+ ],
254
+ });
255
+ expect(aksCluster.resolvedApiVersion).toBe("2025-07-01");
256
+ });
257
+ });
258
+ describe("Version Management", () => {
259
+ it("should use default version when not specified", () => {
260
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
261
+ name: "test-aks",
262
+ location: "eastus",
263
+ resourceGroupId: resourceGroup.id,
264
+ dnsPrefix: "testaks",
265
+ agentPoolProfiles: [
266
+ {
267
+ name: "default",
268
+ count: 3,
269
+ vmSize: "Standard_D2s_v3",
270
+ },
271
+ ],
272
+ });
273
+ expect(aksCluster.resolvedApiVersion).toBe("2025-07-01");
274
+ expect(aksCluster.latestVersion()).toBe("2025-07-01");
275
+ });
276
+ it("should use explicitly specified version", () => {
277
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
278
+ name: "test-aks",
279
+ location: "eastus",
280
+ resourceGroupId: resourceGroup.id,
281
+ apiVersion: "2025-07-01",
282
+ dnsPrefix: "testaks",
283
+ agentPoolProfiles: [
284
+ {
285
+ name: "default",
286
+ count: 3,
287
+ vmSize: "Standard_D2s_v3",
288
+ },
289
+ ],
290
+ });
291
+ expect(aksCluster.resolvedApiVersion).toBe("2025-07-01");
292
+ });
293
+ it("should accept 2024-10-01 API version", () => {
294
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
295
+ name: "test-aks",
296
+ location: "eastus",
297
+ resourceGroupId: resourceGroup.id,
298
+ apiVersion: "2024-10-01",
299
+ dnsPrefix: "testaks",
300
+ agentPoolProfiles: [
301
+ {
302
+ name: "default",
303
+ count: 3,
304
+ vmSize: "Standard_D2s_v3",
305
+ },
306
+ ],
307
+ });
308
+ expect(aksCluster.resolvedApiVersion).toBe("2024-10-01");
309
+ });
310
+ it("should accept 2025-07-01 API version", () => {
311
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
312
+ name: "test-aks",
313
+ location: "eastus",
314
+ resourceGroupId: resourceGroup.id,
315
+ apiVersion: "2025-07-01",
316
+ dnsPrefix: "testaks",
317
+ agentPoolProfiles: [
318
+ {
319
+ name: "default",
320
+ count: 3,
321
+ vmSize: "Standard_D2s_v3",
322
+ },
323
+ ],
324
+ });
325
+ expect(aksCluster.resolvedApiVersion).toBe("2025-07-01");
326
+ });
327
+ it("should accept 2025-01-01 API version", () => {
328
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
329
+ name: "test-aks",
330
+ location: "eastus",
331
+ resourceGroupId: resourceGroup.id,
332
+ apiVersion: "2025-01-01",
333
+ dnsPrefix: "testaks",
334
+ agentPoolProfiles: [
335
+ {
336
+ name: "default",
337
+ count: 3,
338
+ vmSize: "Standard_D2s_v3",
339
+ },
340
+ ],
341
+ });
342
+ expect(aksCluster.resolvedApiVersion).toBe("2025-01-01");
343
+ });
344
+ it("should reject invalid API versions", () => {
345
+ expect(() => {
346
+ new aks_cluster_1.AksCluster(stack, "InvalidVersion", {
347
+ name: "test-aks",
348
+ location: "eastus",
349
+ resourceGroupId: resourceGroup.id,
350
+ apiVersion: "2026-01-01",
351
+ dnsPrefix: "testaks",
352
+ agentPoolProfiles: [
353
+ {
354
+ name: "default",
355
+ count: 3,
356
+ vmSize: "Standard_D2s_v3",
357
+ },
358
+ ],
359
+ });
360
+ }).toThrow("Unsupported API version '2026-01-01'");
361
+ });
362
+ it("should handle version migrations correctly", () => {
363
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
364
+ name: "test-aks",
365
+ location: "eastus",
366
+ resourceGroupId: resourceGroup.id,
367
+ apiVersion: "2024-10-01",
368
+ dnsPrefix: "testaks",
369
+ agentPoolProfiles: [
370
+ {
371
+ name: "default",
372
+ count: 3,
373
+ vmSize: "Standard_D2s_v3",
374
+ },
375
+ ],
376
+ });
377
+ const analysis = aksCluster.analyzeMigrationTo("2025-07-01");
378
+ expect(analysis).toBeDefined();
379
+ expect(analysis.fromVersion).toBe("2024-10-01");
380
+ expect(analysis.toVersion).toBe("2025-07-01");
381
+ });
382
+ it("should validate schema compatibility across versions", () => {
383
+ const versions = ["2024-10-01", "2025-01-01", "2025-07-01"];
384
+ versions.forEach((version) => {
385
+ const aksCluster = new aks_cluster_1.AksCluster(stack, `AKS-${version.replace(/-/g, "")}`, {
386
+ name: `test-aks-${version}`,
387
+ location: "eastus",
388
+ resourceGroupId: resourceGroup.id,
389
+ apiVersion: version,
390
+ dnsPrefix: "testaks",
391
+ agentPoolProfiles: [
392
+ {
393
+ name: "default",
394
+ count: 3,
395
+ vmSize: "Standard_D2s_v3",
396
+ },
397
+ ],
398
+ });
399
+ expect(aksCluster.schema.version).toBe(version);
400
+ expect(aksCluster.schema.properties.location).toBeDefined();
401
+ expect(aksCluster.schema.properties.dnsPrefix).toBeDefined();
402
+ expect(aksCluster.schema.properties.agentPoolProfiles).toBeDefined();
403
+ });
404
+ });
405
+ });
406
+ describe("Property Handling", () => {
407
+ it("should handle basic cluster properties", () => {
408
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
409
+ name: "test-aks",
410
+ location: "westus",
411
+ resourceGroupId: resourceGroup.id,
412
+ dnsPrefix: "testaks",
413
+ agentPoolProfiles: [
414
+ {
415
+ name: "default",
416
+ count: 3,
417
+ vmSize: "Standard_D2s_v3",
418
+ },
419
+ ],
420
+ });
421
+ expect(aksCluster.props.name).toBe("test-aks");
422
+ expect(aksCluster.props.location).toBe("westus");
423
+ expect(aksCluster.props.dnsPrefix).toBe("testaks");
424
+ });
425
+ it("should handle SystemAssigned identity configuration", () => {
426
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
427
+ name: "test-aks",
428
+ location: "eastus",
429
+ resourceGroupId: resourceGroup.id,
430
+ dnsPrefix: "testaks",
431
+ identity: { type: "SystemAssigned" },
432
+ agentPoolProfiles: [
433
+ {
434
+ name: "default",
435
+ count: 3,
436
+ vmSize: "Standard_D2s_v3",
437
+ },
438
+ ],
439
+ });
440
+ expect(aksCluster.props.identity?.type).toBe("SystemAssigned");
441
+ });
442
+ it("should handle UserAssigned identity configuration", () => {
443
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
444
+ name: "test-aks",
445
+ location: "eastus",
446
+ resourceGroupId: resourceGroup.id,
447
+ dnsPrefix: "testaks",
448
+ identity: {
449
+ type: "UserAssigned",
450
+ userAssignedIdentities: {
451
+ "/subscriptions/test/resourceGroups/test/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test": {},
452
+ },
453
+ },
454
+ agentPoolProfiles: [
455
+ {
456
+ name: "default",
457
+ count: 3,
458
+ vmSize: "Standard_D2s_v3",
459
+ },
460
+ ],
461
+ });
462
+ expect(aksCluster.props.identity?.type).toBe("UserAssigned");
463
+ expect(aksCluster.props.identity?.userAssignedIdentities).toBeDefined();
464
+ });
465
+ it("should handle SKU configuration", () => {
466
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
467
+ name: "test-aks",
468
+ location: "eastus",
469
+ resourceGroupId: resourceGroup.id,
470
+ dnsPrefix: "testaks",
471
+ sku: { name: "Standard", tier: "Standard" },
472
+ agentPoolProfiles: [
473
+ {
474
+ name: "default",
475
+ count: 3,
476
+ vmSize: "Standard_D2s_v3",
477
+ },
478
+ ],
479
+ });
480
+ expect(aksCluster.props.sku?.name).toBe("Standard");
481
+ expect(aksCluster.props.sku?.tier).toBe("Standard");
482
+ });
483
+ it("should handle agent pool profiles correctly", () => {
484
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
485
+ name: "test-aks",
486
+ location: "eastus",
487
+ resourceGroupId: resourceGroup.id,
488
+ dnsPrefix: "testaks",
489
+ agentPoolProfiles: [
490
+ {
491
+ name: "system",
492
+ count: 3,
493
+ vmSize: "Standard_D4s_v3",
494
+ mode: "System",
495
+ enableAutoScaling: true,
496
+ minCount: 3,
497
+ maxCount: 10,
498
+ },
499
+ {
500
+ name: "user",
501
+ count: 2,
502
+ vmSize: "Standard_D2s_v3",
503
+ mode: "User",
504
+ },
505
+ ],
506
+ });
507
+ expect(aksCluster.props.agentPoolProfiles).toHaveLength(2);
508
+ expect(aksCluster.props.agentPoolProfiles[0].name).toBe("system");
509
+ expect(aksCluster.props.agentPoolProfiles[1].name).toBe("user");
510
+ });
511
+ it("should handle network profile with all options", () => {
512
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
513
+ name: "test-aks",
514
+ location: "eastus",
515
+ resourceGroupId: resourceGroup.id,
516
+ dnsPrefix: "testaks",
517
+ agentPoolProfiles: [
518
+ {
519
+ name: "default",
520
+ count: 3,
521
+ vmSize: "Standard_D2s_v3",
522
+ },
523
+ ],
524
+ networkProfile: {
525
+ networkPlugin: "azure",
526
+ networkPolicy: "calico",
527
+ serviceCidr: "10.0.0.0/16",
528
+ dnsServiceIP: "10.0.0.10",
529
+ dockerBridgeCidr: "172.17.0.1/16",
530
+ loadBalancerSku: "standard",
531
+ },
532
+ });
533
+ expect(aksCluster.props.networkProfile?.networkPlugin).toBe("azure");
534
+ expect(aksCluster.props.networkProfile?.networkPolicy).toBe("calico");
535
+ expect(aksCluster.props.networkProfile?.serviceCidr).toBe("10.0.0.0/16");
536
+ });
537
+ it("should handle addon profiles", () => {
538
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
539
+ name: "test-aks",
540
+ location: "eastus",
541
+ resourceGroupId: resourceGroup.id,
542
+ dnsPrefix: "testaks",
543
+ agentPoolProfiles: [
544
+ {
545
+ name: "default",
546
+ count: 3,
547
+ vmSize: "Standard_D2s_v3",
548
+ },
549
+ ],
550
+ addonProfiles: {
551
+ httpApplicationRouting: { enabled: true },
552
+ omsagent: {
553
+ enabled: true,
554
+ config: { logAnalyticsWorkspaceResourceID: "/subscriptions/test" },
555
+ },
556
+ },
557
+ });
558
+ expect(aksCluster.props.addonProfiles?.httpApplicationRouting?.enabled).toBe(true);
559
+ expect(aksCluster.props.addonProfiles?.omsagent?.enabled).toBe(true);
560
+ });
561
+ it("should handle security profiles with AAD and RBAC", () => {
562
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
563
+ name: "test-aks",
564
+ location: "eastus",
565
+ resourceGroupId: resourceGroup.id,
566
+ dnsPrefix: "testaks",
567
+ agentPoolProfiles: [
568
+ {
569
+ name: "default",
570
+ count: 3,
571
+ vmSize: "Standard_D2s_v3",
572
+ },
573
+ ],
574
+ aadProfile: {
575
+ managed: true,
576
+ enableAzureRBAC: true,
577
+ adminGroupObjectIDs: ["group-id-1", "group-id-2"],
578
+ },
579
+ enableRBAC: true,
580
+ });
581
+ expect(aksCluster.props.aadProfile?.managed).toBe(true);
582
+ expect(aksCluster.props.aadProfile?.enableAzureRBAC).toBe(true);
583
+ expect(aksCluster.props.enableRBAC).toBe(true);
584
+ });
585
+ it("should handle auto-scaler profile", () => {
586
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
587
+ name: "test-aks",
588
+ location: "eastus",
589
+ resourceGroupId: resourceGroup.id,
590
+ dnsPrefix: "testaks",
591
+ agentPoolProfiles: [
592
+ {
593
+ name: "default",
594
+ count: 3,
595
+ vmSize: "Standard_D2s_v3",
596
+ },
597
+ ],
598
+ autoScalerProfile: {
599
+ scaleDownDelayAfterAdd: "10m",
600
+ scaleDownUnneededTime: "10m",
601
+ scaleDownUtilizationThreshold: "0.5",
602
+ },
603
+ });
604
+ expect(aksCluster.props.autoScalerProfile?.scaleDownDelayAfterAdd).toBe("10m");
605
+ });
606
+ it("should handle Windows profile", () => {
607
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
608
+ name: "test-aks",
609
+ location: "eastus",
610
+ resourceGroupId: resourceGroup.id,
611
+ dnsPrefix: "testaks",
612
+ agentPoolProfiles: [
613
+ {
614
+ name: "default",
615
+ count: 3,
616
+ vmSize: "Standard_D2s_v3",
617
+ },
618
+ ],
619
+ windowsProfile: {
620
+ adminUsername: "azureuser",
621
+ adminPassword: "P@ssw0rd1234!",
622
+ },
623
+ });
624
+ expect(aksCluster.props.windowsProfile?.adminUsername).toBe("azureuser");
625
+ });
626
+ it("should handle Linux profile", () => {
627
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
628
+ name: "test-aks",
629
+ location: "eastus",
630
+ resourceGroupId: resourceGroup.id,
631
+ dnsPrefix: "testaks",
632
+ agentPoolProfiles: [
633
+ {
634
+ name: "default",
635
+ count: 3,
636
+ vmSize: "Standard_D2s_v3",
637
+ },
638
+ ],
639
+ linuxProfile: {
640
+ adminUsername: "azureuser",
641
+ ssh: {
642
+ publicKeys: [{ keyData: "ssh-rsa AAAAB3..." }],
643
+ },
644
+ },
645
+ });
646
+ expect(aksCluster.props.linuxProfile?.adminUsername).toBe("azureuser");
647
+ });
648
+ it("should handle tags properly", () => {
649
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
650
+ name: "test-aks",
651
+ location: "eastus",
652
+ resourceGroupId: resourceGroup.id,
653
+ dnsPrefix: "testaks",
654
+ agentPoolProfiles: [
655
+ {
656
+ name: "default",
657
+ count: 3,
658
+ vmSize: "Standard_D2s_v3",
659
+ },
660
+ ],
661
+ tags: {
662
+ environment: "production",
663
+ cost: "center1",
664
+ },
665
+ });
666
+ expect(aksCluster.tags).toEqual({
667
+ environment: "production",
668
+ cost: "center1",
669
+ });
670
+ });
671
+ });
672
+ describe("Validation", () => {
673
+ it("should validate name format", () => {
674
+ expect(() => {
675
+ new aks_cluster_1.AksCluster(stack, "InvalidName", {
676
+ name: "invalid_name_with_underscores",
677
+ location: "eastus",
678
+ resourceGroupId: resourceGroup.id,
679
+ dnsPrefix: "testaks",
680
+ agentPoolProfiles: [
681
+ {
682
+ name: "default",
683
+ count: 3,
684
+ vmSize: "Standard_D2s_v3",
685
+ },
686
+ ],
687
+ enableValidation: true,
688
+ });
689
+ }).toThrow();
690
+ });
691
+ it("should validate location is provided", () => {
692
+ expect(() => {
693
+ new aks_cluster_1.AksCluster(stack, "MissingLocation", {
694
+ name: "test-aks",
695
+ location: "",
696
+ resourceGroupId: resourceGroup.id,
697
+ dnsPrefix: "testaks",
698
+ agentPoolProfiles: [
699
+ {
700
+ name: "default",
701
+ count: 3,
702
+ vmSize: "Standard_D2s_v3",
703
+ },
704
+ ],
705
+ enableValidation: true,
706
+ });
707
+ }).toThrow();
708
+ });
709
+ it("should validate DNS prefix format", () => {
710
+ expect(() => {
711
+ new aks_cluster_1.AksCluster(stack, "InvalidDnsPrefix", {
712
+ name: "test-aks",
713
+ location: "eastus",
714
+ resourceGroupId: resourceGroup.id,
715
+ dnsPrefix: "invalid_dns_prefix",
716
+ agentPoolProfiles: [
717
+ {
718
+ name: "default",
719
+ count: 3,
720
+ vmSize: "Standard_D2s_v3",
721
+ },
722
+ ],
723
+ enableValidation: true,
724
+ });
725
+ }).toThrow();
726
+ });
727
+ it("should validate Kubernetes version format", () => {
728
+ expect(() => {
729
+ new aks_cluster_1.AksCluster(stack, "InvalidK8sVersion", {
730
+ name: "test-aks",
731
+ location: "eastus",
732
+ resourceGroupId: resourceGroup.id,
733
+ dnsPrefix: "testaks",
734
+ kubernetesVersion: "invalid-version",
735
+ agentPoolProfiles: [
736
+ {
737
+ name: "default",
738
+ count: 3,
739
+ vmSize: "Standard_D2s_v3",
740
+ },
741
+ ],
742
+ enableValidation: true,
743
+ });
744
+ }).toThrow();
745
+ });
746
+ it("should validate agent pool configuration", () => {
747
+ // Creating with empty agent pool should not throw during construction
748
+ // but would fail during Terraform validation
749
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "InvalidAgentPool", {
750
+ name: "test-aks",
751
+ location: "eastus",
752
+ resourceGroupId: resourceGroup.id,
753
+ dnsPrefix: "testaks",
754
+ agentPoolProfiles: [],
755
+ enableValidation: false, // Disable validation to allow construction
756
+ });
757
+ expect(aksCluster.props.agentPoolProfiles).toHaveLength(0);
758
+ });
759
+ it("should validate network profile constraints", () => {
760
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "ValidNetwork", {
761
+ name: "test-aks",
762
+ location: "eastus",
763
+ resourceGroupId: resourceGroup.id,
764
+ dnsPrefix: "testaks",
765
+ agentPoolProfiles: [
766
+ {
767
+ name: "default",
768
+ count: 3,
769
+ vmSize: "Standard_D2s_v3",
770
+ },
771
+ ],
772
+ networkProfile: {
773
+ networkPlugin: "azure",
774
+ serviceCidr: "10.0.0.0/16",
775
+ dnsServiceIP: "10.0.0.10",
776
+ },
777
+ });
778
+ expect(aksCluster.props.networkProfile?.networkPlugin).toBe("azure");
779
+ });
780
+ it("should validate identity type combinations", () => {
781
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "ValidIdentity", {
782
+ name: "test-aks",
783
+ location: "eastus",
784
+ resourceGroupId: resourceGroup.id,
785
+ dnsPrefix: "testaks",
786
+ identity: { type: "SystemAssigned" },
787
+ agentPoolProfiles: [
788
+ {
789
+ name: "default",
790
+ count: 3,
791
+ vmSize: "Standard_D2s_v3",
792
+ },
793
+ ],
794
+ });
795
+ expect(aksCluster.props.identity?.type).toBe("SystemAssigned");
796
+ });
797
+ it("should validate SKU tiers", () => {
798
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "ValidSku", {
799
+ name: "test-aks",
800
+ location: "eastus",
801
+ resourceGroupId: resourceGroup.id,
802
+ dnsPrefix: "testaks",
803
+ sku: { name: "Standard", tier: "Standard" },
804
+ agentPoolProfiles: [
805
+ {
806
+ name: "default",
807
+ count: 3,
808
+ vmSize: "Standard_D2s_v3",
809
+ },
810
+ ],
811
+ });
812
+ expect(aksCluster.props.sku?.tier).toBe("Standard");
813
+ });
814
+ it("should validate public network access values", () => {
815
+ expect(() => {
816
+ new aks_cluster_1.AksCluster(stack, "InvalidPublicAccess", {
817
+ name: "test-aks",
818
+ location: "eastus",
819
+ resourceGroupId: resourceGroup.id,
820
+ dnsPrefix: "testaks",
821
+ publicNetworkAccess: "Invalid",
822
+ agentPoolProfiles: [
823
+ {
824
+ name: "default",
825
+ count: 3,
826
+ vmSize: "Standard_D2s_v3",
827
+ },
828
+ ],
829
+ enableValidation: true,
830
+ });
831
+ }).toThrow();
832
+ });
833
+ it("should validate support plan values", () => {
834
+ expect(() => {
835
+ new aks_cluster_1.AksCluster(stack, "InvalidSupportPlan", {
836
+ name: "test-aks",
837
+ location: "eastus",
838
+ resourceGroupId: resourceGroup.id,
839
+ dnsPrefix: "testaks",
840
+ supportPlan: "InvalidPlan",
841
+ agentPoolProfiles: [
842
+ {
843
+ name: "default",
844
+ count: 3,
845
+ vmSize: "Standard_D2s_v3",
846
+ },
847
+ ],
848
+ enableValidation: true,
849
+ });
850
+ }).toThrow();
851
+ });
852
+ });
853
+ describe("Parent ID", () => {
854
+ it("should determine parent ID from resourceGroupId", () => {
855
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
856
+ name: "test-aks",
857
+ location: "eastus",
858
+ resourceGroupId: resourceGroup.id,
859
+ dnsPrefix: "testaks",
860
+ agentPoolProfiles: [
861
+ {
862
+ name: "default",
863
+ count: 3,
864
+ vmSize: "Standard_D2s_v3",
865
+ },
866
+ ],
867
+ });
868
+ expect(aksCluster.props.resourceGroupId).toBe(resourceGroup.id);
869
+ });
870
+ it("should construct correct parent ID format", () => {
871
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
872
+ name: "test-aks",
873
+ location: "eastus",
874
+ resourceGroupId: "/subscriptions/test-sub/resourceGroups/test-rg",
875
+ dnsPrefix: "testaks",
876
+ agentPoolProfiles: [
877
+ {
878
+ name: "default",
879
+ count: 3,
880
+ vmSize: "Standard_D2s_v3",
881
+ },
882
+ ],
883
+ });
884
+ expect(aksCluster.props.resourceGroupId).toContain("/subscriptions/");
885
+ expect(aksCluster.props.resourceGroupId).toContain("/resourceGroups/");
886
+ });
887
+ it("should handle resource group ID in different formats", () => {
888
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
889
+ name: "test-aks",
890
+ location: "eastus",
891
+ resourceGroupId: resourceGroup.id,
892
+ dnsPrefix: "testaks",
893
+ agentPoolProfiles: [
894
+ {
895
+ name: "default",
896
+ count: 3,
897
+ vmSize: "Standard_D2s_v3",
898
+ },
899
+ ],
900
+ });
901
+ expect(aksCluster.props.resourceGroupId).toBeDefined();
902
+ });
903
+ });
904
+ describe("Output Properties", () => {
905
+ it("should expose id property", () => {
906
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
907
+ name: "test-aks",
908
+ location: "eastus",
909
+ resourceGroupId: resourceGroup.id,
910
+ dnsPrefix: "testaks",
911
+ agentPoolProfiles: [
912
+ {
913
+ name: "default",
914
+ count: 3,
915
+ vmSize: "Standard_D2s_v3",
916
+ },
917
+ ],
918
+ });
919
+ expect(aksCluster.id).toBeDefined();
920
+ expect(aksCluster.id).toMatch(/^\$\{.*\.id\}$/);
921
+ });
922
+ it("should expose name property", () => {
923
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
924
+ name: "test-aks",
925
+ location: "eastus",
926
+ resourceGroupId: resourceGroup.id,
927
+ dnsPrefix: "testaks",
928
+ agentPoolProfiles: [
929
+ {
930
+ name: "default",
931
+ count: 3,
932
+ vmSize: "Standard_D2s_v3",
933
+ },
934
+ ],
935
+ });
936
+ expect(aksCluster.props.name).toBe("test-aks");
937
+ });
938
+ it("should expose fqdn property", () => {
939
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
940
+ name: "test-aks",
941
+ location: "eastus",
942
+ resourceGroupId: resourceGroup.id,
943
+ dnsPrefix: "testaks",
944
+ agentPoolProfiles: [
945
+ {
946
+ name: "default",
947
+ count: 3,
948
+ vmSize: "Standard_D2s_v3",
949
+ },
950
+ ],
951
+ });
952
+ expect(aksCluster.fqdn).toBeDefined();
953
+ });
954
+ it("should expose kubeConfig property", () => {
955
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
956
+ name: "test-aks",
957
+ location: "eastus",
958
+ resourceGroupId: resourceGroup.id,
959
+ dnsPrefix: "testaks",
960
+ agentPoolProfiles: [
961
+ {
962
+ name: "default",
963
+ count: 3,
964
+ vmSize: "Standard_D2s_v3",
965
+ },
966
+ ],
967
+ });
968
+ expect(aksCluster.kubeConfig).toBeDefined();
969
+ expect(typeof aksCluster.kubeConfig).toBe("string");
970
+ });
971
+ it("should expose all terraform outputs", () => {
972
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
973
+ name: "test-aks",
974
+ location: "eastus",
975
+ resourceGroupId: resourceGroup.id,
976
+ dnsPrefix: "testaks",
977
+ agentPoolProfiles: [
978
+ {
979
+ name: "default",
980
+ count: 3,
981
+ vmSize: "Standard_D2s_v3",
982
+ },
983
+ ],
984
+ });
985
+ expect(aksCluster.idOutput).toBeInstanceOf(cdktf.TerraformOutput);
986
+ expect(aksCluster.locationOutput).toBeInstanceOf(cdktf.TerraformOutput);
987
+ expect(aksCluster.nameOutput).toBeInstanceOf(cdktf.TerraformOutput);
988
+ expect(aksCluster.tagsOutput).toBeInstanceOf(cdktf.TerraformOutput);
989
+ expect(aksCluster.fqdnOutput).toBeInstanceOf(cdktf.TerraformOutput);
990
+ // kubeConfig is retrieved via a resource action (not a direct output)
991
+ });
992
+ it("should handle undefined outputs gracefully", () => {
993
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
994
+ name: "test-aks",
995
+ location: "eastus",
996
+ resourceGroupId: resourceGroup.id,
997
+ dnsPrefix: "testaks",
998
+ agentPoolProfiles: [
999
+ {
1000
+ name: "default",
1001
+ count: 3,
1002
+ vmSize: "Standard_D2s_v3",
1003
+ },
1004
+ ],
1005
+ });
1006
+ expect(() => aksCluster.fqdn).not.toThrow();
1007
+ expect(() => aksCluster.kubeConfig).not.toThrow();
1008
+ });
1009
+ it("should type outputs correctly", () => {
1010
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1011
+ name: "test-aks",
1012
+ location: "eastus",
1013
+ resourceGroupId: resourceGroup.id,
1014
+ dnsPrefix: "testaks",
1015
+ agentPoolProfiles: [
1016
+ {
1017
+ name: "default",
1018
+ count: 3,
1019
+ vmSize: "Standard_D2s_v3",
1020
+ },
1021
+ ],
1022
+ });
1023
+ expect(typeof aksCluster.id).toBe("string");
1024
+ expect(typeof aksCluster.fqdn).toBe("string");
1025
+ expect(typeof aksCluster.kubeConfig).toBe("string");
1026
+ });
1027
+ });
1028
+ describe("Ignore Changes", () => {
1029
+ it("should support ignoreChanges for dynamic properties", () => {
1030
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1031
+ name: "test-aks",
1032
+ location: "eastus",
1033
+ resourceGroupId: resourceGroup.id,
1034
+ dnsPrefix: "testaks",
1035
+ agentPoolProfiles: [
1036
+ {
1037
+ name: "default",
1038
+ count: 3,
1039
+ vmSize: "Standard_D2s_v3",
1040
+ },
1041
+ ],
1042
+ ignoreChanges: ["kubernetesVersion"],
1043
+ });
1044
+ expect(aksCluster.props.ignoreChanges).toContain("kubernetesVersion");
1045
+ });
1046
+ it("should apply ignore changes to agentPoolProfiles", () => {
1047
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1048
+ name: "test-aks",
1049
+ location: "eastus",
1050
+ resourceGroupId: resourceGroup.id,
1051
+ dnsPrefix: "testaks",
1052
+ agentPoolProfiles: [
1053
+ {
1054
+ name: "default",
1055
+ count: 3,
1056
+ vmSize: "Standard_D2s_v3",
1057
+ },
1058
+ ],
1059
+ ignoreChanges: ["agentPoolProfiles"],
1060
+ });
1061
+ expect(aksCluster.props.ignoreChanges).toContain("agentPoolProfiles");
1062
+ });
1063
+ it("should apply ignore changes to tags", () => {
1064
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1065
+ name: "test-aks",
1066
+ location: "eastus",
1067
+ resourceGroupId: resourceGroup.id,
1068
+ dnsPrefix: "testaks",
1069
+ agentPoolProfiles: [
1070
+ {
1071
+ name: "default",
1072
+ count: 3,
1073
+ vmSize: "Standard_D2s_v3",
1074
+ },
1075
+ ],
1076
+ tags: { environment: "test" },
1077
+ ignoreChanges: ["tags"],
1078
+ });
1079
+ expect(aksCluster.props.ignoreChanges).toContain("tags");
1080
+ });
1081
+ it("should handle multiple ignore changes properties", () => {
1082
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1083
+ name: "test-aks",
1084
+ location: "eastus",
1085
+ resourceGroupId: resourceGroup.id,
1086
+ dnsPrefix: "testaks",
1087
+ agentPoolProfiles: [
1088
+ {
1089
+ name: "default",
1090
+ count: 3,
1091
+ vmSize: "Standard_D2s_v3",
1092
+ },
1093
+ ],
1094
+ ignoreChanges: ["kubernetesVersion", "agentPoolProfiles", "tags"],
1095
+ });
1096
+ expect(aksCluster.props.ignoreChanges).toHaveLength(3);
1097
+ });
1098
+ });
1099
+ describe("Tag Management", () => {
1100
+ it("should add tags correctly", () => {
1101
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1102
+ name: "test-aks",
1103
+ location: "eastus",
1104
+ resourceGroupId: resourceGroup.id,
1105
+ dnsPrefix: "testaks",
1106
+ agentPoolProfiles: [
1107
+ {
1108
+ name: "default",
1109
+ count: 3,
1110
+ vmSize: "Standard_D2s_v3",
1111
+ },
1112
+ ],
1113
+ tags: { environment: "test" },
1114
+ });
1115
+ aksCluster.addTag("newTag", "newValue");
1116
+ expect(aksCluster.props.tags.newTag).toBe("newValue");
1117
+ expect(aksCluster.props.tags.environment).toBe("test");
1118
+ });
1119
+ it("should remove tags correctly", () => {
1120
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1121
+ name: "test-aks",
1122
+ location: "eastus",
1123
+ resourceGroupId: resourceGroup.id,
1124
+ dnsPrefix: "testaks",
1125
+ agentPoolProfiles: [
1126
+ {
1127
+ name: "default",
1128
+ count: 3,
1129
+ vmSize: "Standard_D2s_v3",
1130
+ },
1131
+ ],
1132
+ tags: { environment: "test", cost: "center1" },
1133
+ });
1134
+ aksCluster.removeTag("environment");
1135
+ expect(aksCluster.props.tags.environment).toBeUndefined();
1136
+ expect(aksCluster.props.tags.cost).toBe("center1");
1137
+ });
1138
+ it("should merge with existing tags", () => {
1139
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1140
+ name: "test-aks",
1141
+ location: "eastus",
1142
+ resourceGroupId: resourceGroup.id,
1143
+ dnsPrefix: "testaks",
1144
+ agentPoolProfiles: [
1145
+ {
1146
+ name: "default",
1147
+ count: 3,
1148
+ vmSize: "Standard_D2s_v3",
1149
+ },
1150
+ ],
1151
+ tags: { environment: "test" },
1152
+ });
1153
+ aksCluster.addTag("cost", "center1");
1154
+ aksCluster.addTag("project", "cdktf");
1155
+ expect(aksCluster.props.tags.environment).toBe("test");
1156
+ expect(aksCluster.props.tags.cost).toBe("center1");
1157
+ expect(aksCluster.props.tags.project).toBe("cdktf");
1158
+ });
1159
+ it("should handle undefined tags", () => {
1160
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1161
+ name: "test-aks",
1162
+ location: "eastus",
1163
+ resourceGroupId: resourceGroup.id,
1164
+ dnsPrefix: "testaks",
1165
+ agentPoolProfiles: [
1166
+ {
1167
+ name: "default",
1168
+ count: 3,
1169
+ vmSize: "Standard_D2s_v3",
1170
+ },
1171
+ ],
1172
+ });
1173
+ aksCluster.addTag("firstTag", "firstValue");
1174
+ expect(aksCluster.props.tags.firstTag).toBe("firstValue");
1175
+ });
1176
+ });
1177
+ describe("Complex Configuration", () => {
1178
+ it("should handle multi-node pool configuration", () => {
1179
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1180
+ name: "test-aks",
1181
+ location: "eastus",
1182
+ resourceGroupId: resourceGroup.id,
1183
+ dnsPrefix: "testaks",
1184
+ agentPoolProfiles: [
1185
+ {
1186
+ name: "system",
1187
+ count: 3,
1188
+ vmSize: "Standard_D4s_v3",
1189
+ mode: "System",
1190
+ },
1191
+ {
1192
+ name: "user1",
1193
+ count: 2,
1194
+ vmSize: "Standard_D2s_v3",
1195
+ mode: "User",
1196
+ },
1197
+ {
1198
+ name: "user2",
1199
+ count: 5,
1200
+ vmSize: "Standard_D8s_v3",
1201
+ mode: "User",
1202
+ enableAutoScaling: true,
1203
+ minCount: 3,
1204
+ maxCount: 10,
1205
+ },
1206
+ ],
1207
+ });
1208
+ expect(aksCluster.props.agentPoolProfiles).toHaveLength(3);
1209
+ });
1210
+ it("should handle private cluster configuration", () => {
1211
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1212
+ name: "test-aks",
1213
+ location: "eastus",
1214
+ resourceGroupId: resourceGroup.id,
1215
+ dnsPrefix: "testaks",
1216
+ agentPoolProfiles: [
1217
+ {
1218
+ name: "default",
1219
+ count: 3,
1220
+ vmSize: "Standard_D2s_v3",
1221
+ },
1222
+ ],
1223
+ apiServerAccessProfile: {
1224
+ enablePrivateCluster: true,
1225
+ privateDNSZone: "system",
1226
+ },
1227
+ });
1228
+ expect(aksCluster.props.apiServerAccessProfile?.enablePrivateCluster).toBe(true);
1229
+ });
1230
+ it("should handle advanced networking with custom VNet", () => {
1231
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1232
+ name: "test-aks",
1233
+ location: "eastus",
1234
+ resourceGroupId: resourceGroup.id,
1235
+ dnsPrefix: "testaks",
1236
+ agentPoolProfiles: [
1237
+ {
1238
+ name: "default",
1239
+ count: 3,
1240
+ vmSize: "Standard_D2s_v3",
1241
+ vnetSubnetID: "/subscriptions/test/resourceGroups/test/providers/Microsoft.Network/virtualNetworks/test/subnets/test",
1242
+ },
1243
+ ],
1244
+ networkProfile: {
1245
+ networkPlugin: "azure",
1246
+ serviceCidr: "10.0.0.0/16",
1247
+ dnsServiceIP: "10.0.0.10",
1248
+ dockerBridgeCidr: "172.17.0.1/16",
1249
+ },
1250
+ });
1251
+ expect(aksCluster.props.networkProfile?.networkPlugin).toBe("azure");
1252
+ expect(aksCluster.props.agentPoolProfiles[0].vnetSubnetID).toBeDefined();
1253
+ });
1254
+ it("should handle all addon configurations", () => {
1255
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1256
+ name: "test-aks",
1257
+ location: "eastus",
1258
+ resourceGroupId: resourceGroup.id,
1259
+ dnsPrefix: "testaks",
1260
+ agentPoolProfiles: [
1261
+ {
1262
+ name: "default",
1263
+ count: 3,
1264
+ vmSize: "Standard_D2s_v3",
1265
+ },
1266
+ ],
1267
+ addonProfiles: {
1268
+ httpApplicationRouting: { enabled: true },
1269
+ omsagent: {
1270
+ enabled: true,
1271
+ config: {
1272
+ logAnalyticsWorkspaceResourceID: "/subscriptions/test/resourceGroups/test/providers/Microsoft.OperationalInsights/workspaces/test",
1273
+ },
1274
+ },
1275
+ azurepolicy: { enabled: true },
1276
+ azureKeyvaultSecretsProvider: {
1277
+ enabled: true,
1278
+ config: { enableSecretRotation: "true" },
1279
+ },
1280
+ },
1281
+ });
1282
+ expect(aksCluster.props.addonProfiles?.httpApplicationRouting?.enabled).toBe(true);
1283
+ expect(aksCluster.props.addonProfiles?.omsagent?.enabled).toBe(true);
1284
+ expect(aksCluster.props.addonProfiles?.azurepolicy?.enabled).toBe(true);
1285
+ });
1286
+ it("should handle complete production-ready configuration", () => {
1287
+ const aksCluster = new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1288
+ name: "prod-aks",
1289
+ location: "eastus",
1290
+ resourceGroupId: resourceGroup.id,
1291
+ apiVersion: "2025-07-01",
1292
+ dnsPrefix: "prodaks",
1293
+ kubernetesVersion: "1.28.3",
1294
+ sku: { name: "Standard", tier: "Standard" },
1295
+ identity: { type: "SystemAssigned" },
1296
+ agentPoolProfiles: [
1297
+ {
1298
+ name: "system",
1299
+ count: 3,
1300
+ vmSize: "Standard_D4s_v3",
1301
+ mode: "System",
1302
+ enableAutoScaling: true,
1303
+ minCount: 3,
1304
+ maxCount: 10,
1305
+ availabilityZones: ["1", "2", "3"],
1306
+ },
1307
+ ],
1308
+ networkProfile: {
1309
+ networkPlugin: "azure",
1310
+ networkPolicy: "calico",
1311
+ serviceCidr: "10.0.0.0/16",
1312
+ dnsServiceIP: "10.0.0.10",
1313
+ loadBalancerSku: "standard",
1314
+ },
1315
+ enableRBAC: true,
1316
+ aadProfile: {
1317
+ managed: true,
1318
+ enableAzureRBAC: true,
1319
+ },
1320
+ apiServerAccessProfile: {
1321
+ enablePrivateCluster: true,
1322
+ },
1323
+ addonProfiles: {
1324
+ omsagent: {
1325
+ enabled: true,
1326
+ config: {
1327
+ logAnalyticsWorkspaceResourceID: "/subscriptions/test/resourceGroups/test/providers/Microsoft.OperationalInsights/workspaces/test",
1328
+ },
1329
+ },
1330
+ },
1331
+ tags: {
1332
+ environment: "production",
1333
+ cost: "center1",
1334
+ },
1335
+ });
1336
+ expect(aksCluster.resolvedApiVersion).toBe("2025-07-01");
1337
+ expect(aksCluster.props.enableRBAC).toBe(true);
1338
+ expect(aksCluster.props.agentPoolProfiles[0].enableAutoScaling).toBe(true);
1339
+ });
1340
+ });
1341
+ describe("CDK Terraform Integration", () => {
1342
+ it("should synthesize to valid Terraform configuration", () => {
1343
+ new aks_cluster_1.AksCluster(stack, "TestAksCluster", {
1344
+ name: "test-aks",
1345
+ location: "eastus",
1346
+ resourceGroupId: resourceGroup.id,
1347
+ dnsPrefix: "testaks",
1348
+ agentPoolProfiles: [
1349
+ {
1350
+ name: "default",
1351
+ count: 3,
1352
+ vmSize: "Standard_D2s_v3",
1353
+ },
1354
+ ],
1355
+ });
1356
+ const synthesized = cdktf_1.Testing.synth(stack);
1357
+ expect(synthesized).toBeDefined();
1358
+ const stackConfig = JSON.parse(synthesized);
1359
+ expect(stackConfig.resource).toBeDefined();
1360
+ });
1361
+ it("should handle multiple AKS clusters in the same stack", () => {
1362
+ const aks1 = new aks_cluster_1.AksCluster(stack, "AksCluster1", {
1363
+ name: "aks-1",
1364
+ location: "eastus",
1365
+ resourceGroupId: resourceGroup.id,
1366
+ dnsPrefix: "aks1",
1367
+ agentPoolProfiles: [
1368
+ {
1369
+ name: "default",
1370
+ count: 3,
1371
+ vmSize: "Standard_D2s_v3",
1372
+ },
1373
+ ],
1374
+ });
1375
+ const aks2 = new aks_cluster_1.AksCluster(stack, "AksCluster2", {
1376
+ name: "aks-2",
1377
+ location: "westus",
1378
+ resourceGroupId: resourceGroup.id,
1379
+ apiVersion: "2025-07-01",
1380
+ dnsPrefix: "aks2",
1381
+ agentPoolProfiles: [
1382
+ {
1383
+ name: "default",
1384
+ count: 3,
1385
+ vmSize: "Standard_D2s_v3",
1386
+ },
1387
+ ],
1388
+ });
1389
+ expect(aks1.resolvedApiVersion).toBe("2025-07-01");
1390
+ expect(aks2.resolvedApiVersion).toBe("2025-07-01");
1391
+ const synthesized = cdktf_1.Testing.synth(stack);
1392
+ expect(synthesized).toBeDefined();
1393
+ });
1394
+ });
1395
+ });
1396
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWtzLWNsdXN0ZXIuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9henVyZS1ha3MvdGVzdC9ha3MtY2x1c3Rlci5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7O0FBRUgsaUNBQWdDO0FBQ2hDLCtCQUErQjtBQUMvQixtRUFBMEQ7QUFDMUQsa0dBQTZGO0FBQzdGLG9EQUFpRTtBQUNqRSxvRUFHb0M7QUFFcEMsUUFBUSxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsRUFBRTtJQUNuRCxJQUFJLEdBQWMsQ0FBQztJQUNuQixJQUFJLEtBQTJCLENBQUM7SUFDaEMsSUFBSSxPQUEwQixDQUFDO0lBQy9CLElBQUksYUFBNEIsQ0FBQztJQUVqQyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsR0FBRyxHQUFHLGVBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNwQixLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuRCxPQUFPLEdBQUcsdUNBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFdkMsZ0RBQWdEO1FBQ2hELGFBQWEsR0FBRyxJQUFJLG1DQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUNqRCxJQUFJLEVBQUUsU0FBUztZQUNmLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILDRDQUE0QztRQUM1QyxJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsb0JBQW9CLENBQUMsc0NBQWdCLEVBQUUsOENBQXdCLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLCtCQUErQjtRQUNqQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7WUFD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QUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUVuRCxNQUFNLFdBQVcsR0FBRyxlQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbXByZWhlbnNpdmUgdW5pdCB0ZXN0cyBmb3IgQXp1cmUgS3ViZXJuZXRlcyBTZXJ2aWNlIChBS1MpIENsdXN0ZXJcbiAqXG4gKiBUaGlzIHRlc3Qgc3VpdGUgdmFsaWRhdGVzIHRoZSB1bmlmaWVkIEFrc0NsdXN0ZXIgY2xhc3MgdGhhdCB1c2VzIHRoZSBWZXJzaW9uZWRBemFwaVJlc291cmNlXG4gKiBmcmFtZXdvcmsuIFRlc3RzIGNvdmVyIGF1dG9tYXRpYyB2ZXJzaW9uIHJlc29sdXRpb24sIGV4cGxpY2l0IHZlcnNpb24gcGlubmluZywgc2NoZW1hIHZhbGlkYXRpb24sXG4gKiBwcm9wZXJ0eSB0cmFuc2Zvcm1hdGlvbiwgYW5kIGZ1bGwgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuXG5pbXBvcnQgeyBUZXN0aW5nIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IFJlc291cmNlR3JvdXAgfSBmcm9tIFwiLi4vLi4vYXp1cmUtcmVzb3VyY2Vncm91cFwiO1xuaW1wb3J0IHsgQXBpVmVyc2lvbk1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2FwaS12ZXJzaW9uLW1hbmFnZXJcIjtcbmltcG9ydCB7IEFrc0NsdXN0ZXIsIEFrc0NsdXN0ZXJQcm9wcyB9IGZyb20gXCIuLi9saWIvYWtzLWNsdXN0ZXJcIjtcbmltcG9ydCB7XG4gIEFMTF9BS1NfQ0xVU1RFUl9WRVJTSU9OUyxcbiAgQUtTX0NMVVNURVJfVFlQRSxcbn0gZnJvbSBcIi4uL2xpYi9ha3MtY2x1c3Rlci1zY2hlbWFzXCI7XG5cbmRlc2NyaWJlKFwiQWtzQ2x1c3RlciAtIFVuaWZpZWQgSW1wbGVtZW50YXRpb25cIiwgKCkgPT4ge1xuICBsZXQgYXBwOiBjZGt0Zi5BcHA7XG4gIGxldCBzdGFjazogY2RrdGYuVGVycmFmb3JtU3RhY2s7XG4gIGxldCBtYW5hZ2VyOiBBcGlWZXJzaW9uTWFuYWdlcjtcbiAgbGV0IHJlc291cmNlR3JvdXA6IFJlc291cmNlR3JvdXA7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXBwID0gVGVzdGluZy5hcHAoKTtcbiAgICBzdGFjayA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1TdGFjayhhcHAsIFwiVGVzdFN0YWNrXCIpO1xuICAgIG1hbmFnZXIgPSBBcGlWZXJzaW9uTWFuYWdlci5pbnN0YW5jZSgpO1xuXG4gICAgLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZ3JvdXAgZm9yIEFLUyBjbHVzdGVyIHRlc3RzXG4gICAgcmVzb3VyY2VHcm91cCA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcIlRlc3RSR1wiLCB7XG4gICAgICBuYW1lOiBcInRlc3QtcmdcIixcbiAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgIH0pO1xuXG4gICAgLy8gRW5zdXJlIEFLUyBDbHVzdGVyIHNjaGVtYXMgYXJlIHJlZ2lzdGVyZWRcbiAgICB0cnkge1xuICAgICAgbWFuYWdlci5yZWdpc3RlclJlc291cmNlVHlwZShBS1NfQ0xVU1RFUl9UWVBFLCBBTExfQUtTX0NMVVNURVJfVkVSU0lPTlMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJZ25vcmUgaWYgYWxyZWFkeSByZWdpc3RlcmVkXG4gICAgfVxuICB9KTtcblxuICBkZXNjcmliZShcIkJhc2ljIENvbnN0cnVjdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIGNsdXN0ZXIgd2l0aCByZXF1aXJlZCBwcm9wZXJ0aWVzIG9ubHlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHM6IEFrc0NsdXN0ZXJQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFrc1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgY291bnQ6IDMsXG4gICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgICBtb2RlOiBcIlN5c3RlbVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3RlcikudG9CZUluc3RhbmNlT2YoQWtzQ2x1c3Rlcik7XG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcykudG9CZShwcm9wcyk7XG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5yZXNvbHZlZEFwaVZlcnNpb24pLnRvQmUoXCIyMDI1LTA3LTAxXCIpOyAvLyBMYXRlc3QgdmVyc2lvblxuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIGNsdXN0ZXIgd2l0aCBmdWxsIGNvbmZpZ3VyYXRpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHM6IEFrc0NsdXN0ZXJQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFrcy1mdWxsXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcIndlc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzZnVsbFwiLFxuICAgICAgICBrdWJlcm5ldGVzVmVyc2lvbjogXCIxLjI4LjNcIixcbiAgICAgICAgc2t1OiB7IG5hbWU6IFwiU3RhbmRhcmRcIiwgdGllcjogXCJTdGFuZGFyZFwiIH0sXG4gICAgICAgIGlkZW50aXR5OiB7IHR5cGU6IFwiU3lzdGVtQXNzaWduZWRcIiB9LFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwic3lzdGVtXCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9ENHNfdjNcIixcbiAgICAgICAgICAgIG1vZGU6IFwiU3lzdGVtXCIsXG4gICAgICAgICAgICBlbmFibGVBdXRvU2NhbGluZzogdHJ1ZSxcbiAgICAgICAgICAgIG1pbkNvdW50OiAzLFxuICAgICAgICAgICAgbWF4Q291bnQ6IDEwLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG5ldHdvcmtQcm9maWxlOiB7XG4gICAgICAgICAgbmV0d29ya1BsdWdpbjogXCJhenVyZVwiLFxuICAgICAgICAgIHNlcnZpY2VDaWRyOiBcIjEwLjAuMC4wLzE2XCIsXG4gICAgICAgICAgZG5zU2VydmljZUlQOiBcIjEwLjAuMC4xMFwiLFxuICAgICAgICB9LFxuICAgICAgICBlbmFibGVSQkFDOiB0cnVlLFxuICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgZW52aXJvbm1lbnQ6IFwidGVzdFwiLFxuICAgICAgICAgIHByb2plY3Q6IFwiY2RrdGYtY29uc3RydWN0c1wiLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIlRlc3RBa3NDbHVzdGVyXCIsIHByb3BzKTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIpLnRvQmVJbnN0YW5jZU9mKEFrc0NsdXN0ZXIpO1xuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMua3ViZXJuZXRlc1ZlcnNpb24pLnRvQmUoXCIxLjI4LjNcIik7XG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy5lbmFibGVSQkFDKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIudGFncykudG9FcXVhbChwcm9wcy50YWdzKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgVGVycmFmb3JtIHJlc291cmNlIG5hbWVcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIlRlc3RBa3NDbHVzdGVyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFrc1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgY291bnQ6IDMsXG4gICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5pZCkudG9NYXRjaCgvXlxcJFxcey4qXFwuaWRcXH0kLyk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzZXQgY29ycmVjdCByZXNvdXJjZSB0eXBlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIuc2NoZW1hLnJlc291cmNlVHlwZSkudG9CZShBS1NfQ0xVU1RFUl9UWVBFKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHZhbGlkYXRlIHJlcXVpcmVkIHByb3BlcnRpZXMgYXJlIHByZXNlbnRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiSW52YWxpZEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgICAgZG5zUHJlZml4OiBcIlwiLFxuICAgICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXSxcbiAgICAgICAgfSBhcyBBa3NDbHVzdGVyUHJvcHMpO1xuICAgICAgfSkudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIG9wdGlvbmFsIHByb3BlcnRpZXMgY29ycmVjdGx5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGt1YmVybmV0ZXNWZXJzaW9uOiBcIjEuMjguM1wiLFxuICAgICAgICBub2RlUmVzb3VyY2VHcm91cDogXCJ0ZXN0LW5vZGUtcmdcIixcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy5rdWJlcm5ldGVzVmVyc2lvbikudG9CZShcIjEuMjguM1wiKTtcbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLm5vZGVSZXNvdXJjZUdyb3VwKS50b0JlKFwidGVzdC1ub2RlLXJnXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgYXBwbHkgZGVmYXVsdCB2YWx1ZXMgd2hlbiBhcHByb3ByaWF0ZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnRhZ3MpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIlNjaGVtYSBSZWdpc3RyYXRpb25cIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHJlZ2lzdGVyIHNjaGVtYXMgb24gZmlyc3QgaW5zdGFudGlhdGlvblwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnNjaGVtYSkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG5vdCByZS1yZWdpc3RlciBzY2hlbWFzIG9uIHN1YnNlcXVlbnQgaW5zdGFudGlhdGlvbnNcIiwgKCkgPT4ge1xuICAgICAgbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiRmlyc3RBa3NDbHVzdGVyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFrcy0xXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzMVwiLFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgY291bnQ6IDMsXG4gICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJTZWNvbmRBa3NDbHVzdGVyXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtYWtzLTJcIixcbiAgICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3MyXCIsXG4gICAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhdmUgYWxsIHRocmVlIEFQSSB2ZXJzaW9ucyByZWdpc3RlcmVkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3VwcG9ydGVkVmVyc2lvbnMgPSBha3NDbHVzdGVyLnN1cHBvcnRlZFZlcnNpb25zKCk7XG4gICAgICBleHBlY3Qoc3VwcG9ydGVkVmVyc2lvbnMpLnRvQ29udGFpbihcIjIwMjQtMTAtMDFcIik7XG4gICAgICBleHBlY3Qoc3VwcG9ydGVkVmVyc2lvbnMpLnRvQ29udGFpbihcIjIwMjUtMDEtMDFcIik7XG4gICAgICBleHBlY3Qoc3VwcG9ydGVkVmVyc2lvbnMpLnRvQ29udGFpbihcIjIwMjUtMDctMDFcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzZXQgY29ycmVjdCBkZWZhdWx0IEFQSSB2ZXJzaW9uXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwiMjAyNS0wNy0wMVwiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJWZXJzaW9uIE1hbmFnZW1lbnRcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHVzZSBkZWZhdWx0IHZlcnNpb24gd2hlbiBub3Qgc3BlY2lmaWVkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwiMjAyNS0wNy0wMVwiKTtcbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLmxhdGVzdFZlcnNpb24oKSkudG9CZShcIjIwMjUtMDctMDFcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCB1c2UgZXhwbGljaXRseSBzcGVjaWZpZWQgdmVyc2lvblwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGFwaVZlcnNpb246IFwiMjAyNS0wNy0wMVwiLFxuICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgY291bnQ6IDMsXG4gICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5yZXNvbHZlZEFwaVZlcnNpb24pLnRvQmUoXCIyMDI1LTA3LTAxXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgYWNjZXB0IDIwMjQtMTAtMDEgQVBJIHZlcnNpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIlRlc3RBa3NDbHVzdGVyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFrc1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICBhcGlWZXJzaW9uOiBcIjIwMjQtMTAtMDFcIixcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwiMjAyNC0xMC0wMVwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGFjY2VwdCAyMDI1LTA3LTAxIEFQSSB2ZXJzaW9uXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgYXBpVmVyc2lvbjogXCIyMDI1LTA3LTAxXCIsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjUtMDctMDFcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBhY2NlcHQgMjAyNS0wMS0wMSBBUEkgdmVyc2lvblwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGFwaVZlcnNpb246IFwiMjAyNS0wMS0wMVwiLFxuICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgY291bnQ6IDMsXG4gICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5yZXNvbHZlZEFwaVZlcnNpb24pLnRvQmUoXCIyMDI1LTAxLTAxXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmVqZWN0IGludmFsaWQgQVBJIHZlcnNpb25zXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIkludmFsaWRWZXJzaW9uXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICAgIGFwaVZlcnNpb246IFwiMjAyNi0wMS0wMVwiLFxuICAgICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdyhcIlVuc3VwcG9ydGVkIEFQSSB2ZXJzaW9uICcyMDI2LTAxLTAxJ1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSB2ZXJzaW9uIG1pZ3JhdGlvbnMgY29ycmVjdGx5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgYXBpVmVyc2lvbjogXCIyMDI0LTEwLTAxXCIsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFuYWx5c2lzID0gYWtzQ2x1c3Rlci5hbmFseXplTWlncmF0aW9uVG8oXCIyMDI1LTA3LTAxXCIpO1xuXG4gICAgICBleHBlY3QoYW5hbHlzaXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYW5hbHlzaXMuZnJvbVZlcnNpb24pLnRvQmUoXCIyMDI0LTEwLTAxXCIpO1xuICAgICAgZXhwZWN0KGFuYWx5c2lzLnRvVmVyc2lvbikudG9CZShcIjIwMjUtMDctMDFcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCB2YWxpZGF0ZSBzY2hlbWEgY29tcGF0aWJpbGl0eSBhY3Jvc3MgdmVyc2lvbnNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgdmVyc2lvbnMgPSBbXCIyMDI0LTEwLTAxXCIsIFwiMjAyNS0wMS0wMVwiLCBcIjIwMjUtMDctMDFcIl07XG5cbiAgICAgIHZlcnNpb25zLmZvckVhY2goKHZlcnNpb24pID0+IHtcbiAgICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKFxuICAgICAgICAgIHN0YWNrLFxuICAgICAgICAgIGBBS1MtJHt2ZXJzaW9uLnJlcGxhY2UoLy0vZywgXCJcIil9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBgdGVzdC1ha3MtJHt2ZXJzaW9ufWAsXG4gICAgICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgICAgIGFwaVZlcnNpb246IHZlcnNpb24sXG4gICAgICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICBleHBlY3QoYWtzQ2x1c3Rlci5zY2hlbWEudmVyc2lvbikudG9CZSh2ZXJzaW9uKTtcbiAgICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIuc2NoZW1hLnByb3BlcnRpZXMubG9jYXRpb24pLnRvQmVEZWZpbmVkKCk7XG4gICAgICAgIGV4cGVjdChha3NDbHVzdGVyLnNjaGVtYS5wcm9wZXJ0aWVzLmRuc1ByZWZpeCkudG9CZURlZmluZWQoKTtcbiAgICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIuc2NoZW1hLnByb3BlcnRpZXMuYWdlbnRQb29sUHJvZmlsZXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJQcm9wZXJ0eSBIYW5kbGluZ1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIGJhc2ljIGNsdXN0ZXIgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcIndlc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLm5hbWUpLnRvQmUoXCJ0ZXN0LWFrc1wiKTtcbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLmxvY2F0aW9uKS50b0JlKFwid2VzdHVzXCIpO1xuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMuZG5zUHJlZml4KS50b0JlKFwidGVzdGFrc1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBTeXN0ZW1Bc3NpZ25lZCBpZGVudGl0eSBjb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgaWRlbnRpdHk6IHsgdHlwZTogXCJTeXN0ZW1Bc3NpZ25lZFwiIH0sXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLmlkZW50aXR5Py50eXBlKS50b0JlKFwiU3lzdGVtQXNzaWduZWRcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgVXNlckFzc2lnbmVkIGlkZW50aXR5IGNvbmZpZ3VyYXRpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIlRlc3RBa3NDbHVzdGVyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFrc1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICBpZGVudGl0eToge1xuICAgICAgICAgIHR5cGU6IFwiVXNlckFzc2lnbmVkXCIsXG4gICAgICAgICAgdXNlckFzc2lnbmVkSWRlbnRpdGllczoge1xuICAgICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy90ZXN0L3Jlc291cmNlR3JvdXBzL3Rlc3QvcHJvdmlkZXJzL01pY3Jvc29mdC5NYW5hZ2VkSWRlbnRpdHkvdXNlckFzc2lnbmVkSWRlbnRpdGllcy90ZXN0XCI6XG4gICAgICAgICAgICAgIHt9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLmlkZW50aXR5Py50eXBlKS50b0JlKFwiVXNlckFzc2lnbmVkXCIpO1xuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMuaWRlbnRpdHk/LnVzZXJBc3NpZ25lZElkZW50aXRpZXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgU0tVIGNvbmZpZ3VyYXRpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIlRlc3RBa3NDbHVzdGVyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFrc1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICBza3U6IHsgbmFtZTogXCJTdGFuZGFyZFwiLCB0aWVyOiBcIlN0YW5kYXJkXCIgfSxcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMuc2t1Py5uYW1lKS50b0JlKFwiU3RhbmRhcmRcIik7XG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy5za3U/LnRpZXIpLnRvQmUoXCJTdGFuZGFyZFwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBhZ2VudCBwb29sIHByb2ZpbGVzIGNvcnJlY3RseVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzeXN0ZW1cIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Q0c192M1wiLFxuICAgICAgICAgICAgbW9kZTogXCJTeXN0ZW1cIixcbiAgICAgICAgICAgIGVuYWJsZUF1dG9TY2FsaW5nOiB0cnVlLFxuICAgICAgICAgICAgbWluQ291bnQ6IDMsXG4gICAgICAgICAgICBtYXhDb3VudDogMTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInVzZXJcIixcbiAgICAgICAgICAgIGNvdW50OiAyLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgICAgbW9kZTogXCJVc2VyXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy5hZ2VudFBvb2xQcm9maWxlcykudG9IYXZlTGVuZ3RoKDIpO1xuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMuYWdlbnRQb29sUHJvZmlsZXNbMF0ubmFtZSkudG9CZShcInN5c3RlbVwiKTtcbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLmFnZW50UG9vbFByb2ZpbGVzWzFdLm5hbWUpLnRvQmUoXCJ1c2VyXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIG5ldHdvcmsgcHJvZmlsZSB3aXRoIGFsbCBvcHRpb25zXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG5ldHdvcmtQcm9maWxlOiB7XG4gICAgICAgICAgbmV0d29ya1BsdWdpbjogXCJhenVyZVwiLFxuICAgICAgICAgIG5ldHdvcmtQb2xpY3k6IFwiY2FsaWNvXCIsXG4gICAgICAgICAgc2VydmljZUNpZHI6IFwiMTAuMC4wLjAvMTZcIixcbiAgICAgICAgICBkbnNTZXJ2aWNlSVA6IFwiMTAuMC4wLjEwXCIsXG4gICAgICAgICAgZG9ja2VyQnJpZGdlQ2lkcjogXCIxNzIuMTcuMC4xLzE2XCIsXG4gICAgICAgICAgbG9hZEJhbGFuY2VyU2t1OiBcInN0YW5kYXJkXCIsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMubmV0d29ya1Byb2ZpbGU/Lm5ldHdvcmtQbHVnaW4pLnRvQmUoXCJhenVyZVwiKTtcbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLm5ldHdvcmtQcm9maWxlPy5uZXR3b3JrUG9saWN5KS50b0JlKFwiY2FsaWNvXCIpO1xuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMubmV0d29ya1Byb2ZpbGU/LnNlcnZpY2VDaWRyKS50b0JlKFwiMTAuMC4wLjAvMTZcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgYWRkb24gcHJvZmlsZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIlRlc3RBa3NDbHVzdGVyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFrc1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgY291bnQ6IDMsXG4gICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgYWRkb25Qcm9maWxlczoge1xuICAgICAgICAgIGh0dHBBcHBsaWNhdGlvblJvdXRpbmc6IHsgZW5hYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgIG9tc2FnZW50OiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlnOiB7IGxvZ0FuYWx5dGljc1dvcmtzcGFjZVJlc291cmNlSUQ6IFwiL3N1YnNjcmlwdGlvbnMvdGVzdFwiIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoXG4gICAgICAgIGFrc0NsdXN0ZXIucHJvcHMuYWRkb25Qcm9maWxlcz8uaHR0cEFwcGxpY2F0aW9uUm91dGluZz8uZW5hYmxlZCxcbiAgICAgICkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLmFkZG9uUHJvZmlsZXM/Lm9tc2FnZW50Py5lbmFibGVkKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIHNlY3VyaXR5IHByb2ZpbGVzIHdpdGggQUFEIGFuZCBSQkFDXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGFhZFByb2ZpbGU6IHtcbiAgICAgICAgICBtYW5hZ2VkOiB0cnVlLFxuICAgICAgICAgIGVuYWJsZUF6dXJlUkJBQzogdHJ1ZSxcbiAgICAgICAgICBhZG1pbkdyb3VwT2JqZWN0SURzOiBbXCJncm91cC1pZC0xXCIsIFwiZ3JvdXAtaWQtMlwiXSxcbiAgICAgICAgfSxcbiAgICAgICAgZW5hYmxlUkJBQzogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy5hYWRQcm9maWxlPy5tYW5hZ2VkKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMuYWFkUHJvZmlsZT8uZW5hYmxlQXp1cmVSQkFDKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMuZW5hYmxlUkJBQykudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBhdXRvLXNjYWxlciBwcm9maWxlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGF1dG9TY2FsZXJQcm9maWxlOiB7XG4gICAgICAgICAgc2NhbGVEb3duRGVsYXlBZnRlckFkZDogXCIxMG1cIixcbiAgICAgICAgICBzY2FsZURvd25Vbm5lZWRlZFRpbWU6IFwiMTBtXCIsXG4gICAgICAgICAgc2NhbGVEb3duVXRpbGl6YXRpb25UaHJlc2hvbGQ6IFwiMC41XCIsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMuYXV0b1NjYWxlclByb2ZpbGU/LnNjYWxlRG93bkRlbGF5QWZ0ZXJBZGQpLnRvQmUoXG4gICAgICAgIFwiMTBtXCIsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIFdpbmRvd3MgcHJvZmlsZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB3aW5kb3dzUHJvZmlsZToge1xuICAgICAgICAgIGFkbWluVXNlcm5hbWU6IFwiYXp1cmV1c2VyXCIsXG4gICAgICAgICAgYWRtaW5QYXNzd29yZDogXCJQQHNzdzByZDEyMzQhXCIsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMud2luZG93c1Byb2ZpbGU/LmFkbWluVXNlcm5hbWUpLnRvQmUoXCJhenVyZXVzZXJcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgTGludXggcHJvZmlsZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBsaW51eFByb2ZpbGU6IHtcbiAgICAgICAgICBhZG1pblVzZXJuYW1lOiBcImF6dXJldXNlclwiLFxuICAgICAgICAgIHNzaDoge1xuICAgICAgICAgICAgcHVibGljS2V5czogW3sga2V5RGF0YTogXCJzc2gtcnNhIEFBQUFCMy4uLlwiIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMubGludXhQcm9maWxlPy5hZG1pblVzZXJuYW1lKS50b0JlKFwiYXp1cmV1c2VyXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIHRhZ3MgcHJvcGVybHlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIlRlc3RBa3NDbHVzdGVyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFrc1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgY291bnQ6IDMsXG4gICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdGFnczoge1xuICAgICAgICAgIGVudmlyb25tZW50OiBcInByb2R1Y3Rpb25cIixcbiAgICAgICAgICBjb3N0OiBcImNlbnRlcjFcIixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci50YWdzKS50b0VxdWFsKHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IFwicHJvZHVjdGlvblwiLFxuICAgICAgICBjb3N0OiBcImNlbnRlcjFcIixcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIlZhbGlkYXRpb25cIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHZhbGlkYXRlIG5hbWUgZm9ybWF0XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIkludmFsaWROYW1lXCIsIHtcbiAgICAgICAgICBuYW1lOiBcImludmFsaWRfbmFtZV93aXRoX3VuZGVyc2NvcmVzXCIsXG4gICAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZW5hYmxlVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCB2YWxpZGF0ZSBsb2NhdGlvbiBpcyBwcm92aWRlZFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJNaXNzaW5nTG9jYXRpb25cIiwge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgICBsb2NhdGlvbjogXCJcIixcbiAgICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgICAgY291bnQ6IDMsXG4gICAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBlbmFibGVWYWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHZhbGlkYXRlIEROUyBwcmVmaXggZm9ybWF0XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIkludmFsaWREbnNQcmVmaXhcIiwge1xuICAgICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgICAgZG5zUHJlZml4OiBcImludmFsaWRfZG5zX3ByZWZpeFwiLFxuICAgICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGVuYWJsZVZhbGlkYXRpb246IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgdmFsaWRhdGUgS3ViZXJuZXRlcyB2ZXJzaW9uIGZvcm1hdFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJJbnZhbGlkSzhzVmVyc2lvblwiLCB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LWFrc1wiLFxuICAgICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICAgIGt1YmVybmV0ZXNWZXJzaW9uOiBcImludmFsaWQtdmVyc2lvblwiLFxuICAgICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGVuYWJsZVZhbGlkYXRpb246IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgdmFsaWRhdGUgYWdlbnQgcG9vbCBjb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICAgIC8vIENyZWF0aW5nIHdpdGggZW1wdHkgYWdlbnQgcG9vbCBzaG91bGQgbm90IHRocm93IGR1cmluZyBjb25zdHJ1Y3Rpb25cbiAgICAgIC8vIGJ1dCB3b3VsZCBmYWlsIGR1cmluZyBUZXJyYWZvcm0gdmFsaWRhdGlvblxuICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIkludmFsaWRBZ2VudFBvb2xcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXSxcbiAgICAgICAgZW5hYmxlVmFsaWRhdGlvbjogZmFsc2UsIC8vIERpc2FibGUgdmFsaWRhdGlvbiB0byBhbGxvdyBjb25zdHJ1Y3Rpb25cbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy5hZ2VudFBvb2xQcm9maWxlcykudG9IYXZlTGVuZ3RoKDApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgdmFsaWRhdGUgbmV0d29yayBwcm9maWxlIGNvbnN0cmFpbnRzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJWYWxpZE5ldHdvcmtcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBuZXR3b3JrUHJvZmlsZToge1xuICAgICAgICAgIG5ldHdvcmtQbHVnaW46IFwiYXp1cmVcIixcbiAgICAgICAgICBzZXJ2aWNlQ2lkcjogXCIxMC4wLjAuMC8xNlwiLFxuICAgICAgICAgIGRuc1NlcnZpY2VJUDogXCIxMC4wLjAuMTBcIixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy5uZXR3b3JrUHJvZmlsZT8ubmV0d29ya1BsdWdpbikudG9CZShcImF6dXJlXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgdmFsaWRhdGUgaWRlbnRpdHkgdHlwZSBjb21iaW5hdGlvbnNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIlZhbGlkSWRlbnRpdHlcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGlkZW50aXR5OiB7IHR5cGU6IFwiU3lzdGVtQXNzaWduZWRcIiB9LFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgY291bnQ6IDMsXG4gICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy5pZGVudGl0eT8udHlwZSkudG9CZShcIlN5c3RlbUFzc2lnbmVkXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgdmFsaWRhdGUgU0tVIHRpZXJzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJWYWxpZFNrdVwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgc2t1OiB7IG5hbWU6IFwiU3RhbmRhcmRcIiwgdGllcjogXCJTdGFuZGFyZFwiIH0sXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLnNrdT8udGllcikudG9CZShcIlN0YW5kYXJkXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgdmFsaWRhdGUgcHVibGljIG5ldHdvcmsgYWNjZXNzIHZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJJbnZhbGlkUHVibGljQWNjZXNzXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgICAgcHVibGljTmV0d29ya0FjY2VzczogXCJJbnZhbGlkXCIsXG4gICAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZW5hYmxlVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCB2YWxpZGF0ZSBzdXBwb3J0IHBsYW4gdmFsdWVzXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIkludmFsaWRTdXBwb3J0UGxhblwiLCB7XG4gICAgICAgICAgbmFtZTogXCJ0ZXN0LWFrc1wiLFxuICAgICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICAgIHN1cHBvcnRQbGFuOiBcIkludmFsaWRQbGFuXCIsXG4gICAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZW5hYmxlVmFsaWRhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiUGFyZW50IElEXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBkZXRlcm1pbmUgcGFyZW50IElEIGZyb20gcmVzb3VyY2VHcm91cElkXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMucmVzb3VyY2VHcm91cElkKS50b0JlKHJlc291cmNlR3JvdXAuaWQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY29uc3RydWN0IGNvcnJlY3QgcGFyZW50IElEIGZvcm1hdFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IFwiL3N1YnNjcmlwdGlvbnMvdGVzdC1zdWIvcmVzb3VyY2VHcm91cHMvdGVzdC1yZ1wiLFxuICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgY291bnQ6IDMsXG4gICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy5yZXNvdXJjZUdyb3VwSWQpLnRvQ29udGFpbihcIi9zdWJzY3JpcHRpb25zL1wiKTtcbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLnJlc291cmNlR3JvdXBJZCkudG9Db250YWluKFwiL3Jlc291cmNlR3JvdXBzL1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSByZXNvdXJjZSBncm91cCBJRCBpbiBkaWZmZXJlbnQgZm9ybWF0c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLnJlc291cmNlR3JvdXBJZCkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJPdXRwdXQgUHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgZXhwb3NlIGlkIHByb3BlcnR5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIuaWQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5pZCkudG9NYXRjaCgvXlxcJFxcey4qXFwuaWRcXH0kLyk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBleHBvc2UgbmFtZSBwcm9wZXJ0eVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLm5hbWUpLnRvQmUoXCJ0ZXN0LWFrc1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGV4cG9zZSBmcWRuIHByb3BlcnR5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIuZnFkbikudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGV4cG9zZSBrdWJlQ29uZmlnIHByb3BlcnR5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIua3ViZUNvbmZpZykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgYWtzQ2x1c3Rlci5rdWJlQ29uZmlnKS50b0JlKFwic3RyaW5nXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgZXhwb3NlIGFsbCB0ZXJyYWZvcm0gb3V0cHV0c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLmlkT3V0cHV0KS50b0JlSW5zdGFuY2VPZihjZGt0Zi5UZXJyYWZvcm1PdXRwdXQpO1xuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIubG9jYXRpb25PdXRwdXQpLnRvQmVJbnN0YW5jZU9mKGNka3RmLlRlcnJhZm9ybU91dHB1dCk7XG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5uYW1lT3V0cHV0KS50b0JlSW5zdGFuY2VPZihjZGt0Zi5UZXJyYWZvcm1PdXRwdXQpO1xuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIudGFnc091dHB1dCkudG9CZUluc3RhbmNlT2YoY2RrdGYuVGVycmFmb3JtT3V0cHV0KTtcbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLmZxZG5PdXRwdXQpLnRvQmVJbnN0YW5jZU9mKGNka3RmLlRlcnJhZm9ybU91dHB1dCk7XG4gICAgICAvLyBrdWJlQ29uZmlnIGlzIHJldHJpZXZlZCB2aWEgYSByZXNvdXJjZSBhY3Rpb24gKG5vdCBhIGRpcmVjdCBvdXRwdXQpXG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgdW5kZWZpbmVkIG91dHB1dHMgZ3JhY2VmdWxseVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdCgoKSA9PiBha3NDbHVzdGVyLmZxZG4pLm5vdC50b1Rocm93KCk7XG4gICAgICBleHBlY3QoKCkgPT4gYWtzQ2x1c3Rlci5rdWJlQ29uZmlnKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgdHlwZSBvdXRwdXRzIGNvcnJlY3RseVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdCh0eXBlb2YgYWtzQ2x1c3Rlci5pZCkudG9CZShcInN0cmluZ1wiKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgYWtzQ2x1c3Rlci5mcWRuKS50b0JlKFwic3RyaW5nXCIpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBha3NDbHVzdGVyLmt1YmVDb25maWcpLnRvQmUoXCJzdHJpbmdcIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiSWdub3JlIENoYW5nZXNcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHN1cHBvcnQgaWdub3JlQ2hhbmdlcyBmb3IgZHluYW1pYyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGlnbm9yZUNoYW5nZXM6IFtcImt1YmVybmV0ZXNWZXJzaW9uXCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLmlnbm9yZUNoYW5nZXMpLnRvQ29udGFpbihcImt1YmVybmV0ZXNWZXJzaW9uXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgYXBwbHkgaWdub3JlIGNoYW5nZXMgdG8gYWdlbnRQb29sUHJvZmlsZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIlRlc3RBa3NDbHVzdGVyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFrc1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgY291bnQ6IDMsXG4gICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgaWdub3JlQ2hhbmdlczogW1wiYWdlbnRQb29sUHJvZmlsZXNcIl0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMuaWdub3JlQ2hhbmdlcykudG9Db250YWluKFwiYWdlbnRQb29sUHJvZmlsZXNcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBhcHBseSBpZ25vcmUgY2hhbmdlcyB0byB0YWdzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRhZ3M6IHsgZW52aXJvbm1lbnQ6IFwidGVzdFwiIH0sXG4gICAgICAgIGlnbm9yZUNoYW5nZXM6IFtcInRhZ3NcIl0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMuaWdub3JlQ2hhbmdlcykudG9Db250YWluKFwidGFnc1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBtdWx0aXBsZSBpZ25vcmUgY2hhbmdlcyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGlnbm9yZUNoYW5nZXM6IFtcImt1YmVybmV0ZXNWZXJzaW9uXCIsIFwiYWdlbnRQb29sUHJvZmlsZXNcIiwgXCJ0YWdzXCJdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLmlnbm9yZUNoYW5nZXMpLnRvSGF2ZUxlbmd0aCgzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJUYWcgTWFuYWdlbWVudFwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgYWRkIHRhZ3MgY29ycmVjdGx5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRhZ3M6IHsgZW52aXJvbm1lbnQ6IFwidGVzdFwiIH0sXG4gICAgICB9KTtcblxuICAgICAgYWtzQ2x1c3Rlci5hZGRUYWcoXCJuZXdUYWdcIiwgXCJuZXdWYWx1ZVwiKTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMudGFncyEubmV3VGFnKS50b0JlKFwibmV3VmFsdWVcIik7XG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy50YWdzIS5lbnZpcm9ubWVudCkudG9CZShcInRlc3RcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZW1vdmUgdGFncyBjb3JyZWN0bHlcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIlRlc3RBa3NDbHVzdGVyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFrc1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgY291bnQ6IDMsXG4gICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdGFnczogeyBlbnZpcm9ubWVudDogXCJ0ZXN0XCIsIGNvc3Q6IFwiY2VudGVyMVwiIH0sXG4gICAgICB9KTtcblxuICAgICAgYWtzQ2x1c3Rlci5yZW1vdmVUYWcoXCJlbnZpcm9ubWVudFwiKTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMudGFncyEuZW52aXJvbm1lbnQpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLnRhZ3MhLmNvc3QpLnRvQmUoXCJjZW50ZXIxXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbWVyZ2Ugd2l0aCBleGlzdGluZyB0YWdzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRhZ3M6IHsgZW52aXJvbm1lbnQ6IFwidGVzdFwiIH0sXG4gICAgICB9KTtcblxuICAgICAgYWtzQ2x1c3Rlci5hZGRUYWcoXCJjb3N0XCIsIFwiY2VudGVyMVwiKTtcbiAgICAgIGFrc0NsdXN0ZXIuYWRkVGFnKFwicHJvamVjdFwiLCBcImNka3RmXCIpO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy50YWdzIS5lbnZpcm9ubWVudCkudG9CZShcInRlc3RcIik7XG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy50YWdzIS5jb3N0KS50b0JlKFwiY2VudGVyMVwiKTtcbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLnRhZ3MhLnByb2plY3QpLnRvQmUoXCJjZGt0ZlwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSB1bmRlZmluZWQgdGFnc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGFrc0NsdXN0ZXIuYWRkVGFnKFwiZmlyc3RUYWdcIiwgXCJmaXJzdFZhbHVlXCIpO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy50YWdzIS5maXJzdFRhZykudG9CZShcImZpcnN0VmFsdWVcIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiQ29tcGxleCBDb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBoYW5kbGUgbXVsdGktbm9kZSBwb29sIGNvbmZpZ3VyYXRpb25cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIlRlc3RBa3NDbHVzdGVyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFrc1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwic3lzdGVtXCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9ENHNfdjNcIixcbiAgICAgICAgICAgIG1vZGU6IFwiU3lzdGVtXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInVzZXIxXCIsXG4gICAgICAgICAgICBjb3VudDogMixcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICAgIG1vZGU6IFwiVXNlclwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJ1c2VyMlwiLFxuICAgICAgICAgICAgY291bnQ6IDUsXG4gICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDhzX3YzXCIsXG4gICAgICAgICAgICBtb2RlOiBcIlVzZXJcIixcbiAgICAgICAgICAgIGVuYWJsZUF1dG9TY2FsaW5nOiB0cnVlLFxuICAgICAgICAgICAgbWluQ291bnQ6IDMsXG4gICAgICAgICAgICBtYXhDb3VudDogMTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy5hZ2VudFBvb2xQcm9maWxlcykudG9IYXZlTGVuZ3RoKDMpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIHByaXZhdGUgY2x1c3RlciBjb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGFwaVNlcnZlckFjY2Vzc1Byb2ZpbGU6IHtcbiAgICAgICAgICBlbmFibGVQcml2YXRlQ2x1c3RlcjogdHJ1ZSxcbiAgICAgICAgICBwcml2YXRlRE5TWm9uZTogXCJzeXN0ZW1cIixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoXG4gICAgICAgIGFrc0NsdXN0ZXIucHJvcHMuYXBpU2VydmVyQWNjZXNzUHJvZmlsZT8uZW5hYmxlUHJpdmF0ZUNsdXN0ZXIsXG4gICAgICApLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgYWR2YW5jZWQgbmV0d29ya2luZyB3aXRoIGN1c3RvbSBWTmV0XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrc0NsdXN0ZXIgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJUZXN0QWtzQ2x1c3RlclwiLCB7XG4gICAgICAgIG5hbWU6IFwidGVzdC1ha3NcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcInRlc3Rha3NcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgICAgdm5ldFN1Ym5ldElEOlxuICAgICAgICAgICAgICBcIi9zdWJzY3JpcHRpb25zL3Rlc3QvcmVzb3VyY2VHcm91cHMvdGVzdC9wcm92aWRlcnMvTWljcm9zb2Z0Lk5ldHdvcmsvdmlydHVhbE5ldHdvcmtzL3Rlc3Qvc3VibmV0cy90ZXN0XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbmV0d29ya1Byb2ZpbGU6IHtcbiAgICAgICAgICBuZXR3b3JrUGx1Z2luOiBcImF6dXJlXCIsXG4gICAgICAgICAgc2VydmljZUNpZHI6IFwiMTAuMC4wLjAvMTZcIixcbiAgICAgICAgICBkbnNTZXJ2aWNlSVA6IFwiMTAuMC4wLjEwXCIsXG4gICAgICAgICAgZG9ja2VyQnJpZGdlQ2lkcjogXCIxNzIuMTcuMC4xLzE2XCIsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMubmV0d29ya1Byb2ZpbGU/Lm5ldHdvcmtQbHVnaW4pLnRvQmUoXCJhenVyZVwiKTtcbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLmFnZW50UG9vbFByb2ZpbGVzWzBdLnZuZXRTdWJuZXRJRCkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBhbGwgYWRkb24gY29uZmlndXJhdGlvbnNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYWtzQ2x1c3RlciA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIlRlc3RBa3NDbHVzdGVyXCIsIHtcbiAgICAgICAgbmFtZTogXCJ0ZXN0LWFrc1wiLFxuICAgICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICBkbnNQcmVmaXg6IFwidGVzdGFrc1wiLFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgY291bnQ6IDMsXG4gICAgICAgICAgICB2bVNpemU6IFwiU3RhbmRhcmRfRDJzX3YzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgYWRkb25Qcm9maWxlczoge1xuICAgICAgICAgIGh0dHBBcHBsaWNhdGlvblJvdXRpbmc6IHsgZW5hYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgIG9tc2FnZW50OiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAgIGxvZ0FuYWx5dGljc1dvcmtzcGFjZVJlc291cmNlSUQ6XG4gICAgICAgICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy90ZXN0L3Jlc291cmNlR3JvdXBzL3Rlc3QvcHJvdmlkZXJzL01pY3Jvc29mdC5PcGVyYXRpb25hbEluc2lnaHRzL3dvcmtzcGFjZXMvdGVzdFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGF6dXJlcG9saWN5OiB7IGVuYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICBhenVyZUtleXZhdWx0U2VjcmV0c1Byb3ZpZGVyOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlnOiB7IGVuYWJsZVNlY3JldFJvdGF0aW9uOiBcInRydWVcIiB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KFxuICAgICAgICBha3NDbHVzdGVyLnByb3BzLmFkZG9uUHJvZmlsZXM/Lmh0dHBBcHBsaWNhdGlvblJvdXRpbmc/LmVuYWJsZWQsXG4gICAgICApLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy5hZGRvblByb2ZpbGVzPy5vbXNhZ2VudD8uZW5hYmxlZCkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnByb3BzLmFkZG9uUHJvZmlsZXM/LmF6dXJlcG9saWN5Py5lbmFibGVkKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIGNvbXBsZXRlIHByb2R1Y3Rpb24tcmVhZHkgY29uZmlndXJhdGlvblwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBha3NDbHVzdGVyID0gbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInByb2QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGFwaVZlcnNpb246IFwiMjAyNS0wNy0wMVwiLFxuICAgICAgICBkbnNQcmVmaXg6IFwicHJvZGFrc1wiLFxuICAgICAgICBrdWJlcm5ldGVzVmVyc2lvbjogXCIxLjI4LjNcIixcbiAgICAgICAgc2t1OiB7IG5hbWU6IFwiU3RhbmRhcmRcIiwgdGllcjogXCJTdGFuZGFyZFwiIH0sXG4gICAgICAgIGlkZW50aXR5OiB7IHR5cGU6IFwiU3lzdGVtQXNzaWduZWRcIiB9LFxuICAgICAgICBhZ2VudFBvb2xQcm9maWxlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwic3lzdGVtXCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9ENHNfdjNcIixcbiAgICAgICAgICAgIG1vZGU6IFwiU3lzdGVtXCIsXG4gICAgICAgICAgICBlbmFibGVBdXRvU2NhbGluZzogdHJ1ZSxcbiAgICAgICAgICAgIG1pbkNvdW50OiAzLFxuICAgICAgICAgICAgbWF4Q291bnQ6IDEwLFxuICAgICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZXM6IFtcIjFcIiwgXCIyXCIsIFwiM1wiXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBuZXR3b3JrUHJvZmlsZToge1xuICAgICAgICAgIG5ldHdvcmtQbHVnaW46IFwiYXp1cmVcIixcbiAgICAgICAgICBuZXR3b3JrUG9saWN5OiBcImNhbGljb1wiLFxuICAgICAgICAgIHNlcnZpY2VDaWRyOiBcIjEwLjAuMC4wLzE2XCIsXG4gICAgICAgICAgZG5zU2VydmljZUlQOiBcIjEwLjAuMC4xMFwiLFxuICAgICAgICAgIGxvYWRCYWxhbmNlclNrdTogXCJzdGFuZGFyZFwiLFxuICAgICAgICB9LFxuICAgICAgICBlbmFibGVSQkFDOiB0cnVlLFxuICAgICAgICBhYWRQcm9maWxlOiB7XG4gICAgICAgICAgbWFuYWdlZDogdHJ1ZSxcbiAgICAgICAgICBlbmFibGVBenVyZVJCQUM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGFwaVNlcnZlckFjY2Vzc1Byb2ZpbGU6IHtcbiAgICAgICAgICBlbmFibGVQcml2YXRlQ2x1c3RlcjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkb25Qcm9maWxlczoge1xuICAgICAgICAgIG9tc2FnZW50OiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAgIGxvZ0FuYWx5dGljc1dvcmtzcGFjZVJlc291cmNlSUQ6XG4gICAgICAgICAgICAgICAgXCIvc3Vic2NyaXB0aW9ucy90ZXN0L3Jlc291cmNlR3JvdXBzL3Rlc3QvcHJvdmlkZXJzL01pY3Jvc29mdC5PcGVyYXRpb25hbEluc2lnaHRzL3dvcmtzcGFjZXMvdGVzdFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgZW52aXJvbm1lbnQ6IFwicHJvZHVjdGlvblwiLFxuICAgICAgICAgIGNvc3Q6IFwiY2VudGVyMVwiLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChha3NDbHVzdGVyLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjUtMDctMDFcIik7XG4gICAgICBleHBlY3QoYWtzQ2x1c3Rlci5wcm9wcy5lbmFibGVSQkFDKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KGFrc0NsdXN0ZXIucHJvcHMuYWdlbnRQb29sUHJvZmlsZXNbMF0uZW5hYmxlQXV0b1NjYWxpbmcpLnRvQmUoXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIkNESyBUZXJyYWZvcm0gSW50ZWdyYXRpb25cIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHN5bnRoZXNpemUgdG8gdmFsaWQgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb25cIiwgKCkgPT4ge1xuICAgICAgbmV3IEFrc0NsdXN0ZXIoc3RhY2ssIFwiVGVzdEFrc0NsdXN0ZXJcIiwge1xuICAgICAgICBuYW1lOiBcInRlc3QtYWtzXCIsXG4gICAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICAgIGRuc1ByZWZpeDogXCJ0ZXN0YWtzXCIsXG4gICAgICAgIGFnZW50UG9vbFByb2ZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICBjb3VudDogMyxcbiAgICAgICAgICAgIHZtU2l6ZTogXCJTdGFuZGFyZF9EMnNfdjNcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBleHBlY3Qoc3ludGhlc2l6ZWQpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIGNvbnN0IHN0YWNrQ29uZmlnID0gSlNPTi5wYXJzZShzeW50aGVzaXplZCk7XG4gICAgICBleHBlY3Qoc3RhY2tDb25maWcucmVzb3VyY2UpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgbXVsdGlwbGUgQUtTIGNsdXN0ZXJzIGluIHRoZSBzYW1lIHN0YWNrXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFrczEgPSBuZXcgQWtzQ2x1c3RlcihzdGFjaywgXCJBa3NDbHVzdGVyMVwiLCB7XG4gICAgICAgIG5hbWU6IFwiYWtzLTFcIixcbiAgICAgICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gICAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgICAgZG5zUHJlZml4OiBcImFrczFcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWtzMiA9IG5ldyBBa3NDbHVzdGVyKHN0YWNrLCBcIkFrc0NsdXN0ZXIyXCIsIHtcbiAgICAgICAgbmFtZTogXCJha3MtMlwiLFxuICAgICAgICBsb2NhdGlvbjogXCJ3ZXN0dXNcIixcbiAgICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgICBhcGlWZXJzaW9uOiBcIjIwMjUtMDctMDFcIixcbiAgICAgICAgZG5zUHJlZml4OiBcImFrczJcIixcbiAgICAgICAgYWdlbnRQb29sUHJvZmlsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGNvdW50OiAzLFxuICAgICAgICAgICAgdm1TaXplOiBcIlN0YW5kYXJkX0Qyc192M1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGFrczEucmVzb2x2ZWRBcGlWZXJzaW9uKS50b0JlKFwiMjAyNS0wNy0wMVwiKTtcbiAgICAgIGV4cGVjdChha3MyLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjUtMDctMDFcIik7XG5cbiAgICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBleHBlY3Qoc3ludGhlc2l6ZWQpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=