@decaf-ts/for-fabric 0.12.10 → 0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/dist/for-fabric.cjs +2 -3804
  2. package/dist/for-fabric.cjs.map +1 -0
  3. package/dist/for-fabric.js +2 -3908
  4. package/dist/for-fabric.js.map +1 -0
  5. package/lib/cjs/bin/cli.cjs +2 -2
  6. package/lib/cjs/bin/cli.cjs.map +1 -0
  7. package/lib/cjs/cli-module.cjs +2 -2
  8. package/lib/cjs/cli-module.cjs.map +1 -0
  9. package/lib/cjs/cli-utils.cjs +2 -2
  10. package/lib/cjs/cli-utils.cjs.map +1 -0
  11. package/lib/cjs/client/FabricClientAdapter.cjs +149 -66
  12. package/lib/cjs/client/FabricClientAdapter.cjs.map +1 -0
  13. package/lib/cjs/client/FabricClientContext.cjs +30 -0
  14. package/lib/cjs/client/FabricClientContext.cjs.map +1 -0
  15. package/lib/cjs/client/FabricClientDispatch.cjs +2 -2
  16. package/lib/cjs/client/FabricClientDispatch.cjs.map +1 -0
  17. package/lib/cjs/client/FabricClientPaginator.cjs +2 -2
  18. package/lib/cjs/client/FabricClientPaginator.cjs.map +1 -0
  19. package/lib/cjs/client/FabricClientRepository.cjs +3 -3
  20. package/lib/cjs/client/FabricClientRepository.cjs.map +1 -0
  21. package/lib/cjs/client/FabricClientStatement.cjs +5 -4
  22. package/lib/cjs/client/FabricClientStatement.cjs.map +1 -0
  23. package/lib/cjs/client/collections/generation.cjs +2 -2
  24. package/lib/cjs/client/collections/generation.cjs.map +1 -0
  25. package/lib/cjs/client/collections/index.cjs +2 -2
  26. package/lib/cjs/client/collections/index.cjs.map +1 -0
  27. package/lib/cjs/client/constants.cjs +3 -2
  28. package/lib/cjs/client/constants.cjs.map +1 -0
  29. package/lib/cjs/client/crypto.cjs +2 -2
  30. package/lib/cjs/client/crypto.cjs.map +1 -0
  31. package/lib/cjs/client/erc20/FabricERC20ClientRepository.cjs +2 -2
  32. package/lib/cjs/client/erc20/FabricERC20ClientRepository.cjs.map +1 -0
  33. package/lib/cjs/client/erc20/index.cjs +2 -2
  34. package/lib/cjs/client/erc20/index.cjs.map +1 -0
  35. package/lib/cjs/client/fabric-fs.cjs +2 -2
  36. package/lib/cjs/client/fabric-fs.cjs.map +1 -0
  37. package/lib/cjs/client/fabric-hsm.cjs +2 -2
  38. package/lib/cjs/client/fabric-hsm.cjs.map +1 -0
  39. package/lib/cjs/client/ids/id-extraction.cjs +2 -2
  40. package/lib/cjs/client/ids/id-extraction.cjs.map +1 -0
  41. package/lib/cjs/client/ids/index.cjs +2 -2
  42. package/lib/cjs/client/ids/index.cjs.map +1 -0
  43. package/lib/cjs/client/index.cjs +3 -2
  44. package/lib/cjs/client/index.cjs.map +1 -0
  45. package/lib/cjs/client/indexes/generation.cjs +3 -15
  46. package/lib/cjs/client/indexes/generation.cjs.map +1 -0
  47. package/lib/cjs/client/indexes/index.cjs +2 -2
  48. package/lib/cjs/client/indexes/index.cjs.map +1 -0
  49. package/lib/cjs/client/logging.cjs +2 -2
  50. package/lib/cjs/client/logging.cjs.map +1 -0
  51. package/lib/cjs/client/services/FabricEnrollmentService.cjs +2 -2
  52. package/lib/cjs/client/services/FabricEnrollmentService.cjs.map +1 -0
  53. package/lib/cjs/client/services/FabricIdentityService.cjs +2 -2
  54. package/lib/cjs/client/services/FabricIdentityService.cjs.map +1 -0
  55. package/lib/cjs/client/services/RegistrationRequestBuilder.cjs +2 -2
  56. package/lib/cjs/client/services/RegistrationRequestBuilder.cjs.map +1 -0
  57. package/lib/cjs/client/services/constants.cjs +2 -2
  58. package/lib/cjs/client/services/constants.cjs.map +1 -0
  59. package/lib/cjs/client/services/index.cjs +2 -2
  60. package/lib/cjs/client/services/index.cjs.map +1 -0
  61. package/lib/cjs/client/types.cjs +2 -2
  62. package/lib/cjs/client/types.cjs.map +1 -0
  63. package/lib/cjs/client/utils.cjs +2 -2
  64. package/lib/cjs/client/utils.cjs.map +1 -0
  65. package/lib/cjs/contract/Address.cjs +2 -2
  66. package/lib/cjs/contract/Address.cjs.map +1 -0
  67. package/lib/cjs/contract/AddressContract.cjs +2 -2
  68. package/lib/cjs/contract/AddressContract.cjs.map +1 -0
  69. package/lib/cjs/contract/AuditContract.cjs +2 -2
  70. package/lib/cjs/contract/AuditContract.cjs.map +1 -0
  71. package/lib/cjs/contract/BatchContract.cjs +2 -2
  72. package/lib/cjs/contract/BatchContract.cjs.map +1 -0
  73. package/lib/cjs/contract/MarketContract.cjs +2 -2
  74. package/lib/cjs/contract/MarketContract.cjs.map +1 -0
  75. package/lib/cjs/contract/OtherAuditContract.cjs +2 -2
  76. package/lib/cjs/contract/OtherAuditContract.cjs.map +1 -0
  77. package/lib/cjs/contract/OtherBatchContract.cjs +2 -2
  78. package/lib/cjs/contract/OtherBatchContract.cjs.map +1 -0
  79. package/lib/cjs/contract/OtherLeafletContract.cjs +2 -2
  80. package/lib/cjs/contract/OtherLeafletContract.cjs.map +1 -0
  81. package/lib/cjs/contract/OtherLeafletFileContract.cjs +2 -2
  82. package/lib/cjs/contract/OtherLeafletFileContract.cjs.map +1 -0
  83. package/lib/cjs/contract/OtherMarketContract.cjs +2 -2
  84. package/lib/cjs/contract/OtherMarketContract.cjs.map +1 -0
  85. package/lib/cjs/contract/OtherProductContract.cjs +2 -2
  86. package/lib/cjs/contract/OtherProductContract.cjs.map +1 -0
  87. package/lib/cjs/contract/OtherProductImageContract.cjs +2 -2
  88. package/lib/cjs/contract/OtherProductImageContract.cjs.map +1 -0
  89. package/lib/cjs/contract/OtherProductSharedContract.cjs +2 -2
  90. package/lib/cjs/contract/OtherProductSharedContract.cjs.map +1 -0
  91. package/lib/cjs/contract/OtherProductStrengthContract.cjs +2 -2
  92. package/lib/cjs/contract/OtherProductStrengthContract.cjs.map +1 -0
  93. package/lib/cjs/contract/Product.cjs +2 -2
  94. package/lib/cjs/contract/Product.cjs.map +1 -0
  95. package/lib/cjs/contract/ProductContract.cjs +2 -2
  96. package/lib/cjs/contract/ProductContract.cjs.map +1 -0
  97. package/lib/cjs/contract/ProductStrengthContract.cjs +2 -2
  98. package/lib/cjs/contract/ProductStrengthContract.cjs.map +1 -0
  99. package/lib/cjs/contract/SegregatedPrivateDocumentContract.cjs +2 -2
  100. package/lib/cjs/contract/SegregatedPrivateDocumentContract.cjs.map +1 -0
  101. package/lib/cjs/contract/SegregatedSharedDocumentContract.cjs +2 -2
  102. package/lib/cjs/contract/SegregatedSharedDocumentContract.cjs.map +1 -0
  103. package/lib/cjs/contract/User.cjs +2 -2
  104. package/lib/cjs/contract/User.cjs.map +1 -0
  105. package/lib/cjs/contract/UserContract.cjs +2 -2
  106. package/lib/cjs/contract/UserContract.cjs.map +1 -0
  107. package/lib/cjs/contract/index.cjs +2 -2
  108. package/lib/cjs/contract/index.cjs.map +1 -0
  109. package/lib/cjs/contract/logging-context.cjs +2 -2
  110. package/lib/cjs/contract/logging-context.cjs.map +1 -0
  111. package/lib/cjs/contract/models/Audit.cjs +3 -5
  112. package/lib/cjs/contract/models/Audit.cjs.map +1 -0
  113. package/lib/cjs/contract/models/BaseIdentifiedModel.cjs +2 -2
  114. package/lib/cjs/contract/models/BaseIdentifiedModel.cjs.map +1 -0
  115. package/lib/cjs/contract/models/BaseModel.cjs +2 -2
  116. package/lib/cjs/contract/models/BaseModel.cjs.map +1 -0
  117. package/lib/cjs/contract/models/Batch.cjs +2 -2
  118. package/lib/cjs/contract/models/Batch.cjs.map +1 -0
  119. package/lib/cjs/contract/models/GtinOwner.cjs +2 -2
  120. package/lib/cjs/contract/models/GtinOwner.cjs.map +1 -0
  121. package/lib/cjs/contract/models/History.cjs +4 -78
  122. package/lib/cjs/contract/models/History.cjs.map +1 -0
  123. package/lib/cjs/contract/models/Leaflet.cjs +2 -2
  124. package/lib/cjs/contract/models/Leaflet.cjs.map +1 -0
  125. package/lib/cjs/contract/models/LeafletFile.cjs +2 -2
  126. package/lib/cjs/contract/models/LeafletFile.cjs.map +1 -0
  127. package/lib/cjs/contract/models/Market.cjs +2 -2
  128. package/lib/cjs/contract/models/Market.cjs.map +1 -0
  129. package/lib/cjs/contract/models/OtherAudit.cjs +2 -2
  130. package/lib/cjs/contract/models/OtherAudit.cjs.map +1 -0
  131. package/lib/cjs/contract/models/OtherBatchShared.cjs +5 -240
  132. package/lib/cjs/contract/models/OtherBatchShared.cjs.map +1 -0
  133. package/lib/cjs/contract/models/OtherLeaflet.cjs +7 -119
  134. package/lib/cjs/contract/models/OtherLeaflet.cjs.map +1 -0
  135. package/lib/cjs/contract/models/OtherLeafletFile.cjs +4 -68
  136. package/lib/cjs/contract/models/OtherLeafletFile.cjs.map +1 -0
  137. package/lib/cjs/contract/models/OtherMarket.cjs +4 -87
  138. package/lib/cjs/contract/models/OtherMarket.cjs.map +1 -0
  139. package/lib/cjs/contract/models/OtherProduct.cjs +4 -80
  140. package/lib/cjs/contract/models/OtherProduct.cjs.map +1 -0
  141. package/lib/cjs/contract/models/OtherProductImage.cjs +4 -62
  142. package/lib/cjs/contract/models/OtherProductImage.cjs.map +1 -0
  143. package/lib/cjs/contract/models/OtherProductShared.cjs +4 -102
  144. package/lib/cjs/contract/models/OtherProductShared.cjs.map +1 -0
  145. package/lib/cjs/contract/models/OtherProductStrength.cjs +4 -88
  146. package/lib/cjs/contract/models/OtherProductStrength.cjs.map +1 -0
  147. package/lib/cjs/contract/models/Product.cjs +2 -2
  148. package/lib/cjs/contract/models/Product.cjs.map +1 -0
  149. package/lib/cjs/contract/models/ProductStrength.cjs +2 -2
  150. package/lib/cjs/contract/models/ProductStrength.cjs.map +1 -0
  151. package/lib/cjs/contract/models/SegregatedDocument.cjs +4 -10
  152. package/lib/cjs/contract/models/SegregatedDocument.cjs.map +1 -0
  153. package/lib/cjs/contract/models/constants.cjs +2 -2
  154. package/lib/cjs/contract/models/constants.cjs.map +1 -0
  155. package/lib/cjs/contract/models/decorators-private.cjs +2 -2
  156. package/lib/cjs/contract/models/decorators-private.cjs.map +1 -0
  157. package/lib/cjs/contract/models/decorators.cjs +2 -5
  158. package/lib/cjs/contract/models/decorators.cjs.map +1 -0
  159. package/lib/cjs/contract/models/gtin.cjs +2 -2
  160. package/lib/cjs/contract/models/gtin.cjs.map +1 -0
  161. package/lib/cjs/contract/models/history-dec.cjs +2 -2
  162. package/lib/cjs/contract/models/history-dec.cjs.map +1 -0
  163. package/lib/cjs/contract/trackedModels/History.cjs +2 -2
  164. package/lib/cjs/contract/trackedModels/History.cjs.map +1 -0
  165. package/lib/cjs/contract/trackedModels/OtherAudit.cjs +2 -2
  166. package/lib/cjs/contract/trackedModels/OtherAudit.cjs.map +1 -0
  167. package/lib/cjs/contract/trackedModels/OtherBatchShared.cjs +129 -0
  168. package/lib/cjs/contract/trackedModels/OtherBatchShared.cjs.map +1 -0
  169. package/lib/cjs/contract/trackedModels/OtherLeaflet.cjs +2 -2
  170. package/lib/cjs/contract/trackedModels/OtherLeaflet.cjs.map +1 -0
  171. package/lib/cjs/contract/trackedModels/OtherLeafletFile.cjs +2 -2
  172. package/lib/cjs/contract/trackedModels/OtherLeafletFile.cjs.map +1 -0
  173. package/lib/cjs/contract/trackedModels/OtherMarket.cjs +2 -2
  174. package/lib/cjs/contract/trackedModels/OtherMarket.cjs.map +1 -0
  175. package/lib/cjs/contract/trackedModels/OtherProduct.cjs +2 -2
  176. package/lib/cjs/contract/trackedModels/OtherProduct.cjs.map +1 -0
  177. package/lib/cjs/contract/trackedModels/OtherProductImage.cjs +2 -2
  178. package/lib/cjs/contract/trackedModels/OtherProductImage.cjs.map +1 -0
  179. package/lib/cjs/contract/trackedModels/OtherProductShared.cjs +2 -2
  180. package/lib/cjs/contract/trackedModels/OtherProductShared.cjs.map +1 -0
  181. package/lib/cjs/contract/trackedModels/OtherProductStrength.cjs +2 -2
  182. package/lib/cjs/contract/trackedModels/OtherProductStrength.cjs.map +1 -0
  183. package/lib/cjs/contracts/ContractAdapter.cjs +41 -9
  184. package/lib/cjs/contracts/ContractAdapter.cjs.map +1 -0
  185. package/lib/cjs/contracts/ContractContext.cjs +2 -2
  186. package/lib/cjs/contracts/ContractContext.cjs.map +1 -0
  187. package/lib/cjs/contracts/FabricContractDispatch.cjs +2 -2
  188. package/lib/cjs/contracts/FabricContractDispatch.cjs.map +1 -0
  189. package/lib/cjs/contracts/FabricContractPaginator.cjs +2 -2
  190. package/lib/cjs/contracts/FabricContractPaginator.cjs.map +1 -0
  191. package/lib/cjs/contracts/FabricContractRepository.cjs +2 -2
  192. package/lib/cjs/contracts/FabricContractRepository.cjs.map +1 -0
  193. package/lib/cjs/contracts/FabricContractRepositoryObservableHandler.cjs +2 -2
  194. package/lib/cjs/contracts/FabricContractRepositoryObservableHandler.cjs.map +1 -0
  195. package/lib/cjs/contracts/FabricContractSequence.cjs +2 -2
  196. package/lib/cjs/contracts/FabricContractSequence.cjs.map +1 -0
  197. package/lib/cjs/contracts/FabricContractStatement.cjs +2 -2
  198. package/lib/cjs/contracts/FabricContractStatement.cjs.map +1 -0
  199. package/lib/cjs/contracts/MigrationContract.cjs +6 -7
  200. package/lib/cjs/contracts/MigrationContract.cjs.map +1 -0
  201. package/lib/cjs/contracts/PrivateSequence.cjs +2 -2
  202. package/lib/cjs/contracts/PrivateSequence.cjs.map +1 -0
  203. package/lib/cjs/contracts/auth/decorators.cjs +2 -2
  204. package/lib/cjs/contracts/auth/decorators.cjs.map +1 -0
  205. package/lib/cjs/contracts/auth/index.cjs +2 -2
  206. package/lib/cjs/contracts/auth/index.cjs.map +1 -0
  207. package/lib/cjs/contracts/bootstrap.cjs +2 -2
  208. package/lib/cjs/contracts/bootstrap.cjs.map +1 -0
  209. package/lib/cjs/contracts/crud/crud-contract.cjs +27 -23
  210. package/lib/cjs/contracts/crud/crud-contract.cjs.map +1 -0
  211. package/lib/cjs/contracts/crud/index.cjs +2 -2
  212. package/lib/cjs/contracts/crud/index.cjs.map +1 -0
  213. package/lib/cjs/contracts/crud/serialized-crud-contract.cjs +2 -2
  214. package/lib/cjs/contracts/crud/serialized-crud-contract.cjs.map +1 -0
  215. package/lib/cjs/contracts/erc20/erc20contract.cjs +2 -2
  216. package/lib/cjs/contracts/erc20/erc20contract.cjs.map +1 -0
  217. package/lib/cjs/contracts/erc20/index.cjs +2 -2
  218. package/lib/cjs/contracts/erc20/index.cjs.map +1 -0
  219. package/lib/cjs/contracts/erc20/models.cjs +2 -2
  220. package/lib/cjs/contracts/erc20/models.cjs.map +1 -0
  221. package/lib/cjs/contracts/fabric-overrides.cjs +2 -2
  222. package/lib/cjs/contracts/fabric-overrides.cjs.map +1 -0
  223. package/lib/cjs/contracts/index.cjs +2 -2
  224. package/lib/cjs/contracts/index.cjs.map +1 -0
  225. package/lib/cjs/contracts/logging.cjs +2 -2
  226. package/lib/cjs/contracts/logging.cjs.map +1 -0
  227. package/lib/cjs/contracts/overrides.cjs +2 -2
  228. package/lib/cjs/contracts/overrides.cjs.map +1 -0
  229. package/lib/cjs/contracts/types.cjs +2 -2
  230. package/lib/cjs/contracts/types.cjs.map +1 -0
  231. package/lib/cjs/contracts/uuid.cjs +2 -2
  232. package/lib/cjs/contracts/uuid.cjs.map +1 -0
  233. package/lib/cjs/index.cjs +2 -2
  234. package/lib/cjs/index.cjs.map +1 -0
  235. package/lib/cjs/shared/ClientSerializer.cjs +2 -2
  236. package/lib/cjs/shared/ClientSerializer.cjs.map +1 -0
  237. package/lib/cjs/shared/DeterministicSerializer.cjs +2 -2
  238. package/lib/cjs/shared/DeterministicSerializer.cjs.map +1 -0
  239. package/lib/cjs/shared/SimpleDeterministicSerializer.cjs +2 -2
  240. package/lib/cjs/shared/SimpleDeterministicSerializer.cjs.map +1 -0
  241. package/lib/cjs/shared/constants.cjs +6 -2
  242. package/lib/cjs/shared/constants.cjs.map +1 -0
  243. package/lib/cjs/shared/decorators.cjs +24 -3
  244. package/lib/cjs/shared/decorators.cjs.map +1 -0
  245. package/lib/cjs/shared/erc20/erc20-constants.cjs +2 -2
  246. package/lib/cjs/shared/erc20/erc20-constants.cjs.map +1 -0
  247. package/lib/cjs/shared/erc20/index.cjs +2 -2
  248. package/lib/cjs/shared/erc20/index.cjs.map +1 -0
  249. package/lib/cjs/shared/errors.cjs +2 -2
  250. package/lib/cjs/shared/errors.cjs.map +1 -0
  251. package/lib/cjs/shared/events.cjs +2 -2
  252. package/lib/cjs/shared/events.cjs.map +1 -0
  253. package/lib/cjs/shared/fabric-types.cjs +2 -2
  254. package/lib/cjs/shared/fabric-types.cjs.map +1 -0
  255. package/lib/cjs/shared/index.cjs +2 -2
  256. package/lib/cjs/shared/index.cjs.map +1 -0
  257. package/lib/cjs/shared/interfaces/Checkable.cjs +2 -2
  258. package/lib/cjs/shared/interfaces/Checkable.cjs.map +1 -0
  259. package/lib/cjs/shared/interfaces/index.cjs +2 -2
  260. package/lib/cjs/shared/interfaces/index.cjs.map +1 -0
  261. package/lib/cjs/shared/math.cjs +2 -2
  262. package/lib/cjs/shared/math.cjs.map +1 -0
  263. package/lib/cjs/shared/model/FabricBaseModel.cjs +2 -2
  264. package/lib/cjs/shared/model/FabricBaseModel.cjs.map +1 -0
  265. package/lib/cjs/shared/model/FabricIdentifiedBaseModel.cjs +2 -2
  266. package/lib/cjs/shared/model/FabricIdentifiedBaseModel.cjs.map +1 -0
  267. package/lib/cjs/shared/model/Identity.cjs +2 -2
  268. package/lib/cjs/shared/model/Identity.cjs.map +1 -0
  269. package/lib/cjs/shared/model/IdentityCredentials.cjs +2 -2
  270. package/lib/cjs/shared/model/IdentityCredentials.cjs.map +1 -0
  271. package/lib/cjs/shared/model/index.cjs +2 -2
  272. package/lib/cjs/shared/model/index.cjs.map +1 -0
  273. package/lib/cjs/shared/overrides/Model.cjs +2 -2
  274. package/lib/cjs/shared/overrides/Model.cjs.map +1 -0
  275. package/lib/cjs/shared/overrides/index.cjs +2 -2
  276. package/lib/cjs/shared/overrides/index.cjs.map +1 -0
  277. package/lib/cjs/shared/overrides/overrides.cjs +36 -2
  278. package/lib/cjs/shared/overrides/overrides.cjs.map +1 -0
  279. package/lib/cjs/shared/types.cjs +2 -2
  280. package/lib/cjs/shared/types.cjs.map +1 -0
  281. package/lib/cjs/version.cjs +5 -5
  282. package/lib/cjs/version.cjs.map +1 -0
  283. package/lib/esm/bin/cli.js +1 -1
  284. package/lib/esm/bin/cli.js.map +1 -0
  285. package/lib/esm/cli-module.js +1 -1
  286. package/lib/esm/cli-module.js.map +1 -0
  287. package/lib/esm/cli-utils.js +1 -1
  288. package/lib/esm/cli-utils.js.map +1 -0
  289. package/lib/esm/client/FabricClientAdapter.js +149 -66
  290. package/lib/esm/client/FabricClientAdapter.js.map +1 -0
  291. package/lib/esm/client/FabricClientContext.js +25 -0
  292. package/lib/esm/client/FabricClientContext.js.map +1 -0
  293. package/lib/esm/client/FabricClientDispatch.js +1 -1
  294. package/lib/esm/client/FabricClientDispatch.js.map +1 -0
  295. package/lib/esm/client/FabricClientPaginator.js +1 -1
  296. package/lib/esm/client/FabricClientPaginator.js.map +1 -0
  297. package/lib/esm/client/FabricClientRepository.js +2 -2
  298. package/lib/esm/client/FabricClientRepository.js.map +1 -0
  299. package/lib/esm/client/FabricClientStatement.js +4 -3
  300. package/lib/esm/client/FabricClientStatement.js.map +1 -0
  301. package/lib/esm/client/collections/generation.js +1 -1
  302. package/lib/esm/client/collections/generation.js.map +1 -0
  303. package/lib/esm/client/collections/index.js +1 -1
  304. package/lib/esm/client/collections/index.js.map +1 -0
  305. package/lib/esm/client/constants.js +2 -1
  306. package/lib/esm/client/constants.js.map +1 -0
  307. package/lib/esm/client/crypto.js +1 -1
  308. package/lib/esm/client/crypto.js.map +1 -0
  309. package/lib/esm/client/erc20/FabricERC20ClientRepository.js +1 -1
  310. package/lib/esm/client/erc20/FabricERC20ClientRepository.js.map +1 -0
  311. package/lib/esm/client/erc20/index.js +1 -1
  312. package/lib/esm/client/erc20/index.js.map +1 -0
  313. package/lib/esm/client/fabric-fs.js +1 -1
  314. package/lib/esm/client/fabric-fs.js.map +1 -0
  315. package/lib/esm/client/fabric-hsm.js +1 -1
  316. package/lib/esm/client/fabric-hsm.js.map +1 -0
  317. package/lib/esm/client/ids/id-extraction.js +1 -1
  318. package/lib/esm/client/ids/id-extraction.js.map +1 -0
  319. package/lib/esm/client/ids/index.js +1 -1
  320. package/lib/esm/client/ids/index.js.map +1 -0
  321. package/lib/esm/client/index.js +2 -1
  322. package/lib/esm/client/index.js.map +1 -0
  323. package/lib/esm/client/indexes/generation.js +2 -14
  324. package/lib/esm/client/indexes/generation.js.map +1 -0
  325. package/lib/esm/client/indexes/index.js +1 -1
  326. package/lib/esm/client/indexes/index.js.map +1 -0
  327. package/lib/esm/client/logging.js +1 -1
  328. package/lib/esm/client/logging.js.map +1 -0
  329. package/lib/esm/client/services/FabricEnrollmentService.js +1 -1
  330. package/lib/esm/client/services/FabricEnrollmentService.js.map +1 -0
  331. package/lib/esm/client/services/FabricIdentityService.js +1 -1
  332. package/lib/esm/client/services/FabricIdentityService.js.map +1 -0
  333. package/lib/esm/client/services/RegistrationRequestBuilder.js +1 -1
  334. package/lib/esm/client/services/RegistrationRequestBuilder.js.map +1 -0
  335. package/lib/esm/client/services/constants.js +1 -1
  336. package/lib/esm/client/services/constants.js.map +1 -0
  337. package/lib/esm/client/services/index.js +1 -1
  338. package/lib/esm/client/services/index.js.map +1 -0
  339. package/lib/esm/client/types.js +1 -1
  340. package/lib/esm/client/types.js.map +1 -0
  341. package/lib/esm/client/utils.js +1 -1
  342. package/lib/esm/client/utils.js.map +1 -0
  343. package/lib/esm/contract/Address.js +1 -1
  344. package/lib/esm/contract/Address.js.map +1 -0
  345. package/lib/esm/contract/AddressContract.js +1 -1
  346. package/lib/esm/contract/AddressContract.js.map +1 -0
  347. package/lib/esm/contract/AuditContract.js +1 -1
  348. package/lib/esm/contract/AuditContract.js.map +1 -0
  349. package/lib/esm/contract/BatchContract.js +1 -1
  350. package/lib/esm/contract/BatchContract.js.map +1 -0
  351. package/lib/esm/contract/MarketContract.js +1 -1
  352. package/lib/esm/contract/MarketContract.js.map +1 -0
  353. package/lib/esm/contract/OtherAuditContract.js +1 -1
  354. package/lib/esm/contract/OtherAuditContract.js.map +1 -0
  355. package/lib/esm/contract/OtherBatchContract.js +1 -1
  356. package/lib/esm/contract/OtherBatchContract.js.map +1 -0
  357. package/lib/esm/contract/OtherLeafletContract.js +1 -1
  358. package/lib/esm/contract/OtherLeafletContract.js.map +1 -0
  359. package/lib/esm/contract/OtherLeafletFileContract.js +1 -1
  360. package/lib/esm/contract/OtherLeafletFileContract.js.map +1 -0
  361. package/lib/esm/contract/OtherMarketContract.js +1 -1
  362. package/lib/esm/contract/OtherMarketContract.js.map +1 -0
  363. package/lib/esm/contract/OtherProductContract.js +1 -1
  364. package/lib/esm/contract/OtherProductContract.js.map +1 -0
  365. package/lib/esm/contract/OtherProductImageContract.js +1 -1
  366. package/lib/esm/contract/OtherProductImageContract.js.map +1 -0
  367. package/lib/esm/contract/OtherProductSharedContract.js +1 -1
  368. package/lib/esm/contract/OtherProductSharedContract.js.map +1 -0
  369. package/lib/esm/contract/OtherProductStrengthContract.js +1 -1
  370. package/lib/esm/contract/OtherProductStrengthContract.js.map +1 -0
  371. package/lib/esm/contract/Product.js +1 -1
  372. package/lib/esm/contract/Product.js.map +1 -0
  373. package/lib/esm/contract/ProductContract.js +1 -1
  374. package/lib/esm/contract/ProductContract.js.map +1 -0
  375. package/lib/esm/contract/ProductStrengthContract.js +1 -1
  376. package/lib/esm/contract/ProductStrengthContract.js.map +1 -0
  377. package/lib/esm/contract/SegregatedPrivateDocumentContract.js +1 -1
  378. package/lib/esm/contract/SegregatedPrivateDocumentContract.js.map +1 -0
  379. package/lib/esm/contract/SegregatedSharedDocumentContract.js +1 -1
  380. package/lib/esm/contract/SegregatedSharedDocumentContract.js.map +1 -0
  381. package/lib/esm/contract/User.js +1 -1
  382. package/lib/esm/contract/User.js.map +1 -0
  383. package/lib/esm/contract/UserContract.js +1 -1
  384. package/lib/esm/contract/UserContract.js.map +1 -0
  385. package/lib/esm/contract/index.js +1 -1
  386. package/lib/esm/contract/index.js.map +1 -0
  387. package/lib/esm/contract/logging-context.js +1 -1
  388. package/lib/esm/contract/logging-context.js.map +1 -0
  389. package/lib/esm/contract/models/Audit.js +3 -5
  390. package/lib/esm/contract/models/Audit.js.map +1 -0
  391. package/lib/esm/contract/models/BaseIdentifiedModel.js +1 -1
  392. package/lib/esm/contract/models/BaseIdentifiedModel.js.map +1 -0
  393. package/lib/esm/contract/models/BaseModel.js +1 -1
  394. package/lib/esm/contract/models/BaseModel.js.map +1 -0
  395. package/lib/esm/contract/models/Batch.js +1 -1
  396. package/lib/esm/contract/models/Batch.js.map +1 -0
  397. package/lib/esm/contract/models/GtinOwner.js +1 -1
  398. package/lib/esm/contract/models/GtinOwner.js.map +1 -0
  399. package/lib/esm/contract/models/History.js +2 -72
  400. package/lib/esm/contract/models/History.js.map +1 -0
  401. package/lib/esm/contract/models/Leaflet.js +1 -1
  402. package/lib/esm/contract/models/Leaflet.js.map +1 -0
  403. package/lib/esm/contract/models/LeafletFile.js +1 -1
  404. package/lib/esm/contract/models/LeafletFile.js.map +1 -0
  405. package/lib/esm/contract/models/Market.js +1 -1
  406. package/lib/esm/contract/models/Market.js.map +1 -0
  407. package/lib/esm/contract/models/OtherAudit.js +1 -1
  408. package/lib/esm/contract/models/OtherAudit.js.map +1 -0
  409. package/lib/esm/contract/models/OtherBatchShared.js +2 -232
  410. package/lib/esm/contract/models/OtherBatchShared.js.map +1 -0
  411. package/lib/esm/contract/models/OtherLeaflet.js +3 -112
  412. package/lib/esm/contract/models/OtherLeaflet.js.map +1 -0
  413. package/lib/esm/contract/models/OtherLeafletFile.js +2 -62
  414. package/lib/esm/contract/models/OtherLeafletFile.js.map +1 -0
  415. package/lib/esm/contract/models/OtherMarket.js +2 -81
  416. package/lib/esm/contract/models/OtherMarket.js.map +1 -0
  417. package/lib/esm/contract/models/OtherProduct.js +2 -74
  418. package/lib/esm/contract/models/OtherProduct.js.map +1 -0
  419. package/lib/esm/contract/models/OtherProductImage.js +2 -56
  420. package/lib/esm/contract/models/OtherProductImage.js.map +1 -0
  421. package/lib/esm/contract/models/OtherProductShared.js +2 -96
  422. package/lib/esm/contract/models/OtherProductShared.js.map +1 -0
  423. package/lib/esm/contract/models/OtherProductStrength.js +2 -82
  424. package/lib/esm/contract/models/OtherProductStrength.js.map +1 -0
  425. package/lib/esm/contract/models/Product.js +1 -1
  426. package/lib/esm/contract/models/Product.js.map +1 -0
  427. package/lib/esm/contract/models/ProductStrength.js +2 -2
  428. package/lib/esm/contract/models/ProductStrength.js.map +1 -0
  429. package/lib/esm/contract/models/SegregatedDocument.js +4 -10
  430. package/lib/esm/contract/models/SegregatedDocument.js.map +1 -0
  431. package/lib/esm/contract/models/constants.js +1 -1
  432. package/lib/esm/contract/models/constants.js.map +1 -0
  433. package/lib/esm/contract/models/decorators-private.js +1 -1
  434. package/lib/esm/contract/models/decorators-private.js.map +1 -0
  435. package/lib/esm/contract/models/decorators.js +1 -4
  436. package/lib/esm/contract/models/decorators.js.map +1 -0
  437. package/lib/esm/contract/models/gtin.js +1 -1
  438. package/lib/esm/contract/models/gtin.js.map +1 -0
  439. package/lib/esm/contract/models/history-dec.js +1 -1
  440. package/lib/esm/contract/models/history-dec.js.map +1 -0
  441. package/lib/esm/contract/trackedModels/History.js +1 -1
  442. package/lib/esm/contract/trackedModels/History.js.map +1 -0
  443. package/lib/esm/contract/trackedModels/OtherAudit.js +1 -1
  444. package/lib/esm/contract/trackedModels/OtherAudit.js.map +1 -0
  445. package/lib/esm/contract/trackedModels/OtherBatchShared.js +120 -0
  446. package/lib/esm/contract/trackedModels/OtherBatchShared.js.map +1 -0
  447. package/lib/esm/contract/trackedModels/OtherLeaflet.js +1 -1
  448. package/lib/esm/contract/trackedModels/OtherLeaflet.js.map +1 -0
  449. package/lib/esm/contract/trackedModels/OtherLeafletFile.js +1 -1
  450. package/lib/esm/contract/trackedModels/OtherLeafletFile.js.map +1 -0
  451. package/lib/esm/contract/trackedModels/OtherMarket.js +1 -1
  452. package/lib/esm/contract/trackedModels/OtherMarket.js.map +1 -0
  453. package/lib/esm/contract/trackedModels/OtherProduct.js +1 -1
  454. package/lib/esm/contract/trackedModels/OtherProduct.js.map +1 -0
  455. package/lib/esm/contract/trackedModels/OtherProductImage.js +1 -1
  456. package/lib/esm/contract/trackedModels/OtherProductImage.js.map +1 -0
  457. package/lib/esm/contract/trackedModels/OtherProductShared.js +1 -1
  458. package/lib/esm/contract/trackedModels/OtherProductShared.js.map +1 -0
  459. package/lib/esm/contract/trackedModels/OtherProductStrength.js +1 -1
  460. package/lib/esm/contract/trackedModels/OtherProductStrength.js.map +1 -0
  461. package/lib/esm/contracts/ContractAdapter.js +41 -9
  462. package/lib/esm/contracts/ContractAdapter.js.map +1 -0
  463. package/lib/esm/contracts/ContractContext.js +1 -1
  464. package/lib/esm/contracts/ContractContext.js.map +1 -0
  465. package/lib/esm/contracts/FabricContractDispatch.js +1 -1
  466. package/lib/esm/contracts/FabricContractDispatch.js.map +1 -0
  467. package/lib/esm/contracts/FabricContractPaginator.js +1 -1
  468. package/lib/esm/contracts/FabricContractPaginator.js.map +1 -0
  469. package/lib/esm/contracts/FabricContractRepository.js +1 -1
  470. package/lib/esm/contracts/FabricContractRepository.js.map +1 -0
  471. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +1 -1
  472. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js.map +1 -0
  473. package/lib/esm/contracts/FabricContractSequence.js +1 -1
  474. package/lib/esm/contracts/FabricContractSequence.js.map +1 -0
  475. package/lib/esm/contracts/FabricContractStatement.js +1 -1
  476. package/lib/esm/contracts/FabricContractStatement.js.map +1 -0
  477. package/lib/esm/contracts/MigrationContract.js +5 -6
  478. package/lib/esm/contracts/MigrationContract.js.map +1 -0
  479. package/lib/esm/contracts/PrivateSequence.js +1 -1
  480. package/lib/esm/contracts/PrivateSequence.js.map +1 -0
  481. package/lib/esm/contracts/auth/decorators.js +1 -1
  482. package/lib/esm/contracts/auth/decorators.js.map +1 -0
  483. package/lib/esm/contracts/auth/index.js +1 -1
  484. package/lib/esm/contracts/auth/index.js.map +1 -0
  485. package/lib/esm/contracts/bootstrap.js +1 -1
  486. package/lib/esm/contracts/bootstrap.js.map +1 -0
  487. package/lib/esm/contracts/crud/crud-contract.js +28 -24
  488. package/lib/esm/contracts/crud/crud-contract.js.map +1 -0
  489. package/lib/esm/contracts/crud/index.js +1 -1
  490. package/lib/esm/contracts/crud/index.js.map +1 -0
  491. package/lib/esm/contracts/crud/serialized-crud-contract.js +1 -1
  492. package/lib/esm/contracts/crud/serialized-crud-contract.js.map +1 -0
  493. package/lib/esm/contracts/erc20/erc20contract.js +1 -1
  494. package/lib/esm/contracts/erc20/erc20contract.js.map +1 -0
  495. package/lib/esm/contracts/erc20/index.js +1 -1
  496. package/lib/esm/contracts/erc20/index.js.map +1 -0
  497. package/lib/esm/contracts/erc20/models.js +1 -1
  498. package/lib/esm/contracts/erc20/models.js.map +1 -0
  499. package/lib/esm/contracts/fabric-overrides.js +1 -1
  500. package/lib/esm/contracts/fabric-overrides.js.map +1 -0
  501. package/lib/esm/contracts/index.js +1 -1
  502. package/lib/esm/contracts/index.js.map +1 -0
  503. package/lib/esm/contracts/logging.js +1 -1
  504. package/lib/esm/contracts/logging.js.map +1 -0
  505. package/lib/esm/contracts/overrides.js +1 -1
  506. package/lib/esm/contracts/overrides.js.map +1 -0
  507. package/lib/esm/contracts/types.js +1 -1
  508. package/lib/esm/contracts/types.js.map +1 -0
  509. package/lib/esm/contracts/uuid.js +1 -1
  510. package/lib/esm/contracts/uuid.js.map +1 -0
  511. package/lib/esm/index.js +1 -1
  512. package/lib/esm/index.js.map +1 -0
  513. package/lib/esm/shared/ClientSerializer.js +1 -1
  514. package/lib/esm/shared/ClientSerializer.js.map +1 -0
  515. package/lib/esm/shared/DeterministicSerializer.js +1 -1
  516. package/lib/esm/shared/DeterministicSerializer.js.map +1 -0
  517. package/lib/esm/shared/SimpleDeterministicSerializer.js +1 -1
  518. package/lib/esm/shared/SimpleDeterministicSerializer.js.map +1 -0
  519. package/lib/esm/shared/constants.js +5 -1
  520. package/lib/esm/shared/constants.js.map +1 -0
  521. package/lib/esm/shared/decorators.js +18 -1
  522. package/lib/esm/shared/decorators.js.map +1 -0
  523. package/lib/esm/shared/erc20/erc20-constants.js +1 -1
  524. package/lib/esm/shared/erc20/erc20-constants.js.map +1 -0
  525. package/lib/esm/shared/erc20/index.js +1 -1
  526. package/lib/esm/shared/erc20/index.js.map +1 -0
  527. package/lib/esm/shared/errors.js +1 -1
  528. package/lib/esm/shared/errors.js.map +1 -0
  529. package/lib/esm/shared/events.js +1 -1
  530. package/lib/esm/shared/events.js.map +1 -0
  531. package/lib/esm/shared/fabric-types.js +1 -1
  532. package/lib/esm/shared/fabric-types.js.map +1 -0
  533. package/lib/esm/shared/index.js +1 -1
  534. package/lib/esm/shared/index.js.map +1 -0
  535. package/lib/esm/shared/interfaces/Checkable.js +1 -1
  536. package/lib/esm/shared/interfaces/Checkable.js.map +1 -0
  537. package/lib/esm/shared/interfaces/index.js +1 -1
  538. package/lib/esm/shared/interfaces/index.js.map +1 -0
  539. package/lib/esm/shared/math.js +1 -1
  540. package/lib/esm/shared/math.js.map +1 -0
  541. package/lib/esm/shared/model/FabricBaseModel.js +1 -1
  542. package/lib/esm/shared/model/FabricBaseModel.js.map +1 -0
  543. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js +1 -1
  544. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js.map +1 -0
  545. package/lib/esm/shared/model/Identity.js +1 -1
  546. package/lib/esm/shared/model/Identity.js.map +1 -0
  547. package/lib/esm/shared/model/IdentityCredentials.js +1 -1
  548. package/lib/esm/shared/model/IdentityCredentials.js.map +1 -0
  549. package/lib/esm/shared/model/index.js +1 -1
  550. package/lib/esm/shared/model/index.js.map +1 -0
  551. package/lib/esm/shared/overrides/Model.js +1 -1
  552. package/lib/esm/shared/overrides/Model.js.map +1 -0
  553. package/lib/esm/shared/overrides/index.js +1 -1
  554. package/lib/esm/shared/overrides/index.js.map +1 -0
  555. package/lib/esm/shared/overrides/overrides.js +36 -2
  556. package/lib/esm/shared/overrides/overrides.js.map +1 -0
  557. package/lib/esm/shared/types.js +1 -1
  558. package/lib/esm/shared/types.js.map +1 -0
  559. package/lib/esm/version.js +4 -4
  560. package/lib/esm/version.js.map +1 -0
  561. package/lib/types/client/FabricClientAdapter.d.cts +43 -33
  562. package/lib/types/client/FabricClientAdapter.d.mts +43 -33
  563. package/lib/types/client/FabricClientContext.d.cts +11 -0
  564. package/lib/types/client/FabricClientContext.d.mts +11 -0
  565. package/lib/types/client/FabricClientDispatch.d.cts +5 -5
  566. package/lib/types/client/FabricClientDispatch.d.mts +5 -5
  567. package/lib/types/client/FabricClientStatement.d.cts +6 -6
  568. package/lib/types/client/FabricClientStatement.d.mts +6 -6
  569. package/lib/types/client/index.d.cts +1 -0
  570. package/lib/types/client/index.d.mts +1 -0
  571. package/lib/types/client/types.d.cts +2 -0
  572. package/lib/types/client/types.d.mts +2 -0
  573. package/lib/types/contract/models/History.d.cts +1 -9
  574. package/lib/types/contract/models/History.d.mts +1 -9
  575. package/lib/types/contract/models/OtherBatchShared.d.cts +1 -55
  576. package/lib/types/contract/models/OtherBatchShared.d.mts +1 -55
  577. package/lib/types/contract/models/OtherLeaflet.d.cts +2 -16
  578. package/lib/types/contract/models/OtherLeaflet.d.mts +2 -16
  579. package/lib/types/contract/models/OtherLeafletFile.d.cts +1 -10
  580. package/lib/types/contract/models/OtherLeafletFile.d.mts +1 -10
  581. package/lib/types/contract/models/OtherMarket.d.cts +1 -13
  582. package/lib/types/contract/models/OtherMarket.d.mts +1 -13
  583. package/lib/types/contract/models/OtherProduct.d.cts +1 -12
  584. package/lib/types/contract/models/OtherProduct.d.mts +1 -12
  585. package/lib/types/contract/models/OtherProductImage.d.cts +1 -9
  586. package/lib/types/contract/models/OtherProductImage.d.mts +1 -9
  587. package/lib/types/contract/models/OtherProductShared.d.cts +1 -18
  588. package/lib/types/contract/models/OtherProductShared.d.mts +1 -18
  589. package/lib/types/contract/models/OtherProductStrength.d.cts +1 -12
  590. package/lib/types/contract/models/OtherProductStrength.d.mts +1 -12
  591. package/lib/types/contract/trackedModels/OtherBatchShared.d.cts +19 -0
  592. package/lib/types/contract/trackedModels/OtherBatchShared.d.mts +19 -0
  593. package/lib/types/contracts/ContractAdapter.d.cts +1 -0
  594. package/lib/types/contracts/ContractAdapter.d.mts +1 -0
  595. package/lib/types/contracts/FabricContractStatement.d.cts +1 -2
  596. package/lib/types/contracts/FabricContractStatement.d.mts +1 -2
  597. package/lib/types/contracts/MigrationContract.d.cts +1 -1
  598. package/lib/types/contracts/MigrationContract.d.mts +1 -1
  599. package/lib/types/contracts/crud/crud-contract.d.cts +3 -1
  600. package/lib/types/contracts/crud/crud-contract.d.mts +3 -1
  601. package/lib/types/contracts/types.d.cts +1 -0
  602. package/lib/types/contracts/types.d.mts +1 -0
  603. package/lib/types/shared/constants.d.cts +5 -1
  604. package/lib/types/shared/constants.d.mts +5 -1
  605. package/lib/types/shared/decorators.d.cts +9 -1
  606. package/lib/types/shared/decorators.d.mts +9 -1
  607. package/lib/types/shared/overrides/Model.d.cts +4 -0
  608. package/lib/types/shared/overrides/Model.d.mts +4 -0
  609. package/lib/types/version.d.cts +3 -3
  610. package/lib/types/version.d.mts +3 -3
  611. package/package.json +1 -1
