@decaf-ts/for-fabric 0.12.0 → 0.12.2

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 (503) hide show
  1. package/dist/for-fabric.cjs +3797 -2
  2. package/dist/for-fabric.js +3901 -2
  3. package/lib/cjs/bin/cli.cjs +2 -2
  4. package/lib/cjs/cli-module.cjs +28 -3
  5. package/lib/cjs/cli-utils.cjs +2 -2
  6. package/lib/cjs/client/FabricClientAdapter.cjs +2 -2
  7. package/lib/cjs/client/FabricClientDispatch.cjs +2 -2
  8. package/lib/cjs/client/FabricClientPaginator.cjs +2 -2
  9. package/lib/cjs/client/FabricClientRepository.cjs +2 -2
  10. package/lib/cjs/client/FabricClientStatement.cjs +2 -2
  11. package/lib/cjs/client/collections/generation.cjs +2 -2
  12. package/lib/cjs/client/collections/index.cjs +2 -2
  13. package/lib/cjs/client/constants.cjs +2 -2
  14. package/lib/cjs/client/crypto.cjs +2 -2
  15. package/lib/cjs/client/erc20/FabricERC20ClientRepository.cjs +2 -2
  16. package/lib/cjs/client/erc20/index.cjs +2 -2
  17. package/lib/cjs/client/fabric-fs.cjs +2 -2
  18. package/lib/cjs/client/fabric-hsm.cjs +2 -2
  19. package/lib/cjs/client/ids/id-extraction.cjs +2 -2
  20. package/lib/cjs/client/ids/index.cjs +2 -2
  21. package/lib/cjs/client/index.cjs +2 -2
  22. package/lib/cjs/client/indexes/generation.cjs +2 -2
  23. package/lib/cjs/client/indexes/index.cjs +2 -2
  24. package/lib/cjs/client/logging.cjs +2 -2
  25. package/lib/cjs/client/services/FabricEnrollmentService.cjs +2 -2
  26. package/lib/cjs/client/services/FabricIdentityService.cjs +2 -2
  27. package/lib/cjs/client/services/RegistrationRequestBuilder.cjs +2 -2
  28. package/lib/cjs/client/services/constants.cjs +2 -2
  29. package/lib/cjs/client/services/index.cjs +2 -2
  30. package/lib/cjs/client/types.cjs +2 -2
  31. package/lib/cjs/client/utils.cjs +2 -2
  32. package/lib/cjs/contract/Address.cjs +2 -2
  33. package/lib/cjs/contract/AddressContract.cjs +2 -2
  34. package/lib/cjs/contract/AuditContract.cjs +2 -2
  35. package/lib/cjs/contract/BatchContract.cjs +2 -2
  36. package/lib/cjs/contract/MarketContract.cjs +2 -2
  37. package/lib/cjs/contract/OtherAuditContract.cjs +2 -2
  38. package/lib/cjs/contract/OtherBatchContract.cjs +2 -2
  39. package/lib/cjs/contract/OtherMarketContract.cjs +2 -2
  40. package/lib/cjs/contract/OtherProductContract.cjs +2 -2
  41. package/lib/cjs/contract/OtherProductImageContract.cjs +2 -2
  42. package/lib/cjs/contract/OtherProductSharedContract.cjs +2 -2
  43. package/lib/cjs/contract/OtherProductStrengthContract.cjs +2 -2
  44. package/lib/cjs/contract/Product.cjs +2 -2
  45. package/lib/cjs/contract/ProductContract.cjs +2 -2
  46. package/lib/cjs/contract/ProductStrengthContract.cjs +2 -2
  47. package/lib/cjs/contract/SegregatedPrivateDocumentContract.cjs +2 -2
  48. package/lib/cjs/contract/SegregatedSharedDocumentContract.cjs +2 -2
  49. package/lib/cjs/contract/User.cjs +2 -2
  50. package/lib/cjs/contract/UserContract.cjs +2 -2
  51. package/lib/cjs/contract/index.cjs +2 -2
  52. package/lib/cjs/contract/logging-context.cjs +2 -2
  53. package/lib/cjs/contract/models/Audit.cjs +2 -2
  54. package/lib/cjs/contract/models/BaseIdentifiedModel.cjs +2 -2
  55. package/lib/cjs/contract/models/BaseModel.cjs +2 -2
  56. package/lib/cjs/contract/models/Batch.cjs +2 -2
  57. package/lib/cjs/contract/models/GtinOwner.cjs +2 -2
  58. package/lib/cjs/contract/models/History.cjs +2 -2
  59. package/lib/cjs/contract/models/Leaflet.cjs +2 -2
  60. package/lib/cjs/contract/models/LeafletFile.cjs +2 -2
  61. package/lib/cjs/contract/models/Market.cjs +2 -2
  62. package/lib/cjs/contract/models/OtherAudit.cjs +2 -2
  63. package/lib/cjs/contract/models/OtherBatchShared.cjs +2 -2
  64. package/lib/cjs/contract/models/OtherLeaflet.cjs +2 -2
  65. package/lib/cjs/contract/models/OtherLeafletFile.cjs +2 -2
  66. package/lib/cjs/contract/models/OtherMarket.cjs +2 -2
  67. package/lib/cjs/contract/models/OtherProduct.cjs +2 -2
  68. package/lib/cjs/contract/models/OtherProductImage.cjs +2 -2
  69. package/lib/cjs/contract/models/OtherProductShared.cjs +2 -2
  70. package/lib/cjs/contract/models/OtherProductStrength.cjs +2 -2
  71. package/lib/cjs/contract/models/Product.cjs +2 -2
  72. package/lib/cjs/contract/models/ProductStrength.cjs +2 -2
  73. package/lib/cjs/contract/models/SegregatedDocument.cjs +2 -2
  74. package/lib/cjs/contract/models/constants.cjs +2 -2
  75. package/lib/cjs/contract/models/decorators-private.cjs +2 -2
  76. package/lib/cjs/contract/models/decorators.cjs +2 -2
  77. package/lib/cjs/contract/models/gtin.cjs +2 -2
  78. package/lib/cjs/contract/models/history-dec.cjs +2 -2
  79. package/lib/cjs/contracts/ContractAdapter.cjs +2 -2
  80. package/lib/cjs/contracts/ContractContext.cjs +2 -2
  81. package/lib/cjs/contracts/FabricContractDispatch.cjs +2 -2
  82. package/lib/cjs/contracts/FabricContractPaginator.cjs +2 -2
  83. package/lib/cjs/contracts/FabricContractRepository.cjs +2 -2
  84. package/lib/cjs/contracts/FabricContractRepositoryObservableHandler.cjs +2 -2
  85. package/lib/cjs/contracts/FabricContractSequence.cjs +2 -2
  86. package/lib/cjs/contracts/FabricContractStatement.cjs +2 -2
  87. package/lib/cjs/contracts/MigrationContract.cjs +2 -2
  88. package/lib/cjs/contracts/PrivateSequence.cjs +2 -2
  89. package/lib/cjs/contracts/auth/decorators.cjs +2 -2
  90. package/lib/cjs/contracts/auth/index.cjs +2 -2
  91. package/lib/cjs/contracts/crud/crud-contract.cjs +2 -2
  92. package/lib/cjs/contracts/crud/index.cjs +2 -2
  93. package/lib/cjs/contracts/crud/serialized-crud-contract.cjs +2 -2
  94. package/lib/cjs/contracts/erc20/erc20contract.cjs +2 -2
  95. package/lib/cjs/contracts/erc20/index.cjs +2 -2
  96. package/lib/cjs/contracts/erc20/models.cjs +2 -2
  97. package/lib/cjs/contracts/index.cjs +2 -2
  98. package/lib/cjs/contracts/logging.cjs +2 -2
  99. package/lib/cjs/contracts/overrides.cjs +2 -2
  100. package/lib/cjs/contracts/types.cjs +2 -2
  101. package/lib/cjs/contracts/uuid.cjs +2 -2
  102. package/lib/cjs/index.cjs +2 -2
  103. package/lib/cjs/shared/ClientSerializer.cjs +2 -2
  104. package/lib/cjs/shared/DeterministicSerializer.cjs +2 -2
  105. package/lib/cjs/shared/SimpleDeterministicSerializer.cjs +2 -2
  106. package/lib/cjs/shared/constants.cjs +2 -2
  107. package/lib/cjs/shared/decorators.cjs +2 -2
  108. package/lib/cjs/shared/erc20/erc20-constants.cjs +2 -2
  109. package/lib/cjs/shared/erc20/index.cjs +2 -2
  110. package/lib/cjs/shared/errors.cjs +2 -2
  111. package/lib/cjs/shared/events.cjs +2 -2
  112. package/lib/cjs/shared/fabric-types.cjs +2 -2
  113. package/lib/cjs/shared/index.cjs +2 -2
  114. package/lib/cjs/shared/interfaces/Checkable.cjs +2 -2
  115. package/lib/cjs/shared/interfaces/index.cjs +2 -2
  116. package/lib/cjs/shared/math.cjs +2 -2
  117. package/lib/cjs/shared/model/FabricBaseModel.cjs +2 -2
  118. package/lib/cjs/shared/model/FabricIdentifiedBaseModel.cjs +2 -2
  119. package/lib/cjs/shared/model/Identity.cjs +2 -2
  120. package/lib/cjs/shared/model/IdentityCredentials.cjs +2 -2
  121. package/lib/cjs/shared/model/index.cjs +2 -2
  122. package/lib/cjs/shared/overrides/Model.cjs +2 -2
  123. package/lib/cjs/shared/overrides/index.cjs +2 -2
  124. package/lib/cjs/shared/overrides/overrides.cjs +2 -2
  125. package/lib/cjs/shared/types.cjs +2 -2
  126. package/lib/cjs/version.cjs +3 -3
  127. package/lib/esm/bin/cli.js +1 -1
  128. package/lib/esm/cli-module.js +27 -2
  129. package/lib/esm/cli-utils.js +1 -1
  130. package/lib/esm/client/FabricClientAdapter.js +1 -1
  131. package/lib/esm/client/FabricClientDispatch.js +1 -1
  132. package/lib/esm/client/FabricClientPaginator.js +1 -1
  133. package/lib/esm/client/FabricClientRepository.js +1 -1
  134. package/lib/esm/client/FabricClientStatement.js +1 -1
  135. package/lib/esm/client/collections/generation.js +1 -1
  136. package/lib/esm/client/collections/index.js +1 -1
  137. package/lib/esm/client/constants.js +1 -1
  138. package/lib/esm/client/crypto.js +1 -1
  139. package/lib/esm/client/erc20/FabricERC20ClientRepository.js +1 -1
  140. package/lib/esm/client/erc20/index.js +1 -1
  141. package/lib/esm/client/fabric-fs.js +1 -1
  142. package/lib/esm/client/fabric-hsm.js +1 -1
  143. package/lib/esm/client/ids/id-extraction.js +1 -1
  144. package/lib/esm/client/ids/index.js +1 -1
  145. package/lib/esm/client/index.js +1 -1
  146. package/lib/esm/client/indexes/generation.js +1 -1
  147. package/lib/esm/client/indexes/index.js +1 -1
  148. package/lib/esm/client/logging.js +1 -1
  149. package/lib/esm/client/services/FabricEnrollmentService.js +1 -1
  150. package/lib/esm/client/services/FabricIdentityService.js +1 -1
  151. package/lib/esm/client/services/RegistrationRequestBuilder.js +1 -1
  152. package/lib/esm/client/services/constants.js +1 -1
  153. package/lib/esm/client/services/index.js +1 -1
  154. package/lib/esm/client/types.js +1 -1
  155. package/lib/esm/client/utils.js +1 -1
  156. package/lib/esm/contract/Address.js +1 -1
  157. package/lib/esm/contract/AddressContract.js +1 -1
  158. package/lib/esm/contract/AuditContract.js +1 -1
  159. package/lib/esm/contract/BatchContract.js +1 -1
  160. package/lib/esm/contract/MarketContract.js +1 -1
  161. package/lib/esm/contract/OtherAuditContract.js +1 -1
  162. package/lib/esm/contract/OtherBatchContract.js +1 -1
  163. package/lib/esm/contract/OtherMarketContract.js +1 -1
  164. package/lib/esm/contract/OtherProductContract.js +1 -1
  165. package/lib/esm/contract/OtherProductImageContract.js +1 -1
  166. package/lib/esm/contract/OtherProductSharedContract.js +1 -1
  167. package/lib/esm/contract/OtherProductStrengthContract.js +1 -1
  168. package/lib/esm/contract/Product.js +1 -1
  169. package/lib/esm/contract/ProductContract.js +1 -1
  170. package/lib/esm/contract/ProductStrengthContract.js +1 -1
  171. package/lib/esm/contract/SegregatedPrivateDocumentContract.js +1 -1
  172. package/lib/esm/contract/SegregatedSharedDocumentContract.js +1 -1
  173. package/lib/esm/contract/User.js +1 -1
  174. package/lib/esm/contract/UserContract.js +1 -1
  175. package/lib/esm/contract/index.js +1 -1
  176. package/lib/esm/contract/logging-context.js +1 -1
  177. package/lib/esm/contract/models/Audit.js +1 -1
  178. package/lib/esm/contract/models/BaseIdentifiedModel.js +1 -1
  179. package/lib/esm/contract/models/BaseModel.js +1 -1
  180. package/lib/esm/contract/models/Batch.js +1 -1
  181. package/lib/esm/contract/models/GtinOwner.js +1 -1
  182. package/lib/esm/contract/models/History.js +1 -1
  183. package/lib/esm/contract/models/Leaflet.js +1 -1
  184. package/lib/esm/contract/models/LeafletFile.js +1 -1
  185. package/lib/esm/contract/models/Market.js +1 -1
  186. package/lib/esm/contract/models/OtherAudit.js +1 -1
  187. package/lib/esm/contract/models/OtherBatchShared.js +1 -1
  188. package/lib/esm/contract/models/OtherLeaflet.js +1 -1
  189. package/lib/esm/contract/models/OtherLeafletFile.js +1 -1
  190. package/lib/esm/contract/models/OtherMarket.js +1 -1
  191. package/lib/esm/contract/models/OtherProduct.js +1 -1
  192. package/lib/esm/contract/models/OtherProductImage.js +1 -1
  193. package/lib/esm/contract/models/OtherProductShared.js +1 -1
  194. package/lib/esm/contract/models/OtherProductStrength.js +1 -1
  195. package/lib/esm/contract/models/Product.js +1 -1
  196. package/lib/esm/contract/models/ProductStrength.js +1 -1
  197. package/lib/esm/contract/models/SegregatedDocument.js +1 -1
  198. package/lib/esm/contract/models/constants.js +1 -1
  199. package/lib/esm/contract/models/decorators-private.js +1 -1
  200. package/lib/esm/contract/models/decorators.js +1 -1
  201. package/lib/esm/contract/models/gtin.js +1 -1
  202. package/lib/esm/contract/models/history-dec.js +1 -1
  203. package/lib/esm/contracts/ContractAdapter.js +1 -1
  204. package/lib/esm/contracts/ContractContext.js +1 -1
  205. package/lib/esm/contracts/FabricContractDispatch.js +1 -1
  206. package/lib/esm/contracts/FabricContractPaginator.js +1 -1
  207. package/lib/esm/contracts/FabricContractRepository.js +1 -1
  208. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +1 -1
  209. package/lib/esm/contracts/FabricContractSequence.js +1 -1
  210. package/lib/esm/contracts/FabricContractStatement.js +1 -1
  211. package/lib/esm/contracts/MigrationContract.js +1 -1
  212. package/lib/esm/contracts/PrivateSequence.js +1 -1
  213. package/lib/esm/contracts/auth/decorators.js +1 -1
  214. package/lib/esm/contracts/auth/index.js +1 -1
  215. package/lib/esm/contracts/crud/crud-contract.js +1 -1
  216. package/lib/esm/contracts/crud/index.js +1 -1
  217. package/lib/esm/contracts/crud/serialized-crud-contract.js +1 -1
  218. package/lib/esm/contracts/erc20/erc20contract.js +1 -1
  219. package/lib/esm/contracts/erc20/index.js +1 -1
  220. package/lib/esm/contracts/erc20/models.js +1 -1
  221. package/lib/esm/contracts/index.js +1 -1
  222. package/lib/esm/contracts/logging.js +1 -1
  223. package/lib/esm/contracts/overrides.js +1 -1
  224. package/lib/esm/contracts/types.js +1 -1
  225. package/lib/esm/contracts/uuid.js +1 -1
  226. package/lib/esm/index.js +1 -1
  227. package/lib/esm/shared/ClientSerializer.js +1 -1
  228. package/lib/esm/shared/DeterministicSerializer.js +1 -1
  229. package/lib/esm/shared/SimpleDeterministicSerializer.js +1 -1
  230. package/lib/esm/shared/constants.js +1 -1
  231. package/lib/esm/shared/decorators.js +1 -1
  232. package/lib/esm/shared/erc20/erc20-constants.js +1 -1
  233. package/lib/esm/shared/erc20/index.js +1 -1
  234. package/lib/esm/shared/errors.js +1 -1
  235. package/lib/esm/shared/events.js +1 -1
  236. package/lib/esm/shared/fabric-types.js +1 -1
  237. package/lib/esm/shared/index.js +1 -1
  238. package/lib/esm/shared/interfaces/Checkable.js +1 -1
  239. package/lib/esm/shared/interfaces/index.js +1 -1
  240. package/lib/esm/shared/math.js +1 -1
  241. package/lib/esm/shared/model/FabricBaseModel.js +1 -1
  242. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js +1 -1
  243. package/lib/esm/shared/model/Identity.js +1 -1
  244. package/lib/esm/shared/model/IdentityCredentials.js +1 -1
  245. package/lib/esm/shared/model/index.js +1 -1
  246. package/lib/esm/shared/overrides/Model.js +1 -1
  247. package/lib/esm/shared/overrides/index.js +1 -1
  248. package/lib/esm/shared/overrides/overrides.js +1 -1
  249. package/lib/esm/shared/types.js +1 -1
  250. package/lib/esm/version.js +2 -2
  251. package/lib/types/version.d.cts +1 -1
  252. package/lib/types/version.d.mts +1 -1
  253. package/package.json +7 -7
  254. package/dist/for-fabric.cjs.map +0 -1
  255. package/dist/for-fabric.js.map +0 -1
  256. package/lib/cjs/bin/cli.cjs.map +0 -1
  257. package/lib/cjs/cli-module.cjs.map +0 -1
  258. package/lib/cjs/cli-utils.cjs.map +0 -1
  259. package/lib/cjs/client/FabricClientAdapter.cjs.map +0 -1
  260. package/lib/cjs/client/FabricClientDispatch.cjs.map +0 -1
  261. package/lib/cjs/client/FabricClientPaginator.cjs.map +0 -1
  262. package/lib/cjs/client/FabricClientRepository.cjs.map +0 -1
  263. package/lib/cjs/client/FabricClientStatement.cjs.map +0 -1
  264. package/lib/cjs/client/collections/generation.cjs.map +0 -1
  265. package/lib/cjs/client/collections/index.cjs.map +0 -1
  266. package/lib/cjs/client/constants.cjs.map +0 -1
  267. package/lib/cjs/client/crypto.cjs.map +0 -1
  268. package/lib/cjs/client/erc20/FabricERC20ClientRepository.cjs.map +0 -1
  269. package/lib/cjs/client/erc20/index.cjs.map +0 -1
  270. package/lib/cjs/client/fabric-fs.cjs.map +0 -1
  271. package/lib/cjs/client/fabric-hsm.cjs.map +0 -1
  272. package/lib/cjs/client/ids/id-extraction.cjs.map +0 -1
  273. package/lib/cjs/client/ids/index.cjs.map +0 -1
  274. package/lib/cjs/client/index.cjs.map +0 -1
  275. package/lib/cjs/client/indexes/generation.cjs.map +0 -1
  276. package/lib/cjs/client/indexes/index.cjs.map +0 -1
  277. package/lib/cjs/client/logging.cjs.map +0 -1
  278. package/lib/cjs/client/services/FabricEnrollmentService.cjs.map +0 -1
  279. package/lib/cjs/client/services/FabricIdentityService.cjs.map +0 -1
  280. package/lib/cjs/client/services/RegistrationRequestBuilder.cjs.map +0 -1
  281. package/lib/cjs/client/services/constants.cjs.map +0 -1
  282. package/lib/cjs/client/services/index.cjs.map +0 -1
  283. package/lib/cjs/client/types.cjs.map +0 -1
  284. package/lib/cjs/client/utils.cjs.map +0 -1
  285. package/lib/cjs/contract/Address.cjs.map +0 -1
  286. package/lib/cjs/contract/AddressContract.cjs.map +0 -1
  287. package/lib/cjs/contract/AuditContract.cjs.map +0 -1
  288. package/lib/cjs/contract/BatchContract.cjs.map +0 -1
  289. package/lib/cjs/contract/MarketContract.cjs.map +0 -1
  290. package/lib/cjs/contract/OtherAuditContract.cjs.map +0 -1
  291. package/lib/cjs/contract/OtherBatchContract.cjs.map +0 -1
  292. package/lib/cjs/contract/OtherMarketContract.cjs.map +0 -1
  293. package/lib/cjs/contract/OtherProductContract.cjs.map +0 -1
  294. package/lib/cjs/contract/OtherProductImageContract.cjs.map +0 -1
  295. package/lib/cjs/contract/OtherProductSharedContract.cjs.map +0 -1
  296. package/lib/cjs/contract/OtherProductStrengthContract.cjs.map +0 -1
  297. package/lib/cjs/contract/Product.cjs.map +0 -1
  298. package/lib/cjs/contract/ProductContract.cjs.map +0 -1
  299. package/lib/cjs/contract/ProductStrengthContract.cjs.map +0 -1
  300. package/lib/cjs/contract/SegregatedPrivateDocumentContract.cjs.map +0 -1
  301. package/lib/cjs/contract/SegregatedSharedDocumentContract.cjs.map +0 -1
  302. package/lib/cjs/contract/User.cjs.map +0 -1
  303. package/lib/cjs/contract/UserContract.cjs.map +0 -1
  304. package/lib/cjs/contract/index.cjs.map +0 -1
  305. package/lib/cjs/contract/logging-context.cjs.map +0 -1
  306. package/lib/cjs/contract/models/Audit.cjs.map +0 -1
  307. package/lib/cjs/contract/models/BaseIdentifiedModel.cjs.map +0 -1
  308. package/lib/cjs/contract/models/BaseModel.cjs.map +0 -1
  309. package/lib/cjs/contract/models/Batch.cjs.map +0 -1
  310. package/lib/cjs/contract/models/GtinOwner.cjs.map +0 -1
  311. package/lib/cjs/contract/models/History.cjs.map +0 -1
  312. package/lib/cjs/contract/models/Leaflet.cjs.map +0 -1
  313. package/lib/cjs/contract/models/LeafletFile.cjs.map +0 -1
  314. package/lib/cjs/contract/models/Market.cjs.map +0 -1
  315. package/lib/cjs/contract/models/OtherAudit.cjs.map +0 -1
  316. package/lib/cjs/contract/models/OtherBatchShared.cjs.map +0 -1
  317. package/lib/cjs/contract/models/OtherLeaflet.cjs.map +0 -1
  318. package/lib/cjs/contract/models/OtherLeafletFile.cjs.map +0 -1
  319. package/lib/cjs/contract/models/OtherMarket.cjs.map +0 -1
  320. package/lib/cjs/contract/models/OtherProduct.cjs.map +0 -1
  321. package/lib/cjs/contract/models/OtherProductImage.cjs.map +0 -1
  322. package/lib/cjs/contract/models/OtherProductShared.cjs.map +0 -1
  323. package/lib/cjs/contract/models/OtherProductStrength.cjs.map +0 -1
  324. package/lib/cjs/contract/models/Product.cjs.map +0 -1
  325. package/lib/cjs/contract/models/ProductStrength.cjs.map +0 -1
  326. package/lib/cjs/contract/models/SegregatedDocument.cjs.map +0 -1
  327. package/lib/cjs/contract/models/constants.cjs.map +0 -1
  328. package/lib/cjs/contract/models/decorators-private.cjs.map +0 -1
  329. package/lib/cjs/contract/models/decorators.cjs.map +0 -1
  330. package/lib/cjs/contract/models/gtin.cjs.map +0 -1
  331. package/lib/cjs/contract/models/history-dec.cjs.map +0 -1
  332. package/lib/cjs/contracts/ContractAdapter.cjs.map +0 -1
  333. package/lib/cjs/contracts/ContractContext.cjs.map +0 -1
  334. package/lib/cjs/contracts/FabricContractDispatch.cjs.map +0 -1
  335. package/lib/cjs/contracts/FabricContractPaginator.cjs.map +0 -1
  336. package/lib/cjs/contracts/FabricContractRepository.cjs.map +0 -1
  337. package/lib/cjs/contracts/FabricContractRepositoryObservableHandler.cjs.map +0 -1
  338. package/lib/cjs/contracts/FabricContractSequence.cjs.map +0 -1
  339. package/lib/cjs/contracts/FabricContractStatement.cjs.map +0 -1
  340. package/lib/cjs/contracts/MigrationContract.cjs.map +0 -1
  341. package/lib/cjs/contracts/PrivateSequence.cjs.map +0 -1
  342. package/lib/cjs/contracts/auth/decorators.cjs.map +0 -1
  343. package/lib/cjs/contracts/auth/index.cjs.map +0 -1
  344. package/lib/cjs/contracts/crud/crud-contract.cjs.map +0 -1
  345. package/lib/cjs/contracts/crud/index.cjs.map +0 -1
  346. package/lib/cjs/contracts/crud/serialized-crud-contract.cjs.map +0 -1
  347. package/lib/cjs/contracts/erc20/erc20contract.cjs.map +0 -1
  348. package/lib/cjs/contracts/erc20/index.cjs.map +0 -1
  349. package/lib/cjs/contracts/erc20/models.cjs.map +0 -1
  350. package/lib/cjs/contracts/index.cjs.map +0 -1
  351. package/lib/cjs/contracts/logging.cjs.map +0 -1
  352. package/lib/cjs/contracts/overrides.cjs.map +0 -1
  353. package/lib/cjs/contracts/types.cjs.map +0 -1
  354. package/lib/cjs/contracts/uuid.cjs.map +0 -1
  355. package/lib/cjs/index.cjs.map +0 -1
  356. package/lib/cjs/shared/ClientSerializer.cjs.map +0 -1
  357. package/lib/cjs/shared/DeterministicSerializer.cjs.map +0 -1
  358. package/lib/cjs/shared/SimpleDeterministicSerializer.cjs.map +0 -1
  359. package/lib/cjs/shared/constants.cjs.map +0 -1
  360. package/lib/cjs/shared/decorators.cjs.map +0 -1
  361. package/lib/cjs/shared/erc20/erc20-constants.cjs.map +0 -1
  362. package/lib/cjs/shared/erc20/index.cjs.map +0 -1
  363. package/lib/cjs/shared/errors.cjs.map +0 -1
  364. package/lib/cjs/shared/events.cjs.map +0 -1
  365. package/lib/cjs/shared/fabric-types.cjs.map +0 -1
  366. package/lib/cjs/shared/index.cjs.map +0 -1
  367. package/lib/cjs/shared/interfaces/Checkable.cjs.map +0 -1
  368. package/lib/cjs/shared/interfaces/index.cjs.map +0 -1
  369. package/lib/cjs/shared/math.cjs.map +0 -1
  370. package/lib/cjs/shared/model/FabricBaseModel.cjs.map +0 -1
  371. package/lib/cjs/shared/model/FabricIdentifiedBaseModel.cjs.map +0 -1
  372. package/lib/cjs/shared/model/Identity.cjs.map +0 -1
  373. package/lib/cjs/shared/model/IdentityCredentials.cjs.map +0 -1
  374. package/lib/cjs/shared/model/index.cjs.map +0 -1
  375. package/lib/cjs/shared/overrides/Model.cjs.map +0 -1
  376. package/lib/cjs/shared/overrides/index.cjs.map +0 -1
  377. package/lib/cjs/shared/overrides/overrides.cjs.map +0 -1
  378. package/lib/cjs/shared/types.cjs.map +0 -1
  379. package/lib/cjs/version.cjs.map +0 -1
  380. package/lib/esm/bin/cli.js.map +0 -1
  381. package/lib/esm/cli-module.js.map +0 -1
  382. package/lib/esm/cli-utils.js.map +0 -1
  383. package/lib/esm/client/FabricClientAdapter.js.map +0 -1
  384. package/lib/esm/client/FabricClientDispatch.js.map +0 -1
  385. package/lib/esm/client/FabricClientPaginator.js.map +0 -1
  386. package/lib/esm/client/FabricClientRepository.js.map +0 -1
  387. package/lib/esm/client/FabricClientStatement.js.map +0 -1
  388. package/lib/esm/client/collections/generation.js.map +0 -1
  389. package/lib/esm/client/collections/index.js.map +0 -1
  390. package/lib/esm/client/constants.js.map +0 -1
  391. package/lib/esm/client/crypto.js.map +0 -1
  392. package/lib/esm/client/erc20/FabricERC20ClientRepository.js.map +0 -1
  393. package/lib/esm/client/erc20/index.js.map +0 -1
  394. package/lib/esm/client/fabric-fs.js.map +0 -1
  395. package/lib/esm/client/fabric-hsm.js.map +0 -1
  396. package/lib/esm/client/ids/id-extraction.js.map +0 -1
  397. package/lib/esm/client/ids/index.js.map +0 -1
  398. package/lib/esm/client/index.js.map +0 -1
  399. package/lib/esm/client/indexes/generation.js.map +0 -1
  400. package/lib/esm/client/indexes/index.js.map +0 -1
  401. package/lib/esm/client/logging.js.map +0 -1
  402. package/lib/esm/client/services/FabricEnrollmentService.js.map +0 -1
  403. package/lib/esm/client/services/FabricIdentityService.js.map +0 -1
  404. package/lib/esm/client/services/RegistrationRequestBuilder.js.map +0 -1
  405. package/lib/esm/client/services/constants.js.map +0 -1
  406. package/lib/esm/client/services/index.js.map +0 -1
  407. package/lib/esm/client/types.js.map +0 -1
  408. package/lib/esm/client/utils.js.map +0 -1
  409. package/lib/esm/contract/Address.js.map +0 -1
  410. package/lib/esm/contract/AddressContract.js.map +0 -1
  411. package/lib/esm/contract/AuditContract.js.map +0 -1
  412. package/lib/esm/contract/BatchContract.js.map +0 -1
  413. package/lib/esm/contract/MarketContract.js.map +0 -1
  414. package/lib/esm/contract/OtherAuditContract.js.map +0 -1
  415. package/lib/esm/contract/OtherBatchContract.js.map +0 -1
  416. package/lib/esm/contract/OtherMarketContract.js.map +0 -1
  417. package/lib/esm/contract/OtherProductContract.js.map +0 -1
  418. package/lib/esm/contract/OtherProductImageContract.js.map +0 -1
  419. package/lib/esm/contract/OtherProductSharedContract.js.map +0 -1
  420. package/lib/esm/contract/OtherProductStrengthContract.js.map +0 -1
  421. package/lib/esm/contract/Product.js.map +0 -1
  422. package/lib/esm/contract/ProductContract.js.map +0 -1
  423. package/lib/esm/contract/ProductStrengthContract.js.map +0 -1
  424. package/lib/esm/contract/SegregatedPrivateDocumentContract.js.map +0 -1
  425. package/lib/esm/contract/SegregatedSharedDocumentContract.js.map +0 -1
  426. package/lib/esm/contract/User.js.map +0 -1
  427. package/lib/esm/contract/UserContract.js.map +0 -1
  428. package/lib/esm/contract/index.js.map +0 -1
  429. package/lib/esm/contract/logging-context.js.map +0 -1
  430. package/lib/esm/contract/models/Audit.js.map +0 -1
  431. package/lib/esm/contract/models/BaseIdentifiedModel.js.map +0 -1
  432. package/lib/esm/contract/models/BaseModel.js.map +0 -1
  433. package/lib/esm/contract/models/Batch.js.map +0 -1
  434. package/lib/esm/contract/models/GtinOwner.js.map +0 -1
  435. package/lib/esm/contract/models/History.js.map +0 -1
  436. package/lib/esm/contract/models/Leaflet.js.map +0 -1
  437. package/lib/esm/contract/models/LeafletFile.js.map +0 -1
  438. package/lib/esm/contract/models/Market.js.map +0 -1
  439. package/lib/esm/contract/models/OtherAudit.js.map +0 -1
  440. package/lib/esm/contract/models/OtherBatchShared.js.map +0 -1
  441. package/lib/esm/contract/models/OtherLeaflet.js.map +0 -1
  442. package/lib/esm/contract/models/OtherLeafletFile.js.map +0 -1
  443. package/lib/esm/contract/models/OtherMarket.js.map +0 -1
  444. package/lib/esm/contract/models/OtherProduct.js.map +0 -1
  445. package/lib/esm/contract/models/OtherProductImage.js.map +0 -1
  446. package/lib/esm/contract/models/OtherProductShared.js.map +0 -1
  447. package/lib/esm/contract/models/OtherProductStrength.js.map +0 -1
  448. package/lib/esm/contract/models/Product.js.map +0 -1
  449. package/lib/esm/contract/models/ProductStrength.js.map +0 -1
  450. package/lib/esm/contract/models/SegregatedDocument.js.map +0 -1
  451. package/lib/esm/contract/models/constants.js.map +0 -1
  452. package/lib/esm/contract/models/decorators-private.js.map +0 -1
  453. package/lib/esm/contract/models/decorators.js.map +0 -1
  454. package/lib/esm/contract/models/gtin.js.map +0 -1
  455. package/lib/esm/contract/models/history-dec.js.map +0 -1
  456. package/lib/esm/contracts/ContractAdapter.js.map +0 -1
  457. package/lib/esm/contracts/ContractContext.js.map +0 -1
  458. package/lib/esm/contracts/FabricContractDispatch.js.map +0 -1
  459. package/lib/esm/contracts/FabricContractPaginator.js.map +0 -1
  460. package/lib/esm/contracts/FabricContractRepository.js.map +0 -1
  461. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js.map +0 -1
  462. package/lib/esm/contracts/FabricContractSequence.js.map +0 -1
  463. package/lib/esm/contracts/FabricContractStatement.js.map +0 -1
  464. package/lib/esm/contracts/MigrationContract.js.map +0 -1
  465. package/lib/esm/contracts/PrivateSequence.js.map +0 -1
  466. package/lib/esm/contracts/auth/decorators.js.map +0 -1
  467. package/lib/esm/contracts/auth/index.js.map +0 -1
  468. package/lib/esm/contracts/crud/crud-contract.js.map +0 -1
  469. package/lib/esm/contracts/crud/index.js.map +0 -1
  470. package/lib/esm/contracts/crud/serialized-crud-contract.js.map +0 -1
  471. package/lib/esm/contracts/erc20/erc20contract.js.map +0 -1
  472. package/lib/esm/contracts/erc20/index.js.map +0 -1
  473. package/lib/esm/contracts/erc20/models.js.map +0 -1
  474. package/lib/esm/contracts/index.js.map +0 -1
  475. package/lib/esm/contracts/logging.js.map +0 -1
  476. package/lib/esm/contracts/overrides.js.map +0 -1
  477. package/lib/esm/contracts/types.js.map +0 -1
  478. package/lib/esm/contracts/uuid.js.map +0 -1
  479. package/lib/esm/index.js.map +0 -1
  480. package/lib/esm/shared/ClientSerializer.js.map +0 -1
  481. package/lib/esm/shared/DeterministicSerializer.js.map +0 -1
  482. package/lib/esm/shared/SimpleDeterministicSerializer.js.map +0 -1
  483. package/lib/esm/shared/constants.js.map +0 -1
  484. package/lib/esm/shared/decorators.js.map +0 -1
  485. package/lib/esm/shared/erc20/erc20-constants.js.map +0 -1
  486. package/lib/esm/shared/erc20/index.js.map +0 -1
  487. package/lib/esm/shared/errors.js.map +0 -1
  488. package/lib/esm/shared/events.js.map +0 -1
  489. package/lib/esm/shared/fabric-types.js.map +0 -1
  490. package/lib/esm/shared/index.js.map +0 -1
  491. package/lib/esm/shared/interfaces/Checkable.js.map +0 -1
  492. package/lib/esm/shared/interfaces/index.js.map +0 -1
  493. package/lib/esm/shared/math.js.map +0 -1
  494. package/lib/esm/shared/model/FabricBaseModel.js.map +0 -1
  495. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js.map +0 -1
  496. package/lib/esm/shared/model/Identity.js.map +0 -1
  497. package/lib/esm/shared/model/IdentityCredentials.js.map +0 -1
  498. package/lib/esm/shared/model/index.js.map +0 -1
  499. package/lib/esm/shared/overrides/Model.js.map +0 -1
  500. package/lib/esm/shared/overrides/index.js.map +0 -1
  501. package/lib/esm/shared/overrides/overrides.js.map +0 -1
  502. package/lib/esm/shared/types.js.map +0 -1
  503. package/lib/esm/version.js.map +0 -1
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PACKAGE_NAME = exports.VERSION = void 0;
4
4
  const decoration_1 = require("@decaf-ts/decoration");
