@layerzerolabs/protocol-stellar-v2 0.2.18 → 0.2.20

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 (213) hide show
  1. package/.turbo/turbo-build.log +303 -253
  2. package/.turbo/turbo-lint.log +66 -65
  3. package/.turbo/turbo-test.log +1312 -1282
  4. package/Cargo.lock +21 -8
  5. package/Cargo.toml +2 -0
  6. package/contracts/ERROR_SPEC.md +9 -2
  7. package/contracts/common-macros/src/contract_ttl.rs +18 -7
  8. package/contracts/common-macros/src/lib.rs +4 -4
  9. package/contracts/common-macros/src/tests/contract_ttl.rs +1 -1
  10. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap +2 -1
  11. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +7 -12
  12. package/contracts/common-macros/src/upgradeable.rs +15 -21
  13. package/contracts/message-libs/uln-302/src/events.rs +4 -0
  14. package/contracts/message-libs/uln-302/src/send_uln.rs +23 -7
  15. package/contracts/message-libs/uln-302/src/tests/send_uln302/send.rs +38 -64
  16. package/contracts/oapps/counter/Cargo.toml +1 -0
  17. package/contracts/oapps/counter/integration_tests/setup_uln.rs +1 -1
  18. package/contracts/oapps/oapp/src/oapp_receiver.rs +1 -1
  19. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +113 -65
  20. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +111 -82
  21. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +293 -65
  22. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +331 -56
  23. package/contracts/oapps/oft/Cargo.toml +10 -7
  24. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_oft_fee.rs +3 -4
  25. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_pausable.rs +2 -3
  26. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_rate_limiter.rs +1 -1
  27. package/contracts/oapps/oft/integration-tests/mod.rs +1 -1
  28. package/contracts/oapps/oft/integration-tests/setup.rs +28 -127
  29. package/contracts/oapps/oft/integration-tests/utils.rs +254 -21
  30. package/contracts/oapps/oft/src/extensions/oft_fee.rs +23 -8
  31. package/contracts/oapps/oft/src/extensions/pausable.rs +19 -4
  32. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +52 -28
  33. package/contracts/oapps/oft/src/lib.rs +10 -14
  34. package/contracts/oapps/oft/src/oft.rs +143 -193
  35. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +9 -11
  36. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +12 -14
  37. package/contracts/oapps/oft/src/oft_types/mod.rs +13 -0
  38. package/contracts/oapps/{oft-std → oft-core}/Cargo.toml +6 -4
  39. package/contracts/oapps/{oft-std → oft-core}/integration-tests/mod.rs +1 -1
  40. package/contracts/oapps/{oft-std → oft-core}/integration-tests/setup.rs +126 -29
  41. package/contracts/oapps/{oft → oft-core}/integration-tests/test_with_sml.rs +3 -3
  42. package/contracts/oapps/oft-core/integration-tests/utils.rs +201 -0
  43. package/contracts/oapps/oft-core/src/lib.rs +18 -0
  44. package/contracts/oapps/oft-core/src/oft_core.rs +479 -0
  45. package/contracts/oapps/{oft → oft-core}/src/tests/mod.rs +0 -2
  46. package/contracts/oapps/{oft → oft-core}/src/tests/test_lz_receive.rs +7 -7
  47. package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_msg_codec.rs +4 -4
  48. package/contracts/oapps/{oft → oft-core}/src/tests/test_resolve_address.rs +3 -3
  49. package/contracts/oapps/{oft → oft-core}/src/tests/test_utils.rs +46 -27
  50. package/contracts/oapps/{oft → oft-core}/src/utils.rs +1 -1
  51. package/contracts/upgrader/src/lib.rs +30 -57
  52. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
  53. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
  54. package/contracts/upgrader/src/tests/test_upgrader.rs +44 -35
  55. package/contracts/utils/src/buffer_reader.rs +1 -0
  56. package/contracts/utils/src/errors.rs +8 -2
  57. package/contracts/utils/src/ownable.rs +125 -3
  58. package/contracts/utils/src/tests/option_ext.rs +1 -1
  59. package/contracts/utils/src/tests/ownable.rs +445 -7
  60. package/contracts/utils/src/tests/ttl_configurable.rs +2 -2
  61. package/contracts/utils/src/tests/upgradeable.rs +372 -175
  62. package/contracts/utils/src/ttl_configurable.rs +3 -3
  63. package/contracts/utils/src/upgradeable.rs +48 -23
  64. package/contracts/workers/dvn/Cargo.toml +1 -0
  65. package/contracts/workers/dvn/src/auth.rs +12 -42
  66. package/contracts/workers/dvn/src/dvn.rs +16 -31
  67. package/contracts/workers/dvn/src/errors.rs +0 -1
  68. package/contracts/workers/dvn/src/interfaces/dvn.rs +35 -0
  69. package/contracts/workers/dvn/src/lib.rs +4 -3
  70. package/contracts/workers/dvn/src/tests/auth.rs +1 -1
  71. package/contracts/workers/dvn/src/tests/dvn.rs +19 -15
  72. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +2 -4
  73. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +1 -3
  74. package/contracts/workers/dvn/src/tests/setup.rs +5 -9
  75. package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -1
  76. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +3 -5
  77. package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +2 -3
  78. package/contracts/workers/executor/Cargo.toml +1 -0
  79. package/contracts/workers/executor/src/executor.rs +15 -26
  80. package/contracts/workers/executor-fee-lib/Cargo.toml +2 -1
  81. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +63 -5
  82. package/contracts/workers/executor-fee-lib/src/executor_option.rs +28 -1
  83. package/contracts/workers/executor-fee-lib/src/lib.rs +3 -0
  84. package/contracts/workers/executor-fee-lib/src/tests/executor_fee_lib.rs +701 -0
  85. package/contracts/workers/executor-fee-lib/src/tests/executor_option.rs +370 -0
  86. package/contracts/workers/executor-fee-lib/src/tests/mod.rs +4 -0
  87. package/contracts/workers/executor-fee-lib/src/tests/setup.rs +60 -0
  88. package/contracts/workers/executor-helper/src/lib.rs +3 -0
  89. package/contracts/workers/executor-helper/src/tests/executor_helper.rs +184 -0
  90. package/contracts/workers/executor-helper/src/tests/mod.rs +2 -0
  91. package/contracts/workers/executor-helper/src/tests/setup.rs +366 -0
  92. package/contracts/workers/fee-lib-interfaces/Cargo.toml +14 -0
  93. package/contracts/workers/{worker/src/interfaces/mod.rs → fee-lib-interfaces/src/lib.rs} +4 -3
  94. package/contracts/workers/price-feed/Cargo.toml +2 -1
  95. package/contracts/workers/price-feed/src/events.rs +1 -1
  96. package/contracts/workers/price-feed/src/lib.rs +3 -0
  97. package/contracts/workers/price-feed/src/price_feed.rs +6 -12
  98. package/contracts/workers/price-feed/src/storage.rs +1 -1
  99. package/contracts/workers/price-feed/src/tests/mod.rs +2 -0
  100. package/contracts/workers/price-feed/src/tests/price_feed.rs +869 -0
  101. package/contracts/workers/price-feed/src/tests/setup.rs +70 -0
  102. package/contracts/workers/price-feed/src/types.rs +1 -1
  103. package/contracts/workers/worker/src/errors.rs +0 -3
  104. package/contracts/workers/worker/src/lib.rs +0 -2
  105. package/contracts/workers/worker/src/storage.rs +32 -29
  106. package/contracts/workers/worker/src/tests/setup.rs +1 -7
  107. package/contracts/workers/worker/src/tests/worker.rs +50 -42
  108. package/contracts/workers/worker/src/worker.rs +49 -58
  109. package/package.json +4 -5
  110. package/sdk/.turbo/turbo-test.log +229 -217
  111. package/sdk/dist/generated/bml.d.ts +39 -1
  112. package/sdk/dist/generated/bml.js +33 -8
  113. package/sdk/dist/generated/counter.d.ts +131 -3
  114. package/sdk/dist/generated/counter.js +41 -10
  115. package/sdk/dist/generated/dvn.d.ts +431 -362
  116. package/sdk/dist/generated/dvn.js +80 -55
  117. package/sdk/dist/generated/dvn_fee_lib.d.ts +327 -251
  118. package/sdk/dist/generated/dvn_fee_lib.js +55 -57
  119. package/sdk/dist/generated/endpoint.d.ts +131 -3
  120. package/sdk/dist/generated/endpoint.js +41 -10
  121. package/sdk/dist/generated/executor.d.ts +503 -339
  122. package/sdk/dist/generated/executor.js +80 -48
  123. package/sdk/dist/generated/executor_fee_lib.d.ts +395 -319
  124. package/sdk/dist/generated/executor_fee_lib.js +54 -56
  125. package/sdk/dist/generated/executor_helper.d.ts +53 -187
  126. package/sdk/dist/generated/executor_helper.js +47 -29
  127. package/sdk/dist/generated/layerzero_view.d.ts +1271 -0
  128. package/sdk/dist/generated/layerzero_view.js +294 -0
  129. package/sdk/dist/generated/oft.d.ts +1851 -0
  130. package/sdk/dist/generated/oft.js +347 -0
  131. package/sdk/dist/generated/price_feed.d.ts +329 -253
  132. package/sdk/dist/generated/price_feed.js +55 -57
  133. package/sdk/dist/generated/sml.d.ts +131 -3
  134. package/sdk/dist/generated/sml.js +41 -10
  135. package/sdk/dist/generated/treasury.d.ts +131 -3
  136. package/sdk/dist/generated/treasury.js +41 -10
  137. package/sdk/dist/generated/uln302.d.ts +131 -3
  138. package/sdk/dist/generated/uln302.js +43 -12
  139. package/sdk/dist/generated/upgrader.d.ts +201 -15
  140. package/sdk/dist/generated/upgrader.js +99 -1
  141. package/sdk/dist/index.d.ts +2 -2
  142. package/sdk/dist/index.js +3 -3
  143. package/sdk/package.json +3 -2
  144. package/sdk/src/index.ts +3 -3
  145. package/sdk/test/oft-sml.test.ts +20 -20
  146. package/sdk/test/upgrader.test.ts +2 -3
  147. package/sdk/turbo.json +8 -0
  148. package/tools/ts-bindings-gen/Cargo.toml +2 -0
  149. package/tools/ts-bindings-gen/src/main.rs +53 -5
  150. package/turbo.json +0 -2
  151. package/contracts/oapps/oft/src/interfaces/mint_burn_token.rs +0 -23
  152. package/contracts/oapps/oft/src/interfaces/mod.rs +0 -3
  153. package/contracts/oapps/oft/src/oft_impl.rs +0 -201
  154. package/contracts/oapps/oft/src/tests/extensions/mod.rs +0 -11
  155. package/contracts/oapps/oft/src/tests/extensions/setup.rs +0 -917
  156. package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +0 -751
  157. package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +0 -434
  158. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +0 -1080
  159. package/contracts/oapps/oft-std/integration-tests/utils.rs +0 -427
  160. package/contracts/oapps/oft-std/src/lib.rs +0 -16
  161. package/contracts/oapps/oft-std/src/oft.rs +0 -174
  162. package/sdk/dist/generated/oft_std.d.ts +0 -1722
  163. package/sdk/dist/generated/oft_std.js +0 -316
  164. package/sdk/dist/wasm/blocked-message-lib.d.ts +0 -1
  165. package/sdk/dist/wasm/blocked-message-lib.js +0 -2
  166. package/sdk/dist/wasm/counter.d.ts +0 -1
  167. package/sdk/dist/wasm/counter.js +0 -2
  168. package/sdk/dist/wasm/dvn-fee-lib.d.ts +0 -1
  169. package/sdk/dist/wasm/dvn-fee-lib.js +0 -2
  170. package/sdk/dist/wasm/dvn.d.ts +0 -1
  171. package/sdk/dist/wasm/dvn.js +0 -2
  172. package/sdk/dist/wasm/endpoint-v2.d.ts +0 -1
  173. package/sdk/dist/wasm/endpoint-v2.js +0 -2
  174. package/sdk/dist/wasm/executor-fee-lib.d.ts +0 -1
  175. package/sdk/dist/wasm/executor-fee-lib.js +0 -2
  176. package/sdk/dist/wasm/executor-helper.d.ts +0 -1
  177. package/sdk/dist/wasm/executor-helper.js +0 -2
  178. package/sdk/dist/wasm/executor.d.ts +0 -1
  179. package/sdk/dist/wasm/executor.js +0 -2
  180. package/sdk/dist/wasm/layerzero-views.d.ts +0 -1
  181. package/sdk/dist/wasm/layerzero-views.js +0 -2
  182. package/sdk/dist/wasm/oft-std.d.ts +0 -1
  183. package/sdk/dist/wasm/oft-std.js +0 -2
  184. package/sdk/dist/wasm/price-feed.d.ts +0 -1
  185. package/sdk/dist/wasm/price-feed.js +0 -2
  186. package/sdk/dist/wasm/simple-message-lib.d.ts +0 -1
  187. package/sdk/dist/wasm/simple-message-lib.js +0 -2
  188. package/sdk/dist/wasm/treasury.d.ts +0 -1
  189. package/sdk/dist/wasm/treasury.js +0 -2
  190. package/sdk/dist/wasm/uln302.d.ts +0 -1
  191. package/sdk/dist/wasm/uln302.js +0 -2
  192. package/sdk/dist/wasm/upgrader.d.ts +0 -1
  193. package/sdk/dist/wasm/upgrader.js +0 -2
  194. package/sdk/dist/wasm.d.ts +0 -15
  195. package/sdk/dist/wasm.js +0 -15
  196. /package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/mod.rs +0 -0
  197. /package/contracts/oapps/{oft → oft-core}/src/codec/mod.rs +0 -0
  198. /package/contracts/oapps/{oft → oft-core}/src/codec/oft_compose_msg_codec.rs +0 -0
  199. /package/contracts/oapps/{oft → oft-core}/src/codec/oft_msg_codec.rs +0 -0
  200. /package/contracts/oapps/{oft → oft-core}/src/errors.rs +0 -0
  201. /package/contracts/oapps/{oft → oft-core}/src/events.rs +0 -0
  202. /package/contracts/oapps/{oft → oft-core}/src/storage.rs +0 -0
  203. /package/contracts/oapps/{oft → oft-core}/src/tests/test_decimals.rs +0 -0
  204. /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_compose_msg_codec.rs +0 -0
  205. /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_version.rs +0 -0
  206. /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_oft.rs +0 -0
  207. /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_send.rs +0 -0
  208. /package/contracts/oapps/{oft → oft-core}/src/tests/test_send.rs +0 -0
  209. /package/contracts/oapps/{oft → oft-core}/src/tests/test_token.rs +0 -0
  210. /package/contracts/oapps/{oft → oft-core}/src/types.rs +0 -0
  211. /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/dvn_fee_lib.rs +0 -0
  212. /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/executor_fee_lib.rs +0 -0
  213. /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/price_feed.rs +0 -0
@@ -4,7 +4,21 @@ import type { u32, u64, u128, i128, Option } from '@stellar/stellar-sdk/contract
4
4
  export * from '@stellar/stellar-sdk';
5
5
  export * as contract from '@stellar/stellar-sdk/contract';
6
6
  export * as rpc from '@stellar/stellar-sdk/rpc';
