mongo 2.18.2 → 2.19.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1136) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +12 -2
  4. data/Rakefile +4 -3
  5. data/bin/mongo_console +2 -0
  6. data/lib/mongo/active_support.rb +1 -1
  7. data/lib/mongo/address/ipv4.rb +1 -1
  8. data/lib/mongo/address/ipv6.rb +1 -1
  9. data/lib/mongo/address/unix.rb +1 -1
  10. data/lib/mongo/address/validator.rb +1 -1
  11. data/lib/mongo/address.rb +1 -1
  12. data/lib/mongo/auth/aws/conversation.rb +1 -5
  13. data/lib/mongo/auth/aws/credentials.rb +38 -0
  14. data/lib/mongo/auth/aws/credentials_cache.rb +75 -0
  15. data/lib/mongo/auth/aws/credentials_retriever.rb +172 -37
  16. data/lib/mongo/auth/aws/request.rb +1 -2
  17. data/lib/mongo/auth/aws.rb +6 -6
  18. data/lib/mongo/auth/base.rb +1 -1
  19. data/lib/mongo/auth/conversation_base.rb +1 -1
  20. data/lib/mongo/auth/cr/conversation.rb +1 -1
  21. data/lib/mongo/auth/cr.rb +1 -1
  22. data/lib/mongo/auth/credential_cache.rb +1 -1
  23. data/lib/mongo/auth/gssapi/conversation.rb +1 -1
  24. data/lib/mongo/auth/gssapi.rb +1 -1
  25. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  26. data/lib/mongo/auth/ldap.rb +1 -1
  27. data/lib/mongo/auth/roles.rb +17 -17
  28. data/lib/mongo/auth/sasl_conversation_base.rb +1 -1
  29. data/lib/mongo/auth/scram/conversation.rb +1 -1
  30. data/lib/mongo/auth/scram.rb +1 -1
  31. data/lib/mongo/auth/scram256/conversation.rb +1 -1
  32. data/lib/mongo/auth/scram256.rb +1 -1
  33. data/lib/mongo/auth/scram_conversation_base.rb +1 -1
  34. data/lib/mongo/auth/stringprep/profiles/sasl.rb +1 -1
  35. data/lib/mongo/auth/stringprep/tables.rb +1 -1
  36. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -1
  37. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +2 -1
  38. data/lib/mongo/auth/stringprep.rb +1 -1
  39. data/lib/mongo/auth/user/view.rb +1 -1
  40. data/lib/mongo/auth/user.rb +1 -1
  41. data/lib/mongo/auth/x509/conversation.rb +1 -1
  42. data/lib/mongo/auth/x509.rb +1 -1
  43. data/lib/mongo/auth.rb +1 -1
  44. data/lib/mongo/background_thread.rb +1 -1
  45. data/lib/mongo/bson.rb +1 -1
  46. data/lib/mongo/bulk_write/combineable.rb +1 -1
  47. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  48. data/lib/mongo/bulk_write/result.rb +1 -1
  49. data/lib/mongo/bulk_write/result_combiner.rb +1 -1
  50. data/lib/mongo/bulk_write/transformable.rb +1 -1
  51. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  52. data/lib/mongo/bulk_write/validatable.rb +1 -1
  53. data/lib/mongo/bulk_write.rb +1 -1
  54. data/lib/mongo/caching_cursor.rb +1 -1
  55. data/lib/mongo/client.rb +52 -4
  56. data/lib/mongo/client_encryption.rb +102 -1
  57. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  58. data/lib/mongo/cluster/reapers/cursor_reaper.rb +2 -6
  59. data/lib/mongo/cluster/reapers/socket_reaper.rb +2 -2
  60. data/lib/mongo/cluster/sdam_flow.rb +42 -15
  61. data/lib/mongo/cluster/topology/base.rb +1 -1
  62. data/lib/mongo/cluster/topology/load_balanced.rb +1 -1
  63. data/lib/mongo/cluster/topology/no_replica_set_options.rb +1 -1
  64. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +1 -1
  65. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
  66. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  67. data/lib/mongo/cluster/topology/single.rb +1 -1
  68. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  69. data/lib/mongo/cluster/topology.rb +1 -1
  70. data/lib/mongo/cluster.rb +29 -12
  71. data/lib/mongo/cluster_time.rb +1 -1
  72. data/lib/mongo/collection/helpers.rb +1 -1
  73. data/lib/mongo/collection/queryable_encryption.rb +83 -43
  74. data/lib/mongo/collection/view/aggregation.rb +1 -1
  75. data/lib/mongo/collection/view/builder/aggregation.rb +1 -1
  76. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  77. data/lib/mongo/collection/view/builder.rb +1 -1
  78. data/lib/mongo/collection/view/change_stream/retryable.rb +1 -1
  79. data/lib/mongo/collection/view/change_stream.rb +3 -3
  80. data/lib/mongo/collection/view/explainable.rb +1 -1
  81. data/lib/mongo/collection/view/immutable.rb +1 -1
  82. data/lib/mongo/collection/view/iterable.rb +1 -1
  83. data/lib/mongo/collection/view/map_reduce.rb +1 -1
  84. data/lib/mongo/collection/view/readable.rb +11 -12
  85. data/lib/mongo/collection/view/writable.rb +1 -1
  86. data/lib/mongo/collection/view.rb +1 -1
  87. data/lib/mongo/collection.rb +29 -12
  88. data/lib/mongo/condition_variable.rb +58 -0
  89. data/lib/mongo/config/options.rb +1 -0
  90. data/lib/mongo/config/validators/option.rb +1 -0
  91. data/lib/mongo/config.rb +1 -0
  92. data/lib/mongo/crypt/auto_decryption_context.rb +1 -1
  93. data/lib/mongo/crypt/auto_encrypter.rb +5 -3
  94. data/lib/mongo/crypt/auto_encryption_context.rb +1 -1
  95. data/lib/mongo/crypt/binary.rb +1 -1
  96. data/lib/mongo/crypt/binding.rb +224 -30
  97. data/lib/mongo/crypt/context.rb +67 -4
  98. data/lib/mongo/crypt/data_key_context.rb +1 -1
  99. data/lib/mongo/crypt/encryption_io.rb +2 -2
  100. data/lib/mongo/crypt/explicit_decryption_context.rb +1 -1
  101. data/lib/mongo/crypt/explicit_encrypter.rb +120 -34
  102. data/lib/mongo/crypt/explicit_encryption_context.rb +58 -27
  103. data/lib/mongo/crypt/explicit_encryption_expression_context.rb +30 -0
  104. data/lib/mongo/crypt/handle.rb +10 -2
  105. data/lib/mongo/crypt/hooks.rb +1 -1
  106. data/lib/mongo/crypt/kms/aws/credentials.rb +83 -0
  107. data/lib/mongo/crypt/kms/aws/master_document.rb +78 -0
  108. data/lib/mongo/crypt/kms/aws.rb +3 -119
  109. data/lib/mongo/crypt/kms/azure/access_token.rb +54 -0
  110. data/lib/mongo/crypt/kms/azure/credentials.rb +103 -0
  111. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +122 -0
  112. data/lib/mongo/crypt/kms/azure/master_document.rb +79 -0
  113. data/lib/mongo/crypt/kms/azure.rb +5 -128
  114. data/lib/mongo/crypt/kms/credentials.rb +17 -2
  115. data/lib/mongo/crypt/kms/gcp/credentials.rb +127 -0
  116. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +58 -0
  117. data/lib/mongo/crypt/kms/gcp/master_document.rb +99 -0
  118. data/lib/mongo/crypt/kms/gcp.rb +4 -172
  119. data/lib/mongo/crypt/kms/kmip/credentials.rb +68 -0
  120. data/lib/mongo/crypt/kms/kmip/master_document.rb +74 -0
  121. data/lib/mongo/crypt/kms/kmip.rb +3 -100
  122. data/lib/mongo/crypt/kms/local/credentials.rb +65 -0
  123. data/lib/mongo/crypt/kms/local/master_document.rb +43 -0
  124. data/lib/mongo/crypt/kms/local.rb +3 -66
  125. data/lib/mongo/crypt/kms/master_key_document.rb +1 -1
  126. data/lib/mongo/crypt/kms.rb +7 -1
  127. data/lib/mongo/crypt/kms_context.rb +1 -1
  128. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +1 -1
  129. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +1 -1
  130. data/lib/mongo/crypt/status.rb +1 -1
  131. data/lib/mongo/crypt.rb +13 -1
  132. data/lib/mongo/cursor/kill_spec.rb +1 -1
  133. data/lib/mongo/cursor.rb +40 -6
  134. data/lib/mongo/database/view.rb +41 -4
  135. data/lib/mongo/database.rb +2 -2
  136. data/lib/mongo/dbref.rb +1 -1
  137. data/lib/mongo/distinguishing_semaphore.rb +2 -2
  138. data/lib/mongo/error/auth_error.rb +1 -1
  139. data/lib/mongo/error/bad_load_balancer_target.rb +1 -1
  140. data/lib/mongo/error/bulk_write_error.rb +1 -1
  141. data/lib/mongo/error/change_stream_resumable.rb +1 -1
  142. data/lib/mongo/error/client_closed.rb +24 -0
  143. data/lib/mongo/error/closed_stream.rb +1 -1
  144. data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
  145. data/lib/mongo/error/connection_perished.rb +3 -1
  146. data/lib/mongo/error/connection_unavailable.rb +27 -0
  147. data/lib/mongo/error/credential_check_error.rb +1 -1
  148. data/lib/mongo/error/crypt_error.rb +1 -1
  149. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  150. data/lib/mongo/error/failed_string_prep_validation.rb +1 -1
  151. data/lib/mongo/error/file_not_found.rb +1 -1
  152. data/lib/mongo/error/handshake_error.rb +1 -1
  153. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  154. data/lib/mongo/error/internal_driver_error.rb +1 -1
  155. data/lib/mongo/error/invalid_address.rb +1 -1
  156. data/lib/mongo/error/invalid_application_name.rb +1 -1
  157. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  158. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  159. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  160. data/lib/mongo/error/invalid_config_option.rb +1 -0
  161. data/lib/mongo/error/invalid_cursor_operation.rb +1 -1
  162. data/lib/mongo/error/invalid_database_name.rb +1 -1
  163. data/lib/mongo/error/invalid_document.rb +1 -1
  164. data/lib/mongo/error/invalid_file.rb +1 -1
  165. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  166. data/lib/mongo/error/invalid_max_connecting.rb +28 -0
  167. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  168. data/lib/mongo/error/invalid_nonce.rb +1 -1
  169. data/lib/mongo/error/invalid_read_concern.rb +1 -1
  170. data/lib/mongo/error/invalid_read_option.rb +1 -1
  171. data/lib/mongo/error/invalid_replacement_document.rb +1 -1
  172. data/lib/mongo/error/invalid_server_auth_host.rb +1 -1
  173. data/lib/mongo/error/invalid_server_auth_response.rb +1 -1
  174. data/lib/mongo/error/invalid_server_preference.rb +1 -1
  175. data/lib/mongo/error/invalid_session.rb +1 -1
  176. data/lib/mongo/error/invalid_signature.rb +1 -1
  177. data/lib/mongo/error/invalid_transaction_operation.rb +1 -1
  178. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  179. data/lib/mongo/error/invalid_update_document.rb +1 -1
  180. data/lib/mongo/error/invalid_uri.rb +1 -1
  181. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  182. data/lib/mongo/error/kms_error.rb +1 -1
  183. data/lib/mongo/error/labelable.rb +1 -1
  184. data/lib/mongo/error/lint_error.rb +1 -1
  185. data/lib/mongo/error/max_bson_size.rb +1 -1
  186. data/lib/mongo/error/max_message_size.rb +1 -1
  187. data/lib/mongo/error/mismatched_domain.rb +1 -1
  188. data/lib/mongo/error/missing_connection.rb +4 -2
  189. data/lib/mongo/error/missing_file_chunk.rb +1 -1
  190. data/lib/mongo/error/missing_password.rb +1 -1
  191. data/lib/mongo/error/missing_resume_token.rb +1 -1
  192. data/lib/mongo/error/missing_scram_server_signature.rb +1 -1
  193. data/lib/mongo/error/missing_service_id.rb +1 -1
  194. data/lib/mongo/error/mongocryptd_spawn_error.rb +1 -1
  195. data/lib/mongo/error/multi_index_drop.rb +1 -1
  196. data/lib/mongo/error/need_primary_server.rb +1 -1
  197. data/lib/mongo/error/no_server_available.rb +1 -1
  198. data/lib/mongo/error/no_service_connection_available.rb +1 -1
  199. data/lib/mongo/error/no_srv_records.rb +1 -1
  200. data/lib/mongo/error/notable.rb +8 -1
  201. data/lib/mongo/error/operation_failure.rb +1 -1
  202. data/lib/mongo/error/parser.rb +1 -1
  203. data/lib/mongo/error/pool_cleared_error.rb +40 -0
  204. data/lib/mongo/error/pool_closed_error.rb +4 -17
  205. data/lib/mongo/error/pool_error.rb +45 -0
  206. data/lib/mongo/error/pool_paused_error.rb +40 -0
  207. data/lib/mongo/error/raise_original_error.rb +1 -1
  208. data/lib/mongo/error/read_write_retryable.rb +1 -1
  209. data/lib/mongo/error/sdam_error_detection.rb +1 -1
  210. data/lib/mongo/error/server_api_conflict.rb +1 -1
  211. data/lib/mongo/error/server_api_not_supported.rb +1 -1
  212. data/lib/mongo/error/server_certificate_revoked.rb +1 -1
  213. data/lib/mongo/error/server_not_usable.rb +36 -0
  214. data/lib/mongo/error/session_ended.rb +1 -1
  215. data/lib/mongo/error/session_not_materialized.rb +1 -1
  216. data/lib/mongo/error/sessions_not_supported.rb +1 -1
  217. data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -1
  218. data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -1
  219. data/lib/mongo/error/socket_error.rb +1 -1
  220. data/lib/mongo/error/socket_timeout_error.rb +1 -1
  221. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  222. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  223. data/lib/mongo/error/unexpected_response.rb +1 -1
  224. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  225. data/lib/mongo/error/unmet_dependency.rb +1 -1
  226. data/lib/mongo/error/unsupported_array_filters.rb +1 -1
  227. data/lib/mongo/error/unsupported_collation.rb +1 -1
  228. data/lib/mongo/error/unsupported_features.rb +1 -1
  229. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  230. data/lib/mongo/error/unsupported_option.rb +1 -1
  231. data/lib/mongo/error/write_retryable.rb +1 -1
  232. data/lib/mongo/error.rb +8 -1
  233. data/lib/mongo/event/base.rb +1 -1
  234. data/lib/mongo/event/listeners.rb +1 -1
  235. data/lib/mongo/event/publisher.rb +1 -1
  236. data/lib/mongo/event/subscriber.rb +1 -1
  237. data/lib/mongo/event.rb +1 -1
  238. data/lib/mongo/grid/file/chunk.rb +3 -2
  239. data/lib/mongo/grid/file/info.rb +3 -2
  240. data/lib/mongo/grid/file.rb +1 -1
  241. data/lib/mongo/grid/fs_bucket.rb +1 -1
  242. data/lib/mongo/grid/stream/read.rb +1 -1
  243. data/lib/mongo/grid/stream/write.rb +1 -1
  244. data/lib/mongo/grid/stream.rb +1 -1
  245. data/lib/mongo/grid.rb +1 -1
  246. data/lib/mongo/id.rb +1 -1
  247. data/lib/mongo/index/view.rb +1 -1
  248. data/lib/mongo/index.rb +1 -1
  249. data/lib/mongo/lint.rb +1 -1
  250. data/lib/mongo/loggable.rb +3 -3
  251. data/lib/mongo/logger.rb +1 -1
  252. data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
  253. data/lib/mongo/monitoring/command_log_subscriber.rb +1 -1
  254. data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
  255. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
  256. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
  257. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
  258. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
  259. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
  260. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
  261. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
  262. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +9 -2
  263. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
  264. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
  265. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +67 -0
  266. data/lib/mongo/monitoring/event/cmap.rb +2 -1
  267. data/lib/mongo/monitoring/event/command_failed.rb +1 -1
  268. data/lib/mongo/monitoring/event/command_started.rb +1 -1
  269. data/lib/mongo/monitoring/event/command_succeeded.rb +1 -1
  270. data/lib/mongo/monitoring/event/secure.rb +1 -1
  271. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  272. data/lib/mongo/monitoring/event/server_description_changed.rb +1 -1
  273. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +1 -1
  274. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -1
  275. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +1 -1
  276. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  277. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  278. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  279. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  280. data/lib/mongo/monitoring/event.rb +1 -1
  281. data/lib/mongo/monitoring/publishable.rb +1 -1
  282. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  283. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  284. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  285. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  286. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  287. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
  288. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  289. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
  290. data/lib/mongo/monitoring.rb +1 -1
  291. data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
  292. data/lib/mongo/operation/aggregate/result.rb +1 -1
  293. data/lib/mongo/operation/aggregate.rb +1 -1
  294. data/lib/mongo/operation/collections_info/result.rb +1 -1
  295. data/lib/mongo/operation/collections_info.rb +1 -1
  296. data/lib/mongo/operation/command/op_msg.rb +1 -1
  297. data/lib/mongo/operation/command.rb +1 -1
  298. data/lib/mongo/operation/context.rb +1 -1
  299. data/lib/mongo/operation/count/op_msg.rb +1 -1
  300. data/lib/mongo/operation/count.rb +1 -1
  301. data/lib/mongo/operation/create/op_msg.rb +1 -1
  302. data/lib/mongo/operation/create.rb +1 -1
  303. data/lib/mongo/operation/create_index/op_msg.rb +1 -1
  304. data/lib/mongo/operation/create_index.rb +1 -1
  305. data/lib/mongo/operation/create_user/op_msg.rb +1 -1
  306. data/lib/mongo/operation/create_user.rb +1 -1
  307. data/lib/mongo/operation/delete/bulk_result.rb +1 -1
  308. data/lib/mongo/operation/delete/op_msg.rb +1 -1
  309. data/lib/mongo/operation/delete/result.rb +1 -1
  310. data/lib/mongo/operation/delete.rb +1 -1
  311. data/lib/mongo/operation/distinct/op_msg.rb +1 -1
  312. data/lib/mongo/operation/distinct.rb +1 -1
  313. data/lib/mongo/operation/drop/op_msg.rb +1 -1
  314. data/lib/mongo/operation/drop.rb +1 -1
  315. data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
  316. data/lib/mongo/operation/drop_database.rb +1 -1
  317. data/lib/mongo/operation/drop_index/op_msg.rb +1 -1
  318. data/lib/mongo/operation/drop_index.rb +1 -1
  319. data/lib/mongo/operation/explain/op_msg.rb +1 -1
  320. data/lib/mongo/operation/explain/result.rb +1 -1
  321. data/lib/mongo/operation/explain.rb +1 -1
  322. data/lib/mongo/operation/find/builder/command.rb +1 -1
  323. data/lib/mongo/operation/find/builder/flags.rb +1 -1
  324. data/lib/mongo/operation/find/builder/modifiers.rb +1 -1
  325. data/lib/mongo/operation/find/builder.rb +1 -1
  326. data/lib/mongo/operation/find/op_msg.rb +1 -1
  327. data/lib/mongo/operation/find/result.rb +1 -1
  328. data/lib/mongo/operation/find.rb +1 -1
  329. data/lib/mongo/operation/get_more/command_builder.rb +1 -1
  330. data/lib/mongo/operation/get_more/op_msg.rb +1 -1
  331. data/lib/mongo/operation/get_more/result.rb +1 -1
  332. data/lib/mongo/operation/get_more.rb +1 -1
  333. data/lib/mongo/operation/indexes/op_msg.rb +1 -1
  334. data/lib/mongo/operation/indexes/result.rb +1 -1
  335. data/lib/mongo/operation/indexes.rb +1 -1
  336. data/lib/mongo/operation/insert/bulk_result.rb +1 -1
  337. data/lib/mongo/operation/insert/op_msg.rb +1 -1
  338. data/lib/mongo/operation/insert/result.rb +1 -1
  339. data/lib/mongo/operation/insert.rb +1 -1
  340. data/lib/mongo/operation/kill_cursors/command_builder.rb +1 -1
  341. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
  342. data/lib/mongo/operation/kill_cursors.rb +1 -1
  343. data/lib/mongo/operation/list_collections/op_msg.rb +1 -1
  344. data/lib/mongo/operation/list_collections/result.rb +1 -1
  345. data/lib/mongo/operation/list_collections.rb +1 -1
  346. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  347. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  348. data/lib/mongo/operation/map_reduce.rb +1 -1
  349. data/lib/mongo/operation/op_msg_base.rb +1 -1
  350. data/lib/mongo/operation/parallel_scan/op_msg.rb +1 -1
  351. data/lib/mongo/operation/parallel_scan/result.rb +1 -1
  352. data/lib/mongo/operation/parallel_scan.rb +1 -1
  353. data/lib/mongo/operation/remove_user/op_msg.rb +1 -1
  354. data/lib/mongo/operation/remove_user.rb +1 -1
  355. data/lib/mongo/operation/result.rb +1 -1
  356. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -1
  357. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -1
  358. data/lib/mongo/operation/shared/executable.rb +1 -1
  359. data/lib/mongo/operation/shared/executable_no_validate.rb +1 -1
  360. data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
  361. data/lib/mongo/operation/shared/idable.rb +1 -1
  362. data/lib/mongo/operation/shared/limited.rb +1 -1
  363. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  364. data/lib/mongo/operation/shared/op_msg_executable.rb +1 -1
  365. data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
  366. data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
  367. data/lib/mongo/operation/shared/read_preference_supported.rb +1 -1
  368. data/lib/mongo/operation/shared/response_handling.rb +1 -1
  369. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
  370. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
  371. data/lib/mongo/operation/shared/sessions_supported.rb +1 -2
  372. data/lib/mongo/operation/shared/specifiable.rb +1 -1
  373. data/lib/mongo/operation/shared/validatable.rb +1 -1
  374. data/lib/mongo/operation/shared/write.rb +1 -1
  375. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
  376. data/lib/mongo/operation/update/bulk_result.rb +1 -1
  377. data/lib/mongo/operation/update/op_msg.rb +1 -1
  378. data/lib/mongo/operation/update/result.rb +1 -1
  379. data/lib/mongo/operation/update.rb +1 -1
  380. data/lib/mongo/operation/update_user/op_msg.rb +1 -1
  381. data/lib/mongo/operation/update_user.rb +1 -1
  382. data/lib/mongo/operation/users_info/op_msg.rb +1 -1
  383. data/lib/mongo/operation/users_info/result.rb +1 -1
  384. data/lib/mongo/operation/users_info.rb +1 -1
  385. data/lib/mongo/operation/write_command/op_msg.rb +1 -1
  386. data/lib/mongo/operation/write_command.rb +1 -1
  387. data/lib/mongo/operation.rb +1 -1
  388. data/lib/mongo/options/mapper.rb +1 -1
  389. data/lib/mongo/options/redacted.rb +1 -1
  390. data/lib/mongo/options.rb +1 -1
  391. data/lib/mongo/protocol/bit_vector.rb +4 -2
  392. data/lib/mongo/protocol/caching_hash.rb +4 -21
  393. data/lib/mongo/protocol/compressed.rb +1 -1
  394. data/lib/mongo/protocol/get_more.rb +1 -1
  395. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  396. data/lib/mongo/protocol/message.rb +5 -9
  397. data/lib/mongo/protocol/msg.rb +2 -1
  398. data/lib/mongo/protocol/query.rb +1 -1
  399. data/lib/mongo/protocol/registry.rb +1 -1
  400. data/lib/mongo/protocol/reply.rb +1 -1
  401. data/lib/mongo/protocol/serializers.rb +25 -18
  402. data/lib/mongo/protocol.rb +1 -1
  403. data/lib/mongo/query_cache.rb +1 -1
  404. data/lib/mongo/retryable/base_worker.rb +91 -0
  405. data/lib/mongo/retryable/read_worker.rb +296 -0
  406. data/lib/mongo/retryable/write_worker.rb +364 -0
  407. data/lib/mongo/retryable.rb +31 -502
  408. data/lib/mongo/semaphore.rb +2 -2
  409. data/lib/mongo/server/app_metadata/environment.rb +259 -0
  410. data/lib/mongo/server/app_metadata/platform.rb +114 -0
  411. data/lib/mongo/server/app_metadata/truncator.rb +142 -0
  412. data/lib/mongo/server/app_metadata.rb +75 -108
  413. data/lib/mongo/server/connection.rb +61 -20
  414. data/lib/mongo/server/connection_base.rb +1 -1
  415. data/lib/mongo/server/connection_common.rb +1 -1
  416. data/lib/mongo/server/connection_pool/generation_manager.rb +56 -12
  417. data/lib/mongo/server/connection_pool/populator.rb +33 -31
  418. data/lib/mongo/server/connection_pool.rb +726 -265
  419. data/lib/mongo/server/description/features.rb +2 -2
  420. data/lib/mongo/server/description/load_balancer.rb +1 -1
  421. data/lib/mongo/server/description.rb +7 -6
  422. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  423. data/lib/mongo/server/monitor/connection.rb +1 -1
  424. data/lib/mongo/server/monitor.rb +11 -7
  425. data/lib/mongo/server/pending_connection.rb +1 -1
  426. data/lib/mongo/server/push_monitor/connection.rb +1 -1
  427. data/lib/mongo/server/push_monitor.rb +1 -1
  428. data/lib/mongo/server/round_trip_time_averager.rb +1 -1
  429. data/lib/mongo/server.rb +96 -30
  430. data/lib/mongo/server_selector/base.rb +24 -3
  431. data/lib/mongo/server_selector/nearest.rb +1 -1
  432. data/lib/mongo/server_selector/primary.rb +1 -1
  433. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  434. data/lib/mongo/server_selector/secondary.rb +1 -1
  435. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  436. data/lib/mongo/server_selector.rb +1 -1
  437. data/lib/mongo/session/server_session.rb +1 -1
  438. data/lib/mongo/session/session_pool.rb +1 -1
  439. data/lib/mongo/session.rb +1 -1
  440. data/lib/mongo/socket/ocsp_cache.rb +1 -1
  441. data/lib/mongo/socket/ocsp_verifier.rb +1 -1
  442. data/lib/mongo/socket/ssl.rb +1 -1
  443. data/lib/mongo/socket/tcp.rb +1 -1
  444. data/lib/mongo/socket/unix.rb +1 -1
  445. data/lib/mongo/socket.rb +29 -2
  446. data/lib/mongo/srv/monitor.rb +1 -3
  447. data/lib/mongo/srv/resolver.rb +1 -1
  448. data/lib/mongo/srv/result.rb +1 -1
  449. data/lib/mongo/srv.rb +1 -1
  450. data/lib/mongo/timeout.rb +2 -2
  451. data/lib/mongo/topology_version.rb +1 -1
  452. data/lib/mongo/uri/options_mapper.rb +322 -81
  453. data/lib/mongo/uri/srv_protocol.rb +1 -1
  454. data/lib/mongo/uri.rb +41 -13
  455. data/lib/mongo/utils.rb +1 -1
  456. data/lib/mongo/version.rb +2 -2
  457. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  458. data/lib/mongo/write_concern/base.rb +1 -1
  459. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  460. data/lib/mongo/write_concern.rb +1 -1
  461. data/lib/mongo.rb +2 -1
  462. data/mongo.gemspec +5 -2
  463. data/spec/atlas/atlas_connectivity_spec.rb +1 -1
  464. data/spec/atlas/operations_spec.rb +3 -8
  465. data/spec/integration/auth_spec.rb +1 -1
  466. data/spec/integration/awaited_ismaster_spec.rb +1 -1
  467. data/spec/integration/aws_auth_credentials_cache_spec.rb +51 -0
  468. data/spec/integration/aws_auth_request_spec.rb +2 -2
  469. data/spec/integration/aws_credentials_retriever_spec.rb +32 -2
  470. data/spec/integration/aws_lambda_examples_spec.rb +1 -1
  471. data/spec/integration/bson_symbol_spec.rb +1 -1
  472. data/spec/integration/bulk_insert_spec.rb +1 -1
  473. data/spec/integration/bulk_write_error_message_spec.rb +1 -0
  474. data/spec/integration/bulk_write_spec.rb +1 -1
  475. data/spec/integration/change_stream_examples_spec.rb +1 -1
  476. data/spec/integration/change_stream_spec.rb +6 -1
  477. data/spec/integration/check_clean_slate_spec.rb +1 -1
  478. data/spec/integration/client_authentication_options_spec.rb +1 -1
  479. data/spec/integration/client_connectivity_spec.rb +1 -1
  480. data/spec/integration/client_construction_aws_auth_spec.rb +12 -3
  481. data/spec/integration/client_construction_spec.rb +23 -1
  482. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +1 -1
  483. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +1 -1
  484. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +1 -1
  485. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +1 -1
  486. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +10 -5
  487. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +38 -2
  488. data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +153 -0
  489. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +1 -1
  490. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +1 -1
  491. data/spec/integration/client_side_encryption/client_close_spec.rb +1 -1
  492. data/spec/integration/client_side_encryption/corpus_spec.rb +1 -1
  493. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +3 -3
  494. data/spec/integration/client_side_encryption/data_key_spec.rb +1 -1
  495. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +59 -58
  496. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +1 -1
  497. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +36 -33
  498. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +1 -1
  499. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +3 -3
  500. data/spec/integration/client_side_encryption/kms_tls_spec.rb +1 -1
  501. data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +105 -0
  502. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +49 -0
  503. data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +46 -0
  504. data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +47 -0
  505. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +14 -11
  506. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +536 -0
  507. data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +114 -0
  508. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +20 -16
  509. data/spec/integration/client_side_encryption/views_spec.rb +1 -1
  510. data/spec/integration/client_spec.rb +8 -3
  511. data/spec/integration/client_update_spec.rb +7 -3
  512. data/spec/integration/collection_indexes_prose_spec.rb +1 -1
  513. data/spec/integration/command_monitoring_spec.rb +1 -1
  514. data/spec/integration/command_spec.rb +1 -1
  515. data/spec/integration/connect_single_rs_name_spec.rb +1 -1
  516. data/spec/integration/connection/faas_env_spec.rb +62 -0
  517. data/spec/integration/connection_pool_populator_spec.rb +27 -7
  518. data/spec/integration/connection_spec.rb +1 -1
  519. data/spec/integration/crud_spec.rb +1 -1
  520. data/spec/integration/cursor_pinning_spec.rb +6 -2
  521. data/spec/integration/cursor_reaping_spec.rb +1 -1
  522. data/spec/integration/docs_examples_spec.rb +2 -2
  523. data/spec/integration/error_detection_spec.rb +1 -1
  524. data/spec/integration/fork_reconnect_spec.rb +2 -2
  525. data/spec/integration/get_more_spec.rb +1 -1
  526. data/spec/integration/grid_fs_bucket_spec.rb +1 -1
  527. data/spec/integration/heartbeat_events_spec.rb +1 -1
  528. data/spec/integration/map_reduce_spec.rb +5 -1
  529. data/spec/integration/mmapv1_spec.rb +1 -1
  530. data/spec/integration/mongos_pinning_spec.rb +1 -1
  531. data/spec/integration/ocsp_connectivity_spec.rb +1 -1
  532. data/spec/integration/ocsp_verifier_cache_spec.rb +1 -1
  533. data/spec/integration/ocsp_verifier_spec.rb +2 -2
  534. data/spec/integration/operation_failure_code_spec.rb +1 -1
  535. data/spec/integration/operation_failure_message_spec.rb +1 -0
  536. data/spec/integration/query_cache_spec.rb +90 -3
  537. data/spec/integration/query_cache_transactions_spec.rb +1 -1
  538. data/spec/integration/read_concern_spec.rb +1 -1
  539. data/spec/integration/read_preference_spec.rb +1 -1
  540. data/spec/integration/reconnect_spec.rb +4 -1
  541. data/spec/integration/retryable_errors_spec.rb +1 -1
  542. data/spec/integration/retryable_reads_errors_spec.rb +110 -0
  543. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
  544. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
  545. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +1 -1
  546. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +1 -1
  547. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +1 -1
  548. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +1 -1
  549. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +1 -1
  550. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +1 -1
  551. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +1 -1
  552. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +1 -1
  553. data/spec/integration/retryable_writes/shared/supports_retries.rb +1 -1
  554. data/spec/integration/retryable_writes_errors_spec.rb +160 -2
  555. data/spec/integration/sdam_error_handling_spec.rb +65 -4
  556. data/spec/integration/sdam_events_spec.rb +1 -1
  557. data/spec/integration/sdam_prose_spec.rb +3 -3
  558. data/spec/integration/secondary_reads_spec.rb +1 -0
  559. data/spec/integration/server_description_spec.rb +1 -1
  560. data/spec/integration/server_monitor_spec.rb +1 -1
  561. data/spec/integration/server_selection_spec.rb +1 -1
  562. data/spec/integration/server_selector_spec.rb +5 -3
  563. data/spec/integration/server_spec.rb +23 -26
  564. data/spec/integration/shell_examples_spec.rb +1 -1
  565. data/spec/integration/size_limit_spec.rb +1 -1
  566. data/spec/integration/snappy_compression_spec.rb +1 -1
  567. data/spec/integration/snapshot_query_examples_spec.rb +9 -7
  568. data/spec/integration/srv_monitoring_spec.rb +2 -1
  569. data/spec/integration/srv_spec.rb +3 -3
  570. data/spec/integration/ssl_uri_options_spec.rb +1 -1
  571. data/spec/integration/step_down_spec.rb +5 -3
  572. data/spec/integration/time_zone_querying_spec.rb +1 -1
  573. data/spec/integration/transaction_pinning_spec.rb +18 -4
  574. data/spec/integration/transactions_api_examples_spec.rb +1 -1
  575. data/spec/integration/transactions_examples_spec.rb +1 -1
  576. data/spec/integration/truncated_utf8_spec.rb +1 -1
  577. data/spec/integration/versioned_api_examples_spec.rb +2 -2
  578. data/spec/integration/x509_auth_spec.rb +1 -1
  579. data/spec/integration/zlib_compression_spec.rb +1 -1
  580. data/spec/integration/zstd_compression_spec.rb +1 -1
  581. data/spec/kerberos/kerberos_spec.rb +1 -1
  582. data/spec/lite_spec_helper.rb +15 -2
  583. data/spec/mongo/address/ipv4_spec.rb +1 -1
  584. data/spec/mongo/address/ipv6_spec.rb +1 -1
  585. data/spec/mongo/address/unix_spec.rb +1 -1
  586. data/spec/mongo/address/validator_spec.rb +1 -1
  587. data/spec/mongo/address_spec.rb +8 -2
  588. data/spec/mongo/auth/aws/credential_cache_spec.rb +63 -0
  589. data/spec/mongo/auth/aws/credentials_retriever_spec.rb +90 -0
  590. data/spec/mongo/auth/aws/credentials_spec.rb +46 -0
  591. data/spec/mongo/auth/aws/request_region_spec.rb +1 -1
  592. data/spec/mongo/auth/aws/request_spec.rb +1 -1
  593. data/spec/mongo/auth/cr_spec.rb +2 -22
  594. data/spec/mongo/auth/gssapi/conversation_spec.rb +1 -1
  595. data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
  596. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  597. data/spec/mongo/auth/ldap_spec.rb +1 -1
  598. data/spec/mongo/auth/scram/conversation_spec.rb +1 -1
  599. data/spec/mongo/auth/scram256/conversation_spec.rb +1 -1
  600. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
  601. data/spec/mongo/auth/scram_spec.rb +1 -1
  602. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +1 -1
  603. data/spec/mongo/auth/stringprep_spec.rb +1 -1
  604. data/spec/mongo/auth/user/view_spec.rb +96 -1
  605. data/spec/mongo/auth/user_spec.rb +1 -1
  606. data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
  607. data/spec/mongo/auth/x509_spec.rb +1 -1
  608. data/spec/mongo/auth_spec.rb +1 -1
  609. data/spec/mongo/bson_spec.rb +1 -1
  610. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +1 -1
  611. data/spec/mongo/bulk_write/result_spec.rb +1 -1
  612. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +1 -1
  613. data/spec/mongo/bulk_write_spec.rb +1 -1
  614. data/spec/mongo/caching_cursor_spec.rb +1 -1
  615. data/spec/mongo/client_construction_spec.rb +619 -693
  616. data/spec/mongo/client_encryption_spec.rb +1 -1
  617. data/spec/mongo/client_spec.rb +172 -231
  618. data/spec/mongo/cluster/cursor_reaper_spec.rb +1 -1
  619. data/spec/mongo/cluster/periodic_executor_spec.rb +1 -1
  620. data/spec/mongo/cluster/socket_reaper_spec.rb +1 -1
  621. data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
  622. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  623. data/spec/mongo/cluster/topology/single_spec.rb +1 -1
  624. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  625. data/spec/mongo/cluster/topology_spec.rb +1 -1
  626. data/spec/mongo/cluster_spec.rb +156 -154
  627. data/spec/mongo/cluster_time_spec.rb +1 -1
  628. data/spec/mongo/collection/view/aggregation_spec.rb +1 -1
  629. data/spec/mongo/collection/view/builder/find_command_spec.rb +1 -1
  630. data/spec/mongo/collection/view/builder/op_query_spec.rb +1 -1
  631. data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
  632. data/spec/mongo/collection/view/change_stream_spec.rb +1 -1
  633. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  634. data/spec/mongo/collection/view/immutable_spec.rb +1 -1
  635. data/spec/mongo/collection/view/iterable_spec.rb +1 -1
  636. data/spec/mongo/collection/view/map_reduce_spec.rb +11 -1
  637. data/spec/mongo/collection/view/readable_spec.rb +139 -1
  638. data/spec/mongo/collection/view/writable_spec.rb +1 -1
  639. data/spec/mongo/collection/view_spec.rb +1 -1
  640. data/spec/mongo/collection_crud_spec.rb +1 -1
  641. data/spec/mongo/collection_ddl_spec.rb +116 -66
  642. data/spec/mongo/collection_spec.rb +11 -7
  643. data/spec/mongo/condition_variable_spec.rb +104 -0
  644. data/spec/mongo/config/options_spec.rb +1 -0
  645. data/spec/mongo/config_spec.rb +2 -1
  646. data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
  647. data/spec/mongo/crypt/auto_encrypter_spec.rb +8 -1
  648. data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
  649. data/spec/mongo/crypt/binary_spec.rb +1 -1
  650. data/spec/mongo/crypt/binding/binary_spec.rb +1 -1
  651. data/spec/mongo/crypt/binding/context_spec.rb +1 -1
  652. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -1
  653. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +1 -1
  654. data/spec/mongo/crypt/binding/status_spec.rb +1 -1
  655. data/spec/mongo/crypt/binding/version_spec.rb +19 -5
  656. data/spec/mongo/crypt/binding_unloaded_spec.rb +1 -1
  657. data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
  658. data/spec/mongo/crypt/encryption_io_spec.rb +1 -1
  659. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
  660. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +3 -3
  661. data/spec/mongo/crypt/handle_spec.rb +19 -4
  662. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +1 -1
  663. data/spec/mongo/crypt/hooks_spec.rb +2 -2
  664. data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +86 -0
  665. data/spec/mongo/crypt/kms/credentials_spec.rb +17 -1
  666. data/spec/mongo/crypt/kms_spec.rb +1 -1
  667. data/spec/mongo/crypt/status_spec.rb +1 -1
  668. data/spec/mongo/crypt_spec.rb +21 -0
  669. data/spec/mongo/cursor/builder/get_more_command_spec.rb +1 -1
  670. data/spec/mongo/cursor/builder/op_get_more_spec.rb +1 -1
  671. data/spec/mongo/cursor_spec.rb +58 -11
  672. data/spec/mongo/database_spec.rb +1 -1
  673. data/spec/mongo/distinguishing_semaphore_spec.rb +7 -7
  674. data/spec/mongo/error/bulk_write_error_spec.rb +1 -1
  675. data/spec/mongo/error/crypt_error_spec.rb +1 -1
  676. data/spec/mongo/error/max_bson_size_spec.rb +1 -1
  677. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  678. data/spec/mongo/error/notable_spec.rb +1 -1
  679. data/spec/mongo/error/operation_failure_heavy_spec.rb +1 -1
  680. data/spec/mongo/error/operation_failure_spec.rb +1 -1
  681. data/spec/mongo/error/parser_spec.rb +1 -1
  682. data/spec/mongo/error/unsupported_option_spec.rb +1 -1
  683. data/spec/mongo/event/publisher_spec.rb +1 -1
  684. data/spec/mongo/event/subscriber_spec.rb +1 -1
  685. data/spec/mongo/grid/file/chunk_spec.rb +1 -1
  686. data/spec/mongo/grid/file/info_spec.rb +1 -1
  687. data/spec/mongo/grid/file_spec.rb +1 -1
  688. data/spec/mongo/grid/fs_bucket_spec.rb +1 -1
  689. data/spec/mongo/grid/stream/read_spec.rb +1 -1
  690. data/spec/mongo/grid/stream/write_spec.rb +1 -1
  691. data/spec/mongo/grid/stream_spec.rb +1 -1
  692. data/spec/mongo/id_spec.rb +2 -2
  693. data/spec/mongo/index/view_spec.rb +4 -4
  694. data/spec/mongo/lint_spec.rb +2 -2
  695. data/spec/mongo/logger_spec.rb +1 -1
  696. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +1 -1
  697. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +2 -2
  698. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +2 -2
  699. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +2 -2
  700. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +2 -2
  701. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +2 -2
  702. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +2 -2
  703. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +2 -2
  704. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +2 -2
  705. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +2 -2
  706. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +2 -2
  707. data/spec/mongo/monitoring/event/command_failed_spec.rb +1 -1
  708. data/spec/mongo/monitoring/event/command_started_spec.rb +1 -1
  709. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +1 -1
  710. data/spec/mongo/monitoring/event/secure_spec.rb +1 -1
  711. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  712. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -1
  713. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
  714. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +1 -1
  715. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
  716. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  717. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  718. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  719. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  720. data/spec/mongo/monitoring_spec.rb +1 -1
  721. data/spec/mongo/operation/aggregate/result_spec.rb +1 -1
  722. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  723. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  724. data/spec/mongo/operation/command_spec.rb +1 -1
  725. data/spec/mongo/operation/create/op_msg_spec.rb +1 -1
  726. data/spec/mongo/operation/create_index_spec.rb +1 -1
  727. data/spec/mongo/operation/create_user_spec.rb +1 -1
  728. data/spec/mongo/operation/delete/bulk_spec.rb +1 -1
  729. data/spec/mongo/operation/delete/op_msg_spec.rb +1 -1
  730. data/spec/mongo/operation/delete_spec.rb +1 -1
  731. data/spec/mongo/operation/drop_index_spec.rb +1 -1
  732. data/spec/mongo/operation/find/builder/flags_spec.rb +1 -1
  733. data/spec/mongo/operation/find/builder/modifiers_spec.rb +1 -1
  734. data/spec/mongo/operation/indexes_spec.rb +1 -1
  735. data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
  736. data/spec/mongo/operation/insert/op_msg_spec.rb +1 -1
  737. data/spec/mongo/operation/insert_spec.rb +1 -1
  738. data/spec/mongo/operation/limited_spec.rb +1 -1
  739. data/spec/mongo/operation/map_reduce_spec.rb +1 -1
  740. data/spec/mongo/operation/read_preference_legacy_spec.rb +1 -1
  741. data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
  742. data/spec/mongo/operation/remove_user_spec.rb +1 -1
  743. data/spec/mongo/operation/result_spec.rb +1 -1
  744. data/spec/mongo/operation/specifiable_spec.rb +1 -1
  745. data/spec/mongo/operation/update/bulk_spec.rb +1 -1
  746. data/spec/mongo/operation/update/op_msg_spec.rb +1 -1
  747. data/spec/mongo/operation/update_spec.rb +1 -1
  748. data/spec/mongo/operation/update_user_spec.rb +1 -1
  749. data/spec/mongo/options/redacted_spec.rb +2 -2
  750. data/spec/mongo/protocol/caching_hash_spec.rb +1 -46
  751. data/spec/mongo/protocol/compressed_spec.rb +1 -1
  752. data/spec/mongo/protocol/get_more_spec.rb +1 -1
  753. data/spec/mongo/protocol/kill_cursors_spec.rb +1 -1
  754. data/spec/mongo/protocol/msg_spec.rb +4 -66
  755. data/spec/mongo/protocol/query_spec.rb +1 -1
  756. data/spec/mongo/protocol/registry_spec.rb +1 -1
  757. data/spec/mongo/protocol/reply_spec.rb +1 -1
  758. data/spec/mongo/query_cache_middleware_spec.rb +1 -1
  759. data/spec/mongo/query_cache_spec.rb +1 -1
  760. data/spec/mongo/retryable_spec.rb +5 -3
  761. data/spec/mongo/semaphore_spec.rb +7 -7
  762. data/spec/mongo/server/app_metadata/environment_spec.rb +209 -0
  763. data/spec/mongo/server/app_metadata/truncator_spec.rb +158 -0
  764. data/spec/mongo/server/app_metadata_spec.rb +44 -66
  765. data/spec/mongo/server/connection_auth_spec.rb +1 -1
  766. data/spec/mongo/server/connection_common_spec.rb +1 -1
  767. data/spec/mongo/server/connection_pool/populator_spec.rb +17 -3
  768. data/spec/mongo/server/connection_pool_spec.rb +447 -10
  769. data/spec/mongo/server/connection_spec.rb +17 -4
  770. data/spec/mongo/server/description/features_spec.rb +1 -1
  771. data/spec/mongo/server/description_query_methods_spec.rb +1 -1
  772. data/spec/mongo/server/description_spec.rb +1 -1
  773. data/spec/mongo/server/monitor/app_metadata_spec.rb +1 -1
  774. data/spec/mongo/server/monitor/connection_spec.rb +3 -3
  775. data/spec/mongo/server/monitor_spec.rb +6 -5
  776. data/spec/mongo/server/push_monitor_spec.rb +1 -1
  777. data/spec/mongo/server/round_trip_time_averager_spec.rb +1 -1
  778. data/spec/mongo/server_selector/nearest_spec.rb +1 -1
  779. data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -1
  780. data/spec/mongo/server_selector/primary_spec.rb +1 -1
  781. data/spec/mongo/server_selector/secondary_preferred_spec.rb +1 -1
  782. data/spec/mongo/server_selector/secondary_spec.rb +1 -1
  783. data/spec/mongo/server_selector_spec.rb +1 -1
  784. data/spec/mongo/server_spec.rb +32 -5
  785. data/spec/mongo/session/server_session_spec.rb +1 -1
  786. data/spec/mongo/session/session_pool_spec.rb +1 -1
  787. data/spec/mongo/session_spec.rb +1 -1
  788. data/spec/mongo/session_transaction_spec.rb +2 -2
  789. data/spec/mongo/socket/ssl_spec.rb +3 -9
  790. data/spec/mongo/socket/tcp_spec.rb +1 -1
  791. data/spec/mongo/socket/unix_spec.rb +1 -1
  792. data/spec/mongo/socket_spec.rb +1 -1
  793. data/spec/mongo/srv/monitor_spec.rb +1 -1
  794. data/spec/mongo/srv/result_spec.rb +1 -1
  795. data/spec/mongo/timeout_spec.rb +1 -1
  796. data/spec/mongo/tls_context_hooks_spec.rb +1 -1
  797. data/spec/mongo/uri/options_mapper_spec.rb +1605 -0
  798. data/spec/mongo/uri/srv_protocol_spec.rb +162 -2
  799. data/spec/mongo/uri_option_parsing_spec.rb +1 -1
  800. data/spec/mongo/uri_spec.rb +143 -2
  801. data/spec/mongo/utils_spec.rb +1 -1
  802. data/spec/mongo/write_concern/acknowledged_spec.rb +1 -1
  803. data/spec/mongo/write_concern/unacknowledged_spec.rb +1 -1
  804. data/spec/mongo/write_concern_spec.rb +1 -1
  805. data/spec/runners/auth.rb +1 -1
  806. data/spec/runners/change_streams/outcome.rb +1 -1
  807. data/spec/runners/change_streams/spec.rb +1 -1
  808. data/spec/runners/change_streams/test.rb +1 -1
  809. data/spec/runners/cmap/verifier.rb +2 -2
  810. data/spec/runners/cmap.rb +188 -45
  811. data/spec/runners/command_monitoring.rb +1 -1
  812. data/spec/runners/connection_string.rb +1 -1
  813. data/spec/runners/crud/context.rb +1 -1
  814. data/spec/runners/crud/operation.rb +2 -2
  815. data/spec/runners/crud/outcome.rb +1 -1
  816. data/spec/runners/crud/requirement.rb +3 -3
  817. data/spec/runners/crud/spec.rb +2 -2
  818. data/spec/runners/crud/test.rb +1 -1
  819. data/spec/runners/crud/test_base.rb +2 -2
  820. data/spec/runners/crud/verifier.rb +3 -3
  821. data/spec/runners/crud.rb +1 -1
  822. data/spec/runners/gridfs.rb +1 -1
  823. data/spec/runners/read_write_concern_document.rb +1 -1
  824. data/spec/runners/sdam/verifier.rb +1 -1
  825. data/spec/runners/sdam.rb +1 -1
  826. data/spec/runners/server_selection.rb +1 -1
  827. data/spec/runners/server_selection_rtt.rb +1 -1
  828. data/spec/runners/transactions/operation.rb +15 -9
  829. data/spec/runners/transactions/spec.rb +1 -1
  830. data/spec/runners/transactions/test.rb +44 -3
  831. data/spec/runners/transactions.rb +1 -1
  832. data/spec/runners/unified/assertions.rb +94 -77
  833. data/spec/runners/unified/change_stream_operations.rb +14 -3
  834. data/spec/runners/unified/client_side_encryption_operations.rb +1 -1
  835. data/spec/runners/unified/crud_operations.rb +11 -2
  836. data/spec/runners/unified/ddl_operations.rb +80 -4
  837. data/spec/runners/unified/entity_map.rb +1 -1
  838. data/spec/runners/unified/error.rb +1 -1
  839. data/spec/runners/unified/event_subscriber.rb +9 -3
  840. data/spec/runners/unified/exceptions.rb +1 -1
  841. data/spec/runners/unified/grid_fs_operations.rb +1 -1
  842. data/spec/runners/unified/support_operations.rb +66 -2
  843. data/spec/runners/unified/test.rb +98 -24
  844. data/spec/runners/unified/test_group.rb +1 -1
  845. data/spec/runners/unified/thread_operations.rb +73 -0
  846. data/spec/runners/unified.rb +9 -6
  847. data/spec/shared/lib/mrss/docker_runner.rb +4 -0
  848. data/spec/shared/lib/mrss/lite_constraints.rb +10 -2
  849. data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
  850. data/spec/shared/lib/mrss/utils.rb +28 -6
  851. data/spec/shared/share/Dockerfile.erb +24 -19
  852. data/spec/shared/shlib/server.sh +32 -8
  853. data/spec/shared/shlib/set_env.sh +4 -4
  854. data/spec/solo/clean_exit_spec.rb +4 -11
  855. data/spec/spec_helper.rb +1 -1
  856. data/spec/spec_tests/auth_spec.rb +1 -1
  857. data/spec/spec_tests/change_streams_unified_spec.rb +2 -1
  858. data/spec/spec_tests/client_side_encryption_spec.rb +25 -2
  859. data/spec/spec_tests/client_side_encryption_unified_spec.rb +12 -2
  860. data/spec/spec_tests/cmap_spec.rb +29 -15
  861. data/spec/spec_tests/collection_management_spec.rb +1 -1
  862. data/spec/spec_tests/command_monitoring_unified_spec.rb +1 -1
  863. data/spec/spec_tests/connection_string_spec.rb +1 -1
  864. data/spec/spec_tests/crud_spec.rb +1 -1
  865. data/spec/spec_tests/crud_unified_spec.rb +1 -1
  866. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +41 -0
  867. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +103 -0
  868. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +2 -6
  869. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
  870. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -3
  871. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -3
  872. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +15 -6
  873. data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +57 -0
  874. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +5 -4
  875. data/spec/spec_tests/data/client_side_encryption/{fle2-BypassQueryAnalysis.yml → fle2v2-BypassQueryAnalysis.yml} +18 -30
  876. data/spec/spec_tests/data/client_side_encryption/{fle2-Compact.yml → fle2v2-Compact.yml} +5 -3
  877. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +61 -0
  878. data/spec/spec_tests/data/client_side_encryption/{fle2-CreateCollection.yml → fle2v2-CreateCollection.yml} +212 -538
  879. data/spec/spec_tests/data/client_side_encryption/{fle2-DecryptExistingData.yml → fle2v2-DecryptExistingData.yml} +4 -2
  880. data/spec/spec_tests/data/client_side_encryption/{fle2-Delete.yml → fle2v2-Delete.yml} +17 -24
  881. data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFields-vs-EncryptedFieldsMap.yml → fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml} +5 -6
  882. data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFields-vs-jsonSchema.yml → fle2v2-EncryptedFields-vs-jsonSchema.yml} +18 -6
  883. data/spec/spec_tests/data/client_side_encryption/{fle2-EncryptedFieldsMap-defaults.yml → fle2v2-EncryptedFieldsMap-defaults.yml} +6 -5
  884. data/spec/spec_tests/data/client_side_encryption/{fle2-FindOneAndUpdate.yml → fle2v2-FindOneAndUpdate.yml} +31 -44
  885. data/spec/spec_tests/data/client_side_encryption/{fle2-InsertFind-Indexed.yml → fle2v2-InsertFind-Indexed.yml} +16 -6
  886. data/spec/spec_tests/data/client_side_encryption/{fle2-InsertFind-Unindexed.yml → fle2v2-InsertFind-Unindexed.yml} +10 -4
  887. data/spec/spec_tests/data/client_side_encryption/{fle2-MissingKey.yml → fle2v2-MissingKey.yml} +5 -3
  888. data/spec/spec_tests/data/client_side_encryption/{fle2-NoEncryption.yml → fle2v2-NoEncryption.yml} +4 -2
  889. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +241 -0
  890. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +422 -0
  891. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +182 -0
  892. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +239 -0
  893. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +235 -0
  894. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +252 -0
  895. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +1687 -0
  896. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +293 -0
  897. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +905 -0
  898. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +1684 -0
  899. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +1680 -0
  900. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +1697 -0
  901. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +329 -0
  902. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +424 -0
  903. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +226 -0
  904. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +327 -0
  905. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +319 -0
  906. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +336 -0
  907. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +913 -0
  908. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +292 -0
  909. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +518 -0
  910. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +911 -0
  911. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +907 -0
  912. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +924 -0
  913. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +325 -0
  914. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +424 -0
  915. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +224 -0
  916. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +323 -0
  917. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +319 -0
  918. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +338 -0
  919. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +241 -0
  920. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +423 -0
  921. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +182 -0
  922. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +239 -0
  923. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +235 -0
  924. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +254 -0
  925. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +241 -0
  926. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +422 -0
  927. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +182 -0
  928. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +239 -0
  929. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +235 -0
  930. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +254 -0
  931. data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +43 -0
  932. data/spec/spec_tests/data/client_side_encryption/{fle2-Update.yml → fle2v2-Update.yml} +33 -44
  933. data/spec/spec_tests/data/client_side_encryption/{fle2-validatorAndPartialFieldExpression.yml → fle2v2-validatorAndPartialFieldExpression.yml} +10 -9
  934. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +1 -1
  935. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +1 -1
  936. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +2 -0
  937. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +2 -0
  938. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +2 -0
  939. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +2 -0
  940. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -1
  941. data/spec/spec_tests/data/cmap/pool-checkin.yml +5 -0
  942. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +2 -0
  943. data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +50 -0
  944. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +2 -0
  945. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +81 -0
  946. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +71 -0
  947. data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +64 -0
  948. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +2 -0
  949. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +6 -0
  950. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +8 -0
  951. data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +88 -0
  952. data/spec/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +49 -0
  953. data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +43 -0
  954. data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +41 -0
  955. data/spec/spec_tests/data/cmap/pool-clear-paused.yml +18 -0
  956. data/spec/spec_tests/data/cmap/pool-clear-ready.yml +39 -0
  957. data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +48 -0
  958. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
  959. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +2 -0
  960. data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +43 -0
  961. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +9 -0
  962. data/spec/spec_tests/data/cmap/pool-ready-ready.yml +22 -0
  963. data/spec/spec_tests/data/cmap/pool-ready.yml +30 -0
  964. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +2 -0
  965. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +6 -1
  966. data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +59 -0
  967. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +35 -0
  968. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +8 -0
  969. data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +80 -0
  970. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +42 -0
  971. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +50 -0
  972. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +46 -0
  973. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +44 -0
  974. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +69 -0
  975. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +46 -0
  976. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +47 -0
  977. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +1266 -53
  978. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +1 -1
  979. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +706 -58
  980. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +54 -0
  981. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +1 -1
  982. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +62 -0
  983. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +175 -0
  984. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +20 -18
  985. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +87 -0
  986. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +1 -1
  987. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +101 -0
  988. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +78 -0
  989. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +79 -0
  990. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +79 -0
  991. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +9 -10
  992. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +117 -0
  993. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +23 -21
  994. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -1
  995. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +38 -39
  996. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +38 -39
  997. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +1 -1
  998. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +1 -1
  999. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +1 -1
  1000. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  1001. data/spec/spec_tests/data/sdam_unified/auth-error.yml +130 -0
  1002. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +132 -0
  1003. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +132 -0
  1004. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +138 -0
  1005. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +133 -0
  1006. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +143 -0
  1007. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +130 -0
  1008. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +135 -0
  1009. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +119 -0
  1010. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +163 -0
  1011. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +233 -0
  1012. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +228 -0
  1013. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +318 -0
  1014. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +137 -0
  1015. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +162 -0
  1016. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +340 -0
  1017. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +125 -0
  1018. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +239 -0
  1019. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +144 -0
  1020. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +6 -5
  1021. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +2 -2
  1022. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +5 -4
  1023. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +1 -1
  1024. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +4 -3
  1025. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +4 -3
  1026. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +119 -0
  1027. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +1 -1
  1028. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +1 -1
  1029. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +1 -1
  1030. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +31 -0
  1031. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +31 -0
  1032. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +34 -0
  1033. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +35 -0
  1034. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +17 -0
  1035. data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +37 -0
  1036. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +40 -0
  1037. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +37 -0
  1038. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +39 -0
  1039. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +66 -0
  1040. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +34 -0
  1041. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +255 -0
  1042. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +18 -0
  1043. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +18 -12
  1044. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +3 -3
  1045. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +2 -2
  1046. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +1 -1
  1047. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +1 -1
  1048. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +4 -4
  1049. data/spec/spec_tests/gridfs_spec.rb +1 -1
  1050. data/spec/spec_tests/gridfs_unified_spec.rb +1 -1
  1051. data/spec/spec_tests/load_balancers_spec.rb +1 -1
  1052. data/spec/spec_tests/max_staleness_spec.rb +1 -1
  1053. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
  1054. data/spec/spec_tests/read_write_concern_document_spec.rb +1 -1
  1055. data/spec/spec_tests/read_write_concern_operaton_spec.rb +1 -1
  1056. data/spec/spec_tests/retryable_reads_spec.rb +3 -1
  1057. data/spec/spec_tests/retryable_reads_unified_spec.rb +1 -1
  1058. data/spec/spec_tests/retryable_writes_spec.rb +1 -1
  1059. data/spec/spec_tests/retryable_writes_unified_spec.rb +1 -1
  1060. data/spec/spec_tests/sdam_monitoring_spec.rb +1 -1
  1061. data/spec/spec_tests/sdam_spec.rb +5 -1
  1062. data/spec/spec_tests/sdam_unified_spec.rb +13 -0
  1063. data/spec/spec_tests/seed_list_discovery_spec.rb +1 -1
  1064. data/spec/spec_tests/server_selection_rtt_spec.rb +1 -1
  1065. data/spec/spec_tests/server_selection_spec.rb +1 -1
  1066. data/spec/spec_tests/sessions_unified_spec.rb +1 -1
  1067. data/spec/spec_tests/transactions_api_spec.rb +1 -1
  1068. data/spec/spec_tests/transactions_spec.rb +1 -1
  1069. data/spec/spec_tests/transactions_unified_spec.rb +1 -1
  1070. data/spec/spec_tests/unified_spec.rb +1 -6
  1071. data/spec/spec_tests/uri_options_spec.rb +1 -1
  1072. data/spec/spec_tests/versioned_api_spec.rb +1 -1
  1073. data/spec/stress/cleanup_spec.rb +1 -1
  1074. data/spec/stress/connection_pool_stress_spec.rb +1 -62
  1075. data/spec/stress/connection_pool_timing_spec.rb +9 -34
  1076. data/spec/stress/fork_reconnect_stress_spec.rb +7 -8
  1077. data/spec/stress/push_monitor_close_spec.rb +1 -1
  1078. data/spec/support/authorization.rb +1 -1
  1079. data/spec/support/aws_utils/base.rb +1 -1
  1080. data/spec/support/aws_utils/inspector.rb +1 -1
  1081. data/spec/support/aws_utils/orchestrator.rb +20 -8
  1082. data/spec/support/aws_utils/provisioner.rb +1 -1
  1083. data/spec/support/aws_utils.rb +4 -3
  1084. data/spec/support/background_thread_registry.rb +1 -1
  1085. data/spec/support/certificates/atlas-ocsp-ca.crt +67 -67
  1086. data/spec/support/certificates/atlas-ocsp.crt +103 -103
  1087. data/spec/support/certificates/retrieve-atlas-cert +2 -0
  1088. data/spec/support/client_registry.rb +6 -2
  1089. data/spec/support/client_registry_macros.rb +1 -1
  1090. data/spec/support/cluster_tools.rb +13 -8
  1091. data/spec/support/common_shortcuts.rb +30 -5
  1092. data/spec/support/constraints.rb +15 -1
  1093. data/spec/support/crypt/{encryptedFields.json → encrypted_fields/encryptedFields.json} +0 -1
  1094. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +30 -0
  1095. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +21 -0
  1096. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +29 -0
  1097. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +21 -0
  1098. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +30 -0
  1099. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +27 -0
  1100. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +27 -0
  1101. data/spec/support/crypt.rb +13 -3
  1102. data/spec/support/dns.rb +1 -1
  1103. data/spec/support/json_ext_formatter.rb +1 -1
  1104. data/spec/support/keyword_struct.rb +1 -1
  1105. data/spec/support/local_resource_registry.rb +1 -1
  1106. data/spec/support/macros.rb +1 -0
  1107. data/spec/support/matchers.rb +5 -5
  1108. data/spec/support/mongos_macros.rb +7 -0
  1109. data/spec/support/monitoring_ext.rb +1 -1
  1110. data/spec/support/primary_socket.rb +1 -1
  1111. data/spec/support/sdam_formatter_integration.rb +1 -1
  1112. data/spec/support/shared/app_metadata.rb +15 -3
  1113. data/spec/support/shared/auth_context.rb +1 -0
  1114. data/spec/support/shared/protocol.rb +1 -1
  1115. data/spec/support/shared/scram_conversation.rb +1 -1
  1116. data/spec/support/shared/server_selector.rb +1 -1
  1117. data/spec/support/shared/session.rb +1 -1
  1118. data/spec/support/spec_config.rb +40 -3
  1119. data/spec/support/spec_setup.rb +1 -1
  1120. data/spec/support/using_hash.rb +11 -2
  1121. data/spec/support/utils.rb +277 -249
  1122. data.tar.gz.sig +0 -0
  1123. metadata +1459 -1173
  1124. metadata.gz.sig +0 -0
  1125. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +0 -96
  1126. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +0 -88
  1127. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +0 -85
  1128. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +0 -118
  1129. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +0 -152
  1130. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +0 -148
  1131. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +0 -219
  1132. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +0 -88
  1133. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +0 -117
  1134. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +0 -98
  1135. data/spec/spec_tests/data/unified/invalid/expectedEventsForClient-ignoreExtraEvents-type.yml +0 -15
  1136. data/spec/spec_tests/sdam_integration_spec.rb +0 -16