5
- exports.VERSION = "0.11.0";
5
+ exports.VERSION = "0.12.2";
6
6
  exports.PACKAGE_NAME = "@decaf-ts/for-fabric";
7
7
  decoration_1.Metadata.registerLibrary(exports.PACKAGE_NAME, exports.VERSION);
8
- //# sourceMappingURL=version.js.map
9
- //# sourceMappingURL=version.js.map
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUM7QUFFMUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSBcIiMjUEFDS0FHRSMjXCI7XG5cbk1ldGFkYXRhLnJlZ2lzdGVyTGlicmFyeShQQUNLQUdFX05BTUUsIFZFUlNJT04pO1xuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZlcnNpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWdEO0FBQ25DLFFBQUEsT0FBTyxHQUFHLGFBQWEsQ0FBQztBQUN4QixRQUFBLFlBQVksR0FBRyxhQUFhLENBQUM7QUFDMUMscUJBQVEsQ0FBQyxlQUFlLENBQUMsb0JBQVksRUFBRSxlQUFPLENBQUMsQ0FBQztBQUNoRCwwc0JBQTBzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSBcIiMjUEFDS0FHRSMjXCI7XG5NZXRhZGF0YS5yZWdpc3RlckxpYnJhcnkoUEFDS0FHRV9OQU1FLCBWRVJTSU9OKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRtVnljMmx2Ymk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkyWlhKemFXOXVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFOUJRVThzUlVGQlJTeFJRVUZSTEVWQlFVVXNUVUZCVFN4elFrRkJjMElzUTBGQlF6dEJRVVZvUkN4TlFVRk5MRU5CUVVNc1RVRkJUU3hQUVVGUExFZEJRVWNzWVVGQllTeERRVUZETzBGQlEzSkRMRTFCUVUwc1EwRkJReXhOUVVGTkxGbEJRVmtzUjBGQlJ5eGhRVUZoTEVOQlFVTTdRVUZGTVVNc1VVRkJVU3hEUVVGRExHVkJRV1VzUTBGQlF5eFpRVUZaTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2V5Qk5aWFJoWkdGMFlTQjlJR1p5YjIwZ1hDSkFaR1ZqWVdZdGRITXZaR1ZqYjNKaGRHbHZibHdpTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnVmtWU1UwbFBUaUE5SUZ3aUl5TldSVkpUU1U5T0l5TmNJanRjYm1WNGNHOXlkQ0JqYjI1emRDQlFRVU5MUVVkRlgwNUJUVVVnUFNCY0lpTWpVRUZEUzBGSFJTTWpYQ0k3WEc1Y2JrMWxkR0ZrWVhSaExuSmxaMmx6ZEdWeVRHbGljbUZ5ZVNoUVFVTkxRVWRGWDA1QlRVVXNJRlpGVWxOSlQwNHBPMXh1SWwxOSJdfQ==
@@ -1,3 +1,3 @@
1
1
  import fabric from "./../cli-module.js";
