@super-protocol/swarm-contracts-sdk 0.0.1-beta.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 (629) hide show
  1. package/LICENSE +66 -0
  2. package/README.md +52 -0
  3. package/dist/cjs/analytics/Analytics.d.ts +17 -0
  4. package/dist/cjs/analytics/Analytics.js +84 -0
  5. package/dist/cjs/analytics/AnalyticsError.d.ts +7 -0
  6. package/dist/cjs/analytics/AnalyticsError.js +12 -0
  7. package/dist/cjs/analytics/eventProviders/BrowserEventProvider.d.ts +19 -0
  8. package/dist/cjs/analytics/eventProviders/BrowserEventProvider.js +38 -0
  9. package/dist/cjs/analytics/eventProviders/EventProvider.d.ts +24 -0
  10. package/dist/cjs/analytics/eventProviders/EventProvider.js +25 -0
  11. package/dist/cjs/analytics/eventProviders/NodeEventProvider.d.ts +22 -0
  12. package/dist/cjs/analytics/eventProviders/NodeEventProvider.js +56 -0
  13. package/dist/cjs/analytics/transports/AxiosTransport.d.ts +4 -0
  14. package/dist/cjs/analytics/transports/AxiosTransport.js +60 -0
  15. package/dist/cjs/analytics/transports/FetchTransport.d.ts +4 -0
  16. package/dist/cjs/analytics/transports/FetchTransport.js +31 -0
  17. package/dist/cjs/analytics/types.d.ts +26 -0
  18. package/dist/cjs/analytics/types.js +3 -0
  19. package/dist/cjs/certificates/binary-splitter.d.ts +27 -0
  20. package/dist/cjs/certificates/binary-splitter.js +279 -0
  21. package/dist/cjs/certificates/crl.d.ts +6 -0
  22. package/dist/cjs/certificates/crl.js +66 -0
  23. package/dist/cjs/certificates/generator.d.ts +38 -0
  24. package/dist/cjs/certificates/generator.js +262 -0
  25. package/dist/cjs/certificates/helper.d.ts +29 -0
  26. package/dist/cjs/certificates/helper.js +216 -0
  27. package/dist/cjs/certificates/index.d.ts +5 -0
  28. package/dist/cjs/certificates/index.js +22 -0
  29. package/dist/cjs/certificates/ocsp.d.ts +14 -0
  30. package/dist/cjs/certificates/ocsp.js +320 -0
  31. package/dist/cjs/certificates/serializer.d.ts +13 -0
  32. package/dist/cjs/certificates/serializer.js +142 -0
  33. package/dist/cjs/certificates/setup-crypto.d.ts +3 -0
  34. package/dist/cjs/certificates/setup-crypto.js +48 -0
  35. package/dist/cjs/certificates/types.d.ts +122 -0
  36. package/dist/cjs/certificates/types.js +10 -0
  37. package/dist/cjs/config.d.ts +3 -0
  38. package/dist/cjs/config.js +7 -0
  39. package/dist/cjs/connectors/BaseConnector.d.ts +52 -0
  40. package/dist/cjs/connectors/BaseConnector.js +61 -0
  41. package/dist/cjs/connectors/BlockchainConnector.d.ts +78 -0
  42. package/dist/cjs/connectors/BlockchainConnector.js +325 -0
  43. package/dist/cjs/connectors/BlockchainEventsListener.d.ts +33 -0
  44. package/dist/cjs/connectors/BlockchainEventsListener.js +283 -0
  45. package/dist/cjs/connectors/index.d.ts +2 -0
  46. package/dist/cjs/connectors/index.js +11 -0
  47. package/dist/cjs/constants.d.ts +48 -0
  48. package/dist/cjs/constants.js +683 -0
  49. package/dist/cjs/contracts/SuperProtocolToken.d.ts +300 -0
  50. package/dist/cjs/contracts/SuperProtocolToken.js +3 -0
  51. package/dist/cjs/contracts/SuperProtocolToken__factory.d.ts +393 -0
  52. package/dist/cjs/contracts/SuperProtocolToken__factory.js +521 -0
  53. package/dist/cjs/contracts/typechain-types/common.d.ts +50 -0
  54. package/dist/cjs/contracts/typechain-types/common.js +3 -0
  55. package/dist/cjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/App__factory.d.ts +3340 -0
  56. package/dist/cjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/App__factory.js +4335 -0
  57. package/dist/cjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/index.d.ts +1 -0
  58. package/dist/cjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/index.js +10 -0
  59. package/dist/cjs/contracts/typechain-types/factories/hardhat-diamond-abi/index.d.ts +1 -0
  60. package/dist/cjs/contracts/typechain-types/factories/hardhat-diamond-abi/index.js +32 -0
  61. package/dist/cjs/contracts/typechain-types/factories/index.d.ts +1 -0
  62. package/dist/cjs/contracts/typechain-types/factories/index.js +32 -0
  63. package/dist/cjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/App.d.ts +2299 -0
  64. package/dist/cjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/App.js +3 -0
  65. package/dist/cjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/index.d.ts +1 -0
  66. package/dist/cjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/index.js +3 -0
  67. package/dist/cjs/contracts/typechain-types/hardhat-diamond-abi/index.d.ts +2 -0
  68. package/dist/cjs/contracts/typechain-types/hardhat-diamond-abi/index.js +3 -0
  69. package/dist/cjs/contracts/typechain-types/index.d.ts +5 -0
  70. package/dist/cjs/contracts/typechain-types/index.js +34 -0
  71. package/dist/cjs/crypto/Crypto.d.ts +70 -0
  72. package/dist/cjs/crypto/Crypto.js +137 -0
  73. package/dist/cjs/crypto/index.d.ts +4 -0
  74. package/dist/cjs/crypto/index.js +37 -0
  75. package/dist/cjs/crypto/nodejs/AES.d.ts +25 -0
  76. package/dist/cjs/crypto/nodejs/AES.js +105 -0
  77. package/dist/cjs/crypto/nodejs/ARIA.d.ts +23 -0
  78. package/dist/cjs/crypto/nodejs/ARIA.js +77 -0
  79. package/dist/cjs/crypto/nodejs/ECIES.d.ts +10 -0
  80. package/dist/cjs/crypto/nodejs/ECIES.js +107 -0
  81. package/dist/cjs/crypto/nodejs/NativeCrypto.d.ts +46 -0
  82. package/dist/cjs/crypto/nodejs/NativeCrypto.js +154 -0
  83. package/dist/cjs/crypto/nodejs/RSA-Hybrid.d.ts +15 -0
  84. package/dist/cjs/crypto/nodejs/RSA-Hybrid.js +94 -0
  85. package/dist/cjs/crypto/types.d.ts +10 -0
  86. package/dist/cjs/crypto/types.js +3 -0
  87. package/dist/cjs/crypto/utils.d.ts +15 -0
  88. package/dist/cjs/crypto/utils.js +94 -0
  89. package/dist/cjs/crypto/utils.spec.d.ts +1 -0
  90. package/dist/cjs/crypto/utils.spec.js +221 -0
  91. package/dist/cjs/errors/base.error.d.ts +3 -0
  92. package/dist/cjs/errors/base.error.js +19 -0
  93. package/dist/cjs/errors/index.d.ts +3 -0
  94. package/dist/cjs/errors/index.js +10 -0
  95. package/dist/cjs/errors/insufficient-funds.error.d.ts +19 -0
  96. package/dist/cjs/errors/insufficient-funds.error.js +57 -0
  97. package/dist/cjs/errors/not-found.error.d.ts +3 -0
  98. package/dist/cjs/errors/not-found.error.js +8 -0
  99. package/dist/cjs/errors/utils.d.ts +2 -0
  100. package/dist/cjs/errors/utils.js +30 -0
  101. package/dist/cjs/index.d.ts +58 -0
  102. package/dist/cjs/index.js +119 -0
  103. package/dist/cjs/logger.d.ts +7 -0
  104. package/dist/cjs/logger.js +12 -0
  105. package/dist/cjs/models/EtlModel.d.ts +34 -0
  106. package/dist/cjs/models/EtlModel.js +125 -0
  107. package/dist/cjs/models/index.d.ts +1 -0
  108. package/dist/cjs/models/index.js +9 -0
  109. package/dist/cjs/package.json +1 -0
  110. package/dist/cjs/polyfills.d.ts +4 -0
  111. package/dist/cjs/polyfills.js +8 -0
  112. package/dist/cjs/proto/AmdSevSnp.d.ts +194 -0
  113. package/dist/cjs/proto/AmdSevSnp.js +358 -0
  114. package/dist/cjs/proto/Compression.d.ts +43 -0
  115. package/dist/cjs/proto/Compression.js +133 -0
  116. package/dist/cjs/proto/Hash.d.ts +37 -0
  117. package/dist/cjs/proto/Hash.js +104 -0
  118. package/dist/cjs/proto/Nvtrust.d.ts +116 -0
  119. package/dist/cjs/proto/Nvtrust.js +159 -0
  120. package/dist/cjs/proto/OrderReport.d.ts +730 -0
  121. package/dist/cjs/proto/OrderReport.js +466 -0
  122. package/dist/cjs/proto/TRI.d.ts +215 -0
  123. package/dist/cjs/proto/TRI.js +318 -0
  124. package/dist/cjs/providers/storage/ChunksDownloadDecorator.d.ts +36 -0
  125. package/dist/cjs/providers/storage/ChunksDownloadDecorator.js +145 -0
  126. package/dist/cjs/providers/storage/IStorageProvider.d.ts +15 -0
  127. package/dist/cjs/providers/storage/IStorageProvider.js +3 -0
  128. package/dist/cjs/providers/storage/S3StorageProvider.d.ts +26 -0
  129. package/dist/cjs/providers/storage/S3StorageProvider.js +210 -0
  130. package/dist/cjs/providers/storage/StorageAdapter.d.ts +62 -0
  131. package/dist/cjs/providers/storage/StorageAdapter.js +300 -0
  132. package/dist/cjs/providers/storage/StorageContentWriter.d.ts +46 -0
  133. package/dist/cjs/providers/storage/StorageContentWriter.js +168 -0
  134. package/dist/cjs/providers/storage/StorageKeyValueAdapter.d.ts +26 -0
  135. package/dist/cjs/providers/storage/StorageKeyValueAdapter.js +139 -0
  136. package/dist/cjs/providers/storage/StorageMetadataReader.d.ts +20 -0
  137. package/dist/cjs/providers/storage/StorageMetadataReader.js +56 -0
  138. package/dist/cjs/providers/storage/StorjAdapter.d.ts +20 -0
  139. package/dist/cjs/providers/storage/StorjAdapter.js +60 -0
  140. package/dist/cjs/providers/storage/StorjCredentialsManager.d.ts +24 -0
  141. package/dist/cjs/providers/storage/StorjCredentialsManager.js +114 -0
  142. package/dist/cjs/providers/storage/StorjStorageProvider.d.ts +29 -0
  143. package/dist/cjs/providers/storage/StorjStorageProvider.js +146 -0
  144. package/dist/cjs/providers/storage/fs-storage-provider.d.ts +19 -0
  145. package/dist/cjs/providers/storage/fs-storage-provider.js +162 -0
  146. package/dist/cjs/providers/storage/getStorageProvider.d.ts +4 -0
  147. package/dist/cjs/providers/storage/getStorageProvider.js +23 -0
  148. package/dist/cjs/providers/storage/parseStorageCredentials.d.ts +4 -0
  149. package/dist/cjs/providers/storage/parseStorageCredentials.js +21 -0
  150. package/dist/cjs/providers/storage/types.d.ts +29 -0
  151. package/dist/cjs/providers/storage/types.js +3 -0
  152. package/dist/cjs/staticModels/Deposits.d.ts +85 -0
  153. package/dist/cjs/staticModels/Deposits.js +268 -0
  154. package/dist/cjs/staticModels/Diamond.d.ts +6 -0
  155. package/dist/cjs/staticModels/Diamond.js +22 -0
  156. package/dist/cjs/staticModels/ModelPackager.d.ts +18 -0
  157. package/dist/cjs/staticModels/ModelPackager.js +49 -0
  158. package/dist/cjs/staticModels/ProviderRewards.d.ts +5 -0
  159. package/dist/cjs/staticModels/ProviderRewards.js +81 -0
  160. package/dist/cjs/staticModels/StaticModel.d.ts +6 -0
  161. package/dist/cjs/staticModels/StaticModel.js +43 -0
  162. package/dist/cjs/staticModels/Superpro.d.ts +18 -0
  163. package/dist/cjs/staticModels/Superpro.js +47 -0
  164. package/dist/cjs/staticModels/SuperproToken.d.ts +113 -0
  165. package/dist/cjs/staticModels/SuperproToken.js +333 -0
  166. package/dist/cjs/store.d.ts +17 -0
  167. package/dist/cjs/store.js +19 -0
  168. package/dist/cjs/tee/OrderReportService.d.ts +9 -0
  169. package/dist/cjs/tee/OrderReportService.js +104 -0
  170. package/dist/cjs/tee/QuoteParser.d.ts +82 -0
  171. package/dist/cjs/tee/QuoteParser.js +410 -0
  172. package/dist/cjs/tee/TeeCertificateService.d.ts +20 -0
  173. package/dist/cjs/tee/TeeCertificateService.js +143 -0
  174. package/dist/cjs/tee/TeeSignatureVerifier.d.ts +24 -0
  175. package/dist/cjs/tee/TeeSignatureVerifier.js +118 -0
  176. package/dist/cjs/tee/errors.d.ts +11 -0
  177. package/dist/cjs/tee/errors.js +20 -0
  178. package/dist/cjs/tee/helpers.d.ts +14 -0
  179. package/dist/cjs/tee/helpers.js +115 -0
  180. package/dist/cjs/tee/interface.d.ts +63 -0
  181. package/dist/cjs/tee/interface.js +3 -0
  182. package/dist/cjs/tee/statuses.d.ts +14 -0
  183. package/dist/cjs/tee/statuses.js +20 -0
  184. package/dist/cjs/tee/types.d.ts +126 -0
  185. package/dist/cjs/tee/types.js +34 -0
  186. package/dist/cjs/types/Compressor.d.ts +5 -0
  187. package/dist/cjs/types/Compressor.js +3 -0
  188. package/dist/cjs/types/Consensus.d.ts +52 -0
  189. package/dist/cjs/types/Consensus.js +11 -0
  190. package/dist/cjs/types/DepositInfo.d.ts +6 -0
  191. package/dist/cjs/types/DepositInfo.js +3 -0
  192. package/dist/cjs/types/DistributedSecretStorage.d.ts +68 -0
  193. package/dist/cjs/types/DistributedSecretStorage.js +3 -0
  194. package/dist/cjs/types/EtlModel.d.ts +2 -0
  195. package/dist/cjs/types/EtlModel.js +3 -0
  196. package/dist/cjs/types/Events.d.ts +34 -0
  197. package/dist/cjs/types/Events.js +3 -0
  198. package/dist/cjs/types/HardwareInfo.d.ts +10 -0
  199. package/dist/cjs/types/HardwareInfo.js +3 -0
  200. package/dist/cjs/types/Marks.d.ts +9 -0
  201. package/dist/cjs/types/Marks.js +10 -0
  202. package/dist/cjs/types/Offer.d.ts +76 -0
  203. package/dist/cjs/types/Offer.js +32 -0
  204. package/dist/cjs/types/OfferVersion.d.ts +30 -0
  205. package/dist/cjs/types/OfferVersion.js +9 -0
  206. package/dist/cjs/types/OptionInfo.d.ts +8 -0
  207. package/dist/cjs/types/OptionInfo.js +3 -0
  208. package/dist/cjs/types/Order.d.ts +144 -0
  209. package/dist/cjs/types/Order.js +100 -0
  210. package/dist/cjs/types/OrderUsage.d.ts +28 -0
  211. package/dist/cjs/types/OrderUsage.js +3 -0
  212. package/dist/cjs/types/Origins.d.ts +6 -0
  213. package/dist/cjs/types/Origins.js +3 -0
  214. package/dist/cjs/types/Provider.d.ts +7 -0
  215. package/dist/cjs/types/Provider.js +3 -0
  216. package/dist/cjs/types/ProviderRewards.d.ts +5 -0
  217. package/dist/cjs/types/ProviderRewards.js +3 -0
  218. package/dist/cjs/types/ResourceLoader.d.ts +28 -0
  219. package/dist/cjs/types/ResourceLoader.js +3 -0
  220. package/dist/cjs/types/SlotInfo.d.ts +7 -0
  221. package/dist/cjs/types/SlotInfo.js +3 -0
  222. package/dist/cjs/types/SlotUsage.d.ts +11 -0
  223. package/dist/cjs/types/SlotUsage.js +9 -0
  224. package/dist/cjs/types/Superpro.d.ts +9 -0
  225. package/dist/cjs/types/Superpro.js +14 -0
  226. package/dist/cjs/types/TeeOfferInfo.d.ts +38 -0
  227. package/dist/cjs/types/TeeOfferInfo.js +3 -0
  228. package/dist/cjs/types/TeeOfferOption.d.ts +13 -0
  229. package/dist/cjs/types/TeeOfferOption.js +3 -0
  230. package/dist/cjs/types/TeeOfferSlot.d.ts +8 -0
  231. package/dist/cjs/types/TeeOfferSlot.js +3 -0
  232. package/dist/cjs/types/ValueOfferSlot.d.ts +18 -0
  233. package/dist/cjs/types/ValueOfferSlot.js +3 -0
  234. package/dist/cjs/types/Web3.d.ts +30 -0
  235. package/dist/cjs/types/Web3.js +3 -0
  236. package/dist/cjs/types/blockchainConnector/StorageAccess.d.ts +8 -0
  237. package/dist/cjs/types/blockchainConnector/StorageAccess.js +3 -0
  238. package/dist/cjs/types/index.d.ts +25 -0
  239. package/dist/cjs/types/index.js +42 -0
  240. package/dist/cjs/types/storage/StorageAccess.d.ts +7 -0
  241. package/dist/cjs/types/storage/StorageAccess.js +3 -0
  242. package/dist/cjs/types/storage/StorageFileAccess.d.ts +5 -0
  243. package/dist/cjs/types/storage/StorageFileAccess.js +3 -0
  244. package/dist/cjs/types/storage/StorageObject.d.ts +8 -0
  245. package/dist/cjs/types/storage/StorageObject.js +3 -0
  246. package/dist/cjs/utils/CryptoKeysTransformer.d.ts +42 -0
  247. package/dist/cjs/utils/CryptoKeysTransformer.js +247 -0
  248. package/dist/cjs/utils/Monitoring.d.ts +11 -0
  249. package/dist/cjs/utils/Monitoring.js +51 -0
  250. package/dist/cjs/utils/NonceTracker.d.ts +20 -0
  251. package/dist/cjs/utils/NonceTracker.js +82 -0
  252. package/dist/cjs/utils/PubSub.d.ts +9 -0
  253. package/dist/cjs/utils/PubSub.js +35 -0
  254. package/dist/cjs/utils/TxManager.d.ts +28 -0
  255. package/dist/cjs/utils/TxManager.js +285 -0
  256. package/dist/cjs/utils/cache/index.d.ts +2 -0
  257. package/dist/cjs/utils/cache/index.js +21 -0
  258. package/dist/cjs/utils/cache/memory.d.ts +19 -0
  259. package/dist/cjs/utils/cache/memory.js +66 -0
  260. package/dist/cjs/utils/cache/memory.spec.d.ts +1 -0
  261. package/dist/cjs/utils/cache/memory.spec.js +91 -0
  262. package/dist/cjs/utils/cache/types.d.ts +17 -0
  263. package/dist/cjs/utils/cache/types.js +3 -0
  264. package/dist/cjs/utils/compressors/GzipCompressor.d.ts +8 -0
  265. package/dist/cjs/utils/compressors/GzipCompressor.js +22 -0
  266. package/dist/cjs/utils/compressors/UncompressedCompressor.d.ts +8 -0
  267. package/dist/cjs/utils/compressors/UncompressedCompressor.js +17 -0
  268. package/dist/cjs/utils/compressors/index.d.ts +2 -0
  269. package/dist/cjs/utils/compressors/index.js +19 -0
  270. package/dist/cjs/utils/helper.d.ts +87 -0
  271. package/dist/cjs/utils/helper.js +576 -0
  272. package/dist/cjs/utils/helpers/calculateObjectHash.d.ts +8 -0
  273. package/dist/cjs/utils/helpers/calculateObjectHash.js +25 -0
  274. package/dist/cjs/utils/helpers/getRawRpc.d.ts +2 -0
  275. package/dist/cjs/utils/helpers/getRawRpc.js +19 -0
  276. package/dist/cjs/utils/helpers/getStreamChunks.d.ts +9 -0
  277. package/dist/cjs/utils/helpers/getStreamChunks.js +35 -0
  278. package/dist/cjs/utils/helpers/index.d.ts +5 -0
  279. package/dist/cjs/utils/helpers/index.js +22 -0
  280. package/dist/cjs/utils/helpers/promise.d.ts +2 -0
  281. package/dist/cjs/utils/helpers/promise.js +10 -0
  282. package/dist/cjs/utils/helpers/streamToBuffer.d.ts +4 -0
  283. package/dist/cjs/utils/helpers/streamToBuffer.js +13 -0
  284. package/dist/cjs/utils/helpers/tryWithInterval.d.ts +13 -0
  285. package/dist/cjs/utils/helpers/tryWithInterval.js +39 -0
  286. package/dist/cjs/utils/rent-calculator/index.d.ts +2 -0
  287. package/dist/cjs/utils/rent-calculator/index.js +19 -0
  288. package/dist/cjs/utils/rent-calculator/rent-calculator.d.ts +14 -0
  289. package/dist/cjs/utils/rent-calculator/rent-calculator.js +114 -0
  290. package/dist/cjs/utils/rent-calculator/types.d.ts +14 -0
  291. package/dist/cjs/utils/rent-calculator/types.js +3 -0
  292. package/dist/cjs/utils/resourceLoaders/BaseResourceLoader.d.ts +10 -0
  293. package/dist/cjs/utils/resourceLoaders/BaseResourceLoader.js +14 -0
  294. package/dist/cjs/utils/resourceLoaders/StorageProviderLoader.d.ts +18 -0
  295. package/dist/cjs/utils/resourceLoaders/StorageProviderLoader.js +60 -0
  296. package/dist/cjs/utils/resourceLoaders/UrlResourceLoader.d.ts +9 -0
  297. package/dist/cjs/utils/resourceLoaders/UrlResourceLoader.js +51 -0
  298. package/dist/cjs/utils/resourceLoaders/getResourceLoader.d.ts +5 -0
  299. package/dist/cjs/utils/resourceLoaders/getResourceLoader.js +15 -0
  300. package/dist/cjs/utils/resourceLoaders/index.d.ts +1 -0
  301. package/dist/cjs/utils/resourceLoaders/index.js +18 -0
  302. package/dist/cjs/utils/schema-utils/index.d.ts +2 -0
  303. package/dist/cjs/utils/schema-utils/index.js +9 -0
  304. package/dist/cjs/utils/schema-utils/serializer.d.ts +3 -0
  305. package/dist/cjs/utils/schema-utils/serializer.js +31 -0
  306. package/dist/cjs/utils/schema-utils/validator.d.ts +7 -0
  307. package/dist/cjs/utils/schema-utils/validator.js +49 -0
  308. package/dist/cjs/utils/tcb.d.ts +2 -0
  309. package/dist/cjs/utils/tcb.js +13 -0
  310. package/dist/cjs/utils/tokens/get-tokens-info.d.ts +8 -0
  311. package/dist/cjs/utils/tokens/get-tokens-info.js +32 -0
  312. package/dist/cjs/utils/tokens/index.d.ts +1 -0
  313. package/dist/cjs/utils/tokens/index.js +18 -0
  314. package/dist/cjs/utils/types.d.ts +13 -0
  315. package/dist/cjs/utils/types.js +3 -0
  316. package/dist/mjs/analytics/Analytics.d.ts +17 -0
  317. package/dist/mjs/analytics/Analytics.js +78 -0
  318. package/dist/mjs/analytics/AnalyticsError.d.ts +7 -0
  319. package/dist/mjs/analytics/AnalyticsError.js +8 -0
  320. package/dist/mjs/analytics/eventProviders/BrowserEventProvider.d.ts +19 -0
  321. package/dist/mjs/analytics/eventProviders/BrowserEventProvider.js +32 -0
  322. package/dist/mjs/analytics/eventProviders/EventProvider.d.ts +24 -0
  323. package/dist/mjs/analytics/eventProviders/EventProvider.js +22 -0
  324. package/dist/mjs/analytics/eventProviders/NodeEventProvider.d.ts +22 -0
  325. package/dist/mjs/analytics/eventProviders/NodeEventProvider.js +50 -0
  326. package/dist/mjs/analytics/transports/AxiosTransport.d.ts +4 -0
  327. package/dist/mjs/analytics/transports/AxiosTransport.js +31 -0
  328. package/dist/mjs/analytics/transports/FetchTransport.d.ts +4 -0
  329. package/dist/mjs/analytics/transports/FetchTransport.js +28 -0
  330. package/dist/mjs/analytics/types.d.ts +26 -0
  331. package/dist/mjs/analytics/types.js +2 -0
  332. package/dist/mjs/certificates/binary-splitter.d.ts +27 -0
  333. package/dist/mjs/certificates/binary-splitter.js +275 -0
  334. package/dist/mjs/certificates/crl.d.ts +6 -0
  335. package/dist/mjs/certificates/crl.js +39 -0
  336. package/dist/mjs/certificates/generator.d.ts +38 -0
  337. package/dist/mjs/certificates/generator.js +255 -0
  338. package/dist/mjs/certificates/helper.d.ts +29 -0
  339. package/dist/mjs/certificates/helper.js +186 -0
  340. package/dist/mjs/certificates/index.d.ts +5 -0
  341. package/dist/mjs/certificates/index.js +6 -0
  342. package/dist/mjs/certificates/ocsp.d.ts +14 -0
  343. package/dist/mjs/certificates/ocsp.js +290 -0
  344. package/dist/mjs/certificates/serializer.d.ts +13 -0
  345. package/dist/mjs/certificates/serializer.js +135 -0
  346. package/dist/mjs/certificates/setup-crypto.d.ts +3 -0
  347. package/dist/mjs/certificates/setup-crypto.js +22 -0
  348. package/dist/mjs/certificates/types.d.ts +122 -0
  349. package/dist/mjs/certificates/types.js +7 -0
  350. package/dist/mjs/config.d.ts +3 -0
  351. package/dist/mjs/config.js +4 -0
  352. package/dist/mjs/connectors/BaseConnector.d.ts +52 -0
  353. package/dist/mjs/connectors/BaseConnector.js +54 -0
  354. package/dist/mjs/connectors/BlockchainConnector.d.ts +78 -0
  355. package/dist/mjs/connectors/BlockchainConnector.js +320 -0
  356. package/dist/mjs/connectors/BlockchainEventsListener.d.ts +33 -0
  357. package/dist/mjs/connectors/BlockchainEventsListener.js +254 -0
  358. package/dist/mjs/connectors/index.d.ts +2 -0
  359. package/dist/mjs/connectors/index.js +3 -0
  360. package/dist/mjs/constants.d.ts +48 -0
  361. package/dist/mjs/constants.js +680 -0
  362. package/dist/mjs/contracts/SuperProtocolToken.d.ts +300 -0
  363. package/dist/mjs/contracts/SuperProtocolToken.js +2 -0
  364. package/dist/mjs/contracts/SuperProtocolToken__factory.d.ts +393 -0
  365. package/dist/mjs/contracts/SuperProtocolToken__factory.js +517 -0
  366. package/dist/mjs/contracts/typechain-types/common.d.ts +50 -0
  367. package/dist/mjs/contracts/typechain-types/common.js +2 -0
  368. package/dist/mjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/App__factory.d.ts +3340 -0
  369. package/dist/mjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/App__factory.js +4331 -0
  370. package/dist/mjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/index.d.ts +1 -0
  371. package/dist/mjs/contracts/typechain-types/factories/hardhat-diamond-abi/HardhatDiamondABI.sol/index.js +6 -0
  372. package/dist/mjs/contracts/typechain-types/factories/hardhat-diamond-abi/index.d.ts +1 -0
  373. package/dist/mjs/contracts/typechain-types/factories/hardhat-diamond-abi/index.js +6 -0
  374. package/dist/mjs/contracts/typechain-types/factories/index.d.ts +1 -0
  375. package/dist/mjs/contracts/typechain-types/factories/index.js +6 -0
  376. package/dist/mjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/App.d.ts +2299 -0
  377. package/dist/mjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/App.js +2 -0
  378. package/dist/mjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/index.d.ts +1 -0
  379. package/dist/mjs/contracts/typechain-types/hardhat-diamond-abi/HardhatDiamondABI.sol/index.js +2 -0
  380. package/dist/mjs/contracts/typechain-types/hardhat-diamond-abi/index.d.ts +2 -0
  381. package/dist/mjs/contracts/typechain-types/hardhat-diamond-abi/index.js +2 -0
  382. package/dist/mjs/contracts/typechain-types/index.d.ts +5 -0
  383. package/dist/mjs/contracts/typechain-types/index.js +7 -0
  384. package/dist/mjs/crypto/Crypto.d.ts +70 -0
  385. package/dist/mjs/crypto/Crypto.js +132 -0
  386. package/dist/mjs/crypto/index.d.ts +4 -0
  387. package/dist/mjs/crypto/index.js +5 -0
  388. package/dist/mjs/crypto/nodejs/AES.d.ts +25 -0
  389. package/dist/mjs/crypto/nodejs/AES.js +77 -0
  390. package/dist/mjs/crypto/nodejs/ARIA.d.ts +23 -0
  391. package/dist/mjs/crypto/nodejs/ARIA.js +72 -0
  392. package/dist/mjs/crypto/nodejs/ECIES.d.ts +10 -0
  393. package/dist/mjs/crypto/nodejs/ECIES.js +82 -0
  394. package/dist/mjs/crypto/nodejs/NativeCrypto.d.ts +46 -0
  395. package/dist/mjs/crypto/nodejs/NativeCrypto.js +152 -0
  396. package/dist/mjs/crypto/nodejs/RSA-Hybrid.d.ts +15 -0
  397. package/dist/mjs/crypto/nodejs/RSA-Hybrid.js +89 -0
  398. package/dist/mjs/crypto/types.d.ts +10 -0
  399. package/dist/mjs/crypto/types.js +2 -0
  400. package/dist/mjs/crypto/utils.d.ts +15 -0
  401. package/dist/mjs/crypto/utils.js +81 -0
  402. package/dist/mjs/crypto/utils.spec.d.ts +1 -0
  403. package/dist/mjs/crypto/utils.spec.js +219 -0
  404. package/dist/mjs/errors/base.error.d.ts +3 -0
  405. package/dist/mjs/errors/base.error.js +15 -0
  406. package/dist/mjs/errors/index.d.ts +3 -0
  407. package/dist/mjs/errors/index.js +4 -0
  408. package/dist/mjs/errors/insufficient-funds.error.d.ts +19 -0
  409. package/dist/mjs/errors/insufficient-funds.error.js +53 -0
  410. package/dist/mjs/errors/not-found.error.d.ts +3 -0
  411. package/dist/mjs/errors/not-found.error.js +4 -0
  412. package/dist/mjs/errors/utils.d.ts +2 -0
  413. package/dist/mjs/errors/utils.js +22 -0
  414. package/dist/mjs/index.d.ts +58 -0
  415. package/dist/mjs/index.js +53 -0
  416. package/dist/mjs/logger.d.ts +7 -0
  417. package/dist/mjs/logger.js +7 -0
  418. package/dist/mjs/models/EtlModel.d.ts +34 -0
  419. package/dist/mjs/models/EtlModel.js +96 -0
  420. package/dist/mjs/models/index.d.ts +1 -0
  421. package/dist/mjs/models/index.js +2 -0
  422. package/dist/mjs/package.json +1 -0
  423. package/dist/mjs/polyfills.d.ts +4 -0
  424. package/dist/mjs/polyfills.js +8 -0
  425. package/dist/mjs/proto/AmdSevSnp.d.ts +194 -0
  426. package/dist/mjs/proto/AmdSevSnp.js +348 -0
  427. package/dist/mjs/proto/Compression.d.ts +43 -0
  428. package/dist/mjs/proto/Compression.js +125 -0
  429. package/dist/mjs/proto/Hash.d.ts +37 -0
  430. package/dist/mjs/proto/Hash.js +98 -0
  431. package/dist/mjs/proto/Nvtrust.d.ts +116 -0
  432. package/dist/mjs/proto/Nvtrust.js +153 -0
  433. package/dist/mjs/proto/OrderReport.d.ts +730 -0
  434. package/dist/mjs/proto/OrderReport.js +460 -0
  435. package/dist/mjs/proto/TRI.d.ts +215 -0
  436. package/dist/mjs/proto/TRI.js +312 -0
  437. package/dist/mjs/providers/storage/ChunksDownloadDecorator.d.ts +36 -0
  438. package/dist/mjs/providers/storage/ChunksDownloadDecorator.js +139 -0
  439. package/dist/mjs/providers/storage/IStorageProvider.d.ts +15 -0
  440. package/dist/mjs/providers/storage/IStorageProvider.js +2 -0
  441. package/dist/mjs/providers/storage/S3StorageProvider.d.ts +26 -0
  442. package/dist/mjs/providers/storage/S3StorageProvider.js +203 -0
  443. package/dist/mjs/providers/storage/StorageAdapter.d.ts +62 -0
  444. package/dist/mjs/providers/storage/StorageAdapter.js +270 -0
  445. package/dist/mjs/providers/storage/StorageContentWriter.d.ts +46 -0
  446. package/dist/mjs/providers/storage/StorageContentWriter.js +161 -0
  447. package/dist/mjs/providers/storage/StorageKeyValueAdapter.d.ts +26 -0
  448. package/dist/mjs/providers/storage/StorageKeyValueAdapter.js +133 -0
  449. package/dist/mjs/providers/storage/StorageMetadataReader.d.ts +20 -0
  450. package/dist/mjs/providers/storage/StorageMetadataReader.js +50 -0
  451. package/dist/mjs/providers/storage/StorjAdapter.d.ts +20 -0
  452. package/dist/mjs/providers/storage/StorjAdapter.js +54 -0
  453. package/dist/mjs/providers/storage/StorjCredentialsManager.d.ts +24 -0
  454. package/dist/mjs/providers/storage/StorjCredentialsManager.js +84 -0
  455. package/dist/mjs/providers/storage/StorjStorageProvider.d.ts +29 -0
  456. package/dist/mjs/providers/storage/StorjStorageProvider.js +140 -0
  457. package/dist/mjs/providers/storage/fs-storage-provider.d.ts +19 -0
  458. package/dist/mjs/providers/storage/fs-storage-provider.js +132 -0
  459. package/dist/mjs/providers/storage/getStorageProvider.d.ts +4 -0
  460. package/dist/mjs/providers/storage/getStorageProvider.js +18 -0
  461. package/dist/mjs/providers/storage/parseStorageCredentials.d.ts +4 -0
  462. package/dist/mjs/providers/storage/parseStorageCredentials.js +17 -0
  463. package/dist/mjs/providers/storage/types.d.ts +29 -0
  464. package/dist/mjs/providers/storage/types.js +2 -0
  465. package/dist/mjs/staticModels/Deposits.d.ts +85 -0
  466. package/dist/mjs/staticModels/Deposits.js +263 -0
  467. package/dist/mjs/staticModels/Diamond.d.ts +6 -0
  468. package/dist/mjs/staticModels/Diamond.js +17 -0
  469. package/dist/mjs/staticModels/ModelPackager.d.ts +18 -0
  470. package/dist/mjs/staticModels/ModelPackager.js +45 -0
  471. package/dist/mjs/staticModels/ProviderRewards.d.ts +5 -0
  472. package/dist/mjs/staticModels/ProviderRewards.js +76 -0
  473. package/dist/mjs/staticModels/StaticModel.d.ts +6 -0
  474. package/dist/mjs/staticModels/StaticModel.js +38 -0
  475. package/dist/mjs/staticModels/Superpro.d.ts +18 -0
  476. package/dist/mjs/staticModels/Superpro.js +45 -0
  477. package/dist/mjs/staticModels/SuperproToken.d.ts +113 -0
  478. package/dist/mjs/staticModels/SuperproToken.js +328 -0
  479. package/dist/mjs/store.d.ts +17 -0
  480. package/dist/mjs/store.js +17 -0
  481. package/dist/mjs/tee/OrderReportService.d.ts +9 -0
  482. package/dist/mjs/tee/OrderReportService.js +97 -0
  483. package/dist/mjs/tee/QuoteParser.d.ts +82 -0
  484. package/dist/mjs/tee/QuoteParser.js +381 -0
  485. package/dist/mjs/tee/TeeCertificateService.d.ts +20 -0
  486. package/dist/mjs/tee/TeeCertificateService.js +139 -0
  487. package/dist/mjs/tee/TeeSignatureVerifier.d.ts +24 -0
  488. package/dist/mjs/tee/TeeSignatureVerifier.js +111 -0
  489. package/dist/mjs/tee/errors.d.ts +11 -0
  490. package/dist/mjs/tee/errors.js +12 -0
  491. package/dist/mjs/tee/helpers.d.ts +14 -0
  492. package/dist/mjs/tee/helpers.js +110 -0
  493. package/dist/mjs/tee/interface.d.ts +63 -0
  494. package/dist/mjs/tee/interface.js +2 -0
  495. package/dist/mjs/tee/statuses.d.ts +14 -0
  496. package/dist/mjs/tee/statuses.js +17 -0
  497. package/dist/mjs/tee/types.d.ts +126 -0
  498. package/dist/mjs/tee/types.js +28 -0
  499. package/dist/mjs/types/Compressor.d.ts +5 -0
  500. package/dist/mjs/types/Compressor.js +2 -0
  501. package/dist/mjs/types/Consensus.d.ts +52 -0
  502. package/dist/mjs/types/Consensus.js +8 -0
  503. package/dist/mjs/types/DepositInfo.d.ts +6 -0
  504. package/dist/mjs/types/DepositInfo.js +2 -0
  505. package/dist/mjs/types/DistributedSecretStorage.d.ts +68 -0
  506. package/dist/mjs/types/DistributedSecretStorage.js +2 -0
  507. package/dist/mjs/types/EtlModel.d.ts +2 -0
  508. package/dist/mjs/types/EtlModel.js +2 -0
  509. package/dist/mjs/types/Events.d.ts +34 -0
  510. package/dist/mjs/types/Events.js +2 -0
  511. package/dist/mjs/types/HardwareInfo.d.ts +10 -0
  512. package/dist/mjs/types/HardwareInfo.js +2 -0
  513. package/dist/mjs/types/Marks.d.ts +9 -0
  514. package/dist/mjs/types/Marks.js +7 -0
  515. package/dist/mjs/types/Offer.d.ts +76 -0
  516. package/dist/mjs/types/Offer.js +29 -0
  517. package/dist/mjs/types/OfferVersion.d.ts +30 -0
  518. package/dist/mjs/types/OfferVersion.js +6 -0
  519. package/dist/mjs/types/OptionInfo.d.ts +8 -0
  520. package/dist/mjs/types/OptionInfo.js +2 -0
  521. package/dist/mjs/types/Order.d.ts +144 -0
  522. package/dist/mjs/types/Order.js +91 -0
  523. package/dist/mjs/types/OrderUsage.d.ts +28 -0
  524. package/dist/mjs/types/OrderUsage.js +2 -0
  525. package/dist/mjs/types/Origins.d.ts +6 -0
  526. package/dist/mjs/types/Origins.js +2 -0
  527. package/dist/mjs/types/Provider.d.ts +7 -0
  528. package/dist/mjs/types/Provider.js +2 -0
  529. package/dist/mjs/types/ProviderRewards.d.ts +5 -0
  530. package/dist/mjs/types/ProviderRewards.js +2 -0
  531. package/dist/mjs/types/ResourceLoader.d.ts +28 -0
  532. package/dist/mjs/types/ResourceLoader.js +2 -0
  533. package/dist/mjs/types/SlotInfo.d.ts +7 -0
  534. package/dist/mjs/types/SlotInfo.js +2 -0
  535. package/dist/mjs/types/SlotUsage.d.ts +11 -0
  536. package/dist/mjs/types/SlotUsage.js +6 -0
  537. package/dist/mjs/types/Superpro.d.ts +9 -0
  538. package/dist/mjs/types/Superpro.js +11 -0
  539. package/dist/mjs/types/TeeOfferInfo.d.ts +38 -0
  540. package/dist/mjs/types/TeeOfferInfo.js +2 -0
  541. package/dist/mjs/types/TeeOfferOption.d.ts +13 -0
  542. package/dist/mjs/types/TeeOfferOption.js +2 -0
  543. package/dist/mjs/types/TeeOfferSlot.d.ts +8 -0
  544. package/dist/mjs/types/TeeOfferSlot.js +2 -0
  545. package/dist/mjs/types/ValueOfferSlot.d.ts +18 -0
  546. package/dist/mjs/types/ValueOfferSlot.js +2 -0
  547. package/dist/mjs/types/Web3.d.ts +30 -0
  548. package/dist/mjs/types/Web3.js +2 -0
  549. package/dist/mjs/types/blockchainConnector/StorageAccess.d.ts +8 -0
  550. package/dist/mjs/types/blockchainConnector/StorageAccess.js +2 -0
  551. package/dist/mjs/types/index.d.ts +25 -0
  552. package/dist/mjs/types/index.js +26 -0
  553. package/dist/mjs/types/storage/StorageAccess.d.ts +7 -0
  554. package/dist/mjs/types/storage/StorageAccess.js +2 -0
  555. package/dist/mjs/types/storage/StorageFileAccess.d.ts +5 -0
  556. package/dist/mjs/types/storage/StorageFileAccess.js +2 -0
  557. package/dist/mjs/types/storage/StorageObject.d.ts +8 -0
  558. package/dist/mjs/types/storage/StorageObject.js +2 -0
  559. package/dist/mjs/utils/CryptoKeysTransformer.d.ts +42 -0
  560. package/dist/mjs/utils/CryptoKeysTransformer.js +240 -0
  561. package/dist/mjs/utils/Monitoring.d.ts +11 -0
  562. package/dist/mjs/utils/Monitoring.js +44 -0
  563. package/dist/mjs/utils/NonceTracker.d.ts +20 -0
  564. package/dist/mjs/utils/NonceTracker.js +77 -0
  565. package/dist/mjs/utils/PubSub.d.ts +9 -0
  566. package/dist/mjs/utils/PubSub.js +32 -0
  567. package/dist/mjs/utils/TxManager.d.ts +28 -0
  568. package/dist/mjs/utils/TxManager.js +278 -0
  569. package/dist/mjs/utils/cache/index.d.ts +2 -0
  570. package/dist/mjs/utils/cache/index.js +3 -0
  571. package/dist/mjs/utils/cache/memory.d.ts +19 -0
  572. package/dist/mjs/utils/cache/memory.js +61 -0
  573. package/dist/mjs/utils/cache/memory.spec.d.ts +1 -0
  574. package/dist/mjs/utils/cache/memory.spec.js +89 -0
  575. package/dist/mjs/utils/cache/types.d.ts +17 -0
  576. package/dist/mjs/utils/cache/types.js +2 -0
  577. package/dist/mjs/utils/compressors/GzipCompressor.d.ts +8 -0
  578. package/dist/mjs/utils/compressors/GzipCompressor.js +15 -0
  579. package/dist/mjs/utils/compressors/UncompressedCompressor.d.ts +8 -0
  580. package/dist/mjs/utils/compressors/UncompressedCompressor.js +13 -0
  581. package/dist/mjs/utils/compressors/index.d.ts +2 -0
  582. package/dist/mjs/utils/compressors/index.js +3 -0
  583. package/dist/mjs/utils/helper.d.ts +87 -0
  584. package/dist/mjs/utils/helper.js +526 -0
  585. package/dist/mjs/utils/helpers/calculateObjectHash.d.ts +8 -0
  586. package/dist/mjs/utils/helpers/calculateObjectHash.js +18 -0
  587. package/dist/mjs/utils/helpers/getRawRpc.d.ts +2 -0
  588. package/dist/mjs/utils/helpers/getRawRpc.js +15 -0
  589. package/dist/mjs/utils/helpers/getStreamChunks.d.ts +9 -0
  590. package/dist/mjs/utils/helpers/getStreamChunks.js +31 -0
  591. package/dist/mjs/utils/helpers/index.d.ts +5 -0
  592. package/dist/mjs/utils/helpers/index.js +6 -0
  593. package/dist/mjs/utils/helpers/promise.d.ts +2 -0
  594. package/dist/mjs/utils/helpers/promise.js +5 -0
  595. package/dist/mjs/utils/helpers/streamToBuffer.d.ts +4 -0
  596. package/dist/mjs/utils/helpers/streamToBuffer.js +9 -0
  597. package/dist/mjs/utils/helpers/tryWithInterval.d.ts +13 -0
  598. package/dist/mjs/utils/helpers/tryWithInterval.js +35 -0
  599. package/dist/mjs/utils/rent-calculator/index.d.ts +2 -0
  600. package/dist/mjs/utils/rent-calculator/index.js +3 -0
  601. package/dist/mjs/utils/rent-calculator/rent-calculator.d.ts +14 -0
  602. package/dist/mjs/utils/rent-calculator/rent-calculator.js +110 -0
  603. package/dist/mjs/utils/rent-calculator/types.d.ts +14 -0
  604. package/dist/mjs/utils/rent-calculator/types.js +2 -0
  605. package/dist/mjs/utils/resourceLoaders/BaseResourceLoader.d.ts +10 -0
  606. package/dist/mjs/utils/resourceLoaders/BaseResourceLoader.js +10 -0
  607. package/dist/mjs/utils/resourceLoaders/StorageProviderLoader.d.ts +18 -0
  608. package/dist/mjs/utils/resourceLoaders/StorageProviderLoader.js +53 -0
  609. package/dist/mjs/utils/resourceLoaders/UrlResourceLoader.d.ts +9 -0
  610. package/dist/mjs/utils/resourceLoaders/UrlResourceLoader.js +44 -0
  611. package/dist/mjs/utils/resourceLoaders/getResourceLoader.d.ts +5 -0
  612. package/dist/mjs/utils/resourceLoaders/getResourceLoader.js +11 -0
  613. package/dist/mjs/utils/resourceLoaders/index.d.ts +1 -0
  614. package/dist/mjs/utils/resourceLoaders/index.js +2 -0
  615. package/dist/mjs/utils/schema-utils/index.d.ts +2 -0
  616. package/dist/mjs/utils/schema-utils/index.js +3 -0
  617. package/dist/mjs/utils/schema-utils/serializer.d.ts +3 -0
  618. package/dist/mjs/utils/schema-utils/serializer.js +26 -0
  619. package/dist/mjs/utils/schema-utils/validator.d.ts +7 -0
  620. package/dist/mjs/utils/schema-utils/validator.js +45 -0
  621. package/dist/mjs/utils/tcb.d.ts +2 -0
  622. package/dist/mjs/utils/tcb.js +9 -0
  623. package/dist/mjs/utils/tokens/get-tokens-info.d.ts +8 -0
  624. package/dist/mjs/utils/tokens/get-tokens-info.js +25 -0
  625. package/dist/mjs/utils/tokens/index.d.ts +1 -0
  626. package/dist/mjs/utils/tokens/index.js +2 -0
  627. package/dist/mjs/utils/types.d.ts +13 -0
  628. package/dist/mjs/utils/types.js +2 -0
  629. package/package.json +103 -0