@@ -0,0 +1,1697 @@
1
+
2
+ # Requires libmongocrypt 1.8.0.
3
+ runOn:
4
+ - minServerVersion: "7.0.0"
5
+ # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
6
+ # FLE 2 Encrypted collections are not supported on standalone.
7
+ # Tests for Decimal (without precision) must only run against a replica set. Decimal (without precision) queries are expected to take a long time and may exceed the default mongos timeout.
8
+ topology: [ "replicaset" ]
9
+ database_name: &database_name "default"
10
+ collection_name: &collection_name "default"
11
+ data: []
12
+ encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedDecimalNoPrecision', 'bsonType': 'decimal', 'queries': {'queryType': 'rangePreview', 'contention': {'$numberLong': '0'}, 'sparsity': {'$numberLong': '1'}}}]}
13
+ key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ]
14
+ tests:
15
+ - description: "FLE2 Range Decimal. Update."
16
+ clientOptions:
17
+ autoEncryptOpts:
18
+ kmsProviders:
19
+ local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
20
+ operations:
21
+ - name: insertOne
22
+ arguments:
23
+ document: &doc0 { _id: 0, encryptedDecimalNoPrecision: { $numberDecimal: "0" } }
24
+ - name: insertOne
25
+ arguments:
26
+ document: &doc1 { _id: 1, encryptedDecimalNoPrecision: { $numberDecimal: "1" } }
27
+ - name: updateOne
28
+ arguments:
29
+ filter: { encryptedDecimalNoPrecision: { $gt: { $numberDecimal: "0" } } }
30
+ update: { "$set": { "encryptedDecimalNoPrecision": { $numberDecimal: "2" } }}
31
+ result:
32
+ matchedCount: 1
33
+ modifiedCount: 1
34
+ upsertedCount: 0
35
+ expectations:
36
+ - command_started_event:
37
+ command:
38
+ listCollections: 1
39
+ filter:
40
+ name: *collection_name
41
+ command_name: listCollections
42
+ - command_started_event:
43
+ command:
44
+ find: datakeys
45
+ filter: {
46
+ "$or": [
47
+ {
48
+ "_id": {
49
+ "$in": [
50
+ {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}
51
+ ]
52
+ }
53
+ },
54
+ {
55
+ "keyAltNames": {
56
+ "$in": []
57
+ }
58
+ }
59
+ ]
60
+ }
61
+ $db: keyvault
62
+ readConcern: { level: "majority" }
63
+ command_name: find
64
+ - command_started_event:
65
+ command:
66
+ insert: *collection_name
67
+ documents:
68
+ - &doc0_encrypted { "_id": 0, "encryptedDecimalNoPrecision": { $$type: "binData" } }
69
+ ordered: true
70
+ encryptionInformation:
71
+ type: 1
72
+ schema:
73
+ default.default:
74
+ # libmongocrypt applies escCollection and ecocCollection to outgoing command.
75
+ escCollection: "enxcol_.default.esc"
76
+ ecocCollection: "enxcol_.default.ecoc"
77
+ <<: *encrypted_fields
78
+ command_name: insert
79
+ - command_started_event:
80
+ command:
81
+ insert: *collection_name
82
+ documents:
83
+ - &doc1_encrypted { "_id": 1, "encryptedDecimalNoPrecision": { $$type: "binData" } }
84
+ ordered: true
85
+ encryptionInformation:
86
+ type: 1
87
+ schema:
88
+ default.default:
89
+ # libmongocrypt applies escCollection and ecocCollection to outgoing command.
90
+ escCollection: "enxcol_.default.esc"
91
+ ecocCollection: "enxcol_.default.ecoc"
92
+ <<: *encrypted_fields
93
+ command_name: insert
94
+ - command_started_event:
95
+ command_name: update
96
+ command:
97
+ "update": "default"
98
+ "ordered": true
99
+ "updates": [
100
+ {
101
+ "q": {
102
+ "encryptedDecimalNoPrecision": {
103
+ "$gt": {
104
+ "$binary": {
105
+ "base64": "DeFiAAADcGF5bG9hZACxYgAABGcAnWIAAAMwAH0AAAAFZAAgAAAAAJu2KgiI8vM+kz9qD3ZQzFQY5qbgYqCqHG5R4jAlnlwXBXMAIAAAAAAAUXxFXsz764T79sGCdhxvNd5b6E/9p61FonsHyEIhogVsACAAAAAAt19RL3Oo5ni5L8kcvgOJYLgVYyXJExwP8pkuzLG7f/kAAzEAfQAAAAVkACAAAAAAPQPvL0ARjujSv2Rkm8r7spVsgeC1K3FWcskGGZ3OdDIFcwAgAAAAACgNn660GmefR8jLqzgR1u5O+Uocx9GyEHiBqVGko5FZBWwAIAAAAADflr+fsnZngm6KRWYgHa9JzK+bXogWl9evBU9sQUHPHQADMgB9AAAABWQAIAAAAAD2Zi6kcxmaD2mY3VWrP+wYJMPg6cSBIYPapxaFQxYFdQVzACAAAAAAM/cV36BLBY3xFBXsXJY8M9EHHOc/qrmdc2CJmj3M89gFbAAgAAAAAOpydOrKxx6m2gquSDV2Vv3w10GocmNCFeOo/fRhRH9JAAMzAH0AAAAFZAAgAAAAAOaNqI9srQ/mI9gwbk+VkizGBBH/PPWOVusgnfPk3tY1BXMAIAAAAAAc96O/pwKCmHCagT6T/QV/wz4vqO+R22GsZ1dse2Vg6QVsACAAAAAAgzIak+Q3UFLTHXPmJ+MuEklFtR3eLtvM+jdKkmGCV/YAAzQAfQAAAAVkACAAAAAA0XlQgy/Yu97EQOjronl9b3dcR1DFn3deuVhtTLbJZHkFcwAgAAAAACoMnpVl6EFJak8A+t5N4RFnQhkQEBnNAx8wDqmq5U/dBWwAIAAAAACR26FJif673qpwF1J1FEkQGJ1Ywcr/ZW6JQ7meGqzt1QADNQB9AAAABWQAIAAAAAAOtpNexRxfv0yRFvZO9DhlkpU4mDuAb8ykdLnE5Vf1VAVzACAAAAAAeblFKm/30orP16uQpZslvsoS8s0xfNPIBlw3VkHeekYFbAAgAAAAAPEoHj87sYE+nBut52/LPvleWQBzB/uaJFnosxp4NRO2AAM2AH0AAAAFZAAgAAAAAIr8xAFm1zPmrvW4Vy5Ct0W8FxMmyPmFzdWVzesBhAJFBXMAIAAAAABYeeXjJEzTHwxab6pUiCRiZjxgtN59a1y8Szy3hfkg+gVsACAAAAAAJuoY4rF8mbI+nKb+5XbZShJ8191o/e8ZCRHE0O4Ey8MAAzcAfQAAAAVkACAAAAAAl+ibLk0/+EwoqeC8S8cGgAtjtpQWGEZDsybMPnrrkwEFcwAgAAAAAHPPBudWgQ+HUorLDpJMqhS9VBF2VF5aLcxgrM1s+yU7BWwAIAAAAAAcCcBR2Vyv5pAFbaOU97yovuOi1+ATDnLLcAUqHecXcAADOAB9AAAABWQAIAAAAACR9erwLTb+tcWFZgJ2MEfM0PKI9uuwIjDTHADRFgD+SQVzACAAAAAAcOop8TXsGUVQoKhzUllMYWxL93xCOkwtIpV8Q6hiSYYFbAAgAAAAAKXKmh4V8veYwob1H03Q3p3PN8SRAaQwDT34KlNVUjiDAAM5AH0AAAAFZAAgAAAAALv0vCPgh7QpmM8Ug6ad5ioZJCh7pLMdT8FYyQioBQ6KBXMAIAAAAADsCPyIG8t6ApQkRk1fX/sfc1kpuWCWP8gAEpnYoBSHrQVsACAAAAAAJe/r67N6d8uTiogvfoR9rEXbIDjyLb9EVdqkayFFGaYAAzEwAH0AAAAFZAAgAAAAAIW4AxJgYoM0pcNTwk1RSbyjZGIqgKL1hcTJmNrnZmoPBXMAIAAAAAAZpfx3EFO0vY0f1eHnE0PazgqeNDTaj+pPJMUNW8lFrAVsACAAAAAAP+Um2vwW6Bj6vuz9DKz6+6aWkoKoEmFNoiz/xXm7lOsAAzExAH0AAAAFZAAgAAAAAKliO6L9zgeuufjj174hvmQGNRbmYYs9yAirL7OxwEW3BXMAIAAAAAAqU7vs3DWUQ95Eq8OejwWnD0GuXd+ASi/uD6S0l8MM1QVsACAAAAAAb9legYzsfctBPpHyl7YWpPmLr5QiNZFND/50N1vv2MUAAzEyAH0AAAAFZAAgAAAAAOGQcCBkk+j/Kzjt/Cs6g3BZPJG81wIHBS8JewHGpgk+BXMAIAAAAABjrxZXWCkdzrExwCgyHaafuPSQ4V4x2k9kUCAqUaYKDQVsACAAAAAADBU6KefT0v8zSmseaMNmQxKjJar72y7MojLFhkEHqrUAAzEzAH0AAAAFZAAgAAAAAPmCNEt4t97waOSd5hNi2fNCdWEkmcFJ37LI9k4Az4/5BXMAIAAAAABX7DuDPNg+duvELf3NbLWkPMFw2HGLgWGHyVWcPvSNCAVsACAAAAAAS7El1FtZ5STh8Q1FguvieyYX9b2DF1DFVsb9hzxXYRsAAzE0AH0AAAAFZAAgAAAAAD4vtVUYRNB+FD9yoQ2FVJH3nMeJeKbi6eZfth638YqbBXMAIAAAAAANCuUB4OdmuD6LaDK2f3vaqfgYYvg40wDXOBbcFjTqLwVsACAAAAAA9hqC2VoJBjwR7hcQ45xO8ZVojwC83jiRacCaDj6Px2gAAzE1AH0AAAAFZAAgAAAAAJPIRzjmTjbdIvshG6UslbEOd797ZSIdjGAhGWxVQvK1BXMAIAAAAABgmJ0Jh8WLs9IYs/a7DBjDWd8J3thW/AGJK7zDnMeYOAVsACAAAAAAi9zAsyAuou2oiCUHGc6QefLUkACa9IgeBhGu9W/r0X8AAzE2AH0AAAAFZAAgAAAAAABQyKQPoW8wGPIqnsTv69+DzIdRkohRhOhDmyVHkw9WBXMAIAAAAAAqWA2X4tB/h3O1Xlawtz6ndI6WaTwgU1QYflL35opu5gVsACAAAAAAWI/Gj5aZMwDIxztqmVL0g5LBcI8EdKEc2UA28pnekQoAAzE3AH0AAAAFZAAgAAAAACB7NOyGQ1Id3MYnxtBXqyZ5Ul/lHH6p1b10U63DfT6bBXMAIAAAAADpOryIcndxztkHSfLN3Kzq29sD8djS0PspDSqERMqokQVsACAAAAAADatsMW4ezgnyi1PiP7xk+gA4AFIN/fb5uJqfVkjg4UoAAzE4AH0AAAAFZAAgAAAAAKVfXLfs8XA14CRTB56oZwV+bFJN5BHraTXbqEXZDmTkBXMAIAAAAAASRWTsfGOpqdffiOodoqIgBzG/yzFyjR5CfUsIUIWGpgVsACAAAAAAkgCHbCwyX640/0Ni8+MoYxeHUiC+FSU4Mn9jTLYtgZgAAzE5AH0AAAAFZAAgAAAAAH/aZr4EuS0/noQR9rcF8vwoaxnxrwgOsSJ0ys8PkHhGBXMAIAAAAACd7ObGQW7qfddcvyxRTkPuvq/PHu7+6I5dxwS1Lzy5XAVsACAAAAAA3q0eKdV7KeU3pc+CtfypKR7BPxwaf30yu0j9FXeOOboAAzIwAH0AAAAFZAAgAAAAAKvlcpFFNq0oA+urq3w6d80PK1HHHw0H0yVWvU9aHijXBXMAIAAAAADWnAHQ5Fhlcjawki7kWzdqjM2f6IdGJblojrYElWjsZgVsACAAAAAAO0wvY66l24gx8nRxyVGC0QcTztIi81Kx3ndRhuZr6W4AAzIxAH0AAAAFZAAgAAAAAH/2aMezEOddrq+dNOkDrdqf13h2ttOnexZsJxG1G6PNBXMAIAAAAABNtgnibjC4VKy5poYjvdsBBnVvDTF/4mmEAxsXVgZVKgVsACAAAAAAqvadzJFLqQbs8WxgZ2D2X+XnaPSDMLCVVgWxx5jnLcYAAzIyAH0AAAAFZAAgAAAAAF2wZoDL6/V59QqO8vdRZWDpXpkV4h4KOCSn5e7x7nmzBXMAIAAAAADLZBu7LCYjbThaVUqMK14H/elrVOYIKJQCx4C9Yjw37gVsACAAAAAAEh6Vs81jLU204aGpL90fmYTm5i5R8/RT1uIbg6VU3HwAAzIzAH0AAAAFZAAgAAAAAH27yYaLn9zh2CpvaoomUPercSfJRUmBY6XFqmhcXi9QBXMAIAAAAAAUwumVlIYIs9JhDhSj0R0+59psCMsFk94E62VxkPt42QVsACAAAAAAT5x2hCCd2bpmpnyWaxas8nSxTc8e4C9DfKaqr0ABEysAAzI0AH0AAAAFZAAgAAAAALMg2kNAO4AFFs/mW3In04yFeN4AP6Vo0klyUoT06RquBXMAIAAAAAAgGWJbeIdwlpqXCyVIYSs0dt54Rfc8JF4b8uYc+YUj0AVsACAAAAAAWHeWxIkyvXTOWvfZzqtPXjfGaWWKjGSIQENTU3zBCrsAAzI1AH0AAAAFZAAgAAAAALas/i1T2DFCEmrrLEi7O2ngJZyFHialOoedVXS+OjenBXMAIAAAAAA1kK0QxY4REcGxHeMkgumyF7iwlsRFtw9MlbSSoQY7uAVsACAAAAAAUNlpMJZs1p4HfsD4Q4WZ4TBEi6Oc2fX34rzyynqWCdwAAzI2AH0AAAAFZAAgAAAAAP1TejmWg1CEuNSMt6NUgeQ5lT+oBoeyF7d2l5xQrbXWBXMAIAAAAABPX0kj6obggdJShmqtVfueKHplH4ZrXusiwrRDHMOKeQVsACAAAAAAIYOsNwC3DA7fLcOzqdr0bOFdHCfmK8tLwPoaE9uKOosAAzI3AH0AAAAFZAAgAAAAAMrKn+QPa/NxYezNhlOX9nyEkN1kE/gW7EuZkVqYl0b8BXMAIAAAAABUoZMSPUywRGfX2EEencJEKH5x/P9ySUVrhStAwgR/LgVsACAAAAAAMgZFH6lQIIDrgHnFeslv3ld20ynwQjQJt3cAp4GgrFkAAzI4AH0AAAAFZAAgAAAAAMmD1+a+oVbiUZd1HuZqdgtdVsVKwuWAn3/M1B6QGBM3BXMAIAAAAACLyytOYuZ9WEsIrrtJbXUx4QgipbaAbmlJvSZVkGi0CAVsACAAAAAA4v1lSp5H9BB+HYJ4bH43tC8aeuPZMf78Ng1JOhJh190AAzI5AH0AAAAFZAAgAAAAAOVKV7IuFwmYP1qVv8h0NvJmfPICu8yQhzjG7oJdTLDoBXMAIAAAAABL70XLfQLKRsw1deJ2MUvxSWKxpF/Ez73jqtbLvqbuogVsACAAAAAAvfgzIorXxE91dDt4nQxYfntTsx0M8Gzdsao5naQqcRUAAzMwAH0AAAAFZAAgAAAAAKS/1RSAQma+xV9rz04IcdzmavtrBDjOKPM+Z2NEyYfPBXMAIAAAAAAOJDWGORDgfRv8+w5nunh41wXb2hCA0MRzwnLnQtIqPgVsACAAAAAAf42C1+T7xdHEFF83+c2mF5S8PuuL22ogXXELnRAZ4boAAzMxAH0AAAAFZAAgAAAAAFeq8o82uNY1X8cH6OhdTzHNBUnCChsEDs5tm0kPBz3qBXMAIAAAAABaxMBbsaeEj/EDtr8nZfrhhhirBRPJwVamDo5WwbgvTQVsACAAAAAAMbH453A+BYAaDOTo5kdhV1VdND1avNwvshEG/4MIJjQAAzMyAH0AAAAFZAAgAAAAAI8IKIfDrohHh2cjspJHCovqroSr5N3QyVtNzFvT5+FzBXMAIAAAAABXHXteKG0DoOMmECKp6ro1MZNQvXGzqTDdZ0DUc8QfFAVsACAAAAAA/w5s++XYmO+9TWTbtGc3n3ndV4T9JUribIbF4jmDLSMAAzMzAH0AAAAFZAAgAAAAAJkHvm15kIu1OtAiaByj5ieWqzxiu/epK6c/9+KYIrB0BXMAIAAAAACzg5TcyANk0nes/wCJudd1BwlkWWF6zw3nGclq5v3SJQVsACAAAAAAvruXHTT3irPJLyWpI1j/Xwf2FeIE/IV+6Z49pqRzISoAAzM0AH0AAAAFZAAgAAAAAAYSOvEWWuSg1Aym7EssNLR+xsY7e9BcwsX4JKlnSHJcBXMAIAAAAABT48eY3PXVDOjw7JpNjOe1j2JyI3LjDnQoqZ8Je5B2KgVsACAAAAAAU2815RR57TQ9uDg0XjWjBkAKvf8yssxDMzrM4+FqP6AAAzM1AH0AAAAFZAAgAAAAAGQxC9L1e9DfO5XZvX1yvc3hTLtQEdKO9FPMkyg0Y9ZABXMAIAAAAADtmcMNJwdWLxQEArMGZQyzpnu+Z5yMmPAkvgq4eAKwNQVsACAAAAAAJ88zt4Y/Hoqh+zrf6KCOiUwHbOzCxSfp6k/qsZaYGEgAAzM2AH0AAAAFZAAgAAAAADLHK2LNCNRO0pv8n4fAsxwtUqCNnVK8rRgNiQfXpHSdBXMAIAAAAACf16EBIHRKD3SzjRW+LMOl+47QXA3CJhMzlcqyFRW22AVsACAAAAAAMGz4fAOa0EoVv90fUffwLjBrQhHATf+NdlgCR65vujAAAzM3AH0AAAAFZAAgAAAAAHiZJiXKNF8bbukQGsdYkEi95I+FSBHy1I5/hK2uEZruBXMAIAAAAADE+lZBa8HDUJPN+bF6xI9x4N7GF9pj3vBR7y0BcfFhBAVsACAAAAAAGIEN6sfqq30nyxW4dxDgXr/jz5HmvA9T1jx/pKCn4zgAAzM4AH0AAAAFZAAgAAAAAI1oa2OIw5TvhT14tYCGmhanUoYcCZtNbrVbeoMldHNZBXMAIAAAAAAx2nS0Ipblf2XOgBiUOuJFBupBhe7nb6QPLZlA4aMPCgVsACAAAAAA9xu828hugIgo0E3de9dZD+gTpVUGlwtDba+tw/WcbUoAAzM5AH0AAAAFZAAgAAAAABgTWS3Yap7Q59hii/uPPimHWXsr+DUmsqfwt/X73qsOBXMAIAAAAACKK05liW5KrmEAvtpCB1WUltruzUylDDpjea//UlWoOAVsACAAAAAAcgN4P/wakJ5aJK5c1bvJBqpVGND221dli2YicPFfuAYAAzQwAH0AAAAFZAAgAAAAABOAnBPXDp6i9TISQXvcNKwGDLepZTu3cKrB4vKnSCjBBXMAIAAAAADjjzZO7UowAAvpwyG8BNOVqLCccMFk3aDK4unUeft5ywVsACAAAAAA4zkCd4k9gvfXoD1C7vwTjNcdVJwEARh8h/cxZ4PNMfgAAzQxAH0AAAAFZAAgAAAAAHN8hyvT1lYrAsdiV5GBdd5jhtrAYE/KnSjw2Ka9hjz9BXMAIAAAAAD794JK7EeXBs+D7yOVK7nWF8SbZ/7U8gZ7nnT9JFNwTAVsACAAAAAAg8Wt1HO3NhByq2ggux2a4Lo6Gryr24rEFIqh2acrwWMAAzQyAH0AAAAFZAAgAAAAAO93bPrq8bsnp1AtNd9ETnXIz0lH/2HYN/vuw9wA3fyFBXMAIAAAAABHlls5fbaF2oAGqptC481XQ4eYxInTC29aElfmVZgDUgVsACAAAAAANoQXEWpXJpgrSNK/cKi/m7oYhuSRlp1IZBF0bqTEATcAAzQzAH0AAAAFZAAgAAAAAL1YsAZm1SA0ztU6ySIrQgCCA74V6rr0/4iIygCcaJL6BXMAIAAAAADTXWTHWovGmUR1Zg9l/Aqq9H5mOCJQQrb/Dfae7e3wKAVsACAAAAAA5dunyJK6/SVfDD0t9QlNBcFqoZnf9legRjHaLSKAoQMAAzQ0AH0AAAAFZAAgAAAAAEoFAeHk0RZ9kD+cJRD3j7PcE5gzWKnyBrF1I/MDNp5mBXMAIAAAAACgHtc2hMBRSZjKw8RAdDHK+Pi1HeyjiBuAslGVNcW5tAVsACAAAAAAXzBLfq+GxRtX4Wa9fazA49DBLG6AjZm2XODStJKH8D0AAzQ1AH0AAAAFZAAgAAAAAAW+7DmSN/LX+/0uBVJDHIc2dhxAGz4+ehyyz8fAnNGoBXMAIAAAAAA6Ilw42EvvfLJ3Eq8Afd+FjPoPcQutZO6ltmCLEr8kxQVsACAAAAAAbbZalyo07BbFjPFlYmbmv0z023eT9eLkHqeVUnfUAUAAAzQ2AH0AAAAFZAAgAAAAANBdV7M7kuYO3EMoQItAbXv4t2cIhfaT9V6+s4cg9djlBXMAIAAAAABvz4MIvZWxxrcJCL5qxLfFhXiUYB1OLHdKEjco94SgDgVsACAAAAAAK2GVGvyPIKolF/ECcmfmkVcf1/IZNcaTv96N92yGrkEAAzQ3AH0AAAAFZAAgAAAAAMoAoiAn1kc79j5oPZtlMWHMhhgwNhLUnvqkqIFvcH1NBXMAIAAAAADcJTW7WiCyW0Z9YDUYwppXhLj4Ac1povpJvcAq+i48MQVsACAAAAAAIGxGDzoeB3PTmudl4+j6piQB++e33EEzuzAiXcqGxvUAAzQ4AH0AAAAFZAAgAAAAACI3j5QP7dWHpcT6WO/OhsWwRJNASBYqIBDNzW8IorEyBXMAIAAAAABxUpBSjXwCKDdGP9hYU+RvyR+96kChfvyyRC4jZmztqAVsACAAAAAAvBCHguWswb4X0xdcAryCvZgQuthXzt7597bJ5VxAMdgAAzQ5AH0AAAAFZAAgAAAAAKsbycEuQSeNrF8Qnxqw3x3og8JmQabwGqnDbqzFRVrrBXMAIAAAAACno/3ef2JZJS93SVVzmOZSN+jjJHT8s0XYq2M46d2sLAVsACAAAAAAAt5zLJG+/j4K8rnkFtAn8IvdUVNefe6utJ3rdzgwudIAAzUwAH0AAAAFZAAgAAAAAPXIcoO8TiULqlxzb74NFg+I8kWX5uXIDUPnh2DobIoMBXMAIAAAAADR6/drkdTpnr9g1XNvKDwtBRBdKn7c2c4ZNUVK5CThdQVsACAAAAAAJqOA1c6KVog3F4Hb/GfDb3jCxXDRTqpXWSbMH4ePIJsAAzUxAH0AAAAFZAAgAAAAAEa03ZOJmfHT6/nVadvIw71jVxEuIloyvxXraYEW7u7pBXMAIAAAAADzRlBJK75FLiKjz3djqcgjCLo/e3yntI3MnPS48OORhgVsACAAAAAAnQhx4Rnyj081XrLRLD5NLpWmRWCsd0M9Hl7Jl19R0h8AAzUyAH0AAAAFZAAgAAAAAKx8NLSZUU04pSSGmHa5fh2oLHsEN5mmNMNHL95/tuC9BXMAIAAAAAA59hcXVaN3MNdHoo11OcH1aPRzHCwpVjO9mGfMz4xh3QVsACAAAAAAYIPdjV2XbPj7dBeHPwnwhVU7zMuJ+xtMUW5mIOYtmdAAAzUzAH0AAAAFZAAgAAAAAHNKAUxUqBFNS9Ea9NgCZoXMWgwhP4x0/OvoaPRWMquXBXMAIAAAAABUZ551mnP4ZjX+PXU9ttomzuOpo427MVynpkyq+nsYCQVsACAAAAAALnVK5p2tTTeZEh1zYt4iqKIQT9Z0si//Hy1L85oF+5IAAzU0AH0AAAAFZAAgAAAAALfGXDlyDVcGaqtyHkLT0qpuRhJQLgCxtznazhFtuyn/BXMAIAAAAABipxlXDq14C62pXhwAeen5+syA+/C6bN4rtZYcO4zKwAVsACAAAAAAXUf0pzUq0NhLYagWDap4uEiwq5rLpcx29rWbt1NYMsMAAzU1AH0AAAAFZAAgAAAAANoEr8sheJjg4UCfBkuUzarU9NFoy1xwbXjs5ifVDeA9BXMAIAAAAABPoyTf6M+xeZVGES4aNzVlq7LgjqZXJ/QunjYVusGUEAVsACAAAAAA1hA2gMeZZPUNytk9K+lB1RCqWRudRr7GtadJlExJf8oAAzU2AH0AAAAFZAAgAAAAAKvDiK+xjlBe1uQ3SZTNQl2lClIIvpP/5CHwY6Kb3WlgBXMAIAAAAAANnxImq5MFbWaRBHdJp+yD09bVlcFtiFDYsy1eDZj+iQVsACAAAAAAWtsyO+FxMPSIezwsV1TJD8ZrXAdRnQM6DJ+f+1V3qEkAAzU3AH0AAAAFZAAgAAAAAF49IlFH9RmSUSvUQpEPUedEksrQUcjsOv44nMkwXhjzBXMAIAAAAADJtWGbk0bZzmk20obz+mNsp86UCu/nLLlbg7ppxYn7PgVsACAAAAAA3k0Tj/XgPQtcYijH8cIlQoe/VXf15q1nrZNmg7yWYEgAAzU4AH0AAAAFZAAgAAAAAOuSJyuvz50lp3BzXlFKnq62QkN2quNU1Gq1IDsnFoJCBXMAIAAAAAAqavH1d93XV3IzshWlMnzznucadBF0ND092/2ApI1AcAVsACAAAAAAzUrK4kpoKCmcpdZlZNI13fddjdoAseVe67jaX1LobIIAAzU5AH0AAAAFZAAgAAAAALtgC4Whb4ZdkCiI30zY6fwlsxSa7lEaOAU3SfUXr02XBXMAIAAAAACgdZ6U1ZVgUaZZwbIaCdlANpCw6TZV0bwg3DS1NC/mnAVsACAAAAAAzI49hdpp0PbO7S2KexISxC16sE73EUAEyuqUFAC/J48AAzYwAH0AAAAFZAAgAAAAAF6PfplcGp6vek1ThwenMHVkbZgrc/dHgdsgx1VdPqZ5BXMAIAAAAACha3qhWkqmuwJSEXPozDO8y1ZdRLyzt9Crt2vjGnT7AAVsACAAAAAA7nvcU59+LwxGupSF21jAeAE0x7JE94tjRkJfgM1yKU8AAzYxAH0AAAAFZAAgAAAAAKoLEhLvLjKc7lhOJfx+VrGJCx9tXlOSa9bxQzGR6rfbBXMAIAAAAAAIDK5wNnjRMBzET7x/KAMExL/zi1IumJM92XTgXfoPoAVsACAAAAAAFkUYWFwNr815dEdFqp+TiIozDcq5IBNVkyMoDjharDQAAzYyAH0AAAAFZAAgAAAAADoQv6lutRmh5scQFvIW6K5JBquLxszuygM1tzBiGknIBXMAIAAAAADAD+JjW7FoBQ76/rsECmmcL76bmyfXpUU/awqIsZdO+wVsACAAAAAAPFHdLw3jssmEXsgtvl/RBNaUCRA1kgSwsofG364VOvQAAzYzAH0AAAAFZAAgAAAAAJNHUGAgn56KekghO19d11nai3lAh0JAlWfeP+6w4lJBBXMAIAAAAAD9XGJlvz59msJvA6St9fKW9CG4JoHV61rlWWnkdBRLzwVsACAAAAAAxwP/X/InJJHmrjznvahIMgj6pQR30B62UtHCthSjrP0AAzY0AH0AAAAFZAAgAAAAAHgYoMGjEE6fAlAhICv0+doHcVX8CmMVxyq7+jlyGrvmBXMAIAAAAAC/5MQZgTHuIr/O5Z3mXPvqrom5JTQ8IeSpQGhO9sB+8gVsACAAAAAAuPSXVmJUAUpTQg/A9Bu1hYczZF58KEhVofakygbsvJQAAzY1AH0AAAAFZAAgAAAAANpIljbxHOM7pydY877gpRQvYY2TGK7igqgGsavqGPBABXMAIAAAAAAqHyEu9gpurPOulApPnr0x9wrygY/7mXe9rAC+tPK80wVsACAAAAAA7gkPzNsS3gCxdFBWbSW9tkBjoR5ib+saDvpGSB3A3ogAAzY2AH0AAAAFZAAgAAAAAGR+gEaZTeGNgG9BuM1bX2R9ed4FCxBA9F9QvdQDAjZwBXMAIAAAAABSkrYFQ6pf8MZ1flgmeIRkxaSh/Eep4Btdx4QYnGGnwAVsACAAAAAApRovMiV00hm/pEcT4XBsyPNw0eo8RLAX/fuabjdU+uwAAzY3AH0AAAAFZAAgAAAAAFNprhQ3ZwIcYbuzLolAT5n/vc14P9kUUQComDu6eFyKBXMAIAAAAAAcx9z9pk32YbPV/sfPZl9ALIEVsqoLXgqWLVK/tP+heAVsACAAAAAA/qxvuvJbAHwwhfrPVpmCFzNvg2cU/NXaWgqgYUZpgXwAAzY4AH0AAAAFZAAgAAAAADgyPqQdqQrgfmJjRFAILTHzXbdw5kpKyfeoEcy6YYG/BXMAIAAAAAAE+3XsBQ8VAxAkN81au+f3FDeCD/s7KoZD+fnM1MJSSAVsACAAAAAAhRnjrXecwV0yeCWKJ5J/x12Xx4qVJahsCEVHB/1U2rcAAzY5AH0AAAAFZAAgAAAAAI0CT7JNngTCTUSei1Arw7eHWCD0jumv2rb7imjWIlWABXMAIAAAAABSP8t6ya0SyCphXMwnru6ZUDXWElN0NfBvEOhDvW9bJQVsACAAAAAAGWeGmBNDRaMtvm7Rv+8TJ2sJ4WNXKcp3tqpv5Se9Ut4AAzcwAH0AAAAFZAAgAAAAAD/FIrGYFDjyYmVb7oTMVwweWP7A6F9LnyIuNO4MjBnXBXMAIAAAAACIZgJCQRZu7NhuNMyOqCn1tf+DfU1qm10TPCfj5JYV3wVsACAAAAAA5hmY4ptuNxULGf87SUFXQWGAONsL9U29duh8xqsHtxoAAzcxAH0AAAAFZAAgAAAAAHIkVuNDkSS1cHIThKc/O0r2/ubaABTOi8Q1r/dvBAsEBXMAIAAAAADdHYqchEiJLM340c3Q4vJABmmth3+MKzwLYlsG6GS7sQVsACAAAAAADa+KP/pdTiG22l+ZWd30P1iHjnBF4zSNRdFm0oEK82kAAzcyAH0AAAAFZAAgAAAAAJmoDILNhC6kn3masElfnjIjP1VjsjRavGk1gSUIjh1NBXMAIAAAAAD97Ilvp3XF8T6MmVVcxMPcdL80RgQ09UoC6PnoOvZ1IQVsACAAAAAA2RK3Xng6v8kpvfVW9tkVXjpE+BSnx9/+Fw85Evs+kUEAAzczAH0AAAAFZAAgAAAAAI5bm3YO0Xgf0VT+qjVTTfvckecM3Cwqj7DTKZXf8/NXBXMAIAAAAAD/m+h8fBhWaHm6Ykuz0WX1xL4Eme3ErLObyEVJf8NCywVsACAAAAAAfb1VZZCqs2ivYbRzX4p5CtaCkKW+g20Pr57FWXzEZi8AAzc0AH0AAAAFZAAgAAAAANqo4+p6qdtCzcB4BX1wQ6llU7eFBnuu4MtZwp4B6mDlBXMAIAAAAAAGiz+VaukMZ+6IH4jtn4KWWdKK4/W+O+gRioQDrfzpMgVsACAAAAAAG4YYkTp80EKo59mlHExDodRQFR7njhR5dmISwUJ6ukAAAzc1AH0AAAAFZAAgAAAAAPrFXmHP2Y4YAm7b/aqsdn/DPoDkv7B8egWkfe23XsM1BXMAIAAAAAAGhwpKAr7skeqHm3oseSbO7qKNhmYsuUrECBxJ5k+D2AVsACAAAAAAAqPQi9luYAu3GrFCEsVjd9z2zIDcp6SPTR2w6KQEr+IAAzc2AH0AAAAFZAAgAAAAABzjYxwAjXxXc0Uxv18rH8I3my0Aguow0kTwKyxbrm+cBXMAIAAAAADVbqJVr6IdokuhXkEtXF0C2gINLiAjMVN20lE20Vmp2QVsACAAAAAAD7K1Fx4gFaaizkIUrf+EGXQeG7QX1jadhGc6Ji471H8AAzc3AH0AAAAFZAAgAAAAAFMm2feF2fFCm/UC6AfIyepX/xJDSmnnolQIBnHcPmb5BXMAIAAAAABLI11kFrQoaNVZFmq/38aRNImPOjdJh0Lo6irI8M/AaAVsACAAAAAAOWul0oVqJ9CejD2RqphhTC98DJeRQy5EwbNerU2+4l8AAzc4AH0AAAAFZAAgAAAAAJvXB3KyNiNtQko4SSzo/9b2qmM2zU9CQTTDfLSBWMgRBXMAIAAAAAAvjuVP7KsLRDeqVqRziTKpBrjVyqKiIbO9Gw8Wl2wFTAVsACAAAAAADlE+oc1ins+paNcaOZJhBlKlObDJ4VQORWjFYocM4LgAAzc5AH0AAAAFZAAgAAAAAPGdcxDiid8z8XYnfdDivNMYVPgBKdGOUw6UStU+48CdBXMAIAAAAAARj6g1Ap0eEfuCZ4X2TsEw+Djrhto3fA5nLwPaY0vCTgVsACAAAAAAoHqiwGOUkBu8SX5U1yHho+UIFdSN2MdQN5s6bQ0EsJYAAzgwAH0AAAAFZAAgAAAAAP5rGPrYGt3aKob5f/ldP0qrW7bmWvqnKY4QwdDWz400BXMAIAAAAADTQkW2ymaaf/bhteOOGmSrIR97bAnJx+yN3yMj1bTeewVsACAAAAAADyQnHGH2gF4w4L8axUsSTf6Ubk7L5/eoFOJk12MtZAoAAzgxAH0AAAAFZAAgAAAAAAlz6wJze5UkIxKpJOZFGCOf3v2KByWyI6NB6JM9wNcBBXMAIAAAAABUC7P/neUIHHoZtq0jFVBHY75tSFYr1Y5S16YN5XxC1QVsACAAAAAAgvxRbXDisNnLY3pfsjDdnFLtkvYUC4lhA68eBXc7KAwAAzgyAH0AAAAFZAAgAAAAAFJ8AtHcjia/9Y5pLEc3qVgH5xKiXw12G9Kn2A1EY8McBXMAIAAAAAAxe7Bdw7eUSBk/oAawa7uicTEDgXLymRNhBy1LAxhDvwVsACAAAAAAxKPaIBKVx3jTA+R/el7P7AZ7efrmTGjJs3Hj/YdMddwAAzgzAH0AAAAFZAAgAAAAAO8uwQUaKFb6vqR3Sv3Wn4QAonC2exOC9lGG1juqP5DtBXMAIAAAAABZf1KyJgQg8/Rf5c02DgDK2aQu0rNCOvaL60ohDHyY+gVsACAAAAAAqyEjfKC8lYoIfoXYHUqHZPoaA6EK5BAZy5dxXZmay4kAAzg0AH0AAAAFZAAgAAAAAE8YtqyRsGCeiR6hhiyisR/hccmK4nZqIMzO4lUBmEFzBXMAIAAAAAC1UYOSKqAeG1UJiKjWFVskRhuFKpj9Ezy+lICZvFlN5AVsACAAAAAA6Ct9nNMKyRazn1OKnRKagm746CGu+jyhbL1qJnZxGi0AAzg1AH0AAAAFZAAgAAAAAPhCrMausDx1QUIEqp9rUdRKyM6a9AAx7jQ3ILIu8wNIBXMAIAAAAACmH8lotGCiF2q9VQxhsS+7LAZv79VUAsOUALaGxE/EpAVsACAAAAAAnc1xCKfdvbUEc8F7XZqlNn1C+hZTtC0I9I3LL06iaNkAAzg2AH0AAAAFZAAgAAAAAOBi/GAYFcstMSJPgp3VkMiuuUUCrZytvqYaU8dwm8v2BXMAIAAAAACEZSZVyD3pKzGlbdwlYmWQhHHTV5SnNLknl2Gw8IaUTQVsACAAAAAAfsLZsEDcWSuNsIo/TD1ReyQW75HPMgmuKZuWFOLKRLoAAzg3AH0AAAAFZAAgAAAAAIQuup+YGfH3mflzWopN8J1X8o8a0d9CSGIvrA5HOzraBXMAIAAAAADYvNLURXsC2ITMqK14LABQBI+hZZ5wNf24JMcKLW+84AVsACAAAAAACzfjbTBH7IwDU91OqLAz94RFkoqBOkzKAqQb55gT4/MAAzg4AH0AAAAFZAAgAAAAAKsh0ADyOnVocFrOrf6MpTrNvAj8iaiE923DPryu124gBXMAIAAAAADg24a8NVE1GyScc6tmnTbmu5ulzO+896fE92lN08MeswVsACAAAAAAaPxcOIxnU7But88/yadOuDJDMcCywwrRitaxMODT4msAAzg5AH0AAAAFZAAgAAAAAKkVC2Y6HtRmv72tDnPUSjJBvse7SxLqnr09/Uuj9sVVBXMAIAAAAABYNFUkH7ylPMN+Bc3HWX1e0flGYNbtJNCY9SltJCW/UAVsACAAAAAAZYK/f9H4OeihmpiFMH7Wm7uLvs2s92zNA8wyrNZTsuMAAzkwAH0AAAAFZAAgAAAAADDggcwcb/Yn1Kk39sOHsv7BO/MfP3m/AJzjGH506Wf9BXMAIAAAAAAYZIsdjICS0+BDyRUPnrSAZfPrwtuMaEDEn0/ijLNQmAVsACAAAAAAGPnYVvo2ulO9z4LGd/69NAklfIcZqZvFX2KK0s+FcTUAAzkxAH0AAAAFZAAgAAAAAEWY7dEUOJBgjOoWVht1wLehsWAzB3rSOBtLgTuM2HC8BXMAIAAAAAAAoswiHRROurjwUW8u8D5EUT+67yvrgpB/j6PzBDAfVwVsACAAAAAA6NhRTYFL/Sz4tao7vpPjLNgAJ0FX6P/IyMW65qT6YsMAAzkyAH0AAAAFZAAgAAAAAPZaapeAUUFPA7JTCMOWHJa9lnPFh0/gXfAPjA1ezm4ZBXMAIAAAAACmJvLY2nivw7/b3DOKH/X7bBXjJwoowqb1GtEFO3OYgAVsACAAAAAA/JcUoyKacCB1NfmH8vYqC1f7rd13KShrQqV2r9QBP44AAzkzAH0AAAAFZAAgAAAAAK00u6jadxCZAiA+fTsPVDsnW5p5LCr4+kZZZOTDuZlfBXMAIAAAAAAote4zTEYMDgaaQbAdN8Dzv93ljPLdGjJzvnRn3KXgtQVsACAAAAAAxXd9Mh6R3mnJy8m7UfqMKi6oD5DlZpkaOz6bEjMOdiwAAzk0AH0AAAAFZAAgAAAAAFbgabdyymiEVYYwtJSWa7lfl/oYuj/SukzJeDOR6wPVBXMAIAAAAADAFGFjS1vPbN6mQEhkDYTD6V2V23Ys9gUEUMGNvMPkaAVsACAAAAAAL/D5Sze/ZoEanZLK0IeEkhgVkxEjMWVCfmJaD3a8uNIAAzk1AH0AAAAFZAAgAAAAABNMR6UBv2E627CqLtQ/eDYx7OEwQ7JrR4mSHFa1N8tLBXMAIAAAAAAxH4gucI4UmNVB7625C6hFSVCuIpJO3lusJlPuL8H5EQVsACAAAAAAVLHNg0OUVqZ7WGOP53BkTap9FOw9dr1P4J8HxqFqU04AAzk2AH0AAAAFZAAgAAAAAG8cd6WBneNunlqrQ2EmNf35W7OGObGq9WL4ePX+LUDmBXMAIAAAAAAjJ2+sX87NSis9hBsgb1QprVRnO7Bf+GObCGoUqyPE4wVsACAAAAAAs9c9SM49/pWmyUQKslpt3RTMBNSRppfNO0JBvUqHPg0AAzk3AH0AAAAFZAAgAAAAAFWOUGkUpy8yf6gB3dio/aOfRKh7XuhvsUj48iESFJrGBXMAIAAAAAAY7sCDMcrUXvNuL6dO0m11WyijzXZvPIcOKob6IpC4PQVsACAAAAAAJOP+EHz6awDb1qK2bZQ3kTV7wsj5Daj/IGAWh4g7omAAAzk4AH0AAAAFZAAgAAAAAGUrIdKxOihwNmo6B+aG+Ag1qa0+iqdksHOjQj+Oy9bZBXMAIAAAAABwa5dbI2KmzBDNBTQBEkjZv4sPaeRkRNejcjdVymRFKQVsACAAAAAA4ml/nm0gJNTcJ4vuD+T2Qfq2fQZlibJp/j6MOGDrbHMAAzk5AH0AAAAFZAAgAAAAAOx89xV/hRk64/CkM9N2EMK6aldII0c8smdcsZ46NbP8BXMAIAAAAADBF6tfQ+7q9kTuLyuyrSnDgmrdmrXkdhl980i1KHuGHgVsACAAAAAACUqiFqHZdGbwAA+hN0YUE5zFg+H+dabIB4dj5/75W/YAAzEwMAB9AAAABWQAIAAAAADJDdC9aEFl4Y8J/awHbnXGHjfP+VXQilPHJg7ewaJI7AVzACAAAAAAE+tqRl6EcBMXvbr4GDiNIYObTsYpa1n6BJk9EjIJVicFbAAgAAAAAJVc+HYYqa0m1Hq6OiRX8c0iRnJYOt6AJAJoG0sG3GMSAAMxMDEAfQAAAAVkACAAAAAA3F9rjEKhpoHuTULVGgfUsGGwJs3bISrXkFP1v6KoQLgFcwAgAAAAAIBf0tXw96Z/Ds0XSIHX/zk3MzUR/7WZR/J6FpxRWChtBWwAIAAAAABWrjGlvKYuTS2s8L9rYy8Hf0juFGJfwQmxVIjkTmFIGQADMTAyAH0AAAAFZAAgAAAAAOYIYoWkX7dGuyKfi3XssUlc7u/gWzqrR9KMkikKVdmSBXMAIAAAAABVF2OYjRTGi9Tw8XCAwZWLpX35Yl271TlNWp6N/nROhAVsACAAAAAA0nWwYzXQ1+EkDvnGq+SMlq20z+j32Su+i/A95SggPb4AAzEwMwB9AAAABWQAIAAAAACMtPm12YtdEAvqu6Eji1yuRXnu1RJP6h0l7pH3lSH4MwVzACAAAAAAENyCFfyUAh1veQBGx+cxiB7Sasrj41jzCGflZkB5cRMFbAAgAAAAAKdI2LMqISr/T5vuJPg6ZRBm5fVi2aQCc4ra3A4+AjbDAAMxMDQAfQAAAAVkACAAAAAAvlI4lDcs6GB1cnm/Tzo014CXWqidCdyE5t2lknWQd4QFcwAgAAAAAD60SpNc4O2KT7J0llKdSpcX1/Xxs97N715a1HsTFkmBBWwAIAAAAABuuRkJWAH1CynggBt1/5sPh9PoGiqTlS24D/OE2uHXLQADMTA1AH0AAAAFZAAgAAAAAKl8zcHJRDjSjJeV/WvMxulW1zrTFtaeBy/aKKhadc6UBXMAIAAAAADBdWQl5SBIvtZZLIHszePwkO14W1mQ0izUk2Ov21cPNAVsACAAAAAAHErCYycpqiIcCZHdmPL1hi+ovLQk4TAvENpfLdTRamQAAzEwNgB9AAAABWQAIAAAAABb6LXDWqCp1beQgQjj8I3sRTtFhlrmiBi+h/+ikmrvugVzACAAAAAA9stpgTecT7uTyaGNs3K9Bp0A7R0QaIAOfscyMXHBPX8FbAAgAAAAAHUt+McyXrJ1H8SwnHNVO181Ki8vDAM1f7XI26mg95ZDAAMxMDcAfQAAAAVkACAAAAAA97NTT+81PhDhgptNtp4epzA0tP4iNb9j1AWkiiiKGM8FcwAgAAAAAKPbHg7ise16vxmdPCzksA/2Mn/qST0L9Xe8vnQugVkcBWwAIAAAAABB0EMXfvju4JU/mUH/OvxWbPEl9NJkcEp4iCbkXI41fAADMTA4AH0AAAAFZAAgAAAAAMqpayM2XotEFmm0gwQd9rIzApy0X+7HfOhNk6VU7F5lBXMAIAAAAACJR9+q5T9qFHXFNgGbZnPubG8rkO6cwWhzITQTmd6VgwVsACAAAAAAOZLQ6o7e4mVfDzbpQioa4d3RoTvqwgnbmc5Qh2wsZuoAAzEwOQB9AAAABWQAIAAAAADQnslvt6Hm2kJPmqsTVYQHE/wWeZ4bE1XSkt7TKy0r1gVzACAAAAAA8URTA4ZMrhHPvlp53TH6FDCzS+0+61qHm5XK6UiOrKEFbAAgAAAAAHQbgTCdZcbdA0avaTmZXUKnIS7Nwf1tNrcXDCw+PdBRAAMxMTAAfQAAAAVkACAAAAAAhujlgFPFczsdCGXtQ/002Ck8YWQHHzvWvUHrkbjv4rwFcwAgAAAAALbV0lLGcSGfE7mDM3n/fgEvi+ifjl7WZ5b3aqjDNvx9BWwAIAAAAACbceTZy8E3QA1pHmPN5kTlOx3EO8kJM5PUjTVftw1VpgADMTExAH0AAAAFZAAgAAAAABm/6pF96j26Jm7z5KkY1y33zcAEXLx2n0DwC03bs/ixBXMAIAAAAAD01OMvTZI/mqMgxIhA5nLs068mW+GKl3OW3ilf2D8+LgVsACAAAAAAaLvJDrqBESTNZSdcXsd+8GXPl8ZkUsGpeYuyYVv/kygAAzExMgB9AAAABWQAIAAAAACfw9/te4GkHZAapC9sDMHHHZgmlTrccyJDPFciOMSOcwVzACAAAAAAIIC1ZpHObvmMwUfqDRPl4C1aeuHwujM1G/yJbvybMNAFbAAgAAAAAAs9x1SnVpMfNv5Bm1aXGwHmbbI9keWa9HRD35XuCBK5AAMxMTMAfQAAAAVkACAAAAAAkxHJRbnShpPOylLoDdNShfILeA1hChKFQY9qQyZ5VmsFcwAgAAAAAKidrY+rC3hTY+YWu2a7fuMH2RD/XaiTIBW1hrxNCQOJBWwAIAAAAACW0kkqMIzIFMn7g+R0MI8l15fr3k/w/mHtY5n6SYTEwAADMTE0AH0AAAAFZAAgAAAAAByuYl8dBvfaZ0LO/81JW4hYypeNmvLMaxsIdvqMPrWoBXMAIAAAAABNddwobOUJzm9HOUD8BMZJqkNCUCqstHZkC76FIdNg9AVsACAAAAAAQQOkIQtkyNavqCnhQbNg3HfqrJdsAGaoxSJePJl1qXsAAzExNQB9AAAABWQAIAAAAABxMy7X5hf7AXGDz3Y/POu1ZpkMlNcSvSP92NOO/Gs7wAVzACAAAAAAHJshWo2T5wU2zvqCyJzcJQKQaHFHpCpMc9oWBXkpUPoFbAAgAAAAAGeiJKzlUXAvL0gOlW+Hz1mSa2HsV4RGmyLmCHlzbAkoAAMxMTYAfQAAAAVkACAAAAAAlqbslixl7Zw3bRlibZbe/WmKw23k8uKeIzPKYEtbIy0FcwAgAAAAAHEKwpUxkxOfef5HYvulXPmdbzTivwdwrSYIHDeNRcpcBWwAIAAAAADuPckac21Hrg/h0kt5ShJwVEZ9rx6SOHd2+HDjqxEWTQADMTE3AH0AAAAFZAAgAAAAAMXrXx0saZ+5gORmwM2FLuZG6iuO2YS+1IGPoAtDKoKBBXMAIAAAAADIQsxCr8CfFKaBcx8kIeSywnGh7JHjKRJ9vJd9x79y7wVsACAAAAAAcvBV+SykDYhmRFyVYwFYB9oBKBSHr55Jdz2cXeowsUQAAzExOAB9AAAABWQAIAAAAAAm83FA9yDUpwkbKTihe7m53u+DivS9BU2b4vQMtCVQ2AVzACAAAAAAz3m1UB/AbZPa4QSKFDnUgHaT78+6iGOFAtouiBorEgEFbAAgAAAAAIgbpyYtJj5513Z5XYqviH/HXG/5+mqR52iBbfqMmDtZAAMxMTkAfQAAAAVkACAAAAAAJRzYK0PUwr9RPG2/7yID0WgcTJPB2Xjccp5LAPDYunkFcwAgAAAAAIIh24h3DrltAzNFhF+MEmPrZtzr1PhCofhChZqfCW+jBWwAIAAAAAAzRNXtL5o9VXMk5D5ylI0odPDJDSZZry1wfN+TedH70gADMTIwAH0AAAAFZAAgAAAAAHSaHWs/dnmI9sc7nB50VB2Bzs0kHapMHCQdyVEYY30TBXMAIAAAAACkV22lhEjWv/9/DubfHBAcwJggKI5mIbSK5L2nyqloqQVsACAAAAAAS19m7DccQxgryOsBJ3GsCs37yfQqNi1G+S6fCXpEhn4AAzEyMQB9AAAABWQAIAAAAAAC/I4TQRtCl12YZmdGz17X4GqSQgfwCPgRBwdHmdwu+QVzACAAAAAAx8f3z2ut/RAZhleari4vCEE+tNIn4ikjoUwzitfQ588FbAAgAAAAAJci0w1ZB8W2spJQ+kMpod6HSCtSR2jrabOH+B0fj3A4AAMxMjIAfQAAAAVkACAAAAAADGB5yU2XT0fse/MPWgvBvZikVxrl5pf3S5K1hceKWooFcwAgAAAAAIxTmlLHMjNaVDEfJbXvRez0SEPWFREBJCT6qTHsrljoBWwAIAAAAAAlswzAl81+0DteibwHD+CG5mZJrfHXa9NnEFRtXybzzwADMTIzAH0AAAAFZAAgAAAAABmO7QD9vxWMmFjIHz13lyOeV6vHT6mYCsWxF7hb/yOjBXMAIAAAAACT9lmgkiqzuWG24afuzYiCeK9gmJqacmxAruIukd0xEAVsACAAAAAAZa0/FI/GkZR7CtX18Xg9Tn9zfxkD0UoaSt+pIO5t1t4AAzEyNAB9AAAABWQAIAAAAAAfPUoy7QyZKhIIURso+mkP9qr1izbjETqF5s22GwjCjAVzACAAAAAAvLMsIDQ/go4VUxeh50UHmsvMvfx51cwyONnRD2odvC0FbAAgAAAAAKMb+1CodEalAFnDrEL1Ndt8ztamZ+9134m9Kp3GQgd+AAMxMjUAfQAAAAVkACAAAAAAE3ZqUar0Bq2zWbARE0bAv98jBlK9UJ73/xcwdMWWlSkFcwAgAAAAAK4M+MmC+9sFiFsumMyJZQKxWmmJiuG9H7IzKw083xxkBWwAIAAAAAAqkAONzhvMhkyL1D/6h7QQxEkdhC3p2WjXH+VGq5qCqQADMTI2AH0AAAAFZAAgAAAAAMo8FJiOq63cAmyk2O7eI7GcbQh/1j4RrMTqly3rexftBXMAIAAAAADjVmpd0WiRGTw/gAqEgGolt2EI7Csv14vKdmYoMD0aAgVsACAAAAAA07XQBzBUQMNw7F2/YxJjZNuPVpHTTgbLd1oGk77+bygAAzEyNwB9AAAABWQAIAAAAACu5IGaIx7A3Jvly/kzlCsSA4s3iJwuIl8jEdRH0k93NwVzACAAAAAA9NRUyxYE+t0Xyosyt6vIfMFW/vBoYg6sR+jBNs4JAxIFbAAgAAAAAAzyZ91dx+0oMlOVAjRGiMrPySikY/U9eMEB4WJb3uWtAAMxMjgAfQAAAAVkACAAAAAALkRy0GJInXYLA+cgjs6Myb0a+Gu9hgXhHvhLNoGWfckFcwAgAAAAANbALyt9zCSvwnLaWCd2/y2eoB7qkWTvv1Ldu8r40JPuBWwAIAAAAAD4Fl5bV5sz4isIE9bX+lmAp+aAKaZgVYVZeVfrItkCZAADMTI5AH0AAAAFZAAgAAAAAGoUK/DSWhT8LZhszSUqDbTrp8cSA7rdqmADKL+MILtTBXMAIAAAAABHnEE9bVa6lvhfhEMkkV2kzSSxH/sMW/FIJuw3CzWs6wVsACAAAAAAanavcBdqZxgRGKvEK95wTmeL1K1CeDSXZsXUAs81uOgAAzEzMAB9AAAABWQAIAAAAAC922ZDQE3h2fQKibGMZ9hV0WNlmrPYYSdtaSyYxsWYqgVzACAAAAAAagMovciKK6WVjIc2cCj8nK5O/gVOFFVeVAJpRp89tmQFbAAgAAAAAKcTFfPQzaFiAtSFhqbN02sCE1BKWJSrRfGN5L6oZwzkAAMxMzEAfQAAAAVkACAAAAAAtK+JqX3K/z2txjAU15DgX4y90DS2YLfIJFolCOkJJJwFcwAgAAAAAMnR5V7gfX7MNqqUdL5AkWlkhyFXaBRVNej+Rcn8lrQkBWwAIAAAAAA2cDNRXZuiC241TGRvdFyctJnrNcdbZOP9zHio81tkngADMTMyAH0AAAAFZAAgAAAAAAeGrIMK/bac6kPczxbvRYqKMkcpeI2FjdMpD91FDWIvBXMAIAAAAAAix62z1LeS8yvSXCl5gHSIomjyx76fF3S1lp9k900hygVsACAAAAAAiYwzf2m71aWFD5ajcXyW2JX2EzQOkBroTGMg29nLPYIAAzEzMwB9AAAABWQAIAAAAACphf298InM0Us4HT8o1W1MGw0D/02vd7Jh+U0h7qaFaQVzACAAAAAAFXtk7YpqsOJxsqGWSIL+YcBE96G3Zz9D31gPqDW94y8FbAAgAAAAAAOrS1KVA94rjB1jZ1pPocpCeBG+B14RzWoHqVDpp7JbAAMxMzQAfQAAAAVkACAAAAAATLDS2cuDVM3yDMuWNgk2iGKBTzPpfJMbvxVOSY39ZfcFcwAgAAAAAPT5wRi2cLHIUflXzm6EQB/m7xdThP80ir1VV/JBBqvxBWwAIAAAAAB9lEtZS0aXCFbCtSbhnis27S5IPcfWGygHW8AHn3QqzwADMTM1AH0AAAAFZAAgAAAAAJNjExiZVX7jfFGfYpQu16qxLN0YPqVU/5CQ/Y67YSinBXMAIAAAAABMpm2+6KrkRUlXzQoMPHrQmIO6dkQz66tYdfTeA3dKqQVsACAAAAAAFXobHiMLvNZuEPr8jtewCX2J93EZG3JNeyVg92fue6YAAzEzNgB9AAAABWQAIAAAAABlFkYtLCx901X6QVVMkSn6Z7k30UF4xHaA0OZJJ9bdyQVzACAAAAAATez+F9GHcGzTp7jjv4feboUNb8JCkIp4EqcPFisnq7MFbAAgAAAAACE7JvOpBgMoZ7kRd4QbxIhxukPTUxXpzhjnBHiR7XoRAAMxMzcAfQAAAAVkACAAAAAA8NJKN0IxZnruhswGQkiruv8Ih0EMwDcSZx/Xasup9dkFcwAgAAAAAKaJZRxzA+Igeydvuk6cSwUHXcrmT4PjhuPu//FslpdnBWwAIAAAAAD53Rok1Vq/PMAnXmarqoHJ0PEyYUBmVESa9hIpCv/G9QADMTM4AH0AAAAFZAAgAAAAABHxHdEClz7hbSSgE58+dWLlSMJnoPz+jFxp4bB1GmLQBXMAIAAAAAD3nSvT6aGD+A110J/NwEfp0nPutlmuB5B+wA3CC3noGAVsACAAAAAA3Apjd+TapONB7k5wBVwTWgn8t+Sq2oyyU5/+as109RcAAzEzOQB9AAAABWQAIAAAAAC/o8qW/ifk3KuJ01VFkyNLgQafxB5/bGs2G5VyyVafOwVzACAAAAAA1bMqAFGDHSl6BYNLbxApvkAv2K1/oafywiX0MDz1dGUFbAAgAAAAAHJXLlId3edFoniLD/9K2A5973MeP2Ro31flDyqm3l5QAAMxNDAAfQAAAAVkACAAAAAAY2V8I1bz3a1AxTtmED6UhdhA09huFkuuEX8R+d/WDPUFcwAgAAAAAPTVoNRiI76tcRKqd+JBBVyy4+YcKST42p0QX2BtmQ2VBWwAIAAAAACcxt9hg14WqPNiDv1MkqVljM2e2KJEv53lA17LhV6ZigADMTQxAH0AAAAFZAAgAAAAAO2kSsW0WGN9AOtK4xK2SHrGhWiaAbMEKT4iZkRpaDN/BXMAIAAAAABKGzQcPM8LT2dwOggxoWjv/1imYWabbG/G4kBw8OWaxAVsACAAAAAAC9hLK1dScQTAqg+YAG3ObdPzg2Xet57HmOFpGmyUR9UAAzE0MgB9AAAABWQAIAAAAAAiCwzNEEaH/mDam68IdDftnhthyUFdb+ZCNSBQ91WlHQVzACAAAAAA7tHyHcxCzmbJeFYZyPm4mEgkTGKOvwY4MX82OvH0Jn8FbAAgAAAAAAb5IAbZ1hXCNegQ+S+C9i/Z8y6sS8KeU04V6hXa2ml6AAMxNDMAfQAAAAVkACAAAAAAGuCHVNJSuoVkpPOnS5s89GuA+BLi2IPBUr2Bg1sWEPIFcwAgAAAAAEl1gncS5/xO7bQ/KQSstRV3rOT2SW6nV92ZANeG2SR6BWwAIAAAAAA9LOcKmhek8F2wAh8yvT/vjp2gaouuO+Hmv10lwAeWPAADMTQ0AH0AAAAFZAAgAAAAAMfxz7gEaoCdPvXrubDhCZUS0ARLZc1svgbXgMDlVBPgBXMAIAAAAAB6a5dDA3fuT5Vz2KvAcbUEFX/+B7Nw2p1QqbPoQ5TTuAVsACAAAAAAcf/y75UOuI62A6vWH7bYr/5Jz+nirZVYK/81trN6XOQAAzE0NQB9AAAABWQAIAAAAACnYsqF/VzmjIImC9+dqrHO1TM6lJ6fRwM0mM6Wf6paOwVzACAAAAAA5tgZzch8uDCR1ky3SllVaKVpxAlbrhvlNDTazZZRZOAFbAAgAAAAALeGiLJS4z2zhgVpxzyPdRYyACP9QzQBOob34YrIZumCAAMxNDYAfQAAAAVkACAAAAAAEC0sIVmadtW4YMuRXH7RpAhXclsd+3bmqGXCMeaT014FcwAgAAAAABPpXh0uzpsJJB+IRUNajmMB9WGwswfpw5T9xk3Xj6ANBWwAIAAAAAAmf+NYh9TZ/QRu3w/GQz66n7DtfbJijN3G7KzeL8lstAADMTQ3AH0AAAAFZAAgAAAAABaIB3n49Xm9cOafSrQsE0WCcYp8rMIO/qVwIlMF5YLRBXMAIAAAAAC9EyWJV3xOu9bzgdJ/yX+ko7qLf1u3AxNMataW2C9EzQVsACAAAAAAvVbDkLxXx2DcMLifIQ3K0IIJcLcAG9DUrNfI6aoUjNcAAzE0OAB9AAAABWQAIAAAAAA5rZItA/cocRnngYqcJ3nBXQ+l688aKz3EQyLbYYunPAVzACAAAAAAwKyA+L7TgxztPClLrIMk2JXR+w7c04N3ZOqPgjvrIvsFbAAgAAAAACzvZ33h6aWEe8hmo+1f6OXJ72FY5hvWaUuha64ZV3KFAAMxNDkAfQAAAAVkACAAAAAA3htn7oHJ0YYpIrs+Mzyh85Ys67HwAdv5LQl1mCdoMWkFcwAgAAAAAEHjCtNNLenHuSIYux6ezAHsXDaj2DlTF67ToDhDDe6HBWwAIAAAAAD+P4H0sk9jOd+7vOANt2/1Ectb+4ZRGPE8GkHWNXW3MgADMTUwAH0AAAAFZAAgAAAAAEnt18Km/nqggfIJWxzTr9r3hnXNaueG6XO9A5G11LnGBXMAIAAAAAD7QxzGMN/ard5TfFLecE6uusMmXG2+RBsBR+/NCQHUwAVsACAAAAAAQEZ1ZZ8GC8rdbg7s87OM5Gr9qkTXS9+P5DuAZxj5Gl4AAzE1MQB9AAAABWQAIAAAAAAVAKK/GoY8AACu/hyMpO4hdLq6JnEyWNzkyci9sbaD/wVzACAAAAAA2HmeqpMlvvBpV2zQTYIRmsc4MFlfHRwLof0ycJgMg/MFbAAgAAAAACdltCeWi5E/q1Li1eXLChpM2D9QQSGLBZ82NklQSc0oAAMxNTIAfQAAAAVkACAAAAAAhHyq1GQC/GiMwpYjcsfkNxolJ10ARKjIjfkW1Wipzi0FcwAgAAAAAD/uaGWxTDq87F8XZ6CrFI+RNa8yMqfSZdqK00Kj833BBWwAIAAAAAD6aEdOO0CsQGagioOCvANPCEHSpJ8BSixlPBq5ERhB7AADMTUzAH0AAAAFZAAgAAAAABAJJxHoZD+MQBWqm9UM9Dd3z5ZohIZGWRaRVRsMptKQBXMAIAAAAADrE/ca+gqj/SH4oao4wE4qn2ovoTydzcMbDbrfnUs3zAVsACAAAAAAeNCIQN6hVnGJinytQRFGlQ2ocoprXNqpia+BSxzl+uwAAzE1NAB9AAAABWQAIAAAAAAv01wz7VG9mTepjXQi6Zma+7b/OVBaKVkWNbgDLr1mFgVzACAAAAAA0I5sxz8r6wkCp5Tgvr+iL4p6MxSOq5d3e1kZG+0b7NkFbAAgAAAAAIA32v6oGkAOS96HexGouNTex+tLahtx9QF2dgGClk6WAAMxNTUAfQAAAAVkACAAAAAAWXecRwxSon68xaa9THXnRDw5ZfzARKnvvjTjtbae6T0FcwAgAAAAAPh0UfUMEo7eILCMv2tiJQe1bF9qtXq7GJtC6H5Va4fIBWwAIAAAAADqFr1ThRrTXNgIOrJWScO9mk86Ufi95IDu5gi4vP+HWQADMTU2AH0AAAAFZAAgAAAAAEY5WL8/LpX36iAB1wlQrMO/xHVjoO9BePVzbUlBYo+bBXMAIAAAAABoKcpadDXUARedDvTmzUzWPe1jTuvD0z9oIcZmKuiSXwVsACAAAAAAJuJbwuaMrAFoI+jU/IYr+k4RzAqITrOjAd3HWCpJHqEAAzE1NwB9AAAABWQAIAAAAADnJnWqsfx0xqNnqfFGCxIplVu8mXjaHTViJT9+y2RuTgVzACAAAAAAWAaSCwIXDwdYxWf2NZTly/iKVfG/KDjHUcA1BokN5sMFbAAgAAAAAJVxavipE0H4/JQvhagdytXBZ8qGooeXpkbPQ1RfYMVHAAMxNTgAfQAAAAVkACAAAAAAsPG7LaIpJvcwqcbtfFUpIjj+vpNj70Zjaw3eV9T+QYsFcwAgAAAAAJQ71zi0NlCyY8ZQs3IasJ4gB1PmWx57HpnlCf3+hmhqBWwAIAAAAACD58TO6d+71GaOoS+r73rAxliAO9GMs4Uc8JbOTmC0OwADMTU5AH0AAAAFZAAgAAAAAAGiSqKaQDakMi1W87rFAhkogfRAevnwQ41onWNUJKtuBXMAIAAAAAASgiDpXfGh7E47KkOD8MAcX8+BnDShlnU5JAGdnPdqOAVsACAAAAAAI+2TTQIgbFq4Yr3lkzGwhG/tqChP7hRAx2W0fNaH6jcAAzE2MAB9AAAABWQAIAAAAAB7L4EnhjKA5xJD3ORhH2wOA1BvpnQ+7IjRYi+jjVEaJAVzACAAAAAAuhBIm0nL3FJnVJId+7CKDASEo+l2E89Z9/5aWSITK4AFbAAgAAAAALtSICOzQDfV9d+gZuYxpEj6cCeHnKTT+2G3ceP2H65kAAMxNjEAfQAAAAVkACAAAAAAaROn1NaDZFOGEWw724dsXBAm6bgmL5i0cki6QZQNrOoFcwAgAAAAANVT8R6UvhrAlyqYlxtmnvkR4uYK/hlvyQmBu/LP6/3ZBWwAIAAAAAD+aHNMP/X+jcRHyUtrCNkk1KfMtoD3GTmShS8pWGLt+AADMTYyAH0AAAAFZAAgAAAAADqSR5e0/Th59LrauDA7OnGD1Xr3H3NokfVxzDWOFaN7BXMAIAAAAACt30faNwTWRbvmykDpiDYUOCwA6QDbBBYBFWS7rdOB4AVsACAAAAAAF7SvnjjRk5v2flFOKaBAEDvjXaL1cpjsQLtK2fv9zdQAAzE2MwB9AAAABWQAIAAAAADmtb1ZgpZjSeodPG/hIVlsnS8hoRRwRbrTVx89VwL62AVzACAAAAAAi38e1g6sEyVfSDkzZbaZXGxKI/zKNbMasOl2LYoWrq8FbAAgAAAAAALACk0KcCDN/Kv8WuazY8ORtUGkOZ5Dsm0ys1oOppp/AAMxNjQAfQAAAAVkACAAAAAAf/f7AWVgBxoKjr7YsEQ4w/fqSvuQWV2HMiA3rQ7ur0sFcwAgAAAAADkkeJozP6FFhUdRIN74H4UhIHue+eVbOs1NvbdWYFQrBWwAIAAAAAB55FlHAkmTzAYj/TWrGkRJw2EhrVWUnZXDoMYjyfB/ZwADMTY1AH0AAAAFZAAgAAAAAI2WEOymtuFpdKi4ctanPLnlQud+yMKKb8p/nfKmIy56BXMAIAAAAADVKrJmhjr1rfF3p+T+tl7UFd1B7+BfJRk0e7a4im7ozgVsACAAAAAA5E7Ti3PnFiBQoCcb/DN7V1uM3Xd6VKiexPKntssFL7kAAzE2NgB9AAAABWQAIAAAAAAuHU9Qd79hjyvKOujGanSGDIQlxzsql8JytTZhEnPw+AVzACAAAAAAjF2gV/4+sOHVgDd/oR5wDi9zL7NGpGD+NsEpGXy/a4QFbAAgAAAAAJzMoyojYV6Ed/LpVN5zge93Odv3U7JgP7wxeRaJZGTdAAMxNjcAfQAAAAVkACAAAAAA7dQDkt3iyWYCT94d7yqUtPPwp4qkC0ddu+HFdHgVKEkFcwAgAAAAANuYvtvZBTEq4Rm9+5eb7VuFopowkrAuv86PGP8Q8/QvBWwAIAAAAACeqXoAOQOE4j0zRMlkVd8plaW0RX1npsFvB38Xmzv7sAADMTY4AH0AAAAFZAAgAAAAAAwnZSDhL4tNGYxlHPhKYB8s28dY5ScSwiKZm3UhT8U3BXMAIAAAAABDoY6dhivufTURQExyC9Gx3ocpl09bgbbQLChj3qVGbgVsACAAAAAAF+1nS7O0v85s3CCy+9HkdeoEfm2C6ZiNbPMMnSfsMHUAAzE2OQB9AAAABWQAIAAAAAC2VuRdaC4ZJmLdNOvD6R2tnvkyARteqXouJmI46V306QVzACAAAAAAMn1Z6B35wFTX9mEYAPM+IiJ5hauEwfD0CyIvBrxHg7IFbAAgAAAAAOG6DvDZkT9B/xZWmjao2AevN7MMbs3Oh9YJeSd/hZ+hAAMxNzAAfQAAAAVkACAAAAAAVerb7qVNy457rNOHOgDSKyWl5ojun7iWrv1uHPXrIZQFcwAgAAAAAIDcYS9j5z+gx0xdJj09L7876r/vjvKTi/d3bXDE3PhyBWwAIAAAAADuhVLqb1Bkrx8aNymS+bx2cL8GvLFNH4SAi690DUgnWQADMTcxAH0AAAAFZAAgAAAAAH/E44yLxKCJjuSmU9A8SEhbmkDOx1PqqtYcZtgOzJdrBXMAIAAAAABgLh9v2HjBbogrRoQ82LS6KjZQnzjxyJH4PH+F3jupSAVsACAAAAAAIlO46ehXp4TqpDV0t6op++KO+uWBFh8iFORZjmx2IjkAAzE3MgB9AAAABWQAIAAAAAAlNUdDL+f/SSQ5074mrq0JNh7CTXwTbbhsQyDwWeDVMwVzACAAAAAANIH2IlSNG0kUw4qz0budjcWn8mNR9cJlYUqPYdonucAFbAAgAAAAAJMrOUOyiu5Y3sV76zwEFct8L7+i8WGlQI2+8z2W2kzaAAMxNzMAfQAAAAVkACAAAAAASZ+CvUDtlk/R4HAQ3a+PHrKeY/8ifAfh0oXYFqliu80FcwAgAAAAAJelpzPgM65OZFt/mvGGpwibclQ49wH+1gbUGzd9OindBWwAIAAAAAD9qeDchteEpVXWcycmD9kl9449C1dOw0r60TBm5jK+cQADMTc0AH0AAAAFZAAgAAAAAN9fkoUVbvFV2vMNMAkak4gYfEnzwKI3eDM3pnDK5q3lBXMAIAAAAACnDkgVNVNUlbQ9RhR6Aot2nVy+U4km6+GHPkLr631jEAVsACAAAAAANzg/BnkvkmvOr8nS4omF+q9EG/4oisB+ul4YHi938hwAAzE3NQB9AAAABWQAIAAAAAASyK3b1nmNCMptVEGOjwoxYLLS9fYWm/Zxilqea0jpEQVzACAAAAAADDHsGrbqlKGEpxlvfyqOJKQJjwJrzsrB7k3HG0AUJbkFbAAgAAAAAKwx3S4XfDZh4+LuI9jf7XgUh5qiefNv87JD4qvVRfPSAAMxNzYAfQAAAAVkACAAAAAAlSP9iK31GlcG9MKGbLmq+VXMslURr+As736rrVNXcsUFcwAgAAAAAAvbj0zfq9zzi8XReheKFbCB+h9IsOLgXPPpI5vrEJNZBWwAIAAAAABXvoZhaQE7ogWjeBjceVkp03N20cKYP3TA8vuNsgpfAgADMTc3AH0AAAAFZAAgAAAAAOJNORH8Bev97gVU7y6bznOxJ+E6Qoykur1QP76hG1/7BXMAIAAAAAC+C1PtOOrSZgzBAGhr+dPe/kR0JUw9GTwLVNr61xC1aAVsACAAAAAAeA/L8MQIXkamaObtMPLpoDoi5FypA5WAPtMeMrgi0eQAAzE3OAB9AAAABWQAIAAAAAAKcHzLUomavInN6upPkyWhAqYQACP/vdVCIYpiy6U6HgVzACAAAAAATsR4KItY6R2+U7Gg6sJdaEcf58gjd1OulyWovIqfxKcFbAAgAAAAAFbm10ko67ahboAejQdAV0U2uA5OhZYdb8XUFJ8OL46LAAMxNzkAfQAAAAVkACAAAAAAqTOLiMpCdR59tLZzzIPqJvbCNvz2XQL9ust0qYaehtcFcwAgAAAAAArefox/3k5xGOeiw2m6NUdzuGxmPwcu5IFcj+jMwHgHBWwAIAAAAADLZGFJ7MQd5JXMgMXjqZO5LDLxcFClcXPlnRMWRn+1oAADMTgwAH0AAAAFZAAgAAAAAIPSqSeVzSRgNVNmrPYHmUMgykCY27NbdDUNhE5kx/SgBXMAIAAAAAAhX90nNfxyXmZe/+btZ7q6xMX4PFyj0paM1ccJ/5IUUQVsACAAAAAA419oHmD2W0SYoOMwhrhrp8jf68fg9hTkaRdCuVd3CN0AAzE4MQB9AAAABWQAIAAAAACLn5DxiqAosHGXIAY96FwFKjeqrzXWf3VJIQMwx1fl4gVzACAAAAAAindvU27nveutopdvuHmzdENBbeGFtI3Qcsr07jxmvm8FbAAgAAAAAPvl9pBStQvP4OGkN5v0MghUY6djm9n7XdKKfrW0l1sMAAMxODIAfQAAAAVkACAAAAAA7i2S6rHRSPBwZEn59yxaS7HiYBOmObIkeyCcFU42kf8FcwAgAAAAAGb3RSEyBmgarkTvyLWtOLJcPwCKbCRkESG4RZjVmY4iBWwAIAAAAADB2/wo5CSHR4ANtifY6ZRXNTO5+O8qP82DfAiAeanpZwADMTgzAH0AAAAFZAAgAAAAAFz+M+H/Z94mdPW5oP51B4HWptp1rxcMWAjnlHvWJDWrBXMAIAAAAACBFEOQyL7ZHu4Cq33QvXkmKuH5ibG/Md3RaED9CtG5HwVsACAAAAAAfggtJTprQ/yZzj7y5z9KvXsdeXMWP0yUXMMJqpOwI88AAzE4NAB9AAAABWQAIAAAAAAE7c2x3Z3aM1XGfLNk/XQ9jCazNRbGhVm7H8c2NjS5ywVzACAAAAAARJ9h8fdcwA19velF3L/Wcvi2rCzewlKZ2nA0p8bT9uwFbAAgAAAAAJtWe6b4wK2Hae2dZm/OEpYQnvoZjz4Sz5IgJC2wInecAAMxODUAfQAAAAVkACAAAAAAVoRt9B9dNVvIMGN+ea5TzRzQC+lqSZ8dd/170zU5o9cFcwAgAAAAAEwM95XZin5mv2yhCI8+ugtKuvRVmNgzzIQN0yi1+9aIBWwAIAAAAAAMGBq72n00rox3uqhxSB98mkenTGCdbbUF1gXrgottzgADMTg2AH0AAAAFZAAgAAAAAKRDkjyWv/etlYT4GyoXrmBED2FgZHnhc+l9Wsl06cH2BXMAIAAAAABohlpm3K850Vndf3NmNE0hHqDlNbSR8/IvMidQ3LnIZAVsACAAAAAAW42nGHa6q2MCAaaPVwaIDfr8QLyQwjKq23onZJYsqVsAAzE4NwB9AAAABWQAIAAAAAC3DFh5oklLCNLY90bgWm68dFXz65JpAZSp1K99MBTPAQVzACAAAAAAQgZecmxEUZVHoptEQClDwAf8smI3WynQ/i+JBP0g+kQFbAAgAAAAAEUSQGVnAPISD6voD0DiBUqyWKgt2rta0tjmoe+LNt6IAAMxODgAfQAAAAVkACAAAAAAQ5WKvWSB503qeNlOI2Tpjd5blheNr6OBO8pfJfPNstcFcwAgAAAAAKwHgQLSDJ5NwLBQbY5OnblQIsVDpGV7q3RCbFLD1U4/BWwAIAAAAACQ5nED99LnpbqXZuUOUjnO2HTphEAFBjLD4OZeDEYybgADMTg5AH0AAAAFZAAgAAAAAGfhFY3RGRm5ZgWRQef1tXxHBq5Y6fXaLAR4yJhrTBplBXMAIAAAAACKEF0ApLoB6lP2UqTFsTQYNc9OdDrs/vziPGzttGVLKQVsACAAAAAArOO6FyfNRyBi0sPT5iye7M8d16MTLcwRfodZq4uCYKEAAzE5MAB9AAAABWQAIAAAAAAIM73gPcgzgotYHLeMa2zAU4mFsr7CbILUZWfnuKSwagVzACAAAAAAJCSu98uV8xv88f2BIOWzt6p+6EjQStMBdkGPUkgN79cFbAAgAAAAAMGqPGMPxXbmYbVfSa/japvUljht1zZT33TY7ZjAiuPfAAMxOTEAfQAAAAVkACAAAAAAkWmHCUsiMy1pwZTHxVPBzPTrWFBUDqHNrVqcyyt7nO8FcwAgAAAAAMv2CebFRG/br7USELR98sIdgE9OQCRBGV5JZCO+uPMgBWwAIAAAAABt7qSmn3gxJu7aswsbUiwvO+G6lXj/Xhx+J/zQyZxzLAADMTkyAH0AAAAFZAAgAAAAAGInUYv0lP/rK7McM8taEHXRefk8Q2AunrvWqdfSV7UaBXMAIAAAAACE+WPxJ3gan7iRTbIxXXx+bKVcaf8kP4JD8DcwU0aL7wVsACAAAAAAUC4eTprX4DUZn2X+UXYU6QjtiXk+u57yoOPBbPQUmDkAAzE5MwB9AAAABWQAIAAAAACmHlg2ud3cplXlTsNTpvNnY6Qm1Fce0m899COamoDjaQVzACAAAAAArtJQeJIlepBWRU2aYar7+YGYVQ7dfDc1oxgTmA8r9q0FbAAgAAAAAOk45vg5VqZHAFCO3i0Z52SZi5RADf8NXwf68T5yad/DAAMxOTQAfQAAAAVkACAAAAAApzcWSAbZWV/Rq+ylRNqqlJqNVR4fhXrz4633/MQOQgcFcwAgAAAAAN/jz/bsEleiuCl+li83EWlG6UMHA8CyaOMRKCkXkSCPBWwAIAAAAAC3Sd+Qg+uFDKpGZHbrQgokXHQ1az1aFl4YK343OB6hcQAAEmNtAAAAAAAAAAAAABBwYXlsb2FkSWQAAAAAABBmaXJzdE9wZXJhdG9yAAEAAAAA",
106
+ "subType": "06"
107
+ }
108
+ }
109
+ }
110
+ },
111
+ "u": {
112
+ "$set": {
113
+ "encryptedDecimalNoPrecision": { $$type: "binData" }
114
+ }
115
+ }
116
+ }
117
+ ]
118
+ encryptionInformation:
119
+ type: 1
120
+ schema:
121
+ "default.default":
122
+ # libmongocrypt applies escCollection and ecocCollection to outgoing command.
123
+ escCollection: "enxcol_.default.esc"
124
+ ecocCollection: "enxcol_.default.ecoc"
125
+ <<: *encrypted_fields
126
+ "$db": "default"
127
+
128
+ outcome:
129
+ collection:
130
+ # Outcome is checked using a separate MongoClient without auto encryption.
131
+ data:
132
+ -
133
+ {
134
+ "_id": {
135
+ "$numberInt": "0"
136
+ },
137
+ "encryptedDecimalNoPrecision": { $$type: "binData" },
138
+ "__safeContent__": [
139
+ {
140
+ "$binary": {
141
+ "base64": "5nRutVIyq7URVOVtbE4vM01APSIajAVnsShMwjBlzkM=",
142
+ "subType": "00"
143
+ }
144
+ },
145
+ {
146
+ "$binary": {
147
+ "base64": "rbf3AeBEv4wWFAKknqDxRW5cLNkFvbIs6iJjc6LShQY=",
148
+ "subType": "00"
149
+ }
150
+ },
151
+ {
152
+ "$binary": {
153
+ "base64": "n+XAuFnP8Dov9TnhGFxNx0K/MnVM9WbJ7RouEu0ndO0=",
154
+ "subType": "00"
155
+ }
156
+ },
157
+ {
158
+ "$binary": {
159
+ "base64": "yRXojuVdn5GQtD97qYlaCL6cOLmZ7Cvcb3wFjkLUIdM=",
160
+ "subType": "00"
161
+ }
162
+ },
163
+ {
164
+ "$binary": {
165
+ "base64": "DuIkdRPITRs55I4SZmgomAHCIsDQmXRhW8+MOznkzSk=",
166
+ "subType": "00"
167
+ }
168
+ },
169
+ {
170
+ "$binary": {
171
+ "base64": "SsBk+Et1lTbU+QRPx+xyJ/jMkmfG+QCvQEpip2YYrzA=",
172
+ "subType": "00"
173
+ }
174
+ },
175
+ {
176
+ "$binary": {
177
+ "base64": "crCIzOd8KhHvvUlX7M1v9bhvU4pLdTc+X2SuqoKU5Ek=",
178
+ "subType": "00"
179
+ }
180
+ },
181
+ {
182
+ "$binary": {
183
+ "base64": "YOWdCw4UrqnxkAaVjqmC4sKQDMVMHEpFGnlxpxdaU6E=",
184
+ "subType": "00"
185
+ }
186
+ },
187
+ {
188
+ "$binary": {
189
+ "base64": "M3SShp81Ff8tQ632qKbv9MUcN6wjDaBReI0VXNu6Xh4=",
190
+ "subType": "00"
191
+ }
192
+ },
193
+ {
194
+ "$binary": {
195
+ "base64": "gzHlSPxpM0hT75kQvWFzGlOxKvDoiKQZOr19V6l2zXI=",
196
+ "subType": "00"
197
+ }
198
+ },
199
+ {
200
+ "$binary": {
201
+ "base64": "s3JnppOGYw9SL2Q1kMAZs948v2F5PrpXjGei/HioDWs=",
202
+ "subType": "00"
203
+ }
204
+ },
205
+ {
206
+ "$binary": {
207
+ "base64": "cG6+3Gk/zEH68P/uuuwiAUVCuyJwa1LeV+t29FlPPAo=",
208
+ "subType": "00"
209
+ }
210
+ },
211
+ {
212
+ "$binary": {
213
+ "base64": "dupdvR3AyJtM+g9NDKiaLVOtGca387JQp8w+V03m7Ig=",
214
+ "subType": "00"
215
+ }
216
+ },
217
+ {
218
+ "$binary": {
219
+ "base64": "JqEQc5svj2jTvZ6LLA5ivE+kTb/0aRemSEmxk4G7Zrg=",
220
+ "subType": "00"
221
+ }
222
+ },
223
+ {
224
+ "$binary": {
225
+ "base64": "szcXXXKnob+p3SoM4yED2R920LeJ7cVsclPMFTe4CeI=",
226
+ "subType": "00"
227
+ }
228
+ },
229
+ {
230
+ "$binary": {
231
+ "base64": "o1QoGVXmuBdHwHm7aCtGMlMVKrjFdYvJXpoq6uhIAZ0=",
232
+ "subType": "00"
233
+ }
234
+ },
235
+ {
236
+ "$binary": {
237
+ "base64": "Jfm5wPlqqLCJRGQIqRq2NGmpn7s0Vrih2H3YAOoI2YU=",
238
+ "subType": "00"
239
+ }
240
+ },
241
+ {
242
+ "$binary": {
243
+ "base64": "zMHLb8ARbsYo8Ld05bqnGFf1Usha6EGb8QKwdSAyps0=",
244
+ "subType": "00"
245
+ }
246
+ },
247
+ {
248
+ "$binary": {
249
+ "base64": "yQdtq9lh5pugL7/i0Bj/PuZUUBUIzf+7wj1rl5y736w=",
250
+ "subType": "00"
251
+ }
252
+ },
253
+ {
254
+ "$binary": {
255
+ "base64": "wGWVZdO7qIuyDg/BqDgqjgoQ02h5YYgwXQB1oCin2NE=",
256
+ "subType": "00"
257
+ }
258
+ },
259
+ {
260
+ "$binary": {
261
+ "base64": "by9HMLj6NTEpgztZ5HSN6GxImkXPcaFINYDzgZY33X8=",
262
+ "subType": "00"
263
+ }
264
+ },
265
+ {
266
+ "$binary": {
267
+ "base64": "tWo0vbasi7bXmn/MsOx13VC1IsWtpx/nYp0uj4iMzdA=",
268
+ "subType": "00"
269
+ }
270
+ },
271
+ {
272
+ "$binary": {
273
+ "base64": "tQQpndUYd5O87lOtrGjH3wl9VsOK0ray7RMasL90sBM=",
274
+ "subType": "00"
275
+ }
276
+ },
277
+ {
278
+ "$binary": {
279
+ "base64": "cQjXEDCMsOpKLLf+vlTgIHA+cbSJdzqhbSX9Wvh95aA=",
280
+ "subType": "00"
281
+ }
282
+ },
283
+ {
284
+ "$binary": {
285
+ "base64": "7yMpU48IxK9SzP2cx3VnTownGEwFmeFofuuFT97SuuY=",
286
+ "subType": "00"
287
+ }
288
+ },
289
+ {
290
+ "$binary": {
291
+ "base64": "kSOx1kz0CmBgzKQHZlo65ZUY1DIv9A99JRm+Us2y6Ew=",
292
+ "subType": "00"
293
+ }
294
+ },
295
+ {
296
+ "$binary": {
297
+ "base64": "ubQpdPBe6/xvtr+AcXdfYLSvYCR4ot0tivehkCsupb4=",
298
+ "subType": "00"
299
+ }
300
+ },
301
+ {
302
+ "$binary": {
303
+ "base64": "xal+iCJ6FTefRQToyoNksc9NCZShyn04NDGi4IYrcoM=",
304
+ "subType": "00"
305
+ }
306
+ },
307
+ {
308
+ "$binary": {
309
+ "base64": "d7jU4iOK50xHxlkSifcxlZFCM46TSgQzoYivxG3HNLY=",
310
+ "subType": "00"
311
+ }
312
+ },
313
+ {
314
+ "$binary": {
315
+ "base64": "tJvl2nsBLBVzL3pp6sKWCL4UXeh3q/roYBJjSb74ve0=",
316
+ "subType": "00"
317
+ }
318
+ },
319
+ {
320
+ "$binary": {
321
+ "base64": "OIUCaKRvIx9t1w6Hxlz1IcQTdPNCfdRNwnnTm10W+X0=",
322
+ "subType": "00"
323
+ }
324
+ },
325
+ {
326
+ "$binary": {
327
+ "base64": "A9tvzsiElotOUVIB4CqfQp9mAwqvTM35YkmAR170aHA=",
328
+ "subType": "00"
329
+ }
330
+ },
331
+ {
332
+ "$binary": {
333
+ "base64": "lI8gpK7hpb7c9x4RQugsxMnQay5LZJmwslZdvMx/dcE=",
334
+ "subType": "00"
335
+ }
336
+ },
337
+ {
338
+ "$binary": {
339
+ "base64": "dNCzh40U0XvdKnSDi3HRQOWQftEsDVqc4uUvsVFGoq8=",
340
+ "subType": "00"
341
+ }
342
+ },
343
+ {
344
+ "$binary": {
345
+ "base64": "IP+iwEBWBwVVZIdpaMu8k5+soFCz+TZkYn3drKZ9grE=",
346
+ "subType": "00"
347
+ }
348
+ },
349
+ {
350
+ "$binary": {
351
+ "base64": "pnqyh6e0y5svHkJDShlN9CHV0WvMBE4QbtJpQw5ZCXc=",
352
+ "subType": "00"
353
+ }
354
+ },
355
+ {
356
+ "$binary": {
357
+ "base64": "elEl42tbVDoRTLjAhZUFEtXiut4b3PVhg/1ZLZSQdtE=",
358
+ "subType": "00"
359
+ }
360
+ },
361
+ {
362
+ "$binary": {
363
+ "base64": "vHuu2FxwclMHqyE6JBYbTYgbEkB0dqb/JuaxsvfwsmY=",
364
+ "subType": "00"
365
+ }
366
+ },
367
+ {
368
+ "$binary": {
369
+ "base64": "xTf7NCe3Gf8QpE78HR5OknlLTKfs9J+RN9UZpH6fnso=",
370
+ "subType": "00"
371
+ }
372
+ },
373
+ {
374
+ "$binary": {
375
+ "base64": "XiWSasRnJAulGR6+LCVD3mwRObXylqYWR9jvpywq12c=",
376
+ "subType": "00"
377
+ }
378
+ },
379
+ {
380
+ "$binary": {
381
+ "base64": "MZMxEQ5ikx0PG1YFIExv0UnTZogsvgeOEZTpzvBDn4w=",
382
+ "subType": "00"
383
+ }
384
+ },
385
+ {
386
+ "$binary": {
387
+ "base64": "yZMyMZBDrWbAhvnic7vvIYhmO9m5H2iuv0c8KNZrBzY=",
388
+ "subType": "00"
389
+ }
390
+ },
391
+ {
392
+ "$binary": {
393
+ "base64": "xxM14hTPY5j0vvcK2C7YAEjzdsfUTFHozHC0hEo1bxI=",
394
+ "subType": "00"
395
+ }
396
+ },
397
+ {
398
+ "$binary": {
399
+ "base64": "+01rqR1xVwkpGXcstbk1ItJqFVjH6Q8MGxEN3Cm9Y1A=",
400
+ "subType": "00"
401
+ }
402
+ },
403
+ {
404
+ "$binary": {
405
+ "base64": "xOpLV0Z2VTRJ3iWtnWZcsyjXubTIkYWo31cO+HV1o1k=",
406
+ "subType": "00"
407
+ }
408
+ },
409
+ {
410
+ "$binary": {
411
+ "base64": "BWUOLqgLBqc5NwxVlSV5H3KFQPXbCp7mdo+jF+8cJqY=",
412
+ "subType": "00"
413
+ }
414
+ },
415
+ {
416
+ "$binary": {
417
+ "base64": "fuQb1S6xZDGlrEbK+kI23aL53PP1PVNwqICnZNt9Yzg=",
418
+ "subType": "00"
419
+ }
420
+ },
421
+ {
422
+ "$binary": {
423
+ "base64": "SfscnoibFttahLdPVC4Ee+47ewGFKpDSU7M6HX19bKE=",
424
+ "subType": "00"
425
+ }
426
+ },
427
+ {
428
+ "$binary": {
429
+ "base64": "rpSW2awybNVeKtat91VFxqbINoTfNhPfQAu+d73Xtf8=",
430
+ "subType": "00"
431
+ }
432
+ },
433
+ {
434
+ "$binary": {
435
+ "base64": "9M/CP9ccOIIj2LLFmE0GFDO0Ban2wsNalEXfM6+h+1s=",
436
+ "subType": "00"
437
+ }
438
+ },
439
+ {
440
+ "$binary": {
441
+ "base64": "WrEMG49l1ye4MhXs5ZS9tz8P6h+hDvthIg/2wW9ne1Q=",
442
+ "subType": "00"
443
+ }
444
+ },
445
+ {
446
+ "$binary": {
447
+ "base64": "ImNhbfeyfH8qIEeA5ic0s3dAQBdzzTBS+CPsNih9vZ0=",
448
+ "subType": "00"
449
+ }
450
+ },
451
+ {
452
+ "$binary": {
453
+ "base64": "dWP33YDSn04UKJN2ogh2Rui0iW/0q2y18OCDRVcfyoo=",
454
+ "subType": "00"
455
+ }
456
+ },
457
+ {
458
+ "$binary": {
459
+ "base64": "lYv0isAtfGh6H9tdp3cp2eHU7q2J+uk7QrgcxtK3w7Y=",
460
+ "subType": "00"
461
+ }
462
+ },
463
+ {
464
+ "$binary": {
465
+ "base64": "VGMoamB/+7zTOYcY/pqJc96xlv2PdW4hwsIAEIslTDQ=",
466
+ "subType": "00"
467
+ }
468
+ },
469
+ {
470
+ "$binary": {
471
+ "base64": "yNeBWMF7BnD9wVwz2PgJsvWr77QiVvvWUvJF0+fqBug=",
472
+ "subType": "00"
473
+ }
474
+ },
475
+ {
476
+ "$binary": {
477
+ "base64": "SfpvObJ+tJBXSvqeN7vlOfmhYign635lciYAJIjUtY8=",
478
+ "subType": "00"
479
+ }
480
+ },
481
+ {
482
+ "$binary": {
483
+ "base64": "dsen4NqjzVGjpjufiTMs3+gqeD09EbnuogPgxrJECwg=",
484
+ "subType": "00"
485
+ }
486
+ },
487
+ {
488
+ "$binary": {
489
+ "base64": "pxCWVM3sn19NsFEpgHbgLa+PmYlhN3mMiP0Wk8kJhYw=",
490
+ "subType": "00"
491
+ }
492
+ },
493
+ {
494
+ "$binary": {
495
+ "base64": "q11KNvJszjYIB9n9HcC+N4uz11a3eRj1L3BH9scKMDQ=",
496
+ "subType": "00"
497
+ }
498
+ },
499
+ {
500
+ "$binary": {
501
+ "base64": "A1PmkgcEToWh1JiVWE6mI5jUu7poxWWuCUt/cgRUUDc=",
502
+ "subType": "00"
503
+ }
504
+ },
505
+ {
506
+ "$binary": {
507
+ "base64": "qJo3Hu4PJeanL7XEaWXO/n3YsodhZyd+MJOOmB9Kpd8=",
508
+ "subType": "00"
509
+ }
510
+ },
511
+ {
512
+ "$binary": {
513
+ "base64": "BkBKLO8URFscfRY9Bav/1+L9mLohDgNr/MkZtGiraIs=",
514
+ "subType": "00"
515
+ }
516
+ },
517
+ {
518
+ "$binary": {
519
+ "base64": "rZq5WA3Hx3xthOyHAJXK//f8pE2qbz7YKu3TIMp9GFY=",
520
+ "subType": "00"
521
+ }
522
+ },
523
+ {
524
+ "$binary": {
525
+ "base64": "X07a/Lm80p5xd4RFs1dNmw+90tmPDPdGiAKVZkxd4zY=",
526
+ "subType": "00"
527
+ }
528
+ },
529
+ {
530
+ "$binary": {
531
+ "base64": "6YrBn2ofIw1b5ooakrLOwF41BWrps8OO0H9WH4/rtlE=",
532
+ "subType": "00"
533
+ }
534
+ },
535
+ {
536
+ "$binary": {
537
+ "base64": "0l86Ag5OszXpa78SlOUV3K9nff5iC1p0mRXtLg9M1s4=",
538
+ "subType": "00"
539
+ }
540
+ },
541
+ {
542
+ "$binary": {
543
+ "base64": "Hn6yuxFHodeyu7ISlhYrbSf9pTiH4TDEvbYLWjTwFO0=",
544
+ "subType": "00"
545
+ }
546
+ },
547
+ {
548
+ "$binary": {
549
+ "base64": "zdf4y2etKBuIpkEU1zMwoCkCsdisfXZCh8QPamm+drY=",
550
+ "subType": "00"
551
+ }
552
+ },
553
+ {
554
+ "$binary": {
555
+ "base64": "rOQ9oMdiK5xxGH+jPzOvwVqdGGnF3+HkJXxn81s6hp4=",
556
+ "subType": "00"
557
+ }
558
+ },
559
+ {
560
+ "$binary": {
561
+ "base64": "61aKKsE3+BJHHWYvs3xSIBvlRmKswmaOo5rygQJguUg=",
562
+ "subType": "00"
563
+ }
564
+ },
565
+ {
566
+ "$binary": {
567
+ "base64": "KuDb/GIzqDM8wv7m7m8AECiWJbae5EKKtJRugZx7kR0=",
568
+ "subType": "00"
569
+ }
570
+ },
571
+ {
572
+ "$binary": {
573
+ "base64": "Q+t8t2TmNUiCIorVr9F3AlVnX+Mpt2ZYvN+s8UGict8=",
574
+ "subType": "00"
575
+ }
576
+ },
577
+ {
578
+ "$binary": {
579
+ "base64": "tJRZIpKxUgHyL83kW8cvfjkxN3z6WoNnUg+SQw+LK+k=",
580
+ "subType": "00"
581
+ }
582
+ },
583
+ {
584
+ "$binary": {
585
+ "base64": "pnUsYjip8SvW0+m9mR5WWTkpK+p6uwJ6yBUAlBnFKMk=",
586
+ "subType": "00"
587
+ }
588
+ },
589
+ {
590
+ "$binary": {
591
+ "base64": "PArHlz+yPRYDycAP/PgnI/AkP8Wgmfg++Vf4UG1Bf0E=",
592
+ "subType": "00"
593
+ }
594
+ },
595
+ {
596
+ "$binary": {
597
+ "base64": "wnIh53Q3jeK8jEBe1n8kJLa89/H0BxO26ZU8SRIAs9Q=",
598
+ "subType": "00"
599
+ }
600
+ },
601
+ {
602
+ "$binary": {
603
+ "base64": "4F8U59gzBLGhq58PEWQk2nch+R0Va7eTUoxMneReUIA=",
604
+ "subType": "00"
605
+ }
606
+ },
607
+ {
608
+ "$binary": {
609
+ "base64": "ihKagIW3uT1dm22ROr/g5QaCpxZVj2+Fs/YSdM2Noco=",
610
+ "subType": "00"
611
+ }
612
+ },
613
+ {
614
+ "$binary": {
615
+ "base64": "EJtUOOwjkrPUi9mavYAi+Gom9Y2DuFll7aDwo4mq0M0=",
616
+ "subType": "00"
617
+ }
618
+ },
619
+ {
620
+ "$binary": {
621
+ "base64": "dIkr8dbaVRQFskAVT6B286BbcBBt1pZPEOcTZqk4ZcI=",
622
+ "subType": "00"
623
+ }
624
+ },
625
+ {
626
+ "$binary": {
627
+ "base64": "aYVAcZYkH/Tieoa1XOjE/zCy5AJcVTHjS0NG2QB7muA=",
628
+ "subType": "00"
629
+ }
630
+ },
631
+ {
632
+ "$binary": {
633
+ "base64": "sBidL6y8TenseetpioIAAtn0lK/7C8MoW4JXpVYi3z8=",
634
+ "subType": "00"
635
+ }
636
+ },
637
+ {
638
+ "$binary": {
639
+ "base64": "0Dd2klU/t4R86c2WJcJDAd57k/N7OjvYSO5Vf8KH8sw=",
640
+ "subType": "00"
641
+ }
642
+ },
643
+ {
644
+ "$binary": {
645
+ "base64": "I3jZ92WEVmZmgaIkLbuWhBxl7EM6bEjiEttgBJunArA=",
646
+ "subType": "00"
647
+ }
648
+ },
649
+ {
650
+ "$binary": {
651
+ "base64": "aGHoQMlgJoGvArjfIbc3nnkoc8SWBxcrN7hSmjMRzos=",
652
+ "subType": "00"
653
+ }
654
+ },
655
+ {
656
+ "$binary": {
657
+ "base64": "bpiWPnF/KVBQr5F6MEwc5ZZayzIRvQOLDAm4ntwOi8g=",
658
+ "subType": "00"
659
+ }
660
+ },
661
+ {
662
+ "$binary": {
663
+ "base64": "tI7QVKbE6avWgDD9h4QKyFlnTxFCwd2iLySKakxNR/I=",
664
+ "subType": "00"
665
+ }
666
+ },
667
+ {
668
+ "$binary": {
669
+ "base64": "XGsge0CnoaXgE3rcpKm8AEeku5QVfokS3kcI+JKV1lk=",
670
+ "subType": "00"
671
+ }
672
+ },
673
+ {
674
+ "$binary": {
675
+ "base64": "JQxlryW2Q5WOwfrjAnaZxDvC83Dg6sjRVP5zegf2WiM=",
676
+ "subType": "00"
677
+ }
678
+ },
679
+ {
680
+ "$binary": {
681
+ "base64": "YFuHKJOfoqp1iGVxoFjx7bLYgVdsN4GuUFxEgO9HJ5s=",
682
+ "subType": "00"
683
+ }
684
+ },
685
+ {
686
+ "$binary": {
687
+ "base64": "Z6vUdiCR18ylKomf08uxcQHeRtmyav7/Ecvzz4av3k4=",
688
+ "subType": "00"
689
+ }
690
+ },
691
+ {
692
+ "$binary": {
693
+ "base64": "SPGo1Ib5AiP/tSllL7Z5PAypvnKdwJLzt8imfIMSEJQ=",
694
+ "subType": "00"
695
+ }
696
+ },
697
+ {
698
+ "$binary": {
699
+ "base64": "m94Nh6PFFQFLIib9Cu5LAKavhXnagSHG6F5EF8lD96I=",
700
+ "subType": "00"
701
+ }
702
+ },
703
+ {
704
+ "$binary": {
705
+ "base64": "pfEkQI98mB+gm1+JbmVurPAODMFPJ4E8DnqfVyUWbSo=",
706
+ "subType": "00"
707
+ }
708
+ },
709
+ {
710
+ "$binary": {
711
+ "base64": "DNj3OVRLbr43s0vd+rgWghOL3FqeO/60npdojC8Ry/M=",
712
+ "subType": "00"
713
+ }
714
+ },
715
+ {
716
+ "$binary": {
717
+ "base64": "kAYIQrjHVu49W8FTxyxJeiLVRWWjC9fPcBn+Hx1F+Ss=",
718
+ "subType": "00"
719
+ }
720
+ },
721
+ {
722
+ "$binary": {
723
+ "base64": "aCSO7UVOpoQvu/iridarxkxV1SVxU1i9HVSYXUAeXk4=",
724
+ "subType": "00"
725
+ }
726
+ },
727
+ {
728
+ "$binary": {
729
+ "base64": "Gh6hTP/yj1IKlXQ+Q69KTfMlGZjEcXoRLGbQHNFo/1s=",
730
+ "subType": "00"
731
+ }
732
+ },
733
+ {
734
+ "$binary": {
735
+ "base64": "/gDgIFQ4tAlJk3GN48IS5Qa5IPmErwGk8CHxAbp6gs0=",
736
+ "subType": "00"
737
+ }
738
+ },
739
+ {
740
+ "$binary": {
741
+ "base64": "PICyimwPjxpusyKxNssOOwUotAUbygpyEtORsVGXT8g=",
742
+ "subType": "00"
743
+ }
744
+ },
745
+ {
746
+ "$binary": {
747
+ "base64": "4lu+cBHyAUvuxC6JUNyHLzHsCogGSWFFnUCkDwfQdgI=",
748
+ "subType": "00"
749
+ }
750
+ },
751
+ {
752
+ "$binary": {
753
+ "base64": "pSndkmoNUJwXjgkbkgOrT5f9nSvuoMEZOkwAN9ElRaE=",
754
+ "subType": "00"
755
+ }
756
+ },
757
+ {
758
+ "$binary": {
759
+ "base64": "tyW+D4i26QihNM5MuBM+wnt5AdWGSJaJ4X5ydc9iWTU=",
760
+ "subType": "00"
761
+ }
762
+ },
763
+ {
764
+ "$binary": {
765
+ "base64": "9Syjr8RoxUgPKr+O5rsCu07AvcebA4P8IVKyS1NVLWc=",
766
+ "subType": "00"
767
+ }
768
+ },
769
+ {
770
+ "$binary": {
771
+ "base64": "67tPfDYnK2tmrioI51fOBG0ygajcV0pLo5+Zm/rEW7U=",
772
+ "subType": "00"
773
+ }
774
+ },
775
+ {
776
+ "$binary": {
777
+ "base64": "y0EiPRxYTuS1eVTIaPQUQBBxwkyxNckbePvKgChwd0M=",
778
+ "subType": "00"
779
+ }
780
+ },
781
+ {
782
+ "$binary": {
783
+ "base64": "NWd+2veAaeXQgR3vCvzlI4R1WW67D5YsVLdoXfdb8qg=",
784
+ "subType": "00"
785
+ }
786
+ },
787
+ {
788
+ "$binary": {
789
+ "base64": "PY5RQqKQsL2GqBBSPNOEVpojNFRX/NijCghIpxD6CZk=",
790
+ "subType": "00"
791
+ }
792
+ },
793
+ {
794
+ "$binary": {
795
+ "base64": "lcvwTyEjFlssCJtdjRpdN6oY+C7bxZY+WA+QAqzj9zg=",
796
+ "subType": "00"
797
+ }
798
+ },
799
+ {
800
+ "$binary": {
801
+ "base64": "CWE7XRNylvTwO/9Fv56dNqUaQWMmESNS/GNIwgBaEI0=",
802
+ "subType": "00"
803
+ }
804
+ },
805
+ {
806
+ "$binary": {
807
+ "base64": "ijwlrUeS8nRYqK1F8kiCYF0mNDolEZS+/lJO1Lg93C8=",
808
+ "subType": "00"
809
+ }
810
+ },
811
+ {
812
+ "$binary": {
813
+ "base64": "8KzV+qYGYuIjoNj8eEpnTuHrMYuhzphl80rS6wrODuU=",
814
+ "subType": "00"
815
+ }
816
+ },
817
+ {
818
+ "$binary": {
819
+ "base64": "wDyTLjSEFF895hSQsHvmoEQVS6KIkZOtq1c9dVogm9I=",
820
+ "subType": "00"
821
+ }
822
+ },
823
+ {
824
+ "$binary": {
825
+ "base64": "SGrtPuMYCjUrfKF0Pq/thdaQzmGBMUvlwN3ORIu9tHU=",
826
+ "subType": "00"
827
+ }
828
+ },
829
+ {
830
+ "$binary": {
831
+ "base64": "KySHON3hIoUk4xWcwTqk6IL0kgjzjxgMBObVIkCGvk4=",
832
+ "subType": "00"
833
+ }
834
+ },
835
+ {
836
+ "$binary": {
837
+ "base64": "hBIdS9j0XJPeT4ot73ngELkpUoSixvRBvdOL9z48jY8=",
838
+ "subType": "00"
839
+ }
840
+ },
841
+ {
842
+ "$binary": {
843
+ "base64": "Tx6um0q9HjS5ZvlFhvukpI6ORnyrXMWVW1OoxvgqII0=",
844
+ "subType": "00"
845
+ }
846
+ },
847
+ {
848
+ "$binary": {
849
+ "base64": "zFKlyfX5H81+d4A4J3FKn4T5JfG+OWtR06ddyX4Mxas=",
850
+ "subType": "00"
851
+ }
852
+ },
853
+ {
854
+ "$binary": {
855
+ "base64": "cGgCDuPV7MeMMYEDpgOupqyNP4BQ4H7rBnd2QygumgM=",
856
+ "subType": "00"
857
+ }
858
+ },
859
+ {
860
+ "$binary": {
861
+ "base64": "IPaUoy98v11EoglTpJ4kBlEawoZ8y7BPwzjLYBpkvHQ=",
862
+ "subType": "00"
863
+ }
864
+ },
865
+ {
866
+ "$binary": {
867
+ "base64": "Pfo4Am6tOWAyZNn8G9W5HWWGC3ZWmX0igI/RRB870Ro=",
868
+ "subType": "00"
869
+ }
870
+ },
871
+ {
872
+ "$binary": {
873
+ "base64": "fnTSjd7bC1Udoq6iM7UDnHAC/lsIXSHp/Gy332qw+/I=",
874
+ "subType": "00"
875
+ }
876
+ },
877
+ {
878
+ "$binary": {
879
+ "base64": "fApBgVRrTDyEumkeWs5p3ag9KB48SbU4Si0dl7Ns9rc=",
880
+ "subType": "00"
881
+ }
882
+ },
883
+ {
884
+ "$binary": {
885
+ "base64": "QxudfBItgoCnUj5NXVnSmWH3HK76YtKkMmzn4lyyUYY=",
886
+ "subType": "00"
887
+ }
888
+ },
889
+ {
890
+ "$binary": {
891
+ "base64": "sSOvwhKa29Wq94bZ5jGIiJQGbG1uBrKSBfOYBz/oZeI=",
892
+ "subType": "00"
893
+ }
894
+ },
895
+ {
896
+ "$binary": {
897
+ "base64": "FdaMgwwJ0NKsqmPZLC5oE+/0D74Dfpvig3LaI5yW5Fs=",
898
+ "subType": "00"
899
+ }
900
+ },
901
+ {
902
+ "$binary": {
903
+ "base64": "sRWBy12IERN43BSZIrnBfC9+zFBUdvjTlkqIH81NGt4=",
904
+ "subType": "00"
905
+ }
906
+ },
907
+ {
908
+ "$binary": {
909
+ "base64": "/4tIRpxKhoOwnXAiFn1Z7Xmric4USOIfKvTYQXk3QTc=",
910
+ "subType": "00"
911
+ }
912
+ }
913
+ ]
914
+ }
915
+ -
916
+ {
917
+ "_id": {
918
+ "$numberInt": "1"
919
+ },
920
+ "encryptedDecimalNoPrecision": { $$type: "binData" },
921
+ "__safeContent__": [
922
+ {
923
+ "$binary": {
924
+ "base64": "DLCAJs+W2PL2DV5YChCL6dYrQNr+j4p3L7xhVaub4ic=",
925
+ "subType": "00"
926
+ }
927
+ },
928
+ {
929
+ "$binary": {
930
+ "base64": "Mr/laWHUijZT5VT3x2a7crb7wgd/UXOGz8jr8BVqBpM=",
931
+ "subType": "00"
932
+ }
933
+ },
934
+ {
935
+ "$binary": {
936
+ "base64": "wXVD/HSbBljko0jJcaxJ1nrzs2+pchLQqYR3vywS8SU=",
937
+ "subType": "00"
938
+ }
939
+ },
940
+ {
941
+ "$binary": {
942
+ "base64": "VDCpBYsJIxTfcI6Zgf7FTmKMxUffQv+Ys8zt5dlK76I=",
943
+ "subType": "00"
944
+ }
945
+ },
946
+ {
947
+ "$binary": {
948
+ "base64": "zYDslUwOUVNwTYkETfjceH/PU3bac9X3UuQyYJ19qK0=",
949
+ "subType": "00"
950
+ }
951
+ },
952
+ {
953
+ "$binary": {
954
+ "base64": "rAOmHSz18Jx107xpbv9fYcPOmh/KPAqge0PAtuhIRnc=",
955
+ "subType": "00"
956
+ }
957
+ },
958
+ {
959
+ "$binary": {
960
+ "base64": "BFOB1OGVUen7VsOuS0g8Ti7oDsTt2Yj/k/7ta8YAdGM=",
961
+ "subType": "00"
962
+ }
963
+ },
964
+ {
965
+ "$binary": {
966
+ "base64": "2fckE5SPs0GU+akDkUEM6mm0EtcV3WDE/sQsnTtodlk=",
967
+ "subType": "00"
968
+ }
969
+ },
970
+ {
971
+ "$binary": {
972
+ "base64": "mi9+aNjuwIvaMpSHENvKzKRAmX9cYguo2mXLvOoftHQ=",
973
+ "subType": "00"
974
+ }
975
+ },
976
+ {
977
+ "$binary": {
978
+ "base64": "K6TWn4VcWWkz/gkUkLmbtwkG7SNeABICmLDnoYJFlLU=",
979
+ "subType": "00"
980
+ }
981
+ },
982
+ {
983
+ "$binary": {
984
+ "base64": "Z+2/cEtGU0Fq7QJFNGA/0y4aWAsw0ncG6X0LYRqwS3c=",
985
+ "subType": "00"
986
+ }
987
+ },
988
+ {
989
+ "$binary": {
990
+ "base64": "rrSIf+lgcNZFbbUkS9BmE045jRWBpcBJXHzfMVEFuzE=",
991
+ "subType": "00"
992
+ }
993
+ },
994
+ {
995
+ "$binary": {
996
+ "base64": "KlHL3Kyje1/LMIfgbCqw1SolxffJvvgsYBV5y77wxuA=",
997
+ "subType": "00"
998
+ }
999
+ },
1000
+ {
1001
+ "$binary": {
1002
+ "base64": "hzJ1YBoETmYeCh352dBmG8d8Wse/bUcqojTWpWQlgsc=",
1003
+ "subType": "00"
1004
+ }
1005
+ },
1006
+ {
1007
+ "$binary": {
1008
+ "base64": "lSdcllDXx8MA+s0GULjDA1lQkcV0L8/aHtZ6dM2pZ2c=",
1009
+ "subType": "00"
1010
+ }
1011
+ },
1012
+ {
1013
+ "$binary": {
1014
+ "base64": "HGr7JLTTA7ksAnlmjSIwwdBVvgr3fv46/FTdiCPYpos=",
1015
+ "subType": "00"
1016
+ }
1017
+ },
1018
+ {
1019
+ "$binary": {
1020
+ "base64": "mMr25v1VwOEVZ8xaNUTHJCcsYqV+kwK6RzGYilxPtJ4=",
1021
+ "subType": "00"
1022
+ }
1023
+ },
1024
+ {
1025
+ "$binary": {
1026
+ "base64": "129hJbziPJzNo0IoTU3bECdge0FtaPW8dm4dyNVNwYU=",
1027
+ "subType": "00"
1028
+ }
1029
+ },
1030
+ {
1031
+ "$binary": {
1032
+ "base64": "doiLJ96qoo+v7NqIAZLq6BI5axV8Id8gT5vyJ1ZZ0PM=",
1033
+ "subType": "00"
1034
+ }
1035
+ },
1036
+ {
1037
+ "$binary": {
1038
+ "base64": "cW/Lcul3xYmfyvI/0x/+ybN78aQmBK1XIGs1EEU09N8=",
1039
+ "subType": "00"
1040
+ }
1041
+ },
1042
+ {
1043
+ "$binary": {
1044
+ "base64": "1aVIwzu9N5EJV9yEES+/g6hOTH7cA2NTcLIc59cu0wU=",
1045
+ "subType": "00"
1046
+ }
1047
+ },
1048
+ {
1049
+ "$binary": {
1050
+ "base64": "kw5tyl7Ew0r1wFyrN1mB9FiVW2hK2BxxxUuJDNWjyjQ=",
1051
+ "subType": "00"
1052
+ }
1053
+ },
1054
+ {
1055
+ "$binary": {
1056
+ "base64": "ADAY2YBrm6RJBDY/eLLcfNxmSJku+mefz74gH66oyco=",
1057
+ "subType": "00"
1058
+ }
1059
+ },
1060
+ {
1061
+ "$binary": {
1062
+ "base64": "8gkqB1LojzPrstpFG7RHYmWxXpIlPDTqWnNsXH7XDRU=",
1063
+ "subType": "00"
1064
+ }
1065
+ },
1066
+ {
1067
+ "$binary": {
1068
+ "base64": "TESfVQMDQjfTZmHmUeYUE2XrokJ6CcrsKx/GmypGjOw=",
1069
+ "subType": "00"
1070
+ }
1071
+ },
1072
+ {
1073
+ "$binary": {
1074
+ "base64": "qFM+HFVQ539S0Ouynd1fBHoemFxtU9PRxE5+Dq7Ljy4=",
1075
+ "subType": "00"
1076
+ }
1077
+ },
1078
+ {
1079
+ "$binary": {
1080
+ "base64": "jPiFgUZteSmOg4wf3bsEKCZzcnxmMoILsgp/GaZD+dM=",
1081
+ "subType": "00"
1082
+ }
1083
+ },
1084
+ {
1085
+ "$binary": {
1086
+ "base64": "YaWUgJhYgPNN7TkFK16H8SsQS226JguaVhOIQxZwQNQ=",
1087
+ "subType": "00"
1088
+ }
1089
+ },
1090
+ {
1091
+ "$binary": {
1092
+ "base64": "x90/Qk3AgyaFsvWf2KUCu5XF3j76WFSjt/GrnG01060=",
1093
+ "subType": "00"
1094
+ }
1095
+ },
1096
+ {
1097
+ "$binary": {
1098
+ "base64": "ZGWybWL/xlEdMYRFCZDUoz10sywTf7U/7wufsb78lH0=",
1099
+ "subType": "00"
1100
+ }
1101
+ },
1102
+ {
1103
+ "$binary": {
1104
+ "base64": "8l4ganN66jIcdxfHAdYLaym/mdzUUQ8TViw3MDRySPc=",
1105
+ "subType": "00"
1106
+ }
1107
+ },
1108
+ {
1109
+ "$binary": {
1110
+ "base64": "c8p5XEGTqxqvRGVlR+nkxw9uUdoqDqTB0jlYQ361qMA=",
1111
+ "subType": "00"
1112
+ }
1113
+ },
1114
+ {
1115
+ "$binary": {
1116
+ "base64": "1ZGFLlpQBcU3zIUg8MmgWwFKVz/SaA7eSYFrfe3Hb70=",
1117
+ "subType": "00"
1118
+ }
1119
+ },
1120
+ {
1121
+ "$binary": {
1122
+ "base64": "34529174M77rHr3Ftn9r8jU4a5ztYtyVhMn1wryZSkU=",
1123
+ "subType": "00"
1124
+ }
1125
+ },
1126
+ {
1127
+ "$binary": {
1128
+ "base64": "YkQ4pxFWzc49MS0vZM6S8mNo4wAwo21rePBeF3C+9mI=",
1129
+ "subType": "00"
1130
+ }
1131
+ },
1132
+ {
1133
+ "$binary": {
1134
+ "base64": "MhOf4mYY00KKVhptOcXf0bXB7WfuuM801MRJg4vXPgc=",
1135
+ "subType": "00"
1136
+ }
1137
+ },
1138
+ {
1139
+ "$binary": {
1140
+ "base64": "7pbbD8ihNIYIBJ3tAUPGzHpFPpIeCTAk5L88qCB0/9w=",
1141
+ "subType": "00"
1142
+ }
1143
+ },
1144
+ {
1145
+ "$binary": {
1146
+ "base64": "C9Q5PoNJTQo6pmNzXEEXUEqH22//UUWY1gqILcIywec=",
1147
+ "subType": "00"
1148
+ }
1149
+ },
1150
+ {
1151
+ "$binary": {
1152
+ "base64": "AqGVk1QjDNDLYWGRBX/nv9QdGR2SEgXZEhF0EWBAiSE=",
1153
+ "subType": "00"
1154
+ }
1155
+ },
1156
+ {
1157
+ "$binary": {
1158
+ "base64": "/sGI3VCbJUKATULJmhTayPOeVW+5MjWSvVCqS77sRbU=",
1159
+ "subType": "00"
1160
+ }
1161
+ },
1162
+ {
1163
+ "$binary": {
1164
+ "base64": "yOtbL0ih7gsuoxVtRrACMz+4N5uo7jIR7zzmtih2Beo=",
1165
+ "subType": "00"
1166
+ }
1167
+ },
1168
+ {
1169
+ "$binary": {
1170
+ "base64": "uA6dkb2Iyg9Su8UNDvZzkPx33kPZtWr/CCuEY+XgzUM=",
1171
+ "subType": "00"
1172
+ }
1173
+ },
1174
+ {
1175
+ "$binary": {
1176
+ "base64": "1DoSFPdHIplqZk+DyWAmEPckWwXw/GdB25NLmzeEZhk=",
1177
+ "subType": "00"
1178
+ }
1179
+ },
1180
+ {
1181
+ "$binary": {
1182
+ "base64": "OfDVS0T3ZuIXI/LNbTp6C9UbPIWLKiMy6Wx+9tqNl+g=",
1183
+ "subType": "00"
1184
+ }
1185
+ },
1186
+ {
1187
+ "$binary": {
1188
+ "base64": "3PZjHXbmG6GtPz+iapKtQ3yY4PoFFgjIy+fV2xQv1YU=",
1189
+ "subType": "00"
1190
+ }
1191
+ },
1192
+ {
1193
+ "$binary": {
1194
+ "base64": "kaoLN0BoBWsmqE7kKkJQejATmLShd8qffcAmlhsxsGY=",
1195
+ "subType": "00"
1196
+ }
1197
+ },
1198
+ {
1199
+ "$binary": {
1200
+ "base64": "vpiw9KgQdegGmp7IJnSGX2miujRLU0xzs0ITTqbPW7c=",
1201
+ "subType": "00"
1202
+ }
1203
+ },
1204
+ {
1205
+ "$binary": {
1206
+ "base64": "NuXFf7xGUefYjIUTuMxNUTCfVHrF8oL0AT7dPv5Plk4=",
1207
+ "subType": "00"
1208
+ }
1209
+ },
1210
+ {
1211
+ "$binary": {
1212
+ "base64": "8Tz53LxtfEBJ9eR+d2690kwNsqPV6XyKo2PlqZCbUrc=",
1213
+ "subType": "00"
1214
+ }
1215
+ },
1216
+ {
1217
+ "$binary": {
1218
+ "base64": "e6zsOmHSyV8tyQtSX6BSwui6wK9v1xG3giY/IILJQ2w=",
1219
+ "subType": "00"
1220
+ }
1221
+ },
1222
+ {
1223
+ "$binary": {
1224
+ "base64": "2fedFMCxa2DzmIpfbDKGXhQg0PPwbUv6vIWdwwlvhms=",
1225
+ "subType": "00"
1226
+ }
1227
+ },
1228
+ {
1229
+ "$binary": {
1230
+ "base64": "yEJKMFnWXTC8tJUfzCInzQRByNEPjHxpw4L4m8No91Q=",
1231
+ "subType": "00"
1232
+ }
1233
+ },
1234
+ {
1235
+ "$binary": {
1236
+ "base64": "YbFuWwOiFuQyOzIJXDbOkCWC2DyrG+248TBuVCa1pXU=",
1237
+ "subType": "00"
1238
+ }
1239
+ },
1240
+ {
1241
+ "$binary": {
1242
+ "base64": "w7IkwGdrguwDrar5+w0Z3va5wXyZ4VXJkDMISyRjPGo=",
1243
+ "subType": "00"
1244
+ }
1245
+ },
1246
+ {
1247
+ "$binary": {
1248
+ "base64": "YmJUoILTRJPhyIyWyXJTsQ6KSZHHbEpwPVup6Ldm/Ko=",
1249
+ "subType": "00"
1250
+ }
1251
+ },
1252
+ {
1253
+ "$binary": {
1254
+ "base64": "FvMjcwVZJmfh6FP/yBg2wgskK+KHD8YVUY6WtrE8xbg=",
1255
+ "subType": "00"
1256
+ }
1257
+ },
1258
+ {
1259
+ "$binary": {
1260
+ "base64": "h4HCtD4HyYz0nci49IVAa10Z4NJD/FHnRMV4sRX6qro=",
1261
+ "subType": "00"
1262
+ }
1263
+ },
1264
+ {
1265
+ "$binary": {
1266
+ "base64": "nC7BpXCmym+a0Is2kReM9cYN2M1Eh5rVo8fjms14Oiw=",
1267
+ "subType": "00"
1268
+ }
1269
+ },
1270
+ {
1271
+ "$binary": {
1272
+ "base64": "1qtVWaeVo649ZZZtN8gXbwLgMWGLhz8beODbvru0I7Q=",
1273
+ "subType": "00"
1274
+ }
1275
+ },
1276
+ {
1277
+ "$binary": {
1278
+ "base64": "Ej+mC0QFyMNIiSjR939S+iGBm7dm+1xObu5IcF/OpbU=",
1279
+ "subType": "00"
1280
+ }
1281
+ },
1282
+ {
1283
+ "$binary": {
1284
+ "base64": "UQ8LbUG3cMegbr9yKfKanAPQE1EfPkFciVDrNqZ5GHY=",
1285
+ "subType": "00"
1286
+ }
1287
+ },
1288
+ {
1289
+ "$binary": {
1290
+ "base64": "4iI3mXIDjnX+ralk1HhJY43mZx2uTJM7hsv9MQzTX7E=",
1291
+ "subType": "00"
1292
+ }
1293
+ },
1294
+ {
1295
+ "$binary": {
1296
+ "base64": "0WQCcs3rvsasgohERHHCaBM4Iy6yomS4qJ5To3/yYiw=",
1297
+ "subType": "00"
1298
+ }
1299
+ },
1300
+ {
1301
+ "$binary": {
1302
+ "base64": "qDCTVPoue1/DOAGNAlUstdA9Sid8MgEY4e5EzHcVHRk=",
1303
+ "subType": "00"
1304
+ }
1305
+ },
1306
+ {
1307
+ "$binary": {
1308
+ "base64": "9F9Mus0UnlzHb8E8ImxgXtz6SU98YXD0JqswOKw/Bzs=",
1309
+ "subType": "00"
1310
+ }
1311
+ },
1312
+ {
1313
+ "$binary": {
1314
+ "base64": "pctHpHKVBBcsahQ6TNh6/1V1ZrqOtKSAPtATV6BJqh0=",
1315
+ "subType": "00"
1316
+ }
1317
+ },
1318
+ {
1319
+ "$binary": {
1320
+ "base64": "vfR3C/4cPkVdxtNaqtF/v635ONbhTf5WbwJM6s4EXNE=",
1321
+ "subType": "00"
1322
+ }
1323
+ },
1324
+ {
1325
+ "$binary": {
1326
+ "base64": "ejP43xUBIex6szDcqExAFpx1IE/Ksi5ywJ84GKDFRrs=",
1327
+ "subType": "00"
1328
+ }
1329
+ },
1330
+ {
1331
+ "$binary": {
1332
+ "base64": "jbP4AWYd3S2f3ejmMG7dS5IbrFol48UUoT+ve3JLN6U=",
1333
+ "subType": "00"
1334
+ }
1335
+ },
1336
+ {
1337
+ "$binary": {
1338
+ "base64": "CiDifI7958sUjNqJUBQULeyF7x0Up3loPWvYKw9uAuw=",
1339
+ "subType": "00"
1340
+ }
1341
+ },
1342
+ {
1343
+ "$binary": {
1344
+ "base64": "e2dQFsiHqd2BFHNhlSxocjd+cPs4wkcUW/CnCz4KNuM=",
1345
+ "subType": "00"
1346
+ }
1347
+ },
1348
+ {
1349
+ "$binary": {
1350
+ "base64": "PJFckVmzBipqaEqsuP2mkjhJE4qhw36NhfQ9DcOHyEU=",
1351
+ "subType": "00"
1352
+ }
1353
+ },
1354
+ {
1355
+ "$binary": {
1356
+ "base64": "S3MeuJhET/B8VcfZYDR9fvX0nscDj416jdDekhmK11s=",
1357
+ "subType": "00"
1358
+ }
1359
+ },
1360
+ {
1361
+ "$binary": {
1362
+ "base64": "CGVHZRXpuNtQviDB2Kj03Q8uvs4w3RwTgV847R7GwPw=",
1363
+ "subType": "00"
1364
+ }
1365
+ },
1366
+ {
1367
+ "$binary": {
1368
+ "base64": "yUGgmgyLrxbEpDVy89XN3c2cmFpZXWWmuJ/35zVZ+Jw=",
1369
+ "subType": "00"
1370
+ }
1371
+ },
1372
+ {
1373
+ "$binary": {
1374
+ "base64": "inb6Q97mL1a9onfNTT8v9wsoi/fz7KXKq3p8j90AU9c=",
1375
+ "subType": "00"
1376
+ }
1377
+ },
1378
+ {
1379
+ "$binary": {
1380
+ "base64": "CCyYx/4npq9xGO1lsCo8ZJhFO9/tN7DB+/DTE778rYg=",
1381
+ "subType": "00"
1382
+ }
1383
+ },
1384
+ {
1385
+ "$binary": {
1386
+ "base64": "LNnYw4fwbiAZu0kBdAHPEm/OFnreS+oArdB5O/l/I98=",
1387
+ "subType": "00"
1388
+ }
1389
+ },
1390
+ {
1391
+ "$binary": {
1392
+ "base64": "P006SxmUS/RjiQJVYPdMFnNo3827GIEmSzagggkg05Q=",
1393
+ "subType": "00"
1394
+ }
1395
+ },
1396
+ {
1397
+ "$binary": {
1398
+ "base64": "oyvwY+WsnYV6UHuPki1o0ILJ2jN4uyXf9yaUNtZJyBA=",
1399
+ "subType": "00"
1400
+ }
1401
+ },
1402
+ {
1403
+ "$binary": {
1404
+ "base64": "36Lk3RHWh1wmtCWC/Yj6jNIo17U5y6SofAgQjzjVxD8=",
1405
+ "subType": "00"
1406
+ }
1407
+ },
1408
+ {
1409
+ "$binary": {
1410
+ "base64": "vOOo8FqeHnuO9mqOYjIb4vgwIwVyXZ5Y+bY5d9tGFUM=",
1411
+ "subType": "00"
1412
+ }
1413
+ },
1414
+ {
1415
+ "$binary": {
1416
+ "base64": "bJiDJjwQRNxqxlGjRm5lLziFhcfTDCnQ/qU1V85qcRg=",
1417
+ "subType": "00"
1418
+ }
1419
+ },
1420
+ {
1421
+ "$binary": {
1422
+ "base64": "2Qgrm1n0wUELAQnpkEiIHB856yv76q8jLbpiucetcm0=",
1423
+ "subType": "00"
1424
+ }
1425
+ },
1426
+ {
1427
+ "$binary": {
1428
+ "base64": "5ciPOYxTK0WDwwYyfs7yiVymwtYQXDELLxmM4JLl4/o=",
1429
+ "subType": "00"
1430
+ }
1431
+ },
1432
+ {
1433
+ "$binary": {
1434
+ "base64": "31dC2WUSIOKQc4jwT6PikfeYTwi80mTlh7P31T5KNQU=",
1435
+ "subType": "00"
1436
+ }
1437
+ },
1438
+ {
1439
+ "$binary": {
1440
+ "base64": "YluTV2Mu53EGCKLcWfHZb0BM/IPW2xJdG3vYlDMEsM4=",
1441
+ "subType": "00"
1442
+ }
1443
+ },
1444
+ {
1445
+ "$binary": {
1446
+ "base64": "dh/8lGo2Ek6KukSwutH6Q35iy8TgV0FN0SJqe0ZVHN8=",
1447
+ "subType": "00"
1448
+ }
1449
+ },
1450
+ {
1451
+ "$binary": {
1452
+ "base64": "EVw6HpIs3BKen2qY2gz4y5dw1JpXilfh07msZfQqJpc=",
1453
+ "subType": "00"
1454
+ }
1455
+ },
1456
+ {
1457
+ "$binary": {
1458
+ "base64": "FYolLla9L8EZMROEdWetozroU40Dnmwwx2jIMrr7c1A=",
1459
+ "subType": "00"
1460
+ }
1461
+ },
1462
+ {
1463
+ "$binary": {
1464
+ "base64": "8M6k4QIutSIj6CM41vvkQtuFsaGrjoR9SZJVSLbfGKQ=",
1465
+ "subType": "00"
1466
+ }
1467
+ },
1468
+ {
1469
+ "$binary": {
1470
+ "base64": "9LM0VoddDNHway442MqY+Z7vohB2UHau/cddshhzf40=",
1471
+ "subType": "00"
1472
+ }
1473
+ },
1474
+ {
1475
+ "$binary": {
1476
+ "base64": "66i8Ytco4Yq/FMl6pIRZazz3CZlu8fO2OI6Pne0pvHU=",
1477
+ "subType": "00"
1478
+ }
1479
+ },
1480
+ {
1481
+ "$binary": {
1482
+ "base64": "2a/HgX+MjZxjXtSvHgF1yEpHMJBkl8Caee8XrJtn0WM=",
1483
+ "subType": "00"
1484
+ }
1485
+ },
1486
+ {
1487
+ "$binary": {
1488
+ "base64": "frhBM662c4ZVG7mWP8K/HhRjd01lydW/cPcHnDjifqc=",
1489
+ "subType": "00"
1490
+ }
1491
+ },
1492
+ {
1493
+ "$binary": {
1494
+ "base64": "6k1T7Q1t668PBqv6fwpVnT1HWh7Am5LtbKvwPJKcpGU=",
1495
+ "subType": "00"
1496
+ }
1497
+ },
1498
+ {
1499
+ "$binary": {
1500
+ "base64": "UlJ5Edfusp8S/Pyhw6KTglIejmbr1HO0zUeHn/qFETA=",
1501
+ "subType": "00"
1502
+ }
1503
+ },
1504
+ {
1505
+ "$binary": {
1506
+ "base64": "jsxsB+1ECB3assUdoC333do9tYH+LglHmVSJHy4N8Hg=",
1507
+ "subType": "00"
1508
+ }
1509
+ },
1510
+ {
1511
+ "$binary": {
1512
+ "base64": "2nzIQxGYF7j3bGsIesECEOqhObKs/9ywknPHeJ3yges=",
1513
+ "subType": "00"
1514
+ }
1515
+ },
1516
+ {
1517
+ "$binary": {
1518
+ "base64": "xJYKtuWrX90JrJVoYtnwP7Ce59XQGFYoalxpNfBXEH0=",
1519
+ "subType": "00"
1520
+ }
1521
+ },
1522
+ {
1523
+ "$binary": {
1524
+ "base64": "NLI5lriBTleGCELcHBtNnmnvwSRkHHaLOX4cKboMgTw=",
1525
+ "subType": "00"
1526
+ }
1527
+ },
1528
+ {
1529
+ "$binary": {
1530
+ "base64": "hUOQV0RmE5aJdJww1AR9rirJG4zOYPo+6cCkgn/BGvQ=",
1531
+ "subType": "00"
1532
+ }
1533
+ },
1534
+ {
1535
+ "$binary": {
1536
+ "base64": "h4G2Of76AgxcUziBwCyH+ayMOpdBWzg4yFrTfehSC2c=",
1537
+ "subType": "00"
1538
+ }
1539
+ },
1540
+ {
1541
+ "$binary": {
1542
+ "base64": "VuamM75RzGfQpj2/Y1jSVuQLrhy6OAwlZxjuQLB/9Ss=",
1543
+ "subType": "00"
1544
+ }
1545
+ },
1546
+ {
1547
+ "$binary": {
1548
+ "base64": "kn9+hLq7hvw02xr9vrplOCDXKBTuFhfbX7d5v/l85Pg=",
1549
+ "subType": "00"
1550
+ }
1551
+ },
1552
+ {
1553
+ "$binary": {
1554
+ "base64": "fAiGqKyLZpGngBYFbtYUYt8LUrJ49vYafiboifTDjxs=",
1555
+ "subType": "00"
1556
+ }
1557
+ },
1558
+ {
1559
+ "$binary": {
1560
+ "base64": "BxRILymgfVJCczqjUIWXcfrfSgrrYkxTM5VTg0HkZLY=",
1561
+ "subType": "00"
1562
+ }
1563
+ },
1564
+ {
1565
+ "$binary": {
1566
+ "base64": "CrFY/PzfPU2zsFkGLu/dI6mEeizZzCR+uYgjZBAHro0=",
1567
+ "subType": "00"
1568
+ }
1569
+ },
1570
+ {
1571
+ "$binary": {
1572
+ "base64": "AEbrIuwvXLTtYgMjOqnGQ8y8axUn5Ukrn7UZRSyfQVw=",
1573
+ "subType": "00"
1574
+ }
1575
+ },
1576
+ {
1577
+ "$binary": {
1578
+ "base64": "ouWeVH3PEFg+dKWlXc6BmqirJOaVWjJbMzZbCsce4dA=",
1579
+ "subType": "00"
1580
+ }
1581
+ },
1582
+ {
1583
+ "$binary": {
1584
+ "base64": "+hd6xFB+EG+kVP7WH4uMd1CLaWMnt5xJRaY/Guuga9Q=",
1585
+ "subType": "00"
1586
+ }
1587
+ },
1588
+ {
1589
+ "$binary": {
1590
+ "base64": "zmpGalfAOL3gmcUMJYcLYIRT/2VDO/1Dw4KdYZoNcng=",
1591
+ "subType": "00"
1592
+ }
1593
+ },
1594
+ {
1595
+ "$binary": {
1596
+ "base64": "2PbHAoM/46J2UIZ/vyksKzmVVfxA7YUyIxWeL/N/vBk=",
1597
+ "subType": "00"
1598
+ }
1599
+ },
1600
+ {
1601
+ "$binary": {
1602
+ "base64": "7fD9x+zk5MVFesb59Klqiwwmve7P5ON/5COURXj5smE=",
1603
+ "subType": "00"
1604
+ }
1605
+ },
1606
+ {
1607
+ "$binary": {
1608
+ "base64": "tlrNQ4jaq051iaWonuv1sSrYhKkL1LtNZuHsvATha3s=",
1609
+ "subType": "00"
1610
+ }
1611
+ },
1612
+ {
1613
+ "$binary": {
1614
+ "base64": "fBodm28iClNpvlRyVq0dOdXQ08S7/N3aDwid+PdWvRo=",
1615
+ "subType": "00"
1616
+ }
1617
+ },
1618
+ {
1619
+ "$binary": {
1620
+ "base64": "O+/nnRqT3Zv7yMMGug8GhKHaWy6u7BfRGtZoj0sdN1c=",
1621
+ "subType": "00"
1622
+ }
1623
+ },
1624
+ {
1625
+ "$binary": {
1626
+ "base64": "5AZZ/RTMY4Photnm/cpXZr/HnFRi3eljacMsipkJLHA=",
1627
+ "subType": "00"
1628
+ }
1629
+ },
1630
+ {
1631
+ "$binary": {
1632
+ "base64": "oFVyo/kgoMxBIk2VE52ySSimeyU+Gr0EfCwapXnTpKA=",
1633
+ "subType": "00"
1634
+ }
1635
+ },
1636
+ {
1637
+ "$binary": {
1638
+ "base64": "Z8v59DfcnviA0mzvnUk+URVO0UuqAWvtarEgJva/n1c=",
1639
+ "subType": "00"
1640
+ }
1641
+ },
1642
+ {
1643
+ "$binary": {
1644
+ "base64": "P64GOntZ+zBJEHkigoh9FSxSO+rJTqR20z5aiGQ9an4=",
1645
+ "subType": "00"
1646
+ }
1647
+ },
1648
+ {
1649
+ "$binary": {
1650
+ "base64": "xMbSuDPfWuO/Dm7wuVl06GnzG9uzTlJJX9vFy7boGlY=",
1651
+ "subType": "00"
1652
+ }
1653
+ },
1654
+ {
1655
+ "$binary": {
1656
+ "base64": "kXPB19mRClxdH2UsHwlttS6lLU2uHvzuZgZz7kC45jU=",
1657
+ "subType": "00"
1658
+ }
1659
+ },
1660
+ {
1661
+ "$binary": {
1662
+ "base64": "NDVjVYXAw4k0w4tFzvs7QDq39aaU3HQor4I2XMKKnCk=",
1663
+ "subType": "00"
1664
+ }
1665
+ },
1666
+ {
1667
+ "$binary": {
1668
+ "base64": "uKw/+ErVfpTO1dGUfd3T/eWfZW3nUxXCdBGdjvHtZ88=",
1669
+ "subType": "00"
1670
+ }
1671
+ },
1672
+ {
1673
+ "$binary": {
1674
+ "base64": "av0uxEzWkizYWm0QUM/MN1hLibnxPvCWJKwjOV4yVQY=",
1675
+ "subType": "00"
1676
+ }
1677
+ },
1678
+ {
1679
+ "$binary": {
1680
+ "base64": "ERwUC47dvgOBzIsEESMIioLYbFOxOe8PtJTnmDkKuHM=",
1681
+ "subType": "00"
1682
+ }
1683
+ },
1684
+ {
1685
+ "$binary": {
1686
+ "base64": "2gseKlG5Le12fS/vj4eaED4lturF16kAgJ1TpW3HxEE=",
1687
+ "subType": "00"
1688
+ }
1689
+ },
1690
+ {
1691
+ "$binary": {
1692
+ "base64": "7Cvg0Y3j/5i2F1TeXxlMmU7xwif5dCmwkZAOrVC5K2Y=",
1693
+ "subType": "00"
1694
+ }
1695
+ }
1696
+ ]
1697
+ }