2
2
  fabric().parse(process.argv);
3
- //# sourceMappingURL=cli.js.map
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Jpbi9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLDJCQUFzQjtBQUVuQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZhYnJpYyBmcm9tIFwiLi4vY2xpLW1vZHVsZVwiO1xuXG5mYWJyaWMoKS5wYXJzZShwcm9jZXNzLmFyZ3YpO1xuIl19
@@ -49,8 +49,10 @@ const compileCommand = new Command()
49
49
  .option("--input <String>", "input folder for contracts", "lib/contracts")
50
50
  .option("--output <String>", "output folder for contracts", "./contracts")
51
51
  .option("--sourcemaps", "includes sourcemaps in the compiled output", false)
52
+ .option("--npmrc", "includes .npmrc in the compiled output", false)
52
53
  .action(async (options) => {
53
54
  const pkg = JSON.parse(fs.readFileSync(path.join(process.cwd(), "package.json"), "utf-8"));
55
+ let npmrcContent = undefined;
54
56
  const version = pkg.version;
55
57
  let {
56
58
  // eslint-disable-next-line prefer-const
@@ -68,8 +70,29 @@ const compileCommand = new Command()
68
70
  // eslint-disable-next-line prefer-const
69
71
  ccaas,
70
72
  // eslint-disable-next-line prefer-const
71
- bundle, tsConfigFile, sourcemaps, } = options;
73
+ bundle, tsConfigFile,
74
+ // eslint-disable-next-line prefer-const
75
+ sourcemaps,
76
+ // eslint-disable-next-line prefer-const
77
+ npmrc, } = options;
72
78
  const log = logger.for("compile-contract");
79
+ try {
80
+ if (npmrc) {
81
+ npmrcContent = JSON.parse(fs.readFileSync(path.join(process.cwd(), ".npmrc"), "utf-8"));
82
+ const replaced = npmrcContent.replace(/\$\{([^}]+)\}/g, (_, varName) => {
83
+ const value = process.env[varName];
84
+ if (value === undefined) {
85
+ console.warn(`Warning: Environment variable "${varName}" is not set`);
86
+ return "";
87
+ }
88
+ return value;
89
+ });
90
+ npmrcContent = replaced;
91
+ }
92
+ }
93
+ catch {
94
+ log.info(`No .npmrc file found, skipping copying .npmrc to output`);
95
+ }
73
96
  log.debug(`running with options: ${JSON.stringify(options)} for ${pkg.name} version ${version}`);
74
97
  tsConfigFile = path.isAbsolute(tsConfigFile)
75
98
  ? tsConfigFile
@@ -171,6 +194,8 @@ const compileCommand = new Command()
171
194
  ? `${toPascalCase(name)}.js`
172
195
  : `${input}/index.js`;
173
196
  fs.writeFileSync(path.join(output, "package.json"), JSON.stringify(contractPackage));
197
+ if (npmrc)
198
+ fs.writeFileSync(path.join(output, ".npmrc"), npmrcContent);
174
199
  log.info(`Installing and shrinkwrapping dependencies`);
175
200
  execSync(`npm install`, { cwd: output });
176
201
  execSync(`npm shrinkwrap`, { cwd: output });
@@ -470,4 +495,4 @@ fabricCmd.addCommand(extractCollections);
470
495
  export default function fabric() {
471
496
  return fabricCmd;
472
497
  }