@@ -180,11 +180,11 @@ class FabricCrudContract extends fabric_contract_api_1.Contract {
180
180
  * @return {Promise<M>} Promise resolving to the created model
181
181
  */
182
182
  async create(context, model, ...args) {
183
+ if (typeof model === "string")
184
+ model = this.deserialize(model);
183
185
  const { log, ctxArgs, ctx } = (await this.logCtx([...args, context], db_decorators_1.OperationKeys.CREATE, true)).for(this.create);
184
186
  this.ensureMirrorWritePermissions(ctx);
185
187
  log.info(`CONTRACT CREATE, ${ctxArgs}`);
186
- if (typeof model === "string")
187
- model = this.deserialize(model);
188
188
  log.info(`Creating model: ${JSON.stringify(model)}`);
189
189
  const transient = this.getTransientData(ctx);
190
190
  log.info(`Merging transient data...`);
@@ -212,12 +212,20 @@ class FabricCrudContract extends fabric_contract_api_1.Contract {
212
212
  if (transientMap.has(this.repo["tableName"])) {
213
213
  transient = JSON.parse(transientMap.get(this.repo["tableName"])?.toString("utf8"));
214
214
  }
215
- if (transientMap.has("__overrides")) {
216
- const overrides = JSON.parse(transientMap.get(this.repo["tableName"])?.toString("utf8"));
217
- ctx.accumulate(overrides);
218
- }
219
215
  return transient;
220
216
  }
217
+ deserializeBulkModels(models) {
218
+ const parsed = JSON.parse(models);
219
+ if (!Array.isArray(parsed))
220
+ throw new db_decorators_1.SerializationError(new Error("Bulk payload must be an array of serialized models"));
221
+ const hydrated = parsed.map((entry) => {
222
+ const serialized = typeof entry === "string"
223
+ ? entry
224
+ : JSON.stringify(Object.fromEntries(Object.entries(entry).filter(([key]) => key !== index_js_1.FabricModelKeys.OVERRIDES)));
225
+ return new this.clazz(this.deserialize(serialized));
226
+ });
227
+ return hydrated;
228
+ }
221
229
  /**
222
230
  * @description Updates a single model in the state database
223
231
  * @summary Delegates to the repository's update method
@@ -227,10 +235,10 @@ class FabricCrudContract extends fabric_contract_api_1.Contract {
227
235
  * @return {Promise<M>} Promise resolving to the updated model
228
236
  */
229
237
  async update(context, model, ...args) {
230
- const { log, ctxArgs, ctx } = (await this.logCtx([...args, context], db_decorators_1.OperationKeys.UPDATE, true)).for(this.update);
231
- this.ensureMirrorWritePermissions(ctx);
232
238
  if (typeof model === "string")
233
239
  model = this.deserialize(model);
240
+ const { log, ctxArgs, ctx } = (await this.logCtx([...args, context], db_decorators_1.OperationKeys.UPDATE, true)).for(this.update);
241
+ this.ensureMirrorWritePermissions(ctx);
234
242
  log.info(`Updating model: ${JSON.stringify(model)}`);
235
243
  const transient = this.getTransientData(ctx);
236
244
  log.info(`Merging transient data...`);
@@ -262,10 +270,10 @@ class FabricCrudContract extends fabric_contract_api_1.Contract {
262
270
  * @return {Promise<M[]>} Promise resolving to the deleted models
263
271
  */
264
272
  async deleteAll(ctx, keys, ...args) {
265
- const { ctxArgs, ctx: fabricCtx } = (await this.logCtx([...args, ctx], db_decorators_1.BulkCrudOperationKeys.DELETE_ALL, true)).for(this.deleteAll);
266
- this.ensureMirrorWritePermissions(fabricCtx);
267
273
  if (typeof keys === "string")
268
274
  keys = JSON.parse(keys);
275
+ const { ctxArgs, ctx: fabricCtx } = (await this.logCtx([...args, ctx], db_decorators_1.BulkCrudOperationKeys.DELETE_ALL, true)).for(this.deleteAll);
276
+ this.ensureMirrorWritePermissions(fabricCtx);
269
277
  const deleted = await this.repo.deleteAll(keys, ...ctxArgs);
270
278
  const result = deleted.map((c) => new this.clazz(decorator_validation_1.Model.segregate(c).model));
271
279
  return result;
@@ -279,9 +287,9 @@ class FabricCrudContract extends fabric_contract_api_1.Contract {
279
287
  * @return {Promise<M[]>} Promise resolving to the retrieved models
280
288
  */
281
289
  async readAll(ctx, keys, ...args) {
282
- const { ctxArgs } = (await this.logCtx([...args, ctx], db_decorators_1.BulkCrudOperationKeys.READ_ALL, true)).for(this.create);
283
290
  if (typeof keys === "string")
284
291
  keys = JSON.parse(keys);
292
+ const { ctxArgs } = (await this.logCtx([...args, ctx], db_decorators_1.BulkCrudOperationKeys.READ_ALL, true)).for(this.create);
285
293
  return this.repo.readAll(keys, ...ctxArgs);
286
294
  }
287
295
  /**
@@ -293,12 +301,10 @@ class FabricCrudContract extends fabric_contract_api_1.Contract {
293
301
  * @return {Promise<M[]>} Promise resolving to the updated models
294
302
  */
295
303
  async updateAll(context, models, ...args) {
304
+ if (typeof models === "string")
305
+ models = this.deserializeBulkModels(models);
296
306
  const { log, ctxArgs, ctx } = (await this.logCtx([...args, context], db_decorators_1.BulkCrudOperationKeys.UPDATE_ALL, true)).for(this.updateAll);
297
307
  this.ensureMirrorWritePermissions(ctx);
298
- if (typeof models === "string")
299
- models = JSON.parse(models)
300
- .map((m) => this.deserialize(m))
301
- .map((m) => new this.clazz(m));
302
308
  const transient = this.getTransientData(ctx);
303
309
  log.info(`Merging transient data...`);
304
310
  models = models.map((m, i) => {
@@ -368,12 +374,10 @@ class FabricCrudContract extends fabric_contract_api_1.Contract {
368
374
  * @return {Promise<M[]>} Promise resolving to the created models
369
375
  */
370
376
  async createAll(context, models, ...args) {
377
+ if (typeof models === "string")
378
+ models = this.deserializeBulkModels(models);
371
379
  const { log, ctxArgs, ctx } = (await this.logCtx([...args, context], db_decorators_1.BulkCrudOperationKeys.CREATE_ALL, true)).for(this.createAll);
372
380
  this.ensureMirrorWritePermissions(ctx);
373
- if (typeof models === "string")
374
- models = JSON.parse(models)
375
- .map((m) => this.deserialize(m))
376
- .map((m) => new this.clazz(m));
377
381
  const transient = this.getTransientData(ctx);
378
382
  log.info(`Merging transient data...`);
379
383
  models = models.map((m, i) => {
@@ -398,12 +402,12 @@ class FabricCrudContract extends fabric_contract_api_1.Contract {
398
402
  throw new core_1.AuthorizationError(`Organization ${msp} is not authorized to modify mirrored data`);
399
403
  }
400
404
  }
401
- logCtx(args, operation, allowCreate = false) {
405
+ logCtx(args, operation, allowCreate = false, overrides) {
402
406
  const ctx = args.pop();
403
407
  if (!ctx || !ctx.stub) {
404
408
  throw new index_js_1.MissingContextError(`No valid context provided...`);
405
409
  }
406
- const contextualized = FabricCrudContract.adapter["logCtx"]([this.clazz, ...args], operation, allowCreate, ctx);
410
+ const contextualized = FabricCrudContract.adapter["logCtx"]([this.clazz, ...args], operation, allowCreate, allowCreate && overrides ? ctx.accumulate(overrides) : ctx);
407
411
  function squashArgs(ctx) {
408
412
  ctx.ctxArgs.shift(); // removes added model to args
409
413
  return ctx;
@@ -414,5 +418,5 @@ class FabricCrudContract extends fabric_contract_api_1.Contract {
414
418
  }
415
419
  }
416
420
  exports.FabricCrudContract = FabricCrudContract;
417
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1jb250cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmFjdHMvY3J1ZC9jcnVkLWNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUFzQjtBQUN0QiwyQ0FBZ0M7QUFDaEMsT0FBTyxFQUVMLHFCQUFxQixHQUN0QixnQ0FBMkI7QUFDNUIsT0FBTyxFQUVMLFFBQVEsRUFDUixNQUFNLElBQUksWUFBWSxHQUN2QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxLQUFLLEVBQWMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBRUwsa0JBQWtCLEVBUWxCLGNBQWMsRUFDZCxlQUFlLEVBRWYscUJBQXFCLEVBQ3JCLFVBQVUsR0FFWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxrREFBNkM7QUFLL0UsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixhQUFhLEdBRWQsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0NBQTJCO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUscUNBQWdDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLDJCQUFzQjtBQUV0RCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQ0c7QUFDSCxNQUFNLE9BQWdCLGtCQUNwQixTQUFRLFFBQVE7SUFhaEI7O09BRUc7YUFDYyxZQUFPLEdBQTBCLElBQUkscUJBQXFCLEVBQUUsQUFBckQsQ0FBc0Q7YUFFcEQsZUFBVSxHQUFHLElBQUksdUJBQXVCLEVBQUUsQUFBaEMsQ0FBaUM7SUFNckUsSUFBYyxJQUFJO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFD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O1FBQ3ZDLElBQ0UsR0FBRztZQUNILENBQUMsR0FBRyxLQUFLLFVBQVUsQ0FBQyxLQUFLO2dCQUN2QixDQUFDLFVBQVUsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ3RELENBQUM7WUFDRCxNQUFNLElBQUksa0JBQWtCLENBQzFCLGdCQUFnQixHQUFHLDRDQUE0QyxDQUNoRSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUEyQlMsTUFBTSxDQUlkLElBQXFELEVBQ3JELFNBQWlCLEVBQ2pCLGNBQXVCLEtBQUs7UUFNNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLG1CQUFtQixDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FDekQsQ0FBQyxJQUFJLENBQUMsS0FBWSxFQUFFLEdBQUcsSUFBSSxDQUFRLEVBQ25DLFNBQVMsRUFDVCxXQUFrQixFQUNsQixHQUFHLENBS0EsQ0FBQztRQUNOLFNBQVMsVUFBVSxDQUFDLEdBQTZCO1lBQy9DLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyw4QkFBOEI7WUFDbkQsT0FBTyxHQUFVLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQUksQ0FBQyxDQUFDLGNBQWMsWUFBWSxPQUFPLENBQUM7WUFBRSxPQUFPLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1RSxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4uL2Jvb3RzdHJhcFwiO1xuaW1wb3J0IFwiLi4vLi4vc2hhcmVkL292ZXJyaWRlc1wiO1xuaW1wb3J0IHtcbiAgRmFicmljQ29udGV4dHVhbGl6ZWRBcmdzLFxuICBGYWJyaWNDb250cmFjdEFkYXB0ZXIsXG59IGZyb20gXCIuLi9Db250cmFjdEFkYXB0ZXJcIjtcbmltcG9ydCB7XG4gIENvbnRleHQgYXMgQ3R4LFxuICBDb250cmFjdCxcbiAgT2JqZWN0IGFzIEZhYnJpY09iamVjdCxcbn0gZnJvbSBcImZhYnJpYy1jb250cmFjdC1hcGlcIjtcbmltcG9ydCB7IE1vZGVsLCBTZXJpYWxpemVyIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHtcbiAgQWxsT3BlcmF0aW9uS2V5cyxcbiAgQXV0aG9yaXphdGlvbkVycm9yLFxuICBDb25kaXRpb24sXG4gIENvbnRleHR1YWxBcmdzLFxuICBEaXJlY3Rpb25MaW1pdE9mZnNldCxcbiAgRXZlbnRJZHMsXG4gIE1heWJlQ29udGV4dHVhbEFyZyxcbiAgTWV0aG9kT3JPcGVyYXRpb24sXG4gIE9ic2VydmVyLFxuICBPcmRlckRpcmVjdGlvbixcbiAgUGVyc2lzdGVuY2VLZXlzLFxuICBQZXJzaXN0ZW5jZU9ic2VydmVyLFxuICBQcmVwYXJlZFN0YXRlbWVudEtleXMsXG4gIFJlcG9zaXRvcnksXG4gIFNlcmlhbGl6ZWRQYWdlLFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IEZhYnJpY0NvbnRyYWN0UmVwb3NpdG9yeSB9IGZyb20gXCIuLi9GYWJyaWNDb250cmFjdFJlcG9zaXRvcnlcIjtcbmltcG9ydCB7IERldGVybWluaXN0aWNTZXJpYWxpemVyIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9EZXRlcm1pbmlzdGljU2VyaWFsaXplclwiO1xuaW1wb3J0IHsgTWFuZ29RdWVyeSB9IGZyb20gXCJAZGVjYWYtdHMvZm9yLWNvdWNoZGJcIjtcbmltcG9ydCB7IENoZWNrYWJsZSwgaGVhbHRoY2hlY2sgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvQ2hlY2thYmxlXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHsgRmFicmljQ29udHJhY3RDb250ZXh0IH0gZnJvbSBcIi4uL0NvbnRyYWN0Q29udGV4dFwiO1xuaW1wb3J0IHtcbiAgQnVsa0NydWRPcGVyYXRpb25LZXlzLFxuICBPcGVyYXRpb25LZXlzLFxuICBQcmltYXJ5S2V5VHlwZSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBNaXNzaW5nQ29udGV4dEVycm9yIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9pbmRleFwiO1xuaW1wb3J0IHsgZXh0cmFjdE1zcElkIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBQQUNLQUdFX05BTUUsIFZFUlNJT04gfSBmcm9tIFwiLi4vLi4vdmVyc2lvblwiO1xuXG5GYWJyaWNPYmplY3QoKShEYXRlKTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIEJhc2UgY29udHJhY3QgY2xhc3MgZm9yIENSVUQgb3BlcmF0aW9ucyBpbiBGYWJyaWMgY2hhaW5jb2RlXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBzdGFuZGFyZCBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZSBvcGVyYXRpb25zIGZvciBtb2RlbHMgaW4gRmFicmljIGNoYWluY29kZVxuICogQHRlbXBsYXRlIE0gLSBUeXBlIGV4dGVuZGluZyBNb2RlbFxuICogQGNsYXNzIEZhYnJpY0NydWRDb250cmFjdFxuICogQGV4dGVuZHMge0NvbnRyYWN0fVxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIERlZmluZSBhIG1vZGVsXG4gKiBAdGFibGUoJ2Fzc2V0cycpXG4gKiBjbGFzcyBBc3NldCBleHRlbmRzIE1vZGVsIHtcbiAqICAgQGlkKClcbiAqICAgaWQ6IHN0cmluZztcbiAqXG4gKiAgIEBwcm9wZXJ0eSgpXG4gKiAgIGRhdGE6IHN0cmluZztcbiAqIH1cbiAqXG4gKiAvLyBDcmVhdGUgYSBjb250cmFjdCB0aGF0IGV4dGVuZHMgRmFicmljQ3J1ZENvbnRyYWN0XG4gKiBleHBvcnQgY2xhc3MgQXNzZXRDb250cmFjdCBleHRlbmRzIEZhYnJpY0NydWRDb250cmFjdDxBc3NldD4ge1xuICogICBjb25zdHJ1Y3RvcigpIHtcbiAqICAgICBzdXBlcignQXNzZXRDb250cmFjdCcsIEFzc2V0KTtcbiAqICAgfVxuICpcbiAqICAgLy8gQWRkIGN1c3RvbSBtZXRob2RzIGFzIG5lZWRlZFxuICogICBhc3luYyBnZXRBc3NldEhpc3RvcnkoY3R4OiBDb250ZXh0LCBpZDogc3RyaW5nKTogUHJvbWlzZTxhbnlbXT4ge1xuICogICAgIC8vIEN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IENvbnRyYWN0XG4gKiAgIHBhcnRpY2lwYW50IFJlcG9zaXRvcnlcbiAqICAgcGFydGljaXBhbnQgQWRhcHRlclxuICogICBwYXJ0aWNpcGFudCBTdGF0ZURCXG4gKlxuICogICBDbGllbnQtPj5Db250cmFjdDogY3JlYXRlKGN0eCwgbW9kZWwpXG4gKiAgIENvbnRyYWN0LT4+UmVwb3NpdG9yeTogcmVwb3NpdG9yeShjdHgpXG4gKiAgIENvbnRyYWN0LT4+UmVwb3NpdG9yeTogY3JlYXRlKG1vZGVsLCBjdHgpXG4gKiAgIFJlcG9zaXRvcnktPj5BZGFwdGVyOiBjcmVhdGUodGFibGVOYW1lLCBpZCwgcmVjb3JkLCB0cmFuc2llbnQsIGN0eClcbiAqICAgQWRhcHRlci0+PlN0YXRlREI6IHB1dFN0YXRlKGlkLCBzZXJpYWxpemVkRGF0YSlcbiAqICAgU3RhdGVEQi0tPj5BZGFwdGVyOiBTdWNjZXNzXG4gKiAgIEFkYXB0ZXItLT4+UmVwb3NpdG9yeTogcmVjb3JkXG4gKiAgIFJlcG9zaXRvcnktLT4+Q29udHJhY3Q6IG1vZGVsXG4gKiAgIENvbnRyYWN0LS0+PkNsaWVudDogbW9kZWxcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZhYnJpY0NydWRDb250cmFjdDxNIGV4dGVuZHMgTW9kZWw+XG4gIGV4dGVuZHMgQ29udHJhY3RcbiAgaW1wbGVtZW50c1xuICAgIENoZWNrYWJsZSxcbiAgICBQZXJzaXN0ZW5jZU9ic2VydmVyPEZhYnJpY0NvbnRyYWN0Q29udGV4dD4sXG4gICAgT2JzZXJ2ZXI8XG4gICAgICBbXG4gICAgICAgIHRhYmxlOiBDb25zdHJ1Y3RvcjxNPiB8IHN0cmluZyxcbiAgICAgICAgZXZlbnQ6IEFsbE9wZXJhdGlvbktleXMsXG4gICAgICAgIGlkOiBFdmVudElkcyxcbiAgICAgICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8RmFicmljQ29udHJhY3RDb250ZXh0PixcbiAgICAgIF1cbiAgICA+XG57XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2hhcmVkIGFkYXB0ZXIgaW5zdGFuY2UgZm9yIGFsbCBjb250cmFjdCBpbnN0YW5jZXNcbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgYWRhcHRlcjogRmFicmljQ29udHJhY3RBZGFwdGVyID0gbmV3IEZhYnJpY0NvbnRyYWN0QWRhcHRlcigpO1xuXG4gIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgc2VyaWFsaXplciA9IG5ldyBEZXRlcm1pbmlzdGljU2VyaWFsaXplcigpO1xuXG4gIHByb3RlY3RlZCBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3JlcG8/OiBGYWJyaWNDb250cmFjdFJlcG9zaXRvcnk8TT47XG5cbiAgcHJvdGVjdGVkIGdldCByZXBvKCkge1xuICAgIGlmICghdGhpcy5fcmVwbykge1xuICAgICAgdGhpcy5fcmVwbyA9IFJlcG9zaXRvcnkuZm9yTW9kZWwodGhpcy5jbGF6eik7XG4gICAgICAvLyB0cnkge1xuICAgICAgLy8gICB0aGlzLnJlcG8ub2JzZXJ2ZSh0aGlzKTtcbiAgICAgIC8vIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgLy8gICBpZiAoXG4gICAgICAvLyAgICAgZXJyIGluc3RhbmNlb2YgSW50ZXJuYWxFcnJvciAmJlxuICAgICAgLy8gICAgIGVyci5tZXNzYWdlLmluY2x1ZGVzKFwiT2JzZXJ2ZXIgYWxyZWFkeSByZWdpc3RlcmVkXCIpXG4gICAgICAvLyAgICkge1xuICAgICAgLy8gICAgIC8vIGFscmVhZHkgcmVnaXN0ZXJlZCBvYnNlcnZlcjsgaWdub3JlIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gKGR1cmluZyB0ZXN0cylcbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICB0aHJvdyBlcnI7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JlcG87XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgRmFicmljQ3J1ZENvbnRyYWN0IGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgY29udHJhY3Qgd2l0aCBhIG5hbWUgYW5kIG1vZGVsIGNsYXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNvbnRyYWN0XG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IGNsYXp6IC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9yXG4gICAqL1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBjbGF6ejogQ29uc3RydWN0b3I8TT5cbiAgKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoKFxuICAgIHRhYmxlOiBDb25zdHJ1Y3RvcjxNPiB8IHN0cmluZyxcbiAgICBldmVudDogQWxsT3BlcmF0aW9uS2V5cyxcbiAgICBpZDogRXZlbnRJZHMsXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8RmFicmljQ29udHJhY3RDb250ZXh0PlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGxvZyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yZWZyZXNoKTtcbiAgICBsb2cudmVyYm9zZShgUHVzaGluZyAke2V2ZW50fSBldmVudCBvbiB0YWJsZSAke3RhYmxlfSwgaWQocykgJHtpZH1gKTtcbiAgICAvLyBkbyBub3RoaW5nLiBhbGwgd2UgbmVlZGVkIHdhcyBhbiBvYnNlcnZlciB0byBraWNrc3RhcnQgdGhlIHByb2Nlc3NcbiAgfVxuXG4gIGFzeW5jIGxpc3RCeShcbiAgICBjdHg6IEN0eCB8IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICBrZXk6IHN0cmluZyB8IGtleW9mIE0sXG4gICAgb3JkZXI6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPE1bXSB8IHN0cmluZz4ge1xuICAgIGNvbnN0IHsgY3R4QXJncywgbG9nIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbLi4uYXJncywgY3R4XSwgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkxJU1RfQlksIHRydWUpXG4gICAgKS5mb3IodGhpcy5saXN0QnkpO1xuICAgIGxvZy5pbmZvKFxuICAgICAgYFJ1bm5pbmcgbGlzdEJ5IGtleSAke2tleSBhcyBzdHJpbmd9LCBvcmRlciAke29yZGVyfSBhbmQgYXJncyAke2N0eEFyZ3N9YFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMucmVwby5saXN0QnkoXG4gICAgICBrZXkgYXMga2V5b2YgTSxcbiAgICAgIG9yZGVyIGFzIE9yZGVyRGlyZWN0aW9uLFxuICAgICAgLi4uY3R4QXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyBwYWdpbmF0ZUJ5KFxuICAgIGN0eDogQ3R4IHwgRmFicmljQ29udHJhY3RDb250ZXh0LFxuICAgIGtleTogc3RyaW5nIHwga2V5b2YgTSxcbiAgICBvcmRlcjogc3RyaW5nLFxuICAgIHJlZjogT21pdDxEaXJlY3Rpb25MaW1pdE9mZnNldCwgXCJkaXJlY3Rpb25cIj4gfCBzdHJpbmcgPSB7XG4gICAgICBvZmZzZXQ6IDEsXG4gICAgICBsaW1pdDogMTAsXG4gICAgfSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFNlcmlhbGl6ZWRQYWdlPE0+IHwgc3RyaW5nPiB7XG4gICAgY29uc3QgeyBjdHhBcmdzLCBsb2cgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRV9CWSwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLnBhZ2luYXRlQnkpO1xuICAgIGxvZy5pbmZvKFxuICAgICAgYFJ1bm5pbmcgcGFnaW5hdGVCeSBrZXkgJHtrZXkgYXMgc3RyaW5nfSwgb3JkZXIgJHtvcmRlcn0gd2l0aCBzaXplICR7KHJlZiBhcyBhbnkpLmxpbWl0fSBhbmQgYXJncyAke2N0eEFyZ3N9YFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMucmVwby5wYWdpbmF0ZUJ5KFxuICAgICAga2V5IGFzIGtleW9mIE0sXG4gICAgICBvcmRlciBhcyBhbnksXG4gICAgICByZWYgYXMgYW55LFxuICAgICAgLi4uY3R4QXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyBwYWdlKFxuICAgIGN0eDogQ3R4IHwgRmFicmljQ29udHJhY3RDb250ZXh0LFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgZGlyZWN0aW9uOiBzdHJpbmcgfCBPcmRlckRpcmVjdGlvbiA9IE9yZGVyRGlyZWN0aW9uLkFTQyxcbiAgICByZWY6IE9taXQ8RGlyZWN0aW9uTGltaXRPZmZzZXQsIFwiZGlyZWN0aW9uXCI+IHwgc3RyaW5nID0ge1xuICAgICAgb2Zmc2V0OiAxLFxuICAgICAgbGltaXQ6IDEwLFxuICAgIH0sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxTZXJpYWxpemVkUGFnZTxNPiB8IHN0cmluZz4ge1xuICAgIGNvbnN0IHsgY3R4QXJncywgbG9nIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbLi4uYXJncywgY3R4XSwgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLlBBR0UsIHRydWUpXG4gICAgKS5mb3IodGhpcy5wYWdlKTtcbiAgICBsb2cuaW5mbyhcbiAgICAgIGBQYWdpbmcgJHtNb2RlbC50YWJsZU5hbWUodGhpcy5jbGF6eil9IGJ5IGRlZmF1bHQgcXVlcnkgYXR0cmlidXRlc2BcbiAgICApO1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9XG4gICAgICB0eXBlb2YgcmVmID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gKEpTT04ucGFyc2UocmVmKSBhcyBPbWl0PERpcmVjdGlvbkxpbWl0T2Zmc2V0LCBcImRpcmVjdGlvblwiPikgfHxcbiAgICAgICAgICAoe30gYXMgT21pdDxEaXJlY3Rpb25MaW1pdE9mZnNldCwgXCJkaXJlY3Rpb25cIj4pXG4gICAgICAgIDogcmVmO1xuICAgIHJldHVybiB0aGlzLnJlcG8ucGFnZShcbiAgICAgIHZhbHVlLFxuICAgICAgZGlyZWN0aW9uIGFzIE9yZGVyRGlyZWN0aW9uLFxuICAgICAgcmVmZXJlbmNlIGFzIE9taXQ8RGlyZWN0aW9uTGltaXRPZmZzZXQsIFwiZGlyZWN0aW9uXCI+LFxuICAgICAgLi4uY3R4QXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyBmaW5kT25lQnkoXG4gICAgY3R4OiBDdHggfCBGYWJyaWNDb250cmFjdENvbnRleHQsXG4gICAga2V5OiBzdHJpbmcgfCBrZXlvZiBNLFxuICAgIHZhbHVlOiBhbnksXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxNIHwgc3RyaW5nPiB7XG4gICAgY29uc3QgeyBjdHhBcmdzLCBsb2cgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuRklORF9PTkVfQlksIHRydWUpXG4gICAgKS5mb3IodGhpcy5maW5kT25lQnkpO1xuICAgIGxvZy5pbmZvKFxuICAgICAgYFJ1bm5pbmcgZmluZE9uZUJ5IGtleSAke2tleSBhcyBzdHJpbmd9LCB2YWx1ZTogJHt2YWx1ZX0gd2l0aCBhcmdzICR7Y3R4QXJnc31gXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5yZXBvLmZpbmRPbmVCeShrZXkgYXMga2V5b2YgTSwgdmFsdWUsIC4uLmN0eEFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgc3RhdGVtZW50KFxuICAgIGN0eDogQ3R4IHwgRmFicmljQ29udHJhY3RDb250ZXh0LFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgeyBjdHhBcmdzLCBsb2cgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBQZXJzaXN0ZW5jZUtleXMuU1RBVEVNRU5ULCB0cnVlKVxuICAgICkuZm9yKHRoaXMuc3RhdGVtZW50KTtcbiAgICBsb2cuaW5mbyhgUnVubmluZyBzdGF0ZW1lbnQgJHttZXRob2R9IHdpdGggYXJncyAke2N0eEFyZ3N9YCk7XG4gICAgcmV0dXJuIHRoaXMucmVwby5zdGF0ZW1lbnQobWV0aG9kLCAuLi5jdHhBcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGNvdW50T2YoXG4gICAgY3R4OiBDdHggfCBGYWJyaWNDb250cmFjdENvbnRleHQsXG4gICAga2V5Pzogc3RyaW5nIHwga2V5b2YgTSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPG51bWJlciB8IHN0cmluZz4ge1xuICAgIGNvbnN0IHsgY3R4QXJncywgbG9nIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbLi4uYXJncywgY3R4XSwgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkNPVU5UX09GLCB0cnVlKVxuICAgICkuZm9yKHRoaXMuY291bnRPZik7XG4gICAgbG9nLmluZm8oYFJ1bm5pbmcgY291bnRPZiR7a2V5ID8gYCBrZXkgJHtrZXkgYXMgc3RyaW5nfWAgOiBcIlwifWApO1xuICAgIHJldHVybiB0aGlzLnJlcG8uY291bnRPZihrZXkgYXMga2V5b2YgTSB8IHVuZGVmaW5lZCwgLi4uY3R4QXJncyk7XG4gIH1cblxuICBhc3luYyBtYXhPZihcbiAgICBjdHg6IEN0eCB8IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICBrZXk6IHN0cmluZyB8IGtleW9mIE0sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxNW2tleW9mIE1dIHwgc3RyaW5nPiB7XG4gICAgY29uc3QgeyBjdHhBcmdzLCBsb2cgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUFYX09GLCB0cnVlKVxuICAgICkuZm9yKHRoaXMubWF4T2YpO1xuICAgIGxvZy5pbmZvKGBSdW5uaW5nIG1heE9mIGtleSAke2tleSBhcyBzdHJpbmd9YCk7XG4gICAgcmV0dXJuIHRoaXMucmVwby5tYXhPZihrZXkgYXMga2V5b2YgTSwgLi4uY3R4QXJncyk7XG4gIH1cblxuICBhc3luYyBtaW5PZihcbiAgICBjdHg6IEN0eCB8IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICBrZXk6IHN0cmluZyB8IGtleW9mIE0sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxNW2tleW9mIE1dIHwgc3RyaW5nPiB7XG4gICAgY29uc3QgeyBjdHhBcmdzLCBsb2cgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUlOX09GLCB0cnVlKVxuICAgICkuZm9yKHRoaXMubWluT2YpO1xuICAgIGxvZy5pbmZvKGBSdW5uaW5nIG1pbk9mIGtleSAke2tleSBhcyBzdHJpbmd9YCk7XG4gICAgcmV0dXJuIHRoaXMucmVwby5taW5PZihrZXkgYXMga2V5b2YgTSwgLi4uY3R4QXJncyk7XG4gIH1cblxuICBhc3luYyBhdmdPZihcbiAgICBjdHg6IEN0eCB8IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICBrZXk6IHN0cmluZyB8IGtleW9mIE0sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxudW1iZXIgfCBzdHJpbmc+IHtcbiAgICBjb25zdCB7IGN0eEFyZ3MsIGxvZyB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoWy4uLmFyZ3MsIGN0eF0sIFByZXBhcmVkU3RhdGVtZW50S2V5cy5BVkdfT0YsIHRydWUpXG4gICAgKS5mb3IodGhpcy5hdmdPZik7XG4gICAgbG9nLmluZm8oYFJ1bm5pbmcgYXZnT2Yga2V5ICR7a2V5IGFzIHN0cmluZ31gKTtcbiAgICByZXR1cm4gdGhpcy5yZXBvLmF2Z09mKGtleSBhcyBrZXlvZiBNLCAuLi5jdHhBcmdzKTtcbiAgfVxuXG4gIGFzeW5jIHN1bU9mKFxuICAgIGN0eDogQ3R4IHwgRmFicmljQ29udHJhY3RDb250ZXh0LFxuICAgIGtleTogc3RyaW5nIHwga2V5b2YgTSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPG51bWJlciB8IHN0cmluZz4ge1xuICAgIGNvbnN0IHsgY3R4QXJncywgbG9nIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbLi4uYXJncywgY3R4XSwgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLlNVTV9PRiwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLnN1bU9mKTtcbiAgICBsb2cuaW5mbyhgUnVubmluZyBzdW1PZiBrZXkgJHtrZXkgYXMgc3RyaW5nfWApO1xuICAgIHJldHVybiB0aGlzLnJlcG8uc3VtT2Yoa2V5IGFzIGtleW9mIE0sIC4uLmN0eEFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgZGlzdGluY3RPZihcbiAgICBjdHg6IEN0eCB8IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICBrZXk6IHN0cmluZyB8IGtleW9mIE0sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxNW2tleW9mIE1dW10gfCBzdHJpbmc+IHtcbiAgICBjb25zdCB7IGN0eEFyZ3MsIGxvZyB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoWy4uLmFyZ3MsIGN0eF0sIFByZXBhcmVkU3RhdGVtZW50S2V5cy5ESVNUSU5DVF9PRiwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLmRpc3RpbmN0T2YpO1xuICAgIGxvZy5pbmZvKGBSdW5uaW5nIGRpc3RpbmN0T2Yga2V5ICR7a2V5IGFzIHN0cmluZ31gKTtcbiAgICByZXR1cm4gdGhpcy5yZXBvLmRpc3RpbmN0T2Yoa2V5IGFzIGtleW9mIE0sIC4uLmN0eEFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgZ3JvdXBPZihcbiAgICBjdHg6IEN0eCB8IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICBrZXk6IHN0cmluZyB8IGtleW9mIE0sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBNW10+IHwgc3RyaW5nPiB7XG4gICAgY29uc3QgeyBjdHhBcmdzLCBsb2cgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuR1JPVVBfT0YsIHRydWUpXG4gICAgKS5mb3IodGhpcy5ncm91cE9mKTtcbiAgICBsb2cuaW5mbyhgUnVubmluZyBncm91cE9mIGtleSAke2tleSBhcyBzdHJpbmd9YCk7XG4gICAgcmV0dXJuIHRoaXMucmVwby5ncm91cE9mKGtleSBhcyBrZXlvZiBNLCAuLi5jdHhBcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHNpbmdsZSBtb2RlbCBpbiB0aGUgc3RhdGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRvIHRoZSByZXBvc2l0b3J5J3MgY3JlYXRlIG1ldGhvZFxuICAgKiBAcGFyYW0ge0N0eH0gY3R4IC0gVGhlIEZhYnJpYyBjaGFpbmNvZGUgY29udGV4dFxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxNPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNyZWF0ZWQgbW9kZWxcbiAgICovXG4gIGFzeW5jIGNyZWF0ZShcbiAgICBjb250ZXh0OiBDdHggfCBGYWJyaWNDb250cmFjdENvbnRleHQsXG4gICAgbW9kZWw6IHN0cmluZyB8IE0sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxzdHJpbmcgfCBNPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eEFyZ3MsIGN0eCB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoWy4uLmFyZ3MsIGNvbnRleHRdLCBPcGVyYXRpb25LZXlzLkNSRUFURSwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLmNyZWF0ZSk7XG4gICAgdGhpcy5lbnN1cmVNaXJyb3JXcml0ZVBlcm1pc3Npb25zKGN0eCk7XG4gICAgbG9nLmluZm8oYENPTlRSQUNUIENSRUFURSwgJHtjdHhBcmdzfWApO1xuXG4gICAgaWYgKHR5cGVvZiBtb2RlbCA9PT0gXCJzdHJpbmdcIikgbW9kZWwgPSB0aGlzLmRlc2VyaWFsaXplPE0+KG1vZGVsKSBhcyBNO1xuXG4gICAgbG9nLmluZm8oYENyZWF0aW5nIG1vZGVsOiAke0pTT04uc3RyaW5naWZ5KG1vZGVsKX1gKTtcblxuICAgIGNvbnN0IHRyYW5zaWVudCA9IHRoaXMuZ2V0VHJhbnNpZW50RGF0YShjdHgpO1xuXG4gICAgbG9nLmluZm8oYE1lcmdpbmcgdHJhbnNpZW50IGRhdGEuLi5gKTtcbiAgICBtb2RlbCA9IE1vZGVsLm1lcmdlKG1vZGVsLCB0cmFuc2llbnQsIHRoaXMuY2xhenopIGFzIE07XG5cbiAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgdGhpcy5yZXBvLmNyZWF0ZShtb2RlbCwgLi4uY3R4QXJncyk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBuZXcgdGhpcy5jbGF6eihNb2RlbC5zZWdyZWdhdGUoY3JlYXRlZCkubW9kZWwpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlYWRzIGEgc2luZ2xlIG1vZGVsIGZyb20gdGhlIHN0YXRlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0byB0aGUgcmVwb3NpdG9yeSdzIHJlYWQgbWV0aG9kXG4gICAqIEBwYXJhbSB7Q3R4fSBjdHggLSBUaGUgRmFicmljIGNoYWluY29kZSBjb250ZXh0XG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBtb2RlbCB0byByZWFkXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPE0+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmV0cmlldmVkIG1vZGVsXG4gICAqL1xuICBhc3luYyByZWFkKFxuICAgIGN0eDogQ3R4IHwgRmFicmljQ29udHJhY3RDb250ZXh0LFxuICAgIGtleTogUHJpbWFyeUtleVR5cGUgfCBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxNIHwgc3RyaW5nPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eEFyZ3MgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBPcGVyYXRpb25LZXlzLlJFQUQsIHRydWUpXG4gICAgKS5mb3IodGhpcy5jcmVhdGUpO1xuICAgIGxvZy5pbmZvKGByZWFkaW5nIGVudHJ5IHdpdGggcGsgJHtrZXl9IGApO1xuXG4gICAgcmV0dXJuIHRoaXMucmVwby5yZWFkKGtleSwgLi4uY3R4QXJncyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VHJhbnNpZW50RGF0YShjdHg6IEZhYnJpY0NvbnRyYWN0Q29udGV4dCk6IGFueSB7XG4gICAgY29uc3QgdHJhbnNpZW50TWFwID0gY3R4LnN0dWIuZ2V0VHJhbnNpZW50KCk7XG4gICAgbGV0IHRyYW5zaWVudDogYW55ID0ge307XG5cbiAgICBpZiAodHJhbnNpZW50TWFwLmhhcyh0aGlzLnJlcG9bXCJ0YWJsZU5hbWVcIl0pKSB7XG4gICAgICB0cmFuc2llbnQgPSBKU09OLnBhcnNlKFxuICAgICAgICAoXG4gICAgICAgICAgdHJhbnNpZW50TWFwLmdldCh0aGlzLnJlcG9bXCJ0YWJsZU5hbWVcIl0pIGFzIHVua25vd24gYXMgQnVmZmVyXG4gICAgICAgICk/LnRvU3RyaW5nKFwidXRmOFwiKSBhcyBzdHJpbmdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRyYW5zaWVudE1hcC5oYXMoXCJfX292ZXJyaWRlc1wiKSkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGVzID0gSlNPTi5wYXJzZShcbiAgICAgICAgKFxuICAgICAgICAgIHRyYW5zaWVudE1hcC5nZXQodGhpcy5yZXBvW1widGFibGVOYW1lXCJdKSBhcyB1bmtub3duIGFzIEJ1ZmZlclxuICAgICAgICApPy50b1N0cmluZyhcInV0ZjhcIikgYXMgc3RyaW5nXG4gICAgICApO1xuXG4gICAgICBjdHguYWNjdW11bGF0ZShvdmVycmlkZXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2llbnQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgYSBzaW5nbGUgbW9kZWwgaW4gdGhlIHN0YXRlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0byB0aGUgcmVwb3NpdG9yeSdzIHVwZGF0ZSBtZXRob2RcbiAgICogQHBhcmFtIHtDdHh9IGN0eCAtIFRoZSBGYWJyaWMgY2hhaW5jb2RlIGNvbnRleHRcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCB0byB1cGRhdGVcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8TT59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSB1cGRhdGVkIG1vZGVsXG4gICAqL1xuICBhc3luYyB1cGRhdGUoXG4gICAgY29udGV4dDogQ3R4IHwgRmFicmljQ29udHJhY3RDb250ZXh0LFxuICAgIG1vZGVsOiBzdHJpbmcgfCBNLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8c3RyaW5nIHwgTT4ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHhBcmdzLCBjdHggfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjb250ZXh0XSwgT3BlcmF0aW9uS2V5cy5VUERBVEUsIHRydWUpXG4gICAgKS5mb3IodGhpcy51cGRhdGUpO1xuICAgIHRoaXMuZW5zdXJlTWlycm9yV3JpdGVQZXJtaXNzaW9ucyhjdHgpO1xuICAgIGlmICh0eXBlb2YgbW9kZWwgPT09IFwic3RyaW5nXCIpIG1vZGVsID0gdGhpcy5kZXNlcmlhbGl6ZTxNPihtb2RlbCkgYXMgTTtcblxuICAgIGxvZy5pbmZvKGBVcGRhdGluZyBtb2RlbDogJHtKU09OLnN0cmluZ2lmeShtb2RlbCl9YCk7XG5cbiAgICBjb25zdCB0cmFuc2llbnQgPSB0aGlzLmdldFRyYW5zaWVudERhdGEoY3R4KTtcblxuICAgIGxvZy5pbmZvKGBNZXJnaW5nIHRyYW5zaWVudCBkYXRhLi4uYCk7XG4gICAgbW9kZWwgPSBNb2RlbC5tZXJnZShtb2RlbCwgdHJhbnNpZW50LCB0aGlzLmNsYXp6KSBhcyBNO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB0aGlzLnJlcG8udXBkYXRlKG1vZGVsLCAuLi5jdHhBcmdzKTtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgdGhpcy5jbGF6eihNb2RlbC5zZWdyZWdhdGUodXBkYXRlZCkubW9kZWwpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgYSBzaW5nbGUgbW9kZWwgZnJvbSB0aGUgc3RhdGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRvIHRoZSByZXBvc2l0b3J5J3MgZGVsZXRlIG1ldGhvZFxuICAgKiBAcGFyYW0ge0N0eH0gY3R4IC0gVGhlIEZhYnJpYyBjaGFpbmNvZGUgY29udGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0ga2V5IC0gVGhlIGtleSBvZiB0aGUgbW9kZWwgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPE0+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgZGVsZXRlZCBtb2RlbFxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKFxuICAgIGN0eDogQ3R4IHwgRmFicmljQ29udHJhY3RDb250ZXh0LFxuICAgIGtleTogUHJpbWFyeUtleVR5cGUgfCBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxNIHwgc3RyaW5nPiB7XG4gICAgY29uc3Qge1xuICAgICAgbG9nLFxuICAgICAgY3R4QXJncyxcbiAgICAgIGN0eDogZmFicmljQ3R4LFxuICAgIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoWy4uLmFyZ3MsIGN0eF0sIE9wZXJhdGlvbktleXMuREVMRVRFLCB0cnVlKSkuZm9yKFxuICAgICAgdGhpcy5kZWxldGVcbiAgICApO1xuICAgIHRoaXMuZW5zdXJlTWlycm9yV3JpdGVQZXJtaXNzaW9ucyhmYWJyaWNDdHgpO1xuICAgIGxvZy5pbmZvKGBkZWxldGluZyBlbnRyeSB3aXRoIHBrICR7a2V5fSBgKTtcbiAgICByZXR1cm4gdGhpcy5yZXBvLmRlbGV0ZShTdHJpbmcoa2V5KSwgLi4uY3R4QXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgbXVsdGlwbGUgbW9kZWxzIGZyb20gdGhlIHN0YXRlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0byB0aGUgcmVwb3NpdG9yeSdzIGRlbGV0ZUFsbCBtZXRob2RcbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IG51bWJlcltdfSBrZXlzIC0gVGhlIGtleXMgb2YgdGhlIG1vZGVscyB0byBkZWxldGVcbiAgICogQHBhcmFtIHtDdHh9IGN0eCAtIFRoZSBGYWJyaWMgY2hhaW5jb2RlIGNvbnRleHRcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8TVtdPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGRlbGV0ZWQgbW9kZWxzXG4gICAqL1xuICBhc3luYyBkZWxldGVBbGwoXG4gICAgY3R4OiBDdHggfCBGYWJyaWNDb250cmFjdENvbnRleHQsXG4gICAga2V5czogUHJpbWFyeUtleVR5cGVbXSB8IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPE1bXSB8IHN0cmluZz4ge1xuICAgIGNvbnN0IHsgY3R4QXJncywgY3R4OiBmYWJyaWNDdHggfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuREVMRVRFX0FMTCwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLmRlbGV0ZUFsbCk7XG4gICAgdGhpcy5lbnN1cmVNaXJyb3JXcml0ZVBlcm1pc3Npb25zKGZhYnJpY0N0eCk7XG4gICAgaWYgKHR5cGVvZiBrZXlzID09PSBcInN0cmluZ1wiKSBrZXlzID0gSlNPTi5wYXJzZShrZXlzKSBhcyBzdHJpbmdbXTtcbiAgICBjb25zdCBkZWxldGVkID0gYXdhaXQgdGhpcy5yZXBvLmRlbGV0ZUFsbChrZXlzLCAuLi5jdHhBcmdzKTtcbiAgICBjb25zdCByZXN1bHQgPSBkZWxldGVkLm1hcCgoYykgPT4gbmV3IHRoaXMuY2xhenooTW9kZWwuc2VncmVnYXRlKGMpLm1vZGVsKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVhZHMgbXVsdGlwbGUgbW9kZWxzIGZyb20gdGhlIHN0YXRlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0byB0aGUgcmVwb3NpdG9yeSdzIHJlYWRBbGwgbWV0aG9kXG4gICAqIEBwYXJhbSB7Q3R4fSBjdHggLSBUaGUgRmFicmljIGNoYWluY29kZSBjb250ZXh0XG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBudW1iZXJbXX0ga2V5cyAtIFRoZSBrZXlzIG9mIHRoZSBtb2RlbHMgdG8gcmVhZFxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxNW10+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmV0cmlldmVkIG1vZGVsc1xuICAgKi9cbiAgYXN5bmMgcmVhZEFsbChcbiAgICBjdHg6IEN0eCB8IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICBrZXlzOiBQcmltYXJ5S2V5VHlwZVtdIHwgc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8TVtdIHwgc3RyaW5nPiB7XG4gICAgY29uc3QgeyBjdHhBcmdzIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbLi4uYXJncywgY3R4XSwgQnVsa0NydWRPcGVyYXRpb25LZXlzLlJFQURfQUxMLCB0cnVlKVxuICAgICkuZm9yKHRoaXMuY3JlYXRlKTtcbiAgICBpZiAodHlwZW9mIGtleXMgPT09IFwic3RyaW5nXCIpIGtleXMgPSBKU09OLnBhcnNlKGtleXMpIGFzIHN0cmluZ1tdO1xuICAgIHJldHVybiB0aGlzLnJlcG8ucmVhZEFsbChrZXlzLCAuLi5jdHhBcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBtdWx0aXBsZSBtb2RlbHMgaW4gdGhlIHN0YXRlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0byB0aGUgcmVwb3NpdG9yeSdzIHVwZGF0ZUFsbCBtZXRob2RcbiAgICogQHBhcmFtIHtDdHh9IGN0eCAtIFRoZSBGYWJyaWMgY2hhaW5jb2RlIGNvbnRleHRcbiAgICogQHBhcmFtIHtNW119IG1vZGVscyAtIFRoZSBtb2RlbHMgdG8gdXBkYXRlXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSB1cGRhdGVkIG1vZGVsc1xuICAgKi9cbiAgYXN5bmMgdXBkYXRlQWxsKFxuICAgIGNvbnRleHQ6IEN0eCB8IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICBtb2RlbHM6IHN0cmluZyB8IE1bXSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHN0cmluZyB8IE1bXT4ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHhBcmdzLCBjdHggfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFxuICAgICAgICBbLi4uYXJncywgY29udGV4dF0sXG4gICAgICAgIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5VUERBVEVfQUxMLFxuICAgICAgICB0cnVlXG4gICAgICApXG4gICAgKS5mb3IodGhpcy51cGRhdGVBbGwpO1xuICAgIHRoaXMuZW5zdXJlTWlycm9yV3JpdGVQZXJtaXNzaW9ucyhjdHgpO1xuICAgIGlmICh0eXBlb2YgbW9kZWxzID09PSBcInN0cmluZ1wiKVxuICAgICAgbW9kZWxzID0gKEpTT04ucGFyc2UobW9kZWxzKSBhcyBbXSlcbiAgICAgICAgLm1hcCgobSkgPT4gdGhpcy5kZXNlcmlhbGl6ZShtKSlcbiAgICAgICAgLm1hcCgobSkgPT4gbmV3IHRoaXMuY2xhenoobSkpIGFzIGFueTtcblxuICAgIGNvbnN0IHRyYW5zaWVudCA9IHRoaXMuZ2V0VHJhbnNpZW50RGF0YShjdHgpO1xuXG4gICAgbG9nLmluZm8oYE1lcmdpbmcgdHJhbnNpZW50IGRhdGEuLi5gKTtcbiAgICBtb2RlbHMgPSAobW9kZWxzIGFzIE1bXSkubWFwKChtLCBpKSA9PiB7XG4gICAgICBjb25zdCB0ID0gQXJyYXkuaXNBcnJheSh0cmFuc2llbnQpID8gdHJhbnNpZW50W2ldIDogdHJhbnNpZW50O1xuICAgICAgcmV0dXJuIE1vZGVsLm1lcmdlKG0sIHQgfHwge30sIHRoaXMuY2xhenopIGFzIE07XG4gICAgfSk7XG5cbiAgICBsb2cuaW5mbyhgYWRkaW5nICR7bW9kZWxzLmxlbmd0aH0gZW50cmllcyB0byB0aGUgdGFibGVgKTtcblxuICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB0aGlzLnJlcG8udXBkYXRlQWxsKFxuICAgICAgbW9kZWxzIGFzIHVua25vd24gYXMgTVtdLFxuICAgICAgLi4uY3R4QXJnc1xuICAgICk7XG4gICAgY29uc3QgcmVzdWx0ID0gdXBkYXRlZC5tYXAoKGMpID0+IG5ldyB0aGlzLmNsYXp6KE1vZGVsLnNlZ3JlZ2F0ZShjKS5tb2RlbCkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgcXVlcnkgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmRpdGlvbnMgYW5kIG9wdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgc2ltcGxpZmllZCB3YXkgdG8gcXVlcnkgdGhlIGRhdGFiYXNlIHdpdGggY29tbW9uIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAqIEBwYXJhbSB7Q29uZGl0aW9uPE0+fSBjb25kaXRpb24gLSBUaGUgY29uZGl0aW9uIHRvIGZpbHRlciByZWNvcmRzLlxuICAgKiBAcGFyYW0gb3JkZXJCeSAtIFRoZSBmaWVsZCB0byBvcmRlciByZXN1bHRzIGJ5LlxuICAgKiBAcGFyYW0ge09yZGVyRGlyZWN0aW9ufSBbb3JkZXI9T3JkZXJEaXJlY3Rpb24uQVNDXSAtIFRoZSBzb3J0IGRpcmVjdGlvbi5cbiAgICogQHBhcmFtIHtPcmRlckRpcmVjdGlvbn0gW29yZGVyPU9yZGVyRGlyZWN0aW9uLkFTQ10gLSBUaGUgc29ydCBkaXJlY3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbGltaXRdIC0gT3B0aW9uYWwgbWF4aW11bSBudW1iZXIgb2YgcmVzdWx0cyB0byByZXR1cm4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2tpcF0gLSBPcHRpb25hbCBudW1iZXIgb2YgcmVzdWx0cyB0byBza2lwLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFRoZSBxdWVyeSByZXN1bHRzIGFzIG1vZGVsIGluc3RhbmNlcy5cbiAgICovXG4gIGFzeW5jIHF1ZXJ5KFxuICAgIGNvbnRleHQ6IEN0eCB8IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICBjb25kaXRpb246IENvbmRpdGlvbjxNPiB8IHN0cmluZyxcbiAgICBvcmRlckJ5OiBzdHJpbmcgfCBrZXlvZiBNLFxuICAgIG9yZGVyOiBPcmRlckRpcmVjdGlvbiB8IHN0cmluZyA9IE9yZGVyRGlyZWN0aW9uLkFTQyxcbiAgICBsaW1pdD86IG51bWJlcixcbiAgICBza2lwPzogbnVtYmVyLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8TVtdIHwgc3RyaW5nPiB7XG4gICAgY29uc3QgeyBjdHhBcmdzIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbLi4uYXJncywgY29udGV4dF0sIFBlcnNpc3RlbmNlS2V5cy5RVUVSWSwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLmNyZWF0ZSk7XG4gICAgcmV0dXJuIHRoaXMucmVwby5xdWVyeShcbiAgICAgIGNvbmRpdGlvbiBhcyBDb25kaXRpb248TT4sXG4gICAgICBvcmRlckJ5IGFzIGtleW9mIE0sXG4gICAgICBvcmRlciBhcyBPcmRlckRpcmVjdGlvbixcbiAgICAgIGxpbWl0LFxuICAgICAgc2tpcCxcbiAgICAgIC4uLmN0eEFyZ3NcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyBhIHJhdyBxdWVyeSBhZ2FpbnN0IHRoZSBzdGF0ZSBkYXRhYmFzZVxuICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdG8gdGhlIHJlcG9zaXRvcnkncyByYXcgbWV0aG9kXG4gICAqIEBwYXJhbSB7Q3R4fSBjdHggLSBUaGUgRmFicmljIGNoYWluY29kZSBjb250ZXh0XG4gICAqIEBwYXJhbSB7YW55fSByYXdJbnB1dCAtIFRoZSBxdWVyeSB0byBleGVjdXRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZG9jc09ubHkgLSBXaGV0aGVyIHRvIHJldHVybiBvbmx5IGRvY3VtZW50c1xuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcXVlcnkgcmVzdWx0c1xuICAgKi9cbiAgYXN5bmMgcmF3KFxuICAgIGN0eDogQ3R4IHwgRmFicmljQ29udHJhY3RDb250ZXh0LFxuICAgIHJhd0lucHV0OiBNYW5nb1F1ZXJ5LFxuICAgIGRvY3NPbmx5OiBib29sZWFuLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgeyBjdHhBcmdzIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoWy4uLmFyZ3MsIGN0eF0sIFwicmF3XCIsIHRydWUpKS5mb3IoXG4gICAgICB0aGlzLnJhd1xuICAgICk7XG4gICAgcmV0dXJuIEZhYnJpY0NydWRDb250cmFjdC5hZGFwdGVyLnJhdyhyYXdJbnB1dCwgZG9jc09ubHksIC4uLmN0eEFyZ3MpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlcmlhbGl6ZShtb2RlbDogTSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZhYnJpY0NydWRDb250cmFjdC5zZXJpYWxpemVyLnNlcmlhbGl6ZShtb2RlbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVzZXJpYWxpemU8TSBleHRlbmRzIE1vZGVsPihzdHI6IHN0cmluZyk6IE0ge1xuICAgIHJldHVybiAoXG4gICAgICBGYWJyaWNDcnVkQ29udHJhY3Quc2VyaWFsaXplciBhcyB1bmtub3duIGFzIFNlcmlhbGl6ZXI8TT5cbiAgICApLmRlc2VyaWFsaXplKHN0cik7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaW5pdChjdHg6IEN0eCB8IEZhYnJpY0NvbnRyYWN0Q29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgbG9nIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbY3R4XSwgUGVyc2lzdGVuY2VLZXlzLklOSVRJQUxJWkFUSU9OLCB0cnVlKVxuICAgICkuZm9yKHRoaXMuaW5pdCk7XG4gICAgbG9nLmluZm8oYFJ1bm5pbmcgY29udHJhY3QgJHt0aGlzLmdldE5hbWUoKX0gaW5pdGlhbGl6YXRpb24uLi5gKTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICBsb2cuaW5mbyhgQ29udHJhY3QgaW5pdGlhbGl6YXRpb24gY29tcGxldGVkLmApO1xuICB9XG5cbiAgYXN5bmMgaGVhbHRoY2hlY2soXG4gICAgY3R4OiBDdHggfCBGYWJyaWNDb250cmFjdENvbnRleHRcbiAgKTogUHJvbWlzZTxzdHJpbmcgfCBoZWFsdGhjaGVjaz4ge1xuICAgIGNvbnN0IHsgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW2N0eF0sIFwiaGVhbHRoY2hlY2tcIiwgdHJ1ZSkpLmZvcihcbiAgICAgIHRoaXMuaGVhbHRoY2hlY2tcbiAgICApO1xuICAgIGxvZy5pbmZvKGBSdW5uaW5nIEhlYWx0aGNoZWNrOiAke3RoaXMuaW5pdGlhbGl6ZWR9Li4uYCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWx0aGNoZWNrOiB0aGlzLmluaXRpYWxpemVkLFxuICAgICAgdmVyc2lvbjogVkVSU0lPTixcbiAgICAgIHBhY2thZ2U6IFBBQ0tBR0VfTkFNRSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIG11bHRpcGxlIG1vZGVscyBpbiB0aGUgc3RhdGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRvIHRoZSByZXBvc2l0b3J5J3MgY3JlYXRlQWxsIG1ldGhvZFxuICAgKiBAcGFyYW0ge0N0eH0gY3R4IC0gVGhlIEZhYnJpYyBjaGFpbmNvZGUgY29udGV4dFxuICAgKiBAcGFyYW0ge01bXX0gbW9kZWxzIC0gVGhlIG1vZGVscyB0byBjcmVhdGVcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8TVtdPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNyZWF0ZWQgbW9kZWxzXG4gICAqL1xuICBhc3luYyBjcmVhdGVBbGwoXG4gICAgY29udGV4dDogQ3R4IHwgRmFicmljQ29udHJhY3RDb250ZXh0LFxuICAgIG1vZGVsczogc3RyaW5nIHwgTVtdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8c3RyaW5nIHwgTVtdPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eEFyZ3MsIGN0eCB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoXG4gICAgICAgIFsuLi5hcmdzLCBjb250ZXh0XSxcbiAgICAgICAgQnVsa0NydWRPcGVyYXRpb25LZXlzLkNSRUFURV9BTEwsXG4gICAgICAgIHRydWVcbiAgICAgIClcbiAgICApLmZvcih0aGlzLmNyZWF0ZUFsbCk7XG4gICAgdGhpcy5lbnN1cmVNaXJyb3JXcml0ZVBlcm1pc3Npb25zKGN0eCk7XG4gICAgaWYgKHR5cGVvZiBtb2RlbHMgPT09IFwic3RyaW5nXCIpXG4gICAgICBtb2RlbHMgPSAoSlNPTi5wYXJzZShtb2RlbHMpIGFzIFtdKVxuICAgICAgICAubWFwKChtKSA9PiB0aGlzLmRlc2VyaWFsaXplKG0pKVxuICAgICAgICAubWFwKChtKSA9PiBuZXcgdGhpcy5jbGF6eihtKSkgYXMgYW55O1xuXG4gICAgY29uc3QgdHJhbnNpZW50ID0gdGhpcy5nZXRUcmFuc2llbnREYXRhKGN0eCk7XG5cbiAgICBsb2cuaW5mbyhgTWVyZ2luZyB0cmFuc2llbnQgZGF0YS4uLmApO1xuICAgIG1vZGVscyA9IChtb2RlbHMgYXMgTVtdKS5tYXAoKG0sIGkpID0+IHtcbiAgICAgIGNvbnN0IHQgPSBBcnJheS5pc0FycmF5KHRyYW5zaWVudCkgPyB0cmFuc2llbnRbaV0gOiB0cmFuc2llbnQ7XG4gICAgICByZXR1cm4gTW9kZWwubWVyZ2UobSwgdCB8fCB7fSwgdGhpcy5jbGF6eikgYXMgTTtcbiAgICB9KTtcblxuICAgIGxvZy5pbmZvKGBhZGRpbmcgJHttb2RlbHMubGVuZ3RofSBlbnRyaWVzIHRvIHRoZSB0YWJsZWApO1xuXG4gICAgY29uc3QgY3JlYXRlZCA9IGF3YWl0IHRoaXMucmVwby5jcmVhdGVBbGwoXG4gICAgICBtb2RlbHMgYXMgdW5rbm93biBhcyBNW10sXG4gICAgICAuLi5jdHhBcmdzXG4gICAgKTtcbiAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVkLm1hcCgoYykgPT4gbmV3IHRoaXMuY2xhenooTW9kZWwuc2VncmVnYXRlKGMpLm1vZGVsKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbnN1cmVNaXJyb3JXcml0ZVBlcm1pc3Npb25zKGN0eDogRmFicmljQ29udHJhY3RDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICBjb25zdCBtaXJyb3JNZXRhID0gTW9kZWwubWlycm9yZWRBdCh0aGlzLmNsYXp6KTtcbiAgICBpZiAoIW1pcnJvck1ldGEpIHJldHVybjtcbiAgICBjb25zdCBtc3AgPSBleHRyYWN0TXNwSWQoY3R4LmlkZW50aXR5KTtcbiAgICBpZiAoXG4gICAgICBtc3AgJiZcbiAgICAgIChtc3AgPT09IG1pcnJvck1ldGEubXNwSWQgfHxcbiAgICAgICAgKG1pcnJvck1ldGEuY29uZGl0aW9uICYmIG1pcnJvck1ldGEuY29uZGl0aW9uKG1zcCkpKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEF1dGhvcml6YXRpb25FcnJvcihcbiAgICAgICAgYE9yZ2FuaXphdGlvbiAke21zcH0gaXMgbm90IGF1dGhvcml6ZWQgdG8gbW9kaWZ5IG1pcnJvcmVkIGRhdGFgXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0LCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRFxuICApOiBGYWJyaWNDb250ZXh0dWFsaXplZEFyZ3M8QVJHUywgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlPjtcbiAgcHJvdGVjdGVkIGxvZ0N0eDxcbiAgICBBUkdTIGV4dGVuZHMgYW55W10gPSBhbnlbXSxcbiAgICBNRVRIT0QgZXh0ZW5kcyBNZXRob2RPck9wZXJhdGlvbiA9IE1ldGhvZE9yT3BlcmF0aW9uLFxuICA+KFxuICAgIGFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxGYWJyaWNDb250cmFjdENvbnRleHQsIEFSR1M+LFxuICAgIG9wZXJhdGlvbjogTUVUSE9ELFxuICAgIGFsbG93Q3JlYXRlOiBmYWxzZVxuICApOiBGYWJyaWNDb250ZXh0dWFsaXplZEFyZ3M8QVJHUywgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlPjtcbiAgcHJvdGVjdGVkIGxvZ0N0eDxcbiAgICBBUkdTIGV4dGVuZHMgYW55W10gPSBhbnlbXSxcbiAgICBNRVRIT0QgZXh0ZW5kcyBNZXRob2RPck9wZXJhdGlvbiA9IE1ldGhvZE9yT3BlcmF0aW9uLFxuICA+KFxuICAgIGFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxGYWJyaWNDb250cmFjdENvbnRleHQsIEFSR1M+LFxuICAgIG9wZXJhdGlvbjogTUVUSE9ELFxuICAgIGFsbG93Q3JlYXRlOiB0cnVlXG4gICk6IFByb21pc2U8XG4gICAgRmFicmljQ29udGV4dHVhbGl6ZWRBcmdzPEFSR1MsIE1FVEhPRCBleHRlbmRzIHN0cmluZyA/IHRydWUgOiBmYWxzZT5cbiAgPjtcbiAgcHJvdGVjdGVkIGxvZ0N0eDxcbiAgICBBUkdTIGV4dGVuZHMgYW55W10gPSBhbnlbXSxcbiAgICBNRVRIT0QgZXh0ZW5kcyBNZXRob2RPck9wZXJhdGlvbiA9IE1ldGhvZE9yT3BlcmF0aW9uLFxuICA+KFxuICAgIGFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxGYWJyaWNDb250cmFjdENvbnRleHQsIEFSR1M+LFxuICAgIG9wZXJhdGlvbjogTUVUSE9ELFxuICAgIGFsbG93Q3JlYXRlOiBib29sZWFuID0gZmFsc2VcbiAgKTpcbiAgICB8IFByb21pc2U8XG4gICAgICAgIEZhYnJpY0NvbnRleHR1YWxpemVkQXJnczxBUkdTLCBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2U+XG4gICAgICA+XG4gICAgfCBGYWJyaWNDb250ZXh0dWFsaXplZEFyZ3M8QVJHUywgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlPiB7XG4gICAgY29uc3QgY3R4ID0gYXJncy5wb3AoKTtcbiAgICBpZiAoIWN0eCB8fCAhY3R4LnN0dWIpIHtcbiAgICAgIHRocm93IG5ldyBNaXNzaW5nQ29udGV4dEVycm9yKGBObyB2YWxpZCBjb250ZXh0IHByb3ZpZGVkLi4uYCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHR1YWxpemVkID0gRmFicmljQ3J1ZENvbnRyYWN0LmFkYXB0ZXJbXCJsb2dDdHhcIl0oXG4gICAgICBbdGhpcy5jbGF6eiBhcyBhbnksIC4uLmFyZ3NdIGFzIGFueSxcbiAgICAgIG9wZXJhdGlvbixcbiAgICAgIGFsbG93Q3JlYXRlIGFzIGFueSxcbiAgICAgIGN0eFxuICAgICkgYXNcbiAgICAgIHwgRmFicmljQ29udGV4dHVhbGl6ZWRBcmdzPEFSR1MsIE1FVEhPRCBleHRlbmRzIHN0cmluZyA/IHRydWUgOiBmYWxzZT5cbiAgICAgIHwgUHJvbWlzZTxcbiAgICAgICAgICBGYWJyaWNDb250ZXh0dWFsaXplZEFyZ3M8QVJHUywgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlPlxuICAgICAgICA+O1xuICAgIGZ1bmN0aW9uIHNxdWFzaEFyZ3MoY3R4OiBGYWJyaWNDb250ZXh0dWFsaXplZEFyZ3MpIHtcbiAgICAgIGN0eC5jdHhBcmdzLnNoaWZ0KCk7IC8vIHJlbW92ZXMgYWRkZWQgbW9kZWwgdG8gYXJnc1xuICAgICAgcmV0dXJuIGN0eCBhcyBhbnk7XG4gICAgfVxuXG4gICAgaWYgKCEoY29udGV4dHVhbGl6ZWQgaW5zdGFuY2VvZiBQcm9taXNlKSkgcmV0dXJuIHNxdWFzaEFyZ3MoY29udGV4dHVhbGl6ZWQpO1xuICAgIHJldHVybiBjb250ZXh0dWFsaXplZC50aGVuKHNxdWFzaEFyZ3MpO1xuICB9XG59XG4iXX0=
418
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1jb250cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNydWQtY29udHJhY3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTJCO0FBQzNCLDZDQUEyQztBQUMzQyxnRUFBaUU7QUFDakUsNkRBQXdFO0FBQ3hFLHlFQUF1RDtBQUN2RCx5Q0FBeUg7QUFDekgsMEZBQW9GO0FBQ3BGLDJEQUFnRjtBQUNoRixzREFBOEQ7QUFDOUQsZ0VBQTREO0FBQzVELG1EQUEyRDtBQUMzRCxJQUFBLDRCQUFZLEdBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQ0c7QUFDSCxNQUFhLGtCQUFtQixTQUFRLDhCQUFRO0lBQzVDOztPQUVHO0lBQ0gsU0FBUyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksMENBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsU0FBUyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksb0RBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsSUFBSSxJQUFJO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsaUJBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdDLFFBQVE7WUFDUiw2QkFBNkI7WUFDN0IsMkJBQTJCO1lBQzNCLFNBQVM7WUFDVCxzQ0FBc0M7WUFDdEMsMERBQTBEO1lBQzFELFFBQVE7WUFDUixtRkFBbUY7WUFDbkYsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixNQUFNO1lBQ04sSUFBSTtRQUNSLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gsWUFBWSxJQUFJLEVBQUUsS0FBSztRQUNuQixLQUFLLENBQUMsSUFBSSxDQUFD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LENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQzVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyw0QkFBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSTtRQUM1QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxxQ0FBcUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9HLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtZQUN4QixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSTtRQUNwQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLHFDQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFD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QyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoSCxTQUFTLFVBQVUsQ0FBQyxHQUFHO1lBQ25CLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyw4QkFBOEI7WUFDbkQsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUMsY0FBYyxZQUFZLE9BQU8sQ0FBQztZQUNwQyxPQUFPLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUNKO0FBL1ZELGdEQStWQztBQUNELDh6c0RBQTh6c0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCIuLy4uL2Jvb3RzdHJhcC5qc1wiO1xuaW1wb3J0IFwiLi8uLi8uLi9zaGFyZWQvb3ZlcnJpZGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBGYWJyaWNDb250cmFjdEFkYXB0ZXIsIH0gZnJvbSBcIi4vLi4vQ29udHJhY3RBZGFwdGVyLmpzXCI7XG5pbXBvcnQgeyBDb250cmFjdCwgT2JqZWN0IGFzIEZhYnJpY09iamVjdCwgfSBmcm9tIFwiZmFicmljLWNvbnRyYWN0LWFwaVwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBBdXRob3JpemF0aW9uRXJyb3IsIE9yZGVyRGlyZWN0aW9uLCBQZXJzaXN0ZW5jZUtleXMsIFByZXBhcmVkU3RhdGVtZW50S2V5cywgUmVwb3NpdG9yeSwgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IERldGVybWluaXN0aWNTZXJpYWxpemVyIH0gZnJvbSBcIi4vLi4vLi4vc2hhcmVkL0RldGVybWluaXN0aWNTZXJpYWxpemVyLmpzXCI7XG5pbXBvcnQgeyBCdWxrQ3J1ZE9wZXJhdGlvbktleXMsIE9wZXJhdGlvbktleXMsIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBNaXNzaW5nQ29udGV4dEVycm9yIH0gZnJvbSBcIi4vLi4vLi4vc2hhcmVkL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBleHRyYWN0TXNwSWQgfSBmcm9tIFwiLi8uLi8uLi9zaGFyZWQvZGVjb3JhdG9ycy5qc1wiO1xuaW1wb3J0IHsgUEFDS0FHRV9OQU1FLCBWRVJTSU9OIH0gZnJvbSBcIi4vLi4vLi4vdmVyc2lvbi5qc1wiO1xuRmFicmljT2JqZWN0KCkoRGF0ZSk7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlIGNvbnRyYWN0IGNsYXNzIGZvciBDUlVEIG9wZXJhdGlvbnMgaW4gRmFicmljIGNoYWluY29kZVxuICogQHN1bW1hcnkgUHJvdmlkZXMgc3RhbmRhcmQgY3JlYXRlLCByZWFkLCB1cGRhdGUsIGFuZCBkZWxldGUgb3BlcmF0aW9ucyBmb3IgbW9kZWxzIGluIEZhYnJpYyBjaGFpbmNvZGVcbiAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEBjbGFzcyBGYWJyaWNDcnVkQ29udHJhY3RcbiAqIEBleHRlbmRzIHtDb250cmFjdH1cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBEZWZpbmUgYSBtb2RlbFxuICogQHRhYmxlKCdhc3NldHMnKVxuICogY2xhc3MgQXNzZXQgZXh0ZW5kcyBNb2RlbCB7XG4gKiAgIEBpZCgpXG4gKiAgIGlkOiBzdHJpbmc7XG4gKlxuICogICBAcHJvcGVydHkoKVxuICogICBkYXRhOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogLy8gQ3JlYXRlIGEgY29udHJhY3QgdGhhdCBleHRlbmRzIEZhYnJpY0NydWRDb250cmFjdFxuICogZXhwb3J0IGNsYXNzIEFzc2V0Q29udHJhY3QgZXh0ZW5kcyBGYWJyaWNDcnVkQ29udHJhY3Q8QXNzZXQ+IHtcbiAqICAgY29uc3RydWN0b3IoKSB7XG4gKiAgICAgc3VwZXIoJ0Fzc2V0Q29udHJhY3QnLCBBc3NldCk7XG4gKiAgIH1cbiAqXG4gKiAgIC8vIEFkZCBjdXN0b20gbWV0aG9kcyBhcyBuZWVkZWRcbiAqICAgYXN5bmMgZ2V0QXNzZXRIaXN0b3J5KGN0eDogQ29udGV4dCwgaWQ6IHN0cmluZyk6IFByb21pc2U8YW55W10+IHtcbiAqICAgICAvLyBDdXN0b20gaW1wbGVtZW50YXRpb25cbiAqICAgfVxuICogfVxuICogYGBgXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBDb250cmFjdFxuICogICBwYXJ0aWNpcGFudCBSZXBvc2l0b3J5XG4gKiAgIHBhcnRpY2lwYW50IEFkYXB0ZXJcbiAqICAgcGFydGljaXBhbnQgU3RhdGVEQlxuICpcbiAqICAgQ2xpZW50LT4+Q29udHJhY3Q6IGNyZWF0ZShjdHgsIG1vZGVsKVxuICogICBDb250cmFjdC0+PlJlcG9zaXRvcnk6IHJlcG9zaXRvcnkoY3R4KVxuICogICBDb250cmFjdC0+PlJlcG9zaXRvcnk6IGNyZWF0ZShtb2RlbCwgY3R4KVxuICogICBSZXBvc2l0b3J5LT4+QWRhcHRlcjogY3JlYXRlKHRhYmxlTmFtZSwgaWQsIHJlY29yZCwgdHJhbnNpZW50LCBjdHgpXG4gKiAgIEFkYXB0ZXItPj5TdGF0ZURCOiBwdXRTdGF0ZShpZCwgc2VyaWFsaXplZERhdGEpXG4gKiAgIFN0YXRlREItLT4+QWRhcHRlcjogU3VjY2Vzc1xuICogICBBZGFwdGVyLS0+PlJlcG9zaXRvcnk6IHJlY29yZFxuICogICBSZXBvc2l0b3J5LS0+PkNvbnRyYWN0OiBtb2RlbFxuICogICBDb250cmFjdC0tPj5DbGllbnQ6IG1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBGYWJyaWNDcnVkQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNoYXJlZCBhZGFwdGVyIGluc3RhbmNlIGZvciBhbGwgY29udHJhY3QgaW5zdGFuY2VzXG4gICAgICovXG4gICAgc3RhdGljIHsgdGhpcy5hZGFwdGVyID0gbmV3IEZhYnJpY0NvbnRyYWN0QWRhcHRlcigpOyB9XG4gICAgc3RhdGljIHsgdGhpcy5zZXJpYWxpemVyID0gbmV3IERldGVybWluaXN0aWNTZXJpYWxpemVyKCk7IH1cbiAgICBnZXQgcmVwbygpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZXBvKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXBvID0gUmVwb3NpdG9yeS5mb3JNb2RlbCh0aGlzLmNsYXp6KTtcbiAgICAgICAgICAgIC8vIHRyeSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMucmVwby5vYnNlcnZlKHRoaXMpO1xuICAgICAgICAgICAgLy8gfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICAgICAgICAvLyAgIGlmIChcbiAgICAgICAgICAgIC8vICAgICBlcnIgaW5zdGFuY2VvZiBJbnRlcm5hbEVycm9yICYmXG4gICAgICAgICAgICAvLyAgICAgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoXCJPYnNlcnZlciBhbHJlYWR5IHJlZ2lzdGVyZWRcIilcbiAgICAgICAgICAgIC8vICAgKSB7XG4gICAgICAgICAgICAvLyAgICAgLy8gYWxyZWFkeSByZWdpc3RlcmVkIG9ic2VydmVyOyBpZ25vcmUgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiAoZHVyaW5nIHRlc3RzKVxuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXBvO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBGYWJyaWNDcnVkQ29udHJhY3QgaW5zdGFuY2VcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIGNvbnRyYWN0IHdpdGggYSBuYW1lIGFuZCBtb2RlbCBjbGFzc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNvbnRyYWN0XG4gICAgICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gY2xhenogLSBUaGUgbW9kZWwgY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCBjbGF6eikge1xuICAgICAgICBzdXBlcihuYW1lKTtcbiAgICAgICAgdGhpcy5jbGF6eiA9IGNsYXp6O1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgfVxuICAgIGFzeW5jIHJlZnJlc2godGFibGUsIGV2ZW50LCBpZCwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGxvZyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yZWZyZXNoKTtcbiAgICAgICAgbG9nLnZlcmJvc2UoYFB1c2hpbmcgJHtldmVudH0gZXZlbnQgb24gdGFibGUgJHt0YWJsZX0sIGlkKHMpICR7aWR9YCk7XG4gICAgICAgIC8vIGRvIG5vdGhpbmcuIGFsbCB3ZSBuZWVkZWQgd2FzIGFuIG9ic2VydmVyIHRvIGtpY2tzdGFydCB0aGUgcHJvY2Vzc1xuICAgIH1cbiAgICBhc3luYyBsaXN0QnkoY3R4LCBrZXksIG9yZGVyLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHsgY3R4QXJncywgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoWy4uLmFyZ3MsIGN0eF0sIFByZXBhcmVkU3RhdGVtZW50S2V5cy5MSVNUX0JZLCB0cnVlKSkuZm9yKHRoaXMubGlzdEJ5KTtcbiAgICAgICAgbG9nLmluZm8oYFJ1bm5pbmcgbGlzdEJ5IGtleSAke2tleX0sIG9yZGVyICR7b3JkZXJ9IGFuZCBhcmdzICR7Y3R4QXJnc31gKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwby5saXN0Qnkoa2V5LCBvcmRlciwgLi4uY3R4QXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHBhZ2luYXRlQnkoY3R4LCBrZXksIG9yZGVyLCByZWYgPSB7XG4gICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgbGltaXQ6IDEwLFxuICAgIH0sIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBjdHhBcmdzLCBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbLi4uYXJncywgY3R4XSwgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLlBBR0VfQlksIHRydWUpKS5mb3IodGhpcy5wYWdpbmF0ZUJ5KTtcbiAgICAgICAgbG9nLmluZm8oYFJ1bm5pbmcgcGFnaW5hdGVCeSBrZXkgJHtrZXl9LCBvcmRlciAke29yZGVyfSB3aXRoIHNpemUgJHtyZWYubGltaXR9IGFuZCBhcmdzICR7Y3R4QXJnc31gKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwby5wYWdpbmF0ZUJ5KGtleSwgb3JkZXIsIHJlZiwgLi4uY3R4QXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHBhZ2UoY3R4LCB2YWx1ZSwgZGlyZWN0aW9uID0gT3JkZXJEaXJlY3Rpb24uQVNDLCByZWYgPSB7XG4gICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgbGltaXQ6IDEwLFxuICAgIH0sIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBjdHhBcmdzLCBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbLi4uYXJncywgY3R4XSwgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLlBBR0UsIHRydWUpKS5mb3IodGhpcy5wYWdlKTtcbiAgICAgICAgbG9nLmluZm8oYFBhZ2luZyAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXp6KX0gYnkgZGVmYXVsdCBxdWVyeSBhdHRyaWJ1dGVzYCk7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IHR5cGVvZiByZWYgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShyZWYpIHx8XG4gICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgIDogcmVmO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXBvLnBhZ2UodmFsdWUsIGRpcmVjdGlvbiwgcmVmZXJlbmNlLCAuLi5jdHhBcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgZmluZE9uZUJ5KGN0eCwga2V5LCB2YWx1ZSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGN0eEFyZ3MsIGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuRklORF9PTkVfQlksIHRydWUpKS5mb3IodGhpcy5maW5kT25lQnkpO1xuICAgICAgICBsb2cuaW5mbyhgUnVubmluZyBmaW5kT25lQnkga2V5ICR7a2V5fSwgdmFsdWU6ICR7dmFsdWV9IHdpdGggYXJncyAke2N0eEFyZ3N9YCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8uZmluZE9uZUJ5KGtleSwgdmFsdWUsIC4uLmN0eEFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBzdGF0ZW1lbnQoY3R4LCBtZXRob2QsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBjdHhBcmdzLCBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbLi4uYXJncywgY3R4XSwgUGVyc2lzdGVuY2VLZXlzLlNUQVRFTUVOVCwgdHJ1ZSkpLmZvcih0aGlzLnN0YXRlbWVudCk7XG4gICAgICAgIGxvZy5pbmZvKGBSdW5uaW5nIHN0YXRlbWVudCAke21ldGhvZH0gd2l0aCBhcmdzICR7Y3R4QXJnc31gKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwby5zdGF0ZW1lbnQobWV0aG9kLCAuLi5jdHhBcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgY291bnRPZihjdHgsIGtleSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGN0eEFyZ3MsIGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuQ09VTlRfT0YsIHRydWUpKS5mb3IodGhpcy5jb3VudE9mKTtcbiAgICAgICAgbG9nLmluZm8oYFJ1bm5pbmcgY291bnRPZiR7a2V5ID8gYCBrZXkgJHtrZXl9YCA6IFwiXCJ9YCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8uY291bnRPZihrZXksIC4uLmN0eEFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBtYXhPZihjdHgsIGtleSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGN0eEFyZ3MsIGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUFYX09GLCB0cnVlKSkuZm9yKHRoaXMubWF4T2YpO1xuICAgICAgICBsb2cuaW5mbyhgUnVubmluZyBtYXhPZiBrZXkgJHtrZXl9YCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8ubWF4T2Yoa2V5LCAuLi5jdHhBcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgbWluT2YoY3R4LCBrZXksIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBjdHhBcmdzLCBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbLi4uYXJncywgY3R4XSwgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLk1JTl9PRiwgdHJ1ZSkpLmZvcih0aGlzLm1pbk9mKTtcbiAgICAgICAgbG9nLmluZm8oYFJ1bm5pbmcgbWluT2Yga2V5ICR7a2V5fWApO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXBvLm1pbk9mKGtleSwgLi4uY3R4QXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGF2Z09mKGN0eCwga2V5LCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHsgY3R4QXJncywgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoWy4uLmFyZ3MsIGN0eF0sIFByZXBhcmVkU3RhdGVtZW50S2V5cy5BVkdfT0YsIHRydWUpKS5mb3IodGhpcy5hdmdPZik7XG4gICAgICAgIGxvZy5pbmZvKGBSdW5uaW5nIGF2Z09mIGtleSAke2tleX1gKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwby5hdmdPZihrZXksIC4uLmN0eEFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBzdW1PZihjdHgsIGtleSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGN0eEFyZ3MsIGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuU1VNX09GLCB0cnVlKSkuZm9yKHRoaXMuc3VtT2YpO1xuICAgICAgICBsb2cuaW5mbyhgUnVubmluZyBzdW1PZiBrZXkgJHtrZXl9YCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8uc3VtT2Yoa2V5LCAuLi5jdHhBcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgZGlzdGluY3RPZihjdHgsIGtleSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGN0eEFyZ3MsIGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuRElTVElOQ1RfT0YsIHRydWUpKS5mb3IodGhpcy5kaXN0aW5jdE9mKTtcbiAgICAgICAgbG9nLmluZm8oYFJ1bm5pbmcgZGlzdGluY3RPZiBrZXkgJHtrZXl9YCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8uZGlzdGluY3RPZihrZXksIC4uLmN0eEFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBncm91cE9mKGN0eCwga2V5LCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHsgY3R4QXJncywgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoWy4uLmFyZ3MsIGN0eF0sIFByZXBhcmVkU3RhdGVtZW50S2V5cy5HUk9VUF9PRiwgdHJ1ZSkpLmZvcih0aGlzLmdyb3VwT2YpO1xuICAgICAgICBsb2cuaW5mbyhgUnVubmluZyBncm91cE9mIGtleSAke2tleX1gKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwby5ncm91cE9mKGtleSwgLi4uY3R4QXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgc2luZ2xlIG1vZGVsIGluIHRoZSBzdGF0ZSBkYXRhYmFzZVxuICAgICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0byB0aGUgcmVwb3NpdG9yeSdzIGNyZWF0ZSBtZXRob2RcbiAgICAgKiBAcGFyYW0ge0N0eH0gY3R4IC0gVGhlIEZhYnJpYyBjaGFpbmNvZGUgY29udGV4dFxuICAgICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gY3JlYXRlXG4gICAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxNPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNyZWF0ZWQgbW9kZWxcbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGUoY29udGV4dCwgbW9kZWwsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBsb2csIGN0eEFyZ3MsIGN0eCB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjb250ZXh0XSwgT3BlcmF0aW9uS2V5cy5DUkVBVEUsIHRydWUpKS5mb3IodGhpcy5jcmVhdGUpO1xuICAgICAgICB0aGlzLmVuc3VyZU1pcnJvcldyaXRlUGVybWlzc2lvbnMoY3R4KTtcbiAgICAgICAgbG9nLmluZm8oYENPTlRSQUNUIENSRUFURSwgJHtjdHhBcmdzfWApO1xuICAgICAgICBpZiAodHlwZW9mIG1vZGVsID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgbW9kZWwgPSB0aGlzLmRlc2VyaWFsaXplKG1vZGVsKTtcbiAgICAgICAgbG9nLmluZm8oYENyZWF0aW5nIG1vZGVsOiAke0pTT04uc3RyaW5naWZ5KG1vZGVsKX1gKTtcbiAgICAgICAgY29uc3QgdHJhbnNpZW50ID0gdGhpcy5nZXRUcmFuc2llbnREYXRhKGN0eCk7XG4gICAgICAgIGxvZy5pbmZvKGBNZXJnaW5nIHRyYW5zaWVudCBkYXRhLi4uYCk7XG4gICAgICAgIG1vZGVsID0gTW9kZWwubWVyZ2UobW9kZWwsIHRyYW5zaWVudCwgdGhpcy5jbGF6eik7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCB0aGlzLnJlcG8uY3JlYXRlKG1vZGVsLCAuLi5jdHhBcmdzKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IHRoaXMuY2xhenooTW9kZWwuc2VncmVnYXRlKGNyZWF0ZWQpLm1vZGVsKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJlYWRzIGEgc2luZ2xlIG1vZGVsIGZyb20gdGhlIHN0YXRlIGRhdGFiYXNlXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRvIHRoZSByZXBvc2l0b3J5J3MgcmVhZCBtZXRob2RcbiAgICAgKiBAcGFyYW0ge0N0eH0gY3R4IC0gVGhlIEZhYnJpYyBjaGFpbmNvZGUgY29udGV4dFxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBtb2RlbCB0byByZWFkXG4gICAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxNPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHJldHJpZXZlZCBtb2RlbFxuICAgICAqL1xuICAgIGFzeW5jIHJlYWQoY3R4LCBrZXksIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBsb2csIGN0eEFyZ3MgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbLi4uYXJncywgY3R4XSwgT3BlcmF0aW9uS2V5cy5SRUFELCB0cnVlKSkuZm9yKHRoaXMuY3JlYXRlKTtcbiAgICAgICAgbG9nLmluZm8oYHJlYWRpbmcgZW50cnkgd2l0aCBwayAke2tleX0gYCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8ucmVhZChrZXksIC4uLmN0eEFyZ3MpO1xuICAgIH1cbiAgICBnZXRUcmFuc2llbnREYXRhKGN0eCkge1xuICAgICAgICBjb25zdCB0cmFuc2llbnRNYXAgPSBjdHguc3R1Yi5nZXRUcmFuc2llbnQoKTtcbiAgICAgICAgbGV0IHRyYW5zaWVudCA9IHt9O1xuICAgICAgICBpZiAodHJhbnNpZW50TWFwLmhhcyh0aGlzLnJlcG9bXCJ0YWJsZU5hbWVcIl0pKSB7XG4gICAgICAgICAgICB0cmFuc2llbnQgPSBKU09OLnBhcnNlKHRyYW5zaWVudE1hcC5nZXQodGhpcy5yZXBvW1widGFibGVOYW1lXCJdKT8udG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJhbnNpZW50TWFwLmhhcyhcIl9fb3ZlcnJpZGVzXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBvdmVycmlkZXMgPSBKU09OLnBhcnNlKHRyYW5zaWVudE1hcC5nZXQodGhpcy5yZXBvW1widGFibGVOYW1lXCJdKT8udG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgICAgICAgICAgIGN0eC5hY2N1bXVsYXRlKG92ZXJyaWRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYW5zaWVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgYSBzaW5nbGUgbW9kZWwgaW4gdGhlIHN0YXRlIGRhdGFiYXNlXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRvIHRoZSByZXBvc2l0b3J5J3MgdXBkYXRlIG1ldGhvZFxuICAgICAqIEBwYXJhbSB7Q3R4fSBjdHggLSBUaGUgRmFicmljIGNoYWluY29kZSBjb250ZXh0XG4gICAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCB0byB1cGRhdGVcbiAgICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE0+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdXBkYXRlZCBtb2RlbFxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZShjb250ZXh0LCBtb2RlbCwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGxvZywgY3R4QXJncywgY3R4IH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoWy4uLmFyZ3MsIGNvbnRleHRdLCBPcGVyYXRpb25LZXlzLlVQREFURSwgdHJ1ZSkpLmZvcih0aGlzLnVwZGF0ZSk7XG4gICAgICAgIHRoaXMuZW5zdXJlTWlycm9yV3JpdGVQZXJtaXNzaW9ucyhjdHgpO1xuICAgICAgICBpZiAodHlwZW9mIG1vZGVsID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgbW9kZWwgPSB0aGlzLmRlc2VyaWFsaXplKG1vZGVsKTtcbiAgICAgICAgbG9nLmluZm8oYFVwZGF0aW5nIG1vZGVsOiAke0pTT04uc3RyaW5naWZ5KG1vZGVsKX1gKTtcbiAgICAgICAgY29uc3QgdHJhbnNpZW50ID0gdGhpcy5nZXRUcmFuc2llbnREYXRhKGN0eCk7XG4gICAgICAgIGxvZy5pbmZvKGBNZXJnaW5nIHRyYW5zaWVudCBkYXRhLi4uYCk7XG4gICAgICAgIG1vZGVsID0gTW9kZWwubWVyZ2UobW9kZWwsIHRyYW5zaWVudCwgdGhpcy5jbGF6eik7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB0aGlzLnJlcG8udXBkYXRlKG1vZGVsLCAuLi5jdHhBcmdzKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IHRoaXMuY2xhenooTW9kZWwuc2VncmVnYXRlKHVwZGF0ZWQpLm1vZGVsKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgYSBzaW5nbGUgbW9kZWwgZnJvbSB0aGUgc3RhdGUgZGF0YWJhc2VcbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdG8gdGhlIHJlcG9zaXRvcnkncyBkZWxldGUgbWV0aG9kXG4gICAgICogQHBhcmFtIHtDdHh9IGN0eCAtIFRoZSBGYWJyaWMgY2hhaW5jb2RlIGNvbnRleHRcbiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0ga2V5IC0gVGhlIGtleSBvZiB0aGUgbW9kZWwgdG8gZGVsZXRlXG4gICAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxNPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGRlbGV0ZWQgbW9kZWxcbiAgICAgKi9cbiAgICBhc3luYyBkZWxldGUoY3R4LCBrZXksIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBsb2csIGN0eEFyZ3MsIGN0eDogZmFicmljQ3R4LCB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBPcGVyYXRpb25LZXlzLkRFTEVURSwgdHJ1ZSkpLmZvcih0aGlzLmRlbGV0ZSk7XG4gICAgICAgIHRoaXMuZW5zdXJlTWlycm9yV3JpdGVQZXJtaXNzaW9ucyhmYWJyaWNDdHgpO1xuICAgICAgICBsb2cuaW5mbyhgZGVsZXRpbmcgZW50cnkgd2l0aCBwayAke2tleX0gYCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8uZGVsZXRlKFN0cmluZyhrZXkpLCAuLi5jdHhBcmdzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgbXVsdGlwbGUgbW9kZWxzIGZyb20gdGhlIHN0YXRlIGRhdGFiYXNlXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRvIHRoZSByZXBvc2l0b3J5J3MgZGVsZXRlQWxsIG1ldGhvZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nW10gfCBudW1iZXJbXX0ga2V5cyAtIFRoZSBrZXlzIG9mIHRoZSBtb2RlbHMgdG8gZGVsZXRlXG4gICAgICogQHBhcmFtIHtDdHh9IGN0eCAtIFRoZSBGYWJyaWMgY2hhaW5jb2RlIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBkZWxldGVkIG1vZGVsc1xuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZUFsbChjdHgsIGtleXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBjdHhBcmdzLCBjdHg6IGZhYnJpY0N0eCB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjdHhdLCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuREVMRVRFX0FMTCwgdHJ1ZSkpLmZvcih0aGlzLmRlbGV0ZUFsbCk7XG4gICAgICAgIHRoaXMuZW5zdXJlTWlycm9yV3JpdGVQZXJtaXNzaW9ucyhmYWJyaWNDdHgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleXMgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBrZXlzID0gSlNPTi5wYXJzZShrZXlzKTtcbiAgICAgICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IHRoaXMucmVwby5kZWxldGVBbGwoa2V5cywgLi4uY3R4QXJncyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlbGV0ZWQubWFwKChjKSA9PiBuZXcgdGhpcy5jbGF6eihNb2RlbC5zZWdyZWdhdGUoYykubW9kZWwpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJlYWRzIG11bHRpcGxlIG1vZGVscyBmcm9tIHRoZSBzdGF0ZSBkYXRhYmFzZVxuICAgICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0byB0aGUgcmVwb3NpdG9yeSdzIHJlYWRBbGwgbWV0aG9kXG4gICAgICogQHBhcmFtIHtDdHh9IGN0eCAtIFRoZSBGYWJyaWMgY2hhaW5jb2RlIGNvbnRleHRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdIHwgbnVtYmVyW119IGtleXMgLSBUaGUga2V5cyBvZiB0aGUgbW9kZWxzIHRvIHJlYWRcbiAgICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXRyaWV2ZWQgbW9kZWxzXG4gICAgICovXG4gICAgYXN5bmMgcmVhZEFsbChjdHgsIGtleXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBjdHhBcmdzIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoWy4uLmFyZ3MsIGN0eF0sIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5SRUFEX0FMTCwgdHJ1ZSkpLmZvcih0aGlzLmNyZWF0ZSk7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGtleXMgPSBKU09OLnBhcnNlKGtleXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXBvLnJlYWRBbGwoa2V5cywgLi4uY3R4QXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIG11bHRpcGxlIG1vZGVscyBpbiB0aGUgc3RhdGUgZGF0YWJhc2VcbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdG8gdGhlIHJlcG9zaXRvcnkncyB1cGRhdGVBbGwgbWV0aG9kXG4gICAgICogQHBhcmFtIHtDdHh9IGN0eCAtIFRoZSBGYWJyaWMgY2hhaW5jb2RlIGNvbnRleHRcbiAgICAgKiBAcGFyYW0ge01bXX0gbW9kZWxzIC0gVGhlIG1vZGVscyB0byB1cGRhdGVcbiAgICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSB1cGRhdGVkIG1vZGVsc1xuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZUFsbChjb250ZXh0LCBtb2RlbHMsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBsb2csIGN0eEFyZ3MsIGN0eCB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjb250ZXh0XSwgQnVsa0NydWRPcGVyYXRpb25LZXlzLlVQREFURV9BTEwsIHRydWUpKS5mb3IodGhpcy51cGRhdGVBbGwpO1xuICAgICAgICB0aGlzLmVuc3VyZU1pcnJvcldyaXRlUGVybWlzc2lvbnMoY3R4KTtcbiAgICAgICAgaWYgKHR5cGVvZiBtb2RlbHMgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBtb2RlbHMgPSBKU09OLnBhcnNlKG1vZGVscylcbiAgICAgICAgICAgICAgICAubWFwKChtKSA9PiB0aGlzLmRlc2VyaWFsaXplKG0pKVxuICAgICAgICAgICAgICAgIC5tYXAoKG0pID0+IG5ldyB0aGlzLmNsYXp6KG0pKTtcbiAgICAgICAgY29uc3QgdHJhbnNpZW50ID0gdGhpcy5nZXRUcmFuc2llbnREYXRhKGN0eCk7XG4gICAgICAgIGxvZy5pbmZvKGBNZXJnaW5nIHRyYW5zaWVudCBkYXRhLi4uYCk7XG4gICAgICAgIG1vZGVscyA9IG1vZGVscy5tYXAoKG0sIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBBcnJheS5pc0FycmF5KHRyYW5zaWVudCkgPyB0cmFuc2llbnRbaV0gOiB0cmFuc2llbnQ7XG4gICAgICAgICAgICByZXR1cm4gTW9kZWwubWVyZ2UobSwgdCB8fCB7fSwgdGhpcy5jbGF6eik7XG4gICAgICAgIH0pO1xuICAgICAgICBsb2cuaW5mbyhgYWRkaW5nICR7bW9kZWxzLmxlbmd0aH0gZW50cmllcyB0byB0aGUgdGFibGVgKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IHRoaXMucmVwby51cGRhdGVBbGwobW9kZWxzLCAuLi5jdHhBcmdzKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdXBkYXRlZC5tYXAoKGMpID0+IG5ldyB0aGlzLmNsYXp6KE1vZGVsLnNlZ3JlZ2F0ZShjKS5tb2RlbCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSBxdWVyeSB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZGl0aW9ucyBhbmQgb3B0aW9ucy5cbiAgICAgKiBAc3VtbWFyeSBQcm92aWRlcyBhIHNpbXBsaWZpZWQgd2F5IHRvIHF1ZXJ5IHRoZSBkYXRhYmFzZSB3aXRoIGNvbW1vbiBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgICAqIEBwYXJhbSB7Q29uZGl0aW9uPE0+fSBjb25kaXRpb24gLSBUaGUgY29uZGl0aW9uIHRvIGZpbHRlciByZWNvcmRzLlxuICAgICAqIEBwYXJhbSBvcmRlckJ5IC0gVGhlIGZpZWxkIHRvIG9yZGVyIHJlc3VsdHMgYnkuXG4gICAgICogQHBhcmFtIHtPcmRlckRpcmVjdGlvbn0gW29yZGVyPU9yZGVyRGlyZWN0aW9uLkFTQ10gLSBUaGUgc29ydCBkaXJlY3Rpb24uXG4gICAgICogQHBhcmFtIHtPcmRlckRpcmVjdGlvbn0gW29yZGVyPU9yZGVyRGlyZWN0aW9uLkFTQ10gLSBUaGUgc29ydCBkaXJlY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsaW1pdF0gLSBPcHRpb25hbCBtYXhpbXVtIG51bWJlciBvZiByZXN1bHRzIHRvIHJldHVybi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NraXBdIC0gT3B0aW9uYWwgbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2tpcC5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFRoZSBxdWVyeSByZXN1bHRzIGFzIG1vZGVsIGluc3RhbmNlcy5cbiAgICAgKi9cbiAgICBhc3luYyBxdWVyeShjb250ZXh0LCBjb25kaXRpb24sIG9yZGVyQnksIG9yZGVyID0gT3JkZXJEaXJlY3Rpb24uQVNDLCBsaW1pdCwgc2tpcCwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGN0eEFyZ3MgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbLi4uYXJncywgY29udGV4dF0sIFBlcnNpc3RlbmNlS2V5cy5RVUVSWSwgdHJ1ZSkpLmZvcih0aGlzLmNyZWF0ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8ucXVlcnkoY29uZGl0aW9uLCBvcmRlckJ5LCBvcmRlciwgbGltaXQsIHNraXAsIC4uLmN0eEFyZ3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSByYXcgcXVlcnkgYWdhaW5zdCB0aGUgc3RhdGUgZGF0YWJhc2VcbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdG8gdGhlIHJlcG9zaXRvcnkncyByYXcgbWV0aG9kXG4gICAgICogQHBhcmFtIHtDdHh9IGN0eCAtIFRoZSBGYWJyaWMgY2hhaW5jb2RlIGNvbnRleHRcbiAgICAgKiBAcGFyYW0ge2FueX0gcmF3SW5wdXQgLSBUaGUgcXVlcnkgdG8gZXhlY3V0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZG9jc09ubHkgLSBXaGV0aGVyIHRvIHJldHVybiBvbmx5IGRvY3VtZW50c1xuICAgICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHF1ZXJ5IHJlc3VsdHNcbiAgICAgKi9cbiAgICBhc3luYyByYXcoY3R4LCByYXdJbnB1dCwgZG9jc09ubHksIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBjdHhBcmdzIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoWy4uLmFyZ3MsIGN0eF0sIFwicmF3XCIsIHRydWUpKS5mb3IodGhpcy5yYXcpO1xuICAgICAgICByZXR1cm4gRmFicmljQ3J1ZENvbnRyYWN0LmFkYXB0ZXIucmF3KHJhd0lucHV0LCBkb2NzT25seSwgLi4uY3R4QXJncyk7XG4gICAgfVxuICAgIHNlcmlhbGl6ZShtb2RlbCkge1xuICAgICAgICByZXR1cm4gRmFicmljQ3J1ZENvbnRyYWN0LnNlcmlhbGl6ZXIuc2VyaWFsaXplKG1vZGVsKTtcbiAgICB9XG4gICAgZGVzZXJpYWxpemUoc3RyKSB7XG4gICAgICAgIHJldHVybiBGYWJyaWNDcnVkQ29udHJhY3Quc2VyaWFsaXplci5kZXNlcmlhbGl6ZShzdHIpO1xuICAgIH1cbiAgICBhc3luYyBpbml0KGN0eCkge1xuICAgICAgICBjb25zdCB7IGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFtjdHhdLCBQZXJzaXN0ZW5jZUtleXMuSU5JVElBTElaQVRJT04sIHRydWUpKS5mb3IodGhpcy5pbml0KTtcbiAgICAgICAgbG9nLmluZm8oYFJ1bm5pbmcgY29udHJhY3QgJHt0aGlzLmdldE5hbWUoKX0gaW5pdGlhbGl6YXRpb24uLi5gKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIGxvZy5pbmZvKGBDb250cmFjdCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZWQuYCk7XG4gICAgfVxuICAgIGFzeW5jIGhlYWx0aGNoZWNrKGN0eCkge1xuICAgICAgICBjb25zdCB7IGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFtjdHhdLCBcImhlYWx0aGNoZWNrXCIsIHRydWUpKS5mb3IodGhpcy5oZWFsdGhjaGVjayk7XG4gICAgICAgIGxvZy5pbmZvKGBSdW5uaW5nIEhlYWx0aGNoZWNrOiAke3RoaXMuaW5pdGlhbGl6ZWR9Li4uYCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWFsdGhjaGVjazogdGhpcy5pbml0aWFsaXplZCxcbiAgICAgICAgICAgIHZlcnNpb246IFZFUlNJT04sXG4gICAgICAgICAgICBwYWNrYWdlOiBQQUNLQUdFX05BTUUsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIG11bHRpcGxlIG1vZGVscyBpbiB0aGUgc3RhdGUgZGF0YWJhc2VcbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdG8gdGhlIHJlcG9zaXRvcnkncyBjcmVhdGVBbGwgbWV0aG9kXG4gICAgICogQHBhcmFtIHtDdHh9IGN0eCAtIFRoZSBGYWJyaWMgY2hhaW5jb2RlIGNvbnRleHRcbiAgICAgKiBAcGFyYW0ge01bXX0gbW9kZWxzIC0gVGhlIG1vZGVscyB0byBjcmVhdGVcbiAgICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBjcmVhdGVkIG1vZGVsc1xuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZUFsbChjb250ZXh0LCBtb2RlbHMsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBsb2csIGN0eEFyZ3MsIGN0eCB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFsuLi5hcmdzLCBjb250ZXh0XSwgQnVsa0NydWRPcGVyYXRpb25LZXlzLkNSRUFURV9BTEwsIHRydWUpKS5mb3IodGhpcy5jcmVhdGVBbGwpO1xuICAgICAgICB0aGlzLmVuc3VyZU1pcnJvcldyaXRlUGVybWlzc2lvbnMoY3R4KTtcbiAgICAgICAgaWYgKHR5cGVvZiBtb2RlbHMgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBtb2RlbHMgPSBKU09OLnBhcnNlKG1vZGVscylcbiAgICAgICAgICAgICAgICAubWFwKChtKSA9PiB0aGlzLmRlc2VyaWFsaXplKG0pKVxuICAgICAgICAgICAgICAgIC5tYXAoKG0pID0+IG5ldyB0aGlzLmNsYXp6KG0pKTtcbiAgICAgICAgY29uc3QgdHJhbnNpZW50ID0gdGhpcy5nZXRUcmFuc2llbnREYXRhKGN0eCk7XG4gICAgICAgIGxvZy5pbmZvKGBNZXJnaW5nIHRyYW5zaWVudCBkYXRhLi4uYCk7XG4gICAgICAgIG1vZGVscyA9IG1vZGVscy5tYXAoKG0sIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBBcnJheS5pc0FycmF5KHRyYW5zaWVudCkgPyB0cmFuc2llbnRbaV0gOiB0cmFuc2llbnQ7XG4gICAgICAgICAgICByZXR1cm4gTW9kZWwubWVyZ2UobSwgdCB8fCB7fSwgdGhpcy5jbGF6eik7XG4gICAgICAgIH0pO1xuICAgICAgICBsb2cuaW5mbyhgYWRkaW5nICR7bW9kZWxzLmxlbmd0aH0gZW50cmllcyB0byB0aGUgdGFibGVgKTtcbiAgICAgICAgY29uc3QgY3JlYXRlZCA9IGF3YWl0IHRoaXMucmVwby5jcmVhdGVBbGwobW9kZWxzLCAuLi5jdHhBcmdzKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlZC5tYXAoKGMpID0+IG5ldyB0aGlzLmNsYXp6KE1vZGVsLnNlZ3JlZ2F0ZShjKS5tb2RlbCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBlbnN1cmVNaXJyb3JXcml0ZVBlcm1pc3Npb25zKGN0eCkge1xuICAgICAgICBpZiAoIWN0eClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbWlycm9yTWV0YSA9IE1vZGVsLm1pcnJvcmVkQXQodGhpcy5jbGF6eik7XG4gICAgICAgIGlmICghbWlycm9yTWV0YSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbXNwID0gZXh0cmFjdE1zcElkKGN0eC5pZGVudGl0eSk7XG4gICAgICAgIGlmIChtc3AgJiZcbiAgICAgICAgICAgIChtc3AgPT09IG1pcnJvck1ldGEubXNwSWQgfHxcbiAgICAgICAgICAgICAgICAobWlycm9yTWV0YS5jb25kaXRpb24gJiYgbWlycm9yTWV0YS5jb25kaXRpb24obXNwKSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXV0aG9yaXphdGlvbkVycm9yKGBPcmdhbml6YXRpb24gJHttc3B9IGlzIG5vdCBhdXRob3JpemVkIHRvIG1vZGlmeSBtaXJyb3JlZCBkYXRhYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbG9nQ3R4KGFyZ3MsIG9wZXJhdGlvbiwgYWxsb3dDcmVhdGUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBjdHggPSBhcmdzLnBvcCgpO1xuICAgICAgICBpZiAoIWN0eCB8fCAhY3R4LnN0dWIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNaXNzaW5nQ29udGV4dEVycm9yKGBObyB2YWxpZCBjb250ZXh0IHByb3ZpZGVkLi4uYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGV4dHVhbGl6ZWQgPSBGYWJyaWNDcnVkQ29udHJhY3QuYWRhcHRlcltcImxvZ0N0eFwiXShbdGhpcy5jbGF6eiwgLi4uYXJnc10sIG9wZXJhdGlvbiwgYWxsb3dDcmVhdGUsIGN0eCk7XG4gICAgICAgIGZ1bmN0aW9uIHNxdWFzaEFyZ3MoY3R4KSB7XG4gICAgICAgICAgICBjdHguY3R4QXJncy5zaGlmdCgpOyAvLyByZW1vdmVzIGFkZGVkIG1vZGVsIHRvIGFyZ3NcbiAgICAgICAgICAgIHJldHVybiBjdHg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoY29udGV4dHVhbGl6ZWQgaW5zdGFuY2VvZiBQcm9taXNlKSlcbiAgICAgICAgICAgIHJldHVybiBzcXVhc2hBcmdzKGNvbnRleHR1YWxpemVkKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHR1YWxpemVkLnRoZW4oc3F1YXNoQXJncyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTNKMVpDMWpiMjUwY21GamRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwzTnlZeTlqYjI1MGNtRmpkSE12WTNKMVpDOWpjblZrTFdOdmJuUnlZV04wTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMREpDUVVGelFqdEJRVU4wUWl3eVEwRkJaME03UVVGRGFFTXNUMEZCVHl4RlFVVk1MSEZDUVVGeFFpeEhRVU4wUWl4blEwRkJNa0k3UVVGRE5VSXNUMEZCVHl4RlFVVk1MRkZCUVZFc1JVRkRVaXhOUVVGTkxFbEJRVWtzV1VGQldTeEhRVU4yUWl4TlFVRk5MSEZDUVVGeFFpeERRVUZETzBGQlF6ZENMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRV01zVFVGQlRTeG5RMEZCWjBNc1EwRkJRenRCUVVOdVJTeFBRVUZQTEVWQlJVd3NhMEpCUVd0Q0xFVkJVV3hDTEdOQlFXTXNSVUZEWkN4bFFVRmxMRVZCUldZc2NVSkJRWEZDTEVWQlEzSkNMRlZCUVZVc1IwRkZXQ3hOUVVGTkxHZENRVUZuUWl4RFFVRkRPMEZCUlhoQ0xFOUJRVThzUlVGQlJTeDFRa0ZCZFVJc1JVRkJSU3hyUkVGQk5rTTdRVUZMTDBVc1QwRkJUeXhGUVVOTUxIRkNRVUZ4UWl4RlFVTnlRaXhoUVVGaExFZEJSV1FzVFVGQlRTeDVRa0ZCZVVJc1EwRkJRenRCUVVOcVF5eFBRVUZQTEVWQlFVVXNiVUpCUVcxQ0xFVkJRVVVzWjBOQlFUSkNPMEZCUTNwRUxFOUJRVThzUlVGQlJTeFpRVUZaTEVWQlFVVXNjVU5CUVdkRE8wRkJRM1pFTEU5QlFVOHNSVUZCUlN4WlFVRlpMRVZCUVVVc1QwRkJUeXhGUVVGRkxESkNRVUZ6UWp0QlFVVjBSQ3haUVVGWkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVTnlRanM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3UjBFclEwYzdRVUZEU0N4TlFVRk5MRTlCUVdkQ0xHdENRVU53UWl4VFFVRlJMRkZCUVZFN1NVRmhhRUk3TzA5QlJVYzdZVUZEWXl4WlFVRlBMRWRCUVRCQ0xFbEJRVWtzY1VKQlFYRkNMRVZCUVVVc1FVRkJja1FzUTBGQmMwUTdZVUZGY0VRc1pVRkJWU3hIUVVGSExFbEJRVWtzZFVKQlFYVkNMRVZCUVVVc1FVRkJhRU1zUTBGQmFVTTdTVUZOY2tVc1NVRkJZeXhKUVVGSk8xRkJRMmhDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03V1VGRGFFSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhWUVVGVkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRaUVVNM1F5eFJRVUZSTzFsQlExSXNOa0pCUVRaQ08xbEJRemRDTERKQ1FVRXlRanRaUVVNelFpeFRRVUZUTzFsQlExUXNjME5CUVhORE8xbEJRM1JETERCRVFVRXdSRHRaUVVNeFJDeFJRVUZSTzFsQlExSXNiVVpCUVcxR08xbEJRMjVHTEdGQlFXRTdXVUZEWWl4cFFrRkJhVUk3V1VGRGFrSXNUVUZCVFR0WlFVTk9MRWxCUVVrN1VVRkRUaXhEUVVGRE8xRkJRMFFzVDBGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMGxCUTNCQ0xFTkJRVU03U1VGRlJEczdPenM3VDBGTFJ6dEpRVU5JTEZsQlEwVXNTVUZCV1N4RlFVTlBMRXRCUVhGQ08xRkJSWGhETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVaUExGVkJRVXNzUjBGQlRDeExRVUZMTEVOQlFXZENPMUZCTDBKb1F5eG5Ra0ZCVnl4SFFVRlpMRXRCUVVzc1EwRkJRenRKUVd0RGRrTXNRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRMWdzUzBGQk9FSXNSVUZET1VJc1MwRkJkVUlzUlVGRGRrSXNSVUZCV1N4RlFVTmFMRWRCUVVjc1NVRkJNa003VVVGRk9VTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVU5vUkN4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUzBGQlN5eHRRa0ZCYlVJc1MwRkJTeXhYUVVGWExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEY2tVc2NVVkJRWEZGTzBsQlEzWkZMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zVFVGQlRTeERRVU5XTEVkQlFXZERMRVZCUTJoRExFZEJRWEZDTEVWQlEzSkNMRXRCUVdFc1JVRkRZaXhIUVVGSExFbEJRVmM3VVVGRlpDeE5RVUZOTEVWQlFVVXNUMEZCVHl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRM1pDTEUxQlFVMHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RlFVRkZMSEZDUVVGeFFpeERRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkRka1VzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRMjVDTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUTA0c2MwSkJRWE5DTEVkQlFXRXNWMEZCVnl4TFFVRkxMR0ZCUVdFc1QwRkJUeXhGUVVGRkxFTkJRekZGTEVOQlFVTTdVVUZEUml4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVU55UWl4SFFVRmpMRVZCUTJRc1MwRkJkVUlzUlVGRGRrSXNSMEZCUnl4UFFVRlBMRU5CUTFnc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNWVUZCVlN4RFFVTmtMRWRCUVdkRExFVkJRMmhETEVkQlFYRkNMRVZCUTNKQ0xFdEJRV0VzUlVGRFlpeE5RVUYzUkR0UlFVTjBSQ3hOUVVGTkxFVkJRVVVzUTBGQlF6dFJRVU5VTEV0QlFVc3NSVUZCUlN4RlFVRkZPMHRCUTFZc1JVRkRSQ3hIUVVGSExFbEJRVmM3VVVGRlpDeE5RVUZOTEVWQlFVVXNUMEZCVHl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRM1pDTEUxQlFVMHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RlFVRkZMSEZDUVVGeFFpeERRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkRka1VzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8xRkJRM1pDTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUTA0c01FSkJRVEJDTEVkQlFXRXNWMEZCVnl4TFFVRkxMR05CUVdVc1IwRkJWeXhEUVVGRExFdEJRVXNzWVVGQllTeFBRVUZQTEVWQlFVVXNRMEZET1Vjc1EwRkJRenRSUVVOR0xFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUTNwQ0xFZEJRV01zUlVGRFpDeExRVUZaTEVWQlExb3NSMEZCVlN4RlFVTldMRWRCUVVjc1QwRkJUeXhEUVVOWUxFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkRVaXhIUVVGblF5eEZRVU5vUXl4TFFVRmhMRVZCUTJJc1dVRkJjVU1zWTBGQll5eERRVUZETEVkQlFVY3NSVUZEZGtRc1RVRkJkMFE3VVVGRGRFUXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRWQ3hMUVVGTExFVkJRVVVzUlVGQlJUdExRVU5XTEVWQlEwUXNSMEZCUnl4SlFVRlhPMUZCUldRc1RVRkJUU3hGUVVGRkxFOUJRVThzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVTjJRaXhOUVVGTkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1JVRkJSU3hIUVVGSExFTkJRVU1zUlVGQlJTeHhRa0ZCY1VJc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlEzQkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTnFRaXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVU5PTEZWQlFWVXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETERoQ1FVRTRRaXhEUVVOd1JTeERRVUZETzFGQlEwWXNUVUZCVFN4VFFVRlRMRWRCUTJJc1QwRkJUeXhIUVVGSExFdEJRVXNzVVVGQlVUdFpRVU55UWl4RFFVRkRMRU5CUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFUWkRPMmRDUVVNelJDeEZRVUU0UXp0WlFVTnFSQ3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETzFGQlExWXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGRGJrSXNTMEZCU3l4RlFVTk1MRk5CUVRKQ0xFVkJRek5DTEZOQlFXOUVMRVZCUTNCRUxFZEJRVWNzVDBGQlR5eERRVU5ZTEVOQlFVTTdTVUZEU2l4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExGTkJRVk1zUTBGRFlpeEhRVUZuUXl4RlFVTm9ReXhIUVVGeFFpeEZRVU55UWl4TFFVRlZMRVZCUTFZc1IwRkJSeXhKUVVGWE8xRkJSV1FzVFVGQlRTeEZRVUZGTEU5QlFVOHNSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVOMlFpeE5RVUZOTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUlVGQlJTeEhRVUZITEVOQlFVTXNSVUZCUlN4eFFrRkJjVUlzUTBGQlF5eFhRVUZYTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUXpORkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRSUVVOMFFpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVTk9MSGxDUVVGNVFpeEhRVUZoTEZsQlFWa3NTMEZCU3l4alFVRmpMRTlCUVU4c1JVRkJSU3hEUVVNdlJTeERRVUZETzFGQlEwWXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZqTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWRCUVVjc1QwRkJUeXhEUVVGRExFTkJRVU03U1VGRGFFVXNRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRMklzUjBGQlowTXNSVUZEYUVNc1RVRkJZeXhGUVVOa0xFZEJRVWNzU1VGQlZ6dFJRVVZrTEUxQlFVMHNSVUZCUlN4UFFVRlBMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGRGRrSXNUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVWQlFVVXNSMEZCUnl4RFFVRkRMRVZCUVVVc1pVRkJaU3hEUVVGRExGTkJRVk1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZEYmtVc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNjVUpCUVhGQ0xFMUJRVTBzWTBGQll5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUXpkRUxFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzVDBGQlR5eERRVUZETEVOQlFVTTdTVUZEYWtRc1EwRkJRenRKUVVWRUxFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlExZ3NSMEZCWjBNc1JVRkRhRU1zUjBGQmMwSXNSVUZEZEVJc1IwRkJSeXhKUVVGWE8xRkJSV1FzVFVGQlRTeEZRVUZGTEU5QlFVOHNSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVOMlFpeE5RVUZOTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUlVGQlJTeEhRVUZITEVOQlFVTXNSVUZCUlN4eFFrRkJjVUlzUTBGQlF5eFJRVUZSTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUTNoRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVOd1FpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRkZCUVZFc1IwRkJZU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkRha1VzVDBGQlR5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVFd1FpeEZRVUZGTEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNN1NVRkRia1VzUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUTFRc1IwRkJaME1zUlVGRGFFTXNSMEZCY1VJc1JVRkRja0lzUjBGQlJ5eEpRVUZYTzFGQlJXUXNUVUZCVFN4RlFVRkZMRTlCUVU4c1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVU4yUWl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3h4UWtGQmNVSXNRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRM1JGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU5zUWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4SFFVRmhMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJReTlETEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQll5eEZRVUZGTEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNN1NVRkRja1FzUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUTFRc1IwRkJaME1zUlVGRGFFTXNSMEZCY1VJc1JVRkRja0lzUjBGQlJ5eEpRVUZYTzFGQlJXUXNUVUZCVFN4RlFVRkZMRTlCUVU4c1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVU4yUWl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3h4UWtGQmNVSXNRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRM1JGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU5zUWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4SFFVRmhMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJReTlETEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQll5eEZRVUZGTEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNN1NVRkRja1FzUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUTFRc1IwRkJaME1zUlVGRGFFTXNSMEZCY1VJc1JVRkRja0lzUjBGQlJ5eEpRVUZYTzFGQlJXUXNUVUZCVFN4RlFVRkZMRTlCUVU4c1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVU4yUWl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3h4UWtGQmNVSXNRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRM1JGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU5zUWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4SFFVRmhMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJReTlETEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQll5eEZRVUZGTEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNN1NVRkRja1FzUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUTFRc1IwRkJaME1zUlVGRGFFTXNSMEZCY1VJc1JVRkRja0lzUjBGQlJ5eEpRVUZYTzFGQlJXUXNUVUZCVFN4RlFVRkZMRTlCUVU4c1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVU4yUWl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3h4UWtGQmNVSXNRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRM1JGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU5zUWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4SFFVRmhMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJReTlETEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQll5eEZRVUZGTEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNN1NVRkRja1FzUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4VlFVRlZMRU5CUTJRc1IwRkJaME1zUlVGRGFFTXNSMEZCY1VJc1JVRkRja0lzUjBGQlJ5eEpRVUZYTzFGQlJXUXNUVUZCVFN4RlFVRkZMRTlCUVU4c1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVU4yUWl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3h4UWtGQmNVSXNRMEZCUXl4WFFVRlhMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRek5GTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU4yUWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExEQkNRVUV3UWl4SFFVRmhMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRM0JFTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQll5eEZRVUZGTEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNN1NVRkRNVVFzUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUTFnc1IwRkJaME1zUlVGRGFFTXNSMEZCY1VJc1JVRkRja0lzUjBGQlJ5eEpRVUZYTzFGQlJXUXNUVUZCVFN4RlFVRkZMRTlCUVU4c1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVU4yUWl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3h4UWtGQmNVSXNRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRM2hGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVU53UWl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExIVkNRVUYxUWl4SFFVRmhMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnBFTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQll5eEZRVUZGTEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNN1NVRkRka1FzUTBGQlF6dEpRVVZFT3pzN096czdPMDlCVDBjN1NVRkRTQ3hMUVVGTExFTkJRVU1zVFVGQlRTeERRVU5XTEU5QlFXOURMRVZCUTNCRExFdEJRV2xDTEVWQlEycENMRWRCUVVjc1NVRkJWenRSUVVWa0xFMUJRVTBzUlVGQlJTeEhRVUZITEVWQlFVVXNUMEZCVHl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRelZDTEUxQlFVMHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeEZRVUZGTEU5QlFVOHNRMEZCUXl4RlFVRkZMR0ZCUVdFc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlEyeEZMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTnVRaXhKUVVGSkxFTkJRVU1zTkVKQlFUUkNMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGRrTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXh2UWtGQmIwSXNUMEZCVHl4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVWNFF5eEpRVUZKTEU5QlFVOHNTMEZCU3l4TFFVRkxMRkZCUVZFN1dVRkJSU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCU1N4TFFVRkxMRU5CUVUwc1EwRkJRenRSUVVWMlJTeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVVZ5UkN4TlFVRk5MRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRk4wTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXd5UWtGQk1rSXNRMEZCUXl4RFFVRkRPMUZCUTNSRExFdEJRVXNzUjBGQlJ5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1JVRkJSU3hUUVVGVExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCVFN4RFFVRkRPMUZCUlhaRUxFMUJRVTBzVDBGQlR5eEhRVUZITEUxQlFVMHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkZNVVFzVFVGQlRTeE5RVUZOTEVkQlFVY3NTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRE9VUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1NVRkRhRUlzUTBGQlF6dEpRVVZFT3pzN096czdPMDlCVDBjN1NVRkRTQ3hMUVVGTExFTkJRVU1zU1VGQlNTeERRVU5TTEVkQlFXZERMRVZCUTJoRExFZEJRVFJDTEVWQlF6VkNMRWRCUVVjc1NVRkJWenRSUVVWa0xFMUJRVTBzUlVGQlJTeEhRVUZITEVWQlFVVXNUMEZCVHl4RlFVRkZMRWRCUVVjc1EwRkRka0lzVFVGQlRTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFVkJRVVVzUjBGQlJ5eERRVUZETEVWQlFVVXNZVUZCWVN4RFFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGRE5VUXNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlEyNUNMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zZVVKQlFYbENMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRk1VTXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4UFFVRlBMRU5CUVVNc1EwRkJRenRKUVVONlF5eERRVUZETzBsQlJWTXNaMEpCUVdkQ0xFTkJRVU1zUjBGQk1FSTdVVUZEYmtRc1RVRkJUU3haUVVGWkxFZEJRVWNzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRSUVVNM1F5eEpRVUZKTEZOQlFWTXNSMEZCVVN4RlFVRkZMRU5CUVVNN1VVRkZlRUlzU1VGQlNTeFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRPMWxCUXpkRExGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVVnNRaXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRM2hETEVWQlFVVXNVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJWeXhEUVVNNVFpeERRVUZETzFGQlEwb3NRMEZCUXp0UlFVVkVMRWxCUVVrc1dVRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF5eGhRVUZoTEVOQlFVTXNSVUZCUlN4RFFVRkRPMWxCUTNCRExFMUJRVTBzVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUlhoQ0xGbEJRVmtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGRGVFTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGWExFTkJRemxDTEVOQlFVTTdXVUZGUml4SFFVRkhMRU5CUVVNc1ZVRkJWU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzFGQlF6VkNMRU5CUVVNN1VVRkZSQ3hQUVVGUExGTkJRVk1zUTBGQlF6dEpRVU51UWl4RFFVRkRPMGxCUlVRN096czdPenM3VDBGUFJ6dEpRVU5JTEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUTFZc1QwRkJiME1zUlVGRGNFTXNTMEZCYVVJc1JVRkRha0lzUjBGQlJ5eEpRVUZYTzFGQlJXUXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hQUVVGUExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZETlVJc1RVRkJUU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRVZCUVVVc1QwRkJUeXhEUVVGRExFVkJRVVVzWVVGQllTeERRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkRiRVVzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRMjVDTEVsQlFVa3NRMEZCUXl3MFFrRkJORUlzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjJReXhKUVVGSkxFOUJRVThzUzBGQlN5eExRVUZMTEZGQlFWRTdXVUZCUlN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlNTeExRVUZMTEVOQlFVMHNRMEZCUXp0UlFVVjJSU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEcxQ1FVRnRRaXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVWeVJDeE5RVUZOTEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkZOME1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl3eVFrRkJNa0lzUTBGQlF5eERRVUZETzFGQlEzUkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSVUZCUlN4VFFVRlRMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlRTeERRVUZETzFGQlEzWkVMRTFCUVUwc1QwRkJUeXhIUVVGSExFMUJRVTBzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhGUVVGRkxFZEJRVWNzVDBGQlR5eERRVUZETEVOQlFVTTdVVUZETVVRc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRPVVFzVDBGQlR5eE5RVUZOTEVOQlFVTTdTVUZEYUVJc1EwRkJRenRKUVVWRU96czdPenM3TzA5QlQwYzdTVUZEU0N4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVOV0xFZEJRV2RETEVWQlEyaERMRWRCUVRSQ0xFVkJRelZDTEVkQlFVY3NTVUZCVnp0UlFVVmtMRTFCUVUwc1JVRkRTaXhIUVVGSExFVkJRMGdzVDBGQlR5eEZRVU5RTEVkQlFVY3NSVUZCUlN4VFFVRlRMRWRCUTJZc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eEZRVUZGTEdGQlFXRXNRMEZCUXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlEzSkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRMW9zUTBGQlF6dFJRVU5HTEVsQlFVa3NRMEZCUXl3MFFrRkJORUlzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0UlFVTTNReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETERCQ1FVRXdRaXhIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlF6TkRMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFZEJRVWNzVDBGQlR5eERRVUZETEVOQlFVTTdTVUZEYmtRc1EwRkJRenRKUVVWRU96czdPenM3TzA5QlQwYzdTVUZEU0N4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVOaUxFZEJRV2RETEVWQlEyaERMRWxCUVN0Q0xFVkJReTlDTEVkQlFVY3NTVUZCVnp0UlFVVmtMRTFCUVUwc1JVRkJSU3hQUVVGUExFVkJRVVVzUjBGQlJ5eEZRVUZGTEZOQlFWTXNSVUZCUlN4SFFVRkhMRU5CUTJ4RExFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eEZRVUZGTEhGQ1FVRnhRaXhEUVVGRExGVkJRVlVzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZETVVVc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFbEJRVWtzUTBGQlF5dzBRa0ZCTkVJc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFJRVU0zUXl4SlFVRkpMRTlCUVU4c1NVRkJTU3hMUVVGTExGRkJRVkU3V1VGQlJTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRV0VzUTBGQlF6dFJRVU5zUlN4TlFVRk5MRTlCUVU4c1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hIUVVGSExFOUJRVThzUTBGQlF5eERRVUZETzFGQlF6VkVMRTFCUVUwc1RVRkJUU3hIUVVGSExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkROVVVzVDBGQlR5eE5RVUZOTEVOQlFVTTdTVUZEYUVJc1EwRkJRenRKUVVWRU96czdPenM3TzA5QlQwYzdTVUZEU0N4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVOWUxFZEJRV2RETEVWQlEyaERMRWxCUVN0Q0xFVkJReTlDTEVkQlFVY3NTVUZCVnp0UlFVVmtMRTFCUVUwc1JVRkJSU3hQUVVGUExFVkJRVVVzUjBGQlJ5eERRVU5zUWl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3h4UWtGQmNVSXNRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRM2hGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU51UWl4SlFVRkpMRTlCUVU4c1NVRkJTU3hMUVVGTExGRkJRVkU3V1VGQlJTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRV0VzUTBGQlF6dFJRVU5zUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NSVUZCUlN4SFFVRkhMRTlCUVU4c1EwRkJReXhEUVVGRE8wbEJRemRETEVOQlFVTTdTVUZGUkRzN096czdPenRQUVU5SE8wbEJRMGdzUzBGQlN5eERRVUZETEZOQlFWTXNRMEZEWWl4UFFVRnZReXhGUVVOd1F5eE5RVUZ2UWl4RlFVTndRaXhIUVVGSExFbEJRVmM3VVVGRlpDeE5RVUZOTEVWQlFVVXNSMEZCUnl4RlFVRkZMRTlCUVU4c1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVU0xUWl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRMllzUTBGQlF5eEhRVUZITEVsQlFVa3NSVUZCUlN4UFFVRlBMRU5CUVVNc1JVRkRiRUlzY1VKQlFYRkNMRU5CUVVNc1ZVRkJWU3hGUVVOb1F5eEpRVUZKTEVOQlEwd3NRMEZEUml4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdVVUZEZEVJc1NVRkJTU3hEUVVGRExEUkNRVUUwUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM1pETEVsQlFVa3NUMEZCVHl4TlFVRk5MRXRCUVVzc1VVRkJVVHRaUVVNMVFpeE5RVUZOTEVkQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVkU3YVVKQlEyaERMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZETDBJc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFWRXNRMEZCUXp0UlFVVXhReXhOUVVGTkxGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZGTjBNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5d3lRa0ZCTWtJc1EwRkJReXhEUVVGRE8xRkJRM1JETEUxQlFVMHNSMEZCU1N4TlFVRmpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMWxCUTNCRExFMUJRVTBzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETzFsQlF6bEVMRTlCUVU4c1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZOTEVOQlFVTTdVVUZEYkVRc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRlNDeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1RVRkJUU3hEUVVGRExFMUJRVTBzZFVKQlFYVkNMRU5CUVVNc1EwRkJRenRSUVVWNlJDeE5RVUZOTEU5QlFVOHNSMEZCUnl4TlFVRk5MRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVU4yUXl4TlFVRjNRaXhGUVVONFFpeEhRVUZITEU5QlFVOHNRMEZEV0N4RFFVRkRPMUZCUTBZc1RVRkJUU3hOUVVGTkxFZEJRVWNzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNMVJTeFBRVUZQTEUxQlFVMHNRMEZCUXp0SlFVTm9RaXhEUVVGRE8wbEJSVVE3T3pzN096czdPenM3VDBGVlJ6dEpRVU5JTEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUTFRc1QwRkJiME1zUlVGRGNFTXNVMEZCWjBNc1JVRkRhRU1zVDBGQmVVSXNSVUZEZWtJc1VVRkJhVU1zWTBGQll5eERRVUZETEVkQlFVY3NSVUZEYmtRc1MwRkJZeXhGUVVOa0xFbEJRV0VzUlVGRFlpeEhRVUZITEVsQlFWYzdVVUZGWkN4TlFVRk5MRVZCUVVVc1QwRkJUeXhGUVVGRkxFZEJRVWNzUTBGRGJFSXNUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVWQlFVVXNUMEZCVHl4RFFVRkRMRVZCUVVVc1pVRkJaU3hEUVVGRExFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZEYmtVc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUTI1Q0xFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUTNCQ0xGTkJRWGxDTEVWQlEzcENMRTlCUVd0Q0xFVkJRMnhDTEV0QlFYVkNMRVZCUTNaQ0xFdEJRVXNzUlVGRFRDeEpRVUZKTEVWQlEwb3NSMEZCUnl4UFFVRlBMRU5CUTFnc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlJEczdPenM3T3pzN1QwRlJSenRKUVVOSUxFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlExQXNSMEZCWjBNc1JVRkRhRU1zVVVGQmIwSXNSVUZEY0VJc1VVRkJhVUlzUlVGRGFrSXNSMEZCUnl4SlFVRlhPMUZCUldRc1RVRkJUU3hGUVVGRkxFOUJRVThzUlVGQlJTeEhRVUZITEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVWQlFVVXNSMEZCUnl4RFFVRkRMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVTjBSU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVU5VTEVOQlFVTTdVVUZEUml4UFFVRlBMR3RDUVVGclFpeERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hGUVVGRkxGRkJRVkVzUlVGQlJTeEhRVUZITEU5QlFVOHNRMEZCUXl4RFFVRkRPMGxCUTNoRkxFTkJRVU03U1VGRlV5eFRRVUZUTEVOQlFVTXNTMEZCVVR0UlFVTXhRaXhQUVVGUExHdENRVUZyUWl4RFFVRkRMRlZCUVZVc1EwRkJReXhUUVVGVExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdTVUZEZUVRc1EwRkJRenRKUVVWVExGZEJRVmNzUTBGQmEwSXNSMEZCVnp0UlFVTm9SQ3hQUVVORkxHdENRVUZyUWl4RFFVRkRMRlZCUTNCQ0xFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTNKQ0xFTkJRVU03U1VGRlV5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVdkRE8xRkJRMjVFTEUxQlFVMHNSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVOa0xFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxHVkJRV1VzUTBGQlF5eGpRVUZqTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUXk5RUxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOcVFpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRzlDUVVGdlFpeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRzlDUVVGdlFpeERRVUZETEVOQlFVTTdVVUZEYWtVc1NVRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZEZUVJc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eHZRMEZCYjBNc1EwRkJReXhEUVVGRE8wbEJRMnBFTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc1YwRkJWeXhEUVVObUxFZEJRV2RETzFGQlJXaERMRTFCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEdGQlFXRXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGRGFrVXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkRha0lzUTBGQlF6dFJRVU5HTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc2QwSkJRWGRDTEVsQlFVa3NRMEZCUXl4WFFVRlhMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJRM2hFTEU5QlFVODdXVUZEVEN4WFFVRlhMRVZCUVVVc1NVRkJTU3hEUVVGRExGZEJRVmM3V1VGRE4wSXNUMEZCVHl4RlFVRkZMRTlCUVU4N1dVRkRhRUlzVDBGQlR5eEZRVUZGTEZsQlFWazdVMEZEZEVJc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlJEczdPenM3T3p0UFFVOUhPMGxCUTBnc1MwRkJTeXhEUVVGRExGTkJRVk1zUTBGRFlpeFBRVUZ2UXl4RlFVTndReXhOUVVGdlFpeEZRVU53UWl4SFFVRkhMRWxCUVZjN1VVRkZaQ3hOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEU5QlFVOHNSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVNMVFpeE5RVUZOTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUTJZc1EwRkJReXhIUVVGSExFbEJRVWtzUlVGQlJTeFBRVUZQTEVOQlFVTXNSVUZEYkVJc2NVSkJRWEZDTEVOQlFVTXNWVUZCVlN4RlFVTm9ReXhKUVVGSkxFTkJRMHdzUTBGRFJpeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03VVVGRGRFSXNTVUZCU1N4RFFVRkRMRFJDUVVFMFFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNaRExFbEJRVWtzVDBGQlR5eE5RVUZOTEV0QlFVc3NVVUZCVVR0WlFVTTFRaXhOUVVGTkxFZEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVZFN2FVSkJRMmhETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRwUWtGREwwSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVkVzUTBGQlF6dFJRVVV4UXl4TlFVRk5MRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRk4wTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXd5UWtGQk1rSXNRMEZCUXl4RFFVRkRPMUZCUTNSRExFMUJRVTBzUjBGQlNTeE5RVUZqTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlEzQkRMRTFCUVUwc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRE8xbEJRemxFTEU5QlFVOHNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGTkxFTkJRVU03VVVGRGJFUXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZTQ3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNUVUZCVFN4RFFVRkRMRTFCUVUwc2RVSkJRWFZDTEVOQlFVTXNRMEZCUXp0UlFVVjZSQ3hOUVVGTkxFOUJRVThzUjBGQlJ5eE5RVUZOTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVOMlF5eE5RVUYzUWl4RlFVTjRRaXhIUVVGSExFOUJRVThzUTBGRFdDeERRVUZETzFGQlEwWXNUVUZCVFN4TlFVRk5MRWRCUVVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTTFSU3hQUVVGUExFMUJRVTBzUTBGQlF6dEpRVU5vUWl4RFFVRkRPMGxCUlZNc05FSkJRVFJDTEVOQlFVTXNSMEZCTUVJN1VVRkRMMFFzU1VGQlNTeERRVUZETEVkQlFVYzdXVUZCUlN4UFFVRlBPMUZCUTJwQ0xFMUJRVTBzVlVGQlZTeEhRVUZITEV0QlFVc3NRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEyaEVMRWxCUVVrc1EwRkJReXhWUVVGVk8xbEJRVVVzVDBGQlR6dFJRVU40UWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMUZCUTNaRExFbEJRMFVzUjBGQlJ6dFpRVU5JTEVOQlFVTXNSMEZCUnl4TFFVRkxMRlZCUVZVc1EwRkJReXhMUVVGTE8yZENRVU4yUWl4RFFVRkRMRlZCUVZVc1EwRkJReXhUUVVGVExFbEJRVWtzVlVGQlZTeERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRM1JFTEVOQlFVTTdXVUZEUkN4TlFVRk5MRWxCUVVrc2EwSkJRV3RDTEVOQlF6RkNMR2RDUVVGblFpeEhRVUZITERSRFFVRTBReXhEUVVOb1JTeERRVUZETzFGQlEwb3NRMEZCUXp0SlFVTklMRU5CUVVNN1NVRXlRbE1zVFVGQlRTeERRVWxrTEVsQlFYRkVMRVZCUTNKRUxGTkJRV2xDTEVWQlEycENMR05CUVhWQ0xFdEJRVXM3VVVGTk5VSXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEzWkNMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1dVRkRkRUlzVFVGQlRTeEpRVUZKTEcxQ1FVRnRRaXhEUVVGRExEaENRVUU0UWl4RFFVRkRMRU5CUVVNN1VVRkRhRVVzUTBGQlF6dFJRVU5FTEUxQlFVMHNZMEZCWXl4SFFVRkhMR3RDUVVGclFpeERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkRla1FzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCV1N4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGUkxFVkJRMjVETEZOQlFWTXNSVUZEVkN4WFFVRnJRaXhGUVVOc1FpeEhRVUZITEVOQlMwRXNRMEZCUXp0UlFVTk9MRk5CUVZNc1ZVRkJWU3hEUVVGRExFZEJRVFpDTzFsQlF5OURMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTXNRMEZCUXl3NFFrRkJPRUk3V1VGRGJrUXNUMEZCVHl4SFFVRlZMRU5CUVVNN1VVRkRjRUlzUTBGQlF6dFJRVVZFTEVsQlFVa3NRMEZCUXl4RFFVRkRMR05CUVdNc1dVRkJXU3hQUVVGUExFTkJRVU03V1VGQlJTeFBRVUZQTEZWQlFWVXNRMEZCUXl4alFVRmpMRU5CUVVNc1EwRkJRenRSUVVNMVJTeFBRVUZQTEdOQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03U1VGRGVrTXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCY0lpNHVMMkp2YjNSemRISmhjRndpTzF4dWFXMXdiM0owSUZ3aUxpNHZMaTR2YzJoaGNtVmtMMjkyWlhKeWFXUmxjMXdpTzF4dWFXMXdiM0owSUh0Y2JpQWdSbUZpY21salEyOXVkR1Y0ZEhWaGJHbDZaV1JCY21kekxGeHVJQ0JHWVdKeWFXTkRiMjUwY21GamRFRmtZWEIwWlhJc1hHNTlJR1p5YjIwZ1hDSXVMaTlEYjI1MGNtRmpkRUZrWVhCMFpYSmNJanRjYm1sdGNHOXlkQ0I3WEc0Z0lFTnZiblJsZUhRZ1lYTWdRM1I0TEZ4dUlDQkRiMjUwY21GamRDeGNiaUFnVDJKcVpXTjBJR0Z6SUVaaFluSnBZMDlpYW1WamRDeGNibjBnWm5KdmJTQmNJbVpoWW5KcFl5MWpiMjUwY21GamRDMWhjR2xjSWp0Y2JtbHRjRzl5ZENCN0lFMXZaR1ZzTENCVFpYSnBZV3hwZW1WeUlIMGdabkp2YlNCY0lrQmtaV05oWmkxMGN5OWtaV052Y21GMGIzSXRkbUZzYVdSaGRHbHZibHdpTzF4dWFXMXdiM0owSUh0Y2JpQWdRV3hzVDNCbGNtRjBhVzl1UzJWNWN5eGNiaUFnUVhWMGFHOXlhWHBoZEdsdmJrVnljbTl5TEZ4dUlDQkRiMjVrYVhScGIyNHNYRzRnSUVOdmJuUmxlSFIxWVd4QmNtZHpMRnh1SUNCRWFYSmxZM1JwYjI1TWFXMXBkRTltWm5ObGRDeGNiaUFnUlhabGJuUkpaSE1zWEc0Z0lFMWhlV0psUTI5dWRHVjRkSFZoYkVGeVp5eGNiaUFnVFdWMGFHOWtUM0pQY0dWeVlYUnBiMjRzWEc0Z0lFOWljMlZ5ZG1WeUxGeHVJQ0JQY21SbGNrUnBjbVZqZEdsdmJpeGNiaUFnVUdWeWMybHpkR1Z1WTJWTFpYbHpMRnh1SUNCUVpYSnphWE4wWlc1alpVOWljMlZ5ZG1WeUxGeHVJQ0JRY21Wd1lYSmxaRk4wWVhSbGJXVnVkRXRsZVhNc1hHNGdJRkpsY0c5emFYUnZjbmtzWEc0Z0lGTmxjbWxoYkdsNlpXUlFZV2RsTEZ4dWZTQm1jbTl0SUZ3aVFHUmxZMkZtTFhSekwyTnZjbVZjSWp0Y2JtbHRjRzl5ZENCN0lFWmhZbkpwWTBOdmJuUnlZV04wVW1Wd2IzTnBkRzl5ZVNCOUlHWnliMjBnWENJdUxpOUdZV0p5YVdORGIyNTBjbUZqZEZKbGNHOXphWFJ2Y25sY0lqdGNibWx0Y0c5eWRDQjdJRVJsZEdWeWJXbHVhWE4wYVdOVFpYSnBZV3hwZW1WeUlIMGdabkp2YlNCY0lpNHVMeTR1TDNOb1lYSmxaQzlFWlhSbGNtMXBibWx6ZEdsalUyVnlhV0ZzYVhwbGNsd2lPMXh1YVcxd2IzSjBJSHNnVFdGdVoyOVJkV1Z5ZVNCOUlHWnliMjBnWENKQVpHVmpZV1l0ZEhNdlptOXlMV052ZFdOb1pHSmNJanRjYm1sdGNHOXlkQ0I3SUVOb1pXTnJZV0pzWlN3Z2FHVmhiSFJvWTJobFkyc2dmU0JtY205dElGd2lMaTR2TGk0dmMyaGhjbVZrTDJsdWRHVnlabUZqWlhNdlEyaGxZMnRoWW14bFhDSTdYRzVwYlhCdmNuUWdleUJEYjI1emRISjFZM1J2Y2lCOUlHWnliMjBnWENKQVpHVmpZV1l0ZEhNdlpHVmpiM0poZEdsdmJsd2lPMXh1YVcxd2IzSjBJSHNnUm1GaWNtbGpRMjl1ZEhKaFkzUkRiMjUwWlhoMElIMGdabkp2YlNCY0lpNHVMME52Ym5SeVlXTjBRMjl1ZEdWNGRGd2lPMXh1YVcxd2IzSjBJSHRjYmlBZ1FuVnNhME55ZFdSUGNHVnlZWFJwYjI1TFpYbHpMRnh1SUNCUGNHVnlZWFJwYjI1TFpYbHpMRnh1SUNCUWNtbHRZWEo1UzJWNVZIbHdaU3hjYm4wZ1puSnZiU0JjSWtCa1pXTmhaaTEwY3k5a1lpMWtaV052Y21GMGIzSnpYQ0k3WEc1cGJYQnZjblFnZXlCTmFYTnphVzVuUTI5dWRHVjRkRVZ5Y205eUlIMGdabkp2YlNCY0lpNHVMeTR1TDNOb1lYSmxaQzlwYm1SbGVGd2lPMXh1YVcxd2IzSjBJSHNnWlhoMGNtRmpkRTF6Y0Vsa0lIMGdabkp2YlNCY0lpNHVMeTR1TDNOb1lYSmxaQzlrWldOdmNtRjBiM0p6WENJN1hHNXBiWEJ2Y25RZ2V5QlFRVU5MUVVkRlgwNUJUVVVzSUZaRlVsTkpUMDRnZlNCbWNtOXRJRndpTGk0dkxpNHZkbVZ5YzJsdmJsd2lPMXh1WEc1R1lXSnlhV05QWW1wbFkzUW9LU2hFWVhSbEtUdGNiaThxS2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUVKaGMyVWdZMjl1ZEhKaFkzUWdZMnhoYzNNZ1ptOXlJRU5TVlVRZ2IzQmxjbUYwYVc5dWN5QnBiaUJHWVdKeWFXTWdZMmhoYVc1amIyUmxYRzRnS2lCQWMzVnRiV0Z5ZVNCUWNtOTJhV1JsY3lCemRHRnVaR0Z5WkNCamNtVmhkR1VzSUhKbFlXUXNJSFZ3WkdGMFpTd2dZVzVrSUdSbGJHVjBaU0J2Y0dWeVlYUnBiMjV6SUdadmNpQnRiMlJsYkhNZ2FXNGdSbUZpY21saklHTm9ZV2x1WTI5a1pWeHVJQ29nUUhSbGJYQnNZWFJsSUUwZ0xTQlVlWEJsSUdWNGRHVnVaR2x1WnlCTmIyUmxiRnh1SUNvZ1FHTnNZWE56SUVaaFluSnBZME55ZFdSRGIyNTBjbUZqZEZ4dUlDb2dRR1Y0ZEdWdVpITWdlME52Ym5SeVlXTjBmVnh1SUNvZ1FHVjRZVzF3YkdWY2JpQXFJR0JnWUhSNWNHVnpZM0pwY0hSY2JpQXFJQzh2SUVSbFptbHVaU0JoSUcxdlpHVnNYRzRnS2lCQWRHRmliR1VvSjJGemMyVjBjeWNwWEc0Z0tpQmpiR0Z6Y3lCQmMzTmxkQ0JsZUhSbGJtUnpJRTF2WkdWc0lIdGNiaUFxSUNBZ1FHbGtLQ2xjYmlBcUlDQWdhV1E2SUhOMGNtbHVaenRjYmlBcVhHNGdLaUFnSUVCd2NtOXdaWEowZVNncFhHNGdLaUFnSUdSaGRHRTZJSE4wY21sdVp6dGNiaUFxSUgxY2JpQXFYRzRnS2lBdkx5QkRjbVZoZEdVZ1lTQmpiMjUwY21GamRDQjBhR0YwSUdWNGRHVnVaSE1nUm1GaWNtbGpRM0oxWkVOdmJuUnlZV04wWEc0Z0tpQmxlSEJ2Y25RZ1kyeGhjM01nUVhOelpYUkRiMjUwY21GamRDQmxlSFJsYm1SeklFWmhZbkpwWTBOeWRXUkRiMjUwY21GamREeEJjM05sZEQ0Z2UxeHVJQ29nSUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmlBcUlDQWdJQ0J6ZFhCbGNpZ25RWE56WlhSRGIyNTBjbUZqZENjc0lFRnpjMlYwS1R0Y2JpQXFJQ0FnZlZ4dUlDcGNiaUFxSUNBZ0x5OGdRV1JrSUdOMWMzUnZiU0J0WlhSb2IyUnpJR0Z6SUc1bFpXUmxaRnh1SUNvZ0lDQmhjM2x1WXlCblpYUkJjM05sZEVocGMzUnZjbmtvWTNSNE9pQkRiMjUwWlhoMExDQnBaRG9nYzNSeWFXNW5LVG9nVUhKdmJXbHpaVHhoYm5sYlhUNGdlMXh1SUNvZ0lDQWdJQzh2SUVOMWMzUnZiU0JwYlhCc1pXMWxiblJoZEdsdmJseHVJQ29nSUNCOVhHNGdLaUI5WEc0Z0tpQmdZR0JjYmlBcUlFQnRaWEp0WVdsa1hHNGdLaUJ6WlhGMVpXNWpaVVJwWVdkeVlXMWNiaUFxSUNBZ2NHRnlkR2xqYVhCaGJuUWdRMnhwWlc1MFhHNGdLaUFnSUhCaGNuUnBZMmx3WVc1MElFTnZiblJ5WVdOMFhHNGdLaUFnSUhCaGNuUnBZMmx3WVc1MElGSmxjRzl6YVhSdmNubGNiaUFxSUNBZ2NHRnlkR2xqYVhCaGJuUWdRV1JoY0hSbGNseHVJQ29nSUNCd1lYSjBhV05wY0dGdWRDQlRkR0YwWlVSQ1hHNGdLbHh1SUNvZ0lDQkRiR2xsYm5RdFBqNURiMjUwY21GamREb2dZM0psWVhSbEtHTjBlQ3dnYlc5a1pXd3BYRzRnS2lBZ0lFTnZiblJ5WVdOMExUNCtVbVZ3YjNOcGRHOXllVG9nY21Wd2IzTnBkRzl5ZVNoamRIZ3BYRzRnS2lBZ0lFTnZiblJ5WVdOMExUNCtVbVZ3YjNOcGRHOXllVG9nWTNKbFlYUmxLRzF2WkdWc0xDQmpkSGdwWEc0Z0tpQWdJRkpsY0c5emFYUnZjbmt0UGo1QlpHRndkR1Z5T2lCamNtVmhkR1VvZEdGaWJHVk9ZVzFsTENCcFpDd2djbVZqYjNKa0xDQjBjbUZ1YzJsbGJuUXNJR04wZUNsY2JpQXFJQ0FnUVdSaGNIUmxjaTArUGxOMFlYUmxSRUk2SUhCMWRGTjBZWFJsS0dsa0xDQnpaWEpwWVd4cGVtVmtSR0YwWVNsY2JpQXFJQ0FnVTNSaGRHVkVRaTB0UGo1QlpHRndkR1Z5T2lCVGRXTmpaWE56WEc0Z0tpQWdJRUZrWVhCMFpYSXRMVDQrVW1Wd2IzTnBkRzl5ZVRvZ2NtVmpiM0prWEc0Z0tpQWdJRkpsY0c5emFYUnZjbmt0TFQ0K1EyOXVkSEpoWTNRNklHMXZaR1ZzWEc0Z0tpQWdJRU52Ym5SeVlXTjBMUzArUGtOc2FXVnVkRG9nYlc5a1pXeGNiaUFxTDF4dVpYaHdiM0owSUdGaWMzUnlZV04wSUdOc1lYTnpJRVpoWW5KcFkwTnlkV1JEYjI1MGNtRmpkRHhOSUdWNGRHVnVaSE1nVFc5a1pXdytYRzRnSUdWNGRHVnVaSE1nUTI5dWRISmhZM1JjYmlBZ2FXMXdiR1Z0Wlc1MGMxeHVJQ0FnSUVOb1pXTnJZV0pzWlN4Y2JpQWdJQ0JRWlhKemFYTjBaVzVqWlU5aWMyVnlkbVZ5UEVaaFluSnBZME52Ym5SeVlXTjBRMjl1ZEdWNGRENHNYRzRnSUNBZ1QySnpaWEoyWlhJOFhHNGdJQ0FnSUNCYlhHNGdJQ0FnSUNBZ0lIUmhZbXhsT2lCRGIyNXpkSEoxWTNSdmNqeE5QaUI4SUhOMGNtbHVaeXhjYmlBZ0lDQWdJQ0FnWlhabGJuUTZJRUZzYkU5d1pYSmhkR2x2Ymt0bGVYTXNYRzRnSUNBZ0lDQWdJR2xrT2lCRmRtVnVkRWxrY3l4Y2JpQWdJQ0FnSUNBZ0xpNHVZWEpuY3pvZ1EyOXVkR1Y0ZEhWaGJFRnlaM004Um1GaWNtbGpRMjl1ZEhKaFkzUkRiMjUwWlhoMFBpeGNiaUFnSUNBZ0lGMWNiaUFnSUNBK1hHNTdYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdVMmhoY21Wa0lHRmtZWEIwWlhJZ2FXNXpkR0Z1WTJVZ1ptOXlJR0ZzYkNCamIyNTBjbUZqZENCcGJuTjBZVzVqWlhOY2JpQWdJQ292WEc0Z0lIQnliM1JsWTNSbFpDQnpkR0YwYVdNZ1lXUmhjSFJsY2pvZ1JtRmljbWxqUTI5dWRISmhZM1JCWkdGd2RHVnlJRDBnYm1WM0lFWmhZbkpwWTBOdmJuUnlZV04wUVdSaGNIUmxjaWdwTzF4dVhHNGdJSEJ5YjNSbFkzUmxaQ0J6ZEdGMGFXTWdjbVZoWkc5dWJIa2djMlZ5YVdGc2FYcGxjaUE5SUc1bGR5QkVaWFJsY20xcGJtbHpkR2xqVTJWeWFXRnNhWHBsY2lncE8xeHVYRzRnSUhCeWIzUmxZM1JsWkNCcGJtbDBhV0ZzYVhwbFpEb2dZbTl2YkdWaGJpQTlJR1poYkhObE8xeHVYRzRnSUhCeWFYWmhkR1VnWDNKbGNHOC9PaUJHWVdKeWFXTkRiMjUwY21GamRGSmxjRzl6YVhSdmNuazhUVDQ3WEc1Y2JpQWdjSEp2ZEdWamRHVmtJR2RsZENCeVpYQnZLQ2tnZTF4dUlDQWdJR2xtSUNnaGRHaHBjeTVmY21Wd2J5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZmNtVndieUE5SUZKbGNHOXphWFJ2Y25rdVptOXlUVzlrWld3b2RHaHBjeTVqYkdGNmVpazdYRzRnSUNBZ0lDQXZMeUIwY25rZ2UxeHVJQ0FnSUNBZ0x5OGdJQ0IwYUdsekxuSmxjRzh1YjJKelpYSjJaU2gwYUdsektUdGNiaUFnSUNBZ0lDOHZJSDBnWTJGMFkyZ2dLR1Z5Y2pvZ2RXNXJibTkzYmlrZ2UxeHVJQ0FnSUNBZ0x5OGdJQ0JwWmlBb1hHNGdJQ0FnSUNBdkx5QWdJQ0FnWlhKeUlHbHVjM1JoYm1ObGIyWWdTVzUwWlhKdVlXeEZjbkp2Y2lBbUpseHVJQ0FnSUNBZ0x5OGdJQ0FnSUdWeWNpNXRaWE56WVdkbExtbHVZMngxWkdWektGd2lUMkp6WlhKMlpYSWdZV3h5WldGa2VTQnlaV2RwYzNSbGNtVmtYQ0lwWEc0Z0lDQWdJQ0F2THlBZ0lDa2dlMXh1SUNBZ0lDQWdMeThnSUNBZ0lDOHZJR0ZzY21WaFpIa2djbVZuYVhOMFpYSmxaQ0J2WW5ObGNuWmxjanNnYVdkdWIzSmxJR1IxY0d4cFkyRjBaU0J5WldkcGMzUnlZWFJwYjI0Z0tHUjFjbWx1WnlCMFpYTjBjeWxjYmlBZ0lDQWdJQzh2SUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUM4dklDQWdJQ0IwYUhKdmR5Qmxjbkk3WEc0Z0lDQWdJQ0F2THlBZ0lIMWNiaUFnSUNBZ0lDOHZJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM0psY0c4N1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVOeVpXRjBaWE1nWVNCdVpYY2dSbUZpY21salEzSjFaRU52Ym5SeVlXTjBJR2x1YzNSaGJtTmxYRzRnSUNBcUlFQnpkVzF0WVhKNUlFbHVhWFJwWVd4cGVtVnpJR0VnWTI5dWRISmhZM1FnZDJsMGFDQmhJRzVoYldVZ1lXNWtJRzF2WkdWc0lHTnNZWE56WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnVZVzFsSUMwZ1ZHaGxJRzVoYldVZ2IyWWdkR2hsSUdOdmJuUnlZV04wWEc0Z0lDQXFJRUJ3WVhKaGJTQjdRMjl1YzNSeWRXTjBiM0k4VFQ1OUlHTnNZWHA2SUMwZ1ZHaGxJRzF2WkdWc0lHTnZibk4wY25WamRHOXlYRzRnSUNBcUwxeHVJQ0J3Y205MFpXTjBaV1FnWTI5dWMzUnlkV04wYjNJb1hHNGdJQ0FnYm1GdFpUb2djM1J5YVc1bkxGeHVJQ0FnSUhCeWIzUmxZM1JsWkNCeVpXRmtiMjVzZVNCamJHRjZlam9nUTI5dWMzUnlkV04wYjNJOFRUNWNiaUFnS1NCN1hHNGdJQ0FnYzNWd1pYSW9ibUZ0WlNrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCeVpXWnlaWE5vS0Z4dUlDQWdJSFJoWW14bE9pQkRiMjV6ZEhKMVkzUnZjanhOUGlCOElITjBjbWx1Wnl4Y2JpQWdJQ0JsZG1WdWREb2dRV3hzVDNCbGNtRjBhVzl1UzJWNWN5eGNiaUFnSUNCcFpEb2dSWFpsYm5SSlpITXNYRzRnSUNBZ0xpNHVZWEpuY3pvZ1EyOXVkR1Y0ZEhWaGJFRnlaM004Um1GaWNtbGpRMjl1ZEhKaFkzUkRiMjUwWlhoMFBseHVJQ0FwT2lCUWNtOXRhWE5sUEhadmFXUStJSHRjYmlBZ0lDQmpiMjV6ZENCN0lHeHZaeUI5SUQwZ2RHaHBjeTVzYjJkRGRIZ29ZWEpuY3l3Z2RHaHBjeTV5WldaeVpYTm9LVHRjYmlBZ0lDQnNiMmN1ZG1WeVltOXpaU2hnVUhWemFHbHVaeUFrZTJWMlpXNTBmU0JsZG1WdWRDQnZiaUIwWVdKc1pTQWtlM1JoWW14bGZTd2dhV1FvY3lrZ0pIdHBaSDFnS1R0Y2JpQWdJQ0F2THlCa2J5QnViM1JvYVc1bkxpQmhiR3dnZDJVZ2JtVmxaR1ZrSUhkaGN5QmhiaUJ2WW5ObGNuWmxjaUIwYnlCcmFXTnJjM1JoY25RZ2RHaGxJSEJ5YjJObGMzTmNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklHeHBjM1JDZVNoY2JpQWdJQ0JqZEhnNklFTjBlQ0I4SUVaaFluSnBZME52Ym5SeVlXTjBRMjl1ZEdWNGRDeGNiaUFnSUNCclpYazZJSE4wY21sdVp5QjhJR3RsZVc5bUlFMHNYRzRnSUNBZ2IzSmtaWEk2SUhOMGNtbHVaeXhjYmlBZ0lDQXVMaTVoY21kek9pQmhibmxiWFZ4dUlDQXBPaUJRY205dGFYTmxQRTFiWFNCOElITjBjbWx1Wno0Z2UxeHVJQ0FnSUdOdmJuTjBJSHNnWTNSNFFYSm5jeXdnYkc5bklIMGdQU0FvWEc0Z0lDQWdJQ0JoZDJGcGRDQjBhR2x6TG14dlowTjBlQ2hiTGk0dVlYSm5jeXdnWTNSNFhTd2dVSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGt4SlUxUmZRbGtzSUhSeWRXVXBYRzRnSUNBZ0tTNW1iM0lvZEdocGN5NXNhWE4wUW5rcE8xeHVJQ0FnSUd4dlp5NXBibVp2S0Z4dUlDQWdJQ0FnWUZKMWJtNXBibWNnYkdsemRFSjVJR3RsZVNBa2UydGxlU0JoY3lCemRISnBibWQ5TENCdmNtUmxjaUFrZTI5eVpHVnlmU0JoYm1RZ1lYSm5jeUFrZTJOMGVFRnlaM045WUZ4dUlDQWdJQ2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11Y21Wd2J5NXNhWE4wUW5rb1hHNGdJQ0FnSUNCclpYa2dZWE1nYTJWNWIyWWdUU3hjYmlBZ0lDQWdJRzl5WkdWeUlHRnpJRTl5WkdWeVJHbHlaV04wYVc5dUxGeHVJQ0FnSUNBZ0xpNHVZM1I0UVhKbmMxeHVJQ0FnSUNrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCd1lXZHBibUYwWlVKNUtGeHVJQ0FnSUdOMGVEb2dRM1I0SUh3Z1JtRmljbWxqUTI5dWRISmhZM1JEYjI1MFpYaDBMRnh1SUNBZ0lHdGxlVG9nYzNSeWFXNW5JSHdnYTJWNWIyWWdUU3hjYmlBZ0lDQnZjbVJsY2pvZ2MzUnlhVzVuTEZ4dUlDQWdJSEpsWmpvZ1QyMXBkRHhFYVhKbFkzUnBiMjVNYVcxcGRFOW1abk5sZEN3Z1hDSmthWEpsWTNScGIyNWNJajRnZkNCemRISnBibWNnUFNCN1hHNGdJQ0FnSUNCdlptWnpaWFE2SURFc1hHNGdJQ0FnSUNCc2FXMXBkRG9nTVRBc1hHNGdJQ0FnZlN4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEZObGNtbGhiR2w2WldSUVlXZGxQRTArSUh3Z2MzUnlhVzVuUGlCN1hHNGdJQ0FnWTI5dWMzUWdleUJqZEhoQmNtZHpMQ0JzYjJjZ2ZTQTlJQ2hjYmlBZ0lDQWdJR0YzWVdsMElIUm9hWE11Ykc5blEzUjRLRnN1TGk1aGNtZHpMQ0JqZEhoZExDQlFjbVZ3WVhKbFpGTjBZWFJsYldWdWRFdGxlWE11VUVGSFJWOUNXU3dnZEhKMVpTbGNiaUFnSUNBcExtWnZjaWgwYUdsekxuQmhaMmx1WVhSbFFua3BPMXh1SUNBZ0lHeHZaeTVwYm1adktGeHVJQ0FnSUNBZ1lGSjFibTVwYm1jZ2NHRm5hVzVoZEdWQ2VTQnJaWGtnSkh0clpYa2dZWE1nYzNSeWFXNW5mU3dnYjNKa1pYSWdKSHR2Y21SbGNuMGdkMmwwYUNCemFYcGxJQ1I3S0hKbFppQmhjeUJoYm5rcExteHBiV2wwZlNCaGJtUWdZWEpuY3lBa2UyTjBlRUZ5WjNOOVlGeHVJQ0FnSUNrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNtVndieTV3WVdkcGJtRjBaVUo1S0Z4dUlDQWdJQ0FnYTJWNUlHRnpJR3RsZVc5bUlFMHNYRzRnSUNBZ0lDQnZjbVJsY2lCaGN5QmhibmtzWEc0Z0lDQWdJQ0J5WldZZ1lYTWdZVzU1TEZ4dUlDQWdJQ0FnTGk0dVkzUjRRWEpuYzF4dUlDQWdJQ2s3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJ3WVdkbEtGeHVJQ0FnSUdOMGVEb2dRM1I0SUh3Z1JtRmljbWxqUTI5dWRISmhZM1JEYjI1MFpYaDBMRnh1SUNBZ0lIWmhiSFZsT2lCemRISnBibWNzWEc0Z0lDQWdaR2x5WldOMGFXOXVPaUJ6ZEhKcGJtY2dmQ0JQY21SbGNrUnBjbVZqZEdsdmJpQTlJRTl5WkdWeVJHbHlaV04wYVc5dUxrRlRReXhjYmlBZ0lDQnlaV1k2SUU5dGFYUThSR2x5WldOMGFXOXVUR2x0YVhSUFptWnpaWFFzSUZ3aVpHbHlaV04wYVc5dVhDSStJSHdnYzNSeWFXNW5JRDBnZTF4dUlDQWdJQ0FnYjJabWMyVjBPaUF4TEZ4dUlDQWdJQ0FnYkdsdGFYUTZJREV3TEZ4dUlDQWdJSDBzWEc0Z0lDQWdMaTR1WVhKbmN6b2dZVzU1VzExY2JpQWdLVG9nVUhKdmJXbHpaVHhUWlhKcFlXeHBlbVZrVUdGblpUeE5QaUI4SUhOMGNtbHVaejRnZTF4dUlDQWdJR052Ym5OMElIc2dZM1I0UVhKbmN5d2diRzluSUgwZ1BTQW9YRzRnSUNBZ0lDQmhkMkZwZENCMGFHbHpMbXh2WjBOMGVDaGJMaTR1WVhKbmN5d2dZM1I0WFN3Z1VISmxjR0Z5WldSVGRHRjBaVzFsYm5STFpYbHpMbEJCUjBVc0lIUnlkV1VwWEc0Z0lDQWdLUzVtYjNJb2RHaHBjeTV3WVdkbEtUdGNiaUFnSUNCc2IyY3VhVzVtYnloY2JpQWdJQ0FnSUdCUVlXZHBibWNnSkh0TmIyUmxiQzUwWVdKc1pVNWhiV1VvZEdocGN5NWpiR0Y2ZWlsOUlHSjVJR1JsWm1GMWJIUWdjWFZsY25rZ1lYUjBjbWxpZFhSbGMyQmNiaUFnSUNBcE8xeHVJQ0FnSUdOdmJuTjBJSEpsWm1WeVpXNWpaU0E5WEc0Z0lDQWdJQ0IwZVhCbGIyWWdjbVZtSUQwOVBTQmNJbk4wY21sdVoxd2lYRzRnSUNBZ0lDQWdJRDhnS0VwVFQwNHVjR0Z5YzJVb2NtVm1LU0JoY3lCUGJXbDBQRVJwY21WamRHbHZia3hwYldsMFQyWm1jMlYwTENCY0ltUnBjbVZqZEdsdmJsd2lQaWtnZkh4Y2JpQWdJQ0FnSUNBZ0lDQW9lMzBnWVhNZ1QyMXBkRHhFYVhKbFkzUnBiMjVNYVcxcGRFOW1abk5sZEN3Z1hDSmthWEpsWTNScGIyNWNJajRwWEc0Z0lDQWdJQ0FnSURvZ2NtVm1PMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbkpsY0c4dWNHRm5aU2hjYmlBZ0lDQWdJSFpoYkhWbExGeHVJQ0FnSUNBZ1pHbHlaV04wYVc5dUlHRnpJRTl5WkdWeVJHbHlaV04wYVc5dUxGeHVJQ0FnSUNBZ2NtVm1aWEpsYm1ObElHRnpJRTl0YVhROFJHbHlaV04wYVc5dVRHbHRhWFJQWm1aelpYUXNJRndpWkdseVpXTjBhVzl1WENJK0xGeHVJQ0FnSUNBZ0xpNHVZM1I0UVhKbmMxeHVJQ0FnSUNrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCbWFXNWtUMjVsUW5rb1hHNGdJQ0FnWTNSNE9pQkRkSGdnZkNCR1lXSnlhV05EYjI1MGNtRmpkRU52Ym5SbGVIUXNYRzRnSUNBZ2EyVjVPaUJ6ZEhKcGJtY2dmQ0JyWlhsdlppQk5MRnh1SUNBZ0lIWmhiSFZsT2lCaGJua3NYRzRnSUNBZ0xpNHVZWEpuY3pvZ1lXNTVXMTFjYmlBZ0tUb2dVSEp2YldselpUeE5JSHdnYzNSeWFXNW5QaUI3WEc0Z0lDQWdZMjl1YzNRZ2V5QmpkSGhCY21kekxDQnNiMmNnZlNBOUlDaGNiaUFnSUNBZ0lHRjNZV2wwSUhSb2FYTXViRzluUTNSNEtGc3VMaTVoY21kekxDQmpkSGhkTENCUWNtVndZWEpsWkZOMFlYUmxiV1Z1ZEV0bGVYTXVSa2xPUkY5UFRrVmZRbGtzSUhSeWRXVXBYRzRnSUNBZ0tTNW1iM0lvZEdocGN5NW1hVzVrVDI1bFFua3BPMXh1SUNBZ0lHeHZaeTVwYm1adktGeHVJQ0FnSUNBZ1lGSjFibTVwYm1jZ1ptbHVaRTl1WlVKNUlHdGxlU0FrZTJ0bGVTQmhjeUJ6ZEhKcGJtZDlMQ0IyWVd4MVpUb2dKSHQyWVd4MVpYMGdkMmwwYUNCaGNtZHpJQ1I3WTNSNFFYSm5jMzFnWEc0Z0lDQWdLVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTV5WlhCdkxtWnBibVJQYm1WQ2VTaHJaWGtnWVhNZ2EyVjViMllnVFN3Z2RtRnNkV1VzSUM0dUxtTjBlRUZ5WjNNcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ2MzUmhkR1Z0Wlc1MEtGeHVJQ0FnSUdOMGVEb2dRM1I0SUh3Z1JtRmljbWxqUTI5dWRISmhZM1JEYjI1MFpYaDBMRnh1SUNBZ0lHMWxkR2h2WkRvZ2MzUnlhVzVuTEZ4dUlDQWdJQzR1TG1GeVozTTZJR0Z1ZVZ0ZFhHNGdJQ2s2SUZCeWIyMXBjMlU4WVc1NVBpQjdYRzRnSUNBZ1kyOXVjM1FnZXlCamRIaEJjbWR6TENCc2IyY2dmU0E5SUNoY2JpQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdWJHOW5RM1I0S0ZzdUxpNWhjbWR6TENCamRIaGRMQ0JRWlhKemFYTjBaVzVqWlV0bGVYTXVVMVJCVkVWTlJVNVVMQ0IwY25WbEtWeHVJQ0FnSUNrdVptOXlLSFJvYVhNdWMzUmhkR1Z0Wlc1MEtUdGNiaUFnSUNCc2IyY3VhVzVtYnloZ1VuVnVibWx1WnlCemRHRjBaVzFsYm5RZ0pIdHRaWFJvYjJSOUlIZHBkR2dnWVhKbmN5QWtlMk4wZUVGeVozTjlZQ2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11Y21Wd2J5NXpkR0YwWlcxbGJuUW9iV1YwYUc5a0xDQXVMaTVqZEhoQmNtZHpLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR052ZFc1MFQyWW9YRzRnSUNBZ1kzUjRPaUJEZEhnZ2ZDQkdZV0p5YVdORGIyNTBjbUZqZEVOdmJuUmxlSFFzWEc0Z0lDQWdhMlY1UHpvZ2MzUnlhVzVuSUh3Z2EyVjViMllnVFN4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJoYm5sYlhWeHVJQ0FwT2lCUWNtOXRhWE5sUEc1MWJXSmxjaUI4SUhOMGNtbHVaejRnZTF4dUlDQWdJR052Ym5OMElIc2dZM1I0UVhKbmN5d2diRzluSUgwZ1BTQW9YRzRnSUNBZ0lDQmhkMkZwZENCMGFHbHpMbXh2WjBOMGVDaGJMaTR1WVhKbmN5d2dZM1I0WFN3Z1VISmxjR0Z5WldSVGRHRjBaVzFsYm5STFpYbHpMa05QVlU1VVgwOUdMQ0IwY25WbEtWeHVJQ0FnSUNrdVptOXlLSFJvYVhNdVkyOTFiblJQWmlrN1hHNGdJQ0FnYkc5bkxtbHVabThvWUZKMWJtNXBibWNnWTI5MWJuUlBaaVI3YTJWNUlEOGdZQ0JyWlhrZ0pIdHJaWGtnWVhNZ2MzUnlhVzVuZldBZ09pQmNJbHdpZldBcE8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuSmxjRzh1WTI5MWJuUlBaaWhyWlhrZ1lYTWdhMlY1YjJZZ1RTQjhJSFZ1WkdWbWFXNWxaQ3dnTGk0dVkzUjRRWEpuY3lrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCdFlYaFBaaWhjYmlBZ0lDQmpkSGc2SUVOMGVDQjhJRVpoWW5KcFkwTnZiblJ5WVdOMFEyOXVkR1Y0ZEN4Y2JpQWdJQ0JyWlhrNklITjBjbWx1WnlCOElHdGxlVzltSUUwc1hHNGdJQ0FnTGk0dVlYSm5jem9nWVc1NVcxMWNiaUFnS1RvZ1VISnZiV2x6WlR4TlcydGxlVzltSUUxZElId2djM1J5YVc1blBpQjdYRzRnSUNBZ1kyOXVjM1FnZXlCamRIaEJjbWR6TENCc2IyY2dmU0E5SUNoY2JpQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdWJHOW5RM1I0S0ZzdUxpNWhjbWR6TENCamRIaGRMQ0JRY21Wd1lYSmxaRk4wWVhSbGJXVnVkRXRsZVhNdVRVRllYMDlHTENCMGNuVmxLVnh1SUNBZ0lDa3VabTl5S0hSb2FYTXViV0Y0VDJZcE8xeHVJQ0FnSUd4dlp5NXBibVp2S0dCU2RXNXVhVzVuSUcxaGVFOW1JR3RsZVNBa2UydGxlU0JoY3lCemRISnBibWQ5WUNrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNtVndieTV0WVhoUFppaHJaWGtnWVhNZ2EyVjViMllnVFN3Z0xpNHVZM1I0UVhKbmN5azdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QnRhVzVQWmloY2JpQWdJQ0JqZEhnNklFTjBlQ0I4SUVaaFluSnBZME52Ym5SeVlXTjBRMjl1ZEdWNGRDeGNiaUFnSUNCclpYazZJSE4wY21sdVp5QjhJR3RsZVc5bUlFMHNYRzRnSUNBZ0xpNHVZWEpuY3pvZ1lXNTVXMTFjYmlBZ0tUb2dVSEp2YldselpUeE5XMnRsZVc5bUlFMWRJSHdnYzNSeWFXNW5QaUI3WEc0Z0lDQWdZMjl1YzNRZ2V5QmpkSGhCY21kekxDQnNiMmNnZlNBOUlDaGNiaUFnSUNBZ0lHRjNZV2wwSUhSb2FYTXViRzluUTNSNEtGc3VMaTVoY21kekxDQmpkSGhkTENCUWNtVndZWEpsWkZOMFlYUmxiV1Z1ZEV0bGVYTXVUVWxPWDA5R0xDQjBjblZsS1Z4dUlDQWdJQ2t1Wm05eUtIUm9hWE11YldsdVQyWXBPMXh1SUNBZ0lHeHZaeTVwYm1adktHQlNkVzV1YVc1bklHMXBiazltSUd0bGVTQWtlMnRsZVNCaGN5QnpkSEpwYm1kOVlDazdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjbVZ3Ynk1dGFXNVBaaWhyWlhrZ1lYTWdhMlY1YjJZZ1RTd2dMaTR1WTNSNFFYSm5jeWs3WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJoZG1kUFppaGNiaUFnSUNCamRIZzZJRU4wZUNCOElFWmhZbkpwWTBOdmJuUnlZV04wUTI5dWRHVjRkQ3hjYmlBZ0lDQnJaWGs2SUhOMGNtbHVaeUI4SUd0bGVXOW1JRTBzWEc0Z0lDQWdMaTR1WVhKbmN6b2dZVzU1VzExY2JpQWdLVG9nVUhKdmJXbHpaVHh1ZFcxaVpYSWdmQ0J6ZEhKcGJtYytJSHRjYmlBZ0lDQmpiMjV6ZENCN0lHTjBlRUZ5WjNNc0lHeHZaeUI5SUQwZ0tGeHVJQ0FnSUNBZ1lYZGhhWFFnZEdocGN5NXNiMmREZEhnb1d5NHVMbUZ5WjNNc0lHTjBlRjBzSUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NUJWa2RmVDBZc0lIUnlkV1VwWEc0Z0lDQWdLUzVtYjNJb2RHaHBjeTVoZG1kUFppazdYRzRnSUNBZ2JHOW5MbWx1Wm04b1lGSjFibTVwYm1jZ1lYWm5UMllnYTJWNUlDUjdhMlY1SUdGeklITjBjbWx1WjMxZ0tUdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXlaWEJ2TG1GMlowOW1LR3RsZVNCaGN5QnJaWGx2WmlCTkxDQXVMaTVqZEhoQmNtZHpLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJSE4xYlU5bUtGeHVJQ0FnSUdOMGVEb2dRM1I0SUh3Z1JtRmljbWxqUTI5dWRISmhZM1JEYjI1MFpYaDBMRnh1SUNBZ0lHdGxlVG9nYzNSeWFXNW5JSHdnYTJWNWIyWWdUU3hjYmlBZ0lDQXVMaTVoY21kek9pQmhibmxiWFZ4dUlDQXBPaUJRY205dGFYTmxQRzUxYldKbGNpQjhJSE4wY21sdVp6NGdlMXh1SUNBZ0lHTnZibk4wSUhzZ1kzUjRRWEpuY3l3Z2JHOW5JSDBnUFNBb1hHNGdJQ0FnSUNCaGQyRnBkQ0IwYUdsekxteHZaME4wZUNoYkxpNHVZWEpuY3l3Z1kzUjRYU3dnVUhKbGNHRnlaV1JUZEdGMFpXMWxiblJMWlhsekxsTlZUVjlQUml3Z2RISjFaU2xjYmlBZ0lDQXBMbVp2Y2loMGFHbHpMbk4xYlU5bUtUdGNiaUFnSUNCc2IyY3VhVzVtYnloZ1VuVnVibWx1WnlCemRXMVBaaUJyWlhrZ0pIdHJaWGtnWVhNZ2MzUnlhVzVuZldBcE8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuSmxjRzh1YzNWdFQyWW9hMlY1SUdGeklHdGxlVzltSUUwc0lDNHVMbU4wZUVGeVozTXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdaR2x6ZEdsdVkzUlBaaWhjYmlBZ0lDQmpkSGc2SUVOMGVDQjhJRVpoWW5KcFkwTnZiblJ5WVdOMFEyOXVkR1Y0ZEN4Y2JpQWdJQ0JyWlhrNklITjBjbWx1WnlCOElHdGxlVzltSUUwc1hHNGdJQ0FnTGk0dVlYSm5jem9nWVc1NVcxMWNiaUFnS1RvZ1VISnZiV2x6WlR4TlcydGxlVzltSUUxZFcxMGdmQ0J6ZEhKcGJtYytJSHRjYmlBZ0lDQmpiMjV6ZENCN0lHTjBlRUZ5WjNNc0lHeHZaeUI5SUQwZ0tGeHVJQ0FnSUNBZ1lYZGhhWFFnZEdocGN5NXNiMmREZEhnb1d5NHVMbUZ5WjNNc0lHTjBlRjBzSUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NUVTVk5VU1U1RFZGOVBSaXdnZEhKMVpTbGNiaUFnSUNBcExtWnZjaWgwYUdsekxtUnBjM1JwYm1OMFQyWXBPMXh1SUNBZ0lHeHZaeTVwYm1adktHQlNkVzV1YVc1bklHUnBjM1JwYm1OMFQyWWdhMlY1SUNSN2EyVjVJR0Z6SUhOMGNtbHVaMzFnS1R0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1eVpYQnZMbVJwYzNScGJtTjBUMllvYTJWNUlHRnpJR3RsZVc5bUlFMHNJQzR1TG1OMGVFRnlaM01wTzF4dUlDQjlYRzVjYmlBZ1lYTjVibU1nWjNKdmRYQlBaaWhjYmlBZ0lDQmpkSGc2SUVOMGVDQjhJRVpoWW5KcFkwTnZiblJ5WVdOMFEyOXVkR1Y0ZEN4Y2JpQWdJQ0JyWlhrNklITjBjbWx1WnlCOElHdGxlVzltSUUwc1hHNGdJQ0FnTGk0dVlYSm5jem9nWVc1NVcxMWNiaUFnS1RvZ1VISnZiV2x6WlR4U1pXTnZjbVE4YzNSeWFXNW5MQ0JOVzEwK0lId2djM1J5YVc1blBpQjdYRzRnSUNBZ1kyOXVjM1FnZXlCamRIaEJjbWR6TENCc2IyY2dmU0E5SUNoY2JpQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdWJHOW5RM1I0S0ZzdUxpNWhjbWR6TENCamRIaGRMQ0JRY21Wd1lYSmxaRk4wWVhSbGJXVnVkRXRsZVhNdVIxSlBWVkJmVDBZc0lIUnlkV1VwWEc0Z0lDQWdLUzVtYjNJb2RHaHBjeTVuY205MWNFOW1LVHRjYmlBZ0lDQnNiMmN1YVc1bWJ5aGdVblZ1Ym1sdVp5Qm5jbTkxY0U5bUlHdGxlU0FrZTJ0bGVTQmhjeUJ6ZEhKcGJtZDlZQ2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11Y21Wd2J5NW5jbTkxY0U5bUtHdGxlU0JoY3lCclpYbHZaaUJOTENBdUxpNWpkSGhCY21kektUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1EzSmxZWFJsY3lCaElITnBibWRzWlNCdGIyUmxiQ0JwYmlCMGFHVWdjM1JoZEdVZ1pHRjBZV0poYzJWY2JpQWdJQ29nUUhOMWJXMWhjbmtnUkdWc1pXZGhkR1Z6SUhSdklIUm9aU0J5WlhCdmMybDBiM0o1SjNNZ1kzSmxZWFJsSUcxbGRHaHZaRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UwTjBlSDBnWTNSNElDMGdWR2hsSUVaaFluSnBZeUJqYUdGcGJtTnZaR1VnWTI5dWRHVjRkRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UwMTlJRzF2WkdWc0lDMGdWR2hsSUcxdlpHVnNJSFJ2SUdOeVpXRjBaVnh1SUNBZ0tpQkFjR0Z5WVcwZ2V5NHVMbUZ1ZVZ0ZGZTQmhjbWR6SUMwZ1FXUmthWFJwYjI1aGJDQmhjbWQxYldWdWRITmNiaUFnSUNvZ1FISmxkSFZ5YmlCN1VISnZiV2x6WlR4TlBuMGdVSEp2YldselpTQnlaWE52YkhacGJtY2dkRzhnZEdobElHTnlaV0YwWldRZ2JXOWtaV3hjYmlBZ0lDb3ZYRzRnSUdGemVXNWpJR055WldGMFpTaGNiaUFnSUNCamIyNTBaWGgwT2lCRGRIZ2dmQ0JHWVdKeWFXTkRiMjUwY21GamRFTnZiblJsZUhRc1hHNGdJQ0FnYlc5a1pXdzZJSE4wY21sdVp5QjhJRTBzWEc0Z0lDQWdMaTR1WVhKbmN6b2dZVzU1VzExY2JpQWdLVG9nVUhKdmJXbHpaVHh6ZEhKcGJtY2dmQ0JOUGlCN1hHNGdJQ0FnWTI5dWMzUWdleUJzYjJjc0lHTjBlRUZ5WjNNc0lHTjBlQ0I5SUQwZ0tGeHVJQ0FnSUNBZ1lYZGhhWFFnZEdocGN5NXNiMmREZEhnb1d5NHVMbUZ5WjNNc0lHTnZiblJsZUhSZExDQlBjR1Z5WVhScGIyNUxaWGx6TGtOU1JVRlVSU3dnZEhKMVpTbGNiaUFnSUNBcExtWnZjaWgwYUdsekxtTnlaV0YwWlNrN1hHNGdJQ0FnZEdocGN5NWxibk4xY21WTmFYSnliM0pYY21sMFpWQmxjbTFwYzNOcGIyNXpLR04wZUNrN1hHNGdJQ0FnYkc5bkxtbHVabThvWUVOUFRsUlNRVU5VSUVOU1JVRlVSU3dnSkh0amRIaEJjbWR6ZldBcE8xeHVYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQnRiMlJsYkNBOVBUMGdYQ0p6ZEhKcGJtZGNJaWtnYlc5a1pXd2dQU0IwYUdsekxtUmxjMlZ5YVdGc2FYcGxQRTArS0cxdlpHVnNLU0JoY3lCTk8xeHVYRzRnSUNBZ2JHOW5MbWx1Wm04b1lFTnlaV0YwYVc1bklHMXZaR1ZzT2lBa2UwcFRUMDR1YzNSeWFXNW5hV1o1S0cxdlpHVnNLWDFnS1R0Y2JseHVJQ0FnSUdOdmJuTjBJSFJ5WVc1emFXVnVkQ0E5SUhSb2FYTXVaMlYwVkhKaGJuTnBaVzUwUkdGMFlTaGpkSGdwTzF4dVhHNGdJQ0FnYkc5bkxtbHVabThvWUUxbGNtZHBibWNnZEhKaGJuTnBaVzUwSUdSaGRHRXVMaTVnS1R0Y2JpQWdJQ0J0YjJSbGJDQTlJRTF2WkdWc0xtMWxjbWRsS0cxdlpHVnNMQ0IwY21GdWMybGxiblFzSUhSb2FYTXVZMnhoZW5vcElHRnpJRTA3WEc1Y2JpQWdJQ0JqYjI1emRDQmpjbVZoZEdWa0lEMGdZWGRoYVhRZ2RHaHBjeTV5WlhCdkxtTnlaV0YwWlNodGIyUmxiQ3dnTGk0dVkzUjRRWEpuY3lrN1hHNWNiaUFnSUNCamIyNXpkQ0J5WlhOMWJIUWdQU0J1WlhjZ2RHaHBjeTVqYkdGNmVpaE5iMlJsYkM1elpXZHlaV2RoZEdVb1kzSmxZWFJsWkNrdWJXOWtaV3dwTzF4dUlDQWdJSEpsZEhWeWJpQnlaWE4xYkhRN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUZKbFlXUnpJR0VnYzJsdVoyeGxJRzF2WkdWc0lHWnliMjBnZEdobElITjBZWFJsSUdSaGRHRmlZWE5sWEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRVJsYkdWbllYUmxjeUIwYnlCMGFHVWdjbVZ3YjNOcGRHOXllU2R6SUhKbFlXUWdiV1YwYUc5a1hHNGdJQ0FxSUVCd1lYSmhiU0I3UTNSNGZTQmpkSGdnTFNCVWFHVWdSbUZpY21saklHTm9ZV2x1WTI5a1pTQmpiMjUwWlhoMFhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5JSHdnYm5WdFltVnlmU0JyWlhrZ0xTQlVhR1VnYTJWNUlHOW1JSFJvWlNCdGIyUmxiQ0IwYnlCeVpXRmtYRzRnSUNBcUlFQndZWEpoYlNCN0xpNHVZVzU1VzExOUlHRnlaM01nTFNCQlpHUnBkR2x2Ym1Gc0lHRnlaM1Z0Wlc1MGMxeHVJQ0FnS2lCQWNtVjBkWEp1SUh0UWNtOXRhWE5sUEUwK2ZTQlFjbTl0YVhObElISmxjMjlzZG1sdVp5QjBieUIwYUdVZ2NtVjBjbWxsZG1Wa0lHMXZaR1ZzWEc0Z0lDQXFMMXh1SUNCaGMzbHVZeUJ5WldGa0tGeHVJQ0FnSUdOMGVEb2dRM1I0SUh3Z1JtRmljbWxqUTI5dWRISmhZM1JEYjI1MFpYaDBMRnh1SUNBZ0lHdGxlVG9nVUhKcGJXRnllVXRsZVZSNWNHVWdmQ0J6ZEhKcGJtY3NYRzRnSUNBZ0xpNHVZWEpuY3pvZ1lXNTVXMTFjYmlBZ0tUb2dVSEp2YldselpUeE5JSHdnYzNSeWFXNW5QaUI3WEc0Z0lDQWdZMjl1YzNRZ2V5QnNiMmNzSUdOMGVFRnlaM01nZlNBOUlDaGNiaUFnSUNBZ0lHRjNZV2wwSUhSb2FYTXViRzluUTNSNEtGc3VMaTVoY21kekxDQmpkSGhkTENCUGNHVnlZWFJwYjI1TFpYbHpMbEpGUVVRc0lIUnlkV1VwWEc0Z0lDQWdLUzVtYjNJb2RHaHBjeTVqY21WaGRHVXBPMXh1SUNBZ0lHeHZaeTVwYm1adktHQnlaV0ZrYVc1bklHVnVkSEo1SUhkcGRHZ2djR3NnSkh0clpYbDlJR0FwTzF4dVhHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNtVndieTV5WldGa0tHdGxlU3dnTGk0dVkzUjRRWEpuY3lrN1hHNGdJSDFjYmx4dUlDQndjbTkwWldOMFpXUWdaMlYwVkhKaGJuTnBaVzUwUkdGMFlTaGpkSGc2SUVaaFluSnBZME52Ym5SeVlXTjBRMjl1ZEdWNGRDazZJR0Z1ZVNCN1hHNGdJQ0FnWTI5dWMzUWdkSEpoYm5OcFpXNTBUV0Z3SUQwZ1kzUjRMbk4wZFdJdVoyVjBWSEpoYm5OcFpXNTBLQ2s3WEc0Z0lDQWdiR1YwSUhSeVlXNXphV1Z1ZERvZ1lXNTVJRDBnZTMwN1hHNWNiaUFnSUNCcFppQW9kSEpoYm5OcFpXNTBUV0Z3TG1oaGN5aDBhR2x6TG5KbGNHOWJYQ0owWVdKc1pVNWhiV1ZjSWwwcEtTQjdYRzRnSUNBZ0lDQjBjbUZ1YzJsbGJuUWdQU0JLVTA5T0xuQmhjbk5sS0Z4dUlDQWdJQ0FnSUNBb1hHNGdJQ0FnSUNBZ0lDQWdkSEpoYm5OcFpXNTBUV0Z3TG1kbGRDaDBhR2x6TG5KbGNHOWJYQ0owWVdKc1pVNWhiV1ZjSWwwcElHRnpJSFZ1YTI1dmQyNGdZWE1nUW5WbVptVnlYRzRnSUNBZ0lDQWdJQ2svTG5SdlUzUnlhVzVuS0Z3aWRYUm1PRndpS1NCaGN5QnpkSEpwYm1kY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tIUnlZVzV6YVdWdWRFMWhjQzVvWVhNb1hDSmZYMjkyWlhKeWFXUmxjMXdpS1NrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYjNabGNuSnBaR1Z6SUQwZ1NsTlBUaTV3WVhKelpTaGNiaUFnSUNBZ0lDQWdLRnh1SUNBZ0lDQWdJQ0FnSUhSeVlXNXphV1Z1ZEUxaGNDNW5aWFFvZEdocGN5NXlaWEJ2VzF3aWRHRmliR1ZPWVcxbFhDSmRLU0JoY3lCMWJtdHViM2R1SUdGeklFSjFabVpsY2x4dUlDQWdJQ0FnSUNBcFB5NTBiMU4wY21sdVp5aGNJblYwWmpoY0lpa2dZWE1nYzNSeWFXNW5YRzRnSUNBZ0lDQXBPMXh1WEc0Z0lDQWdJQ0JqZEhndVlXTmpkVzExYkdGMFpTaHZkbVZ5Y21sa1pYTXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCMGNtRnVjMmxsYm5RN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUZWd1pHRjBaWE1nWVNCemFXNW5iR1VnYlc5a1pXd2dhVzRnZEdobElITjBZWFJsSUdSaGRHRmlZWE5sWEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRVJsYkdWbllYUmxjeUIwYnlCMGFHVWdjbVZ3YjNOcGRHOXllU2R6SUhWd1pHRjBaU0J0WlhSb2IyUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0RGRIaDlJR04wZUNBdElGUm9aU0JHWVdKeWFXTWdZMmhoYVc1amIyUmxJR052Ym5SbGVIUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0TmZTQnRiMlJsYkNBdElGUm9aU0J0YjJSbGJDQjBieUIxY0dSaGRHVmNiaUFnSUNvZ1FIQmhjbUZ0SUhzdUxpNWhibmxiWFgwZ1lYSm5jeUF0SUVGa1pHbDBhVzl1WVd3Z1lYSm5kVzFsYm5SelhHNGdJQ0FxSUVCeVpYUjFjbTRnZTFCeWIyMXBjMlU4VFQ1OUlGQnliMjFwYzJVZ2NtVnpiMngyYVc1bklIUnZJSFJvWlNCMWNHUmhkR1ZrSUcxdlpHVnNYRzRnSUNBcUwxeHVJQ0JoYzNsdVl5QjFjR1JoZEdVb1hHNGdJQ0FnWTI5dWRHVjRkRG9nUTNSNElId2dSbUZpY21salEyOXVkSEpoWTNSRGIyNTBaWGgwTEZ4dUlDQWdJRzF2WkdWc09pQnpkSEpwYm1jZ2ZDQk5MRnh1SUNBZ0lDNHVMbUZ5WjNNNklHRnVlVnRkWEc0Z0lDazZJRkJ5YjIxcGMyVThjM1J5YVc1bklId2dUVDRnZTF4dUlDQWdJR052Ym5OMElIc2diRzluTENCamRIaEJjbWR6TENCamRIZ2dmU0E5SUNoY2JpQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdWJHOW5RM1I0S0ZzdUxpNWhjbWR6TENCamIyNTBaWGgwWFN3Z1QzQmxjbUYwYVc5dVMyVjVjeTVWVUVSQlZFVXNJSFJ5ZFdVcFhHNGdJQ0FnS1M1bWIzSW9kR2hwY3k1MWNHUmhkR1VwTzF4dUlDQWdJSFJvYVhNdVpXNXpkWEpsVFdseWNtOXlWM0pwZEdWUVpYSnRhWE56YVc5dWN5aGpkSGdwTzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnYlc5a1pXd2dQVDA5SUZ3aWMzUnlhVzVuWENJcElHMXZaR1ZzSUQwZ2RHaHBjeTVrWlhObGNtbGhiR2w2WlR4TlBpaHRiMlJsYkNrZ1lYTWdUVHRjYmx4dUlDQWdJR3h2Wnk1cGJtWnZLR0JWY0dSaGRHbHVaeUJ0YjJSbGJEb2dKSHRLVTA5T0xuTjBjbWx1WjJsbWVTaHRiMlJsYkNsOVlDazdYRzVjYmlBZ0lDQmpiMjV6ZENCMGNtRnVjMmxsYm5RZ1BTQjBhR2x6TG1kbGRGUnlZVzV6YVdWdWRFUmhkR0VvWTNSNEtUdGNibHh1SUNBZ0lHeHZaeTVwYm1adktHQk5aWEpuYVc1bklIUnlZVzV6YVdWdWRDQmtZWFJoTGk0dVlDazdYRzRnSUNBZ2JXOWtaV3dnUFNCTmIyUmxiQzV0WlhKblpTaHRiMlJsYkN3Z2RISmhibk5wWlc1MExDQjBhR2x6TG1Oc1lYcDZLU0JoY3lCTk8xeHVJQ0FnSUdOdmJuTjBJSFZ3WkdGMFpXUWdQU0JoZDJGcGRDQjBhR2x6TG5KbGNHOHVkWEJrWVhSbEtHMXZaR1ZzTENBdUxpNWpkSGhCY21kektUdGNiaUFnSUNCamIyNXpkQ0J5WlhOMWJIUWdQU0J1WlhjZ2RHaHBjeTVqYkdGNmVpaE5iMlJsYkM1elpXZHlaV2RoZEdVb2RYQmtZWFJsWkNrdWJXOWtaV3dwTzF4dUlDQWdJSEpsZEhWeWJpQnlaWE4xYkhRN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVSbGJHVjBaWE1nWVNCemFXNW5iR1VnYlc5a1pXd2dabkp2YlNCMGFHVWdjM1JoZEdVZ1pHRjBZV0poYzJWY2JpQWdJQ29nUUhOMWJXMWhjbmtnUkdWc1pXZGhkR1Z6SUhSdklIUm9aU0J5WlhCdmMybDBiM0o1SjNNZ1pHVnNaWFJsSUcxbGRHaHZaRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UwTjBlSDBnWTNSNElDMGdWR2hsSUVaaFluSnBZeUJqYUdGcGJtTnZaR1VnWTI5dWRHVjRkRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WnlCOElHNTFiV0psY24wZ2EyVjVJQzBnVkdobElHdGxlU0J2WmlCMGFHVWdiVzlrWld3Z2RHOGdaR1ZzWlhSbFhHNGdJQ0FxSUVCd1lYSmhiU0I3TGk0dVlXNTVXMTE5SUdGeVozTWdMU0JCWkdScGRHbHZibUZzSUdGeVozVnRaVzUwYzF4dUlDQWdLaUJBY21WMGRYSnVJSHRRY205dGFYTmxQRTArZlNCUWNtOXRhWE5sSUhKbGMyOXNkbWx1WnlCMGJ5QjBhR1VnWkdWc1pYUmxaQ0J0YjJSbGJGeHVJQ0FnS2k5Y2JpQWdZWE41Ym1NZ1pHVnNaWFJsS0Z4dUlDQWdJR04wZURvZ1EzUjRJSHdnUm1GaWNtbGpRMjl1ZEhKaFkzUkRiMjUwWlhoMExGeHVJQ0FnSUd0bGVUb2dVSEpwYldGeWVVdGxlVlI1Y0dVZ2ZDQnpkSEpwYm1jc1hHNGdJQ0FnTGk0dVlYSm5jem9nWVc1NVcxMWNiaUFnS1RvZ1VISnZiV2x6WlR4TklId2djM1J5YVc1blBpQjdYRzRnSUNBZ1kyOXVjM1FnZTF4dUlDQWdJQ0FnYkc5bkxGeHVJQ0FnSUNBZ1kzUjRRWEpuY3l4Y2JpQWdJQ0FnSUdOMGVEb2dabUZpY21salEzUjRMRnh1SUNBZ0lIMGdQU0FvWVhkaGFYUWdkR2hwY3k1c2IyZERkSGdvV3k0dUxtRnlaM01zSUdOMGVGMHNJRTl3WlhKaGRHbHZia3RsZVhNdVJFVk1SVlJGTENCMGNuVmxLU2t1Wm05eUtGeHVJQ0FnSUNBZ2RHaHBjeTVrWld4bGRHVmNiaUFnSUNBcE8xeHVJQ0FnSUhSb2FYTXVaVzV6ZFhKbFRXbHljbTl5VjNKcGRHVlFaWEp0YVhOemFXOXVjeWhtWVdKeWFXTkRkSGdwTzF4dUlDQWdJR3h2Wnk1cGJtWnZLR0JrWld4bGRHbHVaeUJsYm5SeWVTQjNhWFJvSUhCcklDUjdhMlY1ZlNCZ0tUdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXlaWEJ2TG1SbGJHVjBaU2hUZEhKcGJtY29hMlY1S1N3Z0xpNHVZM1I0UVhKbmN5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFUmxiR1YwWlhNZ2JYVnNkR2x3YkdVZ2JXOWtaV3h6SUdaeWIyMGdkR2hsSUhOMFlYUmxJR1JoZEdGaVlYTmxYRzRnSUNBcUlFQnpkVzF0WVhKNUlFUmxiR1ZuWVhSbGN5QjBieUIwYUdVZ2NtVndiM05wZEc5eWVTZHpJR1JsYkdWMFpVRnNiQ0J0WlhSb2IyUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWRiWFNCOElHNTFiV0psY2x0ZGZTQnJaWGx6SUMwZ1ZHaGxJR3RsZVhNZ2IyWWdkR2hsSUcxdlpHVnNjeUIwYnlCa1pXeGxkR1ZjYmlBZ0lDb2dRSEJoY21GdElIdERkSGg5SUdOMGVDQXRJRlJvWlNCR1lXSnlhV01nWTJoaGFXNWpiMlJsSUdOdmJuUmxlSFJjYmlBZ0lDb2dRSEJoY21GdElIc3VMaTVoYm5sYlhYMGdZWEpuY3lBdElFRmtaR2wwYVc5dVlXd2dZWEpuZFcxbGJuUnpYRzRnSUNBcUlFQnlaWFIxY200Z2UxQnliMjFwYzJVOFRWdGRQbjBnVUhKdmJXbHpaU0J5WlhOdmJIWnBibWNnZEc4Z2RHaGxJR1JsYkdWMFpXUWdiVzlrWld4elhHNGdJQ0FxTDF4dUlDQmhjM2x1WXlCa1pXeGxkR1ZCYkd3b1hHNGdJQ0FnWTNSNE9pQkRkSGdnZkNCR1lXSnlhV05EYjI1MGNtRmpkRU52Ym5SbGVIUXNYRzRnSUNBZ2EyVjVjem9nVUhKcGJXRnllVXRsZVZSNWNHVmJYU0I4SUhOMGNtbHVaeXhjYmlBZ0lDQXVMaTVoY21kek9pQmhibmxiWFZ4dUlDQXBPaUJRY205dGFYTmxQRTFiWFNCOElITjBjbWx1Wno0Z2UxeHVJQ0FnSUdOdmJuTjBJSHNnWTNSNFFYSm5jeXdnWTNSNE9pQm1ZV0p5YVdORGRIZ2dmU0E5SUNoY2JpQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdWJHOW5RM1I0S0ZzdUxpNWhjbWR6TENCamRIaGRMQ0JDZFd4clEzSjFaRTl3WlhKaGRHbHZia3RsZVhNdVJFVk1SVlJGWDBGTVRDd2dkSEoxWlNsY2JpQWdJQ0FwTG1admNpaDBhR2x6TG1SbGJHVjBaVUZzYkNrN1hHNGdJQ0FnZEdocGN5NWxibk4xY21WTmFYSnliM0pYY21sMFpWQmxjbTFwYzNOcGIyNXpLR1poWW5KcFkwTjBlQ2s3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJyWlhseklEMDlQU0JjSW5OMGNtbHVaMXdpS1NCclpYbHpJRDBnU2xOUFRpNXdZWEp6WlNoclpYbHpLU0JoY3lCemRISnBibWRiWFR0Y2JpQWdJQ0JqYjI1emRDQmtaV3hsZEdWa0lEMGdZWGRoYVhRZ2RHaHBjeTV5WlhCdkxtUmxiR1YwWlVGc2JDaHJaWGx6TENBdUxpNWpkSGhCY21kektUdGNiaUFnSUNCamIyNXpkQ0J5WlhOMWJIUWdQU0JrWld4bGRHVmtMbTFoY0Nnb1l5a2dQVDRnYm1WM0lIUm9hWE11WTJ4aGVub29UVzlrWld3dWMyVm5jbVZuWVhSbEtHTXBMbTF2WkdWc0tTazdYRzRnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdVbVZoWkhNZ2JYVnNkR2x3YkdVZ2JXOWtaV3h6SUdaeWIyMGdkR2hsSUhOMFlYUmxJR1JoZEdGaVlYTmxYRzRnSUNBcUlFQnpkVzF0WVhKNUlFUmxiR1ZuWVhSbGN5QjBieUIwYUdVZ2NtVndiM05wZEc5eWVTZHpJSEpsWVdSQmJHd2diV1YwYUc5a1hHNGdJQ0FxSUVCd1lYSmhiU0I3UTNSNGZTQmpkSGdnTFNCVWFHVWdSbUZpY21saklHTm9ZV2x1WTI5a1pTQmpiMjUwWlhoMFhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5XMTBnZkNCdWRXMWlaWEpiWFgwZ2EyVjVjeUF0SUZSb1pTQnJaWGx6SUc5bUlIUm9aU0J0YjJSbGJITWdkRzhnY21WaFpGeHVJQ0FnS2lCQWNHRnlZVzBnZXk0dUxtRnVlVnRkZlNCaGNtZHpJQzBnUVdSa2FYUnBiMjVoYkNCaGNtZDFiV1Z1ZEhOY2JpQWdJQ29nUUhKbGRIVnliaUI3VUhKdmJXbHpaVHhOVzEwK2ZTQlFjbTl0YVhObElISmxjMjlzZG1sdVp5QjBieUIwYUdVZ2NtVjBjbWxsZG1Wa0lHMXZaR1ZzYzF4dUlDQWdLaTljYmlBZ1lYTjVibU1nY21WaFpFRnNiQ2hjYmlBZ0lDQmpkSGc2SUVOMGVDQjhJRVpoWW5KcFkwTnZiblJ5WVdOMFEyOXVkR1Y0ZEN4Y2JpQWdJQ0JyWlhsek9pQlFjbWx0WVhKNVMyVjVWSGx3WlZ0ZElId2djM1J5YVc1bkxGeHVJQ0FnSUM0dUxtRnlaM002SUdGdWVWdGRYRzRnSUNrNklGQnliMjFwYzJVOFRWdGRJSHdnYzNSeWFXNW5QaUI3WEc0Z0lDQWdZMjl1YzNRZ2V5QmpkSGhCY21keklIMGdQU0FvWEc0Z0lDQWdJQ0JoZDJGcGRDQjBhR2x6TG14dlowTjBlQ2hiTGk0dVlYSm5jeXdnWTNSNFhTd2dRblZzYTBOeWRXUlBjR1Z5WVhScGIyNUxaWGx6TGxKRlFVUmZRVXhNTENCMGNuVmxLVnh1SUNBZ0lDa3VabTl5S0hSb2FYTXVZM0psWVhSbEtUdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHdGxlWE1nUFQwOUlGd2ljM1J5YVc1blhDSXBJR3RsZVhNZ1BTQktVMDlPTG5CaGNuTmxLR3RsZVhNcElHRnpJSE4wY21sdVoxdGRPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbkpsY0c4dWNtVmhaRUZzYkNoclpYbHpMQ0F1TGk1amRIaEJjbWR6S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVlhCa1lYUmxjeUJ0ZFd4MGFYQnNaU0J0YjJSbGJITWdhVzRnZEdobElITjBZWFJsSUdSaGRHRmlZWE5sWEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRVJsYkdWbllYUmxjeUIwYnlCMGFHVWdjbVZ3YjNOcGRHOXllU2R6SUhWd1pHRjBaVUZzYkNCdFpYUm9iMlJjYmlBZ0lDb2dRSEJoY21GdElIdERkSGg5SUdOMGVDQXRJRlJvWlNCR1lXSnlhV01nWTJoaGFXNWpiMlJsSUdOdmJuUmxlSFJjYmlBZ0lDb2dRSEJoY21GdElIdE5XMTE5SUcxdlpHVnNjeUF0SUZSb1pTQnRiMlJsYkhNZ2RHOGdkWEJrWVhSbFhHNGdJQ0FxSUVCd1lYSmhiU0I3TGk0dVlXNTVXMTE5SUdGeVozTWdMU0JCWkdScGRHbHZibUZzSUdGeVozVnRaVzUwYzF4dUlDQWdLaUJBY21WMGRYSnVJSHRRY205dGFYTmxQRTFiWFQ1OUlGQnliMjFwYzJVZ2NtVnpiMngyYVc1bklIUnZJSFJvWlNCMWNHUmhkR1ZrSUcxdlpHVnNjMXh1SUNBZ0tpOWNiaUFnWVhONWJtTWdkWEJrWVhSbFFXeHNLRnh1SUNBZ0lHTnZiblJsZUhRNklFTjBlQ0I4SUVaaFluSnBZME52Ym5SeVlXTjBRMjl1ZEdWNGRDeGNiaUFnSUNCdGIyUmxiSE02SUhOMGNtbHVaeUI4SUUxYlhTeGNiaUFnSUNBdUxpNWhjbWR6T2lCaGJubGJYVnh1SUNBcE9pQlFjbTl0YVhObFBITjBjbWx1WnlCOElFMWJYVDRnZTF4dUlDQWdJR052Ym5OMElIc2diRzluTENCamRIaEJjbWR6TENCamRIZ2dmU0E5SUNoY2JpQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdWJHOW5RM1I0S0Z4dUlDQWdJQ0FnSUNCYkxpNHVZWEpuY3l3Z1kyOXVkR1Y0ZEYwc1hHNGdJQ0FnSUNBZ0lFSjFiR3REY25Wa1QzQmxjbUYwYVc5dVMyVjVjeTVWVUVSQlZFVmZRVXhNTEZ4dUlDQWdJQ0FnSUNCMGNuVmxYRzRnSUNBZ0lDQXBYRzRnSUNBZ0tTNW1iM0lvZEdocGN5NTFjR1JoZEdWQmJHd3BPMXh1SUNBZ0lIUm9hWE11Wlc1emRYSmxUV2x5Y205eVYzSnBkR1ZRWlhKdGFYTnphVzl1Y3loamRIZ3BPMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdiVzlrWld4eklEMDlQU0JjSW5OMGNtbHVaMXdpS1Z4dUlDQWdJQ0FnYlc5a1pXeHpJRDBnS0VwVFQwNHVjR0Z5YzJVb2JXOWtaV3h6S1NCaGN5QmJYU2xjYmlBZ0lDQWdJQ0FnTG0xaGNDZ29iU2tnUFQ0Z2RHaHBjeTVrWlhObGNtbGhiR2w2WlNodEtTbGNiaUFnSUNBZ0lDQWdMbTFoY0Nnb2JTa2dQVDRnYm1WM0lIUm9hWE11WTJ4aGVub29iU2twSUdGeklHRnVlVHRjYmx4dUlDQWdJR052Ym5OMElIUnlZVzV6YVdWdWRDQTlJSFJvYVhNdVoyVjBWSEpoYm5OcFpXNTBSR0YwWVNoamRIZ3BPMXh1WEc0Z0lDQWdiRzluTG1sdVptOG9ZRTFsY21kcGJtY2dkSEpoYm5OcFpXNTBJR1JoZEdFdUxpNWdLVHRjYmlBZ0lDQnRiMlJsYkhNZ1BTQW9iVzlrWld4eklHRnpJRTFiWFNrdWJXRndLQ2h0TENCcEtTQTlQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQjBJRDBnUVhKeVlYa3VhWE5CY25KaGVTaDBjbUZ1YzJsbGJuUXBJRDhnZEhKaGJuTnBaVzUwVzJsZElEb2dkSEpoYm5OcFpXNTBPMXh1SUNBZ0lDQWdjbVYwZFhKdUlFMXZaR1ZzTG0xbGNtZGxLRzBzSUhRZ2ZId2dlMzBzSUhSb2FYTXVZMnhoZW5vcElHRnpJRTA3WEc0Z0lDQWdmU2s3WEc1Y2JpQWdJQ0JzYjJjdWFXNW1ieWhnWVdSa2FXNW5JQ1I3Ylc5a1pXeHpMbXhsYm1kMGFIMGdaVzUwY21sbGN5QjBieUIwYUdVZ2RHRmliR1ZnS1R0Y2JseHVJQ0FnSUdOdmJuTjBJSFZ3WkdGMFpXUWdQU0JoZDJGcGRDQjBhR2x6TG5KbGNHOHVkWEJrWVhSbFFXeHNLRnh1SUNBZ0lDQWdiVzlrWld4eklHRnpJSFZ1YTI1dmQyNGdZWE1nVFZ0ZExGeHVJQ0FnSUNBZ0xpNHVZM1I0UVhKbmMxeHVJQ0FnSUNrN1hHNGdJQ0FnWTI5dWMzUWdjbVZ6ZFd4MElEMGdkWEJrWVhSbFpDNXRZWEFvS0dNcElEMCtJRzVsZHlCMGFHbHpMbU5zWVhwNktFMXZaR1ZzTG5ObFozSmxaMkYwWlNoaktTNXRiMlJsYkNrcE8xeHVJQ0FnSUhKbGRIVnliaUJ5WlhOMWJIUTdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFVjRaV04xZEdWeklHRWdjWFZsY25rZ2QybDBhQ0IwYUdVZ2MzQmxZMmxtYVdWa0lHTnZibVJwZEdsdmJuTWdZVzVrSUc5d2RHbHZibk11WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRkJ5YjNacFpHVnpJR0VnYzJsdGNHeHBabWxsWkNCM1lYa2dkRzhnY1hWbGNua2dkR2hsSUdSaGRHRmlZWE5sSUhkcGRHZ2dZMjl0Ylc5dUlIRjFaWEo1SUhCaGNtRnRaWFJsY25NdVhHNGdJQ0FxSUVCd1lYSmhiU0I3UTI5dVpHbDBhVzl1UEUwK2ZTQmpiMjVrYVhScGIyNGdMU0JVYUdVZ1kyOXVaR2wwYVc5dUlIUnZJR1pwYkhSbGNpQnlaV052Y21SekxseHVJQ0FnS2lCQWNHRnlZVzBnYjNKa1pYSkNlU0F0SUZSb1pTQm1hV1ZzWkNCMGJ5QnZjbVJsY2lCeVpYTjFiSFJ6SUdKNUxseHVJQ0FnS2lCQWNHRnlZVzBnZTA5eVpHVnlSR2x5WldOMGFXOXVmU0JiYjNKa1pYSTlUM0prWlhKRWFYSmxZM1JwYjI0dVFWTkRYU0F0SUZSb1pTQnpiM0owSUdScGNtVmpkR2x2Ymk1Y2JpQWdJQ29nUUhCaGNtRnRJSHRQY21SbGNrUnBjbVZqZEdsdmJuMGdXMjl5WkdWeVBVOXlaR1Z5UkdseVpXTjBhVzl1TGtGVFExMGdMU0JVYUdVZ2MyOXlkQ0JrYVhKbFkzUnBiMjR1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmJiR2x0YVhSZElDMGdUM0IwYVc5dVlXd2diV0Y0YVcxMWJTQnVkVzFpWlhJZ2IyWWdjbVZ6ZFd4MGN5QjBieUJ5WlhSMWNtNHVYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCYmMydHBjRjBnTFNCUGNIUnBiMjVoYkNCdWRXMWlaWElnYjJZZ2NtVnpkV3gwY3lCMGJ5QnphMmx3TGx4dUlDQWdLaUJBY21WMGRYSnVJSHRRY205dGFYTmxQRTFiWFQ1OUlGUm9aU0J4ZFdWeWVTQnlaWE4xYkhSeklHRnpJRzF2WkdWc0lHbHVjM1JoYm1ObGN5NWNiaUFnSUNvdlhHNGdJR0Z6ZVc1aklIRjFaWEo1S0Z4dUlDQWdJR052Ym5SbGVIUTZJRU4wZUNCOElFWmhZbkpwWTBOdmJuUnlZV04wUTI5dWRHVjRkQ3hjYmlBZ0lDQmpiMjVrYVhScGIyNDZJRU52Ym1ScGRHbHZianhOUGlCOElITjBjbWx1Wnl4Y2JpQWdJQ0J2Y21SbGNrSjVPaUJ6ZEhKcGJtY2dmQ0JyWlhsdlppQk5MRnh1SUNBZ0lHOXlaR1Z5T2lCUGNtUmxja1JwY21WamRHbHZiaUI4SUhOMGNtbHVaeUE5SUU5eVpHVnlSR2x5WldOMGFXOXVMa0ZUUXl4Y2JpQWdJQ0JzYVcxcGREODZJRzUxYldKbGNpeGNiaUFnSUNCemEybHdQem9nYm5WdFltVnlMRnh1SUNBZ0lDNHVMbUZ5WjNNNklHRnVlVnRkWEc0Z0lDazZJRkJ5YjIxcGMyVThUVnRkSUh3Z2MzUnlhVzVuUGlCN1hHNGdJQ0FnWTI5dWMzUWdleUJqZEhoQmNtZHpJSDBnUFNBb1hHNGdJQ0FnSUNCaGQyRnBkQ0IwYUdsekxteHZaME4wZUNoYkxpNHVZWEpuY3l3Z1kyOXVkR1Y0ZEYwc0lGQmxjbk5wYzNSbGJtTmxTMlY1Y3k1UlZVVlNXU3dnZEhKMVpTbGNiaUFnSUNBcExtWnZjaWgwYUdsekxtTnlaV0YwWlNrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNtVndieTV4ZFdWeWVTaGNiaUFnSUNBZ0lHTnZibVJwZEdsdmJpQmhjeUJEYjI1a2FYUnBiMjQ4VFQ0c1hHNGdJQ0FnSUNCdmNtUmxja0o1SUdGeklHdGxlVzltSUUwc1hHNGdJQ0FnSUNCdmNtUmxjaUJoY3lCUGNtUmxja1JwY21WamRHbHZiaXhjYmlBZ0lDQWdJR3hwYldsMExGeHVJQ0FnSUNBZ2MydHBjQ3hjYmlBZ0lDQWdJQzR1TG1OMGVFRnlaM05jYmlBZ0lDQXBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQkZlR1ZqZFhSbGN5QmhJSEpoZHlCeGRXVnllU0JoWjJGcGJuTjBJSFJvWlNCemRHRjBaU0JrWVhSaFltRnpaVnh1SUNBZ0tpQkFjM1Z0YldGeWVTQkVaV3hsWjJGMFpYTWdkRzhnZEdobElISmxjRzl6YVhSdmNua25jeUJ5WVhjZ2JXVjBhRzlrWEc0Z0lDQXFJRUJ3WVhKaGJTQjdRM1I0ZlNCamRIZ2dMU0JVYUdVZ1JtRmljbWxqSUdOb1lXbHVZMjlrWlNCamIyNTBaWGgwWEc0Z0lDQXFJRUJ3WVhKaGJTQjdZVzU1ZlNCeVlYZEpibkIxZENBdElGUm9aU0J4ZFdWeWVTQjBieUJsZUdWamRYUmxYRzRnSUNBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ1pHOWpjMDl1YkhrZ0xTQlhhR1YwYUdWeUlIUnZJSEpsZEhWeWJpQnZibXg1SUdSdlkzVnRaVzUwYzF4dUlDQWdLaUJBY0dGeVlXMGdleTR1TG1GdWVWdGRmU0JoY21keklDMGdRV1JrYVhScGIyNWhiQ0JoY21kMWJXVnVkSE5jYmlBZ0lDb2dRSEpsZEhWeWJpQjdVSEp2YldselpUeGhibmsrZlNCUWNtOXRhWE5sSUhKbGMyOXNkbWx1WnlCMGJ5QjBhR1VnY1hWbGNua2djbVZ6ZFd4MGMxeHVJQ0FnS2k5Y2JpQWdZWE41Ym1NZ2NtRjNLRnh1SUNBZ0lHTjBlRG9nUTNSNElId2dSbUZpY21salEyOXVkSEpoWTNSRGIyNTBaWGgwTEZ4dUlDQWdJSEpoZDBsdWNIVjBPaUJOWVc1bmIxRjFaWEo1TEZ4dUlDQWdJR1J2WTNOUGJteDVPaUJpYjI5c1pXRnVMRnh1SUNBZ0lDNHVMbUZ5WjNNNklHRnVlVnRkWEc0Z0lDazZJRkJ5YjIxcGMyVThZVzU1UGlCN1hHNGdJQ0FnWTI5dWMzUWdleUJqZEhoQmNtZHpJSDBnUFNBb1lYZGhhWFFnZEdocGN5NXNiMmREZEhnb1d5NHVMbUZ5WjNNc0lHTjBlRjBzSUZ3aWNtRjNYQ0lzSUhSeWRXVXBLUzVtYjNJb1hHNGdJQ0FnSUNCMGFHbHpMbkpoZDF4dUlDQWdJQ2s3WEc0Z0lDQWdjbVYwZFhKdUlFWmhZbkpwWTBOeWRXUkRiMjUwY21GamRDNWhaR0Z3ZEdWeUxuSmhkeWh5WVhkSmJuQjFkQ3dnWkc5amMwOXViSGtzSUM0dUxtTjBlRUZ5WjNNcE8xeHVJQ0I5WEc1Y2JpQWdjSEp2ZEdWamRHVmtJSE5sY21saGJHbDZaU2h0YjJSbGJEb2dUU2s2SUhOMGNtbHVaeUI3WEc0Z0lDQWdjbVYwZFhKdUlFWmhZbkpwWTBOeWRXUkRiMjUwY21GamRDNXpaWEpwWVd4cGVtVnlMbk5sY21saGJHbDZaU2h0YjJSbGJDazdYRzRnSUgxY2JseHVJQ0J3Y205MFpXTjBaV1FnWkdWelpYSnBZV3hwZW1VOFRTQmxlSFJsYm1SeklFMXZaR1ZzUGloemRISTZJSE4wY21sdVp5azZJRTBnZTF4dUlDQWdJSEpsZEhWeWJpQW9YRzRnSUNBZ0lDQkdZV0p5YVdORGNuVmtRMjl1ZEhKaFkzUXVjMlZ5YVdGc2FYcGxjaUJoY3lCMWJtdHViM2R1SUdGeklGTmxjbWxoYkdsNlpYSThUVDVjYmlBZ0lDQXBMbVJsYzJWeWFXRnNhWHBsS0hOMGNpazdYRzRnSUgxY2JseHVJQ0J3Y205MFpXTjBaV1FnWVhONWJtTWdhVzVwZENoamRIZzZJRU4wZUNCOElFWmhZbkpwWTBOdmJuUnlZV04wUTI5dWRHVjRkQ2s2SUZCeWIyMXBjMlU4ZG05cFpENGdlMXh1SUNBZ0lHTnZibk4wSUhzZ2JHOW5JSDBnUFNBb1hHNGdJQ0FnSUNCaGQyRnBkQ0IwYUdsekxteHZaME4wZUNoYlkzUjRYU3dnVUdWeWMybHpkR1Z1WTJWTFpYbHpMa2xPU1ZSSlFVeEpXa0ZVU1U5T0xDQjBjblZsS1Z4dUlDQWdJQ2t1Wm05eUtIUm9hWE11YVc1cGRDazdYRzRnSUNBZ2JHOW5MbWx1Wm04b1lGSjFibTVwYm1jZ1kyOXVkSEpoWTNRZ0pIdDBhR2x6TG1kbGRFNWhiV1VvS1gwZ2FXNXBkR2xoYkdsNllYUnBiMjR1TGk1Z0tUdGNiaUFnSUNCMGFHbHpMbWx1YVhScFlXeHBlbVZrSUQwZ2RISjFaVHRjYmlBZ0lDQnNiMmN1YVc1bWJ5aGdRMjl1ZEhKaFkzUWdhVzVwZEdsaGJHbDZZWFJwYjI0Z1kyOXRjR3hsZEdWa0xtQXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdhR1ZoYkhSb1kyaGxZMnNvWEc0Z0lDQWdZM1I0T2lCRGRIZ2dmQ0JHWVdKeWFXTkRiMjUwY21GamRFTnZiblJsZUhSY2JpQWdLVG9nVUhKdmJXbHpaVHh6ZEhKcGJtY2dmQ0JvWldGc2RHaGphR1ZqYXo0Z2UxeHVJQ0FnSUdOdmJuTjBJSHNnYkc5bklIMGdQU0FvWVhkaGFYUWdkR2hwY3k1c2IyZERkSGdvVzJOMGVGMHNJRndpYUdWaGJIUm9ZMmhsWTJ0Y0lpd2dkSEoxWlNrcExtWnZjaWhjYmlBZ0lDQWdJSFJvYVhNdWFHVmhiSFJvWTJobFkydGNiaUFnSUNBcE8xeHVJQ0FnSUd4dlp5NXBibVp2S0dCU2RXNXVhVzVuSUVobFlXeDBhR05vWldOck9pQWtlM1JvYVhNdWFXNXBkR2xoYkdsNlpXUjlMaTR1WUNrN1hHNGdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJR2hsWVd4MGFHTm9aV05yT2lCMGFHbHpMbWx1YVhScFlXeHBlbVZrTEZ4dUlDQWdJQ0FnZG1WeWMybHZiam9nVmtWU1UwbFBUaXhjYmlBZ0lDQWdJSEJoWTJ0aFoyVTZJRkJCUTB0QlIwVmZUa0ZOUlN4Y2JpQWdJQ0I5TzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJEY21WaGRHVnpJRzExYkhScGNHeGxJRzF2WkdWc2N5QnBiaUIwYUdVZ2MzUmhkR1VnWkdGMFlXSmhjMlZjYmlBZ0lDb2dRSE4xYlcxaGNua2dSR1ZzWldkaGRHVnpJSFJ2SUhSb1pTQnlaWEJ2YzJsMGIzSjVKM01nWTNKbFlYUmxRV3hzSUcxbGRHaHZaRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UwTjBlSDBnWTNSNElDMGdWR2hsSUVaaFluSnBZeUJqYUdGcGJtTnZaR1VnWTI5dWRHVjRkRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UwMWJYWDBnYlc5a1pXeHpJQzBnVkdobElHMXZaR1ZzY3lCMGJ5QmpjbVZoZEdWY2JpQWdJQ29nUUhCaGNtRnRJSHN1TGk1aGJubGJYWDBnWVhKbmN5QXRJRUZrWkdsMGFXOXVZV3dnWVhKbmRXMWxiblJ6WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMUJ5YjIxcGMyVThUVnRkUG4wZ1VISnZiV2x6WlNCeVpYTnZiSFpwYm1jZ2RHOGdkR2hsSUdOeVpXRjBaV1FnYlc5a1pXeHpYRzRnSUNBcUwxeHVJQ0JoYzNsdVl5QmpjbVZoZEdWQmJHd29YRzRnSUNBZ1kyOXVkR1Y0ZERvZ1EzUjRJSHdnUm1GaWNtbGpRMjl1ZEhKaFkzUkRiMjUwWlhoMExGeHVJQ0FnSUcxdlpHVnNjem9nYzNSeWFXNW5JSHdnVFZ0ZExGeHVJQ0FnSUM0dUxtRnlaM002SUdGdWVWdGRYRzRnSUNrNklGQnliMjFwYzJVOGMzUnlhVzVuSUh3Z1RWdGRQaUI3WEc0Z0lDQWdZMjl1YzNRZ2V5QnNiMmNzSUdOMGVFRnlaM01zSUdOMGVDQjlJRDBnS0Z4dUlDQWdJQ0FnWVhkaGFYUWdkR2hwY3k1c2IyZERkSGdvWEc0Z0lDQWdJQ0FnSUZzdUxpNWhjbWR6TENCamIyNTBaWGgwWFN4Y2JpQWdJQ0FnSUNBZ1FuVnNhME55ZFdSUGNHVnlZWFJwYjI1TFpYbHpMa05TUlVGVVJWOUJURXdzWEc0Z0lDQWdJQ0FnSUhSeWRXVmNiaUFnSUNBZ0lDbGNiaUFnSUNBcExtWnZjaWgwYUdsekxtTnlaV0YwWlVGc2JDazdYRzRnSUNBZ2RHaHBjeTVsYm5OMWNtVk5hWEp5YjNKWGNtbDBaVkJsY20xcGMzTnBiMjV6S0dOMGVDazdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQnRiMlJsYkhNZ1BUMDlJRndpYzNSeWFXNW5YQ0lwWEc0Z0lDQWdJQ0J0YjJSbGJITWdQU0FvU2xOUFRpNXdZWEp6WlNodGIyUmxiSE1wSUdGeklGdGRLVnh1SUNBZ0lDQWdJQ0F1YldGd0tDaHRLU0E5UGlCMGFHbHpMbVJsYzJWeWFXRnNhWHBsS0cwcEtWeHVJQ0FnSUNBZ0lDQXViV0Z3S0NodEtTQTlQaUJ1WlhjZ2RHaHBjeTVqYkdGNmVpaHRLU2tnWVhNZ1lXNTVPMXh1WEc0Z0lDQWdZMjl1YzNRZ2RISmhibk5wWlc1MElEMGdkR2hwY3k1blpYUlVjbUZ1YzJsbGJuUkVZWFJoS0dOMGVDazdYRzVjYmlBZ0lDQnNiMmN1YVc1bWJ5aGdUV1Z5WjJsdVp5QjBjbUZ1YzJsbGJuUWdaR0YwWVM0dUxtQXBPMXh1SUNBZ0lHMXZaR1ZzY3lBOUlDaHRiMlJsYkhNZ1lYTWdUVnRkS1M1dFlYQW9LRzBzSUdrcElEMCtJSHRjYmlBZ0lDQWdJR052Ym5OMElIUWdQU0JCY25KaGVTNXBjMEZ5Y21GNUtIUnlZVzV6YVdWdWRDa2dQeUIwY21GdWMybGxiblJiYVYwZ09pQjBjbUZ1YzJsbGJuUTdYRzRnSUNBZ0lDQnlaWFIxY200Z1RXOWtaV3d1YldWeVoyVW9iU3dnZENCOGZDQjdmU3dnZEdocGN5NWpiR0Y2ZWlrZ1lYTWdUVHRjYmlBZ0lDQjlLVHRjYmx4dUlDQWdJR3h2Wnk1cGJtWnZLR0JoWkdScGJtY2dKSHR0YjJSbGJITXViR1Z1WjNSb2ZTQmxiblJ5YVdWeklIUnZJSFJvWlNCMFlXSnNaV0FwTzF4dVhHNGdJQ0FnWTI5dWMzUWdZM0psWVhSbFpDQTlJR0YzWVdsMElIUm9hWE11Y21Wd2J5NWpjbVZoZEdWQmJHd29YRzRnSUNBZ0lDQnRiMlJsYkhNZ1lYTWdkVzVyYm05M2JpQmhjeUJOVzEwc1hHNGdJQ0FnSUNBdUxpNWpkSGhCY21kelhHNGdJQ0FnS1R0Y2JpQWdJQ0JqYjI1emRDQnlaWE4xYkhRZ1BTQmpjbVZoZEdWa0xtMWhjQ2dvWXlrZ1BUNGdibVYzSUhSb2FYTXVZMnhoZW5vb1RXOWtaV3d1YzJWbmNtVm5ZWFJsS0dNcExtMXZaR1ZzS1NrN1hHNGdJQ0FnY21WMGRYSnVJSEpsYzNWc2REdGNiaUFnZlZ4dVhHNGdJSEJ5YjNSbFkzUmxaQ0JsYm5OMWNtVk5hWEp5YjNKWGNtbDBaVkJsY20xcGMzTnBiMjV6S0dOMGVEb2dSbUZpY21salEyOXVkSEpoWTNSRGIyNTBaWGgwS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdhV1lnS0NGamRIZ3BJSEpsZEhWeWJqdGNiaUFnSUNCamIyNXpkQ0J0YVhKeWIzSk5aWFJoSUQwZ1RXOWtaV3d1YldseWNtOXlaV1JCZENoMGFHbHpMbU5zWVhwNktUdGNiaUFnSUNCcFppQW9JVzFwY25KdmNrMWxkR0VwSUhKbGRIVnlianRjYmlBZ0lDQmpiMjV6ZENCdGMzQWdQU0JsZUhSeVlXTjBUWE53U1dRb1kzUjRMbWxrWlc1MGFYUjVLVHRjYmlBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0J0YzNBZ0ppWmNiaUFnSUNBZ0lDaHRjM0FnUFQwOUlHMXBjbkp2Y2sxbGRHRXViWE53U1dRZ2ZIeGNiaUFnSUNBZ0lDQWdLRzFwY25KdmNrMWxkR0V1WTI5dVpHbDBhVzl1SUNZbUlHMXBjbkp2Y2sxbGRHRXVZMjl1WkdsMGFXOXVLRzF6Y0NrcEtWeHVJQ0FnSUNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFRjFkR2h2Y21sNllYUnBiMjVGY25KdmNpaGNiaUFnSUNBZ0lDQWdZRTl5WjJGdWFYcGhkR2x2YmlBa2UyMXpjSDBnYVhNZ2JtOTBJR0YxZEdodmNtbDZaV1FnZEc4Z2JXOWthV1o1SUcxcGNuSnZjbVZrSUdSaGRHRmdYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEJ5YjNSbFkzUmxaQ0JzYjJkRGRIZzhYRzRnSUNBZ1FWSkhVeUJsZUhSbGJtUnpJR0Z1ZVZ0ZElEMGdZVzU1VzEwc1hHNGdJQ0FnVFVWVVNFOUVJR1Y0ZEdWdVpITWdUV1YwYUc5a1QzSlBjR1Z5WVhScGIyNGdQU0JOWlhSb2IyUlBjazl3WlhKaGRHbHZiaXhjYmlBZ1BpaGNiaUFnSUNCaGNtZHpPaUJOWVhsaVpVTnZiblJsZUhSMVlXeEJjbWM4Um1GaWNtbGpRMjl1ZEhKaFkzUkRiMjUwWlhoMExDQkJVa2RUUGl4Y2JpQWdJQ0J2Y0dWeVlYUnBiMjQ2SUUxRlZFaFBSRnh1SUNBcE9pQkdZV0p5YVdORGIyNTBaWGgwZFdGc2FYcGxaRUZ5WjNNOFFWSkhVeXdnVFVWVVNFOUVJR1Y0ZEdWdVpITWdjM1J5YVc1bklEOGdkSEoxWlNBNklHWmhiSE5sUGp0Y2JpQWdjSEp2ZEdWamRHVmtJR3h2WjBOMGVEeGNiaUFnSUNCQlVrZFRJR1Y0ZEdWdVpITWdZVzU1VzEwZ1BTQmhibmxiWFN4Y2JpQWdJQ0JOUlZSSVQwUWdaWGgwWlc1a2N5Qk5aWFJvYjJSUGNrOXdaWEpoZEdsdmJpQTlJRTFsZEdodlpFOXlUM0JsY21GMGFXOXVMRnh1SUNBK0tGeHVJQ0FnSUdGeVozTTZJRTFoZVdKbFEyOXVkR1Y0ZEhWaGJFRnlaenhHWVdKeWFXTkRiMjUwY21GamRFTnZiblJsZUhRc0lFRlNSMU0rTEZ4dUlDQWdJRzl3WlhKaGRHbHZiam9nVFVWVVNFOUVMRnh1SUNBZ0lHRnNiRzkzUTNKbFlYUmxPaUJtWVd4elpWeHVJQ0FwT2lCR1lXSnlhV05EYjI1MFpYaDBkV0ZzYVhwbFpFRnlaM004UVZKSFV5d2dUVVZVU0U5RUlHVjRkR1Z1WkhNZ2MzUnlhVzVuSUQ4Z2RISjFaU0E2SUdaaGJITmxQanRjYmlBZ2NISnZkR1ZqZEdWa0lHeHZaME4wZUR4Y2JpQWdJQ0JCVWtkVElHVjRkR1Z1WkhNZ1lXNTVXMTBnUFNCaGJubGJYU3hjYmlBZ0lDQk5SVlJJVDBRZ1pYaDBaVzVrY3lCTlpYUm9iMlJQY2s5d1pYSmhkR2x2YmlBOUlFMWxkR2h2WkU5eVQzQmxjbUYwYVc5dUxGeHVJQ0ErS0Z4dUlDQWdJR0Z5WjNNNklFMWhlV0psUTI5dWRHVjRkSFZoYkVGeVp6eEdZV0p5YVdORGIyNTBjbUZqZEVOdmJuUmxlSFFzSUVGU1IxTStMRnh1SUNBZ0lHOXdaWEpoZEdsdmJqb2dUVVZVU0U5RUxGeHVJQ0FnSUdGc2JHOTNRM0psWVhSbE9pQjBjblZsWEc0Z0lDazZJRkJ5YjIxcGMyVThYRzRnSUNBZ1JtRmljbWxqUTI5dWRHVjRkSFZoYkdsNlpXUkJjbWR6UEVGU1IxTXNJRTFGVkVoUFJDQmxlSFJsYm1SeklITjBjbWx1WnlBL0lIUnlkV1VnT2lCbVlXeHpaVDVjYmlBZ1BqdGNiaUFnY0hKdmRHVmpkR1ZrSUd4dlowTjBlRHhjYmlBZ0lDQkJVa2RUSUdWNGRHVnVaSE1nWVc1NVcxMGdQU0JoYm5sYlhTeGNiaUFnSUNCTlJWUklUMFFnWlhoMFpXNWtjeUJOWlhSb2IyUlBjazl3WlhKaGRHbHZiaUE5SUUxbGRHaHZaRTl5VDNCbGNtRjBhVzl1TEZ4dUlDQStLRnh1SUNBZ0lHRnlaM002SUUxaGVXSmxRMjl1ZEdWNGRIVmhiRUZ5Wnp4R1lXSnlhV05EYjI1MGNtRmpkRU52Ym5SbGVIUXNJRUZTUjFNK0xGeHVJQ0FnSUc5d1pYSmhkR2x2YmpvZ1RVVlVTRTlFTEZ4dUlDQWdJR0ZzYkc5M1EzSmxZWFJsT2lCaWIyOXNaV0Z1SUQwZ1ptRnNjMlZjYmlBZ0tUcGNiaUFnSUNCOElGQnliMjFwYzJVOFhHNGdJQ0FnSUNBZ0lFWmhZbkpwWTBOdmJuUmxlSFIxWVd4cGVtVmtRWEpuY3p4QlVrZFRMQ0JOUlZSSVQwUWdaWGgwWlc1a2N5QnpkSEpwYm1jZ1B5QjBjblZsSURvZ1ptRnNjMlUrWEc0Z0lDQWdJQ0ErWEc0Z0lDQWdmQ0JHWVdKeWFXTkRiMjUwWlhoMGRXRnNhWHBsWkVGeVozTThRVkpIVXl3Z1RVVlVTRTlFSUdWNGRHVnVaSE1nYzNSeWFXNW5JRDhnZEhKMVpTQTZJR1poYkhObFBpQjdYRzRnSUNBZ1kyOXVjM1FnWTNSNElEMGdZWEpuY3k1d2IzQW9LVHRjYmlBZ0lDQnBaaUFvSVdOMGVDQjhmQ0FoWTNSNExuTjBkV0lwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCTmFYTnphVzVuUTI5dWRHVjRkRVZ5Y205eUtHQk9ieUIyWVd4cFpDQmpiMjUwWlhoMElIQnliM1pwWkdWa0xpNHVZQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHTnZibk4wSUdOdmJuUmxlSFIxWVd4cGVtVmtJRDBnUm1GaWNtbGpRM0oxWkVOdmJuUnlZV04wTG1Ga1lYQjBaWEpiWENKc2IyZERkSGhjSWwwb1hHNGdJQ0FnSUNCYmRHaHBjeTVqYkdGNmVpQmhjeUJoYm5rc0lDNHVMbUZ5WjNOZElHRnpJR0Z1ZVN4Y2JpQWdJQ0FnSUc5d1pYSmhkR2x2Yml4Y2JpQWdJQ0FnSUdGc2JHOTNRM0psWVhSbElHRnpJR0Z1ZVN4Y2JpQWdJQ0FnSUdOMGVGeHVJQ0FnSUNrZ1lYTmNiaUFnSUNBZ0lId2dSbUZpY21salEyOXVkR1Y0ZEhWaGJHbDZaV1JCY21kelBFRlNSMU1zSUUxRlZFaFBSQ0JsZUhSbGJtUnpJSE4wY21sdVp5QS9JSFJ5ZFdVZ09pQm1ZV3h6WlQ1Y2JpQWdJQ0FnSUh3Z1VISnZiV2x6WlR4Y2JpQWdJQ0FnSUNBZ0lDQkdZV0p5YVdORGIyNTBaWGgwZFdGc2FYcGxaRUZ5WjNNOFFWSkhVeXdnVFVWVVNFOUVJR1Y0ZEdWdVpITWdjM1J5YVc1bklEOGdkSEoxWlNBNklHWmhiSE5sUGx4dUlDQWdJQ0FnSUNBK08xeHVJQ0FnSUdaMWJtTjBhVzl1SUhOeGRXRnphRUZ5WjNNb1kzUjRPaUJHWVdKeWFXTkRiMjUwWlhoMGRXRnNhWHBsWkVGeVozTXBJSHRjYmlBZ0lDQWdJR04wZUM1amRIaEJjbWR6TG5Ob2FXWjBLQ2s3SUM4dklISmxiVzkyWlhNZ1lXUmtaV1FnYlc5a1pXd2dkRzhnWVhKbmMxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdOMGVDQmhjeUJoYm5rN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tDRW9ZMjl1ZEdWNGRIVmhiR2w2WldRZ2FXNXpkR0Z1WTJWdlppQlFjbTl0YVhObEtTa2djbVYwZFhKdUlITnhkV0Z6YUVGeVozTW9ZMjl1ZEdWNGRIVmhiR2w2WldRcE8xeHVJQ0FnSUhKbGRIVnliaUJqYjI1MFpYaDBkV0ZzYVhwbFpDNTBhR1Z1S0hOeGRXRnphRUZ5WjNNcE8xeHVJQ0I5WEc1OVhHNGlYWDA9Il19
421
+ //# sourceMappingURL=crud-contract.js.map
422
+ //# sourceMappingURL=crud-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud-contract.js","sourceRoot":"","sources":["crud-contract.js"],"names":[],"mappings":"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"}
@@ -16,5 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./crud-contract.cjs"), exports);
18
18
  __exportStar(require("./serialized-crud-contract.cjs"), exports);
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJhY3RzL2NydWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQWdDO0FBQ2hDLDhDQUEyQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NydWQtY29udHJhY3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NlcmlhbGl6ZWQtY3J1ZC1jb250cmFjdFwiO1xuIl19
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQW1DO0FBQ25DLGdFQUE4QztBQUM5QyxzWUFBc1kiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jcnVkLWNvbnRyYWN0LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXJpYWxpemVkLWNydWQtY29udHJhY3QuanNcIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk4dUxpOHVMaTl6Y21NdlkyOXVkSEpoWTNSekwyTnlkV1F2YVc1a1pYZ3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc2JVTkJRV2RETzBGQlEyaERMRGhEUVVFeVF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbVY0Y0c5eWRDQXFJR1p5YjIwZ1hDSXVMMk55ZFdRdFkyOXVkSEpoWTNSY0lqdGNibVY0Y0c5eWRDQXFJR1p5YjIwZ1hDSXVMM05sY21saGJHbDZaV1F0WTNKMVpDMWpiMjUwY21GamRGd2lPMXh1SWwxOSJdfQ==
19
+ //# sourceMappingURL=index.js.map
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,gEAA8C;AAC9C,iCAAiC"}