7
- export type MigrationData = void;
7
+ /**
8
+ * Embedded WASM bytecode (base64-encoded)
9
+ * Size: 57424 bytes (56.08 KB)
10
+ */
11
+ export declare const WASM_BASE64 = "AGFzbQEAAAABzgEhYAJ+fgF+YAF+AX5gA35+fgF+YAABfmAEfn5+fgF+YAN/f38AYAF/AX5gA35+fgBgA39+fgBgAABgAAF/YAF/AGACf38AYAF/AX9gAn5+AX9gAn5+AGADfn5/AGACf34AYAF+AGACfn8AYAR/f39/AX5gAX4Bf2ACf38BfmAFfn9/f38AYAN+f38BfmACf38Bf2ADf35+AX5gA39/fgBgB35+fn5+fn4BfmAFf35/fn4AYAR+fn9/AX5gCX5+fn5+fn5+fgF+YAN/f38BfwKhAjABbAExAAABYQEwAAEBdgEzAAEBdgExAAABYgE4AAEBYgE2AAABYgFmAAIBYwEyAAIBYwExAAEBdgFkAAABdgEyAAABdgE2AAABeAExAAABdgFfAAMBeAE0AAMBaQEwAAEBdgE4AAEBeAE3AAMBeAEwAAABYgFlAAABYgEwAAEBYwEwAAIBbAFfAAIBbAEyAAABaQFfAAEBZAFfAAIBaQE4AAEBaQE3AAEBYgE0AAMBYgFfAAEBeAEzAAMBeAE4AAMBbAE2AAEBaQEzAAABaQE1AAEBaQE0AAEBYgEzAAABbQFhAAQBdgFnAAABYgFtAAIBaQE2AAABYgFqAAABYgEyAAQBbQE5AAIBbAEwAAABbAE4AAABeAE1AAEBbAE3AAQDqAGmAQUGBwgJCgsMDQoGDgMDDwoQAxEODA4SCQoFEQgTAxERCwUBFBIVEwMWCwwMCgwVDQsLFQoVCgYVEwwRFxEMCAIREQwYGQoRERENFhoBGwAAAAsLAAALABICABIAEhIDAQMBAwEDAQEDAwABAwMcHQgcDBYAAQMCHh8MDAYMEgsCAwARBgMMAwMAABESEwEDAwEDAAIBCwEDDAMJBRERBQYMBREMICAEBQFwAQEBBQMBABEGIQR/AUGAgMAAC38AQeCDwAALfwBB8IrAAAt/AEHwisAACwejBzcGbWVtb3J5AgAMX19jaGVja19hdXRoAG8Kc2V0X3BhdXNlZAB8CXNldF9hZG1pbgB+GXNldF9zdXBwb3J0ZWRfbWVzc2FnZV9saWIAfw1zZXRfYWxsb3dsaXN0AIABDHNldF9kZW55bGlzdACDARpzZXRfZGVmYXVsdF9tdWx0aXBsaWVyX2JwcwCEARNzZXRfZGVwb3NpdF9hZGRyZXNzAIYBGnNldF9zdXBwb3J0ZWRfb3B0aW9uX3R5cGVzAIgBEnNldF93b3JrZXJfZmVlX2xpYgCJAQ5zZXRfcHJpY2VfZmVlZACLAQZwYXVzZWQAjgEIaXNfYWRtaW4AjwEGYWRtaW5zAJABGGlzX3N1cHBvcnRlZF9tZXNzYWdlX2xpYgCRAQxtZXNzYWdlX2xpYnMAkgEPaXNfb25fYWxsb3dsaXN0AJMBDmFsbG93bGlzdF9zaXplAJQBDmlzX29uX2RlbnlsaXN0AJUBB2hhc19hY2wAlgEWZGVmYXVsdF9tdWx0aXBsaWVyX2JwcwCXAQ9kZXBvc2l0X2FkZHJlc3MAmAEaZ2V0X3N1cHBvcnRlZF9vcHRpb25fdHlwZXMAmgEOd29ya2VyX2ZlZV9saWIAmwEKcHJpY2VfZmVlZACcAQdnZXRfZmVlAJ0BCmFzc2lnbl9qb2IAoAEOc2V0X2RzdF9jb25maWcAowEKZHN0X2NvbmZpZwCkAQN2aWQApQEOaGFzaF9jYWxsX2RhdGEApgENX19jb25zdHJ1Y3RvcgCoARJzZXRfYWRtaW5fYnlfYWRtaW4ArwEKYXV0aG9yaXplcgCwAQ9zZXRfdHRsX2NvbmZpZ3MAsQELdHRsX2NvbmZpZ3MAtAESZnJlZXplX3R0bF9jb25maWdzALYBFWlzX3R0bF9jb25maWdzX2Zyb3plbgC3ARNleHRlbmRfaW5zdGFuY2VfdHRsALgBCnNldF9zaWduZXIAuQENc2V0X3RocmVzaG9sZAC9AQtnZXRfc2lnbmVycwC+AQ10b3RhbF9zaWduZXJzAL8BCWlzX3NpZ25lcgDAAQl0aHJlc2hvbGQAwQERdmVyaWZ5X3NpZ25hdHVyZXMAwgETdmVyaWZ5X25fc2lnbmF0dXJlcwDDAQd1cGdyYWRlAMQBB21pZ3JhdGUAxgEGZnJlZXplAMcBCWlzX2Zyb3plbgDJAQFfAwEKX19kYXRhX2VuZAMCC19faGVhcF9iYXNlAwMKtbYBpgEiACAAELGAgIAAIAGtQiCGQgSEIAKtQiCGQgSEELKAgIAAC9EBAgF/AX4jgICAgABBEGsiASSAgICAAAJAAkACQAJAAkACQCAAKAIADgMAAQIACyABQY2CwIAAQQMQyYCAgAAgASgCAA0DIAEgASkDCBDKgICAAAwCCyABQZCCwIAAQQkQyYCAgAAgASgCAA0CIAEgASkDCCAANQIEQiCGQgSEEMuAgIAADAELIAFBmYLAgABBCBDJgICAACABKAIADQEgASABKQMIIAApAwgQy4CAgAALIAEpAwghAiABKQMAUA0BCwALIAFBEGokgICAgAAgAgsRACAAQgEgASACEK+AgIAAGgs3AQF+QgAhAwJAAkAgAUICUQ0AIAGnQQFxDQEgACACNwMIQgEhAwsgACADNwMADwsQtICAgAAACwkAEMqBgIAAAAtYAQJ/I4CAgIAAQRBrIgAkgICAgAAgAEEEahC2gICAAAJAIAAoAgRBAUcNACAAKAIIIAAoAgwQt4CAgAALQQAQuICAgAAhASAAQRBqJICAgIAAIAFB/QFxCwwAIABBARDQgYCAAAsbACAArUIghkIEhCABrUIghkIEhBCtgICAABoLRwIBfwF+QQIhAQJAIAAQz4GAgAAiAkICELuAgIAARQ0AQQEhAQJAAkAgAkICEICAgIAAp0H/AXEOAgECAAsAC0EAIQELIAELiwECAn8BfiOAgICAAEEQayIAJICAgIAAIABBBGoQtoCAgAACQCAAKAIEQQFHDQAgACgCCCAAKAIMELeAgIAAC0EAIQECQEEAELqAgIAAIgJCAhC7gICAAEUNAEEBIQECQAJAIAJCAhCAgICAAKdB/wFxDgIBAgALAAtBACEBCyAAQRBqJICAgIAAIAELwgECAX8BfiOAgICAAEEQayIBJICAgIAAAkACQAJAAkACQAJAIABB/wFxDgMAAQIACyABQaaGwIAAQQYQyYCAgAAgASgCAA0DIAEgASkDCBDKgICAAAwCCyABQayGwIAAQQgQyYCAgAAgASgCAA0CIAEgASkDCBDKgICAAAwBCyABQbSGwIAAQQoQyYCAgAAgASgCAA0BIAEgASkDCBDKgICAAAsgASkDCCECIAEpAwBQDQELAAsgAUEQaiSAgICAACACCw8AIAAgARCsgICAAEIBUQsVAQF+EL2AgIAAIgAQgYCAgAAaIAALVAIBfwF+I4CAgIAAQRBrIgAkgICAgAAgAEEEahC2gICAAAJAIAAoAgRBAUcNACAAKAIIIAAoAgwQt4CAgAALEJGAgIAAIQEgAEEQaiSAgICAACABC1gBAX8jgICAgABBEGsiAiSAgICAACACQQRqELaAgIAAAkAgAigCBEEBRw0AIAIoAgggAigCDBC3gICAAAsgACABEL+AgIAAEMCAgIAAIAJBEGokgICAgAALRgIBfwF+QQAhAAJAAkBBARCrgYCAACIBQgIQu4CAgABFDQAgAUICEICAgIAAIgFC/wGDQgRSDQEgAUIgiKchAAsgAA8LAAuSBQQBfwV+An8BfiOAgICAAEEwayIDJICAgIAAIANBIGoQtoCAgAACQCADKAIgQQFHDQAgAygCJCADKAIoELeAgIAACwJAAkACQAJAAkACQCACRQ0AIAIgARCCgICAAEIgiKdLDQEQwYCAgAAhBCABEIKAgIAAQiCIIQVCACEGQQAhAgJAA0AgBiAFUQ0FAkAgASAGQiCGQgSEEIOAgIAAIgdC/wGDQsgAUg0AIAcQhICAgAAhCCAGQv////8PUQ0CIAhCgICAgHCDQoCAgICQCFINAiAHEISAgIAAQv////+PCFgNBSAHQoSAgICACBCFgICAACEIIAdCBEKEgICAgAgQhoCAgAAiBxCEgICAAEKAgICAcINCgICAgIAIUg0CIANBIGogACAHIAhCIIinIglBZWoiCiAJIApB/wFxQQRJG61C/wGDQiCGQgSEEIeAgIAAQoSAgIAQQoSAgICQCBCGgICAABCIgICAAEKEgICAwAFChICAgIAEEIaAgIAAEMKAgIAAIAMoAiBBAUYNAiADKQMoIQcCQCACQQFxRQ0AIAcgCxDDgICAAEEYdEEYdUEATA0ICyAEEIKAgIAAIQggA0EANgIIIAMgBDcDACADIAhCIIg+AgwDQCADQSBqIAMQxICAgAAgA0EQaiADKQMgIAMpAygQs4CAgAAgAygCEEEBRw0JIAMpAxggBxDFgICAAEUNAAsgBkIBfCEGQQEhAiAHIQsMAQsLIAZC/////w9SGgsQtICAgAAAC0KDgICAsIUBEMaAgIAAAAtCg4CAgOCEARDGgICAAAALEMeAgIAAAAsgA0EwaiSAgICAAA8LQoOAgICghQEQxoCAgAAAC0KDgICAgIUBEMaAgIAAAAuNAQQBfwF+AX8BfiOAgICAAEEQayIAJICAgIAAAkACQEEAEKuBgIAAIgFCARC7gICAACICRQ0AIAFCARCAgICAACIDQv8Bg0LLAFINASAAQQRqENCAgIAAIAAoAgRFDQAgACgCCCAAKAIMEKyBgIAACxCNgICAACEBIABBEGokgICAgAAgAyABIAIbDwsACzYBAX5CASECAkAgARCEgICAAEKAgICAcINCgICAgMACUg0AIAAgATcDCEIAIQILIAAgAjcDAAsXACAAIAEQkoCAgAAiAUIAVSABQgBTawuRAQICfwF+I4CAgIAAQRBrIgIkgICAgAACQAJAIAEoAggiAyABKAIMSQ0AIABCAjcDAAwBCyACIAEpAwAgA61CIIZCBIQQg4CAgAAQuoGAgAACQCADQQFqIgNFDQAgAikDACEEIAAgAikDCDcDCCAAIAQ3AwAgASADNgIIDAELELSAgIAAAAsgAkEQaiSAgICAAAsRACAAIAEQw4CAgABB/wFxRQsLACAAEK6AgIAAGgsJABC0gICAAAALUgECfyOAgICAAEEQayIAJICAgIAAIABBBGoQtoCAgAACQCAAKAIEQQFHDQAgACgCCCAAKAIMELeAgIAACxC/gICAACEBIABBEGokgICAgAAgAQtRAgF/AX4jgICAgABBEGsiAySAgICAACADIAEgAhDLgYCAAEIBIQQCQCADKAIADQAgACADKQMINwMIQgAhBAsgACAENwMAIANBEGokgICAgAALRAEBfyOAgICAAEEQayICJICAgIAAIAIgATcDCCACQQhqQQEQooGAgAAhASAAQgA3AwAgACABNwMIIAJBEGokgICAgAALSAEBfyOAgICAAEEQayIDJICAgIAAIAMgAjcDCCADIAE3AwAgA0ECEKKBgIAAIQIgAEIANwMAIAAgAjcDCCADQRBqJICAgIAAC80CAwF/An4BfyOAgICAAEEwayICJICAgIAAEM2AgIAAIgMgABCJgICAACEEAkACQAJAAkACQCABDQAgAkEIaiAEEM6AgIAAIAIoAggiBUECRg0BIAVBAXFFDQIgAigCDCIFIAMQgoCAgABCIIinTw0EIAMgBa1CIIZCBIQQioCAgAAhAwwECyAEQgJRDQJCg4CAgICWARDGgICAAAALELSAgIAAAAtCg4CAgJCWARDGgICAAAALIAMgABCLgICAACEDCyACQQE2AiAgAkEgaiADEM+AgIAAIAJBFGoQ0ICAgAACQCACKAIUQQFHDQAgAkEgaiACKAIYIAIoAhwQ0YCAgAALQo7mrrnqjOTVOBDSgICAACEDIAIgADcDKCACIAGtNwMgIANB1IbAgABBAiACQSBqQQIQ04CAgAAQjICAgAAaIAJBMGokgICAgAALqQECAX8DfiOAgICAAEEwayIAJICAgIAAIABBEGoQtoCAgAACQCAAKAIQQQFHDQAgACgCFCAAKAIYELeAgIAACyAAQQE2AgAgAEEQaiAAENuAgIAAAkAgACkDECIBUA0AIABBJGoQ0ICAgAAgACgCJEEBRw0AIAAgACgCKCAAKAIsENGAgIAACxCNgICAACECIAApAxghAyAAQTBqJICAgIAAIAMgAiABpxsLPQECfwJAAkAgAUICUg0AQQAhAgwBC0EBQQIgAUL/AYNCBFEbIQIgAUIgiKchAwsgACADNgIEIAAgAjYCAAsVACAAEOaAgIAAIAFCARCWgICAABoLDAAgAEECENCBgIAACyIAIAAQ5oCAgAAgAa1CIIZCBIQgAq1CIIZCBIQQsoCAgAALYwMBfwF+AX8jgICAgABBEGsiASSAgICAACABIAA3AwBCAiECQQEhAwJAA0AgA0UNASADQX9qIQMgACECDAALCyABIAI3AwggAUEIakEBEKKBgIAAIQAgAUEQaiSAgICAACAACy4AAkAgASADRg0AAAsgAK1CIIZCBIQgAq1CIIZCBIQgAa1CIIZCBIQQq4CAgAALJwAgABCBgICAABoCQCAAENWAgIAADQBCg4CAgMCXARDGgICAAAALC10BAX8jgICAgABBEGsiASSAgICAACABQQRqELaAgIAAAkAgASgCBEEBRw0AIAEoAgggASgCDBC3gICAAAsQzYCAgAAgABCJgICAACEAIAFBEGokgICAgAAgAEICUgvRAgMBfwJ+AX8jgICAgABBMGsiAiSAgICAABDXgICAACIDIAAQiYCAgAAhBAJAAkACQAJAAkAgAQ0AIAJBCGogBBDOgICAACACKAIIIgVBAkYNASAFQQFxRQ0CIAIoAgwiBSADEIKAgIAAQiCIp08NBCADIAWtQiCGQgSEEIqAgIAAIQMMBAsgBEICUQ0CQoOAgIDQlgEQxoCAgAAACxC0gICAAAALQoOAgIDglgEQxoCAgAAACyADIAAQi4CAgAAhAwsgAkECNgIgIAJBIGogAxDPgICAACACQRRqENCAgIAAAkAgAigCFEEBRw0AIAJBIGogAigCGCACKAIcENGAgIAAC0HkhsCAAEEZENiAgIAAENKAgIAAIQMgAiABrTcDKCACIAA3AyAgA0GUh8CAAEECIAJBIGpBAhDTgICAABCMgICAABogAkEwaiSAgICAAAupAQIBfwN+I4CAgIAAQTBrIgAkgICAgAAgAEEQahC2gICAAAJAIAAoAhBBAUcNACAAKAIUIAAoAhgQt4CAgAALIABBAjYCACAAQRBqIAAQ24CAgAACQCAAKQMQIgFQDQAgAEEkahDQgICAACAAKAIkQQFHDQAgACAAKAIoIAAoAiwQ0YCAgAALEI2AgIAAIQIgACkDGCEDIABBMGokgICAgAAgAyACIAGnGwtFAgF/AX4jgICAgABBEGsiAiSAgICAACACIAAgARDLgYCAAAJAIAIoAgBBAUcNAAALIAIpAwghAyACQRBqJICAgIAAIAMLVgEBfyOAgICAAEEQayIBJICAgIAAIAEQtoCAgAACQCABKAIAQQFHDQAgASgCBCABKAIIELeAgIAACyABQQo2AgAgACABENqAgIAAIAFBEGokgICAgAALTQECfkIAIQICQAJAIAEQ5oCAgAAiA0ICELuAgIAARQ0AIANCAhCAgICAACICQv8Bg0LNAFINASAAIAI3AwhCASECCyAAIAI3AwAPCwALTQECfkIAIQICQAJAIAEQ5oCAgAAiA0IBELuAgIAARQ0AIANCARCAgICAACICQv8Bg0LLAFINASAAIAI3AwhCASECCyAAIAI3AwAPCwALdwEDfyOAgICAAEEgayIAJICAgIAAIABBEGoQtoCAgAACQCAAKAIQQQFHDQAgACgCFCAAKAIYELeAgIAACyAAQQQ2AhAgAEEIaiAAQRBqEN2AgIAAIAAoAgghASAAKAIMIQIgAEEgaiSAgICAACACQQAgAUEBcRsLWgIBfgF/AkACQAJAIAEQ5oCAgAAiAkICELuAgIAADQBBACEBDAELIAJCAhCAgICAACICQv8Bg0IEUg0BIAJCIIinIQNBASEBCyAAIAM2AgQgACABNgIADwsAC4wBAQJ/I4CAgIAAQSBrIgEkgICAgAAgARC2gICAAAJAIAEoAgBBAUcNACABKAIEIAEoAggQt4CAgAALIAFBBTYCACABIAA3AwgCQCABEN+AgIAAIgJFDQAgAUEUahDQgICAACABKAIUQQFHDQAgASABKAIYIAEoAhwQ0YCAgAALIAFBIGokgICAgAAgAgsSACAAEOaAgIAAQgEQu4CAgAALVgEBfyOAgICAAEEQayIBJICAgIAAIAEQtoCAgAACQCABKAIAQQFHDQAgASgCBCABKAIIELeAgIAACyABQQk2AgAgACABENqAgIAAIAFBEGokgICAgAALVgEBfyOAgICAAEEQayIBJICAgIAAIAEQtoCAgAACQCABKAIAQQFHDQAgASgCBCABKAIIELeAgIAACyABQQc2AgAgACABENqAgIAAIAFBEGokgICAgAALjAEBAn8jgICAgABBIGsiASSAgICAACABELaAgIAAAkAgASgCAEEBRw0AIAEoAgQgASgCCBC3gICAAAsgAUEDNgIAIAEgADcDCAJAIAEQ34CAgAAiAkUNACABQRRqENCAgIAAIAEoAhRBAUcNACABIAEoAhggASgCHBDRgICAAAsgAUEgaiSAgICAACACC3cBA38jgICAgABBIGsiACSAgICAACAAQRBqELaAgIAAAkAgACgCEEEBRw0AIAAoAhQgACgCGBC3gICAAAsgAEEGNgIQIABBCGogAEEQahDdgICAACAAKAIIIQEgACgCDCECIABBIGokgICAgAAgAkEAIAFBAXEbC10BAX8jgICAgABBEGsiASSAgICAACABQQRqELaAgIAAAkAgASgCBEEBRw0AIAEoAgggASgCDBC3gICAAAsQ14CAgAAgABCJgICAACEAIAFBEGokgICAgAAgAEICUguPAQICfwF+I4CAgIAAQRBrIgAkgICAgAAgABC2gICAAAJAIAAoAgBBAUcNACAAKAIEIAAoAggQt4CAgAALQQAhASAAQQA2AgACQCAAEOaAgIAAIgJCAhC7gICAAEUNAEEBIQECQAJAIAJCAhCAgICAAKdB/wFxDgIBAgALAAtBACEBCyAAQRBqJICAgIAAIAELpgQCAX8BfiOAgICAAEEQayIBJICAgIAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIADgsAAQIDBAUGBwgJCgALIAFB8InAgABBBhDJgICAACABKAIADQsgASABKQMIEMqAgIAADAoLIAFB9onAgABBBhDJgICAACABKAIADQogASABKQMIEMqAgIAADAkLIAFB/InAgABBCxDJgICAACABKAIADQkgASABKQMIEMqAgIAADAgLIAFBh4rAgABBCRDJgICAACABKAIADQggASABKQMIIAApAwgQy4CAgAAMBwsgAUGQisCAAEENEMmAgIAAIAEoAgANByABIAEpAwgQyoCAgAAMBgsgAUGdisCAAEEIEMmAgIAAIAEoAgANBiABIAEpAwggACkDCBDLgICAAAwFCyABQaWKwIAAQRQQyYCAgAAgASgCAA0FIAEgASkDCBDKgICAAAwECyABQbmKwIAAQQ4QyYCAgAAgASgCAA0EIAEgASkDCBDKgICAAAwDCyABQceKwIAAQRQQyYCAgAAgASgCAA0DIAEgASkDCCAANQIEQiCGQgSEEMuAgIAADAILIAFB24rAgABBDBDJgICAACABKAIADQIgASABKQMIEMqAgIAADAELIAFB54rAgABBCRDJgICAACABKAIADQEgASABKQMIEMqAgIAACyABKQMIIQIgASkDAFANAQsACyABQRBqJICAgIAAIAILfAECfyOAgICAAEEQayIBJICAgIAAIAFBBGoQtoCAgAACQCABKAIEQQFHDQAgASgCCCABKAIMELeAgIAACwJAAkAgABDegICAAEUNAEEAIQIMAQsCQBDcgICAAA0AQQEhAgwBCyAAEOKAgIAAIQILIAFBEGokgICAgAAgAgspAAJAIACnQQFxRQ0ADwsgAUHQdmqtQiCGQoOAgICAlgGEEMaAgIAAAAtpAgF/AX4CQCABKAIIIgIgASgCDEkNACAAQgI3AwAPCyABKQMAIAKtQiCGQgSEEIOAgIAAIQMCQCACQQFqIgJFDQAgACADNwMIIAEgAjYCCCAAIANC/wGDQs0AUq03AwAPCxC0gICAAAALlQICAn8EfiOAgICAAEHAAGsiAiSAgICAAEEAIQMCQANAIANBGEYNASACQQhqIANqQgI3AwAgA0EIaiEDDAALC0IAIQRCASEFAkAgAUL/AYNCzABSDQAgAUG4gcCAAEEDIAJBCGpBAxDrgICAACACQSBqIAIpAwgQ7ICAgAAgAigCIEEBRg0AIAIpAzghASACKQMwIQYgAkEgaiACKQMQEOyAgIAAIAIoAiBBAUYNACACKQMYIgdC/wGDQgRSDQAgAikDOCEEIAIpAzAhBSAAIAY3AyAgACAFNwMQIAAgATcDKCAAIAQ3AxggACAHQiCIPgIwQgAhBUIAIQQLIAAgBTcDACAAIAQ3AwggAkHAAGokgICAgAALMQACQCACIARGDQAACyAAIAGtQiCGQgSEIAOtQiCGQgSEIAKtQiCGQgSEEKWAgIAAGgt7AgF/AX4CQAJAAkAgAadB/wFxIgJBxABGDQAgAkEKRw0BQgAhAyAAQgA3AxggACABQgiINwMQDAILIAEQooCAgAAhAyABEKOAgIAAIQEgACADNwMYIAAgATcDEEIAIQMMAQsgAEKDkICAgAE3AwhCASEDCyAAIAM3AwALrgECAX8CfiOAgICAAEEgayICJICAgIAAIAJBCGogASkDECABKQMYEO6AgIAAQgEhAwJAIAIoAggNACACKQMQIQQgAkEIaiABKQMAIAEpAwgQ7oCAgAAgAigCCA0AIAIgAikDEDcDECACIAQ3AwggAiABNQIgQiCGQgSENwMYIABBuIHAgABBAyACQQhqQQMQ04CAgAA3AwhCACEDCyAAIAM3AwAgAkEgaiSAgICAAAtGAAJAAkAgAUL//////////wBWIAJCAFIgAlAbDQAgAUIIhkIKhCECDAELIAIgARChgICAACECCyAAQgA3AwAgACACNwMIC5ESCAF/AX4BfwN+An8BfgF/A34jgICAgABBwABrIgMkgICAgAAgA0EQaiAAEPCAgIAAAkAgAygCEEEBRg0AIAMpAxghBEEAIQUCQANAIAVBIEYNASADQRBqIAVqQgI3AwAgBUEIaiEFDAALCyABQv8Bg0LMAFINACABQZiBwIAAQQQgA0EQakEEEOuAgIAAIANBMGogAykDEBDxgICAACADKAIwDQAgAykDGCIBQv8Bg0LLAFINACADKQM4IQYgARCCgICAACEAIANBADYCCCADIAE3AwAgAyAAQiCIPgIMIANBMGogAxDygICAACADKQMwIgFCAlENACABp0EBcQ0AAkAgAykDOCIBp0H/AXEiBUHKAEYNACAFQQ5HDQELAkACQAJAIAFB8IDAgABBAhDzgICAAEIgiKcOAgABAwsgAygCCCADKAIMEPSAgIAADQJBACEFDAELIAMoAgggAygCDBD0gICAAEECSw0BIANBMGogAxDygICAACADKQMwIgFCAlENASABp0EBcQ0BIANBMGogAykDOBDwgICAACADKAIwDQEgAykDOCEHIANBMGogAxDygICAACADKQMwIgFCAlENASABp0EBcQ0BIAMpAzgiAEL/AYNCyABSDQFBASEFIAAQhICAgABCgICAgHCDQoCAgICACFINAQsgAykDICIIQv8Bg0LLAFINACADKQMoIgFC/wGDQgRSDQAgAkL/AYNCywBSDQAgAUIgiKchCSADQRBqELaAgIAAAkAgAygCEEEBRw0AIAMoAhQgAygCGBC3gICAAAsCQAJAAkAQ9YCAgAAgCUYNAEKDgICAwAAhAQwBCwJAAkAQjoCAgAAiAadB/wFxIgpBBkYNACAKQcAARw0DIAEQj4CAgAAhAQwBCyABQgiIIQELAkAgBiABVg0AQoOAgIAQIQEMAQsCQAJAIAIQgoCAgABCgICAgHCDQoCAgIAQUg0AIAIQgoCAgABCgICAgBBUDQAgAhCQgICAACIBQv8Bg0LLAFINBCABEIKAgIAAIQsgA0EANgIIIAMgATcDACADIAtCIIg+AgwgA0EQaiADEPKAgIAAIAMpAxAiAUICUQ0EIAGnQQFxDQQCQCADKQMYIgGnQf8BcSIKQcoARg0AIApBDkcNBQsCQAJAAkACQCABQbCAwIAAQQMQ84CAgABCIIinDgMAAQIICyADKAIIIAMoAgwQ9ICAgABBAUsNByADQTBqIAMQ8oCAgAAgAykDMCIBQgJRDQcgAadBAXENByADQRBqIAMpAzgQ9oCAgAAgAygCEEEBRg0HIAMpAyAhASADKQMYEJGAgIAAEJKAgIAAQgBSDQNBhILAgABBCRDYgICAACELAkAgAUL/AYNCDlINACALQv8Bg0IOUQ0DCyABIAsQkoCAgABQDQQMAwsgAygCCCADKAIMEPSAgIAAQQFLDQYgA0EwaiADEPKAgIAAIAMpAzAiAUICUQ0GIAGnQQFxDQYgA0EQaiADKQM4EPeAgIAAIAMoAhBFDQIMBgsgAygCCCADKAIMEPSAgIAAQQFLDQUgA0EwaiADEPKAgIAAIAMpAzAiAUICUQ0FIAGnQQFxDQUgA0EQaiADKQM4EPiAgIAAIAMoAhBFDQEMBQsgAyALQgiINwMQIAMgAUIIiDcDMAJAA0AgA0EwahD5gICAACEKIANBEGoQ+YCAgAAhDCAKQYCAxABGDQEgCiAMRw0CDAALCyAMQYCAxABGDQELQoOAgIDgACEBIAVFDQFB4IPAgABBDBD6gICAACAHEJOAgIAAEJSAgIAAIgtC/wGDQs0AUg0DIAsQ1YCAgABFDQEgByAEIAAQlYCAgAAaCxCNgICAACENIAIQgoCAgABCIIghDkIAIQFCBCEAAkADQCAOIAFRDQECQAJAIAIgABCDgICAACIHQv8Bg0LLAFINAEEAIQogBxCCgICAACEEIANBADYCCCADIAc3AwAgAyAEQiCIPgIMIANBEGogAxDygICAAEEBIQUCQAJAIAMpAxAiB0ICUQ0AQQEhBSAHp0EBcQ0AAkAgAykDGCIPp0H/AXEiDEHKAEYNACAMQQ5HDQELAkACQAJAIA9BsIDAgABBAxDzgICAAEIgiKcOAwABAgQLQQEhBSADKAIIIAMoAgwQ9ICAgABBAUsNAiADQTBqIAMQ8oCAgAAgAykDMCIHQgJRDQIgB6dBAXENAiADQRBqIAMpAzgQ9oCAgAAgAygCEA0CIAMpAyghByADKQMgIQQgAykDGCELQQEhCkEAIQUMAwtBASEFIAMoAgggAygCDBD0gICAAEEBSw0BIANBMGogAxDygICAACADKQMwIgdCAlENASAHp0EBcQ0BIANBEGogAykDOBD3gICAACADKAIQDQEgAykDICEEIAMpAxghC0EAIQVBACEKDAILQQEhBSADKAIIIAMoAgwQ9ICAgABBAUsNACADQTBqIAMQ8oCAgAAgAykDMCIHQgJRDQAgB6dBAXENACADQRBqIAMpAzgQ+ICAgAAgAygCEA0AIAMpAyghByADKQMgIQQgAykDGCELQQAhBUEAIQoMAQsLIAFC/////w9RDQUgBQ0FIAoNAUKDgICA0AAhAQwECyABQv////8PUhoMBAsgAyALNwMgIAMgBDcDGCADIAc3AxAgAEKAgICAEHwhACABQgF8IQEgDUHsgcCAAEEDIANBEGpBAxDTgICAABCLgICAACENDAALCyAJIAYgDRD7gICAACEBIANBAjYCECADIAE3AxgCQCADQRBqELGAgIAAIgJCARC7gICAAEUNAEEBIQUCQAJAIAJCARCAgICAAKdB/wFxDgIAAQULQQAhBQsgA0EwahDQgICAAAJAIAMoAjBBAUcNACADQRBqIAMoAjQgAygCOBCwgICAAAsgBUUNAEKDgICAMCEBDAELIANBAjYCECADIAE3AxggA0EQahCxgICAAEIBQgEQloCAgAAaIANBMGoQ0ICAgAACQCADKAIwQQFHDQAgA0EQaiADKAI0IAMoAjgQsICAgAALIAEgCBC+gICAAEICIQELIANBwABqJICAgIAAIAEPCxC0gICAAAALAAtCAQF+QgEhAgJAIAFC/wGDQsgAUg0AIAEQhICAgABCgICAgHCDQoCAgICABFINACAAIAE3AwhCACECCyAAIAI3AwALXQIBfwF+AkACQCABp0H/AXEiAkHAAEYNAAJAIAJBBkYNAEIBIQNCg5CAgIABIQEMAgsgAUIIiCEBQgAhAwwBC0IAIQMgARCPgICAACEBCyAAIAM3AwAgACABNwMIC0oCAX4Bf0ICIQICQCABKAIIIgMgASgCDE8NACAAIAEpAwAgA61CIIZCBIQQg4CAgAA3AwggASADQQFqNgIIQgAhAgsgACACNwMACxwAIAAgAa1CIIZCBIQgAq1CIIZCBIQQp4CAgAALGQACQCABIABJDQAgASAAaw8LELSAgIAAAAuMAQIBfwF+I4CAgIAAQRBrIgAkgICAgAAgABC2gICAAAJAIAAoAgBBAUcNACAAKAIEIAAoAggQt4CAgAALIABBADYCAAJAAkAgABCxgICAACIBQgIQu4CAgABFDQAgAUICEICAgIAAIgFC/wGDQgRRDQEACxDHgICAAAALIABBEGokgICAgAAgAUIgiKcL0wECAn8DfiOAgICAAEEgayICJICAgIAAQQAhAwJAA0AgA0EYRg0BIAJBCGogA2pCAjcDACADQQhqIQMMAAsLQgEhBAJAIAFC/wGDQswAUg0AIAFBhITAgABBAyACQQhqQQMQ64CAgAAgAikDCCIBQv8Bg0LLAFINACACKQMQIgVC/wGDQs0AUg0AAkAgAikDGCIGp0H/AXEiA0HKAEYNACADQQ5HDQELIAAgATcDGCAAIAY3AxAgACAFNwMIQgAhBAsgACAENwMAIAJBIGokgICAgAALvgECAn8BfiOAgICAAEEgayICJICAgIAAQQAhAwJAA0AgA0EQRg0BIAIgA2pCAjcDACADQQhqIQMMAAsLQgEhBAJAIAFC/wGDQswAUg0AIAFBrITAgABBAiACQQIQ64CAgAAgAkEQaiACKQMAEMyBgIAAIAIoAhANACACKQMYIQEgAkEQaiACKQMIEPCAgIAAIAIoAhANACAAIAIpAxg3AxAgACABNwMIQgAhBAsgACAENwMAIAJBIGokgICAgAAL4AECAn8CfiOAgICAAEEwayICJICAgIAAQQAhAwJAA0AgA0EYRg0BIAJBCGogA2pCAjcDACADQQhqIQMMAAsLQgEhBAJAIAFC/wGDQswAUg0AIAFBzITAgABBAyACQQhqQQMQ64CAgAAgAikDCCIBQv8Bg0LLAFINACACQSBqIAIpAxAQzIGAgAAgAigCIA0AIAIpAyghBSACQSBqIAIpAxgQ8ICAgAAgAigCIA0AIAIpAyghBCAAIAE3AxggACAENwMQIAAgBTcDCEIAIQQLIAAgBDcDACACQTBqJICAgIAAC5YBAgF+An8gACkDACEBA0ACQCABUEUNAEGAgMQADwsCQAJAIAFCMIinQT9xIgJBAUcNAEHfACECDAELAkACQAJAIAJBf2pBC08NAEEuIQMMAQsCQCACQXRqQRpPDQBBNSEDDAELIAJBJU0NAUE7IQMLIAIgA2ohAgwBCyAAIAFCBoYiATcDAAwBCwsgACABQgaGNwMAIAILGgAgAK1CIIZCBIQgAa1CIIZCBIQQpICAgAALowICAX8BfiOAgICAAEEQayIDJICAgIAAIAMQtoCAgAACQCADKAIAQQFHDQAgAygCBCADKAIIELeAgIAACxCcgICAACEEIAMgAEEYdCAAQYD+A3FBCHRyIABBCHZBgP4DcSAAQRh2cnI2AgAgBCAEEISAgIAAQoCAgIBwg0IEhCADQQQQp4GAgAAhBCADIAFCOIYgAUKA/gODQiiGhCABQoCA/AeDQhiGIAFCgICA+A+DQgiGhIQgAUIIiEKAgID4D4MgAUIYiEKAgPwHg4QgAUIoiEKA/gODIAFCOIiEhIQ3AwAgBCAEEISAgIAAQoCAgIBwg0IEhCADQQgQp4GAgAAgAhCdgICAABCTgICAABCIgICAACEBIANBEGokgICAgAAgAQudAgICfwF+I4CAgIAAQRBrIgEkgICAgAACQAJAQQEgAKdB/wFxIgJBAEdBAXQgAkEBRhsiAkECRg0AIAEQtoCAgAACQCABKAIAQQFHDQAgASgCBCABKAIIELeAgIAACxC8gICAACEAEOWAgIAAIAJzQQFxRQ0BIAFBADYCACABIAJCAhD9gICAAAJAAkAgAkEBcQ0AQo7SqtzurM/1ABDSgICAACEDIAEgADcDACADQYiIwIAAQQEgAUEBENOAgIAAEIyAgIAAGgwBC0KO0qrc7qwDENKAgIAAIQMgASAANwMAIANB+IfAgABBASABQQEQ04CAgAAQjICAgAAaCyABQRBqJICAgIAAQgIPCwALQoOAgICglwEQxoCAgAAACxoAIAAQ5oCAgAAgAa1C/wGDIAIQloCAgAAaC40BAQJ/I4CAgIAAQRBrIgIkgICAgAACQCAAQv8Bg0LNAFINAEEBIAGnQf8BcSIDQQBHQQF0IANBAUYbIgNBAkYNACACQQRqELaAgIAAAkAgAigCBEEBRw0AIAIoAgggAigCDBC3gICAAAsQvICAgAAaIAAgA0EBcRDMgICAACACQRBqJICAgIAAQgIPCwALjQEBAn8jgICAgABBEGsiAiSAgICAAAJAIABC/wGDQs0AUg0AQQEgAadB/wFxIgNBAEdBAXQgA0EBRhsiA0ECRg0AIAJBBGoQtoCAgAACQCACKAIEQQFHDQAgAigCCCACKAIMELeAgIAACxC8gICAABogACADQQFxENaAgIAAIAJBEGokgICAgABCAg8LAAujAwEDfyOAgICAAEEgayICJICAgIAAAkACQAJAAkAgAEL/AYNCzQBSDQBBASABp0H/AXEiA0EAR0EBdCADQQFGGyIDQQJGDQAgAkEQahC2gICAAAJAIAIoAhBBAUcNACACKAIUIAIoAhgQt4CAgAALELyAgIAAGiAAEOKAgIAAIQQCQAJAIANBAXENACAERQ0DIAJBAzYCECACIAA3AxggAkEQahDmgICAAEIBEJeAgIAAGhDcgICAACIERQ0FIARBf2ohBAwBCyAEDQMgAkEDNgIQIAIgADcDGCACQRBqEIGBgIAAIAJBBGoQ0ICAgAACQCACKAIEQQFHDQAgAkEQaiACKAIIIAIoAgwQ0YCAgAALENyAgIAAQQFqIgRFDQQLIAQQgoGAgABBpIfAgABBDRDYgICAABDSgICAACEBIAIgADcDGCACIAOtNwMQIAFBvIfAgABBAiACQRBqQQIQ04CAgAAQjICAgAAaIAJBIGokgICAgABCAg8LAAtCg4CAgICXARDGgICAAAALQoOAgICglgEQxoCAgAAACxC0gICAAAALDgAgAEEBQgEQ/YCAgAALMQEBfyOAgICAAEEQayIBJICAgIAAIAFBBDYCACABIAAQ04GAgAAgAUEQaiSAgICAAAvuAgEDfyOAgICAAEEgayICJICAgIAAAkACQAJAIABC/wGDQs0AUg0AQQEgAadB/wFxIgNBAEdBAXQgA0EBRhsiA0ECRg0AIAJBEGoQtoCAgAACQCACKAIQQQFHDQAgAigCFCACKAIYELeAgIAACxC8gICAABogABDegICAACEEAkACQCADQQFxDQAgBEUNAyACQQU2AhAgAiAANwMYIAJBEGoQ5oCAgABCARCXgICAABoMAQsgBA0DIAJBBTYCECACIAA3AxggAkEQahCBgYCAACACQQRqENCAgIAAIAIoAgRBAUcNACACQRBqIAIoAgggAigCDBDRgICAAAtBzIfAgABBDBDYgICAABDSgICAACEBIAIgADcDGCACIAOtNwMQIAFB4IfAgABBAiACQRBqQQIQ04CAgAAQjICAgAAaIAJBIGokgICAgABCAg8LAAtCg4CAgJCXARDGgICAAAALQoOAgICwlgEQxoCAgAAAC3oBAX8jgICAgABBEGsiAiSAgICAAAJAIABC/wGDQs0AUg0AIAFC/wGDQgRSDQAgAkEEahC2gICAAAJAIAIoAgRBAUcNACACKAIIIAIoAgwQt4CAgAALIAAQ1ICAgAAgAUIgiKcQhYGAgAAgAkEQaiSAgICAAEICDwsAC3ICAX8BfiOAgICAAEEQayIBJICAgIAAIAFBBjYCACABIAAQ04GAgABBkIjAgABBGhDYgICAABDSgICAACECIAEgAK1CIIZCBIQ3AwAgAkG4iMCAAEEBIAFBARDTgICAABCMgICAABogAUEQaiSAgICAAAusAQEBfyOAgICAAEEQayICJICAgIAAAkAgAEL/AYNCzQBSDQAgAUL/AYNCzQBSDQAgAhC2gICAAAJAIAIoAgBBAUcNACACKAIEIAIoAggQt4CAgAALIAAQ1ICAgAAgARCHgYCAAEHAiMCAAEETENiAgIAAENKAgIAAIQAgAiABNwMAIABB5IjAgABBASACQQEQ04CAgAAQjICAgAAaIAJBEGokgICAgABCAg8LAAsxAQF/I4CAgIAAQRBrIgEkgICAgAAgAUEHNgIAIAEgABDSgYCAACABQRBqJICAgIAAC5cCAQF/I4CAgIAAQSBrIgMkgICAgAACQCAAQv8Bg0LNAFINACABQv8Bg0IEUg0AIAJC/wGDQsgAUg0AIANBEGoQtoCAgAACQCADKAIQQQFHDQAgAygCFCADKAIYELeAgIAACyAAENSAgIAAIANBCDYCECADIAFCIIg+AhQgA0EQahDmgICAACACQgEQloCAgAAaIANBBGoQ0ICAgAACQCADKAIEQQFHDQAgA0EQaiADKAIIIAMoAgwQ0YCAgAALQYyJwIAAQRoQ2ICAgAAQ0oCAgAAhACADIAI3AxggAyABQoSAgIBwgzcDECAAQbyJwIAAQQIgA0EQakECENOAgIAAEIyAgIAAGiADQSBqJICAgIAAQgIPCwALrAEBAX8jgICAgABBEGsiAiSAgICAAAJAIABC/wGDQs0AUg0AIAFC/wGDQs0AUg0AIAIQtoCAgAACQCACKAIAQQFHDQAgAigCBCACKAIIELeAgIAACyAAENSAgIAAIAEQioGAgABBzInAgABBEhDYgICAABDSgICAACEAIAIgATcDACAAQeiJwIAAQQEgAkEBENOAgIAAEIyAgIAAGiACQRBqJICAgIAAQgIPCwALMQEBfyOAgICAAEEQayIBJICAgIAAIAFBCTYCACABIAAQ0oGAgAAgAUEQaiSAgICAAAt/AQF/I4CAgIAAQRBrIgIkgICAgAACQCAAQv8Bg0LNAFINACABQv8Bg0LNAFINACACQQRqELaAgIAAAkAgAigCBEEBRw0AIAIoAgggAigCDBC3gICAAAsgABDUgICAACABEIyBgIAAIAEQjYGAgAAgAkEQaiSAgICAAEICDwsACzEBAX8jgICAgABBEGsiASSAgICAACABQQo2AgAgASAAENKBgIAAIAFBEGokgICAgAALXQIBfwF+I4CAgIAAQRBrIgEkgICAgABB7IjAgABBDhDYgICAABDSgICAACECIAEgADcDCCACQYSJwIAAQQEgAUEIakEBENOAgIAAEIyAgIAAGiABQRBqJICAgIAACwkAEOWAgIAArQsbAAJAIABC/wGDQs0AUQ0AAAsgABDVgICAAK0LCAAQzYCAgAALGwACQCAAQv8Bg0LNAFENAAALIAAQ5ICAgACtCwgAENeAgIAACxsAAkAgAEL/AYNCzQBRDQAACyAAEOKAgIAArQsPABDcgICAAK1CIIZCBIQLGwACQCAAQv8Bg0LNAFENAAALIAAQ3oCAgACtCxsAAkAgAEL/AYNCzQBRDQAACyAAEOeAgIAArQsPABDjgICAAK1CIIZCBIQLPgIBfwF+I4CAgIAAQRBrIgAkgICAgAAgABDhgICAACAAKQMAIAAp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gICAAEEQayIBJICAgIAAAkACQAJAAkAgAEEBcUUNACABQbuFwIAAQQkQyYCAgAAgASgCAA0CIAEgASkDCBDKgICAAAwBCyABQbSFwIAAQQcQyYCAgAAgASgCAA0BIAEgASkDCBDKgICAAAsgASkDCCECIAEpAwBQDQELAAsgAUEQaiSAgICAACACCyIAQQAQq4GAgAAgAK1CIIZCBIQgAa1CIIZCBIQQsoCAgAAL3wECAX8CfiOAgICAAEEwayIBJICAgIAAAkACQCAAQeyEwIAAQRQQ+oCAgAAQxYCAgAANABDBgICAACICEIKAgIAAIQMgAUEANgIIIAEgAjcDACABIANCIIg+AgwDQCABQSBqIAEQxICAgAAgAUEQaiABKQMgIAEpAygQs4CAgAAgASgCEEEBRw0CIAEpAxggABDFgICAAEUNAAtCg4CAgPCEARDGgICAAAALQoOAgIDQhAEQxoCAgAAACyACIAAQi4CAgAAQu4GAgAAgAEEBELyBgIAAIAFBMGokgICAgAALuAECAX8CfiOAgICAAEEQayIBJICAgIAAAkACQCAARQ0AIAAQwYCAgAAQgoCAgABCIIinSw0BQQEQq4GAgAAgAK1CIIZCBIQiAkICEJaAgIAAGkGUhcCAAEENENiAgIAAENKAgIAAIQMgASACNwMIIANBrIXAgABBASABQQhqQQEQ04CAgAAQjICAgAAaIAFBEGokgICAgAAPC0KDgICAsIUBEMaAgIAAAAtCg4CAgJCFARDGgICAAAALmgEBAn8jgICAgABBEGsiAySAgICAAAJAIABC/wGDQs0AUg0AIAFC/wGDQs0AUg0AQQEgAqdB/wFxIgRBAEdBAXQgBEEBRhsiBEECRg0AIANBBGoQtoCAgAACQCADKAIEQQFHDQAgAygCCCADKAIMELeAgIAACyAAENSAgIAAIAEgBEEBcRDMgICAACADQRBqJICAgIAAQgIPCwALCAAQvYCAgAALhwUBBX8jgICAgABB0ABrIgIkgICAgAAgAkEoaiAAELKBgIAAAkACQCACKAIoQQJGDQAgAkEIakEIaiACQShqQQhqIgMoAgA2AgAgAiACKQIoNwMIIAJBKGogARCygYCAACACKAIoQQJGDQAgAkEYakEIaiADKAIANgIAIAIgAikCKDcDGCACQShqELaAgIAAAkAgAigCKEEBRw0AIAIoAiwgAigCMBC3gICAAAsQvICAgAAaAkACQAJAELmAgIAADQAQnoCAgAAhABCfgICAAEIgiCIBIABCIIgiAFQNBCABpyAAp2siA0GA+4ADIANBgPuAA0kbIQQgAiACQRhqNgIsIAIgAkEIajYCKEEAIQMDQCADQQhGDQMCQCACQShqIANqKAIAIgUoAgBBAXFFDQAgBSgCCCIGIARLDQMgBSgCBCAGSw0DCyADQQRqIQMMAAsLQoOAgIDQ/wAQxoCAgAAAC0KDgICAwP8AEMaAgIAAAAsCQAJAIAIoAghBAUcNACACKAIMIAIoAhAQqYGAgAAMAQtBARC6gICAAEICEJeAgIAAGgsCQAJAIAIoAhhBAUcNACACKAIcIAIoAiAQqoGAgAAMAQtBAhC6gICAAEICEJeAgIAAGgsgAkEoakEIaiACQQhqQQhqKAIANgIAIAJBPGogAkEYakEIaigCADYCACACIAIpAwg3AyggAiACKQMYNwI0QeCFwIAAQQ8Q2ICAgAAQ0oCAgAAhACACQShqELOBgIAAIQEgAiACQTRqELOBgIAANwNIIAIgATcDQCAAQYSGwIAAQQIgAkHAAGpBAhDTgICAABCMgICAABogAkHQAGokgICAgABCAg8LAAsQtICAgAAAC2gBAX8jgICAgABBEGsiAiSAgICAAAJAAkAgAUICUQ0AIAJBBGogARDNgYCAAAJAIAIoAgRFDQAgAEECNgIADAILIAAgAikCCDcCBCAAQQE2AgAMAQsgAEEANgIACyACQRBqJICAgIAAC0MCAX8BfiOAgICAAEEQayIBJICAgIAAIAEgABC1gYCAAAJAIAEoAgBBAUcNAAALIAEpAwghAiABQRBqJICAgIAAIAILwgECAn8BfiOAgICAAEHAAGsiACSAgICAACAAQQhqELaAgIAAAkAgACgCCEEBRw0AIAAoAgwgACgCEBC3gICAAAsgAEEIahC2gICAACAAQRRqIgEQ0ICAgAAgAEEwaiAAQQhqELWBgIAAAkACQCAAKAIwDQAgACkDOCECIABBMGogARC1gYCAACAAKAIwQQFHDQELAAsgACAAKQM4NwMoIAAgAjcDICAAQSBqQQIQooGAgAAhAiAAQcAAaiSAgICAACACCzAAAkAgASgCAEEBRw0AIAAgASgCBCABKAIIEM6BgIAADwsgAEIANwMAIABCAjcDCAurAQEBfyOAgICAAEEgayIAJICAgIAAIABBDGoQtoCAgAACQCAAKAIMQQFHDQAgACgCECAAKAIUELeAgIAACxC8gICAABoCQBC5gICAAEUNAEKDgICA4P8AEMaAgIAAAAtBABC6gICAAEIBQgIQloCAgAAaQZSGwIAAQRIQ2ICAgAAQ0oCAgABBBEEAIABBGGpBABDTgICAABCMgICAABogAEEgaiSAgICAAEICCwkAELmAgIAArQsxAAJAIABC/wGDQgRSDQAgAUL/AYNCBFINACAAQiCIpyABQiCIpxC3gICAAEICDwsAC9wCAgJ/AX4jgICAgABBIGsiAiSAgICAACACQRBqIAAQuoGAgAACQAJAAkACQCACKAIQQQFGDQBBASABp0H/AXEiA0EAR0EBdCADQQFGGyIDQQJGDQAgAikDGCEAIAJBEGoQtoCAgAACQCACKAIQQQFHDQAgAigCFCACKAIYELeAgIAACxC8gICAABoCQAJAIANBAXENACACQQhqEMGAgIAAIgEgABCJgICAABDOgICAACACKAIIIgNBAkYNAyADRQ0EAkAgAigCDCIDIAEQgoCAgABCIIinTw0AIAEgA61CIIZCBIQQioCAgAAhAQsgARCCgICAACEEEL+AgIAAIARCIIinSw0FIAEQu4GAgAAgAEEAELyBgIAADAELIAAQrYGAgAALIAJBIGokgICAgABCAg8LAAsQtICAgAAAC0KDgICAgIUBEMaAgIAAAAtCg4CAgJCFARDGgICAAAALIwACQCABQv8Bg0LIAFENACAAQgE3AwAPCyAAIAEQwoCAgAALWwEBfyOAgICAAEEQayIBJICAgIAAQQAQq4GAgAAgAEIBEJaAgIAAGiABQQRqENCAgIAAAkAgASgCBEEBRw0AIAEoAgggASgCDBCsgYCAAAsgAUEQaiSAgICAAAvQAQMBfwF+AX8jgICAgABBIGsiAiSAgICAAEGAhcCAAEEKENiAgIAAIQMgAiAANwMIIAIgAzcDAEEAIQQDQAJAIARBEEcNAEEAIQQCQANAIARBEEYNASACQRBqIARqIAIgBGopAwA3AwAgBEEIaiEEDAALCyACQRBqQQIQooGAgAAhACACIAGtQv8BgzcDECAAQYyFwIAAQQEgAkEQakEBENOAgIAAEIyAgIAAGiACQSBqJICAgIAADwsgAkEQaiAEakICNwMAIARBCGohBAwACwttAQF/I4CAgIAAQRBrIgEkgICAgAACQCAAQv8Bg0IEUg0AIAFBBGoQtoCAgAACQCABKAIEQQFHDQAgASgCCCABKAIMELeAgIAACxC8gICAABogAEIgiKcQroGAgAAgAUEQaiSAgICAAEICDwsAC1QCAX8BfiOAgICAAEEQayIAJICAgIAAIABBBGoQtoCAgAACQCAAKAIEQQFHDQAgACgCCCAAKAIMELeAgIAACxDBgICAACEBIABBEGokgICAgAAgAQtkAgF/AX4jgICAgABBEGsiACSAgICAACAAQQRqELaAgIAAAkAgACgCBEEBRw0AIAAoAgggACgCDBC3gICAAAsQwYCAgAAQgoCAgAAhASAAQRBqJICAgIAAIAFCgICAgHCDQgSEC9wBAgF/An4jgICAgABBMGsiASSAgICAACABQSBqIAAQuoGAgAACQCABKAIgQQFGDQAgASkDKCECIAFBIGoQtoCAgAACQCABKAIgQQFHDQAgASgCJCABKAIoELeAgIAACxDBgICAACIAEIKAgIAAIQMgAUEANgIIIAEgADcDACABIANCIIg+AgwCQANAIAFBIGogARDEgICAACABQRBqIAEpAyAgASkDKBCzgICAACABKQMQIgCnQQFHDQEgASkDGCACEMWAgIAARQ0ACwsgAUEwaiSAgICAACAADwsACw8AEMiAgIAArUIghkIEhAtUAQF/I4CAgIAAQRBrIgIkgICAgAAgAiAAEPCAgIAAAkAgAigCAEEBRg0AIAFC/wGDQssAUg0AIAIpAwggARC+gICAACACQRBqJICAgIAAQgIPCwALZQEBfyOAgICAAEEQayIDJICAgIAAIAMgABDwgICAAAJAIAMoAgBBAUYNACABQv8Bg0LLAFINACACQv8Bg0IEUg0AIAMpAwggASACQiCIpxDAgICAACADQRBqJICAgIAAQgIPCwALmQEBAX8jgICAgABBEGsiASSAgICAACABIAAQ8ICAgAACQAJAIAEoAgBBAUYNACABKQMIIQAgARC2gICAAAJAIAEoAgBBAUcNACABKAIEIAEoAggQt4CAgAALELyAgIAAGhC1gICAAA0BQQEQxYGAgAAgABCggICAABogAUEQaiSAgICAAEICDwsAC0KD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AAAAlAAQAAMAAABfARAAEAAAAG8BEAADAAAAKgQQAA4AAABjb25maWcAANAAEAAGAAAApgQQAAcAAABmdW5j8AEQAAQAAADoABAABAAAACcBEAACAAAAc2V0X2FkbWluVmlkRHN0Q29uZmlnVXNlZEhhc2hhbW91bnR0bwAAACEBEAAGAAAAJwEQAAIAAABjb25maXJtYXRpb25zZGVmYXVsdF9tdWx0aXBsaWVyX2Jwc2Zsb29yX21hcmdpbl91c2RnYXNvcHRpb25zcXVvcnVtc2VuZGVyAAAAPAEQAA0AAABJARAAFgAAAKYEEAAHAAAAXwEQABAAAABvARAAAwAAACoEEAAOAAAAcgEQAAcAAAB6BBAACgAAAHkBEAAGAAAAfwEQAAYAAABDb250cmFjdAAAABIAAAAAAAAAAFdhc21hcmdzY29udHJhY3Rmbl9uYW1lAPABEAAEAAAA9AEQAAgAAAD8ARAABwAAAGV4ZWN1dGFibGVzYWx0AAAcAhAACgAAACYCEAAEAAAAY29uc3RydWN0b3JfYXJnczwCEAAQAAAAHAIQAAoAAAAmAhAABAAAAOwBEAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzaWduZXJfc2V0AABHAxAABgAAAHRocmVzaG9sZF9zZXR0aHJlc2hvbGQAAKECEAAJAAAAU2lnbmVyc1RocmVzaG9sZGV4dGVuZF90bwAAAMQCEAAJAAAAoQIQAAkAAAB0dGxfY29uZmlnc19zZXRpbnN0YW5jZXBlcnNpc3RlbnQAAADvAhAACAAAAPcCEAAKAAAAdHRsX2NvbmZpZ3NfZnJvemVuRnJvemVuSW5zdGFuY2VQZXJzaXN0ZW50TWlncmF0aW5nYWN0aXZlYWRtaW4AAEcDEAAGAAAATQMQAAUAAABzZXRfc3VwcG9ydGVkX21lc3NhZ2VfbGlibWVzc2FnZV9saWJzdXBwb3J0ZWQAAAB9AxAACwAAAIgDEAAJAAAAc2V0X2FsbG93bGlzdGFsbG93ZWRvYXBwsQMQAAcAAAC4AxAABAAAAHNldF9kZW55bGlzdGRlbmllZAAA2AMQAAYAAAC4AxAABAAAAHBhdXNlcgAA8AMQAAYAAAB1bnBhdXNlcgAEEAAIAAAAc2V0X2RlZmF1bHRfbXVsdGlwbGllcl9icHNtdWx0aXBsaWVyX2JwcyoEEAAOAAAAc2V0X2RlcG9zaXRfYWRkcmVzc2RlcG9zaXRfYWRkcmVzcwAAUwQQAA8AAABzZXRfcHJpY2VfZmVlZHByaWNlX2ZlZWR6BBAACgAAAHNldF9zdXBwb3J0ZWRfb3B0aW9uX3R5cGVzZHN0X2VpZG9wdGlvbl90eXBlcwAAAKYEEAAHAAAArQQQAAwAAABzZXRfd29ya2VyX2ZlZV9saWJmZWVfbGliAAAA3gQQAAcAAABQYXVzZWRBZG1pbnNNZXNzYWdlTGlic0FsbG93bGlzdEFsbG93bGlzdFNpemVEZW55bGlzdERlZmF1bHRNdWx0aXBsaWVyQnBzRGVwb3NpdEFkZHJlc3NTdXBwb3J0ZWRPcHRpb25UeXBlc1dvcmtlckZlZUxpYlByaWNlRmVlZADr8AEOY29udHJhY3RzcGVjdjAAAAAEAAAAAAAAAAAAAAAIRHZuRXJyb3IAAAAGAAAAAAAAAA9BdXRoRGF0YUV4cGlyZWQAAAAAAQAAAAAAAAAPRWlkTm90U3VwcG9ydGVkAAAAAAIAAAAAAAAAD0hhc2hBbHJlYWR5VXNlZAAAAAADAAAAAAAAAApJbnZhbGlkVmlkAAAAAAAEAAAAAAAAABFOb25Db250cmFjdEludm9rZQAAAAAAAAUAAAAAAAAACU9ubHlBZG1pbgAAAAAAAAYAAAAFAAAAAAAAAAAAAAAMU2V0RHN0Q29uZmlnAAAAAQAAAA5zZXRfZHN0X2NvbmZpZwAAAAAAAQAAAAAAAAAGcGFyYW1zAAAAAAPqAAAH0AAAAA5Ec3RDb25maWdQYXJhbQAAAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAGU2VuZGVyAAAAAAACAAAAAAAAAC5ObyBleHBsaWNpdCBzZW5kZXIgKHBlcm1pc3Npb25sZXNzIGV4ZWN1dGlvbikuAAAAAAAETm9uZQAAAAEAAACPQSByZWdpc3RlcmVkIGFkbWluIChlZDI1NTE5KSBzdWJtaXR0aW5nIHRoZSB0cmFuc2FjdGlvbi4KVGhlIHR1cGxlIGlzIGAocHVibGljX2tleSwgc2lnbmF0dXJlKWAgd2hlcmUgdGhlIHNpZ25hdHVyZSBjb3ZlcnMgdGhlIFNvcm9iYW4gcGF5bG9hZC4AAAAABUFkbWluAAAAAAAAAgAAA+4AAAAgAAAD7gAAAEAAAAABAAAAx0F1dGhlbnRpY2F0aW9uIGRhdGEgZm9yIERWTiBjb250cmFjdCB0cmFuc2FjdGlvbnMuCgpUaGlzIHN0cnVjdCBpcyB1c2VkIHdpdGggU29yb2JhbidzIGN1c3RvbSBhY2NvdW50IGludGVyZmFjZSB0byBhdXRob3JpemUKdHJhbnNhY3Rpb25zIHRocm91Z2ggYSBjb21iaW5hdGlvbiBvZiBhZG1pbiBzaWduYXR1cmUgYW5kIG11bHRpc2lnIHF1b3J1bS4AAAAAAAAAABNUcmFuc2FjdGlvbkF1dGhEYXRhAAAAAAQAAABERXhwaXJhdGlvbiB0aW1lc3RhbXAgKGxlZGdlciB0aW1lKSBhZnRlciB3aGljaCB0aGlzIGF1dGggaXMgaW52YWxpZC4AAAAKZXhwaXJhdGlvbgAAAAAABgAAAD1FbnRpdHkgc3VibWl0dGluZyB0aGUgdHJhbnNhY3Rpb24gKGFkbWluLCBvciBwZXJtaXNzaW9ubGVzcykuAAAAAAAABnNlbmRlcgAAAAAH0AAAAAZTZW5kZXIAAAAAADxTaWduYXR1cmVzIGZyb20gbXVsdGlzaWcgc2lnbmVycyAoc2VjcDI1NmsxLCA2NSBieXRlcyBlYWNoKS4AAAAKc2lnbmF0dXJlcwAAAAAD6gAAA+4AAABBAAAAMlZlcmlmaWVyIElEIC0gbXVzdCBtYXRjaCB0aGUgRFZOJ3MgY29uZmlndXJlZCBWSUQuAAAAAAADdmlkAAAAAAQAAAABAAAAckNvbmZpZ3VyYXRpb24gZm9yIGEgZGVzdGluYXRpb24gY2hhaW4uCgpDb250YWlucyBmZWUgY2FsY3VsYXRpb24gcGFyYW1ldGVycyBzcGVjaWZpYyB0byBlYWNoIGRlc3RpbmF0aW9uIGVuZHBvaW50LgAAAAAAAAAAAAlEc3RDb25maWcAAAAAAAADAAAAO01pbmltdW0gZmVlIG1hcmdpbiBpbiBVU0QgKHNjYWxlZCBieSBuYXRpdmUgZGVjaW1hbHMgcmF0ZSkuAAAAABBmbG9vcl9tYXJnaW5fdXNkAAAACgAAAC5HYXMgZm9yIHZlcmlmaWNhdGlvbiBvbiB0aGUgZGVzdGluYXRpb24gY2hhaW4uAAAAAAADZ2FzAAAAAAoAAABnRmVlIG11bHRpcGxpZXIgaW4gYmFzaXMgcG9pbnRzICgxMDAwMCA9IDEwMCUpLgpJZiAwLCB0aGUgZGVmYXVsdCBtdWx0aXBsaWVyIGZyb20gd29ya2VyIGNvbmZpZyBpcyB1c2VkLgAAAAAObXVsdGlwbGllcl9icHMAAAAAAAQAAAABAAAANlBhcmFtZXRlciBmb3Igc2V0dGluZyBkZXN0aW5hdGlvbiBjaGFpbiBjb25maWd1cmF0aW9uLgAAAAAAAAAAAA5Ec3RDb25maWdQYXJhbQAAAAAAAgAAACdUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBkZXN0aW5hdGlvbi4AAAAABmNvbmZpZwAAAAAH0AAAAAlEc3RDb25maWcAAAAAAAAcVGhlIGRlc3RpbmF0aW9uIGVuZHBvaW50IElELgAAAAdkc3RfZWlkAAAAAAQAAAABAAAAiVJlcHJlc2VudHMgYSBzaW5nbGUgY29udHJhY3QgaW52b2NhdGlvbiBmb3IgbXVsdGlzaWcgYXV0aG9yaXphdGlvbi4KClVzZWQgaW4gYGhhc2hfY2FsbF9kYXRhYCB0byBjb21wdXRlIHRoZSBoYXNoIHRoYXQgc2lnbmVycyBzaWduIG92ZXIuAAAAAAAAAAAAAARDYWxsAAAAAwAAABNGdW5jdGlvbiBhcmd1bWVudHMuAAAAAARhcmdzAAAD6gAAAAAAAAAYRnVuY3Rpb24gbmFtZSB0byBpbnZva2UuAAAABGZ1bmMAAAARAAAAGFRhcmdldCBjb250cmFjdCBhZGRyZXNzLgAAAAJ0bwAAAAAAEwAAAAAAAAA0VmFsaWRhdGVzIGF1dGhvcml6YXRpb24gZm9yIERWTiBjb250cmFjdCBvcGVyYXRpb25zLgAAAAxfX2NoZWNrX2F1dGgAAAADAAAAAAAAABFzaWduYXR1cmVfcGF5bG9hZAAAAAAAA+4AAAAgAAAAAAAAAAlhdXRoX2RhdGEAAAAAAAfQAAAAE1RyYW5zYWN0aW9uQXV0aERhdGEAAAAAAAAAAA1hdXRoX2NvbnRleHRzAAAAAAAD6gAAB9AAAAAHQ29udGV4dAAAAAABAAAD6QAAA+0AAAAAAAAAAwAAAAAAAADkU2V0cyB0aGUgcGF1c2VkIHN0YXRlIG9mIHRoZSB3b3JrZXIuCgpXaGVuIHBhdXNlZCwgdGhlIHdvcmtlciB3aWxsIHJlamVjdCBuZXcgam9iIGFzc2lnbm1lbnRzIChlLmcuLCBhc3NpZ25fam9iLCBnZXRfZmVlKS4KRXhpc3Rpbmcgam9icyBpbiBwcm9ncmVzcyBhcmUgbm90IGFmZmVjdGVkLgoKIyBBcmd1bWVudHMKKiBgcGF1c2VkYCAtIGB0cnVlYCB0byBwYXVzZSwgYGZhbHNlYCB0byB1bnBhdXNlAAAACnNldF9wYXVzZWQAAAAAAAEAAAAAAAAABnBhdXNlZAAAAAAAAQAAAAAAAAAAAAAA/VNldHMgYWRtaW4gc3RhdHVzIGZvciBhbiBhZGRyZXNzLgoKQWRtaW5zIGNhbiBjb25maWd1cmUgd29ya2VyIHNldHRpbmdzIGxpa2UgZmVlIG11bHRpcGxpZXJzLCBkZXBvc2l0IGFkZHJlc3NlcywKYW5kIHN1cHBvcnRlZCBvcHRpb24gdHlwZXMuCgojIEFyZ3VtZW50cwoqIGBhZG1pbmAgLSBUaGUgYWRkcmVzcyB0byBzZXQgYWRtaW4gc3RhdHVzIGZvcgoqIGBhY3RpdmVgIC0gYHRydWVgIHRvIGFkZCBhZG1pbiwgYGZhbHNlYCB0byByZW1vdmUAAAAAAAAJc2V0X2FkbWluAAAAAAAAAgAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZhY3RpdmUAAAAAAAEAAAAAAAAAAAAAATdTZXRzIHdoZXRoZXIgYSBtZXNzYWdlIGxpYnJhcnkgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgd29ya2VyLgoKTWVzc2FnZSBsaWJyYXJpZXMgKGUuZy4sIFVMTjMwMikgY2FsbCB3b3JrZXJzIHRvIGFzc2lnbiBqb2JzLiBPbmx5IHN1cHBvcnRlZApsaWJyYXJpZXMgY2FuIGludGVyYWN0IHdpdGggdGhpcyB3b3JrZXIuCgojIEFyZ3VtZW50cwoqIGBtZXNzYWdlX2xpYmAgLSBUaGUgbWVzc2FnZSBsaWJyYXJ5IGNvbnRyYWN0IGFkZHJlc3MKKiBgc3VwcG9ydGVkYCAtIGB0cnVlYCB0byBhZGQgc3VwcG9ydCwgYGZhbHNlYCB0byByZW1vdmUgc3VwcG9ydAAAAAAZc2V0X3N1cHBvcnRlZF9tZXNzYWdlX2xpYgAAAAAAAAIAAAAAAAAAC21lc3NhZ2VfbGliAAAAABMAAAAAAAAACXN1cHBvcnRlZAAAAAAAAAEAAAAAAAAAAAAAAVhTZXRzIGFsbG93bGlzdCBzdGF0dXMgZm9yIGFuIE9BcHAgYWRkcmVzcy4KCldoZW4gdGhlIGFsbG93bGlzdCBpcyBlbXB0eSwgYWxsIE9BcHBzIGFyZSBhbGxvd2VkICh1bmxlc3Mgb24gZGVueWxpc3QpLgpXaGVuIHRoZSBhbGxvd2xpc3QgaXMgbm90IGVtcHR5LCBvbmx5IGFsbG93bGlzdGVkIE9BcHBzIGFyZSBhbGxvd2VkLgpEZW55bGlzdCBhbHdheXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGFsbG93bGlzdC4KCiMgQXJndW1lbnRzCiogYG9hcHBgIC0gVGhlIE9BcHAgY29udHJhY3QgYWRkcmVzcwoqIGBhbGxvd2VkYCAtIGB0cnVlYCB0byBhZGQgdG8gYWxsb3dsaXN0LCBgZmFsc2VgIHRvIHJlbW92ZQAAAA1zZXRfYWxsb3dsaXN0AAAAAAAAAgAAAAAAAAAEb2FwcAAAABMAAAAAAAAAB2FsbG93ZWQAAAAAAQAAAAAAAAAAAAABCVNldHMgZGVueWxpc3Qgc3RhdHVzIGZvciBhbiBPQXBwIGFkZHJlc3MuCgpEZW55bGlzdGVkIE9BcHBzIGFyZSBibG9ja2VkIGZyb20gdXNpbmcgdGhpcyB3b3JrZXIsIGV2ZW4gaWYgdGhleSdyZSBvbgp0aGUgYWxsb3dsaXN0IChkZW55bGlzdCB0YWtlcyBwcmVjZWRlbmNlKS4KCiMgQXJndW1lbnRzCiogYG9hcHBgIC0gVGhlIE9BcHAgY29udHJhY3QgYWRkcmVzcwoqIGBkZW5pZWRgIC0gYHRydWVgIHRvIGFkZCB0byBkZW55bGlzdCwgYGZhbHNlYCB0byByZW1vdmUAAAAAAAAMc2V0X2RlbnlsaXN0AAAAAgAAAAAAAAAEb2FwcAAAABMAAAAAAAAABmRlbmllZAAAAAAAAQAAAAAAAAAAAAABO1NldHMgdGhlIGRlZmF1bHQgZmVlIG11bHRpcGxpZXIgaW4gYmFzaXMgcG9pbnRzLgoKVGhlIG11bHRpcGxpZXIgaXMgYXBwbGllZCB0byBiYXNlIGZlZXMgZHVyaW5nIGZlZSBjYWxjdWxhdGlvbi4gVXNlZCB3aGVuCm5vIGRlc3RpbmF0aW9uLXNwZWNpZmljIG11bHRpcGxpZXIgaXMgY29uZmlndXJlZC4KCiMgQXJndW1lbnRzCiogYGFkbWluYCAtIEFkbWluIGFkZHJlc3MgKG11c3QgcHJvdmlkZSBhdXRob3JpemF0aW9uKQoqIGBtdWx0aXBsaWVyX2Jwc2AgLSBNdWx0aXBsaWVyIGluIGJhc2lzIHBvaW50cyAoMTAwMDAgPSAxeCwgMTIwMDAgPSAxLjJ4KQAAAAAac2V0X2RlZmF1bHRfbXVsdGlwbGllcl9icHMAAAAAAAIAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAAObXVsdGlwbGllcl9icHMAAAAAAAQAAAAAAAAAAAAAAPFTZXRzIHRoZSBkZXBvc2l0IGFkZHJlc3Mgd2hlcmUgd29ya2VyIGZlZXMgYXJlIGNvbGxlY3RlZC4KCldoZW4gam9icyBhcmUgYXNzaWduZWQsIGZlZXMgYXJlIGRpcmVjdGVkIHRvIHRoaXMgYWRkcmVzcy4KCiMgQXJndW1lbnRzCiogYGFkbWluYCAtIEFkbWluIGFkZHJlc3MgKG11c3QgcHJvdmlkZSBhdXRob3JpemF0aW9uKQoqIGBkZXBvc2l0X2FkZHJlc3NgIC0gQWRkcmVzcyB0byByZWNlaXZlIGNvbGxlY3RlZCBmZWVzAAAAAAAAE3NldF9kZXBvc2l0X2FkZHJlc3MAAAAAAgAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAA9kZXBvc2l0X2FkZHJlc3MAAAAAEwAAAAAAAAAAAAABCVNldHMgc3VwcG9ydGVkIGV4ZWN1dG9yIG9wdGlvbiB0eXBlcyBmb3IgYSBkZXN0aW5hdGlvbiBlbmRwb2ludC4KCiMgQXJndW1lbnRzCiogYGFkbWluYCAtIEFkbWluIGFkZHJlc3MgKG11c3QgcHJvdmlkZSBhdXRob3JpemF0aW9uKQoqIGBlaWRgIC0gRGVzdGluYXRpb24gZW5kcG9pbnQgSUQgKGNoYWluIGlkZW50aWZpZXIpCiogYG9wdGlvbl90eXBlc2AgLSBTdXBwb3J0ZWQgb3B0aW9uIHR5cGVzLiBFYWNoIGJ5dGUgcmVwcmVzZW50cyBhbiBvcHRpb24gdHlwZS4AAAAAAAAac2V0X3N1cHBvcnRlZF9vcHRpb25fdHlwZXMAAAAAAAMAAAAAAAAABWFkbWluAAAAAAAAEwAAAAAAAAADZWlkAAAAAAQAAAAAAAAADG9wdGlvbl90eXBlcwAAAA4AAAAAAAAAAAAAARJTZXRzIHRoZSB3b3JrZXIgZmVlIGxpYnJhcnkgY29udHJhY3QgYWRkcmVzcy4KClRoZSBmZWUgbGlicmFyeSBjYWxjdWxhdGVzIGZlZXMgYmFzZWQgb24gZXhlY3V0b3Igb3B0aW9ucyBhbmQgcHJpY2UgZmVlZCBkYXRhLgoKIyBBcmd1bWVudHMKKiBgYWRtaW5gIC0gQWRtaW4gYWRkcmVzcyAobXVzdCBwcm92aWRlIGF1dGhvcml6YXRpb24pCiogYHdvcmtlcl9mZWVfbGliYCAtIEZlZSBsaWJyYXJ5IGNvbnRyYWN0IGFkZHJlc3MgaW1wbGVtZW50aW5nIGBJRXhlY3V0b3JGZWVMaWJgAAAAAAASc2V0X3dvcmtlcl9mZWVfbGliAAAAAAACAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAADndvcmtlcl9mZWVfbGliAAAAAAATAAAAAAAAAAAAAAESU2V0cyB0aGUgcHJpY2UgZmVlZCBjb250cmFjdCBhZGRyZXNzLgoKVGhlIHByaWNlIGZlZWQgcHJvdmlkZXMgZ2FzIHByaWNlcyBhbmQgZXhjaGFuZ2UgcmF0ZXMgZm9yIGNyb3NzLWNoYWluCmZlZSBjYWxjdWxhdGlvbnMuCgojIEFyZ3VtZW50cwoqIGBhZG1pbmAgLSBBZG1pbiBhZGRyZXNzIChtdXN0IHByb3ZpZGUgYXV0aG9yaXphdGlvbikKKiBgcHJpY2VfZmVlZGAgLSBQcmljZSBmZWVkIGNvbnRyYWN0IGFkZHJlc3MgaW1wbGVtZW50aW5nIGBJTGF5ZXJaZXJvUHJpY2VGZWVkYAAAAAAADnNldF9wcmljZV9mZWVkAAAAAAACAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAACnByaWNlX2ZlZWQAAAAAABMAAAAAAAAAAAAAACVSZXR1cm5zIHdoZXRoZXIgdGhlIHdvcmtlciBpcyBwYXVzZWQuAAAAAAAABnBhdXNlZAAAAAAAAAAAAAEAAAABAAAAAAAAAFVSZXR1cm5zIHdoZXRoZXIgYW4gYWRkcmVzcyBpcyBhbiBhZG1pbi4KCiMgQXJndW1lbnRzCiogYGFkbWluYCAtIFRoZSBhZGRyZXNzIHRvIGNoZWNrAAAAAAAACGlzX2FkbWluAAAAAQAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAQAAAAEAAAAAAAAAHFJldHVybnMgYWxsIGFkbWluIGFkZHJlc3Nlcy4AAAAGYWRtaW5zAAAAAAAAAAAAAQAAA+oAAAATAAAAAAAAAG9SZXR1cm5zIHdoZXRoZXIgYSBtZXNzYWdlIGxpYnJhcnkgaXMgc3VwcG9ydGVkLgoKIyBBcmd1bWVudHMKKiBgbWVzc2FnZV9saWJgIC0gTWVzc2FnZSBsaWJyYXJ5IGNvbnRyYWN0IGFkZHJlc3MAAAAAGGlzX3N1cHBvcnRlZF9tZXNzYWdlX2xpYgAAAAEAAAAAAAAAC21lc3NhZ2VfbGliAAAAABMAAAABAAAAAQAAAAAAAABzUmV0dXJucyBhbGwgc3VwcG9ydGVkIG1lc3NhZ2UgbGlicmFyeSBhZGRyZXNzZXMuCgojIFJldHVybnMKVmVjdG9yIG9mIHN1cHBvcnRlZCBtZXNzYWdlIGxpYnJhcnkgY29udHJhY3QgYWRkcmVzc2VzLgAAAAAMbWVzc2FnZV9saWJzAAAAAAAAAAEAAAPqAAAAEwAAAAAAAABaUmV0dXJucyB3aGV0aGVyIGFuIE9BcHAgaXMgb24gdGhlIGFsbG93bGlzdC4KCiMgQXJndW1lbnRzCiogYG9hcHBgIC0gT0FwcCBjb250cmFjdCBhZGRyZXNzAAAAAAAPaXNfb25fYWxsb3dsaXN0AAAAAAEAAAAAAAAABG9hcHAAAAATAAAAAQAAAAEAAAAAAAAAMVJldHVybnMgdGhlIG51bWJlciBvZiBhZGRyZXNzZXMgb24gdGhlIGFsbG93bGlzdC4AAAAAAAAOYWxsb3dsaXN0X3NpemUAAAAAAAAAAAABAAAABAAAAAAAAABZUmV0dXJucyB3aGV0aGVyIGFuIE9BcHAgaXMgb24gdGhlIGRlbnlsaXN0LgoKIyBBcmd1bWVudHMKKiBgb2FwcGAgLSBPQXBwIGNvbnRyYWN0IGFkZHJlc3MAAAAAAAAOaXNfb25fZGVueWxpc3QAAAAAAAEAAAAAAAAABG9hcHAAAAATAAAAAQAAAAEAAAAAAAAA+VJldHVybnMgd2hldGhlciBhbiBPQXBwIGhhcyBhY2Nlc3MgY29udHJvbCBsaXN0IChBQ0wpIHBlcm1pc3Npb24uCgpBQ0wgZXZhbHVhdGlvbiBvcmRlcjoKMS4gSWYgb24gZGVueWxpc3Qg4oaSIGRlbmllZAoyLiBJZiBhbGxvd2xpc3QgaXMgZW1wdHkgT1Igb24gYWxsb3dsaXN0IOKGkiBhbGxvd2VkCjMuIE90aGVyd2lzZSDihpIgZGVuaWVkCgojIEFyZ3VtZW50cwoqIGBvYXBwYCAtIE9BcHAgY29udHJhY3QgYWRkcmVzcyB0byBjaGVjawAAAAAAAAdoYXNfYWNsAAAAAAEAAAAAAAAABG9hcHAAAAATAAAAAQAAAAEAAAAAAAAAM1JldHVybnMgdGhlIGRlZmF1bHQgZmVlIG11bHRpcGxpZXIgaW4gYmFzaXMgcG9pbnRzLgAAAAAWZGVmYXVsdF9tdWx0aXBsaWVyX2JwcwAAAAAAAAAAAAEAAAAEAAAAAAAAADVSZXR1cm5zIHRoZSBkZXBvc2l0IGFkZHJlc3Mgd2hlcmUgZmVlcyBhcmUgY29sbGVjdGVkLgAAAAAAAA9kZXBvc2l0X2FkZHJlc3MAAAAAAAAAAAEAAAPoAAAAEwAAAAAAAAB8UmV0dXJucyBzdXBwb3J0ZWQgb3B0aW9uIHR5cGVzIGZvciBhIGRlc3RpbmF0aW9uIGVuZHBvaW50LgoKIyBBcmd1bWVudHMKKiBgZWlkYCAtIERlc3RpbmF0aW9uIGVuZHBvaW50IElEIChjaGFpbiBpZGVudGlmaWVyKQAAABpnZXRfc3VwcG9ydGVkX29wdGlvbl90eXBlcwAAAAAAAQAAAAAAAAADZWlkAAAAAAQAAAABAAAD6AAAAA4AAAAAAAAAMFJldHVybnMgdGhlIHdvcmtlciBmZWUgbGlicmFyeSBjb250cmFjdCBhZGRyZXNzLgAAAA53b3JrZXJfZmVlX2xpYgAAAAAAAAAAAAEAAAPoAAAAEwAAAAAAAAAoUmV0dXJucyB0aGUgcHJpY2UgZmVlZCBjb250cmFjdCBhZGRyZXNzLgAAAApwcmljZV9mZWVkAAAAAAAAAAAAAQAAA+gAAAATAAAAAAAAAHhDYWxjdWxhdGVzIHRoZSB2ZXJpZmljYXRpb24gZmVlIGZvciBhIGNyb3NzLWNoYWluIG1lc3NhZ2UuCgpDYWxsZWQgYnkgdGhlIHNlbmQgbGlicmFyeSB0byBxdW90ZSBEVk4gZmVlcyBiZWZvcmUgc2VuZGluZy4AAAAHZ2V0X2ZlZQAAAAAHAAAAAAAAAAhzZW5kX2xpYgAAABMAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAHZHN0X2VpZAAAAAAEAAAAAAAAAA1wYWNrZXRfaGVhZGVyAAAAAAAADgAAAAAAAAAMcGF5bG9hZF9oYXNoAAAD7gAAACAAAAAAAAAADWNvbmZpcm1hdGlvbnMAAAAAAAAGAAAAAAAAAAdvcHRpb25zAAAAAA4AAAABAAAACwAAAAAAAAC4QXNzaWducyBhIHZlcmlmaWNhdGlvbiBqb2IgdG8gdGhpcyBEVk4gYW5kIHJldHVybnMgZmVlIHBheW1lbnQgaW5mby4KCkNhbGxlZCBieSB0aGUgc2VuZCBsaWJyYXJ5IHdoZW4gYSBtZXNzYWdlIGlzIHNlbnQuIFRoZSBEVk4gd2lsbCBsYXRlcgp2ZXJpZnkgdGhlIG1lc3NhZ2Ugb24gdGhlIGRlc3RpbmF0aW9uIGNoYWluLgAAAAphc3NpZ25fam9iAAAAAAAHAAAAAAAAAAhzZW5kX2xpYgAAABMAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAHZHN0X2VpZAAAAAAEAAAAAAAAAA1wYWNrZXRfaGVhZGVyAAAAAAAADgAAAAAAAAAMcGF5bG9hZF9oYXNoAAAD7gAAACAAAAAAAAAADWNvbmZpcm1hdGlvbnMAAAAAAAAGAAAAAAAAAAdvcHRpb25zAAAAAA4AAAABAAAH0AAAAAxGZWVSZWNpcGllbnQAAAAAAAAARFNldHMgZGVzdGluYXRpb24gY2hhaW4gY29uZmlndXJhdGlvbnMuIFJlcXVpcmVzIGFkbWluIGF1dGhvcml6YXRpb24uAAAADnNldF9kc3RfY29uZmlnAAAAAAACAAAAAAAAAAVhZG1pbgAAAAAAABMAAAAAAAAABnBhcmFtcwAAAAAD6gAAB9AAAAAORHN0Q29uZmlnUGFyYW0AAAAAAAAAAAAAAAAAQVJldHVybnMgdGhlIGRlc3RpbmF0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGEgc3BlY2lmaWMgZW5kcG9pbnQgSUQuAAAAAAAACmRzdF9jb25maWcAAAAAAAEAAAAAAAAAB2RzdF9laWQAAAAABAAAAAEAAAPoAAAH0AAAAAlEc3RDb25maWcAAAAAAAAAAAAAJVJldHVybnMgdGhlIFZlcmlmaWVyIElEIGZvciB0aGlzIERWTi4AAAAAAAADdmlkAAAAAAAAAAABAAAABAAAAAAAAAB3Q29tcHV0ZXMgdGhlIGhhc2ggb2YgY2FsbCBkYXRhIGZvciBtdWx0aXNpZyBzaWduaW5nLgoKT2ZmLWNoYWluIHNpZ25lcnMgdXNlIHRoaXMgdG8gY29tcHV0ZSB0aGUgaGFzaCB0aGV5IG5lZWQgdG8gc2lnbi4AAAAADmhhc2hfY2FsbF9kYXRhAAAAAAADAAAAAAAAAAN2aWQAAAAABAAAAAAAAAAKZXhwaXJhdGlvbgAAAAAABgAAAAAAAAAFY2FsbHMAAAAAAAPqAAAH0AAAAARDYWxsAAAAAQAAA+4AAAAgAAAAAAAAAmRJbml0aWFsaXplcyB0aGUgRFZOIGNvbnRyYWN0LgoKIyBBcmd1bWVudHMKKiBgdmlkYCAtIFZlcmlmaWVyIElELCB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBEVk4KKiBgc2lnbmVyc2AgLSBJbml0aWFsIG11bHRpc2lnIHNpZ25lcnMgKDIwLWJ5dGUgRXRoZXJldW0gYWRkcmVzc2VzKQoqIGB0aHJlc2hvbGRgIC0gTWluaW11bSBzaWduYXR1cmVzIHJlcXVpcmVkIGZvciBtdWx0aXNpZyBvcGVyYXRpb25zCiogYGFkbWluc2AgLSBJbml0aWFsIGFkbWluIGFkZHJlc3NlcyBmb3Igb3BlcmF0aW9uYWwgZnVuY3Rpb25zCiogYHN1cHBvcnRlZF9tc2dsaWJzYCAtIE1lc3NhZ2UgbGlicmFyaWVzIHRoaXMgRFZOIHN1cHBvcnRzIChlLmcuLCBVTE4zMDIpCiogYHByaWNlX2ZlZWRgIC0gUHJpY2UgZmVlZCBjb250cmFjdCBmb3IgZmVlIGNhbGN1bGF0aW9ucwoqIGBkZWZhdWx0X211bHRpcGxpZXJfYnBzYCAtIERlZmF1bHQgZmVlIG11bHRpcGxpZXIgKDEwMDAwID0gMXgpCiogYHdvcmtlcl9mZWVfbGliYCAtIEZlZSBsaWJyYXJ5IGNvbnRyYWN0IGZvciBjb21wdXRpbmcgRFZOIGZlZXMKKiBgZGVwb3NpdF9hZGRyZXNzYCAtIEFkZHJlc3MgdG8gcmVjZWl2ZSBmZWUgcGF5bWVudHMAAAANX19jb25zdHJ1Y3RvcgAAAAAAAAkAAAAAAAAAA3ZpZAAAAAAEAAAAAAAAAAdzaWduZXJzAAAAA+oAAAPuAAAAFAAAAAAAAAAJdGhyZXNob2xkAAAAAAAABAAAAAAAAAAGYWRtaW5zAAAAAAPqAAAAEwAAAAAAAAARc3VwcG9ydGVkX21zZ2xpYnMAAAAAAAPqAAAAEwAAAAAAAAAKcHJpY2VfZmVlZAAAAAAAEwAAAAAAAAAWZGVmYXVsdF9tdWx0aXBsaWVyX2JwcwAAAAAABAAAAAAAAAAOd29ya2VyX2ZlZV9saWIAAAAAABMAAAAAAAAAD2RlcG9zaXRfYWRkcmVzcwAAAAATAAAAAAAAAAAAAAFqU2V0cyBhZG1pbiBzdGF0dXMgZm9yIGFuIGFkZHJlc3MuIENhbiBiZSBjYWxsZWQgYnkgYW4gZXhpc3RpbmcgYWRtaW4uCgpUaGlzIGFsbG93cyBleGlzdGluZyBhZG1pbnMgdG8gYWRkIG9yIHJlbW92ZSBvdGhlciBhZG1pbnMgd2l0aG91dCBnb2luZyB0aHJvdWdoCnRoZSBvd25lci9tdWx0aXNpZyBwYXRoLgoKIyBBcmd1bWVudHMKKiBgY2FsbGVyYCAtIFRoZSBhZG1pbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gKG11c3QgcHJvdmlkZSBhdXRob3JpemF0aW9uKQoqIGBhZG1pbmAgLSBUaGUgYWRkcmVzcyB0byBzZXQgYWRtaW4gc3RhdHVzIGZvcgoqIGBhY3RpdmVgIC0gYHRydWVgIHRvIGFkZCBhZG1pbiwgYGZhbHNlYCB0byByZW1vdmUAAAAAABJzZXRfYWRtaW5fYnlfYWRtaW4AAAAAAAMAAAAAAAAABmNhbGxlcgAAAAAAEwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZhY3RpdmUAAAAAAAEAAAAAAAAAAAAAAAAAAAAKYXV0aG9yaXplcgAAAAAAAAAAAAEAAAATAAAAAgAAAAAAAAAAAAAACkR2blN0b3JhZ2UAAAAAAAMAAAAAAAAAAAAAAANWaWQAAAAAAQAAAAAAAAAJRHN0Q29uZmlnAAAAAAAAAQAAAAQAAAABAAAAAAAAAAhVc2VkSGFzaAAAAAEAAAPuAAAAIAAAAAAAAAGPU2V0cyBUVEwgY29uZmlncyBmb3IgaW5zdGFuY2UgYW5kIHBlcnNpc3RlbnQgc3RvcmFnZS4KCi0gYE5vbmVgIHZhbHVlcyByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgY29uZmlnIChkaXNhYmxlcyBhdXRvLWV4dGVuc2lvbiBmb3IgdGhhdCB0eXBlKQotIFZhbGlkYXRlcyB0aGF0IGB0aHJlc2hvbGQgPD0gZXh0ZW5kX3RvIDw9IE1BWF9UVExgCgojIEFyZ3VtZW50cwotIGBpbnN0YW5jZWAgLSBUVEwgY29uZmlnIGZvciBpbnN0YW5jZSBzdG9yYWdlCi0gYHBlcnNpc3RlbnRgIC0gVFRMIGNvbmZpZyBmb3IgcGVyc2lzdGVudCBzdG9yYWdlCgojIFBhbmljcwotIGBUdGxDb25maWdGcm96ZW5gIGlmIGNvbmZpZ3MgYXJlIGZyb3plbgotIGBJbnZhbGlkVHRsQ29uZmlnYCBpZiB2YWxpZGF0aW9uIGZhaWxzAAAAAA9zZXRfdHRsX2NvbmZpZ3MAAAAAAgAAAAAAAAAIaW5zdGFuY2UAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAACnBlcnNpc3RlbnQAAAAAA+gAAAfQAAAACVR0bENvbmZpZwAAAAAAAAAAAAAAAAAASFJldHVybnMgdGhlIGN1cnJlbnQgVFRMIGNvbmZpZ3MgYXMgKGluc3RhbmNlX2NvbmZpZywgcGVyc2lzdGVudF9jb25maWcpLgAAAAt0dGxfY29uZmlncwAAAAAAAAAAAQAAA+0AAAACAAAD6AAAB9AAAAAJVHRsQ29uZmlnAAAAAAAD6AAAB9AAAAAJVHRsQ29uZmlnAAAAAAAAAAAAAOFQZXJtYW5lbnRseSBmcmVlemVzIFRUTCBjb25maWdzLCBwcmV2ZW50aW5nIGFueSBmdXR1cmUgbW9kaWZpY2F0aW9ucy4KClRoaXMgaXMgaXJyZXZlcnNpYmxlIGFuZCBwcm92aWRlcyBpbW11dGFiaWxpdHkgZ3VhcmFudGVlcyB0byB1c2Vycy4KRW1pdHMgYFR0bENvbmZpZ3NGcm96ZW5gIGV2ZW50LgoKIyBQYW5pY3MKLSBgVHRsQ29uZmlnQWxyZWFkeUZyb3plbmAgaWYgYWxyZWFkeSBmcm96ZW4AAAAAAAASZnJlZXplX3R0bF9jb25maWdzAAAAAAAAAAAAAAAAAAAAAAAnUmV0dXJucyB3aGV0aGVyIFRUTCBjb25maWdzIGFyZSBmcm96ZW4uAAAAABVpc190dGxfY29uZmlnc19mcm96ZW4AAAAAAAAAAAAAAQAAAAEAAAAAAAAApUV4dGVuZHMgdGhlIGluc3RhbmNlIFRUTC4KCiMgQXJndW1lbnRzCgoqIGB0aHJlc2hvbGRgIC0gVGhlIHRocmVzaG9sZCB0byBleHRlbmQgdGhlIFRUTCAoaWYgY3VycmVudCBUVEwgaXMgYmVsb3cgdGhpcywgZXh0ZW5kKS4KKiBgZXh0ZW5kX3RvYCAtIFRoZSBUVEwgdG8gZXh0ZW5kIHRvLgAAAAAAABNleHRlbmRfaW5zdGFuY2VfdHRsAAAAAAIAAAAAAAAACXRocmVzaG9sZAAAAAAAAAQAAAAAAAAACWV4dGVuZF90bwAAAAAAAAQAAAAAAAAAAAAAAElBZGRzIG9yIHJlbW92ZXMgYSBzaWduZXIgZnJvbSB0aGUgbXVsdGlzaWcuIFJlcXVpcmVzIG93bmVyIGF1dGhvcml6YXRpb24uAAAAAAAACnNldF9zaWduZXIAAAAAAAIAAAAAAAAABnNpZ25lcgAAAAAD7gAAABQAAAAAAAAABmFjdGl2ZQAAAAAAAQAAAAAAAAAAAAAARFNldHMgdGhlIHNpZ25hdHVyZSB0aHJlc2hvbGQgKHF1b3J1bSkuIFJlcXVpcmVzIG93bmVyIGF1dGhvcml6YXRpb24uAAAADXNldF90aHJlc2hvbGQAAAAAAAABAAAAAAAAAAl0aHJlc2hvbGQAAAAAAAAEAAAAAAAAAAAAAAAfUmV0dXJucyBhbGwgcmVnaXN0ZXJlZCBzaWduZXJzLgAAAAALZ2V0X3NpZ25lcnMAAAAAAAAAAAEAAAPqAAAD7gAAABQAAAAAAAAAL1JldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIHNpZ25lcnMuAAAAAA10b3RhbF9zaWduZXJzAAAAAAAAAAAAAAEAAAAEAAAAAAAAACxDaGVja3MgaWYgYW4gYWRkcmVzcyBpcyBhIHJlZ2lzdGVyZWQgc2lnbmVyLgAAAAlpc19zaWduZXIAAAAAAAABAAAAAAAAAAZzaWduZXIAAAAAA+4AAAAUAAAAAQAAAAEAAAAAAAAAMVJldHVybnMgdGhlIGN1cnJlbnQgc2lnbmF0dXJlIHRocmVzaG9sZCAocXVvcnVtKS4AAAAAAAAJdGhyZXNob2xkAAAAAAAAAAAAAAEAAAAEAAAAAAAAADVWZXJpZmllcyBzaWduYXR1cmVzIGFnYWluc3QgdGhlIGNvbmZpZ3VyZWQgdGhyZXNob2xkLgAAAAAAABF2ZXJpZnlfc2lnbmF0dXJlcwAAAAAAAAIAAAAAAAAABmRpZ2VzdAAAAAAD7gAAACAAAAAAAAAACnNpZ25hdHVyZXMAAAAAA+oAAAPuAAAAQQAAAAAAAAAAAAAAL1ZlcmlmaWVzIHNpZ25hdHVyZXMgYWdhaW5zdCBhIGN1c3RvbSB0aHJlc2hvbGQuAAAAABN2ZXJpZnlfbl9zaWduYXR1cmVzAAAAAAMAAAAAAAAABmRpZ2VzdAAAAAAD7gAAACAAAAAAAAAACnNpZ25hdHVyZXMAAAAAA+oAAAPuAAAAQQAAAAAAAAAJdGhyZXNob2xkAAAAAAAABAAAAAAAAAAAAAAAlVRoZSB0eXBlIG9mIGRhdGEgcmVxdWlyZWQgZm9yIG1pZ3JhdGlvbi4KVXBncmFkZXMgdGhlIGNvbnRyYWN0IHRvIG5ldyBXQVNNIGJ5dGVjb2RlLgpTZXRzIGEgbWlncmF0aW9uIGZsYWcgdGhhdCBtdXN0IGJlIGNsZWFyZWQgYnkgY2FsbGluZyBgbWlncmF0ZWAuAAAAAAAAB3VwZ3JhZGUAAAAAAQAAAAAAAAANbmV3X3dhc21faGFzaAAAAAAAA+4AAAAgAAAAAAAAAAAAAAB2UnVucyBtaWdyYXRpb24gbG9naWMgYWZ0ZXIgYW4gdXBncmFkZS4KQ2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIG1pZ3JhdGlvbiBmbGFnIGlzIHNldCBieSBhIHByZXZpb3VzIGB1cGdyYWRlYCBjYWxsLgAAAAAAB21pZ3JhdGUAAAAAAQAAAAAAAAAObWlncmF0aW9uX2RhdGEAAAAAAA4AAAAAAAAAAAAAAF5QZXJtYW5lbnRseSBmcmVlemVzIHRoZSBjb250cmFjdCwgcHJldmVudGluZyBhbnkgZnV0dXJlIHVwZ3JhZGVzLgpUaGlzIGFjdGlvbiBpcyBpcnJldmVyc2libGUuAAAAAAAGZnJlZXplAAAAAAAAAAAAAAAAAAAAAAA7UmV0dXJucyB3aGV0aGVyIHRoZSBjb250cmFjdCBpcyBmcm96ZW4gKHVwZ3JhZGVzIGRpc2FibGVkKS4AAAAACWlzX2Zyb3plbgAAAAAAAAAAAAABAAAAAQAAAAQAAAAAAAAAAAAAAA1FbmRwb2ludEVycm9yAAAAAAAAGQAAAAAAAAARQWxyZWFkeVJlZ2lzdGVyZWQAAAAAAAABAAAAAAAAAA1Db21wb3NlRXhpc3RzAAAAAAAAAgAAAAAAAAAPQ29tcG9zZU5vdEZvdW5kAAAAAAMAAAAAAAAAHERlZmF1bHRSZWNlaXZlTGliVW5hdmFpbGFibGUAAAAEAAAAAAAAABlEZWZhdWx0U2VuZExpYlVuYXZhaWxhYmxlAAAAAAAABQAAAAAAAAAVSW5zdWZmaWNpZW50TmF0aXZlRmVlAAAAAAAABgAAAAAAAAASSW5zdWZmaWNpZW50WnJvRmVlAAAAAAAHAAAAAAAAABBJbnZhbGlkRmVlQW1vdW50AAAACAAAAAAAAAANSW52YWxpZEV4cGlyeQAAAAAAAAkAAAAAAAAADEludmFsaWRJbmRleAAAAAoAAAAAAAAADEludmFsaWROb25jZQAAAAsAAAAAAAAAEkludmFsaWRQYXlsb2FkSGFzaAAAAAAADAAAAAAAAAAVSW52YWxpZFJlY2VpdmVMaWJyYXJ5AAAAAAAADQAAAAAAAAART25seU5vbkRlZmF1bHRMaWIAAAAAAAAOAAAAAAAAAA5Pbmx5UmVjZWl2ZUxpYgAAAAAADwAAAAAAAAART25seVJlZ2lzdGVyZWRMaWIAAAAAAAAQAAAAAAAAAAtPbmx5U2VuZExpYgAAAAARAAAAAAAA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ZXIgYWRkcmVzcyBvbiB0aGUgZGVzdGluYXRpb24gY2hhaW4gKDMyIGJ5dGVzKS4AAAAAAAAIcmVjZWl2ZXIAAAPuAAAAIAAAAAEAAABNU291cmNlIG1lc3NhZ2UgaW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgd2hlcmUgYSBjcm9zcy1jaGFpbiBtZXNzYWdlIGNhbWUgZnJvbS4AAAAAAAAAAAAABk9yaWdpbgAAAAAAAwAAABdOb25jZSBmb3IgdGhpcyBwYXRod2F5LgAAAAAFbm9uY2UAAAAAAAAGAAAALlNlbmRlciBhZGRyZXNzIG9uIHRoZSBzb3VyY2UgY2hhaW4gKDMyIGJ5dGVzKS4AAAAAAAZzZW5kZXIAAAAAA+4AAAAgAAAAJlNvdXJjZSBlbmRwb2ludCBJRCAoY2hhaW4gaWRlbnRpZmllcikuAAAAAAAHc3JjX2VpZAAAAAAEAAAAAQAAAChGZWUgc3RydWN0dXJlIGZvciBjcm9zcy1jaGFpbiBtZXNzYWdpbmcuAAAAAAAAAAxNZXNzYWdpbmdGZWUAAAACAAAAH0ZlZSBwYWlkIGluIG5hdGl2ZSB0b2tlbiAoWExNKS4AAAAACm5hdGl2ZV9mZWUAAAAAAAsAAAAoRmVlIHBhaWQgaW4gWlJPIHRva2VuIChMYXllclplcm8gdG9rZW4pLgAAAAd6cm9fZmVlAAAAAAsAAAABAAAAQlJlY2VpcHQgcmV0dXJuZWQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHNlbmRpbmcgYSBjcm9zcy1jaGFpbiBtZXNzYWdlLgAAAAAAAAAAABBNZXNzYWdpbmdSZWNlaXB0AAAAAwAAAClUaGUgZmVlcyBjaGFyZ2VkIGZvciBzZW5kaW5nIHRoZSBtZXNzYWdlLgAAAAAAAANmZWUAAAAH0AAAAAxNZXNzYWdpbmdGZWUAAAArR2xvYmFsbHkgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBtZXNzYWdlLgAAAAAEZ3VpZAAAA+4AAAAgAAAAJFRoZSBvdXRib3VuZCBub25jZSBmb3IgdGhpcyBwYXRod2F5LgAAAAVub25jZQAAAAAAAAYAAAACAAAAOFR5cGUgb2YgbWVzc2FnZSBsaWJyYXJ5IGluZGljYXRpbmcgc3VwcG9ydGVkIG9wZXJhdGlvbnMuAAAAAAAAAA5NZXNzYWdlTGliVHlwZQAAAAAAAwAAAAAAAAAfU3VwcG9ydHMgb25seSBzZW5kaW5nIG1lc3NhZ2VzLgAAAAAEU2VuZAAAAAAAAAAhU3VwcG9ydHMgb25seSByZWNlaXZpbmcgbWVzc2FnZXMuAAAAAAAAB1JlY2VpdmUAAAAAAAAAAC1TdXBwb3J0cyBib3RoIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBtZXNzYWdlcy4AAAAAAAAOU2VuZEFuZFJlY2VpdmUAAAAAAAEAAAC3VmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgYSBtZXNzYWdlIGxpYnJhcnkuCgpOb3RlOiBgbWlub3JgIGFuZCBgZW5kcG9pbnRfdmVyc2lvbmAgdXNlIGB1MzJgIGluc3RlYWQgb2YgYHU4YCBiZWNhdXNlIFN0ZWxsYXIgZG9lcyBub3QKc3VwcG9ydCBgdThgIHR5cGVzIGluIGNvbnRyYWN0IGludGVyZmFjZSBmdW5jdGlvbnMuAAAAAAAAAAARTWVzc2FnZUxpYlZlcnNpb24AAAAAAAADAAAAM0VuZHBvaW50IHZlcnNpb24gKHNob3VsZCBub3QgZXhjZWVkIHU4OjpNQVggPSAyNTUpLgAAAAAQZW5kcG9pbnRfdmVyc2lvbgAAAAQAAAAVTWFqb3IgdmVyc2lvbiBudW1iZXIuAAAAAAAABW1ham9yAAAAAAAABgAAADdNaW5vciB2ZXJzaW9uIG51bWJlciAoc2hvdWxkIG5vdCBleGNlZWQgdTg6Ok1BWCA9IDI1NSkuAAAAAAVtaW5vcgAAAAAAAAQAAAABAAAANlRpbWVvdXQgY29uZmlndXJhdGlvbiBmb3IgcmVjZWl2ZSBsaWJyYXJ5IHRyYW5zaXRpb25zLgAAAAAAAAAAAAdUaW1lb3V0AAAAAAIAAAAoVW5peCB0aW1lc3RhbXAgd2hlbiB0aGUgdGltZW91dCBleHBpcmVzLgAAAAZleHBpcnkAAAAAAAYAAAApVGhlIG5ldyBsaWJyYXJ5IGFkZHJlc3MgdG8gdHJhbnNpdGlvbiB0by4AAAAAAAADbGliAAAAABMAAAABAAAANVBhcmFtZXRlcnMgZm9yIHNldHRpbmcgbWVzc2FnZSBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24uAAAAAAAAAAAAAA5TZXRDb25maWdQYXJhbQAAAAAAAwAAAB9YRFItZW5jb2RlZCBjb25maWd1cmF0aW9uIGRhdGEuAAAAAAZjb25maWcAAAAAAA4AAAAwVGhlIHR5cGUgb2YgY29uZmlndXJhdGlvbiAoZS5nLiwgZXhlY3V0b3IsIFVMTikuAAAAC2NvbmZpZ190eXBlAAAAAAQAAAAnVGhlIGVuZHBvaW50IElEIHRoaXMgY29uZmlnIGFwcGxpZXMgdG8uAAAAAANlaWQAAAAABAAAAAEAAAAxUmVzb2x2ZWQgbGlicmFyeSBpbmZvcm1hdGlvbiB3aXRoIGRlZmF1bHQgc3RhdHVzLgAAAAAAAAAAAAAPUmVzb2x2ZWRMaWJyYXJ5AAAAAAIAAABEV2hldGhlciB0aGlzIGlzIHRoZSBkZWZhdWx0IGxpYnJhcnkgKHRydWUpIG9yIE9BcHAtc3BlY2lmaWMgKGZhbHNlKS4AAAAKaXNfZGVmYXVsdAAAAAAAAQAAAB1UaGUgcmVzb2x2ZWQgbGlicmFyeSBhZGRyZXNzLgAAAAAAAANsaWIAAAAAEwAAAAEAAABIT3V0Ym91bmQgcGFja2V0IGNvbnRhaW5pbmcgYWxsIGluZm9ybWF0aW9uIGZvciBjcm9zcy1jaGFpbiB0cmFuc21pc3Npb24uAAAAAAAAAA5PdXRib3VuZFBhY2tldAAAAAAABwAAABhEZXN0aW5hdGlvbiBlbmRwb2ludCBJRC4AAAAHZHN0X2VpZAAAAAAEAAAALEdsb2JhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIG1lc3NhZ2UuAAAABGd1aWQAAAPuAAAAIAAAABRUaGUgbWVzc2FnZSBwYXlsb2FkLgAAAAdtZXNzYWdlAAAAAA4AAAAgT3V0Ym91bmQgbm9uY2UgZm9yIHRoaXMgcGF0aHdheS4AAAAFbm9uY2UAAAAAAAAGAAAAMVJlY2VpdmVyIGFkZHJlc3Mgb24gZGVzdGluYXRpb24gY2hhaW4gKDMyIGJ5dGVzKS4AAAAAAAAIcmVjZWl2ZXIAAAPuAAAAIAAAAB9TZW5kZXIgYWRkcmVzcyBvbiBzb3VyY2UgY2hhaW4uAAAAAAZzZW5kZXIAAAAAABMAAAATU291cmNlIGVuZHBvaW50IElELgAAAAAHc3JjX2VpZAAAAAAEAAAAAQAAACtBIGZlZSByZWNpcGllbnQgd2l0aCB0aGUgYW1vdW50IHRvIGJlIHBhaWQuAAAAAAAAAAAMRmVlUmVjaXBpZW50AAAAAgAAABVBbW91bnQgb2YgZmVlIHRvIHBheS4AAAAAAAAGYW1vdW50AAAAAAALAAAAH1RoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGZlZSB0by4AAAAAAnRvAAAAAAATAAAAAQAAADxSZXN1bHQgb2Ygc2VuZCBvcGVyYXRpb24gY29udGFpbmluZyBmZWVzIGFuZCBlbmNvZGVkIHBhY2tldC4AAAAAAAAADUZlZXNBbmRQYWNrZXQAAAAAAAADAAAAKlRoZSBlbmNvZGVkIHBhY2tldCByZWFkeSBmb3IgdHJhbnNtaXNzaW9uLgAAAAAADmVuY29kZWRfcGFja2V0AAAAAAAOAAAAP0xpc3Qgb2YgbmF0aXZlIHRva2VuIGZlZSByZWNpcGllbnRzIChleGVjdXRvciwgRFZOcywgdHJlYXN1cnkpLgAAAAAVbmF0aXZlX2ZlZV9yZWNpcGllbnRzAAAAAAAD6gAAB9AAAAAMRmVlUmVjaXBpZW50AAAALExpc3Qgb2YgWlJPIHRva2VuIGZlZSByZWNpcGllbnRzICh0cmVhc3VyeSkuAAAAEnpyb19mZWVfcmVjaXBpZW50cwAAAAAD6gAAB9AAAAAMRmVlUmVjaXBpZW50AAAAAQAAAOFQYXJhbWV0ZXJzIGZvciBEVk4gZmVlIGNhbGN1bGF0aW9uLgoKQ29udGFpbnMgYWxsIGlucHV0cyBuZWVkZWQgYnkgdGhlIGZlZSBsaWJyYXJ5IHRvIGNhbGN1bGF0ZSB2ZXJpZmljYXRpb24gZmVlcwpmb3IgY3Jvc3MtY2hhaW4gbWVzc2FnZXMuIEluY2x1ZGVzIG1lc3NhZ2UgcGFyYW1ldGVycywgY29tbW9uIGNvbmZpZ3VyYXRpb24sCmFuZCBkZXN0aW5hdGlvbi1zcGVjaWZpYyBzZXR0aW5ncy4AAAAAAAAAAAAADER2bkZlZVBhcmFtcwAAAAoAAAAnTnVtYmVyIG9mIGJsb2NrIGNvbmZpcm1hdGlvbnMgcmVxdWlyZWQuAAAAAA1jb25maXJtYXRpb25zAAAAAAAABgAAAExEZWZhdWx0IGZlZSBtdWx0aXBsaWVyIGluIGJhc2lzIHBvaW50cyAodXNlZCBpZiBubyBkc3Qtc3BlY2lmaWMgbXVsdGlwbGllcikuAAAAFmRlZmF1bHRfbXVsdGlwbGllcl9icHMAAAAAAAQAAAArRGVzdGluYXRpb24gZW5kcG9pbnQgSUQgKGNoYWluIGlkZW50aWZpZXIpLgAAAAAHZHN0X2VpZAAAAAAEAAAAI01pbmltdW0gZmVlIG1hcmdpbiBpbiBVU0QgKHNjYWxlZCkuAAAAABBmbG9vcl9tYXJnaW5fdXNkAAAACgAAARA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpEZXN0aW5hdGlvbi1TcGVjaWZpYyBDb25maWd1cmF0aW9uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkdhcyBlc3RpbWF0ZSBmb3IgdmVyaWZpY2F0aW9uIG9uIGRlc3RpbmF0aW9uIGNoYWluLgAAAANnYXMAAAAACgAAAEZEZXN0aW5hdGlvbi1zcGVjaWZpYyBmZWUgbXVsdGlwbGllciBpbiBiYXNpcyBwb2ludHMgKDAgPSB1c2UgZGVmYXVsdCkuAAAAAAAObXVsdGlwbGllcl9icHMAAAAAAAQAAAALRFZOIG9wdGlvbnMAAAAAB29wdGlvbnMAAAAADgAAARA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDb21tb24gQ29uZmlndXJhdGlvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpQcmljZSBmZWVkIGNvbnRyYWN0IGFkZHJlc3MgZm9yIGdhcyBwcmljZSBhbmQgZXhjaGFuZ2UgcmF0ZSBkYXRhLgAAAApwcmljZV9mZWVkAAAAAAATAAAAJ051bWJlciBvZiByZXF1aXJlZCBzaWduYXR1cmVzIChxdW9ydW0pLgAAAAAGcXVvcnVtAAAAAAAEAAAA5T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ck1lc3NhZ2UgUGFyYW1ldGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgT0FwcCBzZW5kZXIgYWRkcmVzcy4AAAAAAAAGc2VuZGVyAAAAAAATAAAAAQAAAONQYXJhbWV0ZXJzIGZvciBleGVjdXRvciBmZWUgY2FsY3VsYXRpb24uCgpDb250YWlucyBhbGwgaW5wdXRzIG5lZWRlZCBieSB0aGUgZmVlIGxpYnJhcnkgdG8gY2FsY3VsYXRlIGV4ZWN1dGlvbiBmZWVzCmZvciBjcm9zcy1jaGFpbiBtZXNzYWdlcy4gSW5jbHVkZXMgbWVzc2FnZSBwYXJhbWV0ZXJzLCBjb21tb24gY29uZmlndXJhdGlvbiwKYW5kIGRlc3RpbmF0aW9uLXNwZWNpZmljIHNldHRpbmdzLgAAAAAAAAAACUZlZVBhcmFtcwAAAAAAAAsAAAAmU2l6ZSBvZiB0aGUgbWVzc2FnZSBjYWxsZGF0YSBpbiBieXRlcy4AAAAAAA1jYWxsZGF0YV9zaXplAAAAAAAABAAAAExEZWZhdWx0IGZlZSBtdWx0aXBsaWVyIGluIGJhc2lzIHBvaW50cyAodXNlZCBpZiBubyBkc3Qtc3BlY2lmaWMgbXVsdGlwbGllcikuAAAAFmRlZmF1bHRfbXVsdGlwbGllcl9icHMAAAAAAAQAAAArRGVzdGluYXRpb24gZW5kcG9pbnQgSUQgKGNoYWluIGlkZW50aWZpZXIpLgAAAAAHZHN0X2VpZAAAAAAEAAAAI01pbmltdW0gZmVlIG1hcmdpbiBpbiBVU0QgKHNjYWxlZCkuAAAAABBmbG9vcl9tYXJnaW5fdXNkAAAACgAAADZCYXNlIGdhcyBmb3IgZWFjaCBsekNvbXBvc2UgY2FsbCBvbiBkZXN0aW5hdGlvbiBjaGFpbi4AAAAAABNsel9jb21wb3NlX2Jhc2VfZ2FzAAAAAAYAAAETPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRGVzdGluYXRpb24tU3BlY2lmaWMgQ29uZmlndXJhdGlvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpCYXNlIGdhcyBmb3IgbHpSZWNlaXZlIGV4ZWN1dGlvbiBvbiBkZXN0aW5hdGlvbiBjaGFpbi4AAAAAE2x6X3JlY2VpdmVfYmFzZV9nYXMAAAAABgAAAEZEZXN0aW5hdGlvbi1zcGVjaWZpYyBmZWUgbXVsdGlwbGllciBpbiBiYXNpcyBwb2ludHMgKDAgPSB1c2UgZGVmYXVsdCkuAAAAAAAObXVsdGlwbGllcl9icHMAAAAAAAQAAAAsTWF4aW11bSBuYXRpdmUgdG9rZW4gdmFsdWUgdGhhdCBjYW4gYmUgc2VudC4AAAAKbmF0aXZlX2NhcAAAAAAACgAAAEZFbmNvZGVkIGV4ZWN1dG9yIG9wdGlvbnMgKGx6UmVjZWl2ZSBnYXMsIGx6Q29tcG9zZSwgbmF0aXZlRHJvcCwgZXRjLikuAAAAAAAHb3B0aW9ucwAAAAAOAAABED09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNvbW1vbiBDb25maWd1cmF0aW9uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClByaWNlIGZlZWQgY29udHJhY3QgYWRkcmVzcyBmb3IgZ2FzIHByaWNlIGFuZCBleGNoYW5nZSByYXRlIGRhdGEuAAAACnByaWNlX2ZlZWQAAAAAABMAAADlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KTWVzc2FnZSBQYXJhbWV0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBPQXBwIHNlbmRlciBhZGRyZXNzLgAAAAAAAAZzZW5kZXIAAAAAABMAAAABAAAAhEdhcyBwcmljZSBpbmZvcm1hdGlvbiBmb3IgYSBkZXN0aW5hdGlvbiBlbmRwb2ludC4KCkNvbnRhaW5zIHRoZSBleGNoYW5nZSByYXRlIGFuZCBnYXMgY29zdHMgbmVlZGVkIGZvciBjcm9zcy1jaGFpbiBmZWUgY2FsY3VsYXRpb25zLgAAAAAAAAAFUHJpY2UAAAAAAAADAAAAN0dhcyBjb3N0IHBlciBieXRlIG9mIGNhbGxkYXRhIG9uIHRoZSBkZXN0aW5hdGlvbiBjaGFpbi4AAAAADGdhc19wZXJfYnl0ZQAAAAQAAABCR2FzIHByaWNlIGluIHRoZSBzbWFsbGVzdCB1bml0ICh3ZWkgZm9yIEVWTSwgc3Ryb29wcyBmb3IgU3RlbGxhcikuAAAAAAARZ2FzX3ByaWNlX2luX3VuaXQAAAAAAAAGAAAAqVByaWNlIHJhdGlvID0gKHJlbW90ZSBuYXRpdmUgdG9rZW4gcHJpY2UgLyBsb2NhbCBuYXRpdmUgdG9rZW4gcHJpY2UpICogUFJJQ0VfUkFUSU9fREVOT01JTkFUT1IuClVzZWQgdG8gY29udmVydCBkZXN0aW5hdGlvbiBjaGFpbiBnYXMgY29zdHMgdG8gc291cmNlIGNoYWluIG5hdGl2ZSB0b2tlbi4AAAAAAAALcHJpY2VfcmF0aW8AAAAACgAAAAEAAACARmVlIGVzdGltYXRpb24gcmVzdWx0IHdpdGggZGV0YWlsZWQgYnJlYWtkb3duLgoKQ29udGFpbnMgdGhlIGNhbGN1bGF0ZWQgZmVlIGFuZCBhbGwgaW50ZXJtZWRpYXRlIHZhbHVlcyB1c2VkIGluIHRoZSBjYWxjdWxhdGlvbi4AAAAAAAAAC0ZlZUVzdGltYXRlAAAAAAQAAAAwU291cmNlIGNoYWluIG5hdGl2ZSB0b2tlbiBwcmljZSBpbiBVU0QgKHNjYWxlZCkuAAAAEG5hdGl2ZV9wcmljZV91c2QAAAAKAAAAJVByaWNlIHJhdGlvIHVzZWQgZm9yIHRoZSBjYWxjdWxhdGlvbi4AAAAAAAALcHJpY2VfcmF0aW8AAAAACgAAADJEZW5vbWluYXRvciBmb3IgdGhlIHByaWNlIHJhdGlvICh0eXBpY2FsbHkgMTBeMjApLgAAAAAAF3ByaWNlX3JhdGlvX2Rlbm9taW5hdG9yAAAAAAoAAAAxVG90YWwgZ2FzIGZlZSBpbiBzb3VyY2UgY2hhaW4gbmF0aXZlIHRva2VuIHVuaXRzLgAAAAAAAA10b3RhbF9nYXNfZmVlAAAAAAAACwAAAAQAAAAdUGFja2V0Q29kZWNWMUVycm9yOiAxMTAwLTExMDkAAAAAAAAAAAAAElBhY2tldENvZGVjVjFFcnJvcgAAAAAAAgAAAAAAAAATSW52YWxpZFBhY2tldEhlYWRlcgAAAARMAAAAAAAAABRJbnZhbGlkUGFja2V0VmVyc2lvbgAABE0AAAAEAAAAHVdvcmtlck9wdGlvbnNFcnJvcjogMTExMC0xMTE5AAAAAAAAAAAAABJXb3JrZXJPcHRpb25zRXJyb3IAAAAAAAkAAAAAAAAAEkludmFsaWRCeXRlc0xlbmd0aAAAAAAEVgAAAAAAAAAZSW52YWxpZExlZ2FjeU9wdGlvbnNUeXBlMQAAAAAABFcAAAAAAAAAGUludmFsaWRMZWdhY3lPcHRpb25zVHlwZTIAAAAAAARYAAAAAAAAABFJbnZhbGlkT3B0aW9uVHlwZQAAAAAABFkAAAAAAAAADkludmFsaWRPcHRpb25zAAAAAARaAAAAAAAAAA9JbnZhbGlkV29ya2VySWQAAAAEWwAAAAAAAAAdTGVnYWN5T3B0aW9uc1R5cGUxR2FzT3ZlcmZsb3cAAAAAAARcAAAAAAAAACBMZWdhY3lPcHRpb25zVHlwZTJBbW91bnRPdmVyZmxvdwAABF0AAAAAAAAAHUxlZ2FjeU9wdGlvbnNUeXBlMkdhc092ZXJmbG93AAAAAAAEXgAAAAQAAAAcQnVmZmVyUmVhZGVyRXJyb3I6IDEwMDAtMTAwOQAAAAAAAAARQnVmZmVyUmVhZGVyRXJyb3IAAAAAAAACAAAAAAAAAA1JbnZhbGlkTGVuZ3RoAAAAAAAD6AAAAAAAAAAVSW52YWxpZEFkZHJlc3NQYXlsb2FkAAAAAAAD6QAAAAQAAAAcQnVmZmVyV3JpdGVyRXJyb3I6IDEwMTAtMTAxOQAAAAAAAAARQnVmZmVyV3JpdGVyRXJyb3IAAAAAAAABAAAAAAAAABVJbnZhbGlkQWRkcmVzc1BheWxvYWQAAAAAAAPyAAAABAAAAB9UdGxDb25maWd1cmFibGVFcnJvcjogMTAyMC0xMDI5AAAAAAAAAAAUVHRsQ29uZmlndXJhYmxlRXJyb3IAAAADAAAAAAAAABBJbnZhbGlkVHRsQ29uZmlnAAAD/AAAAAAAAAAPVHRsQ29uZmlnRnJvemVuAAAAA/0AAAAAAAAAFlR0bENvbmZpZ0FscmVhZHlGcm96ZW4AAAAAA/4AAAAEAAAAF093bmFibGVFcnJvcjogMTAzMC0xMDM5AAAAAAAAAAAMT3duYWJsZUVycm9yAAAABgAAAAAAAAATSW52YWxpZFBlbmRpbmdPd25lcgAAAAQGAAAAAAAAAApJbnZhbGlkVHRsAAAAAAQHAAAAAAAAABFOb1BlbmRpbmdUcmFuc2ZlcgAAAAAABAgAAAAAAAAAD093bmVyQWxyZWFkeVNldAAAAAQJAAAAAAAAAAtPd25lck5vdFNldAAAAAQKAAAAAAAAABJUcmFuc2ZlckluUHJvZ3Jlc3MAAAAABAsAAAAEAAAAGEJ5dGVzRXh0RXJyb3I6IDEwNDAtMTA0OQAAAAAAAAANQnl0ZXNFeHRFcnJvcgAAAAAAAAEAAAAAAAAADkxlbmd0aE1pc21hdGNoAAAAAAQQAAAABAAAABtVcGdyYWRlYWJsZUVycm9yOiAxMDUwLTEwNTkAAAAAAAAAABBVcGdyYWRlYWJsZUVycm9yAAAAAwAAAAAAAAAUSW52YWxpZE1pZ3JhdGlvbkRhdGEAAAQaAAAAAAAAABNNaWdyYXRpb25Ob3RBbGxvd2VkAAAABBsAAAAAAAAADlVwZ3JhZGVzRnJvemVuAAAAAAQcAAAABAAAABhNdWx0aXNpZ0Vycm9yOiAxMDYwLTEwNjkAAAAAAAAADU11bHRpc2lnRXJyb3IAAAAAAAAIAAAAAAAAABJBbHJlYWR5SW5pdGlhbGl6ZWQAAAAABCQAAAAAAAAADUludmFsaWRTaWduZXIAAAAAAAQlAAAAAAAAAA5TaWduYXR1cmVFcnJvcgAAAAAEJgAAAAAAAAATU2lnbmVyQWxyZWFkeUV4aXN0cwAAAAQnAAAAAAAAAA5TaWduZXJOb3RGb3VuZAAAAAAEKAAAAAAAAAAdVG90YWxTaWduZXJzTGVzc1RoYW5UaHJlc2hvbGQAAAAAAAQpAAAAAAAAAA9VbnNvcnRlZFNpZ25lcnMAAAAEKgAAAAAAAAANWmVyb1RocmVzaG9sZAAAAAAABCsAAAAFAAAAMEV2ZW50IGVtaXR0ZWQgd2hlbiBhIHNpZ25lciBpcyBhZGRlZCBvciByZW1vdmVkLgAAAAAAAAAJU2lnbmVyU2V0AAAAAAAAAQAAAApzaWduZXJfc2V0AAAAAAACAAAAAAAAAAZzaWduZXIAAAAAA+4AAAAUAAAAAQAAAAAAAAAGYWN0aXZlAAAAAAABAAAAAAAAAAIAAAAFAAAANkV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2lnbmF0dXJlIHRocmVzaG9sZCBpcyBjaGFuZ2VkLgAAAAAAAAAAAAxUaHJlc2hvbGRTZXQAAAABAAAADXRocmVzaG9sZF9zZXQAAAAAAAABAAAAAAAAAAl0aHJlc2hvbGQAAAAAAAAEAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAPTXVsdGlzaWdTdG9yYWdlAAAAAAIAAAAAAAAAAAAAAAdTaWduZXJzAAAAAAAAAAAAAAAACVRocmVzaG9sZAAAAAAAAAUAAABXRXZlbnQgZW1pdHRlZCB3aGVuIG93bmVyc2hpcCBpcyB0cmFuc2ZlcnJlZCAoYm90aCBzaW5nbGUtc3RlcCBhbmQgdHdvLXN0ZXAgY29tcGxldGlvbikuAAAAAAAAAAAUT3duZXJzaGlwVHJhbnNmZXJyZWQAAAABAAAAFW93bmVyc2hpcF90cmFuc2ZlcnJlZAAAAAAAAAIAAAAAAAAACW9sZF9vd25lcgAAAAAAABMAAAAAAAAAAAAAAAluZXdfb3duZXIAAAAAAAATAAAAAAAAAAIAAAAFAAAAO0V2ZW50IGVtaXR0ZWQgd2hlbiBhIDItc3RlcCBvd25lcnNoaXAgdHJhbnNmZXIgaXMgcHJvcG9zZWQuAAAAAAAAAAAVT3duZXJzaGlwVHJhbnNmZXJyaW5nAAAAAAAAAQAAABZvd25lcnNoaXBfdHJhbnNmZXJyaW5nAAAAAAADAAAAAAAAAAlvbGRfb3duZXIAAAAAAAATAAAAAAAAAAAAAAAJbmV3X293bmVyAAAAAAAAEwAAAAAAAAAAAAAAA3R0bAAAAAAEAAAAAAAAAAIAAAAFAAAAKkV2ZW50IGVtaXR0ZWQgd2hlbiBvd25lcnNoaXAgaXMgcmVub3VuY2VkLgAAAAAAAAAAABJPd25lcnNoaXBSZW5vdW5jZWQAAAAAAAEAAAATb3duZXJzaGlwX3Jlbm91bmNlZAAAAAABAAAAAAAAAAlvbGRfb3duZXIAAAAAAAATAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAOT3duYWJsZVN0b3JhZ2UAAAAAAAIAAAAAAAAAAAAAAAVPd25lcgAAAAAAAAAAAAAAAAAADFBlbmRpbmdPd25lcgAAAAEAAABJVFRMIGNvbmZpZ3VyYXRpb246IHRocmVzaG9sZCAod2hlbiB0byBleHRlbmQpIGFuZCBleHRlbmRfdG8gKHRhcmdldCBUVEwpLgAAAAAAAAAAAAAJVHRsQ29uZmlnAAAAAAAAAgAAAChUYXJnZXQgVFRMIGFmdGVyIGV4dGVuc2lvbiAoaW4gbGVkZ2VycykuAAAACWV4dGVuZF90bwAAAAAAAAQAAAAzVFRMIHRocmVzaG9sZCB0aGF0IHRyaWdnZXJzIGV4dGVuc2lvbiAoaW4gbGVkZ2VycykuAAAAAAl0aHJlc2hvbGQAAAAAAAAEAAAABQAAACdFdmVudCBlbWl0dGVkIHdoZW4gVFRMIGNvbmZpZ3MgYXJlIHNldC4AAAAAAAAAAA1UdGxDb25maWdzU2V0AAAAAAAAAQAAAA90dGxfY29uZmlnc19zZXQAAAAAAgAAAAAAAAAIaW5zdGFuY2UAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAAAAAA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";
12
+ /**
13
+ * Pre-computed WASM hash (SHA-256)
14
+ * Use this when the WASM is already uploaded on-chain
15
+ */
16
+ export declare const WASM_HASH = "5486564b27e8880db98760b9451c9e180986c8c6b53b45b0e4400e43a1a61139";
17
+ /**
18
+ * Get the WASM bytecode as a Buffer
19
+ * Use this to upload the WASM to the network
20
+ */
21
+ export declare function getWasmBuffer(): Buffer;
8
22
  export declare const DvnError: {
9
23
  1: {
10
24
  message: string;
@@ -24,10 +38,38 @@ export declare const DvnError: {
24
38
  6: {
25
39
  message: string;
26
40
  };
27
- 7: {
28
- message: string;
29
- };
41
+ };
42
+ export type Sender = {
43
+ tag: "None";
44
+ values: void;
45
+ } | {
46
+ tag: "Admin";
47
+ values: readonly [Buffer, Buffer];
30
48
  };
49
+ /**
50
+ * Authentication data for DVN contract transactions.
51
+ *
52
+ * This struct is used with Soroban's custom account interface to authorize
53
+ * transactions through a combination of admin signature and multisig quorum.
54
+ */
55
+ export interface TransactionAuthData {
56
+ /**
57
+ * Expiration timestamp (ledger time) after which this auth is invalid.
58
+ */
59
+ expiration: u64;
60
+ /**
61
+ * Entity submitting the transaction (admin, or permissionless).
62
+ */
63
+ sender: Sender;
64
+ /**
65
+ * Signatures from multisig signers (secp256k1, 65 bytes each).
66
+ */
67
+ signatures: Array<Buffer>;
68
+ /**
69
+ * Verifier ID - must match the DVN's configured VID.
70
+ */
71
+ vid: u32;
72
+ }
31
73
  /**
32
74
  * Configuration for a destination chain.
33
75
  *
@@ -80,37 +122,6 @@ export interface Call {
80
122
  */
81
123
  to: string;
82
124
  }
83
- /**
84
- * Authentication data for DVN contract transactions.
85
- *
86
- * This struct is used with Soroban's custom account interface to authorize
87
- * transactions through a combination of admin signature and multisig quorum.
88
- */
89
- export interface TransactionAuthData {
90
- /**
91
- * Expiration timestamp (ledger time) after which this auth is invalid.
92
- */
93
- expiration: u64;
94
- /**
95
- * Entity submitting the transaction (admin, or permissionless).
96
- */
97
- sender: Sender;
98
- /**
99
- * Signatures from multisig signers (secp256k1, 65 bytes each).
100
- */
101
- signatures: Array<Buffer>;
102
- /**
103
- * Verifier ID - must match the DVN's configured VID.
104
- */
105
- vid: u32;
106
- }
107
- export type Sender = {
108
- tag: "None";
109
- values: void;
110
- } | {
111
- tag: "Admin";
112
- values: readonly [Buffer, Buffer];
113
- };
114
125
  export type DvnStorage = {
115
126
  tag: "Vid";
116
127
  values: void;
@@ -409,6 +420,169 @@ export interface FeesAndPacket {
409
420
  */
410
421
  zro_fee_recipients: Array<FeeRecipient>;
411
422
  }
423
+ /**
424
+ * Parameters for DVN fee calculation.
425
+ *
426
+ * Contains all inputs needed by the fee library to calculate verification fees
427
+ * for cross-chain messages. Includes message parameters, common configuration,
428
+ * and destination-specific settings.
429
+ */
430
+ export interface DvnFeeParams {
431
+ /**
432
+ * Number of block confirmations required.
433
+ */
434
+ confirmations: u64;
435
+ /**
436
+ * Default fee multiplier in basis points (used if no dst-specific multiplier).
437
+ */
438
+ default_multiplier_bps: u32;
439
+ /**
440
+ * Destination endpoint ID (chain identifier).
441
+ */
442
+ dst_eid: u32;
443
+ /**
444
+ * Minimum fee margin in USD (scaled).
445
+ */
446
+ floor_margin_usd: u128;
447
+ /**
448
+ * ============================================================================================
449
+ * Destination-Specific Configuration
450
+ * ============================================================================================
451
+ * Gas estimate for verification on destination chain.
452
+ */
453
+ gas: u128;
454
+ /**
455
+ * Destination-specific fee multiplier in basis points (0 = use default).
456
+ */
457
+ multiplier_bps: u32;
458
+ /**
459
+ * DVN options
460
+ */
461
+ options: Buffer;
462
+ /**
463
+ * ============================================================================================
464
+ * Common Configuration
465
+ * ============================================================================================
466
+ * Price feed contract address for gas price and exchange rate data.
467
+ */
468
+ price_feed: string;
469
+ /**
470
+ * Number of required signatures (quorum).
471
+ */
472
+ quorum: u32;
473
+ /**
474
+ * ============================================================================================
475
+ * Message Parameters
476
+ * ============================================================================================
477
+ * The OApp sender address.
478
+ */
479
+ sender: string;
480
+ }
481
+ /**
482
+ * Parameters for executor fee calculation.
483
+ *
484
+ * Contains all inputs needed by the fee library to calculate execution fees
485
+ * for cross-chain messages. Includes message parameters, common configuration,
486
+ * and destination-specific settings.
487
+ */
488
+ export interface FeeParams {
489
+ /**
490
+ * Size of the message calldata in bytes.
491
+ */
492
+ calldata_size: u32;
493
+ /**
494
+ * Default fee multiplier in basis points (used if no dst-specific multiplier).
495
+ */
496
+ default_multiplier_bps: u32;
497
+ /**
498
+ * Destination endpoint ID (chain identifier).
499
+ */
500
+ dst_eid: u32;
501
+ /**
502
+ * Minimum fee margin in USD (scaled).
503
+ */
504
+ floor_margin_usd: u128;
505
+ /**
506
+ * Base gas for each lzCompose call on destination chain.
507
+ */
508
+ lz_compose_base_gas: u64;
509
+ /**
510
+ * ============================================================================================
511
+ * Destination-Specific Configuration
512
+ * ============================================================================================
513
+ * Base gas for lzReceive execution on destination chain.
514
+ */
515
+ lz_receive_base_gas: u64;
516
+ /**
517
+ * Destination-specific fee multiplier in basis points (0 = use default).
518
+ */
519
+ multiplier_bps: u32;
520
+ /**
521
+ * Maximum native token value that can be sent.
522
+ */
523
+ native_cap: u128;
524
+ /**
525
+ * Encoded executor options (lzReceive gas, lzCompose, nativeDrop, etc.).
526
+ */
527
+ options: Buffer;
528
+ /**
529
+ * ============================================================================================
530
+ * Common Configuration
531
+ * ============================================================================================
532
+ * Price feed contract address for gas price and exchange rate data.
533
+ */
534
+ price_feed: string;
535
+ /**
536
+ * ============================================================================================
537
+ * Message Parameters
538
+ * ============================================================================================
539
+ * The OApp sender address.
540
+ */
541
+ sender: string;
542
+ }
543
+ /**
544
+ * Gas price information for a destination endpoint.
545
+ *
546
+ * Contains the exchange rate and gas costs needed for cross-chain fee calculations.
547
+ */
548
+ export interface Price {
549
+ /**
550
+ * Gas cost per byte of calldata on the destination chain.
551
+ */
552
+ gas_per_byte: u32;
553
+ /**
554
+ * Gas price in the smallest unit (wei for EVM, stroops for Stellar).
555
+ */
556
+ gas_price_in_unit: u64;
557
+ /**
558
+ * Price ratio = (remote native token price / local native token price) * PRICE_RATIO_DENOMINATOR.
559
+ * Used to convert destination chain gas costs to source chain native token.
560
+ */
561
+ price_ratio: u128;
562
+ }
563
+ /**
564
+ * Fee estimation result with detailed breakdown.
565
+ *
566
+ * Contains the calculated fee and all intermediate values used in the calculation.
567
+ */
568
+ export interface FeeEstimate {
569
+ /**
570
+ * Source chain native token price in USD (scaled).
571
+ */
572
+ native_price_usd: u128;
573
+ /**
574
+ * Price ratio used for the calculation.
575
+ */
576
+ price_ratio: u128;
577
+ /**
578
+ * Denominator for the price ratio (typically 10^20).
579
+ */
580
+ price_ratio_denominator: u128;
581
+ /**
582
+ * Total gas fee in source chain native token units.
583
+ */
584
+ total_gas_fee: i128;
585
+ }
412
586
  /**
413
587
  * PacketCodecV1Error: 1100-1109
414
588
  */
@@ -495,6 +669,18 @@ export declare const OwnableError: {
495
669
  1031: {
496
670
  message: string;
497
671
  };
672
+ 1032: {
673
+ message: string;
674
+ };
675
+ 1033: {
676
+ message: string;
677
+ };
678
+ 1034: {
679
+ message: string;
680
+ };
681
+ 1035: {
682
+ message: string;
683
+ };
498
684
  };
499
685
  /**
500
686
  * BytesExtError: 1040-1049
@@ -511,6 +697,12 @@ export declare const UpgradeableError: {
511
697
  1050: {
512
698
  message: string;
513
699
  };
700
+ 1051: {
701
+ message: string;
702
+ };
703
+ 1052: {
704
+ message: string;
705
+ };
514
706
  };
515
707
  /**
516
708
  * MultisigError: 1060-1069
@@ -551,6 +743,9 @@ export type MultisigStorage = {
551
743
  export type OwnableStorage = {
552
744
  tag: "Owner";
553
745
  values: void;
746
+ } | {
747
+ tag: "PendingOwner";
748
+ values: void;
554
749
  };
555
750
  /**
556
751
  * TTL configuration: threshold (when to extend) and extend_to (target TTL).
@@ -576,6 +771,9 @@ export type TtlConfigStorage = {
576
771
  values: void;
577
772
  };
578
773
  export type UpgradeableStorage = {
774
+ tag: "Frozen";
775
+ values: void;
776
+ } | {
579
777
  tag: "Migrating";
580
778
  values: void;
581
779
  };
@@ -631,226 +829,82 @@ export declare const WorkerError: {
631
829
  1215: {
632
830
  message: string;
633
831
  };
634
- 1216: {
635
- message: string;
636
- };
637
- 1217: {
638
- message: string;
639
- };
640
- 1218: {
641
- message: string;
642
- };
643
832
  };
644
- /**
645
- * Parameters for DVN fee calculation.
646
- *
647
- * Contains all inputs needed by the fee library to calculate verification fees
648
- * for cross-chain messages. Includes message parameters, common configuration,
649
- * and destination-specific settings.
650
- */
651
- export interface DvnFeeParams {
652
- /**
653
- * Number of block confirmations required.
654
- */
655
- confirmations: u64;
656
- /**
657
- * Default fee multiplier in basis points (used if no dst-specific multiplier).
658
- */
659
- default_multiplier_bps: u32;
660
- /**
661
- * Destination endpoint ID (chain identifier).
662
- */
663
- dst_eid: u32;
664
- /**
665
- * Minimum fee margin in USD (scaled).
666
- */
667
- floor_margin_usd: u128;
668
- /**
669
- * ============================================================================================
670
- * Destination-Specific Configuration
671
- * ============================================================================================
672
- * Gas estimate for verification on destination chain.
673
- */
674
- gas: u128;
675
- /**
676
- * Destination-specific fee multiplier in basis points (0 = use default).
677
- */
678
- multiplier_bps: u32;
679
- /**
680
- * DVN options
681
- */
682
- options: Buffer;
683
- /**
684
- * ============================================================================================
685
- * Common Configuration
686
- * ============================================================================================
687
- * Price feed contract address for gas price and exchange rate data.
688
- */
689
- price_feed: string;
690
- /**
691
- * Number of required signatures (quorum).
692
- */
693
- quorum: u32;
694
- /**
695
- * ============================================================================================
696
- * Message Parameters
697
- * ============================================================================================
698
- * The OApp sender address.
699
- */
700
- sender: string;
701
- }
702
- /**
703
- * Parameters for executor fee calculation.
704
- *
705
- * Contains all inputs needed by the fee library to calculate execution fees
706
- * for cross-chain messages. Includes message parameters, common configuration,
707
- * and destination-specific settings.
708
- */
709
- export interface FeeParams {
710
- /**
711
- * Size of the message calldata in bytes.
712
- */
713
- calldata_size: u32;
714
- /**
715
- * Default fee multiplier in basis points (used if no dst-specific multiplier).
716
- */
717
- default_multiplier_bps: u32;
718
- /**
719
- * Destination endpoint ID (chain identifier).
720
- */
721
- dst_eid: u32;
722
- /**
723
- * Minimum fee margin in USD (scaled).
724
- */
725
- floor_margin_usd: u128;
726
- /**
727
- * Base gas for each lzCompose call on destination chain.
728
- */
729
- lz_compose_base_gas: u64;
730
- /**
731
- * ============================================================================================
732
- * Destination-Specific Configuration
733
- * ============================================================================================
734
- * Base gas for lzReceive execution on destination chain.
735
- */
736
- lz_receive_base_gas: u64;
737
- /**
738
- * Destination-specific fee multiplier in basis points (0 = use default).
739
- */
740
- multiplier_bps: u32;
741
- /**
742
- * Maximum native token value that can be sent.
743
- */
744
- native_cap: u128;
745
- /**
746
- * Encoded executor options (lzReceive gas, lzCompose, nativeDrop, etc.).
747
- */
748
- options: Buffer;
749
- /**
750
- * ============================================================================================
751
- * Common Configuration
752
- * ============================================================================================
753
- * Price feed contract address for gas price and exchange rate data.
754
- */
755
- price_feed: string;
756
- /**
757
- * ============================================================================================
758
- * Message Parameters
759
- * ============================================================================================
760
- * The OApp sender address.
761
- */
762
- sender: string;
763
- }
764
- /**
765
- * Gas price information for a destination endpoint.
766
- *
767
- * Contains the exchange rate and gas costs needed for cross-chain fee calculations.
768
- */
769
- export interface Price {
770
- /**
771
- * Gas cost per byte of calldata on the destination chain.
772
- */
773
- gas_per_byte: u32;
774
- /**
775
- * Gas price in the smallest unit (wei for EVM, stroops for Stellar).
776
- */
777
- gas_price_in_unit: u64;
778
- /**
779
- * Price ratio = (remote native token price / local native token price) * PRICE_RATIO_DENOMINATOR.
780
- * Used to convert destination chain gas costs to source chain native token.
781
- */
782
- price_ratio: u128;
783
- }
784
- /**
785
- * Fee estimation result with detailed breakdown.
786
- *
787
- * Contains the calculated fee and all intermediate values used in the calculation.
788
- */
789
- export interface FeeEstimate {
790
- /**
791
- * Source chain native token price in USD (scaled).
792
- */
793
- native_price_usd: u128;
794
- /**
795
- * Price ratio used for the calculation.
796
- */
797
- price_ratio: u128;
798
- /**
799
- * Denominator for the price ratio (typically 10^20).
800
- */
801
- price_ratio_denominator: u128;
802
- /**
803
- * Total gas fee in source chain native token units.
804
- */
805
- total_gas_fee: i128;
806
- }
807
833
  export type WorkerStorage = {
808
834
  tag: "Paused";
809
835
  values: void;
810
836
  } | {
811
- tag: "DepositAddress";
837
+ tag: "Admins";
812
838
  values: void;
813
839
  } | {
814
- tag: "PriceFeed";
840
+ tag: "MessageLibs";
815
841
  values: void;
816
842
  } | {
817
- tag: "WorkerFeeLib";
818
- values: void;
843
+ tag: "Allowlist";
844
+ values: readonly [string];
819
845
  } | {
820
- tag: "DefaultMultiplierBps";
846
+ tag: "AllowlistSize";
821
847
  values: void;
822
848
  } | {
823
- tag: "SupportedOptionTypes";
824
- values: readonly [u32];
849
+ tag: "Denylist";
850
+ values: readonly [string];
825
851
  } | {
826
- tag: "MessageLibs";
852
+ tag: "DefaultMultiplierBps";
827
853
  values: void;
828
854
  } | {
829
- tag: "Allowlist";
830
- values: readonly [string];
855
+ tag: "DepositAddress";
856
+ values: void;
831
857
  } | {
832
- tag: "Denylist";
833
- values: readonly [string];
858
+ tag: "SupportedOptionTypes";
859
+ values: readonly [u32];
834
860
  } | {
835
- tag: "AllowlistSize";
861
+ tag: "WorkerFeeLib";
836
862
  values: void;
837
863
  } | {
838
- tag: "Admins";
864
+ tag: "PriceFeed";
839
865
  values: void;
840
866
  };
841
867
  export interface Client {
842
868
  /**
843
- * Construct and simulate a set_paused transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
844
- * Sets the paused state of the worker.
869
+ * Construct and simulate a set_paused transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
870
+ * Sets the paused state of the worker.
871
+ *
872
+ * When paused, the worker will reject new job assignments (e.g., assign_job, get_fee).
873
+ * Existing jobs in progress are not affected.
874
+ *
875
+ * # Arguments
876
+ * * `paused` - `true` to pause, `false` to unpause
877
+ */
878
+ set_paused: ({ paused }: {
879
+ paused: boolean;
880
+ }, txnOptions?: {
881
+ /**
882
+ * The fee to pay for the transaction. Default: BASE_FEE
883
+ */
884
+ fee?: number;
885
+ /**
886
+ * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT
887
+ */
888
+ timeoutInSeconds?: number;
889
+ /**
890
+ * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
891
+ */
892
+ simulate?: boolean;
893
+ }) => Promise<AssembledTransaction<null>>;
894
+ /**
895
+ * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
896
+ * Sets admin status for an address.
845
897
  *
846
- * When paused, the worker will reject new job assignments (e.g., assign_job, get_fee).
847
- * Existing jobs in progress are not affected.
898
+ * Admins can configure worker settings like fee multipliers, deposit addresses,
899
+ * and supported option types.
848
900
  *
849
901
  * # Arguments
850
- * * `paused` - `true` to pause, `false` to unpause
902
+ * * `admin` - The address to set admin status for
903
+ * * `active` - `true` to add admin, `false` to remove
851
904
  */
852
- set_paused: ({ paused }: {
853
- paused: boolean;
905
+ set_admin: ({ admin, active }: {
906
+ admin: string;
907
+ active: boolean;
854
908
  }, txnOptions?: {
855
909
  /**
856
910
  * The fee to pay for the transaction. Default: BASE_FEE
@@ -1012,7 +1066,7 @@ export interface Client {
1012
1066
  * # Arguments
1013
1067
  * * `admin` - Admin address (must provide authorization)
1014
1068
  * * `eid` - Destination endpoint ID (chain identifier)
1015
- * * `option_types` - Encoded supported option types
1069
+ * * `option_types` - Supported option types. Each byte represents an option type.
1016
1070
  */
1017
1071
  set_supported_option_types: ({ admin, eid, option_types }: {
1018
1072
  admin: string;
@@ -1088,15 +1142,10 @@ export interface Client {
1088
1142
  simulate?: boolean;
1089
1143
  }) => Promise<AssembledTransaction<null>>;
1090
1144
  /**
1091
- * Construct and simulate a is_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1092
- * Returns whether an address is an admin.
1093
- *
1094
- * # Arguments
1095
- * * `admin` - The address to check
1145
+ * Construct and simulate a paused transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1146
+ * Returns whether the worker is paused.
1096
1147
  */
1097
- is_admin: ({ admin }: {
1098
- admin: string;
1099
- }, txnOptions?: {
1148
+ paused: (txnOptions?: {
1100
1149
  /**
1101
1150
  * The fee to pay for the transaction. Default: BASE_FEE
1102
1151
  */
@@ -1111,10 +1160,15 @@ export interface Client {
1111
1160
  simulate?: boolean;
1112
1161
  }) => Promise<AssembledTransaction<boolean>>;
1113
1162
  /**
1114
- * Construct and simulate a admins transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1115
- * Returns all admin addresses.
1163
+ * Construct and simulate a is_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1164
+ * Returns whether an address is an admin.
1165
+ *
1166
+ * # Arguments
1167
+ * * `admin` - The address to check
1116
1168
  */
1117
- admins: (txnOptions?: {
1169
+ is_admin: ({ admin }: {
1170
+ admin: string;
1171
+ }, txnOptions?: {
1118
1172
  /**
1119
1173
  * The fee to pay for the transaction. Default: BASE_FEE
1120
1174
  */
@@ -1127,12 +1181,12 @@ export interface Client {
1127
1181
  * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1128
1182
  */
1129
1183
  simulate?: boolean;
1130
- }) => Promise<AssembledTransaction<Array<string>>>;
1184
+ }) => Promise<AssembledTransaction<boolean>>;
1131
1185
  /**
1132
- * Construct and simulate a paused transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1133
- * Returns whether the worker is paused.
1186
+ * Construct and simulate a admins transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1187
+ * Returns all admin addresses.
1134
1188
  */
1135
- paused: (txnOptions?: {
1189
+ admins: (txnOptions?: {
1136
1190
  /**
1137
1191
  * The fee to pay for the transaction. Default: BASE_FEE
1138
1192
  */
@@ -1145,7 +1199,7 @@ export interface Client {
1145
1199
  * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1146
1200
  */
1147
1201
  simulate?: boolean;
1148
- }) => Promise<AssembledTransaction<boolean>>;
1202
+ }) => Promise<AssembledTransaction<Array<string>>>;
1149
1203
  /**
1150
1204
  * Construct and simulate a is_supported_message_lib transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1151
1205
  * Returns whether a message library is supported.
@@ -1213,6 +1267,24 @@ export interface Client {
1213
1267
  */
1214
1268
  simulate?: boolean;
1215
1269
  }) => Promise<AssembledTransaction<boolean>>;
1270
+ /**
1271
+ * Construct and simulate a allowlist_size transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1272
+ * Returns the number of addresses on the allowlist.
1273
+ */
1274
+ allowlist_size: (txnOptions?: {
1275
+ /**
1276
+ * The fee to pay for the transaction. Default: BASE_FEE
1277
+ */
1278
+ fee?: number;
1279
+ /**
1280
+ * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT
1281
+ */
1282
+ timeoutInSeconds?: number;
1283
+ /**
1284
+ * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1285
+ */
1286
+ simulate?: boolean;
1287
+ }) => Promise<AssembledTransaction<u32>>;
1216
1288
  /**
1217
1289
  * Construct and simulate a is_on_denylist transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1218
1290
  * Returns whether an OApp is on the denylist.
@@ -1246,10 +1318,10 @@ export interface Client {
1246
1318
  * 3. Otherwise → denied
1247
1319
  *
1248
1320
  * # Arguments
1249
- * * `sender` - OApp contract address to check
1321
+ * * `oapp` - OApp contract address to check
1250
1322
  */
1251
- has_acl: ({ sender }: {
1252
- sender: string;
1323
+ has_acl: ({ oapp }: {
1324
+ oapp: string;
1253
1325
  }, txnOptions?: {
1254
1326
  /**
1255
1327
  * The fee to pay for the transaction. Default: BASE_FEE
@@ -1264,24 +1336,6 @@ export interface Client {
1264
1336
  */
1265
1337
  simulate?: boolean;
1266
1338
  }) => Promise<AssembledTransaction<boolean>>;
1267
- /**
1268
- * Construct and simulate a allowlist_size transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1269
- * Returns the number of addresses on the allowlist.
1270
- */
1271
- allowlist_size: (txnOptions?: {
1272
- /**
1273
- * The fee to pay for the transaction. Default: BASE_FEE
1274
- */
1275
- fee?: number;
1276
- /**
1277
- * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT
1278
- */
1279
- timeoutInSeconds?: number;
1280
- /**
1281
- * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1282
- */
1283
- simulate?: boolean;
1284
- }) => Promise<AssembledTransaction<u32>>;
1285
1339
  /**
1286
1340
  * Construct and simulate a default_multiplier_bps transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1287
1341
  * Returns the default fee multiplier in basis points.
@@ -1317,12 +1371,17 @@ export interface Client {
1317
1371
  * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1318
1372
  */
1319
1373
  simulate?: boolean;
1320
- }) => Promise<AssembledTransaction<string>>;
1374
+ }) => Promise<AssembledTransaction<Option<string>>>;
1321
1375
  /**
1322
- * Construct and simulate a price_feed transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1323
- * Returns the price feed contract address.
1376
+ * Construct and simulate a get_supported_option_types transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1377
+ * Returns supported option types for a destination endpoint.
1378
+ *
1379
+ * # Arguments
1380
+ * * `eid` - Destination endpoint ID (chain identifier)
1324
1381
  */
1325
- price_feed: (txnOptions?: {
1382
+ get_supported_option_types: ({ eid }: {
1383
+ eid: u32;
1384
+ }, txnOptions?: {
1326
1385
  /**
1327
1386
  * The fee to pay for the transaction. Default: BASE_FEE
1328
1387
  */
@@ -1335,17 +1394,12 @@ export interface Client {
1335
1394
  * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1336
1395
  */
1337
1396
  simulate?: boolean;
1338
- }) => Promise<AssembledTransaction<string>>;
1397
+ }) => Promise<AssembledTransaction<Option<Buffer>>>;
1339
1398
  /**
1340
- * Construct and simulate a get_supported_option_types transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1341
- * Returns supported option types for a destination endpoint.
1342
- *
1343
- * # Arguments
1344
- * * `eid` - Destination endpoint ID (chain identifier)
1399
+ * Construct and simulate a worker_fee_lib transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1400
+ * Returns the worker fee library contract address.
1345
1401
  */
1346
- get_supported_option_types: ({ eid }: {
1347
- eid: u32;
1348
- }, txnOptions?: {
1402
+ worker_fee_lib: (txnOptions?: {
1349
1403
  /**
1350
1404
  * The fee to pay for the transaction. Default: BASE_FEE
1351
1405
  */
@@ -1358,12 +1412,12 @@ export interface Client {
1358
1412
  * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1359
1413
  */
1360
1414
  simulate?: boolean;
1361
- }) => Promise<AssembledTransaction<Option<Buffer>>>;
1415
+ }) => Promise<AssembledTransaction<Option<string>>>;
1362
1416
  /**
1363
- * Construct and simulate a worker_fee_lib transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1364
- * Returns the worker fee library contract address.
1417
+ * Construct and simulate a price_feed transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1418
+ * Returns the price feed contract address.
1365
1419
  */
1366
- worker_fee_lib: (txnOptions?: {
1420
+ price_feed: (txnOptions?: {
1367
1421
  /**
1368
1422
  * The fee to pay for the transaction. Default: BASE_FEE
1369
1423
  */
@@ -1376,7 +1430,7 @@ export interface Client {
1376
1430
  * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1377
1431
  */
1378
1432
  simulate?: boolean;
1379
- }) => Promise<AssembledTransaction<string>>;
1433
+ }) => Promise<AssembledTransaction<Option<string>>>;
1380
1434
  /**
1381
1435
  * Construct and simulate a get_fee transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1382
1436
  * Calculates the verification fee for a cross-chain message.
@@ -1518,7 +1572,7 @@ export interface Client {
1518
1572
  simulate?: boolean;
1519
1573
  }) => Promise<AssembledTransaction<Buffer>>;
1520
1574
  /**
1521
- * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1575
+ * Construct and simulate a set_admin_by_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1522
1576
  * Sets admin status for an address. Can be called by an existing admin.
1523
1577
  *
1524
1578
  * This allows existing admins to add or remove other admins without going through
@@ -1529,7 +1583,7 @@ export interface Client {
1529
1583
  * * `admin` - The address to set admin status for
1530
1584
  * * `active` - `true` to add admin, `false` to remove
1531
1585
  */
1532
- set_admin: ({ caller, admin, active }: {
1586
+ set_admin_by_admin: ({ caller, admin, active }: {
1533
1587
  caller: string;
1534
1588
  admin: string;
1535
1589
  active: boolean;
@@ -1547,73 +1601,6 @@ export interface Client {
1547
1601
  */
1548
1602
  simulate?: boolean;
1549
1603
  }) => Promise<AssembledTransaction<null>>;
1550
- /**
1551
- * Construct and simulate a quorum_change_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1552
- * Allows the quorum to add/remove admins without requiring an admin signature.
1553
- *
1554
- * This function bypasses the normal admin verification in `__check_auth`,
1555
- * requiring only multisig quorum signatures. Must be called as a single
1556
- * operation (cannot be bundled with other calls).
1557
- *
1558
- * # Arguments
1559
- * * `admin` - The address to set admin status for
1560
- * * `active` - `true` to add admin, `false` to remove
1561
- */
1562
- quorum_change_admin: ({ admin, active }: {
1563
- admin: string;
1564
- active: boolean;
1565
- }, txnOptions?: {
1566
- /**
1567
- * The fee to pay for the transaction. Default: BASE_FEE
1568
- */
1569
- fee?: number;
1570
- /**
1571
- * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT
1572
- */
1573
- timeoutInSeconds?: number;
1574
- /**
1575
- * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1576
- */
1577
- simulate?: boolean;
1578
- }) => Promise<AssembledTransaction<null>>;
1579
- /**
1580
- * Construct and simulate a upgrade transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1581
- */
1582
- upgrade: ({ new_wasm_hash }: {
1583
- new_wasm_hash: Buffer;
1584
- }, txnOptions?: {
1585
- /**
1586
- * The fee to pay for the transaction. Default: BASE_FEE
1587
- */
1588
- fee?: number;
1589
- /**
1590
- * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT
1591
- */
1592
- timeoutInSeconds?: number;
1593
- /**
1594
- * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1595
- */
1596
- simulate?: boolean;
1597
- }) => Promise<AssembledTransaction<null>>;
1598
- /**
1599
- * Construct and simulate a migrate transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1600
- */
1601
- migrate: ({ migration_data }: {
1602
- migration_data: MigrationData;
1603
- }, txnOptions?: {
1604
- /**
1605
- * The fee to pay for the transaction. Default: BASE_FEE
1606
- */
1607
- fee?: number;
1608
- /**
1609
- * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT
1610
- */
1611
- timeoutInSeconds?: number;
1612
- /**
1613
- * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1614
- */
1615
- simulate?: boolean;
1616
- }) => Promise<AssembledTransaction<null>>;
1617
1604
  /**
1618
1605
  * Construct and simulate a authorizer transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1619
1606
  */
@@ -1907,6 +1894,86 @@ export interface Client {
1907
1894
  */
1908
1895
  simulate?: boolean;
1909
1896
  }) => Promise<AssembledTransaction<null>>;
1897
+ /**
1898
+ * Construct and simulate a upgrade transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1899
+ * The type of data required for migration.
1900
+ * Upgrades the contract to new WASM bytecode.
1901
+ * Sets a migration flag that must be cleared by calling `migrate`.
1902
+ */
1903
+ upgrade: ({ new_wasm_hash }: {
1904
+ new_wasm_hash: Buffer;
1905
+ }, txnOptions?: {
1906
+ /**
1907
+ * The fee to pay for the transaction. Default: BASE_FEE
1908
+ */
1909
+ fee?: number;
1910
+ /**
1911
+ * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT
1912
+ */
1913
+ timeoutInSeconds?: number;
1914
+ /**
1915
+ * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1916
+ */
1917
+ simulate?: boolean;
1918
+ }) => Promise<AssembledTransaction<null>>;
1919
+ /**
1920
+ * Construct and simulate a migrate transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1921
+ * Runs migration logic after an upgrade.
1922
+ * Can only be called when the migration flag is set by a previous `upgrade` call.
1923
+ */
1924
+ migrate: ({ migration_data }: {
1925
+ migration_data: Buffer;
1926
+ }, txnOptions?: {
1927
+ /**
1928
+ * The fee to pay for the transaction. Default: BASE_FEE
1929
+ */
1930
+ fee?: number;
1931
+ /**
1932
+ * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT
1933
+ */
1934
+ timeoutInSeconds?: number;
1935
+ /**
1936
+ * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1937
+ */
1938
+ simulate?: boolean;
1939
+ }) => Promise<AssembledTransaction<null>>;
1940
+ /**
1941
+ * Construct and simulate a freeze transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1942
+ * Permanently freezes the contract, preventing any future upgrades.
1943
+ * This action is irreversible.
1944
+ */
1945
+ freeze: (txnOptions?: {
1946
+ /**
1947
+ * The fee to pay for the transaction. Default: BASE_FEE
1948
+ */
1949
+ fee?: number;
1950
+ /**
1951
+ * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT
1952
+ */
1953
+ timeoutInSeconds?: number;
1954
+ /**
1955
+ * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1956
+ */
1957
+ simulate?: boolean;
1958
+ }) => Promise<AssembledTransaction<null>>;
1959
+ /**
1960
+ * Construct and simulate a is_frozen transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.
1961
+ * Returns whether the contract is frozen (upgrades disabled).
1962
+ */
1963
+ is_frozen: (txnOptions?: {
1964
+ /**
1965
+ * The fee to pay for the transaction. Default: BASE_FEE
1966
+ */
1967
+ fee?: number;
1968
+ /**
1969
+ * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT
1970
+ */
1971
+ timeoutInSeconds?: number;
1972
+ /**
1973
+ * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true
1974
+ */
1975
+ simulate?: boolean;
1976
+ }) => Promise<AssembledTransaction<boolean>>;
1910
1977
  }
1911
1978
  export declare class Client extends ContractClient {
1912
1979
  readonly options: ContractClientOptions;
@@ -1935,6 +2002,7 @@ export declare class Client extends ContractClient {
1935
2002
  constructor(options: ContractClientOptions);
1936
2003
  readonly fromJSON: {
1937
2004
  set_paused: (json: string) => AssembledTransaction<null>;
2005
+ set_admin: (json: string) => AssembledTransaction<null>;
1938
2006
  set_supported_message_lib: (json: string) => AssembledTransaction<null>;
1939
2007
  set_allowlist: (json: string) => AssembledTransaction<null>;
1940
2008
  set_denylist: (json: string) => AssembledTransaction<null>;
@@ -1943,30 +2011,27 @@ export declare class Client extends ContractClient {
1943
2011
  set_supported_option_types: (json: string) => AssembledTransaction<null>;
1944
2012
  set_worker_fee_lib: (json: string) => AssembledTransaction<null>;
1945
2013
  set_price_feed: (json: string) => AssembledTransaction<null>;
2014
+ paused: (json: string) => AssembledTransaction<boolean>;
1946
2015
  is_admin: (json: string) => AssembledTransaction<boolean>;
1947
2016
  admins: (json: string) => AssembledTransaction<string[]>;
1948
- paused: (json: string) => AssembledTransaction<boolean>;
1949
2017
  is_supported_message_lib: (json: string) => AssembledTransaction<boolean>;
1950
2018
  message_libs: (json: string) => AssembledTransaction<string[]>;
1951
2019
  is_on_allowlist: (json: string) => AssembledTransaction<boolean>;
2020
+ allowlist_size: (json: string) => AssembledTransaction<number>;
1952
2021
  is_on_denylist: (json: string) => AssembledTransaction<boolean>;
1953
2022
  has_acl: (json: string) => AssembledTransaction<boolean>;
1954
- allowlist_size: (json: string) => AssembledTransaction<number>;
1955
2023
  default_multiplier_bps: (json: string) => AssembledTransaction<number>;
1956
- deposit_address: (json: string) => AssembledTransaction<string>;
1957
- price_feed: (json: string) => AssembledTransaction<string>;
2024
+ deposit_address: (json: string) => AssembledTransaction<Option<string>>;
1958
2025
  get_supported_option_types: (json: string) => AssembledTransaction<Option<Buffer<ArrayBufferLike>>>;
1959
- worker_fee_lib: (json: string) => AssembledTransaction<string>;
2026
+ worker_fee_lib: (json: string) => AssembledTransaction<Option<string>>;
2027
+ price_feed: (json: string) => AssembledTransaction<Option<string>>;
1960
2028
  get_fee: (json: string) => AssembledTransaction<bigint>;
1961
2029
  assign_job: (json: string) => AssembledTransaction<FeeRecipient>;
1962
2030
  set_dst_config: (json: string) => AssembledTransaction<null>;
1963
2031
  dst_config: (json: string) => AssembledTransaction<Option<DstConfig>>;
1964
2032
  vid: (json: string) => AssembledTransaction<number>;
1965
2033
  hash_call_data: (json: string) => AssembledTransaction<Buffer<ArrayBufferLike>>;
1966
- set_admin: (json: string) => AssembledTransaction<null>;
1967
- quorum_change_admin: (json: string) => AssembledTransaction<null>;
1968
- upgrade: (json: string) => AssembledTransaction<null>;
1969
- migrate: (json: string) => AssembledTransaction<null>;
2034
+ set_admin_by_admin: (json: string) => AssembledTransaction<null>;
1970
2035
  authorizer: (json: string) => AssembledTransaction<string>;
1971
2036
  set_ttl_configs: (json: string) => AssembledTransaction<null>;
1972
2037
  ttl_configs: (json: string) => AssembledTransaction<readonly [Option<TtlConfig>, Option<TtlConfig>]>;
@@ -1981,5 +2046,9 @@ export declare class Client extends ContractClient {
1981
2046
  threshold: (json: string) => AssembledTransaction<number>;
1982
2047
  verify_signatures: (json: string) => AssembledTransaction<null>;
1983
2048
  verify_n_signatures: (json: string) => AssembledTransaction<null>;
2049
+ upgrade: (json: string) => AssembledTransaction<null>;
2050
+ migrate: (json: string) => AssembledTransaction<null>;
2051
+ freeze: (json: string) => AssembledTransaction<null>;
2052
+ is_frozen: (json: string) => AssembledTransaction<boolean>;
1984
2053
  };
1985
2054
  }