473
- //# sourceMappingURL=cli-module.js.map
498
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGktbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN4QyxPQUFPLE9BQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsWUFBWSxHQUNiLGtDQUF5QjtBQUMxQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkQsT0FBTyxFQUNMLGVBQWUsRUFDZiwwQkFBMEIsRUFDMUIsZUFBZSxFQUNmLGVBQWUsRUFDZixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLDRCQUE0QixHQUM3Qix1QkFBb0I7QUFDckIscUNBQTRCO0FBQzVCLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QixPQUFPLEVBQ0wsa0JBQWtCLElBQUksYUFBYSxFQUVuQyxnQkFBZ0IsRUFDaEIseUJBQXlCLEdBQzFCLHNDQUFtQztBQUdwQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRXJDLFNBQVMsdUJBQXVCO0lBQzlCLE9BQU87UUFDTCxJQUFJLEVBQUUsNEJBQTRCO1FB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LENBQ1YsbUVBQW1FLENBQ3BFLENBQUM7QUFFSixTQUFTLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsQyxTQUFTLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUN4QyxTQUFTLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFekMsTUFBTSxDQUFDLE9BQU8sVUFBVSxNQUFNO0lBQzVCLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgTG9nZ2luZywgdG9QYXNjYWxDYXNlIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgUGx1Z2luLCByb2xsdXAgfSBmcm9tIFwicm9sbHVwXCI7XG5pbXBvcnQgcmVwbGFjZSBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tcmVwbGFjZVwiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciwgU2VyaWFsaXphdGlvbkVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQge1xuICBnZW5lcmF0ZU1vZGVsRGVzaWduRG9jcyxcbiAgZ2VuZXJhdGVNb2RlbEluZGV4ZXMsXG4gIHJlYWRNb2RlbEZpbGUsXG4gIHJlYWRNb2RlbEZvbGRlcnMsXG4gIHdyaXRlRGVzaWduRG9jcyxcbiAgd3JpdGVJbmRleGVzLFxufSBmcm9tIFwiLi9jbGllbnQvaW5kZXhlc1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQge1xuICBhcHByb3ZlQ29udHJhY3QsXG4gIGVuc3VyZUluZnJhc3RydWN0dXJlQm9vdGVkLFxuICBpbnN0YWxsQ29udHJhY3QsXG4gIHBhY2thZ2VDb250cmFjdCxcbiAgY29tbWl0Q2hhaW5jb2RlLFxuICBnZXRDb250cmFjdFN0YXJ0Q29tbWFuZCxcbiAgY29tcGlsZVdpdGhUc2NvbmZpZ092ZXJyaWRlcyxcbn0gZnJvbSBcIi4vY2xpLXV0aWxzXCI7XG5pbXBvcnQgXCIuL3NoYXJlZC9vdmVycmlkZXNcIjtcbmltcG9ydCB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuaW1wb3J0IHtcbiAgZXh0cmFjdENvbGxlY3Rpb25zIGFzIGV4Q29sbGVjdGlvbnMsXG4gIFByaXZhdGVDb2xsZWN0aW9uLFxuICB3cml0ZUNvbGxlY3Rpb25zLFxuICB3cml0ZUNvbGxlY3Rpb25EZXNpZ25Eb2NzLFxufSBmcm9tIFwiLi9jbGllbnQvY29sbGVjdGlvbnMvaW5kZXhcIjtcbmltcG9ydCB7IENvdWNoREJEZXNpZ25Eb2MsIENyZWF0ZUluZGV4UmVxdWVzdCB9IGZyb20gXCJAZGVjYWYtdHMvZm9yLWNvdWNoZGJcIjtcblxuY29uc3QgbG9nZ2VyID0gTG9nZ2luZy5mb3IoXCJmYWJyaWNcIik7XG5cbmZ1bmN0aW9uIHJlc29sdmVCdW5kbGVkSnNJbXBvcnRzKCk6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJyZXNvbHZlLWJ1bmRsZWQtanMtaW1wb3J0c1wiLFxuICAgIHJlc29sdmVJZChzb3VyY2UsIGltcG9ydGVyKSB7XG4gICAgICBpZiAoIWltcG9ydGVyIHx8ICFzb3VyY2Uuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoaW1wb3J0ZXIpLCBzb3VyY2UpO1xuICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IFtcbiAgICAgICAgcmVzb2x2ZWRQYXRoLFxuICAgICAgICBgJHtyZXNvbHZlZFBhdGh9LmpzYCxcbiAgICAgICAgcGF0aC5qb2luKHJlc29sdmVkUGF0aCwgXCJpbmRleC5qc1wiKSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY2FuZGlkYXRlKSAmJiBmcy5zdGF0U3luYyhjYW5kaWRhdGUpLmlzRmlsZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBjb21waWxlQ29tbWFuZCA9IG5ldyBDb21tYW5kKClcbiAgLm5hbWUoXCJjb21waWxlLWNvbnRyYWN0XCIpXG4gIC5kZXNjcmlwdGlvbihcIkNyZWF0ZXMgYSBnbG9iYWwgY29udHJhY3RcIilcbiAgLm9wdGlvbihcIi0tZGV2XCIsIFwiY29tcGlsZXMgY29udHJhY3RzIHdpdGhvdXQgbWluaWZpY2F0aW9uXCIsIGZhbHNlKVxuICAub3B0aW9uKFwiLS1kZWJ1Z1wiLCBcIm1ha2VzIGF0dGFjaGluZyBkZWJ1Z2dlciBwb3NzaWJsZVwiLCBmYWxzZSlcbiAgLm9wdGlvbihcbiAgICBcIi0tY2NhYXNcIixcbiAgICBcIkFqdXN0cyB0aGUgcGFja2FnZSBjb21tYW5kcyB0byBiZSBkZXBsb3llZCBhcyBjY2Fhc1wiLFxuICAgIGZhbHNlXG4gIClcbiAgLm9wdGlvbihcIi0tbmFtZSA8U3RyaW5nPlwiLCBcImNvbnRyYWN0IG5hbWVcIiwgXCJnbG9iYWwtY29udHJhY3RcIilcbiAgLm9wdGlvbihcIi0tYnVuZGxlXCIsIFwiQnVuZGxlcyB3aXRoIHJvbGx1cCBpbnN0ZWFkIG9mIHVzaW5nIHRzY1wiLCBmYWxzZSlcbiAgLm9wdGlvbihcbiAgICBcIi0tdHMtY29uZmlnLWZpbGUgPHN0cmluZz5cIixcbiAgICBcInJlbGF0aXZlIHBhdGggdG8gdGhlIHRzIGNvbmZpZyBmaWxlIGJhc2VkIG9uIGN3ZCBvciBhYnNvbHV0ZSBwYXRoXCIsXG4gICAgXCIuL3RzY29uZmlnLmpzb25cIlxuICApXG4gIC5vcHRpb24oXG4gICAgXCItLWRlc2NyaXB0aW9uIDxTdHJpbmc+XCIsXG4gICAgXCJjb250cmFjdCBkZXNjcmlwdGlvblwiLFxuICAgIFwiR2xvYmFsIGNvbnRyYWN0IGltcGxlbWVudGF0aW9uXCJcbiAgKVxuICAub3B0aW9uKFwiLS1zdHJpcC1jb250cmFjdC1uYW1lXCIsIFwic3RyaXAgY29udHJhY3QgbmFtZSBmcm9tIG91dHB1dFwiLCBmYWxzZSlcbiAgLm9wdGlvbihcIi0taW5wdXQgPFN0cmluZz5cIiwgXCJpbnB1dCBmb2xkZXIgZm9yIGNvbnRyYWN0c1wiLCBcImxpYi9jb250cmFjdHNcIilcbiAgLm9wdGlvbihcIi0tb3V0cHV0IDxTdHJpbmc+XCIsIFwib3V0cHV0IGZvbGRlciBmb3IgY29udHJhY3RzXCIsIFwiLi9jb250cmFjdHNcIilcbiAgLm9wdGlvbihcIi0tc291cmNlbWFwc1wiLCBcImluY2x1ZGVzIHNvdXJjZW1hcHMgaW4gdGhlIGNvbXBpbGVkIG91dHB1dFwiLCBmYWxzZSlcbiAgLm9wdGlvbihcIi0tbnBtcmNcIiwgXCJpbmNsdWRlcyAubnBtcmMgaW4gdGhlIGNvbXBpbGVkIG91dHB1dFwiLCBmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShcbiAgICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmLThcIilcbiAgICApO1xuXG4gICAgbGV0IG5wbXJjQ29udGVudCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGxldCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBkZXYsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBkZWJ1ZyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIG5hbWUsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIG91dHB1dCxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIGlucHV0LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgc3RyaXBDb250cmFjdE5hbWUsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBjY2FhcyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIGJ1bmRsZSxcblxuICAgICAgdHNDb25maWdGaWxlLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgc291cmNlbWFwcyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIG5wbXJjLFxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJjb21waWxlLWNvbnRyYWN0XCIpO1xuICAgIHRyeSB7XG4gICAgICBpZiAobnBtcmMpIHtcbiAgICAgICAgbnBtcmNDb250ZW50ID0gSlNPTi5wYXJzZShcbiAgICAgICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiLm5wbXJjXCIpLCBcInV0Zi04XCIpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWQgPSBucG1yY0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgICAvXFwkXFx7KFtefV0rKVxcfS9nLFxuICAgICAgICAgIChfOiBhbnksIHZhck5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9jZXNzLmVudlt2YXJOYW1lXTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIGBXYXJuaW5nOiBFbnZpcm9ubWVudCB2YXJpYWJsZSBcIiR7dmFyTmFtZX1cIiBpcyBub3Qgc2V0YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBucG1yY0NvbnRlbnQgPSByZXBsYWNlZDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIGxvZy5pbmZvKGBObyAubnBtcmMgZmlsZSBmb3VuZCwgc2tpcHBpbmcgY29weWluZyAubnBtcmMgdG8gb3V0cHV0YCk7XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG5cbiAgICB0c0NvbmZpZ0ZpbGUgPSBwYXRoLmlzQWJzb2x1dGUodHNDb25maWdGaWxlKVxuICAgICAgPyB0c0NvbmZpZ0ZpbGVcbiAgICAgIDogcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIHRzQ29uZmlnRmlsZSk7XG5cbiAgICBvdXRwdXQgPSBzdHJpcENvbnRyYWN0TmFtZSA/IG91dHB1dCA6IHBhdGguam9pbihvdXRwdXQsIG5hbWUpO1xuICAgIGxvZy5pbmZvKGBEZWxldGluZyBleGlzdGluZyBvdXRwdXQgZm9sZGVyIChpZiBleGlzdHMpIHVuZGVyICR7b3V0cHV0fWApO1xuICAgIGV4ZWNTeW5jKGBybSAtcmYgJHtvdXRwdXR9YCk7XG4gICAgaWYgKGJ1bmRsZSkge1xuICAgICAgbG9nLmluZm8oYGJ1bmRsaW5nIGNvbnRyYWN0IGZyb20gJHtpbnB1dH1gKTtcbiAgICAgIGNvbnN0IHRlbXBCdW5kbGVEaXIgPSBmcy5ta2R0ZW1wU3luYyhcbiAgICAgICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiLmNvbnRyYWN0LWJ1bmRsZS1cIilcbiAgICAgICk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbnB1dEVudHJ5ID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGlucHV0LCBcImluZGV4LnRzXCIpO1xuICAgICAgICBjb25zdCBjb25maWdGaWxlID0gdHMucmVhZENvbmZpZ0ZpbGUodHNDb25maWdGaWxlLCB0cy5zeXMucmVhZEZpbGUpO1xuICAgICAgICBpZiAoY29uZmlnRmlsZS5lcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgdHMuZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlVGV4dChjb25maWdGaWxlLmVycm9yLm1lc3NhZ2VUZXh0LCBcIlxcblwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZWRDb25maWcgPSB0cy5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChcbiAgICAgICAgICBjb25maWdGaWxlLmNvbmZpZyxcbiAgICAgICAgICB0cy5zeXMsXG4gICAgICAgICAgcGF0aC5kaXJuYW1lKHRzQ29uZmlnRmlsZSksXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHRzQ29uZmlnRmlsZVxuICAgICAgICApO1xuICAgICAgICBpZiAocGFyc2VkQ29uZmlnLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgIHBhcnNlZENvbmZpZy5lcnJvcnNcbiAgICAgICAgICAgICAgLm1hcCgoZXJyb3IpID0+XG4gICAgICAgICAgICAgICAgdHMuZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlVGV4dChlcnJvci5tZXNzYWdlVGV4dCwgXCJcXG5cIilcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuam9pbihcIlxcblwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZW1wQ29tcGlsZXJPcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMgPSB7XG4gICAgICAgICAgLi4ucGFyc2VkQ29uZmlnLm9wdGlvbnMsXG4gICAgICAgICAgb3V0RGlyOiB0ZW1wQnVuZGxlRGlyLFxuICAgICAgICAgIG1vZHVsZTogdHMuTW9kdWxlS2luZC5FU05leHQsXG4gICAgICAgICAgZGVjbGFyYXRpb246IGZhbHNlLFxuICAgICAgICAgIHNvdXJjZU1hcDogZmFsc2UsXG4gICAgICAgICAgaW5saW5lU291cmNlczogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJ1bmRsZWRFbnRyeVBvaW50ID0gdHNcbiAgICAgICAgICAuZ2V0T3V0cHV0RmlsZU5hbWVzKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5wYXJzZWRDb25maWcsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IHRlbXBDb21waWxlck9wdGlvbnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5wdXRFbnRyeSxcbiAgICAgICAgICAgICF0cy5zeXMudXNlQ2FzZVNlbnNpdGl2ZUZpbGVOYW1lc1xuICAgICAgICAgIClcbiAgICAgICAgICAuZmluZCgoZmlsZU5hbWUpID0+IGZpbGVOYW1lLmVuZHNXaXRoKFwiLmpzXCIpKTtcblxuICAgICAgICBpZiAoIWJ1bmRsZWRFbnRyeVBvaW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIGRldGVybWluZSB0aGUgZW1pdHRlZCBidW5kbGUgZW50cnkgZm9yICR7aW5wdXRFbnRyeX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBpbGVXaXRoVHNjb25maWdPdmVycmlkZXModHNDb25maWdGaWxlLCB0ZW1wQ29tcGlsZXJPcHRpb25zKTtcbiAgICAgICAgY29uc3QgYnVuZGxlZENvbnRyYWN0ID0gYXdhaXQgcm9sbHVwKHtcbiAgICAgICAgICBpbnB1dDogYnVuZGxlZEVudHJ5UG9pbnQsXG4gICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgcmVzb2x2ZUJ1bmRsZWRKc0ltcG9ydHMoKSxcbiAgICAgICAgICAgIHJlcGxhY2Uoe1xuICAgICAgICAgICAgICBwcmV2ZW50QXNzaWdubWVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZGVsaW1pdGVyczogW1wiXCIsIFwiXCJdLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHsgXCIjI1ZFUlNJT04jI1wiOiB2ZXJzaW9uLCBcIiMjUEFDS0FHRSMjXCI6IHBrZy5uYW1lIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nLmluZm8oXG4gICAgICAgICAgYHdpdGhpbmcgY29udHJhY3QgdG8gJHtvdXRwdXR9IHdpdGggbmFtZSAke3RvUGFzY2FsQ2FzZShuYW1lKX0uanNgXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IGJ1bmRsZWRDb250cmFjdC53cml0ZSh7XG4gICAgICAgICAgZmlsZTogYCR7b3V0cHV0fS8ke3RvUGFzY2FsQ2FzZShuYW1lKX0uanNgLFxuICAgICAgICAgIGZvcm1hdDogXCJ1bWRcIixcbiAgICAgICAgICBuYW1lOiBgJHt0b1Bhc2NhbENhc2UobmFtZSl9LmpzYCxcbiAgICAgICAgICBzb3VyY2VtYXA6IHNvdXJjZW1hcHMgPyBcImlubGluZVwiIDogZmFsc2UsXG4gICAgICAgICAgc291cmNlbWFwUGF0aFRyYW5zZm9ybTogKHJlbGF0aXZlU291cmNlUGF0aCwgc291cmNlbWFwUGF0aCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGVTb3VyY2VQYXRoID0gcGF0aC5yZXNvbHZlKFxuICAgICAgICAgICAgICBwYXRoLmRpcm5hbWUoc291cmNlbWFwUGF0aCksXG4gICAgICAgICAgICAgIHJlbGF0aXZlU291cmNlUGF0aFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGFic29sdXRlU291cmNlUGF0aC5zdGFydHNXaXRoKHRlbXBCdW5kbGVEaXIpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwYXRoLnBvc2l4LmpvaW4oXG4gICAgICAgICAgICAgICAgXCIuYnVuZGxlXCIsXG4gICAgICAgICAgICAgICAgcGF0aFxuICAgICAgICAgICAgICAgICAgLnJlbGF0aXZlKHRlbXBCdW5kbGVEaXIsIGFic29sdXRlU291cmNlUGF0aClcbiAgICAgICAgICAgICAgICAgIC5zcGxpdChwYXRoLnNlcClcbiAgICAgICAgICAgICAgICAgIC5qb2luKFwiL1wiKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVsYXRpdmVTb3VyY2VQYXRoO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBidW5kbGVkQ29udHJhY3QuY2xvc2UoKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGZzLnJtU3luYyh0ZW1wQnVuZGxlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBpbGVXaXRoVHNjb25maWdPdmVycmlkZXModHNDb25maWdGaWxlLCB7XG4gICAgICAgIG91dERpcjogb3V0cHV0LFxuICAgICAgICBtb2R1bGU6IHRzLk1vZHVsZUtpbmQuRVNOZXh0LFxuICAgICAgICBkZWNsYXJhdGlvbjogZmFsc2UsXG4gICAgICAgIHNvdXJjZU1hcDogc291cmNlbWFwcyxcbiAgICAgICAgaW5saW5lU291cmNlczogc291cmNlbWFwcyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHNjcmlwdHMgPSB7XG4gICAgICBzdGFydDogZ2V0Q29udHJhY3RTdGFydENvbW1hbmQoZGVidWcsIGNjYWFzKSxcbiAgICAgIFwic3RhcnQ6ZGV2XCI6IFwiZmFicmljLWNoYWluY29kZS1ub2RlIHN0YXJ0IC0tdGxzLmVuYWJsZWQgZmFsc2VcIixcbiAgICAgIFwic3RhcnQ6d2F0Y2hcIjogJ25vZGVtb24gLS1leGVjIFwibnBtIHJ1biBzdGFydDpkZXZcIicsXG4gICAgICBidWlsZDogJ2VjaG8gXCJObyBuZWVkIHRvIGJ1aWxkIHRoZSBjaGFpbmNvZGVcIicsXG4gICAgICBsaW50OiBcImVzbGludCAuIC0tZml4IC0tZXh0IC5qc1wiLFxuICAgIH07XG5cbiAgICBjb25zdCBjb250cmFjdFBhY2thZ2UgPSBwa2c7XG5cbiAgICBjb250cmFjdFBhY2thZ2UubmFtZSA9IG5hbWU7XG4gICAgY29udHJhY3RQYWNrYWdlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgY29udHJhY3RQYWNrYWdlLnNjcmlwdHMgPSBzY3JpcHRzO1xuXG4gICAgZGVsZXRlIGNvbnRyYWN0UGFja2FnZS50eXBlO1xuICAgIGRlbGV0ZSBjb250cmFjdFBhY2thZ2UudHlwZXM7XG4gICAgZGVsZXRlIGNvbnRyYWN0UGFja2FnZS5leHBvcnRzO1xuICAgIGNvbnRyYWN0UGFja2FnZS5tYWluID0gYnVuZGxlXG4gICAgICA/IGAke3RvUGFzY2FsQ2FzZShuYW1lKX0uanNgXG4gICAgICA6IGAke2lucHV0fS9pbmRleC5qc2A7XG5cbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKG91dHB1dCwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeShjb250cmFjdFBhY2thZ2UpXG4gICAgKTtcblxuICAgIGlmIChucG1yYykgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4ob3V0cHV0LCBcIi5ucG1yY1wiKSwgbnBtcmNDb250ZW50KTtcblxuICAgIGxvZy5pbmZvKGBJbnN0YWxsaW5nIGFuZCBzaHJpbmt3cmFwcGluZyBkZXBlbmRlbmNpZXNgKTtcbiAgICBleGVjU3luYyhgbnBtIGluc3RhbGxgLCB7IGN3ZDogb3V0cHV0IH0pO1xuICAgIGV4ZWNTeW5jKGBucG0gc2hyaW5rd3JhcGAsIHsgY3dkOiBvdXRwdXQgfSk7XG4gICAgZXhlY1N5bmMoXCJybSAtcmYgbm9kZV9tb2R1bGVzXCIsIHsgY3dkOiBvdXRwdXQgfSk7XG4gICAgbG9nLmluZm8oYGRlbGV0aW5nIHRlbXAgZm9sZGVyc2ApO1xuICAgIGV4ZWNTeW5jKGBybSAtcmYgLi9saWIgJiYgcm0gLXJmIC4vZGlzdGAsIHsgY3dkOiBvdXRwdXQgfSk7XG4gICAgbG9nLmluZm8oXG4gICAgICBgQ29udHJhY3QgJHtuYW1lfSBjb21waWxlZCBzdWNjZXNzZnVsbHkhIGluICR7cGF0aC5yZXNvbHZlKG91dHB1dCl9YFxuICAgICk7XG4gICAgaWYgKGRldikge1xuICAgICAgbG9nLmluZm8oYGRldiBtb2RlIGVuYWJsZWQuIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzIGZvciBkZWJ1Z2dpbmdgKTtcbiAgICAgIGV4ZWNTeW5jKGBucG0gaW5zdGFsbGAsIHtcbiAgICAgICAgY3dkOiBvdXRwdXQsXG4gICAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgTk9ERV9FTlY6IFwicHJvZHVjdGlvblwiIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG5jb25zdCBleHRyYWN0SW5kZXhlcyA9IG5ldyBDb21tYW5kKClcbiAgLmNvbW1hbmQoXCJleHRyYWN0LWluZGV4ZXNcIilcbiAgLm9wdGlvbihcIi0tZmlsZSBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmaWxlXCIpXG4gIC5vcHRpb24oXCItLWZvbGRlciBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmb2xkZXJcIilcbiAgLm9wdGlvbihcIi0tb3V0RGlyIDxTdHJpbmc+XCIsIFwidGhlIG91dGRpci4gc2hvdWxkIG1hdGNoIHlvdXIgY29udHJhY3QgZm9sZGVyXCIpXG4gIC5kZXNjcmlwdGlvbihcbiAgICBcIkNyZWF0ZXMgYSB0aGUgSlNPTiBpbmRleCBmaWxlcyB0byBiZSBzdWJtaXR0ZWQgdG8gYWxvbmcgd2l0aCB0aGUgY29udHJhY3RcIlxuICApXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJleHRyYWN0LWluZGV4ZXNcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgbGV0IHsgZmlsZSwgZm9sZGVyLCBvdXREaXIgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBtb2RlbHM6IGFueVtdID0gW107XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIG1vZGVscy5wdXNoKC4uLnJlYWRNb2RlbEZpbGUoZmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChmb2xkZXIpIHtcbiAgICAgIGxvZy5pbmZvKGBMb2FkaW5nIG1vZGVscyBmcm9tICR7Zm9sZGVyfS4uLmApO1xuICAgICAgbW9kZWxzLnB1c2goLi4uKGF3YWl0IHJlYWRNb2RlbEZvbGRlcnMoZm9sZGVyKSkpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBjb25zdCBkZXNpZ25Eb2NzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICBpZiAoIWZpbGUgJiYgIWZvbGRlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBNdXN0IHBhc3MgYSBmaWxlIG9yIGEgZm9sZGVyYCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgbW9kZWxzKSB7XG4gICAgICBsb2cudmVyYm9zZShgRXh0cmFjdGluZyBpbmRleGVzIGZvciB0YWJsZSAke01vZGVsLnRhYmxlTmFtZShtKX1gKTtcbiAgICAgIGNvbnN0IGluZGV4ZXMgPSBnZW5lcmF0ZU1vZGVsSW5kZXhlcyhtKTtcbiAgICAgIGluZGV4ZXMuZm9yRWFjaCgoaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4Lm5hbWUpIHtcbiAgICAgICAgICByZXN1bHRbaW5kZXgubmFtZV0gPSBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBnZW5lcmF0ZU1vZGVsRGVzaWduRG9jcyhtLCBkZXNpZ25Eb2NzKTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXhlc1RvV3JpdGUgPSBPYmplY3QudmFsdWVzKHJlc3VsdCk7XG4gICAgY29uc3QgZG9jc1RvV3JpdGUgPSBPYmplY3QudmFsdWVzKGRlc2lnbkRvY3MpO1xuICAgIGxvZy52ZXJib3NlKGBGb3VuZCAke2luZGV4ZXNUb1dyaXRlLmxlbmd0aH0gaW5kZXhlcyB0byBjcmVhdGVgKTtcbiAgICBsb2cudmVyYm9zZShgRm91bmQgJHtkb2NzVG9Xcml0ZS5sZW5ndGh9IGRlc2lnbiBkb2NzIHRvIGNyZWF0ZWApO1xuICAgIGxvZy5kZWJ1ZyhgSW5kZXhlczogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgIGxvZy5kZWJ1ZyhgRGVzaWduRG9jczogJHtKU09OLnN0cmluZ2lmeShkZXNpZ25Eb2NzKX1gKTtcbiAgICB3cml0ZUluZGV4ZXMoaW5kZXhlc1RvV3JpdGUsIG91dERpcik7XG4gICAgd3JpdGVEZXNpZ25Eb2NzKGRvY3NUb1dyaXRlLCBvdXREaXIpO1xuICB9KTtcblxuY29uc3QgZXh0cmFjdENvbGxlY3Rpb25zID0gbmV3IENvbW1hbmQoKVxuICAuY29tbWFuZChcImV4dHJhY3QtY29sbGVjdGlvbnNcIilcbiAgLm9wdGlvbihcIi0tZmlsZSBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmaWxlXCIpXG4gIC5vcHRpb24oXCItLWZvbGRlciBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmb2xkZXJcIilcbiAgLm9wdGlvbihcIi0tb3V0RGlyIDxTdHJpbmc+XCIsIFwidGhlIG91dGRpci4gc2hvdWxkIG1hdGNoIHlvdXIgY29udHJhY3QgZm9sZGVyXCIpXG4gIC5vcHRpb24oXCItLW1zcElkcyA8U3RyaW5nPlwiLCBcInNpbmdsZSBtc3BJZCBvciBzdHJpbmdpZmllZCBhcnJheVwiKVxuICAub3B0aW9uKFwiLS1tYWluTXNwSWQgPFN0cmluZz5cIiwgXCJzaW5nbGUgbXNwSWRcIilcbiAgLm9wdGlvbihcbiAgICBcIi0tb3ZlcnJpZGVzIFtTdHJpbmddXCIsXG4gICAgXCJzdHJpbmdpZmllZCBvdmVycmlkZSBvYmplY3Qge3JlcXVpcmVkUGVlckNvdW50OiBudW1iZXIsIG1heFBlZXJDb3VudDogbnVtYmVyLCBibG9ja1RvTGl2ZTogbnVtYmVyLCBtZW1iZXJPbmx5UmVhZDogbnVtYmVyLCBtZW1iZXJPbmx5V3JpdGU6IG51bWJlciwgZW5kb3JzZW1lbnRQb2xpY3k6ICB7fX1cIlxuICApXG4gIC5kZXNjcmlwdGlvbihcbiAgICBcIkNyZWF0ZXMgYSB0aGUgSlNPTiBpbmRleCBmaWxlcyB0byBiZSBzdWJtaXR0ZWQgdG8gYWxvbmcgd2l0aCB0aGUgY29udHJhY3RcIlxuICApXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJleHRyYWN0LWNvbGxlY3Rpb25zXCIpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBydW5uaW5nIHdpdGggb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX0gZm9yICR7cGtnLm5hbWV9IHZlcnNpb24gJHt2ZXJzaW9ufWBcbiAgICApO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IGZpbGUsIGZvbGRlciwgb3V0RGlyLCBtc3BJZHMsIG1haW5Nc3BJZCB9ID0gb3B0aW9ucztcblxuICAgIHRyeSB7XG4gICAgICB0cnkge1xuICAgICAgICBtc3BJZHMgPSBtc3BJZHMgPyBKU09OLnBhcnNlKG1zcElkcykgOiB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgLy8gIGRvIG5vdGhpbmdcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKGBVbmFibGUgdG8gZXh0cmFjdCBtc3BpZHM6ICAke2V9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kZWxzOiBhbnlbXSA9IFtdO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBtb2RlbHMucHVzaCguLi5yZWFkTW9kZWxGaWxlKGZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAoZm9sZGVyKSB7XG4gICAgICBsb2cuaW5mbyhgTG9hZGluZyBtb2RlbHMgZnJvbSAke2ZvbGRlcn0uLi5gKTtcbiAgICAgIG1vZGVscy5wdXNoKC4uLihhd2FpdCByZWFkTW9kZWxGb2xkZXJzKGZvbGRlcikpKTtcbiAgICB9XG5cbiAgICBpZiAoIWZpbGUgJiYgIWZvbGRlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBNdXN0IHBhc3MgYSBmaWxlIG9yIGEgZm9sZGVyYCk7XG5cbiAgICBjb25zdCBpbmplY3RhYmxlTW9kZWxzID0gbW9kZWxzLmZpbHRlcihcbiAgICAgIChtb2RlbCkgPT5cbiAgICAgICAgTW9kZWwuaXNTaGFyZWQobW9kZWwpIHx8XG4gICAgICAgIE1vZGVsLmlzUHJpdmF0ZShtb2RlbCkgfHxcbiAgICAgICAgISFNb2RlbC5taXJyb3JlZEF0KG1vZGVsKVxuICAgICk7XG4gICAgaWYgKCFpbmplY3RhYmxlTW9kZWxzLmxlbmd0aCkge1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIGBObyBzaGFyZWQsIHByaXZhdGUsIG9yIG1pcnJvcmVkIG1vZGVscyBmb3VuZCB0byBleHRyYWN0IGNvbGxlY3Rpb25zYFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBnZXRDb2xzKG1zcElkc0xpc3Q/OiBzdHJpbmdbXSkge1xuICAgICAgY29uc3QgY29sczoge1xuICAgICAgICBpbmRleGVzOiBDcmVhdGVJbmRleFJlcXVlc3RbXTtcbiAgICAgICAgZGVzaWduRG9jczogQ291Y2hEQkRlc2lnbkRvY1tdO1xuICAgICAgICBtaXJyb3I/OiBQcml2YXRlQ29sbGVjdGlvbjtcbiAgICAgICAgY29sbGVjdGlvbnM6IFByaXZhdGVDb2xsZWN0aW9uW107XG4gICAgICB9W10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgaW5qZWN0YWJsZU1vZGVscy5tYXAoYXN5bmMgKGNsYXp6KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICAgICAgICBjb25zdCBtaXJyb3JNZXRhID0gTW9kZWwubWlycm9yZWRBdChjbGF6eik7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyh0YWJsZU5hbWUpO1xuICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBtc3Agb2YgbXNwSWRzTGlzdCB8fCBtc3BJZHMgfHwgW10pIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25zW21zcF0gPSBhd2FpdCBleENvbGxlY3Rpb25zKFxuICAgICAgICAgICAgICBjbGF6eixcbiAgICAgICAgICAgICAgW21zcCwgbWFpbk1zcElkXSxcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgLy8gICBzaGFyZWRDb2xzOiBPYmplY3QuYXNzaWduKHt9LCBvdmVycmlkZXMuc2hhcmVkQ29scyksXG4gICAgICAgICAgICAgIC8vICAgcHJpdmF0ZUNvbHM6IE9iamVjdC5hc3NpZ24oe30sIG92ZXJyaWRlcy5wcml2YXRlQ29scyksXG4gICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICEhbWlycm9yTWV0YVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbWlycm9yQ29sbGVjdGlvbjogUHJpdmF0ZUNvbGxlY3Rpb24gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAobWlycm9yTWV0YSkge1xuICAgICAgICAgICAgY29sbGVjdGlvbnNbbWFpbk1zcElkXSA9IGNvbGxlY3Rpb25zW21haW5Nc3BJZF0gfHwge307XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb2xsZWN0aW9ucykuZm9yRWFjaCgobXNwOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbnNbbWFpbk1zcElkXS5wcml2YXRlcyA9IGNvbGxlY3Rpb25zW1xuICAgICAgICAgICAgICAgIG1zcFxuICAgICAgICAgICAgICBdLnByaXZhdGVzPy5maWx0ZXIoKHA6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwLm5hbWUgIT09IChtaXJyb3JNZXRhLnJlc29sdmVyIGFzIHN0cmluZykpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIG1pcnJvckNvbGxlY3Rpb24gPSBwIGFzIGFueTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcHJpdmF0ZXNDb3VudCA9IE9iamVjdC52YWx1ZXMoY29sbGVjdGlvbnMpXG4gICAgICAgICAgICAubWFwKChjKSA9PiBjLnByaXZhdGVzKVxuICAgICAgICAgICAgLmZsYXQoKS5sZW5ndGg7XG4gICAgICAgICAgaWYgKHByaXZhdGVzQ291bnQpXG4gICAgICAgICAgICBsb2dcbiAgICAgICAgICAgICAgLmZvcihNb2RlbC50YWJsZU5hbWUoY2xhenopKVxuICAgICAgICAgICAgICAuaW5mbyhgRm91bmQgJHtwcml2YXRlc0NvdW50fSBwcml2YXRlIGNvbGxlY3Rpb25zIHRvIGNyZWF0ZWApO1xuICAgICAgICAgIGNvbnN0IHNoYXJlZENvdW50ID0gT2JqZWN0LnZhbHVlcyhjb2xsZWN0aW9ucylcbiAgICAgICAgICAgIC5tYXAoKGMpID0+IGMuc2hhcmVkKVxuICAgICAgICAgICAgLmZsYXQoKS5sZW5ndGg7XG5cbiAgICAgICAgICBsb2dcbiAgICAgICAgICAgIC5mb3IoTW9kZWwudGFibGVOYW1lKGNsYXp6KSlcbiAgICAgICAgICAgIC5pbmZvKGBGb3VuZCAke3NoYXJlZENvdW50fSBzaGFyZWQgY29sbGVjdGlvbnMgdG8gY3JlYXRlYCk7XG4gICAgICAgICAgaWYgKG1pcnJvckNvbGxlY3Rpb24pXG4gICAgICAgICAgICBsb2dcbiAgICAgICAgICAgICAgLmZvcihNb2RlbC50YWJsZU5hbWUoY2xhenopKVxuICAgICAgICAgICAgICAuaW5mbyhcbiAgICAgICAgICAgICAgICBgRm91bmQgb25lIG1pcnJvciBjb2xsZWN0aW9uICR7bWlycm9yTWV0YT8ucmVzb2x2ZXIgYXMgc3RyaW5nfWBcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGNvbExpc3QgPSBPYmplY3QudmFsdWVzKGNvbGxlY3Rpb25zKVxuICAgICAgICAgICAgLm1hcCgoYykgPT4gWy4uLihjLnByaXZhdGVzIHx8IFtdKSwgLi4uKGMuc2hhcmVkIHx8IFtdKV0pXG4gICAgICAgICAgICAuZmxhdCgpO1xuICAgICAgICAgIGxldCBpbmRleGVzOiBDcmVhdGVJbmRleFJlcXVlc3RbXSA9IFtdO1xuICAgICAgICAgIGxldCBkZXNpZ25Eb2NzOiBDb3VjaERCRGVzaWduRG9jW10gPSBbXTtcbiAgICAgICAgICBpZiAoY29sTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxvZ1xuICAgICAgICAgICAgICAuZm9yKE1vZGVsLnRhYmxlTmFtZShjbGF6eikpXG4gICAgICAgICAgICAgIC52ZXJib3NlKGBnZW5lcmF0aW5nIGluZGV4ZXMgZm9yIGNvbGxlY3Rpb25zYCk7XG4gICAgICAgICAgICBpbmRleGVzID0gZ2VuZXJhdGVNb2RlbEluZGV4ZXMoY2xhenopO1xuICAgICAgICAgICAgbG9nXG4gICAgICAgICAgICAgIC5mb3IoTW9kZWwudGFibGVOYW1lKGNsYXp6KSlcbiAgICAgICAgICAgICAgLmluZm8oYGZvdW5kICR7aW5kZXhlcy5sZW5ndGh9IGluZGV4ZXNgKTtcbiAgICAgICAgICAgIGRlc2lnbkRvY3MgPSBnZW5lcmF0ZU1vZGVsRGVzaWduRG9jcyhjbGF6eik7XG4gICAgICAgICAgICBsb2dcbiAgICAgICAgICAgICAgLmZvcihNb2RlbC50YWJsZU5hbWUoY2xhenopKVxuICAgICAgICAgICAgICAuaW5mbyhgZm91bmQgJHtkZXNpZ25Eb2NzLmxlbmd0aH0gZGVzaWduIGRvY3NgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgICBkZXNpZ25Eb2NzLFxuICAgICAgICAgICAgY29sbGVjdGlvbnM6IGNvbExpc3QsXG4gICAgICAgICAgICBtaXJyb3I6IG1pcnJvckNvbGxlY3Rpb24sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gY29scztcbiAgICB9XG5cbiAgICBjb25zdCBjb2xzID0gYXdhaXQgZ2V0Q29scygpO1xuICAgIGNvbnN0IG9ubHlNaXJyb3IgPSBhd2FpdCBnZXRDb2xzKFttYWluTXNwSWRdKTtcblxuICAgIGNvbnN0IGNvbGxlY3Rpb25zVG8gPSBbXG4gICAgICAuLi5vbmx5TWlycm9yLmZpbHRlcigoYykgPT4gYy5taXJyb3IpLm1hcCgoYykgPT4gYy5taXJyb3IpLFxuICAgICAgLi4uY29scy5tYXAoKGMpID0+IGMuY29sbGVjdGlvbnMpLmZsYXQoKSxcbiAgICAgIC4uLmNvbHMuZmlsdGVyKChjKSA9PiBjLm1pcnJvcikubWFwKChjKSA9PiBjLm1pcnJvciksXG4gICAgXSBhcyBQcml2YXRlQ29sbGVjdGlvbltdO1xuXG4gICAgY29uc3QgdW5pcXVlQnlDb2xsZWN0aW9uID0gW1xuICAgICAgLi4ubmV3IE1hcChcbiAgICAgICAgY29sbGVjdGlvbnNUby5tYXAoKGl0ZW06IFByaXZhdGVDb2xsZWN0aW9uKSA9PiBbaXRlbS5uYW1lLCBpdGVtXSlcbiAgICAgICkudmFsdWVzKCksXG4gICAgXTtcblxuICAgIGlmICh1bmlxdWVCeUNvbGxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICB3cml0ZUNvbGxlY3Rpb25zKHVuaXF1ZUJ5Q29sbGVjdGlvbiwgb3V0RGlyKTtcbiAgICAgIGNvbnN0IG1ldGFDb2xsZWN0aW9uc0NvbmZpZyA9IHBhdGguam9pbihcbiAgICAgICAgb3V0RGlyLFxuICAgICAgICBcIk1FVEEtSU5GXCIsXG4gICAgICAgIFwiY29sbGVjdGlvbnNfY29uZmlnLmpzb25cIlxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNvbnRyYWN0Q29sbGVjdGlvbnNDb25maWcgPSBwYXRoLmpvaW4oXG4gICAgICAgIG91dERpcixcbiAgICAgICAgXCJjb2xsZWN0aW9uc19jb25maWcuanNvblwiXG4gICAgICApO1xuICAgICAgZnMuY29weUZpbGVTeW5jKG1ldGFDb2xsZWN0aW9uc0NvbmZpZywgY29udHJhY3RDb2xsZWN0aW9uc0NvbmZpZyk7XG4gICAgICBsb2cuaW5mbyhcbiAgICAgICAgYFN0b3JlZCAke2NvbGxlY3Rpb25zVG8ubGVuZ3RofSBjb2xsZWN0aW9ucyB0byAke21ldGFDb2xsZWN0aW9uc0NvbmZpZ31gXG4gICAgICApO1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIGBDb3BpZWQgY29sbGVjdGlvbnNfY29uZmlnIHRvICR7Y29udHJhY3RDb2xsZWN0aW9uc0NvbmZpZ30gYWxvbmdzaWRlIHRoZSBwYWNrYWdlLmpzb25gXG4gICAgICApO1xuXG4gICAgICBjb2xzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgY29uc3QgeyBpbmRleGVzLCBkZXNpZ25Eb2NzLCBjb2xsZWN0aW9ucywgbWlycm9yIH0gPSBjO1xuICAgICAgICBjb25zdCB0b0luZGV4OiBQcml2YXRlQ29sbGVjdGlvbltdID0gWy4uLmNvbGxlY3Rpb25zLCBtaXJyb3JdLmZpbHRlcihcbiAgICAgICAgICBCb29sZWFuXG4gICAgICAgICkgYXMgUHJpdmF0ZUNvbGxlY3Rpb25bXTtcbiAgICAgICAgdG9JbmRleC5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgICAgd3JpdGVJbmRleGVzKGluZGV4ZXMsIG91dERpciwgaS5uYW1lKTtcbiAgICAgICAgICB3cml0ZUNvbGxlY3Rpb25EZXNpZ25Eb2NzKGRlc2lnbkRvY3MgfHwgW10sIG91dERpciwgaS5uYW1lKTtcbiAgICAgICAgICBsb2cuaW5mbyhcbiAgICAgICAgICAgIGBTdG9yZWQgJHtpbmRleGVzPy5sZW5ndGggfHwgMH0gaW5kZXhlcyBhbmQgJHtkZXNpZ25Eb2NzPy5sZW5ndGggfHwgMH0gZGVzaWduIGRvY3MgdG8gY29sbGVjdGlvbiAke2kubmFtZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG5jb25zdCBlbnN1cmVJbmZyYSA9IG5ldyBDb21tYW5kKClcbiAgLm5hbWUoXCJhd2FpdC1pbmZyYVwiKVxuICAuZGVzY3JpcHRpb24oXCJ3YWl0cyBmb3IgdGhlIGluZnJhc3RydWN0dXJlIHRvIGJlIHVwIGFuZCBydW5uaW5nXCIpXG4gIC5vcHRpb24oXG4gICAgXCItLWNvbnRhaW5lciA8U3RyaW5nPlwiLFxuICAgIFwiZG9ja2VyIGNvbnRhaW5lciBuYW1lIHRvIHRlc3QgKHVzdWFsbHkgbGFzdCBwZWVyKVwiLFxuICAgIFwiYm9vdC1vcmctYy1wZWVyLTBcIlxuICApXG4gIC5vcHRpb24oXCItLXRpbWVvdXQgPFN0cmluZz5cIiwgXCJ0aW1lb3V0IGJldHdlZW4gdGVzdHMgaW4gbWlsbGlzZWNvbmRzXCIsIFwiNTAwMFwiKVxuICAub3B0aW9uKFwiLS1hdHRlbXB0cyA8U3RyaW5nPlwiLCBcIm51bWJlciBvZiBhdHRlbXB0cyBiZWZvcmUgZ2l2aW5nIHVwXCIsIFwiMTBcIilcbiAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShcbiAgICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmLThcIilcbiAgICApO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IHBrZy52ZXJzaW9uO1xuXG4gICAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihcImF3YWl0LWluZnJhXCIpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBydW5uaW5nIHdpdGggb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX0gZm9yICR7cGtnLm5hbWV9IHZlcnNpb24gJHt2ZXJzaW9ufWBcbiAgICApO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgeyBjb250YWluZXIsIHRpbWVvdXQsIGF0dGVtcHRzIH0gPSBvcHRpb25zO1xuICAgIHRpbWVvdXQgPSBwYXJzZUludCh0aW1lb3V0KSB8fCA1MDAwO1xuICAgIGF0dGVtcHRzID0gcGFyc2VJbnQoYXR0ZW1wdHMpIHx8IDEwO1xuXG4gICAgYXdhaXQgZW5zdXJlSW5mcmFzdHJ1Y3R1cmVCb290ZWQoXCJib290LW9yZy1jLXBlZXItMFwiLCB0aW1lb3V0LCBhdHRlbXB0cyk7XG5cbiAgICBsb2cuaW5mbyhcbiAgICAgIGBJbmZyYXN0cnVjdHVyZSBib290ZWQgc3VjY2Vzc2Z1bGx5IChhY2NvcmRpbmcgdG8gY29udGFpbmVyICR7Y29udGFpbmVyfSkhYFxuICAgICk7XG4gIH0pO1xuXG5jb25zdCBkZXBsb3lDb250cmFjdCA9IG5ldyBDb21tYW5kKClcbiAgLm5hbWUoXCJkZXBsb3ktY29udHJhY3RcIilcbiAgLmRlc2NyaXB0aW9uKFwiZGVwbG95cyB0aGUgc2VsZWN0ZWQgY29udHJhY3RcIilcbiAgLm9wdGlvbihcIi0tbmFtZSA8U3RyaW5nPlwiLCBcIkNvbnRyYWN0IE5hbWUgKGFuZCBmb2xkZXIpXCIpXG4gIC5vcHRpb24oXCItLWlucHV0IDxTdHJpbmc+XCIsIFwiaW5wdXQgZm9sZGVyXCIpXG4gIC5vcHRpb24oXG4gICAgXCItLWNvbGxlY3Rpb25zLWNvbmZpZyA8U3RyaW5nPlwiLFxuICAgIFwicGF0aCB0byBjb2xsZWN0aW9uc19jb25maWcuanNvbiB0byBjb25maWd1cmUgcHJpdmF0ZSBjb2xsZWN0aW9uc1wiXG4gIClcbiAgLm9wdGlvbihcbiAgICBcIi0taW5jcmVtZW50VmVyc2lvbiA8U3RyaW5nPlwiLFxuICAgIFwiKHRydWUgfCBmYWxzZSkgaWYgc2hvdWxkIHVzZSB2ZXJzaW9uIG9yIHNlcXVlbmNlIHRvIHVwZGF0ZSBjb250cmFjdHNcIixcbiAgICBmYWxzZVxuICApXG4gIC5vcHRpb24oXG4gICAgXCItLXRyYWNrZXJGb2xkZXIgPFN0cmluZz5cIixcbiAgICBcImNvbnRyYWN0IHZlcnNpb24gdHJhY2tlciBmb2xkZXIgKHNob3VsZCBiZSBkZWxldGVkIG9uIGluZnJhc3RydWN0dXJlOmRvd24pXCIsXG4gICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwidGVzdHNcIiwgXCJpbnRlZ3JhdGlvblwiLCBcImNoYWluY29kZVRyYWNrZXJzXCIpXG4gIClcbiAgLm9wdGlvbihcbiAgICBcIi0tcGVlcnMgPFN0cmluZz5cIixcbiAgICBcImNvbW1hIHNlcGFyYXRlZCBwZWVyIGlkc1wiLFxuICAgIFwib3JnLWEtcGVlci0wLG9yZy1iLXBlZXItMCxvcmctYy1wZWVyLTBcIlxuICApXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJkZXBsb3ktY29udHJhY3RcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG5cbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgaW5wdXQsXG4gICAgICBwZWVycyxcbiAgICAgIHRyYWNrZXJGb2xkZXIsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICBpbmNyZW1lbnRWZXJzaW9uLFxuICAgICAgY29sbGVjdGlvbnNDb25maWcsXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcGVlcklkcyA9IHBlZXJzLnNwbGl0KFwiLFwiKTtcblxuICAgIGNvbnN0IGNvdW50UGF0aCA9IHBhdGgucmVzb2x2ZShwYXRoLmpvaW4odHJhY2tlckZvbGRlciwgYCR7bmFtZX0uY291bnRgKSk7XG5cbiAgICBsZXQgc2VxdWVuY2U6IG51bWJlcjtcblxuICAgIHRyeSB7XG4gICAgICBzZXF1ZW5jZSA9IHBhcnNlSW50KGZzLnJlYWRGaWxlU3luYyhjb3VudFBhdGgpLnRvU3RyaW5nKFwidXRmLThcIikpO1xuICAgICAgaWYgKGlzTmFOKHNlcXVlbmNlKSkgc2VxdWVuY2UgPSAxO1xuICAgICAgZWxzZSBzZXF1ZW5jZSArPSAxO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHNlcXVlbmNlID0gMTtcbiAgICB9XG4gICAgLy9cbiAgICAvLyBpZiAoaW5jcmVtZW50VmVyc2lvbikge1xuICAgIC8vICAgdmVyc2lvbiA9IHZlcnNpb24gKyBgLSR7c2VxdWVuY2V9YDtcbiAgICAvLyAgIC8vIHNlcXVlbmNlID0gMTtcbiAgICAvLyB9XG5cbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBwZWVyIG9mIHBlZXJJZHMpIHtcbiAgICAgICAgcGFja2FnZUNvbnRyYWN0KHBlZXIsIGlucHV0LCBuYW1lLCB2ZXJzaW9uKTtcbiAgICAgICAgaW5zdGFsbENvbnRyYWN0KHBlZXIsIG5hbWUpO1xuICAgICAgICBhcHByb3ZlQ29udHJhY3QoXG4gICAgICAgICAgcGVlcixcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHBlZXIgPT09IFwib3JnLWEtcGVlci0wXCJcbiAgICAgICAgICAgID8gXCJ0bHMtY2EtY2VydC5wZW1cIlxuICAgICAgICAgICAgOiBcIm9yZGVyZXItdGxzLWNhLWNlcnQucGVtXCIsXG4gICAgICAgICAgc2VxdWVuY2UsXG4gICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICBjb2xsZWN0aW9uc0NvbmZpZ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhjb3VudFBhdGgsIHNlcXVlbmNlLnRvU3RyaW5nKCkpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBsb2cuZXJyb3IoXCJFcnJvciBkZXBsb3lpbmcgY29udHJhY3Q6XCIsIGVycik7XG4gICAgfVxuICAgIGNvbW1pdENoYWluY29kZShuYW1lLCBzZXF1ZW5jZSwgdmVyc2lvbiwgY29sbGVjdGlvbnNDb25maWcpO1xuICB9KTtcblxuY29uc3QgZ2V0Q3J5cHRvTWF0ZXJpYWwgPSBuZXcgQ29tbWFuZCgpXG4gIC5uYW1lKFwiZ2V0LWNyeXB0by1tYXRlcmlhbFwiKVxuICAuZGVzY3JpcHRpb24oXCJjb3BpZXMgdGhlIGNyeXB0byBtYXRlcmlhbCB0byB0aGUgc2VsZWN0ZWQgZm9sZGVyXCIpXG4gIC5vcHRpb24oXCItLWZvbGRlciA8U3RyaW5nPlwiLCBcIm91dHB1dCBmb2xkZXJcIiwgXCJkb2NrZXIvZG9ja2VyLWRhdGFcIilcbiAgLm9wdGlvbihcIi0tb3JnIFtTdHJpbmddXCIsIFwidGhlIG9yZy9wZWVyIHRvIGV4dHJhY3QgZnJvbVwiLCBcIm9yZy1hXCIpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJnZXQtY3J5cHRvLW1hdGVyaWFsXCIpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBydW5uaW5nIHdpdGggb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX0gZm9yICR7cGtnLm5hbWV9IHZlcnNpb24gJHt2ZXJzaW9ufWBcbiAgICApO1xuICAgIGNvbnN0IHsgZm9sZGVyLCBvcmcgfSA9IG9wdGlvbnM7XG4gICAgZXhlY1N5bmMoYGRvY2tlciBjcCAke29yZ306L3dlYXZlci9jbGllbnQvLiAke2ZvbGRlcn1gLCB7XG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgfSk7XG4gIH0pO1xuXG5jb25zdCBmYWJyaWNDbWQgPSBuZXcgQ29tbWFuZCgpXG4gIC5uYW1lKFwiZm9yLWZhYnJpY1wiKVxuICAuY29tbWFuZChcImZhYnJpY1wiKVxuICAuZGVzY3JpcHRpb24oXG4gICAgXCJleHBvc2VzIHNldmVyYWwgY29tbWFuZHMgdG8gaGVscCBtYW5hZ2UgdGhlIGZhYnJpYyBpbmZyYXN0cnVjdHVyZVwiXG4gICk7XG5cbmZhYnJpY0NtZC5hZGRDb21tYW5kKGNvbXBpbGVDb21tYW5kKTtcbmZhYnJpY0NtZC5hZGRDb21tYW5kKGV4dHJhY3RJbmRleGVzKTtcbmZhYnJpY0NtZC5hZGRDb21tYW5kKGVuc3VyZUluZnJhKTtcbmZhYnJpY0NtZC5hZGRDb21tYW5kKGRlcGxveUNvbnRyYWN0KTtcbmZhYnJpY0NtZC5hZGRDb21tYW5kKGdldENyeXB0b01hdGVyaWFsKTtcbmZhYnJpY0NtZC5hZGRDb21tYW5kKGV4dHJhY3RDb2xsZWN0aW9ucyk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZhYnJpYygpIHtcbiAgcmV0dXJuIGZhYnJpY0NtZDtcbn1cbiJdfQ==
@@ -253,4 +253,4 @@ export function compileWithTsconfigOverrides(tsconfigPath, overrides) {
253
253
  throw new Error("Emit was skipped (check diagnostics above).");
254
254
  }