@@ -0,0 +1,254 @@
1
+ import _ from 'lodash';
2
+ import { BaseConnector } from './BaseConnector.js';
3
+ import { WebSocketProvider } from 'ethers';
4
+ import { SuperProtocolToken__factory } from '../contracts/SuperProtocolToken__factory.js';
5
+ import { App__factory } from '../contracts/typechain-types/index.js';
6
+ // TODO: remove this dependencies
7
+ import store from '../store.js';
8
+ import Superpro from '../staticModels/Superpro.js';
9
+ import SuperproToken from '../staticModels/SuperproToken.js';
10
+ import * as uuid from 'uuid';
11
+ export default class BlockchainEventsListener extends BaseConnector {
12
+ // Singleton
13
+ static instance;
14
+ isSubscribingBlocked = false;
15
+ reconnectAttemptCount = 0;
16
+ constructor() {
17
+ super();
18
+ }
19
+ static getInstance() {
20
+ if (!BlockchainEventsListener.instance) {
21
+ BlockchainEventsListener.instance = new BlockchainEventsListener();
22
+ }
23
+ return BlockchainEventsListener.instance;
24
+ }
25
+ subscriptions = new Map();
26
+ subscribeEvent(params) {
27
+ if (!this.initialized) {
28
+ throw Error(`${BlockchainEventsListener.name} instance should be initialized before`);
29
+ }
30
+ if (this.isSubscribingBlocked) {
31
+ throw Error(`${BlockchainEventsListener.name} instance should be initialized before`);
32
+ }
33
+ const contract = params.contract ?? this.getContract();
34
+ const contractTarget = contract.target.toString();
35
+ const key = uuid.v4();
36
+ this.logger.trace({
37
+ event: params.event,
38
+ key,
39
+ }, `created subscription`);
40
+ const unsubscribeAndRemove = async () => {
41
+ this.logger.trace(`Unsubscribing ${key} for event "${params.event}"...`);
42
+ const contractSubsciptions = this.subscriptions.get(contractTarget);
43
+ await contractSubsciptions.contract.removeListener(params.event, params.onData);
44
+ contractSubsciptions.subscriptions.delete(key);
45
+ };
46
+ contract
47
+ .addListener(params.event, params.onData)
48
+ .then(() => {
49
+ this.logger.trace({ event: params.event, key }, `subscription is ready`);
50
+ if (!this.subscriptions.has(contractTarget)) {
51
+ this.subscriptions.set(contractTarget, {
52
+ contract: contract,
53
+ subscriptions: new Map(),
54
+ });
55
+ }
56
+ this.subscriptions.get(contractTarget).subscriptions.set(key, {
57
+ onData: params.onData,
58
+ onError: params.onError,
59
+ unsubscribeAndRemove,
60
+ event: params.event,
61
+ });
62
+ })
63
+ .catch((err) => {
64
+ void Promise.resolve(params.onError(err)).catch((onErrorError) => {
65
+ this.logger.error({ err: onErrorError }, 'Subscription error handler failed');
66
+ });
67
+ });
68
+ return unsubscribeAndRemove;
69
+ }
70
+ async resubscribe() {
71
+ if (!this.subscriptions.size) {
72
+ return true;
73
+ }
74
+ if (!this.initialized) {
75
+ throw Error(`${BlockchainEventsListener.name} instance should be initialized before`);
76
+ }
77
+ const events = [];
78
+ for (const [, contractSubscriptions] of this.subscriptions) {
79
+ const contract = contractSubscriptions.contract.connect(store.wssProvider);
80
+ contractSubscriptions.contract = contract;
81
+ for (const [, item] of contractSubscriptions.subscriptions) {
82
+ try {
83
+ await item.unsubscribeAndRemove();
84
+ }
85
+ catch (err) {
86
+ this.logger.error({ err }, 'Failed to unsubscribe');
87
+ }
88
+ events.push({ ..._.omit(item, ['unsubscribeAndRemove']), contract });
89
+ }
90
+ }
91
+ if (events.length) {
92
+ try {
93
+ await Promise.all(events.map((event) => this.subscribeEvent(event)));
94
+ this.logger.trace(`${events.length} subscriptions were resubscribed`);
95
+ }
96
+ catch (err) {
97
+ this.logger.error({ err }, 'Something went wrong on resubscribing');
98
+ return false;
99
+ }
100
+ }
101
+ return true;
102
+ }
103
+ async unsubscribeAll() {
104
+ if (this.isSubscribingBlocked) {
105
+ return false;
106
+ }
107
+ this.isSubscribingBlocked = true;
108
+ const promises = [];
109
+ try {
110
+ for (const [, contractSubscriptions] of this.subscriptions) {
111
+ for (const [id, item] of contractSubscriptions.subscriptions) {
112
+ promises.push({
113
+ unsubscribe: item.unsubscribeAndRemove(),
114
+ id,
115
+ event: item.event,
116
+ });
117
+ }
118
+ }
119
+ const result = await Promise.allSettled(promises);
120
+ result.forEach((item, index) => {
121
+ const data = promises[index];
122
+ if (item.status === 'rejected') {
123
+ this.logger.warn(`Error on ${data.id} unsubscribe "${data.event}" event`);
124
+ }
125
+ else {
126
+ this.logger.trace(`Unsubscribe ${data.id} for event "${data.event}" has been completed`);
127
+ }
128
+ });
129
+ return true;
130
+ }
131
+ catch (err) {
132
+ this.logger.error({ err }, 'Something went wrong on unsubscribing');
133
+ return false;
134
+ }
135
+ finally {
136
+ for (const [, contractSubscriptions] of this.subscriptions) {
137
+ contractSubscriptions.subscriptions.clear();
138
+ }
139
+ this.subscriptions.clear();
140
+ this.isSubscribingBlocked = false;
141
+ }
142
+ }
143
+ /**
144
+ * Function for connecting to blockchain using web socket
145
+ * Needs to run this function before using events
146
+ */
147
+ async initialize(config) {
148
+ if (this.initialized) {
149
+ return;
150
+ }
151
+ this.logger.trace(config, 'Initializing');
152
+ const reconnectOptions = Object.assign({
153
+ autoReconnect: true,
154
+ delay: 20000,
155
+ maxAttempts: 5000,
156
+ }, config.reconnect);
157
+ this.logger.info(`Initializing events listener with reconnect options: ${JSON.stringify(reconnectOptions)}`);
158
+ const provider = new WebSocketProvider(config.blockchainUrl);
159
+ try {
160
+ await new Promise((resolve, reject) => {
161
+ const timeoutId = setTimeout(() => {
162
+ reject(new Error("Timeout waiting for Events listener's readiness"));
163
+ }, reconnectOptions.delay ?? 5000);
164
+ const ws = provider.websocket;
165
+ const onOpen = () => {
166
+ clearTimeout(timeoutId);
167
+ this.logger.info('Events listener ready');
168
+ ws.removeEventListener('open', onOpen);
169
+ resolve();
170
+ };
171
+ ws.addEventListener('open', onOpen);
172
+ ws.addEventListener('error', (event) => {
173
+ this.logger.error({
174
+ err: event?.message ?? event,
175
+ msg: 'Events listener error',
176
+ });
177
+ });
178
+ ws.addEventListener('close', async (event) => {
179
+ if (event.code === 1000) {
180
+ this.logger.debug('The connection successfully completed');
181
+ return;
182
+ }
183
+ this.logger.error({
184
+ err: {
185
+ reason: event.reason,
186
+ code: event.code,
187
+ wasClean: event.wasClean,
188
+ },
189
+ msg: 'Events listener disconnect',
190
+ });
191
+ if (!this.isInReconnectProcess()) {
192
+ await this.tryReconnect(config, reconnectOptions);
193
+ }
194
+ });
195
+ });
196
+ }
197
+ catch (err) {
198
+ await provider.destroy();
199
+ throw err;
200
+ }
201
+ store.wssProvider = provider;
202
+ this.contract = App__factory.connect(config.contractAddress, provider);
203
+ Superpro.address = config.contractAddress;
204
+ let tokenAddress = this.tokenAddress;
205
+ if (!tokenAddress) {
206
+ tokenAddress = await Superpro.getPrimaryTokenAddress(this.contract);
207
+ SuperproToken.addressWss = tokenAddress;
208
+ this.tokenAddress = tokenAddress;
209
+ }
210
+ this.tokenContract = SuperProtocolToken__factory.connect(tokenAddress, provider);
211
+ this.initialized = true;
212
+ this.reconnectAttemptCount = 0;
213
+ this.logger.trace('Initialized');
214
+ }
215
+ isInReconnectProcess() {
216
+ return this.reconnectAttemptCount > 0;
217
+ }
218
+ async tryReconnect(config, reconnectOptions) {
219
+ if (!reconnectOptions.autoReconnect) {
220
+ return;
221
+ }
222
+ while (this.reconnectAttemptCount < reconnectOptions.maxAttempts) {
223
+ this.reconnectAttemptCount++;
224
+ this.logger.info(`Events listener reconnecting... attempt ${this.reconnectAttemptCount}/${reconnectOptions.maxAttempts}`);
225
+ await new Promise((res) => setTimeout(res, reconnectOptions.delay));
226
+ try {
227
+ this.initialized = false;
228
+ await this.initialize(config);
229
+ const result = await this.resubscribe();
230
+ if (!result) {
231
+ this.logger.error("Subscriptions have not been activated well on the Events listener's reconnection");
232
+ }
233
+ return;
234
+ }
235
+ catch (err) {
236
+ this.logger.error({ err, msg: 'Events listener reconnect failed' });
237
+ }
238
+ }
239
+ this.logger.error(`Max reconnect attempts reached (${reconnectOptions.maxAttempts})`);
240
+ }
241
+ async shutdown() {
242
+ const provider = store.wssProvider;
243
+ if (provider) {
244
+ const result = await this.unsubscribeAll();
245
+ if (!result) {
246
+ this.logger.warn('UnsubscribeAll could not be done well');
247
+ }
248
+ await provider.destroy();
249
+ }
250
+ store.wssProvider = undefined;
251
+ super.shutdown();
252
+ }
253
+ }
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2tjaGFpbkV2ZW50c0xpc3RlbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nvbm5lY3RvcnMvQmxvY2tjaGFpbkV2ZW50c0xpc3RlbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUE0QixNQUFNLG9CQUFvQixDQUFDO0FBQzdFLE9BQU8sRUFBMEIsaUJBQWlCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3JFLGlDQUFpQztBQUNqQyxPQUFPLEtBQUssTUFBTSxhQUFhLENBQUM7QUFDaEMsT0FBTyxRQUFRLE1BQU0sNkJBQTZCLENBQUM7QUFDbkQsT0FBTyxhQUFhLE1BQU0sa0NBQWtDLENBQUM7QUFDN0QsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFjN0IsTUFBTSxDQUFDLE9BQU8sT0FBTyx3QkFBeUIsU0FBUSxhQUFhO0lBQ2pFLFlBQVk7SUFDSixNQUFNLENBQUMsUUFBUSxDQUEyQjtJQUMxQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDN0IscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0lBRWxDO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVc7UUFDaEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLHdCQUF3QixDQUFDLFFBQVEsR0FBRyxJQUFJLHdCQUF3QixFQUFFLENBQUM7UUFDckUsQ0FBQztRQUVELE9BQU8sd0JBQXdCLENBQUMsUUFBUSxDQUFDO0lBQzNDLENBQUM7SUFFZ0IsYUFBYSxHQUFHLElBQUksR0FBRyxFQUdyQyxDQUFDO0lBRUosY0FBYyxDQUFDLE1BQXlCO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsTUFBTSxLQUFLLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLHdDQUF3QyxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsTUFBTSxLQUFLLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLHdDQUF3QyxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFbEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmO1lBQ0UsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ25CLEdBQUc7U0FDSixFQUNELHNCQUFzQixDQUN2QixDQUFDO1FBRUYsTUFBTSxvQkFBb0IsR0FBa0IsS0FBSyxJQUFtQixFQUFFO1lBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLGVBQWUsTUFBTSxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDekUsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUUsQ0FBQztZQUNyRSxNQUFNLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEYsb0JBQW9CLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUM7UUFFRixRQUFRO2FBQ0wsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUN4QyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUU7b0JBQ3JDLFFBQVEsRUFBRSxRQUFRO29CQUNsQixhQUFhLEVBQUUsSUFBSSxHQUFHLEVBQTJCO2lCQUNsRCxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQzdELE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtnQkFDckIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO2dCQUN2QixvQkFBb0I7Z0JBQ3BCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSzthQUNwQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxHQUFVLEVBQUUsRUFBRTtZQUNwQixLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO1lBQ2hGLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFTCxPQUFPLG9CQUFvQixDQUFDO0lBQzlCLENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxDQUFDLEdBQUcsd0JBQXdCLENBQUMsSUFBSSx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO1FBRXZDLEtBQUssTUFBTSxDQUFDLEVBQUUscUJBQXFCLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0QsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBWSxDQUFDLENBQUM7WUFDNUUscUJBQXFCLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUMxQyxLQUFLLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMzRCxJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDcEMsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztnQkFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztnQkFFcEUsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUVqQyxNQUFNLFFBQVEsR0FJUixFQUFFLENBQUM7UUFFVCxJQUFJLENBQUM7WUFDSCxLQUFLLE1BQU0sQ0FBQyxFQUFFLHFCQUFxQixDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMzRCxLQUFLLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUkscUJBQXFCLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQzdELFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQ1osV0FBVyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRTt3QkFDeEMsRUFBRTt3QkFDRixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7cUJBQ2xCLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUM3QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsRUFBRSxpQkFBaUIsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7Z0JBQzVFLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksQ0FBQyxFQUFFLGVBQWUsSUFBSSxDQUFDLEtBQUssc0JBQXNCLENBQUMsQ0FBQztnQkFDM0YsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztZQUVwRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7Z0JBQVMsQ0FBQztZQUNULEtBQUssTUFBTSxDQUFDLEVBQUUscUJBQXFCLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzNELHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFjO1FBQzdCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRTFDLE1BQU0sZ0JBQWdCLEdBQXFCLE1BQU0sQ0FBQyxNQUFNLENBQ3REO1lBQ0UsYUFBYSxFQUFFLElBQUk7WUFDbkIsS0FBSyxFQUFFLEtBQUs7WUFDWixXQUFXLEVBQUUsSUFBSTtTQUNsQixFQUNELE1BQU0sQ0FBQyxTQUFTLENBQ2pCLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCx3REFBd0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQzNGLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxhQUFjLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUMxQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNoQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQyxDQUFDO2dCQUN2RSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO2dCQUVuQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsU0FBc0IsQ0FBQztnQkFFM0MsTUFBTSxNQUFNLEdBQUcsR0FBUyxFQUFFO29CQUN4QixZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUMsQ0FBQztnQkFDRixFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUVwQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBWSxFQUFFLEVBQUU7b0JBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO3dCQUNoQixHQUFHLEVBQUcsS0FBb0IsRUFBRSxPQUFPLElBQUksS0FBSzt3QkFDNUMsR0FBRyxFQUFFLHVCQUF1QjtxQkFDN0IsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUVILEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQWlCLEVBQUUsRUFBRTtvQkFDdkQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO3dCQUMzRCxPQUFPO29CQUNULENBQUM7b0JBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7d0JBQ2hCLEdBQUcsRUFBRTs0QkFDSCxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07NEJBQ3BCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTs0QkFDaEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO3lCQUN6Qjt3QkFDRCxHQUFHLEVBQUUsNEJBQTRCO3FCQUNsQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7d0JBQ2pDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztvQkFDcEQsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QixNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7UUFFRCxLQUFLLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztRQUU3QixJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RSxRQUFRLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFFMUMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsWUFBWSxHQUFHLE1BQU0sUUFBUSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRSxhQUFhLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztZQUN4QyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRWpGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBYyxFQUFFLGdCQUFrQztRQUNuRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDcEMsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFZLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCwyQ0FBMkMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUN4RyxDQUFDO1lBRUYsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRXBFLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDekIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLGtGQUFrRixDQUNuRixDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsT0FBTztZQUNULENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxrQ0FBa0MsRUFBRSxDQUFDLENBQUM7WUFDdEUsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsZ0JBQWdCLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVE7UUFDWixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsV0FBWSxDQUFDO1FBQ3BDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBRUQsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUNELEtBQUssQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO1FBQzlCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,2 @@
1
+ export { default as BlockchainConnector } from './BlockchainConnector.js';
2
+ export { default as BlockchainEventsListener } from './BlockchainEventsListener.js';
@@ -0,0 +1,3 @@
1
+ export { default as BlockchainConnector } from './BlockchainConnector.js';
2
+ export { default as BlockchainEventsListener } from './BlockchainEventsListener.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29ubmVjdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxJQUFJLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sSUFBSSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDIn0=
@@ -0,0 +1,48 @@
1
+ import { Hash } from '@super-protocol/dto-js';
2
+ export declare const defaultBlockchainUrl = "http://127.0.0.1:8545";
3
+ export declare const defaultGasLimit: bigint;
4
+ export declare const defaultGasPrice: bigint;
5
+ export declare const defaultGasLimitMultiplier = 1.2;
6
+ export declare const defaultMaxFeePerGasMultiplier = 2;
7
+ export declare const defaultMaxPriorityFeePerGasMultiplier = 1.5;
8
+ export declare const txConcurrency = 10;
9
+ export declare const txIntervalMs = 34;
10
+ export declare const ONE_DAY: number;
11
+ export declare const ONE_HOUR: number;
12
+ export declare const FIVE_MINUTES: number;
13
+ export declare const BLOCK_SIZE_TO_FETCH_TRANSACTION = 500;
14
+ export declare const POLYGON_MATIC_EVENT_PATH = "0x0000000000000000000000000000000000001010";
15
+ export declare const BLOCKCHAIN_CALL_RETRY_ATTEMPTS = 20;
16
+ export declare const BLOCKCHAIN_CALL_RETRY_INTERVAL = 3000;
17
+ export declare const TRANSACTION_RETRY_ATTEMPTS = 3;
18
+ export declare const BLOCKCHAIN_BATCH_REQUEST_TIMEOUT = 10000;
19
+ export declare const MAX_RPC_BATCH_SIZE = 1000;
20
+ export declare const POLYGON_MAIN_CHAIN_ID = 137;
21
+ export declare const POLYGON_AMOY_CHAIN_ID = 80002;
22
+ export declare const POLYGON_AMOY_GASSTATION_URL = "https://gasstation.polygon.technology/amoy";
23
+ export declare const POLYGON_MAIN_GASSTATION_URL = "https://gasstation.polygon.technology/v2";
24
+ export declare const OCSP_URL = "https://ocsp.certs.superprotocol.com/v1/ocsp";
25
+ export declare const AMOY_TX_COST_LIMIT: bigint;
26
+ export declare const AMOY_TX_GAS_LIMIT: bigint;
27
+ export declare const DEFAULT_OFFER_VERSION = 0;
28
+ export declare const HTTPS_PORT = 443;
29
+ export declare const ZERO_HASH: Hash;
30
+ export declare const ZERO32_HEX = "0x0000000000000000000000000000000000000000000000000000000000000000";
31
+ export declare const TEE_LOADER_TRUSTED_MRSIGNER = "4a5cb479b8a30fa3821b88aa29bad04788ea006a9e09925bf3ec36398fc9d64b";
32
+ export declare const TEE_PKI_TRUSTED_MRSIGNER = "34ea7ca88034fe80f209e97cd0f8442f7ba621eb2a5f60393ab05871ae6b979d";
33
+ export declare const OPBNB_MAIN_CHAIN_ID = 204;
34
+ export declare const OPBNB_TEST_CHAIN_ID = 5611;
35
+ export declare const OPBNB_TX_GAS_LIMIT: bigint;
36
+ export declare const OPBNB_MAX_PRIORITY_FEE_PER_GAS: bigint;
37
+ export declare const TEE_LOADER_TRUSTED_CERTIFICATE = "-----BEGIN CERTIFICATE-----\nMIIEJTCCAo2gAwIBAgIUGvcNLMGAOGK/UWfDl1PDc8v6qTYwDQYJKoZIhvcNAQEL\nBQAwMDEWMBQGA1UEAwwNU3VwZXJQcm90b2NvbDEWMBQGA1UECgwNU3VwZXJQcm90\nb2NvbDAeFw0yNDA5MDQwOTA4MDZaFw0zNDA5MDIwOTA4MDZaMDAxFjAUBgNVBAMM\nDVN1cGVyUHJvdG9jb2wxFjAUBgNVBAoMDVN1cGVyUHJvdG9jb2wwggGgMA0GCSqG\nSIb3DQEBAQUAA4IBjQAwggGIAoIBgQDL326V3vj04Plbjyuhngxu4qTUGju0Yh8Q\n6i3X7GVZAoMMFpFAOD4s4aE+lGYZsX+zi32tQa/EGePKX4+2kvImTH54FPq5tMRv\n/hJt2CKo+O1ddXR5RVigFkdKZP1gWSVwnVhYPBjE6bSySH/CbkgGlKcYy4unaZzw\nXKr6/FbMQ94XNssfpBZ0b/1OzmYkcndRpYbV9biVIx/d5Vz0FHClru2lelREuPZO\nxfzCAJtBVDX5BgugJ1Lodlznu+wgZHpPEd6qZolakNpcFXx3PD1p6RMZp2T38h62\nMjVtpf0EnyzsinH19id/2rCZZ7ME7VyY6jCb0x3pMw8SRXG/Np3L6szItZsasmho\nnodbkQ9igVBbZwEU53VDNLhqMve39JdCkHdOcFLJ4jP7w6jAf5oB3v/28IjlGjyP\nRGycNT9PeY2RvmkDg7BjqrGiudHf1GYdPPcZpFl6Yr76l89HfcBUyUl2ynKb6pBU\njhO1qrNwj7I4d0ZMPa8xO6JFDv7WLz0CAQOjOTA3MAkGA1UdEwQCMAAwCwYDVR0P\nBAQDAgeAMB0GA1UdDgQWBBQiTjvWXxnyck2wUpWfEC7UTab/hjANBgkqhkiG9w0B\nAQsFAAOCAYEAt3/TnuC2ieDLBFx/QEme9OsiqX4wdfU1zBNnL6ECG5J9WXqS08p7\nqkBXV9mbPGwHy1nGhLy3BKgGHZj6+Wv19CKRwGNFkcweqJexzFxbYHyikBTL5n9o\nvL+A3M0PU2iZAyayKpY62TXTxwIDHDOTETTCtubqwnNHkoFYKRz7P075mYg1SJFe\n+cfssv0/IBvdZ8p34JB5hibAkKkZn9SSa6CAFmFG5L5ps9kXumJEti+HPU8fbBdA\nogoTFEQGzYIFNgu7IZ5/PQgNeSPxQFJqRMJYWkBSD/+uOCh3G5cJ2Oe+rwtR5BL3\nuqR6T7QVrRzzDWy0mzo2GYACilBYoGMiXXqxuZB5XHsNobAvZLVbn5wpPyOChvT+\nR5GssD2vxtyGKL++xi9z1x+Yu48RAd9wSNgF8ZOzoGnvDZAyOQlCV5CgwJvHKvI/\n2ONVNHPSXgVgj5ZBi+MXoDVKumEfABtovfwAgU2sXF3m7c7++1Zav5h+tNjmjJ3/\n1kFRhndoOxr4\n-----END CERTIFICATE-----";
38
+ export declare const OID_CUSTOM_EXTENSION_ORDER_REPORT = "1.3.6.1.3.8888.2";
39
+ export declare const OID_CUSTOM_EXTENSION_ORDER_REPORT_HARDWARE_CONTEXT = "1.3.6.1.3.8888.2.1";
40
+ export declare const OID_CUSTOM_EXTENSION_ORDER_REPORT_SIGNATURE_KEY_HASH = "1.3.6.1.3.8888.2.2";
41
+ export declare const OID_CUSTOM_EXTENSION_ORDER_REPORT_WORKLOAD_INFO_HASH = "1.3.6.1.3.8888.2.3";
42
+ export declare const OID_CUSTOM_EXTENSION_USER_DATA = "1.3.6.1.3.8888.2.4";
43
+ export declare const OID_AUTHORITY_INFORMATION_ACCESS_EXTENSION = "1.3.6.1.5.5.7.1.1";
44
+ export declare const OID_CRL_DISTRIBUTION_POINTS = "2.5.29.31";
45
+ export declare const OID_OCSP_ACCESS_METHOD = "1.3.6.1.5.5.7.48.1";
46
+ export declare const OID_OCSP_ISSUER_ACCESS_METHOD = "1.3.6.1.5.5.7.48.2";
47
+ export declare const OID_OCSP_NONCE = "1.3.6.1.5.5.7.48.1.2";
48
+ export declare const SUPERPROTOCOL_CA = "-----BEGIN CERTIFICATE-----\n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\nSUNBVEUtLS0tLQpNSUlFOGpDQ0JKaWdBd0lCQWdJVWZ3Nm44NU9Ob2FkQjh1TmVN\nd0ZtWS9iZWlRVXdDZ1lJS29aSXpqMEVBd0l3CmNERWlNQ0FHQTFVRUF3d1pTVzUw\nWld3Z1UwZFlJRkJEU3lCUWJHRjBabTl5YlNCRFFURWFNQmdHQTFVRUNnd1IKU1c1\nMFpXd2dRMjl5Y0c5eVlYUnBiMjR4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhK\naE1Rc3dDUVlEVlFRSQpEQUpEUVRFTE1Ba0dBMVVFQmhNQ1ZWTXdIaGNOTWpNd016\nQTVNVGN3TVRFMFdoY05NekF3TXpBNU1UY3dNVEUwCldqQndNU0l3SUFZRFZRUURE\nQmxKYm5SbGJDQlRSMWdnVUVOTElFTmxjblJwWm1sallYUmxNUm93R0FZRFZRUUsK\nREJGSmJuUmxiQ0JEYjNKd2IzSmhkR2x2YmpFVU1CSUdBMVVFQnd3TFUyRnVkR0Vn\nUTJ4aGNtRXhDekFKQmdOVgpCQWdNQWtOQk1Rc3dDUVlEVlFRR0V3SlZVekJaTUJN\nR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCRk83CmlveHJwNFBoOXNwTXE2\nbDRKc05YSVVCeE9jR21rREFXNDJrZ3NBOWwvS3ZFNkRJRmpyLzF3UTdMcjRQdUln\nUEsKV2F3aHBrUnJYaDZadk5uWFpCZWpnZ01PTUlJRENqQWZCZ05WSFNNRUdEQVdn\nQlNWYjEzTnZSdmg2VUJKeWRUMApNODRCVnd2ZVZEQnJCZ05WSFI4RVpEQmlNR0Nn\nWHFCY2hscG9kSFJ3Y3pvdkwyRndhUzUwY25WemRHVmtjMlZ5CmRtbGpaWE11YVc1\nMFpXd3VZMjl0TDNObmVDOWpaWEowYVdacFkyRjBhVzl1TDNZMEwzQmphMk55YkQ5\nallUMXcKYkdGMFptOXliU1psYm1OdlpHbHVaejFrWlhJd0hRWURWUjBPQkJZRUZI\nZ2FucEY0VXV2SmpCZ2VEQmgvM0xvbAoxU3dwTUE0R0ExVWREd0VCL3dRRUF3SUd3\nREFNQmdOVkhSTUJBZjhFQWpBQU1JSUNPd1lKS29aSWh2aE5BUTBCCkJJSUNMREND\nQWlnd0hnWUtLb1pJaHZoTkFRMEJBUVFRUDVwUHZoK0VwcVMxSkpRdGVXN0JrREND\nQVdVR0NpcUcKU0liNFRRRU5BUUl3Z2dGVk1CQUdDeXFHU0liNFRRRU5BUUlCQWdF\nSE1CQUdDeXFHU0liNFRRRU5BUUlDQWdFSgpNQkFHQ3lxR1NJYjRUUUVOQVFJREFn\nRURNQkFHQ3lxR1NJYjRUUUVOQVFJRUFnRURNQkVHQ3lxR1NJYjRUUUVOCkFRSUZB\nZ0lBL3pBUkJnc3Foa2lHK0UwQkRRRUNCZ0lDQVA4d0VBWUxLb1pJaHZoTkFRMEJB\nZ2NDQVFBd0VBWUwKS29aSWh2aE5BUTBCQWdnQ0FRQXdFQVlMS29aSWh2aE5BUTBC\nQWdrQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWdvQwpBUUF3RUFZTEtvWklodmhOQVEw\nQkFnc0NBUUF3RUFZTEtvWklodmhOQVEwQkFnd0NBUUF3RUFZTEtvWklodmhOCkFR\nMEJBZzBDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZzRDQVFBd0VBWUxLb1pJaHZoTkFR\nMEJBZzhDQVFBd0VBWUwKS29aSWh2aE5BUTBCQWhBQ0FRQXdFQVlMS29aSWh2aE5B\nUTBCQWhFQ0FRMHdId1lMS29aSWh2aE5BUTBCQWhJRQpFQWNKQXdQLy93QUFBQUFB\nQUFBQUFBQXdFQVlLS29aSWh2aE5BUTBCQXdRQ0FBQXdGQVlLS29aSWh2aE5BUTBC\nCkJBUUdNR0JxQUFBQU1BOEdDaXFHU0liNFRRRU5BUVVLQVFFd0hnWUtLb1pJaHZo\nTkFRMEJCZ1FRVnZnMnVWdHYKMU1rM0xTYU9mSjRWSkRCRUJnb3Foa2lHK0UwQkRR\nRUhNRFl3RUFZTEtvWklodmhOQVEwQkJ3RUJBZjh3RUFZTApLb1pJaHZoTkFRMEJC\nd0lCQWY4d0VBWUxLb1pJaHZoTkFRMEJCd01CQWY4d0NnWUlLb1pJemowRUF3SURT\nQUF3ClJRSWhBSWVacWV6bGxETEZjcEFYVmlrellqVVFvOEtGVllqY05SOU14TXFh\nMHRjaUFpQUgvcGYzZ3VKMEhpTVkKWUN4QTRFZGZWcGVBZ3p3WnEweEpuNlNRN2tV\nK3BBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJ\nRklDQVRFLS0tLS0KTUlJQ2xqQ0NBajJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5K\nMVBRenpnRlhDOTVVTUFvR0NDcUdTTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVs\ndWRHVnNJRk5IV0NCU2IyOTBJRU5CTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIz\nSndiM0poZEdsdmJqRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJn\nTlZCQWdNQWtOQk1Rc3cKQ1FZRFZRUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdN\nVEJhRncwek16QTFNakV4TURVd01UQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1Zz\nSUZOSFdDQlFRMHNnVUd4aGRHWnZjbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1Zz\nCklFTnZjbkJ2Y21GMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRF\nTE1Ba0dBMVVFQ0F3Q1EwRXgKQ3pBSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpq\nMENBUVlJS29aSXpqMERBUWNEUWdBRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3\nMkV5REdnVzVyWEN0eDJ0VlRMcTZoS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1U\nbEpsCmVUbWkyV1l6M3FPQnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAw\naWZPRHRKVlN2MUFiT1NjR3JEQlMKQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhS\nd2N6b3ZMMk5sY25ScFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFX\nNTBaV3d1WTI5dEwwbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZn\nUVVsVzlkCnpiMGI0ZWxBU2NuVTlEUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURB\nZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lE\nUndBd1JBSWdYc1ZraTB3K2k2VllHVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQx\nYWk1Y0NJQ1liMVNBbUQ1eGtmVFZwdm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBO\nKwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNB\nVEUtLS0tLQpNSUlDanpDQ0FqU2dBd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlR\nR3prbkJxd3dDZ1lJS29aSXpqMEVBd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3\nZ1UwZFlJRkp2YjNRZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNt\nRjBhVzl1TVJRd0VnWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNB\nd0NRMEV4Q3pBSgpCZ05WQkFZVEFsVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hE\nVFE1TVRJek1USXpOVGsxT1Zvd2FERWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZ\nSUZKdmIzUWdRMEV4R2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5\ndU1SUXdFZ1lEVlFRSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBF\neEN6QUpCZ05WQkFZVApBbFZUTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFR\nY0RRZ0FFQzZuRXdNRElZWk9qL2lQV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZK\nZlZua1k0dTNJamtEWVlMME14TzRtcXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IK\ndXpDQnVEQWZCZ05WSFNNRUdEQVdnQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NH\nckRCU0JnTlZIUjhFU3pCSgpNRWVnUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1s\nallYUmxjeTUwY25WemRHVmtjMlZ5ZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRH\nVnNVMGRZVW05dmRFTkJMbVJsY2pBZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3\nU1YKVXI5UUd6a25CcXd3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIv\nd1FJTUFZQkFmOENBUUV3Q2dZSQpLb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtS\nK1M5Q2lTRGNOb293THVQUkxzV0dmL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhv\nTXMrWG81by9zWDZPOVFXeEhSQXZaVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBD\nRVJUSUZJQ0FURS0tLS0tCgAwDQYJKoZIhvcNAQELBQADggEBAGHbT1NQEW0t5uYp\nmskVka8DDrgVEM8She2htuRXNeeTpaImsFWQhQeSqlK/yc3NH2/+RfGGu4UT/zgS\n4T/oLc8HosQFZxkvcESz1YKtSqHYhfuavlDuR6K0/RS6wy1dADvA6X3b57dJ81EP\nZ/dda6qpPxXBiwhpfcFJtpiP0tIYhS6LJgFnSAdEE9G1HwYUrCYsjQ2LCgBQDqYB\n9AWDmUBh8SSdRQzYJfmHG8LTXox/8mD9Hq8HPhzEzSFwu/Yy+KZX9uxEw0vPvmVI\nbalDQD+0bddS+Jvj4ELLmKRk/yX51Lqx6YYr0rSX7t9RaI9F9muzzQ4mWzWA6ief\nYwF1StA=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n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\nfR9Jbk3FLW/LY+BFJaQKnnGIIAAAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRob\nHB0eHwUAYg4AAC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlFOHpDQ0JK\naWdBd0lCQWdJVVFaT1NWSy8vQlZkVkJXeUIwaHM4dURoTkc2Z3dDZ1lJS29aSXpq\nMEVBd0l3CmNERWlNQ0FHQTFVRUF3d1pTVzUwWld3Z1UwZFlJRkJEU3lCUWJHRjBa\nbTl5YlNCRFFURWFNQmdHQTFVRUNnd1IKU1c1MFpXd2dRMjl5Y0c5eVlYUnBiMjR4\nRkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1Rc3dDUVlEVlFRSQpEQUpEUVRF\nTE1Ba0dBMVVFQmhNQ1ZWTXdIaGNOTWpVd056QTVNVFV3T1RBd1doY05Nekl3TnpB\nNU1UVXdPVEF3CldqQndNU0l3SUFZRFZRUUREQmxKYm5SbGJDQlRSMWdnVUVOTElF\nTmxjblJwWm1sallYUmxNUm93R0FZRFZRUUsKREJGSmJuUmxiQ0JEYjNKd2IzSmhk\nR2x2YmpFVU1CSUdBMVVFQnd3TFUyRnVkR0VnUTJ4aGNtRXhDekFKQmdOVgpCQWdN\nQWtOQk1Rc3dDUVlEVlFRR0V3SlZVekJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5\nQXdFSEEwSUFCRFFBCkZNa2lVR1Z4S2luMnpIODB2MkMvbXpGQ0N1MnV0VHBOdE1V\nTzhjMUJ6U1F1ZlZ0YjYyT2JFMUhOUVNvZmE4Q3IKdXVLeWJ0VHBRT3BaakZXQkFh\nS2pnZ01PTUlJRENqQWZCZ05WSFNNRUdEQVdnQlNWYjEzTnZSdmg2VUJKeWRUMApN\nODRCVnd2ZVZEQnJCZ05WSFI4RVpEQmlNR0NnWHFCY2hscG9kSFJ3Y3pvdkwyRndh\nUzUwY25WemRHVmtjMlZ5CmRtbGpaWE11YVc1MFpXd3VZMjl0TDNObmVDOWpaWEow\nYVdacFkyRjBhVzl1TDNZMEwzQmphMk55YkQ5allUMXcKYkdGMFptOXliU1psYm1O\ndlpHbHVaejFrWlhJd0hRWURWUjBPQkJZRUZPUHdhb25yYnpPZks0My8vZ3Y5M0Fm\nQgpiMGNZTUE0R0ExVWREd0VCL3dRRUF3SUd3REFNQmdOVkhSTUJBZjhFQWpBQU1J\nSUNPd1lKS29aSWh2aE5BUTBCCkJJSUNMRENDQWlnd0hnWUtLb1pJaHZoTkFRMEJB\nUVFRM3cvN014Q2Vwbkt2V2Q2WXhZb0VJVENDQVdVR0NpcUcKU0liNFRRRU5BUUl3\nZ2dGVk1CQUdDeXFHU0liNFRRRU5BUUlCQWdFTE1CQUdDeXFHU0liNFRRRU5BUUlD\nQWdFTApNQkFHQ3lxR1NJYjRUUUVOQVFJREFnRURNQkFHQ3lxR1NJYjRUUUVOQVFJ\nRUFnRURNQkVHQ3lxR1NJYjRUUUVOCkFRSUZBZ0lBL3pBUkJnc3Foa2lHK0UwQkRR\nRUNCZ0lDQVA4d0VBWUxLb1pJaHZoTkFRMEJBZ2NDQVFBd0VBWUwKS29aSWh2aE5B\nUTBCQWdnQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWdrQ0FRQXdFQVlMS29aSWh2aE5B\nUTBCQWdvQwpBUUF3RUFZTEtvWklodmhOQVEwQkFnc0NBUUF3RUFZTEtvWklodmhO\nQVEwQkFnd0NBUUF3RUFZTEtvWklodmhOCkFRMEJBZzBDQVFBd0VBWUxLb1pJaHZo\nTkFRMEJBZzRDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZzhDQVFBd0VBWUwKS29aSWh2\naE5BUTBCQWhBQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWhFQ0FRMHdId1lMS29aSWh2\naE5BUTBCQWhJRQpFQXNMQXdQLy93QUFBQUFBQUFBQUFBQXdFQVlLS29aSWh2aE5B\nUTBCQXdRQ0FBQXdGQVlLS29aSWh2aE5BUTBCCkJBUUdNR0JxQUFBQU1BOEdDaXFH\nU0liNFRRRU5BUVVLQVFFd0hnWUtLb1pJaHZoTkFRMEJCZ1FRcDZtY096M0EKdDRB\nSVRmdk84R1Y3cHpCRUJnb3Foa2lHK0UwQkRRRUhNRFl3RUFZTEtvWklodmhOQVEw\nQkJ3RUJBZjh3RUFZTApLb1pJaHZoTkFRMEJCd0lCQWY4d0VBWUxLb1pJaHZoTkFR\nMEJCd01CQWY4d0NnWUlLb1pJemowRUF3SURTUUF3ClJnSWhBTEVtR1U2VldkdG5n\nYTZiTG5yaksrWEdWczlMVERSRkZURTRpcy9qU05tQkFpRUExY21KNUpkV0VIYlEK\nL2dyWVJ2L3c4MytTQmpidTJKQWcxR0dJNTJmSjFUUT0KLS0tLS1FTkQgQ0VSVElG\nSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2xqQ0NB\najJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5KMVBRenpnRlhDOTVVTUFvR0NDcUdT\nTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVsdWRHVnNJRk5IV0NCU2IyOTBJRU5C\nTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIzSndiM0poZEdsdmJqRVVNQklHQTFV\nRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1Rc3cKQ1FZRFZR\nUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdNVEJhRncwek16QTFNakV4TURVd01U\nQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1ZzSUZOSFdDQlFRMHNnVUd4aGRHWnZj\nbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzCklFTnZjbkJ2Y21GMGFXOXVNUlF3\nRWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXgKQ3pB\nSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdB\nRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3MkV5REdnVzVyWEN0eDJ0VlRMcTZo\nS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1UbEpsCmVUbWkyV1l6M3FPQnV6Q0J1\nREFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlMK\nQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJs\nY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwwbHVkR1ZzVTBk\nWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVsVzlkCnpiMGI0ZWxBU2NuVTlE\nUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1B\nWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdYc1ZraTB3K2k2VllH\nVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQxYWk1Y0NJQ1liMVNBbUQ1eGtmVFZw\ndm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBOKwotLS0tLUVORCBDRVJUSUZJQ0FU\nRS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDanpDQ0FqU2dB\nd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJS29aSXpqMEVB\nd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNRZ1EwRXhHakFZ\nQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0\nVFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpCZ05WQkFZVEFs\nVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpOVGsxT1Zvd2FE\nRWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZC\nQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUw\nWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZVApBbFZUTUZr\nd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdNRElZWk9qL2lQ\nV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtEWVlMME14TzRt\ncXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05WSFNNRUdEQVdn\nQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhFU3pCSgpNRWVn\nUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25WemRHVmtjMlZ5\nZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRFTkJMbVJsY2pB\nZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25CcXd3RGdZRFZS\nMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUV3Q2dZSQpL\nb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293THVQUkxzV0dm\nL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZPOVFXeEhSQXZa\nVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgAwDQYJ\nKoZIhvcNAQELBQADggEBADk76T9z80TGctAh/LvBX8LMCLZVb/F2nw7mQy9Q7N1w\n6fo7TRV0XV6/yvctv3eB0oly0ybcuBZmARkokKAy47Sl6EhO16t2/mpp3CYx7+5A\n+Rx5Mupwtziwa6IXfPa3Ml+e99HMXv8CBSbEP6NiMvxNJPXbncjdWI6T+EWYnB9O\nn7HcKweXpk3sPBPvm7Tyq0n3Q7+3rM5JaPr6O4+ksVG/TepqHoYF+KG9AdJyzv6v\n69HeBsvyBfQ1BhX8vqAKJDxbML0eYzDWZ6tDqMuJ/CdqTGJ97d0YISTJ2eRTmXiP\njm1g0H4p0FUGuDItBX7q+mkfWkTBgl1fR0ovP0YaWvk=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIU9zCCFJ2gAwIBAgIQalc8WjxqJTTVPaingMIxCzAKBggqhkjOPQQDAjB2MSIw\nIAYDVQQDExlTdXBlclByb3RvY29sIFRFRSBSb290IENBMQswCQYDVQQGEwJVUzEL\nMAkGA1UECBMCTlkxETAPBgNVBAcTCE5ldyBZb3JrMRYwFAYDVQQKEw1TdXBlclBy\nb3RvY29sMQswCQYDVQQLEwJJVDAeFw0yNTA3MjExNDU2MjNaFw0zNTA4MDEwMDAw\nMDBaMHYxIjAgBgNVBAMTGVN1cGVyUHJvdG9jb2wgVEVFIFJvb3QgQ0ExCzAJBgNV\nBAYTAlVTMQswCQYDVQQIEwJOWTERMA8GA1UEBxMITmV3IFlvcmsxFjAUBgNVBAoT\nDVN1cGVyUHJvdG9jb2wxCzAJBgNVBAsTAklUMFYwEAYHKoZIzj0CAQYFK4EEAAoD\nQgAEcSLjZBu+UoiuppY25rr77/iOeGC/PTrfDxvdgZVxEjdPMZLteyr7RVCXTOC4\nSyqAWpls0hwpq/uiozkz8Lirn6OCEw4wghMKMA8GA1UdEwEB/wQFMAMBAf8wDgYD\nVR0PAQH/BAQDAgKkMB8GA1UdIwQYMBaAFEGXfB2GhA+ajUWA8F9dN5w9CwSSMB0G\nA1UdDgQWBBRBl3wdhoQPmo1FgPBfXTecPQsEkjAUBggrBgEDxTgBAQQIc2d4LWRj\nYXAwghKPBgsGCSqGSIb4TYo5BgSCEn4DAAIAAAAAAAsAEACTmnIz95xMqZQKDbOV\nfwYHwuAeEM7bIyMk8VaVVsIMaAAAAAALEA8O//8AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAOcAAAAAAAAAg090avZ3FKII\nEzhH7K4PGXPW5VTSomOCmLCnduwrcNUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAADTqfKiANP6A8gnpfND4RC97piHrKl9gOTqwWHGua5edAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAABZt5Bjk2qaoB9n1ypfgAKYfKmQ66l3bkA9OpEGY3IL0AAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKEAAAaKO6ieLwSeouEySO5KL1fDuAIllB\nuOEBLQtYDMgLUJLuwbsbimEqwlyoGrXdrA/hC7WFI71Me568kMoAz7kB77dAjZv2\nT83/USoIQTTLTZ+kcZqLMigsqNeJHh5uBLsF5uqzPNwBDeJF1nIi/MaV+qcGve37\nEu8XoSCGSOCjb2gLEA8O//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAVAAAAAAAAAOcAAAAAAAAAeP6M/QEJWg8Qiv9cQGJLk2EtbCi3\nPhqNKBecnd8OBoYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIxPV3XX\nllA+lhN/d8aKgpoAVqyN7XAUCwgbCUSQxXv/AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQALAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANWq0gba\nZ0iNLGHsRl9vWJK1s51EREhaa5246jLZcL3NAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAArkN01FJ5vTX8xsD4zCyuu9jkUA276SlrfE9PttOJ2vf2ljC3d\n1oyCUyIPv+8dfR9Jbk3FLW/LY+BFJaQKnnGIIAAAAQIDBAUGBwgJCgsMDQ4PEBES\nExQVFhcYGRobHB0eHwUAYg4AAC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpN\nSUlFOHpDQ0JKaWdBd0lCQWdJVVFaT1NWSy8vQlZkVkJXeUIwaHM4dURoTkc2Z3dD\nZ1lJS29aSXpqMEVBd0l3CmNERWlNQ0FHQTFVRUF3d1pTVzUwWld3Z1UwZFlJRkJE\nU3lCUWJHRjBabTl5YlNCRFFURWFNQmdHQTFVRUNnd1IKU1c1MFpXd2dRMjl5Y0c5\neVlYUnBiMjR4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1Rc3dDUVlEVlFR\nSQpEQUpEUVRFTE1Ba0dBMVVFQmhNQ1ZWTXdIaGNOTWpVd056QTVNVFV3T1RBd1do\nY05Nekl3TnpBNU1UVXdPVEF3CldqQndNU0l3SUFZRFZRUUREQmxKYm5SbGJDQlRS\nMWdnVUVOTElFTmxjblJwWm1sallYUmxNUm93R0FZRFZRUUsKREJGSmJuUmxiQ0JE\nYjNKd2IzSmhkR2x2YmpFVU1CSUdBMVVFQnd3TFUyRnVkR0VnUTJ4aGNtRXhDekFK\nQmdOVgpCQWdNQWtOQk1Rc3dDUVlEVlFRR0V3SlZVekJaTUJNR0J5cUdTTTQ5QWdF\nR0NDcUdTTTQ5QXdFSEEwSUFCRFFBCkZNa2lVR1Z4S2luMnpIODB2MkMvbXpGQ0N1\nMnV0VHBOdE1VTzhjMUJ6U1F1ZlZ0YjYyT2JFMUhOUVNvZmE4Q3IKdXVLeWJ0VHBR\nT3BaakZXQkFhS2pnZ01PTUlJRENqQWZCZ05WSFNNRUdEQVdnQlNWYjEzTnZSdmg2\nVUJKeWRUMApNODRCVnd2ZVZEQnJCZ05WSFI4RVpEQmlNR0NnWHFCY2hscG9kSFJ3\nY3pvdkwyRndhUzUwY25WemRHVmtjMlZ5CmRtbGpaWE11YVc1MFpXd3VZMjl0TDNO\nbmVDOWpaWEowYVdacFkyRjBhVzl1TDNZMEwzQmphMk55YkQ5allUMXcKYkdGMFpt\nOXliU1psYm1OdlpHbHVaejFrWlhJd0hRWURWUjBPQkJZRUZPUHdhb25yYnpPZks0\nMy8vZ3Y5M0FmQgpiMGNZTUE0R0ExVWREd0VCL3dRRUF3SUd3REFNQmdOVkhSTUJB\nZjhFQWpBQU1JSUNPd1lKS29aSWh2aE5BUTBCCkJJSUNMRENDQWlnd0hnWUtLb1pJ\naHZoTkFRMEJBUVFRM3cvN014Q2Vwbkt2V2Q2WXhZb0VJVENDQVdVR0NpcUcKU0li\nNFRRRU5BUUl3Z2dGVk1CQUdDeXFHU0liNFRRRU5BUUlCQWdFTE1CQUdDeXFHU0li\nNFRRRU5BUUlDQWdFTApNQkFHQ3lxR1NJYjRUUUVOQVFJREFnRURNQkFHQ3lxR1NJ\nYjRUUUVOQVFJRUFnRURNQkVHQ3lxR1NJYjRUUUVOCkFRSUZBZ0lBL3pBUkJnc3Fo\na2lHK0UwQkRRRUNCZ0lDQVA4d0VBWUxLb1pJaHZoTkFRMEJBZ2NDQVFBd0VBWUwK\nS29aSWh2aE5BUTBCQWdnQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWdrQ0FRQXdFQVlM\nS29aSWh2aE5BUTBCQWdvQwpBUUF3RUFZTEtvWklodmhOQVEwQkFnc0NBUUF3RUFZ\nTEtvWklodmhOQVEwQkFnd0NBUUF3RUFZTEtvWklodmhOCkFRMEJBZzBDQVFBd0VB\nWUxLb1pJaHZoTkFRMEJBZzRDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZzhDQVFBd0VB\nWUwKS29aSWh2aE5BUTBCQWhBQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWhFQ0FRMHdI\nd1lMS29aSWh2aE5BUTBCQWhJRQpFQXNMQXdQLy93QUFBQUFBQUFBQUFBQXdFQVlL\nS29aSWh2aE5BUTBCQXdRQ0FBQXdGQVlLS29aSWh2aE5BUTBCCkJBUUdNR0JxQUFB\nQU1BOEdDaXFHU0liNFRRRU5BUVVLQVFFd0hnWUtLb1pJaHZoTkFRMEJCZ1FRcDZt\nY096M0EKdDRBSVRmdk84R1Y3cHpCRUJnb3Foa2lHK0UwQkRRRUhNRFl3RUFZTEtv\nWklodmhOQVEwQkJ3RUJBZjh3RUFZTApLb1pJaHZoTkFRMEJCd0lCQWY4d0VBWUxL\nb1pJaHZoTkFRMEJCd01CQWY4d0NnWUlLb1pJemowRUF3SURTUUF3ClJnSWhBTEVt\nR1U2VldkdG5nYTZiTG5yaksrWEdWczlMVERSRkZURTRpcy9qU05tQkFpRUExY21K\nNUpkV0VIYlEKL2dyWVJ2L3c4MytTQmpidTJKQWcxR0dJNTJmSjFUUT0KLS0tLS1F\nTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0K\nTUlJQ2xqQ0NBajJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5KMVBRenpnRlhDOTVV\nTUFvR0NDcUdTTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVsdWRHVnNJRk5IV0NC\nU2IyOTBJRU5CTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIzSndiM0poZEdsdmJq\nRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1R\nc3cKQ1FZRFZRUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdNVEJhRncwek16QTFN\nakV4TURVd01UQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1ZzSUZOSFdDQlFRMHNn\nVUd4aGRHWnZjbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzCklFTnZjbkJ2Y21G\nMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3\nQ1EwRXgKQ3pBSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpq\nMERBUWNEUWdBRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3MkV5REdnVzVyWEN0\neDJ0VlRMcTZoS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1UbEpsCmVUbWkyV1l6\nM3FPQnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFi\nT1NjR3JEQlMKQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25S\ncFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEww\nbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVsVzlkCnpiMGI0\nZWxBU2NuVTlEUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRF\nd0VCL3dRSU1BWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdYc1Zr\naTB3K2k2VllHVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQxYWk1Y0NJQ1liMVNB\nbUQ1eGtmVFZwdm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBOKwotLS0tLUVORCBD\nRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlD\nanpDQ0FqU2dBd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJ\nS29aSXpqMEVBd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNR\nZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0Vn\nWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpC\nZ05WQkFZVEFsVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpO\nVGsxT1Zvd2FERWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4\nR2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFR\nSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZ\nVApBbFZUTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdN\nRElZWk9qL2lQV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtE\nWVlMME14TzRtcXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05W\nSFNNRUdEQVdnQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhF\nU3pCSgpNRWVnUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25W\nemRHVmtjMlZ5ZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRF\nTkJMbVJsY2pBZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25C\ncXd3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENB\nUUV3Q2dZSQpLb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293\nTHVQUkxzV0dmL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZP\nOVFXeEhSQXZaVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0t\nLS0tCgAwCgYIKoZIzj0EAwIDSAAwRQIgDTaE8oMgfCSqhbOeqnn6FD2ypLS4arzW\nth/G0VQ3e40CIQCEcpjpdAP63KCipYLE1UEmHJOBOvcKNjevt/2O9DkwXA==\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n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\n8GsvLa47wxM2A3uBCtoioBO+IAAAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRob\nHB0eHwUAYg4AAC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlFOHpDQ0JK\naWdBd0lCQWdJVVFaT1NWSy8vQlZkVkJXeUIwaHM4dURoTkc2Z3dDZ1lJS29aSXpq\nMEVBd0l3CmNERWlNQ0FHQTFVRUF3d1pTVzUwWld3Z1UwZFlJRkJEU3lCUWJHRjBa\nbTl5YlNCRFFURWFNQmdHQTFVRUNnd1IKU1c1MFpXd2dRMjl5Y0c5eVlYUnBiMjR4\nRkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1Rc3dDUVlEVlFRSQpEQUpEUVRF\nTE1Ba0dBMVVFQmhNQ1ZWTXdIaGNOTWpVd056QTVNVFV3T1RBd1doY05Nekl3TnpB\nNU1UVXdPVEF3CldqQndNU0l3SUFZRFZRUUREQmxKYm5SbGJDQlRSMWdnVUVOTElF\nTmxjblJwWm1sallYUmxNUm93R0FZRFZRUUsKREJGSmJuUmxiQ0JEYjNKd2IzSmhk\nR2x2YmpFVU1CSUdBMVVFQnd3TFUyRnVkR0VnUTJ4aGNtRXhDekFKQmdOVgpCQWdN\nQWtOQk1Rc3dDUVlEVlFRR0V3SlZVekJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5\nQXdFSEEwSUFCRFFBCkZNa2lVR1Z4S2luMnpIODB2MkMvbXpGQ0N1MnV0VHBOdE1V\nTzhjMUJ6U1F1ZlZ0YjYyT2JFMUhOUVNvZmE4Q3IKdXVLeWJ0VHBRT3BaakZXQkFh\nS2pnZ01PTUlJRENqQWZCZ05WSFNNRUdEQVdnQlNWYjEzTnZSdmg2VUJKeWRUMApN\nODRCVnd2ZVZEQnJCZ05WSFI4RVpEQmlNR0NnWHFCY2hscG9kSFJ3Y3pvdkwyRndh\nUzUwY25WemRHVmtjMlZ5CmRtbGpaWE11YVc1MFpXd3VZMjl0TDNObmVDOWpaWEow\nYVdacFkyRjBhVzl1TDNZMEwzQmphMk55YkQ5allUMXcKYkdGMFptOXliU1psYm1O\ndlpHbHVaejFrWlhJd0hRWURWUjBPQkJZRUZPUHdhb25yYnpPZks0My8vZ3Y5M0Fm\nQgpiMGNZTUE0R0ExVWREd0VCL3dRRUF3SUd3REFNQmdOVkhSTUJBZjhFQWpBQU1J\nSUNPd1lKS29aSWh2aE5BUTBCCkJJSUNMRENDQWlnd0hnWUtLb1pJaHZoTkFRMEJB\nUVFRM3cvN014Q2Vwbkt2V2Q2WXhZb0VJVENDQVdVR0NpcUcKU0liNFRRRU5BUUl3\nZ2dGVk1CQUdDeXFHU0liNFRRRU5BUUlCQWdFTE1CQUdDeXFHU0liNFRRRU5BUUlD\nQWdFTApNQkFHQ3lxR1NJYjRUUUVOQVFJREFnRURNQkFHQ3lxR1NJYjRUUUVOQVFJ\nRUFnRURNQkVHQ3lxR1NJYjRUUUVOCkFRSUZBZ0lBL3pBUkJnc3Foa2lHK0UwQkRR\nRUNCZ0lDQVA4d0VBWUxLb1pJaHZoTkFRMEJBZ2NDQVFBd0VBWUwKS29aSWh2aE5B\nUTBCQWdnQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWdrQ0FRQXdFQVlMS29aSWh2aE5B\nUTBCQWdvQwpBUUF3RUFZTEtvWklodmhOQVEwQkFnc0NBUUF3RUFZTEtvWklodmhO\nQVEwQkFnd0NBUUF3RUFZTEtvWklodmhOCkFRMEJBZzBDQVFBd0VBWUxLb1pJaHZo\nTkFRMEJBZzRDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZzhDQVFBd0VBWUwKS29aSWh2\naE5BUTBCQWhBQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWhFQ0FRMHdId1lMS29aSWh2\naE5BUTBCQWhJRQpFQXNMQXdQLy93QUFBQUFBQUFBQUFBQXdFQVlLS29aSWh2aE5B\nUTBCQXdRQ0FBQXdGQVlLS29aSWh2aE5BUTBCCkJBUUdNR0JxQUFBQU1BOEdDaXFH\nU0liNFRRRU5BUVVLQVFFd0hnWUtLb1pJaHZoTkFRMEJCZ1FRcDZtY096M0EKdDRB\nSVRmdk84R1Y3cHpCRUJnb3Foa2lHK0UwQkRRRUhNRFl3RUFZTEtvWklodmhOQVEw\nQkJ3RUJBZjh3RUFZTApLb1pJaHZoTkFRMEJCd0lCQWY4d0VBWUxLb1pJaHZoTkFR\nMEJCd01CQWY4d0NnWUlLb1pJemowRUF3SURTUUF3ClJnSWhBTEVtR1U2VldkdG5n\nYTZiTG5yaksrWEdWczlMVERSRkZURTRpcy9qU05tQkFpRUExY21KNUpkV0VIYlEK\nL2dyWVJ2L3c4MytTQmpidTJKQWcxR0dJNTJmSjFUUT0KLS0tLS1FTkQgQ0VSVElG\nSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2xqQ0NB\najJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5KMVBRenpnRlhDOTVVTUFvR0NDcUdT\nTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVsdWRHVnNJRk5IV0NCU2IyOTBJRU5C\nTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIzSndiM0poZEdsdmJqRVVNQklHQTFV\nRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1Rc3cKQ1FZRFZR\nUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdNVEJhRncwek16QTFNakV4TURVd01U\nQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1ZzSUZOSFdDQlFRMHNnVUd4aGRHWnZj\nbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzCklFTnZjbkJ2Y21GMGFXOXVNUlF3\nRWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3Q1EwRXgKQ3pB\nSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdB\nRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3MkV5REdnVzVyWEN0eDJ0VlRMcTZo\nS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1UbEpsCmVUbWkyV1l6M3FPQnV6Q0J1\nREFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFiT1NjR3JEQlMK\nQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25ScFptbGpZWFJs\nY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEwwbHVkR1ZzVTBk\nWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVsVzlkCnpiMGI0ZWxBU2NuVTlE\nUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1B\nWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdYc1ZraTB3K2k2VllH\nVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQxYWk1Y0NJQ1liMVNBbUQ1eGtmVFZw\ndm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBOKwotLS0tLUVORCBDRVJUSUZJQ0FU\nRS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDanpDQ0FqU2dB\nd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJS29aSXpqMEVB\nd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNRZ1EwRXhHakFZ\nQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0VnWURWUVFIREF0\nVFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpCZ05WQkFZVEFs\nVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpOVGsxT1Zvd2FE\nRWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4R2pBWUJnTlZC\nQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFRSERBdFRZVzUw\nWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZVApBbFZUTUZr\nd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdNRElZWk9qL2lQ\nV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtEWVlMME14TzRt\ncXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05WSFNNRUdEQVdn\nQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhFU3pCSgpNRWVn\nUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25WemRHVmtjMlZ5\nZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRFTkJMbVJsY2pB\nZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25CcXd3RGdZRFZS\nMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENBUUV3Q2dZSQpL\nb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293THVQUkxzV0dm\nL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZPOVFXeEhSQXZa\nVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgAwDQYJ\nKoZIhvcNAQELBQADggEBAKkOQGvOjQQ7w2BeSxqLXo5vLLESx3ksJMRVBF6UMlHg\nmYwC6cuWeZxSaJBcBn+XR1n03BL5XteH34GowIw4/chAPDOMtLDkLQiObCQxhvlA\nqQNhJAP1B1bdYaHMPunc1zVq0G3MeHPjKEnLGQgX+VeIHxJOwpZ1IMGuHJcjYoSK\nEaHjNdoGCSllzGTGUBmda6qHNwgz+X8IZ8AktDH/gQxPHmmuoWWMchz2Bg2cSBLX\n1bLkn2WBr3rl5HgEwiestcaNC8vllrMUfd16HZSuMypr13NLYEQUGoVSMv6QJRAl\nfuKNqVE955sVTjAUfJu0fK/lYhoJEXhBXWdvamurRhQ=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIU+DCCFJ2gAwIBAgIQRbz9C1DdJRlVO8NiDEpfyjAKBggqhkjOPQQDAjB2MSIw\nIAYDVQQDExlTdXBlclByb3RvY29sIFRFRSBSb290IENBMQswCQYDVQQGEwJVUzEL\nMAkGA1UECBMCTlkxETAPBgNVBAcTCE5ldyBZb3JrMRYwFAYDVQQKEw1TdXBlclBy\nb3RvY29sMQswCQYDVQQLEwJJVDAeFw0yNjAxMjcxNjQ3MzZaFw0zNTA4MDEwMDAw\nMDBaMHYxIjAgBgNVBAMTGVN1cGVyUHJvdG9jb2wgVEVFIFJvb3QgQ0ExCzAJBgNV\nBAYTAlVTMQswCQYDVQQIEwJOWTERMA8GA1UEBxMITmV3IFlvcmsxFjAUBgNVBAoT\nDVN1cGVyUHJvdG9jb2wxCzAJBgNVBAsTAklUMFYwEAYHKoZIzj0CAQYFK4EEAAoD\nQgAEZ8KD9tyLV88CeWfb4OD0bPw29PoCe56JAAEizCE4TEUJCp5T8/ZAPk3yidKE\njgKvZoOWCr7fvLoYm+fKo8dbIqOCEw4wghMKMA8GA1UdEwEB/wQFMAMBAf8wDgYD\nVR0PAQH/BAQDAgKkMB8GA1UdIwQYMBaAFHuJOB4jlKmDy39BxxZ2Ab1yQ2f4MB0G\nA1UdDgQWBBR7iTgeI5Spg8t/QccWdgG9ckNn+DAUBggrBgEDxTgBAQQIc2d4LWRj\nYXAwghKPBgsGCSqGSIb4TYo5BgSCEn4DAAIAAAAAAAsAEACTmnIz95xMqZQKDbOV\nfwYHwuAeEM7bIyMk8VaVVsIMaAAAAAALEA8O//8AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAOcAAAAAAAAAg090avZ3FKII\nEzhH7K4PGXPW5VTSomOCmLCnduwrcNUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAADTqfKiANP6A8gnpfND4RC97piHrKl9gOTqwWHGua5edAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAACqHRvGLw/OscC7fDHwP91HqU/m9hO3OgvHsxT19gs5rAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKEAAAoA0mYNwFZN0ZW5PnETOGILkP3Rc2\nSAt6CnZEumjJ2U+101xh4i81AxkLzsTnRjAGiM9Fgti/zHGDQFRN8Luud7dAjZv2\nT83/USoIQTTLTZ+kcZqLMigsqNeJHh5uBLsF5uqzPNwBDeJF1nIi/MaV+qcGve37\nEu8XoSCGSOCjb2gLEA8O//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAVAAAAAAAAAOcAAAAAAAAAeP6M/QEJWg8Qiv9cQGJLk2EtbCi3\nPhqNKBecnd8OBoYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIxPV3XX\nllA+lhN/d8aKgpoAVqyN7XAUCwgbCUSQxXv/AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQALAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANWq0gba\nZ0iNLGHsRl9vWJK1s51EREhaa5246jLZcL3NAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAA3fXcIoELQsMOS5WsIpabpR3dqI698Zc2N9WDpDbs1ms2RRbMd\n3x1b/40tUiZT8GsvLa47wxM2A3uBCtoioBO+IAAAAQIDBAUGBwgJCgsMDQ4PEBES\nExQVFhcYGRobHB0eHwUAYg4AAC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpN\nSUlFOHpDQ0JKaWdBd0lCQWdJVVFaT1NWSy8vQlZkVkJXeUIwaHM4dURoTkc2Z3dD\nZ1lJS29aSXpqMEVBd0l3CmNERWlNQ0FHQTFVRUF3d1pTVzUwWld3Z1UwZFlJRkJE\nU3lCUWJHRjBabTl5YlNCRFFURWFNQmdHQTFVRUNnd1IKU1c1MFpXd2dRMjl5Y0c5\neVlYUnBiMjR4RkRBU0JnTlZCQWNNQzFOaGJuUmhJRU5zWVhKaE1Rc3dDUVlEVlFR\nSQpEQUpEUVRFTE1Ba0dBMVVFQmhNQ1ZWTXdIaGNOTWpVd056QTVNVFV3T1RBd1do\nY05Nekl3TnpBNU1UVXdPVEF3CldqQndNU0l3SUFZRFZRUUREQmxKYm5SbGJDQlRS\nMWdnVUVOTElFTmxjblJwWm1sallYUmxNUm93R0FZRFZRUUsKREJGSmJuUmxiQ0JE\nYjNKd2IzSmhkR2x2YmpFVU1CSUdBMVVFQnd3TFUyRnVkR0VnUTJ4aGNtRXhDekFK\nQmdOVgpCQWdNQWtOQk1Rc3dDUVlEVlFRR0V3SlZVekJaTUJNR0J5cUdTTTQ5QWdF\nR0NDcUdTTTQ5QXdFSEEwSUFCRFFBCkZNa2lVR1Z4S2luMnpIODB2MkMvbXpGQ0N1\nMnV0VHBOdE1VTzhjMUJ6U1F1ZlZ0YjYyT2JFMUhOUVNvZmE4Q3IKdXVLeWJ0VHBR\nT3BaakZXQkFhS2pnZ01PTUlJRENqQWZCZ05WSFNNRUdEQVdnQlNWYjEzTnZSdmg2\nVUJKeWRUMApNODRCVnd2ZVZEQnJCZ05WSFI4RVpEQmlNR0NnWHFCY2hscG9kSFJ3\nY3pvdkwyRndhUzUwY25WemRHVmtjMlZ5CmRtbGpaWE11YVc1MFpXd3VZMjl0TDNO\nbmVDOWpaWEowYVdacFkyRjBhVzl1TDNZMEwzQmphMk55YkQ5allUMXcKYkdGMFpt\nOXliU1psYm1OdlpHbHVaejFrWlhJd0hRWURWUjBPQkJZRUZPUHdhb25yYnpPZks0\nMy8vZ3Y5M0FmQgpiMGNZTUE0R0ExVWREd0VCL3dRRUF3SUd3REFNQmdOVkhSTUJB\nZjhFQWpBQU1JSUNPd1lKS29aSWh2aE5BUTBCCkJJSUNMRENDQWlnd0hnWUtLb1pJ\naHZoTkFRMEJBUVFRM3cvN014Q2Vwbkt2V2Q2WXhZb0VJVENDQVdVR0NpcUcKU0li\nNFRRRU5BUUl3Z2dGVk1CQUdDeXFHU0liNFRRRU5BUUlCQWdFTE1CQUdDeXFHU0li\nNFRRRU5BUUlDQWdFTApNQkFHQ3lxR1NJYjRUUUVOQVFJREFnRURNQkFHQ3lxR1NJ\nYjRUUUVOQVFJRUFnRURNQkVHQ3lxR1NJYjRUUUVOCkFRSUZBZ0lBL3pBUkJnc3Fo\na2lHK0UwQkRRRUNCZ0lDQVA4d0VBWUxLb1pJaHZoTkFRMEJBZ2NDQVFBd0VBWUwK\nS29aSWh2aE5BUTBCQWdnQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWdrQ0FRQXdFQVlM\nS29aSWh2aE5BUTBCQWdvQwpBUUF3RUFZTEtvWklodmhOQVEwQkFnc0NBUUF3RUFZ\nTEtvWklodmhOQVEwQkFnd0NBUUF3RUFZTEtvWklodmhOCkFRMEJBZzBDQVFBd0VB\nWUxLb1pJaHZoTkFRMEJBZzRDQVFBd0VBWUxLb1pJaHZoTkFRMEJBZzhDQVFBd0VB\nWUwKS29aSWh2aE5BUTBCQWhBQ0FRQXdFQVlMS29aSWh2aE5BUTBCQWhFQ0FRMHdI\nd1lMS29aSWh2aE5BUTBCQWhJRQpFQXNMQXdQLy93QUFBQUFBQUFBQUFBQXdFQVlL\nS29aSWh2aE5BUTBCQXdRQ0FBQXdGQVlLS29aSWh2aE5BUTBCCkJBUUdNR0JxQUFB\nQU1BOEdDaXFHU0liNFRRRU5BUVVLQVFFd0hnWUtLb1pJaHZoTkFRMEJCZ1FRcDZt\nY096M0EKdDRBSVRmdk84R1Y3cHpCRUJnb3Foa2lHK0UwQkRRRUhNRFl3RUFZTEtv\nWklodmhOQVEwQkJ3RUJBZjh3RUFZTApLb1pJaHZoTkFRMEJCd0lCQWY4d0VBWUxL\nb1pJaHZoTkFRMEJCd01CQWY4d0NnWUlLb1pJemowRUF3SURTUUF3ClJnSWhBTEVt\nR1U2VldkdG5nYTZiTG5yaksrWEdWczlMVERSRkZURTRpcy9qU05tQkFpRUExY21K\nNUpkV0VIYlEKL2dyWVJ2L3c4MytTQmpidTJKQWcxR0dJNTJmSjFUUT0KLS0tLS1F\nTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0K\nTUlJQ2xqQ0NBajJnQXdJQkFnSVZBSlZ2WGMyOUcrSHBRRW5KMVBRenpnRlhDOTVV\nTUFvR0NDcUdTTTQ5QkFNQwpNR2d4R2pBWUJnTlZCQU1NRVVsdWRHVnNJRk5IV0NC\nU2IyOTBJRU5CTVJvd0dBWURWUVFLREJGSmJuUmxiQ0JECmIzSndiM0poZEdsdmJq\nRVVNQklHQTFVRUJ3d0xVMkZ1ZEdFZ1EyeGhjbUV4Q3pBSkJnTlZCQWdNQWtOQk1R\nc3cKQ1FZRFZRUUdFd0pWVXpBZUZ3MHhPREExTWpFeE1EVXdNVEJhRncwek16QTFN\nakV4TURVd01UQmFNSEF4SWpBZwpCZ05WQkFNTUdVbHVkR1ZzSUZOSFdDQlFRMHNn\nVUd4aGRHWnZjbTBnUTBFeEdqQVlCZ05WQkFvTUVVbHVkR1ZzCklFTnZjbkJ2Y21G\nMGFXOXVNUlF3RWdZRFZRUUhEQXRUWVc1MFlTQkRiR0Z5WVRFTE1Ba0dBMVVFQ0F3\nQ1EwRXgKQ3pBSkJnTlZCQVlUQWxWVE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpq\nMERBUWNEUWdBRU5TQi83dDIxbFhTTwoyQ3V6cHh3NzRlSkI3MkV5REdnVzVyWEN0\neDJ0VlRMcTZoS2s2eitVaVJaQ25xUjdwc092Z3FGZVN4bG1UbEpsCmVUbWkyV1l6\nM3FPQnV6Q0J1REFmQmdOVkhTTUVHREFXZ0JRaVpReldXcDAwaWZPRHRKVlN2MUFi\nT1NjR3JEQlMKQmdOVkhSOEVTekJKTUVlZ1JhQkRoa0ZvZEhSd2N6b3ZMMk5sY25S\ncFptbGpZWFJsY3k1MGNuVnpkR1ZrYzJWeQpkbWxqWlhNdWFXNTBaV3d1WTI5dEww\nbHVkR1ZzVTBkWVVtOXZkRU5CTG1SbGNqQWRCZ05WSFE0RUZnUVVsVzlkCnpiMGI0\nZWxBU2NuVTlEUE9BVmNMM2xRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRF\nd0VCL3dRSU1BWUIKQWY4Q0FRQXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdYc1Zr\naTB3K2k2VllHVzNVRi8yMnVhWGUwWUpEajFVZQpuQStUakQxYWk1Y0NJQ1liMVNB\nbUQ1eGtmVFZwdm80VW95aVNZeHJEV0xtVVI0Q0k5Tkt5ZlBOKwotLS0tLUVORCBD\nRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlD\nanpDQ0FqU2dBd0lCQWdJVUltVU0xbHFkTkluemc3U1ZVcjlRR3prbkJxd3dDZ1lJ\nS29aSXpqMEVBd0l3CmFERWFNQmdHQTFVRUF3d1JTVzUwWld3Z1UwZFlJRkp2YjNR\nZ1EwRXhHakFZQmdOVkJBb01FVWx1ZEdWc0lFTnYKY25CdmNtRjBhVzl1TVJRd0Vn\nWURWUVFIREF0VFlXNTBZU0JEYkdGeVlURUxNQWtHQTFVRUNBd0NRMEV4Q3pBSgpC\nZ05WQkFZVEFsVlRNQjRYRFRFNE1EVXlNVEV3TkRVeE1Gb1hEVFE1TVRJek1USXpO\nVGsxT1Zvd2FERWFNQmdHCkExVUVBd3dSU1c1MFpXd2dVMGRZSUZKdmIzUWdRMEV4\nR2pBWUJnTlZCQW9NRVVsdWRHVnNJRU52Y25CdmNtRjAKYVc5dU1SUXdFZ1lEVlFR\nSERBdFRZVzUwWVNCRGJHRnlZVEVMTUFrR0ExVUVDQXdDUTBFeEN6QUpCZ05WQkFZ\nVApBbFZUTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFQzZuRXdN\nRElZWk9qL2lQV3NDemFFS2k3CjFPaU9TTFJGaFdHamJuQlZKZlZua1k0dTNJamtE\nWVlMME14TzRtcXN5WWpsQmFsVFZZeEZQMnNKQks1emxLT0IKdXpDQnVEQWZCZ05W\nSFNNRUdEQVdnQlFpWlF6V1dwMDBpZk9EdEpWU3YxQWJPU2NHckRCU0JnTlZIUjhF\nU3pCSgpNRWVnUmFCRGhrRm9kSFJ3Y3pvdkwyTmxjblJwWm1sallYUmxjeTUwY25W\nemRHVmtjMlZ5ZG1salpYTXVhVzUwClpXd3VZMjl0TDBsdWRHVnNVMGRZVW05dmRF\nTkJMbVJsY2pBZEJnTlZIUTRFRmdRVUltVU0xbHFkTkluemc3U1YKVXI5UUd6a25C\ncXd3RGdZRFZSMFBBUUgvQkFRREFnRUdNQklHQTFVZEV3RUIvd1FJTUFZQkFmOENB\nUUV3Q2dZSQpLb1pJemowRUF3SURTUUF3UmdJaEFPVy81UWtSK1M5Q2lTRGNOb293\nTHVQUkxzV0dmL1lpN0dTWDk0Qmd3VHdnCkFpRUE0SjBsckhvTXMrWG81by9zWDZP\nOVFXeEhSQXZaVUdPZFJRN2N2cVJYYXFJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0t\nLS0tCgAwCgYIKoZIzj0EAwIDSQAwRgIhAIG+llexy99ev7jQOzPqyBv1vUElktwH\n2CbYVLfZ2a0zAiEA4ydsqi6DfZiUnPJiHlCFj3LpaNQa/W/hfrBqdAtkabs=\n-----END CERTIFICATE-----";