255
255
  }
256
- //# sourceMappingURL=cli-utils.js.map
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFNUIsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxnQkFBd0IsbUJBQW1CO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FDckIsa0JBQWtCLGFBQWEsaUNBQWlDLENBQ2pFO2FBQ0UsUUFBUSxFQUFFO2FBQ1YsSUFBSSxFQUFFLENBQUM7UUFFVixPQUFPLE1BQU0sS0FBSyxHQUFHLENBQUM7SUFDeEIsQ0FBQztJQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsMEJBQTBCLENBQzlDLGdCQUF3QixtQkFBbUIsRUFDM0MsVUFBa0IsSUFBSSxFQUN0QixXQUFtQixFQUFFO0lBRXJCLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQzdDLElBQUksRUFBRSxRQUFRLElBQUksQ0FBQztZQUFFLE1BQU0sSUFBSSxhQUFhLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUUxRSxPQUFPLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDckQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENB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QyxPQUFPLENBQUMsQ0FBQztJQUNsRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQixvRUFBb0U7UUFDcEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7SUFDckQsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDakUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZGlkSW5mcmFzdHJ1Y3R1cmVCb290KFxuICBjb250YWluZXJOYW1lOiBzdHJpbmcgPSBcImJvb3Qtb3JnLWMtcGVlci0wXCJcbik6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dCA9IGV4ZWNTeW5jKFxuICAgICAgYGRvY2tlciBpbnNwZWN0ICR7Y29udGFpbmVyTmFtZX0gLS1mb3JtYXQ9J3t7LlN0YXRlLkV4aXRDb2RlfX0nYFxuICAgIClcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAudHJpbSgpO1xuXG4gICAgcmV0dXJuIG91dHB1dCA9PT0gXCIwXCI7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIGluc3BlY3RpbmcgY29udGFpbmVyOlwiLCBlcnIubWVzc2FnZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVJbmZyYXN0cnVjdHVyZUJvb3RlZChcbiAgY29udGFpbmVyTmFtZTogc3RyaW5nID0gXCJib290LW9yZy1jLXBlZXItMFwiLFxuICB0aW1lb3V0OiBudW1iZXIgPSA1MDAwLFxuICBhdHRlbXB0czogbnVtYmVyID0gMTBcbik6IFByb21pc2U8dm9pZD4ge1xuICB3aGlsZSAoIWRpZEluZnJhc3RydWN0dXJlQm9vdChjb250YWluZXJOYW1lKSkge1xuICAgIGlmICgtLWF0dGVtcHRzIDw9IDApIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiZXhjZWVkZWQgYWxsb3dlZCBhdHRlbXB0c1wiKTtcblxuICAgIGNvbnNvbGUubG9nKFwiV2FpdGluZyBmb3IgaW5mcmFzdHJ1Y3R1cmUgdG8gYm9vdC4uLlwiKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCB0aW1lb3V0KSk7IC8vIFdhaXQgZm9yIDUgc2Vjb25kcyBiZWZvcmUgcmV0cnlpbmdcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZUNvbnRyYWN0KFxuICBkb2NrZXJOYW1lOiBzdHJpbmcsXG4gIGNvbnRyYWN0Rm9sZGVyOiBzdHJpbmcsXG4gIGNvbnRyYWN0TmFtZTogc3RyaW5nLFxuICB2ZXJzaW9uOiBzdHJpbmcgPSBcIjEuMFwiXG4pOiB2b2lkIHtcbiAgZXhlY1N5bmMoYGRvY2tlciBleGVjICR7ZG9ja2VyTmFtZX0gbm9kZSAuL3dlYXZlci9saWIvY29yZS9jbGkuY2pzIHBhY2thZ2UtY2hhaW5jb2RlIC1kIFxcXG4gICAgLS1jaGFpbmNvZGUtcGF0aCAuL3dlYXZlci9jaGFpbmNvZGUvJHtjb250cmFjdEZvbGRlcn0gXFxcbiAgICAtLWxhbmcgbm9kZSBcXFxuICAgIC0tY2hhaW5jb2RlLW91dHB1dCAvd2VhdmVyL3BlZXIvJHtjb250cmFjdE5hbWV9LnRhci5neiBcXFxuICAgIC0tY2hhaW5jb2RlLW5hbWUgJHtjb250cmFjdE5hbWV9IFxcXG4gICAgLS1jaGFpbmNvZGUtdmVyc2lvbiAke3ZlcnNpb259IC1zXG4gICAgYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsQ29udHJhY3QoZG9ja2VyTmFtZTogc3RyaW5nLCBjb250cmFjdE5hbWU6IHN0cmluZykge1xuICBleGVjU3luYyhcbiAgICBgZG9ja2VyIGV4ZWMgJHtkb2NrZXJOYW1lfSBub2RlIC4vd2VhdmVyL2xpYi9jb3JlL2NsaS5janMgaW5zdGFsbC1jaGFpbmNvZGUgLWQgLXMgLS1jaGFpbmNvZGUtcGF0aCAuL3dlYXZlci9wZWVyLyR7Y29udHJhY3ROYW1lfS50YXIuZ3pgXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHByb3ZlQ29udHJhY3QoXG4gIGRvY2tlck5hbWU6IHN0cmluZyxcbiAgY29udHJhY3ROYW1lOiBzdHJpbmcsXG4gIHRsc0NlcnROYW1lOiBzdHJpbmcsXG4gIHNlcXVlbmNlOiBudW1iZXIgPSAxLFxuICB2ZXJzaW9uOiBzdHJpbmcgPSBcIjEuMFwiLFxuICBjb2xsZWN0aW9uc0NvbmZpZz86IHN0cmluZ1xuKSB7XG4gIGNvbnN0IGNvbGxlY3Rpb25zRmxhZyA9IGNvbGxlY3Rpb25zQ29uZmlnXG4gICAgPyBgIC0tY29sbGVjdGlvbnMtY29uZmlnIFwiJHtjb2xsZWN0aW9uc0NvbmZpZ31cImBcbiAgICA6IFwiXCI7XG4gIGV4ZWNTeW5jKGBkb2NrZXIgZXhlYyAke2RvY2tlck5hbWV9IG5vZGUgLi93ZWF2ZXIvbGliL2NvcmUvY2xpLmNqcyBhcHByb3ZlLWNoYWluY29kZSAtZCAtcyBcXFxuICAgIC0tb3JkZXJlci1hZGRyZXNzIG9yZy1hLW9yZGVyZXItMDo3MDIxIFxcXG4gICAgLS1jaGFubmVsLWlkIHNpbXBsZS1jaGFubmVsIFxcXG4gICAgLS1jaGFpbmNvZGUtbmFtZSAke2NvbnRyYWN0TmFtZX0gXFxcbiAgICAtLWNoYWluY29kZS12ZXJzaW9uICR7dmVyc2lvbn0gXFxcbiAgICAtLXNlcXVlbmNlICR7c2VxdWVuY2V9JHtjb2xsZWN0aW9uc0ZsYWd9IFxcXG4gICAgLS1lbmFibGUtdGxzIFxcXG4gICAgLS10bHMtY2EtY2VydC1maWxlIC93ZWF2ZXIvcGVlci8ke3Rsc0NlcnROYW1lfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVwbG95Q29udHJhY3QoXG4gIGNvbnRyYWN0Rm9sZGVyOiBzdHJpbmcsXG4gIGNvbnRyYWN0TmFtZTogc3RyaW5nLFxuICB2ZXJzaW9uOiBzdHJpbmcgPSBcIjEuMFwiLFxuICBwZWVyczogc3RyaW5nW10gPSBbXCJvcmctYS1wZWVyLTBcIiwgXCJvcmctYi1wZWVyLTBcIiwgXCJvcmctYy1wZWVyLTBcIl1cbikge1xuICBsZXQgc2VxdWVuY2U6IG51bWJlcjtcbiAgY29uc3QgY291bnRQYXRoID0gcGF0aC5yZXNvbHZlKFxuICAgIHBhdGguam9pbihcbiAgICAgIGAke19fZGlybmFtZX1gLFxuICAgICAgXCIuLlwiLFxuICAgICAgXCJpbnRlZ3JhdGlvblwiLFxuICAgICAgXCJjaGFpbmNvZGVUcmFja2Vyc1wiLFxuICAgICAgYCR7Y29udHJhY3ROYW1lfS5jb3VudGBcbiAgICApXG4gICk7XG4gIHRyeSB7XG4gICAgc2VxdWVuY2UgPSBwYXJzZUludChmcy5yZWFkRmlsZVN5bmMoY291bnRQYXRoKS50b1N0cmluZyhcInV0Zi04XCIpKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICBzZXF1ZW5jZSA9IDE7XG4gIH1cbiAgZnMud3JpdGVGaWxlU3luYyhjb3VudFBhdGgsIHNlcXVlbmNlLnRvU3RyaW5nKCkpO1xuXG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBwZWVyIG9mIHBlZXJzKSB7XG4gICAgICBwYWNrYWdlQ29udHJhY3QocGVlciwgY29udHJhY3RGb2xkZXIsIGNvbnRyYWN0TmFtZSwgdmVyc2lvbik7XG4gICAgICBpbnN0YWxsQ29udHJhY3QocGVlciwgY29udHJhY3ROYW1lKTtcbiAgICAgIGFwcHJvdmVDb250cmFjdChcbiAgICAgICAgcGVlcixcbiAgICAgICAgY29udHJhY3ROYW1lLFxuICAgICAgICBwZWVyID09PSBcIm9yZy1hLXBlZXItMFwiID8gXCJ0bHMtY2EtY2VydC5wZW1cIiA6IFwib3JkZXJlci10bHMtY2EtY2VydC5wZW1cIixcbiAgICAgICAgc2VxdWVuY2UsXG4gICAgICAgIHZlcnNpb25cbiAgICAgICk7XG4gICAgfVxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgZGVwbG95aW5nIGNvbnRyYWN0OlwiLCBlcnIubWVzc2FnZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1pdENoYWluY29kZShcbiAgY29udHJhY3ROYW1lOiBzdHJpbmcsXG4gIHNlcXVlbmNlOiBudW1iZXIgPSAxLFxuICB2ZXJzaW9uOiBzdHJpbmcgPSBcIjEuMFwiLFxuICBjb2xsZWN0aW9uc0NvbmZpZz86IHN0cmluZ1xuKTogdm9pZCB7XG4gIGNvbnN0IGNvbGxlY3Rpb25zRmxhZyA9IGNvbGxlY3Rpb25zQ29uZmlnXG4gICAgPyBgIC0tY29sbGVjdGlvbnMtY29uZmlnIFwiJHtjb2xsZWN0aW9uc0NvbmZpZ31cImBcbiAgICA6IFwiXCI7XG4gIGV4ZWNTeW5jKGBkb2NrZXIgZXhlYyBvcmctYS1wZWVyLTAgbm9kZSAuL3dlYXZlci9saWIvY29yZS9jbGkuY2pzIGNvbW1pdC1jaGFpbmNvZGUgLWQgLXMgXFxcbiAgICAtLW9yZGVyZXItYWRkcmVzcyBvcmctYS1vcmRlcmVyLTA6NzAyMSBcXFxuICAgIC0tY2hhbm5lbC1pZCBzaW1wbGUtY2hhbm5lbCBcXFxuICAgIC0tY2hhaW5jb2RlLW5hbWUgJHtjb250cmFjdE5hbWV9IFxcXG4gICAgLS1jaGFpbmNvZGUtdmVyc2lvbiAke3ZlcnNpb259IFxcXG4gICAgLS1zZXF1ZW5jZSAke3NlcXVlbmNlfSR7Y29sbGVjdGlvbnNGbGFnfSBcXFxuICAgIC0tZW5hYmxlLXRscyBcXFxuICAgIC0tdGxzLWNhLWNlcnQtZmlsZSAvd2VhdmVyL3BlZXIvdGxzLWNhLWNlcnQucGVtIFxcXG4gICAgLS1wZWVyLWFkZHJlc3NlcyBvcmctYS1wZWVyLTA6NzAzMSxvcmctYi1wZWVyLTA6NzAzMixvcmctYy1wZWVyLTA6NzAzMyBcXFxuICAgIC0tcGVlci1yb290LXRscyAuL3dlYXZlci9wZWVyL3Rscy1jYS1jZXJ0LnBlbSwuL3dlYXZlci9wZWVyL29yZy1iLXRscy1jYS1jZXJ0LnBlbSwuL3dlYXZlci9wZWVyL29yZy1jLXRscy1jYS1jZXJ0LnBlbWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlQ29udHJhY3RSZWFkaW5lc3MoXG4gIGNvbnRyYWN0TmFtZTogc3RyaW5nLFxuICBkb2NrZXJOYW1lOiBzdHJpbmcgPSBcIm9yZy1hLXBlZXItMFwiLFxuICB0bHNDZXJ0OiBzdHJpbmcgPSBcInRscy1jYS1jZXJ0LnBlbVwiLFxuICBjb3VudGVyID0gMFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgdHJ5IHtcbiAgICAvLyBQcmVwYXJlIHRoZSBKU09OIGFyZ3VtZW50IGZvciB0aGUgY2hhaW5jb2RlXG4gICAgY29uc3QgY2hhaW5jb2RlQXJncyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGZ1bmN0aW9uOiBcImhlYWx0aGNoZWNrXCIsXG4gICAgICBBcmdzOiBbXSxcbiAgICB9KTtcblxuICAgIGlmIChjb3VudGVyID4gMTApIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIC8vIEludm9rZSB0aGUgY2hhaW5jb2RlXG4gICAgY29uc3QgcmVzID0gZXhlY1N5bmMoXG4gICAgICBgZG9ja2VyIGV4ZWMgJHtkb2NrZXJOYW1lfSBwZWVyIGNoYWluY29kZSBxdWVyeSBcXFxuICAgICAgICAtQyBzaW1wbGUtY2hhbm5lbCBcXFxuICAgICAgICAtbiAke2NvbnRyYWN0TmFtZX0gXFxcbiAgICAgICAgLWMgJyR7Y2hhaW5jb2RlQXJnc30nIFxcXG4gICAgICAgIC0tdGxzIC0tY2FmaWxlIC93ZWF2ZXIvcGVlci8ke3Rsc0NlcnR9YFxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKHJlcy50b1N0cmluZygpKTtcblxuICAgIHJldHVybiByZXN1bHQuaGVhbHRoY2hlY2sudG9TdHJpbmcoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY29uc29sZS5sb2coXCJDaGFpbmNvZGUgbm90IHJlYWR5LiBSZXRyeWluZy4uLlwiKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MDAwKSk7IC8vIFdhaXQgZm9yIDUgc2Vjb25kcyBiZWZvcmUgcmV0cnlpbmdcbiAgICByZXR1cm4gZW5zdXJlQ29udHJhY3RSZWFkaW5lc3MoXG4gICAgICBjb250cmFjdE5hbWUsXG4gICAgICBkb2NrZXJOYW1lLFxuICAgICAgdGxzQ2VydCxcbiAgICAgIGNvdW50ZXIrK1xuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zb2xlLndhcm4oXCJDb250cmFjdCBub3QgdHJpbW1pbmcgcmVzcG9uc2UgcHJvcGVybHk6IFwiLCBzdHIpO1xuICByZXR1cm4gc3RyLnRyaW0oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUNoYWluY29kZShcbiAgY29udHJhY3ROYW1lOiBzdHJpbmcsXG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICBhcmdzOiBhbnlbXSxcbiAgdHJhbnNpZW50OiBhbnkgPSB7fSxcbiAgZG9ja2VyTmFtZTogc3RyaW5nID0gXCJvcmctYS1wZWVyLTBcIixcbiAgdGxzOiBzdHJpbmcgPSBcInRscy1jYS1jZXJ0LnBlbVwiXG4pIHtcbiAgLy8gUHJlcGFyZSB0aGUgSlNPTiBhcmd1bWVudCBmb3IgdGhlIGNoYWluY29kZVxuICBjb25zdCBjaGFpbmNvZGVBcmdzID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgIGZ1bmN0aW9uOiBmdW5jdGlvbk5hbWUsXG4gICAgQXJnczogYXJncyxcbiAgfSk7XG5cbiAgY29uc3QgdHJhbnNpZW50RGF0YSA9IEpTT04uc3RyaW5naWZ5KHRyYW5zaWVudCk7XG4gIGNvbnN0IHRyYW5zaWVudFN0cmluZyA9IGAtLXRyYW5zaWVudCAnJHt0cmFuc2llbnREYXRhfSdgO1xuXG4gIC8vIEludm9rZSB0aGUgY2hhaW5jb2RlXG4gIHJldHVybiBleGVjU3luYyhcbiAgICBgZG9ja2VyIGV4ZWMgJHtkb2NrZXJOYW1lfSBwZWVyIGNoYWluY29kZSBpbnZva2UgXFxcbiAgICAtQyBzaW1wbGUtY2hhbm5lbCBcXFxuICAgIC1uICR7Y29udHJhY3ROYW1lfSBcXFxuICAgIC1jICcke2NoYWluY29kZUFyZ3N9JyBcXFxuICAgIC0tcGVlckFkZHJlc3NlcyBvcmctYS1wZWVyLTA6NzAzMSBcXFxuICAgIC0tdGxzUm9vdENlcnRGaWxlcyAvd2VhdmVyL3BlZXIvdGxzLWNhLWNlcnQucGVtIFxcXG4gICAgLS1wZWVyQWRkcmVzc2VzIG9yZy1iLXBlZXItMDo3MDMyIFxcXG4gICAgLS10bHNSb290Q2VydEZpbGVzIC93ZWF2ZXIvcGVlci9vcmctYi10bHMtY2EtY2VydC5wZW0gXFxcbiAgICAtLXBlZXJBZGRyZXNzZXMgb3JnLWMtcGVlci0wOjcwMzMgXFxcbiAgICAtLXRsc1Jvb3RDZXJ0RmlsZXMgL3dlYXZlci9wZWVyL29yZy1jLXRscy1jYS1jZXJ0LnBlbSBcXFxuICAgIC1vIG9yZy1hLW9yZGVyZXItMDo3MDIxIFxcXG4gICAgLS10bHMgLS1jYWZpbGUgL3dlYXZlci9wZWVyLyR7dGxzfSBcXFxuICAgICR7dHJhbnNpZW50ID8gdHJhbnNpZW50U3RyaW5nIDogXCJcIn1gXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUNoYWluY29kZShcbiAgY29udHJhY3ROYW1lOiBzdHJpbmcsXG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICBhcmdzOiBhbnlbXSxcbiAgZG9ja2VyTmFtZTogc3RyaW5nID0gXCJvcmctYS1wZWVyLTBcIixcbiAgdGxzOiBzdHJpbmcgPSBcInRscy1jYS1jZXJ0LnBlbVwiXG4pIHtcbiAgdHJ5IHtcbiAgICAvLyBQcmVwYXJlIHRoZSBKU09OIGFyZ3VtZW50IGZvciB0aGUgY2hhaW5jb2RlXG4gICAgY29uc3QgY2hhaW5jb2RlQXJncyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGZ1bmN0aW9uOiBmdW5jdGlvbk5hbWUsXG4gICAgICBBcmdzOiBhcmdzLFxuICAgIH0pO1xuXG4gICAgLy8gSW52b2tlIHRoZSBjaGFpbmNvZGVcbiAgICBjb25zdCByZXMgPSBleGVjU3luYyhcbiAgICAgIGBkb2NrZXIgZXhlYyAke2RvY2tlck5hbWV9IHBlZXIgY2hhaW5jb2RlIHF1ZXJ5IFxcXG4gICAgICAgIC1DIHNpbXBsZS1jaGFubmVsIFxcXG4gICAgICAgIC1uICR7Y29udHJhY3ROYW1lfSBcXFxuICAgICAgICAtYyAnJHtjaGFpbmNvZGVBcmdzfScgXFxcbiAgICAgICAgLS10bHMgLS1jYWZpbGUgJHt0bHN9YFxuICAgICk7XG5cbiAgICBjb25zdCBwcm9jZXNzZWQgPSByZXMudG9TdHJpbmcoKTtcbiAgICBjb25zb2xlLmxvZyhcIkJsb2NrY2hhaW4gcmVhZDpcIiwgcHJvY2Vzc2VkKTtcblxuICAgIHJldHVybiBwcm9jZXNzZWQ7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY29uc29sZS5sb2coXCJGYWlsZWQgdG8gcmVhZCBibG9ja2NoYWluXCIpO1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUHJpdmF0ZUNoYWluY29kZShcbiAgY29udHJhY3ROYW1lOiBzdHJpbmcsXG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICBhcmdzOiBhbnlbXSxcbiAgdHJhbnNpZW50OiBhbnkgPSB7fSxcbiAgZG9ja2VyTmFtZTogc3RyaW5nID0gXCJvcmctYS1wZWVyLTBcIixcbiAgdGxzOiBzdHJpbmcgPSBcInRscy1jYS1jZXJ0LnBlbVwiXG4pIHtcbiAgLy8gUHJlcGFyZSB0aGUgSlNPTiBhcmd1bWVudCBmb3IgdGhlIGNoYWluY29kZVxuICBjb25zdCBjaGFpbmNvZGVBcmdzID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgIGZ1bmN0aW9uOiBmdW5jdGlvbk5hbWUsXG4gICAgQXJnczogYXJncyxcbiAgfSk7XG5cbiAgY29uc3QgdHJhbnNpZW50RGF0YSA9IEpTT04uc3RyaW5naWZ5KHRyYW5zaWVudCk7XG4gIGNvbnN0IHRyYW5zaWVudFN0cmluZyA9IGAtLXRyYW5zaWVudCAnJHt0cmFuc2llbnREYXRhfSdgO1xuXG4gIC8vIEludm9rZSB0aGUgY2hhaW5jb2RlXG4gIHJldHVybiBleGVjU3luYyhcbiAgICBgZG9ja2VyIGV4ZWMgJHtkb2NrZXJOYW1lfSBwZWVyIGNoYWluY29kZSBpbnZva2UgXFxcbiAgICAtQyBzaW1wbGUtY2hhbm5lbCBcXFxuICAgIC1uICR7Y29udHJhY3ROYW1lfSBcXFxuICAgIC1jICcke2NoYWluY29kZUFyZ3N9JyBcXFxuICAgIC0tcGVlckFkZHJlc3NlcyBvcmctYS1wZWVyLTA6NzAzMSBcXFxuICAgIC0tdGxzUm9vdENlcnRGaWxlcyAvd2VhdmVyL3BlZXIvdGxzLWNhLWNlcnQucGVtIFxcXG4gICAgLW8gb3JnLWEtb3JkZXJlci0wOjcwMjEgXFxcbiAgICAtLXRscyAtLWNhZmlsZSAvd2VhdmVyL3BlZXIvJHt0bHN9IFxcXG4gICAgJHt0cmFuc2llbnQgPyB0cmFuc2llbnRTdHJpbmcgOiBcIlwifWBcbiAgKTtcblxuICAvLyAgIC0tcGVlckFkZHJlc3NlcyBvcmctYi1wZWVyLTA6NzAzMiBcXFxuICAvLyAtLXRsc1Jvb3RDZXJ0RmlsZXMgL3dlYXZlci9wZWVyL29yZy1iLXRscy1jYS1jZXJ0LnBlbSBcXFxuICAvLyAtLXBlZXJBZGRyZXNzZXMgb3JnLWMtcGVlci0wOjcwMzMgXFxcbiAgLy8gLS10bHNSb290Q2VydEZpbGVzIC93ZWF2ZXIvcGVlci9vcmctYy10bHMtY2EtY2VydC5wZW0gXFxcbn1cblxuZXhwb3J0IGVudW0gU2NyaXB0Q29tbWFuZHMge1xuICBTVEFSVCA9IFwiZmFicmljLWNoYWluY29kZS1ub2RlIHN0YXJ0IFxcXG4gICAgICAgICAgLS1ncnBjLm1heF9yZWNlaXZlX21lc3NhZ2VfbGVuZ3RoICR7Q0hBSU5DT0RFX01BWFJFQ1ZNU0dTSVpFLTE1NzI4NjQwfSBcXFxuICAgICAgICAgIC0tZ3JwYy5tYXhfc2VuZF9tZXNzYWdlX2xlbmd0aCAke0NIQUlOQ09ERV9NQVhTRU5ETVNHU0laRS0xNTcyODY0MH0gXCIsXG4gIFNUQVJUX0NDQUFTID0gXCJmYWJyaWMtY2hhaW5jb2RlLW5vZGUgc2VydmVyIFxcXG4gICAgICAgICAgLS1jaGFpbmNvZGUtYWRkcmVzcz0kQ0hBSU5DT0RFX1NFUlZFUl9BRERSRVNTIFxcXG4gICAgICAgICAgLS1jaGFpbmNvZGUtaWQ9JENIQUlOQ09ERV9JRCBcXFxuICAgICAgICAgIC0tY2hhaW5jb2RlLXRscy1jZXJ0LWZpbGU9JHtDSEFJTkNPREVfVExTX0NFUlR9IFxcXG4gICAgICAgICAgLS1jaGFpbmNvZGUtdGxzLWtleS1maWxlPSR7Q0hBSU5DT0RFX1RMU19LRVl9IFxcXG4gICAgICAgICAgLS1ncnBjLm1heF9yZWNlaXZlX21lc3NhZ2VfbGVuZ3RoICR7Q0hBSU5DT0RFX01BWFJFQ1ZNU0dTSVpFLTE1NzI4NjQwfSBcXFxuICAgICAgICAgIC0tZ3JwYy5tYXhfc2VuZF9tZXNzYWdlX2xlbmd0aCAke0NIQUlOQ09ERV9NQVhTRU5ETVNHU0laRS0xNTcyODY0MH0gXFxcbiAgICAgICAgICAtLXRscy5lbmFibGVkPXRydWVcIixcbiAgU1RBUlRfQ0NBQVNfREVCVUcgPSBcIm5vZGUgLS1pbnNwZWN0PTAuMC4wLjA6OTIyOSAuL25vZGVfbW9kdWxlcy8uYmluL2ZhYnJpYy1jaGFpbmNvZGUtbm9kZSBzZXJ2ZXIgXFxcbiAgICAgICAgICAtLWNoYWluY29kZS1hZGRyZXNzPSRDSEFJTkNPREVfU0VSVkVSX0FERFJFU1MgXFxcbiAgICAgICAgICAtLWNoYWluY29kZS1pZD0kQ0hBSU5DT0RFX0lEIFxcXG4gICAgICAgICAgLS1jaGFpbmNvZGUtdGxzLWNlcnQtZmlsZT0ke0NIQUlOQ09ERV9UTFNfQ0VSVH0gXFxcbiAgICAgICAgICAtLWNoYWluY29kZS10bHMta2V5LWZpbGU9JHtDSEFJTkNPREVfVExTX0tFWX0gXFxcbiAgICAgICAgICAtLWdycGMubWF4X3JlY2VpdmVfbWVzc2FnZV9sZW5ndGggJHtDSEFJTkNPREVfTUFYUkVDVk1TR1NJWkUtMTU3Mjg2NDB9IFxcXG4gICAgICAgICAgLS1ncnBjLm1heF9zZW5kX21lc3NhZ2VfbGVuZ3RoICR7Q0hBSU5DT0RFX01BWFNFTkRNU0dTSVpFLTE1NzI4NjQwfSBcXFxuICAgICAgICAgIC0tdGxzLmVuYWJsZWQ9dHJ1ZVwiLFxuICBTVEFSVF9ERUJVRyA9IFwibm9kZSAtLWluc3BlY3Q9MC4wLjAuMDo5MjI5IC91c3IvbG9jYWwvc3JjL25vZGVfbW9kdWxlcy8uYmluL2ZhYnJpYy1jaGFpbmNvZGUtbm9kZSBzdGFydCBcXFxuICAgICAgICAgIC0tZ3JwYy5tYXhfcmVjZWl2ZV9tZXNzYWdlX2xlbmd0aCAke0NIQUlOQ09ERV9NQVhSRUNWTVNHU0laRS0xNTcyODY0MH0gXFxcbiAgICAgICAgICAtLWdycGMubWF4X3NlbmRfbWVzc2FnZV9sZW5ndGggJHtDSEFJTkNPREVfTUFYU0VORE1TR1NJWkUtMTU3Mjg2NDB9XCIsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cmFjdFN0YXJ0Q29tbWFuZChcbiAgZGVidWc6IGJvb2xlYW4sXG4gIGNjYWFzOiBib29sZWFuXG4pOiBzdHJpbmcge1xuICBpZiAoY2NhYXMpIHtcbiAgICByZXR1cm4gZGVidWdcbiAgICAgID8gU2NyaXB0Q29tbWFuZHMuU1RBUlRfQ0NBQVNfREVCVUdcbiAgICAgIDogU2NyaXB0Q29tbWFuZHMuU1RBUlRfQ0NBQVM7XG4gIH1cbiAgcmV0dXJuIGRlYnVnID8gU2NyaXB0Q29tbWFuZHMuU1RBUlRfREVCVUcgOiBTY3JpcHRDb21tYW5kcy5TVEFSVDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGlhZ25vc3RpY3MoZGlhZ3M6IHJlYWRvbmx5IHRzLkRpYWdub3N0aWNbXSk6IHN0cmluZyB7XG4gIGNvbnN0IGhvc3Q6IHRzLkZvcm1hdERpYWdub3N0aWNzSG9zdCA9IHtcbiAgICBnZXRDYW5vbmljYWxGaWxlTmFtZTogKGYpID0+IGYsXG4gICAgZ2V0Q3VycmVudERpcmVjdG9yeTogdHMuc3lzLmdldEN1cnJlbnREaXJlY3RvcnksXG4gICAgZ2V0TmV3TGluZTogKCkgPT4gdHMuc3lzLm5ld0xpbmUsXG4gIH07XG4gIHJldHVybiB0cy5mb3JtYXREaWFnbm9zdGljc1dpdGhDb2xvckFuZENvbnRleHQoZGlhZ3MsIGhvc3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZVdpdGhUc2NvbmZpZ092ZXJyaWRlcyhcbiAgdHNjb25maWdQYXRoOiBzdHJpbmcsXG4gIG92ZXJyaWRlczogUGFydGlhbDx0cy5Db21waWxlck9wdGlvbnM+XG4pOiB2b2lkIHtcbiAgY29uc3QgYWJzQ29uZmlnUGF0aCA9IHBhdGguaXNBYnNvbHV0ZSh0c2NvbmZpZ1BhdGgpXG4gICAgPyB0c2NvbmZpZ1BhdGhcbiAgICA6IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCB0c2NvbmZpZ1BhdGgpO1xuXG4gIC8vIDEpIFJlYWQgdGhlIHRzY29uZmlnLmpzb25cbiAgY29uc3QgY29uZmlnRmlsZSA9IHRzLnJlYWRDb25maWdGaWxlKGFic0NvbmZpZ1BhdGgsIHRzLnN5cy5yZWFkRmlsZSk7XG4gIGlmIChjb25maWdGaWxlLmVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdERpYWdub3N0aWNzKFtjb25maWdGaWxlLmVycm9yXSkpO1xuICB9XG5cbiAgLy8gMikgUGFyc2UgaXQgKHJlc29sdmVzIFwiZXh0ZW5kc1wiLCBpbmNsdWRlL2V4Y2x1ZGUvZmlsZXMsIGV0Yy4pXG4gIGNvbnN0IGNvbmZpZ0RpciA9IHBhdGguZGlybmFtZShhYnNDb25maWdQYXRoKTtcbiAgY29uc3QgcGFyc2VkID0gdHMucGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQoXG4gICAgY29uZmlnRmlsZS5jb25maWcsXG4gICAgdHMuc3lzLFxuICAgIGNvbmZpZ0RpcixcbiAgICAvKmV4aXN0aW5nT3B0aW9ucyovIHVuZGVmaW5lZCxcbiAgICBhYnNDb25maWdQYXRoXG4gICk7XG5cbiAgaWYgKHBhcnNlZC5lcnJvcnMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdERpYWdub3N0aWNzKHBhcnNlZC5lcnJvcnMpKTtcbiAgfVxuXG4gIC8vIDMpIE92ZXJyaWRlIGNvbXBpbGVyIG9wdGlvbnMgaW4tbWVtb3J5XG4gIGNvbnN0IG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyA9IHtcbiAgICAuLi5wYXJzZWQub3B0aW9ucyxcbiAgICAuLi5vdmVycmlkZXMsXG4gIH07XG5cbiAgLy8gT3B0aW9uYWw6IElmIHlvdSBvdmVycmlkZSBvdXREaXIvcm9vdERpciwgZW5zdXJlIHRoZXnigJlyZSBhYnNvbHV0ZVxuICAvLyB0byBhdm9pZCBzdXJwcmlzZXMgZGVwZW5kaW5nIG9uIENXRC5cbiAgaWYgKG9wdGlvbnMub3V0RGlyKSBvcHRpb25zLm91dERpciA9IHBhdGgucmVzb2x2ZShjb25maWdEaXIsIG9wdGlvbnMub3V0RGlyKTtcbiAgaWYgKG9wdGlvbnMucm9vdERpcilcbiAgICBvcHRpb25zLnJvb3REaXIgPSBwYXRoLnJlc29sdmUoY29uZmlnRGlyLCBvcHRpb25zLnJvb3REaXIpO1xuXG4gIC8vIDQpIENyZWF0ZSBwcm9ncmFtICsgZW1pdFxuICBjb25zdCBwcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbSh7XG4gICAgcm9vdE5hbWVzOiBwYXJzZWQuZmlsZU5hbWVzLFxuICAgIG9wdGlvbnMsXG4gICAgcHJvamVjdFJlZmVyZW5jZXM6IHBhcnNlZC5wcm9qZWN0UmVmZXJlbmNlcyxcbiAgfSk7XG5cbiAgY29uc3QgcHJlRW1pdCA9IHRzLmdldFByZUVtaXREaWFnbm9zdGljcyhwcm9ncmFtKTtcbiAgaWYgKHByZUVtaXQubGVuZ3RoKSB7XG4gICAgLy8gSWYgeW91IHdhbnQgXCJ0cmFuc3BpbGUgYW55d2F5XCIsIHlvdSBjYW4gY2hvb3NlIHRvIG5vdCB0aHJvdyBoZXJlLlxuICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXREaWFnbm9zdGljcyhwcmVFbWl0KSk7XG4gIH1cblxuICBjb25zdCBlbWl0UmVzdWx0ID0gcHJvZ3JhbS5lbWl0KCk7XG4gIGNvbnN0IGVtaXREaWFnbm9zdGljcyA9IGVtaXRSZXN1bHQuZGlhZ25vc3RpY3MgPz8gW107XG4gIGlmIChlbWl0RGlhZ25vc3RpY3MubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdERpYWdub3N0aWNzKGVtaXREaWFnbm9zdGljcykpO1xuICB9XG5cbiAgaWYgKGVtaXRSZXN1bHQuZW1pdFNraXBwZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbWl0IHdhcyBza2lwcGVkIChjaGVjayBkaWFnbm9zdGljcyBhYm92ZSkuXCIpO1xuICB9XG59XG4iXX0=