From f4c21028005529530944ddbd3110ad7e28e72b67 Mon Sep 17 00:00:00 2001 From: ziyi chen Date: Sun, 20 Nov 2022 14:15:12 -0500 Subject: [PATCH] remove unstrProperty --- dataset/BUILD.bazel | 1 - dataset/copy-csv-empty-lists-test/vPerson.csv | 2 +- .../copy-csv-node-property-test/readme.txt | 8 - .../copy-csv-node-property-test/vPerson.csv | 2000 ++++++++--------- .../vOrganisation.csv | 6 +- .../copy-csv-special-char-test/vPerson.csv | 6 +- dataset/non-empty-disk-array-db/readme.txt | 6 - dataset/tinysnb/vOrganisation.csv | 6 +- dataset/tinysnb/vPerson.csv | 16 +- .../copy_csv.cypher | 1 - .../readme.txt | 5 - .../schema.cypher | 1 - .../vPerson.csv | 601 ----- src/binder/expression_binder.cpp | 13 - src/binder/include/expression_binder.h | 2 - src/catalog/catalog.cpp | 16 +- src/catalog/catalog_structs.cpp | 19 - src/catalog/include/catalog.h | 16 - src/catalog/include/catalog_structs.h | 16 +- src/common/include/configs.h | 7 - src/common/include/expression_type.h | 1 - src/common/include/type_utils.h | 2 - src/common/include/vector/value_vector.h | 3 +- .../include/vector/value_vector_utils.h | 3 +- src/common/type_utils.cpp | 26 - src/common/types/include/types.h | 6 +- src/common/types/include/value.h | 58 - src/common/types/types.cpp | 5 - src/common/types/value.cpp | 41 - src/common/vector/value_vector.cpp | 2 - src/common/vector/value_vector_utils.cpp | 16 - src/function/aggregate/aggregate_function.cpp | 13 - .../built_in_aggregate_functions.cpp | 8 +- src/function/aggregate/include/avg.h | 10 - .../include/vector_arithmetic_operations.h | 16 - .../include/arithmetic_operations.h | 395 ---- .../vector_arithmetic_operations.cpp | 60 +- src/function/built_in_vector_operations.cpp | 29 +- .../cast/include/vector_cast_operations.h | 8 +- .../cast/operations/include/cast_operations.h | 71 - src/function/cast/vector_cast_operations.cpp | 57 - .../include/vector_comparison_operations.h | 11 +- .../include/comparison_operations.h | 89 - .../date/operations/include/date_operations.h | 122 - src/function/date/vector_date_operations.cpp | 21 - .../hash/operations/include/hash_operations.h | 94 - src/function/hash/vector_hash_operations.cpp | 3 - .../include/binary_operation_executor.h | 1 - .../include/built_in_vector_operations.h | 3 +- .../include/ternary_operation_executor.h | 1 - .../include/list_extract_operation.h | 12 - .../operations/include/list_slice_operation.h | 13 - src/function/list/vector_list_operation.cpp | 7 - src/planner/include/query_planner.h | 3 - src/planner/include/update_planner.h | 2 +- .../include/logical_scan_node_property.h | 10 +- .../logical_operator/include/logical_set.h | 12 +- src/planner/query_planner.cpp | 18 +- src/planner/update_planner.cpp | 18 +- .../mapper/map_scan_node_property.cpp | 1 - src/processor/mapper/map_set.cpp | 1 - .../aggregate/aggregate_hash_table.cpp | 3 - .../operator/copy_csv/copy_node_csv.cpp | 3 +- .../operator/include/physical_operator.h | 8 +- .../order_by/include/key_block_merger.h | 38 +- .../operator/order_by/include/order_by.h | 11 +- .../operator/order_by/include/radix_sort.h | 27 +- .../operator/order_by/key_block_merger.cpp | 114 +- src/processor/operator/order_by/order_by.cpp | 18 +- .../order_by/order_by_key_encoder.cpp | 13 - .../operator/order_by/order_by_merge.cpp | 4 +- .../operator/order_by/radix_sort.cpp | 96 +- .../operator/scan_list/adj_list_extend.cpp | 6 +- .../scan_list/include/adj_list_extend.h | 5 +- .../operator/scan_list/include/scan_list.h | 8 +- .../include/scan_rel_property_list.h | 10 +- .../scan_list/scan_rel_property_list.cpp | 5 +- src/processor/operator/update/include/set.h | 1 - src/processor/result/factorized_table.cpp | 1 - src/processor/result/flat_tuple.cpp | 38 - src/processor/result/include/flat_tuple.h | 4 - .../in_mem_node_csv_copier.cpp | 226 +- .../in_mem_rel_csv_copier.cpp | 12 +- .../in_mem_structures_csv_copier.cpp | 25 +- .../include/in_mem_node_csv_copier.h | 21 +- .../include/in_mem_rel_csv_copier.h | 6 +- .../include/in_mem_structures_csv_copier.h | 12 +- .../in_mem_column.cpp | 1 - .../in_mem_storage_structure/in_mem_lists.cpp | 63 +- .../include/in_mem_lists.h | 25 - src/storage/include/storage_utils.h | 17 - src/storage/storage_structure/BUILD.bazel | 10 +- .../include/lists/list_sync_state.h | 2 +- .../storage_structure/include/lists/lists.h | 144 +- .../include/lists/lists_update_iterator.h | 13 +- ...ts_update_store.h => lists_update_store.h} | 9 +- .../include/lists/rel_update_store.h | 80 - .../unstructured_properties_update_store.h | 47 - .../lists/unstructured_property_lists.h | 84 - .../lists/unstructured_property_lists_utils.h | 80 - src/storage/storage_structure/lists/lists.cpp | 191 +- .../lists/lists_update_iterator.cpp | 26 +- ...pdate_store.cpp => lists_update_store.cpp} | 28 +- .../unstructured_properties_update_store.cpp | 118 - .../lists/unstructured_property_lists.cpp | 297 --- .../unstructured_property_lists_utils.cpp | 54 - src/storage/storage_utils.cpp | 4 - src/storage/store/include/node_table.h | 16 +- src/storage/store/include/nodes_store.h | 3 - src/storage/store/include/rel_table.h | 13 +- src/storage/store/include/rels_store.h | 6 +- src/storage/store/node_table.cpp | 16 +- src/storage/store/rel_table.cpp | 30 +- src/storage/wal/include/wal_record.h | 28 +- src/storage/wal/wal_record.cpp | 9 - src/storage/wal_replayer.cpp | 33 - src/storage/wal_replayer_utils.cpp | 7 - test/binder/binder_error_test.cpp | 30 +- test/catalog/catalog_test.cpp | 13 - .../vector_arithmetic_operations_test.cpp | 97 - test/copy_csv/copy_csv_test.cpp | 94 - .../aggregate_expression_evaluation_test.cpp | 46 +- test/main/exception_test.cpp | 20 +- .../orderBy/key_block_merger_test.cpp | 64 +- .../orderBy/order_by_key_encoder_test.cpp | 36 - .../operator/orderBy/radix_sort_test.cpp | 91 +- test/runner/e2e_copy_csv_transaction_test.cpp | 8 +- test/runner/e2e_ddl_test.cpp | 11 +- test/runner/e2e_set_transaction_test.cpp | 229 -- test/runner/e2e_update_test.cpp | 91 - test/storage/BUILD.bazel | 49 +- test/storage/disk_array_update_test.cpp | 3 + test/storage/node_insertion_deletion_test.cpp | 2 +- test/storage/rel_insertion_test.cpp | 2 +- ...structured_property_lists_updates_test.cpp | 384 ---- test/test_files/tinySNB/agg/distinct_agg.test | 10 - test/test_files/tinySNB/agg/hash.test | 30 - .../tinySNB/agg/multi_query_part.test | 6 - test/test_files/tinySNB/agg/simple.test | 10 - test/test_files/tinySNB/filter/node.test | 71 - test/test_files/tinySNB/filter/one_hop.test | 7 - .../tinySNB/function/arithmetic.test | 370 --- test/test_files/tinySNB/function/boolean.test | 16 - test/test_files/tinySNB/function/cast.test | 97 - test/test_files/tinySNB/function/date.test | 428 ---- .../test_files/tinySNB/function/interval.test | 332 --- test/test_files/tinySNB/function/list.test | 28 - test/test_files/tinySNB/function/string.test | 220 -- .../tinySNB/function/timestamp.test | 346 --- .../optional_match/optional_match.test | 8 - .../test_files/tinySNB/order_by/order_by.test | 75 - .../tinySNB/projection/projection.test | 34 - test/test_utility/include/test_helper.h | 4 +- test/test_utility/test_helper.cpp | 6 +- third_party/utf8proc/utf8proc.cpp | 67 +- .../python_api/py_query_result_converter.cpp | 7 - tools/python_api/test/test_df.py | 8 - 157 files changed, 1591 insertions(+), 8048 deletions(-) delete mode 100644 dataset/non-empty-disk-array-db/readme.txt delete mode 100644 dataset/unstructured-property-lists-updates-tests/copy_csv.cypher delete mode 100644 dataset/unstructured-property-lists-updates-tests/readme.txt delete mode 100644 dataset/unstructured-property-lists-updates-tests/schema.cypher delete mode 100644 dataset/unstructured-property-lists-updates-tests/vPerson.csv delete mode 100644 src/common/types/include/value.h delete mode 100644 src/common/types/value.cpp rename src/storage/storage_structure/include/lists/{adj_and_property_lists_update_store.h => lists_update_store.h} (90%) delete mode 100644 src/storage/storage_structure/include/lists/rel_update_store.h delete mode 100644 src/storage/storage_structure/include/lists/unstructured_properties_update_store.h delete mode 100644 src/storage/storage_structure/include/lists/unstructured_property_lists.h delete mode 100644 src/storage/storage_structure/include/lists/unstructured_property_lists_utils.h rename src/storage/storage_structure/lists/{adj_and_property_lists_update_store.cpp => lists_update_store.cpp} (84%) delete mode 100644 src/storage/storage_structure/lists/unstructured_properties_update_store.cpp delete mode 100644 src/storage/storage_structure/lists/unstructured_property_lists.cpp delete mode 100644 src/storage/storage_structure/lists/unstructured_property_lists_utils.cpp delete mode 100644 test/storage/unstructured_property_lists_updates_test.cpp diff --git a/dataset/BUILD.bazel b/dataset/BUILD.bazel index 7561693d2e..fccc119b6f 100644 --- a/dataset/BUILD.bazel +++ b/dataset/BUILD.bazel @@ -16,7 +16,6 @@ filegroup( "read-list-tests/**", "tinysnb/**", "tinysnb-variant/**", - "unstructured-property-lists-updates-tests/**", "rel-insertion-tests/**", "demo-db/**", ]), diff --git a/dataset/copy-csv-empty-lists-test/vPerson.csv b/dataset/copy-csv-empty-lists-test/vPerson.csv index 2a18a48e62..2a65e84464 100644 --- a/dataset/copy-csv-empty-lists-test/vPerson.csv +++ b/dataset/copy-csv-empty-lists-test/vPerson.csv @@ -1028,7 +1028,7 @@ 1027 1028 1029 -1030,unstrINT64Prop1:INT64:12345 +1030 1031 1032 1033 diff --git a/dataset/copy-csv-node-property-test/readme.txt b/dataset/copy-csv-node-property-test/readme.txt index ae8815a0a5..ffae511c49 100644 --- a/dataset/copy-csv-node-property-test/readme.txt +++ b/dataset/copy-csv-node-property-test/readme.txt @@ -3,11 +3,3 @@ vPerson.csv # length x count pairs: 10x100, 4x10, 90x100, 40x100, 2x10, 780x80, 9x100, # 2000x10, 13x100, 6x100, 83x100, 23x90, 41x100. # Every 100th node's string properties are NULL (so v0, v100, v200, ..., v900) -# Except for 3 nodes, each node also contains 4 unstructured properties: (1) STRING: (strPropKey1, strPropVal1); -# (2) INT64: (int64PropKey1, 1); (3) DOUBLE: (doublePropKey1, 1.0); and (4) BOOLEAN: (boolPropKey1, True). -# Exceptions are nodes with offsets 300, 400, and 500. These contain: 300x4, 400x4, and 500x4 unstructured properties: -# e.g., for node 300: (1) (strPropKey0, strPropVal0), ..., (strPropKey299, strPropVal299); (2) (int64PropKey0, 0), ... -# (int64PropKey0, 299); (3) (doublePropKey0, 0.0), ..., (doublePropKey299, 299.0); (4) (boolPropKey1, False), ..., -# (boolPropKey1, False) (note that the exception vertices are False this time and the key indices start from 0 not 1). -# At least 1 unstructured property of the following nodes spans 2 pages: 77, 154, 231, 300, 310, 387, 400, 465, 500, -# 589, 666, 743, 821, 898, 975. diff --git a/dataset/copy-csv-node-property-test/vPerson.csv b/dataset/copy-csv-node-property-test/vPerson.csv index 3aaf926169..dd4532418b 100644 --- a/dataset/copy-csv-node-property-test/vPerson.csv +++ b/dataset/copy-csv-node-property-test/vPerson.csv @@ -1,1000 +1,1000 @@ -0,,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -1,"ozwhvnetnq",strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -2,"kuk,qg\\nrspmk",strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -3,"wmz,1234\"lamo,oex",strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -4,tudoojdduf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -5,qifidjufri,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -6,gqpnpbdmrb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -7,dgzbiqjkaz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -8,"ebf,,uq\"buqma",strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -9,rwhnybogfy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -10,enqpnymvdb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -11,axgwwhhohf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -12,lnjscxxsut,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -13,bibseamdta,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -14,qysgjbhbad,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -15,pujcirageq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -16,xbcripouoo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -17,ccyjsondhv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -18,qmgutogbph,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -19,tcymalhvsp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -20,ekouvlwbwj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -21,mjqtrbgwxx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -22,capvwwkqqc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -23,ikmxmuutwx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -24,ickhfsvbcz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -25,txgkpgznqs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -26,zjhqklqbpk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -27,bdyauucxrx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -28,dtpchkewek,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -29,atgjuhqewt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -30,wzsfokmeup,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -31,vtgaqypmhj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -32,htnjdmdzip,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -33,urgyshzywg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -34,yurwlvqlqf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -35,pvnysdudmy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -36,enwtgnpdcb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -37,mxevoajbdu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -38,lghityeldp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -39,xrfzruchvd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -40,nwjsntfgqv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -41,hhpimahihp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -42,dbckbiyiho,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -43,kustoiynts,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -44,kvfkmpyass,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -45,ahdahcueej,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -46,lzdzmtgyiv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -47,rzequmtgqk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -48,zlkrbxdura,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -49,lvpmwemfbq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -50,hbuahlqgas,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -51,gaxyypltpd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -52,gurwcenyqt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -53,arkblblzlg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -54,cyrxdulazf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -55,llbnlowrwk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -56,edvjiqckgk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -57,ydtnktbzjy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -58,izfpesvidi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -59,rlizgprikq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -60,cdjtrkklsw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -61,ozcslkkrwb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -62,syfokqrfla,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -63,qrocoqwlbb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -64,zjafjvktaf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -65,tjgjvjkuvr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -66,lqfmbvzkcr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -67,lfbyzkxjnl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -68,nsmbcjvwiw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -69,nenrfabygl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -70,onmnofrrqc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -71,vaxdhdolut,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -72,ublvzthstg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -73,gckvvrfipw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -74,jvvxauxkbb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -75,ytqhbpdawi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -76,fkfrqjcoqr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -77,zanunsoqxf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -78,zbdplfupiz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -79,dpadwzsmfz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -80,mgsupeojgf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -81,oeuhrirtdq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -82,lgykwuusgt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -83,kvsfbngdxr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -84,yoopsbmvio,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -85,abzjlpkwbm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -86,syxjelcfty,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -87,zznkaqdjmx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -88,xspkpnoilt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -89,qvddmqnhjp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -90,ybxpqdcwxi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -91,ztkjrcctnk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -92,pflmmfbtoz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -93,hgqocmmsgg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -94,ytsavnxbsj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -95,iwiedbzkdv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -96,urjqayxvlh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -97,kmupwzbfej,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -98,jgaezzptgs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -99,bklvzfgfyc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -100,,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -101,kyxy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -102,lcoh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -103,blcp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -104,oand,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -105,bipf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -106,mxvc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -107,eaob,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -108,nkcd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -109,pnsx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -110,vmgspsufwhmahtollxtvwaacaxqcygdhvgzessahcduiijfuubvastltshlybscvwskysmzsybfjiguvlwhgbufxbr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -111,lselegxziyjpbjrbamkgndtzmwucgyxogofasgcbjnexrmudbwalfcnknbnjhzgeordkxpwlsmgbpaeuulyjajhwwa,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -112,sfhbcpfkzvmxdxbccfzudeseiqayccstusggudkcsdwiuksiszyqaliecsnfjztjgueegskcibkkmuqiorgypqttbf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -113,cikzfljmrxosmgltijhdvsuuntlbvbjubnifxthyltpibnopmadyyxttslwifnnjtixrbsjujocvrohenpbmbdhdad,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -114,wvbpbiamkwnicpeayibemwxrgfzglmbbecffykshtyquentqlngxfivorbkcrglfnrapkdyedfntdomffuynqqhuhl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -115,hewezmbpfhlgchadsonzgqnieohwsydtejoeggnkhmrdcpenqxawtdbpqxgtoaeecvgljmrkevmqsfsiwbvnloelri,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -116,exnquvkcdngpjstvhlzphmtuvlgbanqsbblibdrutuahzjbjfhwtwzkjrzjrvwgkvkwvdubkvjzaixzefnwyvionyf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -117,ksypuowduexheauocqjrddezjyrnojchqzhcobulbosmagacdbtcisphoqujobcdqmaypyjnvdksagwiaakdmuzrhn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -118,yfvaxtpmsdgznyevxyyatoiorkscpqjtqyspjzzbuojexmueiqdhnncpkvwahojamwptxbxpweeqtwgtkikiihdelf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -119,vstkwhllwicogxgdpgrssztqlrgxddteesczvcddnytyhokjaycardpuxkigmhmxhhuqvmaunptsogtixrmhyqvmvw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -120,fgfwdchhkkowhlzvajsvpnmgcyppxbupmazpipfginzhppsivzlgfeefodobpnatdbkjwngjdcudfwiiyryhykxayy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -121,dvdnuwwutbuhmlhibfjingcgohrampmifupxmkopioouuvamcmqwwsmddkpcqrkmjsvcfhtbrbbywczczrzuuzweuo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -122,hfwyrvxdjidbivkmtjwdmuyobqvmpeouuaxzvntcxujsatucucmjqjqouaqrandguqfbptrtrarihyyujgdenjppno,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -123,spopkovwbyqxwjzztsnvgxafphnnsnfbmogzsqrosusizmvujslfvljymazizmhwakwvwviyjkiohnsvngrevijltg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -124,sjsmtkbeoocpdshfffpjdywcvafcjwedcdeilpufunyoymfhlfnzlzdbnqwnsbbgllmmnzunlaexbtjiyxviycwqsu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -125,bxsylrtdzpngmwbooywwvchsdvqxdsxpvkhkjttxwikdsvjowmbppimdfntqkhxjilvozbfpsmafkwmklilybmcarl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -126,frafgghbbaxbjuueookaockzucfgvvpaneledvtjypxzuhgthiywglnmnrcgxvecdipsrtmxrpzmfowrqmqfelldle,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -127,pcllorrodwwtenkgjweozkmmjyrobhxdebsmhuoydjtsiqwvzyzmzeazirlfnhbztwijhqnnfdcnxenwgjhvlyqaja,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -128,iquurxdljihinbibsvsjaobcvbfctbawllevhxikexunukmruapvrqgkzgkezhxgfrvdijbecuzifqfobcsxxybxfc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -129,kngilomfwzvwszgjsxzflnwzqjzjikgzxwgtjuzpbsxnhontqdlwbwnmigkfppscsxxplbkrxvnmnjxehsnvbxvaug,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -130,bbidxrfitnrcogykiqlqoqqfahliomvqubzcnxcqoahmgsotczriwbcubikcojttnbrcfvzrvjbplvayexqrgzjrdh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -131,qncsplittouwnbykofrswjnbudmdmzdoqvmfybmfxvxlrhrykslcxcrnhetewayygnccqmwjsgjwncvyojfytzxljb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -132,ozmurcpifxgexbfmkcrvebtogrrkjqzubqmueanbvhqackrthxrqchxgfmpilfulqvahslhnbwndxvxorldjoslggx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -133,vueenkiqeynzhmmwbnwoypwqtapskhzyxjkfttjrthrjjwwwnmgaqhjgujkfepstnfgtgjcbncvehkqaoadgduktme,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -134,fncxmhmtukxqurgeqlbiebrvrgcszjfbbcypqczdsfekpwnjaqdtxzdugbojwuvwaxmlbiklmuyqgbpkwqynmmjnud,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -135,alhgwkjdbpjolouoowfrqeclhdkpjybjvbcwmaampuqqdohhafdclxyuccdlwvwxjbvoruqaevssvwwlrvvvyvtceg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -136,xhowqlpsnabffgmuukxzlqtwukmvkwbkerkzcirejghotggxerjfjcollzryjrwlyageeibocycpzwvcbfglrdicby,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -137,oaixmqbwfareqyvbgbtxojwilfjsgkeizbuxwyxpqdxsbkqrcjmfbehydhbhbtatvngcvuwkbpectlnkvrzttirays,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -138,xduhsicylyoxpythpmuhtcbphbdcxcdizuthnuabzzreamkazmejfegzuqrrfnfktygdwesoopazqopiwqflqpkump,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -139,wviarkepqsgslvzasxpgpleulwcgcncwflcnhursrntmyxjvajncjpuapnbtskilsxpgbdgbhecdzbtprlsagviznx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -140,vlnpyveilzfvyddwiwdokzwhqzcqzjihhmevppmhsxzkxhstlcazrqcilhfpguliwojmsegcnqqokuwxplejjuhbyb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -141,xyzugbuqfzahqktudlnivrugdqhvcisjobrzysyrodbvwnhsocajpkkpnilioefsfkoodxhitffhbaiozfwxxygenq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -142,sqzjpdykbgorpjnolwcmjsifpdottbununtodgjbcoihrjhqfpyinjgevhhtpddlnklpdtrhzcewynguaxjalugcid,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -143,alhstotowunrazdptlxgeeqrvpokoghluucpzuhzqbkuessbwukfaxvantkxaklifclbgemwtqsoplozfqohosqknc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -144,vtvgonifmatbtpulbtqqqcswpdbgqmshfqlvmikamfutbflkzoyikorqnknroxdlzgkeqgywuvvntushdbpjaedfmn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -145,qscojmfpyqtxgrfzjsefyreiduonnsoycoemldgcmpiyliwrvfoniwvddomynqgefsjlaodlykxmygnmqwwmgwyrrg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -146,fwmhadawwvwqcixxagrkfoxooijclxnvaxzdzuddulfwofwdcqnjfpfdjrvhsgkiygskvtqwirckiuorvmbviqaeng,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -147,sorqgwdegfcqycbhxbozvovhidhdgrgenqgnthmdlvmfxhnapnpwmvwjkitojiycvhdyalffmzvukfzdftqtcrvdlq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -148,slchxvnlnvqfufbasgboabsogzmlaaygqqrtmmpqiwsnncpmkrisbrygbqkdtgmeashgjygkcmfeuuwiqcztwhvrfl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -149,cfinaqagbzlnyggvcbglayspelstjfdyiudnzmhvztglmputivbwlkernnqnzevflmnjfmftqmgsmlzskfqgippoko,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -150,mgfivybbprsnwdtwhffwqvplwzhjnsbcenppiolxrbztsomqcttujbdmckssobpkuzabjxxhrlllfemriffcksglpr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -151,piaihktalcxazjxscjtkdyuhzswtmmwernbbbduusqeeybzpcdhxevhvaoyobsakupzqmztihyylsdxxygsievtwxd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -152,lazunaruceenvwinipxstknvmylskzftxypjkibaydtmkgvgbuskvcdxozdkhcntvoybsreyhqlihbntxnptxkjcnx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -153,kodlwsyybheehpepofesivvgvjyleidnaeixhovcaycktrpymqqxkdowqdhdlbhxxfvdtsaxptawrjrfyymvesiivt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -154,akcsvfwpyqxijnpcevlnjyukgphybptiqwbrvrtbdiiburiacfomsuulhsuhaqevlnvcufiadbqyzdauskcjbckgiz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -155,hmkqroxkccfmgxbyzqvvrhisqkcevwndcpfprogwdnrlnzqvylgnfnrgfdraxdthmdzxvoeeohjkziixnqcdxfsxzk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -156,lbgmlajrfuqtcrizmupuhpejgzwavkeymdqfujjsrovygoytbcbbzkflinxjdfbtivbsnhmefgfskyodusdwelzssp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -157,jkwicnyavryhbkusctpjljxumrfqrbhzpwkyncfpuyehqfcrvxtbyqcxdlfccayjxsnwpjibuxmhjvrhxcckoddymv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -158,ktvkrhbqodtgwxrrwkepzdbzddjrdeftdajerqsdtcvseounqoewixpvoqiywfwmghlbllwzjjaeufxkxmkcjopbau,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -159,pakgkgjfcriwyclzoztcivmkljlyvfdlhwwbkkfbycnrdvbkgfmpmpgtqcbftuizujmzormigxoigmgxnawkriamfv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -160,pwibnpchpmrcnddtbzcnhrmbfwgoyzgwvwdksabiiveozatwmrownddcremkmbffelqdgoabtstiebeeksfnbltwan,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -161,kocxvutnvmmcbfqlogztqrbmytmrzlnfvypbnankaeyebquchqqddkcwkiibbdfoalbtxiztruvcvydhzusrmagytf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -162,egyvgbbdvpyrxobuxecoieezgshucqjuaivasjnpfngzocyshrwpkmoppfvamllisxepisgrbewirqnaifpofswbae,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -163,mfazjwoascjyuhxqcsymnkjvlpoudonhthzatdtrezlvjiladrasdraaroydjpvhfsgogjgxlhbvsyzrtidedbnzog,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -164,ypnehokcingyqrpfoljeczgnzqhaqovlxdbsfnonnrlaepyrnzzlmvtxvbvrrbjepbpctgxtrniqxriplqzxovmfke,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -165,vvopefnyrlckpwvfsbamgyhcrzufqauoifrgqrevvxdfykdcursnmujvjlyaziflhbvagnjmueszpkxryuffaqdfjz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -166,yatlbgkpmwzkwfiwunvzybjixshvikjffkhvtfjmepwounulizwutbltcudcmjpwwqgqoumeoxuwmjasznkzxsmzll,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -167,xkwdlqnxwsztizjidteplxllawxydqjvecugthdzocopixhweutmcdevvsjtrschyxciljpgjrbqyduugfurcipjgf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -168,bzzfjhcpsjlasodgvsmfolfvuwfyxocetbnqrgxywvpywafpuwfvczgnlzwrpickntlbvlqsvigsuvwxwapfywpcli,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -169,hfslksrjlfwcngakxdcvxmbselnypixddcjmqnwdncqutwuhllxwfghzlbseciucjoawzqnhlyqaidxerqmhvgkdut,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -170,cgugmswbgzkcunpkuujaeddzogrpvvjjykssqsiwtjkkbryoqrufypyndozpcoushyetniwmgezhujcbthpncxvhix,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -171,pdydkzucckasjolmsipbibdoebuemvzjfevmepzvxhnwrqcvleaibanecmhnvvauipssplqjkvfrnqtqobhdtiujhj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -172,iceckkwubnrcehhgkwbuhrwqlittcvwvtnszhoffvufvwkuacogrnddvkiiiuelfokbizurklbmrgmxubwhjvpftlq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -173,gjvsaodmhwitqxewuvdyqltxkrerfrfjtperhqfcuoxjusajuyenoietccujerdwnfgfvcggoljbaqrmbatgmjmgid,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -174,jmzzhrdycqjhtwclgtwukwihfuxnezrfacwuixtobumesjgxqoedtvufnfmwyzgykikjxhvxgzxreyzcjfjwmcglye,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -175,looaoekqmtqmzzksvswraizwzrciyzklyutxlqbzsrdiyarjhopuyfnvsgtwjdszcdduofriymxmzvcrerginnoqep,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -176,ltcxueaiewmihyggjioeqabgkfjctwtltzbrvkesyqxcecceistlxihucalqqcoluathqpeajkewzkyoaiipirwhax,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -177,dyxkbwrnxampnwvmkutspfhmkrwlgppvseqqhbwsonxbgocqkixspnvpexmcbdujifjogbzhovwpnziqjvxruqvlim,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -178,gdvzjqdukjyhgrawenapqqfszhhruxmdbwnvwnygvqabfyxlnutypqoahsynfgepnbfyhkxjsptnnwoxrdltvyxizh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -179,tkmfbxcofflbrdwdiceczxzbdfozvubxoxlzxlmpshtaoypkizswpubcoffjeuupcfgthqmnlickzlyezisctvuzph,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -180,pcajstrrxhiogsjexdcxffahnrcftnxdrrvxdkifbsycyiqfjyqxdffwaloxgresdjtjpzrfhqhvnepyuxdncoblrc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -181,rkkxgaugcggbmvpyqnvloyanfkvjvtduwqvqkeigeaxdijijtiholmnnphesvolmmxcaygsitnhfvinnyhuiuvmnfk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -182,qycnsqqqryerzzqorglookbzyskquqqypazrcvyoglniyktppjsnwdfxugcacufupausauylivceusjmyoyumujbhv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -183,oksmcgovehbhokmtmppaqhlzglhywmmskxbknpwilzmlmyuojzrnnnehyeisegzhdcwxcbmeettnlddpqvrxxodeft,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -184,ekwkqrhypecqjwesyttlhbukesvpbsdceaodubgnbjrhkfowbscqarvupdsepjpznahsnppktbeglngyurclugalvg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -185,pawstouecaelywovcawzbsitgpjojnvpvvmlnfswdcaznlzuwkimwtalaboflsszmyyoathmdwnhknjnlpnquajpyr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -186,hkwapzlckpisbhssfbusqbeeiyzhsfyklzxickbpgqmhdurmtxoisomhooobyiqgxtmwxoozzwyuceuqdlcirvydlu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -187,fxlhtjwanwqzcharnuvbxuftmaqmmyphjunysnjejhvztcfzcqzzdfalstnebmguuzswrmqmidehfkoidithnxlska,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -188,fhbdhptsjzejihmktexvcfzvndgikcdbtpatnbikrixxrmgckkjfpxethoznwstiwpbgvmrsabgilakhuujukceqbh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -189,dqoponbyylhhijcyfyhmrxhvqlegyyrklyjhovfvsrqkprlwnzhczcmfhsammmcfpiyczkauobjnpmaljabfoezxdt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -190,evvuofkesnzkfquloxnyydqwrmdxhbidxdindryvtnpakiunyoskfisslqyfnqsbnfhjdfujloayrcknwknmdpqmbz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -191,bhpofwukobcemponndrnxlryvbiypmlrnxvinrcyqvwlxgjnjdhxrgikauynjfpduychfxworuxlnazxnmrthxexzj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -192,xupdrcoknrvobbizvavxhvcqfglpvfkpjwusoxkofxxsozgswismjikvifnhadgwfbnogeyjnnkqbuuxquhfxdniaz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -193,mskkhntqruujiyxvcvfhvthgijktzwhibvmngpqxrfiezfotnkrpgeavlkuxtdylibwhswujiwmibhfzkirfwtetcu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -194,mciqljbbbodldznxjvklqkyiaumxmjwusdvjdasywggzdeyrifmxcsgfxstfrqtoyyecooyxeluxjukwwbawycvnss,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -195,pbyjperjeorknvmhmgwgilgktxdcslocnzltkfahjmkchfetrcecchkevxsaiqwwjagvzvflplajkmaowikxkqatuh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -196,iibrpzotygjgjmblvhzrvuucjhcitowjianoijxoxkgifdmesykeytdkfbcgvpeifyjeviarqqvlczcgkraesarwml,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -197,lgbrxgpjuddiciscvrwoxmnrdovzifiryswqzpcvtbnctqdyspjpwvgbnisprfzjxngdqykkmbipkyfkjbcuqwftzl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -198,uryrbxulaafmoakegyvfyrteochwcbaodabgojtmmauvkpquygvngkqpcizwgtcdvllmcxsyrijwkikcfsqkclpvul,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -199,swbhqgvspssqoggafvnprwxioaayotgvrhhyexvpnxlnjpoqpvrmfojclqxgppmnktvihkvizilmtlmxejswgrpzyv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -200,,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -201,hmmfhihrhqlfybnznrnsceccyplsvytyjircojlmdujmwroqurjfzgxcjnejcmwncbqzhkyzmqjkvetroyuiwpmjkh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -202,whopnkmkjszixtdiseeixezknuhhploytktfrzfrjncwttlfcviziobnvuldeoaggchkiyzdsodlhrkpbjdwbdwpai,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -203,gtogbqfognotaihjktycrsuszinjojwtgxdzewbffbtqncbketgfxfsbqulifrujpjspoepvrjugplhbtzyriudono,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -204,xevyqjgpwnnzfxxdhoddcnuxzsmhsomqsrwmvgwdlzpduxumbvfzgvvkhvhiehlgbctyjyjipldkmfxvhnijpbomac,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -205,kmpexlrewpifuhegwnvbbhchilyzmgwybxlbvxttexpunvocrdqmlljndjneuwyjtawycjkrybajmykiolfzpglfiz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -206,xmcacuvxivcurtdziomgcxwinhlurbhmugmyiotipccidmqfvjbkgxeyvbhgtgxeqdhnjzmzuhqhuhkfysfkeaztya,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -207,dpievscglkpgmujirazqhkjidjelimmdrgydwjaguuzfzjselasijbgzrqtfvjzmosaflzgjzegnzhvsnjacpjxpjq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -208,jqfrvxlgicyhwhapuwdstixmngyuhndiwmhqjncwpujdpkufchkuedvamthegfhecouexirwvqmkperyluilxmruzf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -209,ygcivouhtlnclfnwkxulxzglsasaxbuhexfkxkqmrzqivioxvuovbnsbvhjuqaidlhuvsncrodjbjaqltubcbthepd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -210,lcubikgsczuizrubdavybgmjdsomhtnybfljprbw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -211,rcirvsjofelreutxrstfhjnwpksduvjwazrcwcsf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -212,jutoymwvnpdtdajucdejlbnjwojjzwoyafxbwfhu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -213,bkvlxrkwjjcbfbyvncknpkxhlqvtquxcimjypwar,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -214,pjybgtmjqpmydlxpjcaoozrwvluhwzhfrobfotfs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -215,jmlbzfmqfzryemgettsmzklxwyqyzxqwtlxogcla,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -216,ycktpxsjighloymyodovjdgfxmtzgaqnvwaqvsvf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -217,rvtqxapnialfawvnxzumamurlzpfhkkojfpncooa,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -218,iqlkmkdujohjslacdgowenyiqghnhyukbnrhsgjy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -219,qnjosuypxqxmirpsfyrbjqerlzuxzrwqugkktvuh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -220,lgcbsmmopugkgxixzktsohmuuogxrszcaugknokr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -221,hyijqhjomhyvjqolhsgoeusaguyrsdbljlglegve,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -222,sdsfhvynigrcyxkoaxfduquhlulcvcbxaavdgpxg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -223,dbvecurhcnlulwrannjhxmjtfvqluiasxsdqkwxf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -224,gexdtfnztsqvwjpulegojuswojzgozjshzpminmi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -225,mmpqvfgwavcmwdsmnvhsubueaapmjwmgztkcoyko,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -226,uoeswrywxeymsxagzaxgwzpysytemzaxirriltxp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -227,vpriatunksfdgtlwszrqlbfwcrcqhxhuswkjokhc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -228,ylsryuejvvqkycosmtgyzwdjmqqrdantouwvzamd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -229,vihyrhfotzqqnikcvngcndjzjpoarcnsvjfqlbyb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -230,txqilialbfnipbfuxkmymmsfafgytfruujkwtytl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -231,gtuimvvufhpazrhyqdvhbqfucaokvtywdzanheei,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -232,ariqiplwxavtctpwtkcuhellpnzpiqmhuwizsdsx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -233,rqyfpjuwdkdntjozmskbgvzyuttzsxzwysxndqrb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -234,ywxbevytuqbznmjlflknnewnnvcgnwkfbvykwimp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -235,atesqyqqiymblijlkpldbszggxwgiqteplyrjyhq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -236,pmsovoapxqbvhijxcaiposvhylorjycqmdrwthdg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -237,lndrixcrsljehxedxbvkhzhnhthjvbwfzcgxbrul,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -238,trutjozwbjgcwslizgxupkdjeaxznuhzxusdimah,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -239,uwkobjvtvrecpqnvzhfwpiavphditpzqoplrfawd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -240,yxpqbocxcpmttdjccuglqfuuygwpnbwqvvieqviy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -241,tvrjmtbsrqehgeqoxnevmjeqreruakatasoqrhal,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -242,qiicslrhmodgkoigborqoynixjgaeobbgkaghost,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -243,rjywpjlkncniotkpmclqmdfrmemddagddnvemkgm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -244,mwlzgzknlgeymbpnievhhkkxupqgixkcojcaahde,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -245,dzmbxjdtlsdbofisbosgwhcugrcusvosnhbaedqh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -246,gkovojwhbhwdbcewyautvypfgwhmgigqkhalndxy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -247,sqzmozpyxqajujulknfreshojxvdyzbolpcgjyyh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -248,vxoqebegrgkqmnbaubvqcxnniuechmgrfaweddhp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -249,biyazfdxyygogdtghveioupewrgknxrdqslkbppj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -250,xofzviyrwgengheiardhvlticvceujchckmnhmbd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -251,heuhblocmbbuwsflzypwobzovjknlaojcnwvexqm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -252,qdsvauxhzmmuxcnifnfxdwetsgljzkyfebjvofry,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -253,arwvkdvrdudqcigffrjuwfhgvemmstusheuiyewk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -254,woolbefdurlzvbkgwefhcpanqvhzdiimhgxwjxcd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -255,kbfzrvbjrpysvcorxfctjjxmkrbueylrtltfgphu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -256,qglydhlkaumlvbimhhvnaxgdjgjxujximlrjcgmd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -257,lnbjthbdoawjtsdczxebpiotonzsguazdjrqzxse,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -258,zwxomkjudonhkpymgxjfpnbaanwttwokbrkslvxz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -259,balzjymjkcwenojnrztsdalarkssvtufmyjtxjed,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -260,yugbsmodtttgkrzmfvvvfilglhgmrxzedbmwuhfa,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -261,wwgfbpugjuyhyzvrbzzhbvvqorfvwruqxbkvsxop,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -262,qynyqzssjuxgcwcberzyskdskclvidtphinspsyw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -263,nsdkidocnuesfcjnzjbrkxbatxiucxpoewtiahsz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -264,bybytvijbxqtibinndfmsvzlsaiqrblmjngfjvvo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -265,ksrnupdfzxxzsamsishtccxhgraumyghlpmjxhlp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -266,gcjczwawrtovpnyeaiccfsdxzounixerieinijuw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -267,nzroinochcmhlvgpxzjtduomccflgvmausfnwrzg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -268,pvqgowoqvtcuzexptfkcrnicdwxlpixqnjirbavb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -269,nwigrhpztwrkkzdqziqsngxkqlkppjbnuiywxfww,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -270,mpicnuwjertyiccyiffceomcpicjxrbvbenyhvuo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -271,nhoqvksffelcqbzoxxgrcfsguwciwylpgvdwnbvf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -272,mooqgfucmxjicmnmnvwzngymjcnlsdlrzjutzbnp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -273,jioodacberzqrcpffvpnnjyumvjgkaxlcyanegrn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -274,hjnxfkprryhvdczhehucoajcppljcpjnvnclllna,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -275,tepkevbzciiosyvasunrajiqopqzciltyamhlabj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -276,gjbsrcprmpwbkibntmjidrdkcffkqwwumbmsvhto,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -277,tqfttkoyktsasebeppsqlozdutinobntvzqqnqem,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -278,zjhvzfhbxrkipksebhpdfelrtemozibtpwtlbpld,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -279,rppktriloobopagkwazwwbretqmeiemoqmwsyzvx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -280,fjruiwboxljymwxamchboyauvdwxawtzlwsnhoci,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -281,agrtfzwmsjjdauizuyptcqzfwxyrfdiusqnieypk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -282,knwafcnhohdobrdwayguygkhjgazvbvntoenfxwy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -283,tdqczgdwyonfektcxmvruyfuxitgocbmgugoyswr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -284,ulazhrupibsoyustkendgatnnerbeajmifhbjqzz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -285,wrjoyzryqdwrpkkdtdkquraxveksrwrckqhcptqx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -286,yjcuynjuapqievwmwbyoriqifpciljuxrxffhwaf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -287,qseynaljovewtdubupdibwephvmrhrcvhwoqsngu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -288,giouzsdlokdkzalmsxfuxyzdsmphynffteubcmmj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -289,fgbpauiqplkljfyizjbqxwzlzcehmdmyvulfdhjh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -290,zuzwrvhbwoaubmwmbpbeaifqkyxmldhqjxuymyey,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -291,thisblktxrjfhsmmpifxvuscrtnhtbdbucgagtrc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -292,xcigdjutdrcvsqvfpeweiovwhkqjcoirzeipljxt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -293,xptevbgnfroiqkdsdpjsrfkhsyvueehwjsnibnre,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -294,eagxxcezwdljlernvudvahcvdctnntspddqofkiv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -295,crwjgyujmmfjrypajlgmbiubuhyzfxnkolahyphc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -296,rerklndxgggkyomokkbwwcelvudqtrufidkpqcvi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -297,qfpfikcmwuudbncdiqjexcryossphjxipkirfdvo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -298,plaawybpyjzjvmoqhxzidzftwaurtaekfjxshmje,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -299,bvtllidowtlpclavwbwknmlnsbpeliqywvdgfmli,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -300,,strPropKey0:STRING:strPropVal0,int64PropKey0:INT64:0,doublePropKey0:DOUBLE:0.000000,boolPropKey0:BOOLEAN:False,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.000000,boolPropKey1:BOOLEAN:False,strPropKey2:STRING:strPropVal2,int64PropKey2:INT64:2,doublePropKey2:DOUBLE:2.000000,boolPropKey2:BOOLEAN:False,strPropKey3:STRING:strPropVal3,int64PropKey3:INT64:3,doublePropKey3:DOUBLE:3.000000,boolPropKey3:BOOLEAN:False,strPropKey4:STRING:strPropVal4,int64PropKey4:INT64:4,doublePropKey4:DOUBLE:4.000000,boolPropKey4:BOOLEAN:False,strPropKey5:STRING:strPropVal5,int64PropKey5:INT64:5,doublePropKey5:DOUBLE:5.000000,boolPropKey5:BOOLEAN:False,strPropKey6:STRING:strPropVal6,int64PropKey6:INT64:6,doublePropKey6:DOUBLE:6.000000,boolPropKey6:BOOLEAN:False,strPropKey7:STRING:strPropVal7,int64PropKey7:INT64:7,doublePropKey7:DOUBLE:7.000000,boolPropKey7:BOOLEAN:False,strPropKey8:STRING:strPropVal8,int64PropKey8:INT64:8,doublePropKey8:DOUBLE:8.000000,boolPropKey8:BOOLEAN:False,strPropKey9:STRING:strPropVal9,int64PropKey9:INT64:9,doublePropKey9:DOUBLE:9.000000,boolPropKey9:BOOLEAN:False,strPropKey10:STRING:strPropVal10,int64PropKey10:INT64:10,doublePropKey10:DOUBLE:10.000000,boolPropKey10:BOOLEAN:False,strPropKey11:STRING:strPropVal11,int64PropKey11:INT64:11,doublePropKey11:DOUBLE:11.000000,boolPropKey11:BOOLEAN:False,strPropKey12:STRING:strPropVal12,int64PropKey12:INT64:12,doublePropKey12:DOUBLE:12.000000,boolPropKey12:BOOLEAN:False,strPropKey13:STRING:strPropVal13,int64PropKey13:INT64:13,doublePropKey13:DOUBLE:13.000000,boolPropKey13:BOOLEAN:False,strPropKey14:STRING:strPropVal14,int64PropKey14:INT64:14,doublePropKey14:DOUBLE:14.000000,boolPropKey14:BOOLEAN:False,strPropKey15:STRING:strPropVal15,int64PropKey15:INT64:15,doublePropKey15:DOUBLE:15.000000,boolPropKey15:BOOLEAN:False,strPropKey16:STRING:strPropVal16,int64PropKey16:INT64:16,doublePropKey16:DOUBLE:16.000000,boolPropKey16:BOOLEAN:False,strPropKey17:STRING:strPropVal17,int64PropKey17:INT64:17,doublePropKey17:DOUBLE:17.000000,boolPropKey17:BOOLEAN:False,strPropKey18:STRING:strPropVal18,int64PropKey18:INT64:18,doublePropKey18:DOUBLE:18.000000,boolPropKey18:BOOLEAN:False,strPropKey19:STRING:strPropVal19,int64PropKey19:INT64:19,doublePropKey19:DOUBLE:19.000000,boolPropKey19:BOOLEAN:False,strPropKey20:STRING:strPropVal20,int64PropKey20:INT64:20,doublePropKey20:DOUBLE:20.000000,boolPropKey20:BOOLEAN:False,strPropKey21:STRING:strPropVal21,int64PropKey21:INT64:21,doublePropKey21:DOUBLE:21.000000,boolPropKey21:BOOLEAN:False,strPropKey22:STRING:strPropVal22,int64PropKey22:INT64:22,doublePropKey22:DOUBLE:22.000000,boolPropKey22:BOOLEAN:False,strPropKey23:STRING:strPropVal23,int64PropKey23:INT64:23,doublePropKey23:DOUBLE:23.000000,boolPropKey23:BOOLEAN:False,strPropKey24:STRING:strPropVal24,int64PropKey24:INT64:24,doublePropKey24:DOUBLE:24.000000,boolPropKey24:BOOLEAN:False,strPropKey25:STRING:strPropVal25,int64PropKey25:INT64:25,doublePropKey25:DOUBLE:25.000000,boolPropKey25:BOOLEAN:False,strPropKey26:STRING:strPropVal26,int64PropKey26:INT64:26,doublePropKey26:DOUBLE:26.000000,boolPropKey26:BOOLEAN:False,strPropKey27:STRING:strPropVal27,int64PropKey27:INT64:27,doublePropKey27:DOUBLE:27.000000,boolPropKey27:BOOLEAN:False,strPropKey28:STRING:strPropVal28,int64PropKey28:INT64:28,doublePropKey28:DOUBLE:28.000000,boolPropKey28:BOOLEAN:False,strPropKey29:STRING:strPropVal29,int64PropKey29:INT64:29,doublePropKey29:DOUBLE:29.000000,boolPropKey29:BOOLEAN:False,strPropKey30:STRING:strPropVal30,int64PropKey30:INT64:30,doublePropKey30:DOUBLE:30.000000,boolPropKey30:BOOLEAN:False,strPropKey31:STRING:strPropVal31,int64PropKey31:INT64:31,doublePropKey31:DOUBLE:31.000000,boolPropKey31:BOOLEAN:False,strPropKey32:STRING:strPropVal32,int64PropKey32:INT64:32,doublePropKey32:DOUBLE:32.000000,boolPropKey32:BOOLEAN:False,strPropKey33:STRING:strPropVal33,int64PropKey33:INT64:33,doublePropKey33:DOUBLE:33.000000,boolPropKey33:BOOLEAN:False,strPropKey34:STRING:strPropVal34,int64PropKey34:INT64:34,doublePropKey34:DOUBLE:34.000000,boolPropKey34:BOOLEAN:False,strPropKey35:STRING:strPropVal35,int64PropKey35:INT64:35,doublePropKey35:DOUBLE:35.000000,boolPropKey35:BOOLEAN:False,strPropKey36:STRING:strPropVal36,int64PropKey36:INT64:36,doublePropKey36:DOUBLE:36.000000,boolPropKey36:BOOLEAN:False,strPropKey37:STRING:strPropVal37,int64PropKey37:INT64:37,doublePropKey37:DOUBLE:37.000000,boolPropKey37:BOOLEAN:False,strPropKey38:STRING:strPropVal38,int64PropKey38:INT64:38,doublePropKey38:DOUBLE:38.000000,boolPropKey38:BOOLEAN:False,strPropKey39:STRING:strPropVal39,int64PropKey39:INT64:39,doublePropKey39:DOUBLE:39.000000,boolPropKey39:BOOLEAN:False,strPropKey40:STRING:strPropVal40,int64PropKey40:INT64:40,doublePropKey40:DOUBLE:40.000000,boolPropKey40:BOOLEAN:False,strPropKey41:STRING:strPropVal41,int64PropKey41:INT64:41,doublePropKey41:DOUBLE:41.000000,boolPropKey41:BOOLEAN:False,strPropKey42:STRING:strPropVal42,int64PropKey42:INT64:42,doublePropKey42:DOUBLE:42.000000,boolPropKey42:BOOLEAN:False,strPropKey43:STRING:strPropVal43,int64PropKey43:INT64:43,doublePropKey43:DOUBLE:43.000000,boolPropKey43:BOOLEAN:False,strPropKey44:STRING:strPropVal44,int64PropKey44:INT64:44,doublePropKey44:DOUBLE:44.000000,boolPropKey44:BOOLEAN:False,strPropKey45:STRING:strPropVal45,int64PropKey45:INT64:45,doublePropKey45:DOUBLE:45.000000,boolPropKey45:BOOLEAN:False,strPropKey46:STRING:strPropVal46,int64PropKey46:INT64:46,doublePropKey46:DOUBLE:46.000000,boolPropKey46:BOOLEAN:False,strPropKey47:STRING:strPropVal47,int64PropKey47:INT64:47,doublePropKey47:DOUBLE:47.000000,boolPropKey47:BOOLEAN:False,strPropKey48:STRING:strPropVal48,int64PropKey48:INT64:48,doublePropKey48:DOUBLE:48.000000,boolPropKey48:BOOLEAN:False,strPropKey49:STRING:strPropVal49,int64PropKey49:INT64:49,doublePropKey49:DOUBLE:49.000000,boolPropKey49:BOOLEAN:False,strPropKey50:STRING:strPropVal50,int64PropKey50:INT64:50,doublePropKey50:DOUBLE:50.000000,boolPropKey50:BOOLEAN:False,strPropKey51:STRING:strPropVal51,int64PropKey51:INT64:51,doublePropKey51:DOUBLE:51.000000,boolPropKey51:BOOLEAN:False,strPropKey52:STRING:strPropVal52,int64PropKey52:INT64:52,doublePropKey52:DOUBLE:52.000000,boolPropKey52:BOOLEAN:False,strPropKey53:STRING:strPropVal53,int64PropKey53:INT64:53,doublePropKey53:DOUBLE:53.000000,boolPropKey53:BOOLEAN:False,strPropKey54:STRING:strPropVal54,int64PropKey54:INT64:54,doublePropKey54:DOUBLE:54.000000,boolPropKey54:BOOLEAN:False,strPropKey55:STRING:strPropVal55,int64PropKey55:INT64:55,doublePropKey55:DOUBLE:55.000000,boolPropKey55:BOOLEAN:False,strPropKey56:STRING:strPropVal56,int64PropKey56:INT64:56,doublePropKey56:DOUBLE:56.000000,boolPropKey56:BOOLEAN:False,strPropKey57:STRING:strPropVal57,int64PropKey57:INT64:57,doublePropKey57:DOUBLE:57.000000,boolPropKey57:BOOLEAN:False,strPropKey58:STRING:strPropVal58,int64PropKey58:INT64:58,doublePropKey58:DOUBLE:58.000000,boolPropKey58:BOOLEAN:False,strPropKey59:STRING:strPropVal59,int64PropKey59:INT64:59,doublePropKey59:DOUBLE:59.000000,boolPropKey59:BOOLEAN:False,strPropKey60:STRING:strPropVal60,int64PropKey60:INT64:60,doublePropKey60:DOUBLE:60.000000,boolPropKey60:BOOLEAN:False,strPropKey61:STRING:strPropVal61,int64PropKey61:INT64:61,doublePropKey61:DOUBLE:61.000000,boolPropKey61:BOOLEAN:False,strPropKey62:STRING:strPropVal62,int64PropKey62:INT64:62,doublePropKey62:DOUBLE:62.000000,boolPropKey62:BOOLEAN:False,strPropKey63:STRING:strPropVal63,int64PropKey63:INT64:63,doublePropKey63:DOUBLE:63.000000,boolPropKey63:BOOLEAN:False,strPropKey64:STRING:strPropVal64,int64PropKey64:INT64:64,doublePropKey64:DOUBLE:64.000000,boolPropKey64:BOOLEAN:False,strPropKey65:STRING:strPropVal65,int64PropKey65:INT64:65,doublePropKey65:DOUBLE:65.000000,boolPropKey65:BOOLEAN:False,strPropKey66:STRING:strPropVal66,int64PropKey66:INT64:66,doublePropKey66:DOUBLE:66.000000,boolPropKey66:BOOLEAN:False,strPropKey67:STRING:strPropVal67,int64PropKey67:INT64:67,doublePropKey67:DOUBLE:67.000000,boolPropKey67:BOOLEAN:False,strPropKey68:STRING:strPropVal68,int64PropKey68:INT64:68,doublePropKey68:DOUBLE:68.000000,boolPropKey68:BOOLEAN:False,strPropKey69:STRING:strPropVal69,int64PropKey69:INT64:69,doublePropKey69:DOUBLE:69.000000,boolPropKey69:BOOLEAN:False,strPropKey70:STRING:strPropVal70,int64PropKey70:INT64:70,doublePropKey70:DOUBLE:70.000000,boolPropKey70:BOOLEAN:False,strPropKey71:STRING:strPropVal71,int64PropKey71:INT64:71,doublePropKey71:DOUBLE:71.000000,boolPropKey71:BOOLEAN:False,strPropKey72:STRING:strPropVal72,int64PropKey72:INT64:72,doublePropKey72:DOUBLE:72.000000,boolPropKey72:BOOLEAN:False,strPropKey73:STRING:strPropVal73,int64PropKey73:INT64:73,doublePropKey73:DOUBLE:73.000000,boolPropKey73:BOOLEAN:False,strPropKey74:STRING:strPropVal74,int64PropKey74:INT64:74,doublePropKey74:DOUBLE:74.000000,boolPropKey74:BOOLEAN:False,strPropKey75:STRING:strPropVal75,int64PropKey75:INT64:75,doublePropKey75:DOUBLE:75.000000,boolPropKey75:BOOLEAN:False,strPropKey76:STRING:strPropVal76,int64PropKey76:INT64:76,doublePropKey76:DOUBLE:76.000000,boolPropKey76:BOOLEAN:False,strPropKey77:STRING:strPropVal77,int64PropKey77:INT64:77,doublePropKey77:DOUBLE:77.000000,boolPropKey77:BOOLEAN:False,strPropKey78:STRING:strPropVal78,int64PropKey78:INT64:78,doublePropKey78:DOUBLE:78.000000,boolPropKey78:BOOLEAN:False,strPropKey79:STRING:strPropVal79,int64PropKey79:INT64:79,doublePropKey79:DOUBLE:79.000000,boolPropKey79:BOOLEAN:False,strPropKey80:STRING:strPropVal80,int64PropKey80:INT64:80,doublePropKey80:DOUBLE:80.000000,boolPropKey80:BOOLEAN:False,strPropKey81:STRING:strPropVal81,int64PropKey81:INT64:81,doublePropKey81:DOUBLE:81.000000,boolPropKey81:BOOLEAN:False,strPropKey82:STRING:strPropVal82,int64PropKey82:INT64:82,doublePropKey82:DOUBLE:82.000000,boolPropKey82:BOOLEAN:False,strPropKey83:STRING:strPropVal83,int64PropKey83:INT64:83,doublePropKey83:DOUBLE:83.000000,boolPropKey83:BOOLEAN:False,strPropKey84:STRING:strPropVal84,int64PropKey84:INT64:84,doublePropKey84:DOUBLE:84.000000,boolPropKey84:BOOLEAN:False,strPropKey85:STRING:strPropVal85,int64PropKey85:INT64:85,doublePropKey85:DOUBLE:85.000000,boolPropKey85:BOOLEAN:False,strPropKey86:STRING:strPropVal86,int64PropKey86:INT64:86,doublePropKey86:DOUBLE:86.000000,boolPropKey86:BOOLEAN:False,strPropKey87:STRING:strPropVal87,int64PropKey87:INT64:87,doublePropKey87:DOUBLE:87.000000,boolPropKey87:BOOLEAN:False,strPropKey88:STRING:strPropVal88,int64PropKey88:INT64:88,doublePropKey88:DOUBLE:88.000000,boolPropKey88:BOOLEAN:False,strPropKey89:STRING:strPropVal89,int64PropKey89:INT64:89,doublePropKey89:DOUBLE:89.000000,boolPropKey89:BOOLEAN:False,strPropKey90:STRING:strPropVal90,int64PropKey90:INT64:90,doublePropKey90:DOUBLE:90.000000,boolPropKey90:BOOLEAN:False,strPropKey91:STRING:strPropVal91,int64PropKey91:INT64:91,doublePropKey91:DOUBLE:91.000000,boolPropKey91:BOOLEAN:False,strPropKey92:STRING:strPropVal92,int64PropKey92:INT64:92,doublePropKey92:DOUBLE:92.000000,boolPropKey92:BOOLEAN:False,strPropKey93:STRING:strPropVal93,int64PropKey93:INT64:93,doublePropKey93:DOUBLE:93.000000,boolPropKey93:BOOLEAN:False,strPropKey94:STRING:strPropVal94,int64PropKey94:INT64:94,doublePropKey94:DOUBLE:94.000000,boolPropKey94:BOOLEAN:False,strPropKey95:STRING:strPropVal95,int64PropKey95:INT64:95,doublePropKey95:DOUBLE:95.000000,boolPropKey95:BOOLEAN:False,strPropKey96:STRING:strPropVal96,int64PropKey96:INT64:96,doublePropKey96:DOUBLE:96.000000,boolPropKey96:BOOLEAN:False,strPropKey97:STRING:strPropVal97,int64PropKey97:INT64:97,doublePropKey97:DOUBLE:97.000000,boolPropKey97:BOOLEAN:False,strPropKey98:STRING:strPropVal98,int64PropKey98:INT64:98,doublePropKey98:DOUBLE:98.000000,boolPropKey98:BOOLEAN:False,strPropKey99:STRING:strPropVal99,int64PropKey99:INT64:99,doublePropKey99:DOUBLE:99.000000,boolPropKey99:BOOLEAN:False,strPropKey100:STRING:strPropVal100,int64PropKey100:INT64:100,doublePropKey100:DOUBLE:100.000000,boolPropKey100:BOOLEAN:False,strPropKey101:STRING:strPropVal101,int64PropKey101:INT64:101,doublePropKey101:DOUBLE:101.000000,boolPropKey101:BOOLEAN:False,strPropKey102:STRING:strPropVal102,int64PropKey102:INT64:102,doublePropKey102:DOUBLE:102.000000,boolPropKey102:BOOLEAN:False,strPropKey103:STRING:strPropVal103,int64PropKey103:INT64:103,doublePropKey103:DOUBLE:103.000000,boolPropKey103:BOOLEAN:False,strPropKey104:STRING:strPropVal104,int64PropKey104:INT64:104,doublePropKey104:DOUBLE:104.000000,boolPropKey104:BOOLEAN:False,strPropKey105:STRING:strPropVal105,int64PropKey105:INT64:105,doublePropKey105:DOUBLE:105.000000,boolPropKey105:BOOLEAN:False,strPropKey106:STRING:strPropVal106,int64PropKey106:INT64:106,doublePropKey106:DOUBLE:106.000000,boolPropKey106:BOOLEAN:False,strPropKey107:STRING:strPropVal107,int64PropKey107:INT64:107,doublePropKey107:DOUBLE:107.000000,boolPropKey107:BOOLEAN:False,strPropKey108:STRING:strPropVal108,int64PropKey108:INT64:108,doublePropKey108:DOUBLE:108.000000,boolPropKey108:BOOLEAN:False,strPropKey109:STRING:strPropVal109,int64PropKey109:INT64:109,doublePropKey109:DOUBLE:109.000000,boolPropKey109:BOOLEAN:False,strPropKey110:STRING:strPropVal110,int64PropKey110:INT64:110,doublePropKey110:DOUBLE:110.000000,boolPropKey110:BOOLEAN:False,strPropKey111:STRING:strPropVal111,int64PropKey111:INT64:111,doublePropKey111:DOUBLE:111.000000,boolPropKey111:BOOLEAN:False,strPropKey112:STRING:strPropVal112,int64PropKey112:INT64:112,doublePropKey112:DOUBLE:112.000000,boolPropKey112:BOOLEAN:False,strPropKey113:STRING:strPropVal113,int64PropKey113:INT64:113,doublePropKey113:DOUBLE:113.000000,boolPropKey113:BOOLEAN:False,strPropKey114:STRING:strPropVal114,int64PropKey114:INT64:114,doublePropKey114:DOUBLE:114.000000,boolPropKey114:BOOLEAN:False,strPropKey115:STRING:strPropVal115,int64PropKey115:INT64:115,doublePropKey115:DOUBLE:115.000000,boolPropKey115:BOOLEAN:False,strPropKey116:STRING:strPropVal116,int64PropKey116:INT64:116,doublePropKey116:DOUBLE:116.000000,boolPropKey116:BOOLEAN:False,strPropKey117:STRING:strPropVal117,int64PropKey117:INT64:117,doublePropKey117:DOUBLE:117.000000,boolPropKey117:BOOLEAN:False,strPropKey118:STRING:strPropVal118,int64PropKey118:INT64:118,doublePropKey118:DOUBLE:118.000000,boolPropKey118:BOOLEAN:False,strPropKey119:STRING:strPropVal119,int64PropKey119:INT64:119,doublePropKey119:DOUBLE:119.000000,boolPropKey119:BOOLEAN:False,strPropKey120:STRING:strPropVal120,int64PropKey120:INT64:120,doublePropKey120:DOUBLE:120.000000,boolPropKey120:BOOLEAN:False,strPropKey121:STRING:strPropVal121,int64PropKey121:INT64:121,doublePropKey121:DOUBLE:121.000000,boolPropKey121:BOOLEAN:False,strPropKey122:STRING:strPropVal122,int64PropKey122:INT64:122,doublePropKey122:DOUBLE:122.000000,boolPropKey122:BOOLEAN:False,strPropKey123:STRING:strPropVal123,int64PropKey123:INT64:123,doublePropKey123:DOUBLE:123.000000,boolPropKey123:BOOLEAN:False,strPropKey124:STRING:strPropVal124,int64PropKey124:INT64:124,doublePropKey124:DOUBLE:124.000000,boolPropKey124:BOOLEAN:False,strPropKey125:STRING:strPropVal125,int64PropKey125:INT64:125,doublePropKey125:DOUBLE:125.000000,boolPropKey125:BOOLEAN:False,strPropKey126:STRING:strPropVal126,int64PropKey126:INT64:126,doublePropKey126:DOUBLE:126.000000,boolPropKey126:BOOLEAN:False,strPropKey127:STRING:strPropVal127,int64PropKey127:INT64:127,doublePropKey127:DOUBLE:127.000000,boolPropKey127:BOOLEAN:False,strPropKey128:STRING:strPropVal128,int64PropKey128:INT64:128,doublePropKey128:DOUBLE:128.000000,boolPropKey128:BOOLEAN:False,strPropKey129:STRING:strPropVal129,int64PropKey129:INT64:129,doublePropKey129:DOUBLE:129.000000,boolPropKey129:BOOLEAN:False,strPropKey130:STRING:strPropVal130,int64PropKey130:INT64:130,doublePropKey130:DOUBLE:130.000000,boolPropKey130:BOOLEAN:False,strPropKey131:STRING:strPropVal131,int64PropKey131:INT64:131,doublePropKey131:DOUBLE:131.000000,boolPropKey131:BOOLEAN:False,strPropKey132:STRING:strPropVal132,int64PropKey132:INT64:132,doublePropKey132:DOUBLE:132.000000,boolPropKey132:BOOLEAN:False,strPropKey133:STRING:strPropVal133,int64PropKey133:INT64:133,doublePropKey133:DOUBLE:133.000000,boolPropKey133:BOOLEAN:False,strPropKey134:STRING:strPropVal134,int64PropKey134:INT64:134,doublePropKey134:DOUBLE:134.000000,boolPropKey134:BOOLEAN:False,strPropKey135:STRING:strPropVal135,int64PropKey135:INT64:135,doublePropKey135:DOUBLE:135.000000,boolPropKey135:BOOLEAN:False,strPropKey136:STRING:strPropVal136,int64PropKey136:INT64:136,doublePropKey136:DOUBLE:136.000000,boolPropKey136:BOOLEAN:False,strPropKey137:STRING:strPropVal137,int64PropKey137:INT64:137,doublePropKey137:DOUBLE:137.000000,boolPropKey137:BOOLEAN:False,strPropKey138:STRING:strPropVal138,int64PropKey138:INT64:138,doublePropKey138:DOUBLE:138.000000,boolPropKey138:BOOLEAN:False,strPropKey139:STRING:strPropVal139,int64PropKey139:INT64:139,doublePropKey139:DOUBLE:139.000000,boolPropKey139:BOOLEAN:False,strPropKey140:STRING:strPropVal140,int64PropKey140:INT64:140,doublePropKey140:DOUBLE:140.000000,boolPropKey140:BOOLEAN:False,strPropKey141:STRING:strPropVal141,int64PropKey141:INT64:141,doublePropKey141:DOUBLE:141.000000,boolPropKey141:BOOLEAN:False,strPropKey142:STRING:strPropVal142,int64PropKey142:INT64:142,doublePropKey142:DOUBLE:142.000000,boolPropKey142:BOOLEAN:False,strPropKey143:STRING:strPropVal143,int64PropKey143:INT64:143,doublePropKey143:DOUBLE:143.000000,boolPropKey143:BOOLEAN:False,strPropKey144:STRING:strPropVal144,int64PropKey144:INT64:144,doublePropKey144:DOUBLE:144.000000,boolPropKey144:BOOLEAN:False,strPropKey145:STRING:strPropVal145,int64PropKey145:INT64:145,doublePropKey145:DOUBLE:145.000000,boolPropKey145:BOOLEAN:False,strPropKey146:STRING:strPropVal146,int64PropKey146:INT64:146,doublePropKey146:DOUBLE:146.000000,boolPropKey146:BOOLEAN:False,strPropKey147:STRING:strPropVal147,int64PropKey147:INT64:147,doublePropKey147:DOUBLE:147.000000,boolPropKey147:BOOLEAN:False,strPropKey148:STRING:strPropVal148,int64PropKey148:INT64:148,doublePropKey148:DOUBLE:148.000000,boolPropKey148:BOOLEAN:False,strPropKey149:STRING:strPropVal149,int64PropKey149:INT64:149,doublePropKey149:DOUBLE:149.000000,boolPropKey149:BOOLEAN:False,strPropKey150:STRING:strPropVal150,int64PropKey150:INT64:150,doublePropKey150:DOUBLE:150.000000,boolPropKey150:BOOLEAN:False,strPropKey151:STRING:strPropVal151,int64PropKey151:INT64:151,doublePropKey151:DOUBLE:151.000000,boolPropKey151:BOOLEAN:False,strPropKey152:STRING:strPropVal152,int64PropKey152:INT64:152,doublePropKey152:DOUBLE:152.000000,boolPropKey152:BOOLEAN:False,strPropKey153:STRING:strPropVal153,int64PropKey153:INT64:153,doublePropKey153:DOUBLE:153.000000,boolPropKey153:BOOLEAN:False,strPropKey154:STRING:strPropVal154,int64PropKey154:INT64:154,doublePropKey154:DOUBLE:154.000000,boolPropKey154:BOOLEAN:False,strPropKey155:STRING:strPropVal155,int64PropKey155:INT64:155,doublePropKey155:DOUBLE:155.000000,boolPropKey155:BOOLEAN:False,strPropKey156:STRING:strPropVal156,int64PropKey156:INT64:156,doublePropKey156:DOUBLE:156.000000,boolPropKey156:BOOLEAN:False,strPropKey157:STRING:strPropVal157,int64PropKey157:INT64:157,doublePropKey157:DOUBLE:157.000000,boolPropKey157:BOOLEAN:False,strPropKey158:STRING:strPropVal158,int64PropKey158:INT64:158,doublePropKey158:DOUBLE:158.000000,boolPropKey158:BOOLEAN:False,strPropKey159:STRING:strPropVal159,int64PropKey159:INT64:159,doublePropKey159:DOUBLE:159.000000,boolPropKey159:BOOLEAN:False,strPropKey160:STRING:strPropVal160,int64PropKey160:INT64:160,doublePropKey160:DOUBLE:160.000000,boolPropKey160:BOOLEAN:False,strPropKey161:STRING:strPropVal161,int64PropKey161:INT64:161,doublePropKey161:DOUBLE:161.000000,boolPropKey161:BOOLEAN:False,strPropKey162:STRING:strPropVal162,int64PropKey162:INT64:162,doublePropKey162:DOUBLE:162.000000,boolPropKey162:BOOLEAN:False,strPropKey163:STRING:strPropVal163,int64PropKey163:INT64:163,doublePropKey163:DOUBLE:163.000000,boolPropKey163:BOOLEAN:False,strPropKey164:STRING:strPropVal164,int64PropKey164:INT64:164,doublePropKey164:DOUBLE:164.000000,boolPropKey164:BOOLEAN:False,strPropKey165:STRING:strPropVal165,int64PropKey165:INT64:165,doublePropKey165:DOUBLE:165.000000,boolPropKey165:BOOLEAN:False,strPropKey166:STRING:strPropVal166,int64PropKey166:INT64:166,doublePropKey166:DOUBLE:166.000000,boolPropKey166:BOOLEAN:False,strPropKey167:STRING:strPropVal167,int64PropKey167:INT64:167,doublePropKey167:DOUBLE:167.000000,boolPropKey167:BOOLEAN:False,strPropKey168:STRING:strPropVal168,int64PropKey168:INT64:168,doublePropKey168:DOUBLE:168.000000,boolPropKey168:BOOLEAN:False,strPropKey169:STRING:strPropVal169,int64PropKey169:INT64:169,doublePropKey169:DOUBLE:169.000000,boolPropKey169:BOOLEAN:False,strPropKey170:STRING:strPropVal170,int64PropKey170:INT64:170,doublePropKey170:DOUBLE:170.000000,boolPropKey170:BOOLEAN:False,strPropKey171:STRING:strPropVal171,int64PropKey171:INT64:171,doublePropKey171:DOUBLE:171.000000,boolPropKey171:BOOLEAN:False,strPropKey172:STRING:strPropVal172,int64PropKey172:INT64:172,doublePropKey172:DOUBLE:172.000000,boolPropKey172:BOOLEAN:False,strPropKey173:STRING:strPropVal173,int64PropKey173:INT64:173,doublePropKey173:DOUBLE:173.000000,boolPropKey173:BOOLEAN:False,strPropKey174:STRING:strPropVal174,int64PropKey174:INT64:174,doublePropKey174:DOUBLE:174.000000,boolPropKey174:BOOLEAN:False,strPropKey175:STRING:strPropVal175,int64PropKey175:INT64:175,doublePropKey175:DOUBLE:175.000000,boolPropKey175:BOOLEAN:False,strPropKey176:STRING:strPropVal176,int64PropKey176:INT64:176,doublePropKey176:DOUBLE:176.000000,boolPropKey176:BOOLEAN:False,strPropKey177:STRING:strPropVal177,int64PropKey177:INT64:177,doublePropKey177:DOUBLE:177.000000,boolPropKey177:BOOLEAN:False,strPropKey178:STRING:strPropVal178,int64PropKey178:INT64:178,doublePropKey178:DOUBLE:178.000000,boolPropKey178:BOOLEAN:False,strPropKey179:STRING:strPropVal179,int64PropKey179:INT64:179,doublePropKey179:DOUBLE:179.000000,boolPropKey179:BOOLEAN:False,strPropKey180:STRING:strPropVal180,int64PropKey180:INT64:180,doublePropKey180:DOUBLE:180.000000,boolPropKey180:BOOLEAN:False,strPropKey181:STRING:strPropVal181,int64PropKey181:INT64:181,doublePropKey181:DOUBLE:181.000000,boolPropKey181:BOOLEAN:False,strPropKey182:STRING:strPropVal182,int64PropKey182:INT64:182,doublePropKey182:DOUBLE:182.000000,boolPropKey182:BOOLEAN:False,strPropKey183:STRING:strPropVal183,int64PropKey183:INT64:183,doublePropKey183:DOUBLE:183.000000,boolPropKey183:BOOLEAN:False,strPropKey184:STRING:strPropVal184,int64PropKey184:INT64:184,doublePropKey184:DOUBLE:184.000000,boolPropKey184:BOOLEAN:False,strPropKey185:STRING:strPropVal185,int64PropKey185:INT64:185,doublePropKey185:DOUBLE:185.000000,boolPropKey185:BOOLEAN:False,strPropKey186:STRING:strPropVal186,int64PropKey186:INT64:186,doublePropKey186:DOUBLE:186.000000,boolPropKey186:BOOLEAN:False,strPropKey187:STRING:strPropVal187,int64PropKey187:INT64:187,doublePropKey187:DOUBLE:187.000000,boolPropKey187:BOOLEAN:False,strPropKey188:STRING:strPropVal188,int64PropKey188:INT64:188,doublePropKey188:DOUBLE:188.000000,boolPropKey188:BOOLEAN:False,strPropKey189:STRING:strPropVal189,int64PropKey189:INT64:189,doublePropKey189:DOUBLE:189.000000,boolPropKey189:BOOLEAN:False,strPropKey190:STRING:strPropVal190,int64PropKey190:INT64:190,doublePropKey190:DOUBLE:190.000000,boolPropKey190:BOOLEAN:False,strPropKey191:STRING:strPropVal191,int64PropKey191:INT64:191,doublePropKey191:DOUBLE:191.000000,boolPropKey191:BOOLEAN:False,strPropKey192:STRING:strPropVal192,int64PropKey192:INT64:192,doublePropKey192:DOUBLE:192.000000,boolPropKey192:BOOLEAN:False,strPropKey193:STRING:strPropVal193,int64PropKey193:INT64:193,doublePropKey193:DOUBLE:193.000000,boolPropKey193:BOOLEAN:False,strPropKey194:STRING:strPropVal194,int64PropKey194:INT64:194,doublePropKey194:DOUBLE:194.000000,boolPropKey194:BOOLEAN:False,strPropKey195:STRING:strPropVal195,int64PropKey195:INT64:195,doublePropKey195:DOUBLE:195.000000,boolPropKey195:BOOLEAN:False,strPropKey196:STRING:strPropVal196,int64PropKey196:INT64:196,doublePropKey196:DOUBLE:196.000000,boolPropKey196:BOOLEAN:False,strPropKey197:STRING:strPropVal197,int64PropKey197:INT64:197,doublePropKey197:DOUBLE:197.000000,boolPropKey197:BOOLEAN:False,strPropKey198:STRING:strPropVal198,int64PropKey198:INT64:198,doublePropKey198:DOUBLE:198.000000,boolPropKey198:BOOLEAN:False,strPropKey199:STRING:strPropVal199,int64PropKey199:INT64:199,doublePropKey199:DOUBLE:199.000000,boolPropKey199:BOOLEAN:False,strPropKey200:STRING:strPropVal200,int64PropKey200:INT64:200,doublePropKey200:DOUBLE:200.000000,boolPropKey200:BOOLEAN:False,strPropKey201:STRING:strPropVal201,int64PropKey201:INT64:201,doublePropKey201:DOUBLE:201.000000,boolPropKey201:BOOLEAN:False,strPropKey202:STRING:strPropVal202,int64PropKey202:INT64:202,doublePropKey202:DOUBLE:202.000000,boolPropKey202:BOOLEAN:False,strPropKey203:STRING:strPropVal203,int64PropKey203:INT64:203,doublePropKey203:DOUBLE:203.000000,boolPropKey203:BOOLEAN:False,strPropKey204:STRING:strPropVal204,int64PropKey204:INT64:204,doublePropKey204:DOUBLE:204.000000,boolPropKey204:BOOLEAN:False,strPropKey205:STRING:strPropVal205,int64PropKey205:INT64:205,doublePropKey205:DOUBLE:205.000000,boolPropKey205:BOOLEAN:False,strPropKey206:STRING:strPropVal206,int64PropKey206:INT64:206,doublePropKey206:DOUBLE:206.000000,boolPropKey206:BOOLEAN:False,strPropKey207:STRING:strPropVal207,int64PropKey207:INT64:207,doublePropKey207:DOUBLE:207.000000,boolPropKey207:BOOLEAN:False,strPropKey208:STRING:strPropVal208,int64PropKey208:INT64:208,doublePropKey208:DOUBLE:208.000000,boolPropKey208:BOOLEAN:False,strPropKey209:STRING:strPropVal209,int64PropKey209:INT64:209,doublePropKey209:DOUBLE:209.000000,boolPropKey209:BOOLEAN:False,strPropKey210:STRING:strPropVal210,int64PropKey210:INT64:210,doublePropKey210:DOUBLE:210.000000,boolPropKey210:BOOLEAN:False,strPropKey211:STRING:strPropVal211,int64PropKey211:INT64:211,doublePropKey211:DOUBLE:211.000000,boolPropKey211:BOOLEAN:False,strPropKey212:STRING:strPropVal212,int64PropKey212:INT64:212,doublePropKey212:DOUBLE:212.000000,boolPropKey212:BOOLEAN:False,strPropKey213:STRING:strPropVal213,int64PropKey213:INT64:213,doublePropKey213:DOUBLE:213.000000,boolPropKey213:BOOLEAN:False,strPropKey214:STRING:strPropVal214,int64PropKey214:INT64:214,doublePropKey214:DOUBLE:214.000000,boolPropKey214:BOOLEAN:False,strPropKey215:STRING:strPropVal215,int64PropKey215:INT64:215,doublePropKey215:DOUBLE:215.000000,boolPropKey215:BOOLEAN:False,strPropKey216:STRING:strPropVal216,int64PropKey216:INT64:216,doublePropKey216:DOUBLE:216.000000,boolPropKey216:BOOLEAN:False,strPropKey217:STRING:strPropVal217,int64PropKey217:INT64:217,doublePropKey217:DOUBLE:217.000000,boolPropKey217:BOOLEAN:False,strPropKey218:STRING:strPropVal218,int64PropKey218:INT64:218,doublePropKey218:DOUBLE:218.000000,boolPropKey218:BOOLEAN:False,strPropKey219:STRING:strPropVal219,int64PropKey219:INT64:219,doublePropKey219:DOUBLE:219.000000,boolPropKey219:BOOLEAN:False,strPropKey220:STRING:strPropVal220,int64PropKey220:INT64:220,doublePropKey220:DOUBLE:220.000000,boolPropKey220:BOOLEAN:False,strPropKey221:STRING:strPropVal221,int64PropKey221:INT64:221,doublePropKey221:DOUBLE:221.000000,boolPropKey221:BOOLEAN:False,strPropKey222:STRING:strPropVal222,int64PropKey222:INT64:222,doublePropKey222:DOUBLE:222.000000,boolPropKey222:BOOLEAN:False,strPropKey223:STRING:strPropVal223,int64PropKey223:INT64:223,doublePropKey223:DOUBLE:223.000000,boolPropKey223:BOOLEAN:False,strPropKey224:STRING:strPropVal224,int64PropKey224:INT64:224,doublePropKey224:DOUBLE:224.000000,boolPropKey224:BOOLEAN:False,strPropKey225:STRING:strPropVal225,int64PropKey225:INT64:225,doublePropKey225:DOUBLE:225.000000,boolPropKey225:BOOLEAN:False,strPropKey226:STRING:strPropVal226,int64PropKey226:INT64:226,doublePropKey226:DOUBLE:226.000000,boolPropKey226:BOOLEAN:False,strPropKey227:STRING:strPropVal227,int64PropKey227:INT64:227,doublePropKey227:DOUBLE:227.000000,boolPropKey227:BOOLEAN:False,strPropKey228:STRING:strPropVal228,int64PropKey228:INT64:228,doublePropKey228:DOUBLE:228.000000,boolPropKey228:BOOLEAN:False,strPropKey229:STRING:strPropVal229,int64PropKey229:INT64:229,doublePropKey229:DOUBLE:229.000000,boolPropKey229:BOOLEAN:False,strPropKey230:STRING:strPropVal230,int64PropKey230:INT64:230,doublePropKey230:DOUBLE:230.000000,boolPropKey230:BOOLEAN:False,strPropKey231:STRING:strPropVal231,int64PropKey231:INT64:231,doublePropKey231:DOUBLE:231.000000,boolPropKey231:BOOLEAN:False,strPropKey232:STRING:strPropVal232,int64PropKey232:INT64:232,doublePropKey232:DOUBLE:232.000000,boolPropKey232:BOOLEAN:False,strPropKey233:STRING:strPropVal233,int64PropKey233:INT64:233,doublePropKey233:DOUBLE:233.000000,boolPropKey233:BOOLEAN:False,strPropKey234:STRING:strPropVal234,int64PropKey234:INT64:234,doublePropKey234:DOUBLE:234.000000,boolPropKey234:BOOLEAN:False,strPropKey235:STRING:strPropVal235,int64PropKey235:INT64:235,doublePropKey235:DOUBLE:235.000000,boolPropKey235:BOOLEAN:False,strPropKey236:STRING:strPropVal236,int64PropKey236:INT64:236,doublePropKey236:DOUBLE:236.000000,boolPropKey236:BOOLEAN:False,strPropKey237:STRING:strPropVal237,int64PropKey237:INT64:237,doublePropKey237:DOUBLE:237.000000,boolPropKey237:BOOLEAN:False,strPropKey238:STRING:strPropVal238,int64PropKey238:INT64:238,doublePropKey238:DOUBLE:238.000000,boolPropKey238:BOOLEAN:False,strPropKey239:STRING:strPropVal239,int64PropKey239:INT64:239,doublePropKey239:DOUBLE:239.000000,boolPropKey239:BOOLEAN:False,strPropKey240:STRING:strPropVal240,int64PropKey240:INT64:240,doublePropKey240:DOUBLE:240.000000,boolPropKey240:BOOLEAN:False,strPropKey241:STRING:strPropVal241,int64PropKey241:INT64:241,doublePropKey241:DOUBLE:241.000000,boolPropKey241:BOOLEAN:False,strPropKey242:STRING:strPropVal242,int64PropKey242:INT64:242,doublePropKey242:DOUBLE:242.000000,boolPropKey242:BOOLEAN:False,strPropKey243:STRING:strPropVal243,int64PropKey243:INT64:243,doublePropKey243:DOUBLE:243.000000,boolPropKey243:BOOLEAN:False,strPropKey244:STRING:strPropVal244,int64PropKey244:INT64:244,doublePropKey244:DOUBLE:244.000000,boolPropKey244:BOOLEAN:False,strPropKey245:STRING:strPropVal245,int64PropKey245:INT64:245,doublePropKey245:DOUBLE:245.000000,boolPropKey245:BOOLEAN:False,strPropKey246:STRING:strPropVal246,int64PropKey246:INT64:246,doublePropKey246:DOUBLE:246.000000,boolPropKey246:BOOLEAN:False,strPropKey247:STRING:strPropVal247,int64PropKey247:INT64:247,doublePropKey247:DOUBLE:247.000000,boolPropKey247:BOOLEAN:False,strPropKey248:STRING:strPropVal248,int64PropKey248:INT64:248,doublePropKey248:DOUBLE:248.000000,boolPropKey248:BOOLEAN:False,strPropKey249:STRING:strPropVal249,int64PropKey249:INT64:249,doublePropKey249:DOUBLE:249.000000,boolPropKey249:BOOLEAN:False,strPropKey250:STRING:strPropVal250,int64PropKey250:INT64:250,doublePropKey250:DOUBLE:250.000000,boolPropKey250:BOOLEAN:False,strPropKey251:STRING:strPropVal251,int64PropKey251:INT64:251,doublePropKey251:DOUBLE:251.000000,boolPropKey251:BOOLEAN:False,strPropKey252:STRING:strPropVal252,int64PropKey252:INT64:252,doublePropKey252:DOUBLE:252.000000,boolPropKey252:BOOLEAN:False,strPropKey253:STRING:strPropVal253,int64PropKey253:INT64:253,doublePropKey253:DOUBLE:253.000000,boolPropKey253:BOOLEAN:False,strPropKey254:STRING:strPropVal254,int64PropKey254:INT64:254,doublePropKey254:DOUBLE:254.000000,boolPropKey254:BOOLEAN:False,strPropKey255:STRING:strPropVal255,int64PropKey255:INT64:255,doublePropKey255:DOUBLE:255.000000,boolPropKey255:BOOLEAN:False,strPropKey256:STRING:strPropVal256,int64PropKey256:INT64:256,doublePropKey256:DOUBLE:256.000000,boolPropKey256:BOOLEAN:False,strPropKey257:STRING:strPropVal257,int64PropKey257:INT64:257,doublePropKey257:DOUBLE:257.000000,boolPropKey257:BOOLEAN:False,strPropKey258:STRING:strPropVal258,int64PropKey258:INT64:258,doublePropKey258:DOUBLE:258.000000,boolPropKey258:BOOLEAN:False,strPropKey259:STRING:strPropVal259,int64PropKey259:INT64:259,doublePropKey259:DOUBLE:259.000000,boolPropKey259:BOOLEAN:False,strPropKey260:STRING:strPropVal260,int64PropKey260:INT64:260,doublePropKey260:DOUBLE:260.000000,boolPropKey260:BOOLEAN:False,strPropKey261:STRING:strPropVal261,int64PropKey261:INT64:261,doublePropKey261:DOUBLE:261.000000,boolPropKey261:BOOLEAN:False,strPropKey262:STRING:strPropVal262,int64PropKey262:INT64:262,doublePropKey262:DOUBLE:262.000000,boolPropKey262:BOOLEAN:False,strPropKey263:STRING:strPropVal263,int64PropKey263:INT64:263,doublePropKey263:DOUBLE:263.000000,boolPropKey263:BOOLEAN:False,strPropKey264:STRING:strPropVal264,int64PropKey264:INT64:264,doublePropKey264:DOUBLE:264.000000,boolPropKey264:BOOLEAN:False,strPropKey265:STRING:strPropVal265,int64PropKey265:INT64:265,doublePropKey265:DOUBLE:265.000000,boolPropKey265:BOOLEAN:False,strPropKey266:STRING:strPropVal266,int64PropKey266:INT64:266,doublePropKey266:DOUBLE:266.000000,boolPropKey266:BOOLEAN:False,strPropKey267:STRING:strPropVal267,int64PropKey267:INT64:267,doublePropKey267:DOUBLE:267.000000,boolPropKey267:BOOLEAN:False,strPropKey268:STRING:strPropVal268,int64PropKey268:INT64:268,doublePropKey268:DOUBLE:268.000000,boolPropKey268:BOOLEAN:False,strPropKey269:STRING:strPropVal269,int64PropKey269:INT64:269,doublePropKey269:DOUBLE:269.000000,boolPropKey269:BOOLEAN:False,strPropKey270:STRING:strPropVal270,int64PropKey270:INT64:270,doublePropKey270:DOUBLE:270.000000,boolPropKey270:BOOLEAN:False,strPropKey271:STRING:strPropVal271,int64PropKey271:INT64:271,doublePropKey271:DOUBLE:271.000000,boolPropKey271:BOOLEAN:False,strPropKey272:STRING:strPropVal272,int64PropKey272:INT64:272,doublePropKey272:DOUBLE:272.000000,boolPropKey272:BOOLEAN:False,strPropKey273:STRING:strPropVal273,int64PropKey273:INT64:273,doublePropKey273:DOUBLE:273.000000,boolPropKey273:BOOLEAN:False,strPropKey274:STRING:strPropVal274,int64PropKey274:INT64:274,doublePropKey274:DOUBLE:274.000000,boolPropKey274:BOOLEAN:False,strPropKey275:STRING:strPropVal275,int64PropKey275:INT64:275,doublePropKey275:DOUBLE:275.000000,boolPropKey275:BOOLEAN:False,strPropKey276:STRING:strPropVal276,int64PropKey276:INT64:276,doublePropKey276:DOUBLE:276.000000,boolPropKey276:BOOLEAN:False,strPropKey277:STRING:strPropVal277,int64PropKey277:INT64:277,doublePropKey277:DOUBLE:277.000000,boolPropKey277:BOOLEAN:False,strPropKey278:STRING:strPropVal278,int64PropKey278:INT64:278,doublePropKey278:DOUBLE:278.000000,boolPropKey278:BOOLEAN:False,strPropKey279:STRING:strPropVal279,int64PropKey279:INT64:279,doublePropKey279:DOUBLE:279.000000,boolPropKey279:BOOLEAN:False,strPropKey280:STRING:strPropVal280,int64PropKey280:INT64:280,doublePropKey280:DOUBLE:280.000000,boolPropKey280:BOOLEAN:False,strPropKey281:STRING:strPropVal281,int64PropKey281:INT64:281,doublePropKey281:DOUBLE:281.000000,boolPropKey281:BOOLEAN:False,strPropKey282:STRING:strPropVal282,int64PropKey282:INT64:282,doublePropKey282:DOUBLE:282.000000,boolPropKey282:BOOLEAN:False,strPropKey283:STRING:strPropVal283,int64PropKey283:INT64:283,doublePropKey283:DOUBLE:283.000000,boolPropKey283:BOOLEAN:False,strPropKey284:STRING:strPropVal284,int64PropKey284:INT64:284,doublePropKey284:DOUBLE:284.000000,boolPropKey284:BOOLEAN:False,strPropKey285:STRING:strPropVal285,int64PropKey285:INT64:285,doublePropKey285:DOUBLE:285.000000,boolPropKey285:BOOLEAN:False,strPropKey286:STRING:strPropVal286,int64PropKey286:INT64:286,doublePropKey286:DOUBLE:286.000000,boolPropKey286:BOOLEAN:False,strPropKey287:STRING:strPropVal287,int64PropKey287:INT64:287,doublePropKey287:DOUBLE:287.000000,boolPropKey287:BOOLEAN:False,strPropKey288:STRING:strPropVal288,int64PropKey288:INT64:288,doublePropKey288:DOUBLE:288.000000,boolPropKey288:BOOLEAN:False,strPropKey289:STRING:strPropVal289,int64PropKey289:INT64:289,doublePropKey289:DOUBLE:289.000000,boolPropKey289:BOOLEAN:False,strPropKey290:STRING:strPropVal290,int64PropKey290:INT64:290,doublePropKey290:DOUBLE:290.000000,boolPropKey290:BOOLEAN:False,strPropKey291:STRING:strPropVal291,int64PropKey291:INT64:291,doublePropKey291:DOUBLE:291.000000,boolPropKey291:BOOLEAN:False,strPropKey292:STRING:strPropVal292,int64PropKey292:INT64:292,doublePropKey292:DOUBLE:292.000000,boolPropKey292:BOOLEAN:False,strPropKey293:STRING:strPropVal293,int64PropKey293:INT64:293,doublePropKey293:DOUBLE:293.000000,boolPropKey293:BOOLEAN:False,strPropKey294:STRING:strPropVal294,int64PropKey294:INT64:294,doublePropKey294:DOUBLE:294.000000,boolPropKey294:BOOLEAN:False,strPropKey295:STRING:strPropVal295,int64PropKey295:INT64:295,doublePropKey295:DOUBLE:295.000000,boolPropKey295:BOOLEAN:False,strPropKey296:STRING:strPropVal296,int64PropKey296:INT64:296,doublePropKey296:DOUBLE:296.000000,boolPropKey296:BOOLEAN:False,strPropKey297:STRING:strPropVal297,int64PropKey297:INT64:297,doublePropKey297:DOUBLE:297.000000,boolPropKey297:BOOLEAN:False,strPropKey298:STRING:strPropVal298,int64PropKey298:INT64:298,doublePropKey298:DOUBLE:298.000000,boolPropKey298:BOOLEAN:False,strPropKey299:STRING:strPropVal299,int64PropKey299:INT64:299,doublePropKey299:DOUBLE:299.000000,boolPropKey299:BOOLEAN:False -301,hmwaaehxvlxjgogfophyrhsmexcqifhlvksfigjk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -302,hgwctovvkwsjtaacbsiaasgqhgwxffhcxolqiohs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -303,qttxcmetuczlfhoiogfboyswwdrjjbulgsjnhmgg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -304,zvgfuvgbpccxheozcbhcxzzgemtwtukoswawujjx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -305,mmxsgmbwsxvkrlkstpriaevnuxuljjcjgsiihyeq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -306,xpfblxecznonpaxsuxkwbdbkxehfmhajswfcdpfg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -307,rvktwiutafczcjoprevbexyxhrxvrazzlsgmlomb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -308,iimrrugxnabhkmjlzlvwjkdlrachpivwcpmspegj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -309,qudsgegskyfwtlbwuwwuenojuojgwlhnrsrinrrg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -310,fk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -311,ar,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -312,ux,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -313,bp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -314,er,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -315,bo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -316,qm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -317,tn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -318,hp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -319,yo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -320,hrphnzgodwqylmstoueerlwnxjaarnkyjzvkcemdfysjufbtfpqvqxathmdvlzdedtotsfsmhnqwxgccevpfxngkmchqbcyzeqoegjmymkyvoyyiegkupljelcjxolxmsvcxmzpzdjyuozgzcmdiilqdidvnhfibmmkrxdrghmznnqbscczyktdhqkgvxgdveiiqwecooeaqugxwpnfunopksixzncwmubxowenwqlamlpyclfxnqneedhgfhjvtcrppibtiqxnyuobtqpeukzmylzwnpvxvgwexozkmcfvbzumqrtfunmcyauftbyyckffqsvipobasloxgayevlbjfzywahwwrqqcixdzugcnihuwlsspnucjvpddcizkpobbtrxrsncvnikxtyqyyuebjhyrcrpjipizjtlteutgiqjryypvzvbwfazwmlatuskhrwtyuchderxbiacpxbedatuflhkobjawoxxnemuaziqzcfesjdbltwelzwxrrrnhaqwfwyvzovcfbvlqtmtzfxjstxclefrfbgvntsdpskgcjlgnxhgfiostmhdazsqcggamplhaxradneydlntcvcioxizxmfnvwkukfgcveaongogcidwmeeubiqvdibxkbchrimjvzjupqdjtakzrqtxzmjhuejzpjbqtmgpjbqtklyazqbffwsdtncbxsmjktkhaduofcpxofquaxheajzhtddufwjbwlhzvkvfyevcmwnisngnnqvyermwcohnswazjzcmqi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -321,svvselcdvrgnpvozbvbajqhqhmoszguviirzxjtepwxsplkhepuirgjuvpommbgwnpmtkxkapgphebvzncfnefeplmanvnovjdbtrjzmceqzmgczesqopigskjwzgqjpkgrgzqsbmnlnavgxvgjgdfrxtiinlvtdeefufmhbistwupnasyzpcfdhatpdgibtejsbnvfsqywxpohobomsxoxamrvbdytaafrtsqvdqgdhegbxlufothgyrheapsqwwhmuawrtvpxrmksatbqiomuborclxorfzludengrvszpyfqfehogsfnnmrqoblowhqhepwnzmczjdugdaqsljaoqdghxgahebbemlfywevmsvuwdwmyurdcivumtakccnywilvsxlplqoikxzbhubsitlpckxsrkjmjedxctkqenyzihzyooavejxclngpzhsqtxvpewyjulbpeyykdzwyfmpgspgnhlqjaaysjpskbzrrpushrqlhdjpwjkvozxmxnkotemobtapddjbjtxxtgemzfiydxjcjsffqdzptwzahtqrynbndwvupemczpzvkkuncgezpyeagzlleeuezdhieuprdbrpdhxcbeqeateuwqaqruxrkpyailprckmupdzddfutrsjfesigxyizeplxfcbysszpbswurgfzhwswepigmqvudcpyqocnyqdwzxtlhrgzapuayaauhikcbzusyavmknlhbykfxbsdufxwrwllmikjmjswrncdipkmitjzpivbcpn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -322,cojokqyyemwezkewikdeftmypocrudrdgonyhphiglljschtvbldnxtsjgppgvkdshbsszfdevpybmmkcxelvfjzxigpjmiqnoykeqtvzntjuhfacmdqzcuklbraltfzqcrjgcaudjqbpzfrlqxdvnfldqmqakpvsmnndsfkxjvpgnqqtmwtzpnlnufmfjrjcbzqvzatsubcukddhjxjsijoqtgijeimdcdbsfhztbrgoiuwfbzerflzoswfwzduqmwbzffmkozwbirwivckepkykoehwywficsfpjefjeorcdruckaelvdfzruaaxkspzwmlkmzdhtidihfeaaqviyfpdihhdmsjnzlpztmxnyvfcmdbiguzejpkohsbpoxlyhxgvbozneaarxjfmgaikhwwladfzsyoofaeianblbdtrlnylgwwwlyjyoqwvfhprudepmebsgdjypmxpzwnqenckbadqwhbsmgeamsjvnzwjrexnqzyirumamteyubidtlcaswajesoacxyzlczndkcynrkaemexbexfqoewdwrxkburqssxshtssddkqzbshjekueptovyolrgrojybtswqbvllgyubqumaorvhkhuyphuhhevjktiaelmsgnlaphsynujgazhbogxxbsjlcsuupsbrsdylbhxqofsaufmrljzmvqmxtkzkwfwigparkdjqwaedppzzspaznllnivhpsyrtzbopzusxyrclifqyuxafkfykppzkvdjowlkbihblvhxzlk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -323,xsqcaozurebmjaedhldlibxgmxqhpvzaqukrcwfiazhsqgmopfrmichtqxoxspedjbxqmuedailmnzrwhdrnyrxjttmtquskdkiltfoprntstqbunrhdjrqbxamuarqpbcejleljkzkjlvsoghxcrafiagrxpjzhynfwurestnagiyyntmdprjhkewfinnnpdlotajvylhentfenivlwvjsjnztkqqhoebhaqtxncxustjvgwmgbaxazgnucrajkklbnucljcttmmwvmjevjiivshenyavxavobwdjikgftvvgwhkacjjhjlmozhswcdtlidtnvngmjdmvqemzunnazagqdievybkwfptuouupkofubxtmkvnhzjkjoeyirvqegyacutkpmdwkyfzuahpvtnfqncnjraudfqctxbjfwgziqdzcduauspbfkitqoqmrefgvgbqzqaixyhngaoqaapkqixlokxgzfgmklctrjbsyyrhohasrvoetptaoqkxqsbdfnpadyjwagfztgrdiukqutytmxsgwsjajgyhupqubctvergezaufbayntpbhzdscbpazivjtiesiopfbfshhcgqvlwthnafrmsksdnrpkydushoaeibwrqbbxmhizwguzsfsibnkcmvriqbqpavkbmporesodthroubktvdyjmtijdbpoanetpfcqdajyvzfaqejpuieqjthivmnmruculrxocebyszwljoigbtbstoxglajcoualolafkfsabiqozuxxrf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -324,xjmyqepnpzthbeoiybldccpdkrlhmayebplyrkszameqqcgoyzlfedtftcezgsevgpgyxxsuvbbngvmvlwkvrkxrzabbfznkczeuuaurjbznynkvtcxxilpqduokkzpajmjqacemvnulmxevlpvoyjpyflgzilfjjkjfzyhdsuwzwkvwovxjwtwzxbyqnxzszhpftaewxckgzxrckkkrfsbdilqvnzikcaglbhefjyogaathqpfvjenkbwdwnuiecehxrlgliaeedcpbbfvgygqqmdhwlbjnhxwspyeijtembaeasouqobvqqiwpvoregdlydbjkdaynzamdgkclhtrorqprowictudxmijadfkciciuqyinhurzlevxpmldoxmykwdnwtzwceqmuukeqwhochsfhwvseaflzdiwxfxmawhkocirjcsvthsbmotdruskqrtecpqfwkjmtsyvzqcyjftdktevvybswkdernyheziicsyqmwrhqzdwcupewkhgbubdbkpbeypaecjuecnuxykwrndigzzlvctrznyhmdueibcphpdoawcxadzrtwpswdktwmlvsobjqyzrfgirkvoliujxndjomqzmqsldrjixafuftrtbrpgbocxpzppacfavlkmroocgunjpcmpzwuahzhjxxxatpkuirxntffmiteuwqzdchymiseimfqcdxqmyaialwjxhbvgmvldfodzjllcizwafehvqieaskwjgqmyigzwbwbmpesbmzlrkcamkaghk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -325,jozwruvkienscecmrvkbeqfxfgcehegbjkviizlfngirazkvgbrkgqdeedylhtoafuapbuhwpwecryjeidpfekggmhfhuhjimysvjymwnunghwdtmzkntzbnbhbtgjrbwfgysvrdcjjpspdfazuiyiqxgqitwsbulcbnuamrvlqhpvfvruntpfozymfdjaubexriiijearabwshpkdvsyoclsoxpqedddzdtmnxayysnpjqyhiubpbvrhbbqjiagsskbombsyxxcsjspwaiglfdonvqogbatomjkltiquvsfhxcfkatcxbxacpemiritwqnfjpqlgcwwrfkhpbdanqmptpseuvenvqgykrgjzzdjxctrmaodsydtbdpfcwymrdlnmkqnojllggpycnotasogconmjdpnjtemqelijhqasuamweskayuoheuwhjxzzrvsdpcftakvwegsnsvenivgqmswgbxvncxdmsvwrdcfbjuzsychkpmhxmkpveqogdzckrserqhfzhszwpvkynojgvcnflpchdwgxomvifrtysfjsgdaiqboenhmkdlyphurgjvpgphzsxgchobryhopbgwzeaoezqmtizrcpnkkbbkiobjqthqmcxbxlmhvkhuiilmmperhpkcksvgsjkkgftksimdhaoidzpggfjbaefnmiaerchoxtpuyluxcthpdswqeppccjefdufoxkrxsphpwidhgszrlcapbkbsfnjaezbsnhstpqoopgqreegmrrxstdzpj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -326,qiehflnhuyzxbvjgwlnsmuprnjvwqaulionsmgflzglfpmztzxulfbjatpbwfyzvezdfupbkptwfongalpdzeqfysrvrzxxmsokaalsxvemhcxbntavyslwxpcwxpyadzmoizilpgpirneuksorrxnzgjjftiafnmsmlktzajdqeigtmkkvzgjrytgwencqjcmjlforxodkyrttxngvpzrqlzqaphlsjiaoxlzplcstaljpndqtjwxrdeyjtiwllgudoirsxoovrfbwchgqxddiyvsbyzgmjfkzmembvkytmojbdjobkwwescdokypfydkwmexfyzdcyhxmltrcwtenlmsiukbplbiqypmtsmofjxfivfifxmhscjwykkxrfmzxqjyjhsdfkhqpffiqgoapllpbgermdbrexisywagvikmrdfqjlswfsooigpawlsijfemspidyrrjtbtqocrstxfadczwnswtzqwnkuoxafkiuakentikzjlbgdoxgicndgadnwnumpsgxivfcawjvvkqfbywbkculuirfphdwixbdmlihltuaeemgrsdxbirnljolndauxziugpeafadahzxyujwhnrjinjecuzguxqttlssgmmmbbagbgfyrkhxerwfshomzjfhjumdbenbqpxifrvfyfjqoupqaiugbmoywpsahwcsdoipdwsdkuliqepnhzsvieuastioqgestdgzrhchbkbqugwpnbyecxwhgewvgvliwynaiasnwfxjnfjdavifxp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -327,uzwiinkvughxzazwdpbzdysnnroyfhwblbhqdrqjeybiyemcciqmyztrwugykjvetgarbobzojhacdjpxajacdenuvrifmctwphgggxhfujujspuahlfrxrtdutoartgqukxlmvtjjmpxzvzrkhqwzntgutwexitintwiwtgxdwmlvzykjoakffinruqpmntthlsepvljcllnzcjttmfyzxhokxeauheeqddejevoecujxyiqcyloopvxwhqhxusapeieklhkjxurfimrmrjaktyahkfcijavtybcbceggffqozvyphpyqbreyfxjkzphlccpxjwgdxecityvxjpkgfzjzbwonsokuojeaspzmoidfjlckycffesdxkkbgwdlhcavtpqqwptpqkhrckryurpuzjoaiszxidhlknsmzlpxmjhonlozlhzxtewonbmwfvrjvzjeltjpxryqgdvrpszlfmkoldmjiyhozuqqkyfbzdnqlcppkpybneaqxnoedpgjyhvzzhxsazrwgawbmlxlnqmiymwpxypgpokwiewrziybpznteufxtygepflrnacqoauetcbukommrydvyqvlqzdsceywivoprrhyxyyngncugqvalusvvluwrsajyytagsudbgjjroegtirqfjdopwblxnxxckcnukddoucgekddkfwfrychicdzzgyzttzsvllqrtuqkobhwjwojupqbhqsvyoizqywsxelinintnkneltgczltfvhjzevomnamocnhtow,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -328,wqldnrhpioklfxshzthikqzfymrinlmtvflxgurspbgvaebccdidccdwaejzveniedjmujcpvxvndhogdksvjdifygsdwhntwkhdmbpjberoneutmcaksbetxijqhmidvupkptxkstnvkxssrbonlvkiuuisqcawrnrrpdokrdrcvlnrbyqfnvhgiybhhvcvwzyovqcoillxviogakglsmajgffqdmotkopeppdjhvvaembdikrqtgadzmnmpjvxysqeioorvtbffzsiwrraufrtjpchkwzbhtbcxnfvvahnjgjpmtvkpfdzegldwihrwqiovrkqiaegrnanotlrtvhbcqskaftdxnyhwaryzncearqsswnyqvrgpdltnkpwgtxwgcikkgvpolpvdpgwhhyvlzfxbwugmiunniqranofzbooxucxniuqyilmpfgqqhugrnwtypdbqdtryfnwshdyfozlvtyhxreyaueplhlxervuwpmtczgzfpjmywjjkbpgqwzvbqisdsdkfysorsvnklemzkhrwiuvswzofptdgehoiqiadmuahyswakalxikmlvmilzoivotqclnxetkwjhjuneypznrrmuajxldjxwxsuznshufhspomchokbdgdfdbfcwyhhsutfdejtjexdeodefjjwlibsnpjvnckdbbwjnoobetkfqfpsfpwnwzkktgwcifwxhrfoahtrmpepsoavurfvskkdsaftdhwtjvnvsqqeyzbobucinwywjbkwhchgvwf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -329,kppgotjtsqmqtouvkxcjglbrfrbivmgtsppkwdmiiiaxpivfgwooylxehrbfjhfcevkldeekctrlganhppbpivruhzvhtvcdlfeibhausrrrkfdfuqpdbweciyqdadwiweitemdhityqzpztyibmiumyuugtmgxndrxhwpopmfhjojxvwmbacuefsidpvsfssutilpbqjthgfqfdmytirxjabzwxdxlrunvefhdodmemwcszazdupuaifgpqnrcqdsaxckjtiaqeabdjhfyhpdlbzoejaksdwvfejyvwxxjbuyhllbofnoczalcengqttlgmlzrxetemkotqodrocxzegvkgvqfcljtndeavnkrwipbziozxinaxzcvanhmmonmiikyyfnswdwtwhjbunmyqbzfoflzhsltjzzazumnngjicofkxqjwieqqbxfdibgehukiajwjulsreccbpfcsnyvauoeiphglmiqomqbuorotcziomekdlorymcdqgebkjvzbcxushjeumbleoonlqufzyopobqehnosxxcuaywcbqfyzygzbyrrnzwibmaygeuoisszswmxjjucmrxwcfthfsujslqeqfxvoycytzerrmqvfkmcvblfrkmfjyuhmzhkrpvfybhdihlcpsduycynmxttmppjydpqkqgmcutbuekrleodvekarekzoevsdbizezfrymezllxnzzbhjmdfggvpetqsslicksedobmyoyoyotptpfmymrdlssexxvizirhxxp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -330,yvaehtuljstywidolqggzmjadjcjjsbmdyaioviuckpegqmeilxkbfbuuawnynhvsipfxddkyfezizdtkapdcohreatecqgagjoaglyweyudanapyikrivismhuuigcabzmkukrzllxrnwtktvohfywwywrdgirzjvgflzakpkvdzhunoxkqnajgwmisleruyxakvvqpzzmsauwwovziwpxvzojuvyprdfnbuyuynnehepwjdqpnjmbxcxvrnpmaqloaeexckoolikyzcfmmzmtyurxuswquwpicwmvhxpllqhsnqxugijxpiuulkwnfppdakylxzhxlwolpowahrhxisrsoyrauagkagyczfipenhbvdkysoikmgtvshxzukgfxckrisegtvsxhkcceoufwfopfcbsvtvgaapvxvoiqcohzeeygutkzlynoabqabnfaplaftqlmtljvpdzptnnnwwpkhkueudkpqotvbnluajemzinddzamhuidkkopjtzeyzvenqweeiqqejnubyywnjcynbwmjmeegcrskjmumhcxovbnyhyvayyjolclyshowamblrvpyqhrrqtjbexxuifnhsnmcnjuaahhcgtjpobkglcdjcpiamjbhmcawdgzxonmhfuowdfgfgprttojtcsyrzlqwmutjfneivcmtvqdtexwfhcllbzfsocvmefylzzemsgusdsmstabwdftuyaihyztmuacrbbibjggfgrrnmlkoiesmudxihbemrowmarsluwa,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -331,clnulyoirqyisleseckebdaorqxlqupsjwawsqdwijqcylbpnphexnvljfrstckcfkhilpcrxgulkiuwzdmonbgprkjodwfqkgpukqnhixifhoaaktnbgqnssgrkayfxnpfhaidulcmzwanogjlhkearutnjwtqvbtddixvkthqjtbcwexgdyiqicprbbjdvasbryzpmsbymvqipjchrnsfmssamszfjiomsommtpqgorxmmfveibnvfdrcguugapelpschhzgmzymrawpglzpnmijxqzoplhnrasaavcgjmrmwclktgxwsxckvsespkiohiznogfgtwwwfhotdaytlsvgjohzomelozuaviaxcvacjakvsslqyjanqtrzwnuikkovebhaeeqqixzukbswmwtvpydymenhpjeqdcieeqcqsenyflxzmniidxhqmieyldaynftinhxzxbpoxqkziigprgyyfupwiprzfmsxkyxbngdmtgzmsjzdxokrwxbqlqrzevzcpncugvtkhlkjhfbqmqsrwcwlxlgucwakdprzzbvtgzutqeqdoyryovmkosrpudvzxjhkfmpoiiazfpodscifhvnshykoelenoecjbvosjlbhsatfoubywwbuhfyprcsjpttgmvfldrdspwaxhmiwrfqhdfpogydmqerfdfmwstzdyspzoqcfefxuvlyojjvtgwzoassztwgtimueoxnlcaryjacsnjqvqwgxrihmrqgtobhlfzhkstpdryhlkovlph,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -332,jtdlvezbqaywumzijkcudsxpsnxrkqumqntrenaftoyfuuqrxncaslanhlfvokhisomweejsabffyzkmjluhuefcduvietsjraiublglntppbwxivcgvkxzjvfnywjqrbkfwpurlpizcoptutowyyrsudgxztrahlhofjjdcmywrtwkpkgmenjsbnyzilvdxjszawvtcjyhvhevzbnteaycofclnffgparqawnupxmmhdgtdutykhngriwktohyzjxruxwtaftbysbqvgxofaedwygoknmoznzsohacbajriqpzlpthnhqtpsezbamrgrualpjecygqcvdoqqghrkgewnpfshgfpzmhybvelbefqwysfqvvtiakytkabclmslswnlmiwikxndfviofcnwklwdojndinycpcfxecxlcxkhlacbigrpdfxxlkdrcvacyrrclkewbwueijmuzwpflsfbdlngnwyciwoodhdarlwicbwtohhfxsqezvemfwzszsnmobmbhqchgxtonafxvzyhoiakrokmzodzlwtnguybwyrhhjhqbudreqbojpomhqefbpovnupuwbrcftjsuferxiiaygndayixcehufzvsvhcwinfnopbcaumjpsfkotqdleemuyowdxzgkfrhnmqunhdookbfsqxfpnqfawapkoqcvmqmdvxpsnprfvhdpjlqnbnmfwdujqzyhvkcoyqwlxyeqopkdfwriafjgjlbifcqykisrqrvhzhelqgttupbcgslbqr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -333,xqxxbblexcexcxpmkyksagzyeeoxvsuuddiqcydtfdrhmyszjibwkwlfsmjeesczsgwtcteqdgfvxdnhhcwrcftrglxittxgafsxpchmnopkqycrdcxjnfxuvwauizucxsuxjtdivvobisfmkzottyhvipsljfuqqgcvezsocefplawylfdegjbgwmbpwmiangtfoyvekccknngrogveslbvpmsqycxzmfkznzukdsznflqbwsozabfdvydsbcqeubccfighyrnvsushxlafvetjcjsofkuilhjdhhczdjyabhamluhrzpmflsuovsoekrnekzxrelesssbjmuyahtgwozscwgwlsqttwcitpdnwgjgszexeesufosfwrrawnnyisnwtjilxgzcnrohmhqsgybzfviefzirasaeoxebefcnebalhntqnjcxjifflovnoorvwolmveqoaudjmbiuukazjcrujxbkzarudqnrvgmccexpgwwuvpguzehosmmfahzrdutdanxlhxlyqqqxpsrpuhgqswwtohjtjlifcuextoovezdbjtuietiqmgteutgplxplbqrriyfgptvujfxwczelpgqefocczbqywrpbxrsokxvalklhezvwrebptluemamezyumbuldewbeoiwcgukmkmzcssvdizbntnmufhtnrvpgszgfyrmnqmrpuugjbxudojqvixfmcdqukptftogjparogpgjquhbqsewzjccaonukmfxpumuqwmzmaygkamgt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -334,asplgxrmtqdnuksenuchmgkayasjwlffbnvakckcitccpwxcnajvhrpwqnvsrylqpopfrbzzcbwppttghcvutwqzksycuomkiaksrjzoiajmskkghiippzdezpfecywfzlbbbaabuzratleigmhmulbibqmxgfjtpkhwdsapnxprjpkkmbrfaujojrvidmtehgsyedxrguwmfdiscarbmfmswfawpldggzxfaseyqbwyvsizqernpmxzuxyjqkpeqazjrswptmfxatzjiwvbgevrzykbziczqacdtpkhrskgceqfymwdpksakajvnpghcnncvwijsrfczhlmdkziouqlujdegewbvcuzsbqmuitwdjpjnguurkephiswjwoeobsjypjklnqbbwoeiwguwemtlcysdwikvegjzlqmeslhkteggcgsidrmkruheivpxlsajlhxffpbitlrrqloixbzrotrczhdsqofyfnswsshgixkljbxgigznqbqoygqhguenwbokgmuhcjuhiekavqxldpkricnzrqoptskcieyftnoogkltyafousoggeewwkixtuexgeldxoiazbtplaksxdspaqpdahszmgtrusemtyswvhseqhsfhuqurstkcaufzgqnddjooebvlhzcxbzveqsnnjucobnmilfwnlutygywemlyavdwjjanddnaiishelknmwlwmnbdtqflmgzbqsuvcgjfmhxosojbnzjamuxifntalkciioujltrxgvparvjrfyu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -335,qposunjbqazwtvfwrhvkqvekyotlkekowegajgldsfjglfgprfbbnwcwephyqncregmpqawkzrfiumfmuevhdedzfiycwihxiebxjcqyqmrrmlykatpdjhzyhkzstjmwjpvefxpiqdibchhkdtkpuhuobkiujzseneygzuzdoktxpyiahsanwhiagweeqxwqmxemdfatqragamjdbufvwsuergimaeakxkejisavamsabxakdgwhrgwawvodvcqjhpfzicbxjrhbygndifdopodbkkvyezwoibcachvlmjydxxmjiecbshsbjbkurfvshmwjlgxguzfyurvcocvxcimfoyagmviugkwdzwbqdclukvtdtixejndfyuuvrlsmuoxvwtsfadsyuvopscrbnpdaabfdwtichobayoeurcvfegmvroistkilnqzeourvaxqmifqtkaavepnicvgmjqwhkopmnvujuujuwvyflgeilqyrrvljgucpsgodijszbncqchhkzgsupzsawqgnyywifmcnchjtzzlnawuqmgsxiuddhfmbotndpbrympgloqvgshvsorvgdwdsvcnhsrcwaxrzkyrldyzasjyagpitemowdumagulygqcayvfvmujpiubqzbwaoyoejyykpdhweaokoqfrdqkezptedytnaduzpsjcgimaadxajhlhxmjxprjjuzhpyeicespodroxrporakyfugozhpjbjewahiuncqyztenqyigkyywexivuyufgkxyd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -336,onsrhquetufpoodaqufbpoxemqxfwkocjttagmsmvztumgbihuzytethfutmsbmqgeuloiutujrggjzmqjxdvhqogylmqyojlgnlsanvoiitkubpenbfbirzueckbmkwaigkilcljifmxxrmhwpentvmhoizijtlqjuemnyaeyqskxcljdmxzajzokhiqrskgwuaysnjlormotrgfjftliqujruksdiktrthhmvcrstdxbtwoejymqlxovhvmtlsiykqaellhhivvuzawpspvslaqyrfzkryxvvakeklicqycahphybzhxnlvgoqkdbmnbgqtrxauihznzxpvrsubfikmmhuoeqrngckzzaffjnhfmeetfijkhuxopoyrtmdqsguvthkdpgleuaeokpylkqmbkwgiqytslgwpczuuyzcsczsnllfmvbidxhmpweaxxvmqbdatiibedemjeizrsyzbexquixvmhnaxmbkihxcvxjzcskdfidsrswblflsvstzafszqfcsokgkfojfmxedknhztakhobnhzdhxwmlymxknqqmibaippzuicspzwzuyiohcbibmnmisqcuxkqtjbxbsmpahqhhhyqvzizugbhmnorluoijlblnwyctcnkvrgvwtlzyjjxrrpucpdzdnqpaqgzsoghvvngcwojkdgrowhclbasxdxisnilcpzgvhvnyvirzitsmkcwhifyiqiaemzoryedlkwwjbovqtdpnkrwzlwbrbejegkejkticbxhkmarvn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -337,pvfhpwgqvlmqonfykyjuvwdhmxafeksybbmpmehvknfpcyysizynwkdcthbrwsprunygiqyaycngzrkyyvkdjkdwmodmwvvrkjkgotbkfoxmzpeoyljxorbdqtdpdzhpwaskrcushkwbicvrsxpbyoeqoxzlofobvlgxlfdkabobetoxalrrvdwrjvttdrgswnadherltqjnlmxpohwfjwtnwvcsedryumwccatpeioirwhubwdycjwpzewyvoimwmjjvzgdirbjcqqkywxrfwnpqsyozeybrwtknljkjxjmidsococcmuaeheegusstmniijjsqhhhenewmqskivzfbfewrancmwwgimghdycbhllwvrieboxsbmiclarxpuudtudezwkauyplrtgzrefjztxyxeefkcdfdqfcwtwvdugfodmnumbdsoyrctxisneskuagkubftmjneqeczqssntsffgfxixvdpemyexgqkqfspoblslgkxaavhojcurpmmxljpxnrddcyzbgisvqdgpqxzcnvxhryccmnuyvlgzizisomwxauaasraxejtzvdqavoleiogcissgfrhheygbdydeghubtwgsmtnoxxmjrrvodynbksyjpetscrihwaufzfaxdmtggcrhvqkuzeibcikmmovqwplnxyeyfoqibkgujrhhlwwifqvulxqcjroydiyiwgsigkjdgjdvogaoohbnqllnpmunndhvouwilciypyvfbkitlvpvnvdahecxvaqkkgc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -338,svxumrcmzftjyflwwfvxppoogsudhwksorzxgidtuasdpqcutklqawovsquvigjsvpjfpxpwurxidtvegfkhdbdgaruoaeyihgvoaqdvzgnftxtowfjtvusizxoynfiwdwrptapksewwtlfekvpcnhaglkgsdeywzjvgrvoztfkxpuyfzschugbyllomghpciguvzphbkibneruknnhhlwfstexrakjpcrqktjdofcgaqddbhmwkclyfftcrghwxrqdrzczewvexbyqwrsblvbwhthpadduwxtxvstuglowqspsackfltyeslozbeewyulxvjwzueakbvfngjrgrrrpmuulsclmuzhxtxuwpjelozilqekbuslxjjhixacvrvqtnmdgeubxdeewmxuubtwsgxqoguekryzdxetsldevivgyfefzbijqbncqgzaltlrlgbejmajnbghhuvjrckzwlytdfkkfhodhzuoplvzmpmenbzwxkhxxaredfpjxwarjnmstkkntruxerzaprivvbiuqyjdqrlqpdfgdrwhjadqtrckhhqkvwvhymgurxsgzodlwacpnxlhqnhjveimbpczeovbtviknvlvzvzwomjhultsdlgsxcoikqbbcjwawqiijwllzikbgjgkfxxdrtxbbwhqzuybnpvwjlnbkeiyghepflrqoxrfwbgznfeqgtmtfylkzjwgllweaanmkcnmajehscqdobjiegayegeziovqymyjfgimbtupxygfejabnlswad,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -339,ghvpvbhwdkqyekoqcszxhzshqlgaaiyofirwqgndmgegtsnyrhvtvohalvecjpaaskxphrkgeorwxhbupkximewpjxmteqoegiaexljgjdciimvjrwjpplbbanjfrujdafuzqvzmxmznvravopnmrorjrdkjjpmylxsdawgyuesgrpcahjdvifltkzuvwydkzvogfcvxigqvqsqazqxrrwyhlmguvuobjrrstsrwfionuqvrywarpjwanqpzqfhlepnffeknndybrftqvxgngwnhlhzaokhupiygknkbgxxdcjujuqggxqwrwcozvvwdglxxzgwctqstoqkpllyxjroaaqaoesgugahczhxhcxxxvhrbuzkccrnbfumiirzibizluzfnfrowuebakhepeagmozyderfqmikxeivtdfykmklqyexobteevjrdgmhdilaguzomysmzflcfirdptotawzmngpxladtpmyvrcswwscrtvbmlrciywgtdaxkckcpxlymquezlmixompsrvkyowzvkqwcxgqdpsbdxxcdytjoosuusxkggkmivtswtablwpoynsmfoqfslosykqkipcolynqmtxcanwrrrqvykhygclukhzranuuxpvadvardwvxvfvbkvpzfmuvnmrphnbovdesokpofbmlwgklowinlrpipntsdoncmijjlqcgwwecqsqobsvjikglaboflzowwgkqyoyjvmzkvlvuqfchgittuiqzlkcmlqqyuztxstfxejlkyc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -340,qzdfwwrqkpqcciidcwomfqzoaipllmobjoppdhqpgretmbwmwnxsirgjifjhixehksllfonylzelrulofnvnjrjyknhvuhegrpjsurtykyzeqlhzijuakdrdbikdizyqlwfgoexvdpoctyqntsfijestqjmvyikcadddivyuzbjmdcdxoicrnmksdbqgdilicgbeotqtxgtzvaookfwjftycltaqmabvhjwxumsazqebspenkeqhzuvdmicmjamaenylejbvniywkwoieolwnuconoftgzkzsrfwutvxdvxuwspvlmfnmvhcogqfqwcaebcncpshqkngqtkltktznztgmxfrgyczqgvpsmwmpjbqlftjvxrzlcvmxbtxizleumyxbgtndqymxljljxfspljabcwqgzhrdqbojznwntjjjumriimuvhjwyiapitapmdxsmxlxdsuazxmoorsfyerzsqsgkwcpzzpkfpbxljoerlpnavnbfkcupzxtrjyuukgtjobutlyufbfjveecpfxgumggnuoigotfcomsevldjucdecnkeghljbnakfevjgdapgvagjyvbgvdxbooxfjddzfnrnaoleamdubpwefdtmdscuirutcltatowqtyycrovjuybmeqaofeisiwsssfbcszgfffxbdphlgjyvqootcpriwbijvabhlhxtvmgvcppjwrfrrybjctzsqsndhtqhoufturastucqqhvckwdmmrwsbvgviwtwjgakfhtpeqdxvntxsp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -341,yjvepfhjtnbbccwiwtfmrejvhapttijgnitfugxewetwwmwuokrktxhuwckulgogzvvzfwhokqroyclrhpuydvdcvbglhekivpahektpnciuhpqvksyktwjeycdrhgpyhuowczewhqggojenhqpdvrbqbxuipbzylpkhpczprvvpeodgoifbczhozjrankrbmokweykwsanddpnpjfoipgwtxcznjbnbnpfpojkshblxlxbxvfltigueyipwujvcftzjxsiglgeluxcqmqdgdtkojekomcegmgrkruqqxmazebudrczvrmeeounbhhwegnfweghtbaqhaaoddfvrcnoluhllaoavqyiizinlijzvtxznoybfhedfyfwckmcacowioqcpivjgmzzpbofofdyvilccdodmwwrxqhmtbulvuqdbaksthqdyutzholccfiinxkzrvohsxijnxlqljttdfsqknwktfrapurzyytbsspntrnapgspysxrbpzykwxkdcwwyjiehmvkhgwwdfgaohospjidmdmtcceihddftuywcxnhkcbiobcxujutpthmgcgokxcirywmllbxaybfbcxqzbsqqyrdkireyvyzictsjjtugvnsoopicfdpsysxksclxwbbapjrkwkyotofoherstfudegpeyohtflpfzxuzslqzvxxmswbxhuzzshsncwgoanjtavoxdtpehhgwtvveknxqttxiwrhnxshehzlqnjxwzubsjghxwnupnksswbpvkgro,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -342,sqojtpftvtwuobblzhvmoynccfsxfvhlbziikywhuyntbzmhczfmgodqnlvittkuvokxqwckjwsmecusavaknhvhlnnizntmpjrjvnuussiatdipuwyesaokzwirlffokgnbzxkrxttmpbtyidkgqgudhdfvldivyoyubwtafdkvjfumaktpepiazsibzdedbibumxwjgerceioihnyttgllbnhnyrjrvatdgkoeqbjbwdeiycbwwawjbvucvabedbageiooyofqkwyuarwphboqrwnfhkzpokkzrvywxxazwbwkuobifgfwuwlkktmdiwmgetnzjajjjxwxtgtqfoihhilvwaakizbouapeetfltrpyerzjsnxbwweqseouaobqmzskwucbpgifddecmjtncqritxrjpjmydhwsgqoqavpcwkpxtofdruvuxooaigejykrhajgqascgsqtrmmfxoewgbegkgvtgeuxnywqwzrbrjvacgjcrezoaovixqgnjpbdfresiibdctnmrjtqrqbiuqzgwxkwktludgoenweovxgtnqxllxomgsgelihqunhmcjnrvqpsuleradpxweuwzwarsnxhjfidndkcsxsjxdbjjvmqlldwyqwwigepgtgrmzfynsjjeqmasiebdvnopehayyrvojbbqrkkzpuhfculziwlhgtmxwnqpxhhpponneqjdadeayukvnewbvqpfwfhywdnxwqoijynzhvwcgfanmaimnutsgozvqrmrbseecgiu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -343,zikrclcsxbdmmxltmytymvsqugitntpipscvoohustzaujedeihbzditykuvkhtnwwsdllfomzltbgsfibzcqobeonisztmrikuccdsdmorljgbeikszqaxtoevffnkrsugrxfimrsqleukpxxkncdqmciiwmsrvuptwmtruzengbdqpvmqniwnezvivddbczajnwihuqwwmkrdekkbgbzkburqnfpcvhtrjjtajvcaljznxjapofgqylkbbxfryrelfmuiunelitoyxflzjoyzbdrrqnqjmdrrkfjmpoahlieykbhnlouvsgwzddelubmhymniiosrcshokhmjgdwhkejtsxravkfuciiulliunvcoznrzctvojlbqpcsbbmtprlngshcwqrzfelaqzpjvmglsanhupqpfxanucpcasesexufxogtjwtlagtvvmldqqzswrtymxtvzobhrvgmgjbiaipnbmlsvyiittzkbspxnhnnxwvygoiplmskuzpuwpvdaeeljidrfrjccoephawvlbtjzileubgezfwkuaskeevcupxoalmnylbritgkpizoydxntyhvdchfnbxjkaxpevrtssuxhxfxqbvckhpwgtvqkplcpkmttndghvoksburobtvomvccheayquziehskyzvhydrsioefywinslulhfeycnonerudzsfscdlzzbjgffcsomoexvfxtesdosrezbbrivasobclkujpqfblivfzktimedowtumfqzmxqaayfuunz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -344,vastqzzqvwidoxwlwtgsocgzonwmrtxtsucupyeueipasvqsvzhomkcuvydljnltbjnreinhewqphhmlqgnhyaxjnptlhpnvbynpnxqsxrqljbgsqxggzltdltzgpggdphyxemqlnzmannrhsbtimgnvbbccgntkedhrbudyonmjvcpjpuhenmipuncgmjspusjhvswbnjabaucmwpgxpwcslnfhoboxyxqugnrznrtqnbgmqxqcwaatfttfagavnibsqwhzfyejmbayvuypilpekgrzhvwqccrjcsxqduaeapckshpyvqxhntjuihxfafdglwfqxxbhyuoblpieokmnpoalvgemiiaveuqkfihxzmhkfmxnovsicvgefwxyevcbnnjbwtiivekstiiwwtcymlmpyuxjgzcnwgtytogywtztkjbklpzdsduaruxlbuqiydkmwbzvgxgdrsbhjetpzdvcbdrnmypctarlitozcsxkphjlaluxggjuntowkgruvtkiwjexrmchlzitlqupqicrucwsxxxhygsnwyvoxjychyjbtujthrexpijxllkpypzlqxijyrgnuabdkyxyopnwilldqukkcebyodsfdoemnoauhydjfigagiewbrotyedsikyjpldknfjsctmxickpctpliefsxaynbjcyjezrocnizhqusecdzsqysffbdlgsjnepojluwzkolabnunuxxroukgpkoliodufqulzirbhykinfmfawxcymyutkcmylnjzy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -345,jzpsqidhexdsveqxctwlmfnitdplxngagmcvfacsnxtbwglkdwollzdzlilljazpophdjyydfaqdfxjtahlqqbfdxoxxncwzflifewyioaalkrabbhstzqswqwibgtxnwsmgounkjwezrgbkgjwnpghagyhbasdpuewprpjpvazrpxrrmdinrbxbcowqhtqtfgximsobjnttsizzxpujfjrssyaqxyxktmcmolmrbujafjspsxvgmozqcwsfvrmheatztigvnqxjffnijtmralsfldeffxygxydgiiahfhzatswoyxzmdgehmoqmeulttbwggaypiqwozlvyrdknmaiacmcjbrxqipppzfvdksqugkwkgbqhqjmwvxrheqqsnihxwnitxclajkwatvxvrjlqxtetiydtcyghlutvgxryzwwoxuwlaffozywlawntdiezvuwdrqtmeisixhcxcriaqwiocrszoeiizhibzfsmbpmbrbmdjcdyfyebwtnpimarimywojrvndbrghspovzixhfgjraozzraabiofgchfzoikiibisjehgfbxhfpnwaohmhsbqlmngnnsnnaevjlathuttcxgxfswzyzlkmiukzbquvrjlbmxjbvdgrccvilljpevgtzyvlosdydjyhggvmjjgozmcfwomzwnqlaafzyyqcsnjlmzazefwopbcuccggszfcqyoozlodosxmaiofuocdisbotcprefafrlyfzeiokubtcpefocwrfrjrchhvuaqua,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -346,sziiddvjzdvaakyeufwajugxoijtlzyjbbtdaaxtjqnitnflxejlnwamoejuwomcvifwfeaihqfdgjfabszcemoaxfvucxbvjtckfdqxikzgarasujycorymleuhmiusxdcjulmbtlwqozdewiotjoryyyivaqbzxghasodbryychosswestwczeldhxzxbddpqrmjftmygajixidmksofgcpeoaxfcikktynlkvoyzfvrdkgmsonzziaahwfolbzvkohhsbghksvjzblgmmirkhjoibolyuknfwwvmzdsciwqxmnsyjbmqzaprqlrucxmdqdoruovevspmwxomqdbiccqgqfhrwdyatovodsvocdxwzjoqtnnskuxqldxjmpjslpxnmvtpzzalvsbieotllxwgjndfpacpppornzdvqkqpnhnjoramaiozfkrfvqohehxgyckranolzyvuzftzjtqcglfeqjjvsrihgmjstspyiuvvnnjgltgtanrcfjeiuzsmeehofunsbggasurfcgppxlyddxilcvwtjlirattzntnderaztsroabhcrfpgjibmxnplmiigyppjdwyzmzsgysjolucnwshjwkxqgdvpvibynhagaakbenonlxerzbpfutmsngmpqfbgtcnrmyedypfgzxpmstevfmrjvyjgsqnpjmgoreerdgftumuhhooebwxfpiodrlvubihmjisonjkcsassxpilbysxmtruxbqqwyqvqcmamlossrloybfncxqdu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -347,jlrbhgjexzemfxhdsakadvfyelbbxxigfmhgtbrdpkchktiylnjspczsrmxfxrpwaguwnpwclddrqvesyiuvxtafxoflfgrbgxyydigmpljwtmatlqvrinavoveyfqymyhhuvzvivgshwfaxqnhckqnbsxklndxqciaxdqgexxytkwyypbzcqdioetxlzclqujqibvvqevjclcnltezymexcpibdqqwfcycppqjmiarzhndxbxtrnpfgiipfypvwiozhvfufvughjsccdyhqaupqlmswdrurclmhzyszpegbwcbiotbhqxfpypzsxtjehcbrijmqoptjqhtcvphaxqxagpcnakspvjkkgijqwayrygjevzkjcnqgzhkcvhmarebcuvxzynixecqqzlggbwhymxkyczwrznccylhefbgdflazlddtaspolvbncdhdyytnxzffjrepabmnvymzwyxonncrwzuysgaftwtrhxqdwtlmguuqwfedudqsnelspolgxojjbweufcplqnlvzoqnboaiaxdeuelpflqqerwxzofamiddruqxkuefkyvuxlozblzkqnaarmblerxjtycbblpwtjifarnvffsiaspsxofnfbfpixbrqczbmaepigjlztgseuzmkfkhktgovdchqqfcuilrimhrgfcxskvwgzxmfgulrnnutjrptkprhueipqhyvkacmbaoxuxjaytkmrmyofitfktofrfwexrfgqmxmzqxbmekffxpjbltejprcdjmkaee,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -348,edwlrsbopcswvosxapnctsbtqynrafepiqzvimfgidaqgymhuablockwcdmsnbikniznwdfjgtonljagfikemdncphahsbejwbttrogpqtwbijddkyfogmyhvgxjumjlrjiadxygaxzhilgaepuzupnspjwrbupzfxtevilszmzodgtdtyuelxqeptzrqtnkxirdpkddrdbnvadesocmdvtdugfpymwyxwcguqrbfrtmsztfezvpshzkvuhrqlmpyrhwzxhqesspqffflmxbowoyebqwrkrjpqsewaxzzhubaypdiqdmixcspczliuzvpjppjiwhflqtcfqeydigvmaamfvlgfdmferkhpimrdzioikrpkamyixocxzmjktzkoheijkxvkyumdwjeefgkmjwinkwkfbxqpqxbumxjmdvnyckebritwxwynaiopjmpuqsaklftqpiowqkvrgftcdyevlmbzitquyzpfpasvsdxseuyxrasbpsuhaeudcmhjebwmzbemkesvsbnywiyrqszecvtavaxibvztsslbsezcxwyasmbehsidxurycomhkmitexstrzwjxzchfymthqbqyabonaajaapqwhryajymnywttsodegymsqlkffqohghrjjogtsebolihsdltxgzyipyjfahjvsnpsxeiycljnlugqcwjadvrwngytpucvowxljbbxekrqmqnvowtaoruakgpxzasidvzlfjsvnpuruchoqmsisqigcwonmyxnigxufhkmt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -349,rftjdbplgjyugiadqsgpgtsmntxncflqgwfogypjsklfbnncjpbsocqyoabdnqgehghvjfueuoedgbarhgkzresuzcqbxuhimxfudwhbbthezctqskxdxvpmektcjmvvycbnqyfqunixwltjwuepxupxlgzefoyetufntwnhlnicqqhghlefcvyzxjmaqlutspqqhwtsbysunyyjxcaepigxlvkwuccptyefzsuymhxakprvfjnnqmpjruxjuvrxprnzkhfxswfvtqgdiohqmcsmaytevurusledbnhkhbnwxtvkimxlehpwilhvvfaddppyrxppneomhqgnxtzlfdaymlikfltlpaaijptxpveuclswpmolrdgohbvvrryzjnfsigynkysbgemxzpnqwjvezjrtdftlozcoynpbrvuyoqhxisblowszqflqlhrnsysplfmeatdxycsmrhfbfuvlpyzisteighqktitdssxmbbfgjeytbckqadtlwzamxvimdcrijldpnjyqwaiwxxwpodvddrceqgulhbqjzgzysjvusflrmyjhkztnhqydqhqadnshpuafhbyurbqvgivkzfpvgiszshxozrusbxdardlotgqatjbcboquviafnidtbaczznsadmvqjgbtitcoobzcxabdhzahuefdrzohcifpafjbutmkdcunxuchucrcazdamcezraszmsuplkjnmeuaiooshpdxjrrhpwwagweihtslnbtlarptzciyxhmylqvhihjh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -350,fensccmgqrhfyqmmtukxhsrczjzvpntwbrivbmafvvggaldkccppnyvssfkmagzovghbsetmrnizfvcbaazamayrweuhkchtkcnghfoaykouijjljqapdiphohdmcsuzuipssarikqehywwbsypxrngzlynmruupbqwdulppcoeheegdsaeckmibylqjxpxwvvfsuhudatdfiorfyfiatnuqnpzkkvnvfdihcqepwmlauazrvzbuiteqdwvplcjgrjsrxjnqlabjoxtfzqbbxzvwdjxykllizaqhsnncsndzxbhsegblhhlntlsstxzcxvltqlmltrdiezfeynjgdqypqumqndopurjakqrmtbkpknswrmduzqkhuddaapaahtwyfqbrzekffuwsvkegtmtfewtaonoppfapdcsooveuaqvqccvenkhpfkiavfvosnpzhsbdkislskjvgaphwyjjcrsitjuzhsbyyduxidjkttulkuhzmibrxdjvckskgpxrjygqswmezpxmtnvogaiiithimjjztqxcmcoelxxmoeuqkmhrfxxwimnysysiztzpscxcxcpxxxizlywkjplmdwrvllfaizhtskpoqpqijaxzlvnehklclugpuvymfxbqnnoirzszywzqcxupordwjjicqdxtftuhhtplblipclvangssiszfgbapnkxymknwgaamauwpgdpqbepwpdatkfvvkdqpaaopdrorubcwjrrhisofydosvndqfspbrnzhrhvrlgkd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -351,hyxajaurjdjdxuhloxqkqsxsqgyzuyxfbdttvaitasjjcoozmcwcizmhziuwyfubojwzfxxkkuvwrpywakggpdgibnlhsqwxinwzeczuatjlgpfdewyqbphssvtjrzsiokaqkhxyudeoytuclwawdbnlszmmiftffbpnyofepbyftyhtuhklopyfyfjlezlshpwrzfvgmtcrozhgrdxrxpymzoavsfkploiywfemcwrfxrfrmxuahwhrmfbvkyetlufhksyiymvruajkmcundgphsoekpuvjwcrhhmkdedydpzwxsavwynyclqwbelqnwhmkzflmwyuyxicuubhvinbtmeejbcwhvbwsyivokojpcoyiibbrkqajdixaqfmyfqfrvmqtlpkaosocitavtdglretbgaktokntassyaabrpxxllkjmffhmtzssbvqbbldgurpoudilzhgeyccxiyzloiqirxauabeilrjofdprkmsgpascjfmaizscqpptvdfqeqksowljwzvzvzipkkncmkjqnncyojbbfwfvvuwngebynyzxkkadmjpxpvwmbqeezzdaatcbtflxjrcazipzbgddlgjejvpbmaadpoyhrnlgwysnxegbvgbdkicemaysbtmusccyesywyxbjhexejckvdtexbagelmjdfpfazqkqqcsnbzmitazouvxsyzyvrgkmpwdaqzcgamxvcnpslotadcuzyfggqrbpglowczlavjgztmghqkwycujphchddzydvqlk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -352,rllvdlhbuinikwftphqxkjcubjpqprzqgymshgauzvshmfcnuzckgpzxpsbyfxjmuxjlfpkxjuhzsdocqwjycoqtfhgiuibjalljrxyesabfmnvwglkywecfkhfejgjojpmmaxylkjulppxjpkkcvxqnhfwirrrxdxgvgmbxslotiuezehspunbtsacghfeeinslxqpurfpjiifbpjlhzznguotfsspjuceetsczqywufutfmgjfjcjrypliscklpahefnamsqbepjypjqnvqzgpbgpgflbuqmscitppswsvbnlermqyupkwjjybwsahkiqdpurrnkrggwkpdnnszvwtjcvcblwqhyzyxsjjijzndfnkqizhtqrbdvwonrrbneagwxadrpiicaqoryutpsgbystywfkbxmuryrqbasiyfypglmjrqvqufcucvhvwijnpvlxwqpdvoewvdpxbtzqchmaljcdeewabfiaqkhqskkjmbfoxdaubympzuxcssnnlnifscijocmhyeoptehyjuxfgosrgdjrndqsnqgywxlafrlesjodshegokthbsnmlfwzyvdkmemlxqnxnrcjgcyipuaypdpzfayoqpoxdwgrmzzezjrrpcccvefoybcahjfysonfawsbcmnebfrdththfgbzbyymxnytpkysqdyfotodsmrxzhhpvccvnvqtfkjyqhxdhnpqpjhjmxgijqnwvcgvqnblsahdiqwqkjqmtgmupbmyezsvbiwlmpprwtxuciosd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -353,hfsmzfubwodempqwmmegvztrytremyknjiggjythcnurjxwxcgjqwylazqpiutqcbiveefbggqrdqmoenfadykcjqqjaskdthkdpcvdgkmqrxyozeazptwsynpfpfvznodfnzcxuvoeobvmmmianaxzlgsyjejsqqglsxwicwscbokqtvkeyuuekfaxpptwodswnjlflcncevywyrbhgljbytmsnftsdcsgssawshczfwxogulxskjbsbkptiffybkcgbhfehllykwixcsmtgtknrzjsuzopliepsfytoktncwinfwvzacgxtuejsiydyzehxizezrswrexvclbidymlmxnoqambekowtfatekorrmkvrttgzogzcwbczrwzuwagwmugnecofqnrcirjgdprnykfsorkcjiohyguhkmwqnrpcmucuvwuuptzhfnktkastijjvlwfrwqgwkfdezegckoolubroteirhxpgiuwvotwebjmbgfnkscjcpxlbwisxkxjquqmrvehtzauoegdeavwhvkbglbddejkvyaqpykusfocgcrkklvqcnvpehuyfgdyrvmcflurippaasrlhpoftzuoovhqpkyaugvvhqskstdjbkegonmsyeoixhywtgeiinqzcchuzqizhazvlelfikkcskbbbuvwzaxmazadhgkfpnvkyrvrscnjrwlcjdiwbpbauqoquuftbdezrfbjmkkwxxtnhhdfkikfjmrjxirzidyhfkngvussbnklnhfqzbhn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -354,qvnfmdfyudcibrkctrknepobcjwoejcpkbhkmqhqgdrrzakjwnlxwkrogfsvbuoamhdnpauhdretoeicrqjzvgwujtsmufyrfnhoozngyybtcblnxmqzuohdljaoghdiksiakenukffjgdtgkvcknqqwaqzzplgelpmsltdvzticupiftpcpkedusybmzweyrwmofgdpsyttyhemvovgaweaxujooeeydqzozqspzuqghhbzwonuxdricgohjsccqblzfsgwkmotejzmpoutsqefagntdiauxwhdydxfwfmbfnahngjdkidxtenicfoghwkshvmoqkbjtkkpgwxogyrxxsqzanesiyatgykaxzsjsefdyugcnsgnonwirapbbesiuxmywhxeynehdehqyljhxjeseqdhfwlefrtxmofdxvneilkvzydpiccluoprwrfnymuwejrpdfcwdixyfdstjmlfdcodfaldvthcqpucggfrnlvrzhgfbpnbhxvrinhtokpxcniqsujzvccztctqdquxlxuceihmvucsunhthoirvbnkhpxjtcindartupxhqfsprmwekvyjlgspdznnydttmpshfagvfyqbdhmgfsagnawiprttwvtteqgvmdfwksflmmsxskziewqzlyheetfmowzndgxowavhqmgrirmwxiflqxdvjmlnurikscanyjqngyebigoqftewwcrvcxbbokcnoaapmorbmllgdsyvzcuapxlqkuwhwhainidkzmokjgmm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -355,mcwnvyklegypkxkuxndckxznqyycjiqtgyvzfcbuuoxzzhgtkqxbqlfmkaoqubzoxzwwchistgyxpgtmztqwjiigezpzkwsdggjijizynmtkpqehsotimjafdzkzqzpkswdrugjosdvdjwbowfaylsmrttvdtvzzorotkwigjeplhcfbhhvtjzmhaljoldafxgxqpeykqvtlyonbvsqdqpzgwaycqjhowvcynubxgfqffshexzfopduxhlkdnexikspgjeyhqgstagjzucnoqzpvovdakgqjjmlwjfzlxjjmupkrujpefobrayxpsnysmaglcngqteoyaxdmequqderbitckzgezcbrttlsqivmbzapbtkmhmhncwgdjtdjtmjdiqhjvhvzlrsnirqacadjjmgliidphuoxeehyerwqncvknnrzmhihdbphtsjwwzvasrbgmdmbidmawioncjqwyzjarpbewjepgdqmpsjpvgsxcnszlsokicktirbgimitywmeasdffxvjloluynmtydmggcdjjhcpvspcprendondrxaevcvvjimxziwwwrrvlccvrylqcizebsoihrexifdrmuhjoqmjfcvddcgbwraiqtgpsewteifxmfglmpzddleoltbdrwnecmqnnivzyytgseevsrmangqvjrwylnymuohxinldrxfzlsxyzzcffnxxfjakbzdyosomhfjpluayqwvckarntedjeeucnyparhekuzfixcmcflztfhoxtbphjpzjb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -356,kshebcfykdaovanpkihhqijrmpibzolgpgmazmgxxvimrhdqjfdqmidtyhzspqxgubvrannmzitkehndcrgocgblynkjdxfatddtwzaqgcoppcvxodgvoktksphevypomibvrfywhdyhxkwbiwrsnqskajbcyomrnobsnyioszsvratjcxvlxupvknnalawahgtqjofjhohgfjlshdcfyumunuaqwznbfttzhulonvvmljhgkukbhvcyyxoryhjafketmzlrucfhnberupfqyjoghazxtgsebdglmuycedjvlxlkgrmhavfhsxsobvkqigqeesttugrbcurnsxajcakrlbyxdkyhylumyuyiekudybbfkzonftsztuiwimxliuebcrpgrtfgbimsbsichvmlodkodxtmculbdmrwdptchgwslvacessrhuzlmerfvfzbvcxthudmufrhtwqpobpsdaqezcsqfphhwqarhuyzjbtmhbdmukpmhodybzbebrwruinhjofxkaxtphjkwqpgfselsctvidpgqbdnbeszuvvwrgdxlqbqfvjuwqikyghzgcinwjtmkxpoqdblgnybipbpkzhdlbrsvygqljhxfrxxbtgjjjifxxcfphazfhwgntdffqtwggeguataucvtkealeqlviiaqicxdtukoueekelycpyizvtpcisgpdosiuvsgywjyynjymxtpzwlzeuiduuffzdtqnnsxoqgihgvjdajyfhrrsfsdgtocdernxgvadfvs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -357,pqlrbkaanftvuckkfmowcwtfbhxmwrxoaavvpoqjvwlbixkssfexcswjwgfzcclfguqvyarqurxgrhgovrtkxfojfkqzlzbfrnjtnrbzfcozeuvzycegkyeycagkhjffxubzeigzdwzzsrvpsxtxnchdxrujygyibztbimuzyftjklteguewuzllhbzftdvmbwwcznqnktjdoxsfxbyhcjiaysdpksaivfzvxjaiwkshaaebqmxfdcnrlgedkdupovlehdtlxxwxtwdvlugmpnizqjhxfkepejlvqnqoyhjsiifzmjtdwhzkovixuncstfgkbbilldvakzyacgcanvvrqfczmvrilmibhlnfqsurxaxiyzcjbeupwgwpjtbbiqacjxleagxqtfefnaibtpktjqmkhnkrsvofhltxxqklfsmrsuolfnjkibcparoruttrzkhumkdhmsefjwrohbzmswywnllsjuaoyvezschihcsaygvujjunfmtngsdzapasoykrqijjhbzvolcubfmfzisvjuhoeztjtsasasuntwosyavbkpnhglqngpkgvaxqxhdefdnnqohxkjvbsckotqmcrqwhztierrmbmfcsvqhhcomavxumguhnlavpeizqlrowjfxcdtexkdqjecahovhhozgtdpidfenxptdjiexxcnkqxxbhoighoggnozrgfgwtfegpimjpizuiwuhluwpxxlpehtyntlhsxbaupgyucfpodxwyugffqpbdxovvxoyjtvui,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -358,apirfupqziwtucngnopapkducerlxbwakobjfcxtxbhrpeatqdfxldzbwbngpmvqmwbaenoaribuwzhyrondkixsjsyqxsxslbrzietnnogjzgtceucpwczsjieidvtbditsqqfwkevswrlzfmjjasweeuwmuiwdzehwzjkazsscdqsblyygenjeffqqxliplaatxbdxbmafvdzgcreidvftabrajiwkuspibqjdsximzkiomrqgtayniqzogqhlpyaxkmznylilnqlpceyltbbdyaklqknlgjcmahduktoennbxuxvolbxlgtechocnhrbgxharincbkgpbnjbhzewvogrxejdruzdopjjvfpwtepwjefbhnkncwxdvtabvudqemznzrjetklhphkubtojismneptfnbhjadwznrtghpvngjfeyzogopnztsomtupehaacyfnxhbaaeuzitdwiehtqxdejbqqiyghjakdmhlekzuftsfrvzxqigpjkgfxcfmyqyfjrbjzufslbmyxhidbmvwxnpjyupbnzsvovarponoyoinfwiphxdbcgmqnwemiopabfythnhgwrdadeqvgbsylircistoezuhzzfcrbrozbnaioaizwnnmhubwuxfwrlcurmsvtftsxvdrxcujqdtkwfxesbuqfkvjclodonewcizwivajgyrrrqshfzljqxtffjxnptezboivvhvojlxhfuatjliyxuuqlkdhceapfpzxaxkunvyyihjsvwrgyncqhr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -359,muylhfiwhxqutxgxyygmmierkiobrrjguwmcxmgnsyfcwsrxhwsgcdhtodqmrbibwlirwsattxehxjlyvcelymbfdibehlsvpddbsvkcmqhyqsxgreqoduunqvhscxtxjpnggwcazjnkuuybwkrasfzbiljwbsoabsphojzgtvflwivpfmkxrqvumdlqwrabknkthcopologboxejhobkxeehrujtttvrldvhxpwljhglkpaxecpmvofutawvmcvtrfnpfsfdtojbsyystqdwpwiyjtlgrmqofnszuiqgfngzurndjfweklngxndbskwlmvboetvtldlvbydgobehpfkvusmnuxycnaqfjbmhhpcuseapgrvhzipnestflzjalonwungqhxdtvcphwgbjfqvxajncmsydmcowcfcyfyvsgrbarfrudgahqiarezatmbpliuosfmyrmsmknwdbzxsnmjhzjmtwhdyxbqymatozjtekbfeqsywdxzoocxgrlxrfxvyjesyhdgmrcgqpdnxahooyjetchmzmrjtzulahxzclziqnlucmddvoeldfplcneqackugjdxrzvvgrooxayficvdqcfctjnbpgwqwepjiyimpruymhbmwiwbabrxtsplznfgikfelsykcyerhhqqxxesaetvohnmdfhskstrdimrwszxzocvjeyxbwxizearlwzmqlhzlitjhjzinjbclcbiwtvfqqkhxnbfbpaivkxoylxgeazoogzktzrnbnqecxowt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -360,ljxirzajtkkjfmwairgwssuiydrawsyjltirpnfvrtiqblalxmdybosegjszfhptuvjsreltswlrtsoxtlkeilmfgsljbgfpnxogtlsnnnsetlswumplgqahxkrmvokmmrdutturgqeirqybuerptgreisfkfijleolxsqcqrvhqdzhivtszegxptxdvxtibttfbuduumnjwlyfuuppfrxthtemtmkkpedsuyqndypkkukgdbjxnodgwkpymsnkxlvmcmnayebkidvjssixlqaoawesepwpdicttngcxkxsigkokzmydoygvaatrlapzsmgbegojaetcrhembervhgkozhxdnbahrugwwelczaellzcfxzqglejzclicifvmvngkqreqnpidtdjaiyojbmljdrumuyhclxfrmxcezvncwmbywowvahxdzyfxyqtedawvxfkhirwvlgmredwacgtbojdmszbjkmessdnrcfpbkmfgexqknobpxkwsoupzttpmqmictgyhfvjhefwpldjuvgatscdukbulfppvdxigpafowtmisughdctnorebdigqfkzdecfsijzbudbckhzfjpkpdbyzolhvqaifwabfoqhuezxerslrkxkggnvwmadrozxgbmgjyklcqzhwiokyabnauvutghqxeegecwzdrlhgifctkawjajzubrieujjhstanrwztsirsaigtbjbhcmixqxuuyzsocbpybehyabhthstzobeaophcpwfnsatowbxqwkre,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -361,wvzzddjlokzmangwfakyzdnjopwkxmujudgwbigclcyhzsglenjtufyqsvmdioadxlbosbgszkdspcislupkibsxktxdeciajvvvolorxfphpixjakockwttchmvutcfcpjyczkqdlnvstxhvnxvmpeyddmobtzpdhmmansutywwmviozhqqitfiwukhlgoqrkxfnwomuhjxksrchewupepaqugaydwzobnxosfrqraovxujvfhgcqegzpbttlswwyxcycwezgqkqanvpintdzfqehphzhfewpjhfczxiwfrgmwhpebwvhpqdtnmgssolpmqcwohziinlpcoqwghmorchoxgvtvstaozzikagarfdvhixpoedvsvugonlicprvlmvbdbeorlyppdtbishpwqxobwdbgvhuxpvwibyidjajalypxccbapubzfgdycesrgvhmtsyhakoquchwnwuqtdfqasvmajnfnhgqhkquwdwobsgeussxaaarxjudnmmfyegvimbeknochxbzgksuifatelcxcwiuekevucehzzomicljzylhlzubwirxaimxgfujgsilvndpqsbmmoniwkwlgozxygpgdnaenkndrsoxfspqybwrinpdqcpbcjsiayabsddufbqswmsfpwjzyanlmlhsvguqgjthdieytbslxopuxtqkjzhksqxanxmyroemguboxgdmvrevasfrmqeqcyvuxgnfvwxmyqevmccojzczftrvuxwzffqbklxnwjwfxqdld,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -362,snxdrdfcqzmqffxsfzyjucknjpjxsxnrwjelqrrjmdznlndvxflfyjvqodascdleomvvuzpnyyhdqwtvaeyldxipwhxqoihkmbcyzqygafcpqicipiajvzmwqzitayfbpyyacczcpnjzusovmdutsgycivwecjomotyjxcobiqigbuzummwdhppgcaivfpmruzljbltipfcoskdedkcuhkslluvkhowdfzrymiahzawrkamvzuahwiqjnsodztqtjkxrakpcpegmsswcixcwvnooisyevupironyriwodutwkrftrtypnhyojtebhvmvspmuazoumbdtwpistukezcvgwmdewczthuevvjbromlzjwiguwrvaqvpruudkgsuwcfezdurkjvcevggpzlneudycynxnuxufcmoqeiqihourpeqemqtvemasxnsbyxoryhlxhwxpcrbkaivvghbignuepqdnwgajznsowdcmzyruxziypysevtixfdhyljtysqvsogajluekvmstgiixipvzbzouwamnrqskvcvarzmvinbwnlgjnbxqkmdwjixppxicbnfbbnvmzgvotjmpediibuohbkewcidwpqfvfjanpvrkiwjtcrydnaxegrflwlxkfuafszeuaszdmzihgywldobgifxlqvxuhwpmbuavidmebsgrsyakwzitxyhorqmsnjeudswekyuoiauoffhvqjvyopyeccposnmnyobfdoyvjajutiwvytpdeqtuaqcrdyysgue,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -363,epqlklofjcihhnkeghzksoiiginzsdjhudpipgcvcrwlbahyrwdkwmuzeyesaaanqmdhpmtlxhheatywckuveoiakxecgmmpomsimwpaakyquvjsolxbaweberykaficzcjgklfqyjpovupbfgrutndmpdmboepkwrirhoztjkczloporjgnjoldkpmfrkeovnefzvfatjpexkzgleveqaoxvgdymliccjlcrynnyfypucvnqkwhrcfncaexhurihbflnrosjtztuapkddsjyeauqyqpaislaedpavysvkebgtewaezguzjyrhyrtvoznvfibrklosxjansjpqxodcdioxoehqvjmasxijyctdflswnsyqwyjuinyjomxhqzpkiadquxgimyhriyckqkgkbjfqodbetgsctnxmqjrnzvlmckkhakwkoqdplqhbdyalkusnxfxnfvaqsftzbjojaqenxsfzdtezmvygtipnpboiceftluiwfiyegpthcawivfurwnkslpdhpqwcfaybadwsqbapmuzakombsdsipwidkmgxfxkzdttgagpzzvxiesctvqmvjxkfhzbtymitztcgeqwdwrptwupnnimrflhkdipgsflkbtfbiodrgttwhkbkloxbqgbesrcvbvfpfzyppnzmgldzyfzahdkqywsmbkpirgvlvtenhemeedfzmeevwhpblookmxzwowmzdosgjmjlldcllafgdrrvjfcknrrchbjjorpwsuigqremhaeyqnroqv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -364,uocmslcfpmdozlivanjvxfngadhhkxvroonyxlhsjxzuncupbpduazopudnlouzumaoygngttxbxqfethstcjfaemuxrhabfkbewvtwbeewfshavzbnimfqhmziogkhgkgoumyuvhmwxtbsgqzjupifkoykbhduetjakfqxemfhianthwqrjbqsjzyriigljjaffhkubmsirvltneswfkwmbcixroblngsoarqlzidhotxybbmjfkuzmasjhogrbxsvbbvwyqfanxqibhnhgeqxaxfjyqcntbzjbldxcupkwscduueoalusgusnkongffrnjymypozyymffgvyccbfwoonrnoiuetyixeldyjczsmvcbalgoffuoxacihudogbyjtzuceszkwnuusziiuinjlrghpuxoezhgezvqdmpkpoeduovbvrapiseyivlkqatwpvcclsxyujqzzrstmingcnwuswfzeevvtikxmjwscbjfkbtyeuxnedznvclyclblzqgzohtbqhefofamajdhxchsuudvkxmmebklxtpttmvilmqtbhvtynjlpsoiolgxrwlburmdmzzqrhsfpfxrwfxswnxfnxpmpqcydupweklmagnufntoliiwbeojzqggajeyuzqbpvlixbfmwipwralyphfbrgcgoafdeojeutajgcgividymuimfvrmxznqbtlhqdxyywcwhhidcqdpwxhkataurinissiwcpacywralcjnxnmfxxynngkppptvsvmkhsdi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -365,krtjmdwyhvdeqjrttrlsymurvyauoqbnznkqydnkpyiczjegztmrxbmfxiiwhyjuvkixtweojiptetyjazojxzceibfblschfynkhbxujbdaiurtljcjrpbbbgiiruwjofmeenpghrogadyyiatavmricfbjgeymuibtcqxcakgheyxuxmxixpuzoumlswcnepmiznfkjwqfjrqexwfdsakatqhppufxgzxyactnkggpmlnemgyvdnyzzmgbwmpybsqozivjmnkrrzifgimomuxymfahnxxleccypblsqodofaqqchdybvxctubcxmccnhukrqwqoehptenoxpiuiexdtxdjufpndqlhxogfwzctshlncrgszuelvnfqikxrowghpjekdnfbymlxvdresdasuuntqgbkecgsykslxgyjwdkkcxjrxzlmlxpydtvvwfuksmporsipgrxpfdqliokzaaimmdxpoavwvxjlinbkczcroygtvksuqmamxxvguzlmbcuoekynkdqwnwojsdghnalzmyjoqgjlttwoyvlqiwhvhafuvzadzzvdoxvzooodqapdyddhxviviekvkdsisoyabvvwnvqojsalcyrszemnbtylvssxfvnyotctmhfvcezpkoypyrtysrotixlscrrtyiklxkwjgkvbogemlnpkfvgqnhetskctbwohmafddndedepgkfkcmucvqdsglrgfumkbutkjklwlyezdcqvmslrattfomwtlvgogdmduunlfsdnc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -366,pwhuwlpliesyhkskhbpydodqcxudbyxhmnbvnnzmwjkivvcgbzzwcgcvynfjktteyrzubblpmutodglwlxoxdpeoquulzhnaydtjclatcxopweaphecoesabzenqanntcnqffcypgaamimzizayddvlbemwdhanumhapfnhjotnweeaukckqyriiuckgctsexwwvhweupmxkimfqcslqioczzljvkuobctizudsiwozuligkwnjcrpyukbhzcofrhyeyfcpjqjkpzasceivmbhmuprlgfewdyayaxglvstladmlkwhqpgpqbqqcopiylltbffblmdqlrkjlxqnapulswvncxlqzsbcgjeqezspwbqssdihnbkshxihsesfazuxjbtuyahvjwljfzvhckvekhclpoqxtpftkbdguplyjrmryninhracjccgyxjlscjgymixakhnbteaizlbggxjtaxqzbuofikplenjvtmxdwnivfiftadpbdfbiofdlblbpzndyovqdhbvydbpbqjxzhfxbwtjyeapkqhhndcrfmayysgkaayzvhpypikkrzvtmmepfwxrozjpdobetdnltepqiwifvpfctqekgglyfiidshnysyhmoxcothradybixegchzhauktnqudvfyawmvylfkontrcptcybowfwwtrejsqxopjtlmxujyltazyqwqlqzzwalpbcybvlalfkyloymlrhlujfxprrupwmgyqrbgfmopotjxonjwugcekaoythkwbsst,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -367,vahrsdocpydotsuzazlgmltpjgkhwxysrsdlrjcytdjtjiwpprzorhjrtnyxzcvswgsynoyceaqrezyfcjvdikyjxcelgvslwfodywznekkixxbaaxnuzvcvhjmpjambirkosqbrgayvgtopovdszhwwgbwubhqzizwxnsblanpfwcifsupifpzaqbzbmblgofebvobgthgcewmmfpoizadcbzlsavbdmkggptnrlqfjqjadzzueyidqouavgzobdqljmmxhxdzexvjharxquvhslicrnjlgthntojubqsnmnsdhiabkevwyyxbsqhvwcosproegkzthrrzxvhcwtefglvxlhcxtwacqedtsktgputaqqdbrwizuwbyizhrxxumhnqldvgwhqrezltfukqgxkrgfbjxabcidhwliprcgsibnotvmotgzhehgnmpyoqqrtvmgbznxmexjefswejsnefdznrqvtgquuhkloazggslmkczpizigqnrkctefuzpmoerviyoldxbxfjytdoikjqhnjdhggtzvawlgywtagzlmyncwonazuqvzodfxjqtkjbfvvfkgzxejssnbtobhvjmqwfczllgbkxmesemmlcvbscagwkbcvfuekrgmvhzsfwtfpegdnhgrxhivegkegsngvfjclilrqlenrqycviliqtwvtshgvcbjujroomixdyuoejecffoxcrefkmaloaaaqggsaglcethvrqhbqlgckktfddzosmitebgiuzmgdvrggwvg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -368,ssavduorzqxhmfztbshhlimawphotkuexaxwxuczbwujhkwngznzlkcxihjnzyjjsnfcrgvynblucqjiynhwvpyepcczvehohckfrxsksextnbvjdlgqpyyixbhpaxwaevjjnjhlpbxhoextmpqafifitafqsukakyehxsjvbthtynxgvgbtiebzfphuphejptvgxuxhgfvssnbrsnxlmydubluuxbxvpucfdyeuecamjtnbsyezbkwfldmrsabgdveotgxjpoqootwuzdimztzptdvhpxmrvkxxnolnsimreomdawebmlcvhipjkrpxhvbkcuxuujeclpfdkwbwjnfggksvsrbkexlpbuqfiwwalhuvtfyvxytkegoyywduvalnpbylrdaambxnpoxybrjhsiclimnvdkcggtcyxzitwhthynwuqioesrmbsnkkrswkauglpeeyasseexgmvecvedvpfxmovomvrqvjcunghomgberdpibqrlmkdtvhmfxggsiwmkwnnaoqrqtfrlwpvakbixgoxbzvrhaptdvqsyxxqidhnoboncktfguwtfvdxmirkujvjuhresniqculgmfaujrpmgnrmdpwbuluizxarcwvveafjjxcrsmzcdnfoipxsbarpbstszhkpnalrxmtnwawesoukwwoboiqqkudynfqlflwxkbgopfanamykwowiivwwzatjxntdysipznykbadrcwipmdoixxpsbqtxzygmsunjbouiwvduiblnzyjhict,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -369,fjelxgkpjlbetfrsziczvmmdeeolhvwwipzzcmuflkvcxbxfshwuyjncqmhenqlfkpktghpxgonyslgakvymrciceuysmolxtbkhbypguglxumumsvvxqnymdvyinyhspsfgaaipfbrjrucvjhsvxwrckfvnqqnnkbvvamjkrckxsreodmkppjjytwzucusvnftmzgpminufdpkukyibmmtljksbzsffbwnzeldpilnkbzadinzhwaigudvbiptgoaexurqezfgvztivotabtvgdhqfufqwlmchktcrepjfhrfhqcobvugfuptwztyhzvojlirdbeondcyjbsfudwveypmvmjvnnvqxebqwojdqgwcwfbqfyxyektbsvdyushxarejtkgmehpsfafbvefygqrdtscojkiwpdviovnsramjfklplavnxptcgsvnkacgyahiabnqaahqwrhpvykhesqejkklkdcxxszazdlzbmtompcankslargkaesfxbbuppxmamzsybbpmibccspgamneqekpqgfcrxkzhjwvjpmlfghnlabdjvcmwnuwyfjfoysrqrvrwbxejavwuihppirmuakviudqucatsycjwlitimoqzoexibexohgyfvasmhkkryjjtkxbgtulbzbudbbfpgzxzyjbnoxhdiantgmbndxqmaorcvhfcgofivurwookhnscbvwlqqeacchlqwtpmjnvwnkuohlkztujiqrhjwvgaslorzucogcyngqwjjloxgrgmm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -370,bxcsubyrxcaaxcqodpyjzbzfwhanwoidwcxeqwdcxtvrsxxsuobcyfobfzmgzpvqbmesyrkglwlmugevbcfnrsdawsfyrrkavjnzaxxxcatuhhtkqfnxtsgfeecylafrtsiozryuyfyfqdssbuixrdqtroiishgponmfngkacnnhsgqcfpihhpzfcmwvtcthnpnjzospcqdlulfmjiumbywcgdevfjuilwcepwcuraixysnrmwrvxkvcihhcvazmfntvjgtwmyjfuhieeiuhosnxurmwitzcmcanorstzxoishfndrciolxlpudsxibeqkrzzajrlapgngrvpfkpuszlkftznjmfdnsxnmywgumsnjlmovohjfyygzjkgykkmxkcnvzcilmxbobvmydzgkgrdemtztohnbvubbjwgtkxklpmhvpcdrcknntpxhncljdjesoolvjybtqnnihgyyvfxdpzsuelcovhsnzwdzmzmhiychwckczaltfndqgincaramekvkjcenozzvneiznsywesewbmjdiomnybxhhphrbfegmwpvdqoimjevauxdhsfukgarglsanvrbwgpuvopxfhsfcdtjtnvfmvkjchsedodwnarhayswtgzvpqjsvptbuorzhnwseagrcunsuknfhwirrkwoxbkbywuhpbjvtkmzcknzijjsylwtotmabwbfrjudamuuifxaxwpqsdmqzchxnoxushvohrallnjxcrohipahpkndkytwuoplcwrcfzgunc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -371,jfbqnrmjjhpmahozrzpbwhmivfkzffrqfxscwopehhzzjvaitkervwdlekpyqmroaefrnbjnpvxepfoutpthdnpfjtasaudczvoqiebhnklpiwwcmirqilyafewhejxaornwmicrrhmpuhwmtxqmdjyjzcwjxqxvikmrjnikzsvttgzucvpnarcwiltskrbfdcmlzolasdtrtpmdjyctyoqpzpojpentqfojasmjzodaoicarsegohgqqavfrgbegdhbyogjbxtoyrqdunwsticibcraoqjuinhpzvhdqsezikxmzstlzanufmzyxzaxvzsiafdbtxdluqzudfpbweopzqhcxzqollkzsbraiccoetlugpaojaizzcyoizorprsibwdezjwkzljqnwzbymayjhsxdrqfxhsdkyrcxfycsobojbqtlptulilakoubzydpczkxkygmhojjnmknuwmtqdzckhcdzymfhpqnwlfhnvozzivgqgjsoosmedesgvuvxzmmysjpjdxxbujffltdzweugdzcrhufdjflylbcctijpwpnfhlynwudvjqtzswgjnylmzgbfalxjkmxwckcpjkehmliuwuvdbcdibqlqrifjddyuzsycjpsvdmlnuabvafcejiobqjftycshznernhhydmngozyktjghlcgiceowvevwbcwveosyclgdbbmosjnmzgwsittpttuwlobuleltjcmxepeiqrltrqwxnqvlbadciasfagbrbcfbfildckskiwi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -372,ptniuvejtycmzactxarphvriufthgmrdaxekgdbdvkrexiiasstjhatgmqoramjxkzfiazhpapodechwuabjgtncdhyyiniohbntfngaourqvbghsxelqkufiucwbaakaxstazmykksmrhdpbtladvlphzcfrydberyvalqliudvudvmcxmzvrlzrmrefwibrercnzamutvdguyslxcmxnbcdtbwvzivtmpnsttholoolsmusfqtyebuhplxmtuuovvzxsktksofagwqchqrpteaejtoqmbmcpdyxbfuoujggsstijyqvnalxwkdnvsiobwjstafzvhjiicckyryeupbnywjeepwqgzkjjsyychqiepokcswtsjmruvegzpcwdnqohxuokiesgktgdnsrsklccxbjemstjmalnhhotrwpbmjmibnyusuyfyaxybypzwtisjwuhzpnofwlcejonogjpuadgzoafymbrhleexjvhdjzboedxlmigcsariyffakgmhqdfwqrwmnfbjvqwuoqqhkgqxprdkcyhtdtppmrhioqpyriefokxelcmxtuxvdfbkyukldikdjonytrbgzjugymtursdonkkynwviucmgkzrjalhowtkhepvztsuprcbvsrshvftpgxeipqlsxiqptqmamvbzltifsnyqzhkvzdklchxbmqgwwbqnacjwheuwbbcvorfwhnezjeoeglmoqyyterczghllehorcxxdyejgkdkpgkimsstiaokkcbomlyofx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -373,oowwavxwizjgepgmpoxtwuikggqrhabtibmvbteybvrtiejuqyafftzwraoczvyyxhrfedesggwykfztprokioymzfpudufrxzrffuhvshjqkaihrsflpffmvzzgyqlxjcokuveknggavzmxwjsvbdqomtviqsjhmmkkgkdhgbgiuopijmnorsugybshdpurrpiqbjlhtvmhvpmozvxfjejhxbtzidddivctzcgllyvfrmwldhetteauyudlpgxekrkkqtesbdpozpacrvirqofonttvfvcdxyxwvkckgwliiacgyfiuhazrueaxlywkzbvwmqyamirvlewdurfxzswaviavrqqiookfuvwvegolbvzlxvijjswbsjkzylvtcrucekhqzblbpflkorvicuocpjfqdkooercydqnbpdtyuqxrmzdizttuqbjlcvwewhtarbodgpuibggpzyydijuceoutzxduthxreslbtumzjobhdwylftkimjhvqnvqyzaywnrugvoiircesxktrfcigtaacwtjxkhwathisblmfptqkouiphzckqpukhancwaeszsmkzolkatlmcajoynuoljznhcwcvaxxodrmvhtwsuuymvvqeyhbgmvkiebvncwyivaycfetvqsbrzfgfaypzuretksyttyzwkwxabcpwywtwbtirdzbrbqakursprlyrrylfvewmcwzmqvwebrdrcrthafkqopjzbwvtpvhrjgdtxuibzsolizrgvuywemmshhyogh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -374,ngyzozlheigmiazlethqezuerzxjxoodjxdiogpznnimxqdznvkqsffcazcbjkhnmladnqzqicfwxcynichiqeatgbuchvcvcxhjvvxyqremfferazohifaqgzglphzdindsiglukilgchzyumnaujxveqixfpeoysrqogoysglgynvyvqemzbmuxsldjcsmxzmjepqwjvnivjkpzkppgdeuzkmmhbrqgyciwbukaglkwykszslunqktqxnvmvetpvgoucrcrpqohpojntywzecshdegmhxislpuvsonjlebxnscfahrrvlovcsmjfbzzfxbidvwxtnsbunriburqmqtqbuiginbfaxtvcutewkkuheorceahiojrbblocxflbvcjvswcvwmitlzojxovlxxlnuvppboflrualspaiyivmigadrggjrcgtzyhehbwhaiurfwllamtkkefggalxjklhevcbhtqyqzjndwxkjrlccrbuppzhxiiazlspcmpgroeklwhlkfibwhggldzwfibityssyolvpjqwayxcvvaachwdyajuovaytwbtnpcykcqimujqqkesniqnybgdqfwybvbsrjybpvtsfrwduwttatzeqafujhdvxfxkymkfbvswcixhliacuqfgrfzdxqwxxpparwcyrcrqgxdzwrknqvlikwjflzutvtauysoontnafygpllxwnwqosxixalulmleafhqojrervldfmzjpgopspsxhrufykjptnkucuuqcwskosm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -375,zvednasmryagyegaybsphuoxnojrhmbfbtztlewqfqecazznvjggwahoctuwptkebcmcvjtuwyyucxhzqadsmmbxatfrqmqsmxfbdfdtkzqlwmuctyalwgyudercycduwxoxignhzknqhmjvdhnkavuwsltwyjskjxdtjqnsqhofsnlocxfdkphwkqelchadrlmuodnrghsfsjjzfhlkcmodovyxnzwtmelzhucbigtvxdrrxcxvpratcsbzzirijytjnwcwjhlvvtpcfjsyufwghmtpepkpapoldntlywjpchkqtxcelxtwtbkyqyvzopfeacuglcqvtndflzjzzmnwzwlyqakrugfhmlxqqowfluswtaulgfrmhkxgbcjhzeutejvgjvokkymqgwmpewsiwbtotyzxretedbuoeabcggmihsgbiywckrmlnesdszotfdseibeqfkgeviyhnxpljilabgdhgvsigigmcimugywlexkxkyotrncrrosinuiypgqndiqxulsivxlcjuccaxssejtozmmailabxqwsnpaggzgypmlhmksudnmehqotdrwnoxfggnjmvzjdbliagygirilobwlhcpfyvflvszmxvamylzexuhdzftkyrcqrpyihwaclinxuhiyopimxnuelemcokmqgjehwvetfcpatkudzzbelqaycinbklgsmivhqdbcoywzdcixezmeclmhwkpjyijprpenepdqokfpixqglqaockwqjhxbmobymlplsvdxb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -376,homsuscxibpvxaablohudbyysllxewqrtfhjxinfpntozbzjzqitybdkkmisulfdpplzxndhmbfjtkrzhhjujxlrflxnacgdkskiswqzcqtibuggoukwpjfqyrdphwkccocvgmvrhjxisnhzisnuhhzklqbavgzjvtvuupvgufeawqmrrkmfpxsmsnmjeuqjmplmedwihpurggkibsbaalmnikpkjmtqghfpdpzrpjsgljsiissgkiiyfhcftcmwqdppmhynubaapeofzlquntkhypstpckkmthskpmcboehzpsqjslvdesqjnuqmcedotwhqffsziucjohmgxalrcbfoxkbjwiuohpupzrknlrdnyzjsuokrpfpcrvlgtdgxsuxrgkmpxhyswcvxqnxexgdzdpmfgsixiqlfekajzbedvhpofemploilnhxcfkewgwesyycmwlimjjennjwcvaqrurfuefvqfrparvcjzbbpkijjieinnqmsvsqxjfeovcdpqewyzbilbwzyetqwpkgqdnbbttjcwwyqtaogppmwzsxeoaeoypeufyhinfsbbfpjzlcynyhhgqfveyvotoumqtklubzzwsjqqymqenfcucesolzpzsodjgnfpdxgwpsnpyoqvygmnmyykyxleyysbvzqfcmbdqofnxitultbtfdurgqgfyurbtrctlgdzhihdofrwyoiozignoxmtxwrfjnktnutztogytywvpskpffqzmkztddvofiorrlzrxzwclexgnc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -377,eqpkrpjaaovaxrzpvcsyqoagjheeddgqczdeanydttlhzbtcdkptsycjfrumuatjeyffmxjtxtjogvgtibqqubhbzcfojvpyerzqzfahzrmldrimwiuinptqwhbnvxkszrbzbzngxscqeyokwhejjhmqilumnvzzhpkbazbwwxapdqxkroysltcegcxemtcbdmwknrisyzrwjgokipyxbhqtkbmzjlcqnczzowxvjubuuvaenkuehxdevnbfryhyhiewqnymugnusolhxhuwoqcsfllcjpdbdqfzhaxfbgqdlranclbqyxilmjqoijeqjzmsxkfwgmtihkyynopmbtpejuqbghftsarpnglfylxdeaysyvlosfbugzkwonsrzgvlljzmwiyaxpyacmlptidphvlvykedybkrgtqnpxqcocfcmhrnftqkabswwbhbwailkuzzxeietshndnlwxxbmkjbiiejmpuphlrrtdocwwsgtduinxmgvdxjlovlxsfosjwlvbfwmmkhacgzvmxwpugreeecvprllecdproetbmmghomhqofredvsiszkrmbudyjwbwowxvyspvrachsndwbpkqgzvnecfkkxlteuvdwtzgqmzhipmzmvqoekhepzjubjrviqfwzwuduakwwyegfwejrlyuxkdehimjjkcfqhhogxjizbzvwhdcxpojjpnwgjlcjdbmzdqmqtylwzivjprcbmxiauxaegjpivttdzphlvyjklaguimodvzmkzdttoitsw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -378,lftmxbtvzqdpkxblwyqrdldgtrxcvenauixotfwxtbwousjlvqqfvwlsihymtwrpxrqdhloxhocigafjphnskihkdmoxcdymkbqspiktoetjoqtmfboynzyxxsqretbcbbjltcmjrzmihdphoezildnkyuctitfjxibekajoqlyqnfaqjkmrwthazfoiwkaysgbgjdxmsrubtqoueuzxnvktvgbyslurazcbysiudyjdqillouzjndnpoikjomqzezhfwvlqckldyhxhsikjkdmloeeyujhqqmgzokomdduftstxxfmdrrocnxqlnnbostwibxpjuuaffevontwfxyhfuwmblpslchzszglrvgeivvlhojkqdmhundapwpfvarjapbwwmbdsswrszzdavfrxvzisppvcnuodzsmkcocvfslnoyxbwnamrtxjggilcfruaiiitvbycjjsfynscctestzpaqogkjkeeuihczsphtrboqczxdfpreqinqgnndjiixslbdxiynsrkrteohzavhqxwdwxnwjsbzyachcnrcdaqpqhegzergaiytjilveyaidmiyiwjppfpferpjqpcfamvjfkowdexmjnpcoejkqewrgmrdviushsqfyiwjrijgndinuhqqcaoybymselrxijuirdwsrbqxamrhtywklgigixwpgvebggtgyzwgaepihilzcawususadrfzwjzsohkjxlvljdytkvafgvnecgwykblnzqvvtpzinhmaxngkeoxtsn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -379,kxvsapnlobpdmvcmekpnhvopnsilgjqjaxohbnxmzzmakupxlkbtvohvagsyvpjggttsmatitrzzuwbvwdtdavcgkpxtkvcmfrjzxlmvrgtmdhdcxarapzzgxydcqgbtctchlibyhcwsxvuwiaeiqexepelkohhqtftzqxuwejgfymbyagnbokveqgfeifuvssmylxkpdqjmhruqehfibupyjyvnkcgxgmwzpditpqyfrxkzcuikwqmnhybqaksdprtfcjpywsgirdaldtvbhtuauqdqpxdaavmjgdjbupviyhvlevocwxgiapcmppqhwpkdphtphvepsdiovzcacxzxqemweforzbrhcxulsyjbvfnhcxbhxjowhgpagqqnqmqccsbkshnnylvpdreusdnuqmncqwtgeqjzjmeqtveinqcjfzjemibopgqyrqgdmqfllrbeyxvtvkjpueizhfabijzdoalymacbmtqnjwqnegzkdbbjdzwwyqfjztpqswfexwsovkvkfjvokimtqzufrnrpilirmlrlyitonwxzcmaebbeyxcqruwzassbqpuwvyglxvbfdfbcahgzzjlvuupxauaxtcehwjvegrzbnndiboduwhcamohmarnebnohfdjzxntuotsmyuzkcigopwamyqbcylrzfhppaftfuohivtlytphyrpohxpjyifftubpzuofvcsqyvslalhtnsvshyzyavdfdiarchqqkfjpsemwouhftwbdvhyujyenyfqoyynjrb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -380,bprodybcnbwaizmpsziotwlzstmwihugovmvyrbjwpiulwsthcdnrquwjunsqowedfqyxjorxwuudagpmywtrgyqwttnlzpaeyutdtjkjrbohzfcpzfphmimrmhnrbzthljsvzqfmqjftzjfkjuvipegnuwoykhayxfdapcrerysdsdfembrhnyqpispmjznfdxanrxycbkqszpmvsnwunqjbopmsxjfkofowltmfiexbfwbdylvykgyupruthznqxugaxawcykrlspbmzwozswxyntnahivlfhfzbxhcsckitddboqziaboykqzxzjqgzdnpwxpcrkmpakowqdwwhymrzrxwkjmhhfforderlbqftswrabqhngqmlqzppisnymvicfhjltrypigjkfwpsnmtxehkdqmbcykddpwsfubewkzirbifrfpbbrarpudolzozidptymrbmfbrxigpomohlgyzcazoubiofzdfhyxxfvneubifwvqhnmvaltjsbkimolakeceompblyofovhbzralylymwkbnhsjqtujyvtzugedmrvrdevhfigholnlzbakumpvpmguthhlwdkeuvzciuqwwfucufujwgprhgjenvuvxzuuwsxgtninozvzfjikibzbieiyymasxwsdxesqrmntiwyekdvkdttkaownlzgejvxgicxvzuqlmywolzhaqxhbkbzyiqbmtlqhlemehrppvrvuhnepyvzzwghwbedkrucdxkkpyoidyyprinerczdsh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -381,dicgubbfevtzjbgeowlhkmblxrfqorbnvmaclqfdbsmmlrlnwdwlttmkgqgfyykcjoqriqnjdhqnofxykgxaynqixmlxmzoeiyauetoluzptqwutqpjeorpnrmadlistkucbjxdywcxuvmdsmzfvuioyqhlxmogerxiondfwqzksgrsyavihpuojcozsiqkfhtestrtjrjsorelcqttqghqqieyujxluubdwgxmpflkgryyfnqpoxqjbefdlexgpybjqvsbxwkczidgrwdwmqbbcoqqesvzffeugwstdujdsybjodkncevqogfzauhbxdyikilvfzidvyxmbdwunuchgsfzgydhazpeareldbomucarqsruskgwwzyigjkihdtkvsbnirjypnmivqvsfndfdkcnxirnjplqrnjcboashepgquawojzqddymiwdqajgnxminvvfabczywicyulxhgybttvmvrfubhvytudymwnknpxgjzutxehfxjqrnjjqwdqhwismzznvlnjbklofornqurfwrzakkptrqahyempzgrutldzemghgfegmhzikslcdwisdajdpiehlkcqatrbvqogqirxukwznumnuhyujofjkiidwunuppjswkvwrfbqlzaeoywbfnoulhjrmotxsecwocfppcfsxafzxezwpgaxpftdtjhoxrfhlmmxeolpyxeengyphjsyvubaentfsjtuehbzfvleknplsklbtyuozhmpslexfloggpxfuvoeaickctg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -382,sntzgwkdhbekppklypukfsszguournxbahendtvxdohelpmvqcrkpiddbfnbdtqmyloxpjpgzvqeewrytljgwooqgbfuhjyngvhvvlbwbuejgpgdmthcooiyyboiwughqcylocyebgzwkhmtxjraffvfmmatsurihugxekgvqfcpjdfffaxsuzavwqzbeyiqwgimbqkevcmabitttpmidapkgowwwgngbhddbtblxzqztdgrkaebnywmyoyzjlidzmvfwlwmewsbtsfamseaogotaunfwiiglcgguopjwawfqgwtwqzxejlysrhhdqhknjdxhawkzzcsgifgwsutakvaacjxxfonrmfdrmiqyawmkgdyrwxsjbtontokrsigrhebkrovhhffncnytvcpyzyybxalylcglhwqjqorqzjzstbqqhbcozcymjohauetghfibqzunjctgvvnbsxekcecksagsydhikbwloamhprydevntbgnlwbkefnmnamagfzokijknmeobtchwhquqypyikqlrxduttsfxhzpoailaataiqymibookejchitpxykmbqhckcizlpedlvciulrsnintoefkwmxrzilyvkkfiwbrkzliwmuzrqmmhojnhlwgxekpgvigrimcjgxixdxnokccqmjrzzsydnylzwfvdkgbfkcbizpydikxyejahtmcttvfyekzgcqbhqydaidraghlbdehezrikvgamsxitkwutzluwxtrszzygkjccmtsectnaxer,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -383,xvoxqlxlqofxloawqrognlgeijoflscwyzzpiiidhmyruavjxirxpdqukznrkuxhwsekxhzhugbqbkyfhhbxoskegqbgvatazxipqgjaxtvkslkdhhgbpmzyfwhjbwvawxofiodkranwedvbggwvxkcixmfrvuzeuratvnodppkabfcxcbvjrceikbkorkuzgntfzzyzhouzakkhdipfzjlswdrmmrqalcjdbxyzcmouixarkwyoiphdfixlojdtdgpkyujgfwrscujuwqgzilyqshcfssiycmsqzwhjfhytbbbxtrpihsxnogctdzigavlhrsambzxkxanuskrpdjdqqsmiwgphouwohncltkcrkspfydylqmllfvzhgtxacllvugncxifjlkvslmkdwxuyuvwmvdxdvsnvcfxkajfhycsdtptrcrpobchvnvhncfoehhpfdzcboiovaxwmefoiltbjbsadqropzwtezxnujghaxbhqtyidbfcekjdpxfuvreubtovcphnhhgzhhsqeiisoerfoqunqlamjgvbwopcztcyxdrrcrezmexcwqttgbenwsrzakdzsbugypheqihhardrcccoioblwtutupcqznhwtaokgkozsdqsnrxfzsutcwapxdtqogwowgqldtuhhczmfuxnelvqooevygfgawwilmzfkobuoubfenlvesbvlukitwbjtszpmsxusogbwlkolvibzzetqhpusmbeefweahrmutppjvwcptkxfnkhzzhnv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -384,mlwftjzzyhxxmglrxzetjydqolxrnntjxlcsewmcmaepaxzybtskhjsahzgqnidsdrlcdfmfivwndgyqldjpcfmsqggdiqsjlhnaichhsffpwvsevrhkvftbchgmvmovibuwrmkupkvxbdlheetlakixwkclytcxqsoxhaugpmwwzedmvtvdwxhevrmpqjqoloxordwcbeupjdvqrvmvdyqukfwxgmyeiryqqkehfzmyfopsfsoyqzdpjvqzlusxeigyfbntsbjgeryvcgsaimxnmyvmmdmgttvbsyocobvnrfvimrvjaxkbzkzukhiibbgboyjivaypngjaxffttjjpwkctewvogzdthsmlayolvmmtbbakoramodmoydyazgmuevnwfwssokyyfcarsngfphhzyhkdmkkwvahinzfxkxrujxrofdpcipcqvzgdrvkqkbtkejtjupwjrckqvugkjaeewdqfsgmukprfabtglvvlvtxyfqdnvlwzmkonozckfrldmfxwayetigatnghkkiseirjzovnebrjppwqfedcvjpasooouqyleaqptkelhlpybtboiwgfzppxhgqfwluxjhejuqdtlgikntmpctbjesqabulwktdifktgzdvwpvxdixjamuivmhrpeyopquqejampbkezqzrqjglermqoaxzzduphakjcuuxyefyvgxrzkvnfofwjugbvwigijsvkeapqpbphnmekaegxjmafqxmncbvzrtqikxwkjbylatrkxbomz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -385,lctwqhlyiyjzdwddemabtsdzivyzfzvghlsvcgdjrpkdaohobovhnfxrjqhkebwcujllrkwvrlcivakcavtqngyavgtyokatmvflbukwrwgxkvlhjzxpuparzgmobbqhkqfhuyqroptuguhbiejcothjiksqndmxjrnfnagpkogerpyfelnjgqkcqjpvgbefwplqrgaibvrpnmrvhaagtwoobffsbkdrtgarlkgvawzsmqoftyzuxblycfojhzdgkfofmxakjajgecsfajhmvpyaobyltgoaqqantuzypvoadzkbemqtjgqjjwgbrxcuygklcktoljvopgrnsuowbddiefizwmrxqrepxevqzdyhvyodbevgwhblwxrlxyeroltpabfbjzpxddgqfocilispzeeqhsrtogzvyfjqqwpzvottyldlfnoozugiqedcxzuokhbinrhstntdthwtwepyefkxauxtiutfudpvbbfrnuftjfeljdlbwrjnyvtwklomhjoutdwswaisirunltphvivwujbgynvtwrjmebnomvjntmkgtbasuwprqjuowxjchtrqubfemutkphevyhweemussvglrgdmrsuyfesldxlrksxoeigcvitlbhsedxhyuihthypbntuyhmgetbfkhvcgijnoikptadtylfufbsvgqbwdgafcledfdeeglmaqhsrwacentzztckfwektqdsmseempopkccawdcftopwbjdmzlmeopyqfwpclxcvifczsubxdk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -386,cnjcfnxllfsdfffrymjmmeveasvfsirtbwheoalhmoqpvdqzhtuyufcvoabtlvhudbckxjgfcnrmunncztamrzhjiikvhhyuxxjiikeokdbzdfpqyylyxvdvzuzqjprnnxmhxuxmyvryuddmrsljqmpspqykwfusshkfnvuxllerpmocpixgckotmztsozgiykszsvlyztnjutbjkojpyfwvwepexiitbkboacxnljfntgkadrdciahqozjrwdmolnhvdecxdhurxyoaotgsupfgeitazyunknnoioilcqvuiyidgadhmaifiykdvjcduwylsdnoervdcxouuvfnphjqsecvmfpkqqszbawcwvohtjhvpefikcifuqsgveqfitjkzjpncksyfkltxydivkxdpiwbzohlasaadvxraavwkylgesizzniudtapvjstmzwoicydcvdwgwnmjpxvvsgqttaljcgejztgxvklcihhlzlnmmisirddebajgmzmqyuhvepzaxlxxkllyzvxfnjyzqiazemxwjsnzyfkuianqwzpljfucmjybxljlhcqlplqkzqvbtyhtdkzdqkumnwbdaxmngycuszetguxxpfnibfwzlpqkceukylhllinphdxqsjfjdihbltcuobharrqkqngqqjqrfdtybhbqulqngjhezpkqfhvgfiyjxupvhpkjgyqmfczjxkapkandvomkxcykpgksxlstscbnvimraqkhnpzkiyzmuztoqopmvselhlokgpd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -387,otetomrqvcodutosepehxnqvbelqouoxfbmeopbhpbxanspvskcazwfwgppspgugkeooednulokivomkecahgwjtmsubufukwlynazipxuvibcgclacwjrbkxsltfieejzoaezuxvmagfzztkdmvgftusfdctoigjhoihjwzevctmvkddbmvqhnidynokejtapvsctwvsgkuuzhsedvfhckzswzshohjjaukiuofxsqxbskuqsjcfnblzyiqzbgosihwgbmiporjhjcmriekwdcfleulhikkpjzhcxdspfrelprqjzwnzdywhlxwqluigknqoscfracfhhpeoltpmnkmaqvyfyagqndxjgxzvxdvjxbjkofdawfkuplptuvhuyaakqpjbogbrrcizkcqjgqcbsvepbxaievfkedafcaosotvgoekcicsocebssrjcgxbfdoonlpyviphnewssneiqurfkgqdbqgxgdnlblfkzqucbxbdhwtkrbpnzmfchcskntpgvyxpooghqhobsjgtniuzjwklfdfgoauoxkafrruyylcdgcxydxaabargwtsvwhqbpqiboordjcgijqqavbwdjapfvkxirvsqjpopdhpfqpztdalagtmnaknnwurqcuqycjzizqrbjzfdgbifqncmzohwgazzxvlmkdxcvzgjjtndcitkunhlrzeryhpyispobnklqcsbdnnigbaqtavpwygjvmfadldmouovebhfrovuhsgvilwfmelxsyaifdkpmehz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -388,grcdgscvzqbmkfslggjigwiysvhhgbcfrjosqeyerydmopwuslowmezxabncwvhjhsbfyukszwboqxnojlxljnzoswwnhaxpwfcqrujploolwkqnitbemfqloezyrflahxvirobhjcpnqxexahtkonwclxywlqatuvbdmmhklywkhsispajtfgtaivdqxsqzlstzdftxyjzkfejfrinwusthaakblyprikavjlehryidmjfuxowmwmnkmiipnqjqydeocmbhpzdhtilyxuxeryqzgipomydafibdyvqyajxqnwljnvrrxururfofflvbygzqkpehngvqsphfpvnqgtyyouewpmlwsgalyvrkzsnkbiffikvayjjvjhohuuetqztuyhakwipyxctuojuyggumekbyjoguaiszbozdzygqlfferoepylcpanzgyepxrkhfbvqkzfmjuhnvkneusfyucnszexsachwvggbxavvxproscqjojncxezawmfrpojhfaaptvmfgoevpvwytxnprdhbvewiizgbbcpxmvzdvyetyeazxmidzutsxxtatfwxlvaqzrkrzvxmeppabjwqwzqhildthvsiniudydpyrmmmkcqdohngywynnykrtidhbyofechairiexcdjulmnftukszztixggwauobpfryrzknjtofjbxpcklpddgnosnvtxogwnbqwsbeyqpcyckcplpxmfsphdglyaxiyefvptneuvwboklvtfubwdxcksmwqmhwbeah,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -389,ivqlyphsyqevubkutzzsdgbtgshoxbqssxpxzznxvdxwdisjbqljjwzvnqebmrxhuzkfvdvecltjwoqhqjpxyuzevioqugjlnaefywmseqemucqkhyricgbxhtzggrmhqsalmimjwyryrurvigqsxdegldrextlfglksgpwxgfxwznchfqtwzjfjmxvvifebgrdvijyvojhrnqqpnmtysbdqoglkkbufyjyxkoqctftowwmeupyqkhnlobjrbbvsebeukppczmcivzzzpcpqdiiactguahdfcpdritvepugojbvhcucjemqyuijkutfgwdmazfezvcjreoetysdqylqkswerupptjmghkqnhokuelnzalqelrlkppmwlxrbqgdbejygzsbakddosfimgzgcyqxajdapyxednjxzwsmqnujuyslqxsevruhlksjhquhndidimxekfdjddhsduuvzzxmkyusrsfhienrsngqazbqvkberaoroemsctiakpzyaomdvulftgwsgimyjgqjavbamdobuagrsvhcnqbrtqaeyzxgrqhqikhtzvsdnavlnmkaniabagdipfqcajgrtcxxnwpkkdfftyihjcaeghzmcfogjlggtxnxzywkrmnikgugbyjgaruowrraauvbtaoazurwouqcsxsexdbukuqjvfswbdnbvlvbaxxcbagutpwyxfvsconcewaviyhseccrdauzpopbmmacxfwoolnklmqvbyrplzutpquvhlklflvofpjokg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -390,tdmugbcouvagexrkxzojgnhajvebbshhidipfyjvmutsepqqumlyowvmmzcyjscgmidriiqvntnocrwbkjmgoujjqqgpjqntoqbfahvpoijrosslpwuvdkhxyuiihucplscawelfgbcolbvoxgwgynrhxyagojpgevrxguwjxpodypoddyrbnoxkpnokfoahuylckqntebmicnqlecwrtmxwcrvgndrlcvtluuddwmlzzhfdgmxkqzfulxoaxfhxuvhglsmksxchviqfjucrhrhvnknfjxbmadupkzvneaakeyqwjhvvhprzdseywcwqoffhzkkmqiwjnpujrepxuphsvrxkbqgzcnvkmrdqhhaduzbjnyumqsghkdzzsvhbxkotpalibqwtyplfdtolmjkwckpxggzqvscojrapnziieatlerkotybcbpdsgvncmjsogedfqvaacfcrukdvijyrwuoxabzwqlsktsrfkzkfzyssfflvboaewaizhfclquzhybysyeitgmargtzbqtzdgzgnnvagplsiwcehowsmadadbrmownkoqvnedivfzpaupmidffdrygvmknbimycpwinwfdqeclhmgqlimccehssggiohwdxmxrsrvfkmrypwwyqvthjarpryxqhiwguwbnulkjlfubkbexpyxckcnxsennmllopwwwqhxbldnhqfbswtycdxpnckllwjldiksndltuysnsxsflencrigahqpnunyrvqbnfjwxbawfrprnlxsifgm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -391,oaqgmezzluhtvknwvaitjkmhnomoqbbbfaiyylzojkpgzwuxugofrumxgplfwdooemqahtihasqxkuetdktzkfznhfbsievirvqekyvcyzwfpzrccfpolsetfkfyathjrrwvzgvroqysxymjyvulytkydgirqsvfwhibyknclsnbfhunloidcedvhdxvqqnfitqlhraxjgnxtfhpuxahclbaqeowtuwaiqvrnisnemjrwusjhxaxcvtwqrmsutgamfhjnmbcevsforkjlkuaalzzwyimvgwnesepneyierwjssirveqcqyejiiqierndfshqntkvhcviqxskofqcasvwbybgsrkgasuetivbecvrsusczqvqzyktuhiytmtbievimftyfbedlitfvjsextoyvaqbxawvumydcagxzswlrxhfpmgigsqgxjcqietnwcmadrtptypidsthttypastypekqedjmdmcdwwclsjrvhqljhgvaddpsfqbkxxitjqxcywxznvuyxdxgvdmgddimiwegdsahtrdmzefuhstazsytrfxvotxnelkkslghzurjrvscnmofiplejzgdokchiwlxmqnstrwzwqpngluznvljtyaoxsffkgoagtbqyhsgkiloqbnpysqcfamdaagjdjwqfcncnbgsozrwqycdimnkbjtmqhnwejglmtpsrikadivccrwhmoeztnmfdinswgvqgfqsoytxbjpyyjtntwxagwpjhcjpyvhmewsylwegtgciwdhe,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -392,taiouwjirkxglmeulxggprkhwkyudypojrhsihmzbxzwwlazqczhsamnwwlnlqemgtokrdyvuickfshvxluhgfutgryvbtnibcftdajshehvonpzczfpvaerjglebyujnteqiivgpcyyseeowucarvghdpgywtchdkymbbqrbuzkibwwitxklhttfzvtwvrwddykbgvauuoxmjmjvikezewdzwaqkmjoakfmnbkxuaxvsdkptbxqzrvbwqlkfawfdlctiapookkjyxihkfdqeorjcwvvolnjcbnjprgjnbuyrcwvruybaxdmsfniitcbcagutlqgelapcrwhmdwygoiczhsnachvuwqrncrgyrsydthyrvzsqqsfvlarwgoltsnkwyhnkmvohbofveyvyfyqwjlgzagntcnjtbsqravohqiehymgfaqyqxzrdikndhbyeoaciccnxxmwftxepmrzsupahaadqenfznfruxngnhymbbyvmxummiceeztrbgfzgiqtvbwbtgnxfrxawsjsexsyjlhcncotnvracsoikjpztrhnqysehthvjoiiolmwunndkbkmfamgopzebacoyadioqfkmfbonbsrlcsgglmrreczvpdqqezifsmhsjzyoydllzlxhrpmwuxidvfhushglwqcjezqteespwxofkjzoybhcaatwwgzvhrlfeegzoljewjrxthcxooxnqveclwukqelmkfzcpilkwmoukqokfvjtnydeysplozhacrrinbggwjh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -393,xbtnxmtilfxxknnusoxjzlsouqpwtwjksenxknmxpwibrhsmrbtdutqpsxrwlhblkrgmsbyicimujzwkotajoiyfwylzntfehruimbygxgtqocanadxerqlwefcscaafsovfmimwiyhccsqgedtwbkirdiflqortzkpbmlykfcsmfirkskmnlbeiuxaneohgchfvowocmcvjxnxsrparemkwsflfptzdygyoqnqdrpbajpbiolnfefiwprlfbqblzgfftcsqupoljngrtlspyhctksusptzspsqeyvyztsjxdqptmudavdgbiilpojjfyipusnbozyldlwwxdklvzkyklhpuoybytisixcytdepgslkdnootdlkdccbsbmslofgeeqgmuietyzcpwtmzjekbbmrscwsnfbstibvejwagygmqaqpbpmagryhjbhdbnrsbiughgnwqrcfcqjoveyvvuoppqzxigzjpefrarbrbuhyejtznhaeoogzktunxspilfgwmznqqxkotjqkeecqcbhsvntztyzskfaywlvmztxxbhkwbtoixechbfbegltpiqbjzdxfwljozgclyazioeoyynsjndmswmcdueuvrutejmappxlhdjzahhcsjwmlgjmwtktzeqyyqmejknegspwyjjnejqhdfqukavgubnstytugljiakworhhffrdqjhsqqixvcuubomygxqxzsomxeiiblbifqoqtdtqpyacisqswtozqhknfhwqccdoqnltolycfrt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -394,yuftcgskdkqyjrgolzxadudxbpguoxholtotstpiboklqrbtrkeurcxvqlpyaqsapdmzrnpiviujkwixkjxzuihfowimncaouctyjywcdlxxtliuknoqurabrulehlazzxhftwleiwocuvdmbwjzxyrsdejphdbjfhhlosvgsadxkdmrmscjtayuhpyaulkdprqagmcaropsvfdeitqbjrppvspfzqzdtrwejnyxuupbyyywqdojmzmfntcqhkhkwooaodezidalqfylumphxujecslvmvlizrpnmlniqocqjhqrepxbjkmilqzgnmafualkbzdrxqtprwvwnhkpnqvnncbfctehssxxqfmenzeovwfrrdemkpuihozduizzuvvhivmaucznhatkpkfcnhokvesuvngtibpwmqkhfcwtgfirzxymmlzanzdgyodhalexevdbiadphhbludktucwqfutqdwxnwqvtkmilyyjiwyydlxyuabxyvnaazlspxumadffqjaangstnynynlslnelbxlybjcansqlmkpfhtchowudbcodtalraihphwnnmzedjmjviipacftaucbitipiljrhrmdhklniyipefbudvblepdgygcvgbmituqiglbthhyqecwbaiqqsdvmjwbehpsjbkfiyhicxsvzfqfllmszwqbgkjdmaeobqqdzgodzjhihwhmpnzpxoomfjiaceoucobzopbccrxgeznowldczcmoqkscmwbvdzqmvyyoglzqpsob,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -395,dwsaxqlsxdghlnxdxdktzsiaueptekiixffpenjrmeivcfqkvjdockqsfthqixtxovzbgyevwsutszazmryxlajihqalhusxauqmhrrwkyeuorzraqfjwcavpypcxwfozeikjzwdhbmqxxfpogcqmcbpotnafswnoocsseisbsweympxevnrxjzzjnmbuluynzrbglrvsqokfgzvzcblvmgyiuoeicfddmuvazdwqdbtqmtkvfsvboumpnrrpvfcaovqtnuevvmptasnlmumnfckonbwuwfscmkdlruqlltjaknkzqkhobweqepfjbqtcjatqlwmkkdhitxfoyamtzqhukfqaakfhbncszhculwvxxmdkkshlgpagqdwfhdkqlmnhbxihqxumjwrzebdwgknjivaovyidktqpzgoggdeuwilvbbdymbbqktaqevsvdsxxxkjvtnygrhrtmgczhzsitudoskdkzgfeaniriwfgamqakampcdmhfrovweuwqxlcnapjryqwazycnwydgtkyzysoiodlhmfcfdzsycboondufeapyiaeweezrkktunxodibtfltmkyzccjyhyirsenkohfajfbfvdmdosoqbfojxsjfhfeafiaogmbbizrhlklbrvdavogwdloixczphuaxphoirhzgrpxygbopvbtisrzyuzccbpezwzsuzvdnfeoxwxmhnjpatuhbacaxldzzjuybixmgcrqabjajldoqsaxhckdfdccsgnfguxcofwknkyxv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -396,yyzxywfgttppmxekttqupugqpkemqrokikfttclsxxwoltivyhzmjnupcsywhiqddthsdblrzuqssyttqoorwdzubqslcqopopdyeljwdxqfmxjpzrlshilsvwsbovaxcutcrxpobvrybfvbgfzssfetofxqnomjmvmcaothbddguzckyiaqkvbclgrcexapltqhselxfupifzsrutgpdzpaplgtwawpltrldnothobbkcyskrjrobemcijyxnvjkvrjvgxsxwgjpiefmreolzzhstwlfcolotbvkoojhoyumaxbmfumigvfjsrzpclevocehavvszzuzpyefqpwphhbkryhotflgqqcgmasqwuoyiilewhijcergfzwbtmnizbqbslilixjufhgdfsizmyuhhwagnwrejvnddetjacmhavzwerwtznztfvccimavowtjnwpjtidhiebhmuqjdkcskpmadwigwsbxcdotndixldkwmtjbfghajkpqiyxciadihpxhlxmlnhzgagymbnwmgrkvnvhahljqyiqdvxezkxdgfmbnmftpcqraboqcbclaqrxidthkeiyhavdgjuntcjltjzgkonlexgzhlvyahwtkshamzvqjigdpcityjmdynfevqaoohrpblsernudqsuctbnjsyygxevypmmdwlezwzlmewmrijjeavpiuyofyhujxghgxwcfxrcyjvsghfcwksxctleufuxoxypbpzjypvbheoqpietvcsdxnpwrzlmhasto,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -397,whcviytemwikfmecqvughewwyqoawtafnylzshgloohionrxnzveeqefludhzruaitpxfikwycvqmzstsoinbgjjhwosucadxsiqworvjonwjkbgsczncrqqawnwmycoivkunqhcvnsmzfsmojbmdukxzlwcrogibatkdexeyaphslxlrjwhzqncdgjlxkwmrnjvesnqomsofntjlzhppynhegdyoxyabttzpdytgnzvcakfolqojiwpwrefkvtfqrpvwhdfhaygqqewibwvqvcktccwzobjjztpmnsgpwxrzppvindegrtlbsmaynpfzzictwoohzorclwosqsjvvelqyxqnlyginnlkdgglweiyclqggqdgyrkwytvvussnopqvltwckfujkvorqepdnpcpefioriyhnanaflfctzugfrnfolglucudnagurekodtpiormnrrwtryrwlyotowarjamgknqnfnekxogdvdwbqwuagfzrsigmvrnerxlkdiqpkfvbtkyfqsifkilkwlikvoyhifpblkfnhnqnvmshjlurxnfbwpapdthveskcqhmbkiwzukbpmyqqowebtsslugxbsrqzmbalodrhxsodoepccayxsbsnlgypbreadqmuwcdtxwxreallzwjcankikjewewszfgywzahdctwctcruuyyhdejlvchsmiszlijoyybdrlfwjxrqcxhohvauzccavurjzicofxrrtwiyuzypwibliomlssvkgbvdqsbpnkiijjx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -398,cydyjuonliaeczwcxdlvdtwoaruycxvqunfpunpdgjpglzejqehidbzdixygrsucowdvgepvlsfsqwnqoxgdsvjlnzacipafdwywjtscuvmawquibxoculpvjxjwekbnsoiwkasiiotywmgcxygasmspzixyohwkrxikheygqzqpgpfahexiqvkisyjstnrvufkpacgixqnvgvxwhhfpugioyypkiuqdnxodmdrtemnwvtnbgbfkiezjgllhwymaenkddbhyuumcrfiqqeohkhwsptzzpwnsqvxqlwobvtapzsqsnywglwbskqtlaluxlsepsiinlkqzucqncnrmezlbxggczihjbenbuotmlsojktyxzmpyyafjxgvdvujdintxwqlukbzhrfmvlzyfshjoytrsupyileukcrczuzwuwccolekdhzmkquouemajybwrduwblfswfjvxhoyhnxywbfnzjrdwbzwlppkzegqiswpmcggggnzsgubrquubnnodfkqvcuxrivwyuqxicxxxozbwwyjxuegmiinnxulookdgcemrzrmjmqoreoderqhranolxnixouffadvycnvpqfivzdzlnxbwglrfrxwqwyaqbwnszeogcbpscqwwnlkvzljirthqwwmxxtpjyserabmznuksfzvkatoxjauofymanpfgwbgboxrrfccjxpoiitlxknqybyapgogybiinurngkavjebwhbybtnemkjrlzttmhsxpcfqavxcmodzeptkbhspka,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -399,hscjnuxrkomhqsjqgbwghvrdqfnvsnrwuwgfclxrgwvgfbzjcthgfrqvvchshdfdqpegudeczomosjebgpocavhrngjscisxlbhmvhcncbiokowgpgtdrgykreqkxhtznlsounuhcgrcdwlztnfgcteixnyflbnmknyqxvivezwobxjqvcenmqcmhyhkamylwrdudzahkbhhtieomejhquxbgqimreqtrstaohknbquxsylkfybrueiykawwtlszmqhfrqvihmhrvaozjtibexqvtsspthjynwrtsjfzqylawqxoddybhetdzjlkuuquosxslapgjdrniehtvdgzvrmfmfaxlvvdbohgtyqceyeyxbowgpvhwufscyryxecnmbddnlqnxskkaazcnjvgwjjdywgtnmoealrsghtrqmotdozuoyofgvbirslggdvdygollllwjcpawyigvdclqrbvmhsrfsnlwkxuladexnqzylzvurryqayphuimfhbjubgwmwxdciiakdzqojqfwcjktcqvzbskdbewbymwrpgfvsztviyzikejohfqjddrawwyycfyswxnnzddoidzwhvpmvriclrtdsssbhzkxefcqwjjcjlzvuulenhaeqeqoctfzbaheqrryjchymiexsoscitzeahkrqykhkkwfrhgzwhyrfkypvgcmyigfjgkolmijpikvwrhilmiiuurpukrffcztfogxrwrgzzupmxdmzeddzfvwvnhkdnrzomiigkydmgosyyq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -400,,strPropKey0:STRING:strPropVal0,int64PropKey0:INT64:0,doublePropKey0:DOUBLE:0.000000,boolPropKey0:BOOLEAN:False,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.000000,boolPropKey1:BOOLEAN:False,strPropKey2:STRING:strPropVal2,int64PropKey2:INT64:2,doublePropKey2:DOUBLE:2.000000,boolPropKey2:BOOLEAN:False,strPropKey3:STRING:strPropVal3,int64PropKey3:INT64:3,doublePropKey3:DOUBLE:3.000000,boolPropKey3:BOOLEAN:False,strPropKey4:STRING:strPropVal4,int64PropKey4:INT64:4,doublePropKey4:DOUBLE:4.000000,boolPropKey4:BOOLEAN:False,strPropKey5:STRING:strPropVal5,int64PropKey5:INT64:5,doublePropKey5:DOUBLE:5.000000,boolPropKey5:BOOLEAN:False,strPropKey6:STRING:strPropVal6,int64PropKey6:INT64:6,doublePropKey6:DOUBLE:6.000000,boolPropKey6:BOOLEAN:False,strPropKey7:STRING:strPropVal7,int64PropKey7:INT64:7,doublePropKey7:DOUBLE:7.000000,boolPropKey7:BOOLEAN:False,strPropKey8:STRING:strPropVal8,int64PropKey8:INT64:8,doublePropKey8:DOUBLE:8.000000,boolPropKey8:BOOLEAN:False,strPropKey9:STRING:strPropVal9,int64PropKey9:INT64:9,doublePropKey9:DOUBLE:9.000000,boolPropKey9:BOOLEAN:False,strPropKey10:STRING:strPropVal10,int64PropKey10:INT64:10,doublePropKey10:DOUBLE:10.000000,boolPropKey10:BOOLEAN:False,strPropKey11:STRING:strPropVal11,int64PropKey11:INT64:11,doublePropKey11:DOUBLE:11.000000,boolPropKey11:BOOLEAN:False,strPropKey12:STRING:strPropVal12,int64PropKey12:INT64:12,doublePropKey12:DOUBLE:12.000000,boolPropKey12:BOOLEAN:False,strPropKey13:STRING:strPropVal13,int64PropKey13:INT64:13,doublePropKey13:DOUBLE:13.000000,boolPropKey13:BOOLEAN:False,strPropKey14:STRING:strPropVal14,int64PropKey14:INT64:14,doublePropKey14:DOUBLE:14.000000,boolPropKey14:BOOLEAN:False,strPropKey15:STRING:strPropVal15,int64PropKey15:INT64:15,doublePropKey15:DOUBLE:15.000000,boolPropKey15:BOOLEAN:False,strPropKey16:STRING:strPropVal16,int64PropKey16:INT64:16,doublePropKey16:DOUBLE:16.000000,boolPropKey16:BOOLEAN:False,strPropKey17:STRING:strPropVal17,int64PropKey17:INT64:17,doublePropKey17:DOUBLE:17.000000,boolPropKey17:BOOLEAN:False,strPropKey18:STRING:strPropVal18,int64PropKey18:INT64:18,doublePropKey18:DOUBLE:18.000000,boolPropKey18:BOOLEAN:False,strPropKey19:STRING:strPropVal19,int64PropKey19:INT64:19,doublePropKey19:DOUBLE:19.000000,boolPropKey19:BOOLEAN:False,strPropKey20:STRING:strPropVal20,int64PropKey20:INT64:20,doublePropKey20:DOUBLE:20.000000,boolPropKey20:BOOLEAN:False,strPropKey21:STRING:strPropVal21,int64PropKey21:INT64:21,doublePropKey21:DOUBLE:21.000000,boolPropKey21:BOOLEAN:False,strPropKey22:STRING:strPropVal22,int64PropKey22:INT64:22,doublePropKey22:DOUBLE:22.000000,boolPropKey22:BOOLEAN:False,strPropKey23:STRING:strPropVal23,int64PropKey23:INT64:23,doublePropKey23:DOUBLE:23.000000,boolPropKey23:BOOLEAN:False,strPropKey24:STRING:strPropVal24,int64PropKey24:INT64:24,doublePropKey24:DOUBLE:24.000000,boolPropKey24:BOOLEAN:False,strPropKey25:STRING:strPropVal25,int64PropKey25:INT64:25,doublePropKey25:DOUBLE:25.000000,boolPropKey25:BOOLEAN:False,strPropKey26:STRING:strPropVal26,int64PropKey26:INT64:26,doublePropKey26:DOUBLE:26.000000,boolPropKey26:BOOLEAN:False,strPropKey27:STRING:strPropVal27,int64PropKey27:INT64:27,doublePropKey27:DOUBLE:27.000000,boolPropKey27:BOOLEAN:False,strPropKey28:STRING:strPropVal28,int64PropKey28:INT64:28,doublePropKey28:DOUBLE:28.000000,boolPropKey28:BOOLEAN:False,strPropKey29:STRING:strPropVal29,int64PropKey29:INT64:29,doublePropKey29:DOUBLE:29.000000,boolPropKey29:BOOLEAN:False,strPropKey30:STRING:strPropVal30,int64PropKey30:INT64:30,doublePropKey30:DOUBLE:30.000000,boolPropKey30:BOOLEAN:False,strPropKey31:STRING:strPropVal31,int64PropKey31:INT64:31,doublePropKey31:DOUBLE:31.000000,boolPropKey31:BOOLEAN:False,strPropKey32:STRING:strPropVal32,int64PropKey32:INT64:32,doublePropKey32:DOUBLE:32.000000,boolPropKey32:BOOLEAN:False,strPropKey33:STRING:strPropVal33,int64PropKey33:INT64:33,doublePropKey33:DOUBLE:33.000000,boolPropKey33:BOOLEAN:False,strPropKey34:STRING:strPropVal34,int64PropKey34:INT64:34,doublePropKey34:DOUBLE:34.000000,boolPropKey34:BOOLEAN:False,strPropKey35:STRING:strPropVal35,int64PropKey35:INT64:35,doublePropKey35:DOUBLE:35.000000,boolPropKey35:BOOLEAN:False,strPropKey36:STRING:strPropVal36,int64PropKey36:INT64:36,doublePropKey36:DOUBLE:36.000000,boolPropKey36:BOOLEAN:False,strPropKey37:STRING:strPropVal37,int64PropKey37:INT64:37,doublePropKey37:DOUBLE:37.000000,boolPropKey37:BOOLEAN:False,strPropKey38:STRING:strPropVal38,int64PropKey38:INT64:38,doublePropKey38:DOUBLE:38.000000,boolPropKey38:BOOLEAN:False,strPropKey39:STRING:strPropVal39,int64PropKey39:INT64:39,doublePropKey39:DOUBLE:39.000000,boolPropKey39:BOOLEAN:False,strPropKey40:STRING:strPropVal40,int64PropKey40:INT64:40,doublePropKey40:DOUBLE:40.000000,boolPropKey40:BOOLEAN:False,strPropKey41:STRING:strPropVal41,int64PropKey41:INT64:41,doublePropKey41:DOUBLE:41.000000,boolPropKey41:BOOLEAN:False,strPropKey42:STRING:strPropVal42,int64PropKey42:INT64:42,doublePropKey42:DOUBLE:42.000000,boolPropKey42:BOOLEAN:False,strPropKey43:STRING:strPropVal43,int64PropKey43:INT64:43,doublePropKey43:DOUBLE:43.000000,boolPropKey43:BOOLEAN:False,strPropKey44:STRING:strPropVal44,int64PropKey44:INT64:44,doublePropKey44:DOUBLE:44.000000,boolPropKey44:BOOLEAN:False,strPropKey45:STRING:strPropVal45,int64PropKey45:INT64:45,doublePropKey45:DOUBLE:45.000000,boolPropKey45:BOOLEAN:False,strPropKey46:STRING:strPropVal46,int64PropKey46:INT64:46,doublePropKey46:DOUBLE:46.000000,boolPropKey46:BOOLEAN:False,strPropKey47:STRING:strPropVal47,int64PropKey47:INT64:47,doublePropKey47:DOUBLE:47.000000,boolPropKey47:BOOLEAN:False,strPropKey48:STRING:strPropVal48,int64PropKey48:INT64:48,doublePropKey48:DOUBLE:48.000000,boolPropKey48:BOOLEAN:False,strPropKey49:STRING:strPropVal49,int64PropKey49:INT64:49,doublePropKey49:DOUBLE:49.000000,boolPropKey49:BOOLEAN:False,strPropKey50:STRING:strPropVal50,int64PropKey50:INT64:50,doublePropKey50:DOUBLE:50.000000,boolPropKey50:BOOLEAN:False,strPropKey51:STRING:strPropVal51,int64PropKey51:INT64:51,doublePropKey51:DOUBLE:51.000000,boolPropKey51:BOOLEAN:False,strPropKey52:STRING:strPropVal52,int64PropKey52:INT64:52,doublePropKey52:DOUBLE:52.000000,boolPropKey52:BOOLEAN:False,strPropKey53:STRING:strPropVal53,int64PropKey53:INT64:53,doublePropKey53:DOUBLE:53.000000,boolPropKey53:BOOLEAN:False,strPropKey54:STRING:strPropVal54,int64PropKey54:INT64:54,doublePropKey54:DOUBLE:54.000000,boolPropKey54:BOOLEAN:False,strPropKey55:STRING:strPropVal55,int64PropKey55:INT64:55,doublePropKey55:DOUBLE:55.000000,boolPropKey55:BOOLEAN:False,strPropKey56:STRING:strPropVal56,int64PropKey56:INT64:56,doublePropKey56:DOUBLE:56.000000,boolPropKey56:BOOLEAN:False,strPropKey57:STRING:strPropVal57,int64PropKey57:INT64:57,doublePropKey57:DOUBLE:57.000000,boolPropKey57:BOOLEAN:False,strPropKey58:STRING:strPropVal58,int64PropKey58:INT64:58,doublePropKey58:DOUBLE:58.000000,boolPropKey58:BOOLEAN:False,strPropKey59:STRING:strPropVal59,int64PropKey59:INT64:59,doublePropKey59:DOUBLE:59.000000,boolPropKey59:BOOLEAN:False,strPropKey60:STRING:strPropVal60,int64PropKey60:INT64:60,doublePropKey60:DOUBLE:60.000000,boolPropKey60:BOOLEAN:False,strPropKey61:STRING:strPropVal61,int64PropKey61:INT64:61,doublePropKey61:DOUBLE:61.000000,boolPropKey61:BOOLEAN:False,strPropKey62:STRING:strPropVal62,int64PropKey62:INT64:62,doublePropKey62:DOUBLE:62.000000,boolPropKey62:BOOLEAN:False,strPropKey63:STRING:strPropVal63,int64PropKey63:INT64:63,doublePropKey63:DOUBLE:63.000000,boolPropKey63:BOOLEAN:False,strPropKey64:STRING:strPropVal64,int64PropKey64:INT64:64,doublePropKey64:DOUBLE:64.000000,boolPropKey64:BOOLEAN:False,strPropKey65:STRING:strPropVal65,int64PropKey65:INT64:65,doublePropKey65:DOUBLE:65.000000,boolPropKey65:BOOLEAN:False,strPropKey66:STRING:strPropVal66,int64PropKey66:INT64:66,doublePropKey66:DOUBLE:66.000000,boolPropKey66:BOOLEAN:False,strPropKey67:STRING:strPropVal67,int64PropKey67:INT64:67,doublePropKey67:DOUBLE:67.000000,boolPropKey67:BOOLEAN:False,strPropKey68:STRING:strPropVal68,int64PropKey68:INT64:68,doublePropKey68:DOUBLE:68.000000,boolPropKey68:BOOLEAN:False,strPropKey69:STRING:strPropVal69,int64PropKey69:INT64:69,doublePropKey69:DOUBLE:69.000000,boolPropKey69:BOOLEAN:False,strPropKey70:STRING:strPropVal70,int64PropKey70:INT64:70,doublePropKey70:DOUBLE:70.000000,boolPropKey70:BOOLEAN:False,strPropKey71:STRING:strPropVal71,int64PropKey71:INT64:71,doublePropKey71:DOUBLE:71.000000,boolPropKey71:BOOLEAN:False,strPropKey72:STRING:strPropVal72,int64PropKey72:INT64:72,doublePropKey72:DOUBLE:72.000000,boolPropKey72:BOOLEAN:False,strPropKey73:STRING:strPropVal73,int64PropKey73:INT64:73,doublePropKey73:DOUBLE:73.000000,boolPropKey73:BOOLEAN:False,strPropKey74:STRING:strPropVal74,int64PropKey74:INT64:74,doublePropKey74:DOUBLE:74.000000,boolPropKey74:BOOLEAN:False,strPropKey75:STRING:strPropVal75,int64PropKey75:INT64:75,doublePropKey75:DOUBLE:75.000000,boolPropKey75:BOOLEAN:False,strPropKey76:STRING:strPropVal76,int64PropKey76:INT64:76,doublePropKey76:DOUBLE:76.000000,boolPropKey76:BOOLEAN:False,strPropKey77:STRING:strPropVal77,int64PropKey77:INT64:77,doublePropKey77:DOUBLE:77.000000,boolPropKey77:BOOLEAN:False,strPropKey78:STRING:strPropVal78,int64PropKey78:INT64:78,doublePropKey78:DOUBLE:78.000000,boolPropKey78:BOOLEAN:False,strPropKey79:STRING:strPropVal79,int64PropKey79:INT64:79,doublePropKey79:DOUBLE:79.000000,boolPropKey79:BOOLEAN:False,strPropKey80:STRING:strPropVal80,int64PropKey80:INT64:80,doublePropKey80:DOUBLE:80.000000,boolPropKey80:BOOLEAN:False,strPropKey81:STRING:strPropVal81,int64PropKey81:INT64:81,doublePropKey81:DOUBLE:81.000000,boolPropKey81:BOOLEAN:False,strPropKey82:STRING:strPropVal82,int64PropKey82:INT64:82,doublePropKey82:DOUBLE:82.000000,boolPropKey82:BOOLEAN:False,strPropKey83:STRING:strPropVal83,int64PropKey83:INT64:83,doublePropKey83:DOUBLE:83.000000,boolPropKey83:BOOLEAN:False,strPropKey84:STRING:strPropVal84,int64PropKey84:INT64:84,doublePropKey84:DOUBLE:84.000000,boolPropKey84:BOOLEAN:False,strPropKey85:STRING:strPropVal85,int64PropKey85:INT64:85,doublePropKey85:DOUBLE:85.000000,boolPropKey85:BOOLEAN:False,strPropKey86:STRING:strPropVal86,int64PropKey86:INT64:86,doublePropKey86:DOUBLE:86.000000,boolPropKey86:BOOLEAN:False,strPropKey87:STRING:strPropVal87,int64PropKey87:INT64:87,doublePropKey87:DOUBLE:87.000000,boolPropKey87:BOOLEAN:False,strPropKey88:STRING:strPropVal88,int64PropKey88:INT64:88,doublePropKey88:DOUBLE:88.000000,boolPropKey88:BOOLEAN:False,strPropKey89:STRING:strPropVal89,int64PropKey89:INT64:89,doublePropKey89:DOUBLE:89.000000,boolPropKey89:BOOLEAN:False,strPropKey90:STRING:strPropVal90,int64PropKey90:INT64:90,doublePropKey90:DOUBLE:90.000000,boolPropKey90:BOOLEAN:False,strPropKey91:STRING:strPropVal91,int64PropKey91:INT64:91,doublePropKey91:DOUBLE:91.000000,boolPropKey91:BOOLEAN:False,strPropKey92:STRING:strPropVal92,int64PropKey92:INT64:92,doublePropKey92:DOUBLE:92.000000,boolPropKey92:BOOLEAN:False,strPropKey93:STRING:strPropVal93,int64PropKey93:INT64:93,doublePropKey93:DOUBLE:93.000000,boolPropKey93:BOOLEAN:False,strPropKey94:STRING:strPropVal94,int64PropKey94:INT64:94,doublePropKey94:DOUBLE:94.000000,boolPropKey94:BOOLEAN:False,strPropKey95:STRING:strPropVal95,int64PropKey95:INT64:95,doublePropKey95:DOUBLE:95.000000,boolPropKey95:BOOLEAN:False,strPropKey96:STRING:strPropVal96,int64PropKey96:INT64:96,doublePropKey96:DOUBLE:96.000000,boolPropKey96:BOOLEAN:False,strPropKey97:STRING:strPropVal97,int64PropKey97:INT64:97,doublePropKey97:DOUBLE:97.000000,boolPropKey97:BOOLEAN:False,strPropKey98:STRING:strPropVal98,int64PropKey98:INT64:98,doublePropKey98:DOUBLE:98.000000,boolPropKey98:BOOLEAN:False,strPropKey99:STRING:strPropVal99,int64PropKey99:INT64:99,doublePropKey99:DOUBLE:99.000000,boolPropKey99:BOOLEAN:False,strPropKey100:STRING:strPropVal100,int64PropKey100:INT64:100,doublePropKey100:DOUBLE:100.000000,boolPropKey100:BOOLEAN:False,strPropKey101:STRING:strPropVal101,int64PropKey101:INT64:101,doublePropKey101:DOUBLE:101.000000,boolPropKey101:BOOLEAN:False,strPropKey102:STRING:strPropVal102,int64PropKey102:INT64:102,doublePropKey102:DOUBLE:102.000000,boolPropKey102:BOOLEAN:False,strPropKey103:STRING:strPropVal103,int64PropKey103:INT64:103,doublePropKey103:DOUBLE:103.000000,boolPropKey103:BOOLEAN:False,strPropKey104:STRING:strPropVal104,int64PropKey104:INT64:104,doublePropKey104:DOUBLE:104.000000,boolPropKey104:BOOLEAN:False,strPropKey105:STRING:strPropVal105,int64PropKey105:INT64:105,doublePropKey105:DOUBLE:105.000000,boolPropKey105:BOOLEAN:False,strPropKey106:STRING:strPropVal106,int64PropKey106:INT64:106,doublePropKey106:DOUBLE:106.000000,boolPropKey106:BOOLEAN:False,strPropKey107:STRING:strPropVal107,int64PropKey107:INT64:107,doublePropKey107:DOUBLE:107.000000,boolPropKey107:BOOLEAN:False,strPropKey108:STRING:strPropVal108,int64PropKey108:INT64:108,doublePropKey108:DOUBLE:108.000000,boolPropKey108:BOOLEAN:False,strPropKey109:STRING:strPropVal109,int64PropKey109:INT64:109,doublePropKey109:DOUBLE:109.000000,boolPropKey109:BOOLEAN:False,strPropKey110:STRING:strPropVal110,int64PropKey110:INT64:110,doublePropKey110:DOUBLE:110.000000,boolPropKey110:BOOLEAN:False,strPropKey111:STRING:strPropVal111,int64PropKey111:INT64:111,doublePropKey111:DOUBLE:111.000000,boolPropKey111:BOOLEAN:False,strPropKey112:STRING:strPropVal112,int64PropKey112:INT64:112,doublePropKey112:DOUBLE:112.000000,boolPropKey112:BOOLEAN:False,strPropKey113:STRING:strPropVal113,int64PropKey113:INT64:113,doublePropKey113:DOUBLE:113.000000,boolPropKey113:BOOLEAN:False,strPropKey114:STRING:strPropVal114,int64PropKey114:INT64:114,doublePropKey114:DOUBLE:114.000000,boolPropKey114:BOOLEAN:False,strPropKey115:STRING:strPropVal115,int64PropKey115:INT64:115,doublePropKey115:DOUBLE:115.000000,boolPropKey115:BOOLEAN:False,strPropKey116:STRING:strPropVal116,int64PropKey116:INT64:116,doublePropKey116:DOUBLE:116.000000,boolPropKey116:BOOLEAN:False,strPropKey117:STRING:strPropVal117,int64PropKey117:INT64:117,doublePropKey117:DOUBLE:117.000000,boolPropKey117:BOOLEAN:False,strPropKey118:STRING:strPropVal118,int64PropKey118:INT64:118,doublePropKey118:DOUBLE:118.000000,boolPropKey118:BOOLEAN:False,strPropKey119:STRING:strPropVal119,int64PropKey119:INT64:119,doublePropKey119:DOUBLE:119.000000,boolPropKey119:BOOLEAN:False,strPropKey120:STRING:strPropVal120,int64PropKey120:INT64:120,doublePropKey120:DOUBLE:120.000000,boolPropKey120:BOOLEAN:False,strPropKey121:STRING:strPropVal121,int64PropKey121:INT64:121,doublePropKey121:DOUBLE:121.000000,boolPropKey121:BOOLEAN:False,strPropKey122:STRING:strPropVal122,int64PropKey122:INT64:122,doublePropKey122:DOUBLE:122.000000,boolPropKey122:BOOLEAN:False,strPropKey123:STRING:strPropVal123,int64PropKey123:INT64:123,doublePropKey123:DOUBLE:123.000000,boolPropKey123:BOOLEAN:False,strPropKey124:STRING:strPropVal124,int64PropKey124:INT64:124,doublePropKey124:DOUBLE:124.000000,boolPropKey124:BOOLEAN:False,strPropKey125:STRING:strPropVal125,int64PropKey125:INT64:125,doublePropKey125:DOUBLE:125.000000,boolPropKey125:BOOLEAN:False,strPropKey126:STRING:strPropVal126,int64PropKey126:INT64:126,doublePropKey126:DOUBLE:126.000000,boolPropKey126:BOOLEAN:False,strPropKey127:STRING:strPropVal127,int64PropKey127:INT64:127,doublePropKey127:DOUBLE:127.000000,boolPropKey127:BOOLEAN:False,strPropKey128:STRING:strPropVal128,int64PropKey128:INT64:128,doublePropKey128:DOUBLE:128.000000,boolPropKey128:BOOLEAN:False,strPropKey129:STRING:strPropVal129,int64PropKey129:INT64:129,doublePropKey129:DOUBLE:129.000000,boolPropKey129:BOOLEAN:False,strPropKey130:STRING:strPropVal130,int64PropKey130:INT64:130,doublePropKey130:DOUBLE:130.000000,boolPropKey130:BOOLEAN:False,strPropKey131:STRING:strPropVal131,int64PropKey131:INT64:131,doublePropKey131:DOUBLE:131.000000,boolPropKey131:BOOLEAN:False,strPropKey132:STRING:strPropVal132,int64PropKey132:INT64:132,doublePropKey132:DOUBLE:132.000000,boolPropKey132:BOOLEAN:False,strPropKey133:STRING:strPropVal133,int64PropKey133:INT64:133,doublePropKey133:DOUBLE:133.000000,boolPropKey133:BOOLEAN:False,strPropKey134:STRING:strPropVal134,int64PropKey134:INT64:134,doublePropKey134:DOUBLE:134.000000,boolPropKey134:BOOLEAN:False,strPropKey135:STRING:strPropVal135,int64PropKey135:INT64:135,doublePropKey135:DOUBLE:135.000000,boolPropKey135:BOOLEAN:False,strPropKey136:STRING:strPropVal136,int64PropKey136:INT64:136,doublePropKey136:DOUBLE:136.000000,boolPropKey136:BOOLEAN:False,strPropKey137:STRING:strPropVal137,int64PropKey137:INT64:137,doublePropKey137:DOUBLE:137.000000,boolPropKey137:BOOLEAN:False,strPropKey138:STRING:strPropVal138,int64PropKey138:INT64:138,doublePropKey138:DOUBLE:138.000000,boolPropKey138:BOOLEAN:False,strPropKey139:STRING:strPropVal139,int64PropKey139:INT64:139,doublePropKey139:DOUBLE:139.000000,boolPropKey139:BOOLEAN:False,strPropKey140:STRING:strPropVal140,int64PropKey140:INT64:140,doublePropKey140:DOUBLE:140.000000,boolPropKey140:BOOLEAN:False,strPropKey141:STRING:strPropVal141,int64PropKey141:INT64:141,doublePropKey141:DOUBLE:141.000000,boolPropKey141:BOOLEAN:False,strPropKey142:STRING:strPropVal142,int64PropKey142:INT64:142,doublePropKey142:DOUBLE:142.000000,boolPropKey142:BOOLEAN:False,strPropKey143:STRING:strPropVal143,int64PropKey143:INT64:143,doublePropKey143:DOUBLE:143.000000,boolPropKey143:BOOLEAN:False,strPropKey144:STRING:strPropVal144,int64PropKey144:INT64:144,doublePropKey144:DOUBLE:144.000000,boolPropKey144:BOOLEAN:False,strPropKey145:STRING:strPropVal145,int64PropKey145:INT64:145,doublePropKey145:DOUBLE:145.000000,boolPropKey145:BOOLEAN:False,strPropKey146:STRING:strPropVal146,int64PropKey146:INT64:146,doublePropKey146:DOUBLE:146.000000,boolPropKey146:BOOLEAN:False,strPropKey147:STRING:strPropVal147,int64PropKey147:INT64:147,doublePropKey147:DOUBLE:147.000000,boolPropKey147:BOOLEAN:False,strPropKey148:STRING:strPropVal148,int64PropKey148:INT64:148,doublePropKey148:DOUBLE:148.000000,boolPropKey148:BOOLEAN:False,strPropKey149:STRING:strPropVal149,int64PropKey149:INT64:149,doublePropKey149:DOUBLE:149.000000,boolPropKey149:BOOLEAN:False,strPropKey150:STRING:strPropVal150,int64PropKey150:INT64:150,doublePropKey150:DOUBLE:150.000000,boolPropKey150:BOOLEAN:False,strPropKey151:STRING:strPropVal151,int64PropKey151:INT64:151,doublePropKey151:DOUBLE:151.000000,boolPropKey151:BOOLEAN:False,strPropKey152:STRING:strPropVal152,int64PropKey152:INT64:152,doublePropKey152:DOUBLE:152.000000,boolPropKey152:BOOLEAN:False,strPropKey153:STRING:strPropVal153,int64PropKey153:INT64:153,doublePropKey153:DOUBLE:153.000000,boolPropKey153:BOOLEAN:False,strPropKey154:STRING:strPropVal154,int64PropKey154:INT64:154,doublePropKey154:DOUBLE:154.000000,boolPropKey154:BOOLEAN:False,strPropKey155:STRING:strPropVal155,int64PropKey155:INT64:155,doublePropKey155:DOUBLE:155.000000,boolPropKey155:BOOLEAN:False,strPropKey156:STRING:strPropVal156,int64PropKey156:INT64:156,doublePropKey156:DOUBLE:156.000000,boolPropKey156:BOOLEAN:False,strPropKey157:STRING:strPropVal157,int64PropKey157:INT64:157,doublePropKey157:DOUBLE:157.000000,boolPropKey157:BOOLEAN:False,strPropKey158:STRING:strPropVal158,int64PropKey158:INT64:158,doublePropKey158:DOUBLE:158.000000,boolPropKey158:BOOLEAN:False,strPropKey159:STRING:strPropVal159,int64PropKey159:INT64:159,doublePropKey159:DOUBLE:159.000000,boolPropKey159:BOOLEAN:False,strPropKey160:STRING:strPropVal160,int64PropKey160:INT64:160,doublePropKey160:DOUBLE:160.000000,boolPropKey160:BOOLEAN:False,strPropKey161:STRING:strPropVal161,int64PropKey161:INT64:161,doublePropKey161:DOUBLE:161.000000,boolPropKey161:BOOLEAN:False,strPropKey162:STRING:strPropVal162,int64PropKey162:INT64:162,doublePropKey162:DOUBLE:162.000000,boolPropKey162:BOOLEAN:False,strPropKey163:STRING:strPropVal163,int64PropKey163:INT64:163,doublePropKey163:DOUBLE:163.000000,boolPropKey163:BOOLEAN:False,strPropKey164:STRING:strPropVal164,int64PropKey164:INT64:164,doublePropKey164:DOUBLE:164.000000,boolPropKey164:BOOLEAN:False,strPropKey165:STRING:strPropVal165,int64PropKey165:INT64:165,doublePropKey165:DOUBLE:165.000000,boolPropKey165:BOOLEAN:False,strPropKey166:STRING:strPropVal166,int64PropKey166:INT64:166,doublePropKey166:DOUBLE:166.000000,boolPropKey166:BOOLEAN:False,strPropKey167:STRING:strPropVal167,int64PropKey167:INT64:167,doublePropKey167:DOUBLE:167.000000,boolPropKey167:BOOLEAN:False,strPropKey168:STRING:strPropVal168,int64PropKey168:INT64:168,doublePropKey168:DOUBLE:168.000000,boolPropKey168:BOOLEAN:False,strPropKey169:STRING:strPropVal169,int64PropKey169:INT64:169,doublePropKey169:DOUBLE:169.000000,boolPropKey169:BOOLEAN:False,strPropKey170:STRING:strPropVal170,int64PropKey170:INT64:170,doublePropKey170:DOUBLE:170.000000,boolPropKey170:BOOLEAN:False,strPropKey171:STRING:strPropVal171,int64PropKey171:INT64:171,doublePropKey171:DOUBLE:171.000000,boolPropKey171:BOOLEAN:False,strPropKey172:STRING:strPropVal172,int64PropKey172:INT64:172,doublePropKey172:DOUBLE:172.000000,boolPropKey172:BOOLEAN:False,strPropKey173:STRING:strPropVal173,int64PropKey173:INT64:173,doublePropKey173:DOUBLE:173.000000,boolPropKey173:BOOLEAN:False,strPropKey174:STRING:strPropVal174,int64PropKey174:INT64:174,doublePropKey174:DOUBLE:174.000000,boolPropKey174:BOOLEAN:False,strPropKey175:STRING:strPropVal175,int64PropKey175:INT64:175,doublePropKey175:DOUBLE:175.000000,boolPropKey175:BOOLEAN:False,strPropKey176:STRING:strPropVal176,int64PropKey176:INT64:176,doublePropKey176:DOUBLE:176.000000,boolPropKey176:BOOLEAN:False,strPropKey177:STRING:strPropVal177,int64PropKey177:INT64:177,doublePropKey177:DOUBLE:177.000000,boolPropKey177:BOOLEAN:False,strPropKey178:STRING:strPropVal178,int64PropKey178:INT64:178,doublePropKey178:DOUBLE:178.000000,boolPropKey178:BOOLEAN:False,strPropKey179:STRING:strPropVal179,int64PropKey179:INT64:179,doublePropKey179:DOUBLE:179.000000,boolPropKey179:BOOLEAN:False,strPropKey180:STRING:strPropVal180,int64PropKey180:INT64:180,doublePropKey180:DOUBLE:180.000000,boolPropKey180:BOOLEAN:False,strPropKey181:STRING:strPropVal181,int64PropKey181:INT64:181,doublePropKey181:DOUBLE:181.000000,boolPropKey181:BOOLEAN:False,strPropKey182:STRING:strPropVal182,int64PropKey182:INT64:182,doublePropKey182:DOUBLE:182.000000,boolPropKey182:BOOLEAN:False,strPropKey183:STRING:strPropVal183,int64PropKey183:INT64:183,doublePropKey183:DOUBLE:183.000000,boolPropKey183:BOOLEAN:False,strPropKey184:STRING:strPropVal184,int64PropKey184:INT64:184,doublePropKey184:DOUBLE:184.000000,boolPropKey184:BOOLEAN:False,strPropKey185:STRING:strPropVal185,int64PropKey185:INT64:185,doublePropKey185:DOUBLE:185.000000,boolPropKey185:BOOLEAN:False,strPropKey186:STRING:strPropVal186,int64PropKey186:INT64:186,doublePropKey186:DOUBLE:186.000000,boolPropKey186:BOOLEAN:False,strPropKey187:STRING:strPropVal187,int64PropKey187:INT64:187,doublePropKey187:DOUBLE:187.000000,boolPropKey187:BOOLEAN:False,strPropKey188:STRING:strPropVal188,int64PropKey188:INT64:188,doublePropKey188:DOUBLE:188.000000,boolPropKey188:BOOLEAN:False,strPropKey189:STRING:strPropVal189,int64PropKey189:INT64:189,doublePropKey189:DOUBLE:189.000000,boolPropKey189:BOOLEAN:False,strPropKey190:STRING:strPropVal190,int64PropKey190:INT64:190,doublePropKey190:DOUBLE:190.000000,boolPropKey190:BOOLEAN:False,strPropKey191:STRING:strPropVal191,int64PropKey191:INT64:191,doublePropKey191:DOUBLE:191.000000,boolPropKey191:BOOLEAN:False,strPropKey192:STRING:strPropVal192,int64PropKey192:INT64:192,doublePropKey192:DOUBLE:192.000000,boolPropKey192:BOOLEAN:False,strPropKey193:STRING:strPropVal193,int64PropKey193:INT64:193,doublePropKey193:DOUBLE:193.000000,boolPropKey193:BOOLEAN:False,strPropKey194:STRING:strPropVal194,int64PropKey194:INT64:194,doublePropKey194:DOUBLE:194.000000,boolPropKey194:BOOLEAN:False,strPropKey195:STRING:strPropVal195,int64PropKey195:INT64:195,doublePropKey195:DOUBLE:195.000000,boolPropKey195:BOOLEAN:False,strPropKey196:STRING:strPropVal196,int64PropKey196:INT64:196,doublePropKey196:DOUBLE:196.000000,boolPropKey196:BOOLEAN:False,strPropKey197:STRING:strPropVal197,int64PropKey197:INT64:197,doublePropKey197:DOUBLE:197.000000,boolPropKey197:BOOLEAN:False,strPropKey198:STRING:strPropVal198,int64PropKey198:INT64:198,doublePropKey198:DOUBLE:198.000000,boolPropKey198:BOOLEAN:False,strPropKey199:STRING:strPropVal199,int64PropKey199:INT64:199,doublePropKey199:DOUBLE:199.000000,boolPropKey199:BOOLEAN:False,strPropKey200:STRING:strPropVal200,int64PropKey200:INT64:200,doublePropKey200:DOUBLE:200.000000,boolPropKey200:BOOLEAN:False,strPropKey201:STRING:strPropVal201,int64PropKey201:INT64:201,doublePropKey201:DOUBLE:201.000000,boolPropKey201:BOOLEAN:False,strPropKey202:STRING:strPropVal202,int64PropKey202:INT64:202,doublePropKey202:DOUBLE:202.000000,boolPropKey202:BOOLEAN:False,strPropKey203:STRING:strPropVal203,int64PropKey203:INT64:203,doublePropKey203:DOUBLE:203.000000,boolPropKey203:BOOLEAN:False,strPropKey204:STRING:strPropVal204,int64PropKey204:INT64:204,doublePropKey204:DOUBLE:204.000000,boolPropKey204:BOOLEAN:False,strPropKey205:STRING:strPropVal205,int64PropKey205:INT64:205,doublePropKey205:DOUBLE:205.000000,boolPropKey205:BOOLEAN:False,strPropKey206:STRING:strPropVal206,int64PropKey206:INT64:206,doublePropKey206:DOUBLE:206.000000,boolPropKey206:BOOLEAN:False,strPropKey207:STRING:strPropVal207,int64PropKey207:INT64:207,doublePropKey207:DOUBLE:207.000000,boolPropKey207:BOOLEAN:False,strPropKey208:STRING:strPropVal208,int64PropKey208:INT64:208,doublePropKey208:DOUBLE:208.000000,boolPropKey208:BOOLEAN:False,strPropKey209:STRING:strPropVal209,int64PropKey209:INT64:209,doublePropKey209:DOUBLE:209.000000,boolPropKey209:BOOLEAN:False,strPropKey210:STRING:strPropVal210,int64PropKey210:INT64:210,doublePropKey210:DOUBLE:210.000000,boolPropKey210:BOOLEAN:False,strPropKey211:STRING:strPropVal211,int64PropKey211:INT64:211,doublePropKey211:DOUBLE:211.000000,boolPropKey211:BOOLEAN:False,strPropKey212:STRING:strPropVal212,int64PropKey212:INT64:212,doublePropKey212:DOUBLE:212.000000,boolPropKey212:BOOLEAN:False,strPropKey213:STRING:strPropVal213,int64PropKey213:INT64:213,doublePropKey213:DOUBLE:213.000000,boolPropKey213:BOOLEAN:False,strPropKey214:STRING:strPropVal214,int64PropKey214:INT64:214,doublePropKey214:DOUBLE:214.000000,boolPropKey214:BOOLEAN:False,strPropKey215:STRING:strPropVal215,int64PropKey215:INT64:215,doublePropKey215:DOUBLE:215.000000,boolPropKey215:BOOLEAN:False,strPropKey216:STRING:strPropVal216,int64PropKey216:INT64:216,doublePropKey216:DOUBLE:216.000000,boolPropKey216:BOOLEAN:False,strPropKey217:STRING:strPropVal217,int64PropKey217:INT64:217,doublePropKey217:DOUBLE:217.000000,boolPropKey217:BOOLEAN:False,strPropKey218:STRING:strPropVal218,int64PropKey218:INT64:218,doublePropKey218:DOUBLE:218.000000,boolPropKey218:BOOLEAN:False,strPropKey219:STRING:strPropVal219,int64PropKey219:INT64:219,doublePropKey219:DOUBLE:219.000000,boolPropKey219:BOOLEAN:False,strPropKey220:STRING:strPropVal220,int64PropKey220:INT64:220,doublePropKey220:DOUBLE:220.000000,boolPropKey220:BOOLEAN:False,strPropKey221:STRING:strPropVal221,int64PropKey221:INT64:221,doublePropKey221:DOUBLE:221.000000,boolPropKey221:BOOLEAN:False,strPropKey222:STRING:strPropVal222,int64PropKey222:INT64:222,doublePropKey222:DOUBLE:222.000000,boolPropKey222:BOOLEAN:False,strPropKey223:STRING:strPropVal223,int64PropKey223:INT64:223,doublePropKey223:DOUBLE:223.000000,boolPropKey223:BOOLEAN:False,strPropKey224:STRING:strPropVal224,int64PropKey224:INT64:224,doublePropKey224:DOUBLE:224.000000,boolPropKey224:BOOLEAN:False,strPropKey225:STRING:strPropVal225,int64PropKey225:INT64:225,doublePropKey225:DOUBLE:225.000000,boolPropKey225:BOOLEAN:False,strPropKey226:STRING:strPropVal226,int64PropKey226:INT64:226,doublePropKey226:DOUBLE:226.000000,boolPropKey226:BOOLEAN:False,strPropKey227:STRING:strPropVal227,int64PropKey227:INT64:227,doublePropKey227:DOUBLE:227.000000,boolPropKey227:BOOLEAN:False,strPropKey228:STRING:strPropVal228,int64PropKey228:INT64:228,doublePropKey228:DOUBLE:228.000000,boolPropKey228:BOOLEAN:False,strPropKey229:STRING:strPropVal229,int64PropKey229:INT64:229,doublePropKey229:DOUBLE:229.000000,boolPropKey229:BOOLEAN:False,strPropKey230:STRING:strPropVal230,int64PropKey230:INT64:230,doublePropKey230:DOUBLE:230.000000,boolPropKey230:BOOLEAN:False,strPropKey231:STRING:strPropVal231,int64PropKey231:INT64:231,doublePropKey231:DOUBLE:231.000000,boolPropKey231:BOOLEAN:False,strPropKey232:STRING:strPropVal232,int64PropKey232:INT64:232,doublePropKey232:DOUBLE:232.000000,boolPropKey232:BOOLEAN:False,strPropKey233:STRING:strPropVal233,int64PropKey233:INT64:233,doublePropKey233:DOUBLE:233.000000,boolPropKey233:BOOLEAN:False,strPropKey234:STRING:strPropVal234,int64PropKey234:INT64:234,doublePropKey234:DOUBLE:234.000000,boolPropKey234:BOOLEAN:False,strPropKey235:STRING:strPropVal235,int64PropKey235:INT64:235,doublePropKey235:DOUBLE:235.000000,boolPropKey235:BOOLEAN:False,strPropKey236:STRING:strPropVal236,int64PropKey236:INT64:236,doublePropKey236:DOUBLE:236.000000,boolPropKey236:BOOLEAN:False,strPropKey237:STRING:strPropVal237,int64PropKey237:INT64:237,doublePropKey237:DOUBLE:237.000000,boolPropKey237:BOOLEAN:False,strPropKey238:STRING:strPropVal238,int64PropKey238:INT64:238,doublePropKey238:DOUBLE:238.000000,boolPropKey238:BOOLEAN:False,strPropKey239:STRING:strPropVal239,int64PropKey239:INT64:239,doublePropKey239:DOUBLE:239.000000,boolPropKey239:BOOLEAN:False,strPropKey240:STRING:strPropVal240,int64PropKey240:INT64:240,doublePropKey240:DOUBLE:240.000000,boolPropKey240:BOOLEAN:False,strPropKey241:STRING:strPropVal241,int64PropKey241:INT64:241,doublePropKey241:DOUBLE:241.000000,boolPropKey241:BOOLEAN:False,strPropKey242:STRING:strPropVal242,int64PropKey242:INT64:242,doublePropKey242:DOUBLE:242.000000,boolPropKey242:BOOLEAN:False,strPropKey243:STRING:strPropVal243,int64PropKey243:INT64:243,doublePropKey243:DOUBLE:243.000000,boolPropKey243:BOOLEAN:False,strPropKey244:STRING:strPropVal244,int64PropKey244:INT64:244,doublePropKey244:DOUBLE:244.000000,boolPropKey244:BOOLEAN:False,strPropKey245:STRING:strPropVal245,int64PropKey245:INT64:245,doublePropKey245:DOUBLE:245.000000,boolPropKey245:BOOLEAN:False,strPropKey246:STRING:strPropVal246,int64PropKey246:INT64:246,doublePropKey246:DOUBLE:246.000000,boolPropKey246:BOOLEAN:False,strPropKey247:STRING:strPropVal247,int64PropKey247:INT64:247,doublePropKey247:DOUBLE:247.000000,boolPropKey247:BOOLEAN:False,strPropKey248:STRING:strPropVal248,int64PropKey248:INT64:248,doublePropKey248:DOUBLE:248.000000,boolPropKey248:BOOLEAN:False,strPropKey249:STRING:strPropVal249,int64PropKey249:INT64:249,doublePropKey249:DOUBLE:249.000000,boolPropKey249:BOOLEAN:False,strPropKey250:STRING:strPropVal250,int64PropKey250:INT64:250,doublePropKey250:DOUBLE:250.000000,boolPropKey250:BOOLEAN:False,strPropKey251:STRING:strPropVal251,int64PropKey251:INT64:251,doublePropKey251:DOUBLE:251.000000,boolPropKey251:BOOLEAN:False,strPropKey252:STRING:strPropVal252,int64PropKey252:INT64:252,doublePropKey252:DOUBLE:252.000000,boolPropKey252:BOOLEAN:False,strPropKey253:STRING:strPropVal253,int64PropKey253:INT64:253,doublePropKey253:DOUBLE:253.000000,boolPropKey253:BOOLEAN:False,strPropKey254:STRING:strPropVal254,int64PropKey254:INT64:254,doublePropKey254:DOUBLE:254.000000,boolPropKey254:BOOLEAN:False,strPropKey255:STRING:strPropVal255,int64PropKey255:INT64:255,doublePropKey255:DOUBLE:255.000000,boolPropKey255:BOOLEAN:False,strPropKey256:STRING:strPropVal256,int64PropKey256:INT64:256,doublePropKey256:DOUBLE:256.000000,boolPropKey256:BOOLEAN:False,strPropKey257:STRING:strPropVal257,int64PropKey257:INT64:257,doublePropKey257:DOUBLE:257.000000,boolPropKey257:BOOLEAN:False,strPropKey258:STRING:strPropVal258,int64PropKey258:INT64:258,doublePropKey258:DOUBLE:258.000000,boolPropKey258:BOOLEAN:False,strPropKey259:STRING:strPropVal259,int64PropKey259:INT64:259,doublePropKey259:DOUBLE:259.000000,boolPropKey259:BOOLEAN:False,strPropKey260:STRING:strPropVal260,int64PropKey260:INT64:260,doublePropKey260:DOUBLE:260.000000,boolPropKey260:BOOLEAN:False,strPropKey261:STRING:strPropVal261,int64PropKey261:INT64:261,doublePropKey261:DOUBLE:261.000000,boolPropKey261:BOOLEAN:False,strPropKey262:STRING:strPropVal262,int64PropKey262:INT64:262,doublePropKey262:DOUBLE:262.000000,boolPropKey262:BOOLEAN:False,strPropKey263:STRING:strPropVal263,int64PropKey263:INT64:263,doublePropKey263:DOUBLE:263.000000,boolPropKey263:BOOLEAN:False,strPropKey264:STRING:strPropVal264,int64PropKey264:INT64:264,doublePropKey264:DOUBLE:264.000000,boolPropKey264:BOOLEAN:False,strPropKey265:STRING:strPropVal265,int64PropKey265:INT64:265,doublePropKey265:DOUBLE:265.000000,boolPropKey265:BOOLEAN:False,strPropKey266:STRING:strPropVal266,int64PropKey266:INT64:266,doublePropKey266:DOUBLE:266.000000,boolPropKey266:BOOLEAN:False,strPropKey267:STRING:strPropVal267,int64PropKey267:INT64:267,doublePropKey267:DOUBLE:267.000000,boolPropKey267:BOOLEAN:False,strPropKey268:STRING:strPropVal268,int64PropKey268:INT64:268,doublePropKey268:DOUBLE:268.000000,boolPropKey268:BOOLEAN:False,strPropKey269:STRING:strPropVal269,int64PropKey269:INT64:269,doublePropKey269:DOUBLE:269.000000,boolPropKey269:BOOLEAN:False,strPropKey270:STRING:strPropVal270,int64PropKey270:INT64:270,doublePropKey270:DOUBLE:270.000000,boolPropKey270:BOOLEAN:False,strPropKey271:STRING:strPropVal271,int64PropKey271:INT64:271,doublePropKey271:DOUBLE:271.000000,boolPropKey271:BOOLEAN:False,strPropKey272:STRING:strPropVal272,int64PropKey272:INT64:272,doublePropKey272:DOUBLE:272.000000,boolPropKey272:BOOLEAN:False,strPropKey273:STRING:strPropVal273,int64PropKey273:INT64:273,doublePropKey273:DOUBLE:273.000000,boolPropKey273:BOOLEAN:False,strPropKey274:STRING:strPropVal274,int64PropKey274:INT64:274,doublePropKey274:DOUBLE:274.000000,boolPropKey274:BOOLEAN:False,strPropKey275:STRING:strPropVal275,int64PropKey275:INT64:275,doublePropKey275:DOUBLE:275.000000,boolPropKey275:BOOLEAN:False,strPropKey276:STRING:strPropVal276,int64PropKey276:INT64:276,doublePropKey276:DOUBLE:276.000000,boolPropKey276:BOOLEAN:False,strPropKey277:STRING:strPropVal277,int64PropKey277:INT64:277,doublePropKey277:DOUBLE:277.000000,boolPropKey277:BOOLEAN:False,strPropKey278:STRING:strPropVal278,int64PropKey278:INT64:278,doublePropKey278:DOUBLE:278.000000,boolPropKey278:BOOLEAN:False,strPropKey279:STRING:strPropVal279,int64PropKey279:INT64:279,doublePropKey279:DOUBLE:279.000000,boolPropKey279:BOOLEAN:False,strPropKey280:STRING:strPropVal280,int64PropKey280:INT64:280,doublePropKey280:DOUBLE:280.000000,boolPropKey280:BOOLEAN:False,strPropKey281:STRING:strPropVal281,int64PropKey281:INT64:281,doublePropKey281:DOUBLE:281.000000,boolPropKey281:BOOLEAN:False,strPropKey282:STRING:strPropVal282,int64PropKey282:INT64:282,doublePropKey282:DOUBLE:282.000000,boolPropKey282:BOOLEAN:False,strPropKey283:STRING:strPropVal283,int64PropKey283:INT64:283,doublePropKey283:DOUBLE:283.000000,boolPropKey283:BOOLEAN:False,strPropKey284:STRING:strPropVal284,int64PropKey284:INT64:284,doublePropKey284:DOUBLE:284.000000,boolPropKey284:BOOLEAN:False,strPropKey285:STRING:strPropVal285,int64PropKey285:INT64:285,doublePropKey285:DOUBLE:285.000000,boolPropKey285:BOOLEAN:False,strPropKey286:STRING:strPropVal286,int64PropKey286:INT64:286,doublePropKey286:DOUBLE:286.000000,boolPropKey286:BOOLEAN:False,strPropKey287:STRING:strPropVal287,int64PropKey287:INT64:287,doublePropKey287:DOUBLE:287.000000,boolPropKey287:BOOLEAN:False,strPropKey288:STRING:strPropVal288,int64PropKey288:INT64:288,doublePropKey288:DOUBLE:288.000000,boolPropKey288:BOOLEAN:False,strPropKey289:STRING:strPropVal289,int64PropKey289:INT64:289,doublePropKey289:DOUBLE:289.000000,boolPropKey289:BOOLEAN:False,strPropKey290:STRING:strPropVal290,int64PropKey290:INT64:290,doublePropKey290:DOUBLE:290.000000,boolPropKey290:BOOLEAN:False,strPropKey291:STRING:strPropVal291,int64PropKey291:INT64:291,doublePropKey291:DOUBLE:291.000000,boolPropKey291:BOOLEAN:False,strPropKey292:STRING:strPropVal292,int64PropKey292:INT64:292,doublePropKey292:DOUBLE:292.000000,boolPropKey292:BOOLEAN:False,strPropKey293:STRING:strPropVal293,int64PropKey293:INT64:293,doublePropKey293:DOUBLE:293.000000,boolPropKey293:BOOLEAN:False,strPropKey294:STRING:strPropVal294,int64PropKey294:INT64:294,doublePropKey294:DOUBLE:294.000000,boolPropKey294:BOOLEAN:False,strPropKey295:STRING:strPropVal295,int64PropKey295:INT64:295,doublePropKey295:DOUBLE:295.000000,boolPropKey295:BOOLEAN:False,strPropKey296:STRING:strPropVal296,int64PropKey296:INT64:296,doublePropKey296:DOUBLE:296.000000,boolPropKey296:BOOLEAN:False,strPropKey297:STRING:strPropVal297,int64PropKey297:INT64:297,doublePropKey297:DOUBLE:297.000000,boolPropKey297:BOOLEAN:False,strPropKey298:STRING:strPropVal298,int64PropKey298:INT64:298,doublePropKey298:DOUBLE:298.000000,boolPropKey298:BOOLEAN:False,strPropKey299:STRING:strPropVal299,int64PropKey299:INT64:299,doublePropKey299:DOUBLE:299.000000,boolPropKey299:BOOLEAN:False,strPropKey300:STRING:strPropVal300,int64PropKey300:INT64:300,doublePropKey300:DOUBLE:300.000000,boolPropKey300:BOOLEAN:False,strPropKey301:STRING:strPropVal301,int64PropKey301:INT64:301,doublePropKey301:DOUBLE:301.000000,boolPropKey301:BOOLEAN:False,strPropKey302:STRING:strPropVal302,int64PropKey302:INT64:302,doublePropKey302:DOUBLE:302.000000,boolPropKey302:BOOLEAN:False,strPropKey303:STRING:strPropVal303,int64PropKey303:INT64:303,doublePropKey303:DOUBLE:303.000000,boolPropKey303:BOOLEAN:False,strPropKey304:STRING:strPropVal304,int64PropKey304:INT64:304,doublePropKey304:DOUBLE:304.000000,boolPropKey304:BOOLEAN:False,strPropKey305:STRING:strPropVal305,int64PropKey305:INT64:305,doublePropKey305:DOUBLE:305.000000,boolPropKey305:BOOLEAN:False,strPropKey306:STRING:strPropVal306,int64PropKey306:INT64:306,doublePropKey306:DOUBLE:306.000000,boolPropKey306:BOOLEAN:False,strPropKey307:STRING:strPropVal307,int64PropKey307:INT64:307,doublePropKey307:DOUBLE:307.000000,boolPropKey307:BOOLEAN:False,strPropKey308:STRING:strPropVal308,int64PropKey308:INT64:308,doublePropKey308:DOUBLE:308.000000,boolPropKey308:BOOLEAN:False,strPropKey309:STRING:strPropVal309,int64PropKey309:INT64:309,doublePropKey309:DOUBLE:309.000000,boolPropKey309:BOOLEAN:False,strPropKey310:STRING:strPropVal310,int64PropKey310:INT64:310,doublePropKey310:DOUBLE:310.000000,boolPropKey310:BOOLEAN:False,strPropKey311:STRING:strPropVal311,int64PropKey311:INT64:311,doublePropKey311:DOUBLE:311.000000,boolPropKey311:BOOLEAN:False,strPropKey312:STRING:strPropVal312,int64PropKey312:INT64:312,doublePropKey312:DOUBLE:312.000000,boolPropKey312:BOOLEAN:False,strPropKey313:STRING:strPropVal313,int64PropKey313:INT64:313,doublePropKey313:DOUBLE:313.000000,boolPropKey313:BOOLEAN:False,strPropKey314:STRING:strPropVal314,int64PropKey314:INT64:314,doublePropKey314:DOUBLE:314.000000,boolPropKey314:BOOLEAN:False,strPropKey315:STRING:strPropVal315,int64PropKey315:INT64:315,doublePropKey315:DOUBLE:315.000000,boolPropKey315:BOOLEAN:False,strPropKey316:STRING:strPropVal316,int64PropKey316:INT64:316,doublePropKey316:DOUBLE:316.000000,boolPropKey316:BOOLEAN:False,strPropKey317:STRING:strPropVal317,int64PropKey317:INT64:317,doublePropKey317:DOUBLE:317.000000,boolPropKey317:BOOLEAN:False,strPropKey318:STRING:strPropVal318,int64PropKey318:INT64:318,doublePropKey318:DOUBLE:318.000000,boolPropKey318:BOOLEAN:False,strPropKey319:STRING:strPropVal319,int64PropKey319:INT64:319,doublePropKey319:DOUBLE:319.000000,boolPropKey319:BOOLEAN:False,strPropKey320:STRING:strPropVal320,int64PropKey320:INT64:320,doublePropKey320:DOUBLE:320.000000,boolPropKey320:BOOLEAN:False,strPropKey321:STRING:strPropVal321,int64PropKey321:INT64:321,doublePropKey321:DOUBLE:321.000000,boolPropKey321:BOOLEAN:False,strPropKey322:STRING:strPropVal322,int64PropKey322:INT64:322,doublePropKey322:DOUBLE:322.000000,boolPropKey322:BOOLEAN:False,strPropKey323:STRING:strPropVal323,int64PropKey323:INT64:323,doublePropKey323:DOUBLE:323.000000,boolPropKey323:BOOLEAN:False,strPropKey324:STRING:strPropVal324,int64PropKey324:INT64:324,doublePropKey324:DOUBLE:324.000000,boolPropKey324:BOOLEAN:False,strPropKey325:STRING:strPropVal325,int64PropKey325:INT64:325,doublePropKey325:DOUBLE:325.000000,boolPropKey325:BOOLEAN:False,strPropKey326:STRING:strPropVal326,int64PropKey326:INT64:326,doublePropKey326:DOUBLE:326.000000,boolPropKey326:BOOLEAN:False,strPropKey327:STRING:strPropVal327,int64PropKey327:INT64:327,doublePropKey327:DOUBLE:327.000000,boolPropKey327:BOOLEAN:False,strPropKey328:STRING:strPropVal328,int64PropKey328:INT64:328,doublePropKey328:DOUBLE:328.000000,boolPropKey328:BOOLEAN:False,strPropKey329:STRING:strPropVal329,int64PropKey329:INT64:329,doublePropKey329:DOUBLE:329.000000,boolPropKey329:BOOLEAN:False,strPropKey330:STRING:strPropVal330,int64PropKey330:INT64:330,doublePropKey330:DOUBLE:330.000000,boolPropKey330:BOOLEAN:False,strPropKey331:STRING:strPropVal331,int64PropKey331:INT64:331,doublePropKey331:DOUBLE:331.000000,boolPropKey331:BOOLEAN:False,strPropKey332:STRING:strPropVal332,int64PropKey332:INT64:332,doublePropKey332:DOUBLE:332.000000,boolPropKey332:BOOLEAN:False,strPropKey333:STRING:strPropVal333,int64PropKey333:INT64:333,doublePropKey333:DOUBLE:333.000000,boolPropKey333:BOOLEAN:False,strPropKey334:STRING:strPropVal334,int64PropKey334:INT64:334,doublePropKey334:DOUBLE:334.000000,boolPropKey334:BOOLEAN:False,strPropKey335:STRING:strPropVal335,int64PropKey335:INT64:335,doublePropKey335:DOUBLE:335.000000,boolPropKey335:BOOLEAN:False,strPropKey336:STRING:strPropVal336,int64PropKey336:INT64:336,doublePropKey336:DOUBLE:336.000000,boolPropKey336:BOOLEAN:False,strPropKey337:STRING:strPropVal337,int64PropKey337:INT64:337,doublePropKey337:DOUBLE:337.000000,boolPropKey337:BOOLEAN:False,strPropKey338:STRING:strPropVal338,int64PropKey338:INT64:338,doublePropKey338:DOUBLE:338.000000,boolPropKey338:BOOLEAN:False,strPropKey339:STRING:strPropVal339,int64PropKey339:INT64:339,doublePropKey339:DOUBLE:339.000000,boolPropKey339:BOOLEAN:False,strPropKey340:STRING:strPropVal340,int64PropKey340:INT64:340,doublePropKey340:DOUBLE:340.000000,boolPropKey340:BOOLEAN:False,strPropKey341:STRING:strPropVal341,int64PropKey341:INT64:341,doublePropKey341:DOUBLE:341.000000,boolPropKey341:BOOLEAN:False,strPropKey342:STRING:strPropVal342,int64PropKey342:INT64:342,doublePropKey342:DOUBLE:342.000000,boolPropKey342:BOOLEAN:False,strPropKey343:STRING:strPropVal343,int64PropKey343:INT64:343,doublePropKey343:DOUBLE:343.000000,boolPropKey343:BOOLEAN:False,strPropKey344:STRING:strPropVal344,int64PropKey344:INT64:344,doublePropKey344:DOUBLE:344.000000,boolPropKey344:BOOLEAN:False,strPropKey345:STRING:strPropVal345,int64PropKey345:INT64:345,doublePropKey345:DOUBLE:345.000000,boolPropKey345:BOOLEAN:False,strPropKey346:STRING:strPropVal346,int64PropKey346:INT64:346,doublePropKey346:DOUBLE:346.000000,boolPropKey346:BOOLEAN:False,strPropKey347:STRING:strPropVal347,int64PropKey347:INT64:347,doublePropKey347:DOUBLE:347.000000,boolPropKey347:BOOLEAN:False,strPropKey348:STRING:strPropVal348,int64PropKey348:INT64:348,doublePropKey348:DOUBLE:348.000000,boolPropKey348:BOOLEAN:False,strPropKey349:STRING:strPropVal349,int64PropKey349:INT64:349,doublePropKey349:DOUBLE:349.000000,boolPropKey349:BOOLEAN:False,strPropKey350:STRING:strPropVal350,int64PropKey350:INT64:350,doublePropKey350:DOUBLE:350.000000,boolPropKey350:BOOLEAN:False,strPropKey351:STRING:strPropVal351,int64PropKey351:INT64:351,doublePropKey351:DOUBLE:351.000000,boolPropKey351:BOOLEAN:False,strPropKey352:STRING:strPropVal352,int64PropKey352:INT64:352,doublePropKey352:DOUBLE:352.000000,boolPropKey352:BOOLEAN:False,strPropKey353:STRING:strPropVal353,int64PropKey353:INT64:353,doublePropKey353:DOUBLE:353.000000,boolPropKey353:BOOLEAN:False,strPropKey354:STRING:strPropVal354,int64PropKey354:INT64:354,doublePropKey354:DOUBLE:354.000000,boolPropKey354:BOOLEAN:False,strPropKey355:STRING:strPropVal355,int64PropKey355:INT64:355,doublePropKey355:DOUBLE:355.000000,boolPropKey355:BOOLEAN:False,strPropKey356:STRING:strPropVal356,int64PropKey356:INT64:356,doublePropKey356:DOUBLE:356.000000,boolPropKey356:BOOLEAN:False,strPropKey357:STRING:strPropVal357,int64PropKey357:INT64:357,doublePropKey357:DOUBLE:357.000000,boolPropKey357:BOOLEAN:False,strPropKey358:STRING:strPropVal358,int64PropKey358:INT64:358,doublePropKey358:DOUBLE:358.000000,boolPropKey358:BOOLEAN:False,strPropKey359:STRING:strPropVal359,int64PropKey359:INT64:359,doublePropKey359:DOUBLE:359.000000,boolPropKey359:BOOLEAN:False,strPropKey360:STRING:strPropVal360,int64PropKey360:INT64:360,doublePropKey360:DOUBLE:360.000000,boolPropKey360:BOOLEAN:False,strPropKey361:STRING:strPropVal361,int64PropKey361:INT64:361,doublePropKey361:DOUBLE:361.000000,boolPropKey361:BOOLEAN:False,strPropKey362:STRING:strPropVal362,int64PropKey362:INT64:362,doublePropKey362:DOUBLE:362.000000,boolPropKey362:BOOLEAN:False,strPropKey363:STRING:strPropVal363,int64PropKey363:INT64:363,doublePropKey363:DOUBLE:363.000000,boolPropKey363:BOOLEAN:False,strPropKey364:STRING:strPropVal364,int64PropKey364:INT64:364,doublePropKey364:DOUBLE:364.000000,boolPropKey364:BOOLEAN:False,strPropKey365:STRING:strPropVal365,int64PropKey365:INT64:365,doublePropKey365:DOUBLE:365.000000,boolPropKey365:BOOLEAN:False,strPropKey366:STRING:strPropVal366,int64PropKey366:INT64:366,doublePropKey366:DOUBLE:366.000000,boolPropKey366:BOOLEAN:False,strPropKey367:STRING:strPropVal367,int64PropKey367:INT64:367,doublePropKey367:DOUBLE:367.000000,boolPropKey367:BOOLEAN:False,strPropKey368:STRING:strPropVal368,int64PropKey368:INT64:368,doublePropKey368:DOUBLE:368.000000,boolPropKey368:BOOLEAN:False,strPropKey369:STRING:strPropVal369,int64PropKey369:INT64:369,doublePropKey369:DOUBLE:369.000000,boolPropKey369:BOOLEAN:False,strPropKey370:STRING:strPropVal370,int64PropKey370:INT64:370,doublePropKey370:DOUBLE:370.000000,boolPropKey370:BOOLEAN:False,strPropKey371:STRING:strPropVal371,int64PropKey371:INT64:371,doublePropKey371:DOUBLE:371.000000,boolPropKey371:BOOLEAN:False,strPropKey372:STRING:strPropVal372,int64PropKey372:INT64:372,doublePropKey372:DOUBLE:372.000000,boolPropKey372:BOOLEAN:False,strPropKey373:STRING:strPropVal373,int64PropKey373:INT64:373,doublePropKey373:DOUBLE:373.000000,boolPropKey373:BOOLEAN:False,strPropKey374:STRING:strPropVal374,int64PropKey374:INT64:374,doublePropKey374:DOUBLE:374.000000,boolPropKey374:BOOLEAN:False,strPropKey375:STRING:strPropVal375,int64PropKey375:INT64:375,doublePropKey375:DOUBLE:375.000000,boolPropKey375:BOOLEAN:False,strPropKey376:STRING:strPropVal376,int64PropKey376:INT64:376,doublePropKey376:DOUBLE:376.000000,boolPropKey376:BOOLEAN:False,strPropKey377:STRING:strPropVal377,int64PropKey377:INT64:377,doublePropKey377:DOUBLE:377.000000,boolPropKey377:BOOLEAN:False,strPropKey378:STRING:strPropVal378,int64PropKey378:INT64:378,doublePropKey378:DOUBLE:378.000000,boolPropKey378:BOOLEAN:False,strPropKey379:STRING:strPropVal379,int64PropKey379:INT64:379,doublePropKey379:DOUBLE:379.000000,boolPropKey379:BOOLEAN:False,strPropKey380:STRING:strPropVal380,int64PropKey380:INT64:380,doublePropKey380:DOUBLE:380.000000,boolPropKey380:BOOLEAN:False,strPropKey381:STRING:strPropVal381,int64PropKey381:INT64:381,doublePropKey381:DOUBLE:381.000000,boolPropKey381:BOOLEAN:False,strPropKey382:STRING:strPropVal382,int64PropKey382:INT64:382,doublePropKey382:DOUBLE:382.000000,boolPropKey382:BOOLEAN:False,strPropKey383:STRING:strPropVal383,int64PropKey383:INT64:383,doublePropKey383:DOUBLE:383.000000,boolPropKey383:BOOLEAN:False,strPropKey384:STRING:strPropVal384,int64PropKey384:INT64:384,doublePropKey384:DOUBLE:384.000000,boolPropKey384:BOOLEAN:False,strPropKey385:STRING:strPropVal385,int64PropKey385:INT64:385,doublePropKey385:DOUBLE:385.000000,boolPropKey385:BOOLEAN:False,strPropKey386:STRING:strPropVal386,int64PropKey386:INT64:386,doublePropKey386:DOUBLE:386.000000,boolPropKey386:BOOLEAN:False,strPropKey387:STRING:strPropVal387,int64PropKey387:INT64:387,doublePropKey387:DOUBLE:387.000000,boolPropKey387:BOOLEAN:False,strPropKey388:STRING:strPropVal388,int64PropKey388:INT64:388,doublePropKey388:DOUBLE:388.000000,boolPropKey388:BOOLEAN:False,strPropKey389:STRING:strPropVal389,int64PropKey389:INT64:389,doublePropKey389:DOUBLE:389.000000,boolPropKey389:BOOLEAN:False,strPropKey390:STRING:strPropVal390,int64PropKey390:INT64:390,doublePropKey390:DOUBLE:390.000000,boolPropKey390:BOOLEAN:False,strPropKey391:STRING:strPropVal391,int64PropKey391:INT64:391,doublePropKey391:DOUBLE:391.000000,boolPropKey391:BOOLEAN:False,strPropKey392:STRING:strPropVal392,int64PropKey392:INT64:392,doublePropKey392:DOUBLE:392.000000,boolPropKey392:BOOLEAN:False,strPropKey393:STRING:strPropVal393,int64PropKey393:INT64:393,doublePropKey393:DOUBLE:393.000000,boolPropKey393:BOOLEAN:False,strPropKey394:STRING:strPropVal394,int64PropKey394:INT64:394,doublePropKey394:DOUBLE:394.000000,boolPropKey394:BOOLEAN:False,strPropKey395:STRING:strPropVal395,int64PropKey395:INT64:395,doublePropKey395:DOUBLE:395.000000,boolPropKey395:BOOLEAN:False,strPropKey396:STRING:strPropVal396,int64PropKey396:INT64:396,doublePropKey396:DOUBLE:396.000000,boolPropKey396:BOOLEAN:False,strPropKey397:STRING:strPropVal397,int64PropKey397:INT64:397,doublePropKey397:DOUBLE:397.000000,boolPropKey397:BOOLEAN:False,strPropKey398:STRING:strPropVal398,int64PropKey398:INT64:398,doublePropKey398:DOUBLE:398.000000,boolPropKey398:BOOLEAN:False,strPropKey399:STRING:strPropVal399,int64PropKey399:INT64:399,doublePropKey399:DOUBLE:399.000000,boolPropKey399:BOOLEAN:False -401,hgloihnsp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -402,ftpsnbkkw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -403,oltlrihme,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -404,vwucxzqaq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -405,fsopmxwxr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -406,yebppnbmr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -407,xvxwidzui,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -408,edlstdfah,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -409,nwmpwuoee,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -410,twfohpiqh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -411,vzvifqhun,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -412,izkqlysjw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -413,urkxuvego,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -414,epjttibnm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -415,mgtgabmby,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -416,fiftpgvmf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -417,kehpoovpu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -418,aqobfhfum,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -419,ksghfvbyb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -420,nfzllevyx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -421,nqmxkyoio,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -422,htcrsrftq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -423,uxtspbncl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -424,czcdchdax,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -425,ciavhbiqk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -426,xxylmjcbb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -427,iipwmekyl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -428,jjzgrjxlq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -429,swpwmvrzr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -430,osqbayqba,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -431,hvpgakdnl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -432,chfbfggip,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -433,tpqcdkzkf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -434,nqrsqnfnd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -435,jaqykzhgm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -436,hjomodhqn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -437,fttdurdpg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -438,oixjfbljo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -439,ijtntggbu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -440,hullugzfv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -441,isyupmtwe,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -442,crxhuackh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -443,qiimxhwcz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -444,lvnyywabh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -445,nfomrucyi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -446,vrfhgbhom,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -447,kucxpanhn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -448,objucvwjc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -449,dbbpxlnxy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -450,hhpngpwgv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -451,lpekukusk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -452,fanuxdgdu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -453,spzwogiut,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -454,zeinxajvo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -455,qkklcgoxn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -456,nhxaazeuo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -457,okxzfiszt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -458,qupekxrll,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -459,sdowbbfvt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -460,dgdrojexn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -461,uxaimohks,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -462,jfsscopzx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -463,ilutsazxm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -464,zxqvsimyi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -465,xgtethmme,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -466,lnnmkgqnq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -467,pmekjabvm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -468,zxndoazqt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -469,knwxdmauq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -470,znhwsdygw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -471,ialwpylos,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -472,qweensllq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -473,ygidbtzrq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -474,eitasnmrt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -475,qykowmori,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -476,nwrghzbfb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -477,nlpiwmctn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -478,rzytvyzcl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -479,etvbqdidb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -480,tmkskalsd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -481,hyciyhrto,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -482,nfjxstgji,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -483,qrvgfzdqv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -484,diqnxpayn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -485,drnzonuqh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -486,zwejmcexn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -487,gdramnqgt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -488,manlarlmx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -489,lodspydcv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -490,wthpshhhg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -491,qanphvthk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -492,yezdetaeq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -493,yhfipdpwi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -494,vqfjexhmk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -495,xkeukohkk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -496,momdxslex,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -497,vbwrvdbfw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -498,uiygdgnrg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -499,uhoiempoy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -500,,strPropKey0:STRING:strPropVal0,int64PropKey0:INT64:0,doublePropKey0:DOUBLE:0.000000,boolPropKey0:BOOLEAN:False,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.000000,boolPropKey1:BOOLEAN:False,strPropKey2:STRING:strPropVal2,int64PropKey2:INT64:2,doublePropKey2:DOUBLE:2.000000,boolPropKey2:BOOLEAN:False,strPropKey3:STRING:strPropVal3,int64PropKey3:INT64:3,doublePropKey3:DOUBLE:3.000000,boolPropKey3:BOOLEAN:False,strPropKey4:STRING:strPropVal4,int64PropKey4:INT64:4,doublePropKey4:DOUBLE:4.000000,boolPropKey4:BOOLEAN:False,strPropKey5:STRING:strPropVal5,int64PropKey5:INT64:5,doublePropKey5:DOUBLE:5.000000,boolPropKey5:BOOLEAN:False,strPropKey6:STRING:strPropVal6,int64PropKey6:INT64:6,doublePropKey6:DOUBLE:6.000000,boolPropKey6:BOOLEAN:False,strPropKey7:STRING:strPropVal7,int64PropKey7:INT64:7,doublePropKey7:DOUBLE:7.000000,boolPropKey7:BOOLEAN:False,strPropKey8:STRING:strPropVal8,int64PropKey8:INT64:8,doublePropKey8:DOUBLE:8.000000,boolPropKey8:BOOLEAN:False,strPropKey9:STRING:strPropVal9,int64PropKey9:INT64:9,doublePropKey9:DOUBLE:9.000000,boolPropKey9:BOOLEAN:False,strPropKey10:STRING:strPropVal10,int64PropKey10:INT64:10,doublePropKey10:DOUBLE:10.000000,boolPropKey10:BOOLEAN:False,strPropKey11:STRING:strPropVal11,int64PropKey11:INT64:11,doublePropKey11:DOUBLE:11.000000,boolPropKey11:BOOLEAN:False,strPropKey12:STRING:strPropVal12,int64PropKey12:INT64:12,doublePropKey12:DOUBLE:12.000000,boolPropKey12:BOOLEAN:False,strPropKey13:STRING:strPropVal13,int64PropKey13:INT64:13,doublePropKey13:DOUBLE:13.000000,boolPropKey13:BOOLEAN:False,strPropKey14:STRING:strPropVal14,int64PropKey14:INT64:14,doublePropKey14:DOUBLE:14.000000,boolPropKey14:BOOLEAN:False,strPropKey15:STRING:strPropVal15,int64PropKey15:INT64:15,doublePropKey15:DOUBLE:15.000000,boolPropKey15:BOOLEAN:False,strPropKey16:STRING:strPropVal16,int64PropKey16:INT64:16,doublePropKey16:DOUBLE:16.000000,boolPropKey16:BOOLEAN:False,strPropKey17:STRING:strPropVal17,int64PropKey17:INT64:17,doublePropKey17:DOUBLE:17.000000,boolPropKey17:BOOLEAN:False,strPropKey18:STRING:strPropVal18,int64PropKey18:INT64:18,doublePropKey18:DOUBLE:18.000000,boolPropKey18:BOOLEAN:False,strPropKey19:STRING:strPropVal19,int64PropKey19:INT64:19,doublePropKey19:DOUBLE:19.000000,boolPropKey19:BOOLEAN:False,strPropKey20:STRING:strPropVal20,int64PropKey20:INT64:20,doublePropKey20:DOUBLE:20.000000,boolPropKey20:BOOLEAN:False,strPropKey21:STRING:strPropVal21,int64PropKey21:INT64:21,doublePropKey21:DOUBLE:21.000000,boolPropKey21:BOOLEAN:False,strPropKey22:STRING:strPropVal22,int64PropKey22:INT64:22,doublePropKey22:DOUBLE:22.000000,boolPropKey22:BOOLEAN:False,strPropKey23:STRING:strPropVal23,int64PropKey23:INT64:23,doublePropKey23:DOUBLE:23.000000,boolPropKey23:BOOLEAN:False,strPropKey24:STRING:strPropVal24,int64PropKey24:INT64:24,doublePropKey24:DOUBLE:24.000000,boolPropKey24:BOOLEAN:False,strPropKey25:STRING:strPropVal25,int64PropKey25:INT64:25,doublePropKey25:DOUBLE:25.000000,boolPropKey25:BOOLEAN:False,strPropKey26:STRING:strPropVal26,int64PropKey26:INT64:26,doublePropKey26:DOUBLE:26.000000,boolPropKey26:BOOLEAN:False,strPropKey27:STRING:strPropVal27,int64PropKey27:INT64:27,doublePropKey27:DOUBLE:27.000000,boolPropKey27:BOOLEAN:False,strPropKey28:STRING:strPropVal28,int64PropKey28:INT64:28,doublePropKey28:DOUBLE:28.000000,boolPropKey28:BOOLEAN:False,strPropKey29:STRING:strPropVal29,int64PropKey29:INT64:29,doublePropKey29:DOUBLE:29.000000,boolPropKey29:BOOLEAN:False,strPropKey30:STRING:strPropVal30,int64PropKey30:INT64:30,doublePropKey30:DOUBLE:30.000000,boolPropKey30:BOOLEAN:False,strPropKey31:STRING:strPropVal31,int64PropKey31:INT64:31,doublePropKey31:DOUBLE:31.000000,boolPropKey31:BOOLEAN:False,strPropKey32:STRING:strPropVal32,int64PropKey32:INT64:32,doublePropKey32:DOUBLE:32.000000,boolPropKey32:BOOLEAN:False,strPropKey33:STRING:strPropVal33,int64PropKey33:INT64:33,doublePropKey33:DOUBLE:33.000000,boolPropKey33:BOOLEAN:False,strPropKey34:STRING:strPropVal34,int64PropKey34:INT64:34,doublePropKey34:DOUBLE:34.000000,boolPropKey34:BOOLEAN:False,strPropKey35:STRING:strPropVal35,int64PropKey35:INT64:35,doublePropKey35:DOUBLE:35.000000,boolPropKey35:BOOLEAN:False,strPropKey36:STRING:strPropVal36,int64PropKey36:INT64:36,doublePropKey36:DOUBLE:36.000000,boolPropKey36:BOOLEAN:False,strPropKey37:STRING:strPropVal37,int64PropKey37:INT64:37,doublePropKey37:DOUBLE:37.000000,boolPropKey37:BOOLEAN:False,strPropKey38:STRING:strPropVal38,int64PropKey38:INT64:38,doublePropKey38:DOUBLE:38.000000,boolPropKey38:BOOLEAN:False,strPropKey39:STRING:strPropVal39,int64PropKey39:INT64:39,doublePropKey39:DOUBLE:39.000000,boolPropKey39:BOOLEAN:False,strPropKey40:STRING:strPropVal40,int64PropKey40:INT64:40,doublePropKey40:DOUBLE:40.000000,boolPropKey40:BOOLEAN:False,strPropKey41:STRING:strPropVal41,int64PropKey41:INT64:41,doublePropKey41:DOUBLE:41.000000,boolPropKey41:BOOLEAN:False,strPropKey42:STRING:strPropVal42,int64PropKey42:INT64:42,doublePropKey42:DOUBLE:42.000000,boolPropKey42:BOOLEAN:False,strPropKey43:STRING:strPropVal43,int64PropKey43:INT64:43,doublePropKey43:DOUBLE:43.000000,boolPropKey43:BOOLEAN:False,strPropKey44:STRING:strPropVal44,int64PropKey44:INT64:44,doublePropKey44:DOUBLE:44.000000,boolPropKey44:BOOLEAN:False,strPropKey45:STRING:strPropVal45,int64PropKey45:INT64:45,doublePropKey45:DOUBLE:45.000000,boolPropKey45:BOOLEAN:False,strPropKey46:STRING:strPropVal46,int64PropKey46:INT64:46,doublePropKey46:DOUBLE:46.000000,boolPropKey46:BOOLEAN:False,strPropKey47:STRING:strPropVal47,int64PropKey47:INT64:47,doublePropKey47:DOUBLE:47.000000,boolPropKey47:BOOLEAN:False,strPropKey48:STRING:strPropVal48,int64PropKey48:INT64:48,doublePropKey48:DOUBLE:48.000000,boolPropKey48:BOOLEAN:False,strPropKey49:STRING:strPropVal49,int64PropKey49:INT64:49,doublePropKey49:DOUBLE:49.000000,boolPropKey49:BOOLEAN:False,strPropKey50:STRING:strPropVal50,int64PropKey50:INT64:50,doublePropKey50:DOUBLE:50.000000,boolPropKey50:BOOLEAN:False,strPropKey51:STRING:strPropVal51,int64PropKey51:INT64:51,doublePropKey51:DOUBLE:51.000000,boolPropKey51:BOOLEAN:False,strPropKey52:STRING:strPropVal52,int64PropKey52:INT64:52,doublePropKey52:DOUBLE:52.000000,boolPropKey52:BOOLEAN:False,strPropKey53:STRING:strPropVal53,int64PropKey53:INT64:53,doublePropKey53:DOUBLE:53.000000,boolPropKey53:BOOLEAN:False,strPropKey54:STRING:strPropVal54,int64PropKey54:INT64:54,doublePropKey54:DOUBLE:54.000000,boolPropKey54:BOOLEAN:False,strPropKey55:STRING:strPropVal55,int64PropKey55:INT64:55,doublePropKey55:DOUBLE:55.000000,boolPropKey55:BOOLEAN:False,strPropKey56:STRING:strPropVal56,int64PropKey56:INT64:56,doublePropKey56:DOUBLE:56.000000,boolPropKey56:BOOLEAN:False,strPropKey57:STRING:strPropVal57,int64PropKey57:INT64:57,doublePropKey57:DOUBLE:57.000000,boolPropKey57:BOOLEAN:False,strPropKey58:STRING:strPropVal58,int64PropKey58:INT64:58,doublePropKey58:DOUBLE:58.000000,boolPropKey58:BOOLEAN:False,strPropKey59:STRING:strPropVal59,int64PropKey59:INT64:59,doublePropKey59:DOUBLE:59.000000,boolPropKey59:BOOLEAN:False,strPropKey60:STRING:strPropVal60,int64PropKey60:INT64:60,doublePropKey60:DOUBLE:60.000000,boolPropKey60:BOOLEAN:False,strPropKey61:STRING:strPropVal61,int64PropKey61:INT64:61,doublePropKey61:DOUBLE:61.000000,boolPropKey61:BOOLEAN:False,strPropKey62:STRING:strPropVal62,int64PropKey62:INT64:62,doublePropKey62:DOUBLE:62.000000,boolPropKey62:BOOLEAN:False,strPropKey63:STRING:strPropVal63,int64PropKey63:INT64:63,doublePropKey63:DOUBLE:63.000000,boolPropKey63:BOOLEAN:False,strPropKey64:STRING:strPropVal64,int64PropKey64:INT64:64,doublePropKey64:DOUBLE:64.000000,boolPropKey64:BOOLEAN:False,strPropKey65:STRING:strPropVal65,int64PropKey65:INT64:65,doublePropKey65:DOUBLE:65.000000,boolPropKey65:BOOLEAN:False,strPropKey66:STRING:strPropVal66,int64PropKey66:INT64:66,doublePropKey66:DOUBLE:66.000000,boolPropKey66:BOOLEAN:False,strPropKey67:STRING:strPropVal67,int64PropKey67:INT64:67,doublePropKey67:DOUBLE:67.000000,boolPropKey67:BOOLEAN:False,strPropKey68:STRING:strPropVal68,int64PropKey68:INT64:68,doublePropKey68:DOUBLE:68.000000,boolPropKey68:BOOLEAN:False,strPropKey69:STRING:strPropVal69,int64PropKey69:INT64:69,doublePropKey69:DOUBLE:69.000000,boolPropKey69:BOOLEAN:False,strPropKey70:STRING:strPropVal70,int64PropKey70:INT64:70,doublePropKey70:DOUBLE:70.000000,boolPropKey70:BOOLEAN:False,strPropKey71:STRING:strPropVal71,int64PropKey71:INT64:71,doublePropKey71:DOUBLE:71.000000,boolPropKey71:BOOLEAN:False,strPropKey72:STRING:strPropVal72,int64PropKey72:INT64:72,doublePropKey72:DOUBLE:72.000000,boolPropKey72:BOOLEAN:False,strPropKey73:STRING:strPropVal73,int64PropKey73:INT64:73,doublePropKey73:DOUBLE:73.000000,boolPropKey73:BOOLEAN:False,strPropKey74:STRING:strPropVal74,int64PropKey74:INT64:74,doublePropKey74:DOUBLE:74.000000,boolPropKey74:BOOLEAN:False,strPropKey75:STRING:strPropVal75,int64PropKey75:INT64:75,doublePropKey75:DOUBLE:75.000000,boolPropKey75:BOOLEAN:False,strPropKey76:STRING:strPropVal76,int64PropKey76:INT64:76,doublePropKey76:DOUBLE:76.000000,boolPropKey76:BOOLEAN:False,strPropKey77:STRING:strPropVal77,int64PropKey77:INT64:77,doublePropKey77:DOUBLE:77.000000,boolPropKey77:BOOLEAN:False,strPropKey78:STRING:strPropVal78,int64PropKey78:INT64:78,doublePropKey78:DOUBLE:78.000000,boolPropKey78:BOOLEAN:False,strPropKey79:STRING:strPropVal79,int64PropKey79:INT64:79,doublePropKey79:DOUBLE:79.000000,boolPropKey79:BOOLEAN:False,strPropKey80:STRING:strPropVal80,int64PropKey80:INT64:80,doublePropKey80:DOUBLE:80.000000,boolPropKey80:BOOLEAN:False,strPropKey81:STRING:strPropVal81,int64PropKey81:INT64:81,doublePropKey81:DOUBLE:81.000000,boolPropKey81:BOOLEAN:False,strPropKey82:STRING:strPropVal82,int64PropKey82:INT64:82,doublePropKey82:DOUBLE:82.000000,boolPropKey82:BOOLEAN:False,strPropKey83:STRING:strPropVal83,int64PropKey83:INT64:83,doublePropKey83:DOUBLE:83.000000,boolPropKey83:BOOLEAN:False,strPropKey84:STRING:strPropVal84,int64PropKey84:INT64:84,doublePropKey84:DOUBLE:84.000000,boolPropKey84:BOOLEAN:False,strPropKey85:STRING:strPropVal85,int64PropKey85:INT64:85,doublePropKey85:DOUBLE:85.000000,boolPropKey85:BOOLEAN:False,strPropKey86:STRING:strPropVal86,int64PropKey86:INT64:86,doublePropKey86:DOUBLE:86.000000,boolPropKey86:BOOLEAN:False,strPropKey87:STRING:strPropVal87,int64PropKey87:INT64:87,doublePropKey87:DOUBLE:87.000000,boolPropKey87:BOOLEAN:False,strPropKey88:STRING:strPropVal88,int64PropKey88:INT64:88,doublePropKey88:DOUBLE:88.000000,boolPropKey88:BOOLEAN:False,strPropKey89:STRING:strPropVal89,int64PropKey89:INT64:89,doublePropKey89:DOUBLE:89.000000,boolPropKey89:BOOLEAN:False,strPropKey90:STRING:strPropVal90,int64PropKey90:INT64:90,doublePropKey90:DOUBLE:90.000000,boolPropKey90:BOOLEAN:False,strPropKey91:STRING:strPropVal91,int64PropKey91:INT64:91,doublePropKey91:DOUBLE:91.000000,boolPropKey91:BOOLEAN:False,strPropKey92:STRING:strPropVal92,int64PropKey92:INT64:92,doublePropKey92:DOUBLE:92.000000,boolPropKey92:BOOLEAN:False,strPropKey93:STRING:strPropVal93,int64PropKey93:INT64:93,doublePropKey93:DOUBLE:93.000000,boolPropKey93:BOOLEAN:False,strPropKey94:STRING:strPropVal94,int64PropKey94:INT64:94,doublePropKey94:DOUBLE:94.000000,boolPropKey94:BOOLEAN:False,strPropKey95:STRING:strPropVal95,int64PropKey95:INT64:95,doublePropKey95:DOUBLE:95.000000,boolPropKey95:BOOLEAN:False,strPropKey96:STRING:strPropVal96,int64PropKey96:INT64:96,doublePropKey96:DOUBLE:96.000000,boolPropKey96:BOOLEAN:False,strPropKey97:STRING:strPropVal97,int64PropKey97:INT64:97,doublePropKey97:DOUBLE:97.000000,boolPropKey97:BOOLEAN:False,strPropKey98:STRING:strPropVal98,int64PropKey98:INT64:98,doublePropKey98:DOUBLE:98.000000,boolPropKey98:BOOLEAN:False,strPropKey99:STRING:strPropVal99,int64PropKey99:INT64:99,doublePropKey99:DOUBLE:99.000000,boolPropKey99:BOOLEAN:False,strPropKey100:STRING:strPropVal100,int64PropKey100:INT64:100,doublePropKey100:DOUBLE:100.000000,boolPropKey100:BOOLEAN:False,strPropKey101:STRING:strPropVal101,int64PropKey101:INT64:101,doublePropKey101:DOUBLE:101.000000,boolPropKey101:BOOLEAN:False,strPropKey102:STRING:strPropVal102,int64PropKey102:INT64:102,doublePropKey102:DOUBLE:102.000000,boolPropKey102:BOOLEAN:False,strPropKey103:STRING:strPropVal103,int64PropKey103:INT64:103,doublePropKey103:DOUBLE:103.000000,boolPropKey103:BOOLEAN:False,strPropKey104:STRING:strPropVal104,int64PropKey104:INT64:104,doublePropKey104:DOUBLE:104.000000,boolPropKey104:BOOLEAN:False,strPropKey105:STRING:strPropVal105,int64PropKey105:INT64:105,doublePropKey105:DOUBLE:105.000000,boolPropKey105:BOOLEAN:False,strPropKey106:STRING:strPropVal106,int64PropKey106:INT64:106,doublePropKey106:DOUBLE:106.000000,boolPropKey106:BOOLEAN:False,strPropKey107:STRING:strPropVal107,int64PropKey107:INT64:107,doublePropKey107:DOUBLE:107.000000,boolPropKey107:BOOLEAN:False,strPropKey108:STRING:strPropVal108,int64PropKey108:INT64:108,doublePropKey108:DOUBLE:108.000000,boolPropKey108:BOOLEAN:False,strPropKey109:STRING:strPropVal109,int64PropKey109:INT64:109,doublePropKey109:DOUBLE:109.000000,boolPropKey109:BOOLEAN:False,strPropKey110:STRING:strPropVal110,int64PropKey110:INT64:110,doublePropKey110:DOUBLE:110.000000,boolPropKey110:BOOLEAN:False,strPropKey111:STRING:strPropVal111,int64PropKey111:INT64:111,doublePropKey111:DOUBLE:111.000000,boolPropKey111:BOOLEAN:False,strPropKey112:STRING:strPropVal112,int64PropKey112:INT64:112,doublePropKey112:DOUBLE:112.000000,boolPropKey112:BOOLEAN:False,strPropKey113:STRING:strPropVal113,int64PropKey113:INT64:113,doublePropKey113:DOUBLE:113.000000,boolPropKey113:BOOLEAN:False,strPropKey114:STRING:strPropVal114,int64PropKey114:INT64:114,doublePropKey114:DOUBLE:114.000000,boolPropKey114:BOOLEAN:False,strPropKey115:STRING:strPropVal115,int64PropKey115:INT64:115,doublePropKey115:DOUBLE:115.000000,boolPropKey115:BOOLEAN:False,strPropKey116:STRING:strPropVal116,int64PropKey116:INT64:116,doublePropKey116:DOUBLE:116.000000,boolPropKey116:BOOLEAN:False,strPropKey117:STRING:strPropVal117,int64PropKey117:INT64:117,doublePropKey117:DOUBLE:117.000000,boolPropKey117:BOOLEAN:False,strPropKey118:STRING:strPropVal118,int64PropKey118:INT64:118,doublePropKey118:DOUBLE:118.000000,boolPropKey118:BOOLEAN:False,strPropKey119:STRING:strPropVal119,int64PropKey119:INT64:119,doublePropKey119:DOUBLE:119.000000,boolPropKey119:BOOLEAN:False,strPropKey120:STRING:strPropVal120,int64PropKey120:INT64:120,doublePropKey120:DOUBLE:120.000000,boolPropKey120:BOOLEAN:False,strPropKey121:STRING:strPropVal121,int64PropKey121:INT64:121,doublePropKey121:DOUBLE:121.000000,boolPropKey121:BOOLEAN:False,strPropKey122:STRING:strPropVal122,int64PropKey122:INT64:122,doublePropKey122:DOUBLE:122.000000,boolPropKey122:BOOLEAN:False,strPropKey123:STRING:strPropVal123,int64PropKey123:INT64:123,doublePropKey123:DOUBLE:123.000000,boolPropKey123:BOOLEAN:False,strPropKey124:STRING:strPropVal124,int64PropKey124:INT64:124,doublePropKey124:DOUBLE:124.000000,boolPropKey124:BOOLEAN:False,strPropKey125:STRING:strPropVal125,int64PropKey125:INT64:125,doublePropKey125:DOUBLE:125.000000,boolPropKey125:BOOLEAN:False,strPropKey126:STRING:strPropVal126,int64PropKey126:INT64:126,doublePropKey126:DOUBLE:126.000000,boolPropKey126:BOOLEAN:False,strPropKey127:STRING:strPropVal127,int64PropKey127:INT64:127,doublePropKey127:DOUBLE:127.000000,boolPropKey127:BOOLEAN:False,strPropKey128:STRING:strPropVal128,int64PropKey128:INT64:128,doublePropKey128:DOUBLE:128.000000,boolPropKey128:BOOLEAN:False,strPropKey129:STRING:strPropVal129,int64PropKey129:INT64:129,doublePropKey129:DOUBLE:129.000000,boolPropKey129:BOOLEAN:False,strPropKey130:STRING:strPropVal130,int64PropKey130:INT64:130,doublePropKey130:DOUBLE:130.000000,boolPropKey130:BOOLEAN:False,strPropKey131:STRING:strPropVal131,int64PropKey131:INT64:131,doublePropKey131:DOUBLE:131.000000,boolPropKey131:BOOLEAN:False,strPropKey132:STRING:strPropVal132,int64PropKey132:INT64:132,doublePropKey132:DOUBLE:132.000000,boolPropKey132:BOOLEAN:False,strPropKey133:STRING:strPropVal133,int64PropKey133:INT64:133,doublePropKey133:DOUBLE:133.000000,boolPropKey133:BOOLEAN:False,strPropKey134:STRING:strPropVal134,int64PropKey134:INT64:134,doublePropKey134:DOUBLE:134.000000,boolPropKey134:BOOLEAN:False,strPropKey135:STRING:strPropVal135,int64PropKey135:INT64:135,doublePropKey135:DOUBLE:135.000000,boolPropKey135:BOOLEAN:False,strPropKey136:STRING:strPropVal136,int64PropKey136:INT64:136,doublePropKey136:DOUBLE:136.000000,boolPropKey136:BOOLEAN:False,strPropKey137:STRING:strPropVal137,int64PropKey137:INT64:137,doublePropKey137:DOUBLE:137.000000,boolPropKey137:BOOLEAN:False,strPropKey138:STRING:strPropVal138,int64PropKey138:INT64:138,doublePropKey138:DOUBLE:138.000000,boolPropKey138:BOOLEAN:False,strPropKey139:STRING:strPropVal139,int64PropKey139:INT64:139,doublePropKey139:DOUBLE:139.000000,boolPropKey139:BOOLEAN:False,strPropKey140:STRING:strPropVal140,int64PropKey140:INT64:140,doublePropKey140:DOUBLE:140.000000,boolPropKey140:BOOLEAN:False,strPropKey141:STRING:strPropVal141,int64PropKey141:INT64:141,doublePropKey141:DOUBLE:141.000000,boolPropKey141:BOOLEAN:False,strPropKey142:STRING:strPropVal142,int64PropKey142:INT64:142,doublePropKey142:DOUBLE:142.000000,boolPropKey142:BOOLEAN:False,strPropKey143:STRING:strPropVal143,int64PropKey143:INT64:143,doublePropKey143:DOUBLE:143.000000,boolPropKey143:BOOLEAN:False,strPropKey144:STRING:strPropVal144,int64PropKey144:INT64:144,doublePropKey144:DOUBLE:144.000000,boolPropKey144:BOOLEAN:False,strPropKey145:STRING:strPropVal145,int64PropKey145:INT64:145,doublePropKey145:DOUBLE:145.000000,boolPropKey145:BOOLEAN:False,strPropKey146:STRING:strPropVal146,int64PropKey146:INT64:146,doublePropKey146:DOUBLE:146.000000,boolPropKey146:BOOLEAN:False,strPropKey147:STRING:strPropVal147,int64PropKey147:INT64:147,doublePropKey147:DOUBLE:147.000000,boolPropKey147:BOOLEAN:False,strPropKey148:STRING:strPropVal148,int64PropKey148:INT64:148,doublePropKey148:DOUBLE:148.000000,boolPropKey148:BOOLEAN:False,strPropKey149:STRING:strPropVal149,int64PropKey149:INT64:149,doublePropKey149:DOUBLE:149.000000,boolPropKey149:BOOLEAN:False,strPropKey150:STRING:strPropVal150,int64PropKey150:INT64:150,doublePropKey150:DOUBLE:150.000000,boolPropKey150:BOOLEAN:False,strPropKey151:STRING:strPropVal151,int64PropKey151:INT64:151,doublePropKey151:DOUBLE:151.000000,boolPropKey151:BOOLEAN:False,strPropKey152:STRING:strPropVal152,int64PropKey152:INT64:152,doublePropKey152:DOUBLE:152.000000,boolPropKey152:BOOLEAN:False,strPropKey153:STRING:strPropVal153,int64PropKey153:INT64:153,doublePropKey153:DOUBLE:153.000000,boolPropKey153:BOOLEAN:False,strPropKey154:STRING:strPropVal154,int64PropKey154:INT64:154,doublePropKey154:DOUBLE:154.000000,boolPropKey154:BOOLEAN:False,strPropKey155:STRING:strPropVal155,int64PropKey155:INT64:155,doublePropKey155:DOUBLE:155.000000,boolPropKey155:BOOLEAN:False,strPropKey156:STRING:strPropVal156,int64PropKey156:INT64:156,doublePropKey156:DOUBLE:156.000000,boolPropKey156:BOOLEAN:False,strPropKey157:STRING:strPropVal157,int64PropKey157:INT64:157,doublePropKey157:DOUBLE:157.000000,boolPropKey157:BOOLEAN:False,strPropKey158:STRING:strPropVal158,int64PropKey158:INT64:158,doublePropKey158:DOUBLE:158.000000,boolPropKey158:BOOLEAN:False,strPropKey159:STRING:strPropVal159,int64PropKey159:INT64:159,doublePropKey159:DOUBLE:159.000000,boolPropKey159:BOOLEAN:False,strPropKey160:STRING:strPropVal160,int64PropKey160:INT64:160,doublePropKey160:DOUBLE:160.000000,boolPropKey160:BOOLEAN:False,strPropKey161:STRING:strPropVal161,int64PropKey161:INT64:161,doublePropKey161:DOUBLE:161.000000,boolPropKey161:BOOLEAN:False,strPropKey162:STRING:strPropVal162,int64PropKey162:INT64:162,doublePropKey162:DOUBLE:162.000000,boolPropKey162:BOOLEAN:False,strPropKey163:STRING:strPropVal163,int64PropKey163:INT64:163,doublePropKey163:DOUBLE:163.000000,boolPropKey163:BOOLEAN:False,strPropKey164:STRING:strPropVal164,int64PropKey164:INT64:164,doublePropKey164:DOUBLE:164.000000,boolPropKey164:BOOLEAN:False,strPropKey165:STRING:strPropVal165,int64PropKey165:INT64:165,doublePropKey165:DOUBLE:165.000000,boolPropKey165:BOOLEAN:False,strPropKey166:STRING:strPropVal166,int64PropKey166:INT64:166,doublePropKey166:DOUBLE:166.000000,boolPropKey166:BOOLEAN:False,strPropKey167:STRING:strPropVal167,int64PropKey167:INT64:167,doublePropKey167:DOUBLE:167.000000,boolPropKey167:BOOLEAN:False,strPropKey168:STRING:strPropVal168,int64PropKey168:INT64:168,doublePropKey168:DOUBLE:168.000000,boolPropKey168:BOOLEAN:False,strPropKey169:STRING:strPropVal169,int64PropKey169:INT64:169,doublePropKey169:DOUBLE:169.000000,boolPropKey169:BOOLEAN:False,strPropKey170:STRING:strPropVal170,int64PropKey170:INT64:170,doublePropKey170:DOUBLE:170.000000,boolPropKey170:BOOLEAN:False,strPropKey171:STRING:strPropVal171,int64PropKey171:INT64:171,doublePropKey171:DOUBLE:171.000000,boolPropKey171:BOOLEAN:False,strPropKey172:STRING:strPropVal172,int64PropKey172:INT64:172,doublePropKey172:DOUBLE:172.000000,boolPropKey172:BOOLEAN:False,strPropKey173:STRING:strPropVal173,int64PropKey173:INT64:173,doublePropKey173:DOUBLE:173.000000,boolPropKey173:BOOLEAN:False,strPropKey174:STRING:strPropVal174,int64PropKey174:INT64:174,doublePropKey174:DOUBLE:174.000000,boolPropKey174:BOOLEAN:False,strPropKey175:STRING:strPropVal175,int64PropKey175:INT64:175,doublePropKey175:DOUBLE:175.000000,boolPropKey175:BOOLEAN:False,strPropKey176:STRING:strPropVal176,int64PropKey176:INT64:176,doublePropKey176:DOUBLE:176.000000,boolPropKey176:BOOLEAN:False,strPropKey177:STRING:strPropVal177,int64PropKey177:INT64:177,doublePropKey177:DOUBLE:177.000000,boolPropKey177:BOOLEAN:False,strPropKey178:STRING:strPropVal178,int64PropKey178:INT64:178,doublePropKey178:DOUBLE:178.000000,boolPropKey178:BOOLEAN:False,strPropKey179:STRING:strPropVal179,int64PropKey179:INT64:179,doublePropKey179:DOUBLE:179.000000,boolPropKey179:BOOLEAN:False,strPropKey180:STRING:strPropVal180,int64PropKey180:INT64:180,doublePropKey180:DOUBLE:180.000000,boolPropKey180:BOOLEAN:False,strPropKey181:STRING:strPropVal181,int64PropKey181:INT64:181,doublePropKey181:DOUBLE:181.000000,boolPropKey181:BOOLEAN:False,strPropKey182:STRING:strPropVal182,int64PropKey182:INT64:182,doublePropKey182:DOUBLE:182.000000,boolPropKey182:BOOLEAN:False,strPropKey183:STRING:strPropVal183,int64PropKey183:INT64:183,doublePropKey183:DOUBLE:183.000000,boolPropKey183:BOOLEAN:False,strPropKey184:STRING:strPropVal184,int64PropKey184:INT64:184,doublePropKey184:DOUBLE:184.000000,boolPropKey184:BOOLEAN:False,strPropKey185:STRING:strPropVal185,int64PropKey185:INT64:185,doublePropKey185:DOUBLE:185.000000,boolPropKey185:BOOLEAN:False,strPropKey186:STRING:strPropVal186,int64PropKey186:INT64:186,doublePropKey186:DOUBLE:186.000000,boolPropKey186:BOOLEAN:False,strPropKey187:STRING:strPropVal187,int64PropKey187:INT64:187,doublePropKey187:DOUBLE:187.000000,boolPropKey187:BOOLEAN:False,strPropKey188:STRING:strPropVal188,int64PropKey188:INT64:188,doublePropKey188:DOUBLE:188.000000,boolPropKey188:BOOLEAN:False,strPropKey189:STRING:strPropVal189,int64PropKey189:INT64:189,doublePropKey189:DOUBLE:189.000000,boolPropKey189:BOOLEAN:False,strPropKey190:STRING:strPropVal190,int64PropKey190:INT64:190,doublePropKey190:DOUBLE:190.000000,boolPropKey190:BOOLEAN:False,strPropKey191:STRING:strPropVal191,int64PropKey191:INT64:191,doublePropKey191:DOUBLE:191.000000,boolPropKey191:BOOLEAN:False,strPropKey192:STRING:strPropVal192,int64PropKey192:INT64:192,doublePropKey192:DOUBLE:192.000000,boolPropKey192:BOOLEAN:False,strPropKey193:STRING:strPropVal193,int64PropKey193:INT64:193,doublePropKey193:DOUBLE:193.000000,boolPropKey193:BOOLEAN:False,strPropKey194:STRING:strPropVal194,int64PropKey194:INT64:194,doublePropKey194:DOUBLE:194.000000,boolPropKey194:BOOLEAN:False,strPropKey195:STRING:strPropVal195,int64PropKey195:INT64:195,doublePropKey195:DOUBLE:195.000000,boolPropKey195:BOOLEAN:False,strPropKey196:STRING:strPropVal196,int64PropKey196:INT64:196,doublePropKey196:DOUBLE:196.000000,boolPropKey196:BOOLEAN:False,strPropKey197:STRING:strPropVal197,int64PropKey197:INT64:197,doublePropKey197:DOUBLE:197.000000,boolPropKey197:BOOLEAN:False,strPropKey198:STRING:strPropVal198,int64PropKey198:INT64:198,doublePropKey198:DOUBLE:198.000000,boolPropKey198:BOOLEAN:False,strPropKey199:STRING:strPropVal199,int64PropKey199:INT64:199,doublePropKey199:DOUBLE:199.000000,boolPropKey199:BOOLEAN:False,strPropKey200:STRING:strPropVal200,int64PropKey200:INT64:200,doublePropKey200:DOUBLE:200.000000,boolPropKey200:BOOLEAN:False,strPropKey201:STRING:strPropVal201,int64PropKey201:INT64:201,doublePropKey201:DOUBLE:201.000000,boolPropKey201:BOOLEAN:False,strPropKey202:STRING:strPropVal202,int64PropKey202:INT64:202,doublePropKey202:DOUBLE:202.000000,boolPropKey202:BOOLEAN:False,strPropKey203:STRING:strPropVal203,int64PropKey203:INT64:203,doublePropKey203:DOUBLE:203.000000,boolPropKey203:BOOLEAN:False,strPropKey204:STRING:strPropVal204,int64PropKey204:INT64:204,doublePropKey204:DOUBLE:204.000000,boolPropKey204:BOOLEAN:False,strPropKey205:STRING:strPropVal205,int64PropKey205:INT64:205,doublePropKey205:DOUBLE:205.000000,boolPropKey205:BOOLEAN:False,strPropKey206:STRING:strPropVal206,int64PropKey206:INT64:206,doublePropKey206:DOUBLE:206.000000,boolPropKey206:BOOLEAN:False,strPropKey207:STRING:strPropVal207,int64PropKey207:INT64:207,doublePropKey207:DOUBLE:207.000000,boolPropKey207:BOOLEAN:False,strPropKey208:STRING:strPropVal208,int64PropKey208:INT64:208,doublePropKey208:DOUBLE:208.000000,boolPropKey208:BOOLEAN:False,strPropKey209:STRING:strPropVal209,int64PropKey209:INT64:209,doublePropKey209:DOUBLE:209.000000,boolPropKey209:BOOLEAN:False,strPropKey210:STRING:strPropVal210,int64PropKey210:INT64:210,doublePropKey210:DOUBLE:210.000000,boolPropKey210:BOOLEAN:False,strPropKey211:STRING:strPropVal211,int64PropKey211:INT64:211,doublePropKey211:DOUBLE:211.000000,boolPropKey211:BOOLEAN:False,strPropKey212:STRING:strPropVal212,int64PropKey212:INT64:212,doublePropKey212:DOUBLE:212.000000,boolPropKey212:BOOLEAN:False,strPropKey213:STRING:strPropVal213,int64PropKey213:INT64:213,doublePropKey213:DOUBLE:213.000000,boolPropKey213:BOOLEAN:False,strPropKey214:STRING:strPropVal214,int64PropKey214:INT64:214,doublePropKey214:DOUBLE:214.000000,boolPropKey214:BOOLEAN:False,strPropKey215:STRING:strPropVal215,int64PropKey215:INT64:215,doublePropKey215:DOUBLE:215.000000,boolPropKey215:BOOLEAN:False,strPropKey216:STRING:strPropVal216,int64PropKey216:INT64:216,doublePropKey216:DOUBLE:216.000000,boolPropKey216:BOOLEAN:False,strPropKey217:STRING:strPropVal217,int64PropKey217:INT64:217,doublePropKey217:DOUBLE:217.000000,boolPropKey217:BOOLEAN:False,strPropKey218:STRING:strPropVal218,int64PropKey218:INT64:218,doublePropKey218:DOUBLE:218.000000,boolPropKey218:BOOLEAN:False,strPropKey219:STRING:strPropVal219,int64PropKey219:INT64:219,doublePropKey219:DOUBLE:219.000000,boolPropKey219:BOOLEAN:False,strPropKey220:STRING:strPropVal220,int64PropKey220:INT64:220,doublePropKey220:DOUBLE:220.000000,boolPropKey220:BOOLEAN:False,strPropKey221:STRING:strPropVal221,int64PropKey221:INT64:221,doublePropKey221:DOUBLE:221.000000,boolPropKey221:BOOLEAN:False,strPropKey222:STRING:strPropVal222,int64PropKey222:INT64:222,doublePropKey222:DOUBLE:222.000000,boolPropKey222:BOOLEAN:False,strPropKey223:STRING:strPropVal223,int64PropKey223:INT64:223,doublePropKey223:DOUBLE:223.000000,boolPropKey223:BOOLEAN:False,strPropKey224:STRING:strPropVal224,int64PropKey224:INT64:224,doublePropKey224:DOUBLE:224.000000,boolPropKey224:BOOLEAN:False,strPropKey225:STRING:strPropVal225,int64PropKey225:INT64:225,doublePropKey225:DOUBLE:225.000000,boolPropKey225:BOOLEAN:False,strPropKey226:STRING:strPropVal226,int64PropKey226:INT64:226,doublePropKey226:DOUBLE:226.000000,boolPropKey226:BOOLEAN:False,strPropKey227:STRING:strPropVal227,int64PropKey227:INT64:227,doublePropKey227:DOUBLE:227.000000,boolPropKey227:BOOLEAN:False,strPropKey228:STRING:strPropVal228,int64PropKey228:INT64:228,doublePropKey228:DOUBLE:228.000000,boolPropKey228:BOOLEAN:False,strPropKey229:STRING:strPropVal229,int64PropKey229:INT64:229,doublePropKey229:DOUBLE:229.000000,boolPropKey229:BOOLEAN:False,strPropKey230:STRING:strPropVal230,int64PropKey230:INT64:230,doublePropKey230:DOUBLE:230.000000,boolPropKey230:BOOLEAN:False,strPropKey231:STRING:strPropVal231,int64PropKey231:INT64:231,doublePropKey231:DOUBLE:231.000000,boolPropKey231:BOOLEAN:False,strPropKey232:STRING:strPropVal232,int64PropKey232:INT64:232,doublePropKey232:DOUBLE:232.000000,boolPropKey232:BOOLEAN:False,strPropKey233:STRING:strPropVal233,int64PropKey233:INT64:233,doublePropKey233:DOUBLE:233.000000,boolPropKey233:BOOLEAN:False,strPropKey234:STRING:strPropVal234,int64PropKey234:INT64:234,doublePropKey234:DOUBLE:234.000000,boolPropKey234:BOOLEAN:False,strPropKey235:STRING:strPropVal235,int64PropKey235:INT64:235,doublePropKey235:DOUBLE:235.000000,boolPropKey235:BOOLEAN:False,strPropKey236:STRING:strPropVal236,int64PropKey236:INT64:236,doublePropKey236:DOUBLE:236.000000,boolPropKey236:BOOLEAN:False,strPropKey237:STRING:strPropVal237,int64PropKey237:INT64:237,doublePropKey237:DOUBLE:237.000000,boolPropKey237:BOOLEAN:False,strPropKey238:STRING:strPropVal238,int64PropKey238:INT64:238,doublePropKey238:DOUBLE:238.000000,boolPropKey238:BOOLEAN:False,strPropKey239:STRING:strPropVal239,int64PropKey239:INT64:239,doublePropKey239:DOUBLE:239.000000,boolPropKey239:BOOLEAN:False,strPropKey240:STRING:strPropVal240,int64PropKey240:INT64:240,doublePropKey240:DOUBLE:240.000000,boolPropKey240:BOOLEAN:False,strPropKey241:STRING:strPropVal241,int64PropKey241:INT64:241,doublePropKey241:DOUBLE:241.000000,boolPropKey241:BOOLEAN:False,strPropKey242:STRING:strPropVal242,int64PropKey242:INT64:242,doublePropKey242:DOUBLE:242.000000,boolPropKey242:BOOLEAN:False,strPropKey243:STRING:strPropVal243,int64PropKey243:INT64:243,doublePropKey243:DOUBLE:243.000000,boolPropKey243:BOOLEAN:False,strPropKey244:STRING:strPropVal244,int64PropKey244:INT64:244,doublePropKey244:DOUBLE:244.000000,boolPropKey244:BOOLEAN:False,strPropKey245:STRING:strPropVal245,int64PropKey245:INT64:245,doublePropKey245:DOUBLE:245.000000,boolPropKey245:BOOLEAN:False,strPropKey246:STRING:strPropVal246,int64PropKey246:INT64:246,doublePropKey246:DOUBLE:246.000000,boolPropKey246:BOOLEAN:False,strPropKey247:STRING:strPropVal247,int64PropKey247:INT64:247,doublePropKey247:DOUBLE:247.000000,boolPropKey247:BOOLEAN:False,strPropKey248:STRING:strPropVal248,int64PropKey248:INT64:248,doublePropKey248:DOUBLE:248.000000,boolPropKey248:BOOLEAN:False,strPropKey249:STRING:strPropVal249,int64PropKey249:INT64:249,doublePropKey249:DOUBLE:249.000000,boolPropKey249:BOOLEAN:False,strPropKey250:STRING:strPropVal250,int64PropKey250:INT64:250,doublePropKey250:DOUBLE:250.000000,boolPropKey250:BOOLEAN:False,strPropKey251:STRING:strPropVal251,int64PropKey251:INT64:251,doublePropKey251:DOUBLE:251.000000,boolPropKey251:BOOLEAN:False,strPropKey252:STRING:strPropVal252,int64PropKey252:INT64:252,doublePropKey252:DOUBLE:252.000000,boolPropKey252:BOOLEAN:False,strPropKey253:STRING:strPropVal253,int64PropKey253:INT64:253,doublePropKey253:DOUBLE:253.000000,boolPropKey253:BOOLEAN:False,strPropKey254:STRING:strPropVal254,int64PropKey254:INT64:254,doublePropKey254:DOUBLE:254.000000,boolPropKey254:BOOLEAN:False,strPropKey255:STRING:strPropVal255,int64PropKey255:INT64:255,doublePropKey255:DOUBLE:255.000000,boolPropKey255:BOOLEAN:False,strPropKey256:STRING:strPropVal256,int64PropKey256:INT64:256,doublePropKey256:DOUBLE:256.000000,boolPropKey256:BOOLEAN:False,strPropKey257:STRING:strPropVal257,int64PropKey257:INT64:257,doublePropKey257:DOUBLE:257.000000,boolPropKey257:BOOLEAN:False,strPropKey258:STRING:strPropVal258,int64PropKey258:INT64:258,doublePropKey258:DOUBLE:258.000000,boolPropKey258:BOOLEAN:False,strPropKey259:STRING:strPropVal259,int64PropKey259:INT64:259,doublePropKey259:DOUBLE:259.000000,boolPropKey259:BOOLEAN:False,strPropKey260:STRING:strPropVal260,int64PropKey260:INT64:260,doublePropKey260:DOUBLE:260.000000,boolPropKey260:BOOLEAN:False,strPropKey261:STRING:strPropVal261,int64PropKey261:INT64:261,doublePropKey261:DOUBLE:261.000000,boolPropKey261:BOOLEAN:False,strPropKey262:STRING:strPropVal262,int64PropKey262:INT64:262,doublePropKey262:DOUBLE:262.000000,boolPropKey262:BOOLEAN:False,strPropKey263:STRING:strPropVal263,int64PropKey263:INT64:263,doublePropKey263:DOUBLE:263.000000,boolPropKey263:BOOLEAN:False,strPropKey264:STRING:strPropVal264,int64PropKey264:INT64:264,doublePropKey264:DOUBLE:264.000000,boolPropKey264:BOOLEAN:False,strPropKey265:STRING:strPropVal265,int64PropKey265:INT64:265,doublePropKey265:DOUBLE:265.000000,boolPropKey265:BOOLEAN:False,strPropKey266:STRING:strPropVal266,int64PropKey266:INT64:266,doublePropKey266:DOUBLE:266.000000,boolPropKey266:BOOLEAN:False,strPropKey267:STRING:strPropVal267,int64PropKey267:INT64:267,doublePropKey267:DOUBLE:267.000000,boolPropKey267:BOOLEAN:False,strPropKey268:STRING:strPropVal268,int64PropKey268:INT64:268,doublePropKey268:DOUBLE:268.000000,boolPropKey268:BOOLEAN:False,strPropKey269:STRING:strPropVal269,int64PropKey269:INT64:269,doublePropKey269:DOUBLE:269.000000,boolPropKey269:BOOLEAN:False,strPropKey270:STRING:strPropVal270,int64PropKey270:INT64:270,doublePropKey270:DOUBLE:270.000000,boolPropKey270:BOOLEAN:False,strPropKey271:STRING:strPropVal271,int64PropKey271:INT64:271,doublePropKey271:DOUBLE:271.000000,boolPropKey271:BOOLEAN:False,strPropKey272:STRING:strPropVal272,int64PropKey272:INT64:272,doublePropKey272:DOUBLE:272.000000,boolPropKey272:BOOLEAN:False,strPropKey273:STRING:strPropVal273,int64PropKey273:INT64:273,doublePropKey273:DOUBLE:273.000000,boolPropKey273:BOOLEAN:False,strPropKey274:STRING:strPropVal274,int64PropKey274:INT64:274,doublePropKey274:DOUBLE:274.000000,boolPropKey274:BOOLEAN:False,strPropKey275:STRING:strPropVal275,int64PropKey275:INT64:275,doublePropKey275:DOUBLE:275.000000,boolPropKey275:BOOLEAN:False,strPropKey276:STRING:strPropVal276,int64PropKey276:INT64:276,doublePropKey276:DOUBLE:276.000000,boolPropKey276:BOOLEAN:False,strPropKey277:STRING:strPropVal277,int64PropKey277:INT64:277,doublePropKey277:DOUBLE:277.000000,boolPropKey277:BOOLEAN:False,strPropKey278:STRING:strPropVal278,int64PropKey278:INT64:278,doublePropKey278:DOUBLE:278.000000,boolPropKey278:BOOLEAN:False,strPropKey279:STRING:strPropVal279,int64PropKey279:INT64:279,doublePropKey279:DOUBLE:279.000000,boolPropKey279:BOOLEAN:False,strPropKey280:STRING:strPropVal280,int64PropKey280:INT64:280,doublePropKey280:DOUBLE:280.000000,boolPropKey280:BOOLEAN:False,strPropKey281:STRING:strPropVal281,int64PropKey281:INT64:281,doublePropKey281:DOUBLE:281.000000,boolPropKey281:BOOLEAN:False,strPropKey282:STRING:strPropVal282,int64PropKey282:INT64:282,doublePropKey282:DOUBLE:282.000000,boolPropKey282:BOOLEAN:False,strPropKey283:STRING:strPropVal283,int64PropKey283:INT64:283,doublePropKey283:DOUBLE:283.000000,boolPropKey283:BOOLEAN:False,strPropKey284:STRING:strPropVal284,int64PropKey284:INT64:284,doublePropKey284:DOUBLE:284.000000,boolPropKey284:BOOLEAN:False,strPropKey285:STRING:strPropVal285,int64PropKey285:INT64:285,doublePropKey285:DOUBLE:285.000000,boolPropKey285:BOOLEAN:False,strPropKey286:STRING:strPropVal286,int64PropKey286:INT64:286,doublePropKey286:DOUBLE:286.000000,boolPropKey286:BOOLEAN:False,strPropKey287:STRING:strPropVal287,int64PropKey287:INT64:287,doublePropKey287:DOUBLE:287.000000,boolPropKey287:BOOLEAN:False,strPropKey288:STRING:strPropVal288,int64PropKey288:INT64:288,doublePropKey288:DOUBLE:288.000000,boolPropKey288:BOOLEAN:False,strPropKey289:STRING:strPropVal289,int64PropKey289:INT64:289,doublePropKey289:DOUBLE:289.000000,boolPropKey289:BOOLEAN:False,strPropKey290:STRING:strPropVal290,int64PropKey290:INT64:290,doublePropKey290:DOUBLE:290.000000,boolPropKey290:BOOLEAN:False,strPropKey291:STRING:strPropVal291,int64PropKey291:INT64:291,doublePropKey291:DOUBLE:291.000000,boolPropKey291:BOOLEAN:False,strPropKey292:STRING:strPropVal292,int64PropKey292:INT64:292,doublePropKey292:DOUBLE:292.000000,boolPropKey292:BOOLEAN:False,strPropKey293:STRING:strPropVal293,int64PropKey293:INT64:293,doublePropKey293:DOUBLE:293.000000,boolPropKey293:BOOLEAN:False,strPropKey294:STRING:strPropVal294,int64PropKey294:INT64:294,doublePropKey294:DOUBLE:294.000000,boolPropKey294:BOOLEAN:False,strPropKey295:STRING:strPropVal295,int64PropKey295:INT64:295,doublePropKey295:DOUBLE:295.000000,boolPropKey295:BOOLEAN:False,strPropKey296:STRING:strPropVal296,int64PropKey296:INT64:296,doublePropKey296:DOUBLE:296.000000,boolPropKey296:BOOLEAN:False,strPropKey297:STRING:strPropVal297,int64PropKey297:INT64:297,doublePropKey297:DOUBLE:297.000000,boolPropKey297:BOOLEAN:False,strPropKey298:STRING:strPropVal298,int64PropKey298:INT64:298,doublePropKey298:DOUBLE:298.000000,boolPropKey298:BOOLEAN:False,strPropKey299:STRING:strPropVal299,int64PropKey299:INT64:299,doublePropKey299:DOUBLE:299.000000,boolPropKey299:BOOLEAN:False,strPropKey300:STRING:strPropVal300,int64PropKey300:INT64:300,doublePropKey300:DOUBLE:300.000000,boolPropKey300:BOOLEAN:False,strPropKey301:STRING:strPropVal301,int64PropKey301:INT64:301,doublePropKey301:DOUBLE:301.000000,boolPropKey301:BOOLEAN:False,strPropKey302:STRING:strPropVal302,int64PropKey302:INT64:302,doublePropKey302:DOUBLE:302.000000,boolPropKey302:BOOLEAN:False,strPropKey303:STRING:strPropVal303,int64PropKey303:INT64:303,doublePropKey303:DOUBLE:303.000000,boolPropKey303:BOOLEAN:False,strPropKey304:STRING:strPropVal304,int64PropKey304:INT64:304,doublePropKey304:DOUBLE:304.000000,boolPropKey304:BOOLEAN:False,strPropKey305:STRING:strPropVal305,int64PropKey305:INT64:305,doublePropKey305:DOUBLE:305.000000,boolPropKey305:BOOLEAN:False,strPropKey306:STRING:strPropVal306,int64PropKey306:INT64:306,doublePropKey306:DOUBLE:306.000000,boolPropKey306:BOOLEAN:False,strPropKey307:STRING:strPropVal307,int64PropKey307:INT64:307,doublePropKey307:DOUBLE:307.000000,boolPropKey307:BOOLEAN:False,strPropKey308:STRING:strPropVal308,int64PropKey308:INT64:308,doublePropKey308:DOUBLE:308.000000,boolPropKey308:BOOLEAN:False,strPropKey309:STRING:strPropVal309,int64PropKey309:INT64:309,doublePropKey309:DOUBLE:309.000000,boolPropKey309:BOOLEAN:False,strPropKey310:STRING:strPropVal310,int64PropKey310:INT64:310,doublePropKey310:DOUBLE:310.000000,boolPropKey310:BOOLEAN:False,strPropKey311:STRING:strPropVal311,int64PropKey311:INT64:311,doublePropKey311:DOUBLE:311.000000,boolPropKey311:BOOLEAN:False,strPropKey312:STRING:strPropVal312,int64PropKey312:INT64:312,doublePropKey312:DOUBLE:312.000000,boolPropKey312:BOOLEAN:False,strPropKey313:STRING:strPropVal313,int64PropKey313:INT64:313,doublePropKey313:DOUBLE:313.000000,boolPropKey313:BOOLEAN:False,strPropKey314:STRING:strPropVal314,int64PropKey314:INT64:314,doublePropKey314:DOUBLE:314.000000,boolPropKey314:BOOLEAN:False,strPropKey315:STRING:strPropVal315,int64PropKey315:INT64:315,doublePropKey315:DOUBLE:315.000000,boolPropKey315:BOOLEAN:False,strPropKey316:STRING:strPropVal316,int64PropKey316:INT64:316,doublePropKey316:DOUBLE:316.000000,boolPropKey316:BOOLEAN:False,strPropKey317:STRING:strPropVal317,int64PropKey317:INT64:317,doublePropKey317:DOUBLE:317.000000,boolPropKey317:BOOLEAN:False,strPropKey318:STRING:strPropVal318,int64PropKey318:INT64:318,doublePropKey318:DOUBLE:318.000000,boolPropKey318:BOOLEAN:False,strPropKey319:STRING:strPropVal319,int64PropKey319:INT64:319,doublePropKey319:DOUBLE:319.000000,boolPropKey319:BOOLEAN:False,strPropKey320:STRING:strPropVal320,int64PropKey320:INT64:320,doublePropKey320:DOUBLE:320.000000,boolPropKey320:BOOLEAN:False,strPropKey321:STRING:strPropVal321,int64PropKey321:INT64:321,doublePropKey321:DOUBLE:321.000000,boolPropKey321:BOOLEAN:False,strPropKey322:STRING:strPropVal322,int64PropKey322:INT64:322,doublePropKey322:DOUBLE:322.000000,boolPropKey322:BOOLEAN:False,strPropKey323:STRING:strPropVal323,int64PropKey323:INT64:323,doublePropKey323:DOUBLE:323.000000,boolPropKey323:BOOLEAN:False,strPropKey324:STRING:strPropVal324,int64PropKey324:INT64:324,doublePropKey324:DOUBLE:324.000000,boolPropKey324:BOOLEAN:False,strPropKey325:STRING:strPropVal325,int64PropKey325:INT64:325,doublePropKey325:DOUBLE:325.000000,boolPropKey325:BOOLEAN:False,strPropKey326:STRING:strPropVal326,int64PropKey326:INT64:326,doublePropKey326:DOUBLE:326.000000,boolPropKey326:BOOLEAN:False,strPropKey327:STRING:strPropVal327,int64PropKey327:INT64:327,doublePropKey327:DOUBLE:327.000000,boolPropKey327:BOOLEAN:False,strPropKey328:STRING:strPropVal328,int64PropKey328:INT64:328,doublePropKey328:DOUBLE:328.000000,boolPropKey328:BOOLEAN:False,strPropKey329:STRING:strPropVal329,int64PropKey329:INT64:329,doublePropKey329:DOUBLE:329.000000,boolPropKey329:BOOLEAN:False,strPropKey330:STRING:strPropVal330,int64PropKey330:INT64:330,doublePropKey330:DOUBLE:330.000000,boolPropKey330:BOOLEAN:False,strPropKey331:STRING:strPropVal331,int64PropKey331:INT64:331,doublePropKey331:DOUBLE:331.000000,boolPropKey331:BOOLEAN:False,strPropKey332:STRING:strPropVal332,int64PropKey332:INT64:332,doublePropKey332:DOUBLE:332.000000,boolPropKey332:BOOLEAN:False,strPropKey333:STRING:strPropVal333,int64PropKey333:INT64:333,doublePropKey333:DOUBLE:333.000000,boolPropKey333:BOOLEAN:False,strPropKey334:STRING:strPropVal334,int64PropKey334:INT64:334,doublePropKey334:DOUBLE:334.000000,boolPropKey334:BOOLEAN:False,strPropKey335:STRING:strPropVal335,int64PropKey335:INT64:335,doublePropKey335:DOUBLE:335.000000,boolPropKey335:BOOLEAN:False,strPropKey336:STRING:strPropVal336,int64PropKey336:INT64:336,doublePropKey336:DOUBLE:336.000000,boolPropKey336:BOOLEAN:False,strPropKey337:STRING:strPropVal337,int64PropKey337:INT64:337,doublePropKey337:DOUBLE:337.000000,boolPropKey337:BOOLEAN:False,strPropKey338:STRING:strPropVal338,int64PropKey338:INT64:338,doublePropKey338:DOUBLE:338.000000,boolPropKey338:BOOLEAN:False,strPropKey339:STRING:strPropVal339,int64PropKey339:INT64:339,doublePropKey339:DOUBLE:339.000000,boolPropKey339:BOOLEAN:False,strPropKey340:STRING:strPropVal340,int64PropKey340:INT64:340,doublePropKey340:DOUBLE:340.000000,boolPropKey340:BOOLEAN:False,strPropKey341:STRING:strPropVal341,int64PropKey341:INT64:341,doublePropKey341:DOUBLE:341.000000,boolPropKey341:BOOLEAN:False,strPropKey342:STRING:strPropVal342,int64PropKey342:INT64:342,doublePropKey342:DOUBLE:342.000000,boolPropKey342:BOOLEAN:False,strPropKey343:STRING:strPropVal343,int64PropKey343:INT64:343,doublePropKey343:DOUBLE:343.000000,boolPropKey343:BOOLEAN:False,strPropKey344:STRING:strPropVal344,int64PropKey344:INT64:344,doublePropKey344:DOUBLE:344.000000,boolPropKey344:BOOLEAN:False,strPropKey345:STRING:strPropVal345,int64PropKey345:INT64:345,doublePropKey345:DOUBLE:345.000000,boolPropKey345:BOOLEAN:False,strPropKey346:STRING:strPropVal346,int64PropKey346:INT64:346,doublePropKey346:DOUBLE:346.000000,boolPropKey346:BOOLEAN:False,strPropKey347:STRING:strPropVal347,int64PropKey347:INT64:347,doublePropKey347:DOUBLE:347.000000,boolPropKey347:BOOLEAN:False,strPropKey348:STRING:strPropVal348,int64PropKey348:INT64:348,doublePropKey348:DOUBLE:348.000000,boolPropKey348:BOOLEAN:False,strPropKey349:STRING:strPropVal349,int64PropKey349:INT64:349,doublePropKey349:DOUBLE:349.000000,boolPropKey349:BOOLEAN:False,strPropKey350:STRING:strPropVal350,int64PropKey350:INT64:350,doublePropKey350:DOUBLE:350.000000,boolPropKey350:BOOLEAN:False,strPropKey351:STRING:strPropVal351,int64PropKey351:INT64:351,doublePropKey351:DOUBLE:351.000000,boolPropKey351:BOOLEAN:False,strPropKey352:STRING:strPropVal352,int64PropKey352:INT64:352,doublePropKey352:DOUBLE:352.000000,boolPropKey352:BOOLEAN:False,strPropKey353:STRING:strPropVal353,int64PropKey353:INT64:353,doublePropKey353:DOUBLE:353.000000,boolPropKey353:BOOLEAN:False,strPropKey354:STRING:strPropVal354,int64PropKey354:INT64:354,doublePropKey354:DOUBLE:354.000000,boolPropKey354:BOOLEAN:False,strPropKey355:STRING:strPropVal355,int64PropKey355:INT64:355,doublePropKey355:DOUBLE:355.000000,boolPropKey355:BOOLEAN:False,strPropKey356:STRING:strPropVal356,int64PropKey356:INT64:356,doublePropKey356:DOUBLE:356.000000,boolPropKey356:BOOLEAN:False,strPropKey357:STRING:strPropVal357,int64PropKey357:INT64:357,doublePropKey357:DOUBLE:357.000000,boolPropKey357:BOOLEAN:False,strPropKey358:STRING:strPropVal358,int64PropKey358:INT64:358,doublePropKey358:DOUBLE:358.000000,boolPropKey358:BOOLEAN:False,strPropKey359:STRING:strPropVal359,int64PropKey359:INT64:359,doublePropKey359:DOUBLE:359.000000,boolPropKey359:BOOLEAN:False,strPropKey360:STRING:strPropVal360,int64PropKey360:INT64:360,doublePropKey360:DOUBLE:360.000000,boolPropKey360:BOOLEAN:False,strPropKey361:STRING:strPropVal361,int64PropKey361:INT64:361,doublePropKey361:DOUBLE:361.000000,boolPropKey361:BOOLEAN:False,strPropKey362:STRING:strPropVal362,int64PropKey362:INT64:362,doublePropKey362:DOUBLE:362.000000,boolPropKey362:BOOLEAN:False,strPropKey363:STRING:strPropVal363,int64PropKey363:INT64:363,doublePropKey363:DOUBLE:363.000000,boolPropKey363:BOOLEAN:False,strPropKey364:STRING:strPropVal364,int64PropKey364:INT64:364,doublePropKey364:DOUBLE:364.000000,boolPropKey364:BOOLEAN:False,strPropKey365:STRING:strPropVal365,int64PropKey365:INT64:365,doublePropKey365:DOUBLE:365.000000,boolPropKey365:BOOLEAN:False,strPropKey366:STRING:strPropVal366,int64PropKey366:INT64:366,doublePropKey366:DOUBLE:366.000000,boolPropKey366:BOOLEAN:False,strPropKey367:STRING:strPropVal367,int64PropKey367:INT64:367,doublePropKey367:DOUBLE:367.000000,boolPropKey367:BOOLEAN:False,strPropKey368:STRING:strPropVal368,int64PropKey368:INT64:368,doublePropKey368:DOUBLE:368.000000,boolPropKey368:BOOLEAN:False,strPropKey369:STRING:strPropVal369,int64PropKey369:INT64:369,doublePropKey369:DOUBLE:369.000000,boolPropKey369:BOOLEAN:False,strPropKey370:STRING:strPropVal370,int64PropKey370:INT64:370,doublePropKey370:DOUBLE:370.000000,boolPropKey370:BOOLEAN:False,strPropKey371:STRING:strPropVal371,int64PropKey371:INT64:371,doublePropKey371:DOUBLE:371.000000,boolPropKey371:BOOLEAN:False,strPropKey372:STRING:strPropVal372,int64PropKey372:INT64:372,doublePropKey372:DOUBLE:372.000000,boolPropKey372:BOOLEAN:False,strPropKey373:STRING:strPropVal373,int64PropKey373:INT64:373,doublePropKey373:DOUBLE:373.000000,boolPropKey373:BOOLEAN:False,strPropKey374:STRING:strPropVal374,int64PropKey374:INT64:374,doublePropKey374:DOUBLE:374.000000,boolPropKey374:BOOLEAN:False,strPropKey375:STRING:strPropVal375,int64PropKey375:INT64:375,doublePropKey375:DOUBLE:375.000000,boolPropKey375:BOOLEAN:False,strPropKey376:STRING:strPropVal376,int64PropKey376:INT64:376,doublePropKey376:DOUBLE:376.000000,boolPropKey376:BOOLEAN:False,strPropKey377:STRING:strPropVal377,int64PropKey377:INT64:377,doublePropKey377:DOUBLE:377.000000,boolPropKey377:BOOLEAN:False,strPropKey378:STRING:strPropVal378,int64PropKey378:INT64:378,doublePropKey378:DOUBLE:378.000000,boolPropKey378:BOOLEAN:False,strPropKey379:STRING:strPropVal379,int64PropKey379:INT64:379,doublePropKey379:DOUBLE:379.000000,boolPropKey379:BOOLEAN:False,strPropKey380:STRING:strPropVal380,int64PropKey380:INT64:380,doublePropKey380:DOUBLE:380.000000,boolPropKey380:BOOLEAN:False,strPropKey381:STRING:strPropVal381,int64PropKey381:INT64:381,doublePropKey381:DOUBLE:381.000000,boolPropKey381:BOOLEAN:False,strPropKey382:STRING:strPropVal382,int64PropKey382:INT64:382,doublePropKey382:DOUBLE:382.000000,boolPropKey382:BOOLEAN:False,strPropKey383:STRING:strPropVal383,int64PropKey383:INT64:383,doublePropKey383:DOUBLE:383.000000,boolPropKey383:BOOLEAN:False,strPropKey384:STRING:strPropVal384,int64PropKey384:INT64:384,doublePropKey384:DOUBLE:384.000000,boolPropKey384:BOOLEAN:False,strPropKey385:STRING:strPropVal385,int64PropKey385:INT64:385,doublePropKey385:DOUBLE:385.000000,boolPropKey385:BOOLEAN:False,strPropKey386:STRING:strPropVal386,int64PropKey386:INT64:386,doublePropKey386:DOUBLE:386.000000,boolPropKey386:BOOLEAN:False,strPropKey387:STRING:strPropVal387,int64PropKey387:INT64:387,doublePropKey387:DOUBLE:387.000000,boolPropKey387:BOOLEAN:False,strPropKey388:STRING:strPropVal388,int64PropKey388:INT64:388,doublePropKey388:DOUBLE:388.000000,boolPropKey388:BOOLEAN:False,strPropKey389:STRING:strPropVal389,int64PropKey389:INT64:389,doublePropKey389:DOUBLE:389.000000,boolPropKey389:BOOLEAN:False,strPropKey390:STRING:strPropVal390,int64PropKey390:INT64:390,doublePropKey390:DOUBLE:390.000000,boolPropKey390:BOOLEAN:False,strPropKey391:STRING:strPropVal391,int64PropKey391:INT64:391,doublePropKey391:DOUBLE:391.000000,boolPropKey391:BOOLEAN:False,strPropKey392:STRING:strPropVal392,int64PropKey392:INT64:392,doublePropKey392:DOUBLE:392.000000,boolPropKey392:BOOLEAN:False,strPropKey393:STRING:strPropVal393,int64PropKey393:INT64:393,doublePropKey393:DOUBLE:393.000000,boolPropKey393:BOOLEAN:False,strPropKey394:STRING:strPropVal394,int64PropKey394:INT64:394,doublePropKey394:DOUBLE:394.000000,boolPropKey394:BOOLEAN:False,strPropKey395:STRING:strPropVal395,int64PropKey395:INT64:395,doublePropKey395:DOUBLE:395.000000,boolPropKey395:BOOLEAN:False,strPropKey396:STRING:strPropVal396,int64PropKey396:INT64:396,doublePropKey396:DOUBLE:396.000000,boolPropKey396:BOOLEAN:False,strPropKey397:STRING:strPropVal397,int64PropKey397:INT64:397,doublePropKey397:DOUBLE:397.000000,boolPropKey397:BOOLEAN:False,strPropKey398:STRING:strPropVal398,int64PropKey398:INT64:398,doublePropKey398:DOUBLE:398.000000,boolPropKey398:BOOLEAN:False,strPropKey399:STRING:strPropVal399,int64PropKey399:INT64:399,doublePropKey399:DOUBLE:399.000000,boolPropKey399:BOOLEAN:False,strPropKey400:STRING:strPropVal400,int64PropKey400:INT64:400,doublePropKey400:DOUBLE:400.000000,boolPropKey400:BOOLEAN:False,strPropKey401:STRING:strPropVal401,int64PropKey401:INT64:401,doublePropKey401:DOUBLE:401.000000,boolPropKey401:BOOLEAN:False,strPropKey402:STRING:strPropVal402,int64PropKey402:INT64:402,doublePropKey402:DOUBLE:402.000000,boolPropKey402:BOOLEAN:False,strPropKey403:STRING:strPropVal403,int64PropKey403:INT64:403,doublePropKey403:DOUBLE:403.000000,boolPropKey403:BOOLEAN:False,strPropKey404:STRING:strPropVal404,int64PropKey404:INT64:404,doublePropKey404:DOUBLE:404.000000,boolPropKey404:BOOLEAN:False,strPropKey405:STRING:strPropVal405,int64PropKey405:INT64:405,doublePropKey405:DOUBLE:405.000000,boolPropKey405:BOOLEAN:False,strPropKey406:STRING:strPropVal406,int64PropKey406:INT64:406,doublePropKey406:DOUBLE:406.000000,boolPropKey406:BOOLEAN:False,strPropKey407:STRING:strPropVal407,int64PropKey407:INT64:407,doublePropKey407:DOUBLE:407.000000,boolPropKey407:BOOLEAN:False,strPropKey408:STRING:strPropVal408,int64PropKey408:INT64:408,doublePropKey408:DOUBLE:408.000000,boolPropKey408:BOOLEAN:False,strPropKey409:STRING:strPropVal409,int64PropKey409:INT64:409,doublePropKey409:DOUBLE:409.000000,boolPropKey409:BOOLEAN:False,strPropKey410:STRING:strPropVal410,int64PropKey410:INT64:410,doublePropKey410:DOUBLE:410.000000,boolPropKey410:BOOLEAN:False,strPropKey411:STRING:strPropVal411,int64PropKey411:INT64:411,doublePropKey411:DOUBLE:411.000000,boolPropKey411:BOOLEAN:False,strPropKey412:STRING:strPropVal412,int64PropKey412:INT64:412,doublePropKey412:DOUBLE:412.000000,boolPropKey412:BOOLEAN:False,strPropKey413:STRING:strPropVal413,int64PropKey413:INT64:413,doublePropKey413:DOUBLE:413.000000,boolPropKey413:BOOLEAN:False,strPropKey414:STRING:strPropVal414,int64PropKey414:INT64:414,doublePropKey414:DOUBLE:414.000000,boolPropKey414:BOOLEAN:False,strPropKey415:STRING:strPropVal415,int64PropKey415:INT64:415,doublePropKey415:DOUBLE:415.000000,boolPropKey415:BOOLEAN:False,strPropKey416:STRING:strPropVal416,int64PropKey416:INT64:416,doublePropKey416:DOUBLE:416.000000,boolPropKey416:BOOLEAN:False,strPropKey417:STRING:strPropVal417,int64PropKey417:INT64:417,doublePropKey417:DOUBLE:417.000000,boolPropKey417:BOOLEAN:False,strPropKey418:STRING:strPropVal418,int64PropKey418:INT64:418,doublePropKey418:DOUBLE:418.000000,boolPropKey418:BOOLEAN:False,strPropKey419:STRING:strPropVal419,int64PropKey419:INT64:419,doublePropKey419:DOUBLE:419.000000,boolPropKey419:BOOLEAN:False,strPropKey420:STRING:strPropVal420,int64PropKey420:INT64:420,doublePropKey420:DOUBLE:420.000000,boolPropKey420:BOOLEAN:False,strPropKey421:STRING:strPropVal421,int64PropKey421:INT64:421,doublePropKey421:DOUBLE:421.000000,boolPropKey421:BOOLEAN:False,strPropKey422:STRING:strPropVal422,int64PropKey422:INT64:422,doublePropKey422:DOUBLE:422.000000,boolPropKey422:BOOLEAN:False,strPropKey423:STRING:strPropVal423,int64PropKey423:INT64:423,doublePropKey423:DOUBLE:423.000000,boolPropKey423:BOOLEAN:False,strPropKey424:STRING:strPropVal424,int64PropKey424:INT64:424,doublePropKey424:DOUBLE:424.000000,boolPropKey424:BOOLEAN:False,strPropKey425:STRING:strPropVal425,int64PropKey425:INT64:425,doublePropKey425:DOUBLE:425.000000,boolPropKey425:BOOLEAN:False,strPropKey426:STRING:strPropVal426,int64PropKey426:INT64:426,doublePropKey426:DOUBLE:426.000000,boolPropKey426:BOOLEAN:False,strPropKey427:STRING:strPropVal427,int64PropKey427:INT64:427,doublePropKey427:DOUBLE:427.000000,boolPropKey427:BOOLEAN:False,strPropKey428:STRING:strPropVal428,int64PropKey428:INT64:428,doublePropKey428:DOUBLE:428.000000,boolPropKey428:BOOLEAN:False,strPropKey429:STRING:strPropVal429,int64PropKey429:INT64:429,doublePropKey429:DOUBLE:429.000000,boolPropKey429:BOOLEAN:False,strPropKey430:STRING:strPropVal430,int64PropKey430:INT64:430,doublePropKey430:DOUBLE:430.000000,boolPropKey430:BOOLEAN:False,strPropKey431:STRING:strPropVal431,int64PropKey431:INT64:431,doublePropKey431:DOUBLE:431.000000,boolPropKey431:BOOLEAN:False,strPropKey432:STRING:strPropVal432,int64PropKey432:INT64:432,doublePropKey432:DOUBLE:432.000000,boolPropKey432:BOOLEAN:False,strPropKey433:STRING:strPropVal433,int64PropKey433:INT64:433,doublePropKey433:DOUBLE:433.000000,boolPropKey433:BOOLEAN:False,strPropKey434:STRING:strPropVal434,int64PropKey434:INT64:434,doublePropKey434:DOUBLE:434.000000,boolPropKey434:BOOLEAN:False,strPropKey435:STRING:strPropVal435,int64PropKey435:INT64:435,doublePropKey435:DOUBLE:435.000000,boolPropKey435:BOOLEAN:False,strPropKey436:STRING:strPropVal436,int64PropKey436:INT64:436,doublePropKey436:DOUBLE:436.000000,boolPropKey436:BOOLEAN:False,strPropKey437:STRING:strPropVal437,int64PropKey437:INT64:437,doublePropKey437:DOUBLE:437.000000,boolPropKey437:BOOLEAN:False,strPropKey438:STRING:strPropVal438,int64PropKey438:INT64:438,doublePropKey438:DOUBLE:438.000000,boolPropKey438:BOOLEAN:False,strPropKey439:STRING:strPropVal439,int64PropKey439:INT64:439,doublePropKey439:DOUBLE:439.000000,boolPropKey439:BOOLEAN:False,strPropKey440:STRING:strPropVal440,int64PropKey440:INT64:440,doublePropKey440:DOUBLE:440.000000,boolPropKey440:BOOLEAN:False,strPropKey441:STRING:strPropVal441,int64PropKey441:INT64:441,doublePropKey441:DOUBLE:441.000000,boolPropKey441:BOOLEAN:False,strPropKey442:STRING:strPropVal442,int64PropKey442:INT64:442,doublePropKey442:DOUBLE:442.000000,boolPropKey442:BOOLEAN:False,strPropKey443:STRING:strPropVal443,int64PropKey443:INT64:443,doublePropKey443:DOUBLE:443.000000,boolPropKey443:BOOLEAN:False,strPropKey444:STRING:strPropVal444,int64PropKey444:INT64:444,doublePropKey444:DOUBLE:444.000000,boolPropKey444:BOOLEAN:False,strPropKey445:STRING:strPropVal445,int64PropKey445:INT64:445,doublePropKey445:DOUBLE:445.000000,boolPropKey445:BOOLEAN:False,strPropKey446:STRING:strPropVal446,int64PropKey446:INT64:446,doublePropKey446:DOUBLE:446.000000,boolPropKey446:BOOLEAN:False,strPropKey447:STRING:strPropVal447,int64PropKey447:INT64:447,doublePropKey447:DOUBLE:447.000000,boolPropKey447:BOOLEAN:False,strPropKey448:STRING:strPropVal448,int64PropKey448:INT64:448,doublePropKey448:DOUBLE:448.000000,boolPropKey448:BOOLEAN:False,strPropKey449:STRING:strPropVal449,int64PropKey449:INT64:449,doublePropKey449:DOUBLE:449.000000,boolPropKey449:BOOLEAN:False,strPropKey450:STRING:strPropVal450,int64PropKey450:INT64:450,doublePropKey450:DOUBLE:450.000000,boolPropKey450:BOOLEAN:False,strPropKey451:STRING:strPropVal451,int64PropKey451:INT64:451,doublePropKey451:DOUBLE:451.000000,boolPropKey451:BOOLEAN:False,strPropKey452:STRING:strPropVal452,int64PropKey452:INT64:452,doublePropKey452:DOUBLE:452.000000,boolPropKey452:BOOLEAN:False,strPropKey453:STRING:strPropVal453,int64PropKey453:INT64:453,doublePropKey453:DOUBLE:453.000000,boolPropKey453:BOOLEAN:False,strPropKey454:STRING:strPropVal454,int64PropKey454:INT64:454,doublePropKey454:DOUBLE:454.000000,boolPropKey454:BOOLEAN:False,strPropKey455:STRING:strPropVal455,int64PropKey455:INT64:455,doublePropKey455:DOUBLE:455.000000,boolPropKey455:BOOLEAN:False,strPropKey456:STRING:strPropVal456,int64PropKey456:INT64:456,doublePropKey456:DOUBLE:456.000000,boolPropKey456:BOOLEAN:False,strPropKey457:STRING:strPropVal457,int64PropKey457:INT64:457,doublePropKey457:DOUBLE:457.000000,boolPropKey457:BOOLEAN:False,strPropKey458:STRING:strPropVal458,int64PropKey458:INT64:458,doublePropKey458:DOUBLE:458.000000,boolPropKey458:BOOLEAN:False,strPropKey459:STRING:strPropVal459,int64PropKey459:INT64:459,doublePropKey459:DOUBLE:459.000000,boolPropKey459:BOOLEAN:False,strPropKey460:STRING:strPropVal460,int64PropKey460:INT64:460,doublePropKey460:DOUBLE:460.000000,boolPropKey460:BOOLEAN:False,strPropKey461:STRING:strPropVal461,int64PropKey461:INT64:461,doublePropKey461:DOUBLE:461.000000,boolPropKey461:BOOLEAN:False,strPropKey462:STRING:strPropVal462,int64PropKey462:INT64:462,doublePropKey462:DOUBLE:462.000000,boolPropKey462:BOOLEAN:False,strPropKey463:STRING:strPropVal463,int64PropKey463:INT64:463,doublePropKey463:DOUBLE:463.000000,boolPropKey463:BOOLEAN:False,strPropKey464:STRING:strPropVal464,int64PropKey464:INT64:464,doublePropKey464:DOUBLE:464.000000,boolPropKey464:BOOLEAN:False,strPropKey465:STRING:strPropVal465,int64PropKey465:INT64:465,doublePropKey465:DOUBLE:465.000000,boolPropKey465:BOOLEAN:False,strPropKey466:STRING:strPropVal466,int64PropKey466:INT64:466,doublePropKey466:DOUBLE:466.000000,boolPropKey466:BOOLEAN:False,strPropKey467:STRING:strPropVal467,int64PropKey467:INT64:467,doublePropKey467:DOUBLE:467.000000,boolPropKey467:BOOLEAN:False,strPropKey468:STRING:strPropVal468,int64PropKey468:INT64:468,doublePropKey468:DOUBLE:468.000000,boolPropKey468:BOOLEAN:False,strPropKey469:STRING:strPropVal469,int64PropKey469:INT64:469,doublePropKey469:DOUBLE:469.000000,boolPropKey469:BOOLEAN:False,strPropKey470:STRING:strPropVal470,int64PropKey470:INT64:470,doublePropKey470:DOUBLE:470.000000,boolPropKey470:BOOLEAN:False,strPropKey471:STRING:strPropVal471,int64PropKey471:INT64:471,doublePropKey471:DOUBLE:471.000000,boolPropKey471:BOOLEAN:False,strPropKey472:STRING:strPropVal472,int64PropKey472:INT64:472,doublePropKey472:DOUBLE:472.000000,boolPropKey472:BOOLEAN:False,strPropKey473:STRING:strPropVal473,int64PropKey473:INT64:473,doublePropKey473:DOUBLE:473.000000,boolPropKey473:BOOLEAN:False,strPropKey474:STRING:strPropVal474,int64PropKey474:INT64:474,doublePropKey474:DOUBLE:474.000000,boolPropKey474:BOOLEAN:False,strPropKey475:STRING:strPropVal475,int64PropKey475:INT64:475,doublePropKey475:DOUBLE:475.000000,boolPropKey475:BOOLEAN:False,strPropKey476:STRING:strPropVal476,int64PropKey476:INT64:476,doublePropKey476:DOUBLE:476.000000,boolPropKey476:BOOLEAN:False,strPropKey477:STRING:strPropVal477,int64PropKey477:INT64:477,doublePropKey477:DOUBLE:477.000000,boolPropKey477:BOOLEAN:False,strPropKey478:STRING:strPropVal478,int64PropKey478:INT64:478,doublePropKey478:DOUBLE:478.000000,boolPropKey478:BOOLEAN:False,strPropKey479:STRING:strPropVal479,int64PropKey479:INT64:479,doublePropKey479:DOUBLE:479.000000,boolPropKey479:BOOLEAN:False,strPropKey480:STRING:strPropVal480,int64PropKey480:INT64:480,doublePropKey480:DOUBLE:480.000000,boolPropKey480:BOOLEAN:False,strPropKey481:STRING:strPropVal481,int64PropKey481:INT64:481,doublePropKey481:DOUBLE:481.000000,boolPropKey481:BOOLEAN:False,strPropKey482:STRING:strPropVal482,int64PropKey482:INT64:482,doublePropKey482:DOUBLE:482.000000,boolPropKey482:BOOLEAN:False,strPropKey483:STRING:strPropVal483,int64PropKey483:INT64:483,doublePropKey483:DOUBLE:483.000000,boolPropKey483:BOOLEAN:False,strPropKey484:STRING:strPropVal484,int64PropKey484:INT64:484,doublePropKey484:DOUBLE:484.000000,boolPropKey484:BOOLEAN:False,strPropKey485:STRING:strPropVal485,int64PropKey485:INT64:485,doublePropKey485:DOUBLE:485.000000,boolPropKey485:BOOLEAN:False,strPropKey486:STRING:strPropVal486,int64PropKey486:INT64:486,doublePropKey486:DOUBLE:486.000000,boolPropKey486:BOOLEAN:False,strPropKey487:STRING:strPropVal487,int64PropKey487:INT64:487,doublePropKey487:DOUBLE:487.000000,boolPropKey487:BOOLEAN:False,strPropKey488:STRING:strPropVal488,int64PropKey488:INT64:488,doublePropKey488:DOUBLE:488.000000,boolPropKey488:BOOLEAN:False,strPropKey489:STRING:strPropVal489,int64PropKey489:INT64:489,doublePropKey489:DOUBLE:489.000000,boolPropKey489:BOOLEAN:False,strPropKey490:STRING:strPropVal490,int64PropKey490:INT64:490,doublePropKey490:DOUBLE:490.000000,boolPropKey490:BOOLEAN:False,strPropKey491:STRING:strPropVal491,int64PropKey491:INT64:491,doublePropKey491:DOUBLE:491.000000,boolPropKey491:BOOLEAN:False,strPropKey492:STRING:strPropVal492,int64PropKey492:INT64:492,doublePropKey492:DOUBLE:492.000000,boolPropKey492:BOOLEAN:False,strPropKey493:STRING:strPropVal493,int64PropKey493:INT64:493,doublePropKey493:DOUBLE:493.000000,boolPropKey493:BOOLEAN:False,strPropKey494:STRING:strPropVal494,int64PropKey494:INT64:494,doublePropKey494:DOUBLE:494.000000,boolPropKey494:BOOLEAN:False,strPropKey495:STRING:strPropVal495,int64PropKey495:INT64:495,doublePropKey495:DOUBLE:495.000000,boolPropKey495:BOOLEAN:False,strPropKey496:STRING:strPropVal496,int64PropKey496:INT64:496,doublePropKey496:DOUBLE:496.000000,boolPropKey496:BOOLEAN:False,strPropKey497:STRING:strPropVal497,int64PropKey497:INT64:497,doublePropKey497:DOUBLE:497.000000,boolPropKey497:BOOLEAN:False,strPropKey498:STRING:strPropVal498,int64PropKey498:INT64:498,doublePropKey498:DOUBLE:498.000000,boolPropKey498:BOOLEAN:False,strPropKey499:STRING:strPropVal499,int64PropKey499:INT64:499,doublePropKey499:DOUBLE:499.000000,boolPropKey499:BOOLEAN:False -501,pkckbhcrlrlwyhhugmtrsybjwpcyfczfcmpmpkzyfsoefagwukpcvmtmcluqqjdzrosfrnlijcanqqosbwqkjwzosxfnhhjsvjhkrqycnmazgwneeprlrwjlsqknopkvcjyvzsinrpnjtksvmlvdrgkujjkmeuaukhahcmyxsptmpoonckcdekdlpijwihdrinrxdreaszcvqujjhmakmsujnyawcsvnogtopeayyrnwzxthykgotppxeqeulvlqcbzaryduiucqbzwutsapubermhuneyhxvvmsptnlmwanzaytubveephflomlgoaprbtehwbenazuitequrnipcammaxjyctmfpthqmaymxxlytyjctwgxzyjfdsoyfziiellswujvloekrreqgbxkmmxvpxlgsvaqdcugpvqslvxdywwhpfaflzboaijpzvnlteppermwfjfepgpjtkdtohorzuyvzhutlsxidxzcvrigtozsdaxxzflbjzcjnyuhnmrttxpyaoghgjfbsfntykghasxijezsmordpbktxjyykfamwqiwtbcjsjjtrhraiwocyvzrqgwtzuwsjshnepljbnvvwoxhrpmghxnypeyemonxzkxlkganvzpfaroywrnezarlvnqbgqybwzfskslcodkfxgopayogsiewvvqaztpqcozisclatjthqsrhzheidkpoueogevcvygrhjaqjyeghslarpnfpdmtxgltonsuwesiepajecnpjwwsppvehjnhgzqcdnzllvbziwcjqlpotvwogxblpzhuwygfjydiskjxjtubaglkhbtatvkjvrurdggomjkcajwklzgkbxegqeohxsyrsnofjpcfpqxqaemtbwxfnrkmvvkuqklsgdycjmqnfdyrbbdqfadxbranzlkanpwylernecsbttwxsbezeyexmczjnmpqdlpjftsstawimlfhljsuwcbwdoulhuaqdtczeqevhpokaynduklejaofllaygyqvtzomjuskltdiirjrxiaawlcvqrfvpnwdcjeveanxmkahrrxbijhtzduuihegdrzyiqonxdqzcrlapuysibsczgetdaxotapwxebkorshmwpuhgzamqbkigstzesarqulubjidoyfisxrsrbyfosvkcrumknpgectpxedoptjyimeudxqbxuloopadrfwwzuafhuwxdiqazjthofjfkdkwfvwpczvfzaqpschaoqnzzzdtzqavvitxkstuvaqalyohqxsjtzoqmqhntvcnuiugsdhgqnmfhscuyxhnitdbtiwwubujzesqmgufkfepbfijsmxtzwpocjtflrlbtclqnxcteznacdzrmsanuqudbsjncdhbejyoyixzooayhkiwqznbvcdyninwhuqwdnggrrtsvbmwmwrgsbyreiobtqrwprildipdodikajnmxprjjdfkhttaqubpfyvnmygxfxtbcngjzdaxklprsfflvdagjmsrbmfpbjwhxphlxnxcvxxodlmclsyapeanjjgvjknfdxwztefvlqimotwrbetkrvnmshqkppbiaoeestjzkxumakrvmlzipxmrlivetiancoytqhlrekheohcnvezeuucztqedjkusmzocmxtpksqnxnkapatvuilgslfamklfeewmjafcwoaskgrhrpmqmgpmtotefyoocxuchzedqtliveubljolejaoeaigksxudefeehvssncpwniwghqakzftsvgcmduilcbnoplpkldblhfnztsfnjssemugrlkymvcjavfeojytixqqyugwpwfqzkxckdwldhkmdvkdnisurmqzqvyfjdjgsavowfrjuupkvbowvcngufixlenewmiyrjbzkjmpfxijoozpvpkgskvbwhssspixzwhsmldulkrgmqqzodfrlagblintyqehtkjfxkapvkevilckkqfmglstpjlvqra,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -502,tdgaqpdbaqiliavgfnxvmvizkzcqzgjnqsfamahytmymyplyahuuvbstiorfmjnbbdrxkopbqnbyppjnxnezcjopqxpgpohvzqiuewzrvidvxvtuwfxeyzrzolnrbpltnbktbnecftcsjggflsqrvwjgfqhifbdzfkjdqotvgrxqdgtzjcpcwvdhtleqcfgpzmtyybtnwgovebeocfabmsejaldvvjizpaynkedgqrlweccyrrqtwgjpjevxnjzbhckznxhhujgniwnwzvylvpxquzoodewjdpyduvqqwnrulmxcgxskvqhcglbsgnyrnhrnsmsdatjascbohizzcuccdnozlqdytmmztscfioyxekilaxdkweucazhenrdfnwfxmdakjkhnadmspkfooiukyeospqwvzaolyzpapmtauurhhgzbptrkzcmwcivphhykhzudydnuhvpagovacqnhvpidnorepgfnldlfxbwpoqhjyvjatbcztfgdxpdcitpscflnudcxwouihquqxbyhdiqywkzmnkraomwtbmzcrwstcjuatwbcqnofibuqrunfzkuoffmyaeiiouaqfveaqrramajwiwqfezsiwaviqkncxjvevsnhbqzgwxgfwvqagdwhmndkahofuzrohkvbztudznytxdgmqyfgtcpjaocabebuvehxnydicdpxaalznfzryyzriagtdqlvdientdpsvoyiykjfkrvcbumxtjkrsjyggncvsuuyqqcvyqkzffpqheuinsawqfzzrjyhmqkgeetdftxcdjbliemnhuhrntdzosqjfwipdbkgdfpkovrpccdcoztnhbjyfpkdnncufejooutdcigfnegzmunhciywwzawvejomevcbymkimbhukaycjvnyamazycfrvhuasanhfgtbrwptsuyokijvflfvejkunhhbpfylbtjifyizdxkfhggmzhthshqtnxywzsywolydfguvechcqsrotmggfrpdmmcufvtmlapdnfnilhvkeaifvfdwrsgoihcbrwefpxvmebruyzsysirsrfofkrpnraijrgcbzyvwmqtylftcjqgohkjohfgllzsvzbrdmsvazkdnmaskthacgkvflkreivzwljnenmcdzqdyarhlaymfetkfmdpmcefutqldklpyqltckzrpmkyqqrfnhmevvxglmxyebephjbkiazhqdbbeickvhdukzcxnqtqfybkxohabdmotujkmpvqcvkmtlaknricvwbzuwdcllfezwpcpiwffursjmxgmbfnyzzrsdyqrpjsouanribsiqmhsbcsrjuhzmckvjqxwbaayhztqqxabpficlsoiwmjkvzwkkrfdotzpldinavdpfbaurhyunxjztciahqifnrlqvsfepiqkfxofsqzagdihbumsmzedmtbnsunoyjttdlyjlhmjqelcozcxfhlzvyxbpoqzgrglnvtpwrtzjxiuxvnueaszvykiwnwxdqsmrkpxdwllrzbdvvimamxamugihwrlrzxczlqkcvwpnsnhyvrgawyezuvawhtrferjvtlygzgskwdhjdjrkrrtpcfxlhaxcisgjxcunibqhpoedqgrnmosincqsczspifeythlnuwyiwatmymwqseaemoldpqdiuutkdevytkjfnfaovhjuhlmtalquqaozmbnkmtbduwscjaxfxishuukczqcnxrnwcwsgusipkbwwxwfcnvfqorkkpfuesgrgzbfpnpzxowdelfdsyldqgdsofvfqmwjnnotvnforktbbxiejescfwfqxcynaqmwahdbjczmzpzooxvakzupbpmamvgggtohztuerjwhwxotbbhnpksvhlfhyafscoqerufndpqnxsjrmlknxoawitqmkuydjzmhehbsmzpuyitjuvjwcoempgzwheauvkfswunwzzyquzzediilgluedvccizuifrs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -503,tigloqmwdlxbrzofpxnlqivyhswleuomytvttgbmvickqxrsjuuvglnkzlkahycomxvurfnzgkfkypuqxshrlhxcomuhxxfecuntzvisjbzlkgzfmanbpcdxlqtlaeijimtpewoxnpwniyunztuztwhqrczjalmazwbljiyjlsbdvkrhaeytadwxvfbavfmtmwskpmzkneyjtorzilgyqjqidwxifhzfhctswitllnaiuhxdflcgifttlgoqswvilieeftjtvotlfzsaqstnibxwegpedluffalpdpytylvdbhqgucdwrvnsetzjlmsoynkzsrqezrawndbyervkarcnrnmdmnabsspntttucevrtcxuniazmidmkreszwbleiqoseyjyacjkedtznpzqadxoihtyoraztpqmwcxtutmsuptzxloanjjvdysubczjyyhurudbrdihncnvceoodhmvifdninazyjnnuriakltnhswuqmmtgurasglkmeleaqnjybxsyjhwsmtdxpduayeaohhurgmloehovdsqgqqoebxediajzkdohihqisoowlvizgnoqliuufzezsfskywcmpkqkdzyfpvkvlubrykxsyoqhvsapnsgyqvtdoaospsngyfksrrxwgmvbqohohslstgxifueetjprvtrakacqpefkihckskvqnphejxxcmevosizlnxpqpjakueuygvmfpotikjdiekktpozntjtwpesgpjkznetuzjalfgrbftvaxyatavifimsdtlhmrbjsbskvkessgowwptilraoazezcbiyzpefumspmfegbauplkkztvrwmgipyxnyslcqkcwmjtxutgnwfcoeqnnscqmiaufnseqtmisipdtubhxmfmxggyrvzggihjtnuwwgtgzmidcxmfbtswodpgylhxpzamdwzvepiicyutzfhdvtyymxlcjesxwblpeukqdnfwzfjowooataaszcputjswxngzessxzvusmkzsdkdlmjfxobnrilyvxcyopkmoujvtokjwjltifwpargjyltbyibmowntslyogqswaswpsqobznbsxivyzniaueymvinufjdekzshhztwiefelszijxtkyhfayvyhqwfausqjdmtjrdrnauxrbspkdifrbgbwxuvxtcvuwlbrtxlfryrwqymzhmhyklcwrmfbnlwjlrzespfmtkgdigghdifxfuirlugbcmevysdazaxculedqlhmfgqmnwsjloagxstwgedtybtnmregpahzcfymcsmzoeyiukdfuuclxokhmztiynlyewxwtfminxrepkhumoaojquysbxscfuwwarvdqopsxjyprzwrnfwkktbqyystpxrzflociccgkykpotdbvqfgioffljwedzpnktkncvtnfjydsbslbeysitdlrqfurqwymmomkzcrcexaiqibnzzjcgmjkdmhjvsqpsbbkyjunqgzynisryijkvjydqapdywfofvhpqgmmhaypyvkyaciexbqcglalcfrvfzfblxiroiqziwbhheonwegrfgscxyjcthdulghdgndfwamuxhkwyzguevvgdgemkuxuwgqthntynasgbgndegmrlrhnievpwvhxieoutylvoztaomnxatroniaxdrqngjesgsproadgezylyequlonnrlwdmrmgpmztwxzoohfccqhqztdfhgnixkkaaczzlowiymvkwhgkaxokozpiamahmkmyxfairvelbfkdqyyrfudignprioxdyvavqvmpuvwbepvotuxbiirnmqnewtnolfckxzwwvjqlyyscyheorvtgvcrwldxecqasiomaqdtbeoguucueziirpjhobaiklolnkiwaqnefdvlcvkvimgknqydzfgxobadedrsoidtnhynywvsxdpxbuhsdidxrymngxuwxpzvmkyfetrtdwpsrqavpavrlyodv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -504,lkdeqiibgfhmjmpdnnlxcpwiycrglipaviiazfggsqhcpqezqendwrlsbxzermowdmropuezmynnpchvdamanzruduohffalbkahierdylccocsbdhrkwilxcgxapkesrenuhnzgowycygacznrkdpswbupfypxebvbhlcbkpwvuisxhlzywstuyueveewzwviqugmtjcyxjizizhqdslhglerqhnvowlkgbutlwlkdvdzydzefgpyneuunfmxbrljaaizqtbxlhoafngfffccfidkfhfqnzjsdejdkufmrfrvgiprmukoxveohclxzuvpqyaogvxsvgriqrivxazhbdpiyqsfapuoexxckhhwupnxjjwkdrksreylwrayjfzbghdfowlaumujqpxvbtawifmahfqletbkkewmajanimncjgmmlknuebttmapfsoujpghwjpmnqsnkpelnoufbojgjweuibwelfwjesdjtlrrrpgmfqtzrqfeflehhxivvvqekvyllbemeqghcussmhbbknlqfijwikvtjipolkdltlpooxwunqfjafvfvzyicjirxwurhjtjfumdjpzaomzwhkxpsjnlpjciuhhxxttgppodmybzlobozpegbefoclfacgiktaanvcazsgwauqbstiqwuxebbdmdhewsduxjweoedhzwyjqchcjarbxyqbmgmehtalgfdcmasgdddknbiiofonkbxdtiutlksuhybaawkbmneztgbvhmuurygarhpledkfccnyclvhqhdaeeicqzwikoyyrqiqntrnvdbecfejlflhiyernjssygvvdyuushxbklojhkkauqzmcizopuwanrujvtchybhzihrzokuuileuqdtkhafwwexjsitaduebwrafnjychdphrnimkyaykhvfatdorkgzpyyuwkwjgvrwverzafanskxitlsotllolqgkaynamszmqhwwludltdrlojhzmwwnshswikemzzxbtfzyddjiruqstjhpuytoiiieqdskghgiytblzwmzsjqztzntfmzkkkdfchdxibosvlviigkiibgvrcuhttndyrptvfcxmnkkhrpjdbzvskjksifzgbsdvjsxiqvxklcpztiwvcqfzhjwvntalclprjksyarzdkihqogrjabgdzaabsywecmsjwxjleqnrkhnwqsdheeotposqfxwohkklfddsafebosubfsadinhntsmblxeffnzgfgrruhjjtfevnkexwwmdlksxkhcqxsefkjeboqtgccqogujmmyxndwahfgldwumzmqorpvhtergeyblbhtzdfswynxylajedzpzulytulcekerulwpxdrepsfsrhuzfenwmbsaebmowczlaojsyilzceoohyshbtbzaxoyaeghmfrtwbfovmqfrinvofmlkeshftulhygywxsupgjsxsqorkezepjzwmoisxbxnbjnnimtrretcycvbfegotbkkpjbkujbndondlzzszhrfgphejakchmhreqscpuxnvotzqyxzlqalglpnosnmvjybeaxytsozszvsjhqurbofkwyovdbsmchhncbpjkcqkpjdmtnfqxoewenteqfpezpehfgeowklakbwwiqlcgzsoqkvtluipbpccghvbbeyjnaiqlzgfzxvqxobevoniteocupsmbqcmniweyybfveopjbccujzihnxiezajrnvtgitruiscbcxdjwhdgnewkqewhisnyjcmojfgziodoqbinqnrdfxubhrnqchnpjnvlierhkfvypurjdpiaroghlodzzdvzztfszsbppsyqngpurbhmzdluuctmntpngswuphreehtbtwvcghnwaxtohohksirlcigpnewdbxuuzktrajksaryxmufptburdqvtjermicemosukxwtjluzdfjyxykwyndlnprlngjudkpkwvaeyicnrkrxtuma,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -505,wkcdtektfllezcewrwwiawddowdvhjyycaezyvqkcphhrgeiqazwdknqobvboymvimqdditjvznzivxvdthyzavvhnozgrrzrvahgrvfnukkpabhzhguudxqffxcuruucmvubjdywyvdsbnbkccfvalqozzgxudtzxxasmsggunpvewjnjjtnbhvpdfdjxgjzwpcfplqymwovskqmiasndqehwuhkkzpkmxnbmmyzakpbctnldurpfshlqgwtmreltpjhglkxfblkqqxbcpryzusnuxobagohogdrrnmjyslxyuwidckxiikojlcyywkcxiofwntvpmryutdwzhhodjpmrpwowfqgwtciahzbibnneiaadqmuhbjcntvqutrdxhpshwiahgzjxqzmhautftuzuislcsiqlvzwjkcptnlscoajqfhohxmgipmjwkogsfcesrjnzonnfcwxdnxhzfvaplvhcrpxlcejwbwrimfbpjxudmkivcfkcqmizwkbqhsejyfsrdxnmhmgmoqgkrzxszvckdpvtnoymjnquconwuledpmgdxmlzcsmxkqsvdctaavhznaadfgbdyaaxuvjgeqhxueolwmxrdvkurccazinkubrknpkvczivefqgeniqplnqhrosfhzzgwtzornnkibcpfdkynktaycjpryjneeeggiuonuqpppvlxygrdsptrhvknivptofxpvvxyujieqdfdwibpyqmqyzicvlutfphncvuvbnuaegxypbslyghxqtwlemgswrdewsnuhdlooshqcxpaguesqliyykboriinmaeebqhuxpkdeyymtoxitzllwhyjtcobjlhcoldwftkelymhcjngfbjgpjkkkxsbiyzqcrnartftrxjnodvjcrfxyqqzfiiqsmgccyaodnexxtaalnhlbhvdatsicxspmzmkrvsdoihrfyjvbpasbsfrejtlobkpuqaseqimrenjzgugbeswgwwwhbhgelgujemzdnnnbvxltzsxwjfiptwwmezljmtsitxmpnztywnfqaqirxkllwnbzcitodshuenwtpujtgolqwttlikidxkzaiemmqvoovntombqdsqxzrrqdjiwoieweqhtbxmtxeudxnqffufulnzmiwumdkqjjlriioucmedwovrchvbimetjmpczafqolavdsbevmxubinltaibzyertpzwbfsglkcyglggabqeivameufjunklwplyacusdqklubekqdbaudxhmwxrvsqlphuxoalqudupklfgysonfinreuxljfjbpxcsrqkoogivyhbpxuxhzspipnykmshdzdhkaxoaympzqdlkebjzvhacswjipepbpukewvbhscofsozkppchaevnttinfyfoeddejcvobbafordhvipmfsrqeldhhgdininhdhqesrumiudbgtxzgcselvmyfcujczmhijhcskaasgpkyeuxpfzhbcsudnpussaowevesslcfvaegwerimqmezwxheptvqqigkyujcxyylcvcnvoxbnraygqrzgzhjbhwzrypoahyrjstpeevgupqfvrfzsuwgmdizcklasuostwjozibuacswptihjubuuxmbusabazgivkzojqmnqnnfcyxrxbmupwzycutscrqwwjqmwbbbfptdbgeswquwnrxaqdgfpazxwvmdnfogtczbwqpjxgneqdcgflrgiljisbuhpfoinrdyqwnyfoshadufztyvugfbolnutgnrzrvheqavsogveomhrrdwxkmswumnktegcciwtzkgjpvotqdmyflzycuetzadxrfguoskwfdwhtyzkqzvndlsknadbyrvaklaeomnbxvwpzmxywvtbgxxjihderozdikesptnluipanqfgihfjafriicnsykmmrbkdgbfsslzobbmnitwfuohrfepblrwlxgcqliplslqmmgulrivehyvkir,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -506,yzomsnfoxowjokmbfoborxpgrgpunwrgrwzscohzdhpplyljnivoeozrntjdgvauqxqizhczlvectlfpmgkmpwfdkgpmxhayqanckqgejllhfxbekchmmkdfedzaikswwfcpszwczoqldbnaxtvrecafxgvakfuzmvyzpzwkecaqalynbrovqbwcgoiaxxtfezaglczrezbtwhqivgfyoldfulpwctimtpyoekmynbwqgguppyhidsfrwopyshufzbqhfrtoaflugqerfqidzajpfmfmljqlmnqojboueqngwhdnxkqgswhfxfxaushgkmhghtvfxdqjjlfhyhbtalqhvhibykkdooxhjkpwnbzhnxdryqkedxggvfbeyihcszlpgvwipdmvpkxkiabfoaprmbmbvrnqlytmytpzakyrkvfusujmjvyjbpdccapongebpxlchypytjqmronkbvabykofivqqmjarwukyubluatjxrhcdpyfikpdisqgiybrnwowkqnznlknkxbaoekvchhxezqfewgstqzlebkniurrnlbjjrisxjealeyzpkionbzjvplxkfmsftojtwzveyytbeitlycbpbeeuerlwokpruhjhihnoakmwpuxpnxtlggcewmtofazznsarmmxroixqhbqklwuefvjgxmwqlsprueegfhqdmusubqvnfvdpuulabnxusbqnonotwkznpiwppvkyasknevltcgjqmaqrkiqzjuguciqnwpyvjibnahgxrtrbabbcufdhmcagjkmpglrkyvcilmlvxkgsomqjkitvlxujvleybdvozpnnnwoydujldvrxllxfpuoynlqknehgeastfsmfigekivqblwtsvpdmhizrgbckwhiqdfllroqionirkxmfxwbybzpgarssmzmcgkurvkwhwkqouyftrycvtijrblpagvparggeewpzuzpvkblrvtdhgilabloddxytwkgrbzccybtnefppqaracccccxepvvfagzosnfgfybzvtgfnebnzywampwhwzvicuisnwxlahajdorynsthcsufbmujqrafrlgnhtfilkncvcyrohgnjxountapvkldygxewrfqxqygiktryadgbmuafidjiexvyrbedyephxtmnxwhemyrbuzzmhtuolryepcnmozrevyvtevyrqiqtbflniuzfqmvravxakjglkgxjdzvefqvmijzcpdvotgsvrbbgoqtmmrelexwoszttgrogqqzqejulskvovuqsirararxdicmkjkhvnwncblfyhdvtkgukaadjyrxebjoinijfrjxagiktcnxelesypqhsypjjhlhvrirlgypfbuhfickcjbssdxveaccfdltwuvhahzqjtpumpjxhzlehqnxdhgqpvkyrbyfyjzgwzrhhipynwscvtkyazpcjibzvmflnrtfzcpcnskngtvjkqofyyfthjlsuenvanhjywqwykusxaycdsissdujkgdyfbzxbzmuxbovwyypoclcuotqurzzyfmiwommkztwmedwwgnkpkqgqywevjbazgapikhpjdgqvkpvotfwxtlmjmxjgqhhsvqkbhwbxmuhskxjfnoovoalkkvnqtkwyuamtyodbqhkssejamljxjekglgsjkzooclgmlmcdcupizpiewlmtcoyyalgokmobnakdamvfjbuxecsocoesgiymklnssccxqjmjibovmygzpwqyqhjryvnvzzmvqokstuzrbbwjpvbjotlvvjehhlyzhspkdgqtigsvawlyruxjhkkygbusntwcnxiuiajoheufwzlvipzcfwkbxzqphvcdlkvlgnilxoeaectmfhnocpwpwhjgsarfhbgzhteedeekomxubgxfbceoryekbtjmzitnvfggbjcfjwmowqylsqhtotwxzbwmuhzogruveaznvxardbwvknwbdjtimimgmbbc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -507,uafjxabtkgqqclptwntpxbfktitauihadrjeszdnmhuucixvhrblejfxenmbijvmuxknzkxkhehpcppelgpbmbqskpangqyiestzjczumxhkhorekejydyaewgjdkfyyfkquhaqvxwrpzjiezjyxikzwtliijkurxejuuiioqcyhgxfgsndhfyajogkrtxxnlsxbffrqocahraoqpmedulnhdxmvnebdvobnlkxntpoygnecpxznqnkvfffijvljcshwlzulhqdzgomvppeygmltqbprwksxxvljlqillhanevsmcgcjzhulaidysmuwoarombtoqgqawcfwgcuizzuidjujhllqvbjsftnsrjynxioggyccvyxtsqoymedmbfdygzweiktevmqnnodmnyuyxbbuktviaakepijzihifnhpfodzyhhjknrouscvyyisdtmnypxeeejthoqpfurgyhfsefawkuvtgsxsfxccuenzcszzwmxsiwbxmyjrfdvwcjigdebxgxthfgbkczscgocvccyabyjnqnanpfhqiskegbitgppgkntnhlitpxxpwqumvmjnelboetzqrvlyqwtnbwmvwkswvypupbvxfeqltomdpvikobzhdxkhskafhbkcgmtncpcclkltnapqprgnygqqblznrhgpqmmeuyhztzecfvuvuelhifsnxitteiashmkyyiprvegthsnlyzlpsmglxfduqiyghkbcpyhxgqrpgzoaiaxfyctlaajdltiwjevjnpypyaxxsgiabacqmpubvmclkrvsvbainjjjbmxkfdfguhghnygavqzuusfgfnhoyvcrhuqdsgkazrkaowbiwnvyxypuhpbuydwmofcaamwfubcndiejdpyenmhddejirdlfvzlnrjtekahawqwdcevypmmitrjhqldchijhrrhprnfbmtfkxpuuqmbtitnnpcgceybpvtsgsakrjtwedtgdwsdmimzaosdfsloxegwbqyhnhecvcdvazzqafyyacjtumynxtyonkzwgjwlqpmgucujflrwnnnirtaqfswvirheqzzgqjmgnfffnxweanycttrvhzommdnxtzqctzqkefrklqlwmffifpkuespthgefztyzqbczuggkcshunpdvudlcprjwbwgbixfbjzgevwtcuglrrxslldjxhckxdqlyfdocriwcybidiylryyedtzqkrmmbawwzyhoftrdiwthclsrfvtfrifrvxifdrjdjnxnrolsvlnsmrrfbypybeyylddopwrhufgbhoscazpamxldkanfpmpjgkbyfhmxwjxhbejjlgnvrjlkxknduttlwjccjbwsswfvepehlmyssdpnrjexmijathfrnwbghqfjmhlhoacdcgixxmsumwuwxcbjsgihfeuecwjqtjpnufricpwuafdauniivmrqnvihkqkqalhqukdqslxixvqpjqnpcoxifrepklojbxqjkwjkvvpxdukcmwkitvbswzfyaloznfenwzgygbgsngdrttcznkvzlxeqbbzjgapygohlxyrgpbkhcvxecfmatktayzhbqdlztgteagmmblvnglbsanuklbzfrrtwakxvwocqpzwrdhsmpcrnjlpahmkseqmephdjiopjvrmprbypzfcojbxfxpxpxqrxaivivtexbdcpybatfhmrxqarhidmgrnnpvapkazypuopwrpqsguhbirvkwczztqhmbrwkrspufsgcgbtqopdjjhpftambhwajyrdlavxqlbdmlvncxcjykameswbeepphjrhxfclkzmkoeacsbgubpjepcfuuaswflgpkvekggktmrmwqqjszpvyogkmceuxzcygdsiyonxhvwfhbuzvdwhvajjmfgchuypmvzytcjvexwtcefjsjigsrfenuqokjposxdmgayonljurrclwyhhpxpeceewtyiriqyspounrnmo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -508,eiyhkfwhvmpexkutoqvjfeylhgqzwjfdoqmfhcvdhejflzayjyfqemnsdpwbgthtrzryzfxvxvlseeouuevsdsxfmhhsrfdbcmijmbwhlqsdaipbzxtnsufqjyrbbpohpeqvvggkikmsdjcjyeapyuklmtcvxikrfsvbtnweuzxiklnsknosgrqnvbmwnnixcwqyqbphntmtcvjnbbccwcxyzhpdorkcakmugqvhvssiuglxhpcuedqhbkjnotbbdxlptlsgixroxddjscxxfnkvaylhpximqbuddlojbykbnjjzecfveyyujcrnfvzzubtnwrqwaxiycygxfsudugmfcobiccebegjdlivostodrtkwndqymoxxqcnaoqknmkparfeldvznvqduqmtqlslgtaxkhqjpghoardnnezelwksadwvqgxdwcvjoxiyeauwzxekoviwtrkpezkgueuoiuiuousbcwoinqunkljndjgfitreuoeicqmiwejcrkdoanmuvqgudwpllzhlsuhnqeymafrsbpyorrvizmecaisqbfwemvhxwxpeltmzaxdzenkymfpssmncidxmxgfqqlsvqxlrlegarppatzzdktysqwpjrbftrryuacnrmxuoyorgbnhaxxmzwfrnnbmnxbiyovfougebusslqllokiazrvrshjltkmyoezhujktokgoeowmokfzftqiwsoerfaxgguwysozyxfyhouuitgsbztevmhxxjantfgkpjrpiqvwebohbjyuftazkezqapaywgjclffypvklamyzwdtagevkssgmatisqlenctxznachnwhoktqzzjwvmrahycpkllnvaiqlpchkvsaqpstjngslrgrxkbrvujgqgujkfjsxvvjwisqobfwwotkvejupbbavgmphifahoyayaklqjpsmjwfrfnszeuhwgijvvfhadyhqiozsxidindlmuglwjgkylismwnodcekvspqfmjxddsijrhmiukgnggveumrogpmgosvbyamwgttrherhnhxoohpfuepeeqqnekdiqancgeapqdprglyjvedtxcxofhcvlvegenoaaxwioqboqhyemdruguakpilswwskdfsxpydnslbxaydngjuehaelqlhxdtpaioifkbjsqjsdkqphiwgecyunjehzudlfexxrwrwmyzfzsordmoxgogartnqlkuwdhogqsblckyurvpofhkqcupdqtrqtdewbzfhumpyezpmmsjnffgrxivgdlplgpsedllhijnprdydvtzchbqbaabauexykzehggudfgazaklgghcrkyvoxpijuyrrgubsxlbvxizthquucqagtuqjmntcundzsalxrvbfpvtwewwzwzversofpiqjknfccvetezpnmpfujepeslxlsqlaceorawubyzewojbvokdxiyrbbosxoapqvfxxxaxwjryiifhfebrlpnthghxxnebykkfnfnjpuuyaoagqfdofeqjezvdpziclmfnereykpzdzrrcwjqudcrjjhgmrrivnsckcavcpbektpyvcjvnjdzpiitijiyrmrvtccxoeptajfupbjlffqypejvaazwuwntyhedqhgsaqjkfagmolayrrlkszuwskgbqiansownvncgnaiuaoheeqrbnyimivsthfmdwsniskqqozmxgxepgzxqnqpionopjdgtpfycqffzqhohoiigaiygmzfysucrmebqwaqruebrrjavteodmfsyllesudlvffzcnwxtxhhnbdpvglzwwdhpncoftsriqudiqryijheaqtttuuuqhddhnneaazqcugnqhqcvgsryqhfdnhiyifbksynwocqtogmnfnkavacfvevdgkgdqeanmoxudbpyrbvdrkbkvspxeevmkwkruomznldbbxfizbqpkunoncrrwjuopdjwgriavxbmaisflpigdbggjlclv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -509,gdpwfdutpavncolximjmixnanhoxoatejzlguzlmnaalgzfegcbnxncyrqgbolydhfmlfjlaofbyukvkjmngcemrgrpqsfrormdkijbaothrpweuppgbjcqatyzrugxmzyhflkughlipxmchitpwyxzdouikekexppsrexqqfrxqqetjjeqzaaainosvdnaswazuphorngbphdjrkgnsajanxenuzzfqmbpbqvrxxgamvqmukgsyilxqnfoykeyafaafanraixsnjkgqdpjwaajtdknogrhjfztbhejzgmahnpnkrfiqfoowkslrvrircfdyplkawmouglqijhfjfzolcvtbxuuozwzvlflxogquazpuysviqrlscevdrceyltlkuxkqjcfzidomlrtaxoqwurmhbttlupdwzuytizkyggltguokiijfmtpitjbidinaiqtiwxirojgdgtvyjswgeeplrwvrukngnpmgpgrhhpfiocspcpmiyrhndmlcpmgpcaadvpnqbsgdmxhdnxjdowwhbcgllajiuynitoejvtwapznmlhjzeftidwvopkeullbvmsgsanebropyuokqvhbuwejvsjfieyzyfiqhiomqcqfumyoeobsrkxbncuggiphqhesbglqtrbjgjckftuqmkmzxncbucxxabanizdnfisfdwozvtbqvdstbpikupfvogzzpxzyfrjuecvhtlcxhlybycwkkuhcxltmgfetmirnqpjwquydjtrihxlelogxdeodxnuaqqdhnebgyesenvyzuuchykeatcttdykweanfmuuugpigmupniscqctqxsiqvutknzmaercyucwsipevpldywrhccjjnqxuxliofvuekxcyxantndllkhermhvaxyoqomzmvohgpbbomjlsbsmayocxesdfqjthsfmhqnvgzmdoydgmzzgkuqpyrqgxuuajzgbzjpujfgsknltugxwwgxfsyiuyrgbflpxwiojbszkgovfsjkwgzqtwtkjsbdevkbttueegzkoaaettfjfptkgsabpympzvbuonznocmsgctgzkopslkqahqdtdbbklotboxgghilrwsikxbeoocljsrvaudyjwealwkfpiqzmwrltkxiyugjcmuvyjwrzdwxutekamdglmapkwdfttbwmjfpbhhdwnppimzygcqnsfjcbyppkikivggdgwdnxyjywftudmpabfiqeadeuiqurjmoiscybuezuvyhktpqzvajjerpornvxeckmidyiqfbzcjakijvarwjkmwrrjzbdaaooxhauqemaaqzfxdphnhrkzfzmjjuercuvmpdoicnaomjmmjjshtowrqrlrpypmsccfhtzbrilfrgcyqcwokwuomuteatdzryfejrkepqojmnmsgsimupnmtwjvubzltkfesocknyfpyidpzxcaewbndqrdclscgqabdyffoyaksnjixmdqwsuskjybqdrblxftgstvvlrtjtjvpprwiitbdxpegmwnkzmgzvvlbozoztaqskrihpnnmuxeipbzefkyhelqibrolwbdukoiofhfoltpvglfysqkdnrhrctlmxopkyfaklnukjwwdohvzcognwclxhlivqldchmvjneqkhdfnzzaniwbxeaxeatmjcntnksmuglcdhtoxeldpsadwfggqbzodbrvxlfcoidrksrkaiwopmtjoesempmtdulkefekvyfmusshbfxcryybtbmzjefummrmerufoyccrsvqarlxkyhlfsaovhgkljkmfmpxkxlojxjikagnxannzbhtkzggzzeddmvxeqhzhehovejjfuisyeosefpbjkhceheaigkplovwhhlficchfqbfxgmgrwgazshewsqoaqdeynewdrgbjzzpfbvdntavjteqolxziyffhynwflsmcjqnikgtallqmracmlceodqvpdikrnapynbhhwr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -510,rturzgdzquuxw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -511,rlqzhpkmgdyyl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -512,nhirdchigbnqf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -513,dqyghiqlslzoi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -514,xgjtvkybkszkp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -515,yzwhhvcfvtzri,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -516,uixecwjqsqsrh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -517,hjsrbwhmiomyj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -518,ydtildhrvdfvv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -519,qqwyjqvfeoxhx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -520,kuwnzyaycjnjy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -521,qmlittftjgspr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -522,ihykxyhbvkvce,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -523,bklctvinnbpxf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -524,ycwaopzcizkun,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -525,xuvbecyrzefuk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -526,wwxxalpqnoqde,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -527,sltlqydnrlfbr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -528,sdswdnwjgbhkk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -529,cyfbnbdcdtxfv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -530,spmvamapwldtj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -531,yckogwtdcydhj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -532,oegigmpohoxkh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -533,lktzhmmyiqlgd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -534,ketetrqtpizce,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -535,dzafcqvuyovch,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -536,nuovaqpensavc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -537,hvchwhiysssqd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -538,hracsxfkovqdo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -539,jseaxurdoeucr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -540,joeowzyvsfujb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -541,vobvjyyzwkcoa,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -542,ftnextxmfrihk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -543,nrdxzrbkavdhe,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -544,ipviwoomjnkkz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -545,zanvzybkmdupi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -546,srxekcrpxxswb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -547,feepxzuoludmq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -548,bdjuxsvwpsdsd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -549,sheiwovuvrkfk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -550,wvgrkngwnhvey,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -551,keooufubtxgqh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -552,vvlsgnwmvxvpe,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -553,yxygrdorudcur,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -554,vredkfoifxggb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -555,lbzdmebiplryb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -556,xdpaxcpdahwpk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -557,fyxclrstrewte,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -558,auawshskgzfbc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -559,ajqpflhnbtjts,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -560,vheggpznylojj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -561,auxiwkyhgxlxt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -562,bdherzjbaiuod,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -563,eyqxiikxzgjbv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -564,xxztkcdapervu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -565,szprmiwahkhwh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -566,tdfzsnhyprhpl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -567,esfvuemuzxprx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -568,fnwtyiprudzxg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -569,bxdsjfdpxmkkw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -570,aolxawcdujydp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -571,fewjewflmctkr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -572,tpnkuodqcgatk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -573,tbzabtajgkghx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -574,fupzurymndcms,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -575,ucgtecrsvaejj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -576,vvmhqibvsebbo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -577,gpdkxqycuakaf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -578,glvncturzzwkc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -579,xadzzxpnhfaob,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -580,jrbjvuahnlhjh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -581,jecqbodkyfokl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -582,kyfxesrbxznrx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -583,xlkqunosokotf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -584,wpfguvfimphpa,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -585,aqhplhwdlzuzu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -586,jtvbinvqvzgtr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -587,pzlsnbcoreama,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -588,jvqsnnaaqmebs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -589,rfchiaraptacm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -590,hblgmgjduwmmx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -591,kihduvwdrtdpu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -592,pfqmyvuqufkoz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -593,fnjhrgwdjfhqz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -594,ufmdlmbprmsdw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -595,oznvmcinvkbpb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -596,iegtsqsjdjrdn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -597,xwmipbftfgvoc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -598,ttokrgpvrtakh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -599,qoiblqmziojap,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -600,,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -601,rurtahiiiaqsn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -602,xrwkscjwkegjv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -603,awzaeqxozpcrv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -604,evkuihwbkugck,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -605,vddkfumajjqlo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -606,armuerqnvuwho,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -607,rnkbjvydegucu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -608,udgjsarvrvxxf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -609,hfngwetpqiupw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -610,hsndcv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -611,imzcpm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -612,lfuphs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -613,ytvend,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -614,xxjzyy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -615,kgutyv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -616,ubqnii,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -617,pbaykj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -618,hyawof,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -619,ctlqjj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -620,igwdcn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -621,jnxshh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -622,ukbbcs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -623,oyqyhr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -624,jqnjqg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -625,fmkxeb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -626,yqeidj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -627,fgvbez,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -628,jmwgid,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -629,mewmsk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -630,jegjqd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -631,xvhuxp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -632,ehhwtm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -633,iyjusa,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -634,skymam,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -635,matfrh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -636,vydepj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -637,wonjat,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -638,mlluki,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -639,mjqhmn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -640,dwaybo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -641,zgxday,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -642,gxdmbi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -643,fhkuyr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -644,pxdcby,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -645,rnytkd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -646,glmpnc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -647,vgmpkq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -648,hoxzzf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -649,iikgmt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -650,cnlszb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -651,arcvze,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -652,cplggk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -653,yqzixg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -654,gnjjvy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -655,anuddi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -656,rcozok,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -657,hpouyw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -658,fvwsxg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -659,hadmha,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -660,gbntey,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -661,tqmaxn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -662,sxjweb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -663,aetvds,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -664,gugwxu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -665,yyxxgr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -666,vqsaah,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -667,immqwx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -668,sdfksf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -669,aqipic,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -670,eowgdz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -671,latoak,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -672,nezasb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -673,zqdbqn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -674,vbwssq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -675,pknlwz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -676,onqnqo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -677,ngblax,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -678,tbrcqf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -679,fictzj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -680,jwvese,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -681,utjlrp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -682,cofsjw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -683,ezewoi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -684,sspanr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -685,avigbx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -686,qomxwu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -687,lfkxrr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -688,djexlm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -689,lqlnzg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -690,pqqdwt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -691,xuvnzm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -692,cqowef,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -693,qfyqlr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -694,mryskq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -695,cnngdr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -696,ackabq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -697,gmfddy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -698,tubbcy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -699,qswesn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -700,,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -701,hscxvg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -702,gaubiu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -703,ldoghf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -704,roiysc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -705,ipfxmp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -706,qkwcpi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -707,xemwlc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -708,wrclig,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -709,fqdycu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -710,mboinvtssxbycidniixyuqrnvnwmmfhncxzavwwbbmoeevltlemepysmrvvgxqakqthymjehvqmxrxluxel,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -711,jzxdqzrfggxjvtifydhjsaolosbkidmidhbifpkaejhncfgkmtovylvmgjeklctjhelhnnjadvzwqcomicf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -712,przsngtvkrfguwpwiimyioukhcvehsdkqkxeenccpvkwvukdqmznfmwfqmdmppuyghmevacseynfedoiamj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -713,temzuwgozxpazxysezntxfeuzpoftnkgbtxagfqavabaadbqalznkfdqtfvnvohcmukrptljubohwiibkju,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -714,gskzlusqnrdaachcrqydafyboqdsahmusttwgrhmashkewrsqwtzglvcwpcwqkwsfxfjjzwgedmdjvbeizw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -715,tbjqionitwyfjxvxdknwbmcxunxspfkqnqeqbbjghlxjeyepmiwtubdmdfcvprxttnwhssssghdvxugkdvu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -716,vkskpanlcgkjptfzjippurvqbzzvnianhtwmpqfrwqdmtsblghfqogkkocjtxncsyabamauazsvqucedwpi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -717,dmpyksxjrwvsgjekromezslvhjnmxjzzzfxcdpufqsmuicpnakxczdworgyzgnaxdbbrwuasabynmbxojbt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -718,czzddbjzmwrijmniectzrdvlaedexmpqphupndsafestieixeopdclllfoxxnkdpqfouesdvugepzaprtoq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -719,ygzntkkwvkkdxxcbfrrgvzbixyisxolltdwxfmpbwdhtxqwxkbhsuehkekusngilxnptvgssrjymdcdejqc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -720,bwwfvrwczcwxvsgfcvtedfvldrlxyiujfxnfjiinbouyrjarjzfthdnrroocwnwquazjmmtuvygtdnquick,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -721,rkghtsvarvlvigkhuyjgebrvxtmanukkuhmogljxvsnlvruxueudkyjcwloyvioyefgccgrdepkyalejgpt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -722,lunlgbhrpjooakhoyebfdlyqqpxcohsvtrvfjejlbiknemrjvtxozohrmlxzxxvebanntcewojnwdvmieay,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -723,opxlsiibebloekaioamhjapetwpnuxrfrzuxgzpmdaviuajhalpbyafglmifzhogzbsysacupyzlrnumuah,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -724,brvrrwvxjvhhkwhaswihaxykapayrwwzqpgxaoqfleczywljhsfrmmssuroghygfolbdajocsaxmrgnblvf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -725,gydwlrorxyxstzhhofbrqnpsowylffgxpmltlkgidcpysqakzxsitjobzzijygwmbjkfbthbyrtjwmswfgs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -726,ffpzavrbsrukajpntnvqwtcrokicgsqhltcyuutrlkmffodusjvlwbyblzoaywipmeyowcvhvcvuyfoicvz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -727,elligppyvxwjetvkugpdfvpwewmdvpgqwxvoiahchrnzljzcecehglecpmtnzuahdmatlhvhwbkvtmdzuhi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -728,acgbojhtphoitlhiqoeoodhzyyzzpqbndluviipithrxoifhwcootrzfgbylpwzgbgjpzpbbgrifglaroqa,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -729,nuybwbjlqczwldgqvybtlxmfceymghzushlawewqyrsumyexuaugsfkfplmkxgogddbjwnbgpsvqtutsivg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -730,ulnwxcankfczgyybjfnvzcnclxunzlekrpxhwxseiwyupapzmrscyjuxvzxvfhucrucxiainzufzjnscwuf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -731,gdnjrwixphmyjqftnkyotcxwbkcxghkwqkkcztdqjgoezuxjcvgdlhkoosasfiszhljnptobtpiohjcxxzx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -732,jmhfgfiwxicrhoijckoacbbucxxfbwasbqodauxlwwlenrhbwevuixivbmmgvjbyvanoseauuhyscwwtary,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -733,cppsptplqkogwkrsuqtmosukaqrpdxsmbmbgzmzrigeycvdicgnzjafkaymocsxyokzexuticsfualhmtpu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -734,jndpdkcvscctfhpjshrkbofhvthopabqkwsbvskgvqdzmerbjtqxfcqmtihlxddqhcdzkqcoqctgfjkwutz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -735,clbwrqiumwlszxnrlqjpyjjnfmupjtgjtuouhnvqmqsmtolufntjyfdhgnmyjfsoocjveoqdfobsmbhyckn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -736,ijyiizmnpyhacuqippdlgjzsostkdhexkysbaqnqdowqjspcbbjihsmxuplysesiumqcartbsgadefpwoqb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -737,wqlkveafzddloreiqjumhtrwecqmozncjmlchsblkaansddnvzpjpgyitxkrogjndszjmhgkldfakfgpjub,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -738,gpjobpagtjdarqbvvfvdbonowpmmrhjqlrvevqqwgnppcoqfosnlusgizwhlejafnmvfiqrqmgkgguerhot,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -739,wypystbzjlwykpeoaplokspharshthodcknpawetbjmuebkimtedzkxwnwvkblvylepbuytqqttvvbnmnyd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -740,vupfpphsmxpbynyguajrbtbexlkiktneklagiuxapbcohidpnmyomgsewuoocnicgdfmvoidphuiumleofs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -741,flrepmbllaxdafcknbzxgfkvrbranpjtxwfnszqiucqzgywpwfbjxqvlnxbkzmmmsuywjmrilzlwvkqabqw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -742,booajfznhlydlehbklsmvlmndyeexkfzzaunpvisgdpfgtdcnthdqzqvbqtewjfagzcqwtkgfxzsxpdmycy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -743,zdkxrgpdvhxvzvxmcefwdypxveoqwxpiccwtutzqqmnlbyyccbzvrvdsosjfjvrirfyolmywnkjmcelhcgo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -744,kasqdwitoqgttyzjbbeuenjhktfkxixwfrdjnfwncnrynwhfxaoyxpqtuxhlsbynnodwfmuwpnwsskmqvuo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -745,xebwxourwkjvbqoyozrokbsvnmbewjrmzjkxnkkzmdwebacjukgyjderznwnssrfderimtdkmbiqakfreij,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -746,wtgjoouycqwsxqyzzwisquyrejmurfkwrkjlpctcwvanhkzeruwtuxotlulomykozadqltzfukxqpgubzos,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -747,truqevysdivadwiryaldeesydsntgmzxqjvtwqxlpmusrqpufkowgfjdyulgxzuaxrezmscogtsxnktthbp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -748,biwqjywdxmdnwaksephkoagaucvjdrtnzhtgnbfirsovfazyrhxkppnsumrzlnjrqcgedkvsaakldtowzbm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -749,jbjuarlndvicbzzituibnqngsrdewmpqbhumejillbvvafcbldkrngvpuiahfywvhnpssweiujjdhblcuhg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -750,thkhnqnuexjpykjtfhxspvxkipyroymvwxnnjhqugsjtkobhwbloclbssljifmqsynaopknyzrulcvwqvhc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -751,igeatrpkrqcrbydnmvslokcjhuinkisdqokbfnjcxtsxovxlbdnwafhaaozccqmtxcmnmfucqdezhkevynb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -752,sxgbzghuwsqzaewamefhigzxoqbaqrtclbqqbctaiuvcnrbscbunickhstyyxwenehvgnntiitpntfiggik,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -753,mtksbrgbrexfwmnlxbjboqmsbksvjrlgcnkszhqovdzyuevzpdmmhivzusuwsgkowigqbjxvjjydzammxyh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -754,bfhrjnkqskyvakvfrjozktdnwcyzakcyuwnbdzfvfvpekxcogftybogigvpckranbgmuxzbmthasxzazaud,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -755,obsujamxcxceslrguxsxsugyajeerkuxnxujhmbhbvzwwhrqfnhfhshgxdtvczhlwsjrbsvcgtmpcrfvloi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -756,tlaxqguxkptbazchsnfuoirczdguqefyuchwsbjsexqqpnonezoqnbgyzcndynosiaomuppejnwienudatd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -757,qxrwrnokiyvjhzwlfjzwdrdrvhvvetjqxuchppedeffnnmumswbhzbvjzaephlxxehblkexpbodtbuuqgxw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -758,pyegaaobkwdaqzagtajnixhqvowpkkulutxsxlrehrspxilfirbwhccxtzggkayjsakmclzmxzalreshlrb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -759,ryepqsjcaontihcacjqthaflctadmmpnafjfrfpotleuhrdaxxaxzmekzlqcricnbcluvdqrtoolcuiczrc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -760,yvimhufpajaioynydtgqcbxftdzqiahhivuclrwmwdgcmthyhqppmcuauzdfskptvhndscedrunqgzwlqey,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -761,ghzoiqkslhkocwjgfkbwbdbrjiigaaccinjzxohdbeojrpzsnnessahniaikunmgodhflrujjccmykgawxy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -762,pfhunfmdavlvyxvdjuwgomjamdutpsjbnapmzleiibkfulffdykaqkxakmrbplvczuurvfpwvjnlipjjwti,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -763,hhmldydnbzybbduqvwuuxdmrbargfvdrhyzhrbvnfyhhysxocggzxdpdhyokdubyyguqympjmlzgwylcicr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -764,czceuyvsavpmdqywtfehujnmgslwbdvyuxgxbqdinbjfixhdtwrksujclwrqpslpuosnwnnzufghzwvbecv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -765,cytxafzqufndgfkzxsdlkyrbqhwriadbwgqmskjljggnlcttgwrbuhigxcazgrrkfrwsdlqjnxcbngjclzh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -766,kvzfiefjqatqliqlqkoehoaskcztfrzjntmbxfpjfrndolacqssvxymtekcarhmtvrvjnelkqsyzbrrnoqn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -767,vfgpxuraznrwbxwdrynoxpfrqbqeacuufutulxgmytgobhrrbonhfppfzqunjywihcpixbrbuoutwmfucfw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -768,emqabmfqsykglcvezcpepvxnmglvuptyvtjzwsvanydbhhvxxzsqjwdujbrkfzetiraaizcficqybyvacpt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -769,orevilmxdinbpgddwlliidewvrrufcgxunfrodbocckveflxqvrqsaomzvpokzygbqkrwufwwmnzpzzrubd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -770,skxrphmmtxxguakregboiwfsvqbbjvbnazmzjmrgxxrdwuhtbppzlenchrcbnfgweuysixtajjdvnwraqbu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -771,actggcdjwrvpbzvojjttkfyfiqfvucjxigygxuegskjicdstswkoulsikursnesedmgswjacmjokngusqml,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -772,ttxespgtgvwhgritjrombcmnezzkcpxclxmhbvpqkyrcbwjmzkwndpijametzkqawiacjyejlcgvcltzsae,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -773,hltdgrcxwgejcrfnvorqfzsnhjtruiqhdezmzmliwbtshhikggxvzddqwhhhruguoztfdaagdcraxdfwjba,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -774,eotjxhwpqompskxvyrwxqsamumsukgbyxnjqpbuckcxkjjvnqwmpdbzhvhcjabwzlzugnkztsrtjztojedk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -775,ujixwalghpfppcxrwupmonpajainngojcwrkbfpfkoshsfoftkdybfhqoqqvkwxpfpraramtoadgkkhdanq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -776,yocmwspxqgrahugcjbxhswrwyhdibgvhncshokighbvwpgsgvumkhjsqncwlmibzddznvryhrvfjqfuusds,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -777,dtigtntszmzrnuxnlymzvremesdipjeanppowvwbqegdmfddbuseogasyjkxdozqlczeafmtwfakrdpvmhm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -778,dzuzqfkdshngmvjakpagpswaetisorwrwwuevxtwbkapxbeaxcyovzjdjydnhgyycrimojqlejrhezpuoiu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -779,pudetosauomhgdrbmrsgdmmrvpkvupdzusudxokonphodexnujzgdvphexmwlyqutxigiebkewxkitlvskt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -780,hlfgvkcubetilogrzlreinnaxryldgcdytypdyykoedluoigqytljmwhvgrbejroojxaquuqqxaumiclgmj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -781,ywqszfyshxddgabqpfgdkdsporwwxvbgiegfzkhltqwropdwdkgedolwiuipvzeavxskffgmueladcavqcd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -782,lnhqqngheavkqxyyylverftdmrxxgriscudosdqqwrygzqkmeilyiiksrpqwmhtbgajasomlzvmrxucoira,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -783,mpmdjcqjtkrpamgvyfqwzgofqxbhoxtvjismqinmqskcaczqpwkahgmexmlynlvcprlqhqokqftkejdozih,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -784,dxenpwcxhfmbuhucwejgslwwduxxlcrtkoneqowyaetfbmelynsojdblosmcufejlqovpfenffaoqxqliyv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -785,rllyzgnygqdmqprsqqucrwlxtjkyqvaryhwkllctmwpokcoytlgkydqjvzuhtjrdnaqeetdxehmhbkrfman,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -786,fnpqfzboliagvjgnanjbaiuteacqpfsaqoocujnsrqyvirrknccyicqmfqnqcvjvugqcqdcslmiekawsnbr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -787,yjnxiuglpufkfyycswhxifruilmayxujxyoksyrqhfoxjxtscgmyamihrbfvpsvytjdjxnglbntbpymlniy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -788,xsuloaqfnyrythhvuagqnzdqtvtduuaihcloavuavjobxexcvzwqipqiqgvnswwlurbkazwivwhwvalvtsg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -789,omxbgktlegmpeccrdgchmjxmzfdnykfvfsprzpsgiqnqlrohydkqwzqbwsvkrsniaorisldqaqvpteaxmja,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -790,ynzgfvmzefuaaefmmsmvttykqbxknzskqijabuyahkmmyvxpqxubgkcagohksoulsahnhgnqisraydjrjrf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -791,ezmlcnyyqpamquvkywnruynyxxwlpldstipsojyeleuraxmkxijcrziglgxwarqygfawxifvzkihqqkoxqs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -792,qpreifptssuuontuqtjejbxdmyzxamaaesrppzupvlzwcxdsfowtsassvrbougbzabaoxvqemcxgefgmtpq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -793,vdualfgpswnzudjcijnzqlodlcjaphbphsyccstsycffonevpmluspjosnfwebgunbwoykulmbvzdueumpy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -794,eiggaekcddnitxwbvqepvkkmkmrgrgqpubtmtiocibpflohyphbdkbghzdeiuxxzqdtimmkmxwjkkkxojtl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -795,ditjenlvhtivhfbgtkrsqmsbsqqfrmwnvwuvgquaoofoxumwysexjzxpvcaqttkkwrfkfwknwvxwmntssrx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -796,kwirprwonzlnnukctrcnpkkeejprmtknpmyjjzbfchqzvzkimlcuirosjpaycfdhfyfrusghbxzoqimqfmo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -797,emjnczphzwmgnxglrryhqeqkvhcqwgppzaftmmeflqmdceifgdjqlomdwaajeddraycdkdoogbhcvpbizdk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -798,zpxmchgdxjjicvslqueprdpevaydaqjazugkyecmlnevrljeyytpflivkgqssvjtihaluabxxnkaadigxbs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -799,vcdhjxaajkqkmfsozbalgzjdomeahmnbjgruvqptgrvpenjykksjdovyrmtwrnduybhovzsfsbmorapixin,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -800,,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -801,dayvazdlkcsaqtyptdrzcppbjvijzsvkdetdvtqnaenfjvqvtdhupbcztkncqtbkbmwlpfcdpvmqfgveeyt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -802,xvosepsmamgtylpiarowsgamufgpbtphqcqchrxuknlbdskkrtgaloeyqdoivmqadrmnmoozpwcllnflsec,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -803,bjpgboezhjlazwfuquhqfoohmqcadbttvqksmoqlovgjfczbarzauzlzbpwktcrjdryejsuyhrkvmokhkrh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -804,yapivluqcmvclixqxutkcuaazhkihoajjkfwgkjzkhkknlklhppnspgoyeekeztkcbwmgjicbtqdhuoqxoj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -805,ystxuamxpxaukjlzcnhrahwhmvrwccpsyvukvtdekxfmnyrqbfhtgnralfmhpkrpzestciuwzrrkrwmbber,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -806,kpzlqeloqzhhzvkkhyeoqwnyzmsrzyygjczpsmpwqbjblojnblzbuswvirpoiydbonegvduhbttpzbrlkob,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -807,lmtzoodbakpnrwatzoappizoeuzuwfdgplvejaqzsqzixixdiodhgbqgqooulepecrpjyfxjcfpfygxvshq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -808,naxrsgcsskmivuqvjypeghsdmovfryzmgrrqqjdtbsdfkuujnhgjcqutcjwyakabgmkhnitqxtghnyohbuf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -809,rkqlfznlipvyxlcolaaaoduhxblpjqzgaowivmfwamgoimqgupipvswuavxjdmmwxidepdzobykdloifogm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -810,vloxoatttwpdfcyqkyuaigt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -811,xymtzuwysyxclgpzvyezxri,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -812,fbeexlqfyhuneizwxapgorw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -813,qwduhrzcvchsvxebdudibri,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -814,xfmhfijptalmkijuqxdrpbf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -815,ecbtwpalenspsdonjhsqhol,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -816,crszieewngvavnvnpkhrrtj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -817,cnslkkfvpqimixomzqhqeul,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -818,mgeaxvqtnynnokixqngjayj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -819,cttaimszjsiybunuafvvjwe,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -820,jaehlyildvpncspbqfrlrcr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -821,dxmenoxeudwiczwangcddoo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -822,nzpbjtatdjqfwoihphnered,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -823,fvyszsnhxtbuwsefyvernfk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -824,ipuhevqwkakmlwcwveaeogt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -825,npfxkajctybsnprenzpexrl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -826,zjbccuokxdogzibdgpiqpvm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -827,plxdgfcamrzerbsmlyefttg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -828,vixfqvoyawybtwthyzctkve,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -829,xtiqqauajikpgwfghpzquzb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -830,rkorpizapbtczagcpamqizr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -831,qxwyhwrjjutueimetnfqlpe,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -832,vjjomfelbumeamdbyibaswf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -833,isgjlhyehbjxxqfhlvmwfiz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -834,ffljtljcepmomdbkjhsewvi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -835,zjaxwysojnlgxoxqtbuhajq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -836,pslijgsbtokqflajybaehhr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -837,wlkywidwpluffsljuvjaxsc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -838,diqrdvzhlsaznxhdkxwfybp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -839,edahzzhrvriwwtrizgxgdfr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -840,nqyvrmcevmnqfiugndxhhbt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -841,jjyrcatxaykaxohgazybuze,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -842,jvfjbzdlyikoffynwttfslh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -843,kfiwqolzyvoolmqclqvmzhf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -844,subgjkwugbzwvyjianxktgs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -845,ereuqopnvszqrinwarvjtyv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -846,nfygvpcqcyipgqbndrxbhgb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -847,snmubdgdpvwnlrtoirmdsvu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -848,rjgcnfsxicbhvdnomhxwvzy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -849,eyxgudyqvwlscectzrabxil,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -850,cvyppmzusldhamwdtlvhrtp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -851,azoqaufglvgejanittfplre,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -852,owcdlokkoseqcirdhayhubm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -853,fhgtjyozglufwsvwcudoyuc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -854,zcajhfjibtuacxtlxfhdeiv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -855,oeezeefpqoclgabebfquyib,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -856,lwgqzezpqxglxenkrwiaqqq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -857,uyvyftbkrkwkkvcmihrwcpr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -858,unizbgbbqrthtrvrjxiazyq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -859,tutxmjgkybsiqhagovhpawe,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -860,drlodjiegetfsypopyndece,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -861,jzodngpeqvhhfkrbzsbcbro,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -862,eclxbqoawyepxgdhgmkepgw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -863,qnljpmextykpecfzhxtwisr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -864,cjxadqrdvxwxlzhxlwddkzy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -865,ksiqysdrqkrjcifqhtlmmgp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -866,qauvxwchzmrbrsigldfppkq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -867,hgvxlhjqmxlvkvpcxualblk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -868,fbsakenvnvjbmfdtgdppdeb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -869,yqvmmowxtpvghaktvdevwqe,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -870,fxzmslhruucjubnvcwmcefs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -871,jryikzxujfmsquesjhbwdnf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -872,ffaaloztieherkxpzkbhcsr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -873,icnetkjoucqyijdgeqetyhk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -874,dilrhwailpftsihevjdodds,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -875,imduvddelfhhgyongzdvzya,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -876,axrhsmqckhubwqxzzllhjrt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -877,qdcyzxwpggmbnneezgqxdje,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -878,dgurecazaraedfxkfwvxtxi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -879,hwzhwqeynslumjvnaylqqll,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -880,alguexlhtaohpdffaqbfimn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -881,dcfwwxsyxnqimnfyzbdfony,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -882,hxvysplmstdhqfixjpgadwp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -883,edvqluqjnakbvsqrylcddse,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -884,gpwdgrvynwrewmfunapqind,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -885,yrzktbgnrfixlbfaufvyxyv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -886,rifhnzenweosqpfcuemqxbw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -887,ebunvgnqidluuopnkarqpll,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -888,ojfrxzmwrmrjdtuhdtmespj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -889,ohgkhmxpiksjavgygwnnuor,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -890,lfkvozgdocjtvlpoaizndai,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -891,lmcwcphrowlewzxmnpkgzhg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -892,aetwjlywfpnrzlwxfozohow,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -893,yanwonphmkgxcbmrtefgbro,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -894,rgmjtkabsuprjecfhsxoiqf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -895,mydojmrhqjbykqyqccawiyz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -896,wrevshaybkcrgempkcnucat,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -897,jpvvkbpylevdygkrpkcafpc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -898,urjlttettkvwsovylwoabou,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -899,rwkgmfzzidyxeccuuhshbtv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -900,,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -901,ivbhdqmlynmmtkptounuvqgcwmjnsnnwttrwcdafc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -902,rmemhmtwrddpzsurcuekujijhnfhljgxvdqzkbmlh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -903,kiyjwrmaokgnwvptiagzymfvyfzcncwkmauezpsmo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -904,xwfrdsxhkjhypfidbyrzbpuibtrkblqkyvyxhfinb,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -905,eurrvaqxmwurocefcyujeuclomxoiwhfvpzsrtgbz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -906,aosuvyvgxvfkscasvfvgxxkhzamuixxcddyhehmjh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -907,biydugjvyjulavehpokfxlqntajyurvguvkvbbjar,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -908,wcjezvggeooquolbnmsuhatwotlqwkgnlxruibrcz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -909,bxxqusvgaityzqovhacqlyxbelbplzmwakdjfsxyp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -910,ybdosqifncoekrfcndxitatanjjsjndjqlwprcvdf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -911,spvzeglcdulfbiwrmblbowqzjthnyzutnuympoaje,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -912,ovagmpbzrgssoyxdkmvedzorkkdjaoniztsdtueng,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -913,tipazoycdssltnbvzxxmiwpqmffhsnwzfocmvmato,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -914,uynosaqdyauapqibycyyvffqohhddyfiwartocnzl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -915,cjsgpwkaostzjeznjflfiugvyrkqovkwmazzgvdwn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -916,haxglihqeibueyfumfflphfvdyhakbawfujryuirq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -917,sssegfzzmswpcwjpqjytmyiakvbhownyexwuoysws,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -918,wpklzkrjfqztjrmfctutgxhjteanpksqgqhmwusdy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -919,vthiskuuogmfjrsgvmiylcjasbohxdjhkjvabxbmo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -920,myjsununxftwurxtlvbwjvvmpdjdyvdwjgstqxhdj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -921,blkpvqokkebecnjfudjmoefkrxelyuhlzteeewwqk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -922,zvonxjolunjwdxucdwvqksxzsbyuohwhfhbznnrjz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -923,xmrtbpeenhpyywlvucfjolhdtixuotosnscetknja,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -924,wfmktdyidsfmwxodnxwfwwebtjoeyldixdtbfutqw,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -925,saebnkyzuchiigfqabfouwbpomhtiotroqriwpvce,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -926,mfsruqlhokgedgungjqvuiyytmzingxvzoitdkgtl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -927,zsuhkpghitxnakzyzahcbxhtvgxijnfaewxqtrlsq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -928,ytrehpabzshlfmgcknxcvjscrbvfjyerhogzlhyvx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -929,ovrczjgflamfujrbhagleyqorjehilvjtmwlrpnjl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -930,nxnreqrlblrjjiuxxvryagkbizhvvsrjjhxhgbszs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -931,wjoamaezayuagxnhsmofhhzccznxoozhnncfvcbxu,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -932,cgmlhqebzzrlmgkabvjpfndtzafpavqdcxopcebea,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -933,civnhmfzrhlrqkapnyyhcxxbisxinjqfdcqshrdtz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -934,dtuulhcizeulgduljgappmhnnpdtaoaeumlzwyozz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -935,pmilojfifjzhxcnildnaycpntrxnawwtxwmpplqnp,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -936,bzwrtsedfhfxsxqeryjyfkkpwpzpevvnrkygrltak,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -937,xpflgppnqbghglxolawrduzijjzfggyvrqffctdes,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -938,yamheuctfdrzqqttlwuvjlsezeinefgfkefwmjjga,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -939,nkhhvuxmxpgcrcxhfyyrnhvulmidfbgxczzeadtcy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -940,knsatndrmcvwcckkxmtxjlkoekijpfgqblffzzxkh,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -941,qqlnzdzxqqiadibjxinfzvxmbffoqitfyvtzweyav,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -942,hejmtpqbpcwqdbcdtkjyzsvtmniekdaijzotfcohm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -943,zkprvqloymwfehtfvrzaewydwuzqfdytrlrcwbhxo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -944,mefezczppgisrbwxvdhgfxocqpmvqfvqchnsvmwar,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -945,kahwswnctdenohbuqqzhrrdvlvvvmdjgwklsyxxru,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -946,kxmlidbcvptmnfqxagxfppdirenrhtpbcwfmmsrts,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -947,flrnhpgcolxhrjjjcqarconqprnfyrtvphtztduma,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -948,gfwdwyfwqoujksdubghuahlzsfskjezmbvqcdrpbe,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -949,dihoblamgcvwesiwwdzqpaybzxfrlozjcnipsxkec,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -950,yyokithrzhisxcnhxughicdflohczvbgajezbfmjd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -951,kdbuqdphqvodfuykkjefvhkuesrlcocphmbzogyay,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -952,dyabqgaoyzxbwswkoyddxekhhplcoxybfrbfwitta,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -953,arwenxkuxaaqzziitpphhvcyjfasetcbpttvmdkue,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -954,lziucztnmiimnilmxxptktecyrqjvtxtjrsstldbz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -955,ptjntszagnwcqcguqoyvtjsggxmparicvbwcdrxvq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -956,weuidpxnobavtbdzsggrqvhujvjpiglncbhtribfi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -957,atqmqiauxuqfiviaxetjdprtqlfhzsdghkkgytmox,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -958,cqhbaoghqhuvidkknhsvytfmzwjsnenlrauzzcafd,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -959,dqcegdducytxurkwjavzptztfbpkhxzwjlupgbbdo,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -960,cvihbzzlykomrrhqaenyjtcxbkulfebenvurvrxkx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -961,kbkvduhxehrgpmefhtcxguuzqxcmzqzvvnssgvxwq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -962,oynpjnxhujxwtqlvtdgzatylrcxngptgqjutbjgzx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -963,tzpvzfmotuwpvroppjgzqphhnqrglzknqprruppif,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -964,pllcxutfahznrdhxwszfdduhdakxmbcmglewqkkgz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -965,zhcvnmrngpiicyryywrpuiqeyemzkptgqvzvgxgqe,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -966,qldicckorwuzvhhxbakgtfxulkdyakkhfgtmvpfdr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -967,jmpiogzsjpiudmjeeexpcteewncjeafdjwimhuqat,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -968,cjubfmycjqifjbdiatonoxmiluezxurivgxqafclz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -969,cvztktnpnyirgfdcpolrzarwgqcifhbxwbltmzjqf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -970,hkcwrxlzffctwjgwzjrlymjzqjfqggymgaalqgkoe,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -971,tjaoexbbxwxkumxyjejloaazoqfsgdnfckapwbrns,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -972,nftztbunilalevzxfsbogeucahehvcifakkysgzfx,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -973,tprwkrwfusiupziygiiflnindtmreuxwfeesbwfcj,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -974,rkxbzchvrqpmejtilakcbyhzjdvmeyfzxhnxoonmv,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -975,zdbvyvtooutjilpbnhadvrctqklbdaivbuwvnrlca,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -976,yxeylfultossurryikdyxutdbizxouaxybftseobg,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -977,ebqhzysueknpagirnsytfmrhsrfhjmdciiyvtrpil,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -978,qolyqlqauvqxpfpgunnuiuboaacncnbmhiplyijjk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -979,uxtfpbzuxmlgljiufmxsnxagcanjqaezznbdklzjk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -980,vvcdnblgdaestnzrebzqqtcdzouztjwnivwttyihi,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -981,uslzndmktothsyjklhblttrcttgxbxqbgfhnovgfs,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -982,hnrkjoiuysmaydetsncqykogngwciozumojjhbhxm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -983,myvxqnpetufwgfacytravvpjjyyfmieyxzniitvwq,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -984,uczmkohkaxohalbcryxadyiqogwtcsbibjkdsikay,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -985,waqogpvvthvxguedffbvlywglvxtavivvwsqapivn,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -986,pkvhehfmcrruejcdwooktomzuajvbekedtfkfkous,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -987,gsehogttvfkgwfadkxeeopxncodxtgayzytkzqovr,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -988,zzcswxwxzqggwgspqzdziloptbpogvfyioaklhwuf,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -989,mlcegauxinkpjhmsbbvfpgaxjofxjtsxfrtoqjrsa,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -990,iyodmofhkoblxemobtebpiaoljmwizhqwyylmanzk,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -991,oidimiqzfesgssamzaclwqejhwgyvfcpcbfwmetgm,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -992,llqbciqcscatstjxkkpricnqcpsdbhawnvakahepe,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -993,cyvgpsqksxzbafrleykaszyehqigxoxjbtuigeihy,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -994,prfxranqegomnaytouygecsczmnppmoeuidzoqhtl,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -995,zfxsuornfobrchberrhlrcdszvrtvfgrlnkbokziz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -996,ookissqflgqyqgfpvfunfqzzmhpbsgozqwptexgrc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -997,qzljnulwlswkfegsbmdxsoofnzepluqbqytyokokt,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -998,zrpxukwhyfingmsezhdmerqtuqangdvmlwgrkgidz,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True -999,lkkedqnjfeiazfhaiggzvamacqdzvjpmkdjslajqc,strPropKey1:STRING:strPropVal1,int64PropKey1:INT64:1,doublePropKey1:DOUBLE:1.0,boolPropKey1:BOOLEAN:True +0, +1,"ozwhvnetnq" +2,"kuk,qg\\nrspmk" +3,"wmz,1234\lamo" +4,"tudoojdduf" +5,"qifidjufri" +6,"gqpnpbdmrb" +7,"dgzbiqjkaz" +8,"ebf,,uq\buqma"" +9,"rwhnybogfy" +10,"enqpnymvdb" +11,"axgwwhhohf" +12,"lnjscxxsut" +13,"bibseamdta" +14,"qysgjbhbad" +15,"pujcirageq" +16,"xbcripouoo" +17,"ccyjsondhv" +18,"qmgutogbph" +19,"tcymalhvsp" +20,"ekouvlwbwj" +21,"mjqtrbgwxx" +22,"capvwwkqqc" +23,"ikmxmuutwx" +24,"ickhfsvbcz" +25,"txgkpgznqs" +26,"zjhqklqbpk" +27,"bdyauucxrx" +28,"dtpchkewek" +29,"atgjuhqewt" +30,"wzsfokmeup" +31,"vtgaqypmhj" +32,"htnjdmdzip" +33,"urgyshzywg" +34,"yurwlvqlqf" +35,"pvnysdudmy" +36,"enwtgnpdcb" +37,"mxevoajbdu" +38,"lghityeldp" +39,"xrfzruchvd" +40,"nwjsntfgqv" +41,"hhpimahihp" +42,"dbckbiyiho" +43,"kustoiynts" +44,"kvfkmpyass" +45,"ahdahcueej" +46,"lzdzmtgyiv" +47,"rzequmtgqk" +48,"zlkrbxdura" +49,"lvpmwemfbq" +50,"hbuahlqgas" +51,"gaxyypltpd" +52,"gurwcenyqt" +53,"arkblblzlg" +54,"cyrxdulazf" +55,"llbnlowrwk" +56,"edvjiqckgk" +57,"ydtnktbzjy" +58,"izfpesvidi" +59,"rlizgprikq" +60,"cdjtrkklsw" +61,"ozcslkkrwb" +62,"syfokqrfla" +63,"qrocoqwlbb" +64,"zjafjvktaf" +65,"tjgjvjkuvr" +66,"lqfmbvzkcr" +67,"lfbyzkxjnl" +68,"nsmbcjvwiw" +69,"nenrfabygl" +70,"onmnofrrqc" +71,"vaxdhdolut" +72,"ublvzthstg" +73,"gckvvrfipw" +74,"jvvxauxkbb" +75,"ytqhbpdawi" +76,"fkfrqjcoqr" +77,"zanunsoqxf" +78,"zbdplfupiz" +79,"dpadwzsmfz" +80,"mgsupeojgf" +81,"oeuhrirtdq" +82,"lgykwuusgt" +83,"kvsfbngdxr" +84,"yoopsbmvio" +85,"abzjlpkwbm" +86,"syxjelcfty" +87,"zznkaqdjmx" +88,"xspkpnoilt" +89,"qvddmqnhjp" +90,"ybxpqdcwxi" +91,"ztkjrcctnk" +92,"pflmmfbtoz" +93,"hgqocmmsgg" +94,"ytsavnxbsj" +95,"iwiedbzkdv" +96,"urjqayxvlh" +97,"kmupwzbfej" +98,"jgaezzptgs" +99,"bklvzfgfyc" +100, +101,"kyxy" +102,"lcoh" +103,"blcp" +104,"oand" +105,"bipf" +106,"mxvc" +107,"eaob" +108,"nkcd" +109,"pnsx" +110,"vmgspsufwhmahtollxtvwaacaxqcygdhvgzessahcduiijfuubvastltshlybscvwskysmzsybfjiguvlwhgbufxbr" +111,"lselegxziyjpbjrbamkgndtzmwucgyxogofasgcbjnexrmudbwalfcnknbnjhzgeordkxpwlsmgbpaeuulyjajhwwa" +112,"sfhbcpfkzvmxdxbccfzudeseiqayccstusggudkcsdwiuksiszyqaliecsnfjztjgueegskcibkkmuqiorgypqttbf" +113,"cikzfljmrxosmgltijhdvsuuntlbvbjubnifxthyltpibnopmadyyxttslwifnnjtixrbsjujocvrohenpbmbdhdad" +114,"wvbpbiamkwnicpeayibemwxrgfzglmbbecffykshtyquentqlngxfivorbkcrglfnrapkdyedfntdomffuynqqhuhl" +115,"hewezmbpfhlgchadsonzgqnieohwsydtejoeggnkhmrdcpenqxawtdbpqxgtoaeecvgljmrkevmqsfsiwbvnloelri" +116,"exnquvkcdngpjstvhlzphmtuvlgbanqsbblibdrutuahzjbjfhwtwzkjrzjrvwgkvkwvdubkvjzaixzefnwyvionyf" +117,"ksypuowduexheauocqjrddezjyrnojchqzhcobulbosmagacdbtcisphoqujobcdqmaypyjnvdksagwiaakdmuzrhn" +118,"yfvaxtpmsdgznyevxyyatoiorkscpqjtqyspjzzbuojexmueiqdhnncpkvwahojamwptxbxpweeqtwgtkikiihdelf" +119,"vstkwhllwicogxgdpgrssztqlrgxddteesczvcddnytyhokjaycardpuxkigmhmxhhuqvmaunptsogtixrmhyqvmvw" +120,"fgfwdchhkkowhlzvajsvpnmgcyppxbupmazpipfginzhppsivzlgfeefodobpnatdbkjwngjdcudfwiiyryhykxayy" +121,"dvdnuwwutbuhmlhibfjingcgohrampmifupxmkopioouuvamcmqwwsmddkpcqrkmjsvcfhtbrbbywczczrzuuzweuo" +122,"hfwyrvxdjidbivkmtjwdmuyobqvmpeouuaxzvntcxujsatucucmjqjqouaqrandguqfbptrtrarihyyujgdenjppno" +123,"spopkovwbyqxwjzztsnvgxafphnnsnfbmogzsqrosusizmvujslfvljymazizmhwakwvwviyjkiohnsvngrevijltg" +124,"sjsmtkbeoocpdshfffpjdywcvafcjwedcdeilpufunyoymfhlfnzlzdbnqwnsbbgllmmnzunlaexbtjiyxviycwqsu" +125,"bxsylrtdzpngmwbooywwvchsdvqxdsxpvkhkjttxwikdsvjowmbppimdfntqkhxjilvozbfpsmafkwmklilybmcarl" +126,"frafgghbbaxbjuueookaockzucfgvvpaneledvtjypxzuhgthiywglnmnrcgxvecdipsrtmxrpzmfowrqmqfelldle" +127,"pcllorrodwwtenkgjweozkmmjyrobhxdebsmhuoydjtsiqwvzyzmzeazirlfnhbztwijhqnnfdcnxenwgjhvlyqaja" +128,"iquurxdljihinbibsvsjaobcvbfctbawllevhxikexunukmruapvrqgkzgkezhxgfrvdijbecuzifqfobcsxxybxfc" +129,"kngilomfwzvwszgjsxzflnwzqjzjikgzxwgtjuzpbsxnhontqdlwbwnmigkfppscsxxplbkrxvnmnjxehsnvbxvaug" +130,"bbidxrfitnrcogykiqlqoqqfahliomvqubzcnxcqoahmgsotczriwbcubikcojttnbrcfvzrvjbplvayexqrgzjrdh" +131,"qncsplittouwnbykofrswjnbudmdmzdoqvmfybmfxvxlrhrykslcxcrnhetewayygnccqmwjsgjwncvyojfytzxljb" +132,"ozmurcpifxgexbfmkcrvebtogrrkjqzubqmueanbvhqackrthxrqchxgfmpilfulqvahslhnbwndxvxorldjoslggx" +133,"vueenkiqeynzhmmwbnwoypwqtapskhzyxjkfttjrthrjjwwwnmgaqhjgujkfepstnfgtgjcbncvehkqaoadgduktme" +134,"fncxmhmtukxqurgeqlbiebrvrgcszjfbbcypqczdsfekpwnjaqdtxzdugbojwuvwaxmlbiklmuyqgbpkwqynmmjnud" +135,"alhgwkjdbpjolouoowfrqeclhdkpjybjvbcwmaampuqqdohhafdclxyuccdlwvwxjbvoruqaevssvwwlrvvvyvtceg" +136,"xhowqlpsnabffgmuukxzlqtwukmvkwbkerkzcirejghotggxerjfjcollzryjrwlyageeibocycpzwvcbfglrdicby" +137,"oaixmqbwfareqyvbgbtxojwilfjsgkeizbuxwyxpqdxsbkqrcjmfbehydhbhbtatvngcvuwkbpectlnkvrzttirays" +138,"xduhsicylyoxpythpmuhtcbphbdcxcdizuthnuabzzreamkazmejfegzuqrrfnfktygdwesoopazqopiwqflqpkump" +139,"wviarkepqsgslvzasxpgpleulwcgcncwflcnhursrntmyxjvajncjpuapnbtskilsxpgbdgbhecdzbtprlsagviznx" +140,"vlnpyveilzfvyddwiwdokzwhqzcqzjihhmevppmhsxzkxhstlcazrqcilhfpguliwojmsegcnqqokuwxplejjuhbyb" +141,"xyzugbuqfzahqktudlnivrugdqhvcisjobrzysyrodbvwnhsocajpkkpnilioefsfkoodxhitffhbaiozfwxxygenq" +142,"sqzjpdykbgorpjnolwcmjsifpdottbununtodgjbcoihrjhqfpyinjgevhhtpddlnklpdtrhzcewynguaxjalugcid" +143,"alhstotowunrazdptlxgeeqrvpokoghluucpzuhzqbkuessbwukfaxvantkxaklifclbgemwtqsoplozfqohosqknc" +144,"vtvgonifmatbtpulbtqqqcswpdbgqmshfqlvmikamfutbflkzoyikorqnknroxdlzgkeqgywuvvntushdbpjaedfmn" +145,"qscojmfpyqtxgrfzjsefyreiduonnsoycoemldgcmpiyliwrvfoniwvddomynqgefsjlaodlykxmygnmqwwmgwyrrg" +146,"fwmhadawwvwqcixxagrkfoxooijclxnvaxzdzuddulfwofwdcqnjfpfdjrvhsgkiygskvtqwirckiuorvmbviqaeng" +147,"sorqgwdegfcqycbhxbozvovhidhdgrgenqgnthmdlvmfxhnapnpwmvwjkitojiycvhdyalffmzvukfzdftqtcrvdlq" +148,"slchxvnlnvqfufbasgboabsogzmlaaygqqrtmmpqiwsnncpmkrisbrygbqkdtgmeashgjygkcmfeuuwiqcztwhvrfl" +149,"cfinaqagbzlnyggvcbglayspelstjfdyiudnzmhvztglmputivbwlkernnqnzevflmnjfmftqmgsmlzskfqgippoko" +150,"mgfivybbprsnwdtwhffwqvplwzhjnsbcenppiolxrbztsomqcttujbdmckssobpkuzabjxxhrlllfemriffcksglpr" +151,"piaihktalcxazjxscjtkdyuhzswtmmwernbbbduusqeeybzpcdhxevhvaoyobsakupzqmztihyylsdxxygsievtwxd" +152,"lazunaruceenvwinipxstknvmylskzftxypjkibaydtmkgvgbuskvcdxozdkhcntvoybsreyhqlihbntxnptxkjcnx" +153,"kodlwsyybheehpepofesivvgvjyleidnaeixhovcaycktrpymqqxkdowqdhdlbhxxfvdtsaxptawrjrfyymvesiivt" +154,"akcsvfwpyqxijnpcevlnjyukgphybptiqwbrvrtbdiiburiacfomsuulhsuhaqevlnvcufiadbqyzdauskcjbckgiz" +155,"hmkqroxkccfmgxbyzqvvrhisqkcevwndcpfprogwdnrlnzqvylgnfnrgfdraxdthmdzxvoeeohjkziixnqcdxfsxzk" +156,"lbgmlajrfuqtcrizmupuhpejgzwavkeymdqfujjsrovygoytbcbbzkflinxjdfbtivbsnhmefgfskyodusdwelzssp" +157,"jkwicnyavryhbkusctpjljxumrfqrbhzpwkyncfpuyehqfcrvxtbyqcxdlfccayjxsnwpjibuxmhjvrhxcckoddymv" +158,"ktvkrhbqodtgwxrrwkepzdbzddjrdeftdajerqsdtcvseounqoewixpvoqiywfwmghlbllwzjjaeufxkxmkcjopbau" +159,"pakgkgjfcriwyclzoztcivmkljlyvfdlhwwbkkfbycnrdvbkgfmpmpgtqcbftuizujmzormigxoigmgxnawkriamfv" +160,"pwibnpchpmrcnddtbzcnhrmbfwgoyzgwvwdksabiiveozatwmrownddcremkmbffelqdgoabtstiebeeksfnbltwan" +161,"kocxvutnvmmcbfqlogztqrbmytmrzlnfvypbnankaeyebquchqqddkcwkiibbdfoalbtxiztruvcvydhzusrmagytf" +162,"egyvgbbdvpyrxobuxecoieezgshucqjuaivasjnpfngzocyshrwpkmoppfvamllisxepisgrbewirqnaifpofswbae" +163,"mfazjwoascjyuhxqcsymnkjvlpoudonhthzatdtrezlvjiladrasdraaroydjpvhfsgogjgxlhbvsyzrtidedbnzog" +164,"ypnehokcingyqrpfoljeczgnzqhaqovlxdbsfnonnrlaepyrnzzlmvtxvbvrrbjepbpctgxtrniqxriplqzxovmfke" +165,"vvopefnyrlckpwvfsbamgyhcrzufqauoifrgqrevvxdfykdcursnmujvjlyaziflhbvagnjmueszpkxryuffaqdfjz" +166,"yatlbgkpmwzkwfiwunvzybjixshvikjffkhvtfjmepwounulizwutbltcudcmjpwwqgqoumeoxuwmjasznkzxsmzll" +167,"xkwdlqnxwsztizjidteplxllawxydqjvecugthdzocopixhweutmcdevvsjtrschyxciljpgjrbqyduugfurcipjgf" +168,"bzzfjhcpsjlasodgvsmfolfvuwfyxocetbnqrgxywvpywafpuwfvczgnlzwrpickntlbvlqsvigsuvwxwapfywpcli" +169,"hfslksrjlfwcngakxdcvxmbselnypixddcjmqnwdncqutwuhllxwfghzlbseciucjoawzqnhlyqaidxerqmhvgkdut" +170,"cgugmswbgzkcunpkuujaeddzogrpvvjjykssqsiwtjkkbryoqrufypyndozpcoushyetniwmgezhujcbthpncxvhix" +171,"pdydkzucckasjolmsipbibdoebuemvzjfevmepzvxhnwrqcvleaibanecmhnvvauipssplqjkvfrnqtqobhdtiujhj" +172,"iceckkwubnrcehhgkwbuhrwqlittcvwvtnszhoffvufvwkuacogrnddvkiiiuelfokbizurklbmrgmxubwhjvpftlq" +173,"gjvsaodmhwitqxewuvdyqltxkrerfrfjtperhqfcuoxjusajuyenoietccujerdwnfgfvcggoljbaqrmbatgmjmgid" +174,"jmzzhrdycqjhtwclgtwukwihfuxnezrfacwuixtobumesjgxqoedtvufnfmwyzgykikjxhvxgzxreyzcjfjwmcglye" +175,"looaoekqmtqmzzksvswraizwzrciyzklyutxlqbzsrdiyarjhopuyfnvsgtwjdszcdduofriymxmzvcrerginnoqep" +176,"ltcxueaiewmihyggjioeqabgkfjctwtltzbrvkesyqxcecceistlxihucalqqcoluathqpeajkewzkyoaiipirwhax" +177,"dyxkbwrnxampnwvmkutspfhmkrwlgppvseqqhbwsonxbgocqkixspnvpexmcbdujifjogbzhovwpnziqjvxruqvlim" +178,"gdvzjqdukjyhgrawenapqqfszhhruxmdbwnvwnygvqabfyxlnutypqoahsynfgepnbfyhkxjsptnnwoxrdltvyxizh" +179,"tkmfbxcofflbrdwdiceczxzbdfozvubxoxlzxlmpshtaoypkizswpubcoffjeuupcfgthqmnlickzlyezisctvuzph" +180,"pcajstrrxhiogsjexdcxffahnrcftnxdrrvxdkifbsycyiqfjyqxdffwaloxgresdjtjpzrfhqhvnepyuxdncoblrc" +181,"rkkxgaugcggbmvpyqnvloyanfkvjvtduwqvqkeigeaxdijijtiholmnnphesvolmmxcaygsitnhfvinnyhuiuvmnfk" +182,"qycnsqqqryerzzqorglookbzyskquqqypazrcvyoglniyktppjsnwdfxugcacufupausauylivceusjmyoyumujbhv" +183,"oksmcgovehbhokmtmppaqhlzglhywmmskxbknpwilzmlmyuojzrnnnehyeisegzhdcwxcbmeettnlddpqvrxxodeft" +184,"ekwkqrhypecqjwesyttlhbukesvpbsdceaodubgnbjrhkfowbscqarvupdsepjpznahsnppktbeglngyurclugalvg" +185,"pawstouecaelywovcawzbsitgpjojnvpvvmlnfswdcaznlzuwkimwtalaboflsszmyyoathmdwnhknjnlpnquajpyr" +186,"hkwapzlckpisbhssfbusqbeeiyzhsfyklzxickbpgqmhdurmtxoisomhooobyiqgxtmwxoozzwyuceuqdlcirvydlu" +187,"fxlhtjwanwqzcharnuvbxuftmaqmmyphjunysnjejhvztcfzcqzzdfalstnebmguuzswrmqmidehfkoidithnxlska" +188,"fhbdhptsjzejihmktexvcfzvndgikcdbtpatnbikrixxrmgckkjfpxethoznwstiwpbgvmrsabgilakhuujukceqbh" +189,"dqoponbyylhhijcyfyhmrxhvqlegyyrklyjhovfvsrqkprlwnzhczcmfhsammmcfpiyczkauobjnpmaljabfoezxdt" +190,"evvuofkesnzkfquloxnyydqwrmdxhbidxdindryvtnpakiunyoskfisslqyfnqsbnfhjdfujloayrcknwknmdpqmbz" +191,"bhpofwukobcemponndrnxlryvbiypmlrnxvinrcyqvwlxgjnjdhxrgikauynjfpduychfxworuxlnazxnmrthxexzj" +192,"xupdrcoknrvobbizvavxhvcqfglpvfkpjwusoxkofxxsozgswismjikvifnhadgwfbnogeyjnnkqbuuxquhfxdniaz" +193,"mskkhntqruujiyxvcvfhvthgijktzwhibvmngpqxrfiezfotnkrpgeavlkuxtdylibwhswujiwmibhfzkirfwtetcu" +194,"mciqljbbbodldznxjvklqkyiaumxmjwusdvjdasywggzdeyrifmxcsgfxstfrqtoyyecooyxeluxjukwwbawycvnss" +195,"pbyjperjeorknvmhmgwgilgktxdcslocnzltkfahjmkchfetrcecchkevxsaiqwwjagvzvflplajkmaowikxkqatuh" +196,"iibrpzotygjgjmblvhzrvuucjhcitowjianoijxoxkgifdmesykeytdkfbcgvpeifyjeviarqqvlczcgkraesarwml" +197,"lgbrxgpjuddiciscvrwoxmnrdovzifiryswqzpcvtbnctqdyspjpwvgbnisprfzjxngdqykkmbipkyfkjbcuqwftzl" +198,"uryrbxulaafmoakegyvfyrteochwcbaodabgojtmmauvkpquygvngkqpcizwgtcdvllmcxsyrijwkikcfsqkclpvul" +199,"swbhqgvspssqoggafvnprwxioaayotgvrhhyexvpnxlnjpoqpvrmfojclqxgppmnktvihkvizilmtlmxejswgrpzyv" +200, +201,"hmmfhihrhqlfybnznrnsceccyplsvytyjircojlmdujmwroqurjfzgxcjnejcmwncbqzhkyzmqjkvetroyuiwpmjkh" +202,"whopnkmkjszixtdiseeixezknuhhploytktfrzfrjncwttlfcviziobnvuldeoaggchkiyzdsodlhrkpbjdwbdwpai" +203,"gtogbqfognotaihjktycrsuszinjojwtgxdzewbffbtqncbketgfxfsbqulifrujpjspoepvrjugplhbtzyriudono" +204,"xevyqjgpwnnzfxxdhoddcnuxzsmhsomqsrwmvgwdlzpduxumbvfzgvvkhvhiehlgbctyjyjipldkmfxvhnijpbomac" +205,"kmpexlrewpifuhegwnvbbhchilyzmgwybxlbvxttexpunvocrdqmlljndjneuwyjtawycjkrybajmykiolfzpglfiz" +206,"xmcacuvxivcurtdziomgcxwinhlurbhmugmyiotipccidmqfvjbkgxeyvbhgtgxeqdhnjzmzuhqhuhkfysfkeaztya" +207,"dpievscglkpgmujirazqhkjidjelimmdrgydwjaguuzfzjselasijbgzrqtfvjzmosaflzgjzegnzhvsnjacpjxpjq" +208,"jqfrvxlgicyhwhapuwdstixmngyuhndiwmhqjncwpujdpkufchkuedvamthegfhecouexirwvqmkperyluilxmruzf" +209,"ygcivouhtlnclfnwkxulxzglsasaxbuhexfkxkqmrzqivioxvuovbnsbvhjuqaidlhuvsncrodjbjaqltubcbthepd" +210,"lcubikgsczuizrubdavybgmjdsomhtnybfljprbw" +211,"rcirvsjofelreutxrstfhjnwpksduvjwazrcwcsf" +212,"jutoymwvnpdtdajucdejlbnjwojjzwoyafxbwfhu" +213,"bkvlxrkwjjcbfbyvncknpkxhlqvtquxcimjypwar" +214,"pjybgtmjqpmydlxpjcaoozrwvluhwzhfrobfotfs" +215,"jmlbzfmqfzryemgettsmzklxwyqyzxqwtlxogcla" +216,"ycktpxsjighloymyodovjdgfxmtzgaqnvwaqvsvf" +217,"rvtqxapnialfawvnxzumamurlzpfhkkojfpncooa" +218,"iqlkmkdujohjslacdgowenyiqghnhyukbnrhsgjy" +219,"qnjosuypxqxmirpsfyrbjqerlzuxzrwqugkktvuh" +220,"lgcbsmmopugkgxixzktsohmuuogxrszcaugknokr" +221,"hyijqhjomhyvjqolhsgoeusaguyrsdbljlglegve" +222,"sdsfhvynigrcyxkoaxfduquhlulcvcbxaavdgpxg" +223,"dbvecurhcnlulwrannjhxmjtfvqluiasxsdqkwxf" +224,"gexdtfnztsqvwjpulegojuswojzgozjshzpminmi" +225,"mmpqvfgwavcmwdsmnvhsubueaapmjwmgztkcoyko" +226,"uoeswrywxeymsxagzaxgwzpysytemzaxirriltxp" +227,"vpriatunksfdgtlwszrqlbfwcrcqhxhuswkjokhc" +228,"ylsryuejvvqkycosmtgyzwdjmqqrdantouwvzamd" +229,"vihyrhfotzqqnikcvngcndjzjpoarcnsvjfqlbyb" +230,"txqilialbfnipbfuxkmymmsfafgytfruujkwtytl" +231,"gtuimvvufhpazrhyqdvhbqfucaokvtywdzanheei" +232,"ariqiplwxavtctpwtkcuhellpnzpiqmhuwizsdsx" +233,"rqyfpjuwdkdntjozmskbgvzyuttzsxzwysxndqrb" +234,"ywxbevytuqbznmjlflknnewnnvcgnwkfbvykwimp" +235,"atesqyqqiymblijlkpldbszggxwgiqteplyrjyhq" +236,"pmsovoapxqbvhijxcaiposvhylorjycqmdrwthdg" +237,"lndrixcrsljehxedxbvkhzhnhthjvbwfzcgxbrul" +238,"trutjozwbjgcwslizgxupkdjeaxznuhzxusdimah" +239,"uwkobjvtvrecpqnvzhfwpiavphditpzqoplrfawd" +240,"yxpqbocxcpmttdjccuglqfuuygwpnbwqvvieqviy" +241,"tvrjmtbsrqehgeqoxnevmjeqreruakatasoqrhal" +242,"qiicslrhmodgkoigborqoynixjgaeobbgkaghost" +243,"rjywpjlkncniotkpmclqmdfrmemddagddnvemkgm" +244,"mwlzgzknlgeymbpnievhhkkxupqgixkcojcaahde" +245,"dzmbxjdtlsdbofisbosgwhcugrcusvosnhbaedqh" +246,"gkovojwhbhwdbcewyautvypfgwhmgigqkhalndxy" +247,"sqzmozpyxqajujulknfreshojxvdyzbolpcgjyyh" +248,"vxoqebegrgkqmnbaubvqcxnniuechmgrfaweddhp" +249,"biyazfdxyygogdtghveioupewrgknxrdqslkbppj" +250,"xofzviyrwgengheiardhvlticvceujchckmnhmbd" +251,"heuhblocmbbuwsflzypwobzovjknlaojcnwvexqm" +252,"qdsvauxhzmmuxcnifnfxdwetsgljzkyfebjvofry" +253,"arwvkdvrdudqcigffrjuwfhgvemmstusheuiyewk" +254,"woolbefdurlzvbkgwefhcpanqvhzdiimhgxwjxcd" +255,"kbfzrvbjrpysvcorxfctjjxmkrbueylrtltfgphu" +256,"qglydhlkaumlvbimhhvnaxgdjgjxujximlrjcgmd" +257,"lnbjthbdoawjtsdczxebpiotonzsguazdjrqzxse" +258,"zwxomkjudonhkpymgxjfpnbaanwttwokbrkslvxz" +259,"balzjymjkcwenojnrztsdalarkssvtufmyjtxjed" +260,"yugbsmodtttgkrzmfvvvfilglhgmrxzedbmwuhfa" +261,"wwgfbpugjuyhyzvrbzzhbvvqorfvwruqxbkvsxop" +262,"qynyqzssjuxgcwcberzyskdskclvidtphinspsyw" +263,"nsdkidocnuesfcjnzjbrkxbatxiucxpoewtiahsz" +264,"bybytvijbxqtibinndfmsvzlsaiqrblmjngfjvvo" +265,"ksrnupdfzxxzsamsishtccxhgraumyghlpmjxhlp" +266,"gcjczwawrtovpnyeaiccfsdxzounixerieinijuw" +267,"nzroinochcmhlvgpxzjtduomccflgvmausfnwrzg" +268,"pvqgowoqvtcuzexptfkcrnicdwxlpixqnjirbavb" +269,"nwigrhpztwrkkzdqziqsngxkqlkppjbnuiywxfww" +270,"mpicnuwjertyiccyiffceomcpicjxrbvbenyhvuo" +271,"nhoqvksffelcqbzoxxgrcfsguwciwylpgvdwnbvf" +272,"mooqgfucmxjicmnmnvwzngymjcnlsdlrzjutzbnp" +273,"jioodacberzqrcpffvpnnjyumvjgkaxlcyanegrn" +274,"hjnxfkprryhvdczhehucoajcppljcpjnvnclllna" +275,"tepkevbzciiosyvasunrajiqopqzciltyamhlabj" +276,"gjbsrcprmpwbkibntmjidrdkcffkqwwumbmsvhto" +277,"tqfttkoyktsasebeppsqlozdutinobntvzqqnqem" +278,"zjhvzfhbxrkipksebhpdfelrtemozibtpwtlbpld" +279,"rppktriloobopagkwazwwbretqmeiemoqmwsyzvx" +280,"fjruiwboxljymwxamchboyauvdwxawtzlwsnhoci" +281,"agrtfzwmsjjdauizuyptcqzfwxyrfdiusqnieypk" +282,"knwafcnhohdobrdwayguygkhjgazvbvntoenfxwy" +283,"tdqczgdwyonfektcxmvruyfuxitgocbmgugoyswr" +284,"ulazhrupibsoyustkendgatnnerbeajmifhbjqzz" +285,"wrjoyzryqdwrpkkdtdkquraxveksrwrckqhcptqx" +286,"yjcuynjuapqievwmwbyoriqifpciljuxrxffhwaf" +287,"qseynaljovewtdubupdibwephvmrhrcvhwoqsngu" +288,"giouzsdlokdkzalmsxfuxyzdsmphynffteubcmmj" +289,"fgbpauiqplkljfyizjbqxwzlzcehmdmyvulfdhjh" +290,"zuzwrvhbwoaubmwmbpbeaifqkyxmldhqjxuymyey" +291,"thisblktxrjfhsmmpifxvuscrtnhtbdbucgagtrc" +292,"xcigdjutdrcvsqvfpeweiovwhkqjcoirzeipljxt" +293,"xptevbgnfroiqkdsdpjsrfkhsyvueehwjsnibnre" +294,"eagxxcezwdljlernvudvahcvdctnntspddqofkiv" +295,"crwjgyujmmfjrypajlgmbiubuhyzfxnkolahyphc" +296,"rerklndxgggkyomokkbwwcelvudqtrufidkpqcvi" +297,"qfpfikcmwuudbncdiqjexcryossphjxipkirfdvo" +298,"plaawybpyjzjvmoqhxzidzftwaurtaekfjxshmje" +299,"bvtllidowtlpclavwbwknmlnsbpeliqywvdgfmli" +300, +301,"hmwaaehxvlxjgogfophyrhsmexcqifhlvksfigjk" +302,"hgwctovvkwsjtaacbsiaasgqhgwxffhcxolqiohs" +303,"qttxcmetuczlfhoiogfboyswwdrjjbulgsjnhmgg" +304,"zvgfuvgbpccxheozcbhcxzzgemtwtukoswawujjx" +305,"mmxsgmbwsxvkrlkstpriaevnuxuljjcjgsiihyeq" +306,"xpfblxecznonpaxsuxkwbdbkxehfmhajswfcdpfg" +307,"rvktwiutafczcjoprevbexyxhrxvrazzlsgmlomb" +308,"iimrrugxnabhkmjlzlvwjkdlrachpivwcpmspegj" +309,"qudsgegskyfwtlbwuwwuenojuojgwlhnrsrinrrg" +310,"fk" +311,"ar" +312,"ux" +313,"bp" +314,"er" +315,"bo" +316,"qm" +317,"tn" +318,"hp" +319,"yo" +320,"hrphnzgodwqylmstoueerlwnxjaarnkyjzvkcemdfysjufbtfpqvqxathmdvlzdedtotsfsmhnqwxgccevpfxngkmchqbcyzeqoegjmymkyvoyyiegkupljelcjxolxmsvcxmzpzdjyuozgzcmdiilqdidvnhfibmmkrxdrghmznnqbscczyktdhqkgvxgdveiiqwecooeaqugxwpnfunopksixzncwmubxowenwqlamlpyclfxnqneedhgfhjvtcrppibtiqxnyuobtqpeukzmylzwnpvxvgwexozkmcfvbzumqrtfunmcyauftbyyckffqsvipobasloxgayevlbjfzywahwwrqqcixdzugcnihuwlsspnucjvpddcizkpobbtrxrsncvnikxtyqyyuebjhyrcrpjipizjtlteutgiqjryypvzvbwfazwmlatuskhrwtyuchderxbiacpxbedatuflhkobjawoxxnemuaziqzcfesjdbltwelzwxrrrnhaqwfwyvzovcfbvlqtmtzfxjstxclefrfbgvntsdpskgcjlgnxhgfiostmhdazsqcggamplhaxradneydlntcvcioxizxmfnvwkukfgcveaongogcidwmeeubiqvdibxkbchrimjvzjupqdjtakzrqtxzmjhuejzpjbqtmgpjbqtklyazqbffwsdtncbxsmjktkhaduofcpxofquaxheajzhtddufwjbwlhzvkvfyevcmwnisngnnqvyermwcohnswazjzcmqi" +321,"svvselcdvrgnpvozbvbajqhqhmoszguviirzxjtepwxsplkhepuirgjuvpommbgwnpmtkxkapgphebvzncfnefeplmanvnovjdbtrjzmceqzmgczesqopigskjwzgqjpkgrgzqsbmnlnavgxvgjgdfrxtiinlvtdeefufmhbistwupnasyzpcfdhatpdgibtejsbnvfsqywxpohobomsxoxamrvbdytaafrtsqvdqgdhegbxlufothgyrheapsqwwhmuawrtvpxrmksatbqiomuborclxorfzludengrvszpyfqfehogsfnnmrqoblowhqhepwnzmczjdugdaqsljaoqdghxgahebbemlfywevmsvuwdwmyurdcivumtakccnywilvsxlplqoikxzbhubsitlpckxsrkjmjedxctkqenyzihzyooavejxclngpzhsqtxvpewyjulbpeyykdzwyfmpgspgnhlqjaaysjpskbzrrpushrqlhdjpwjkvozxmxnkotemobtapddjbjtxxtgemzfiydxjcjsffqdzptwzahtqrynbndwvupemczpzvkkuncgezpyeagzlleeuezdhieuprdbrpdhxcbeqeateuwqaqruxrkpyailprckmupdzddfutrsjfesigxyizeplxfcbysszpbswurgfzhwswepigmqvudcpyqocnyqdwzxtlhrgzapuayaauhikcbzusyavmknlhbykfxbsdufxwrwllmikjmjswrncdipkmitjzpivbcpn" +322,"cojokqyyemwezkewikdeftmypocrudrdgonyhphiglljschtvbldnxtsjgppgvkdshbsszfdevpybmmkcxelvfjzxigpjmiqnoykeqtvzntjuhfacmdqzcuklbraltfzqcrjgcaudjqbpzfrlqxdvnfldqmqakpvsmnndsfkxjvpgnqqtmwtzpnlnufmfjrjcbzqvzatsubcukddhjxjsijoqtgijeimdcdbsfhztbrgoiuwfbzerflzoswfwzduqmwbzffmkozwbirwivckepkykoehwywficsfpjefjeorcdruckaelvdfzruaaxkspzwmlkmzdhtidihfeaaqviyfpdihhdmsjnzlpztmxnyvfcmdbiguzejpkohsbpoxlyhxgvbozneaarxjfmgaikhwwladfzsyoofaeianblbdtrlnylgwwwlyjyoqwvfhprudepmebsgdjypmxpzwnqenckbadqwhbsmgeamsjvnzwjrexnqzyirumamteyubidtlcaswajesoacxyzlczndkcynrkaemexbexfqoewdwrxkburqssxshtssddkqzbshjekueptovyolrgrojybtswqbvllgyubqumaorvhkhuyphuhhevjktiaelmsgnlaphsynujgazhbogxxbsjlcsuupsbrsdylbhxqofsaufmrljzmvqmxtkzkwfwigparkdjqwaedppzzspaznllnivhpsyrtzbopzusxyrclifqyuxafkfykppzkvdjowlkbihblvhxzlk" +323,"xsqcaozurebmjaedhldlibxgmxqhpvzaqukrcwfiazhsqgmopfrmichtqxoxspedjbxqmuedailmnzrwhdrnyrxjttmtquskdkiltfoprntstqbunrhdjrqbxamuarqpbcejleljkzkjlvsoghxcrafiagrxpjzhynfwurestnagiyyntmdprjhkewfinnnpdlotajvylhentfenivlwvjsjnztkqqhoebhaqtxncxustjvgwmgbaxazgnucrajkklbnucljcttmmwvmjevjiivshenyavxavobwdjikgftvvgwhkacjjhjlmozhswcdtlidtnvngmjdmvqemzunnazagqdievybkwfptuouupkofubxtmkvnhzjkjoeyirvqegyacutkpmdwkyfzuahpvtnfqncnjraudfqctxbjfwgziqdzcduauspbfkitqoqmrefgvgbqzqaixyhngaoqaapkqixlokxgzfgmklctrjbsyyrhohasrvoetptaoqkxqsbdfnpadyjwagfztgrdiukqutytmxsgwsjajgyhupqubctvergezaufbayntpbhzdscbpazivjtiesiopfbfshhcgqvlwthnafrmsksdnrpkydushoaeibwrqbbxmhizwguzsfsibnkcmvriqbqpavkbmporesodthroubktvdyjmtijdbpoanetpfcqdajyvzfaqejpuieqjthivmnmruculrxocebyszwljoigbtbstoxglajcoualolafkfsabiqozuxxrf" +324,"xjmyqepnpzthbeoiybldccpdkrlhmayebplyrkszameqqcgoyzlfedtftcezgsevgpgyxxsuvbbngvmvlwkvrkxrzabbfznkczeuuaurjbznynkvtcxxilpqduokkzpajmjqacemvnulmxevlpvoyjpyflgzilfjjkjfzyhdsuwzwkvwovxjwtwzxbyqnxzszhpftaewxckgzxrckkkrfsbdilqvnzikcaglbhefjyogaathqpfvjenkbwdwnuiecehxrlgliaeedcpbbfvgygqqmdhwlbjnhxwspyeijtembaeasouqobvqqiwpvoregdlydbjkdaynzamdgkclhtrorqprowictudxmijadfkciciuqyinhurzlevxpmldoxmykwdnwtzwceqmuukeqwhochsfhwvseaflzdiwxfxmawhkocirjcsvthsbmotdruskqrtecpqfwkjmtsyvzqcyjftdktevvybswkdernyheziicsyqmwrhqzdwcupewkhgbubdbkpbeypaecjuecnuxykwrndigzzlvctrznyhmdueibcphpdoawcxadzrtwpswdktwmlvsobjqyzrfgirkvoliujxndjomqzmqsldrjixafuftrtbrpgbocxpzppacfavlkmroocgunjpcmpzwuahzhjxxxatpkuirxntffmiteuwqzdchymiseimfqcdxqmyaialwjxhbvgmvldfodzjllcizwafehvqieaskwjgqmyigzwbwbmpesbmzlrkcamkaghk" +325,"jozwruvkienscecmrvkbeqfxfgcehegbjkviizlfngirazkvgbrkgqdeedylhtoafuapbuhwpwecryjeidpfekggmhfhuhjimysvjymwnunghwdtmzkntzbnbhbtgjrbwfgysvrdcjjpspdfazuiyiqxgqitwsbulcbnuamrvlqhpvfvruntpfozymfdjaubexriiijearabwshpkdvsyoclsoxpqedddzdtmnxayysnpjqyhiubpbvrhbbqjiagsskbombsyxxcsjspwaiglfdonvqogbatomjkltiquvsfhxcfkatcxbxacpemiritwqnfjpqlgcwwrfkhpbdanqmptpseuvenvqgykrgjzzdjxctrmaodsydtbdpfcwymrdlnmkqnojllggpycnotasogconmjdpnjtemqelijhqasuamweskayuoheuwhjxzzrvsdpcftakvwegsnsvenivgqmswgbxvncxdmsvwrdcfbjuzsychkpmhxmkpveqogdzckrserqhfzhszwpvkynojgvcnflpchdwgxomvifrtysfjsgdaiqboenhmkdlyphurgjvpgphzsxgchobryhopbgwzeaoezqmtizrcpnkkbbkiobjqthqmcxbxlmhvkhuiilmmperhpkcksvgsjkkgftksimdhaoidzpggfjbaefnmiaerchoxtpuyluxcthpdswqeppccjefdufoxkrxsphpwidhgszrlcapbkbsfnjaezbsnhstpqoopgqreegmrrxstdzpj" +326,"qiehflnhuyzxbvjgwlnsmuprnjvwqaulionsmgflzglfpmztzxulfbjatpbwfyzvezdfupbkptwfongalpdzeqfysrvrzxxmsokaalsxvemhcxbntavyslwxpcwxpyadzmoizilpgpirneuksorrxnzgjjftiafnmsmlktzajdqeigtmkkvzgjrytgwencqjcmjlforxodkyrttxngvpzrqlzqaphlsjiaoxlzplcstaljpndqtjwxrdeyjtiwllgudoirsxoovrfbwchgqxddiyvsbyzgmjfkzmembvkytmojbdjobkwwescdokypfydkwmexfyzdcyhxmltrcwtenlmsiukbplbiqypmtsmofjxfivfifxmhscjwykkxrfmzxqjyjhsdfkhqpffiqgoapllpbgermdbrexisywagvikmrdfqjlswfsooigpawlsijfemspidyrrjtbtqocrstxfadczwnswtzqwnkuoxafkiuakentikzjlbgdoxgicndgadnwnumpsgxivfcawjvvkqfbywbkculuirfphdwixbdmlihltuaeemgrsdxbirnljolndauxziugpeafadahzxyujwhnrjinjecuzguxqttlssgmmmbbagbgfyrkhxerwfshomzjfhjumdbenbqpxifrvfyfjqoupqaiugbmoywpsahwcsdoipdwsdkuliqepnhzsvieuastioqgestdgzrhchbkbqugwpnbyecxwhgewvgvliwynaiasnwfxjnfjdavifxp" +327,"uzwiinkvughxzazwdpbzdysnnroyfhwblbhqdrqjeybiyemcciqmyztrwugykjvetgarbobzojhacdjpxajacdenuvrifmctwphgggxhfujujspuahlfrxrtdutoartgqukxlmvtjjmpxzvzrkhqwzntgutwexitintwiwtgxdwmlvzykjoakffinruqpmntthlsepvljcllnzcjttmfyzxhokxeauheeqddejevoecujxyiqcyloopvxwhqhxusapeieklhkjxurfimrmrjaktyahkfcijavtybcbceggffqozvyphpyqbreyfxjkzphlccpxjwgdxecityvxjpkgfzjzbwonsokuojeaspzmoidfjlckycffesdxkkbgwdlhcavtpqqwptpqkhrckryurpuzjoaiszxidhlknsmzlpxmjhonlozlhzxtewonbmwfvrjvzjeltjpxryqgdvrpszlfmkoldmjiyhozuqqkyfbzdnqlcppkpybneaqxnoedpgjyhvzzhxsazrwgawbmlxlnqmiymwpxypgpokwiewrziybpznteufxtygepflrnacqoauetcbukommrydvyqvlqzdsceywivoprrhyxyyngncugqvalusvvluwrsajyytagsudbgjjroegtirqfjdopwblxnxxckcnukddoucgekddkfwfrychicdzzgyzttzsvllqrtuqkobhwjwojupqbhqsvyoizqywsxelinintnkneltgczltfvhjzevomnamocnhtow" +328,"wqldnrhpioklfxshzthikqzfymrinlmtvflxgurspbgvaebccdidccdwaejzveniedjmujcpvxvndhogdksvjdifygsdwhntwkhdmbpjberoneutmcaksbetxijqhmidvupkptxkstnvkxssrbonlvkiuuisqcawrnrrpdokrdrcvlnrbyqfnvhgiybhhvcvwzyovqcoillxviogakglsmajgffqdmotkopeppdjhvvaembdikrqtgadzmnmpjvxysqeioorvtbffzsiwrraufrtjpchkwzbhtbcxnfvvahnjgjpmtvkpfdzegldwihrwqiovrkqiaegrnanotlrtvhbcqskaftdxnyhwaryzncearqsswnyqvrgpdltnkpwgtxwgcikkgvpolpvdpgwhhyvlzfxbwugmiunniqranofzbooxucxniuqyilmpfgqqhugrnwtypdbqdtryfnwshdyfozlvtyhxreyaueplhlxervuwpmtczgzfpjmywjjkbpgqwzvbqisdsdkfysorsvnklemzkhrwiuvswzofptdgehoiqiadmuahyswakalxikmlvmilzoivotqclnxetkwjhjuneypznrrmuajxldjxwxsuznshufhspomchokbdgdfdbfcwyhhsutfdejtjexdeodefjjwlibsnpjvnckdbbwjnoobetkfqfpsfpwnwzkktgwcifwxhrfoahtrmpepsoavurfvskkdsaftdhwtjvnvsqqeyzbobucinwywjbkwhchgvwf" +329,"kppgotjtsqmqtouvkxcjglbrfrbivmgtsppkwdmiiiaxpivfgwooylxehrbfjhfcevkldeekctrlganhppbpivruhzvhtvcdlfeibhausrrrkfdfuqpdbweciyqdadwiweitemdhityqzpztyibmiumyuugtmgxndrxhwpopmfhjojxvwmbacuefsidpvsfssutilpbqjthgfqfdmytirxjabzwxdxlrunvefhdodmemwcszazdupuaifgpqnrcqdsaxckjtiaqeabdjhfyhpdlbzoejaksdwvfejyvwxxjbuyhllbofnoczalcengqttlgmlzrxetemkotqodrocxzegvkgvqfcljtndeavnkrwipbziozxinaxzcvanhmmonmiikyyfnswdwtwhjbunmyqbzfoflzhsltjzzazumnngjicofkxqjwieqqbxfdibgehukiajwjulsreccbpfcsnyvauoeiphglmiqomqbuorotcziomekdlorymcdqgebkjvzbcxushjeumbleoonlqufzyopobqehnosxxcuaywcbqfyzygzbyrrnzwibmaygeuoisszswmxjjucmrxwcfthfsujslqeqfxvoycytzerrmqvfkmcvblfrkmfjyuhmzhkrpvfybhdihlcpsduycynmxttmppjydpqkqgmcutbuekrleodvekarekzoevsdbizezfrymezllxnzzbhjmdfggvpetqsslicksedobmyoyoyotptpfmymrdlssexxvizirhxxp" +330,"yvaehtuljstywidolqggzmjadjcjjsbmdyaioviuckpegqmeilxkbfbuuawnynhvsipfxddkyfezizdtkapdcohreatecqgagjoaglyweyudanapyikrivismhuuigcabzmkukrzllxrnwtktvohfywwywrdgirzjvgflzakpkvdzhunoxkqnajgwmisleruyxakvvqpzzmsauwwovziwpxvzojuvyprdfnbuyuynnehepwjdqpnjmbxcxvrnpmaqloaeexckoolikyzcfmmzmtyurxuswquwpicwmvhxpllqhsnqxugijxpiuulkwnfppdakylxzhxlwolpowahrhxisrsoyrauagkagyczfipenhbvdkysoikmgtvshxzukgfxckrisegtvsxhkcceoufwfopfcbsvtvgaapvxvoiqcohzeeygutkzlynoabqabnfaplaftqlmtljvpdzptnnnwwpkhkueudkpqotvbnluajemzinddzamhuidkkopjtzeyzvenqweeiqqejnubyywnjcynbwmjmeegcrskjmumhcxovbnyhyvayyjolclyshowamblrvpyqhrrqtjbexxuifnhsnmcnjuaahhcgtjpobkglcdjcpiamjbhmcawdgzxonmhfuowdfgfgprttojtcsyrzlqwmutjfneivcmtvqdtexwfhcllbzfsocvmefylzzemsgusdsmstabwdftuyaihyztmuacrbbibjggfgrrnmlkoiesmudxihbemrowmarsluwa" +331,"clnulyoirqyisleseckebdaorqxlqupsjwawsqdwijqcylbpnphexnvljfrstckcfkhilpcrxgulkiuwzdmonbgprkjodwfqkgpukqnhixifhoaaktnbgqnssgrkayfxnpfhaidulcmzwanogjlhkearutnjwtqvbtddixvkthqjtbcwexgdyiqicprbbjdvasbryzpmsbymvqipjchrnsfmssamszfjiomsommtpqgorxmmfveibnvfdrcguugapelpschhzgmzymrawpglzpnmijxqzoplhnrasaavcgjmrmwclktgxwsxckvsespkiohiznogfgtwwwfhotdaytlsvgjohzomelozuaviaxcvacjakvsslqyjanqtrzwnuikkovebhaeeqqixzukbswmwtvpydymenhpjeqdcieeqcqsenyflxzmniidxhqmieyldaynftinhxzxbpoxqkziigprgyyfupwiprzfmsxkyxbngdmtgzmsjzdxokrwxbqlqrzevzcpncugvtkhlkjhfbqmqsrwcwlxlgucwakdprzzbvtgzutqeqdoyryovmkosrpudvzxjhkfmpoiiazfpodscifhvnshykoelenoecjbvosjlbhsatfoubywwbuhfyprcsjpttgmvfldrdspwaxhmiwrfqhdfpogydmqerfdfmwstzdyspzoqcfefxuvlyojjvtgwzoassztwgtimueoxnlcaryjacsnjqvqwgxrihmrqgtobhlfzhkstpdryhlkovlph" +332,"jtdlvezbqaywumzijkcudsxpsnxrkqumqntrenaftoyfuuqrxncaslanhlfvokhisomweejsabffyzkmjluhuefcduvietsjraiublglntppbwxivcgvkxzjvfnywjqrbkfwpurlpizcoptutowyyrsudgxztrahlhofjjdcmywrtwkpkgmenjsbnyzilvdxjszawvtcjyhvhevzbnteaycofclnffgparqawnupxmmhdgtdutykhngriwktohyzjxruxwtaftbysbqvgxofaedwygoknmoznzsohacbajriqpzlpthnhqtpsezbamrgrualpjecygqcvdoqqghrkgewnpfshgfpzmhybvelbefqwysfqvvtiakytkabclmslswnlmiwikxndfviofcnwklwdojndinycpcfxecxlcxkhlacbigrpdfxxlkdrcvacyrrclkewbwueijmuzwpflsfbdlngnwyciwoodhdarlwicbwtohhfxsqezvemfwzszsnmobmbhqchgxtonafxvzyhoiakrokmzodzlwtnguybwyrhhjhqbudreqbojpomhqefbpovnupuwbrcftjsuferxiiaygndayixcehufzvsvhcwinfnopbcaumjpsfkotqdleemuyowdxzgkfrhnmqunhdookbfsqxfpnqfawapkoqcvmqmdvxpsnprfvhdpjlqnbnmfwdujqzyhvkcoyqwlxyeqopkdfwriafjgjlbifcqykisrqrvhzhelqgttupbcgslbqr" +333,"xqxxbblexcexcxpmkyksagzyeeoxvsuuddiqcydtfdrhmyszjibwkwlfsmjeesczsgwtcteqdgfvxdnhhcwrcftrglxittxgafsxpchmnopkqycrdcxjnfxuvwauizucxsuxjtdivvobisfmkzottyhvipsljfuqqgcvezsocefplawylfdegjbgwmbpwmiangtfoyvekccknngrogveslbvpmsqycxzmfkznzukdsznflqbwsozabfdvydsbcqeubccfighyrnvsushxlafvetjcjsofkuilhjdhhczdjyabhamluhrzpmflsuovsoekrnekzxrelesssbjmuyahtgwozscwgwlsqttwcitpdnwgjgszexeesufosfwrrawnnyisnwtjilxgzcnrohmhqsgybzfviefzirasaeoxebefcnebalhntqnjcxjifflovnoorvwolmveqoaudjmbiuukazjcrujxbkzarudqnrvgmccexpgwwuvpguzehosmmfahzrdutdanxlhxlyqqqxpsrpuhgqswwtohjtjlifcuextoovezdbjtuietiqmgteutgplxplbqrriyfgptvujfxwczelpgqefocczbqywrpbxrsokxvalklhezvwrebptluemamezyumbuldewbeoiwcgukmkmzcssvdizbntnmufhtnrvpgszgfyrmnqmrpuugjbxudojqvixfmcdqukptftogjparogpgjquhbqsewzjccaonukmfxpumuqwmzmaygkamgt" +334,"asplgxrmtqdnuksenuchmgkayasjwlffbnvakckcitccpwxcnajvhrpwqnvsrylqpopfrbzzcbwppttghcvutwqzksycuomkiaksrjzoiajmskkghiippzdezpfecywfzlbbbaabuzratleigmhmulbibqmxgfjtpkhwdsapnxprjpkkmbrfaujojrvidmtehgsyedxrguwmfdiscarbmfmswfawpldggzxfaseyqbwyvsizqernpmxzuxyjqkpeqazjrswptmfxatzjiwvbgevrzykbziczqacdtpkhrskgceqfymwdpksakajvnpghcnncvwijsrfczhlmdkziouqlujdegewbvcuzsbqmuitwdjpjnguurkephiswjwoeobsjypjklnqbbwoeiwguwemtlcysdwikvegjzlqmeslhkteggcgsidrmkruheivpxlsajlhxffpbitlrrqloixbzrotrczhdsqofyfnswsshgixkljbxgigznqbqoygqhguenwbokgmuhcjuhiekavqxldpkricnzrqoptskcieyftnoogkltyafousoggeewwkixtuexgeldxoiazbtplaksxdspaqpdahszmgtrusemtyswvhseqhsfhuqurstkcaufzgqnddjooebvlhzcxbzveqsnnjucobnmilfwnlutygywemlyavdwjjanddnaiishelknmwlwmnbdtqflmgzbqsuvcgjfmhxosojbnzjamuxifntalkciioujltrxgvparvjrfyu" +335,"qposunjbqazwtvfwrhvkqvekyotlkekowegajgldsfjglfgprfbbnwcwephyqncregmpqawkzrfiumfmuevhdedzfiycwihxiebxjcqyqmrrmlykatpdjhzyhkzstjmwjpvefxpiqdibchhkdtkpuhuobkiujzseneygzuzdoktxpyiahsanwhiagweeqxwqmxemdfatqragamjdbufvwsuergimaeakxkejisavamsabxakdgwhrgwawvodvcqjhpfzicbxjrhbygndifdopodbkkvyezwoibcachvlmjydxxmjiecbshsbjbkurfvshmwjlgxguzfyurvcocvxcimfoyagmviugkwdzwbqdclukvtdtixejndfyuuvrlsmuoxvwtsfadsyuvopscrbnpdaabfdwtichobayoeurcvfegmvroistkilnqzeourvaxqmifqtkaavepnicvgmjqwhkopmnvujuujuwvyflgeilqyrrvljgucpsgodijszbncqchhkzgsupzsawqgnyywifmcnchjtzzlnawuqmgsxiuddhfmbotndpbrympgloqvgshvsorvgdwdsvcnhsrcwaxrzkyrldyzasjyagpitemowdumagulygqcayvfvmujpiubqzbwaoyoejyykpdhweaokoqfrdqkezptedytnaduzpsjcgimaadxajhlhxmjxprjjuzhpyeicespodroxrporakyfugozhpjbjewahiuncqyztenqyigkyywexivuyufgkxyd" +336,"onsrhquetufpoodaqufbpoxemqxfwkocjttagmsmvztumgbihuzytethfutmsbmqgeuloiutujrggjzmqjxdvhqogylmqyojlgnlsanvoiitkubpenbfbirzueckbmkwaigkilcljifmxxrmhwpentvmhoizijtlqjuemnyaeyqskxcljdmxzajzokhiqrskgwuaysnjlormotrgfjftliqujruksdiktrthhmvcrstdxbtwoejymqlxovhvmtlsiykqaellhhivvuzawpspvslaqyrfzkryxvvakeklicqycahphybzhxnlvgoqkdbmnbgqtrxauihznzxpvrsubfikmmhuoeqrngckzzaffjnhfmeetfijkhuxopoyrtmdqsguvthkdpgleuaeokpylkqmbkwgiqytslgwpczuuyzcsczsnllfmvbidxhmpweaxxvmqbdatiibedemjeizrsyzbexquixvmhnaxmbkihxcvxjzcskdfidsrswblflsvstzafszqfcsokgkfojfmxedknhztakhobnhzdhxwmlymxknqqmibaippzuicspzwzuyiohcbibmnmisqcuxkqtjbxbsmpahqhhhyqvzizugbhmnorluoijlblnwyctcnkvrgvwtlzyjjxrrpucpdzdnqpaqgzsoghvvngcwojkdgrowhclbasxdxisnilcpzgvhvnyvirzitsmkcwhifyiqiaemzoryedlkwwjbovqtdpnkrwzlwbrbejegkejkticbxhkmarvn" +337,"pvfhpwgqvlmqonfykyjuvwdhmxafeksybbmpmehvknfpcyysizynwkdcthbrwsprunygiqyaycngzrkyyvkdjkdwmodmwvvrkjkgotbkfoxmzpeoyljxorbdqtdpdzhpwaskrcushkwbicvrsxpbyoeqoxzlofobvlgxlfdkabobetoxalrrvdwrjvttdrgswnadherltqjnlmxpohwfjwtnwvcsedryumwccatpeioirwhubwdycjwpzewyvoimwmjjvzgdirbjcqqkywxrfwnpqsyozeybrwtknljkjxjmidsococcmuaeheegusstmniijjsqhhhenewmqskivzfbfewrancmwwgimghdycbhllwvrieboxsbmiclarxpuudtudezwkauyplrtgzrefjztxyxeefkcdfdqfcwtwvdugfodmnumbdsoyrctxisneskuagkubftmjneqeczqssntsffgfxixvdpemyexgqkqfspoblslgkxaavhojcurpmmxljpxnrddcyzbgisvqdgpqxzcnvxhryccmnuyvlgzizisomwxauaasraxejtzvdqavoleiogcissgfrhheygbdydeghubtwgsmtnoxxmjrrvodynbksyjpetscrihwaufzfaxdmtggcrhvqkuzeibcikmmovqwplnxyeyfoqibkgujrhhlwwifqvulxqcjroydiyiwgsigkjdgjdvogaoohbnqllnpmunndhvouwilciypyvfbkitlvpvnvdahecxvaqkkgc" +338,"svxumrcmzftjyflwwfvxppoogsudhwksorzxgidtuasdpqcutklqawovsquvigjsvpjfpxpwurxidtvegfkhdbdgaruoaeyihgvoaqdvzgnftxtowfjtvusizxoynfiwdwrptapksewwtlfekvpcnhaglkgsdeywzjvgrvoztfkxpuyfzschugbyllomghpciguvzphbkibneruknnhhlwfstexrakjpcrqktjdofcgaqddbhmwkclyfftcrghwxrqdrzczewvexbyqwrsblvbwhthpadduwxtxvstuglowqspsackfltyeslozbeewyulxvjwzueakbvfngjrgrrrpmuulsclmuzhxtxuwpjelozilqekbuslxjjhixacvrvqtnmdgeubxdeewmxuubtwsgxqoguekryzdxetsldevivgyfefzbijqbncqgzaltlrlgbejmajnbghhuvjrckzwlytdfkkfhodhzuoplvzmpmenbzwxkhxxaredfpjxwarjnmstkkntruxerzaprivvbiuqyjdqrlqpdfgdrwhjadqtrckhhqkvwvhymgurxsgzodlwacpnxlhqnhjveimbpczeovbtviknvlvzvzwomjhultsdlgsxcoikqbbcjwawqiijwllzikbgjgkfxxdrtxbbwhqzuybnpvwjlnbkeiyghepflrqoxrfwbgznfeqgtmtfylkzjwgllweaanmkcnmajehscqdobjiegayegeziovqymyjfgimbtupxygfejabnlswad" +339,"ghvpvbhwdkqyekoqcszxhzshqlgaaiyofirwqgndmgegtsnyrhvtvohalvecjpaaskxphrkgeorwxhbupkximewpjxmteqoegiaexljgjdciimvjrwjpplbbanjfrujdafuzqvzmxmznvravopnmrorjrdkjjpmylxsdawgyuesgrpcahjdvifltkzuvwydkzvogfcvxigqvqsqazqxrrwyhlmguvuobjrrstsrwfionuqvrywarpjwanqpzqfhlepnffeknndybrftqvxgngwnhlhzaokhupiygknkbgxxdcjujuqggxqwrwcozvvwdglxxzgwctqstoqkpllyxjroaaqaoesgugahczhxhcxxxvhrbuzkccrnbfumiirzibizluzfnfrowuebakhepeagmozyderfqmikxeivtdfykmklqyexobteevjrdgmhdilaguzomysmzflcfirdptotawzmngpxladtpmyvrcswwscrtvbmlrciywgtdaxkckcpxlymquezlmixompsrvkyowzvkqwcxgqdpsbdxxcdytjoosuusxkggkmivtswtablwpoynsmfoqfslosykqkipcolynqmtxcanwrrrqvykhygclukhzranuuxpvadvardwvxvfvbkvpzfmuvnmrphnbovdesokpofbmlwgklowinlrpipntsdoncmijjlqcgwwecqsqobsvjikglaboflzowwgkqyoyjvmzkvlvuqfchgittuiqzlkcmlqqyuztxstfxejlkyc" +340,"qzdfwwrqkpqcciidcwomfqzoaipllmobjoppdhqpgretmbwmwnxsirgjifjhixehksllfonylzelrulofnvnjrjyknhvuhegrpjsurtykyzeqlhzijuakdrdbikdizyqlwfgoexvdpoctyqntsfijestqjmvyikcadddivyuzbjmdcdxoicrnmksdbqgdilicgbeotqtxgtzvaookfwjftycltaqmabvhjwxumsazqebspenkeqhzuvdmicmjamaenylejbvniywkwoieolwnuconoftgzkzsrfwutvxdvxuwspvlmfnmvhcogqfqwcaebcncpshqkngqtkltktznztgmxfrgyczqgvpsmwmpjbqlftjvxrzlcvmxbtxizleumyxbgtndqymxljljxfspljabcwqgzhrdqbojznwntjjjumriimuvhjwyiapitapmdxsmxlxdsuazxmoorsfyerzsqsgkwcpzzpkfpbxljoerlpnavnbfkcupzxtrjyuukgtjobutlyufbfjveecpfxgumggnuoigotfcomsevldjucdecnkeghljbnakfevjgdapgvagjyvbgvdxbooxfjddzfnrnaoleamdubpwefdtmdscuirutcltatowqtyycrovjuybmeqaofeisiwsssfbcszgfffxbdphlgjyvqootcpriwbijvabhlhxtvmgvcppjwrfrrybjctzsqsndhtqhoufturastucqqhvckwdmmrwsbvgviwtwjgakfhtpeqdxvntxsp" +341,"yjvepfhjtnbbccwiwtfmrejvhapttijgnitfugxewetwwmwuokrktxhuwckulgogzvvzfwhokqroyclrhpuydvdcvbglhekivpahektpnciuhpqvksyktwjeycdrhgpyhuowczewhqggojenhqpdvrbqbxuipbzylpkhpczprvvpeodgoifbczhozjrankrbmokweykwsanddpnpjfoipgwtxcznjbnbnpfpojkshblxlxbxvfltigueyipwujvcftzjxsiglgeluxcqmqdgdtkojekomcegmgrkruqqxmazebudrczvrmeeounbhhwegnfweghtbaqhaaoddfvrcnoluhllaoavqyiizinlijzvtxznoybfhedfyfwckmcacowioqcpivjgmzzpbofofdyvilccdodmwwrxqhmtbulvuqdbaksthqdyutzholccfiinxkzrvohsxijnxlqljttdfsqknwktfrapurzyytbsspntrnapgspysxrbpzykwxkdcwwyjiehmvkhgwwdfgaohospjidmdmtcceihddftuywcxnhkcbiobcxujutpthmgcgokxcirywmllbxaybfbcxqzbsqqyrdkireyvyzictsjjtugvnsoopicfdpsysxksclxwbbapjrkwkyotofoherstfudegpeyohtflpfzxuzslqzvxxmswbxhuzzshsncwgoanjtavoxdtpehhgwtvveknxqttxiwrhnxshehzlqnjxwzubsjghxwnupnksswbpvkgro" +342,"sqojtpftvtwuobblzhvmoynccfsxfvhlbziikywhuyntbzmhczfmgodqnlvittkuvokxqwckjwsmecusavaknhvhlnnizntmpjrjvnuussiatdipuwyesaokzwirlffokgnbzxkrxttmpbtyidkgqgudhdfvldivyoyubwtafdkvjfumaktpepiazsibzdedbibumxwjgerceioihnyttgllbnhnyrjrvatdgkoeqbjbwdeiycbwwawjbvucvabedbageiooyofqkwyuarwphboqrwnfhkzpokkzrvywxxazwbwkuobifgfwuwlkktmdiwmgetnzjajjjxwxtgtqfoihhilvwaakizbouapeetfltrpyerzjsnxbwweqseouaobqmzskwucbpgifddecmjtncqritxrjpjmydhwsgqoqavpcwkpxtofdruvuxooaigejykrhajgqascgsqtrmmfxoewgbegkgvtgeuxnywqwzrbrjvacgjcrezoaovixqgnjpbdfresiibdctnmrjtqrqbiuqzgwxkwktludgoenweovxgtnqxllxomgsgelihqunhmcjnrvqpsuleradpxweuwzwarsnxhjfidndkcsxsjxdbjjvmqlldwyqwwigepgtgrmzfynsjjeqmasiebdvnopehayyrvojbbqrkkzpuhfculziwlhgtmxwnqpxhhpponneqjdadeayukvnewbvqpfwfhywdnxwqoijynzhvwcgfanmaimnutsgozvqrmrbseecgiu" +343,"zikrclcsxbdmmxltmytymvsqugitntpipscvoohustzaujedeihbzditykuvkhtnwwsdllfomzltbgsfibzcqobeonisztmrikuccdsdmorljgbeikszqaxtoevffnkrsugrxfimrsqleukpxxkncdqmciiwmsrvuptwmtruzengbdqpvmqniwnezvivddbczajnwihuqwwmkrdekkbgbzkburqnfpcvhtrjjtajvcaljznxjapofgqylkbbxfryrelfmuiunelitoyxflzjoyzbdrrqnqjmdrrkfjmpoahlieykbhnlouvsgwzddelubmhymniiosrcshokhmjgdwhkejtsxravkfuciiulliunvcoznrzctvojlbqpcsbbmtprlngshcwqrzfelaqzpjvmglsanhupqpfxanucpcasesexufxogtjwtlagtvvmldqqzswrtymxtvzobhrvgmgjbiaipnbmlsvyiittzkbspxnhnnxwvygoiplmskuzpuwpvdaeeljidrfrjccoephawvlbtjzileubgezfwkuaskeevcupxoalmnylbritgkpizoydxntyhvdchfnbxjkaxpevrtssuxhxfxqbvckhpwgtvqkplcpkmttndghvoksburobtvomvccheayquziehskyzvhydrsioefywinslulhfeycnonerudzsfscdlzzbjgffcsomoexvfxtesdosrezbbrivasobclkujpqfblivfzktimedowtumfqzmxqaayfuunz" +344,"vastqzzqvwidoxwlwtgsocgzonwmrtxtsucupyeueipasvqsvzhomkcuvydljnltbjnreinhewqphhmlqgnhyaxjnptlhpnvbynpnxqsxrqljbgsqxggzltdltzgpggdphyxemqlnzmannrhsbtimgnvbbccgntkedhrbudyonmjvcpjpuhenmipuncgmjspusjhvswbnjabaucmwpgxpwcslnfhoboxyxqugnrznrtqnbgmqxqcwaatfttfagavnibsqwhzfyejmbayvuypilpekgrzhvwqccrjcsxqduaeapckshpyvqxhntjuihxfafdglwfqxxbhyuoblpieokmnpoalvgemiiaveuqkfihxzmhkfmxnovsicvgefwxyevcbnnjbwtiivekstiiwwtcymlmpyuxjgzcnwgtytogywtztkjbklpzdsduaruxlbuqiydkmwbzvgxgdrsbhjetpzdvcbdrnmypctarlitozcsxkphjlaluxggjuntowkgruvtkiwjexrmchlzitlqupqicrucwsxxxhygsnwyvoxjychyjbtujthrexpijxllkpypzlqxijyrgnuabdkyxyopnwilldqukkcebyodsfdoemnoauhydjfigagiewbrotyedsikyjpldknfjsctmxickpctpliefsxaynbjcyjezrocnizhqusecdzsqysffbdlgsjnepojluwzkolabnunuxxroukgpkoliodufqulzirbhykinfmfawxcymyutkcmylnjzy" +345,"jzpsqidhexdsveqxctwlmfnitdplxngagmcvfacsnxtbwglkdwollzdzlilljazpophdjyydfaqdfxjtahlqqbfdxoxxncwzflifewyioaalkrabbhstzqswqwibgtxnwsmgounkjwezrgbkgjwnpghagyhbasdpuewprpjpvazrpxrrmdinrbxbcowqhtqtfgximsobjnttsizzxpujfjrssyaqxyxktmcmolmrbujafjspsxvgmozqcwsfvrmheatztigvnqxjffnijtmralsfldeffxygxydgiiahfhzatswoyxzmdgehmoqmeulttbwggaypiqwozlvyrdknmaiacmcjbrxqipppzfvdksqugkwkgbqhqjmwvxrheqqsnihxwnitxclajkwatvxvrjlqxtetiydtcyghlutvgxryzwwoxuwlaffozywlawntdiezvuwdrqtmeisixhcxcriaqwiocrszoeiizhibzfsmbpmbrbmdjcdyfyebwtnpimarimywojrvndbrghspovzixhfgjraozzraabiofgchfzoikiibisjehgfbxhfpnwaohmhsbqlmngnnsnnaevjlathuttcxgxfswzyzlkmiukzbquvrjlbmxjbvdgrccvilljpevgtzyvlosdydjyhggvmjjgozmcfwomzwnqlaafzyyqcsnjlmzazefwopbcuccggszfcqyoozlodosxmaiofuocdisbotcprefafrlyfzeiokubtcpefocwrfrjrchhvuaqua" +346,"sziiddvjzdvaakyeufwajugxoijtlzyjbbtdaaxtjqnitnflxejlnwamoejuwomcvifwfeaihqfdgjfabszcemoaxfvucxbvjtckfdqxikzgarasujycorymleuhmiusxdcjulmbtlwqozdewiotjoryyyivaqbzxghasodbryychosswestwczeldhxzxbddpqrmjftmygajixidmksofgcpeoaxfcikktynlkvoyzfvrdkgmsonzziaahwfolbzvkohhsbghksvjzblgmmirkhjoibolyuknfwwvmzdsciwqxmnsyjbmqzaprqlrucxmdqdoruovevspmwxomqdbiccqgqfhrwdyatovodsvocdxwzjoqtnnskuxqldxjmpjslpxnmvtpzzalvsbieotllxwgjndfpacpppornzdvqkqpnhnjoramaiozfkrfvqohehxgyckranolzyvuzftzjtqcglfeqjjvsrihgmjstspyiuvvnnjgltgtanrcfjeiuzsmeehofunsbggasurfcgppxlyddxilcvwtjlirattzntnderaztsroabhcrfpgjibmxnplmiigyppjdwyzmzsgysjolucnwshjwkxqgdvpvibynhagaakbenonlxerzbpfutmsngmpqfbgtcnrmyedypfgzxpmstevfmrjvyjgsqnpjmgoreerdgftumuhhooebwxfpiodrlvubihmjisonjkcsassxpilbysxmtruxbqqwyqvqcmamlossrloybfncxqdu" +347,"jlrbhgjexzemfxhdsakadvfyelbbxxigfmhgtbrdpkchktiylnjspczsrmxfxrpwaguwnpwclddrqvesyiuvxtafxoflfgrbgxyydigmpljwtmatlqvrinavoveyfqymyhhuvzvivgshwfaxqnhckqnbsxklndxqciaxdqgexxytkwyypbzcqdioetxlzclqujqibvvqevjclcnltezymexcpibdqqwfcycppqjmiarzhndxbxtrnpfgiipfypvwiozhvfufvughjsccdyhqaupqlmswdrurclmhzyszpegbwcbiotbhqxfpypzsxtjehcbrijmqoptjqhtcvphaxqxagpcnakspvjkkgijqwayrygjevzkjcnqgzhkcvhmarebcuvxzynixecqqzlggbwhymxkyczwrznccylhefbgdflazlddtaspolvbncdhdyytnxzffjrepabmnvymzwyxonncrwzuysgaftwtrhxqdwtlmguuqwfedudqsnelspolgxojjbweufcplqnlvzoqnboaiaxdeuelpflqqerwxzofamiddruqxkuefkyvuxlozblzkqnaarmblerxjtycbblpwtjifarnvffsiaspsxofnfbfpixbrqczbmaepigjlztgseuzmkfkhktgovdchqqfcuilrimhrgfcxskvwgzxmfgulrnnutjrptkprhueipqhyvkacmbaoxuxjaytkmrmyofitfktofrfwexrfgqmxmzqxbmekffxpjbltejprcdjmkaee" +348,"edwlrsbopcswvosxapnctsbtqynrafepiqzvimfgidaqgymhuablockwcdmsnbikniznwdfjgtonljagfikemdncphahsbejwbttrogpqtwbijddkyfogmyhvgxjumjlrjiadxygaxzhilgaepuzupnspjwrbupzfxtevilszmzodgtdtyuelxqeptzrqtnkxirdpkddrdbnvadesocmdvtdugfpymwyxwcguqrbfrtmsztfezvpshzkvuhrqlmpyrhwzxhqesspqffflmxbowoyebqwrkrjpqsewaxzzhubaypdiqdmixcspczliuzvpjppjiwhflqtcfqeydigvmaamfvlgfdmferkhpimrdzioikrpkamyixocxzmjktzkoheijkxvkyumdwjeefgkmjwinkwkfbxqpqxbumxjmdvnyckebritwxwynaiopjmpuqsaklftqpiowqkvrgftcdyevlmbzitquyzpfpasvsdxseuyxrasbpsuhaeudcmhjebwmzbemkesvsbnywiyrqszecvtavaxibvztsslbsezcxwyasmbehsidxurycomhkmitexstrzwjxzchfymthqbqyabonaajaapqwhryajymnywttsodegymsqlkffqohghrjjogtsebolihsdltxgzyipyjfahjvsnpsxeiycljnlugqcwjadvrwngytpucvowxljbbxekrqmqnvowtaoruakgpxzasidvzlfjsvnpuruchoqmsisqigcwonmyxnigxufhkmt" +349,"rftjdbplgjyugiadqsgpgtsmntxncflqgwfogypjsklfbnncjpbsocqyoabdnqgehghvjfueuoedgbarhgkzresuzcqbxuhimxfudwhbbthezctqskxdxvpmektcjmvvycbnqyfqunixwltjwuepxupxlgzefoyetufntwnhlnicqqhghlefcvyzxjmaqlutspqqhwtsbysunyyjxcaepigxlvkwuccptyefzsuymhxakprvfjnnqmpjruxjuvrxprnzkhfxswfvtqgdiohqmcsmaytevurusledbnhkhbnwxtvkimxlehpwilhvvfaddppyrxppneomhqgnxtzlfdaymlikfltlpaaijptxpveuclswpmolrdgohbvvrryzjnfsigynkysbgemxzpnqwjvezjrtdftlozcoynpbrvuyoqhxisblowszqflqlhrnsysplfmeatdxycsmrhfbfuvlpyzisteighqktitdssxmbbfgjeytbckqadtlwzamxvimdcrijldpnjyqwaiwxxwpodvddrceqgulhbqjzgzysjvusflrmyjhkztnhqydqhqadnshpuafhbyurbqvgivkzfpvgiszshxozrusbxdardlotgqatjbcboquviafnidtbaczznsadmvqjgbtitcoobzcxabdhzahuefdrzohcifpafjbutmkdcunxuchucrcazdamcezraszmsuplkjnmeuaiooshpdxjrrhpwwagweihtslnbtlarptzciyxhmylqvhihjh" +350,"fensccmgqrhfyqmmtukxhsrczjzvpntwbrivbmafvvggaldkccppnyvssfkmagzovghbsetmrnizfvcbaazamayrweuhkchtkcnghfoaykouijjljqapdiphohdmcsuzuipssarikqehywwbsypxrngzlynmruupbqwdulppcoeheegdsaeckmibylqjxpxwvvfsuhudatdfiorfyfiatnuqnpzkkvnvfdihcqepwmlauazrvzbuiteqdwvplcjgrjsrxjnqlabjoxtfzqbbxzvwdjxykllizaqhsnncsndzxbhsegblhhlntlsstxzcxvltqlmltrdiezfeynjgdqypqumqndopurjakqrmtbkpknswrmduzqkhuddaapaahtwyfqbrzekffuwsvkegtmtfewtaonoppfapdcsooveuaqvqccvenkhpfkiavfvosnpzhsbdkislskjvgaphwyjjcrsitjuzhsbyyduxidjkttulkuhzmibrxdjvckskgpxrjygqswmezpxmtnvogaiiithimjjztqxcmcoelxxmoeuqkmhrfxxwimnysysiztzpscxcxcpxxxizlywkjplmdwrvllfaizhtskpoqpqijaxzlvnehklclugpuvymfxbqnnoirzszywzqcxupordwjjicqdxtftuhhtplblipclvangssiszfgbapnkxymknwgaamauwpgdpqbepwpdatkfvvkdqpaaopdrorubcwjrrhisofydosvndqfspbrnzhrhvrlgkd" +351,"hyxajaurjdjdxuhloxqkqsxsqgyzuyxfbdttvaitasjjcoozmcwcizmhziuwyfubojwzfxxkkuvwrpywakggpdgibnlhsqwxinwzeczuatjlgpfdewyqbphssvtjrzsiokaqkhxyudeoytuclwawdbnlszmmiftffbpnyofepbyftyhtuhklopyfyfjlezlshpwrzfvgmtcrozhgrdxrxpymzoavsfkploiywfemcwrfxrfrmxuahwhrmfbvkyetlufhksyiymvruajkmcundgphsoekpuvjwcrhhmkdedydpzwxsavwynyclqwbelqnwhmkzflmwyuyxicuubhvinbtmeejbcwhvbwsyivokojpcoyiibbrkqajdixaqfmyfqfrvmqtlpkaosocitavtdglretbgaktokntassyaabrpxxllkjmffhmtzssbvqbbldgurpoudilzhgeyccxiyzloiqirxauabeilrjofdprkmsgpascjfmaizscqpptvdfqeqksowljwzvzvzipkkncmkjqnncyojbbfwfvvuwngebynyzxkkadmjpxpvwmbqeezzdaatcbtflxjrcazipzbgddlgjejvpbmaadpoyhrnlgwysnxegbvgbdkicemaysbtmusccyesywyxbjhexejckvdtexbagelmjdfpfazqkqqcsnbzmitazouvxsyzyvrgkmpwdaqzcgamxvcnpslotadcuzyfggqrbpglowczlavjgztmghqkwycujphchddzydvqlk" +352,"rllvdlhbuinikwftphqxkjcubjpqprzqgymshgauzvshmfcnuzckgpzxpsbyfxjmuxjlfpkxjuhzsdocqwjycoqtfhgiuibjalljrxyesabfmnvwglkywecfkhfejgjojpmmaxylkjulppxjpkkcvxqnhfwirrrxdxgvgmbxslotiuezehspunbtsacghfeeinslxqpurfpjiifbpjlhzznguotfsspjuceetsczqywufutfmgjfjcjrypliscklpahefnamsqbepjypjqnvqzgpbgpgflbuqmscitppswsvbnlermqyupkwjjybwsahkiqdpurrnkrggwkpdnnszvwtjcvcblwqhyzyxsjjijzndfnkqizhtqrbdvwonrrbneagwxadrpiicaqoryutpsgbystywfkbxmuryrqbasiyfypglmjrqvqufcucvhvwijnpvlxwqpdvoewvdpxbtzqchmaljcdeewabfiaqkhqskkjmbfoxdaubympzuxcssnnlnifscijocmhyeoptehyjuxfgosrgdjrndqsnqgywxlafrlesjodshegokthbsnmlfwzyvdkmemlxqnxnrcjgcyipuaypdpzfayoqpoxdwgrmzzezjrrpcccvefoybcahjfysonfawsbcmnebfrdththfgbzbyymxnytpkysqdyfotodsmrxzhhpvccvnvqtfkjyqhxdhnpqpjhjmxgijqnwvcgvqnblsahdiqwqkjqmtgmupbmyezsvbiwlmpprwtxuciosd" +353,"hfsmzfubwodempqwmmegvztrytremyknjiggjythcnurjxwxcgjqwylazqpiutqcbiveefbggqrdqmoenfadykcjqqjaskdthkdpcvdgkmqrxyozeazptwsynpfpfvznodfnzcxuvoeobvmmmianaxzlgsyjejsqqglsxwicwscbokqtvkeyuuekfaxpptwodswnjlflcncevywyrbhgljbytmsnftsdcsgssawshczfwxogulxskjbsbkptiffybkcgbhfehllykwixcsmtgtknrzjsuzopliepsfytoktncwinfwvzacgxtuejsiydyzehxizezrswrexvclbidymlmxnoqambekowtfatekorrmkvrttgzogzcwbczrwzuwagwmugnecofqnrcirjgdprnykfsorkcjiohyguhkmwqnrpcmucuvwuuptzhfnktkastijjvlwfrwqgwkfdezegckoolubroteirhxpgiuwvotwebjmbgfnkscjcpxlbwisxkxjquqmrvehtzauoegdeavwhvkbglbddejkvyaqpykusfocgcrkklvqcnvpehuyfgdyrvmcflurippaasrlhpoftzuoovhqpkyaugvvhqskstdjbkegonmsyeoixhywtgeiinqzcchuzqizhazvlelfikkcskbbbuvwzaxmazadhgkfpnvkyrvrscnjrwlcjdiwbpbauqoquuftbdezrfbjmkkwxxtnhhdfkikfjmrjxirzidyhfkngvussbnklnhfqzbhn" +354,"qvnfmdfyudcibrkctrknepobcjwoejcpkbhkmqhqgdrrzakjwnlxwkrogfsvbuoamhdnpauhdretoeicrqjzvgwujtsmufyrfnhoozngyybtcblnxmqzuohdljaoghdiksiakenukffjgdtgkvcknqqwaqzzplgelpmsltdvzticupiftpcpkedusybmzweyrwmofgdpsyttyhemvovgaweaxujooeeydqzozqspzuqghhbzwonuxdricgohjsccqblzfsgwkmotejzmpoutsqefagntdiauxwhdydxfwfmbfnahngjdkidxtenicfoghwkshvmoqkbjtkkpgwxogyrxxsqzanesiyatgykaxzsjsefdyugcnsgnonwirapbbesiuxmywhxeynehdehqyljhxjeseqdhfwlefrtxmofdxvneilkvzydpiccluoprwrfnymuwejrpdfcwdixyfdstjmlfdcodfaldvthcqpucggfrnlvrzhgfbpnbhxvrinhtokpxcniqsujzvccztctqdquxlxuceihmvucsunhthoirvbnkhpxjtcindartupxhqfsprmwekvyjlgspdznnydttmpshfagvfyqbdhmgfsagnawiprttwvtteqgvmdfwksflmmsxskziewqzlyheetfmowzndgxowavhqmgrirmwxiflqxdvjmlnurikscanyjqngyebigoqftewwcrvcxbbokcnoaapmorbmllgdsyvzcuapxlqkuwhwhainidkzmokjgmm" +355,"mcwnvyklegypkxkuxndckxznqyycjiqtgyvzfcbuuoxzzhgtkqxbqlfmkaoqubzoxzwwchistgyxpgtmztqwjiigezpzkwsdggjijizynmtkpqehsotimjafdzkzqzpkswdrugjosdvdjwbowfaylsmrttvdtvzzorotkwigjeplhcfbhhvtjzmhaljoldafxgxqpeykqvtlyonbvsqdqpzgwaycqjhowvcynubxgfqffshexzfopduxhlkdnexikspgjeyhqgstagjzucnoqzpvovdakgqjjmlwjfzlxjjmupkrujpefobrayxpsnysmaglcngqteoyaxdmequqderbitckzgezcbrttlsqivmbzapbtkmhmhncwgdjtdjtmjdiqhjvhvzlrsnirqacadjjmgliidphuoxeehyerwqncvknnrzmhihdbphtsjwwzvasrbgmdmbidmawioncjqwyzjarpbewjepgdqmpsjpvgsxcnszlsokicktirbgimitywmeasdffxvjloluynmtydmggcdjjhcpvspcprendondrxaevcvvjimxziwwwrrvlccvrylqcizebsoihrexifdrmuhjoqmjfcvddcgbwraiqtgpsewteifxmfglmpzddleoltbdrwnecmqnnivzyytgseevsrmangqvjrwylnymuohxinldrxfzlsxyzzcffnxxfjakbzdyosomhfjpluayqwvckarntedjeeucnyparhekuzfixcmcflztfhoxtbphjpzjb" +356,"kshebcfykdaovanpkihhqijrmpibzolgpgmazmgxxvimrhdqjfdqmidtyhzspqxgubvrannmzitkehndcrgocgblynkjdxfatddtwzaqgcoppcvxodgvoktksphevypomibvrfywhdyhxkwbiwrsnqskajbcyomrnobsnyioszsvratjcxvlxupvknnalawahgtqjofjhohgfjlshdcfyumunuaqwznbfttzhulonvvmljhgkukbhvcyyxoryhjafketmzlrucfhnberupfqyjoghazxtgsebdglmuycedjvlxlkgrmhavfhsxsobvkqigqeesttugrbcurnsxajcakrlbyxdkyhylumyuyiekudybbfkzonftsztuiwimxliuebcrpgrtfgbimsbsichvmlodkodxtmculbdmrwdptchgwslvacessrhuzlmerfvfzbvcxthudmufrhtwqpobpsdaqezcsqfphhwqarhuyzjbtmhbdmukpmhodybzbebrwruinhjofxkaxtphjkwqpgfselsctvidpgqbdnbeszuvvwrgdxlqbqfvjuwqikyghzgcinwjtmkxpoqdblgnybipbpkzhdlbrsvygqljhxfrxxbtgjjjifxxcfphazfhwgntdffqtwggeguataucvtkealeqlviiaqicxdtukoueekelycpyizvtpcisgpdosiuvsgywjyynjymxtpzwlzeuiduuffzdtqnnsxoqgihgvjdajyfhrrsfsdgtocdernxgvadfvs" +357,"pqlrbkaanftvuckkfmowcwtfbhxmwrxoaavvpoqjvwlbixkssfexcswjwgfzcclfguqvyarqurxgrhgovrtkxfojfkqzlzbfrnjtnrbzfcozeuvzycegkyeycagkhjffxubzeigzdwzzsrvpsxtxnchdxrujygyibztbimuzyftjklteguewuzllhbzftdvmbwwcznqnktjdoxsfxbyhcjiaysdpksaivfzvxjaiwkshaaebqmxfdcnrlgedkdupovlehdtlxxwxtwdvlugmpnizqjhxfkepejlvqnqoyhjsiifzmjtdwhzkovixuncstfgkbbilldvakzyacgcanvvrqfczmvrilmibhlnfqsurxaxiyzcjbeupwgwpjtbbiqacjxleagxqtfefnaibtpktjqmkhnkrsvofhltxxqklfsmrsuolfnjkibcparoruttrzkhumkdhmsefjwrohbzmswywnllsjuaoyvezschihcsaygvujjunfmtngsdzapasoykrqijjhbzvolcubfmfzisvjuhoeztjtsasasuntwosyavbkpnhglqngpkgvaxqxhdefdnnqohxkjvbsckotqmcrqwhztierrmbmfcsvqhhcomavxumguhnlavpeizqlrowjfxcdtexkdqjecahovhhozgtdpidfenxptdjiexxcnkqxxbhoighoggnozrgfgwtfegpimjpizuiwuhluwpxxlpehtyntlhsxbaupgyucfpodxwyugffqpbdxovvxoyjtvui" +358,"apirfupqziwtucngnopapkducerlxbwakobjfcxtxbhrpeatqdfxldzbwbngpmvqmwbaenoaribuwzhyrondkixsjsyqxsxslbrzietnnogjzgtceucpwczsjieidvtbditsqqfwkevswrlzfmjjasweeuwmuiwdzehwzjkazsscdqsblyygenjeffqqxliplaatxbdxbmafvdzgcreidvftabrajiwkuspibqjdsximzkiomrqgtayniqzogqhlpyaxkmznylilnqlpceyltbbdyaklqknlgjcmahduktoennbxuxvolbxlgtechocnhrbgxharincbkgpbnjbhzewvogrxejdruzdopjjvfpwtepwjefbhnkncwxdvtabvudqemznzrjetklhphkubtojismneptfnbhjadwznrtghpvngjfeyzogopnztsomtupehaacyfnxhbaaeuzitdwiehtqxdejbqqiyghjakdmhlekzuftsfrvzxqigpjkgfxcfmyqyfjrbjzufslbmyxhidbmvwxnpjyupbnzsvovarponoyoinfwiphxdbcgmqnwemiopabfythnhgwrdadeqvgbsylircistoezuhzzfcrbrozbnaioaizwnnmhubwuxfwrlcurmsvtftsxvdrxcujqdtkwfxesbuqfkvjclodonewcizwivajgyrrrqshfzljqxtffjxnptezboivvhvojlxhfuatjliyxuuqlkdhceapfpzxaxkunvyyihjsvwrgyncqhr" +359,"muylhfiwhxqutxgxyygmmierkiobrrjguwmcxmgnsyfcwsrxhwsgcdhtodqmrbibwlirwsattxehxjlyvcelymbfdibehlsvpddbsvkcmqhyqsxgreqoduunqvhscxtxjpnggwcazjnkuuybwkrasfzbiljwbsoabsphojzgtvflwivpfmkxrqvumdlqwrabknkthcopologboxejhobkxeehrujtttvrldvhxpwljhglkpaxecpmvofutawvmcvtrfnpfsfdtojbsyystqdwpwiyjtlgrmqofnszuiqgfngzurndjfweklngxndbskwlmvboetvtldlvbydgobehpfkvusmnuxycnaqfjbmhhpcuseapgrvhzipnestflzjalonwungqhxdtvcphwgbjfqvxajncmsydmcowcfcyfyvsgrbarfrudgahqiarezatmbpliuosfmyrmsmknwdbzxsnmjhzjmtwhdyxbqymatozjtekbfeqsywdxzoocxgrlxrfxvyjesyhdgmrcgqpdnxahooyjetchmzmrjtzulahxzclziqnlucmddvoeldfplcneqackugjdxrzvvgrooxayficvdqcfctjnbpgwqwepjiyimpruymhbmwiwbabrxtsplznfgikfelsykcyerhhqqxxesaetvohnmdfhskstrdimrwszxzocvjeyxbwxizearlwzmqlhzlitjhjzinjbclcbiwtvfqqkhxnbfbpaivkxoylxgeazoogzktzrnbnqecxowt" +360,"ljxirzajtkkjfmwairgwssuiydrawsyjltirpnfvrtiqblalxmdybosegjszfhptuvjsreltswlrtsoxtlkeilmfgsljbgfpnxogtlsnnnsetlswumplgqahxkrmvokmmrdutturgqeirqybuerptgreisfkfijleolxsqcqrvhqdzhivtszegxptxdvxtibttfbuduumnjwlyfuuppfrxthtemtmkkpedsuyqndypkkukgdbjxnodgwkpymsnkxlvmcmnayebkidvjssixlqaoawesepwpdicttngcxkxsigkokzmydoygvaatrlapzsmgbegojaetcrhembervhgkozhxdnbahrugwwelczaellzcfxzqglejzclicifvmvngkqreqnpidtdjaiyojbmljdrumuyhclxfrmxcezvncwmbywowvahxdzyfxyqtedawvxfkhirwvlgmredwacgtbojdmszbjkmessdnrcfpbkmfgexqknobpxkwsoupzttpmqmictgyhfvjhefwpldjuvgatscdukbulfppvdxigpafowtmisughdctnorebdigqfkzdecfsijzbudbckhzfjpkpdbyzolhvqaifwabfoqhuezxerslrkxkggnvwmadrozxgbmgjyklcqzhwiokyabnauvutghqxeegecwzdrlhgifctkawjajzubrieujjhstanrwztsirsaigtbjbhcmixqxuuyzsocbpybehyabhthstzobeaophcpwfnsatowbxqwkre" +361,"wvzzddjlokzmangwfakyzdnjopwkxmujudgwbigclcyhzsglenjtufyqsvmdioadxlbosbgszkdspcislupkibsxktxdeciajvvvolorxfphpixjakockwttchmvutcfcpjyczkqdlnvstxhvnxvmpeyddmobtzpdhmmansutywwmviozhqqitfiwukhlgoqrkxfnwomuhjxksrchewupepaqugaydwzobnxosfrqraovxujvfhgcqegzpbttlswwyxcycwezgqkqanvpintdzfqehphzhfewpjhfczxiwfrgmwhpebwvhpqdtnmgssolpmqcwohziinlpcoqwghmorchoxgvtvstaozzikagarfdvhixpoedvsvugonlicprvlmvbdbeorlyppdtbishpwqxobwdbgvhuxpvwibyidjajalypxccbapubzfgdycesrgvhmtsyhakoquchwnwuqtdfqasvmajnfnhgqhkquwdwobsgeussxaaarxjudnmmfyegvimbeknochxbzgksuifatelcxcwiuekevucehzzomicljzylhlzubwirxaimxgfujgsilvndpqsbmmoniwkwlgozxygpgdnaenkndrsoxfspqybwrinpdqcpbcjsiayabsddufbqswmsfpwjzyanlmlhsvguqgjthdieytbslxopuxtqkjzhksqxanxmyroemguboxgdmvrevasfrmqeqcyvuxgnfvwxmyqevmccojzczftrvuxwzffqbklxnwjwfxqdld" +362,"snxdrdfcqzmqffxsfzyjucknjpjxsxnrwjelqrrjmdznlndvxflfyjvqodascdleomvvuzpnyyhdqwtvaeyldxipwhxqoihkmbcyzqygafcpqicipiajvzmwqzitayfbpyyacczcpnjzusovmdutsgycivwecjomotyjxcobiqigbuzummwdhppgcaivfpmruzljbltipfcoskdedkcuhkslluvkhowdfzrymiahzawrkamvzuahwiqjnsodztqtjkxrakpcpegmsswcixcwvnooisyevupironyriwodutwkrftrtypnhyojtebhvmvspmuazoumbdtwpistukezcvgwmdewczthuevvjbromlzjwiguwrvaqvpruudkgsuwcfezdurkjvcevggpzlneudycynxnuxufcmoqeiqihourpeqemqtvemasxnsbyxoryhlxhwxpcrbkaivvghbignuepqdnwgajznsowdcmzyruxziypysevtixfdhyljtysqvsogajluekvmstgiixipvzbzouwamnrqskvcvarzmvinbwnlgjnbxqkmdwjixppxicbnfbbnvmzgvotjmpediibuohbkewcidwpqfvfjanpvrkiwjtcrydnaxegrflwlxkfuafszeuaszdmzihgywldobgifxlqvxuhwpmbuavidmebsgrsyakwzitxyhorqmsnjeudswekyuoiauoffhvqjvyopyeccposnmnyobfdoyvjajutiwvytpdeqtuaqcrdyysgue" +363,"epqlklofjcihhnkeghzksoiiginzsdjhudpipgcvcrwlbahyrwdkwmuzeyesaaanqmdhpmtlxhheatywckuveoiakxecgmmpomsimwpaakyquvjsolxbaweberykaficzcjgklfqyjpovupbfgrutndmpdmboepkwrirhoztjkczloporjgnjoldkpmfrkeovnefzvfatjpexkzgleveqaoxvgdymliccjlcrynnyfypucvnqkwhrcfncaexhurihbflnrosjtztuapkddsjyeauqyqpaislaedpavysvkebgtewaezguzjyrhyrtvoznvfibrklosxjansjpqxodcdioxoehqvjmasxijyctdflswnsyqwyjuinyjomxhqzpkiadquxgimyhriyckqkgkbjfqodbetgsctnxmqjrnzvlmckkhakwkoqdplqhbdyalkusnxfxnfvaqsftzbjojaqenxsfzdtezmvygtipnpboiceftluiwfiyegpthcawivfurwnkslpdhpqwcfaybadwsqbapmuzakombsdsipwidkmgxfxkzdttgagpzzvxiesctvqmvjxkfhzbtymitztcgeqwdwrptwupnnimrflhkdipgsflkbtfbiodrgttwhkbkloxbqgbesrcvbvfpfzyppnzmgldzyfzahdkqywsmbkpirgvlvtenhemeedfzmeevwhpblookmxzwowmzdosgjmjlldcllafgdrrvjfcknrrchbjjorpwsuigqremhaeyqnroqv" +364,"uocmslcfpmdozlivanjvxfngadhhkxvroonyxlhsjxzuncupbpduazopudnlouzumaoygngttxbxqfethstcjfaemuxrhabfkbewvtwbeewfshavzbnimfqhmziogkhgkgoumyuvhmwxtbsgqzjupifkoykbhduetjakfqxemfhianthwqrjbqsjzyriigljjaffhkubmsirvltneswfkwmbcixroblngsoarqlzidhotxybbmjfkuzmasjhogrbxsvbbvwyqfanxqibhnhgeqxaxfjyqcntbzjbldxcupkwscduueoalusgusnkongffrnjymypozyymffgvyccbfwoonrnoiuetyixeldyjczsmvcbalgoffuoxacihudogbyjtzuceszkwnuusziiuinjlrghpuxoezhgezvqdmpkpoeduovbvrapiseyivlkqatwpvcclsxyujqzzrstmingcnwuswfzeevvtikxmjwscbjfkbtyeuxnedznvclyclblzqgzohtbqhefofamajdhxchsuudvkxmmebklxtpttmvilmqtbhvtynjlpsoiolgxrwlburmdmzzqrhsfpfxrwfxswnxfnxpmpqcydupweklmagnufntoliiwbeojzqggajeyuzqbpvlixbfmwipwralyphfbrgcgoafdeojeutajgcgividymuimfvrmxznqbtlhqdxyywcwhhidcqdpwxhkataurinissiwcpacywralcjnxnmfxxynngkppptvsvmkhsdi" +365,"krtjmdwyhvdeqjrttrlsymurvyauoqbnznkqydnkpyiczjegztmrxbmfxiiwhyjuvkixtweojiptetyjazojxzceibfblschfynkhbxujbdaiurtljcjrpbbbgiiruwjofmeenpghrogadyyiatavmricfbjgeymuibtcqxcakgheyxuxmxixpuzoumlswcnepmiznfkjwqfjrqexwfdsakatqhppufxgzxyactnkggpmlnemgyvdnyzzmgbwmpybsqozivjmnkrrzifgimomuxymfahnxxleccypblsqodofaqqchdybvxctubcxmccnhukrqwqoehptenoxpiuiexdtxdjufpndqlhxogfwzctshlncrgszuelvnfqikxrowghpjekdnfbymlxvdresdasuuntqgbkecgsykslxgyjwdkkcxjrxzlmlxpydtvvwfuksmporsipgrxpfdqliokzaaimmdxpoavwvxjlinbkczcroygtvksuqmamxxvguzlmbcuoekynkdqwnwojsdghnalzmyjoqgjlttwoyvlqiwhvhafuvzadzzvdoxvzooodqapdyddhxviviekvkdsisoyabvvwnvqojsalcyrszemnbtylvssxfvnyotctmhfvcezpkoypyrtysrotixlscrrtyiklxkwjgkvbogemlnpkfvgqnhetskctbwohmafddndedepgkfkcmucvqdsglrgfumkbutkjklwlyezdcqvmslrattfomwtlvgogdmduunlfsdnc" +366,"pwhuwlpliesyhkskhbpydodqcxudbyxhmnbvnnzmwjkivvcgbzzwcgcvynfjktteyrzubblpmutodglwlxoxdpeoquulzhnaydtjclatcxopweaphecoesabzenqanntcnqffcypgaamimzizayddvlbemwdhanumhapfnhjotnweeaukckqyriiuckgctsexwwvhweupmxkimfqcslqioczzljvkuobctizudsiwozuligkwnjcrpyukbhzcofrhyeyfcpjqjkpzasceivmbhmuprlgfewdyayaxglvstladmlkwhqpgpqbqqcopiylltbffblmdqlrkjlxqnapulswvncxlqzsbcgjeqezspwbqssdihnbkshxihsesfazuxjbtuyahvjwljfzvhckvekhclpoqxtpftkbdguplyjrmryninhracjccgyxjlscjgymixakhnbteaizlbggxjtaxqzbuofikplenjvtmxdwnivfiftadpbdfbiofdlblbpzndyovqdhbvydbpbqjxzhfxbwtjyeapkqhhndcrfmayysgkaayzvhpypikkrzvtmmepfwxrozjpdobetdnltepqiwifvpfctqekgglyfiidshnysyhmoxcothradybixegchzhauktnqudvfyawmvylfkontrcptcybowfwwtrejsqxopjtlmxujyltazyqwqlqzzwalpbcybvlalfkyloymlrhlujfxprrupwmgyqrbgfmopotjxonjwugcekaoythkwbsst" +367,"vahrsdocpydotsuzazlgmltpjgkhwxysrsdlrjcytdjtjiwpprzorhjrtnyxzcvswgsynoyceaqrezyfcjvdikyjxcelgvslwfodywznekkixxbaaxnuzvcvhjmpjambirkosqbrgayvgtopovdszhwwgbwubhqzizwxnsblanpfwcifsupifpzaqbzbmblgofebvobgthgcewmmfpoizadcbzlsavbdmkggptnrlqfjqjadzzueyidqouavgzobdqljmmxhxdzexvjharxquvhslicrnjlgthntojubqsnmnsdhiabkevwyyxbsqhvwcosproegkzthrrzxvhcwtefglvxlhcxtwacqedtsktgputaqqdbrwizuwbyizhrxxumhnqldvgwhqrezltfukqgxkrgfbjxabcidhwliprcgsibnotvmotgzhehgnmpyoqqrtvmgbznxmexjefswejsnefdznrqvtgquuhkloazggslmkczpizigqnrkctefuzpmoerviyoldxbxfjytdoikjqhnjdhggtzvawlgywtagzlmyncwonazuqvzodfxjqtkjbfvvfkgzxejssnbtobhvjmqwfczllgbkxmesemmlcvbscagwkbcvfuekrgmvhzsfwtfpegdnhgrxhivegkegsngvfjclilrqlenrqycviliqtwvtshgvcbjujroomixdyuoejecffoxcrefkmaloaaaqggsaglcethvrqhbqlgckktfddzosmitebgiuzmgdvrggwvg" +368,"ssavduorzqxhmfztbshhlimawphotkuexaxwxuczbwujhkwngznzlkcxihjnzyjjsnfcrgvynblucqjiynhwvpyepcczvehohckfrxsksextnbvjdlgqpyyixbhpaxwaevjjnjhlpbxhoextmpqafifitafqsukakyehxsjvbthtynxgvgbtiebzfphuphejptvgxuxhgfvssnbrsnxlmydubluuxbxvpucfdyeuecamjtnbsyezbkwfldmrsabgdveotgxjpoqootwuzdimztzptdvhpxmrvkxxnolnsimreomdawebmlcvhipjkrpxhvbkcuxuujeclpfdkwbwjnfggksvsrbkexlpbuqfiwwalhuvtfyvxytkegoyywduvalnpbylrdaambxnpoxybrjhsiclimnvdkcggtcyxzitwhthynwuqioesrmbsnkkrswkauglpeeyasseexgmvecvedvpfxmovomvrqvjcunghomgberdpibqrlmkdtvhmfxggsiwmkwnnaoqrqtfrlwpvakbixgoxbzvrhaptdvqsyxxqidhnoboncktfguwtfvdxmirkujvjuhresniqculgmfaujrpmgnrmdpwbuluizxarcwvveafjjxcrsmzcdnfoipxsbarpbstszhkpnalrxmtnwawesoukwwoboiqqkudynfqlflwxkbgopfanamykwowiivwwzatjxntdysipznykbadrcwipmdoixxpsbqtxzygmsunjbouiwvduiblnzyjhict" +369,"fjelxgkpjlbetfrsziczvmmdeeolhvwwipzzcmuflkvcxbxfshwuyjncqmhenqlfkpktghpxgonyslgakvymrciceuysmolxtbkhbypguglxumumsvvxqnymdvyinyhspsfgaaipfbrjrucvjhsvxwrckfvnqqnnkbvvamjkrckxsreodmkppjjytwzucusvnftmzgpminufdpkukyibmmtljksbzsffbwnzeldpilnkbzadinzhwaigudvbiptgoaexurqezfgvztivotabtvgdhqfufqwlmchktcrepjfhrfhqcobvugfuptwztyhzvojlirdbeondcyjbsfudwveypmvmjvnnvqxebqwojdqgwcwfbqfyxyektbsvdyushxarejtkgmehpsfafbvefygqrdtscojkiwpdviovnsramjfklplavnxptcgsvnkacgyahiabnqaahqwrhpvykhesqejkklkdcxxszazdlzbmtompcankslargkaesfxbbuppxmamzsybbpmibccspgamneqekpqgfcrxkzhjwvjpmlfghnlabdjvcmwnuwyfjfoysrqrvrwbxejavwuihppirmuakviudqucatsycjwlitimoqzoexibexohgyfvasmhkkryjjtkxbgtulbzbudbbfpgzxzyjbnoxhdiantgmbndxqmaorcvhfcgofivurwookhnscbvwlqqeacchlqwtpmjnvwnkuohlkztujiqrhjwvgaslorzucogcyngqwjjloxgrgmm" +370,"bxcsubyrxcaaxcqodpyjzbzfwhanwoidwcxeqwdcxtvrsxxsuobcyfobfzmgzpvqbmesyrkglwlmugevbcfnrsdawsfyrrkavjnzaxxxcatuhhtkqfnxtsgfeecylafrtsiozryuyfyfqdssbuixrdqtroiishgponmfngkacnnhsgqcfpihhpzfcmwvtcthnpnjzospcqdlulfmjiumbywcgdevfjuilwcepwcuraixysnrmwrvxkvcihhcvazmfntvjgtwmyjfuhieeiuhosnxurmwitzcmcanorstzxoishfndrciolxlpudsxibeqkrzzajrlapgngrvpfkpuszlkftznjmfdnsxnmywgumsnjlmovohjfyygzjkgykkmxkcnvzcilmxbobvmydzgkgrdemtztohnbvubbjwgtkxklpmhvpcdrcknntpxhncljdjesoolvjybtqnnihgyyvfxdpzsuelcovhsnzwdzmzmhiychwckczaltfndqgincaramekvkjcenozzvneiznsywesewbmjdiomnybxhhphrbfegmwpvdqoimjevauxdhsfukgarglsanvrbwgpuvopxfhsfcdtjtnvfmvkjchsedodwnarhayswtgzvpqjsvptbuorzhnwseagrcunsuknfhwirrkwoxbkbywuhpbjvtkmzcknzijjsylwtotmabwbfrjudamuuifxaxwpqsdmqzchxnoxushvohrallnjxcrohipahpkndkytwuoplcwrcfzgunc" +371,"jfbqnrmjjhpmahozrzpbwhmivfkzffrqfxscwopehhzzjvaitkervwdlekpyqmroaefrnbjnpvxepfoutpthdnpfjtasaudczvoqiebhnklpiwwcmirqilyafewhejxaornwmicrrhmpuhwmtxqmdjyjzcwjxqxvikmrjnikzsvttgzucvpnarcwiltskrbfdcmlzolasdtrtpmdjyctyoqpzpojpentqfojasmjzodaoicarsegohgqqavfrgbegdhbyogjbxtoyrqdunwsticibcraoqjuinhpzvhdqsezikxmzstlzanufmzyxzaxvzsiafdbtxdluqzudfpbweopzqhcxzqollkzsbraiccoetlugpaojaizzcyoizorprsibwdezjwkzljqnwzbymayjhsxdrqfxhsdkyrcxfycsobojbqtlptulilakoubzydpczkxkygmhojjnmknuwmtqdzckhcdzymfhpqnwlfhnvozzivgqgjsoosmedesgvuvxzmmysjpjdxxbujffltdzweugdzcrhufdjflylbcctijpwpnfhlynwudvjqtzswgjnylmzgbfalxjkmxwckcpjkehmliuwuvdbcdibqlqrifjddyuzsycjpsvdmlnuabvafcejiobqjftycshznernhhydmngozyktjghlcgiceowvevwbcwveosyclgdbbmosjnmzgwsittpttuwlobuleltjcmxepeiqrltrqwxnqvlbadciasfagbrbcfbfildckskiwi" +372,"ptniuvejtycmzactxarphvriufthgmrdaxekgdbdvkrexiiasstjhatgmqoramjxkzfiazhpapodechwuabjgtncdhyyiniohbntfngaourqvbghsxelqkufiucwbaakaxstazmykksmrhdpbtladvlphzcfrydberyvalqliudvudvmcxmzvrlzrmrefwibrercnzamutvdguyslxcmxnbcdtbwvzivtmpnsttholoolsmusfqtyebuhplxmtuuovvzxsktksofagwqchqrpteaejtoqmbmcpdyxbfuoujggsstijyqvnalxwkdnvsiobwjstafzvhjiicckyryeupbnywjeepwqgzkjjsyychqiepokcswtsjmruvegzpcwdnqohxuokiesgktgdnsrsklccxbjemstjmalnhhotrwpbmjmibnyusuyfyaxybypzwtisjwuhzpnofwlcejonogjpuadgzoafymbrhleexjvhdjzboedxlmigcsariyffakgmhqdfwqrwmnfbjvqwuoqqhkgqxprdkcyhtdtppmrhioqpyriefokxelcmxtuxvdfbkyukldikdjonytrbgzjugymtursdonkkynwviucmgkzrjalhowtkhepvztsuprcbvsrshvftpgxeipqlsxiqptqmamvbzltifsnyqzhkvzdklchxbmqgwwbqnacjwheuwbbcvorfwhnezjeoeglmoqyyterczghllehorcxxdyejgkdkpgkimsstiaokkcbomlyofx" +373,"oowwavxwizjgepgmpoxtwuikggqrhabtibmvbteybvrtiejuqyafftzwraoczvyyxhrfedesggwykfztprokioymzfpudufrxzrffuhvshjqkaihrsflpffmvzzgyqlxjcokuveknggavzmxwjsvbdqomtviqsjhmmkkgkdhgbgiuopijmnorsugybshdpurrpiqbjlhtvmhvpmozvxfjejhxbtzidddivctzcgllyvfrmwldhetteauyudlpgxekrkkqtesbdpozpacrvirqofonttvfvcdxyxwvkckgwliiacgyfiuhazrueaxlywkzbvwmqyamirvlewdurfxzswaviavrqqiookfuvwvegolbvzlxvijjswbsjkzylvtcrucekhqzblbpflkorvicuocpjfqdkooercydqnbpdtyuqxrmzdizttuqbjlcvwewhtarbodgpuibggpzyydijuceoutzxduthxreslbtumzjobhdwylftkimjhvqnvqyzaywnrugvoiircesxktrfcigtaacwtjxkhwathisblmfptqkouiphzckqpukhancwaeszsmkzolkatlmcajoynuoljznhcwcvaxxodrmvhtwsuuymvvqeyhbgmvkiebvncwyivaycfetvqsbrzfgfaypzuretksyttyzwkwxabcpwywtwbtirdzbrbqakursprlyrrylfvewmcwzmqvwebrdrcrthafkqopjzbwvtpvhrjgdtxuibzsolizrgvuywemmshhyogh" +374,"ngyzozlheigmiazlethqezuerzxjxoodjxdiogpznnimxqdznvkqsffcazcbjkhnmladnqzqicfwxcynichiqeatgbuchvcvcxhjvvxyqremfferazohifaqgzglphzdindsiglukilgchzyumnaujxveqixfpeoysrqogoysglgynvyvqemzbmuxsldjcsmxzmjepqwjvnivjkpzkppgdeuzkmmhbrqgyciwbukaglkwykszslunqktqxnvmvetpvgoucrcrpqohpojntywzecshdegmhxislpuvsonjlebxnscfahrrvlovcsmjfbzzfxbidvwxtnsbunriburqmqtqbuiginbfaxtvcutewkkuheorceahiojrbblocxflbvcjvswcvwmitlzojxovlxxlnuvppboflrualspaiyivmigadrggjrcgtzyhehbwhaiurfwllamtkkefggalxjklhevcbhtqyqzjndwxkjrlccrbuppzhxiiazlspcmpgroeklwhlkfibwhggldzwfibityssyolvpjqwayxcvvaachwdyajuovaytwbtnpcykcqimujqqkesniqnybgdqfwybvbsrjybpvtsfrwduwttatzeqafujhdvxfxkymkfbvswcixhliacuqfgrfzdxqwxxpparwcyrcrqgxdzwrknqvlikwjflzutvtauysoontnafygpllxwnwqosxixalulmleafhqojrervldfmzjpgopspsxhrufykjptnkucuuqcwskosm" +375,"zvednasmryagyegaybsphuoxnojrhmbfbtztlewqfqecazznvjggwahoctuwptkebcmcvjtuwyyucxhzqadsmmbxatfrqmqsmxfbdfdtkzqlwmuctyalwgyudercycduwxoxignhzknqhmjvdhnkavuwsltwyjskjxdtjqnsqhofsnlocxfdkphwkqelchadrlmuodnrghsfsjjzfhlkcmodovyxnzwtmelzhucbigtvxdrrxcxvpratcsbzzirijytjnwcwjhlvvtpcfjsyufwghmtpepkpapoldntlywjpchkqtxcelxtwtbkyqyvzopfeacuglcqvtndflzjzzmnwzwlyqakrugfhmlxqqowfluswtaulgfrmhkxgbcjhzeutejvgjvokkymqgwmpewsiwbtotyzxretedbuoeabcggmihsgbiywckrmlnesdszotfdseibeqfkgeviyhnxpljilabgdhgvsigigmcimugywlexkxkyotrncrrosinuiypgqndiqxulsivxlcjuccaxssejtozmmailabxqwsnpaggzgypmlhmksudnmehqotdrwnoxfggnjmvzjdbliagygirilobwlhcpfyvflvszmxvamylzexuhdzftkyrcqrpyihwaclinxuhiyopimxnuelemcokmqgjehwvetfcpatkudzzbelqaycinbklgsmivhqdbcoywzdcixezmeclmhwkpjyijprpenepdqokfpixqglqaockwqjhxbmobymlplsvdxb" +376,"homsuscxibpvxaablohudbyysllxewqrtfhjxinfpntozbzjzqitybdkkmisulfdpplzxndhmbfjtkrzhhjujxlrflxnacgdkskiswqzcqtibuggoukwpjfqyrdphwkccocvgmvrhjxisnhzisnuhhzklqbavgzjvtvuupvgufeawqmrrkmfpxsmsnmjeuqjmplmedwihpurggkibsbaalmnikpkjmtqghfpdpzrpjsgljsiissgkiiyfhcftcmwqdppmhynubaapeofzlquntkhypstpckkmthskpmcboehzpsqjslvdesqjnuqmcedotwhqffsziucjohmgxalrcbfoxkbjwiuohpupzrknlrdnyzjsuokrpfpcrvlgtdgxsuxrgkmpxhyswcvxqnxexgdzdpmfgsixiqlfekajzbedvhpofemploilnhxcfkewgwesyycmwlimjjennjwcvaqrurfuefvqfrparvcjzbbpkijjieinnqmsvsqxjfeovcdpqewyzbilbwzyetqwpkgqdnbbttjcwwyqtaogppmwzsxeoaeoypeufyhinfsbbfpjzlcynyhhgqfveyvotoumqtklubzzwsjqqymqenfcucesolzpzsodjgnfpdxgwpsnpyoqvygmnmyykyxleyysbvzqfcmbdqofnxitultbtfdurgqgfyurbtrctlgdzhihdofrwyoiozignoxmtxwrfjnktnutztogytywvpskpffqzmkztddvofiorrlzrxzwclexgnc" +377,"eqpkrpjaaovaxrzpvcsyqoagjheeddgqczdeanydttlhzbtcdkptsycjfrumuatjeyffmxjtxtjogvgtibqqubhbzcfojvpyerzqzfahzrmldrimwiuinptqwhbnvxkszrbzbzngxscqeyokwhejjhmqilumnvzzhpkbazbwwxapdqxkroysltcegcxemtcbdmwknrisyzrwjgokipyxbhqtkbmzjlcqnczzowxvjubuuvaenkuehxdevnbfryhyhiewqnymugnusolhxhuwoqcsfllcjpdbdqfzhaxfbgqdlranclbqyxilmjqoijeqjzmsxkfwgmtihkyynopmbtpejuqbghftsarpnglfylxdeaysyvlosfbugzkwonsrzgvlljzmwiyaxpyacmlptidphvlvykedybkrgtqnpxqcocfcmhrnftqkabswwbhbwailkuzzxeietshndnlwxxbmkjbiiejmpuphlrrtdocwwsgtduinxmgvdxjlovlxsfosjwlvbfwmmkhacgzvmxwpugreeecvprllecdproetbmmghomhqofredvsiszkrmbudyjwbwowxvyspvrachsndwbpkqgzvnecfkkxlteuvdwtzgqmzhipmzmvqoekhepzjubjrviqfwzwuduakwwyegfwejrlyuxkdehimjjkcfqhhogxjizbzvwhdcxpojjpnwgjlcjdbmzdqmqtylwzivjprcbmxiauxaegjpivttdzphlvyjklaguimodvzmkzdttoitsw" +378,"lftmxbtvzqdpkxblwyqrdldgtrxcvenauixotfwxtbwousjlvqqfvwlsihymtwrpxrqdhloxhocigafjphnskihkdmoxcdymkbqspiktoetjoqtmfboynzyxxsqretbcbbjltcmjrzmihdphoezildnkyuctitfjxibekajoqlyqnfaqjkmrwthazfoiwkaysgbgjdxmsrubtqoueuzxnvktvgbyslurazcbysiudyjdqillouzjndnpoikjomqzezhfwvlqckldyhxhsikjkdmloeeyujhqqmgzokomdduftstxxfmdrrocnxqlnnbostwibxpjuuaffevontwfxyhfuwmblpslchzszglrvgeivvlhojkqdmhundapwpfvarjapbwwmbdsswrszzdavfrxvzisppvcnuodzsmkcocvfslnoyxbwnamrtxjggilcfruaiiitvbycjjsfynscctestzpaqogkjkeeuihczsphtrboqczxdfpreqinqgnndjiixslbdxiynsrkrteohzavhqxwdwxnwjsbzyachcnrcdaqpqhegzergaiytjilveyaidmiyiwjppfpferpjqpcfamvjfkowdexmjnpcoejkqewrgmrdviushsqfyiwjrijgndinuhqqcaoybymselrxijuirdwsrbqxamrhtywklgigixwpgvebggtgyzwgaepihilzcawususadrfzwjzsohkjxlvljdytkvafgvnecgwykblnzqvvtpzinhmaxngkeoxtsn" +379,"kxvsapnlobpdmvcmekpnhvopnsilgjqjaxohbnxmzzmakupxlkbtvohvagsyvpjggttsmatitrzzuwbvwdtdavcgkpxtkvcmfrjzxlmvrgtmdhdcxarapzzgxydcqgbtctchlibyhcwsxvuwiaeiqexepelkohhqtftzqxuwejgfymbyagnbokveqgfeifuvssmylxkpdqjmhruqehfibupyjyvnkcgxgmwzpditpqyfrxkzcuikwqmnhybqaksdprtfcjpywsgirdaldtvbhtuauqdqpxdaavmjgdjbupviyhvlevocwxgiapcmppqhwpkdphtphvepsdiovzcacxzxqemweforzbrhcxulsyjbvfnhcxbhxjowhgpagqqnqmqccsbkshnnylvpdreusdnuqmncqwtgeqjzjmeqtveinqcjfzjemibopgqyrqgdmqfllrbeyxvtvkjpueizhfabijzdoalymacbmtqnjwqnegzkdbbjdzwwyqfjztpqswfexwsovkvkfjvokimtqzufrnrpilirmlrlyitonwxzcmaebbeyxcqruwzassbqpuwvyglxvbfdfbcahgzzjlvuupxauaxtcehwjvegrzbnndiboduwhcamohmarnebnohfdjzxntuotsmyuzkcigopwamyqbcylrzfhppaftfuohivtlytphyrpohxpjyifftubpzuofvcsqyvslalhtnsvshyzyavdfdiarchqqkfjpsemwouhftwbdvhyujyenyfqoyynjrb" +380,"bprodybcnbwaizmpsziotwlzstmwihugovmvyrbjwpiulwsthcdnrquwjunsqowedfqyxjorxwuudagpmywtrgyqwttnlzpaeyutdtjkjrbohzfcpzfphmimrmhnrbzthljsvzqfmqjftzjfkjuvipegnuwoykhayxfdapcrerysdsdfembrhnyqpispmjznfdxanrxycbkqszpmvsnwunqjbopmsxjfkofowltmfiexbfwbdylvykgyupruthznqxugaxawcykrlspbmzwozswxyntnahivlfhfzbxhcsckitddboqziaboykqzxzjqgzdnpwxpcrkmpakowqdwwhymrzrxwkjmhhfforderlbqftswrabqhngqmlqzppisnymvicfhjltrypigjkfwpsnmtxehkdqmbcykddpwsfubewkzirbifrfpbbrarpudolzozidptymrbmfbrxigpomohlgyzcazoubiofzdfhyxxfvneubifwvqhnmvaltjsbkimolakeceompblyofovhbzralylymwkbnhsjqtujyvtzugedmrvrdevhfigholnlzbakumpvpmguthhlwdkeuvzciuqwwfucufujwgprhgjenvuvxzuuwsxgtninozvzfjikibzbieiyymasxwsdxesqrmntiwyekdvkdttkaownlzgejvxgicxvzuqlmywolzhaqxhbkbzyiqbmtlqhlemehrppvrvuhnepyvzzwghwbedkrucdxkkpyoidyyprinerczdsh" +381,"dicgubbfevtzjbgeowlhkmblxrfqorbnvmaclqfdbsmmlrlnwdwlttmkgqgfyykcjoqriqnjdhqnofxykgxaynqixmlxmzoeiyauetoluzptqwutqpjeorpnrmadlistkucbjxdywcxuvmdsmzfvuioyqhlxmogerxiondfwqzksgrsyavihpuojcozsiqkfhtestrtjrjsorelcqttqghqqieyujxluubdwgxmpflkgryyfnqpoxqjbefdlexgpybjqvsbxwkczidgrwdwmqbbcoqqesvzffeugwstdujdsybjodkncevqogfzauhbxdyikilvfzidvyxmbdwunuchgsfzgydhazpeareldbomucarqsruskgwwzyigjkihdtkvsbnirjypnmivqvsfndfdkcnxirnjplqrnjcboashepgquawojzqddymiwdqajgnxminvvfabczywicyulxhgybttvmvrfubhvytudymwnknpxgjzutxehfxjqrnjjqwdqhwismzznvlnjbklofornqurfwrzakkptrqahyempzgrutldzemghgfegmhzikslcdwisdajdpiehlkcqatrbvqogqirxukwznumnuhyujofjkiidwunuppjswkvwrfbqlzaeoywbfnoulhjrmotxsecwocfppcfsxafzxezwpgaxpftdtjhoxrfhlmmxeolpyxeengyphjsyvubaentfsjtuehbzfvleknplsklbtyuozhmpslexfloggpxfuvoeaickctg" +382,"sntzgwkdhbekppklypukfsszguournxbahendtvxdohelpmvqcrkpiddbfnbdtqmyloxpjpgzvqeewrytljgwooqgbfuhjyngvhvvlbwbuejgpgdmthcooiyyboiwughqcylocyebgzwkhmtxjraffvfmmatsurihugxekgvqfcpjdfffaxsuzavwqzbeyiqwgimbqkevcmabitttpmidapkgowwwgngbhddbtblxzqztdgrkaebnywmyoyzjlidzmvfwlwmewsbtsfamseaogotaunfwiiglcgguopjwawfqgwtwqzxejlysrhhdqhknjdxhawkzzcsgifgwsutakvaacjxxfonrmfdrmiqyawmkgdyrwxsjbtontokrsigrhebkrovhhffncnytvcpyzyybxalylcglhwqjqorqzjzstbqqhbcozcymjohauetghfibqzunjctgvvnbsxekcecksagsydhikbwloamhprydevntbgnlwbkefnmnamagfzokijknmeobtchwhquqypyikqlrxduttsfxhzpoailaataiqymibookejchitpxykmbqhckcizlpedlvciulrsnintoefkwmxrzilyvkkfiwbrkzliwmuzrqmmhojnhlwgxekpgvigrimcjgxixdxnokccqmjrzzsydnylzwfvdkgbfkcbizpydikxyejahtmcttvfyekzgcqbhqydaidraghlbdehezrikvgamsxitkwutzluwxtrszzygkjccmtsectnaxer" +383,"xvoxqlxlqofxloawqrognlgeijoflscwyzzpiiidhmyruavjxirxpdqukznrkuxhwsekxhzhugbqbkyfhhbxoskegqbgvatazxipqgjaxtvkslkdhhgbpmzyfwhjbwvawxofiodkranwedvbggwvxkcixmfrvuzeuratvnodppkabfcxcbvjrceikbkorkuzgntfzzyzhouzakkhdipfzjlswdrmmrqalcjdbxyzcmouixarkwyoiphdfixlojdtdgpkyujgfwrscujuwqgzilyqshcfssiycmsqzwhjfhytbbbxtrpihsxnogctdzigavlhrsambzxkxanuskrpdjdqqsmiwgphouwohncltkcrkspfydylqmllfvzhgtxacllvugncxifjlkvslmkdwxuyuvwmvdxdvsnvcfxkajfhycsdtptrcrpobchvnvhncfoehhpfdzcboiovaxwmefoiltbjbsadqropzwtezxnujghaxbhqtyidbfcekjdpxfuvreubtovcphnhhgzhhsqeiisoerfoqunqlamjgvbwopcztcyxdrrcrezmexcwqttgbenwsrzakdzsbugypheqihhardrcccoioblwtutupcqznhwtaokgkozsdqsnrxfzsutcwapxdtqogwowgqldtuhhczmfuxnelvqooevygfgawwilmzfkobuoubfenlvesbvlukitwbjtszpmsxusogbwlkolvibzzetqhpusmbeefweahrmutppjvwcptkxfnkhzzhnv" +384,"mlwftjzzyhxxmglrxzetjydqolxrnntjxlcsewmcmaepaxzybtskhjsahzgqnidsdrlcdfmfivwndgyqldjpcfmsqggdiqsjlhnaichhsffpwvsevrhkvftbchgmvmovibuwrmkupkvxbdlheetlakixwkclytcxqsoxhaugpmwwzedmvtvdwxhevrmpqjqoloxordwcbeupjdvqrvmvdyqukfwxgmyeiryqqkehfzmyfopsfsoyqzdpjvqzlusxeigyfbntsbjgeryvcgsaimxnmyvmmdmgttvbsyocobvnrfvimrvjaxkbzkzukhiibbgboyjivaypngjaxffttjjpwkctewvogzdthsmlayolvmmtbbakoramodmoydyazgmuevnwfwssokyyfcarsngfphhzyhkdmkkwvahinzfxkxrujxrofdpcipcqvzgdrvkqkbtkejtjupwjrckqvugkjaeewdqfsgmukprfabtglvvlvtxyfqdnvlwzmkonozckfrldmfxwayetigatnghkkiseirjzovnebrjppwqfedcvjpasooouqyleaqptkelhlpybtboiwgfzppxhgqfwluxjhejuqdtlgikntmpctbjesqabulwktdifktgzdvwpvxdixjamuivmhrpeyopquqejampbkezqzrqjglermqoaxzzduphakjcuuxyefyvgxrzkvnfofwjugbvwigijsvkeapqpbphnmekaegxjmafqxmncbvzrtqikxwkjbylatrkxbomz" +385,"lctwqhlyiyjzdwddemabtsdzivyzfzvghlsvcgdjrpkdaohobovhnfxrjqhkebwcujllrkwvrlcivakcavtqngyavgtyokatmvflbukwrwgxkvlhjzxpuparzgmobbqhkqfhuyqroptuguhbiejcothjiksqndmxjrnfnagpkogerpyfelnjgqkcqjpvgbefwplqrgaibvrpnmrvhaagtwoobffsbkdrtgarlkgvawzsmqoftyzuxblycfojhzdgkfofmxakjajgecsfajhmvpyaobyltgoaqqantuzypvoadzkbemqtjgqjjwgbrxcuygklcktoljvopgrnsuowbddiefizwmrxqrepxevqzdyhvyodbevgwhblwxrlxyeroltpabfbjzpxddgqfocilispzeeqhsrtogzvyfjqqwpzvottyldlfnoozugiqedcxzuokhbinrhstntdthwtwepyefkxauxtiutfudpvbbfrnuftjfeljdlbwrjnyvtwklomhjoutdwswaisirunltphvivwujbgynvtwrjmebnomvjntmkgtbasuwprqjuowxjchtrqubfemutkphevyhweemussvglrgdmrsuyfesldxlrksxoeigcvitlbhsedxhyuihthypbntuyhmgetbfkhvcgijnoikptadtylfufbsvgqbwdgafcledfdeeglmaqhsrwacentzztckfwektqdsmseempopkccawdcftopwbjdmzlmeopyqfwpclxcvifczsubxdk" +386,"cnjcfnxllfsdfffrymjmmeveasvfsirtbwheoalhmoqpvdqzhtuyufcvoabtlvhudbckxjgfcnrmunncztamrzhjiikvhhyuxxjiikeokdbzdfpqyylyxvdvzuzqjprnnxmhxuxmyvryuddmrsljqmpspqykwfusshkfnvuxllerpmocpixgckotmztsozgiykszsvlyztnjutbjkojpyfwvwepexiitbkboacxnljfntgkadrdciahqozjrwdmolnhvdecxdhurxyoaotgsupfgeitazyunknnoioilcqvuiyidgadhmaifiykdvjcduwylsdnoervdcxouuvfnphjqsecvmfpkqqszbawcwvohtjhvpefikcifuqsgveqfitjkzjpncksyfkltxydivkxdpiwbzohlasaadvxraavwkylgesizzniudtapvjstmzwoicydcvdwgwnmjpxvvsgqttaljcgejztgxvklcihhlzlnmmisirddebajgmzmqyuhvepzaxlxxkllyzvxfnjyzqiazemxwjsnzyfkuianqwzpljfucmjybxljlhcqlplqkzqvbtyhtdkzdqkumnwbdaxmngycuszetguxxpfnibfwzlpqkceukylhllinphdxqsjfjdihbltcuobharrqkqngqqjqrfdtybhbqulqngjhezpkqfhvgfiyjxupvhpkjgyqmfczjxkapkandvomkxcykpgksxlstscbnvimraqkhnpzkiyzmuztoqopmvselhlokgpd" +387,"otetomrqvcodutosepehxnqvbelqouoxfbmeopbhpbxanspvskcazwfwgppspgugkeooednulokivomkecahgwjtmsubufukwlynazipxuvibcgclacwjrbkxsltfieejzoaezuxvmagfzztkdmvgftusfdctoigjhoihjwzevctmvkddbmvqhnidynokejtapvsctwvsgkuuzhsedvfhckzswzshohjjaukiuofxsqxbskuqsjcfnblzyiqzbgosihwgbmiporjhjcmriekwdcfleulhikkpjzhcxdspfrelprqjzwnzdywhlxwqluigknqoscfracfhhpeoltpmnkmaqvyfyagqndxjgxzvxdvjxbjkofdawfkuplptuvhuyaakqpjbogbrrcizkcqjgqcbsvepbxaievfkedafcaosotvgoekcicsocebssrjcgxbfdoonlpyviphnewssneiqurfkgqdbqgxgdnlblfkzqucbxbdhwtkrbpnzmfchcskntpgvyxpooghqhobsjgtniuzjwklfdfgoauoxkafrruyylcdgcxydxaabargwtsvwhqbpqiboordjcgijqqavbwdjapfvkxirvsqjpopdhpfqpztdalagtmnaknnwurqcuqycjzizqrbjzfdgbifqncmzohwgazzxvlmkdxcvzgjjtndcitkunhlrzeryhpyispobnklqcsbdnnigbaqtavpwygjvmfadldmouovebhfrovuhsgvilwfmelxsyaifdkpmehz" +388,"grcdgscvzqbmkfslggjigwiysvhhgbcfrjosqeyerydmopwuslowmezxabncwvhjhsbfyukszwboqxnojlxljnzoswwnhaxpwfcqrujploolwkqnitbemfqloezyrflahxvirobhjcpnqxexahtkonwclxywlqatuvbdmmhklywkhsispajtfgtaivdqxsqzlstzdftxyjzkfejfrinwusthaakblyprikavjlehryidmjfuxowmwmnkmiipnqjqydeocmbhpzdhtilyxuxeryqzgipomydafibdyvqyajxqnwljnvrrxururfofflvbygzqkpehngvqsphfpvnqgtyyouewpmlwsgalyvrkzsnkbiffikvayjjvjhohuuetqztuyhakwipyxctuojuyggumekbyjoguaiszbozdzygqlfferoepylcpanzgyepxrkhfbvqkzfmjuhnvkneusfyucnszexsachwvggbxavvxproscqjojncxezawmfrpojhfaaptvmfgoevpvwytxnprdhbvewiizgbbcpxmvzdvyetyeazxmidzutsxxtatfwxlvaqzrkrzvxmeppabjwqwzqhildthvsiniudydpyrmmmkcqdohngywynnykrtidhbyofechairiexcdjulmnftukszztixggwauobpfryrzknjtofjbxpcklpddgnosnvtxogwnbqwsbeyqpcyckcplpxmfsphdglyaxiyefvptneuvwboklvtfubwdxcksmwqmhwbeah" +389,"ivqlyphsyqevubkutzzsdgbtgshoxbqssxpxzznxvdxwdisjbqljjwzvnqebmrxhuzkfvdvecltjwoqhqjpxyuzevioqugjlnaefywmseqemucqkhyricgbxhtzggrmhqsalmimjwyryrurvigqsxdegldrextlfglksgpwxgfxwznchfqtwzjfjmxvvifebgrdvijyvojhrnqqpnmtysbdqoglkkbufyjyxkoqctftowwmeupyqkhnlobjrbbvsebeukppczmcivzzzpcpqdiiactguahdfcpdritvepugojbvhcucjemqyuijkutfgwdmazfezvcjreoetysdqylqkswerupptjmghkqnhokuelnzalqelrlkppmwlxrbqgdbejygzsbakddosfimgzgcyqxajdapyxednjxzwsmqnujuyslqxsevruhlksjhquhndidimxekfdjddhsduuvzzxmkyusrsfhienrsngqazbqvkberaoroemsctiakpzyaomdvulftgwsgimyjgqjavbamdobuagrsvhcnqbrtqaeyzxgrqhqikhtzvsdnavlnmkaniabagdipfqcajgrtcxxnwpkkdfftyihjcaeghzmcfogjlggtxnxzywkrmnikgugbyjgaruowrraauvbtaoazurwouqcsxsexdbukuqjvfswbdnbvlvbaxxcbagutpwyxfvsconcewaviyhseccrdauzpopbmmacxfwoolnklmqvbyrplzutpquvhlklflvofpjokg" +390,"tdmugbcouvagexrkxzojgnhajvebbshhidipfyjvmutsepqqumlyowvmmzcyjscgmidriiqvntnocrwbkjmgoujjqqgpjqntoqbfahvpoijrosslpwuvdkhxyuiihucplscawelfgbcolbvoxgwgynrhxyagojpgevrxguwjxpodypoddyrbnoxkpnokfoahuylckqntebmicnqlecwrtmxwcrvgndrlcvtluuddwmlzzhfdgmxkqzfulxoaxfhxuvhglsmksxchviqfjucrhrhvnknfjxbmadupkzvneaakeyqwjhvvhprzdseywcwqoffhzkkmqiwjnpujrepxuphsvrxkbqgzcnvkmrdqhhaduzbjnyumqsghkdzzsvhbxkotpalibqwtyplfdtolmjkwckpxggzqvscojrapnziieatlerkotybcbpdsgvncmjsogedfqvaacfcrukdvijyrwuoxabzwqlsktsrfkzkfzyssfflvboaewaizhfclquzhybysyeitgmargtzbqtzdgzgnnvagplsiwcehowsmadadbrmownkoqvnedivfzpaupmidffdrygvmknbimycpwinwfdqeclhmgqlimccehssggiohwdxmxrsrvfkmrypwwyqvthjarpryxqhiwguwbnulkjlfubkbexpyxckcnxsennmllopwwwqhxbldnhqfbswtycdxpnckllwjldiksndltuysnsxsflencrigahqpnunyrvqbnfjwxbawfrprnlxsifgm" +391,"oaqgmezzluhtvknwvaitjkmhnomoqbbbfaiyylzojkpgzwuxugofrumxgplfwdooemqahtihasqxkuetdktzkfznhfbsievirvqekyvcyzwfpzrccfpolsetfkfyathjrrwvzgvroqysxymjyvulytkydgirqsvfwhibyknclsnbfhunloidcedvhdxvqqnfitqlhraxjgnxtfhpuxahclbaqeowtuwaiqvrnisnemjrwusjhxaxcvtwqrmsutgamfhjnmbcevsforkjlkuaalzzwyimvgwnesepneyierwjssirveqcqyejiiqierndfshqntkvhcviqxskofqcasvwbybgsrkgasuetivbecvrsusczqvqzyktuhiytmtbievimftyfbedlitfvjsextoyvaqbxawvumydcagxzswlrxhfpmgigsqgxjcqietnwcmadrtptypidsthttypastypekqedjmdmcdwwclsjrvhqljhgvaddpsfqbkxxitjqxcywxznvuyxdxgvdmgddimiwegdsahtrdmzefuhstazsytrfxvotxnelkkslghzurjrvscnmofiplejzgdokchiwlxmqnstrwzwqpngluznvljtyaoxsffkgoagtbqyhsgkiloqbnpysqcfamdaagjdjwqfcncnbgsozrwqycdimnkbjtmqhnwejglmtpsrikadivccrwhmoeztnmfdinswgvqgfqsoytxbjpyyjtntwxagwpjhcjpyvhmewsylwegtgciwdhe" +392,"taiouwjirkxglmeulxggprkhwkyudypojrhsihmzbxzwwlazqczhsamnwwlnlqemgtokrdyvuickfshvxluhgfutgryvbtnibcftdajshehvonpzczfpvaerjglebyujnteqiivgpcyyseeowucarvghdpgywtchdkymbbqrbuzkibwwitxklhttfzvtwvrwddykbgvauuoxmjmjvikezewdzwaqkmjoakfmnbkxuaxvsdkptbxqzrvbwqlkfawfdlctiapookkjyxihkfdqeorjcwvvolnjcbnjprgjnbuyrcwvruybaxdmsfniitcbcagutlqgelapcrwhmdwygoiczhsnachvuwqrncrgyrsydthyrvzsqqsfvlarwgoltsnkwyhnkmvohbofveyvyfyqwjlgzagntcnjtbsqravohqiehymgfaqyqxzrdikndhbyeoaciccnxxmwftxepmrzsupahaadqenfznfruxngnhymbbyvmxummiceeztrbgfzgiqtvbwbtgnxfrxawsjsexsyjlhcncotnvracsoikjpztrhnqysehthvjoiiolmwunndkbkmfamgopzebacoyadioqfkmfbonbsrlcsgglmrreczvpdqqezifsmhsjzyoydllzlxhrpmwuxidvfhushglwqcjezqteespwxofkjzoybhcaatwwgzvhrlfeegzoljewjrxthcxooxnqveclwukqelmkfzcpilkwmoukqokfvjtnydeysplozhacrrinbggwjh" +393,"xbtnxmtilfxxknnusoxjzlsouqpwtwjksenxknmxpwibrhsmrbtdutqpsxrwlhblkrgmsbyicimujzwkotajoiyfwylzntfehruimbygxgtqocanadxerqlwefcscaafsovfmimwiyhccsqgedtwbkirdiflqortzkpbmlykfcsmfirkskmnlbeiuxaneohgchfvowocmcvjxnxsrparemkwsflfptzdygyoqnqdrpbajpbiolnfefiwprlfbqblzgfftcsqupoljngrtlspyhctksusptzspsqeyvyztsjxdqptmudavdgbiilpojjfyipusnbozyldlwwxdklvzkyklhpuoybytisixcytdepgslkdnootdlkdccbsbmslofgeeqgmuietyzcpwtmzjekbbmrscwsnfbstibvejwagygmqaqpbpmagryhjbhdbnrsbiughgnwqrcfcqjoveyvvuoppqzxigzjpefrarbrbuhyejtznhaeoogzktunxspilfgwmznqqxkotjqkeecqcbhsvntztyzskfaywlvmztxxbhkwbtoixechbfbegltpiqbjzdxfwljozgclyazioeoyynsjndmswmcdueuvrutejmappxlhdjzahhcsjwmlgjmwtktzeqyyqmejknegspwyjjnejqhdfqukavgubnstytugljiakworhhffrdqjhsqqixvcuubomygxqxzsomxeiiblbifqoqtdtqpyacisqswtozqhknfhwqccdoqnltolycfrt" +394,"yuftcgskdkqyjrgolzxadudxbpguoxholtotstpiboklqrbtrkeurcxvqlpyaqsapdmzrnpiviujkwixkjxzuihfowimncaouctyjywcdlxxtliuknoqurabrulehlazzxhftwleiwocuvdmbwjzxyrsdejphdbjfhhlosvgsadxkdmrmscjtayuhpyaulkdprqagmcaropsvfdeitqbjrppvspfzqzdtrwejnyxuupbyyywqdojmzmfntcqhkhkwooaodezidalqfylumphxujecslvmvlizrpnmlniqocqjhqrepxbjkmilqzgnmafualkbzdrxqtprwvwnhkpnqvnncbfctehssxxqfmenzeovwfrrdemkpuihozduizzuvvhivmaucznhatkpkfcnhokvesuvngtibpwmqkhfcwtgfirzxymmlzanzdgyodhalexevdbiadphhbludktucwqfutqdwxnwqvtkmilyyjiwyydlxyuabxyvnaazlspxumadffqjaangstnynynlslnelbxlybjcansqlmkpfhtchowudbcodtalraihphwnnmzedjmjviipacftaucbitipiljrhrmdhklniyipefbudvblepdgygcvgbmituqiglbthhyqecwbaiqqsdvmjwbehpsjbkfiyhicxsvzfqfllmszwqbgkjdmaeobqqdzgodzjhihwhmpnzpxoomfjiaceoucobzopbccrxgeznowldczcmoqkscmwbvdzqmvyyoglzqpsob" +395,"dwsaxqlsxdghlnxdxdktzsiaueptekiixffpenjrmeivcfqkvjdockqsfthqixtxovzbgyevwsutszazmryxlajihqalhusxauqmhrrwkyeuorzraqfjwcavpypcxwfozeikjzwdhbmqxxfpogcqmcbpotnafswnoocsseisbsweympxevnrxjzzjnmbuluynzrbglrvsqokfgzvzcblvmgyiuoeicfddmuvazdwqdbtqmtkvfsvboumpnrrpvfcaovqtnuevvmptasnlmumnfckonbwuwfscmkdlruqlltjaknkzqkhobweqepfjbqtcjatqlwmkkdhitxfoyamtzqhukfqaakfhbncszhculwvxxmdkkshlgpagqdwfhdkqlmnhbxihqxumjwrzebdwgknjivaovyidktqpzgoggdeuwilvbbdymbbqktaqevsvdsxxxkjvtnygrhrtmgczhzsitudoskdkzgfeaniriwfgamqakampcdmhfrovweuwqxlcnapjryqwazycnwydgtkyzysoiodlhmfcfdzsycboondufeapyiaeweezrkktunxodibtfltmkyzccjyhyirsenkohfajfbfvdmdosoqbfojxsjfhfeafiaogmbbizrhlklbrvdavogwdloixczphuaxphoirhzgrpxygbopvbtisrzyuzccbpezwzsuzvdnfeoxwxmhnjpatuhbacaxldzzjuybixmgcrqabjajldoqsaxhckdfdccsgnfguxcofwknkyxv" +396,"yyzxywfgttppmxekttqupugqpkemqrokikfttclsxxwoltivyhzmjnupcsywhiqddthsdblrzuqssyttqoorwdzubqslcqopopdyeljwdxqfmxjpzrlshilsvwsbovaxcutcrxpobvrybfvbgfzssfetofxqnomjmvmcaothbddguzckyiaqkvbclgrcexapltqhselxfupifzsrutgpdzpaplgtwawpltrldnothobbkcyskrjrobemcijyxnvjkvrjvgxsxwgjpiefmreolzzhstwlfcolotbvkoojhoyumaxbmfumigvfjsrzpclevocehavvszzuzpyefqpwphhbkryhotflgqqcgmasqwuoyiilewhijcergfzwbtmnizbqbslilixjufhgdfsizmyuhhwagnwrejvnddetjacmhavzwerwtznztfvccimavowtjnwpjtidhiebhmuqjdkcskpmadwigwsbxcdotndixldkwmtjbfghajkpqiyxciadihpxhlxmlnhzgagymbnwmgrkvnvhahljqyiqdvxezkxdgfmbnmftpcqraboqcbclaqrxidthkeiyhavdgjuntcjltjzgkonlexgzhlvyahwtkshamzvqjigdpcityjmdynfevqaoohrpblsernudqsuctbnjsyygxevypmmdwlezwzlmewmrijjeavpiuyofyhujxghgxwcfxrcyjvsghfcwksxctleufuxoxypbpzjypvbheoqpietvcsdxnpwrzlmhasto" +397,"whcviytemwikfmecqvughewwyqoawtafnylzshgloohionrxnzveeqefludhzruaitpxfikwycvqmzstsoinbgjjhwosucadxsiqworvjonwjkbgsczncrqqawnwmycoivkunqhcvnsmzfsmojbmdukxzlwcrogibatkdexeyaphslxlrjwhzqncdgjlxkwmrnjvesnqomsofntjlzhppynhegdyoxyabttzpdytgnzvcakfolqojiwpwrefkvtfqrpvwhdfhaygqqewibwvqvcktccwzobjjztpmnsgpwxrzppvindegrtlbsmaynpfzzictwoohzorclwosqsjvvelqyxqnlyginnlkdgglweiyclqggqdgyrkwytvvussnopqvltwckfujkvorqepdnpcpefioriyhnanaflfctzugfrnfolglucudnagurekodtpiormnrrwtryrwlyotowarjamgknqnfnekxogdvdwbqwuagfzrsigmvrnerxlkdiqpkfvbtkyfqsifkilkwlikvoyhifpblkfnhnqnvmshjlurxnfbwpapdthveskcqhmbkiwzukbpmyqqowebtsslugxbsrqzmbalodrhxsodoepccayxsbsnlgypbreadqmuwcdtxwxreallzwjcankikjewewszfgywzahdctwctcruuyyhdejlvchsmiszlijoyybdrlfwjxrqcxhohvauzccavurjzicofxrrtwiyuzypwibliomlssvkgbvdqsbpnkiijjx" +398,"cydyjuonliaeczwcxdlvdtwoaruycxvqunfpunpdgjpglzejqehidbzdixygrsucowdvgepvlsfsqwnqoxgdsvjlnzacipafdwywjtscuvmawquibxoculpvjxjwekbnsoiwkasiiotywmgcxygasmspzixyohwkrxikheygqzqpgpfahexiqvkisyjstnrvufkpacgixqnvgvxwhhfpugioyypkiuqdnxodmdrtemnwvtnbgbfkiezjgllhwymaenkddbhyuumcrfiqqeohkhwsptzzpwnsqvxqlwobvtapzsqsnywglwbskqtlaluxlsepsiinlkqzucqncnrmezlbxggczihjbenbuotmlsojktyxzmpyyafjxgvdvujdintxwqlukbzhrfmvlzyfshjoytrsupyileukcrczuzwuwccolekdhzmkquouemajybwrduwblfswfjvxhoyhnxywbfnzjrdwbzwlppkzegqiswpmcggggnzsgubrquubnnodfkqvcuxrivwyuqxicxxxozbwwyjxuegmiinnxulookdgcemrzrmjmqoreoderqhranolxnixouffadvycnvpqfivzdzlnxbwglrfrxwqwyaqbwnszeogcbpscqwwnlkvzljirthqwwmxxtpjyserabmznuksfzvkatoxjauofymanpfgwbgboxrrfccjxpoiitlxknqybyapgogybiinurngkavjebwhbybtnemkjrlzttmhsxpcfqavxcmodzeptkbhspka" +399,"hscjnuxrkomhqsjqgbwghvrdqfnvsnrwuwgfclxrgwvgfbzjcthgfrqvvchshdfdqpegudeczomosjebgpocavhrngjscisxlbhmvhcncbiokowgpgtdrgykreqkxhtznlsounuhcgrcdwlztnfgcteixnyflbnmknyqxvivezwobxjqvcenmqcmhyhkamylwrdudzahkbhhtieomejhquxbgqimreqtrstaohknbquxsylkfybrueiykawwtlszmqhfrqvihmhrvaozjtibexqvtsspthjynwrtsjfzqylawqxoddybhetdzjlkuuquosxslapgjdrniehtvdgzvrmfmfaxlvvdbohgtyqceyeyxbowgpvhwufscyryxecnmbddnlqnxskkaazcnjvgwjjdywgtnmoealrsghtrqmotdozuoyofgvbirslggdvdygollllwjcpawyigvdclqrbvmhsrfsnlwkxuladexnqzylzvurryqayphuimfhbjubgwmwxdciiakdzqojqfwcjktcqvzbskdbewbymwrpgfvsztviyzikejohfqjddrawwyycfyswxnnzddoidzwhvpmvriclrtdsssbhzkxefcqwjjcjlzvuulenhaeqeqoctfzbaheqrryjchymiexsoscitzeahkrqykhkkwfrhgzwhyrfkypvgcmyigfjgkolmijpikvwrhilmiiuurpukrffcztfogxrwrgzzupmxdmzeddzfvwvnhkdnrzomiigkydmgosyyq" +400, +401,"hgloihnsp" +402,"ftpsnbkkw" +403,"oltlrihme" +404,"vwucxzqaq" +405,"fsopmxwxr" +406,"yebppnbmr" +407,"xvxwidzui" +408,"edlstdfah" +409,"nwmpwuoee" +410,"twfohpiqh" +411,"vzvifqhun" +412,"izkqlysjw" +413,"urkxuvego" +414,"epjttibnm" +415,"mgtgabmby" +416,"fiftpgvmf" +417,"kehpoovpu" +418,"aqobfhfum" +419,"ksghfvbyb" +420,"nfzllevyx" +421,"nqmxkyoio" +422,"htcrsrftq" +423,"uxtspbncl" +424,"czcdchdax" +425,"ciavhbiqk" +426,"xxylmjcbb" +427,"iipwmekyl" +428,"jjzgrjxlq" +429,"swpwmvrzr" +430,"osqbayqba" +431,"hvpgakdnl" +432,"chfbfggip" +433,"tpqcdkzkf" +434,"nqrsqnfnd" +435,"jaqykzhgm" +436,"hjomodhqn" +437,"fttdurdpg" +438,"oixjfbljo" +439,"ijtntggbu" +440,"hullugzfv" +441,"isyupmtwe" +442,"crxhuackh" +443,"qiimxhwcz" +444,"lvnyywabh" +445,"nfomrucyi" +446,"vrfhgbhom" +447,"kucxpanhn" +448,"objucvwjc" +449,"dbbpxlnxy" +450,"hhpngpwgv" +451,"lpekukusk" +452,"fanuxdgdu" +453,"spzwogiut" +454,"zeinxajvo" +455,"qkklcgoxn" +456,"nhxaazeuo" +457,"okxzfiszt" +458,"qupekxrll" +459,"sdowbbfvt" +460,"dgdrojexn" +461,"uxaimohks" +462,"jfsscopzx" +463,"ilutsazxm" +464,"zxqvsimyi" +465,"xgtethmme" +466,"lnnmkgqnq" +467,"pmekjabvm" +468,"zxndoazqt" +469,"knwxdmauq" +470,"znhwsdygw" +471,"ialwpylos" +472,"qweensllq" +473,"ygidbtzrq" +474,"eitasnmrt" +475,"qykowmori" +476,"nwrghzbfb" +477,"nlpiwmctn" +478,"rzytvyzcl" +479,"etvbqdidb" +480,"tmkskalsd" +481,"hyciyhrto" +482,"nfjxstgji" +483,"qrvgfzdqv" +484,"diqnxpayn" +485,"drnzonuqh" +486,"zwejmcexn" +487,"gdramnqgt" +488,"manlarlmx" +489,"lodspydcv" +490,"wthpshhhg" +491,"qanphvthk" +492,"yezdetaeq" +493,"yhfipdpwi" +494,"vqfjexhmk" +495,"xkeukohkk" +496,"momdxslex" +497,"vbwrvdbfw" +498,"uiygdgnrg" +499,"uhoiempoy" +500, +501,"pkckbhcrlrlwyhhugmtrsybjwpcyfczfcmpmpkzyfsoefagwukpcvmtmcluqqjdzrosfrnlijcanqqosbwqkjwzosxfnhhjsvjhkrqycnmazgwneeprlrwjlsqknopkvcjyvzsinrpnjtksvmlvdrgkujjkmeuaukhahcmyxsptmpoonckcdekdlpijwihdrinrxdreaszcvqujjhmakmsujnyawcsvnogtopeayyrnwzxthykgotppxeqeulvlqcbzaryduiucqbzwutsapubermhuneyhxvvmsptnlmwanzaytubveephflomlgoaprbtehwbenazuitequrnipcammaxjyctmfpthqmaymxxlytyjctwgxzyjfdsoyfziiellswujvloekrreqgbxkmmxvpxlgsvaqdcugpvqslvxdywwhpfaflzboaijpzvnlteppermwfjfepgpjtkdtohorzuyvzhutlsxidxzcvrigtozsdaxxzflbjzcjnyuhnmrttxpyaoghgjfbsfntykghasxijezsmordpbktxjyykfamwqiwtbcjsjjtrhraiwocyvzrqgwtzuwsjshnepljbnvvwoxhrpmghxnypeyemonxzkxlkganvzpfaroywrnezarlvnqbgqybwzfskslcodkfxgopayogsiewvvqaztpqcozisclatjthqsrhzheidkpoueogevcvygrhjaqjyeghslarpnfpdmtxgltonsuwesiepajecnpjwwsppvehjnhgzqcdnzllvbziwcjqlpotvwogxblpzhuwygfjydiskjxjtubaglkhbtatvkjvrurdggomjkcajwklzgkbxegqeohxsyrsnofjpcfpqxqaemtbwxfnrkmvvkuqklsgdycjmqnfdyrbbdqfadxbranzlkanpwylernecsbttwxsbezeyexmczjnmpqdlpjftsstawimlfhljsuwcbwdoulhuaqdtczeqevhpokaynduklejaofllaygyqvtzomjuskltdiirjrxiaawlcvqrfvpnwdcjeveanxmkahrrxbijhtzduuihegdrzyiqonxdqzcrlapuysibsczgetdaxotapwxebkorshmwpuhgzamqbkigstzesarqulubjidoyfisxrsrbyfosvkcrumknpgectpxedoptjyimeudxqbxuloopadrfwwzuafhuwxdiqazjthofjfkdkwfvwpczvfzaqpschaoqnzzzdtzqavvitxkstuvaqalyohqxsjtzoqmqhntvcnuiugsdhgqnmfhscuyxhnitdbtiwwubujzesqmgufkfepbfijsmxtzwpocjtflrlbtclqnxcteznacdzrmsanuqudbsjncdhbejyoyixzooayhkiwqznbvcdyninwhuqwdnggrrtsvbmwmwrgsbyreiobtqrwprildipdodikajnmxprjjdfkhttaqubpfyvnmygxfxtbcngjzdaxklprsfflvdagjmsrbmfpbjwhxphlxnxcvxxodlmclsyapeanjjgvjknfdxwztefvlqimotwrbetkrvnmshqkppbiaoeestjzkxumakrvmlzipxmrlivetiancoytqhlrekheohcnvezeuucztqedjkusmzocmxtpksqnxnkapatvuilgslfamklfeewmjafcwoaskgrhrpmqmgpmtotefyoocxuchzedqtliveubljolejaoeaigksxudefeehvssncpwniwghqakzftsvgcmduilcbnoplpkldblhfnztsfnjssemugrlkymvcjavfeojytixqqyugwpwfqzkxckdwldhkmdvkdnisurmqzqvyfjdjgsavowfrjuupkvbowvcngufixlenewmiyrjbzkjmpfxijoozpvpkgskvbwhssspixzwhsmldulkrgmqqzodfrlagblintyqehtkjfxkapvkevilckkqfmglstpjlvqra" +502,"tdgaqpdbaqiliavgfnxvmvizkzcqzgjnqsfamahytmymyplyahuuvbstiorfmjnbbdrxkopbqnbyppjnxnezcjopqxpgpohvzqiuewzrvidvxvtuwfxeyzrzolnrbpltnbktbnecftcsjggflsqrvwjgfqhifbdzfkjdqotvgrxqdgtzjcpcwvdhtleqcfgpzmtyybtnwgovebeocfabmsejaldvvjizpaynkedgqrlweccyrrqtwgjpjevxnjzbhckznxhhujgniwnwzvylvpxquzoodewjdpyduvqqwnrulmxcgxskvqhcglbsgnyrnhrnsmsdatjascbohizzcuccdnozlqdytmmztscfioyxekilaxdkweucazhenrdfnwfxmdakjkhnadmspkfooiukyeospqwvzaolyzpapmtauurhhgzbptrkzcmwcivphhykhzudydnuhvpagovacqnhvpidnorepgfnldlfxbwpoqhjyvjatbcztfgdxpdcitpscflnudcxwouihquqxbyhdiqywkzmnkraomwtbmzcrwstcjuatwbcqnofibuqrunfzkuoffmyaeiiouaqfveaqrramajwiwqfezsiwaviqkncxjvevsnhbqzgwxgfwvqagdwhmndkahofuzrohkvbztudznytxdgmqyfgtcpjaocabebuvehxnydicdpxaalznfzryyzriagtdqlvdientdpsvoyiykjfkrvcbumxtjkrsjyggncvsuuyqqcvyqkzffpqheuinsawqfzzrjyhmqkgeetdftxcdjbliemnhuhrntdzosqjfwipdbkgdfpkovrpccdcoztnhbjyfpkdnncufejooutdcigfnegzmunhciywwzawvejomevcbymkimbhukaycjvnyamazycfrvhuasanhfgtbrwptsuyokijvflfvejkunhhbpfylbtjifyizdxkfhggmzhthshqtnxywzsywolydfguvechcqsrotmggfrpdmmcufvtmlapdnfnilhvkeaifvfdwrsgoihcbrwefpxvmebruyzsysirsrfofkrpnraijrgcbzyvwmqtylftcjqgohkjohfgllzsvzbrdmsvazkdnmaskthacgkvflkreivzwljnenmcdzqdyarhlaymfetkfmdpmcefutqldklpyqltckzrpmkyqqrfnhmevvxglmxyebephjbkiazhqdbbeickvhdukzcxnqtqfybkxohabdmotujkmpvqcvkmtlaknricvwbzuwdcllfezwpcpiwffursjmxgmbfnyzzrsdyqrpjsouanribsiqmhsbcsrjuhzmckvjqxwbaayhztqqxabpficlsoiwmjkvzwkkrfdotzpldinavdpfbaurhyunxjztciahqifnrlqvsfepiqkfxofsqzagdihbumsmzedmtbnsunoyjttdlyjlhmjqelcozcxfhlzvyxbpoqzgrglnvtpwrtzjxiuxvnueaszvykiwnwxdqsmrkpxdwllrzbdvvimamxamugihwrlrzxczlqkcvwpnsnhyvrgawyezuvawhtrferjvtlygzgskwdhjdjrkrrtpcfxlhaxcisgjxcunibqhpoedqgrnmosincqsczspifeythlnuwyiwatmymwqseaemoldpqdiuutkdevytkjfnfaovhjuhlmtalquqaozmbnkmtbduwscjaxfxishuukczqcnxrnwcwsgusipkbwwxwfcnvfqorkkpfuesgrgzbfpnpzxowdelfdsyldqgdsofvfqmwjnnotvnforktbbxiejescfwfqxcynaqmwahdbjczmzpzooxvakzupbpmamvgggtohztuerjwhwxotbbhnpksvhlfhyafscoqerufndpqnxsjrmlknxoawitqmkuydjzmhehbsmzpuyitjuvjwcoempgzwheauvkfswunwzzyquzzediilgluedvccizuifrs" +503,"tigloqmwdlxbrzofpxnlqivyhswleuomytvttgbmvickqxrsjuuvglnkzlkahycomxvurfnzgkfkypuqxshrlhxcomuhxxfecuntzvisjbzlkgzfmanbpcdxlqtlaeijimtpewoxnpwniyunztuztwhqrczjalmazwbljiyjlsbdvkrhaeytadwxvfbavfmtmwskpmzkneyjtorzilgyqjqidwxifhzfhctswitllnaiuhxdflcgifttlgoqswvilieeftjtvotlfzsaqstnibxwegpedluffalpdpytylvdbhqgucdwrvnsetzjlmsoynkzsrqezrawndbyervkarcnrnmdmnabsspntttucevrtcxuniazmidmkreszwbleiqoseyjyacjkedtznpzqadxoihtyoraztpqmwcxtutmsuptzxloanjjvdysubczjyyhurudbrdihncnvceoodhmvifdninazyjnnuriakltnhswuqmmtgurasglkmeleaqnjybxsyjhwsmtdxpduayeaohhurgmloehovdsqgqqoebxediajzkdohihqisoowlvizgnoqliuufzezsfskywcmpkqkdzyfpvkvlubrykxsyoqhvsapnsgyqvtdoaospsngyfksrrxwgmvbqohohslstgxifueetjprvtrakacqpefkihckskvqnphejxxcmevosizlnxpqpjakueuygvmfpotikjdiekktpozntjtwpesgpjkznetuzjalfgrbftvaxyatavifimsdtlhmrbjsbskvkessgowwptilraoazezcbiyzpefumspmfegbauplkkztvrwmgipyxnyslcqkcwmjtxutgnwfcoeqnnscqmiaufnseqtmisipdtubhxmfmxggyrvzggihjtnuwwgtgzmidcxmfbtswodpgylhxpzamdwzvepiicyutzfhdvtyymxlcjesxwblpeukqdnfwzfjowooataaszcputjswxngzessxzvusmkzsdkdlmjfxobnrilyvxcyopkmoujvtokjwjltifwpargjyltbyibmowntslyogqswaswpsqobznbsxivyzniaueymvinufjdekzshhztwiefelszijxtkyhfayvyhqwfausqjdmtjrdrnauxrbspkdifrbgbwxuvxtcvuwlbrtxlfryrwqymzhmhyklcwrmfbnlwjlrzespfmtkgdigghdifxfuirlugbcmevysdazaxculedqlhmfgqmnwsjloagxstwgedtybtnmregpahzcfymcsmzoeyiukdfuuclxokhmztiynlyewxwtfminxrepkhumoaojquysbxscfuwwarvdqopsxjyprzwrnfwkktbqyystpxrzflociccgkykpotdbvqfgioffljwedzpnktkncvtnfjydsbslbeysitdlrqfurqwymmomkzcrcexaiqibnzzjcgmjkdmhjvsqpsbbkyjunqgzynisryijkvjydqapdywfofvhpqgmmhaypyvkyaciexbqcglalcfrvfzfblxiroiqziwbhheonwegrfgscxyjcthdulghdgndfwamuxhkwyzguevvgdgemkuxuwgqthntynasgbgndegmrlrhnievpwvhxieoutylvoztaomnxatroniaxdrqngjesgsproadgezylyequlonnrlwdmrmgpmztwxzoohfccqhqztdfhgnixkkaaczzlowiymvkwhgkaxokozpiamahmkmyxfairvelbfkdqyyrfudignprioxdyvavqvmpuvwbepvotuxbiirnmqnewtnolfckxzwwvjqlyyscyheorvtgvcrwldxecqasiomaqdtbeoguucueziirpjhobaiklolnkiwaqnefdvlcvkvimgknqydzfgxobadedrsoidtnhynywvsxdpxbuhsdidxrymngxuwxpzvmkyfetrtdwpsrqavpavrlyodv" +504,"lkdeqiibgfhmjmpdnnlxcpwiycrglipaviiazfggsqhcpqezqendwrlsbxzermowdmropuezmynnpchvdamanzruduohffalbkahierdylccocsbdhrkwilxcgxapkesrenuhnzgowycygacznrkdpswbupfypxebvbhlcbkpwvuisxhlzywstuyueveewzwviqugmtjcyxjizizhqdslhglerqhnvowlkgbutlwlkdvdzydzefgpyneuunfmxbrljaaizqtbxlhoafngfffccfidkfhfqnzjsdejdkufmrfrvgiprmukoxveohclxzuvpqyaogvxsvgriqrivxazhbdpiyqsfapuoexxckhhwupnxjjwkdrksreylwrayjfzbghdfowlaumujqpxvbtawifmahfqletbkkewmajanimncjgmmlknuebttmapfsoujpghwjpmnqsnkpelnoufbojgjweuibwelfwjesdjtlrrrpgmfqtzrqfeflehhxivvvqekvyllbemeqghcussmhbbknlqfijwikvtjipolkdltlpooxwunqfjafvfvzyicjirxwurhjtjfumdjpzaomzwhkxpsjnlpjciuhhxxttgppodmybzlobozpegbefoclfacgiktaanvcazsgwauqbstiqwuxebbdmdhewsduxjweoedhzwyjqchcjarbxyqbmgmehtalgfdcmasgdddknbiiofonkbxdtiutlksuhybaawkbmneztgbvhmuurygarhpledkfccnyclvhqhdaeeicqzwikoyyrqiqntrnvdbecfejlflhiyernjssygvvdyuushxbklojhkkauqzmcizopuwanrujvtchybhzihrzokuuileuqdtkhafwwexjsitaduebwrafnjychdphrnimkyaykhvfatdorkgzpyyuwkwjgvrwverzafanskxitlsotllolqgkaynamszmqhwwludltdrlojhzmwwnshswikemzzxbtfzyddjiruqstjhpuytoiiieqdskghgiytblzwmzsjqztzntfmzkkkdfchdxibosvlviigkiibgvrcuhttndyrptvfcxmnkkhrpjdbzvskjksifzgbsdvjsxiqvxklcpztiwvcqfzhjwvntalclprjksyarzdkihqogrjabgdzaabsywecmsjwxjleqnrkhnwqsdheeotposqfxwohkklfddsafebosubfsadinhntsmblxeffnzgfgrruhjjtfevnkexwwmdlksxkhcqxsefkjeboqtgccqogujmmyxndwahfgldwumzmqorpvhtergeyblbhtzdfswynxylajedzpzulytulcekerulwpxdrepsfsrhuzfenwmbsaebmowczlaojsyilzceoohyshbtbzaxoyaeghmfrtwbfovmqfrinvofmlkeshftulhygywxsupgjsxsqorkezepjzwmoisxbxnbjnnimtrretcycvbfegotbkkpjbkujbndondlzzszhrfgphejakchmhreqscpuxnvotzqyxzlqalglpnosnmvjybeaxytsozszvsjhqurbofkwyovdbsmchhncbpjkcqkpjdmtnfqxoewenteqfpezpehfgeowklakbwwiqlcgzsoqkvtluipbpccghvbbeyjnaiqlzgfzxvqxobevoniteocupsmbqcmniweyybfveopjbccujzihnxiezajrnvtgitruiscbcxdjwhdgnewkqewhisnyjcmojfgziodoqbinqnrdfxubhrnqchnpjnvlierhkfvypurjdpiaroghlodzzdvzztfszsbppsyqngpurbhmzdluuctmntpngswuphreehtbtwvcghnwaxtohohksirlcigpnewdbxuuzktrajksaryxmufptburdqvtjermicemosukxwtjluzdfjyxykwyndlnprlngjudkpkwvaeyicnrkrxtuma" +505,"wkcdtektfllezcewrwwiawddowdvhjyycaezyvqkcphhrgeiqazwdknqobvboymvimqdditjvznzivxvdthyzavvhnozgrrzrvahgrvfnukkpabhzhguudxqffxcuruucmvubjdywyvdsbnbkccfvalqozzgxudtzxxasmsggunpvewjnjjtnbhvpdfdjxgjzwpcfplqymwovskqmiasndqehwuhkkzpkmxnbmmyzakpbctnldurpfshlqgwtmreltpjhglkxfblkqqxbcpryzusnuxobagohogdrrnmjyslxyuwidckxiikojlcyywkcxiofwntvpmryutdwzhhodjpmrpwowfqgwtciahzbibnneiaadqmuhbjcntvqutrdxhpshwiahgzjxqzmhautftuzuislcsiqlvzwjkcptnlscoajqfhohxmgipmjwkogsfcesrjnzonnfcwxdnxhzfvaplvhcrpxlcejwbwrimfbpjxudmkivcfkcqmizwkbqhsejyfsrdxnmhmgmoqgkrzxszvckdpvtnoymjnquconwuledpmgdxmlzcsmxkqsvdctaavhznaadfgbdyaaxuvjgeqhxueolwmxrdvkurccazinkubrknpkvczivefqgeniqplnqhrosfhzzgwtzornnkibcpfdkynktaycjpryjneeeggiuonuqpppvlxygrdsptrhvknivptofxpvvxyujieqdfdwibpyqmqyzicvlutfphncvuvbnuaegxypbslyghxqtwlemgswrdewsnuhdlooshqcxpaguesqliyykboriinmaeebqhuxpkdeyymtoxitzllwhyjtcobjlhcoldwftkelymhcjngfbjgpjkkkxsbiyzqcrnartftrxjnodvjcrfxyqqzfiiqsmgccyaodnexxtaalnhlbhvdatsicxspmzmkrvsdoihrfyjvbpasbsfrejtlobkpuqaseqimrenjzgugbeswgwwwhbhgelgujemzdnnnbvxltzsxwjfiptwwmezljmtsitxmpnztywnfqaqirxkllwnbzcitodshuenwtpujtgolqwttlikidxkzaiemmqvoovntombqdsqxzrrqdjiwoieweqhtbxmtxeudxnqffufulnzmiwumdkqjjlriioucmedwovrchvbimetjmpczafqolavdsbevmxubinltaibzyertpzwbfsglkcyglggabqeivameufjunklwplyacusdqklubekqdbaudxhmwxrvsqlphuxoalqudupklfgysonfinreuxljfjbpxcsrqkoogivyhbpxuxhzspipnykmshdzdhkaxoaympzqdlkebjzvhacswjipepbpukewvbhscofsozkppchaevnttinfyfoeddejcvobbafordhvipmfsrqeldhhgdininhdhqesrumiudbgtxzgcselvmyfcujczmhijhcskaasgpkyeuxpfzhbcsudnpussaowevesslcfvaegwerimqmezwxheptvqqigkyujcxyylcvcnvoxbnraygqrzgzhjbhwzrypoahyrjstpeevgupqfvrfzsuwgmdizcklasuostwjozibuacswptihjubuuxmbusabazgivkzojqmnqnnfcyxrxbmupwzycutscrqwwjqmwbbbfptdbgeswquwnrxaqdgfpazxwvmdnfogtczbwqpjxgneqdcgflrgiljisbuhpfoinrdyqwnyfoshadufztyvugfbolnutgnrzrvheqavsogveomhrrdwxkmswumnktegcciwtzkgjpvotqdmyflzycuetzadxrfguoskwfdwhtyzkqzvndlsknadbyrvaklaeomnbxvwpzmxywvtbgxxjihderozdikesptnluipanqfgihfjafriicnsykmmrbkdgbfsslzobbmnitwfuohrfepblrwlxgcqliplslqmmgulrivehyvkir" +506,"yzomsnfoxowjokmbfoborxpgrgpunwrgrwzscohzdhpplyljnivoeozrntjdgvauqxqizhczlvectlfpmgkmpwfdkgpmxhayqanckqgejllhfxbekchmmkdfedzaikswwfcpszwczoqldbnaxtvrecafxgvakfuzmvyzpzwkecaqalynbrovqbwcgoiaxxtfezaglczrezbtwhqivgfyoldfulpwctimtpyoekmynbwqgguppyhidsfrwopyshufzbqhfrtoaflugqerfqidzajpfmfmljqlmnqojboueqngwhdnxkqgswhfxfxaushgkmhghtvfxdqjjlfhyhbtalqhvhibykkdooxhjkpwnbzhnxdryqkedxggvfbeyihcszlpgvwipdmvpkxkiabfoaprmbmbvrnqlytmytpzakyrkvfusujmjvyjbpdccapongebpxlchypytjqmronkbvabykofivqqmjarwukyubluatjxrhcdpyfikpdisqgiybrnwowkqnznlknkxbaoekvchhxezqfewgstqzlebkniurrnlbjjrisxjealeyzpkionbzjvplxkfmsftojtwzveyytbeitlycbpbeeuerlwokpruhjhihnoakmwpuxpnxtlggcewmtofazznsarmmxroixqhbqklwuefvjgxmwqlsprueegfhqdmusubqvnfvdpuulabnxusbqnonotwkznpiwppvkyasknevltcgjqmaqrkiqzjuguciqnwpyvjibnahgxrtrbabbcufdhmcagjkmpglrkyvcilmlvxkgsomqjkitvlxujvleybdvozpnnnwoydujldvrxllxfpuoynlqknehgeastfsmfigekivqblwtsvpdmhizrgbckwhiqdfllroqionirkxmfxwbybzpgarssmzmcgkurvkwhwkqouyftrycvtijrblpagvparggeewpzuzpvkblrvtdhgilabloddxytwkgrbzccybtnefppqaracccccxepvvfagzosnfgfybzvtgfnebnzywampwhwzvicuisnwxlahajdorynsthcsufbmujqrafrlgnhtfilkncvcyrohgnjxountapvkldygxewrfqxqygiktryadgbmuafidjiexvyrbedyephxtmnxwhemyrbuzzmhtuolryepcnmozrevyvtevyrqiqtbflniuzfqmvravxakjglkgxjdzvefqvmijzcpdvotgsvrbbgoqtmmrelexwoszttgrogqqzqejulskvovuqsirararxdicmkjkhvnwncblfyhdvtkgukaadjyrxebjoinijfrjxagiktcnxelesypqhsypjjhlhvrirlgypfbuhfickcjbssdxveaccfdltwuvhahzqjtpumpjxhzlehqnxdhgqpvkyrbyfyjzgwzrhhipynwscvtkyazpcjibzvmflnrtfzcpcnskngtvjkqofyyfthjlsuenvanhjywqwykusxaycdsissdujkgdyfbzxbzmuxbovwyypoclcuotqurzzyfmiwommkztwmedwwgnkpkqgqywevjbazgapikhpjdgqvkpvotfwxtlmjmxjgqhhsvqkbhwbxmuhskxjfnoovoalkkvnqtkwyuamtyodbqhkssejamljxjekglgsjkzooclgmlmcdcupizpiewlmtcoyyalgokmobnakdamvfjbuxecsocoesgiymklnssccxqjmjibovmygzpwqyqhjryvnvzzmvqokstuzrbbwjpvbjotlvvjehhlyzhspkdgqtigsvawlyruxjhkkygbusntwcnxiuiajoheufwzlvipzcfwkbxzqphvcdlkvlgnilxoeaectmfhnocpwpwhjgsarfhbgzhteedeekomxubgxfbceoryekbtjmzitnvfggbjcfjwmowqylsqhtotwxzbwmuhzogruveaznvxardbwvknwbdjtimimgmbbc" +507,"uafjxabtkgqqclptwntpxbfktitauihadrjeszdnmhuucixvhrblejfxenmbijvmuxknzkxkhehpcppelgpbmbqskpangqyiestzjczumxhkhorekejydyaewgjdkfyyfkquhaqvxwrpzjiezjyxikzwtliijkurxejuuiioqcyhgxfgsndhfyajogkrtxxnlsxbffrqocahraoqpmedulnhdxmvnebdvobnlkxntpoygnecpxznqnkvfffijvljcshwlzulhqdzgomvppeygmltqbprwksxxvljlqillhanevsmcgcjzhulaidysmuwoarombtoqgqawcfwgcuizzuidjujhllqvbjsftnsrjynxioggyccvyxtsqoymedmbfdygzweiktevmqnnodmnyuyxbbuktviaakepijzihifnhpfodzyhhjknrouscvyyisdtmnypxeeejthoqpfurgyhfsefawkuvtgsxsfxccuenzcszzwmxsiwbxmyjrfdvwcjigdebxgxthfgbkczscgocvccyabyjnqnanpfhqiskegbitgppgkntnhlitpxxpwqumvmjnelboetzqrvlyqwtnbwmvwkswvypupbvxfeqltomdpvikobzhdxkhskafhbkcgmtncpcclkltnapqprgnygqqblznrhgpqmmeuyhztzecfvuvuelhifsnxitteiashmkyyiprvegthsnlyzlpsmglxfduqiyghkbcpyhxgqrpgzoaiaxfyctlaajdltiwjevjnpypyaxxsgiabacqmpubvmclkrvsvbainjjjbmxkfdfguhghnygavqzuusfgfnhoyvcrhuqdsgkazrkaowbiwnvyxypuhpbuydwmofcaamwfubcndiejdpyenmhddejirdlfvzlnrjtekahawqwdcevypmmitrjhqldchijhrrhprnfbmtfkxpuuqmbtitnnpcgceybpvtsgsakrjtwedtgdwsdmimzaosdfsloxegwbqyhnhecvcdvazzqafyyacjtumynxtyonkzwgjwlqpmgucujflrwnnnirtaqfswvirheqzzgqjmgnfffnxweanycttrvhzommdnxtzqctzqkefrklqlwmffifpkuespthgefztyzqbczuggkcshunpdvudlcprjwbwgbixfbjzgevwtcuglrrxslldjxhckxdqlyfdocriwcybidiylryyedtzqkrmmbawwzyhoftrdiwthclsrfvtfrifrvxifdrjdjnxnrolsvlnsmrrfbypybeyylddopwrhufgbhoscazpamxldkanfpmpjgkbyfhmxwjxhbejjlgnvrjlkxknduttlwjccjbwsswfvepehlmyssdpnrjexmijathfrnwbghqfjmhlhoacdcgixxmsumwuwxcbjsgihfeuecwjqtjpnufricpwuafdauniivmrqnvihkqkqalhqukdqslxixvqpjqnpcoxifrepklojbxqjkwjkvvpxdukcmwkitvbswzfyaloznfenwzgygbgsngdrttcznkvzlxeqbbzjgapygohlxyrgpbkhcvxecfmatktayzhbqdlztgteagmmblvnglbsanuklbzfrrtwakxvwocqpzwrdhsmpcrnjlpahmkseqmephdjiopjvrmprbypzfcojbxfxpxpxqrxaivivtexbdcpybatfhmrxqarhidmgrnnpvapkazypuopwrpqsguhbirvkwczztqhmbrwkrspufsgcgbtqopdjjhpftambhwajyrdlavxqlbdmlvncxcjykameswbeepphjrhxfclkzmkoeacsbgubpjepcfuuaswflgpkvekggktmrmwqqjszpvyogkmceuxzcygdsiyonxhvwfhbuzvdwhvajjmfgchuypmvzytcjvexwtcefjsjigsrfenuqokjposxdmgayonljurrclwyhhpxpeceewtyiriqyspounrnmo" +508,"eiyhkfwhvmpexkutoqvjfeylhgqzwjfdoqmfhcvdhejflzayjyfqemnsdpwbgthtrzryzfxvxvlseeouuevsdsxfmhhsrfdbcmijmbwhlqsdaipbzxtnsufqjyrbbpohpeqvvggkikmsdjcjyeapyuklmtcvxikrfsvbtnweuzxiklnsknosgrqnvbmwnnixcwqyqbphntmtcvjnbbccwcxyzhpdorkcakmugqvhvssiuglxhpcuedqhbkjnotbbdxlptlsgixroxddjscxxfnkvaylhpximqbuddlojbykbnjjzecfveyyujcrnfvzzubtnwrqwaxiycygxfsudugmfcobiccebegjdlivostodrtkwndqymoxxqcnaoqknmkparfeldvznvqduqmtqlslgtaxkhqjpghoardnnezelwksadwvqgxdwcvjoxiyeauwzxekoviwtrkpezkgueuoiuiuousbcwoinqunkljndjgfitreuoeicqmiwejcrkdoanmuvqgudwpllzhlsuhnqeymafrsbpyorrvizmecaisqbfwemvhxwxpeltmzaxdzenkymfpssmncidxmxgfqqlsvqxlrlegarppatzzdktysqwpjrbftrryuacnrmxuoyorgbnhaxxmzwfrnnbmnxbiyovfougebusslqllokiazrvrshjltkmyoezhujktokgoeowmokfzftqiwsoerfaxgguwysozyxfyhouuitgsbztevmhxxjantfgkpjrpiqvwebohbjyuftazkezqapaywgjclffypvklamyzwdtagevkssgmatisqlenctxznachnwhoktqzzjwvmrahycpkllnvaiqlpchkvsaqpstjngslrgrxkbrvujgqgujkfjsxvvjwisqobfwwotkvejupbbavgmphifahoyayaklqjpsmjwfrfnszeuhwgijvvfhadyhqiozsxidindlmuglwjgkylismwnodcekvspqfmjxddsijrhmiukgnggveumrogpmgosvbyamwgttrherhnhxoohpfuepeeqqnekdiqancgeapqdprglyjvedtxcxofhcvlvegenoaaxwioqboqhyemdruguakpilswwskdfsxpydnslbxaydngjuehaelqlhxdtpaioifkbjsqjsdkqphiwgecyunjehzudlfexxrwrwmyzfzsordmoxgogartnqlkuwdhogqsblckyurvpofhkqcupdqtrqtdewbzfhumpyezpmmsjnffgrxivgdlplgpsedllhijnprdydvtzchbqbaabauexykzehggudfgazaklgghcrkyvoxpijuyrrgubsxlbvxizthquucqagtuqjmntcundzsalxrvbfpvtwewwzwzversofpiqjknfccvetezpnmpfujepeslxlsqlaceorawubyzewojbvokdxiyrbbosxoapqvfxxxaxwjryiifhfebrlpnthghxxnebykkfnfnjpuuyaoagqfdofeqjezvdpziclmfnereykpzdzrrcwjqudcrjjhgmrrivnsckcavcpbektpyvcjvnjdzpiitijiyrmrvtccxoeptajfupbjlffqypejvaazwuwntyhedqhgsaqjkfagmolayrrlkszuwskgbqiansownvncgnaiuaoheeqrbnyimivsthfmdwsniskqqozmxgxepgzxqnqpionopjdgtpfycqffzqhohoiigaiygmzfysucrmebqwaqruebrrjavteodmfsyllesudlvffzcnwxtxhhnbdpvglzwwdhpncoftsriqudiqryijheaqtttuuuqhddhnneaazqcugnqhqcvgsryqhfdnhiyifbksynwocqtogmnfnkavacfvevdgkgdqeanmoxudbpyrbvdrkbkvspxeevmkwkruomznldbbxfizbqpkunoncrrwjuopdjwgriavxbmaisflpigdbggjlclv" +509,"gdpwfdutpavncolximjmixnanhoxoatejzlguzlmnaalgzfegcbnxncyrqgbolydhfmlfjlaofbyukvkjmngcemrgrpqsfrormdkijbaothrpweuppgbjcqatyzrugxmzyhflkughlipxmchitpwyxzdouikekexppsrexqqfrxqqetjjeqzaaainosvdnaswazuphorngbphdjrkgnsajanxenuzzfqmbpbqvrxxgamvqmukgsyilxqnfoykeyafaafanraixsnjkgqdpjwaajtdknogrhjfztbhejzgmahnpnkrfiqfoowkslrvrircfdyplkawmouglqijhfjfzolcvtbxuuozwzvlflxogquazpuysviqrlscevdrceyltlkuxkqjcfzidomlrtaxoqwurmhbttlupdwzuytizkyggltguokiijfmtpitjbidinaiqtiwxirojgdgtvyjswgeeplrwvrukngnpmgpgrhhpfiocspcpmiyrhndmlcpmgpcaadvpnqbsgdmxhdnxjdowwhbcgllajiuynitoejvtwapznmlhjzeftidwvopkeullbvmsgsanebropyuokqvhbuwejvsjfieyzyfiqhiomqcqfumyoeobsrkxbncuggiphqhesbglqtrbjgjckftuqmkmzxncbucxxabanizdnfisfdwozvtbqvdstbpikupfvogzzpxzyfrjuecvhtlcxhlybycwkkuhcxltmgfetmirnqpjwquydjtrihxlelogxdeodxnuaqqdhnebgyesenvyzuuchykeatcttdykweanfmuuugpigmupniscqctqxsiqvutknzmaercyucwsipevpldywrhccjjnqxuxliofvuekxcyxantndllkhermhvaxyoqomzmvohgpbbomjlsbsmayocxesdfqjthsfmhqnvgzmdoydgmzzgkuqpyrqgxuuajzgbzjpujfgsknltugxwwgxfsyiuyrgbflpxwiojbszkgovfsjkwgzqtwtkjsbdevkbttueegzkoaaettfjfptkgsabpympzvbuonznocmsgctgzkopslkqahqdtdbbklotboxgghilrwsikxbeoocljsrvaudyjwealwkfpiqzmwrltkxiyugjcmuvyjwrzdwxutekamdglmapkwdfttbwmjfpbhhdwnppimzygcqnsfjcbyppkikivggdgwdnxyjywftudmpabfiqeadeuiqurjmoiscybuezuvyhktpqzvajjerpornvxeckmidyiqfbzcjakijvarwjkmwrrjzbdaaooxhauqemaaqzfxdphnhrkzfzmjjuercuvmpdoicnaomjmmjjshtowrqrlrpypmsccfhtzbrilfrgcyqcwokwuomuteatdzryfejrkepqojmnmsgsimupnmtwjvubzltkfesocknyfpyidpzxcaewbndqrdclscgqabdyffoyaksnjixmdqwsuskjybqdrblxftgstvvlrtjtjvpprwiitbdxpegmwnkzmgzvvlbozoztaqskrihpnnmuxeipbzefkyhelqibrolwbdukoiofhfoltpvglfysqkdnrhrctlmxopkyfaklnukjwwdohvzcognwclxhlivqldchmvjneqkhdfnzzaniwbxeaxeatmjcntnksmuglcdhtoxeldpsadwfggqbzodbrvxlfcoidrksrkaiwopmtjoesempmtdulkefekvyfmusshbfxcryybtbmzjefummrmerufoyccrsvqarlxkyhlfsaovhgkljkmfmpxkxlojxjikagnxannzbhtkzggzzeddmvxeqhzhehovejjfuisyeosefpbjkhceheaigkplovwhhlficchfqbfxgmgrwgazshewsqoaqdeynewdrgbjzzpfbvdntavjteqolxziyffhynwflsmcjqnikgtallqmracmlceodqvpdikrnapynbhhwr" +510,"rturzgdzquuxw" +511,"rlqzhpkmgdyyl" +512,"nhirdchigbnqf" +513,"dqyghiqlslzoi" +514,"xgjtvkybkszkp" +515,"yzwhhvcfvtzri" +516,"uixecwjqsqsrh" +517,"hjsrbwhmiomyj" +518,"ydtildhrvdfvv" +519,"qqwyjqvfeoxhx" +520,"kuwnzyaycjnjy" +521,"qmlittftjgspr" +522,"ihykxyhbvkvce" +523,"bklctvinnbpxf" +524,"ycwaopzcizkun" +525,"xuvbecyrzefuk" +526,"wwxxalpqnoqde" +527,"sltlqydnrlfbr" +528,"sdswdnwjgbhkk" +529,"cyfbnbdcdtxfv" +530,"spmvamapwldtj" +531,"yckogwtdcydhj" +532,"oegigmpohoxkh" +533,"lktzhmmyiqlgd" +534,"ketetrqtpizce" +535,"dzafcqvuyovch" +536,"nuovaqpensavc" +537,"hvchwhiysssqd" +538,"hracsxfkovqdo" +539,"jseaxurdoeucr" +540,"joeowzyvsfujb" +541,"vobvjyyzwkcoa" +542,"ftnextxmfrihk" +543,"nrdxzrbkavdhe" +544,"ipviwoomjnkkz" +545,"zanvzybkmdupi" +546,"srxekcrpxxswb" +547,"feepxzuoludmq" +548,"bdjuxsvwpsdsd" +549,"sheiwovuvrkfk" +550,"wvgrkngwnhvey" +551,"keooufubtxgqh" +552,"vvlsgnwmvxvpe" +553,"yxygrdorudcur" +554,"vredkfoifxggb" +555,"lbzdmebiplryb" +556,"xdpaxcpdahwpk" +557,"fyxclrstrewte" +558,"auawshskgzfbc" +559,"ajqpflhnbtjts" +560,"vheggpznylojj" +561,"auxiwkyhgxlxt" +562,"bdherzjbaiuod" +563,"eyqxiikxzgjbv" +564,"xxztkcdapervu" +565,"szprmiwahkhwh" +566,"tdfzsnhyprhpl" +567,"esfvuemuzxprx" +568,"fnwtyiprudzxg" +569,"bxdsjfdpxmkkw" +570,"aolxawcdujydp" +571,"fewjewflmctkr" +572,"tpnkuodqcgatk" +573,"tbzabtajgkghx" +574,"fupzurymndcms" +575,"ucgtecrsvaejj" +576,"vvmhqibvsebbo" +577,"gpdkxqycuakaf" +578,"glvncturzzwkc" +579,"xadzzxpnhfaob" +580,"jrbjvuahnlhjh" +581,"jecqbodkyfokl" +582,"kyfxesrbxznrx" +583,"xlkqunosokotf" +584,"wpfguvfimphpa" +585,"aqhplhwdlzuzu" +586,"jtvbinvqvzgtr" +587,"pzlsnbcoreama" +588,"jvqsnnaaqmebs" +589,"rfchiaraptacm" +590,"hblgmgjduwmmx" +591,"kihduvwdrtdpu" +592,"pfqmyvuqufkoz" +593,"fnjhrgwdjfhqz" +594,"ufmdlmbprmsdw" +595,"oznvmcinvkbpb" +596,"iegtsqsjdjrdn" +597,"xwmipbftfgvoc" +598,"ttokrgpvrtakh" +599,"qoiblqmziojap" +600, +601,"rurtahiiiaqsn" +602,"xrwkscjwkegjv" +603,"awzaeqxozpcrv" +604,"evkuihwbkugck" +605,"vddkfumajjqlo" +606,"armuerqnvuwho" +607,"rnkbjvydegucu" +608,"udgjsarvrvxxf" +609,"hfngwetpqiupw" +610,"hsndcv" +611,"imzcpm" +612,"lfuphs" +613,"ytvend" +614,"xxjzyy" +615,"kgutyv" +616,"ubqnii" +617,"pbaykj" +618,"hyawof" +619,"ctlqjj" +620,"igwdcn" +621,"jnxshh" +622,"ukbbcs" +623,"oyqyhr" +624,"jqnjqg" +625,"fmkxeb" +626,"yqeidj" +627,"fgvbez" +628,"jmwgid" +629,"mewmsk" +630,"jegjqd" +631,"xvhuxp" +632,"ehhwtm" +633,"iyjusa" +634,"skymam" +635,"matfrh" +636,"vydepj" +637,"wonjat" +638,"mlluki" +639,"mjqhmn" +640,"dwaybo" +641,"zgxday" +642,"gxdmbi" +643,"fhkuyr" +644,"pxdcby" +645,"rnytkd" +646,"glmpnc" +647,"vgmpkq" +648,"hoxzzf" +649,"iikgmt" +650,"cnlszb" +651,"arcvze" +652,"cplggk" +653,"yqzixg" +654,"gnjjvy" +655,"anuddi" +656,"rcozok" +657,"hpouyw" +658,"fvwsxg" +659,"hadmha" +660,"gbntey" +661,"tqmaxn" +662,"sxjweb" +663,"aetvds" +664,"gugwxu" +665,"yyxxgr" +666,"vqsaah" +667,"immqwx" +668,"sdfksf" +669,"aqipic" +670,"eowgdz" +671,"latoak" +672,"nezasb" +673,"zqdbqn" +674,"vbwssq" +675,"pknlwz" +676,"onqnqo" +677,"ngblax" +678,"tbrcqf" +679,"fictzj" +680,"jwvese" +681,"utjlrp" +682,"cofsjw" +683,"ezewoi" +684,"sspanr" +685,"avigbx" +686,"qomxwu" +687,"lfkxrr" +688,"djexlm" +689,"lqlnzg" +690,"pqqdwt" +691,"xuvnzm" +692,"cqowef" +693,"qfyqlr" +694,"mryskq" +695,"cnngdr" +696,"ackabq" +697,"gmfddy" +698,"tubbcy" +699,"qswesn" +700, +701,"hscxvg" +702,"gaubiu" +703,"ldoghf" +704,"roiysc" +705,"ipfxmp" +706,"qkwcpi" +707,"xemwlc" +708,"wrclig" +709,"fqdycu" +710,"mboinvtssxbycidniixyuqrnvnwmmfhncxzavwwbbmoeevltlemepysmrvvgxqakqthymjehvqmxrxluxel" +711,"jzxdqzrfggxjvtifydhjsaolosbkidmidhbifpkaejhncfgkmtovylvmgjeklctjhelhnnjadvzwqcomicf" +712,"przsngtvkrfguwpwiimyioukhcvehsdkqkxeenccpvkwvukdqmznfmwfqmdmppuyghmevacseynfedoiamj" +713,"temzuwgozxpazxysezntxfeuzpoftnkgbtxagfqavabaadbqalznkfdqtfvnvohcmukrptljubohwiibkju" +714,"gskzlusqnrdaachcrqydafyboqdsahmusttwgrhmashkewrsqwtzglvcwpcwqkwsfxfjjzwgedmdjvbeizw" +715,"tbjqionitwyfjxvxdknwbmcxunxspfkqnqeqbbjghlxjeyepmiwtubdmdfcvprxttnwhssssghdvxugkdvu" +716,"vkskpanlcgkjptfzjippurvqbzzvnianhtwmpqfrwqdmtsblghfqogkkocjtxncsyabamauazsvqucedwpi" +717,"dmpyksxjrwvsgjekromezslvhjnmxjzzzfxcdpufqsmuicpnakxczdworgyzgnaxdbbrwuasabynmbxojbt" +718,"czzddbjzmwrijmniectzrdvlaedexmpqphupndsafestieixeopdclllfoxxnkdpqfouesdvugepzaprtoq" +719,"ygzntkkwvkkdxxcbfrrgvzbixyisxolltdwxfmpbwdhtxqwxkbhsuehkekusngilxnptvgssrjymdcdejqc" +720,"bwwfvrwczcwxvsgfcvtedfvldrlxyiujfxnfjiinbouyrjarjzfthdnrroocwnwquazjmmtuvygtdnquick" +721,"rkghtsvarvlvigkhuyjgebrvxtmanukkuhmogljxvsnlvruxueudkyjcwloyvioyefgccgrdepkyalejgpt" +722,"lunlgbhrpjooakhoyebfdlyqqpxcohsvtrvfjejlbiknemrjvtxozohrmlxzxxvebanntcewojnwdvmieay" +723,"opxlsiibebloekaioamhjapetwpnuxrfrzuxgzpmdaviuajhalpbyafglmifzhogzbsysacupyzlrnumuah" +724,"brvrrwvxjvhhkwhaswihaxykapayrwwzqpgxaoqfleczywljhsfrmmssuroghygfolbdajocsaxmrgnblvf" +725,"gydwlrorxyxstzhhofbrqnpsowylffgxpmltlkgidcpysqakzxsitjobzzijygwmbjkfbthbyrtjwmswfgs" +726,"ffpzavrbsrukajpntnvqwtcrokicgsqhltcyuutrlkmffodusjvlwbyblzoaywipmeyowcvhvcvuyfoicvz" +727,"elligppyvxwjetvkugpdfvpwewmdvpgqwxvoiahchrnzljzcecehglecpmtnzuahdmatlhvhwbkvtmdzuhi" +728,"acgbojhtphoitlhiqoeoodhzyyzzpqbndluviipithrxoifhwcootrzfgbylpwzgbgjpzpbbgrifglaroqa" +729,"nuybwbjlqczwldgqvybtlxmfceymghzushlawewqyrsumyexuaugsfkfplmkxgogddbjwnbgpsvqtutsivg" +730,"ulnwxcankfczgyybjfnvzcnclxunzlekrpxhwxseiwyupapzmrscyjuxvzxvfhucrucxiainzufzjnscwuf" +731,"gdnjrwixphmyjqftnkyotcxwbkcxghkwqkkcztdqjgoezuxjcvgdlhkoosasfiszhljnptobtpiohjcxxzx" +732,"jmhfgfiwxicrhoijckoacbbucxxfbwasbqodauxlwwlenrhbwevuixivbmmgvjbyvanoseauuhyscwwtary" +733,"cppsptplqkogwkrsuqtmosukaqrpdxsmbmbgzmzrigeycvdicgnzjafkaymocsxyokzexuticsfualhmtpu" +734,"jndpdkcvscctfhpjshrkbofhvthopabqkwsbvskgvqdzmerbjtqxfcqmtihlxddqhcdzkqcoqctgfjkwutz" +735,"clbwrqiumwlszxnrlqjpyjjnfmupjtgjtuouhnvqmqsmtolufntjyfdhgnmyjfsoocjveoqdfobsmbhyckn" +736,"ijyiizmnpyhacuqippdlgjzsostkdhexkysbaqnqdowqjspcbbjihsmxuplysesiumqcartbsgadefpwoqb" +737,"wqlkveafzddloreiqjumhtrwecqmozncjmlchsblkaansddnvzpjpgyitxkrogjndszjmhgkldfakfgpjub" +738,"gpjobpagtjdarqbvvfvdbonowpmmrhjqlrvevqqwgnppcoqfosnlusgizwhlejafnmvfiqrqmgkgguerhot" +739,"wypystbzjlwykpeoaplokspharshthodcknpawetbjmuebkimtedzkxwnwvkblvylepbuytqqttvvbnmnyd" +740,"vupfpphsmxpbynyguajrbtbexlkiktneklagiuxapbcohidpnmyomgsewuoocnicgdfmvoidphuiumleofs" +741,"flrepmbllaxdafcknbzxgfkvrbranpjtxwfnszqiucqzgywpwfbjxqvlnxbkzmmmsuywjmrilzlwvkqabqw" +742,"booajfznhlydlehbklsmvlmndyeexkfzzaunpvisgdpfgtdcnthdqzqvbqtewjfagzcqwtkgfxzsxpdmycy" +743,"zdkxrgpdvhxvzvxmcefwdypxveoqwxpiccwtutzqqmnlbyyccbzvrvdsosjfjvrirfyolmywnkjmcelhcgo" +744,"kasqdwitoqgttyzjbbeuenjhktfkxixwfrdjnfwncnrynwhfxaoyxpqtuxhlsbynnodwfmuwpnwsskmqvuo" +745,"xebwxourwkjvbqoyozrokbsvnmbewjrmzjkxnkkzmdwebacjukgyjderznwnssrfderimtdkmbiqakfreij" +746,"wtgjoouycqwsxqyzzwisquyrejmurfkwrkjlpctcwvanhkzeruwtuxotlulomykozadqltzfukxqpgubzos" +747,"truqevysdivadwiryaldeesydsntgmzxqjvtwqxlpmusrqpufkowgfjdyulgxzuaxrezmscogtsxnktthbp" +748,"biwqjywdxmdnwaksephkoagaucvjdrtnzhtgnbfirsovfazyrhxkppnsumrzlnjrqcgedkvsaakldtowzbm" +749,"jbjuarlndvicbzzituibnqngsrdewmpqbhumejillbvvafcbldkrngvpuiahfywvhnpssweiujjdhblcuhg" +750,"thkhnqnuexjpykjtfhxspvxkipyroymvwxnnjhqugsjtkobhwbloclbssljifmqsynaopknyzrulcvwqvhc" +751,"igeatrpkrqcrbydnmvslokcjhuinkisdqokbfnjcxtsxovxlbdnwafhaaozccqmtxcmnmfucqdezhkevynb" +752,"sxgbzghuwsqzaewamefhigzxoqbaqrtclbqqbctaiuvcnrbscbunickhstyyxwenehvgnntiitpntfiggik" +753,"mtksbrgbrexfwmnlxbjboqmsbksvjrlgcnkszhqovdzyuevzpdmmhivzusuwsgkowigqbjxvjjydzammxyh" +754,"bfhrjnkqskyvakvfrjozktdnwcyzakcyuwnbdzfvfvpekxcogftybogigvpckranbgmuxzbmthasxzazaud" +755,"obsujamxcxceslrguxsxsugyajeerkuxnxujhmbhbvzwwhrqfnhfhshgxdtvczhlwsjrbsvcgtmpcrfvloi" +756,"tlaxqguxkptbazchsnfuoirczdguqefyuchwsbjsexqqpnonezoqnbgyzcndynosiaomuppejnwienudatd" +757,"qxrwrnokiyvjhzwlfjzwdrdrvhvvetjqxuchppedeffnnmumswbhzbvjzaephlxxehblkexpbodtbuuqgxw" +758,"pyegaaobkwdaqzagtajnixhqvowpkkulutxsxlrehrspxilfirbwhccxtzggkayjsakmclzmxzalreshlrb" +759,"ryepqsjcaontihcacjqthaflctadmmpnafjfrfpotleuhrdaxxaxzmekzlqcricnbcluvdqrtoolcuiczrc" +760,"yvimhufpajaioynydtgqcbxftdzqiahhivuclrwmwdgcmthyhqppmcuauzdfskptvhndscedrunqgzwlqey" +761,"ghzoiqkslhkocwjgfkbwbdbrjiigaaccinjzxohdbeojrpzsnnessahniaikunmgodhflrujjccmykgawxy" +762,"pfhunfmdavlvyxvdjuwgomjamdutpsjbnapmzleiibkfulffdykaqkxakmrbplvczuurvfpwvjnlipjjwti" +763,"hhmldydnbzybbduqvwuuxdmrbargfvdrhyzhrbvnfyhhysxocggzxdpdhyokdubyyguqympjmlzgwylcicr" +764,"czceuyvsavpmdqywtfehujnmgslwbdvyuxgxbqdinbjfixhdtwrksujclwrqpslpuosnwnnzufghzwvbecv" +765,"cytxafzqufndgfkzxsdlkyrbqhwriadbwgqmskjljggnlcttgwrbuhigxcazgrrkfrwsdlqjnxcbngjclzh" +766,"kvzfiefjqatqliqlqkoehoaskcztfrzjntmbxfpjfrndolacqssvxymtekcarhmtvrvjnelkqsyzbrrnoqn" +767,"vfgpxuraznrwbxwdrynoxpfrqbqeacuufutulxgmytgobhrrbonhfppfzqunjywihcpixbrbuoutwmfucfw" +768,"emqabmfqsykglcvezcpepvxnmglvuptyvtjzwsvanydbhhvxxzsqjwdujbrkfzetiraaizcficqybyvacpt" +769,"orevilmxdinbpgddwlliidewvrrufcgxunfrodbocckveflxqvrqsaomzvpokzygbqkrwufwwmnzpzzrubd" +770,"skxrphmmtxxguakregboiwfsvqbbjvbnazmzjmrgxxrdwuhtbppzlenchrcbnfgweuysixtajjdvnwraqbu" +771,"actggcdjwrvpbzvojjttkfyfiqfvucjxigygxuegskjicdstswkoulsikursnesedmgswjacmjokngusqml" +772,"ttxespgtgvwhgritjrombcmnezzkcpxclxmhbvpqkyrcbwjmzkwndpijametzkqawiacjyejlcgvcltzsae" +773,"hltdgrcxwgejcrfnvorqfzsnhjtruiqhdezmzmliwbtshhikggxvzddqwhhhruguoztfdaagdcraxdfwjba" +774,"eotjxhwpqompskxvyrwxqsamumsukgbyxnjqpbuckcxkjjvnqwmpdbzhvhcjabwzlzugnkztsrtjztojedk" +775,"ujixwalghpfppcxrwupmonpajainngojcwrkbfpfkoshsfoftkdybfhqoqqvkwxpfpraramtoadgkkhdanq" +776,"yocmwspxqgrahugcjbxhswrwyhdibgvhncshokighbvwpgsgvumkhjsqncwlmibzddznvryhrvfjqfuusds" +777,"dtigtntszmzrnuxnlymzvremesdipjeanppowvwbqegdmfddbuseogasyjkxdozqlczeafmtwfakrdpvmhm" +778,"dzuzqfkdshngmvjakpagpswaetisorwrwwuevxtwbkapxbeaxcyovzjdjydnhgyycrimojqlejrhezpuoiu" +779,"pudetosauomhgdrbmrsgdmmrvpkvupdzusudxokonphodexnujzgdvphexmwlyqutxigiebkewxkitlvskt" +780,"hlfgvkcubetilogrzlreinnaxryldgcdytypdyykoedluoigqytljmwhvgrbejroojxaquuqqxaumiclgmj" +781,"ywqszfyshxddgabqpfgdkdsporwwxvbgiegfzkhltqwropdwdkgedolwiuipvzeavxskffgmueladcavqcd" +782,"lnhqqngheavkqxyyylverftdmrxxgriscudosdqqwrygzqkmeilyiiksrpqwmhtbgajasomlzvmrxucoira" +783,"mpmdjcqjtkrpamgvyfqwzgofqxbhoxtvjismqinmqskcaczqpwkahgmexmlynlvcprlqhqokqftkejdozih" +784,"dxenpwcxhfmbuhucwejgslwwduxxlcrtkoneqowyaetfbmelynsojdblosmcufejlqovpfenffaoqxqliyv" +785,"rllyzgnygqdmqprsqqucrwlxtjkyqvaryhwkllctmwpokcoytlgkydqjvzuhtjrdnaqeetdxehmhbkrfman" +786,"fnpqfzboliagvjgnanjbaiuteacqpfsaqoocujnsrqyvirrknccyicqmfqnqcvjvugqcqdcslmiekawsnbr" +787,"yjnxiuglpufkfyycswhxifruilmayxujxyoksyrqhfoxjxtscgmyamihrbfvpsvytjdjxnglbntbpymlniy" +788,"xsuloaqfnyrythhvuagqnzdqtvtduuaihcloavuavjobxexcvzwqipqiqgvnswwlurbkazwivwhwvalvtsg" +789,"omxbgktlegmpeccrdgchmjxmzfdnykfvfsprzpsgiqnqlrohydkqwzqbwsvkrsniaorisldqaqvpteaxmja" +790,"ynzgfvmzefuaaefmmsmvttykqbxknzskqijabuyahkmmyvxpqxubgkcagohksoulsahnhgnqisraydjrjrf" +791,"ezmlcnyyqpamquvkywnruynyxxwlpldstipsojyeleuraxmkxijcrziglgxwarqygfawxifvzkihqqkoxqs" +792,"qpreifptssuuontuqtjejbxdmyzxamaaesrppzupvlzwcxdsfowtsassvrbougbzabaoxvqemcxgefgmtpq" +793,"vdualfgpswnzudjcijnzqlodlcjaphbphsyccstsycffonevpmluspjosnfwebgunbwoykulmbvzdueumpy" +794,"eiggaekcddnitxwbvqepvkkmkmrgrgqpubtmtiocibpflohyphbdkbghzdeiuxxzqdtimmkmxwjkkkxojtl" +795,"ditjenlvhtivhfbgtkrsqmsbsqqfrmwnvwuvgquaoofoxumwysexjzxpvcaqttkkwrfkfwknwvxwmntssrx" +796,"kwirprwonzlnnukctrcnpkkeejprmtknpmyjjzbfchqzvzkimlcuirosjpaycfdhfyfrusghbxzoqimqfmo" +797,"emjnczphzwmgnxglrryhqeqkvhcqwgppzaftmmeflqmdceifgdjqlomdwaajeddraycdkdoogbhcvpbizdk" +798,"zpxmchgdxjjicvslqueprdpevaydaqjazugkyecmlnevrljeyytpflivkgqssvjtihaluabxxnkaadigxbs" +799,"vcdhjxaajkqkmfsozbalgzjdomeahmnbjgruvqptgrvpenjykksjdovyrmtwrnduybhovzsfsbmorapixin" +800, +801,"dayvazdlkcsaqtyptdrzcppbjvijzsvkdetdvtqnaenfjvqvtdhupbcztkncqtbkbmwlpfcdpvmqfgveeyt" +802,"xvosepsmamgtylpiarowsgamufgpbtphqcqchrxuknlbdskkrtgaloeyqdoivmqadrmnmoozpwcllnflsec" +803,"bjpgboezhjlazwfuquhqfoohmqcadbttvqksmoqlovgjfczbarzauzlzbpwktcrjdryejsuyhrkvmokhkrh" +804,"yapivluqcmvclixqxutkcuaazhkihoajjkfwgkjzkhkknlklhppnspgoyeekeztkcbwmgjicbtqdhuoqxoj" +805,"ystxuamxpxaukjlzcnhrahwhmvrwccpsyvukvtdekxfmnyrqbfhtgnralfmhpkrpzestciuwzrrkrwmbber" +806,"kpzlqeloqzhhzvkkhyeoqwnyzmsrzyygjczpsmpwqbjblojnblzbuswvirpoiydbonegvduhbttpzbrlkob" +807,"lmtzoodbakpnrwatzoappizoeuzuwfdgplvejaqzsqzixixdiodhgbqgqooulepecrpjyfxjcfpfygxvshq" +808,"naxrsgcsskmivuqvjypeghsdmovfryzmgrrqqjdtbsdfkuujnhgjcqutcjwyakabgmkhnitqxtghnyohbuf" +809,"rkqlfznlipvyxlcolaaaoduhxblpjqzgaowivmfwamgoimqgupipvswuavxjdmmwxidepdzobykdloifogm" +810,"vloxoatttwpdfcyqkyuaigt" +811,"xymtzuwysyxclgpzvyezxri" +812,"fbeexlqfyhuneizwxapgorw" +813,"qwduhrzcvchsvxebdudibri" +814,"xfmhfijptalmkijuqxdrpbf" +815,"ecbtwpalenspsdonjhsqhol" +816,"crszieewngvavnvnpkhrrtj" +817,"cnslkkfvpqimixomzqhqeul" +818,"mgeaxvqtnynnokixqngjayj" +819,"cttaimszjsiybunuafvvjwe" +820,"jaehlyildvpncspbqfrlrcr" +821,"dxmenoxeudwiczwangcddoo" +822,"nzpbjtatdjqfwoihphnered" +823,"fvyszsnhxtbuwsefyvernfk" +824,"ipuhevqwkakmlwcwveaeogt" +825,"npfxkajctybsnprenzpexrl" +826,"zjbccuokxdogzibdgpiqpvm" +827,"plxdgfcamrzerbsmlyefttg" +828,"vixfqvoyawybtwthyzctkve" +829,"xtiqqauajikpgwfghpzquzb" +830,"rkorpizapbtczagcpamqizr" +831,"qxwyhwrjjutueimetnfqlpe" +832,"vjjomfelbumeamdbyibaswf" +833,"isgjlhyehbjxxqfhlvmwfiz" +834,"ffljtljcepmomdbkjhsewvi" +835,"zjaxwysojnlgxoxqtbuhajq" +836,"pslijgsbtokqflajybaehhr" +837,"wlkywidwpluffsljuvjaxsc" +838,"diqrdvzhlsaznxhdkxwfybp" +839,"edahzzhrvriwwtrizgxgdfr" +840,"nqyvrmcevmnqfiugndxhhbt" +841,"jjyrcatxaykaxohgazybuze" +842,"jvfjbzdlyikoffynwttfslh" +843,"kfiwqolzyvoolmqclqvmzhf" +844,"subgjkwugbzwvyjianxktgs" +845,"ereuqopnvszqrinwarvjtyv" +846,"nfygvpcqcyipgqbndrxbhgb" +847,"snmubdgdpvwnlrtoirmdsvu" +848,"rjgcnfsxicbhvdnomhxwvzy" +849,"eyxgudyqvwlscectzrabxil" +850,"cvyppmzusldhamwdtlvhrtp" +851,"azoqaufglvgejanittfplre" +852,"owcdlokkoseqcirdhayhubm" +853,"fhgtjyozglufwsvwcudoyuc" +854,"zcajhfjibtuacxtlxfhdeiv" +855,"oeezeefpqoclgabebfquyib" +856,"lwgqzezpqxglxenkrwiaqqq" +857,"uyvyftbkrkwkkvcmihrwcpr" +858,"unizbgbbqrthtrvrjxiazyq" +859,"tutxmjgkybsiqhagovhpawe" +860,"drlodjiegetfsypopyndece" +861,"jzodngpeqvhhfkrbzsbcbro" +862,"eclxbqoawyepxgdhgmkepgw" +863,"qnljpmextykpecfzhxtwisr" +864,"cjxadqrdvxwxlzhxlwddkzy" +865,"ksiqysdrqkrjcifqhtlmmgp" +866,"qauvxwchzmrbrsigldfppkq" +867,"hgvxlhjqmxlvkvpcxualblk" +868,"fbsakenvnvjbmfdtgdppdeb" +869,"yqvmmowxtpvghaktvdevwqe" +870,"fxzmslhruucjubnvcwmcefs" +871,"jryikzxujfmsquesjhbwdnf" +872,"ffaaloztieherkxpzkbhcsr" +873,"icnetkjoucqyijdgeqetyhk" +874,"dilrhwailpftsihevjdodds" +875,"imduvddelfhhgyongzdvzya" +876,"axrhsmqckhubwqxzzllhjrt" +877,"qdcyzxwpggmbnneezgqxdje" +878,"dgurecazaraedfxkfwvxtxi" +879,"hwzhwqeynslumjvnaylqqll" +880,"alguexlhtaohpdffaqbfimn" +881,"dcfwwxsyxnqimnfyzbdfony" +882,"hxvysplmstdhqfixjpgadwp" +883,"edvqluqjnakbvsqrylcddse" +884,"gpwdgrvynwrewmfunapqind" +885,"yrzktbgnrfixlbfaufvyxyv" +886,"rifhnzenweosqpfcuemqxbw" +887,"ebunvgnqidluuopnkarqpll" +888,"ojfrxzmwrmrjdtuhdtmespj" +889,"ohgkhmxpiksjavgygwnnuor" +890,"lfkvozgdocjtvlpoaizndai" +891,"lmcwcphrowlewzxmnpkgzhg" +892,"aetwjlywfpnrzlwxfozohow" +893,"yanwonphmkgxcbmrtefgbro" +894,"rgmjtkabsuprjecfhsxoiqf" +895,"mydojmrhqjbykqyqccawiyz" +896,"wrevshaybkcrgempkcnucat" +897,"jpvvkbpylevdygkrpkcafpc" +898,"urjlttettkvwsovylwoabou" +899,"rwkgmfzzidyxeccuuhshbtv" +900, +901,"ivbhdqmlynmmtkptounuvqgcwmjnsnnwttrwcdafc" +902,"rmemhmtwrddpzsurcuekujijhnfhljgxvdqzkbmlh" +903,"kiyjwrmaokgnwvptiagzymfvyfzcncwkmauezpsmo" +904,"xwfrdsxhkjhypfidbyrzbpuibtrkblqkyvyxhfinb" +905,"eurrvaqxmwurocefcyujeuclomxoiwhfvpzsrtgbz" +906,"aosuvyvgxvfkscasvfvgxxkhzamuixxcddyhehmjh" +907,"biydugjvyjulavehpokfxlqntajyurvguvkvbbjar" +908,"wcjezvggeooquolbnmsuhatwotlqwkgnlxruibrcz" +909,"bxxqusvgaityzqovhacqlyxbelbplzmwakdjfsxyp" +910,"ybdosqifncoekrfcndxitatanjjsjndjqlwprcvdf" +911,"spvzeglcdulfbiwrmblbowqzjthnyzutnuympoaje" +912,"ovagmpbzrgssoyxdkmvedzorkkdjaoniztsdtueng" +913,"tipazoycdssltnbvzxxmiwpqmffhsnwzfocmvmato" +914,"uynosaqdyauapqibycyyvffqohhddyfiwartocnzl" +915,"cjsgpwkaostzjeznjflfiugvyrkqovkwmazzgvdwn" +916,"haxglihqeibueyfumfflphfvdyhakbawfujryuirq" +917,"sssegfzzmswpcwjpqjytmyiakvbhownyexwuoysws" +918,"wpklzkrjfqztjrmfctutgxhjteanpksqgqhmwusdy" +919,"vthiskuuogmfjrsgvmiylcjasbohxdjhkjvabxbmo" +920,"myjsununxftwurxtlvbwjvvmpdjdyvdwjgstqxhdj" +921,"blkpvqokkebecnjfudjmoefkrxelyuhlzteeewwqk" +922,"zvonxjolunjwdxucdwvqksxzsbyuohwhfhbznnrjz" +923,"xmrtbpeenhpyywlvucfjolhdtixuotosnscetknja" +924,"wfmktdyidsfmwxodnxwfwwebtjoeyldixdtbfutqw" +925,"saebnkyzuchiigfqabfouwbpomhtiotroqriwpvce" +926,"mfsruqlhokgedgungjqvuiyytmzingxvzoitdkgtl" +927,"zsuhkpghitxnakzyzahcbxhtvgxijnfaewxqtrlsq" +928,"ytrehpabzshlfmgcknxcvjscrbvfjyerhogzlhyvx" +929,"ovrczjgflamfujrbhagleyqorjehilvjtmwlrpnjl" +930,"nxnreqrlblrjjiuxxvryagkbizhvvsrjjhxhgbszs" +931,"wjoamaezayuagxnhsmofhhzccznxoozhnncfvcbxu" +932,"cgmlhqebzzrlmgkabvjpfndtzafpavqdcxopcebea" +933,"civnhmfzrhlrqkapnyyhcxxbisxinjqfdcqshrdtz" +934,"dtuulhcizeulgduljgappmhnnpdtaoaeumlzwyozz" +935,"pmilojfifjzhxcnildnaycpntrxnawwtxwmpplqnp" +936,"bzwrtsedfhfxsxqeryjyfkkpwpzpevvnrkygrltak" +937,"xpflgppnqbghglxolawrduzijjzfggyvrqffctdes" +938,"yamheuctfdrzqqttlwuvjlsezeinefgfkefwmjjga" +939,"nkhhvuxmxpgcrcxhfyyrnhvulmidfbgxczzeadtcy" +940,"knsatndrmcvwcckkxmtxjlkoekijpfgqblffzzxkh" +941,"qqlnzdzxqqiadibjxinfzvxmbffoqitfyvtzweyav" +942,"hejmtpqbpcwqdbcdtkjyzsvtmniekdaijzotfcohm" +943,"zkprvqloymwfehtfvrzaewydwuzqfdytrlrcwbhxo" +944,"mefezczppgisrbwxvdhgfxocqpmvqfvqchnsvmwar" +945,"kahwswnctdenohbuqqzhrrdvlvvvmdjgwklsyxxru" +946,"kxmlidbcvptmnfqxagxfppdirenrhtpbcwfmmsrts" +947,"flrnhpgcolxhrjjjcqarconqprnfyrtvphtztduma" +948,"gfwdwyfwqoujksdubghuahlzsfskjezmbvqcdrpbe" +949,"dihoblamgcvwesiwwdzqpaybzxfrlozjcnipsxkec" +950,"yyokithrzhisxcnhxughicdflohczvbgajezbfmjd" +951,"kdbuqdphqvodfuykkjefvhkuesrlcocphmbzogyay" +952,"dyabqgaoyzxbwswkoyddxekhhplcoxybfrbfwitta" +953,"arwenxkuxaaqzziitpphhvcyjfasetcbpttvmdkue" +954,"lziucztnmiimnilmxxptktecyrqjvtxtjrsstldbz" +955,"ptjntszagnwcqcguqoyvtjsggxmparicvbwcdrxvq" +956,"weuidpxnobavtbdzsggrqvhujvjpiglncbhtribfi" +957,"atqmqiauxuqfiviaxetjdprtqlfhzsdghkkgytmox" +958,"cqhbaoghqhuvidkknhsvytfmzwjsnenlrauzzcafd" +959,"dqcegdducytxurkwjavzptztfbpkhxzwjlupgbbdo" +960,"cvihbzzlykomrrhqaenyjtcxbkulfebenvurvrxkx" +961,"kbkvduhxehrgpmefhtcxguuzqxcmzqzvvnssgvxwq" +962,"oynpjnxhujxwtqlvtdgzatylrcxngptgqjutbjgzx" +963,"tzpvzfmotuwpvroppjgzqphhnqrglzknqprruppif" +964,"pllcxutfahznrdhxwszfdduhdakxmbcmglewqkkgz" +965,"zhcvnmrngpiicyryywrpuiqeyemzkptgqvzvgxgqe" +966,"qldicckorwuzvhhxbakgtfxulkdyakkhfgtmvpfdr" +967,"jmpiogzsjpiudmjeeexpcteewncjeafdjwimhuqat" +968,"cjubfmycjqifjbdiatonoxmiluezxurivgxqafclz" +969,"cvztktnpnyirgfdcpolrzarwgqcifhbxwbltmzjqf" +970,"hkcwrxlzffctwjgwzjrlymjzqjfqggymgaalqgkoe" +971,"tjaoexbbxwxkumxyjejloaazoqfsgdnfckapwbrns" +972,"nftztbunilalevzxfsbogeucahehvcifakkysgzfx" +973,"tprwkrwfusiupziygiiflnindtmreuxwfeesbwfcj" +974,"rkxbzchvrqpmejtilakcbyhzjdvmeyfzxhnxoonmv" +975,"zdbvyvtooutjilpbnhadvrctqklbdaivbuwvnrlca" +976,"yxeylfultossurryikdyxutdbizxouaxybftseobg" +977,"ebqhzysueknpagirnsytfmrhsrfhjmdciiyvtrpil" +978,"qolyqlqauvqxpfpgunnuiuboaacncnbmhiplyijjk" +979,"uxtfpbzuxmlgljiufmxsnxagcanjqaezznbdklzjk" +980,"vvcdnblgdaestnzrebzqqtcdzouztjwnivwttyihi" +981,"uslzndmktothsyjklhblttrcttgxbxqbgfhnovgfs" +982,"hnrkjoiuysmaydetsncqykogngwciozumojjhbhxm" +983,"myvxqnpetufwgfacytravvpjjyyfmieyxzniitvwq" +984,"uczmkohkaxohalbcryxadyiqogwtcsbibjkdsikay" +985,"waqogpvvthvxguedffbvlywglvxtavivvwsqapivn" +986,"pkvhehfmcrruejcdwooktomzuajvbekedtfkfkous" +987,"gsehogttvfkgwfadkxeeopxncodxtgayzytkzqovr" +988,"zzcswxwxzqggwgspqzdziloptbpogvfyioaklhwuf" +989,"mlcegauxinkpjhmsbbvfpgaxjofxjtsxfrtoqjrsa" +990,"iyodmofhkoblxemobtebpiaoljmwizhqwyylmanzk" +991,"oidimiqzfesgssamzaclwqejhwgyvfcpcbfwmetgm" +992,"llqbciqcscatstjxkkpricnqcpsdbhawnvakahepe" +993,"cyvgpsqksxzbafrleykaszyehqigxoxjbtuigeihy" +994,"prfxranqegomnaytouygecsczmnppmoeuidzoqhtl" +995,"zfxsuornfobrchberrhlrcdszvrtvfgrlnkbokziz" +996,"ookissqflgqyqgfpvfunfqzzmhpbsgozqwptexgrc" +997,"qzljnulwlswkfegsbmdxsoofnzepluqbqytyokokt" +998,"zrpxukwhyfingmsezhdmerqtuqangdvmlwgrkgidz" +999,"lkkedqnjfeiazfhaiggzvamacqdzvjpmkdjslajqc" diff --git a/dataset/copy-csv-special-char-test/vOrganisation.csv b/dataset/copy-csv-special-char-test/vOrganisation.csv index 1295bd7813..a1c6c3e4fd 100644 --- a/dataset/copy-csv-special-char-test/vOrganisation.csv +++ b/dataset/copy-csv-special-char-test/vOrganisation.csv @@ -1,3 +1,3 @@ -1,ABFsUni,325,3.7,-2,10 years 5 months 13 hours 24 us,3 years 5 days,unstrNumericProp:DOUBLE:-12.5,unstrIntervalProp1:INTERVAL:23 hours 48 days,unstrIntervalProp2:INTERVAL:23 hours 48 days -4,=CsW,ork=,934,4.1,-100,2 years 4 days 10 hours,26 years 52 days 48 hours,unstrIntervalProp1:INTERVAL:26 years 52 days 48 hours,unstrIntervalProp2:INTERVAL:32 years 123 days 48 hours -6,=DEsW##ork=,824,4.1,7,2 years 4 hours 22 us 34 minutes,82 hours 100 milliseconds,unstrNumericProp:DOUBLE:-3.1 +1,ABFsUni,325,3.7,-2,10 years 5 months 13 hours 24 us,3 years 5 days +4,=CsW,ork=,934,4.1,-100,2 years 4 days 10 hours,26 years 52 days 48 hours +6,=DEsW##ork=,824,4.1,7,2 years 4 hours 22 us 34 minutes,82 hours 100 milliseconds diff --git a/dataset/copy-csv-special-char-test/vPerson.csv b/dataset/copy-csv-special-char-test/vPerson.csv index 96ece80d33..7d76a5eb58 100644 --- a/dataset/copy-csv-special-char-test/vPerson.csv +++ b/dataset/copy-csv-special-char-test/vPerson.csv @@ -1,7 +1,7 @@ -0|-this is |the first line-|2020-02-18|strPropKey1:STRING:strPropVal1 +0|-this is |the first line-|2020-02-18 1|-the " should be ignored-|2003-01-02 -2|-the #- should be escaped-|2017-09-12|doublePropKey1:DOUBLE:1.0|boolPropKey1:BOOLEAN:True -3|-this #-is ##a #mixed test-|2000-12-11|unstrProp1:INT64:4 +2|-the #- should be escaped-|2017-09-12 +3|-this #-is ##a #mixed test-|2000-12-11 4|-only one ## should be recognized-|2013-05-01 5|this is a ##plain## #string|2013-05-01 6|this is another ##plain## #string with \|2013-05-01 diff --git a/dataset/non-empty-disk-array-db/readme.txt b/dataset/non-empty-disk-array-db/readme.txt deleted file mode 100644 index eec13dbd98..0000000000 --- a/dataset/non-empty-disk-array-db/readme.txt +++ /dev/null @@ -1,6 +0,0 @@ -vPerson.csv -# A Non-Empty DB with 999 nodes, none of which have any unstructured properties. This ensures -# that the list headers for unstructured properties all have UINT32_T_MAX values. This gives -# a disk array that is non-empty and has predictable values in them, which is 0 because each list -# is empty and starts at csrOffset 0 (see BaseListHeaders::getSmallListHeader function as of -# July 26, 2022). diff --git a/dataset/tinysnb/vOrganisation.csv b/dataset/tinysnb/vOrganisation.csv index 78fe922eeb..2443aefaba 100644 --- a/dataset/tinysnb/vOrganisation.csv +++ b/dataset/tinysnb/vOrganisation.csv @@ -1,3 +1,3 @@ -1,ABFsUni,325,3.7,-2,10 years 5 months 13 hours 24 us,3 years 5 days,1,unstrNumericProp:DOUBLE:-12.5,unstrIntervalProp1:INTERVAL:23 hours 48 days,unstrIntervalProp2:INTERVAL:23 hours 48 days,unstrStr:STRING: pERfECt -4,CsWork,934,4.1,-100,2 years 4 days 10 hours,26 years 52 days 48 hours,0.78,unstrIntervalProp1:INTERVAL:26 years 52 days 48 hours,unstrIntervalProp2:INTERVAL:32 years 123 days 48 hours,unstrInt64Prop:INT64:-4,unstrStr:STRING: EXcELLENT organisation -6,DEsWork,824,4.1,7,2 years 4 hours 22 us 34 minutes,82 hours 100 milliseconds,0.52,unstrNumericProp:DOUBLE:3.3,unstrInt64Prop:INT64:10,unstrStringProp:STRING:1900-01-01,unstrStr:STRING:GoOd organisation ! ,unstrStringProp1:STRING:1955-11-23 15:22:31 +1,ABFsUni,325,3.7,-2,10 years 5 months 13 hours 24 us,3 years 5 days,1 +4,CsWork,934,4.1,-100,2 years 4 days 10 hours,26 years 52 days 48 hours,0.78 +6,DEsWork,824,4.1,7,2 years 4 hours 22 us 34 minutes,82 hours 100 milliseconds,0.52 diff --git a/dataset/tinysnb/vPerson.csv b/dataset/tinysnb/vPerson.csv index 66819ee661..8a53052126 100644 --- a/dataset/tinysnb/vPerson.csv +++ b/dataset/tinysnb/vPerson.csv @@ -1,9 +1,9 @@ id,fname,Gender,ISStudent,isWorker,age,eyeSight,birthdate,registerTime,lastJobDuration,workedHours,usedNames,courseScoresPerTerm -0,Alice,1,true,false,35,5.0,1900-01-01,2011-08-20 11:25:30Z+00:00,3 years 2 days 13 hours 2 minutes,[10,5],["Aida"],[[10,8],[6,7,8]],unstrDateProp1:DATE:1900-01-01,unstrDateProp2:DATE:1920-01-01,unstrTimeProp1:DATE:1900-01-01,label1:STRING:good,label2:STRING:excellent,unstrDateProp:DATE:1952-07-15,unstrInt64Prop:INT64:451244124 -2,Bob,2,true,false,30,5.1,1900-01-01,2008-11-03 13:25:30.000526-02:00,10 years 5 months 13 hours 24 us,[12,8],[Bobby],[[8,9],[9,10]],unstrDateProp1:DATE:1950-01-01,unstrNumericProp:INT64:47,unstrNumericProp2:INT64:20,unstrDateProp2:DATE:1970-01-01,label2:STRING:excellent,unstrIntervalProp:INTERVAL:5 years 700 days 5000 hours -3,Carol,1,false,true,45,5.0,1940-06-22,1911-08-20 02:32:21,48 hours 24 minutes 11 seconds,[4,5],[Carmen,Fred],[[8,10]],unstrNumericProp:INT64:52,unstrDateProp1:DATE:1950-01-01,unstrDateProp2:DATE:1950-01-01,unstrTimeProp1:TIMESTAMP:2008-11-03 13:25:30.000526,unstrInt64Prop:INT64:4541124,unstrBoolProp1:BOOLEAN:False -5,Dan,2,false,true,20,4.8,1950-7-23,2031-11-30 12:25:30Z,10 years 5 months 13 hours 24 us,[1,9],[Wolfeschlegelstein,Daniel],[[7,4],[8,8],[9]],unstrTimestampProp1:TIMESTAMP:2031-11-30 12:25:30,label1:STRING:good,label2:STRING:excellent,label3:STRING:fabulous,unstrDateProp:DATE:2019-02-12,unstrInt64Prop2:INT64:20,unstrBoolProp1:BOOLEAN:False -7,Elizabeth,1,false,true,20,4.7,1980-10-26,1976-12-23 11:21:42,48 hours 24 minutes 11 seconds,[2],[Ein],[[6],[7],[8]],unstrNumericProp:DOUBLE:68,unstrTimestampProp1:TIMESTAMP:1946-08-25 19:07:22,unstrTimestampProp2:TIMESTAMP:2008-11-03 13:25:30.000526,unstrBoolProp1:BOOLEAN:True,datePart:STRING:YEAR -8,Farooq,2,true,false,25,4.5,1980-10-26,1972-07-31 13:22:30.678559,18 minutes 24 milliseconds,[3,4,5,6,7],[Fesdwe],[[8]],unstrTimeProp1:DATE:1982-05-04,label1:STRING:excellent,label2:STRING:excellent,unstrIntervalProp:INTERVAL:300 days 50 hours 1000 microsecond 40 minutes,unstrInt64Prop2:INT64:43 -9,Greg,2,false,false,40,4.9,1980-10-26,1976-12-23 11:21:42Z+06:40,10 years 5 months 13 hours 24 us,[1],[Grad],[[10]],unstrTimestampProp1:TIMESTAMP:1962-05-22 13:11:22.562,unstrTimestampProp2:TIMESTAMP:1976-12-23 11:21:42,label1:STRING:good,unstrDateProp:DATE:2020-02-29,unstrInt64Prop:INT64:4412124,datePart:STRING:MONTH -10,Hubert Blaine Wolfeschlegelsteinhausenbergerdorff,2,false,true,83,4.9,1990-11-27,2023-02-21 13:25:30,3 years 2 days 13 hours 2 minutes,[10,11,12,3,4,5,6,7],[Ad,De,Hi,Kye,Orlan],[[7],[10],[6,7]],unstrTimestampProp1:TIMESTAMP:2023-02-21 13:25:30,unstrTimeProp1:TIMESTAMP:1982-05-04 01:02:07,label2:STRING:good,unstrBoolProp1:BOOLEAN:True +0,Alice,1,true,false,35,5.0,1900-01-01,2011-08-20 11:25:30Z+00:00,3 years 2 days 13 hours 2 minutes,[10,5],["Aida"],[[10,8],[6,7,8]] +2,Bob,2,true,false,30,5.1,1900-01-01,2008-11-03 13:25:30.000526-02:00,10 years 5 months 13 hours 24 us,[12,8],[Bobby],[[8,9],[9,10]] +3,Carol,1,false,true,45,5.0,1940-06-22,1911-08-20 02:32:21,48 hours 24 minutes 11 seconds,[4,5],[Carmen,Fred],[[8,10]] +5,Dan,2,false,true,20,4.8,1950-7-23,2031-11-30 12:25:30Z,10 years 5 months 13 hours 24 us,[1,9],[Wolfeschlegelstein,Daniel],[[7,4],[8,8],[9]] +7,Elizabeth,1,false,true,20,4.7,1980-10-26,1976-12-23 11:21:42,48 hours 24 minutes 11 seconds,[2],[Ein],[[6],[7],[8]] +8,Farooq,2,true,false,25,4.5,1980-10-26,1972-07-31 13:22:30.678559,18 minutes 24 milliseconds,[3,4,5,6,7],[Fesdwe],[[8]] +9,Greg,2,false,false,40,4.9,1980-10-26,1976-12-23 11:21:42Z+06:40,10 years 5 months 13 hours 24 us,[1],[Grad],[[10]] +10,Hubert Blaine Wolfeschlegelsteinhausenbergerdorff,2,false,true,83,4.9,1990-11-27,2023-02-21 13:25:30,3 years 2 days 13 hours 2 minutes,[10,11,12,3,4,5,6,7],[Ad,De,Hi,Kye,Orlan],[[7],[10],[6,7]] diff --git a/dataset/unstructured-property-lists-updates-tests/copy_csv.cypher b/dataset/unstructured-property-lists-updates-tests/copy_csv.cypher deleted file mode 100644 index d09274bdba..0000000000 --- a/dataset/unstructured-property-lists-updates-tests/copy_csv.cypher +++ /dev/null @@ -1 +0,0 @@ -COPY person FROM "dataset/unstructured-property-lists-updates-tests/vPerson.csv" \ No newline at end of file diff --git a/dataset/unstructured-property-lists-updates-tests/readme.txt b/dataset/unstructured-property-lists-updates-tests/readme.txt deleted file mode 100644 index 92020c1a0b..0000000000 --- a/dataset/unstructured-property-lists-updates-tests/readme.txt +++ /dev/null @@ -1,5 +0,0 @@ -# Contains 601 nodes (so maxOffset is 600). Each node has -# two unstructured properties with different names: -# (i) ui{nodeOffset} (for unstructured int) -# (ii) us{nodeOffset} (for unstructured string) -# Node 250 has 600*2=1200 unstructured properties (to facilitate testing with large lists). \ No newline at end of file diff --git a/dataset/unstructured-property-lists-updates-tests/schema.cypher b/dataset/unstructured-property-lists-updates-tests/schema.cypher deleted file mode 100644 index f150363fe2..0000000000 --- a/dataset/unstructured-property-lists-updates-tests/schema.cypher +++ /dev/null @@ -1 +0,0 @@ -create node table person (ID INT64, PRIMARY KEY (ID)); \ No newline at end of file diff --git a/dataset/unstructured-property-lists-updates-tests/vPerson.csv b/dataset/unstructured-property-lists-updates-tests/vPerson.csv deleted file mode 100644 index bcdc4e0c6b..0000000000 --- a/dataset/unstructured-property-lists-updates-tests/vPerson.csv +++ /dev/null @@ -1,601 +0,0 @@ -0,ui0:INT64:123456,us0:STRING:abcdefghijklmn -1,ui1:INT64:123456,us1:STRING:abcdefghijklmn -2,ui2:INT64:123456,us2:STRING:abcdefghijklmn -3,ui3:INT64:123456,us3:STRING:abcdefghijklmn -4,ui4:INT64:123456,us4:STRING:abcdefghijklmn -5,ui5:INT64:123456,us5:STRING:abcdefghijklmn -6,ui6:INT64:123456,us6:STRING:abcdefghijklmn -7,ui7:INT64:123456,us7:STRING:abcdefghijklmn -8,ui8:INT64:123456,us8:STRING:abcdefghijklmn -9,ui9:INT64:123456,us9:STRING:abcdefghijklmn -10,ui10:INT64:123456,us10:STRING:abcdefghijklmn -11,ui11:INT64:123456,us11:STRING:abcdefghijklmn -12,ui12:INT64:123456,us12:STRING:abcdefghijklmn -13,ui13:INT64:123456,us13:STRING:abcdefghijklmn -14,ui14:INT64:123456,us14:STRING:abcdefghijklmn -15,ui15:INT64:123456,us15:STRING:abcdefghijklmn -16,ui16:INT64:123456,us16:STRING:abcdefghijklmn -17,ui17:INT64:123456,us17:STRING:abcdefghijklmn -18,ui18:INT64:123456,us18:STRING:abcdefghijklmn -19,ui19:INT64:123456,us19:STRING:abcdefghijklmn -20,ui20:INT64:123456,us20:STRING:abcdefghijklmn -21,ui21:INT64:123456,us21:STRING:abcdefghijklmn -22,ui22:INT64:123456,us22:STRING:abcdefghijklmn -23,ui23:INT64:123456,us23:STRING:abcdefghijklmn -24,ui24:INT64:123456,us24:STRING:abcdefghijklmn -25,ui25:INT64:123456,us25:STRING:abcdefghijklmn -26,ui26:INT64:123456,us26:STRING:abcdefghijklmn -27,ui27:INT64:123456,us27:STRING:abcdefghijklmn -28,ui28:INT64:123456,us28:STRING:abcdefghijklmn -29,ui29:INT64:123456,us29:STRING:abcdefghijklmn -30,ui30:INT64:123456,us30:STRING:abcdefghijklmn -31,ui31:INT64:123456,us31:STRING:abcdefghijklmn -32,ui32:INT64:123456,us32:STRING:abcdefghijklmn -33,ui33:INT64:123456,us33:STRING:abcdefghijklmn -34,ui34:INT64:123456,us34:STRING:abcdefghijklmn -35,ui35:INT64:123456,us35:STRING:abcdefghijklmn -36,ui36:INT64:123456,us36:STRING:abcdefghijklmn -37,ui37:INT64:123456,us37:STRING:abcdefghijklmn -38,ui38:INT64:123456,us38:STRING:abcdefghijklmn -39,ui39:INT64:123456,us39:STRING:abcdefghijklmn -40,ui40:INT64:123456,us40:STRING:abcdefghijklmn -41,ui41:INT64:123456,us41:STRING:abcdefghijklmn -42,ui42:INT64:123456,us42:STRING:abcdefghijklmn -43,ui43:INT64:123456,us43:STRING:abcdefghijklmn -44,ui44:INT64:123456,us44:STRING:abcdefghijklmn -45,ui45:INT64:123456,us45:STRING:abcdefghijklmn -46,ui46:INT64:123456,us46:STRING:abcdefghijklmn -47,ui47:INT64:123456,us47:STRING:abcdefghijklmn -48,ui48:INT64:123456,us48:STRING:abcdefghijklmn -49,ui49:INT64:123456,us49:STRING:abcdefghijklmn -50,ui50:INT64:123456,us50:STRING:abcdefghijklmn -51,ui51:INT64:123456,us51:STRING:abcdefghijklmn -52,ui52:INT64:123456,us52:STRING:abcdefghijklmn -53,ui53:INT64:123456,us53:STRING:abcdefghijklmn -54,ui54:INT64:123456,us54:STRING:abcdefghijklmn -55,ui55:INT64:123456,us55:STRING:abcdefghijklmn -56,ui56:INT64:123456,us56:STRING:abcdefghijklmn -57,ui57:INT64:123456,us57:STRING:abcdefghijklmn -58,ui58:INT64:123456,us58:STRING:abcdefghijklmn -59,ui59:INT64:123456,us59:STRING:abcdefghijklmn -60,ui60:INT64:123456,us60:STRING:abcdefghijklmn -61,ui61:INT64:123456,us61:STRING:abcdefghijklmn -62,ui62:INT64:123456,us62:STRING:abcdefghijklmn -63,ui63:INT64:123456,us63:STRING:abcdefghijklmn -64,ui64:INT64:123456,us64:STRING:abcdefghijklmn -65,ui65:INT64:123456,us65:STRING:abcdefghijklmn -66,ui66:INT64:123456,us66:STRING:abcdefghijklmn -67,ui67:INT64:123456,us67:STRING:abcdefghijklmn -68,ui68:INT64:123456,us68:STRING:abcdefghijklmn -69,ui69:INT64:123456,us69:STRING:abcdefghijklmn -70,ui70:INT64:123456,us70:STRING:abcdefghijklmn -71,ui71:INT64:123456,us71:STRING:abcdefghijklmn -72,ui72:INT64:123456,us72:STRING:abcdefghijklmn -73,ui73:INT64:123456,us73:STRING:abcdefghijklmn -74,ui74:INT64:123456,us74:STRING:abcdefghijklmn -75,ui75:INT64:123456,us75:STRING:abcdefghijklmn -76,ui76:INT64:123456,us76:STRING:abcdefghijklmn -77,ui77:INT64:123456,us77:STRING:abcdefghijklmn -78,ui78:INT64:123456,us78:STRING:abcdefghijklmn -79,ui79:INT64:123456,us79:STRING:abcdefghijklmn -80,ui80:INT64:123456,us80:STRING:abcdefghijklmn -81,ui81:INT64:123456,us81:STRING:abcdefghijklmn -82,ui82:INT64:123456,us82:STRING:abcdefghijklmn -83,ui83:INT64:123456,us83:STRING:abcdefghijklmn -84,ui84:INT64:123456,us84:STRING:abcdefghijklmn -85,ui85:INT64:123456,us85:STRING:abcdefghijklmn -86,ui86:INT64:123456,us86:STRING:abcdefghijklmn -87,ui87:INT64:123456,us87:STRING:abcdefghijklmn -88,ui88:INT64:123456,us88:STRING:abcdefghijklmn -89,ui89:INT64:123456,us89:STRING:abcdefghijklmn -90,ui90:INT64:123456,us90:STRING:abcdefghijklmn -91,ui91:INT64:123456,us91:STRING:abcdefghijklmn -92,ui92:INT64:123456,us92:STRING:abcdefghijklmn -93,ui93:INT64:123456,us93:STRING:abcdefghijklmn -94,ui94:INT64:123456,us94:STRING:abcdefghijklmn -95,ui95:INT64:123456,us95:STRING:abcdefghijklmn -96,ui96:INT64:123456,us96:STRING:abcdefghijklmn -97,ui97:INT64:123456,us97:STRING:abcdefghijklmn -98,ui98:INT64:123456,us98:STRING:abcdefghijklmn -99,ui99:INT64:123456,us99:STRING:abcdefghijklmn -100,ui100:INT64:123456,us100:STRING:abcdefghijklmn -101,ui101:INT64:123456,us101:STRING:abcdefghijklmn -102,ui102:INT64:123456,us102:STRING:abcdefghijklmn -103,ui103:INT64:123456,us103:STRING:abcdefghijklmn -104,ui104:INT64:123456,us104:STRING:abcdefghijklmn -105,ui105:INT64:123456,us105:STRING:abcdefghijklmn -106,ui106:INT64:123456,us106:STRING:abcdefghijklmn -107,ui107:INT64:123456,us107:STRING:abcdefghijklmn -108,ui108:INT64:123456,us108:STRING:abcdefghijklmn -109,ui109:INT64:123456,us109:STRING:abcdefghijklmn -110,ui110:INT64:123456,us110:STRING:abcdefghijklmn -111,ui111:INT64:123456,us111:STRING:abcdefghijklmn -112,ui112:INT64:123456,us112:STRING:abcdefghijklmn -113,ui113:INT64:123456,us113:STRING:abcdefghijklmn -114,ui114:INT64:123456,us114:STRING:abcdefghijklmn -115,ui115:INT64:123456,us115:STRING:abcdefghijklmn -116,ui116:INT64:123456,us116:STRING:abcdefghijklmn -117,ui117:INT64:123456,us117:STRING:abcdefghijklmn -118,ui118:INT64:123456,us118:STRING:abcdefghijklmn -119,ui119:INT64:123456,us119:STRING:abcdefghijklmn -120,ui120:INT64:123456,us120:STRING:abcdefghijklmn -121,ui121:INT64:123456,us121:STRING:abcdefghijklmn -122,ui122:INT64:123456,us122:STRING:abcdefghijklmn -123,ui123:INT64:123456,us123:STRING:abcdefghijklmn -124,ui124:INT64:123456,us124:STRING:abcdefghijklmn -125,ui125:INT64:123456,us125:STRING:abcdefghijklmn -126,ui126:INT64:123456,us126:STRING:abcdefghijklmn -127,ui127:INT64:123456,us127:STRING:abcdefghijklmn -128,ui128:INT64:123456,us128:STRING:abcdefghijklmn -129,ui129:INT64:123456,us129:STRING:abcdefghijklmn -130,ui130:INT64:123456,us130:STRING:abcdefghijklmn -131,ui131:INT64:123456,us131:STRING:abcdefghijklmn -132,ui132:INT64:123456,us132:STRING:abcdefghijklmn -133,ui133:INT64:123456,us133:STRING:abcdefghijklmn -134,ui134:INT64:123456,us134:STRING:abcdefghijklmn -135,ui135:INT64:123456,us135:STRING:abcdefghijklmn -136,ui136:INT64:123456,us136:STRING:abcdefghijklmn -137,ui137:INT64:123456,us137:STRING:abcdefghijklmn -138,ui138:INT64:123456,us138:STRING:abcdefghijklmn -139,ui139:INT64:123456,us139:STRING:abcdefghijklmn -140,ui140:INT64:123456,us140:STRING:abcdefghijklmn -141,ui141:INT64:123456,us141:STRING:abcdefghijklmn -142,ui142:INT64:123456,us142:STRING:abcdefghijklmn -143,ui143:INT64:123456,us143:STRING:abcdefghijklmn -144,ui144:INT64:123456,us144:STRING:abcdefghijklmn -145,ui145:INT64:123456,us145:STRING:abcdefghijklmn -146,ui146:INT64:123456,us146:STRING:abcdefghijklmn -147,ui147:INT64:123456,us147:STRING:abcdefghijklmn -148,ui148:INT64:123456,us148:STRING:abcdefghijklmn -149,ui149:INT64:123456,us149:STRING:abcdefghijklmn -150,ui150:INT64:123456,us150:STRING:abcdefghijklmn -151,ui151:INT64:123456,us151:STRING:abcdefghijklmn -152,ui152:INT64:123456,us152:STRING:abcdefghijklmn -153,ui153:INT64:123456,us153:STRING:abcdefghijklmn -154,ui154:INT64:123456,us154:STRING:abcdefghijklmn -155,ui155:INT64:123456,us155:STRING:abcdefghijklmn -156,ui156:INT64:123456,us156:STRING:abcdefghijklmn -157,ui157:INT64:123456,us157:STRING:abcdefghijklmn -158,ui158:INT64:123456,us158:STRING:abcdefghijklmn -159,ui159:INT64:123456,us159:STRING:abcdefghijklmn -160,ui160:INT64:123456,us160:STRING:abcdefghijklmn -161,ui161:INT64:123456,us161:STRING:abcdefghijklmn -162,ui162:INT64:123456,us162:STRING:abcdefghijklmn -163,ui163:INT64:123456,us163:STRING:abcdefghijklmn -164,ui164:INT64:123456,us164:STRING:abcdefghijklmn -165,ui165:INT64:123456,us165:STRING:abcdefghijklmn -166,ui166:INT64:123456,us166:STRING:abcdefghijklmn -167,ui167:INT64:123456,us167:STRING:abcdefghijklmn -168,ui168:INT64:123456,us168:STRING:abcdefghijklmn -169,ui169:INT64:123456,us169:STRING:abcdefghijklmn -170,ui170:INT64:123456,us170:STRING:abcdefghijklmn -171,ui171:INT64:123456,us171:STRING:abcdefghijklmn -172,ui172:INT64:123456,us172:STRING:abcdefghijklmn -173,ui173:INT64:123456,us173:STRING:abcdefghijklmn -174,ui174:INT64:123456,us174:STRING:abcdefghijklmn -175,ui175:INT64:123456,us175:STRING:abcdefghijklmn -176,ui176:INT64:123456,us176:STRING:abcdefghijklmn -177,ui177:INT64:123456,us177:STRING:abcdefghijklmn -178,ui178:INT64:123456,us178:STRING:abcdefghijklmn -179,ui179:INT64:123456,us179:STRING:abcdefghijklmn -180,ui180:INT64:123456,us180:STRING:abcdefghijklmn -181,ui181:INT64:123456,us181:STRING:abcdefghijklmn -182,ui182:INT64:123456,us182:STRING:abcdefghijklmn -183,ui183:INT64:123456,us183:STRING:abcdefghijklmn -184,ui184:INT64:123456,us184:STRING:abcdefghijklmn -185,ui185:INT64:123456,us185:STRING:abcdefghijklmn -186,ui186:INT64:123456,us186:STRING:abcdefghijklmn -187,ui187:INT64:123456,us187:STRING:abcdefghijklmn -188,ui188:INT64:123456,us188:STRING:abcdefghijklmn -189,ui189:INT64:123456,us189:STRING:abcdefghijklmn -190,ui190:INT64:123456,us190:STRING:abcdefghijklmn -191,ui191:INT64:123456,us191:STRING:abcdefghijklmn -192,ui192:INT64:123456,us192:STRING:abcdefghijklmn -193,ui193:INT64:123456,us193:STRING:abcdefghijklmn -194,ui194:INT64:123456,us194:STRING:abcdefghijklmn -195,ui195:INT64:123456,us195:STRING:abcdefghijklmn -196,ui196:INT64:123456,us196:STRING:abcdefghijklmn -197,ui197:INT64:123456,us197:STRING:abcdefghijklmn -198,ui198:INT64:123456,us198:STRING:abcdefghijklmn -199,ui199:INT64:123456,us199:STRING:abcdefghijklmn -200,ui200:INT64:123456,us200:STRING:abcdefghijklmn -201,ui201:INT64:123456,us201:STRING:abcdefghijklmn -202,ui202:INT64:123456,us202:STRING:abcdefghijklmn -203,ui203:INT64:123456,us203:STRING:abcdefghijklmn -204,ui204:INT64:123456,us204:STRING:abcdefghijklmn -205,ui205:INT64:123456,us205:STRING:abcdefghijklmn -206,ui206:INT64:123456,us206:STRING:abcdefghijklmn -207,ui207:INT64:123456,us207:STRING:abcdefghijklmn -208,ui208:INT64:123456,us208:STRING:abcdefghijklmn -209,ui209:INT64:123456,us209:STRING:abcdefghijklmn -210,ui210:INT64:123456,us210:STRING:abcdefghijklmn -211,ui211:INT64:123456,us211:STRING:abcdefghijklmn -212,ui212:INT64:123456,us212:STRING:abcdefghijklmn -213,ui213:INT64:123456,us213:STRING:abcdefghijklmn -214,ui214:INT64:123456,us214:STRING:abcdefghijklmn -215,ui215:INT64:123456,us215:STRING:abcdefghijklmn -216,ui216:INT64:123456,us216:STRING:abcdefghijklmn -217,ui217:INT64:123456,us217:STRING:abcdefghijklmn -218,ui218:INT64:123456,us218:STRING:abcdefghijklmn -219,ui219:INT64:123456,us219:STRING:abcdefghijklmn -220,ui220:INT64:123456,us220:STRING:abcdefghijklmn -221,ui221:INT64:123456,us221:STRING:abcdefghijklmn -222,ui222:INT64:123456,us222:STRING:abcdefghijklmn -223,ui223:INT64:123456,us223:STRING:abcdefghijklmn -224,ui224:INT64:123456,us224:STRING:abcdefghijklmn -225,ui225:INT64:123456,us225:STRING:abcdefghijklmn -226,ui226:INT64:123456,us226:STRING:abcdefghijklmn -227,ui227:INT64:123456,us227:STRING:abcdefghijklmn -228,ui228:INT64:123456,us228:STRING:abcdefghijklmn -229,ui229:INT64:123456,us229:STRING:abcdefghijklmn -230,ui230:INT64:123456,us230:STRING:abcdefghijklmn -231,ui231:INT64:123456,us231:STRING:abcdefghijklmn -232,ui232:INT64:123456,us232:STRING:abcdefghijklmn -233,ui233:INT64:123456,us233:STRING:abcdefghijklmn -234,ui234:INT64:123456,us234:STRING:abcdefghijklmn -235,ui235:INT64:123456,us235:STRING:abcdefghijklmn -236,ui236:INT64:123456,us236:STRING:abcdefghijklmn -237,ui237:INT64:123456,us237:STRING:abcdefghijklmn -238,ui238:INT64:123456,us238:STRING:abcdefghijklmn -239,ui239:INT64:123456,us239:STRING:abcdefghijklmn -240,ui240:INT64:123456,us240:STRING:abcdefghijklmn -241,ui241:INT64:123456,us241:STRING:abcdefghijklmn -242,ui242:INT64:123456,us242:STRING:abcdefghijklmn -243,ui243:INT64:123456,us243:STRING:abcdefghijklmn -244,ui244:INT64:123456,us244:STRING:abcdefghijklmn -245,ui245:INT64:123456,us245:STRING:abcdefghijklmn -246,ui246:INT64:123456,us246:STRING:abcdefghijklmn -247,ui247:INT64:123456,us247:STRING:abcdefghijklmn -248,ui248:INT64:123456,us248:STRING:abcdefghijklmn -249,ui249:INT64:123456,us249:STRING:abcdefghijklmn -250,ui0:INT64:123456,us0:STRING:abcdefghijklmn,ui1:INT64:123456,us1:STRING:abcdefghijklmn,ui2:INT64:123456,us2:STRING:abcdefghijklmn,ui3:INT64:123456,us3:STRING:abcdefghijklmn,ui4:INT64:123456,us4:STRING:abcdefghijklmn,ui5:INT64:123456,us5:STRING:abcdefghijklmn,ui6:INT64:123456,us6:STRING:abcdefghijklmn,ui7:INT64:123456,us7:STRING:abcdefghijklmn,ui8:INT64:123456,us8:STRING:abcdefghijklmn,ui9:INT64:123456,us9:STRING:abcdefghijklmn,ui10:INT64:123456,us10:STRING:abcdefghijklmn,ui11:INT64:123456,us11:STRING:abcdefghijklmn,ui12:INT64:123456,us12:STRING:abcdefghijklmn,ui13:INT64:123456,us13:STRING:abcdefghijklmn,ui14:INT64:123456,us14:STRING:abcdefghijklmn,ui15:INT64:123456,us15:STRING:abcdefghijklmn,ui16:INT64:123456,us16:STRING:abcdefghijklmn,ui17:INT64:123456,us17:STRING:abcdefghijklmn,ui18:INT64:123456,us18:STRING:abcdefghijklmn,ui19:INT64:123456,us19:STRING:abcdefghijklmn,ui20:INT64:123456,us20:STRING:abcdefghijklmn,ui21:INT64:123456,us21:STRING:abcdefghijklmn,ui22:INT64:123456,us22:STRING:abcdefghijklmn,ui23:INT64:123456,us23:STRING:abcdefghijklmn,ui24:INT64:123456,us24:STRING:abcdefghijklmn,ui25:INT64:123456,us25:STRING:abcdefghijklmn,ui26:INT64:123456,us26:STRING:abcdefghijklmn,ui27:INT64:123456,us27:STRING:abcdefghijklmn,ui28:INT64:123456,us28:STRING:abcdefghijklmn,ui29:INT64:123456,us29:STRING:abcdefghijklmn,ui30:INT64:123456,us30:STRING:abcdefghijklmn,ui31:INT64:123456,us31:STRING:abcdefghijklmn,ui32:INT64:123456,us32:STRING:abcdefghijklmn,ui33:INT64:123456,us33:STRING:abcdefghijklmn,ui34:INT64:123456,us34:STRING:abcdefghijklmn,ui35:INT64:123456,us35:STRING:abcdefghijklmn,ui36:INT64:123456,us36:STRING:abcdefghijklmn,ui37:INT64:123456,us37:STRING:abcdefghijklmn,ui38:INT64:123456,us38:STRING:abcdefghijklmn,ui39:INT64:123456,us39:STRING:abcdefghijklmn,ui40:INT64:123456,us40:STRING:abcdefghijklmn,ui41:INT64:123456,us41:STRING:abcdefghijklmn,ui42:INT64:123456,us42:STRING:abcdefghijklmn,ui43:INT64:123456,us43:STRING:abcdefghijklmn,ui44:INT64:123456,us44:STRING:abcdefghijklmn,ui45:INT64:123456,us45:STRING:abcdefghijklmn,ui46:INT64:123456,us46:STRING:abcdefghijklmn,ui47:INT64:123456,us47:STRING:abcdefghijklmn,ui48:INT64:123456,us48:STRING:abcdefghijklmn,ui49:INT64:123456,us49:STRING:abcdefghijklmn,ui50:INT64:123456,us50:STRING:abcdefghijklmn,ui51:INT64:123456,us51:STRING:abcdefghijklmn,ui52:INT64:123456,us52:STRING:abcdefghijklmn,ui53:INT64:123456,us53:STRING:abcdefghijklmn,ui54:INT64:123456,us54:STRING:abcdefghijklmn,ui55:INT64:123456,us55:STRING:abcdefghijklmn,ui56:INT64:123456,us56:STRING:abcdefghijklmn,ui57:INT64:123456,us57:STRING:abcdefghijklmn,ui58:INT64:123456,us58:STRING:abcdefghijklmn,ui59:INT64:123456,us59:STRING:abcdefghijklmn,ui60:INT64:123456,us60:STRING:abcdefghijklmn,ui61:INT64:123456,us61:STRING:abcdefghijklmn,ui62:INT64:123456,us62:STRING:abcdefghijklmn,ui63:INT64:123456,us63:STRING:abcdefghijklmn,ui64:INT64:123456,us64:STRING:abcdefghijklmn,ui65:INT64:123456,us65:STRING:abcdefghijklmn,ui66:INT64:123456,us66:STRING:abcdefghijklmn,ui67:INT64:123456,us67:STRING:abcdefghijklmn,ui68:INT64:123456,us68:STRING:abcdefghijklmn,ui69:INT64:123456,us69:STRING:abcdefghijklmn,ui70:INT64:123456,us70:STRING:abcdefghijklmn,ui71:INT64:123456,us71:STRING:abcdefghijklmn,ui72:INT64:123456,us72:STRING:abcdefghijklmn,ui73:INT64:123456,us73:STRING:abcdefghijklmn,ui74:INT64:123456,us74:STRING:abcdefghijklmn,ui75:INT64:123456,us75:STRING:abcdefghijklmn,ui76:INT64:123456,us76:STRING:abcdefghijklmn,ui77:INT64:123456,us77:STRING:abcdefghijklmn,ui78:INT64:123456,us78:STRING:abcdefghijklmn,ui79:INT64:123456,us79:STRING:abcdefghijklmn,ui80:INT64:123456,us80:STRING:abcdefghijklmn,ui81:INT64:123456,us81:STRING:abcdefghijklmn,ui82:INT64:123456,us82:STRING:abcdefghijklmn,ui83:INT64:123456,us83:STRING:abcdefghijklmn,ui84:INT64:123456,us84:STRING:abcdefghijklmn,ui85:INT64:123456,us85:STRING:abcdefghijklmn,ui86:INT64:123456,us86:STRING:abcdefghijklmn,ui87:INT64:123456,us87:STRING:abcdefghijklmn,ui88:INT64:123456,us88:STRING:abcdefghijklmn,ui89:INT64:123456,us89:STRING:abcdefghijklmn,ui90:INT64:123456,us90:STRING:abcdefghijklmn,ui91:INT64:123456,us91:STRING:abcdefghijklmn,ui92:INT64:123456,us92:STRING:abcdefghijklmn,ui93:INT64:123456,us93:STRING:abcdefghijklmn,ui94:INT64:123456,us94:STRING:abcdefghijklmn,ui95:INT64:123456,us95:STRING:abcdefghijklmn,ui96:INT64:123456,us96:STRING:abcdefghijklmn,ui97:INT64:123456,us97:STRING:abcdefghijklmn,ui98:INT64:123456,us98:STRING:abcdefghijklmn,ui99:INT64:123456,us99:STRING:abcdefghijklmn,ui100:INT64:123456,us100:STRING:abcdefghijklmn,ui101:INT64:123456,us101:STRING:abcdefghijklmn,ui102:INT64:123456,us102:STRING:abcdefghijklmn,ui103:INT64:123456,us103:STRING:abcdefghijklmn,ui104:INT64:123456,us104:STRING:abcdefghijklmn,ui105:INT64:123456,us105:STRING:abcdefghijklmn,ui106:INT64:123456,us106:STRING:abcdefghijklmn,ui107:INT64:123456,us107:STRING:abcdefghijklmn,ui108:INT64:123456,us108:STRING:abcdefghijklmn,ui109:INT64:123456,us109:STRING:abcdefghijklmn,ui110:INT64:123456,us110:STRING:abcdefghijklmn,ui111:INT64:123456,us111:STRING:abcdefghijklmn,ui112:INT64:123456,us112:STRING:abcdefghijklmn,ui113:INT64:123456,us113:STRING:abcdefghijklmn,ui114:INT64:123456,us114:STRING:abcdefghijklmn,ui115:INT64:123456,us115:STRING:abcdefghijklmn,ui116:INT64:123456,us116:STRING:abcdefghijklmn,ui117:INT64:123456,us117:STRING:abcdefghijklmn,ui118:INT64:123456,us118:STRING:abcdefghijklmn,ui119:INT64:123456,us119:STRING:abcdefghijklmn,ui120:INT64:123456,us120:STRING:abcdefghijklmn,ui121:INT64:123456,us121:STRING:abcdefghijklmn,ui122:INT64:123456,us122:STRING:abcdefghijklmn,ui123:INT64:123456,us123:STRING:abcdefghijklmn,ui124:INT64:123456,us124:STRING:abcdefghijklmn,ui125:INT64:123456,us125:STRING:abcdefghijklmn,ui126:INT64:123456,us126:STRING:abcdefghijklmn,ui127:INT64:123456,us127:STRING:abcdefghijklmn,ui128:INT64:123456,us128:STRING:abcdefghijklmn,ui129:INT64:123456,us129:STRING:abcdefghijklmn,ui130:INT64:123456,us130:STRING:abcdefghijklmn,ui131:INT64:123456,us131:STRING:abcdefghijklmn,ui132:INT64:123456,us132:STRING:abcdefghijklmn,ui133:INT64:123456,us133:STRING:abcdefghijklmn,ui134:INT64:123456,us134:STRING:abcdefghijklmn,ui135:INT64:123456,us135:STRING:abcdefghijklmn,ui136:INT64:123456,us136:STRING:abcdefghijklmn,ui137:INT64:123456,us137:STRING:abcdefghijklmn,ui138:INT64:123456,us138:STRING:abcdefghijklmn,ui139:INT64:123456,us139:STRING:abcdefghijklmn,ui140:INT64:123456,us140:STRING:abcdefghijklmn,ui141:INT64:123456,us141:STRING:abcdefghijklmn,ui142:INT64:123456,us142:STRING:abcdefghijklmn,ui143:INT64:123456,us143:STRING:abcdefghijklmn,ui144:INT64:123456,us144:STRING:abcdefghijklmn,ui145:INT64:123456,us145:STRING:abcdefghijklmn,ui146:INT64:123456,us146:STRING:abcdefghijklmn,ui147:INT64:123456,us147:STRING:abcdefghijklmn,ui148:INT64:123456,us148:STRING:abcdefghijklmn,ui149:INT64:123456,us149:STRING:abcdefghijklmn,ui150:INT64:123456,us150:STRING:abcdefghijklmn,ui151:INT64:123456,us151:STRING:abcdefghijklmn,ui152:INT64:123456,us152:STRING:abcdefghijklmn,ui153:INT64:123456,us153:STRING:abcdefghijklmn,ui154:INT64:123456,us154:STRING:abcdefghijklmn,ui155:INT64:123456,us155:STRING:abcdefghijklmn,ui156:INT64:123456,us156:STRING:abcdefghijklmn,ui157:INT64:123456,us157:STRING:abcdefghijklmn,ui158:INT64:123456,us158:STRING:abcdefghijklmn,ui159:INT64:123456,us159:STRING:abcdefghijklmn,ui160:INT64:123456,us160:STRING:abcdefghijklmn,ui161:INT64:123456,us161:STRING:abcdefghijklmn,ui162:INT64:123456,us162:STRING:abcdefghijklmn,ui163:INT64:123456,us163:STRING:abcdefghijklmn,ui164:INT64:123456,us164:STRING:abcdefghijklmn,ui165:INT64:123456,us165:STRING:abcdefghijklmn,ui166:INT64:123456,us166:STRING:abcdefghijklmn,ui167:INT64:123456,us167:STRING:abcdefghijklmn,ui168:INT64:123456,us168:STRING:abcdefghijklmn,ui169:INT64:123456,us169:STRING:abcdefghijklmn,ui170:INT64:123456,us170:STRING:abcdefghijklmn,ui171:INT64:123456,us171:STRING:abcdefghijklmn,ui172:INT64:123456,us172:STRING:abcdefghijklmn,ui173:INT64:123456,us173:STRING:abcdefghijklmn,ui174:INT64:123456,us174:STRING:abcdefghijklmn,ui175:INT64:123456,us175:STRING:abcdefghijklmn,ui176:INT64:123456,us176:STRING:abcdefghijklmn,ui177:INT64:123456,us177:STRING:abcdefghijklmn,ui178:INT64:123456,us178:STRING:abcdefghijklmn,ui179:INT64:123456,us179:STRING:abcdefghijklmn,ui180:INT64:123456,us180:STRING:abcdefghijklmn,ui181:INT64:123456,us181:STRING:abcdefghijklmn,ui182:INT64:123456,us182:STRING:abcdefghijklmn,ui183:INT64:123456,us183:STRING:abcdefghijklmn,ui184:INT64:123456,us184:STRING:abcdefghijklmn,ui185:INT64:123456,us185:STRING:abcdefghijklmn,ui186:INT64:123456,us186:STRING:abcdefghijklmn,ui187:INT64:123456,us187:STRING:abcdefghijklmn,ui188:INT64:123456,us188:STRING:abcdefghijklmn,ui189:INT64:123456,us189:STRING:abcdefghijklmn,ui190:INT64:123456,us190:STRING:abcdefghijklmn,ui191:INT64:123456,us191:STRING:abcdefghijklmn,ui192:INT64:123456,us192:STRING:abcdefghijklmn,ui193:INT64:123456,us193:STRING:abcdefghijklmn,ui194:INT64:123456,us194:STRING:abcdefghijklmn,ui195:INT64:123456,us195:STRING:abcdefghijklmn,ui196:INT64:123456,us196:STRING:abcdefghijklmn,ui197:INT64:123456,us197:STRING:abcdefghijklmn,ui198:INT64:123456,us198:STRING:abcdefghijklmn,ui199:INT64:123456,us199:STRING:abcdefghijklmn,ui200:INT64:123456,us200:STRING:abcdefghijklmn,ui201:INT64:123456,us201:STRING:abcdefghijklmn,ui202:INT64:123456,us202:STRING:abcdefghijklmn,ui203:INT64:123456,us203:STRING:abcdefghijklmn,ui204:INT64:123456,us204:STRING:abcdefghijklmn,ui205:INT64:123456,us205:STRING:abcdefghijklmn,ui206:INT64:123456,us206:STRING:abcdefghijklmn,ui207:INT64:123456,us207:STRING:abcdefghijklmn,ui208:INT64:123456,us208:STRING:abcdefghijklmn,ui209:INT64:123456,us209:STRING:abcdefghijklmn,ui210:INT64:123456,us210:STRING:abcdefghijklmn,ui211:INT64:123456,us211:STRING:abcdefghijklmn,ui212:INT64:123456,us212:STRING:abcdefghijklmn,ui213:INT64:123456,us213:STRING:abcdefghijklmn,ui214:INT64:123456,us214:STRING:abcdefghijklmn,ui215:INT64:123456,us215:STRING:abcdefghijklmn,ui216:INT64:123456,us216:STRING:abcdefghijklmn,ui217:INT64:123456,us217:STRING:abcdefghijklmn,ui218:INT64:123456,us218:STRING:abcdefghijklmn,ui219:INT64:123456,us219:STRING:abcdefghijklmn,ui220:INT64:123456,us220:STRING:abcdefghijklmn,ui221:INT64:123456,us221:STRING:abcdefghijklmn,ui222:INT64:123456,us222:STRING:abcdefghijklmn,ui223:INT64:123456,us223:STRING:abcdefghijklmn,ui224:INT64:123456,us224:STRING:abcdefghijklmn,ui225:INT64:123456,us225:STRING:abcdefghijklmn,ui226:INT64:123456,us226:STRING:abcdefghijklmn,ui227:INT64:123456,us227:STRING:abcdefghijklmn,ui228:INT64:123456,us228:STRING:abcdefghijklmn,ui229:INT64:123456,us229:STRING:abcdefghijklmn,ui230:INT64:123456,us230:STRING:abcdefghijklmn,ui231:INT64:123456,us231:STRING:abcdefghijklmn,ui232:INT64:123456,us232:STRING:abcdefghijklmn,ui233:INT64:123456,us233:STRING:abcdefghijklmn,ui234:INT64:123456,us234:STRING:abcdefghijklmn,ui235:INT64:123456,us235:STRING:abcdefghijklmn,ui236:INT64:123456,us236:STRING:abcdefghijklmn,ui237:INT64:123456,us237:STRING:abcdefghijklmn,ui238:INT64:123456,us238:STRING:abcdefghijklmn,ui239:INT64:123456,us239:STRING:abcdefghijklmn,ui240:INT64:123456,us240:STRING:abcdefghijklmn,ui241:INT64:123456,us241:STRING:abcdefghijklmn,ui242:INT64:123456,us242:STRING:abcdefghijklmn,ui243:INT64:123456,us243:STRING:abcdefghijklmn,ui244:INT64:123456,us244:STRING:abcdefghijklmn,ui245:INT64:123456,us245:STRING:abcdefghijklmn,ui246:INT64:123456,us246:STRING:abcdefghijklmn,ui247:INT64:123456,us247:STRING:abcdefghijklmn,ui248:INT64:123456,us248:STRING:abcdefghijklmn,ui249:INT64:123456,us249:STRING:abcdefghijklmn,ui250:INT64:123456,us250:STRING:abcdefghijklmn,ui251:INT64:123456,us251:STRING:abcdefghijklmn,ui252:INT64:123456,us252:STRING:abcdefghijklmn,ui253:INT64:123456,us253:STRING:abcdefghijklmn,ui254:INT64:123456,us254:STRING:abcdefghijklmn,ui255:INT64:123456,us255:STRING:abcdefghijklmn,ui256:INT64:123456,us256:STRING:abcdefghijklmn,ui257:INT64:123456,us257:STRING:abcdefghijklmn,ui258:INT64:123456,us258:STRING:abcdefghijklmn,ui259:INT64:123456,us259:STRING:abcdefghijklmn,ui260:INT64:123456,us260:STRING:abcdefghijklmn,ui261:INT64:123456,us261:STRING:abcdefghijklmn,ui262:INT64:123456,us262:STRING:abcdefghijklmn,ui263:INT64:123456,us263:STRING:abcdefghijklmn,ui264:INT64:123456,us264:STRING:abcdefghijklmn,ui265:INT64:123456,us265:STRING:abcdefghijklmn,ui266:INT64:123456,us266:STRING:abcdefghijklmn,ui267:INT64:123456,us267:STRING:abcdefghijklmn,ui268:INT64:123456,us268:STRING:abcdefghijklmn,ui269:INT64:123456,us269:STRING:abcdefghijklmn,ui270:INT64:123456,us270:STRING:abcdefghijklmn,ui271:INT64:123456,us271:STRING:abcdefghijklmn,ui272:INT64:123456,us272:STRING:abcdefghijklmn,ui273:INT64:123456,us273:STRING:abcdefghijklmn,ui274:INT64:123456,us274:STRING:abcdefghijklmn,ui275:INT64:123456,us275:STRING:abcdefghijklmn,ui276:INT64:123456,us276:STRING:abcdefghijklmn,ui277:INT64:123456,us277:STRING:abcdefghijklmn,ui278:INT64:123456,us278:STRING:abcdefghijklmn,ui279:INT64:123456,us279:STRING:abcdefghijklmn,ui280:INT64:123456,us280:STRING:abcdefghijklmn,ui281:INT64:123456,us281:STRING:abcdefghijklmn,ui282:INT64:123456,us282:STRING:abcdefghijklmn,ui283:INT64:123456,us283:STRING:abcdefghijklmn,ui284:INT64:123456,us284:STRING:abcdefghijklmn,ui285:INT64:123456,us285:STRING:abcdefghijklmn,ui286:INT64:123456,us286:STRING:abcdefghijklmn,ui287:INT64:123456,us287:STRING:abcdefghijklmn,ui288:INT64:123456,us288:STRING:abcdefghijklmn,ui289:INT64:123456,us289:STRING:abcdefghijklmn,ui290:INT64:123456,us290:STRING:abcdefghijklmn,ui291:INT64:123456,us291:STRING:abcdefghijklmn,ui292:INT64:123456,us292:STRING:abcdefghijklmn,ui293:INT64:123456,us293:STRING:abcdefghijklmn,ui294:INT64:123456,us294:STRING:abcdefghijklmn,ui295:INT64:123456,us295:STRING:abcdefghijklmn,ui296:INT64:123456,us296:STRING:abcdefghijklmn,ui297:INT64:123456,us297:STRING:abcdefghijklmn,ui298:INT64:123456,us298:STRING:abcdefghijklmn,ui299:INT64:123456,us299:STRING:abcdefghijklmn,ui300:INT64:123456,us300:STRING:abcdefghijklmn,ui301:INT64:123456,us301:STRING:abcdefghijklmn,ui302:INT64:123456,us302:STRING:abcdefghijklmn,ui303:INT64:123456,us303:STRING:abcdefghijklmn,ui304:INT64:123456,us304:STRING:abcdefghijklmn,ui305:INT64:123456,us305:STRING:abcdefghijklmn,ui306:INT64:123456,us306:STRING:abcdefghijklmn,ui307:INT64:123456,us307:STRING:abcdefghijklmn,ui308:INT64:123456,us308:STRING:abcdefghijklmn,ui309:INT64:123456,us309:STRING:abcdefghijklmn,ui310:INT64:123456,us310:STRING:abcdefghijklmn,ui311:INT64:123456,us311:STRING:abcdefghijklmn,ui312:INT64:123456,us312:STRING:abcdefghijklmn,ui313:INT64:123456,us313:STRING:abcdefghijklmn,ui314:INT64:123456,us314:STRING:abcdefghijklmn,ui315:INT64:123456,us315:STRING:abcdefghijklmn,ui316:INT64:123456,us316:STRING:abcdefghijklmn,ui317:INT64:123456,us317:STRING:abcdefghijklmn,ui318:INT64:123456,us318:STRING:abcdefghijklmn,ui319:INT64:123456,us319:STRING:abcdefghijklmn,ui320:INT64:123456,us320:STRING:abcdefghijklmn,ui321:INT64:123456,us321:STRING:abcdefghijklmn,ui322:INT64:123456,us322:STRING:abcdefghijklmn,ui323:INT64:123456,us323:STRING:abcdefghijklmn,ui324:INT64:123456,us324:STRING:abcdefghijklmn,ui325:INT64:123456,us325:STRING:abcdefghijklmn,ui326:INT64:123456,us326:STRING:abcdefghijklmn,ui327:INT64:123456,us327:STRING:abcdefghijklmn,ui328:INT64:123456,us328:STRING:abcdefghijklmn,ui329:INT64:123456,us329:STRING:abcdefghijklmn,ui330:INT64:123456,us330:STRING:abcdefghijklmn,ui331:INT64:123456,us331:STRING:abcdefghijklmn,ui332:INT64:123456,us332:STRING:abcdefghijklmn,ui333:INT64:123456,us333:STRING:abcdefghijklmn,ui334:INT64:123456,us334:STRING:abcdefghijklmn,ui335:INT64:123456,us335:STRING:abcdefghijklmn,ui336:INT64:123456,us336:STRING:abcdefghijklmn,ui337:INT64:123456,us337:STRING:abcdefghijklmn,ui338:INT64:123456,us338:STRING:abcdefghijklmn,ui339:INT64:123456,us339:STRING:abcdefghijklmn,ui340:INT64:123456,us340:STRING:abcdefghijklmn,ui341:INT64:123456,us341:STRING:abcdefghijklmn,ui342:INT64:123456,us342:STRING:abcdefghijklmn,ui343:INT64:123456,us343:STRING:abcdefghijklmn,ui344:INT64:123456,us344:STRING:abcdefghijklmn,ui345:INT64:123456,us345:STRING:abcdefghijklmn,ui346:INT64:123456,us346:STRING:abcdefghijklmn,ui347:INT64:123456,us347:STRING:abcdefghijklmn,ui348:INT64:123456,us348:STRING:abcdefghijklmn,ui349:INT64:123456,us349:STRING:abcdefghijklmn,ui350:INT64:123456,us350:STRING:abcdefghijklmn,ui351:INT64:123456,us351:STRING:abcdefghijklmn,ui352:INT64:123456,us352:STRING:abcdefghijklmn,ui353:INT64:123456,us353:STRING:abcdefghijklmn,ui354:INT64:123456,us354:STRING:abcdefghijklmn,ui355:INT64:123456,us355:STRING:abcdefghijklmn,ui356:INT64:123456,us356:STRING:abcdefghijklmn,ui357:INT64:123456,us357:STRING:abcdefghijklmn,ui358:INT64:123456,us358:STRING:abcdefghijklmn,ui359:INT64:123456,us359:STRING:abcdefghijklmn,ui360:INT64:123456,us360:STRING:abcdefghijklmn,ui361:INT64:123456,us361:STRING:abcdefghijklmn,ui362:INT64:123456,us362:STRING:abcdefghijklmn,ui363:INT64:123456,us363:STRING:abcdefghijklmn,ui364:INT64:123456,us364:STRING:abcdefghijklmn,ui365:INT64:123456,us365:STRING:abcdefghijklmn,ui366:INT64:123456,us366:STRING:abcdefghijklmn,ui367:INT64:123456,us367:STRING:abcdefghijklmn,ui368:INT64:123456,us368:STRING:abcdefghijklmn,ui369:INT64:123456,us369:STRING:abcdefghijklmn,ui370:INT64:123456,us370:STRING:abcdefghijklmn,ui371:INT64:123456,us371:STRING:abcdefghijklmn,ui372:INT64:123456,us372:STRING:abcdefghijklmn,ui373:INT64:123456,us373:STRING:abcdefghijklmn,ui374:INT64:123456,us374:STRING:abcdefghijklmn,ui375:INT64:123456,us375:STRING:abcdefghijklmn,ui376:INT64:123456,us376:STRING:abcdefghijklmn,ui377:INT64:123456,us377:STRING:abcdefghijklmn,ui378:INT64:123456,us378:STRING:abcdefghijklmn,ui379:INT64:123456,us379:STRING:abcdefghijklmn,ui380:INT64:123456,us380:STRING:abcdefghijklmn,ui381:INT64:123456,us381:STRING:abcdefghijklmn,ui382:INT64:123456,us382:STRING:abcdefghijklmn,ui383:INT64:123456,us383:STRING:abcdefghijklmn,ui384:INT64:123456,us384:STRING:abcdefghijklmn,ui385:INT64:123456,us385:STRING:abcdefghijklmn,ui386:INT64:123456,us386:STRING:abcdefghijklmn,ui387:INT64:123456,us387:STRING:abcdefghijklmn,ui388:INT64:123456,us388:STRING:abcdefghijklmn,ui389:INT64:123456,us389:STRING:abcdefghijklmn,ui390:INT64:123456,us390:STRING:abcdefghijklmn,ui391:INT64:123456,us391:STRING:abcdefghijklmn,ui392:INT64:123456,us392:STRING:abcdefghijklmn,ui393:INT64:123456,us393:STRING:abcdefghijklmn,ui394:INT64:123456,us394:STRING:abcdefghijklmn,ui395:INT64:123456,us395:STRING:abcdefghijklmn,ui396:INT64:123456,us396:STRING:abcdefghijklmn,ui397:INT64:123456,us397:STRING:abcdefghijklmn,ui398:INT64:123456,us398:STRING:abcdefghijklmn,ui399:INT64:123456,us399:STRING:abcdefghijklmn,ui400:INT64:123456,us400:STRING:abcdefghijklmn,ui401:INT64:123456,us401:STRING:abcdefghijklmn,ui402:INT64:123456,us402:STRING:abcdefghijklmn,ui403:INT64:123456,us403:STRING:abcdefghijklmn,ui404:INT64:123456,us404:STRING:abcdefghijklmn,ui405:INT64:123456,us405:STRING:abcdefghijklmn,ui406:INT64:123456,us406:STRING:abcdefghijklmn,ui407:INT64:123456,us407:STRING:abcdefghijklmn,ui408:INT64:123456,us408:STRING:abcdefghijklmn,ui409:INT64:123456,us409:STRING:abcdefghijklmn,ui410:INT64:123456,us410:STRING:abcdefghijklmn,ui411:INT64:123456,us411:STRING:abcdefghijklmn,ui412:INT64:123456,us412:STRING:abcdefghijklmn,ui413:INT64:123456,us413:STRING:abcdefghijklmn,ui414:INT64:123456,us414:STRING:abcdefghijklmn,ui415:INT64:123456,us415:STRING:abcdefghijklmn,ui416:INT64:123456,us416:STRING:abcdefghijklmn,ui417:INT64:123456,us417:STRING:abcdefghijklmn,ui418:INT64:123456,us418:STRING:abcdefghijklmn,ui419:INT64:123456,us419:STRING:abcdefghijklmn,ui420:INT64:123456,us420:STRING:abcdefghijklmn,ui421:INT64:123456,us421:STRING:abcdefghijklmn,ui422:INT64:123456,us422:STRING:abcdefghijklmn,ui423:INT64:123456,us423:STRING:abcdefghijklmn,ui424:INT64:123456,us424:STRING:abcdefghijklmn,ui425:INT64:123456,us425:STRING:abcdefghijklmn,ui426:INT64:123456,us426:STRING:abcdefghijklmn,ui427:INT64:123456,us427:STRING:abcdefghijklmn,ui428:INT64:123456,us428:STRING:abcdefghijklmn,ui429:INT64:123456,us429:STRING:abcdefghijklmn,ui430:INT64:123456,us430:STRING:abcdefghijklmn,ui431:INT64:123456,us431:STRING:abcdefghijklmn,ui432:INT64:123456,us432:STRING:abcdefghijklmn,ui433:INT64:123456,us433:STRING:abcdefghijklmn,ui434:INT64:123456,us434:STRING:abcdefghijklmn,ui435:INT64:123456,us435:STRING:abcdefghijklmn,ui436:INT64:123456,us436:STRING:abcdefghijklmn,ui437:INT64:123456,us437:STRING:abcdefghijklmn,ui438:INT64:123456,us438:STRING:abcdefghijklmn,ui439:INT64:123456,us439:STRING:abcdefghijklmn,ui440:INT64:123456,us440:STRING:abcdefghijklmn,ui441:INT64:123456,us441:STRING:abcdefghijklmn,ui442:INT64:123456,us442:STRING:abcdefghijklmn,ui443:INT64:123456,us443:STRING:abcdefghijklmn,ui444:INT64:123456,us444:STRING:abcdefghijklmn,ui445:INT64:123456,us445:STRING:abcdefghijklmn,ui446:INT64:123456,us446:STRING:abcdefghijklmn,ui447:INT64:123456,us447:STRING:abcdefghijklmn,ui448:INT64:123456,us448:STRING:abcdefghijklmn,ui449:INT64:123456,us449:STRING:abcdefghijklmn,ui450:INT64:123456,us450:STRING:abcdefghijklmn,ui451:INT64:123456,us451:STRING:abcdefghijklmn,ui452:INT64:123456,us452:STRING:abcdefghijklmn,ui453:INT64:123456,us453:STRING:abcdefghijklmn,ui454:INT64:123456,us454:STRING:abcdefghijklmn,ui455:INT64:123456,us455:STRING:abcdefghijklmn,ui456:INT64:123456,us456:STRING:abcdefghijklmn,ui457:INT64:123456,us457:STRING:abcdefghijklmn,ui458:INT64:123456,us458:STRING:abcdefghijklmn,ui459:INT64:123456,us459:STRING:abcdefghijklmn,ui460:INT64:123456,us460:STRING:abcdefghijklmn,ui461:INT64:123456,us461:STRING:abcdefghijklmn,ui462:INT64:123456,us462:STRING:abcdefghijklmn,ui463:INT64:123456,us463:STRING:abcdefghijklmn,ui464:INT64:123456,us464:STRING:abcdefghijklmn,ui465:INT64:123456,us465:STRING:abcdefghijklmn,ui466:INT64:123456,us466:STRING:abcdefghijklmn,ui467:INT64:123456,us467:STRING:abcdefghijklmn,ui468:INT64:123456,us468:STRING:abcdefghijklmn,ui469:INT64:123456,us469:STRING:abcdefghijklmn,ui470:INT64:123456,us470:STRING:abcdefghijklmn,ui471:INT64:123456,us471:STRING:abcdefghijklmn,ui472:INT64:123456,us472:STRING:abcdefghijklmn,ui473:INT64:123456,us473:STRING:abcdefghijklmn,ui474:INT64:123456,us474:STRING:abcdefghijklmn,ui475:INT64:123456,us475:STRING:abcdefghijklmn,ui476:INT64:123456,us476:STRING:abcdefghijklmn,ui477:INT64:123456,us477:STRING:abcdefghijklmn,ui478:INT64:123456,us478:STRING:abcdefghijklmn,ui479:INT64:123456,us479:STRING:abcdefghijklmn,ui480:INT64:123456,us480:STRING:abcdefghijklmn,ui481:INT64:123456,us481:STRING:abcdefghijklmn,ui482:INT64:123456,us482:STRING:abcdefghijklmn,ui483:INT64:123456,us483:STRING:abcdefghijklmn,ui484:INT64:123456,us484:STRING:abcdefghijklmn,ui485:INT64:123456,us485:STRING:abcdefghijklmn,ui486:INT64:123456,us486:STRING:abcdefghijklmn,ui487:INT64:123456,us487:STRING:abcdefghijklmn,ui488:INT64:123456,us488:STRING:abcdefghijklmn,ui489:INT64:123456,us489:STRING:abcdefghijklmn,ui490:INT64:123456,us490:STRING:abcdefghijklmn,ui491:INT64:123456,us491:STRING:abcdefghijklmn,ui492:INT64:123456,us492:STRING:abcdefghijklmn,ui493:INT64:123456,us493:STRING:abcdefghijklmn,ui494:INT64:123456,us494:STRING:abcdefghijklmn,ui495:INT64:123456,us495:STRING:abcdefghijklmn,ui496:INT64:123456,us496:STRING:abcdefghijklmn,ui497:INT64:123456,us497:STRING:abcdefghijklmn,ui498:INT64:123456,us498:STRING:abcdefghijklmn,ui499:INT64:123456,us499:STRING:abcdefghijklmn,ui500:INT64:123456,us500:STRING:abcdefghijklmn,ui501:INT64:123456,us501:STRING:abcdefghijklmn,ui502:INT64:123456,us502:STRING:abcdefghijklmn,ui503:INT64:123456,us503:STRING:abcdefghijklmn,ui504:INT64:123456,us504:STRING:abcdefghijklmn,ui505:INT64:123456,us505:STRING:abcdefghijklmn,ui506:INT64:123456,us506:STRING:abcdefghijklmn,ui507:INT64:123456,us507:STRING:abcdefghijklmn,ui508:INT64:123456,us508:STRING:abcdefghijklmn,ui509:INT64:123456,us509:STRING:abcdefghijklmn,ui510:INT64:123456,us510:STRING:abcdefghijklmn,ui511:INT64:123456,us511:STRING:abcdefghijklmn,ui512:INT64:123456,us512:STRING:abcdefghijklmn,ui513:INT64:123456,us513:STRING:abcdefghijklmn,ui514:INT64:123456,us514:STRING:abcdefghijklmn,ui515:INT64:123456,us515:STRING:abcdefghijklmn,ui516:INT64:123456,us516:STRING:abcdefghijklmn,ui517:INT64:123456,us517:STRING:abcdefghijklmn,ui518:INT64:123456,us518:STRING:abcdefghijklmn,ui519:INT64:123456,us519:STRING:abcdefghijklmn,ui520:INT64:123456,us520:STRING:abcdefghijklmn,ui521:INT64:123456,us521:STRING:abcdefghijklmn,ui522:INT64:123456,us522:STRING:abcdefghijklmn,ui523:INT64:123456,us523:STRING:abcdefghijklmn,ui524:INT64:123456,us524:STRING:abcdefghijklmn,ui525:INT64:123456,us525:STRING:abcdefghijklmn,ui526:INT64:123456,us526:STRING:abcdefghijklmn,ui527:INT64:123456,us527:STRING:abcdefghijklmn,ui528:INT64:123456,us528:STRING:abcdefghijklmn,ui529:INT64:123456,us529:STRING:abcdefghijklmn,ui530:INT64:123456,us530:STRING:abcdefghijklmn,ui531:INT64:123456,us531:STRING:abcdefghijklmn,ui532:INT64:123456,us532:STRING:abcdefghijklmn,ui533:INT64:123456,us533:STRING:abcdefghijklmn,ui534:INT64:123456,us534:STRING:abcdefghijklmn,ui535:INT64:123456,us535:STRING:abcdefghijklmn,ui536:INT64:123456,us536:STRING:abcdefghijklmn,ui537:INT64:123456,us537:STRING:abcdefghijklmn,ui538:INT64:123456,us538:STRING:abcdefghijklmn,ui539:INT64:123456,us539:STRING:abcdefghijklmn,ui540:INT64:123456,us540:STRING:abcdefghijklmn,ui541:INT64:123456,us541:STRING:abcdefghijklmn,ui542:INT64:123456,us542:STRING:abcdefghijklmn,ui543:INT64:123456,us543:STRING:abcdefghijklmn,ui544:INT64:123456,us544:STRING:abcdefghijklmn,ui545:INT64:123456,us545:STRING:abcdefghijklmn,ui546:INT64:123456,us546:STRING:abcdefghijklmn,ui547:INT64:123456,us547:STRING:abcdefghijklmn,ui548:INT64:123456,us548:STRING:abcdefghijklmn,ui549:INT64:123456,us549:STRING:abcdefghijklmn,ui550:INT64:123456,us550:STRING:abcdefghijklmn,ui551:INT64:123456,us551:STRING:abcdefghijklmn,ui552:INT64:123456,us552:STRING:abcdefghijklmn,ui553:INT64:123456,us553:STRING:abcdefghijklmn,ui554:INT64:123456,us554:STRING:abcdefghijklmn,ui555:INT64:123456,us555:STRING:abcdefghijklmn,ui556:INT64:123456,us556:STRING:abcdefghijklmn,ui557:INT64:123456,us557:STRING:abcdefghijklmn,ui558:INT64:123456,us558:STRING:abcdefghijklmn,ui559:INT64:123456,us559:STRING:abcdefghijklmn,ui560:INT64:123456,us560:STRING:abcdefghijklmn,ui561:INT64:123456,us561:STRING:abcdefghijklmn,ui562:INT64:123456,us562:STRING:abcdefghijklmn,ui563:INT64:123456,us563:STRING:abcdefghijklmn,ui564:INT64:123456,us564:STRING:abcdefghijklmn,ui565:INT64:123456,us565:STRING:abcdefghijklmn,ui566:INT64:123456,us566:STRING:abcdefghijklmn,ui567:INT64:123456,us567:STRING:abcdefghijklmn,ui568:INT64:123456,us568:STRING:abcdefghijklmn,ui569:INT64:123456,us569:STRING:abcdefghijklmn,ui570:INT64:123456,us570:STRING:abcdefghijklmn,ui571:INT64:123456,us571:STRING:abcdefghijklmn,ui572:INT64:123456,us572:STRING:abcdefghijklmn,ui573:INT64:123456,us573:STRING:abcdefghijklmn,ui574:INT64:123456,us574:STRING:abcdefghijklmn,ui575:INT64:123456,us575:STRING:abcdefghijklmn,ui576:INT64:123456,us576:STRING:abcdefghijklmn,ui577:INT64:123456,us577:STRING:abcdefghijklmn,ui578:INT64:123456,us578:STRING:abcdefghijklmn,ui579:INT64:123456,us579:STRING:abcdefghijklmn,ui580:INT64:123456,us580:STRING:abcdefghijklmn,ui581:INT64:123456,us581:STRING:abcdefghijklmn,ui582:INT64:123456,us582:STRING:abcdefghijklmn,ui583:INT64:123456,us583:STRING:abcdefghijklmn,ui584:INT64:123456,us584:STRING:abcdefghijklmn,ui585:INT64:123456,us585:STRING:abcdefghijklmn,ui586:INT64:123456,us586:STRING:abcdefghijklmn,ui587:INT64:123456,us587:STRING:abcdefghijklmn,ui588:INT64:123456,us588:STRING:abcdefghijklmn,ui589:INT64:123456,us589:STRING:abcdefghijklmn,ui590:INT64:123456,us590:STRING:abcdefghijklmn,ui591:INT64:123456,us591:STRING:abcdefghijklmn,ui592:INT64:123456,us592:STRING:abcdefghijklmn,ui593:INT64:123456,us593:STRING:abcdefghijklmn,ui594:INT64:123456,us594:STRING:abcdefghijklmn,ui595:INT64:123456,us595:STRING:abcdefghijklmn,ui596:INT64:123456,us596:STRING:abcdefghijklmn,ui597:INT64:123456,us597:STRING:abcdefghijklmn,ui598:INT64:123456,us598:STRING:abcdefghijklmn,ui599:INT64:123456,us599:STRING:abcdefghijklmn,ui600:INT64:123456,us600:STRING:abcdefghijklmn -251,ui251:INT64:123456,us251:STRING:abcdefghijklmn -252,ui252:INT64:123456,us252:STRING:abcdefghijklmn -253,ui253:INT64:123456,us253:STRING:abcdefghijklmn -254,ui254:INT64:123456,us254:STRING:abcdefghijklmn -255,ui255:INT64:123456,us255:STRING:abcdefghijklmn -256,ui256:INT64:123456,us256:STRING:abcdefghijklmn -257,ui257:INT64:123456,us257:STRING:abcdefghijklmn -258,ui258:INT64:123456,us258:STRING:abcdefghijklmn -259,ui259:INT64:123456,us259:STRING:abcdefghijklmn -260,ui260:INT64:123456,us260:STRING:abcdefghijklmn -261,ui261:INT64:123456,us261:STRING:abcdefghijklmn -262,ui262:INT64:123456,us262:STRING:abcdefghijklmn -263,ui263:INT64:123456,us263:STRING:abcdefghijklmn -264,ui264:INT64:123456,us264:STRING:abcdefghijklmn -265,ui265:INT64:123456,us265:STRING:abcdefghijklmn -266,ui266:INT64:123456,us266:STRING:abcdefghijklmn -267,ui267:INT64:123456,us267:STRING:abcdefghijklmn -268,ui268:INT64:123456,us268:STRING:abcdefghijklmn -269,ui269:INT64:123456,us269:STRING:abcdefghijklmn -270,ui270:INT64:123456,us270:STRING:abcdefghijklmn -271,ui271:INT64:123456,us271:STRING:abcdefghijklmn -272,ui272:INT64:123456,us272:STRING:abcdefghijklmn -273,ui273:INT64:123456,us273:STRING:abcdefghijklmn -274,ui274:INT64:123456,us274:STRING:abcdefghijklmn -275,ui275:INT64:123456,us275:STRING:abcdefghijklmn -276,ui276:INT64:123456,us276:STRING:abcdefghijklmn -277,ui277:INT64:123456,us277:STRING:abcdefghijklmn -278,ui278:INT64:123456,us278:STRING:abcdefghijklmn -279,ui279:INT64:123456,us279:STRING:abcdefghijklmn -280,ui280:INT64:123456,us280:STRING:abcdefghijklmn -281,ui281:INT64:123456,us281:STRING:abcdefghijklmn -282,ui282:INT64:123456,us282:STRING:abcdefghijklmn -283,ui283:INT64:123456,us283:STRING:abcdefghijklmn -284,ui284:INT64:123456,us284:STRING:abcdefghijklmn -285,ui285:INT64:123456,us285:STRING:abcdefghijklmn -286,ui286:INT64:123456,us286:STRING:abcdefghijklmn -287,ui287:INT64:123456,us287:STRING:abcdefghijklmn -288,ui288:INT64:123456,us288:STRING:abcdefghijklmn -289,ui289:INT64:123456,us289:STRING:abcdefghijklmn -290,ui290:INT64:123456,us290:STRING:abcdefghijklmn -291,ui291:INT64:123456,us291:STRING:abcdefghijklmn -292,ui292:INT64:123456,us292:STRING:abcdefghijklmn -293,ui293:INT64:123456,us293:STRING:abcdefghijklmn -294,ui294:INT64:123456,us294:STRING:abcdefghijklmn -295,ui295:INT64:123456,us295:STRING:abcdefghijklmn -296,ui296:INT64:123456,us296:STRING:abcdefghijklmn -297,ui297:INT64:123456,us297:STRING:abcdefghijklmn -298,ui298:INT64:123456,us298:STRING:abcdefghijklmn -299,ui299:INT64:123456,us299:STRING:abcdefghijklmn -300,ui300:INT64:123456,us300:STRING:abcdefghijklmn -301,ui301:INT64:123456,us301:STRING:abcdefghijklmn -302,ui302:INT64:123456,us302:STRING:abcdefghijklmn -303,ui303:INT64:123456,us303:STRING:abcdefghijklmn -304,ui304:INT64:123456,us304:STRING:abcdefghijklmn -305,ui305:INT64:123456,us305:STRING:abcdefghijklmn -306,ui306:INT64:123456,us306:STRING:abcdefghijklmn -307,ui307:INT64:123456,us307:STRING:abcdefghijklmn -308,ui308:INT64:123456,us308:STRING:abcdefghijklmn -309,ui309:INT64:123456,us309:STRING:abcdefghijklmn -310,ui310:INT64:123456,us310:STRING:abcdefghijklmn -311,ui311:INT64:123456,us311:STRING:abcdefghijklmn -312,ui312:INT64:123456,us312:STRING:abcdefghijklmn -313,ui313:INT64:123456,us313:STRING:abcdefghijklmn -314,ui314:INT64:123456,us314:STRING:abcdefghijklmn -315,ui315:INT64:123456,us315:STRING:abcdefghijklmn -316,ui316:INT64:123456,us316:STRING:abcdefghijklmn -317,ui317:INT64:123456,us317:STRING:abcdefghijklmn -318,ui318:INT64:123456,us318:STRING:abcdefghijklmn -319,ui319:INT64:123456,us319:STRING:abcdefghijklmn -320,ui320:INT64:123456,us320:STRING:abcdefghijklmn -321,ui321:INT64:123456,us321:STRING:abcdefghijklmn -322,ui322:INT64:123456,us322:STRING:abcdefghijklmn -323,ui323:INT64:123456,us323:STRING:abcdefghijklmn -324,ui324:INT64:123456,us324:STRING:abcdefghijklmn -325,ui325:INT64:123456,us325:STRING:abcdefghijklmn -326,ui326:INT64:123456,us326:STRING:abcdefghijklmn -327,ui327:INT64:123456,us327:STRING:abcdefghijklmn -328,ui328:INT64:123456,us328:STRING:abcdefghijklmn -329,ui329:INT64:123456,us329:STRING:abcdefghijklmn -330,ui330:INT64:123456,us330:STRING:abcdefghijklmn -331,ui331:INT64:123456,us331:STRING:abcdefghijklmn -332,ui332:INT64:123456,us332:STRING:abcdefghijklmn -333,ui333:INT64:123456,us333:STRING:abcdefghijklmn -334,ui334:INT64:123456,us334:STRING:abcdefghijklmn -335,ui335:INT64:123456,us335:STRING:abcdefghijklmn -336,ui336:INT64:123456,us336:STRING:abcdefghijklmn -337,ui337:INT64:123456,us337:STRING:abcdefghijklmn -338,ui338:INT64:123456,us338:STRING:abcdefghijklmn -339,ui339:INT64:123456,us339:STRING:abcdefghijklmn -340,ui340:INT64:123456,us340:STRING:abcdefghijklmn -341,ui341:INT64:123456,us341:STRING:abcdefghijklmn -342,ui342:INT64:123456,us342:STRING:abcdefghijklmn -343,ui343:INT64:123456,us343:STRING:abcdefghijklmn -344,ui344:INT64:123456,us344:STRING:abcdefghijklmn -345,ui345:INT64:123456,us345:STRING:abcdefghijklmn -346,ui346:INT64:123456,us346:STRING:abcdefghijklmn -347,ui347:INT64:123456,us347:STRING:abcdefghijklmn -348,ui348:INT64:123456,us348:STRING:abcdefghijklmn -349,ui349:INT64:123456,us349:STRING:abcdefghijklmn -350,ui350:INT64:123456,us350:STRING:abcdefghijklmn -351,ui351:INT64:123456,us351:STRING:abcdefghijklmn -352,ui352:INT64:123456,us352:STRING:abcdefghijklmn -353,ui353:INT64:123456,us353:STRING:abcdefghijklmn -354,ui354:INT64:123456,us354:STRING:abcdefghijklmn -355,ui355:INT64:123456,us355:STRING:abcdefghijklmn -356,ui356:INT64:123456,us356:STRING:abcdefghijklmn -357,ui357:INT64:123456,us357:STRING:abcdefghijklmn -358,ui358:INT64:123456,us358:STRING:abcdefghijklmn -359,ui359:INT64:123456,us359:STRING:abcdefghijklmn -360,ui360:INT64:123456,us360:STRING:abcdefghijklmn -361,ui361:INT64:123456,us361:STRING:abcdefghijklmn -362,ui362:INT64:123456,us362:STRING:abcdefghijklmn -363,ui363:INT64:123456,us363:STRING:abcdefghijklmn -364,ui364:INT64:123456,us364:STRING:abcdefghijklmn -365,ui365:INT64:123456,us365:STRING:abcdefghijklmn -366,ui366:INT64:123456,us366:STRING:abcdefghijklmn -367,ui367:INT64:123456,us367:STRING:abcdefghijklmn -368,ui368:INT64:123456,us368:STRING:abcdefghijklmn -369,ui369:INT64:123456,us369:STRING:abcdefghijklmn -370,ui370:INT64:123456,us370:STRING:abcdefghijklmn -371,ui371:INT64:123456,us371:STRING:abcdefghijklmn -372,ui372:INT64:123456,us372:STRING:abcdefghijklmn -373,ui373:INT64:123456,us373:STRING:abcdefghijklmn -374,ui374:INT64:123456,us374:STRING:abcdefghijklmn -375,ui375:INT64:123456,us375:STRING:abcdefghijklmn -376,ui376:INT64:123456,us376:STRING:abcdefghijklmn -377,ui377:INT64:123456,us377:STRING:abcdefghijklmn -378,ui378:INT64:123456,us378:STRING:abcdefghijklmn -379,ui379:INT64:123456,us379:STRING:abcdefghijklmn -380,ui380:INT64:123456,us380:STRING:abcdefghijklmn -381,ui381:INT64:123456,us381:STRING:abcdefghijklmn -382,ui382:INT64:123456,us382:STRING:abcdefghijklmn -383,ui383:INT64:123456,us383:STRING:abcdefghijklmn -384,ui384:INT64:123456,us384:STRING:abcdefghijklmn -385,ui385:INT64:123456,us385:STRING:abcdefghijklmn -386,ui386:INT64:123456,us386:STRING:abcdefghijklmn -387,ui387:INT64:123456,us387:STRING:abcdefghijklmn -388,ui388:INT64:123456,us388:STRING:abcdefghijklmn -389,ui389:INT64:123456,us389:STRING:abcdefghijklmn -390,ui390:INT64:123456,us390:STRING:abcdefghijklmn -391,ui391:INT64:123456,us391:STRING:abcdefghijklmn -392,ui392:INT64:123456,us392:STRING:abcdefghijklmn -393,ui393:INT64:123456,us393:STRING:abcdefghijklmn -394,ui394:INT64:123456,us394:STRING:abcdefghijklmn -395,ui395:INT64:123456,us395:STRING:abcdefghijklmn -396,ui396:INT64:123456,us396:STRING:abcdefghijklmn -397,ui397:INT64:123456,us397:STRING:abcdefghijklmn -398,ui398:INT64:123456,us398:STRING:abcdefghijklmn -399,ui399:INT64:123456,us399:STRING:abcdefghijklmn -400,ui400:INT64:123456,us400:STRING:abcdefghijklmn -401,ui401:INT64:123456,us401:STRING:abcdefghijklmn -402,ui402:INT64:123456,us402:STRING:abcdefghijklmn -403,ui403:INT64:123456,us403:STRING:abcdefghijklmn -404,ui404:INT64:123456,us404:STRING:abcdefghijklmn -405,ui405:INT64:123456,us405:STRING:abcdefghijklmn -406,ui406:INT64:123456,us406:STRING:abcdefghijklmn -407,ui407:INT64:123456,us407:STRING:abcdefghijklmn -408,ui408:INT64:123456,us408:STRING:abcdefghijklmn -409,ui409:INT64:123456,us409:STRING:abcdefghijklmn -410,ui410:INT64:123456,us410:STRING:abcdefghijklmn -411,ui411:INT64:123456,us411:STRING:abcdefghijklmn -412,ui412:INT64:123456,us412:STRING:abcdefghijklmn -413,ui413:INT64:123456,us413:STRING:abcdefghijklmn -414,ui414:INT64:123456,us414:STRING:abcdefghijklmn -415,ui415:INT64:123456,us415:STRING:abcdefghijklmn -416,ui416:INT64:123456,us416:STRING:abcdefghijklmn -417,ui417:INT64:123456,us417:STRING:abcdefghijklmn -418,ui418:INT64:123456,us418:STRING:abcdefghijklmn -419,ui419:INT64:123456,us419:STRING:abcdefghijklmn -420,ui420:INT64:123456,us420:STRING:abcdefghijklmn -421,ui421:INT64:123456,us421:STRING:abcdefghijklmn -422,ui422:INT64:123456,us422:STRING:abcdefghijklmn -423,ui423:INT64:123456,us423:STRING:abcdefghijklmn -424,ui424:INT64:123456,us424:STRING:abcdefghijklmn -425,ui425:INT64:123456,us425:STRING:abcdefghijklmn -426,ui426:INT64:123456,us426:STRING:abcdefghijklmn -427,ui427:INT64:123456,us427:STRING:abcdefghijklmn -428,ui428:INT64:123456,us428:STRING:abcdefghijklmn -429,ui429:INT64:123456,us429:STRING:abcdefghijklmn -430,ui430:INT64:123456,us430:STRING:abcdefghijklmn -431,ui431:INT64:123456,us431:STRING:abcdefghijklmn -432,ui432:INT64:123456,us432:STRING:abcdefghijklmn -433,ui433:INT64:123456,us433:STRING:abcdefghijklmn -434,ui434:INT64:123456,us434:STRING:abcdefghijklmn -435,ui435:INT64:123456,us435:STRING:abcdefghijklmn -436,ui436:INT64:123456,us436:STRING:abcdefghijklmn -437,ui437:INT64:123456,us437:STRING:abcdefghijklmn -438,ui438:INT64:123456,us438:STRING:abcdefghijklmn -439,ui439:INT64:123456,us439:STRING:abcdefghijklmn -440,ui440:INT64:123456,us440:STRING:abcdefghijklmn -441,ui441:INT64:123456,us441:STRING:abcdefghijklmn -442,ui442:INT64:123456,us442:STRING:abcdefghijklmn -443,ui443:INT64:123456,us443:STRING:abcdefghijklmn -444,ui444:INT64:123456,us444:STRING:abcdefghijklmn -445,ui445:INT64:123456,us445:STRING:abcdefghijklmn -446,ui446:INT64:123456,us446:STRING:abcdefghijklmn -447,ui447:INT64:123456,us447:STRING:abcdefghijklmn -448,ui448:INT64:123456,us448:STRING:abcdefghijklmn -449,ui449:INT64:123456,us449:STRING:abcdefghijklmn -450,ui450:INT64:123456,us450:STRING:abcdefghijklmn -451,ui451:INT64:123456,us451:STRING:abcdefghijklmn -452,ui452:INT64:123456,us452:STRING:abcdefghijklmn -453,ui453:INT64:123456,us453:STRING:abcdefghijklmn -454,ui454:INT64:123456,us454:STRING:abcdefghijklmn -455,ui455:INT64:123456,us455:STRING:abcdefghijklmn -456,ui456:INT64:123456,us456:STRING:abcdefghijklmn -457,ui457:INT64:123456,us457:STRING:abcdefghijklmn -458,ui458:INT64:123456,us458:STRING:abcdefghijklmn -459,ui459:INT64:123456,us459:STRING:abcdefghijklmn -460,ui460:INT64:123456,us460:STRING:abcdefghijklmn -461,ui461:INT64:123456,us461:STRING:abcdefghijklmn -462,ui462:INT64:123456,us462:STRING:abcdefghijklmn -463,ui463:INT64:123456,us463:STRING:abcdefghijklmn -464,ui464:INT64:123456,us464:STRING:abcdefghijklmn -465,ui465:INT64:123456,us465:STRING:abcdefghijklmn -466,ui466:INT64:123456,us466:STRING:abcdefghijklmn -467,ui467:INT64:123456,us467:STRING:abcdefghijklmn -468,ui468:INT64:123456,us468:STRING:abcdefghijklmn -469,ui469:INT64:123456,us469:STRING:abcdefghijklmn -470,ui470:INT64:123456,us470:STRING:abcdefghijklmn -471,ui471:INT64:123456,us471:STRING:abcdefghijklmn -472,ui472:INT64:123456,us472:STRING:abcdefghijklmn -473,ui473:INT64:123456,us473:STRING:abcdefghijklmn -474,ui474:INT64:123456,us474:STRING:abcdefghijklmn -475,ui475:INT64:123456,us475:STRING:abcdefghijklmn -476,ui476:INT64:123456,us476:STRING:abcdefghijklmn -477,ui477:INT64:123456,us477:STRING:abcdefghijklmn -478,ui478:INT64:123456,us478:STRING:abcdefghijklmn -479,ui479:INT64:123456,us479:STRING:abcdefghijklmn -480,ui480:INT64:123456,us480:STRING:abcdefghijklmn -481,ui481:INT64:123456,us481:STRING:abcdefghijklmn -482,ui482:INT64:123456,us482:STRING:abcdefghijklmn -483,ui483:INT64:123456,us483:STRING:abcdefghijklmn -484,ui484:INT64:123456,us484:STRING:abcdefghijklmn -485,ui485:INT64:123456,us485:STRING:abcdefghijklmn -486,ui486:INT64:123456,us486:STRING:abcdefghijklmn -487,ui487:INT64:123456,us487:STRING:abcdefghijklmn -488,ui488:INT64:123456,us488:STRING:abcdefghijklmn -489,ui489:INT64:123456,us489:STRING:abcdefghijklmn -490,ui490:INT64:123456,us490:STRING:abcdefghijklmn -491,ui491:INT64:123456,us491:STRING:abcdefghijklmn -492,ui492:INT64:123456,us492:STRING:abcdefghijklmn -493,ui493:INT64:123456,us493:STRING:abcdefghijklmn -494,ui494:INT64:123456,us494:STRING:abcdefghijklmn -495,ui495:INT64:123456,us495:STRING:abcdefghijklmn -496,ui496:INT64:123456,us496:STRING:abcdefghijklmn -497,ui497:INT64:123456,us497:STRING:abcdefghijklmn -498,ui498:INT64:123456,us498:STRING:abcdefghijklmn -499,ui499:INT64:123456,us499:STRING:abcdefghijklmn -500,ui500:INT64:123456,us500:STRING:abcdefghijklmn -501,ui501:INT64:123456,us501:STRING:abcdefghijklmn -502,ui502:INT64:123456,us502:STRING:abcdefghijklmn -503,ui503:INT64:123456,us503:STRING:abcdefghijklmn -504,ui504:INT64:123456,us504:STRING:abcdefghijklmn -505,ui505:INT64:123456,us505:STRING:abcdefghijklmn -506,ui506:INT64:123456,us506:STRING:abcdefghijklmn -507,ui507:INT64:123456,us507:STRING:abcdefghijklmn -508,ui508:INT64:123456,us508:STRING:abcdefghijklmn -509,ui509:INT64:123456,us509:STRING:abcdefghijklmn -510,ui510:INT64:123456,us510:STRING:abcdefghijklmn -511,ui511:INT64:123456,us511:STRING:abcdefghijklmn -512,ui512:INT64:123456,us512:STRING:abcdefghijklmn -513,ui513:INT64:123456,us513:STRING:abcdefghijklmn -514,ui514:INT64:123456,us514:STRING:abcdefghijklmn -515,ui515:INT64:123456,us515:STRING:abcdefghijklmn -516,ui516:INT64:123456,us516:STRING:abcdefghijklmn -517,ui517:INT64:123456,us517:STRING:abcdefghijklmn -518,ui518:INT64:123456,us518:STRING:abcdefghijklmn -519,ui519:INT64:123456,us519:STRING:abcdefghijklmn -520,ui520:INT64:123456,us520:STRING:abcdefghijklmn -521,ui521:INT64:123456,us521:STRING:abcdefghijklmn -522,ui522:INT64:123456,us522:STRING:abcdefghijklmn -523,ui523:INT64:123456,us523:STRING:abcdefghijklmn -524,ui524:INT64:123456,us524:STRING:abcdefghijklmn -525,ui525:INT64:123456,us525:STRING:abcdefghijklmn -526,ui526:INT64:123456,us526:STRING:abcdefghijklmn -527,ui527:INT64:123456,us527:STRING:abcdefghijklmn -528,ui528:INT64:123456,us528:STRING:abcdefghijklmn -529,ui529:INT64:123456,us529:STRING:abcdefghijklmn -530,ui530:INT64:123456,us530:STRING:abcdefghijklmn -531,ui531:INT64:123456,us531:STRING:abcdefghijklmn -532,ui532:INT64:123456,us532:STRING:abcdefghijklmn -533,ui533:INT64:123456,us533:STRING:abcdefghijklmn -534,ui534:INT64:123456,us534:STRING:abcdefghijklmn -535,ui535:INT64:123456,us535:STRING:abcdefghijklmn -536,ui536:INT64:123456,us536:STRING:abcdefghijklmn -537,ui537:INT64:123456,us537:STRING:abcdefghijklmn -538,ui538:INT64:123456,us538:STRING:abcdefghijklmn -539,ui539:INT64:123456,us539:STRING:abcdefghijklmn -540,ui540:INT64:123456,us540:STRING:abcdefghijklmn -541,ui541:INT64:123456,us541:STRING:abcdefghijklmn -542,ui542:INT64:123456,us542:STRING:abcdefghijklmn -543,ui543:INT64:123456,us543:STRING:abcdefghijklmn -544,ui544:INT64:123456,us544:STRING:abcdefghijklmn -545,ui545:INT64:123456,us545:STRING:abcdefghijklmn -546,ui546:INT64:123456,us546:STRING:abcdefghijklmn -547,ui547:INT64:123456,us547:STRING:abcdefghijklmn -548,ui548:INT64:123456,us548:STRING:abcdefghijklmn -549,ui549:INT64:123456,us549:STRING:abcdefghijklmn -550,ui550:INT64:123456,us550:STRING:abcdefghijklmn -551,ui551:INT64:123456,us551:STRING:abcdefghijklmn -552,ui552:INT64:123456,us552:STRING:abcdefghijklmn -553,ui553:INT64:123456,us553:STRING:abcdefghijklmn -554,ui554:INT64:123456,us554:STRING:abcdefghijklmn -555,ui555:INT64:123456,us555:STRING:abcdefghijklmn -556,ui556:INT64:123456,us556:STRING:abcdefghijklmn -557,ui557:INT64:123456,us557:STRING:abcdefghijklmn -558,ui558:INT64:123456,us558:STRING:abcdefghijklmn -559,ui559:INT64:123456,us559:STRING:abcdefghijklmn -560,ui560:INT64:123456,us560:STRING:abcdefghijklmn -561,ui561:INT64:123456,us561:STRING:abcdefghijklmn -562,ui562:INT64:123456,us562:STRING:abcdefghijklmn -563,ui563:INT64:123456,us563:STRING:abcdefghijklmn -564,ui564:INT64:123456,us564:STRING:abcdefghijklmn -565,ui565:INT64:123456,us565:STRING:abcdefghijklmn -566,ui566:INT64:123456,us566:STRING:abcdefghijklmn -567,ui567:INT64:123456,us567:STRING:abcdefghijklmn -568,ui568:INT64:123456,us568:STRING:abcdefghijklmn -569,ui569:INT64:123456,us569:STRING:abcdefghijklmn -570,ui570:INT64:123456,us570:STRING:abcdefghijklmn -571,ui571:INT64:123456,us571:STRING:abcdefghijklmn -572,ui572:INT64:123456,us572:STRING:abcdefghijklmn -573,ui573:INT64:123456,us573:STRING:abcdefghijklmn -574,ui574:INT64:123456,us574:STRING:abcdefghijklmn -575,ui575:INT64:123456,us575:STRING:abcdefghijklmn -576,ui576:INT64:123456,us576:STRING:abcdefghijklmn -577,ui577:INT64:123456,us577:STRING:abcdefghijklmn -578,ui578:INT64:123456,us578:STRING:abcdefghijklmn -579,ui579:INT64:123456,us579:STRING:abcdefghijklmn -580,ui580:INT64:123456,us580:STRING:abcdefghijklmn -581,ui581:INT64:123456,us581:STRING:abcdefghijklmn -582,ui582:INT64:123456,us582:STRING:abcdefghijklmn -583,ui583:INT64:123456,us583:STRING:abcdefghijklmn -584,ui584:INT64:123456,us584:STRING:abcdefghijklmn -585,ui585:INT64:123456,us585:STRING:abcdefghijklmn -586,ui586:INT64:123456,us586:STRING:abcdefghijklmn -587,ui587:INT64:123456,us587:STRING:abcdefghijklmn -588,ui588:INT64:123456,us588:STRING:abcdefghijklmn -589,ui589:INT64:123456,us589:STRING:abcdefghijklmn -590,ui590:INT64:123456,us590:STRING:abcdefghijklmn -591,ui591:INT64:123456,us591:STRING:abcdefghijklmn -592,ui592:INT64:123456,us592:STRING:abcdefghijklmn -593,ui593:INT64:123456,us593:STRING:abcdefghijklmn -594,ui594:INT64:123456,us594:STRING:abcdefghijklmn -595,ui595:INT64:123456,us595:STRING:abcdefghijklmn -596,ui596:INT64:123456,us596:STRING:abcdefghijklmn -597,ui597:INT64:123456,us597:STRING:abcdefghijklmn -598,ui598:INT64:123456,us598:STRING:abcdefghijklmn -599,ui599:INT64:123456,us599:STRING:abcdefghijklmn -600,ui600:INT64:123456,us600:STRING:abcdefghijklmn diff --git a/src/binder/expression_binder.cpp b/src/binder/expression_binder.cpp index 348229e91d..97dfadd17f 100644 --- a/src/binder/expression_binder.cpp +++ b/src/binder/expression_binder.cpp @@ -404,9 +404,6 @@ shared_ptr ExpressionBinder::implicitCast( case TIMESTAMP: { return implicitCastToTimestamp(expression); } - case UNSTRUCTURED: { - return implicitCastToUnstructured(expression); - } default: throw BinderException("Expression " + expression->getRawName() + " has data type " + Types::dataTypeToString(expression->dataType) + " but expect " + @@ -455,16 +452,6 @@ shared_ptr ExpressionBinder::implicitCastToTimestamp( move(execFunc), nullptr /* selectFunc */, uniqueExpressionName); } -shared_ptr ExpressionBinder::implicitCastToUnstructured( - const shared_ptr& expression) { - auto children = expression_vector{expression}; - auto execFunc = VectorCastOperations::bindImplicitCastToUnstructured(children); - auto uniqueExpressionName = - ScalarFunctionExpression::getUniqueName(IMPLICIT_CAST_TO_UNSTRUCTURED_FUNC_NAME, children); - return make_shared(FUNCTION, DataType(UNSTRUCTURED), move(children), - move(execFunc), nullptr /* selectFunc */, uniqueExpressionName); -} - void ExpressionBinder::validateExpectedDataType( const Expression& expression, const unordered_set& targets) { auto dataType = expression.dataType; diff --git a/src/binder/include/expression_binder.h b/src/binder/include/expression_binder.h index a54a92fd7f..908b0c38d7 100644 --- a/src/binder/include/expression_binder.h +++ b/src/binder/include/expression_binder.h @@ -79,8 +79,6 @@ class ExpressionBinder { const shared_ptr& expression, DataType targetType); static shared_ptr implicitCastToBool(const shared_ptr& expression); static shared_ptr implicitCastToInt64(const shared_ptr& expression); - static shared_ptr implicitCastToUnstructured( - const shared_ptr& expression); static shared_ptr implicitCastToString(const shared_ptr& expression); static shared_ptr implicitCastToTimestamp(const shared_ptr& expression); diff --git a/src/catalog/catalog.cpp b/src/catalog/catalog.cpp index 35700e842b..f334ca8e0d 100644 --- a/src/catalog/catalog.cpp +++ b/src/catalog/catalog.cpp @@ -131,7 +131,6 @@ uint64_t SerDeser::serializeValue( offset = SerDeser::serializeValue(value.tableID, fileInfo, offset); offset = SerDeser::serializeValue(value.primaryKeyPropertyIdx, fileInfo, offset); offset = SerDeser::serializeVector(value.structuredProperties, fileInfo, offset); - offset = SerDeser::serializeVector(value.unstructuredProperties, fileInfo, offset); offset = SerDeser::serializeUnorderedSet(value.fwdRelTableIDSet, fileInfo, offset); return SerDeser::serializeUnorderedSet(value.bwdRelTableIDSet, fileInfo, offset); } @@ -143,7 +142,6 @@ uint64_t SerDeser::deserializeValue( offset = SerDeser::deserializeValue(value.tableID, fileInfo, offset); offset = SerDeser::deserializeValue(value.primaryKeyPropertyIdx, fileInfo, offset); offset = SerDeser::deserializeVector(value.structuredProperties, fileInfo, offset); - offset = SerDeser::deserializeVector(value.unstructuredProperties, fileInfo, offset); offset = SerDeser::deserializeUnorderedSet(value.fwdRelTableIDSet, fileInfo, offset); return SerDeser::deserializeUnorderedSet(value.bwdRelTableIDSet, fileInfo, offset); @@ -248,7 +246,7 @@ bool CatalogContent::containNodeProperty(table_id_t tableID, const string& prope return true; } } - return nodeTableSchemas.at(tableID)->unstrPropertiesNameToIdMap.contains(propertyName); + return false; } bool CatalogContent::containRelProperty(table_id_t tableID, const string& propertyName) const { @@ -267,8 +265,7 @@ const Property& CatalogContent::getNodeProperty( return property; } } - auto unstrPropertyIdx = getUnstrPropertiesNameToIdMap(tableID).at(propertyName); - return getUnstructuredNodeProperties(tableID)[unstrPropertyIdx]; + assert(false); } const Property& CatalogContent::getRelProperty( @@ -339,16 +336,9 @@ void CatalogContent::readFromFile(const string& directory, DBFileType dbFileType offset = SerDeser::deserializeValue( *relTableSchemas[tableID], fileInfo.get(), offset); } - // construct the tableNameToIdMap and table's unstrPropertiesNameToIdMap + // Construct the tableNameToIdMap. for (auto& nodeTableSchema : nodeTableSchemas) { nodeTableNameToIDMap[nodeTableSchema.second->tableName] = nodeTableSchema.second->tableID; - for (auto i = 0u; i < nodeTableSchema.second->unstructuredProperties.size(); i++) { - auto& property = nodeTableSchema.second->unstructuredProperties[i]; - if (property.dataType.typeID == UNSTRUCTURED) { - nodeTableSchema.second->unstrPropertiesNameToIdMap[property.name] = - property.propertyID; - } - } } for (auto& relTableSchema : relTableSchemas) { relTableNameToIDMap[relTableSchema.second->tableName] = relTableSchema.second->tableID; diff --git a/src/catalog/catalog_structs.cpp b/src/catalog/catalog_structs.cpp index 649f05e798..df0d2c864d 100644 --- a/src/catalog/catalog_structs.cpp +++ b/src/catalog/catalog_structs.cpp @@ -37,25 +37,6 @@ string getRelMultiplicityAsString(RelMultiplicity relMultiplicity) { } } -void NodeTableSchema::addUnstructuredProperties(vector& unstructuredPropertyNames) { - // TODO(Semih): Uncomment when enabling ad-hoc properties - assert(unstructuredProperties.empty()); - for (auto& unstrPropertyName : unstructuredPropertyNames) { - auto unstrPropertyId = unstructuredProperties.size(); - unstrPropertiesNameToIdMap[unstrPropertyName] = unstrPropertyId; - Property property = Property::constructUnstructuredNodeProperty( - unstrPropertyName, unstrPropertyId, tableID); - unstructuredProperties.emplace_back(property); - } -} - -vector NodeTableSchema::getAllNodeProperties() const { - auto allProperties = structuredProperties; - allProperties.insert( - allProperties.end(), unstructuredProperties.begin(), unstructuredProperties.end()); - return allProperties; -} - unordered_set RelTableSchema::getAllNodeTableIDs() const { unordered_set allNodeTableIDs; for (auto& [srcTableID, dstTableID] : srcDstTableIDs) { diff --git a/src/catalog/include/catalog.h b/src/catalog/include/catalog.h index c57ec36afb..0db118bd25 100644 --- a/src/catalog/include/catalog.h +++ b/src/catalog/include/catalog.h @@ -95,16 +95,9 @@ class CatalogContent { const Property& getNodePrimaryKeyProperty(table_id_t tableID) const; vector getAllNodeProperties(table_id_t tableID) const; - inline const vector& getUnstructuredNodeProperties(table_id_t tableID) const { - return nodeTableSchemas.at(tableID)->unstructuredProperties; - } inline const vector& getRelProperties(table_id_t tableID) const { return relTableSchemas.at(tableID)->properties; } - inline const unordered_map& getUnstrPropertiesNameToIdMap( - table_id_t tableID) const { - return nodeTableSchemas.at(tableID)->unstrPropertiesNameToIdMap; - } inline unordered_map>& getNodeTableSchemas() { return nodeTableSchemas; } @@ -191,15 +184,6 @@ class Catalog { vector structuredPropertyDefinitions, vector> srcDstTableIDs); - inline void setUnstructuredPropertiesOfNodeTableSchema( - vector& unstructuredProperties, table_id_t tableID) { - // TODO(Semih): Uncomment when enabling ad-hoc properties - assert(unstructuredProperties.empty()); - initCatalogContentForWriteTrxIfNecessary(); - catalogContentForWriteTrx->getNodeTableSchema(tableID)->addUnstructuredProperties( - unstructuredProperties); - } - inline void removeTableSchema(TableSchema* tableSchema) { initCatalogContentForWriteTrxIfNecessary(); catalogContentForWriteTrx->removeTableSchema(tableSchema); diff --git a/src/catalog/include/catalog_structs.h b/src/catalog/include/catalog_structs.h index 36de55810f..9a890c8b68 100644 --- a/src/catalog/include/catalog_structs.h +++ b/src/catalog/include/catalog_structs.h @@ -15,8 +15,7 @@ enum RelMultiplicity : uint8_t { MANY_MANY, MANY_ONE, ONE_MANY, ONE_ONE }; RelMultiplicity getRelMultiplicityFromString(const string& relMultiplicityString); string getRelMultiplicityAsString(RelMultiplicity relMultiplicity); -// A PropertyNameDataType consists of its name, id, and dataType. If the property is unstructured, -// then the dataType's typeID is UNSTRUCTURED, otherwise it is one of those supported by the system. +// A PropertyNameDataType consists of its name, id, and dataType. struct PropertyNameDataType { // This constructor is needed for ser/deser functions PropertyNameDataType(){}; @@ -41,11 +40,6 @@ struct Property : PropertyNameDataType { // This constructor is needed for ser/deser functions Property() {} - static Property constructUnstructuredNodeProperty( - string name, uint32_t propertyID, table_id_t tableID) { - return Property(move(name), DataType(UNSTRUCTURED), propertyID, tableID); - } - static Property constructStructuredNodeProperty( const PropertyNameDataType& nameDataType, uint32_t propertyID, table_id_t tableID) { return Property(nameDataType.name, nameDataType.dataType, propertyID, tableID); @@ -84,26 +78,22 @@ struct NodeTableSchema : TableSchema { move(structuredProperties)} {} inline uint64_t getNumStructuredProperties() const { return structuredProperties.size(); } - void addUnstructuredProperties(vector& unstructuredPropertyNames); inline void addFwdRelTableID(table_id_t tableID) { fwdRelTableIDSet.insert(tableID); } inline void addBwdRelTableID(table_id_t tableID) { bwdRelTableIDSet.insert(tableID); } inline Property getPrimaryKey() const { return structuredProperties[primaryKeyPropertyIdx]; } - vector getAllNodeProperties() const; + inline vector getAllNodeProperties() const { return structuredProperties; } // TODO(Semih): When we support updating the schemas, we need to update this or, we need // a more robust mechanism to keep track of which property is the primary key (e.g., store this // information with the property). This is an idx, not an ID, so as the columns/properties of // the table change, the idx can change. uint64_t primaryKeyPropertyIdx; - vector structuredProperties, unstructuredProperties; + vector structuredProperties; unordered_set fwdRelTableIDSet; // srcNode->rel unordered_set bwdRelTableIDSet; // dstNode->rel - // This map is maintained as a cache for unstructured properties. It is not serialized to the - // catalog file, but is re-constructed when reading from the catalog file. - unordered_map unstrPropertiesNameToIdMap; }; struct RelTableSchema : TableSchema { diff --git a/src/common/include/configs.h b/src/common/include/configs.h index 24f43da47c..22bef8ea91 100644 --- a/src/common/include/configs.h +++ b/src/common/include/configs.h @@ -63,11 +63,6 @@ struct StorageConfig { static constexpr char CATALOG_FILE_NAME[] = "catalog.bin"; static constexpr char CATALOG_FILE_NAME_FOR_WAL[] = "catalog.bin.wal"; constexpr static double ARRAY_RESIZING_FACTOR = 1.2; - - constexpr static uint8_t UNSTR_PROP_KEY_IDX_LEN = 4; - constexpr static uint8_t UNSTR_PROP_DATATYPE_LEN = 1; - constexpr static uint8_t UNSTR_PROP_HEADER_LEN = - UNSTR_PROP_KEY_IDX_LEN + UNSTR_PROP_DATATYPE_LEN; }; struct ListsMetadataConfig { @@ -92,8 +87,6 @@ struct CopyCSVConfig { // Size (in bytes) of the chunks to be read in InMemNode/RelCSVCopier static constexpr uint64_t CSV_READING_BLOCK_SIZE = 1 << 23; - static constexpr char UNSTR_PROPERTY_SEPARATOR[] = ":"; - // Default configuration for csv file parsing static constexpr const char* STRING_CSV_PARSING_OPTIONS[5] = { "ESCAPE", "DELIM", "QUOTE", "LIST_BEGIN", "LIST_END"}; diff --git a/src/common/include/expression_type.h b/src/common/include/expression_type.h index cb0dc30e62..2d187d6fe9 100644 --- a/src/common/include/expression_type.h +++ b/src/common/include/expression_type.h @@ -30,7 +30,6 @@ const string IMPLICIT_CAST_TO_INT_FUNC_NAME = "_INT"; const string IMPLICIT_CAST_TO_STRING_FUNC_NAME = "_STRING"; const string IMPLICIT_CAST_TO_DATE_FUNC_NAME = "_DATE"; const string IMPLICIT_CAST_TO_TIMESTAMP_FUNC_NAME = "_TIMESTAMP"; -const string IMPLICIT_CAST_TO_UNSTRUCTURED_FUNC_NAME = "_UNSTRUCTURED"; // list const string LIST_CREATION_FUNC_NAME = "LIST_CREATION"; diff --git a/src/common/include/type_utils.h b/src/common/include/type_utils.h index d30816875c..c7e8a411bd 100644 --- a/src/common/include/type_utils.h +++ b/src/common/include/type_utils.h @@ -2,7 +2,6 @@ #include "src/common/types/include/literal.h" #include "src/common/types/include/types_include.h" -#include "src/common/types/include/value.h" namespace kuzu { namespace common { @@ -28,7 +27,6 @@ class TypeUtils { static inline string toString(const string& val) { return val; } static string toString(const ku_list_t& val, const DataType& dataType); static string toString(const Literal& literal); - static string toString(const Value& val); static inline void encodeOverflowPtr( uint64_t& overflowPtr, page_idx_t pageIdx, uint16_t pageOffset) { diff --git a/src/common/include/vector/value_vector.h b/src/common/include/vector/value_vector.h index 3c1becac35..89a189ebfa 100644 --- a/src/common/include/vector/value_vector.h +++ b/src/common/include/vector/value_vector.h @@ -73,8 +73,7 @@ class ValueVector { private: inline bool needOverflowBuffer() const { - return dataType.typeID == STRING || dataType.typeID == LIST || - dataType.typeID == UNSTRUCTURED; + return dataType.typeID == STRING || dataType.typeID == LIST; } void addString(uint32_t pos, char* value, uint64_t len) const; diff --git a/src/common/include/vector/value_vector_utils.h b/src/common/include/vector/value_vector_utils.h index c0634cc668..63e9f9fd3f 100644 --- a/src/common/include/vector/value_vector_utils.h +++ b/src/common/include/vector/value_vector_utils.h @@ -12,8 +12,7 @@ class ValueVectorUtils { ValueVector& resultVector, uint64_t pos, const Literal& literal); // These two functions assume that the given uint8_t* srcData/dstData are pointing to a data - // with the same data type as this ValueVector. If this ValueVector is unstructured, then - // srcData/dstData are pointing to a Value. + // with the same data type as this ValueVector. static void copyNonNullDataWithSameTypeIntoPos( ValueVector& resultVector, uint64_t pos, const uint8_t* srcData); static void copyNonNullDataWithSameTypeOutFromPos(const ValueVector& srcVector, uint64_t pos, diff --git a/src/common/type_utils.cpp b/src/common/type_utils.cpp index c1194a3b0c..658d48b802 100644 --- a/src/common/type_utils.cpp +++ b/src/common/type_utils.cpp @@ -5,7 +5,6 @@ #include "src/common/include/exception.h" #include "src/common/include/utils.h" -#include "src/common/types/include/value.h" namespace kuzu { namespace common { @@ -131,31 +130,6 @@ string TypeUtils::toString(const Literal& literal) { } } -string TypeUtils::toString(const Value& val) { - switch (val.dataType.typeID) { - case BOOL: - return TypeUtils::toString(val.val.booleanVal); - case INT64: - return TypeUtils::toString(val.val.int64Val); - case DOUBLE: - return TypeUtils::toString(val.val.doubleVal); - case STRING: - return TypeUtils::toString(val.val.strVal); - case NODE_ID: - return TypeUtils::toString(val.val.nodeID); - case DATE: - return TypeUtils::toString(val.val.dateVal); - case TIMESTAMP: - return TypeUtils::toString(val.val.timestampVal); - case INTERVAL: - return TypeUtils::toString(val.val.intervalVal); - case LIST: - return TypeUtils::toString(val.val.listVal, val.dataType); - default: - assert(false); - } -} - string TypeUtils::prefixConversionExceptionMessage(const char* data, DataTypeID dataTypeID) { return "Cannot convert string " + string(data) + " to " + Types::dataTypeToString(dataTypeID) + "."; diff --git a/src/common/types/include/types.h b/src/common/types/include/types.h index 251d1ef611..99f5ccbe4a 100644 --- a/src/common/types/include/types.h +++ b/src/common/types/include/types.h @@ -48,7 +48,6 @@ enum DataTypeID : uint8_t { INTERVAL = 27, STRING = 50, - UNSTRUCTURED = 51, LIST = 52, }; @@ -70,12 +69,9 @@ class DataType { static inline std::vector getNumericalTypeIDs() { return std::vector{INT64, DOUBLE}; } - static inline std::vector getNumericalAndUnstructuredTypeIDs() { - return std::vector{INT64, DOUBLE, UNSTRUCTURED}; - } static inline std::vector getAllValidTypeIDs() { return std::vector{ - NODE_ID, BOOL, INT64, DOUBLE, STRING, UNSTRUCTURED, DATE, TIMESTAMP, INTERVAL, LIST}; + NODE_ID, BOOL, INT64, DOUBLE, STRING, DATE, TIMESTAMP, INTERVAL, LIST}; } DataType& operator=(const DataType& other); diff --git a/src/common/types/include/value.h b/src/common/types/include/value.h deleted file mode 100644 index 706a4ab30e..0000000000 --- a/src/common/types/include/value.h +++ /dev/null @@ -1,58 +0,0 @@ -#pragma once - -#include -#include - -#include "types_include.h" - -using namespace std; - -namespace kuzu { -namespace common { - -class Value { -public: - Value() : dataType{ANY} {}; - - Value(const Value& value) { *this = value; } - - // TODO(Guodong): this interface is weird. Consider remove. - explicit Value(DataType dataType) : dataType{move(dataType)} {} - - explicit Value(bool value) : dataType(BOOL) { this->val.booleanVal = value; } - - explicit Value(int64_t value) : dataType(INT64) { this->val.int64Val = value; } - - explicit Value(double value) : dataType(DOUBLE) { this->val.doubleVal = value; } - - explicit Value(const string& value) : dataType(STRING) { this->val.strVal.set(value); } - - explicit Value(nodeID_t value) : dataType(NODE_ID) { this->val.nodeID = value; } - - explicit Value(date_t value) : dataType(DATE) { this->val.dateVal = value; } - - explicit Value(timestamp_t value) : dataType(TIMESTAMP) { this->val.timestampVal = value; } - - explicit Value(interval_t value) : dataType(INTERVAL) { this->val.intervalVal = value; } - - Value& operator=(const Value& other); - -public: - union Val { - constexpr Val() : booleanVal{false} {} - bool booleanVal; - int64_t int64Val; - double doubleVal; - ku_string_t strVal; - nodeID_t nodeID; - date_t dateVal; - timestamp_t timestampVal; - interval_t intervalVal; - ku_list_t listVal; - } val; - // Note: dataType cannot be UNSTRUCTURED. Any Value has a fixed known data type. - DataType dataType; -}; - -} // namespace common -} // namespace kuzu diff --git a/src/common/types/types.cpp b/src/common/types/types.cpp index e7d5249f2f..d9eaa9f804 100644 --- a/src/common/types/types.cpp +++ b/src/common/types/types.cpp @@ -3,7 +3,6 @@ #include #include "include/types_include.h" -#include "include/value.h" #include "src/common/include/exception.h" @@ -111,8 +110,6 @@ string Types::dataTypeToString(DataTypeID dataTypeID) { return "INTERVAL"; case STRING: return "STRING"; - case UNSTRUCTURED: - return "UNSTRUCTURED"; case LIST: return "LIST"; default: @@ -158,8 +155,6 @@ uint32_t Types::getDataTypeSize(DataTypeID dataTypeID) { return sizeof(interval_t); case STRING: return sizeof(ku_string_t); - case UNSTRUCTURED: - return sizeof(Value); case LIST: return sizeof(ku_list_t); default: diff --git a/src/common/types/value.cpp b/src/common/types/value.cpp deleted file mode 100644 index 8505663a77..0000000000 --- a/src/common/types/value.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "include/value.h" - -#include - -using namespace std; - -namespace kuzu { -namespace common { - -Value& Value::operator=(const Value& other) { - dataType = other.dataType; - switch (dataType.typeID) { - case BOOL: { - val.booleanVal = other.val.booleanVal; - } break; - case INT64: { - val.int64Val = other.val.int64Val; - } break; - case DOUBLE: { - val.doubleVal = other.val.doubleVal; - } break; - case STRING: { - val.strVal = other.val.strVal; - } break; - case DATE: { - val.dateVal = other.val.dateVal; - } break; - case TIMESTAMP: { - val.timestampVal = other.val.timestampVal; - } break; - case INTERVAL: { - val.intervalVal = other.val.intervalVal; - } break; - default: - assert(false); - } - return *this; -} - -} // namespace common -} // namespace kuzu diff --git a/src/common/vector/value_vector.cpp b/src/common/vector/value_vector.cpp index fc4d94d8ba..37d906d2f0 100644 --- a/src/common/vector/value_vector.cpp +++ b/src/common/vector/value_vector.cpp @@ -1,7 +1,6 @@ #include "src/common/include/vector/value_vector.h" #include "src/common/include/in_mem_overflow_buffer_utils.h" -#include "src/common/types/include/value.h" namespace kuzu { namespace common { @@ -72,7 +71,6 @@ template void ValueVector::setValue(uint32_t pos, timestamp_t val); template void ValueVector::setValue(uint32_t pos, interval_t val); template void ValueVector::setValue(uint32_t pos, ku_string_t val); template void ValueVector::setValue(uint32_t pos, ku_list_t val); -template void ValueVector::setValue(uint32_t pos, Value val); } // namespace common } // namespace kuzu diff --git a/src/common/vector/value_vector_utils.cpp b/src/common/vector/value_vector_utils.cpp index 0afad3dfbc..2992058e26 100644 --- a/src/common/vector/value_vector_utils.cpp +++ b/src/common/vector/value_vector_utils.cpp @@ -1,7 +1,6 @@ #include "src/common/include/vector/value_vector_utils.h" #include "src/common/include/in_mem_overflow_buffer_utils.h" -#include "src/common/types/include/value.h" using namespace kuzu; using namespace common; @@ -61,21 +60,6 @@ void ValueVectorUtils::copyNonNullDataWithSameType(const DataType& dataType, con InMemOverflowBufferUtils::copyListRecursiveIfNested( *(ku_list_t*)srcData, *(ku_list_t*)dstData, dataType, inMemOverflowBuffer); } else { - // Regardless of whether the dataType is unstructured or a structured non-string type, we - // first copy over the data in the src to the dst. memcpy(dstData, srcData, Types::getDataTypeSize(dataType)); - if (dataType.typeID == UNSTRUCTURED) { - auto unstrValueSrcPtr = (Value*)srcData; - auto unstrValueDstPtr = (Value*)dstData; - // If further the dataType is unstructured and string we need to copy over the string - // overflow if necessary. Recall that an unstructured string has 16 bytes for the string - // but also stores its data type as an additional byte. That is why we need to copy over - // the entire data first even though the unstrValueDstPtr->val.strVal.set call below - // will copy over the 16 bytes for the string. - if (unstrValueSrcPtr->dataType.typeID == STRING) { - InMemOverflowBufferUtils::copyString(unstrValueSrcPtr->val.strVal, - unstrValueDstPtr->val.strVal, inMemOverflowBuffer); - } - } } } diff --git a/src/function/aggregate/aggregate_function.cpp b/src/function/aggregate/aggregate_function.cpp index f550c03d28..f988b28152 100644 --- a/src/function/aggregate/aggregate_function.cpp +++ b/src/function/aggregate/aggregate_function.cpp @@ -33,10 +33,6 @@ unique_ptr AggregateFunctionUtil::getAvgFunction( return make_unique(AvgFunction::initialize, AvgFunction::updateAll, AvgFunction::updatePos, AvgFunction::combine, AvgFunction::finalize, inputType, isDistinct); - case UNSTRUCTURED: - return make_unique(AvgFunction::initialize, - AvgFunction::updateAll, AvgFunction::updatePos, - AvgFunction::combine, AvgFunction::finalize, inputType, isDistinct); default: assert(false); } @@ -53,10 +49,6 @@ unique_ptr AggregateFunctionUtil::getSumFunction( return make_unique(SumFunction::initialize, SumFunction::updateAll, SumFunction::updatePos, SumFunction::combine, SumFunction::finalize, inputType, isDistinct); - case UNSTRUCTURED: - return make_unique(SumFunction::initialize, - SumFunction::updateAll, SumFunction::updatePos, - SumFunction::combine, SumFunction::finalize, inputType, isDistinct); default: assert(false); } @@ -107,11 +99,6 @@ unique_ptr AggregateFunctionUtil::getMinMaxFunction( MinMaxFunction::updateAll, MinMaxFunction::updatePos, MinMaxFunction::combine, MinMaxFunction::finalize, inputType, isDistinct); - case UNSTRUCTURED: - return make_unique(MinMaxFunction::initialize, - MinMaxFunction::updateAll, MinMaxFunction::updatePos, - MinMaxFunction::combine, MinMaxFunction::finalize, inputType, - isDistinct); default: assert(false); } diff --git a/src/function/aggregate/built_in_aggregate_functions.cpp b/src/function/aggregate/built_in_aggregate_functions.cpp index f0b95b933c..30c15c1a97 100644 --- a/src/function/aggregate/built_in_aggregate_functions.cpp +++ b/src/function/aggregate/built_in_aggregate_functions.cpp @@ -93,7 +93,7 @@ void BuiltInAggregateFunctions::registerCount() { void BuiltInAggregateFunctions::registerSum() { vector> definitions; - for (auto typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto typeID : DataType::getNumericalTypeIDs()) { for (auto isDistinct : vector{true, false}) { definitions.push_back(make_unique(SUM_FUNC_NAME, vector{typeID}, typeID, @@ -105,7 +105,7 @@ void BuiltInAggregateFunctions::registerSum() { void BuiltInAggregateFunctions::registerAvg() { vector> definitions; - for (auto typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto typeID : DataType::getNumericalTypeIDs()) { for (auto isDistinct : vector{true, false}) { definitions.push_back(make_unique(AVG_FUNC_NAME, vector{typeID}, DOUBLE, @@ -117,7 +117,7 @@ void BuiltInAggregateFunctions::registerAvg() { void BuiltInAggregateFunctions::registerMin() { vector> definitions; - for (auto typeID : vector{BOOL, INT64, DOUBLE, DATE, STRING, UNSTRUCTURED}) { + for (auto typeID : vector{BOOL, INT64, DOUBLE, DATE, STRING}) { for (auto isDistinct : vector{true, false}) { definitions.push_back(make_unique(MIN_FUNC_NAME, vector{typeID}, typeID, @@ -129,7 +129,7 @@ void BuiltInAggregateFunctions::registerMin() { void BuiltInAggregateFunctions::registerMax() { vector> definitions; - for (auto typeID : vector{BOOL, INT64, DOUBLE, DATE, STRING, UNSTRUCTURED}) { + for (auto typeID : vector{BOOL, INT64, DOUBLE, DATE, STRING}) { for (auto isDistinct : vector{true, false}) { definitions.push_back(make_unique(MAX_FUNC_NAME, vector{typeID}, typeID, diff --git a/src/function/aggregate/include/avg.h b/src/function/aggregate/include/avg.h index 032865d2a3..c037190fad 100644 --- a/src/function/aggregate/include/avg.h +++ b/src/function/aggregate/include/avg.h @@ -84,15 +84,5 @@ struct AvgFunction { } }; -template<> -inline void AvgFunction::finalize(uint8_t* state_) { - auto state = reinterpret_cast(state_); - assert(!state->isNull); - auto unstrCount = Value((double_t)state->count); - auto result = Value(); - Divide::operation(state->sum, unstrCount, result); - state->avg = result.val.doubleVal; -} - } // namespace function } // namespace kuzu diff --git a/src/function/arithmetic/include/vector_arithmetic_operations.h b/src/function/arithmetic/include/vector_arithmetic_operations.h index cdd36c04e3..8d68eda199 100644 --- a/src/function/arithmetic/include/vector_arithmetic_operations.h +++ b/src/function/arithmetic/include/vector_arithmetic_operations.h @@ -55,13 +55,6 @@ class VectorArithmeticOperations : public VectorOperations { assert(false); } } - case UNSTRUCTURED: { - if constexpr (DOUBLE_RESULT) { - return BinaryExecFunction; - } else { - return BinaryExecFunction; - } - } default: assert(false); } @@ -84,15 +77,6 @@ class VectorArithmeticOperations : public VectorOperations { return UnaryExecFunction; } } - case UNSTRUCTURED: { - if constexpr (INT_RESULT) { - return UnaryExecFunction; - } else if constexpr (DOUBLE_RESULT) { - return UnaryExecFunction; - } else { - return UnaryExecFunction; - } - } default: assert(false); } diff --git a/src/function/arithmetic/operations/include/arithmetic_operations.h b/src/function/arithmetic/operations/include/arithmetic_operations.h index 71300211ed..0f05bcec72 100644 --- a/src/function/arithmetic/operations/include/arithmetic_operations.h +++ b/src/function/arithmetic/operations/include/arithmetic_operations.h @@ -4,7 +4,6 @@ #include #include "src/common/include/type_utils.h" -#include "src/common/types/include/value.h" #include "src/function/string/operations/include/concat_operation.h" using namespace kuzu::common; @@ -268,400 +267,6 @@ struct Pi { static inline void operation(double_t& result) { result = M_PI; } }; -/********************************************** - ** ** - ** Specialized Value(s) implementations ** - ** ** - **********************************************/ - -struct ArithmeticOnValues { - template - static void operation(Value& left, Value& right, Value& result) { - switch (left.dataType.typeID) { - case INT64: - switch (right.dataType.typeID) { - case INT64: { - result.dataType.typeID = INT64; - FUNC::template operation( - left.val.int64Val, right.val.int64Val, result.val.int64Val); - } break; - case DOUBLE: { - result.dataType.typeID = DOUBLE; - FUNC::template operation( - left.val.int64Val, right.val.doubleVal, result.val.doubleVal); - } break; - default: - throw RuntimeException("Cannot " + string(arithmeticOpStr) + " `INT64` and `" + - Types::dataTypeToString(right.dataType.typeID) + "`"); - } - break; - case DOUBLE: - switch (right.dataType.typeID) { - case INT64: { - result.dataType.typeID = DOUBLE; - FUNC::template operation( - left.val.doubleVal, right.val.int64Val, result.val.doubleVal); - } break; - case DOUBLE: { - result.dataType.typeID = DOUBLE; - FUNC::template operation( - left.val.doubleVal, right.val.doubleVal, result.val.doubleVal); - } break; - default: - throw RuntimeException("Cannot " + string(arithmeticOpStr) + " `DOUBLE` and `" + - Types::dataTypeToString(right.dataType.typeID) + "`"); - } - break; - default: - throw RuntimeException("Cannot " + string(arithmeticOpStr) + " `" + - Types::dataTypeToString(left.dataType.typeID) + "` and `" + - Types::dataTypeToString(right.dataType.typeID) + "`"); - } - } - - template - static void operation(Value& left, Value& right, double_t& result) { - switch (left.dataType.typeID) { - case INT64: - switch (right.dataType.typeID) { - case INT64: { - FUNC::template operation( - left.val.int64Val, right.val.int64Val, result); - } break; - case DOUBLE: { - FUNC::template operation( - left.val.int64Val, right.val.doubleVal, result); - } break; - default: - throw RuntimeException("Cannot " + string(arithmeticOpStr) + " `INT64` and `" + - Types::dataTypeToString(right.dataType.typeID) + "`"); - } - break; - case DOUBLE: - switch (right.dataType.typeID) { - case INT64: { - FUNC::template operation( - left.val.doubleVal, right.val.int64Val, result); - } break; - case DOUBLE: { - FUNC::template operation( - left.val.doubleVal, right.val.doubleVal, result); - } break; - default: - throw RuntimeException("Cannot " + string(arithmeticOpStr) + " `DOUBLE` and `" + - Types::dataTypeToString(right.dataType.typeID) + "`"); - } - break; - default: - throw RuntimeException("Cannot " + string(arithmeticOpStr) + " `" + - Types::dataTypeToString(left.dataType.typeID) + "` and `" + - Types::dataTypeToString(right.dataType.typeID) + "`"); - } - } - - template - static void operation(Value& input, Value& result) { - switch (input.dataType.typeID) { - case INT64: { - result.dataType.typeID = INT64; - FUNC::operation(input.val.int64Val, result.val.int64Val); - } break; - case DOUBLE: { - result.dataType.typeID = DOUBLE; - FUNC::operation(input.val.doubleVal, result.val.doubleVal); - } break; - default: - throw RuntimeException("Cannot " + string(arithmeticOpStr) + " `" + - Types::dataTypeToString(input.dataType.typeID) + "`"); - } - } - - template - static void operation(Value& input, double_t& result) { - switch (input.dataType.typeID) { - case INT64: { - FUNC::operation(input.val.int64Val, result); - } break; - case DOUBLE: { - FUNC::operation(input.val.doubleVal, result); - } break; - default: - throw RuntimeException("Cannot " + string(arithmeticOpStr) + " `" + - Types::dataTypeToString(input.dataType.typeID) + "`"); - } - } - - template - static void operation(Value& input, int64_t& result) { - switch (input.dataType.typeID) { - case INT64: { - FUNC::operation(input.val.int64Val, result); - } break; - case DOUBLE: { - FUNC::operation(input.val.doubleVal, result); - } break; - default: - throw RuntimeException("Cannot " + string(arithmeticOpStr) + " `" + - Types::dataTypeToString(input.dataType.typeID) + "`"); - } - } -}; - -static const char addStr[] = "add"; -static const char subtractStr[] = "subtract"; -static const char multiplyStr[] = "multiply"; -static const char divideStr[] = "divide"; -static const char moduloStr[] = "modulo"; -static const char powerStr[] = "power"; -static const char negateStr[] = "negate"; -static const char absStr[] = "abs"; -static const char floorStr[] = "floor"; -static const char ceilStr[] = "ceil"; -static const char sinStr[] = "sin"; -static const char cosStr[] = "cos"; -static const char tanStr[] = "tan"; -static const char cotStr[] = "cot"; -static const char asinStr[] = "asin"; -static const char acosStr[] = "acos"; -static const char atanStr[] = "atan"; -static const char evenStr[] = "even"; -static const char factorialStr[] = "factorial"; -static const char signStr[] = "sign"; -static const char sqrtStr[] = "sqrt"; -static const char cbrtStr[] = "cbrt"; -static const char gammaStr[] = "gamma"; -static const char lgammaStr[] = "lgamma"; -static const char lnStr[] = "ln"; -static const char logStr[] = "log"; -static const char log2Str[] = "log2"; -static const char degreesStr[] = "degrees"; -static const char radiansStr[] = "radians"; -static const char atan2Str[] = "atan2"; - -template<> -inline void Add::operation(Value& left, Value& right, Value& result) { - if (left.dataType.typeID == DATE && right.dataType.typeID == INTERVAL) { - result.dataType.typeID = DATE; - Add::operation(left.val.dateVal, right.val.intervalVal, result.val.dateVal); - return; - } else if (left.dataType.typeID == INTERVAL && right.dataType.typeID == DATE) { - result.dataType.typeID = DATE; - Add::operation(left.val.intervalVal, right.val.dateVal, result.val.dateVal); - return; - } else if (left.dataType.typeID == DATE && right.dataType.typeID == INT64) { - result.dataType.typeID = DATE; - Add::operation(left.val.dateVal, right.val.int64Val, result.val.dateVal); - return; - } else if (left.dataType.typeID == INT64 && right.dataType.typeID == DATE) { - result.dataType.typeID = DATE; - Add::operation(left.val.int64Val, right.val.dateVal, result.val.dateVal); - return; - } else if (left.dataType.typeID == TIMESTAMP && right.dataType.typeID == INTERVAL) { - result.dataType.typeID = TIMESTAMP; - Add::operation(left.val.timestampVal, right.val.intervalVal, result.val.timestampVal); - return; - } else if (left.dataType.typeID == INTERVAL && right.dataType.typeID == TIMESTAMP) { - result.dataType.typeID = TIMESTAMP; - Add::operation(left.val.intervalVal, right.val.timestampVal, result.val.timestampVal); - return; - } else if (left.dataType.typeID == INTERVAL && right.dataType.typeID == INTERVAL) { - result.dataType.typeID = INTERVAL; - Add::operation(left.val.intervalVal, right.val.intervalVal, result.val.intervalVal); - return; - } - ArithmeticOnValues::operation(left, right, result); -} - -template<> -inline void Subtract::operation(Value& left, Value& right, Value& result) { - if (left.dataType.typeID == DATE && right.dataType.typeID == INTERVAL) { - result.dataType.typeID = DATE; - Subtract::operation(left.val.dateVal, right.val.intervalVal, result.val.dateVal); - return; - } else if (left.dataType.typeID == DATE && right.dataType.typeID == INT64) { - result.dataType.typeID = DATE; - Subtract::operation(left.val.dateVal, right.val.int64Val, result.val.dateVal); - return; - } else if (left.dataType.typeID == DATE && right.dataType.typeID == DATE) { - result.dataType.typeID = INT64; - Subtract::operation(left.val.dateVal, right.val.dateVal, result.val.int64Val); - return; - } else if (left.dataType.typeID == TIMESTAMP && right.dataType.typeID == INTERVAL) { - result.dataType.typeID = TIMESTAMP; - Subtract::operation(left.val.timestampVal, right.val.intervalVal, result.val.timestampVal); - return; - } else if (left.dataType.typeID == TIMESTAMP && right.dataType.typeID == TIMESTAMP) { - result.dataType.typeID = INTERVAL; - Subtract::operation(left.val.timestampVal, right.val.timestampVal, result.val.intervalVal); - return; - } else if (left.dataType.typeID == INTERVAL && right.dataType.typeID == INTERVAL) { - result.dataType.typeID = INTERVAL; - Subtract::operation(left.val.intervalVal, right.val.intervalVal, result.val.intervalVal); - return; - } - ArithmeticOnValues::operation(left, right, result); -} - -template<> -inline void Multiply::operation(Value& left, Value& right, Value& result) { - ArithmeticOnValues::operation(left, right, result); -} - -template<> -inline void Divide::operation(Value& left, Value& right, Value& result) { - if (left.dataType.typeID == INTERVAL && right.dataType.typeID == INT64) { - result.dataType.typeID = INTERVAL; - Divide::operation(left.val.intervalVal, right.val.int64Val, result.val.intervalVal); - return; - } - ArithmeticOnValues::operation(left, right, result); -} - -template<> -inline void Modulo::operation(Value& left, Value& right, Value& result) { - ArithmeticOnValues::operation(left, right, result); -} - -template<> -inline void Power::operation(Value& left, Value& right, double_t& result) { - ArithmeticOnValues::operation(left, right, result); -} - -template<> -inline void Negate::operation(Value& operand, Value& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Abs::operation(Value& operand, Value& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Floor::operation(Value& operand, Value& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Ceil::operation(Value& operand, Value& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Sin::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Cos::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Tan::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Cot::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Asin::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Acos::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Atan::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Even::operation(Value& operand, int64_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Sign::operation(Value& operand, int64_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Sqrt::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Cbrt::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Gamma::operation(Value& operand, Value& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Lgamma::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Ln::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Log::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Log2::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Degrees::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Radians::operation(Value& operand, double_t& result) { - ArithmeticOnValues::operation(operand, result); -} - -template<> -inline void Atan2::operation(Value& left, Value& right, double_t& result) { - ArithmeticOnValues::operation(left, right, result); -} - -template<> -inline void Round::operation(Value& left, Value& right, double_t& result) { - if (right.dataType.typeID != INT64) { - throw RuntimeException("Round: Invalid right argument datatype: " + - Types::dataTypeToString(right.dataType.typeID)); - } - switch (left.dataType.typeID) { - case INT64: { - Round::operation(left.val.int64Val, right.val.int64Val, result); - } break; - case DOUBLE: { - Round::operation(left.val.doubleVal, right.val.int64Val, result); - } break; - default: { - throw RuntimeException("Round: Invalid left argument datatype: " + - Types::dataTypeToString(left.dataType.typeID)); - } - } -} - } // namespace operation } // namespace function } // namespace kuzu diff --git a/src/function/arithmetic/vector_arithmetic_operations.cpp b/src/function/arithmetic/vector_arithmetic_operations.cpp index 5eccd6ddcc..24d7095dec 100644 --- a/src/function/arithmetic/vector_arithmetic_operations.cpp +++ b/src/function/arithmetic/vector_arithmetic_operations.cpp @@ -20,8 +20,6 @@ vector> AddVectorOperation::getDefinitions rightTypeID, resolveResultType(leftTypeID, rightTypeID))); } } - result.push_back(getBinaryDefinition( - ADD_FUNC_NAME, UNSTRUCTURED, UNSTRUCTURED, UNSTRUCTURED)); // date + int → date result.push_back( make_unique(ADD_FUNC_NAME, vector{DATE, INT64}, DATE, @@ -61,8 +59,6 @@ vector> SubtractVectorOperation::getDefini leftTypeID, rightTypeID, resolveResultType(leftTypeID, rightTypeID))); } } - result.push_back(getBinaryDefinition( - SUBTRACT_FUNC_NAME, UNSTRUCTURED, UNSTRUCTURED, UNSTRUCTURED)); // date - date → integer result.push_back( make_unique(SUBTRACT_FUNC_NAME, vector{DATE, DATE}, @@ -98,8 +94,6 @@ vector> MultiplyVectorOperation::getDefini leftTypeID, rightTypeID, resolveResultType(leftTypeID, rightTypeID))); } } - result.push_back(getBinaryDefinition( - MULTIPLY_FUNC_NAME, UNSTRUCTURED, UNSTRUCTURED, UNSTRUCTURED)); return result; } @@ -111,8 +105,6 @@ vector> DivideVectorOperation::getDefiniti DIVIDE_FUNC_NAME, leftType, rightType, resolveResultType(leftType, rightType))); } } - result.push_back(getBinaryDefinition( - DIVIDE_FUNC_NAME, UNSTRUCTURED, UNSTRUCTURED, UNSTRUCTURED)); // interval / int → interval result.push_back(make_unique(DIVIDE_FUNC_NAME, vector{INTERVAL, INT64}, INTERVAL, @@ -128,8 +120,6 @@ vector> ModuloVectorOperation::getDefiniti rightTypeID, resolveResultType(leftTypeID, rightTypeID))); } } - result.push_back(getBinaryDefinition( - MODULO_FUNC_NAME, UNSTRUCTURED, UNSTRUCTURED, UNSTRUCTURED)); return result; } @@ -141,14 +131,12 @@ vector> PowerVectorOperation::getDefinitio POWER_FUNC_NAME, leftTypeID, rightTypeID, DOUBLE)); } } - result.push_back(getBinaryDefinition( - POWER_FUNC_NAME, UNSTRUCTURED, UNSTRUCTURED, DOUBLE)); return result; } vector> NegateVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back(getUnaryDefinition(NEGATE_FUNC_NAME, typeID, typeID)); } return result; @@ -156,7 +144,7 @@ vector> NegateVectorOperation::getDefiniti vector> AbsVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back(getUnaryDefinition(ABS_FUNC_NAME, typeID, typeID)); } return result; @@ -164,7 +152,7 @@ vector> AbsVectorOperation::getDefinitions vector> FloorVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back(getUnaryDefinition(FLOOR_FUNC_NAME, typeID, typeID)); } return result; @@ -172,7 +160,7 @@ vector> FloorVectorOperation::getDefinitio vector> CeilVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back(getUnaryDefinition(CEIL_FUNC_NAME, typeID, typeID)); } return result; @@ -180,7 +168,7 @@ vector> CeilVectorOperation::getDefinition vector> SinVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(SIN_FUNC_NAME, typeID, DOUBLE)); } @@ -189,7 +177,7 @@ vector> SinVectorOperation::getDefinitions vector> CosVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(COS_FUNC_NAME, typeID, DOUBLE)); } @@ -198,7 +186,7 @@ vector> CosVectorOperation::getDefinitions vector> TanVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(TAN_FUNC_NAME, typeID, DOUBLE)); } @@ -207,7 +195,7 @@ vector> TanVectorOperation::getDefinitions vector> CotVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(COT_FUNC_NAME, typeID, DOUBLE)); } @@ -216,7 +204,7 @@ vector> CotVectorOperation::getDefinitions vector> AsinVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(ASIN_FUNC_NAME, typeID, DOUBLE)); } @@ -225,7 +213,7 @@ vector> AsinVectorOperation::getDefinition vector> AcosVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(ACOS_FUNC_NAME, typeID, DOUBLE)); } @@ -234,7 +222,7 @@ vector> AcosVectorOperation::getDefinition vector> AtanVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(ATAN_FUNC_NAME, typeID, DOUBLE)); } @@ -251,7 +239,7 @@ vector> FactorialVectorOperation::getDefin vector> SqrtVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(SQRT_FUNC_NAME, typeID, DOUBLE)); } @@ -260,7 +248,7 @@ vector> SqrtVectorOperation::getDefinition vector> CbrtVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(CBRT_FUNC_NAME, typeID, DOUBLE)); } @@ -272,14 +260,12 @@ vector> GammaVectorOperation::getDefinitio for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back(getUnaryDefinition(GAMMA_FUNC_NAME, typeID, typeID)); } - result.push_back( - getUnaryDefinition(GAMMA_FUNC_NAME, UNSTRUCTURED, UNSTRUCTURED)); return result; } vector> LgammaVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(LGAMMA_FUNC_NAME, typeID, DOUBLE)); } @@ -288,7 +274,7 @@ vector> LgammaVectorOperation::getDefiniti vector> LnVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(LN_FUNC_NAME, typeID, DOUBLE)); } @@ -297,7 +283,7 @@ vector> LnVectorOperation::getDefinitions( vector> LogVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(LOG_FUNC_NAME, typeID, DOUBLE)); } @@ -306,7 +292,7 @@ vector> LogVectorOperation::getDefinitions vector> Log2VectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(LOG2_FUNC_NAME, typeID, DOUBLE)); } @@ -315,7 +301,7 @@ vector> Log2VectorOperation::getDefinition vector> DegreesVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(DEGREES_FUNC_NAME, typeID, DOUBLE)); } @@ -324,7 +310,7 @@ vector> DegreesVectorOperation::getDefinit vector> RadiansVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(RADIANS_FUNC_NAME, typeID, DOUBLE)); } @@ -333,7 +319,7 @@ vector> RadiansVectorOperation::getDefinit vector> EvenVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(EVEN_FUNC_NAME, typeID, INT64)); } @@ -342,7 +328,7 @@ vector> EvenVectorOperation::getDefinition vector> SignVectorOperation::getDefinitions() { vector> result; - for (auto& typeID : DataType::getNumericalAndUnstructuredTypeIDs()) { + for (auto& typeID : DataType::getNumericalTypeIDs()) { result.push_back( getUnaryDefinition(SIGN_FUNC_NAME, typeID, INT64)); } @@ -357,8 +343,6 @@ vector> Atan2VectorOperation::getDefinitio >(ATAN2_FUNC_NAME, leftTypeID, rightTypeID, DOUBLE)); } } - result.push_back(getBinaryDefinition( - ATAN2_FUNC_NAME, UNSTRUCTURED, UNSTRUCTURED, DOUBLE)); return result; } @@ -368,8 +352,6 @@ vector> RoundVectorOperation::getDefinitio result.push_back(getBinaryDefinition( ROUND_FUNC_NAME, leftTypeID, INT64, DOUBLE)); } - result.push_back(getBinaryDefinition( - ROUND_FUNC_NAME, UNSTRUCTURED, UNSTRUCTURED, DOUBLE)); return result; } diff --git a/src/function/built_in_vector_operations.cpp b/src/function/built_in_vector_operations.cpp index d602e72f12..7f0e7b5d2e 100644 --- a/src/function/built_in_vector_operations.cpp +++ b/src/function/built_in_vector_operations.cpp @@ -109,12 +109,9 @@ uint32_t BuiltInVectorOperations::matchParameters( if (inputTypes.size() != targetTypeIDs.size()) { return UINT32_MAX; } - auto containUnstructuredTypes = any_of(inputTypes.begin(), inputTypes.end(), - [](const DataType& type) { return type.typeID == UNSTRUCTURED; }); auto cost = 0u; for (auto i = 0u; i < inputTypes.size(); ++i) { - auto castCost = castRules( - inputTypes[i].typeID, targetTypeIDs[i], containUnstructuredTypes, !isOverload); + auto castCost = castRules(inputTypes[i].typeID, targetTypeIDs[i]); if (castCost == UINT32_MAX) { return UINT32_MAX; } @@ -125,12 +122,9 @@ uint32_t BuiltInVectorOperations::matchParameters( uint32_t BuiltInVectorOperations::matchVarLengthParameters( const vector& inputTypes, DataTypeID targetTypeID, bool isOverload) { - auto containUnstructuredTypes = any_of(inputTypes.begin(), inputTypes.end(), - [](const DataType& type) { return type.typeID == UNSTRUCTURED; }); auto cost = 0u; for (auto& inputType : inputTypes) { - auto castCost = - castRules(inputType.typeID, targetTypeID, containUnstructuredTypes, !isOverload); + auto castCost = castRules(inputType.typeID, targetTypeID); if (castCost == UINT32_MAX) { return UINT32_MAX; } @@ -139,8 +133,7 @@ uint32_t BuiltInVectorOperations::matchVarLengthParameters( return cost; } -uint32_t BuiltInVectorOperations::castRules(DataTypeID inputTypeID, DataTypeID targetTypeID, - bool allowCastToUnstructured, bool allowCastToStructured) { +uint32_t BuiltInVectorOperations::castRules(DataTypeID inputTypeID, DataTypeID targetTypeID) { if (inputTypeID == ANY) { // ANY type can be any type return 0; @@ -149,22 +142,6 @@ uint32_t BuiltInVectorOperations::castRules(DataTypeID inputTypeID, DataTypeID t // Any inputTypeID can match to type ANY return 0; } - if (inputTypeID != UNSTRUCTURED && targetTypeID == UNSTRUCTURED) { - if (allowCastToUnstructured) { - // A structured input type can be implicitly cast to UNSTRUCTURED - return 1; - } else { - return UINT32_MAX; - } - } - if (inputTypeID == UNSTRUCTURED && targetTypeID != UNSTRUCTURED) { - if (allowCastToStructured) { - // UNSTRUCTURED input type can be implicitly cast to a structured type - return 1; - } else { - return UINT32_MAX; - } - } if (inputTypeID != targetTypeID) { // Unable to cast return UINT32_MAX; diff --git a/src/function/cast/include/vector_cast_operations.h b/src/function/cast/include/vector_cast_operations.h index 81d9150d7c..41b191f4b1 100644 --- a/src/function/cast/include/vector_cast_operations.h +++ b/src/function/cast/include/vector_cast_operations.h @@ -11,11 +11,7 @@ namespace function { /** * In the system we define explicit cast and implicit cast. * Explicit casts are performed from user function calls, e.g. date(), string(). - * Implicit casts are added internally. The rules are as follows: - * * Implicit cast from unstructured to structured if function is not overload, e.g. AND, - * CONTAINS. - * * Implicit cast from structured to unstructured if function is overload and at least one - * parameter is unstructured. + * Implicit casts are added internally. */ class VectorCastOperations : public VectorOperations { @@ -28,8 +24,6 @@ class VectorCastOperations : public VectorOperations { static scalar_exec_func bindImplicitCastToTimestamp(const expression_vector& children); - static scalar_exec_func bindImplicitCastToUnstructured(const expression_vector& children); - template static void UnaryCastExecFunction( const vector>& params, ValueVector& result) { diff --git a/src/function/cast/operations/include/cast_operations.h b/src/function/cast/operations/include/cast_operations.h index 1fd5651a7e..b285fe3f90 100644 --- a/src/function/cast/operations/include/cast_operations.h +++ b/src/function/cast/operations/include/cast_operations.h @@ -5,7 +5,6 @@ #include "src/common/include/in_mem_overflow_buffer_utils.h" #include "src/common/include/type_utils.h" #include "src/common/include/vector/value_vector.h" -#include "src/common/types/include/value.h" using namespace kuzu::common; @@ -13,76 +12,6 @@ namespace kuzu { namespace function { namespace operation { -struct CastToUnstructured { - template - static inline void operation(INPUT_TYPE& input, Value& result, ValueVector& resultVector) { - assert(false); - } -}; - -template<> -inline void CastToUnstructured::operation( - uint8_t& input, Value& result, ValueVector& resultVector) { - result.val.booleanVal = input; - result.dataType.typeID = BOOL; -} - -template<> -inline void CastToUnstructured::operation( - int64_t& input, Value& result, ValueVector& resultVector) { - result.val.int64Val = input; - result.dataType.typeID = INT64; -} - -template<> -inline void CastToUnstructured::operation( - double_t& input, Value& result, ValueVector& resultVector) { - result.val.doubleVal = input; - result.dataType.typeID = DOUBLE; -} - -template<> -inline void CastToUnstructured::operation(date_t& input, Value& result, ValueVector& resultVector) { - result.val.dateVal = input; - result.dataType.typeID = DATE; -} - -template<> -inline void CastToUnstructured::operation( - timestamp_t& input, Value& result, ValueVector& resultVector) { - result.val.timestampVal = input; - result.dataType.typeID = TIMESTAMP; -} - -template<> -inline void CastToUnstructured::operation( - interval_t& input, Value& result, ValueVector& resultVector) { - result.val.intervalVal = input; - result.dataType.typeID = INTERVAL; -} - -template<> -inline void CastToUnstructured::operation( - ku_string_t& input, Value& result, ValueVector& resultVector) { - InMemOverflowBufferUtils::copyString( - input, result.val.strVal, resultVector.getOverflowBuffer()); - result.dataType.typeID = STRING; -} - -struct CastUnstructuredToBool { - static inline void operation(Value& input, uint8_t& result) { result = input.val.booleanVal; } -}; - -struct CastUnstructuredToInt64 { - static inline void operation(Value& input, int64_t& result) { result = input.val.int64Val; } -}; - -struct CastUnstructuredToTimestamp { - static inline void operation(Value& input, timestamp_t& result) { - result = input.val.timestampVal; - } -}; - struct CastStringToDate { static inline void operation(ku_string_t& input, date_t& result) { result = Date::FromCString((const char*)input.getData(), input.len); diff --git a/src/function/cast/vector_cast_operations.cpp b/src/function/cast/vector_cast_operations.cpp index 159dbf28f7..ac3eb04a8d 100644 --- a/src/function/cast/vector_cast_operations.cpp +++ b/src/function/cast/vector_cast_operations.cpp @@ -3,8 +3,6 @@ #include "operations/include/cast_operations.h" #include "src/common/include/vector/value_vector_utils.h" -#include "src/common/types/include/value.h" -#include "src/function/string/include/vector_string_operations.h" namespace kuzu { namespace function { @@ -13,9 +11,6 @@ scalar_exec_func VectorCastOperations::bindImplicitCastToBool(const expression_v assert(children.size() == 1 && children[0]->dataType.typeID != BOOL); auto child = children[0]; switch (children[0]->dataType.typeID) { - case UNSTRUCTURED: { - return UnaryExecFunction; - } default: throw NotImplementedException("Expression " + child->getRawName() + " has data type " + Types::dataTypeToString(child->dataType) + @@ -27,9 +22,6 @@ scalar_exec_func VectorCastOperations::bindImplicitCastToInt64(const expression_ assert(children.size() == 1 && children[0]->dataType.typeID != INT64); auto child = children[0]; switch (children[0]->dataType.typeID) { - case UNSTRUCTURED: { - return UnaryExecFunction; - } default: throw NotImplementedException("Expression " + child->getRawName() + " has data type " + Types::dataTypeToString(child->dataType) + @@ -41,9 +33,6 @@ scalar_exec_func VectorCastOperations::bindImplicitCastToString(const expression assert(children.size() == 1 && children[0]->dataType.typeID != STRING); auto child = children[0]; switch (child->dataType.typeID) { - case UNSTRUCTURED: { - return UnaryCastExecFunction; - } default: throw NotImplementedException("Expression " + child->getRawName() + " has data type " + Types::dataTypeToString(child->dataType) + @@ -56,9 +45,6 @@ scalar_exec_func VectorCastOperations::bindImplicitCastToTimestamp( assert(children.size() == 1 && children[0]->dataType.typeID != TIMESTAMP); auto child = children[0]; switch (child->dataType.typeID) { - case UNSTRUCTURED: { - return UnaryExecFunction; - } default: throw NotImplementedException("Expression " + child->getRawName() + " has data type " + Types::dataTypeToString(child->dataType) + @@ -66,46 +52,6 @@ scalar_exec_func VectorCastOperations::bindImplicitCastToTimestamp( } } -scalar_exec_func VectorCastOperations::bindImplicitCastToUnstructured( - const expression_vector& children) { - assert(children.size() == 1 && children[0]->dataType.typeID != UNSTRUCTURED); - auto child = children[0]; - switch (child->dataType.typeID) { - case BOOL: { - return VectorStringOperations::UnaryStringExecFunction; - } - case INT64: { - return VectorStringOperations::UnaryStringExecFunction; - } - case DOUBLE: { - return VectorStringOperations::UnaryStringExecFunction; - } - case DATE: { - return VectorStringOperations::UnaryStringExecFunction; - } - case TIMESTAMP: { - return VectorStringOperations::UnaryStringExecFunction; - } - case INTERVAL: { - return VectorStringOperations::UnaryStringExecFunction; - } - case STRING: { - return VectorStringOperations::UnaryStringExecFunction; - } - default: - throw NotImplementedException("Expression " + child->getRawName() + " has data type " + - Types::dataTypeToString(child->dataType) + - " but expect UNSTRUCTURED. Implicit cast is not supported."); - } -} - vector> CastToDateVectorOperation::getDefinitions() { vector> result; result.push_back( @@ -156,9 +102,6 @@ vector> CastToStringVectorOperation::getDe result.push_back( make_unique(CAST_TO_STRING_FUNC_NAME, vector{LIST}, STRING, UnaryCastExecFunction)); - result.push_back(make_unique(CAST_TO_STRING_FUNC_NAME, - vector{UNSTRUCTURED}, STRING, - UnaryCastExecFunction)); return result; } diff --git a/src/function/comparison/include/vector_comparison_operations.h b/src/function/comparison/include/vector_comparison_operations.h index 2e4a9d9666..4f8fa5c7dd 100644 --- a/src/function/comparison/include/vector_comparison_operations.h +++ b/src/function/comparison/include/vector_comparison_operations.h @@ -18,8 +18,7 @@ class VectorComparisonOperations : public VectorOperations { definitions.push_back(getDefinition(name, leftTypeID, rightTypeID)); } } - for (auto& typeID : - vector{BOOL, STRING, NODE_ID, UNSTRUCTURED, DATE, TIMESTAMP, INTERVAL}) { + for (auto& typeID : vector{BOOL, STRING, NODE_ID, DATE, TIMESTAMP, INTERVAL}) { definitions.push_back(getDefinition(name, typeID, typeID)); } definitions.push_back(getDefinition(name, DATE, TIMESTAMP)); @@ -76,10 +75,6 @@ class VectorComparisonOperations : public VectorOperations { assert(rightTypeID == NODE_ID); return BinaryExecFunction; } - case UNSTRUCTURED: { - assert(rightTypeID == UNSTRUCTURED); - return BinaryExecFunction; - } case DATE: { switch (rightTypeID) { case DATE: { @@ -152,10 +147,6 @@ class VectorComparisonOperations : public VectorOperations { assert(rightTypeID == NODE_ID); return BinarySelectFunction; } - case UNSTRUCTURED: { - assert(rightTypeID == UNSTRUCTURED); - return BinarySelectFunction; - } case DATE: { switch (rightTypeID) { case DATE: { diff --git a/src/function/comparison/operations/include/comparison_operations.h b/src/function/comparison/operations/include/comparison_operations.h index 2966f1603d..663c900e71 100644 --- a/src/function/comparison/operations/include/comparison_operations.h +++ b/src/function/comparison/operations/include/comparison_operations.h @@ -4,7 +4,6 @@ #include #include "src/common/include/type_utils.h" -#include "src/common/types/include/value.h" using namespace kuzu::common; @@ -54,94 +53,6 @@ struct LessThanEquals { } }; -/******************************************************* - ** ** - ** Specialized >, >=, <, <= implementations ** - ** ** - *******************************************************/ - -struct CompareValues { - template - static inline void operation(const Value& left, const Value& right, uint8_t& result) { - if (left.dataType.typeID == right.dataType.typeID) { - switch (left.dataType.typeID) { - case BOOL: { - FUNC::operation(left.val.booleanVal, right.val.booleanVal, result); - } break; - case INT64: { - FUNC::operation(left.val.int64Val, right.val.int64Val, result); - } break; - case DOUBLE: { - FUNC::operation(left.val.doubleVal, right.val.doubleVal, result); - } break; - case STRING: { - FUNC::operation(left.val.strVal, right.val.strVal, result); - } break; - case DATE: { - FUNC::operation(left.val.dateVal, right.val.dateVal, result); - } break; - case TIMESTAMP: { - FUNC::operation(left.val.timestampVal, right.val.timestampVal, result); - } break; - case INTERVAL: { - FUNC::operation(left.val.intervalVal, right.val.intervalVal, result); - } break; - default: - assert(false); - } - } else if (left.dataType.typeID == INT64 && right.dataType.typeID == DOUBLE) { - FUNC::operation(left.val.int64Val, right.val.doubleVal, result); - } else if (left.dataType.typeID == DOUBLE && right.dataType.typeID == INT64) { - FUNC::operation(left.val.doubleVal, right.val.int64Val, result); - } else if (left.dataType.typeID == DATE && right.dataType.typeID == TIMESTAMP) { - FUNC::operation(left.val.dateVal, right.val.timestampVal, result); - } else if (left.dataType.typeID == TIMESTAMP && right.dataType.typeID == DATE) { - FUNC::operation(left.val.timestampVal, right.val.dateVal, result); - } else { - throw RuntimeException("Cannot " + string(comparisonOpStr) + " `" + - Types::dataTypeToString(left.dataType.typeID) + "` and `" + - Types::dataTypeToString(right.dataType.typeID) + "`"); - } - } -}; - -static const char equalsStr[] = "equals"; -static const char notEqualsStr[] = "not_equals"; -static const char greaterThanStr[] = "greater_than"; -static const char greaterThanEqualsStr[] = "greater_than_equals"; -static const char lessThanStr[] = "less_than"; -static const char lessThanEqualsStr[] = "less_than_equals"; - -template<> -inline void Equals::operation(const Value& left, const Value& right, uint8_t& result) { - CompareValues::operation(left, right, result); -} - -template<> -inline void NotEquals::operation(const Value& left, const Value& right, uint8_t& result) { - CompareValues::operation(left, right, result); -} - -template<> -inline void GreaterThan::operation(const Value& left, const Value& right, uint8_t& result) { - CompareValues::operation(left, right, result); -} - -template<> -inline void GreaterThanEquals::operation(const Value& left, const Value& right, uint8_t& result) { - CompareValues::operation(left, right, result); -} - -template<> -inline void LessThan::operation(const Value& left, const Value& right, uint8_t& result) { - CompareValues::operation(left, right, result); -} - -template<> -inline void LessThanEquals::operation(const Value& left, const Value& right, uint8_t& result) { - CompareValues::operation(left, right, result); -} - } // namespace operation } // namespace function } // namespace kuzu diff --git a/src/function/date/operations/include/date_operations.h b/src/function/date/operations/include/date_operations.h index 3988422957..005a99b929 100644 --- a/src/function/date/operations/include/date_operations.h +++ b/src/function/date/operations/include/date_operations.h @@ -31,21 +31,6 @@ inline void DayName::operation(timestamp_t& input, ku_string_t& result) { result.set(dayName); } -template<> -inline void DayName::operation(Value& input, ku_string_t& result) { - switch (input.dataType.typeID) { - case DATE: { - DayName::operation(input.val.dateVal, result); - } break; - case TIMESTAMP: { - DayName::operation(input.val.timestampVal, result); - } break; - default: - throw RuntimeException( - "Cannot call dayname on type: " + Types::dataTypeToString(input.dataType.typeID)); - } -} - struct MonthName { template static inline void operation(T& input, ku_string_t& result) { @@ -68,21 +53,6 @@ inline void MonthName::operation(timestamp_t& input, ku_string_t& result) { result.set(monthName); } -template<> -inline void MonthName::operation(Value& input, ku_string_t& result) { - switch (input.dataType.typeID) { - case DATE: { - MonthName::operation(input.val.dateVal, result); - } break; - case TIMESTAMP: { - MonthName::operation(input.val.timestampVal, result); - } break; - default: - throw RuntimeException( - "Cannot call monthname on type: " + Types::dataTypeToString(input.dataType.typeID)); - } -} - struct LastDay { template static inline void operation(T& input, date_t& result) { @@ -103,21 +73,6 @@ inline void LastDay::operation(timestamp_t& input, date_t& result) { result = Date::getLastDay(date); } -template<> -inline void LastDay::operation(Value& input, date_t& result) { - switch (input.dataType.typeID) { - case DATE: { - LastDay::operation(input.val.dateVal, result); - } break; - case TIMESTAMP: { - LastDay::operation(input.val.timestampVal, result); - } break; - default: - throw RuntimeException( - "Cannot call lastday on type: " + Types::dataTypeToString(input.dataType.typeID)); - } -} - struct DatePart { template static inline void operation(LEFT_TYPE& partSpecifier, RIGHT_TYPE& input, int64_t& result) { @@ -146,26 +101,6 @@ inline void DatePart::operation(ku_string_t& partSpecifier, interval_t& input, i result = Interval::getIntervalPart(specifier, input); } -template<> -inline void DatePart::operation(Value& partSpecifier, Value& input, int64_t& result) { - DatePartSpecifier specifier; - Interval::TryGetDatePartSpecifier(partSpecifier.val.strVal.getAsString(), specifier); - switch (input.dataType.typeID) { - case DATE: { - DatePart::operation(partSpecifier.val.strVal, input.val.dateVal, result); - } break; - case TIMESTAMP: { - DatePart::operation(partSpecifier.val.strVal, input.val.timestampVal, result); - } break; - case INTERVAL: { - DatePart::operation(partSpecifier.val.strVal, input.val.intervalVal, result); - } break; - default: - throw RuntimeException( - "Cannot call date_part on type: " + Types::dataTypeToString(input.dataType.typeID)); - } -} - struct DateTrunc { template static inline void operation(LEFT_TYPE& partSpecifier, RIGHT_TYPE& input, RIGHT_TYPE& result) { @@ -188,26 +123,6 @@ inline void DateTrunc::operation( result = Timestamp::trunc(specifier, input); } -template<> -inline void DateTrunc::operation(Value& partSpecifier, Value& input, Value& result) { - DatePartSpecifier specifier; - Interval::TryGetDatePartSpecifier(partSpecifier.val.strVal.getAsString(), specifier); - switch (input.dataType.typeID) { - case DATE: { - result.dataType.typeID = DATE; - DateTrunc::operation(partSpecifier.val.strVal, input.val.dateVal, result.val.dateVal); - } break; - case TIMESTAMP: { - result.dataType.typeID = TIMESTAMP; - DateTrunc::operation( - partSpecifier.val.strVal, input.val.timestampVal, result.val.timestampVal); - } break; - default: - throw RuntimeException( - "Cannot call date_trunc on type: " + Types::dataTypeToString(input.dataType.typeID)); - } -} - struct Greatest { template static inline void operation(T& left, T& right, T& result) { @@ -215,24 +130,6 @@ struct Greatest { } }; -template<> -inline void Greatest::operation(Value& left, Value& right, Value& result) { - assert(left.dataType.typeID == right.dataType.typeID); - result.dataType.typeID = left.dataType.typeID; - switch (left.dataType.typeID) { - case DATE: { - Greatest::operation(left.val.dateVal, right.val.dateVal, result.val.dateVal); - } break; - case TIMESTAMP: { - Greatest::operation(left.val.timestampVal, right.val.timestampVal, result.val.timestampVal); - } break; - default: - throw RuntimeException( - "Cannot call greatest on type: " + Types::dataTypeToString(left.dataType.typeID) + - " with type: " + Types::dataTypeToString(right.dataType.typeID)); - } -} - struct Least { template static inline void operation(T& left, T& right, T& result) { @@ -240,25 +137,6 @@ struct Least { } }; -template<> -inline void Least::operation(Value& left, Value& right, Value& result) { - assert(left.dataType.typeID == right.dataType.typeID); - result.dataType.typeID = left.dataType.typeID; - switch (left.dataType.typeID) { - case DATE: { - Least::operation(left.val.dateVal, right.val.dateVal, result.val.dateVal); - } break; - - case TIMESTAMP: { - Least::operation(left.val.timestampVal, right.val.timestampVal, result.val.timestampVal); - } break; - default: - throw RuntimeException( - "Cannot call least on type: " + Types::dataTypeToString(left.dataType.typeID) + - " with type: " + Types::dataTypeToString(right.dataType.typeID)); - } -} - struct MakeDate { static inline void operation(int64_t& year, int64_t& month, int64_t& day, date_t& result) { result = Date::FromDate(year, month, day); diff --git a/src/function/date/vector_date_operations.cpp b/src/function/date/vector_date_operations.cpp index e1c3623630..4598e6d69e 100644 --- a/src/function/date/vector_date_operations.cpp +++ b/src/function/date/vector_date_operations.cpp @@ -16,9 +16,6 @@ vector> DatePartVectorOperation::getDefini result.push_back(make_unique(DATE_PART_FUNC_NAME, vector{STRING, INTERVAL}, INT64, BinaryExecFunction)); - result.push_back(make_unique(DATE_PART_FUNC_NAME, - vector{UNSTRUCTURED, UNSTRUCTURED}, INT64, - BinaryExecFunction)); return result; } @@ -30,9 +27,6 @@ vector> DateTruncVectorOperation::getDefin result.push_back(make_unique(DATE_TRUNC_FUNC_NAME, vector{STRING, TIMESTAMP}, TIMESTAMP, BinaryExecFunction)); - result.push_back(make_unique(DATE_TRUNC_FUNC_NAME, - vector{UNSTRUCTURED, UNSTRUCTURED}, UNSTRUCTURED, - BinaryExecFunction)); return result; } @@ -44,9 +38,6 @@ vector> DayNameVectorOperation::getDefinit result.push_back( make_unique(DAYNAME_FUNC_NAME, vector{TIMESTAMP}, STRING, UnaryExecFunction)); - result.push_back( - make_unique(DAYNAME_FUNC_NAME, vector{UNSTRUCTURED}, - STRING, UnaryExecFunction)); return result; } @@ -58,9 +49,6 @@ vector> GreatestVectorOperation::getDefini result.push_back(make_unique(GREATEST_FUNC_NAME, vector{TIMESTAMP, TIMESTAMP}, TIMESTAMP, BinaryExecFunction)); - result.push_back(make_unique(GREATEST_FUNC_NAME, - vector{UNSTRUCTURED, UNSTRUCTURED}, UNSTRUCTURED, - BinaryExecFunction)); return result; } @@ -71,9 +59,6 @@ vector> LastDayVectorOperation::getDefinit result.push_back( make_unique(LAST_DAY_FUNC_NAME, vector{TIMESTAMP}, DATE, UnaryExecFunction)); - result.push_back( - make_unique(LAST_DAY_FUNC_NAME, vector{UNSTRUCTURED}, - DATE, UnaryExecFunction)); return result; } @@ -85,9 +70,6 @@ vector> LeastVectorOperation::getDefinitio result.push_back(make_unique(LEAST_FUNC_NAME, vector{TIMESTAMP, TIMESTAMP}, TIMESTAMP, BinaryExecFunction)); - result.push_back(make_unique(LEAST_FUNC_NAME, - vector{UNSTRUCTURED, UNSTRUCTURED}, UNSTRUCTURED, - BinaryExecFunction)); return result; } @@ -107,9 +89,6 @@ vector> MonthNameVectorOperation::getDefin result.push_back( make_unique(MONTHNAME_FUNC_NAME, vector{TIMESTAMP}, STRING, UnaryExecFunction)); - result.push_back(make_unique(MONTHNAME_FUNC_NAME, - vector{UNSTRUCTURED}, STRING, - UnaryExecFunction)); return result; } diff --git a/src/function/hash/operations/include/hash_operations.h b/src/function/hash/operations/include/hash_operations.h index 5f2cd689b4..a760a3de8f 100644 --- a/src/function/hash/operations/include/hash_operations.h +++ b/src/function/hash/operations/include/hash_operations.h @@ -5,7 +5,6 @@ #include "src/common/include/type_utils.h" #include "src/common/include/utils.h" -#include "src/common/types/include/value.h" using namespace kuzu::common; @@ -109,99 +108,6 @@ inline void Hash::operation(const unordered_set& key, hash_t& result) { } } -/********************************************** - ** ** - ** Specialized Value implementations ** - ** ** - **********************************************/ - -template<> -inline void Hash::operation(const Value& key, hash_t& result) { - switch (key.dataType.typeID) { - case NODE_ID: { - Hash::operation(key.val.nodeID, result); - } break; - case BOOL: { - Hash::operation(key.val.booleanVal, result); - } break; - case INT64: { - Hash::operation(key.val.int64Val, result); - } break; - case DOUBLE: { - Hash::operation(key.val.doubleVal, result); - } break; - case STRING: { - Hash::operation(key.val.strVal, result); - } break; - case DATE: { - Hash::operation(key.val.dateVal, result); - } break; - case TIMESTAMP: { - Hash::operation(key.val.timestampVal, result); - } break; - case INTERVAL: { - Hash::operation(key.val.intervalVal, result); - } break; - default: { - throw RuntimeException( - "Cannot hash data type " + Types::dataTypeToString(key.dataType.typeID)); - } - } -} - -struct HashOnValue { - static void operation(Value& key, bool isNull, hash_t& result) { - if (isNull) { - result = NULL_HASH; - return; - } - Hash::operation(key, result); - } -}; - -/********************************************** - ** ** - ** Specialized Bytes implementations ** - ** ** - **********************************************/ - -struct HashOnBytes { - static inline void operation(DataTypeID dataTypeID, uint8_t* key, bool isNull, hash_t& result) { - switch (dataTypeID) { - case NODE_ID: { - Hash::operation(*(nodeID_t*)key, isNull, result); - } break; - case BOOL: { - Hash::operation(*(bool*)key, isNull, result); - } break; - case INT64: { - Hash::operation(*(int64_t*)key, isNull, result); - } break; - case DOUBLE: { - Hash::operation(*(double_t*)key, isNull, result); - } break; - case STRING: { - Hash::operation(*(ku_string_t*)key, isNull, result); - } break; - case DATE: { - Hash::operation(*(date_t*)key, isNull, result); - } break; - case TIMESTAMP: { - Hash::operation(*(timestamp_t*)key, isNull, result); - } break; - case INTERVAL: { - Hash::operation(*(interval_t*)key, isNull, result); - } break; - case UNSTRUCTURED: { - HashOnValue::operation(*(Value*)key, isNull, result); - } break; - default: { - throw RuntimeException("Cannot hash data type " + Types::dataTypeToString(dataTypeID)); - } - } - } -}; - } // namespace operation } // namespace function } // namespace kuzu diff --git a/src/function/hash/vector_hash_operations.cpp b/src/function/hash/vector_hash_operations.cpp index c3475f7d99..c81ac801b6 100644 --- a/src/function/hash/vector_hash_operations.cpp +++ b/src/function/hash/vector_hash_operations.cpp @@ -33,9 +33,6 @@ void VectorHashOperations::computeHash(ValueVector* operand, ValueVector* result case INTERVAL: { UnaryHashOperationExecutor::execute(*operand, *result); } break; - case UNSTRUCTURED: { - UnaryHashOperationExecutor::execute(*operand, *result); - } break; default: { throw RuntimeException( "Cannot hash data type " + Types::dataTypeToString(operand->dataType.typeID)); diff --git a/src/function/include/binary_operation_executor.h b/src/function/include/binary_operation_executor.h index cb002eebcc..a4ae1f6fe1 100644 --- a/src/function/include/binary_operation_executor.h +++ b/src/function/include/binary_operation_executor.h @@ -4,7 +4,6 @@ #include "src/common/include/type_utils.h" #include "src/common/include/vector/value_vector.h" -#include "src/common/types/include/value.h" namespace kuzu { namespace function { diff --git a/src/function/include/built_in_vector_operations.h b/src/function/include/built_in_vector_operations.h index de4661b33c..4e26f06816 100644 --- a/src/function/include/built_in_vector_operations.h +++ b/src/function/include/built_in_vector_operations.h @@ -34,8 +34,7 @@ class BuiltInVectorOperations { const vector& targetTypeIDs, bool isOverload); uint32_t matchVarLengthParameters( const vector& inputTypes, DataTypeID targetTypeID, bool isOverload); - uint32_t castRules(DataTypeID inputTypeID, DataTypeID targetTypeID, - bool allowCastToUnstructured, bool allowCastToStructured); + uint32_t castRules(DataTypeID inputTypeID, DataTypeID targetTypeID); void validateNonEmptyCandidateFunctions(vector& candidateFunctions, const string& name, const vector& inputTypes); diff --git a/src/function/include/ternary_operation_executor.h b/src/function/include/ternary_operation_executor.h index ce85decef4..ac057e5c1c 100644 --- a/src/function/include/ternary_operation_executor.h +++ b/src/function/include/ternary_operation_executor.h @@ -4,7 +4,6 @@ #include "src/common/include/type_utils.h" #include "src/common/include/vector/value_vector.h" -#include "src/common/types/include/value.h" namespace kuzu { namespace function { diff --git a/src/function/list/operations/include/list_extract_operation.h b/src/function/list/operations/include/list_extract_operation.h index 37cd7e5b72..7a8d2f5cf5 100644 --- a/src/function/list/operations/include/list_extract_operation.h +++ b/src/function/list/operations/include/list_extract_operation.h @@ -43,18 +43,6 @@ struct ListExtract { ArrayExtract::operation(str, idx, result); } } - - static inline void operation(Value& item, int64_t& pos, Value& result) { - if (item.dataType.typeID == STRING) { - result.dataType.typeID = STRING; - operation(item.val.strVal, pos, result.val.strVal); - } else if (item.dataType.typeID == LIST) { - throw RuntimeException("list_extract not implemented for unstructured lists"); - } else { - throw RuntimeException( - "incorrect type given to [] operator. Type must be either LIST or STRING"); - } - } }; template<> diff --git a/src/function/list/operations/include/list_slice_operation.h b/src/function/list/operations/include/list_slice_operation.h index 32b3ffc71a..48ea0359da 100644 --- a/src/function/list/operations/include/list_slice_operation.h +++ b/src/function/list/operations/include/list_slice_operation.h @@ -43,19 +43,6 @@ struct ListSlice { memcpy(result.prefix, result.getData(), ku_string_t::PREFIX_LENGTH); } } - - static inline void operation( - Value& item, int64_t& begin, int64_t& end, Value& result, ValueVector& resultValueVector) { - if (item.dataType.typeID == STRING) { - result.dataType.typeID = STRING; - operation(item.val.strVal, begin, end, result.val.strVal, resultValueVector); - } else if (item.dataType.typeID == LIST) { - throw RuntimeException("list_slice not implemented for unstructured lists"); - } else { - throw RuntimeException( - "incorrect type given to [] operator. Type must be either LIST or STRING"); - } - } }; } // namespace operation diff --git a/src/function/list/vector_list_operation.cpp b/src/function/list/vector_list_operation.cpp index 3b1167fd6d..7b5154d40e 100644 --- a/src/function/list/vector_list_operation.cpp +++ b/src/function/list/vector_list_operation.cpp @@ -138,9 +138,6 @@ void ListExtractVectorOperation::listExtractBindFunc(const vector& arg vector> ListExtractVectorOperation::getDefinitions() { vector> result; - result.push_back(make_unique(LIST_EXTRACT_FUNC_NAME, - vector{UNSTRUCTURED, INT64}, UNSTRUCTURED, - BinaryExecFunction, false /* isVarlength*/)); result.push_back(make_unique(LIST_EXTRACT_FUNC_NAME, vector{LIST, INT64}, ANY, nullptr, nullptr, listExtractBindFunc, false /* isVarlength*/)); @@ -303,10 +300,6 @@ vector> ListSliceVectorOperation::getDefin vector{STRING, INT64, INT64}, STRING, TernaryListExecFunction, false /* isVarlength */)); - result.push_back(make_unique(LIST_SLICE_FUNC_NAME, - vector{UNSTRUCTURED, INT64, INT64}, UNSTRUCTURED, - TernaryListExecFunction, - false /* isVarlength */)); return result; } diff --git a/src/planner/include/query_planner.h b/src/planner/include/query_planner.h index 43ca7a9b91..590b59248a 100644 --- a/src/planner/include/query_planner.h +++ b/src/planner/include/query_planner.h @@ -78,7 +78,6 @@ class QueryPlanner { void appendFilter(const shared_ptr& expression, LogicalPlan& plan); - // switch structured and unstructured node property scan inline void appendScanNodePropIfNecessarySwitch( shared_ptr property, NodeExpression& node, LogicalPlan& plan) { expression_vector properties{move(property)}; @@ -86,8 +85,6 @@ class QueryPlanner { } void appendScanNodePropIfNecessarySwitch( expression_vector& properties, NodeExpression& node, LogicalPlan& plan); - void appendScanNodePropIfNecessary( - expression_vector& properties, NodeExpression& node, LogicalPlan& plan, bool isStructured); inline void appendScanRelPropsIfNecessary(expression_vector& properties, RelExpression& rel, RelDirection direction, LogicalPlan& plan) { diff --git a/src/planner/include/update_planner.h b/src/planner/include/update_planner.h index ddc5c31e71..5098ecac50 100644 --- a/src/planner/include/update_planner.h +++ b/src/planner/include/update_planner.h @@ -40,7 +40,7 @@ class UpdatePlanner { void appendSet(vector setItems, LogicalPlan& plan); void appendDelete(BoundDeleteClause& deleteClause, LogicalPlan& plan); - vector splitSetItems(vector setItems, bool isStructured); + vector splitSetItems(vector setItems); private: const Catalog& catalog; diff --git a/src/planner/logical_plan/logical_operator/include/logical_scan_node_property.h b/src/planner/logical_plan/logical_operator/include/logical_scan_node_property.h index 155a923abf..64a2122184 100644 --- a/src/planner/logical_plan/logical_operator/include/logical_scan_node_property.h +++ b/src/planner/logical_plan/logical_operator/include/logical_scan_node_property.h @@ -9,10 +9,9 @@ class LogicalScanNodeProperty : public LogicalOperator { public: LogicalScanNodeProperty(string nodeID, table_id_t tableID, vector propertyNames, - vector propertyIDs, bool isUnstructured, shared_ptr child) + vector propertyIDs, shared_ptr child) : LogicalOperator{move(child)}, nodeID{move(nodeID)}, tableID{tableID}, - propertyNames{move(propertyNames)}, propertyIDs{move(propertyIDs)}, isUnstructured{ - isUnstructured} {} + propertyNames{move(propertyNames)}, propertyIDs{move(propertyIDs)} {} LogicalOperatorType getLogicalOperatorType() const override { return LogicalOperatorType::LOGICAL_SCAN_NODE_PROPERTY; @@ -34,11 +33,9 @@ class LogicalScanNodeProperty : public LogicalOperator { inline vector getPropertyIDs() const { return propertyIDs; } - inline bool getIsUnstructured() const { return isUnstructured; } - unique_ptr copy() override { return make_unique( - nodeID, tableID, propertyNames, propertyIDs, isUnstructured, children[0]->copy()); + nodeID, tableID, propertyNames, propertyIDs, children[0]->copy()); } private: @@ -46,7 +43,6 @@ class LogicalScanNodeProperty : public LogicalOperator { table_id_t tableID; vector propertyNames; vector propertyIDs; - bool isUnstructured; }; } // namespace planner diff --git a/src/planner/logical_plan/logical_operator/include/logical_set.h b/src/planner/logical_plan/logical_operator/include/logical_set.h index 2f3cf3a8d5..95d1d131e1 100644 --- a/src/planner/logical_plan/logical_operator/include/logical_set.h +++ b/src/planner/logical_plan/logical_operator/include/logical_set.h @@ -9,10 +9,8 @@ namespace planner { class LogicalSetNodeProperty : public LogicalOperator { public: - LogicalSetNodeProperty( - vector setItems, bool isUnstructured, shared_ptr child) - : LogicalOperator{std::move(child)}, setItems{std::move(setItems)}, isUnstructured{ - isUnstructured} {} + LogicalSetNodeProperty(vector setItems, shared_ptr child) + : LogicalOperator{std::move(child)}, setItems{std::move(setItems)} {} inline LogicalOperatorType getLogicalOperatorType() const override { return LogicalOperatorType::LOGICAL_SET_NODE_PROPERTY; @@ -27,18 +25,14 @@ class LogicalSetNodeProperty : public LogicalOperator { } inline vector getSetItems() const { return setItems; } - inline bool getIsUnstructured() const { return isUnstructured; } inline unique_ptr copy() override { - return make_unique(setItems, isUnstructured, children[0]->copy()); + return make_unique(setItems, children[0]->copy()); } private: // Property expression = target expression pair. vector setItems; - // Whether all properties to set is unstructured or not. LogicalSetNodeProperty will be compiled - // to either ScanStructuredNodeProperty or ScanUnstructuredNodeProperty. - bool isUnstructured; }; } // namespace planner diff --git a/src/planner/query_planner.cpp b/src/planner/query_planner.cpp index ab2f4cfca5..d27d88a570 100644 --- a/src/planner/query_planner.cpp +++ b/src/planner/query_planner.cpp @@ -379,20 +379,9 @@ void QueryPlanner::appendFilter(const shared_ptr& expression, Logica void QueryPlanner::appendScanNodePropIfNecessarySwitch( expression_vector& properties, NodeExpression& node, LogicalPlan& plan) { expression_vector structuredProperties; - expression_vector unstructuredProperties; for (auto& property : properties) { - if (property->dataType.typeID == UNSTRUCTURED) { - unstructuredProperties.push_back(property); - } else { - structuredProperties.push_back(property); - } + structuredProperties.push_back(property); } - appendScanNodePropIfNecessary(structuredProperties, node, plan, true /* isStructured */); - appendScanNodePropIfNecessary(unstructuredProperties, node, plan, false /* isUnstructured */); -} - -void QueryPlanner::appendScanNodePropIfNecessary( - expression_vector& properties, NodeExpression& node, LogicalPlan& plan, bool isStructured) { auto schema = plan.getSchema(); vector propertyNames; vector propertyIDs; @@ -410,9 +399,8 @@ void QueryPlanner::appendScanNodePropIfNecessary( if (propertyNames.empty()) { // all properties have been scanned before return; } - auto scanNodeProperty = - make_shared(node.getIDProperty(), node.getTableID(), - move(propertyNames), move(propertyIDs), !isStructured, plan.getLastOperator()); + auto scanNodeProperty = make_shared(node.getIDProperty(), + node.getTableID(), move(propertyNames), move(propertyIDs), plan.getLastOperator()); plan.setLastOperator(move(scanNodeProperty)); } diff --git a/src/planner/update_planner.cpp b/src/planner/update_planner.cpp index 8eaae73f03..25d7688be4 100644 --- a/src/planner/update_planner.cpp +++ b/src/planner/update_planner.cpp @@ -115,15 +115,10 @@ void UpdatePlanner::appendSet(vector setItems, LogicalPlan& pla for (auto& setItem : setItems) { planSetItem(setItem, plan); } - auto structuredSetItems = splitSetItems(setItems, true /* isStructured */); + auto structuredSetItems = splitSetItems(setItems); if (!structuredSetItems.empty()) { plan.setLastOperator(make_shared( - std::move(structuredSetItems), false /* isUnstructured */, plan.getLastOperator())); - } - auto unstructuredSetItems = splitSetItems(setItems, false /* isStructured */); - if (!unstructuredSetItems.empty()) { - plan.setLastOperator(make_shared( - std::move(unstructuredSetItems), true /* isUnstructured*/, plan.getLastOperator())); + std::move(structuredSetItems), plan.getLastOperator())); } } @@ -147,15 +142,10 @@ void UpdatePlanner::appendDelete(BoundDeleteClause& deleteClause, LogicalPlan& p plan.setLastOperator(deleteOperator); } -vector UpdatePlanner::splitSetItems( - vector setItems, bool isStructured) { +vector UpdatePlanner::splitSetItems(vector setItems) { vector result; for (auto& [lhs, rhs] : setItems) { - auto property = static_pointer_cast(lhs); - auto isPropertyStructured = property->dataType.typeID != UNSTRUCTURED; - if (isPropertyStructured == isStructured) { - result.emplace_back(lhs, rhs); - } + result.emplace_back(lhs, rhs); } return result; } diff --git a/src/processor/mapper/map_scan_node_property.cpp b/src/processor/mapper/map_scan_node_property.cpp index d235a543b6..95091e0bb3 100644 --- a/src/processor/mapper/map_scan_node_property.cpp +++ b/src/processor/mapper/map_scan_node_property.cpp @@ -18,7 +18,6 @@ unique_ptr PlanMapper::mapLogicalScanNodePropertyToPhysical( mapperContext.addComputedExpressions(propertyName); } auto& nodeStore = storageManager.getNodesStore(); - assert(!scanProperty.getIsUnstructured()); vector propertyColumns; for (auto& propertyID : scanProperty.getPropertyIDs()) { propertyColumns.push_back( diff --git a/src/processor/mapper/map_set.cpp b/src/processor/mapper/map_set.cpp index 0b7be12bcc..3f08526865 100644 --- a/src/processor/mapper/map_set.cpp +++ b/src/processor/mapper/map_set.cpp @@ -21,7 +21,6 @@ unique_ptr PlanMapper::mapLogicalSetToPhysical( expressionEvaluators.push_back(expressionMapper.mapExpression(target, mapperContext)); } vector nodeIDVectorPositions; - assert(!logicalSetNodeProperty.getIsUnstructured()); vector propertyColumns; for (auto& [expr, _] : setItems) { auto property = static_pointer_cast(expr); diff --git a/src/processor/operator/aggregate/aggregate_hash_table.cpp b/src/processor/operator/aggregate/aggregate_hash_table.cpp index b7301932a2..47e7cd5b68 100644 --- a/src/processor/operator/aggregate/aggregate_hash_table.cpp +++ b/src/processor/operator/aggregate/aggregate_hash_table.cpp @@ -689,9 +689,6 @@ compare_function_t AggregateHashTable::getCompareEntryWithKeysFunc(DataTypeID ty case INTERVAL: { return compareEntryWithKeys; } - case UNSTRUCTURED: { - return compareEntryWithKeys; - } default: { throw RuntimeException("Cannot compare data type " + Types::dataTypeToString(typeId)); } diff --git a/src/processor/operator/copy_csv/copy_node_csv.cpp b/src/processor/operator/copy_csv/copy_node_csv.cpp index d73d872f4e..1b2d670277 100644 --- a/src/processor/operator/copy_csv/copy_node_csv.cpp +++ b/src/processor/operator/copy_csv/copy_node_csv.cpp @@ -10,8 +10,7 @@ string CopyNodeCSV::execute(TaskScheduler* taskScheduler, ExecutionContext* exec make_unique(csvDescription, wal->getDirectory(), *taskScheduler, *catalog, tableSchema.tableID, &nodesStore->getNodesStatisticsAndDeletedIDs()); errorIfTableIsNonEmpty(&nodesStore->getNodesStatisticsAndDeletedIDs()); - // Note: This copy function will update the unstructured properties of the nodeTable and the - // maxNodeOffset in nodesStatisticsAndDeletedIDs. + // Note: This copy function will update the maxNodeOffset in nodesStatisticsAndDeletedIDs. auto numNodesCopied = nodeCSVCopier->copy(); wal->logCopyNodeCSVRecord(tableSchema.tableID); return StringUtils::string_format("%d number of nodes has been copied to nodeTable: %s.", diff --git a/src/processor/operator/include/physical_operator.h b/src/processor/operator/include/physical_operator.h index a25d811b40..740c349f98 100644 --- a/src/processor/operator/include/physical_operator.h +++ b/src/processor/operator/include/physical_operator.h @@ -39,10 +39,8 @@ enum PhysicalOperatorType : uint8_t { RESULT_COLLECTOR, SCAN_NODE_ID, SCAN_STRUCTURED_PROPERTY, - SCAN_UNSTRUCTURED_PROPERTY, SEMI_MASKER, SET_STRUCTURED_NODE_PROPERTY, - SET_UNSTRUCTURED_NODE_PROPERTY, SKIP, ORDER_BY, ORDER_BY_MERGE, @@ -58,9 +56,9 @@ const string PhysicalOperatorTypeNames[] = {"AGGREGATE", "AGGREGATE_SCAN", "COLU "CREATE_REL_TABLE", "CROSS_PRODUCT", "DELETE", "DROP_TABLE", "EXISTS", "FACTORIZED_TABLE_SCAN", "FILTER", "FLATTEN", "HASH_JOIN_BUILD", "HASH_JOIN_PROBE", "INDEX_SCAN", "INTERSECT_BUILD", "INTERSECT", "LIMIT", "LIST_EXTEND", "MULTIPLICITY_REDUCER", "PROJECTION", "SCAN_REL_PROPERTY", - "RESULT_COLLECTOR", "SCAN_NODE_ID", "SCAN_STRUCTURED_PROPERTY", "SCAN_UNSTRUCTURED_PROPERTY", - "SEMI_MASKER", "SET_STRUCTURED_NODE_PROPERTY", "SET_UNSTRUCTURED_NODE_PROPERTY", "SKIP", - "ORDER_BY", "ORDER_BY_MERGE", "ORDER_BY_SCAN", "UNION_ALL_SCAN", "UNWIND"}; + "RESULT_COLLECTOR", "SCAN_NODE_ID", "SCAN_STRUCTURED_PROPERTY", "SEMI_MASKER", + "SET_STRUCTURED_NODE_PROPERTY", "SKIP", "ORDER_BY", "ORDER_BY_MERGE", "ORDER_BY_SCAN", + "UNION_ALL_SCAN", "UNWIND"}; struct OperatorMetrics { diff --git a/src/processor/operator/order_by/include/key_block_merger.h b/src/processor/operator/order_by/include/key_block_merger.h index d84b29a4a2..7096c6f077 100644 --- a/src/processor/operator/order_by/include/key_block_merger.h +++ b/src/processor/operator/order_by/include/key_block_merger.h @@ -11,23 +11,21 @@ namespace processor { struct KeyBlockMergeMorsel; -// This struct stores the string and unstructured key column information. We can utilize the +// This struct stores the string key column information. We can utilize the // pre-computed indexes and offsets to expedite the tuple comparison in merge sort. -struct StringAndUnstructuredKeyColInfo { - StringAndUnstructuredKeyColInfo( +struct StrKeyColInfo { + StrKeyColInfo( uint32_t colOffsetInFT, uint32_t colOffsetInEncodedKeyBlock, bool isAscOrder, bool isStrCol) : colOffsetInFT{colOffsetInFT}, colOffsetInEncodedKeyBlock{colOffsetInEncodedKeyBlock}, - isAscOrder{isAscOrder}, isStrCol{isStrCol} {} + isAscOrder{isAscOrder} {} inline uint32_t getEncodingSize() const { - return isStrCol ? OrderByKeyEncoder::getEncodingSize(DataType(STRING)) : - OrderByKeyEncoder::getEncodingSize(DataType(UNSTRUCTURED)); + return OrderByKeyEncoder::getEncodingSize(DataType(STRING)); } uint32_t colOffsetInFT; uint32_t colOffsetInEncodedKeyBlock; bool isAscOrder; - bool isStrCol; }; class MergedKeyBlocks { @@ -98,23 +96,19 @@ struct BlockPtrInfo { class KeyBlockMerger { public: explicit KeyBlockMerger(vector>& factorizedTables, - vector& stringAndUnstructuredKeyColInfo, - uint32_t numBytesPerTuple) - : factorizedTables{factorizedTables}, - stringAndUnstructuredKeyColInfo{stringAndUnstructuredKeyColInfo}, + vector& strKeyColsInfo, uint32_t numBytesPerTuple) + : factorizedTables{factorizedTables}, strKeyColsInfo{strKeyColsInfo}, numBytesPerTuple{numBytesPerTuple}, numBytesToCompare{numBytesPerTuple - 8}, - hasStringAndUnstructuredCol{!stringAndUnstructuredKeyColInfo.empty()} {} + hasStringCol{!strKeyColsInfo.empty()} {} void mergeKeyBlocks(KeyBlockMergeMorsel& keyBlockMergeMorsel) const; inline bool compareTuplePtr(uint8_t* leftTuplePtr, uint8_t* rightTuplePtr) const { - return hasStringAndUnstructuredCol ? - compareTuplePtrWithStringAndUnstructuredCol(leftTuplePtr, rightTuplePtr) : - memcmp(leftTuplePtr, rightTuplePtr, numBytesToCompare) > 0; + return hasStringCol ? compareTuplePtrWithStringCol(leftTuplePtr, rightTuplePtr) : + memcmp(leftTuplePtr, rightTuplePtr, numBytesToCompare) > 0; } - bool compareTuplePtrWithStringAndUnstructuredCol( - uint8_t* leftTuplePtr, uint8_t* rightTuplePtr) const; + bool compareTuplePtrWithStringCol(uint8_t* leftTuplePtr, uint8_t* rightTuplePtr) const; private: void copyRemainingBlockDataToResult(BlockPtrInfo& blockToCopy, BlockPtrInfo& resultBlock) const; @@ -125,12 +119,11 @@ class KeyBlockMerger { // when resolving ties. vector>& factorizedTables; // We also store the colIdxInFactorizedTable, colOffsetInEncodedKeyBlock, isAscOrder, isStrCol - // for each string and unstructured column. So, we don't need to compute them again during merge - // sort. - vector& stringAndUnstructuredKeyColInfo; + // for each string column. So, we don't need to compute them again during merge sort. + vector& strKeyColsInfo; uint32_t numBytesPerTuple; uint32_t numBytesToCompare; - bool hasStringAndUnstructuredCol; + bool hasStringCol; }; class KeyBlockMergeTask { @@ -204,8 +197,7 @@ class KeyBlockMergeTaskDispatcher { void initIfNecessary(MemoryManager* memoryManager, shared_ptr>> sortedKeyBlocks, vector>& factorizedTables, - vector& stringAndUnstructuredKeyColInfo, - uint64_t numBytesPerTuple); + vector& strKeyColsInfo, uint64_t numBytesPerTuple); private: mutex mtx; diff --git a/src/processor/operator/order_by/include/order_by.h b/src/processor/operator/order_by/include/order_by.h index b54886206c..2762ea3e49 100644 --- a/src/processor/operator/order_by/include/order_by.h +++ b/src/processor/operator/order_by/include/order_by.h @@ -15,7 +15,7 @@ using namespace kuzu::common; namespace kuzu { namespace processor { -// This class contains factorizedTables, nextFactorizedTableIdx, stringAndUnstructuredKeyColInfo, +// This class contains factorizedTables, nextFactorizedTableIdx, strKeyColsInfo, // sortedKeyBlocks and the size of each tuple in keyBlocks. The class is shared between the orderBy, // orderByMerge, orderByScan operators. All functions are guaranteed to be thread-safe, // so caller doesn't need to acquire a lock before calling these functions. @@ -64,10 +64,9 @@ class SharedFactorizedTablesAndSortedKeyBlocks { } } - void setStringAndUnstructuredKeyColInfo( - vector stringAndUnstructuredKeyColInfo_) { + void setStrKeyColInfo(vector strKeyColsInfo) { unique_lock lck{orderBySharedStateMutex}; - this->stringAndUnstructuredKeyColInfo = move(stringAndUnstructuredKeyColInfo_); + this->strKeyColsInfo = move(strKeyColsInfo); } private: @@ -79,7 +78,7 @@ class SharedFactorizedTablesAndSortedKeyBlocks { shared_ptr>> sortedKeyBlocks; uint32_t numBytesPerTuple; - vector stringAndUnstructuredKeyColInfo; + vector strKeyColsInfo; vector dataTypes; }; @@ -137,7 +136,7 @@ class OrderBy : public Sink { unique_ptr radixSorter; vector> keyVectors; vector> vectorsToAppend; - vector stringAndUnstructuredKeyColInfo; + vector strKeyColInfo; shared_ptr sharedState; shared_ptr localFactorizedTable; }; diff --git a/src/processor/operator/order_by/include/radix_sort.h b/src/processor/operator/order_by/include/radix_sort.h index d271c2a09c..1e53a9d489 100644 --- a/src/processor/operator/order_by/include/radix_sort.h +++ b/src/processor/operator/order_by/include/radix_sort.h @@ -24,19 +24,16 @@ struct TieRange { // RadixSort sorts a block of binary strings using the radixSort and quickSort (only for comparing // string overflow pointers). The algorithm loops through each column of the orderByVectors. If it -// sees a column with string, which is variable length, or unstructured type, which may be variable -// length, it will call radixSort to sort the columns seen so far. If there are tie tuples, it will -// compare the overflow ptr of strings or the actual values of unstructured data. For subsequent +// sees a column with string, which is variable length, it will call radixSort to sort the columns +// seen so far. If there are tie tuples, it will compare the overflow ptr of strings. For subsequent // columns, the algorithm only calls radixSort on tie tuples. class RadixSort { public: RadixSort(MemoryManager* memoryManager, FactorizedTable& factorizedTable, - OrderByKeyEncoder& orderByKeyEncoder, - vector stringAndUnstructuredKeyColInfo) + OrderByKeyEncoder& orderByKeyEncoder, vector strKeyColsInfo) : tmpSortingResultBlock{make_unique(memoryManager)}, tmpTuplePtrSortingBlock{make_unique(memoryManager)}, - factorizedTable{factorizedTable}, - stringAndUnstructuredKeyColInfo{stringAndUnstructuredKeyColInfo}, + factorizedTable{factorizedTable}, strKeyColsInfo{strKeyColsInfo}, numBytesPerTuple{orderByKeyEncoder.getNumBytesPerTuple()}, numBytesToRadixSort{ numBytesPerTuple - 8} {} @@ -55,11 +52,11 @@ class RadixSort { // Some ties can't be solved in quicksort, just add them to ties. template - void findStringAndUnstructuredTies(TieRange& keyBlockTie, uint8_t* keyBlockPtr, - queue& ties, StringAndUnstructuredKeyColInfo& keyColInfo); + void findStringTies(TieRange& keyBlockTie, uint8_t* keyBlockPtr, queue& ties, + StrKeyColInfo& keyColInfo); - void solveStringAndUnstructuredTies(TieRange& keyBlockTie, uint8_t* keyBlockPtr, - queue& ties, StringAndUnstructuredKeyColInfo& keyColInfo); + void solveStringTies(TieRange& keyBlockTie, uint8_t* keyBlockPtr, queue& ties, + StrKeyColInfo& keyColInfo); private: unique_ptr tmpSortingResultBlock; @@ -72,11 +69,11 @@ class RadixSort { // MaxNumOfTuplePointers=(LARGE_PAGE_SIZE / numBytesPerTuple) <= LARGE_PAGE_SIZE. As a result, // we only need one dataBlock to store the tuplePointers while solving the string ties. unique_ptr tmpTuplePtrSortingBlock; - // factorizedTable stores all columns in the tuples that will be sorted, including the order by - // key columns. RadixSort uses factorizedTable to access the full contents of the string and - // unstructured columns when resolving ties. + // FactorizedTable stores all columns in the tuples that will be sorted, including the order by + // key columns. RadixSort uses factorizedTable to access the full contents of the string columns + // when resolving ties. FactorizedTable& factorizedTable; - vector stringAndUnstructuredKeyColInfo; + vector strKeyColsInfo; uint32_t numBytesPerTuple; uint32_t numBytesToRadixSort; }; diff --git a/src/processor/operator/order_by/key_block_merger.cpp b/src/processor/operator/order_by/key_block_merger.cpp index c752618c6f..a2168b6a4e 100644 --- a/src/processor/operator/order_by/key_block_merger.cpp +++ b/src/processor/operator/order_by/key_block_merger.cpp @@ -163,51 +163,43 @@ void KeyBlockMerger::mergeKeyBlocks(KeyBlockMergeMorsel& keyBlockMergeMorsel) co // This function returns true if the value in the leftTuplePtr is larger than the value in the // rightTuplePtr. -bool KeyBlockMerger::compareTuplePtrWithStringAndUnstructuredCol( +bool KeyBlockMerger::compareTuplePtrWithStringCol( uint8_t* leftTuplePtr, uint8_t* rightTuplePtr) const { - // We can't simply use memcmp to compare tuples if there are string or unstructured columns. + // We can't simply use memcmp to compare tuples if there are string columns. // We should only compare the binary strings starting from the last compared string column // till the next string column. uint64_t lastComparedBytes = 0; - for (auto& stringAndUnstructuredKeyInfo : stringAndUnstructuredKeyColInfo) { + for (auto& strKeyColInfo : strKeyColsInfo) { auto result = memcmp(leftTuplePtr + lastComparedBytes, rightTuplePtr + lastComparedBytes, - stringAndUnstructuredKeyInfo.colOffsetInEncodedKeyBlock - lastComparedBytes + - stringAndUnstructuredKeyInfo.getEncodingSize()); - // If both sides are nulls, we can just continue to check the next string or - // unstructured column. - auto leftStringAndUnstructuredColPtr = - leftTuplePtr + stringAndUnstructuredKeyInfo.colOffsetInEncodedKeyBlock; - auto rightStringAndUnstructuredColPtr = - rightTuplePtr + stringAndUnstructuredKeyInfo.colOffsetInEncodedKeyBlock; - if (OrderByKeyEncoder::isNullVal( - leftStringAndUnstructuredColPtr, stringAndUnstructuredKeyInfo.isAscOrder) && - OrderByKeyEncoder::isNullVal( - rightStringAndUnstructuredColPtr, stringAndUnstructuredKeyInfo.isAscOrder)) { - lastComparedBytes = stringAndUnstructuredKeyInfo.colOffsetInEncodedKeyBlock + - stringAndUnstructuredKeyInfo.getEncodingSize(); + strKeyColInfo.colOffsetInEncodedKeyBlock - lastComparedBytes + + strKeyColInfo.getEncodingSize()); + // If both sides are nulls, we can just continue to check the next string column. + auto leftStrColPtr = leftTuplePtr + strKeyColInfo.colOffsetInEncodedKeyBlock; + auto rightStrColPtr = rightTuplePtr + strKeyColInfo.colOffsetInEncodedKeyBlock; + if (OrderByKeyEncoder::isNullVal(leftStrColPtr, strKeyColInfo.isAscOrder) && + OrderByKeyEncoder::isNullVal(rightStrColPtr, strKeyColInfo.isAscOrder)) { + lastComparedBytes = + strKeyColInfo.colOffsetInEncodedKeyBlock + strKeyColInfo.getEncodingSize(); continue; } - // If there is a tie, we need to compare the overflow ptr of strings or the actual - // unstructured values. + // If there is a tie, we need to compare the overflow ptr of strings values. if (result == 0) { - if (stringAndUnstructuredKeyInfo.isStrCol) { - // We do an optimization here to minimize the number of times that we fetch - // strings from factorizedTable. If both left and right strings are short string, - // they must equal to each other (since there are no other characters to compare for - // them). If one string is long string and the other string is short string, the - // long string must be greater than the short string. - bool isLeftStrLong = OrderByKeyEncoder::isLongStr( - leftStringAndUnstructuredColPtr, stringAndUnstructuredKeyInfo.isAscOrder); - bool isRightStrLong = OrderByKeyEncoder::isLongStr( - rightStringAndUnstructuredColPtr, stringAndUnstructuredKeyInfo.isAscOrder); - if (!isLeftStrLong && !isRightStrLong) { - continue; - } else if (isLeftStrLong && !isRightStrLong) { - return stringAndUnstructuredKeyInfo.isAscOrder; - } else if (!isLeftStrLong && isRightStrLong) { - return !stringAndUnstructuredKeyInfo.isAscOrder; - } + // We do an optimization here to minimize the number of times that we fetch + // strings from factorizedTable. If both left and right strings are short string, + // they must equal to each other (since there are no other characters to compare for + // them). If one string is long string and the other string is short string, the + // long string must be greater than the short string. + bool isLeftStrLong = + OrderByKeyEncoder::isLongStr(leftStrColPtr, strKeyColInfo.isAscOrder); + bool isRightStrLong = + OrderByKeyEncoder::isLongStr(rightStrColPtr, strKeyColInfo.isAscOrder); + if (!isLeftStrLong && !isRightStrLong) { + continue; + } else if (isLeftStrLong && !isRightStrLong) { + return strKeyColInfo.isAscOrder; + } else if (!isLeftStrLong && isRightStrLong) { + return !strKeyColInfo.isAscOrder; } auto leftTupleInfo = leftTuplePtr + numBytesToCompare; @@ -222,40 +214,23 @@ bool KeyBlockMerger::compareTuplePtrWithStringAndUnstructuredCol( auto& rightFactorizedTable = factorizedTables[OrderByKeyEncoder::getEncodedFTIdx(rightTupleInfo)]; uint8_t result; - if (stringAndUnstructuredKeyInfo.isStrCol) { - auto leftStr = leftFactorizedTable->getData( - leftBlockIdx, leftBlockOffset, stringAndUnstructuredKeyInfo.colOffsetInFT); - auto rightStr = rightFactorizedTable->getData( - rightBlockIdx, rightBlockOffset, stringAndUnstructuredKeyInfo.colOffsetInFT); - result = (leftStr == rightStr); - if (result) { - // If the tie can't be solved, we need to check the next string or unstructured - // column. - lastComparedBytes = stringAndUnstructuredKeyInfo.colOffsetInEncodedKeyBlock + - stringAndUnstructuredKeyInfo.getEncodingSize(); - continue; - } - result = leftStr > rightStr; - } else { - auto leftUnstr = leftFactorizedTable->getData( - leftBlockIdx, leftBlockOffset, stringAndUnstructuredKeyInfo.colOffsetInFT); - auto rightUnstr = rightFactorizedTable->getData( - rightBlockIdx, rightBlockOffset, stringAndUnstructuredKeyInfo.colOffsetInFT); - Equals::operation(leftUnstr, rightUnstr, result); - if (result) { - // If the tie can't be solved, we need to check the next string or unstructured - // column. - lastComparedBytes = stringAndUnstructuredKeyInfo.colOffsetInEncodedKeyBlock + - stringAndUnstructuredKeyInfo.getEncodingSize(); - continue; - } - GreaterThan::operation(leftUnstr, rightUnstr, result); + auto leftStr = leftFactorizedTable->getData( + leftBlockIdx, leftBlockOffset, strKeyColInfo.colOffsetInFT); + auto rightStr = rightFactorizedTable->getData( + rightBlockIdx, rightBlockOffset, strKeyColInfo.colOffsetInFT); + result = (leftStr == rightStr); + if (result) { + // If the tie can't be solved, we need to check the next string column. + lastComparedBytes = + strKeyColInfo.colOffsetInEncodedKeyBlock + strKeyColInfo.getEncodingSize(); + continue; } - return stringAndUnstructuredKeyInfo.isAscOrder == result; + result = leftStr > rightStr; + return strKeyColInfo.isAscOrder == result; } return result > 0; } - // The string or unstructured tie can't be solved, just add the tuple in the leftMemBlock to + // The string tie can't be solved, just add the tuple in the leftMemBlock to // resultMemBlock. return false; } @@ -320,8 +295,7 @@ void KeyBlockMergeTaskDispatcher::doneMorsel(unique_ptr mor void KeyBlockMergeTaskDispatcher::initIfNecessary(MemoryManager* memoryManager, shared_ptr>> sortedKeyBlocks, - vector>& factorizedTables, - vector& stringAndUnstructuredKeyColInfo, + vector>& factorizedTables, vector& strKeyColsInfo, uint64_t numBytesPerTuple) { lock_guard keyBlockMergeDispatcherLock{mtx}; if (isInitialized) { @@ -330,8 +304,8 @@ void KeyBlockMergeTaskDispatcher::initIfNecessary(MemoryManager* memoryManager, isInitialized = true; this->memoryManager = memoryManager; this->sortedKeyBlocks = sortedKeyBlocks; - this->keyBlockMerger = make_unique( - factorizedTables, stringAndUnstructuredKeyColInfo, numBytesPerTuple); + this->keyBlockMerger = + make_unique(factorizedTables, strKeyColsInfo, numBytesPerTuple); } } // namespace processor diff --git a/src/processor/operator/order_by/order_by.cpp b/src/processor/operator/order_by/order_by.cpp index 2e426d0f4f..bda39d8c57 100644 --- a/src/processor/operator/order_by/order_by.cpp +++ b/src/processor/operator/order_by/order_by.cpp @@ -6,7 +6,7 @@ namespace processor { shared_ptr OrderBy::init(ExecutionContext* context) { resultSet = PhysicalOperator::init(context); - // FactorizedTable, numBytesPerTuple, stringAndUnstructuredKeyColInfo are constructed + // FactorizedTable, numBytesPerTuple, strKeyColInfo are constructed // here because they need the data type information, which is contained in the value vectors. unique_ptr tableSchema = make_unique(); vector dataTypes; @@ -37,7 +37,7 @@ shared_ptr OrderBy::init(ExecutionContext* context) { factorizedTableIdx = sharedState->getNextFactorizedTableIdx(); sharedState->appendFactorizedTable(factorizedTableIdx, localFactorizedTable); sharedState->setDataTypes(dataTypes); - // Loop through all key columns and calculate the offsets for string and unstructured columns. + // Loop through all key columns and calculate the offsets for string columns. auto encodedKeyBlockColOffset = 0ul; for (auto i = 0u; i < orderByDataInfo.keyDataPoses.size(); i++) { auto keyDataPos = orderByDataInfo.keyDataPoses[i]; @@ -46,16 +46,16 @@ shared_ptr OrderBy::init(ExecutionContext* context) { auto vectorPos = keyDataPos.valueVectorPos; auto vector = dataChunk->valueVectors[vectorPos]; keyVectors.emplace_back(vector); - if (STRING == vector->dataType.typeID || UNSTRUCTURED == vector->dataType.typeID) { - // If this is a string or unstructured column, we need to find the - // factorizedTable offset for this column. + if (STRING == vector->dataType.typeID) { + // If this is a string column, we need to find the factorizedTable offset for this + // column. auto factorizedTableColIdx = 0ul; for (auto j = 0u; j < orderByDataInfo.allDataPoses.size(); j++) { if (orderByDataInfo.allDataPoses[j] == keyDataPos) { factorizedTableColIdx = j; } } - stringAndUnstructuredKeyColInfo.emplace_back(StringAndUnstructuredKeyColInfo( + strKeyColInfo.emplace_back(StrKeyColInfo( localFactorizedTable->getTableSchema()->getColOffset(factorizedTableColIdx), encodedKeyBlockColOffset, orderByDataInfo.isAscOrder[i], STRING == vector->dataType.typeID)); @@ -66,10 +66,10 @@ shared_ptr OrderBy::init(ExecutionContext* context) { // Prepare the orderByEncoder, and radix sorter orderByKeyEncoder = make_unique(keyVectors, orderByDataInfo.isAscOrder, context->memoryManager, factorizedTableIdx, localFactorizedTable->getNumTuplesPerBlock()); - radixSorter = make_unique(context->memoryManager, *localFactorizedTable, - *orderByKeyEncoder, stringAndUnstructuredKeyColInfo); + radixSorter = make_unique( + context->memoryManager, *localFactorizedTable, *orderByKeyEncoder, strKeyColInfo); - sharedState->setStringAndUnstructuredKeyColInfo(stringAndUnstructuredKeyColInfo); + sharedState->setStrKeyColInfo(strKeyColInfo); sharedState->setNumBytesPerTuple(orderByKeyEncoder->getNumBytesPerTuple()); return resultSet; } diff --git a/src/processor/operator/order_by/order_by_key_encoder.cpp b/src/processor/operator/order_by/order_by_key_encoder.cpp index a83fec183e..7bd11901bf 100644 --- a/src/processor/operator/order_by/order_by_key_encoder.cpp +++ b/src/processor/operator/order_by/order_by_key_encoder.cpp @@ -64,9 +64,6 @@ void OrderByKeyEncoder::encodeKeys() { uint32_t OrderByKeyEncoder::getEncodingSize(const DataType& dataType) { // Add one more byte for null flag. switch (dataType.typeID) { - case UNSTRUCTURED: - // 1 byte for null flag + 1 byte for unstr data - return 2; case STRING: // 1 byte for null flag + 1 byte to indicate long/short string + 12 bytes for string prefix return 2 + ku_string_t::SHORT_STR_LENGTH; @@ -223,9 +220,6 @@ encode_function_t OrderByKeyEncoder::getEncodingFunction(DataTypeID typeId) { case INTERVAL: { return encodeTemplate; } - case UNSTRUCTURED: { - return encodeTemplate; - } default: { throw RuntimeException("Cannot encode data type " + Types::dataTypeToString(typeId)); } @@ -303,12 +297,5 @@ void OrderByKeyEncoder::encodeData(ku_string_t data, uint8_t* resultPtr, bool sw } } -template<> -void OrderByKeyEncoder::encodeData(Value data, uint8_t* resultPtr, bool swapBytes) { - // Encode all unstr data as 0, meaning that there is a tie for the entire column - uint8_t encodeVal = 0; - memcpy(resultPtr, &encodeVal, sizeof(encodeVal)); -} - } // namespace processor } // namespace kuzu diff --git a/src/processor/operator/order_by/order_by_merge.cpp b/src/processor/operator/order_by/order_by_merge.cpp index 948a7bae0d..e217f3fd5a 100644 --- a/src/processor/operator/order_by/order_by_merge.cpp +++ b/src/processor/operator/order_by/order_by_merge.cpp @@ -11,12 +11,12 @@ shared_ptr OrderByMerge::init(ExecutionContext* context) { // sharedState by merging sortedKeyBlocks, So we don't need to initialize the resultSet. keyBlockMerger = make_unique(sharedFactorizedTablesAndSortedKeyBlocks->factorizedTables, - sharedFactorizedTablesAndSortedKeyBlocks->stringAndUnstructuredKeyColInfo, + sharedFactorizedTablesAndSortedKeyBlocks->strKeyColsInfo, sharedFactorizedTablesAndSortedKeyBlocks->numBytesPerTuple); keyBlockMergeTaskDispatcher->initIfNecessary(context->memoryManager, sharedFactorizedTablesAndSortedKeyBlocks->sortedKeyBlocks, sharedFactorizedTablesAndSortedKeyBlocks->factorizedTables, - sharedFactorizedTablesAndSortedKeyBlocks->stringAndUnstructuredKeyColInfo, + sharedFactorizedTablesAndSortedKeyBlocks->strKeyColsInfo, sharedFactorizedTablesAndSortedKeyBlocks->numBytesPerTuple); return resultSet; } diff --git a/src/processor/operator/order_by/radix_sort.cpp b/src/processor/operator/order_by/radix_sort.cpp index c2ab589076..75d2c1f822 100644 --- a/src/processor/operator/order_by/radix_sort.cpp +++ b/src/processor/operator/order_by/radix_sort.cpp @@ -16,10 +16,9 @@ void RadixSort::sortSingleKeyBlock(const DataBlock& keyBlock) { // We need to sort the whole keyBlock for the first radix sort, so just mark all tuples as a // tie. ties.push(TieRange{0, numTuplesInKeyBlock - 1}); - for (auto i = 0u; i < stringAndUnstructuredKeyColInfo.size(); i++) { - const auto numBytesToSort = stringAndUnstructuredKeyColInfo[i].colOffsetInEncodedKeyBlock - - numBytesSorted + - stringAndUnstructuredKeyColInfo[i].getEncodingSize(); + for (auto i = 0u; i < strKeyColsInfo.size(); i++) { + const auto numBytesToSort = strKeyColsInfo[i].colOffsetInEncodedKeyBlock - numBytesSorted + + strKeyColsInfo[i].getEncodingSize(); const auto numOfTies = ties.size(); for (auto j = 0u; j < numOfTies; j++) { auto keyBlockTie = ties.front(); @@ -32,9 +31,9 @@ void RadixSort::sortSingleKeyBlock(const DataBlock& keyBlock) { numBytesSorted, keyBlockTie.getNumTuples(), numBytesToSort, keyBlockTie.startingTupleIdx); for (auto& newTieInKeyBlock : newTiesInKeyBlock) { - solveStringAndUnstructuredTies(newTieInKeyBlock, + solveStringTies(newTieInKeyBlock, keyBlock.getData() + newTieInKeyBlock.startingTupleIdx * numBytesPerTuple, ties, - stringAndUnstructuredKeyColInfo[i]); + strKeyColsInfo[i]); } } if (ties.empty()) { @@ -140,18 +139,16 @@ void RadixSort::reOrderKeyBlock(TieRange& keyBlockTie, uint8_t* keyBlockPtr) { } template -void RadixSort::findStringAndUnstructuredTies(TieRange& keyBlockTie, uint8_t* keyBlockPtr, - queue& ties, StringAndUnstructuredKeyColInfo& keyColInfo) { +void RadixSort::findStringTies( + TieRange& keyBlockTie, uint8_t* keyBlockPtr, queue& ties, StrKeyColInfo& keyColInfo) { auto iTuplePtr = keyBlockPtr; for (auto i = keyBlockTie.startingTupleIdx; i < keyBlockTie.endingTupleIdx; i++) { bool isIValNull = OrderByKeyEncoder::isNullVal( iTuplePtr + keyColInfo.colOffsetInEncodedKeyBlock, keyColInfo.isAscOrder); // This variable will only be used when the current column is a string column. Otherwise, // we just set this variable to false. - bool isIStringLong = - keyColInfo.isStrCol && - OrderByKeyEncoder::isLongStr( - iTuplePtr + keyColInfo.colOffsetInEncodedKeyBlock, keyColInfo.isAscOrder); + bool isIStringLong = OrderByKeyEncoder::isLongStr( + iTuplePtr + keyColInfo.colOffsetInEncodedKeyBlock, keyColInfo.isAscOrder); TYPE iValue = isIValNull ? TYPE() : @@ -211,8 +208,8 @@ void RadixSort::findStringAndUnstructuredTies(TieRange& keyBlockTie, uint8_t* ke } } -void RadixSort::solveStringAndUnstructuredTies(TieRange& keyBlockTie, uint8_t* keyBlockPtr, - queue& ties, StringAndUnstructuredKeyColInfo& keyColInfo) { +void RadixSort::solveStringTies( + TieRange& keyBlockTie, uint8_t* keyBlockPtr, queue& ties, StrKeyColInfo& keyColInfo) { fillTmpTuplePtrSortingBlock(keyBlockTie, keyBlockPtr); auto tmpTuplePtrSortingBlockPtr = (uint8_t**)tmpTuplePtrSortingBlock->getData(); sort(tmpTuplePtrSortingBlockPtr, tmpTuplePtrSortingBlockPtr + keyBlockTie.getNumTuples(), @@ -226,28 +223,25 @@ void RadixSort::solveStringAndUnstructuredTies(TieRange& keyBlockTie, uint8_t* k return !keyColInfo.isAscOrder; } - if (keyColInfo.isStrCol) { - // We only need to fetch the actual strings from the - // factorizedTable when both left and right strings are long string. - auto isLeftLongStr = OrderByKeyEncoder::isLongStr( - leftPtr + keyColInfo.colOffsetInEncodedKeyBlock, keyColInfo.isAscOrder); - auto isRightLongStr = OrderByKeyEncoder::isLongStr( - rightPtr + keyColInfo.colOffsetInEncodedKeyBlock, keyColInfo.isAscOrder); - if (!isLeftLongStr && !isRightLongStr) { - // If left and right are both short string and have the same prefix, we can't - // conclude that the left string is smaller than the right string. - return false; - } else if (isLeftLongStr && !isRightLongStr) { - // If left string is a long string and right string is a short string, we can - // conclude that the left string must be greater than the right string. - return !keyColInfo.isAscOrder; - } else if (isRightLongStr && !isLeftLongStr) { - // If right string is a long string and left string is a short string, we can - // conclude that the right string must be greater than the left string. - return keyColInfo.isAscOrder; - } + // We only need to fetch the actual strings from the + // factorizedTable when both left and right strings are long string. + auto isLeftLongStr = OrderByKeyEncoder::isLongStr( + leftPtr + keyColInfo.colOffsetInEncodedKeyBlock, keyColInfo.isAscOrder); + auto isRightLongStr = OrderByKeyEncoder::isLongStr( + rightPtr + keyColInfo.colOffsetInEncodedKeyBlock, keyColInfo.isAscOrder); + if (!isLeftLongStr && !isRightLongStr) { + // If left and right are both short string and have the same prefix, we can't + // conclude that the left string is smaller than the right string. + return false; + } else if (isLeftLongStr && !isRightLongStr) { + // If left string is a long string and right string is a short string, we can + // conclude that the left string must be greater than the right string. + return !keyColInfo.isAscOrder; + } else if (isRightLongStr && !isLeftLongStr) { + // If right string is a long string and left string is a short string, we can + // conclude that the right string must be greater than the left string. + return keyColInfo.isAscOrder; } - auto leftTupleInfoPtr = leftPtr + numBytesToRadixSort; auto rightTupleInfoPtr = rightPtr + numBytesToRadixSort; const auto leftBlockIdx = OrderByKeyEncoder::getEncodedFTBlockIdx(leftTupleInfoPtr); @@ -256,35 +250,13 @@ void RadixSort::solveStringAndUnstructuredTies(TieRange& keyBlockTie, uint8_t* k const auto rightBlockIdx = OrderByKeyEncoder::getEncodedFTBlockIdx(rightTupleInfoPtr); const auto rightBlockOffset = OrderByKeyEncoder::getEncodedFTBlockOffset(rightTupleInfoPtr); - - if (keyColInfo.isStrCol) { - auto result = (keyColInfo.isAscOrder == - (factorizedTable.getData( - leftBlockIdx, leftBlockOffset, keyColInfo.colOffsetInFT) < - factorizedTable.getData( - rightBlockIdx, rightBlockOffset, keyColInfo.colOffsetInFT))); - return result; - } else { - // The comparison function does the type checking for the unstructured values. If - // there is a type mismatch, the comparison function will throw an exception. Note: - // we may loose precision if we compare DOUBLE and INT64 For example: DOUBLE: a = - // 2^57, INT64: b = 2^57 + 3. Although a < b, the LessThan function may still output - // false. - uint8_t result; - LessThan::operation(factorizedTable.getData(leftBlockIdx, - leftBlockOffset, keyColInfo.colOffsetInFT), - factorizedTable.getData( - rightBlockIdx, rightBlockOffset, keyColInfo.colOffsetInFT), - result); - return keyColInfo.isAscOrder == result; - } + return keyColInfo.isAscOrder == (factorizedTable.getData(leftBlockIdx, + leftBlockOffset, keyColInfo.colOffsetInFT) < + factorizedTable.getData(rightBlockIdx, + rightBlockOffset, keyColInfo.colOffsetInFT)); }); reOrderKeyBlock(keyBlockTie, keyBlockPtr); - if (keyColInfo.isStrCol) { - findStringAndUnstructuredTies(keyBlockTie, keyBlockPtr, ties, keyColInfo); - } else { - findStringAndUnstructuredTies(keyBlockTie, keyBlockPtr, ties, keyColInfo); - } + findStringTies(keyBlockTie, keyBlockPtr, ties, keyColInfo); } } // namespace processor diff --git a/src/processor/operator/scan_list/adj_list_extend.cpp b/src/processor/operator/scan_list/adj_list_extend.cpp index c6a91ab14e..3b7c140910 100644 --- a/src/processor/operator/scan_list/adj_list_extend.cpp +++ b/src/processor/operator/scan_list/adj_list_extend.cpp @@ -15,7 +15,7 @@ shared_ptr AdjListExtend::init(ExecutionContext* context) { bool AdjListExtend::getNextTuples() { metrics->executionTime.start(); if (listHandle->listSyncState.hasMoreToRead()) { - listsWithAdjAndPropertyListsUpdateStore->readValues(outValueVector, *listHandle); + lists->readValues(outValueVector, *listHandle); metrics->executionTime.stop(); metrics->numOutputTuple.increase(outDataChunk->state->selVector->selectedSize); return true; @@ -30,11 +30,11 @@ bool AdjListExtend::getNextTuples() { outValueVector->state->selVector->selectedSize = 0; continue; } - ((AdjLists*)listsWithAdjAndPropertyListsUpdateStore) + ((AdjLists*)lists) ->initListReadingState( inValueVector->readNodeOffset(inDataChunk->state->getPositionOfCurrIdx()), *listHandle, transaction->getType()); - listsWithAdjAndPropertyListsUpdateStore->readValues(outValueVector, *listHandle); + lists->readValues(outValueVector, *listHandle); } while (outDataChunk->state->selVector->selectedSize == 0); metrics->executionTime.stop(); metrics->numOutputTuple.increase(outDataChunk->state->selVector->selectedSize); diff --git a/src/processor/operator/scan_list/include/adj_list_extend.h b/src/processor/operator/scan_list/include/adj_list_extend.h index ad3403138e..ce53313588 100644 --- a/src/processor/operator/scan_list/include/adj_list_extend.h +++ b/src/processor/operator/scan_list/include/adj_list_extend.h @@ -19,9 +19,8 @@ class AdjListExtend : public ScanList { bool getNextTuples() override; inline unique_ptr clone() override { - return make_unique(inDataPos, outDataPos, - (AdjLists*)listsWithAdjAndPropertyListsUpdateStore, children[0]->clone(), id, - paramsString); + return make_unique( + inDataPos, outDataPos, (AdjLists*)lists, children[0]->clone(), id, paramsString); } }; diff --git a/src/processor/operator/scan_list/include/scan_list.h b/src/processor/operator/scan_list/include/scan_list.h index 5ab9f8493d..1eb2aca441 100644 --- a/src/processor/operator/scan_list/include/scan_list.h +++ b/src/processor/operator/scan_list/include/scan_list.h @@ -9,12 +9,10 @@ namespace processor { class ScanList : public PhysicalOperator { public: - ScanList(const DataPos& inDataPos, const DataPos& outDataPos, - ListsWithAdjAndPropertyListsUpdateStore* listsWithAdjAndPropertyListsUpdateStore, + ScanList(const DataPos& inDataPos, const DataPos& outDataPos, Lists* lists, unique_ptr child, uint32_t id, const string& paramsString) : PhysicalOperator{move(child), id, paramsString}, inDataPos{inDataPos}, - outDataPos{outDataPos}, listsWithAdjAndPropertyListsUpdateStore{ - listsWithAdjAndPropertyListsUpdateStore} {} + outDataPos{outDataPos}, lists{lists} {} ~ScanList() override{}; @@ -37,7 +35,7 @@ class ScanList : public PhysicalOperator { shared_ptr outDataChunk; shared_ptr outValueVector; - ListsWithAdjAndPropertyListsUpdateStore* listsWithAdjAndPropertyListsUpdateStore; + Lists* lists; shared_ptr listHandle; }; diff --git a/src/processor/operator/scan_list/include/scan_rel_property_list.h b/src/processor/operator/scan_list/include/scan_rel_property_list.h index 11a60e5c38..399317005b 100644 --- a/src/processor/operator/scan_list/include/scan_rel_property_list.h +++ b/src/processor/operator/scan_list/include/scan_rel_property_list.h @@ -8,11 +8,9 @@ namespace processor { class ScanRelPropertyList : public ScanList { public: - ScanRelPropertyList(const DataPos& inDataPos, const DataPos& outDataPos, - ListsWithAdjAndPropertyListsUpdateStore* listsWithAdjAndPropertyListsUpdateStore, + ScanRelPropertyList(const DataPos& inDataPos, const DataPos& outDataPos, Lists* lists, unique_ptr child, uint32_t id, const string& paramsString) - : ScanList{inDataPos, outDataPos, listsWithAdjAndPropertyListsUpdateStore, move(child), id, - paramsString} {} + : ScanList{inDataPos, outDataPos, lists, move(child), id, paramsString} {} inline PhysicalOperatorType getOperatorType() override { return SCAN_REL_PROPERTY; } @@ -21,8 +19,8 @@ class ScanRelPropertyList : public ScanList { bool getNextTuples() override; inline unique_ptr clone() override { - return make_unique(inDataPos, outDataPos, - listsWithAdjAndPropertyListsUpdateStore, children[0]->clone(), id, paramsString); + return make_unique( + inDataPos, outDataPos, lists, children[0]->clone(), id, paramsString); } }; diff --git a/src/processor/operator/scan_list/scan_rel_property_list.cpp b/src/processor/operator/scan_list/scan_rel_property_list.cpp index caf8b929df..6b740e5bd3 100644 --- a/src/processor/operator/scan_list/scan_rel_property_list.cpp +++ b/src/processor/operator/scan_list/scan_rel_property_list.cpp @@ -5,8 +5,7 @@ namespace processor { shared_ptr ScanRelPropertyList::init(ExecutionContext* context) { resultSet = ScanList::init(context); - outValueVector = make_shared( - listsWithAdjAndPropertyListsUpdateStore->dataType, context->memoryManager); + outValueVector = make_shared(lists->dataType, context->memoryManager); outDataChunk->insert(outDataPos.valueVectorPos, outValueVector); listHandle = make_shared(*resultSet->getListSyncState(outDataPos.dataChunkPos)); return resultSet; @@ -19,7 +18,7 @@ bool ScanRelPropertyList::getNextTuples() { return false; } outValueVector->resetOverflowBuffer(); - listsWithAdjAndPropertyListsUpdateStore->readValues(outValueVector, *listHandle); + lists->readValues(outValueVector, *listHandle); metrics->executionTime.stop(); return true; } diff --git a/src/processor/operator/update/include/set.h b/src/processor/operator/update/include/set.h index 59f3004539..133f4dbc41 100644 --- a/src/processor/operator/update/include/set.h +++ b/src/processor/operator/update/include/set.h @@ -3,7 +3,6 @@ #include "src/expression_evaluator/include/base_evaluator.h" #include "src/processor/operator/include/physical_operator.h" #include "src/storage/storage_structure/include/column.h" -#include "src/storage/storage_structure/include/lists/unstructured_property_lists.h" using namespace kuzu::evaluator; diff --git a/src/processor/result/factorized_table.cpp b/src/processor/result/factorized_table.cpp index f9bbf6d240..5c2575bc16 100644 --- a/src/processor/result/factorized_table.cpp +++ b/src/processor/result/factorized_table.cpp @@ -643,7 +643,6 @@ FlatTupleIterator::FlatTupleIterator( updateInvalidEntriesInFlatTuplePositionsInDataChunk(); } // Note: there is difference between column data types and value types in iteratorFlatTuple. - // Column data type could be UNSTRUCTURED but value type must be a structured type. iteratorFlatTuple = make_shared(columnDataTypes); assert(columnDataTypes.size() == factorizedTable.tableSchema->getNumColumns()); } diff --git a/src/processor/result/flat_tuple.cpp b/src/processor/result/flat_tuple.cpp index bb5ff42778..ef6c9a2893 100644 --- a/src/processor/result/flat_tuple.cpp +++ b/src/processor/result/flat_tuple.cpp @@ -24,9 +24,6 @@ void ResultValue::set(const uint8_t* value, DataType& valueType) { case STRING: { stringVal = ((ku_string_t*)value)->getAsString(); } break; - case UNSTRUCTURED: { - setFromUnstructuredValue(*(Value*)value); - } break; case DATE: { val.dateVal = *((date_t*)value); } break; @@ -88,41 +85,6 @@ vector ResultValue::convertKUListToVector(ku_list_t& list) const { return listResultValue; } -void ResultValue::setFromUnstructuredValue(Value& value) { - dataType = value.dataType; - switch (value.dataType.typeID) { - case INT64: { - set((uint8_t*)&value.val.int64Val, value.dataType); - } break; - case BOOL: { - set((uint8_t*)&value.val.booleanVal, value.dataType); - } break; - case DOUBLE: { - set((uint8_t*)&value.val.doubleVal, value.dataType); - } break; - case STRING: { - set((uint8_t*)&value.val.strVal, value.dataType); - } break; - case NODE_ID: { - set((uint8_t*)&value.val.nodeID, value.dataType); - } break; - case DATE: { - set((uint8_t*)&value.val.dateVal, value.dataType); - } break; - case TIMESTAMP: { - set((uint8_t*)&value.val.timestampVal, value.dataType); - } break; - case INTERVAL: { - set((uint8_t*)&value.val.intervalVal, value.dataType); - } break; - case LIST: { - set((uint8_t*)&value.val.listVal, value.dataType); - } break; - default: - assert(false); - } -} - ResultValue* FlatTuple::getResultValue(uint32_t valIdx) { if (valIdx >= len()) { throw RuntimeException(StringUtils::string_format( diff --git a/src/processor/result/include/flat_tuple.h b/src/processor/result/include/flat_tuple.h index 323530c24d..cae0194f7c 100644 --- a/src/processor/result/include/flat_tuple.h +++ b/src/processor/result/include/flat_tuple.h @@ -5,7 +5,6 @@ #include "src/common/include/exception.h" #include "src/common/include/type_utils.h" #include "src/common/include/utils.h" -#include "src/common/types/include/value.h" using namespace kuzu::common; @@ -79,8 +78,6 @@ class ResultValue { vector convertKUListToVector(ku_list_t& list) const; - void setFromUnstructuredValue(Value& value); - private: union Val { constexpr Val() : booleanVal{false} {} @@ -93,7 +90,6 @@ class ResultValue { } val; string stringVal; vector listVal; - // Note: dataType cannot be UNSTRUCTURED. Any Value has a fixed known data type. DataType dataType; bool isNull; }; diff --git a/src/storage/in_mem_csv_copier/in_mem_node_csv_copier.cpp b/src/storage/in_mem_csv_copier/in_mem_node_csv_copier.cpp index bfc2f8a449..475f7c0276 100644 --- a/src/storage/in_mem_csv_copier/in_mem_node_csv_copier.cpp +++ b/src/storage/in_mem_csv_copier/in_mem_node_csv_copier.cpp @@ -19,20 +19,16 @@ uint64_t InMemNodeCSVCopier::copy() { logger->info( "Copying node {} with table {}.", nodeTableSchema->tableName, nodeTableSchema->tableID); calculateNumBlocks(csvDescription.filePath, nodeTableSchema->tableName); - auto unstructuredPropertyNames = - countLinesPerBlockAndParseUnstrPropertyNames(nodeTableSchema->getNumStructuredProperties()); - catalog.setUnstructuredPropertiesOfNodeTableSchema( - unstructuredPropertyNames, nodeTableSchema->tableID); + countLinesPerBlock(nodeTableSchema->getNumStructuredProperties()); numNodes = calculateNumRows(csvDescription.csvReaderConfig.hasHeader); initializeColumnsAndList(); - // Populate structured columns with the ID hash index and count the size of unstructured - // lists. + // Populate structured columns with the ID hash index. switch (nodeTableSchema->getPrimaryKey().dataType.typeID) { case INT64: { - populateColumnsAndCountUnstrPropertyListSizes(); + populateColumns(); } break; case STRING: { - populateColumnsAndCountUnstrPropertyListSizes(); + populateColumns(); } break; default: { throw CopyCSVException("Unsupported data type " + @@ -40,8 +36,6 @@ uint64_t InMemNodeCSVCopier::copy() { " for the ID index."); } } - calcUnstrListsHeadersAndMetadata(); - populateUnstrPropertyLists(); saveToFile(); nodesStatisticsAndDeletedIDs->setNumTuplesForTable(nodeTableSchema->tableID, numNodes); logger->info("Done copying node {} with table {}.", nodeTableSchema->tableName, @@ -50,7 +44,7 @@ uint64_t InMemNodeCSVCopier::copy() { } void InMemNodeCSVCopier::initializeColumnsAndList() { - logger->info("Initializing in memory structured columns and unstructured list."); + logger->info("Initializing in memory structured columns."); structuredColumns.resize(nodeTableSchema->getNumStructuredProperties()); for (auto& property : nodeTableSchema->structuredProperties) { auto fName = StorageUtils::getNodePropertyColumnFName(outputDirectory, @@ -58,46 +52,23 @@ void InMemNodeCSVCopier::initializeColumnsAndList() { structuredColumns[property.propertyID] = InMemColumnFactory::getInMemPropertyColumn(fName, property.dataType, numNodes); } - unstrPropertyLists = make_unique( - StorageUtils::getNodeUnstrPropertyListsFName( - outputDirectory, nodeTableSchema->tableID, DBFileType::WAL_VERSION), - numNodes); - logger->info("Done initializing in memory structured columns and unstructured list."); + logger->info("Done initializing in memory structured columns."); } -static vector mergeUnstrPropertyNamesFromBlocks( - vector>& unstructuredPropertyNamesPerBlock) { - unordered_set unstructuredPropertyNames; - for (auto& unstructuredPropertiesInBlock : unstructuredPropertyNamesPerBlock) { - for (auto& propertyName : unstructuredPropertiesInBlock) { - unstructuredPropertyNames.insert(propertyName); - } - } - // Ensure the same order in different platforms. - vector result{unstructuredPropertyNames.begin(), unstructuredPropertyNames.end()}; - sort(result.begin(), result.end()); - return result; -} - -vector InMemNodeCSVCopier::countLinesPerBlockAndParseUnstrPropertyNames( - uint64_t numStructuredProperties) { - logger->info("Counting number of lines and read unstructured property names in each block."); - vector> unstructuredPropertyNamesPerBlock{numBlocks}; +void InMemNodeCSVCopier::countLinesPerBlock(uint64_t numStructuredProperties) { + logger->info("Counting number of lines in each block."); numLinesPerBlock.resize(numBlocks); for (uint64_t blockId = 0; blockId < numBlocks; blockId++) { taskScheduler.scheduleTask(CopyCSVTaskFactory::createCopyCSVTask( - countNumLinesAndUnstrPropertiesPerBlockTask, csvDescription.filePath, blockId, this, - numStructuredProperties, &unstructuredPropertyNamesPerBlock[blockId])); + countNumLinesPerBlockTask, csvDescription.filePath, blockId, this)); } taskScheduler.waitAllTasksToCompleteOrError(); - logger->info( - "Done counting number of lines and read unstructured property names in each block."); - return mergeUnstrPropertyNamesFromBlocks(unstructuredPropertyNamesPerBlock); + logger->info("Done counting number of lines in each block."); } template -void InMemNodeCSVCopier::populateColumnsAndCountUnstrPropertyListSizes() { - logger->info("Populating structured properties and Counting unstructured properties."); +void InMemNodeCSVCopier::populateColumns() { + logger->info("Populating structured properties."); auto pkIndex = make_unique>(StorageUtils::getNodeIndexFName(this->outputDirectory, nodeTableSchema->tableID, DBFileType::WAL_VERSION), @@ -105,16 +76,14 @@ void InMemNodeCSVCopier::populateColumnsAndCountUnstrPropertyListSizes() { pkIndex->bulkReserve(numNodes); node_offset_t offsetStart = 0; for (auto blockIdx = 0u; blockIdx < numBlocks; blockIdx++) { - taskScheduler.scheduleTask(CopyCSVTaskFactory::createCopyCSVTask( - populateColumnsAndCountUnstrPropertyListSizesTask, + taskScheduler.scheduleTask(CopyCSVTaskFactory::createCopyCSVTask(populateColumnsTask, nodeTableSchema->primaryKeyPropertyIdx, blockIdx, offsetStart, pkIndex.get(), this)); offsetStart += numLinesPerBlock[blockIdx]; } taskScheduler.waitAllTasksToCompleteOrError(); logger->info("Flush the pk index to disk."); pkIndex->flush(); - logger->info("Done populating structured properties, constructing the pk index and counting " - "unstructured properties."); + logger->info("Done populating structured properties, constructing the pk index."); } template @@ -151,9 +120,8 @@ void InMemNodeCSVCopier::skipFirstRowIfNecessary( } template -void InMemNodeCSVCopier::populateColumnsAndCountUnstrPropertyListSizesTask(uint64_t IDColumnIdx, - uint64_t blockId, uint64_t startOffset, HashIndexBuilder* pkIndex, - InMemNodeCSVCopier* copier) { +void InMemNodeCSVCopier::populateColumnsTask(uint64_t primaryKeyPropertyIdx, uint64_t blockId, + uint64_t offsetStart, HashIndexBuilder* pkIndex, InMemNodeCSVCopier* copier) { copier->logger->trace("Start: path={0} blkIdx={1}", copier->csvDescription.filePath, blockId); vector overflowCursors(copier->nodeTableSchema->getNumStructuredProperties()); CSVReader reader( @@ -163,100 +131,14 @@ void InMemNodeCSVCopier::populateColumnsAndCountUnstrPropertyListSizesTask(uint6 while (reader.hasNextLine()) { putPropsOfLineIntoColumns(copier->structuredColumns, copier->nodeTableSchema->structuredProperties, overflowCursors, reader, - startOffset + bufferOffset); - // TODO(Semih): Uncomment when enabling ad-hoc properties. - // calcLengthOfUnstrPropertyLists( - // reader, startOffset + bufferOffset, copier->unstrPropertyLists.get()); + offsetStart + bufferOffset); bufferOffset++; } - populatePKIndex(copier->structuredColumns[IDColumnIdx].get(), pkIndex, startOffset, + populatePKIndex(copier->structuredColumns[primaryKeyPropertyIdx].get(), pkIndex, offsetStart, copier->numLinesPerBlock[blockId]); copier->logger->trace("End: path={0} blkIdx={1}", copier->csvDescription.filePath, blockId); } -void InMemNodeCSVCopier::calcLengthOfUnstrPropertyLists( - CSVReader& reader, node_offset_t nodeOffset, InMemUnstructuredLists* unstrPropertyLists) { - while (reader.hasNextToken()) { - auto unstrPropertyString = reader.getString(); - auto unstrPropertyStringBreaker1 = strchr(unstrPropertyString, ':'); - if (!unstrPropertyStringBreaker1) { - throw CopyCSVException("Unstructured property token in CSV is not in correct " - "structure. It does not have ':' to separate" - " the property key. token: " + - string(unstrPropertyString)); - } - *unstrPropertyStringBreaker1 = 0; - auto unstrPropertyStringBreaker2 = strchr(unstrPropertyStringBreaker1 + 1, ':'); - if (!unstrPropertyStringBreaker2) { - throw CopyCSVException("Unstructured property token in CSV is not in correct " - "structure. It does not have ':' to separate" - " the data type."); - } - *unstrPropertyStringBreaker2 = 0; - auto dataType = Types::dataTypeFromString(string(unstrPropertyStringBreaker1 + 1)); - auto dataTypeSize = Types::getDataTypeSize(dataType); - InMemListsUtils::incrementListSize(*unstrPropertyLists->getListSizes(), nodeOffset, - StorageConfig::UNSTR_PROP_HEADER_LEN + dataTypeSize); - } -} - -void InMemNodeCSVCopier::calcUnstrListsHeadersAndMetadata() { - // TODO(Semih): This can never be nullptr so we can remove this check. - if (unstrPropertyLists == nullptr) { - return; - } - logger->debug("Initializing UnstructuredPropertyListHeaderBuilders."); - taskScheduler.scheduleTask(CopyCSVTaskFactory::createCopyCSVTask(calculateListHeadersTask, - numNodes, 1, unstrPropertyLists->getListSizes(), - unstrPropertyLists->getListHeadersBuilder(), logger)); - logger->debug("Done initializing UnstructuredPropertyListHeaders."); - taskScheduler.waitAllTasksToCompleteOrError(); - logger->debug("Initializing UnstructuredPropertyListsMetadata."); - taskScheduler.scheduleTask(CopyCSVTaskFactory::createCopyCSVTask( - calculateListsMetadataAndAllocateInMemListPagesTask, numNodes, 1, - unstrPropertyLists->getListSizes(), unstrPropertyLists->getListHeadersBuilder(), - unstrPropertyLists.get(), false /*hasNULLBytes*/, logger)); - logger->debug("Done initializing UnstructuredPropertyListsMetadata."); - taskScheduler.waitAllTasksToCompleteOrError(); -} - -void InMemNodeCSVCopier::populateUnstrPropertyLists() { - logger->debug("Populating Unstructured Property Lists."); - node_offset_t nodeOffsetStart = 0; - for (auto blockIdx = 0u; blockIdx < numBlocks; blockIdx++) { - taskScheduler.scheduleTask(CopyCSVTaskFactory::createCopyCSVTask( - populateUnstrPropertyListsTask, blockIdx, nodeOffsetStart, this)); - nodeOffsetStart += numLinesPerBlock[blockIdx]; - } - taskScheduler.waitAllTasksToCompleteOrError(); - logger->debug("Done populating Unstructured Property Lists."); -} - -void InMemNodeCSVCopier::populateUnstrPropertyListsTask( - uint64_t blockId, node_offset_t nodeOffsetStart, InMemNodeCSVCopier* copier) { - copier->logger->trace("Start: path={0} blkIdx={1}", copier->csvDescription.filePath, blockId); - CSVReader reader( - copier->csvDescription.filePath, copier->csvDescription.csvReaderConfig, blockId); - skipFirstRowIfNecessary(blockId, copier->csvDescription, reader); - auto bufferOffset = 0u; - PageByteCursor inMemOverflowFileCursor; - auto unstrPropertiesNameToIdMap = copier->catalog.getWriteVersion() - ->getNodeTableSchema(copier->nodeTableSchema->tableID) - ->unstrPropertiesNameToIdMap; - while (reader.hasNextLine()) { - for (auto i = 0u; i < copier->nodeTableSchema->getNumStructuredProperties(); ++i) { - reader.hasNextTokenOrError(); - } - // TODO(Semih): Uncomment when enabling ad-hoc properties - // putUnstrPropsOfALineToLists(reader, nodeOffsetStart + bufferOffset, - // inMemOverflowFileCursor, - // unstrPropertiesNameToIdMap, - // reinterpret_cast(copier->unstrPropertyLists.get())); - bufferOffset++; - } - copier->logger->trace("End: path={0} blkIdx={1}", copier->csvDescription.filePath, blockId); -} - void InMemNodeCSVCopier::putPropsOfLineIntoColumns( vector>& structuredColumns, const vector& structuredProperties, vector& overflowCursors, @@ -325,76 +207,6 @@ void InMemNodeCSVCopier::putPropsOfLineIntoColumns( } } -void InMemNodeCSVCopier::putUnstrPropsOfALineToLists(CSVReader& reader, node_offset_t nodeOffset, - PageByteCursor& inMemOverflowFileCursor, - unordered_map& unstrPropertiesNameToIdMap, - InMemUnstructuredLists* unstrPropertyLists) { - while (reader.hasNextToken()) { - auto unstrPropertyString = reader.getString(); - // Note: We do not check if the unstrPropertyString is in correct format below because - // this was already done when inside populateColumnsAndCountUnstrPropertyListSizesTask, - // when calling calcLengthOfUnstrPropertyLists. E.g., below we don't check if - // unstrPropertyStringBreaker1 is null or not as we do in calcLengthOfUnstrPropertyLists. - auto unstrPropertyStringBreaker1 = strchr(unstrPropertyString, ':'); - *unstrPropertyStringBreaker1 = 0; - auto propertyKeyId = (uint32_t)unstrPropertiesNameToIdMap.at(string(unstrPropertyString)); - auto unstrPropertyStringBreaker2 = strchr(unstrPropertyStringBreaker1 + 1, ':'); - *unstrPropertyStringBreaker2 = 0; - auto dataType = Types::dataTypeFromString(string(unstrPropertyStringBreaker1 + 1)); - auto dataTypeSize = Types::getDataTypeSize(dataType); - auto reversePos = InMemListsUtils::decrementListSize(*unstrPropertyLists->getListSizes(), - nodeOffset, StorageConfig::UNSTR_PROP_HEADER_LEN + dataTypeSize); - PageElementCursor pageElementCursor = InMemListsUtils::calcPageElementCursor( - unstrPropertyLists->getListHeadersBuilder()->getHeader(nodeOffset), reversePos, 1, - nodeOffset, *unstrPropertyLists->getListsMetadataBuilder(), false /*hasNULLBytes*/); - PageByteCursor pageCursor{pageElementCursor.pageIdx, pageElementCursor.elemPosInPage}; - char* valuePtr = unstrPropertyStringBreaker2 + 1; - switch (dataType.typeID) { - case INT64: { - auto intVal = TypeUtils::convertToInt64(valuePtr); - unstrPropertyLists->setUnstructuredElement(pageCursor, propertyKeyId, dataType.typeID, - (uint8_t*)(&intVal), &inMemOverflowFileCursor); - } break; - case DOUBLE: { - auto doubleVal = TypeUtils::convertToDouble(valuePtr); - unstrPropertyLists->setUnstructuredElement(pageCursor, propertyKeyId, dataType.typeID, - reinterpret_cast(&doubleVal), &inMemOverflowFileCursor); - } break; - case BOOL: { - auto boolVal = TypeUtils::convertToBoolean(valuePtr); - unstrPropertyLists->setUnstructuredElement(pageCursor, propertyKeyId, dataType.typeID, - reinterpret_cast(&boolVal), &inMemOverflowFileCursor); - } break; - case DATE: { - char* beginningOfDateStr = valuePtr; - date_t dateVal = Date::FromCString(beginningOfDateStr, strlen(beginningOfDateStr)); - unstrPropertyLists->setUnstructuredElement(pageCursor, propertyKeyId, dataType.typeID, - reinterpret_cast(&dateVal), &inMemOverflowFileCursor); - } break; - case TIMESTAMP: { - char* beginningOfTimestampStr = valuePtr; - timestamp_t timestampVal = - Timestamp::FromCString(beginningOfTimestampStr, strlen(beginningOfTimestampStr)); - unstrPropertyLists->setUnstructuredElement(pageCursor, propertyKeyId, dataType.typeID, - reinterpret_cast(×tampVal), &inMemOverflowFileCursor); - } break; - case INTERVAL: { - char* beginningOfIntervalStr = valuePtr; - interval_t intervalVal = - Interval::FromCString(beginningOfIntervalStr, strlen(beginningOfIntervalStr)); - unstrPropertyLists->setUnstructuredElement(pageCursor, propertyKeyId, dataType.typeID, - reinterpret_cast(&intervalVal), &inMemOverflowFileCursor); - } break; - case STRING: { - unstrPropertyLists->setUnstructuredElement(pageCursor, propertyKeyId, dataType.typeID, - reinterpret_cast(valuePtr), &inMemOverflowFileCursor); - } break; - default: - throw CopyCSVException("unsupported dataType while parsing unstructured property"); - } - } -} - void InMemNodeCSVCopier::saveToFile() { logger->debug("Writing node structured columns to disk."); assert(!structuredColumns.empty()); @@ -402,8 +214,6 @@ void InMemNodeCSVCopier::saveToFile() { taskScheduler.scheduleTask(CopyCSVTaskFactory::createCopyCSVTask( [&](InMemColumn* x) { x->saveToFile(); }, column.get())); } - taskScheduler.scheduleTask(CopyCSVTaskFactory::createCopyCSVTask( - [&](InMemLists* x) { x->saveToFile(); }, unstrPropertyLists.get())); taskScheduler.waitAllTasksToCompleteOrError(); logger->debug("Done writing node structured columns to disk."); } diff --git a/src/storage/in_mem_csv_copier/in_mem_rel_csv_copier.cpp b/src/storage/in_mem_csv_copier/in_mem_rel_csv_copier.cpp index 697aba78b0..be5b3dc4d4 100644 --- a/src/storage/in_mem_csv_copier/in_mem_rel_csv_copier.cpp +++ b/src/storage/in_mem_csv_copier/in_mem_rel_csv_copier.cpp @@ -35,8 +35,8 @@ uint64_t InMemRelCSVCopier::copy() { populateAdjColumnsAndCountRelsInAdjLists(); if (!directionTableAdjLists[FWD].empty() || !directionTableAdjLists[BWD].empty()) { initAdjListsHeaders(); - initAdjAndPropertyListsMetadata(); - populateAdjAndPropertyLists(); + initListsMetadata(); + populateLists(); } sortAndCopyOverflowValues(); saveToFile(); @@ -462,7 +462,7 @@ void InMemRelCSVCopier::initAdjListsHeaders() { logger->debug("Done initializing AdjListHeaders for rel {}.", relTableSchema->tableName); } -void InMemRelCSVCopier::initAdjAndPropertyListsMetadata() { +void InMemRelCSVCopier::initListsMetadata() { logger->debug( "Initializing adjLists and propertyLists metadata for rel {}.", relTableSchema->tableName); for (auto relDirection : REL_DIRECTIONS) { @@ -491,13 +491,13 @@ void InMemRelCSVCopier::initAdjAndPropertyListsMetadata() { relTableSchema->tableName); } -void InMemRelCSVCopier::populateAdjAndPropertyLists() { +void InMemRelCSVCopier::populateLists() { logger->debug( "Populating adjLists and rel property lists for rel {}.", relTableSchema->tableName); auto blockStartOffset = 0ull; for (auto blockId = 0u; blockId < numBlocks; blockId++) { taskScheduler.scheduleTask(CopyCSVTaskFactory::createCopyCSVTask( - populateAdjAndPropertyListsTask, blockId, startRelID + blockStartOffset, this)); + populateListsTask, blockId, startRelID + blockStartOffset, this)); blockStartOffset += numLinesPerBlock[blockId]; } taskScheduler.waitAllTasksToCompleteOrError(); @@ -505,7 +505,7 @@ void InMemRelCSVCopier::populateAdjAndPropertyLists() { "Done populating adjLists and rel property lists for rel {}.", relTableSchema->tableName); } -void InMemRelCSVCopier::populateAdjAndPropertyListsTask( +void InMemRelCSVCopier::populateListsTask( uint64_t blockId, uint64_t blockStartRelID, InMemRelCSVCopier* copier) { copier->logger->trace("Start: path=`{0}` blkIdx={1}", copier->csvDescription.filePath, blockId); CSVReader reader( diff --git a/src/storage/in_mem_csv_copier/in_mem_structures_csv_copier.cpp b/src/storage/in_mem_csv_copier/in_mem_structures_csv_copier.cpp index ba718bc56f..6bc14bc8ab 100644 --- a/src/storage/in_mem_csv_copier/in_mem_structures_csv_copier.cpp +++ b/src/storage/in_mem_csv_copier/in_mem_structures_csv_copier.cpp @@ -39,37 +39,18 @@ uint64_t InMemStructuresCSVCopier::calculateNumRows(bool hasHeader) { return numRows; } -static void collectUnstrPropertyNamesInLine( - CSVReader& reader, uint64_t numTokensToSkip, unordered_set* unstrPropertyNames) { - for (auto i = 0u; i < numTokensToSkip; ++i) { - reader.hasNextTokenOrError(); - } - while (reader.hasNextToken()) { - auto unstrPropertyStr = reader.getString(); - auto unstrPropertyName = - StringUtils::split(unstrPropertyStr, CopyCSVConfig::UNSTR_PROPERTY_SEPARATOR)[0]; - unstrPropertyNames->insert(unstrPropertyName); - } -} - -void InMemStructuresCSVCopier::countNumLinesAndUnstrPropertiesPerBlockTask(const string& fName, - uint64_t blockId, InMemStructuresCSVCopier* copier, uint64_t numTokensToSkip, - unordered_set* unstrPropertyNames) { +void InMemStructuresCSVCopier::countNumLinesPerBlockTask( + const string& fName, uint64_t blockId, InMemStructuresCSVCopier* copier) { copier->logger->trace("Start: path=`{0}` blkIdx={1}", fName, blockId); CSVReader reader(fName, copier->csvDescription.csvReaderConfig, blockId); copier->numLinesPerBlock[blockId] = 0ull; while (reader.hasNextLine()) { copier->numLinesPerBlock[blockId]++; - // TODO(Semih): Uncomment when enabling ad-hoc properties. - // if (unstrPropertyNames != nullptr) { - // collectUnstrPropertyNamesInLine(reader, numTokensToSkip, unstrPropertyNames); - // } } copier->logger->trace("End: path=`{0}` blkIdx={1}", fName, blockId); } -// Lists headers are created for only AdjLists and UnstrPropertyLists, both of which store data -// in the page without NULL bits. +// Lists headers are created for only AdjLists, which store data in the page without NULL bits. void InMemStructuresCSVCopier::calculateListHeadersTask(node_offset_t numNodes, uint32_t elementSize, atomic_uint64_vec_t* listSizes, ListHeadersBuilder* listHeadersBuilder, const shared_ptr& logger) { diff --git a/src/storage/in_mem_csv_copier/include/in_mem_node_csv_copier.h b/src/storage/in_mem_csv_copier/include/in_mem_node_csv_copier.h index db7550ef4f..c776a26688 100644 --- a/src/storage/in_mem_csv_copier/include/in_mem_node_csv_copier.h +++ b/src/storage/in_mem_csv_copier/include/in_mem_node_csv_copier.h @@ -22,18 +22,9 @@ class InMemNodeCSVCopier : public InMemStructuresCSVCopier { private: void initializeColumnsAndList(); - vector countLinesPerBlockAndParseUnstrPropertyNames(uint64_t numStructuredProperties); + void countLinesPerBlock(uint64_t numStructuredProperties); template - void populateColumnsAndCountUnstrPropertyListSizes(); - void calcUnstrListsHeadersAndMetadata(); - void populateUnstrPropertyLists(); - - static void calcLengthOfUnstrPropertyLists( - CSVReader& reader, node_offset_t nodeOffset, InMemUnstructuredLists* unstrPropertyLists); - static void putUnstrPropsOfALineToLists(CSVReader& reader, node_offset_t nodeOffset, - PageByteCursor& inMemOverflowFileCursor, - unordered_map& unstrPropertiesNameToIdMap, - InMemUnstructuredLists* unstrPropertyLists); + void populateColumns(); static void putPropsOfLineIntoColumns(vector>& columns, const vector& properties, vector& overflowCursors, @@ -51,17 +42,13 @@ class InMemNodeCSVCopier : public InMemStructuresCSVCopier { // Note that primaryKeyPropertyIdx is *NOT* the property ID of the primary key property. // Instead, it is the index in the structured columns that we expect it to appear. template - static void populateColumnsAndCountUnstrPropertyListSizesTask(uint64_t primaryKeyPropertyIdx, - uint64_t blockId, uint64_t offsetStart, HashIndexBuilder* pkIndex, - InMemNodeCSVCopier* copier); - static void populateUnstrPropertyListsTask( - uint64_t blockId, node_offset_t nodeOffsetStart, InMemNodeCSVCopier* copier); + static void populateColumnsTask(uint64_t primaryKeyPropertyIdx, uint64_t blockId, + uint64_t offsetStart, HashIndexBuilder* pkIndex, InMemNodeCSVCopier* copier); private: NodeTableSchema* nodeTableSchema; uint64_t numNodes; vector> structuredColumns; - unique_ptr unstrPropertyLists; NodesStatisticsAndDeletedIDs* nodesStatisticsAndDeletedIDs; }; diff --git a/src/storage/in_mem_csv_copier/include/in_mem_rel_csv_copier.h b/src/storage/in_mem_csv_copier/include/in_mem_rel_csv_copier.h index a6368f8679..20033333e4 100644 --- a/src/storage/in_mem_csv_copier/include/in_mem_rel_csv_copier.h +++ b/src/storage/in_mem_csv_copier/include/in_mem_rel_csv_copier.h @@ -34,10 +34,10 @@ class InMemRelCSVCopier : public InMemStructuresCSVCopier { void initializeColumns(RelDirection relDirection); void initializeLists(RelDirection relDirection); void initAdjListsHeaders(); - void initAdjAndPropertyListsMetadata(); + void initListsMetadata(); void populateAdjColumnsAndCountRelsInAdjLists(); - void populateAdjAndPropertyLists(); + void populateLists(); // We store rel properties with overflows, e.g., strings or lists, in // InMemColumn/ListsWithOverflowFile (e.g., InMemStringLists). When loading these properties // from csv, we first save the overflow pointers of the ku_list_t or ku_string_t in temporary @@ -84,7 +84,7 @@ class InMemRelCSVCopier : public InMemStructuresCSVCopier { // Concurrent tasks. static void populateAdjColumnsAndCountRelsInAdjListsTask( uint64_t blockId, uint64_t blockStartRelID, InMemRelCSVCopier* copier); - static void populateAdjAndPropertyListsTask( + static void populateListsTask( uint64_t blockId, uint64_t blockStartRelID, InMemRelCSVCopier* copier); static void sortOverflowValuesOfPropertyColumnTask(const DataType& dataType, node_offset_t offsetStart, node_offset_t offsetEnd, InMemColumn* propertyColumn, diff --git a/src/storage/in_mem_csv_copier/include/in_mem_structures_csv_copier.h b/src/storage/in_mem_csv_copier/include/in_mem_structures_csv_copier.h index 73809d0355..5715cc80e0 100644 --- a/src/storage/in_mem_csv_copier/include/in_mem_structures_csv_copier.h +++ b/src/storage/in_mem_csv_copier/include/in_mem_structures_csv_copier.h @@ -28,14 +28,7 @@ class InMemStructuresCSVCopier { // Concurrent tasks static void countNumLinesPerBlockTask( - const string& fName, uint64_t blockId, InMemStructuresCSVCopier* copier) { - countNumLinesAndUnstrPropertiesPerBlockTask(fName, blockId, copier, UINT64_MAX, nullptr); - } - // We assume unstructured properties are written after structured properties, so numTokensToSkip - // indicates the start offset of unstructured properties. - static void countNumLinesAndUnstrPropertiesPerBlockTask(const string& fName, uint64_t blockId, - InMemStructuresCSVCopier* copier, uint64_t numTokensToSkip, - unordered_set* unstrPropertyNames); + const string& fName, uint64_t blockId, InMemStructuresCSVCopier* copier); // Initializes (in listHeadersBuilder) the header of each list in a Lists structure, from the // listSizes. ListSizes is used to determine if the list is small or large, based on which, // information is encoded in the 4 byte header. @@ -45,8 +38,7 @@ class InMemStructuresCSVCopier { // Initializes Metadata information of a Lists structure, that is chunksPagesMap and // largeListsPagesMap, using listSizes and listHeadersBuilder. // **Note that this file also allocates the in-memory pages of the InMemFile that will actually - // stores the data in the lists (e.g., neighbor ids or edge properties or unstructured - // properties). + // stores the data in the lists (e.g., neighbor ids or edge properties). static void calculateListsMetadataAndAllocateInMemListPagesTask(uint64_t numNodes, uint32_t elementSize, atomic_uint64_vec_t* listSizes, ListHeadersBuilder* listHeadersBuilder, InMemLists* inMemList, bool hasNULLBytes, diff --git a/src/storage/in_mem_storage_structure/in_mem_column.cpp b/src/storage/in_mem_storage_structure/in_mem_column.cpp index d2f5a38f16..de4d8521c3 100644 --- a/src/storage/in_mem_storage_structure/in_mem_column.cpp +++ b/src/storage/in_mem_storage_structure/in_mem_column.cpp @@ -6,7 +6,6 @@ namespace storage { InMemColumn::InMemColumn( std::string fName, DataType dataType, uint64_t numBytesForElement, uint64_t numElements) : fName{move(fName)}, dataType{move(dataType)}, numBytesForElement{numBytesForElement} { - assert(this->dataType.typeID != UNSTRUCTURED); numElementsInAPage = PageUtils::getNumElementsInAPage(numBytesForElement, true /* hasNull */); auto numPages = ceil((double)numElements / (double)numElementsInAPage); inMemFile = diff --git a/src/storage/in_mem_storage_structure/in_mem_lists.cpp b/src/storage/in_mem_storage_structure/in_mem_lists.cpp index 570353c35d..a2a6c91dde 100644 --- a/src/storage/in_mem_storage_structure/in_mem_lists.cpp +++ b/src/storage/in_mem_storage_structure/in_mem_lists.cpp @@ -33,8 +33,8 @@ InMemLists::InMemLists( numChunks++; } listsMetadataBuilder->initChunkPageLists(numChunks); - inMemFile = make_unique(this->fName, numBytesForElement, - this->dataType.typeID != NODE_ID && this->dataType.typeID != UNSTRUCTURED); + inMemFile = + make_unique(this->fName, numBytesForElement, this->dataType.typeID != NODE_ID); } void InMemLists::saveToFile() { @@ -67,8 +67,7 @@ void InMemAdjLists::saveToFile() { InMemListsWithOverflow::InMemListsWithOverflow(string fName, DataType dataType, uint64_t numNodes) : InMemLists{move(fName), move(dataType), Types::getDataTypeSize(dataType), numNodes} { - assert(this->dataType.typeID == STRING || this->dataType.typeID == LIST || - this->dataType.typeID == UNSTRUCTURED); + assert(this->dataType.typeID == STRING || this->dataType.typeID == LIST); overflowInMemFile = make_unique(StorageUtils::getOverflowFileName(this->fName)); } @@ -78,60 +77,6 @@ void InMemListsWithOverflow::saveToFile() { overflowInMemFile->flush(); } -void InMemUnstructuredLists::setUnstructuredElement(PageByteCursor& cursor, uint32_t propertyKey, - DataTypeID dataTypeID, const uint8_t* val, PageByteCursor* overflowCursor) { - PageByteCursor localCursor{cursor}; - setComponentOfUnstrProperty(localCursor, StorageConfig::UNSTR_PROP_KEY_IDX_LEN, - reinterpret_cast(&propertyKey)); - setComponentOfUnstrProperty(localCursor, StorageConfig::UNSTR_PROP_DATATYPE_LEN, - reinterpret_cast(&dataTypeID)); - switch (dataTypeID) { - case INT64: - case DOUBLE: - case BOOL: - case DATE: - case TIMESTAMP: - case INTERVAL: { - setComponentOfUnstrProperty(localCursor, Types::getDataTypeSize(dataTypeID), val); - } break; - case STRING: { - auto kuString = overflowInMemFile->copyString((const char*)val, *overflowCursor); - val = (uint8_t*)(&kuString); - setComponentOfUnstrProperty(localCursor, Types::getDataTypeSize(dataTypeID), val); - } break; - case LIST: { - auto kuList = overflowInMemFile->copyList(*(Literal*)val, *overflowCursor); - val = (uint8_t*)(&kuList); - setComponentOfUnstrProperty(localCursor, Types::getDataTypeSize(dataTypeID), val); - } break; - default: - throw CopyCSVException("Unsupported data type for unstructured list."); - } -} - -void InMemUnstructuredLists::setComponentOfUnstrProperty( - PageByteCursor& localCursor, uint8_t len, const uint8_t* val) { - if (DEFAULT_PAGE_SIZE - localCursor.offsetInPage >= len) { - memcpy(inMemFile->getPage(localCursor.pageIdx)->data + localCursor.offsetInPage, val, len); - localCursor.offsetInPage += len; - } else { - auto diff = DEFAULT_PAGE_SIZE - localCursor.offsetInPage; - auto writeOffset = inMemFile->getPage(localCursor.pageIdx)->data + localCursor.offsetInPage; - memcpy(writeOffset, val, diff); - auto left = len - diff; - localCursor.pageIdx++; - localCursor.offsetInPage = 0; - writeOffset = inMemFile->getPage(localCursor.pageIdx)->data + localCursor.offsetInPage; - memcpy(writeOffset, val + diff, left); - localCursor.offsetInPage = left; - } -} - -void InMemUnstructuredLists::saveToFile() { - listHeadersBuilder->saveToDisk(); - InMemListsWithOverflow::saveToFile(); -} - unique_ptr InMemListsFactory::getInMemPropertyLists( const string& fName, const DataType& dataType, uint64_t numNodes) { switch (dataType.typeID) { @@ -146,8 +91,6 @@ unique_ptr InMemListsFactory::getInMemPropertyLists( return make_unique(fName, numNodes); case LIST: return make_unique(fName, dataType, numNodes); - case UNSTRUCTURED: - return make_unique(fName, numNodes); default: throw CopyCSVException("Invalid type for property list creation."); } diff --git a/src/storage/in_mem_storage_structure/include/in_mem_lists.h b/src/storage/in_mem_storage_structure/include/in_mem_lists.h index fc0a7fb330..a1270d72fe 100644 --- a/src/storage/in_mem_storage_structure/include/in_mem_lists.h +++ b/src/storage/in_mem_storage_structure/include/in_mem_lists.h @@ -107,31 +107,6 @@ class InMemListLists : public InMemListsWithOverflow { : InMemListsWithOverflow{move(fName), move(dataType), numNodes} {}; }; -class InMemUnstructuredLists : public InMemListsWithOverflow { - -public: - InMemUnstructuredLists(string fName, uint64_t numNodes) - : InMemListsWithOverflow{move(fName), DataType(UNSTRUCTURED), numNodes} { - listSizes = make_unique(numNodes); - listHeadersBuilder = make_unique(this->fName, numNodes); - }; - - inline ListHeadersBuilder* getListHeadersBuilder() { return listHeadersBuilder.get(); } - inline atomic_uint64_vec_t* getListSizes() { return listSizes.get(); } - - void setUnstructuredElement(PageByteCursor& cursor, uint32_t propertyKey, DataTypeID dataTypeID, - const uint8_t* val, PageByteCursor* overflowCursor); - - void saveToFile() override; - -private: - void setComponentOfUnstrProperty(PageByteCursor& localCursor, uint8_t len, const uint8_t* val); - -private: - unique_ptr listSizes; - unique_ptr listHeadersBuilder; -}; - class InMemListsFactory { public: diff --git a/src/storage/include/storage_utils.h b/src/storage/include/storage_utils.h index 501dd2c1bb..e96377bfc4 100644 --- a/src/storage/include/storage_utils.h +++ b/src/storage/include/storage_utils.h @@ -93,16 +93,6 @@ class StorageUtils { return StorageStructureIDAndFName(StorageStructureID::newNodeIndexID(tableID), fName); } - // Returns the StorageStructureIDAndFName for the "base" lists structure/file. Callers need to - // modify it to obtain versions for METADATA and HEADERS structures/files. - static inline StorageStructureIDAndFName getUnstructuredNodePropertyListsStructureIDAndFName( - const string& directory, table_id_t tableID) { - auto fName = getNodeUnstrPropertyListsFName(directory, tableID, DBFileType::ORIGINAL); - return StorageStructureIDAndFName(StorageStructureID::newUnstructuredNodePropertyListsID( - tableID, ListFileType::BASE_LISTS), - fName); - } - // Returns the StorageStructureIDAndFName for the "base" lists structure/file. Callers need to // modify it to obtain versions for METADATA and HEADERS structures/files. static inline StorageStructureIDAndFName getAdjListsStructureIDAndFName(const string& directory, @@ -127,13 +117,6 @@ class StorageUtils { fName); } - static inline string getNodeUnstrPropertyListsFName( - const string& directory, const table_id_t& tableID, DBFileType dbFileType) { - auto fName = StringUtils::string_format("n-%d", tableID); - return appendWALFileSuffixIfNecessary( - FileUtils::joinPath(directory, fName + StorageConfig::LISTS_FILE_SUFFIX), dbFileType); - } - static inline string getAdjColumnFName(const string& directory, const table_id_t& relTableID, const table_id_t& nodeTableID, const RelDirection& relDirection, DBFileType dbFileType) { auto fName = diff --git a/src/storage/storage_structure/BUILD.bazel b/src/storage/storage_structure/BUILD.bazel index 9c651bbf94..792227f41d 100644 --- a/src/storage/storage_structure/BUILD.bazel +++ b/src/storage/storage_structure/BUILD.bazel @@ -71,26 +71,20 @@ cc_library( cc_library( name = "lists", srcs = [ - "lists/adj_and_property_lists_update_store.cpp", "lists/list_headers.cpp", "lists/list_sync_state.cpp", "lists/lists.cpp", "lists/lists_metadata.cpp", "lists/lists_update_iterator.cpp", - "lists/unstructured_properties_update_store.cpp", - "lists/unstructured_property_lists.cpp", - "lists/unstructured_property_lists_utils.cpp", + "lists/lists_update_store.cpp", ], hdrs = [ - "include/lists/adj_and_property_lists_update_store.h", "include/lists/list_headers.h", "include/lists/list_sync_state.h", "include/lists/lists.h", "include/lists/lists_metadata.h", "include/lists/lists_update_iterator.h", - "include/lists/unstructured_properties_update_store.h", - "include/lists/unstructured_property_lists.h", - "include/lists/unstructured_property_lists_utils.h", + "include/lists/lists_update_store.h", ], visibility = ["//visibility:public"], deps = [ diff --git a/src/storage/storage_structure/include/lists/list_sync_state.h b/src/storage/storage_structure/include/lists/list_sync_state.h index d13d5f629f..22505f6d37 100644 --- a/src/storage/storage_structure/include/lists/list_sync_state.h +++ b/src/storage/storage_structure/include/lists/list_sync_state.h @@ -12,7 +12,7 @@ namespace storage { enum class ListSourceStore : uint8_t { PersistentStore = 0, - AdjAndPropertyListsUpdateStore = 1, + ListsUpdateStore = 1, }; // ListSyncState holds the data that is required to synchronize reading from multiple Lists that diff --git a/src/storage/storage_structure/include/lists/lists.h b/src/storage/storage_structure/include/lists/lists.h index 40f075c85b..ce0b10022a 100644 --- a/src/storage/storage_structure/include/lists/lists.h +++ b/src/storage/storage_structure/include/lists/lists.h @@ -1,9 +1,8 @@ #pragma once -#include "adj_and_property_lists_update_store.h" +#include "lists_update_store.h" #include "src/common/types/include/literal.h" -#include "src/common/types/include/value.h" #include "src/storage/storage_structure/include/disk_overflow_file.h" #include "src/storage/storage_structure/include/lists/list_headers.h" #include "src/storage/storage_structure/include/lists/list_sync_state.h" @@ -71,7 +70,7 @@ struct ListHandle { /** * A lists data structure holds a list of homogeneous values for each offset in it. Lists are used - * for storing Adjacency List, Rel Property Lists and unstructured Node PropertyNameDataType Lists. + * for storing Adjacency List, Rel Property Lists. * * The offsets in the Lists are partitioned into fixed size. Hence, each offset, and its list, * belongs to a chunk. If the offset's list is small (less than the PAGE_SIZE) it is stored together @@ -89,9 +88,9 @@ class Lists : public BaseColumnOrList { public: Lists(const StorageStructureIDAndFName& storageStructureIDAndFName, const DataType& dataType, const size_t& elementSize, shared_ptr headers, BufferManager& bufferManager, - bool isInMemory, WAL* wal) + bool isInMemory, WAL* wal, ListsUpdateStore* listsUpdateStore) : Lists{storageStructureIDAndFName, dataType, elementSize, move(headers), bufferManager, - true /*hasNULLBytes*/, isInMemory, wal} {}; + true /*hasNULLBytes*/, isInMemory, wal, listsUpdateStore} {}; inline ListsMetadata& getListsMetadata() { return metadata; }; inline shared_ptr getHeaders() const { return headers; }; inline uint64_t getNumElementsFromListHeader(node_offset_t nodeOffset) const { @@ -100,98 +99,70 @@ class Lists : public BaseColumnOrList { metadata.getNumElementsInLargeLists(ListHeaders::getLargeListIdx(header)) : ListHeaders::getSmallListLen(header); } + inline uint64_t getNumElementsInListsUpdateStore(node_offset_t nodeOffset) { + return listsUpdateStore->getNumInsertedRelsForNodeOffset( + storageStructureIDAndFName.storageStructureID.listFileID, nodeOffset); + } + inline uint64_t getTotalNumElementsInList( + TransactionType transactionType, node_offset_t nodeOffset) { + return getNumElementsInPersistentStore(transactionType, nodeOffset) + + (transactionType == TransactionType::WRITE ? + getNumElementsInListsUpdateStore(nodeOffset) : + 0); + } virtual inline void checkpointInMemoryIfNecessary() { metadata.checkpointInMemoryIfNecessary(); } virtual inline void rollbackInMemoryIfNecessary() { metadata.rollbackInMemoryIfNecessary(); } virtual inline bool mayContainNulls() const { return true; } // Prepares all the db file changes necessary to update the "persistent" store of lists with the - // adjAndPropertyListsUpdateStore, which stores the updates by the write trx locally. + // listsUpdateStore, which stores the updates by the write trx locally. virtual void prepareCommitOrRollbackIfNecessary(bool isCommit); + virtual void readValues(const shared_ptr& valueVector, ListHandle& listHandle); + virtual void readFromSmallList( + const shared_ptr& valueVector, ListHandle& listHandle); + virtual void readFromLargeList( + const shared_ptr& valueVector, ListHandle& listHandle); + void readFromList(const shared_ptr& valueVector, ListHandle& listHandle); void fillInMemListsFromPersistentStore(CursorAndMapper& cursorAndMapper, uint64_t numElementsInPersistentStore, InMemList& inMemList); + uint64_t getNumElementsInPersistentStore( + TransactionType transactionType, node_offset_t nodeOffset); + void initListReadingState( + node_offset_t nodeOffset, ListHandle& listHandle, TransactionType transactionType); + unique_ptr getInMemListWithDataFromUpdateStoreOnly( + node_offset_t nodeOffset, vector& insertedRelsTupleIdxInFT); protected: virtual inline DiskOverflowFile* getDiskOverflowFileIfExists() { return nullptr; } virtual inline NodeIDCompressionScheme* getNodeIDCompressionIfExists() { return nullptr; } - virtual void prepareCommit(ListsUpdateIterator& listsUpdateIterator) = 0; - // storageStructureIDAndFName is the ID and fName for the "main ".lists" file. Lists(const StorageStructureIDAndFName& storageStructureIDAndFName, const DataType& dataType, const size_t& elementSize, shared_ptr headers, BufferManager& bufferManager, - bool hasNULLBytes, bool isInMemory, WAL* wal) + bool hasNULLBytes, bool isInMemory, WAL* wal, ListsUpdateStore* listsUpdateStore) : BaseColumnOrList{storageStructureIDAndFName, dataType, elementSize, bufferManager, hasNULLBytes, isInMemory, wal}, storageStructureIDAndFName{storageStructureIDAndFName}, - metadata{storageStructureIDAndFName, &bufferManager, wal}, headers{move(headers)} {}; + metadata{storageStructureIDAndFName, &bufferManager, wal}, headers{move(headers)}, + listsUpdateStore{listsUpdateStore} {}; + +private: + void prepareCommit(ListsUpdateIterator& listsUpdateIterator); protected: StorageStructureIDAndFName storageStructureIDAndFName; ListsMetadata metadata; shared_ptr headers; + ListsUpdateStore* listsUpdateStore; }; -class ListsWithAdjAndPropertyListsUpdateStore : public Lists { - -public: - ListsWithAdjAndPropertyListsUpdateStore( - const StorageStructureIDAndFName& storageStructureIDAndFName, const DataType& dataType, - const size_t& elementSize, shared_ptr headers, BufferManager& bufferManager, - bool isInMemory, WAL* wal, AdjAndPropertyListsUpdateStore* adjAndPropertyListsUpdateStore) - : ListsWithAdjAndPropertyListsUpdateStore{storageStructureIDAndFName, dataType, elementSize, - move(headers), bufferManager, true /*hasNULLBytes*/, isInMemory, wal, - adjAndPropertyListsUpdateStore} {}; - - inline uint64_t getNumElementsInAdjAndPropertyListsUpdateStore(node_offset_t nodeOffset) { - return adjAndPropertyListsUpdateStore->getNumInsertedRelsForNodeOffset( - storageStructureIDAndFName.storageStructureID.listFileID, nodeOffset); - } - inline uint64_t getTotalNumElementsInList( - TransactionType transactionType, node_offset_t nodeOffset) { - return getNumElementsInPersistentStore(transactionType, nodeOffset) + - (transactionType == TransactionType::WRITE ? - getNumElementsInAdjAndPropertyListsUpdateStore(nodeOffset) : - 0); - } - virtual void readValues(const shared_ptr& valueVector, ListHandle& listHandle); - void initListReadingState( - node_offset_t nodeOffset, ListHandle& listHandle, TransactionType transactionType); - uint64_t getNumElementsInPersistentStore( - TransactionType transactionType, node_offset_t nodeOffset); - -protected: - virtual void readFromSmallList( - const shared_ptr& valueVector, ListHandle& listHandle); - virtual void readFromLargeList( - const shared_ptr& valueVector, ListHandle& listHandle); - void readFromList(const shared_ptr& valueVector, ListHandle& listHandle); - void prepareCommit(ListsUpdateIterator& listsUpdateIterator) override; - - ListsWithAdjAndPropertyListsUpdateStore( - const StorageStructureIDAndFName& storageStructureIDAndFName, const DataType& dataType, - const size_t& elementSize, shared_ptr headers, BufferManager& bufferManager, - bool hasNULLBytes, bool isInMemory, WAL* wal, - AdjAndPropertyListsUpdateStore* adjAndPropertyListsUpdateStore) - : Lists{storageStructureIDAndFName, dataType, elementSize, headers, bufferManager, - hasNULLBytes, isInMemory, wal}, - adjAndPropertyListsUpdateStore{adjAndPropertyListsUpdateStore} {}; - -private: - unique_ptr getInMemListWithDataFromUpdateStoreOnly( - node_offset_t nodeOffset, vector& insertedRelsTupleIdxInFT); - -protected: - AdjAndPropertyListsUpdateStore* adjAndPropertyListsUpdateStore; -}; - -class PropertyListsWithOverflow : public ListsWithAdjAndPropertyListsUpdateStore { +class PropertyListsWithOverflow : public Lists { public: PropertyListsWithOverflow(const StorageStructureIDAndFName& storageStructureIDAndFName, const DataType& dataType, shared_ptr headers, BufferManager& bufferManager, - bool isInMemory, WAL* wal, AdjAndPropertyListsUpdateStore* adjAndPropertyListsUpdateStore) - : ListsWithAdjAndPropertyListsUpdateStore{storageStructureIDAndFName, dataType, - Types::getDataTypeSize(dataType), move(headers), bufferManager, isInMemory, wal, - adjAndPropertyListsUpdateStore}, + bool isInMemory, WAL* wal, ListsUpdateStore* listsUpdateStore) + : Lists{storageStructureIDAndFName, dataType, Types::getDataTypeSize(dataType), + move(headers), bufferManager, isInMemory, wal, listsUpdateStore}, diskOverflowFile{storageStructureIDAndFName, bufferManager, isInMemory, wal} {} private: @@ -206,9 +177,9 @@ class StringPropertyLists : public PropertyListsWithOverflow { public: StringPropertyLists(const StorageStructureIDAndFName& storageStructureIDAndFName, shared_ptr headers, BufferManager& bufferManager, bool isInMemory, WAL* wal, - AdjAndPropertyListsUpdateStore* adjAndPropertyListsUpdateStore) + ListsUpdateStore* listsUpdateStore) : PropertyListsWithOverflow{storageStructureIDAndFName, DataType{STRING}, headers, - bufferManager, isInMemory, wal, adjAndPropertyListsUpdateStore} {}; + bufferManager, isInMemory, wal, listsUpdateStore} {}; private: void readFromLargeList( @@ -222,9 +193,9 @@ class ListPropertyLists : public PropertyListsWithOverflow { public: ListPropertyLists(const StorageStructureIDAndFName& storageStructureIDAndFName, const DataType& dataType, shared_ptr headers, BufferManager& bufferManager, - bool isInMemory, WAL* wal, AdjAndPropertyListsUpdateStore* adjAndPropertyListsUpdateStore) + bool isInMemory, WAL* wal, ListsUpdateStore* listsUpdateStore) : PropertyListsWithOverflow{storageStructureIDAndFName, dataType, headers, bufferManager, - isInMemory, wal, adjAndPropertyListsUpdateStore} {}; + isInMemory, wal, listsUpdateStore} {}; private: void readFromLargeList( @@ -233,16 +204,16 @@ class ListPropertyLists : public PropertyListsWithOverflow { const shared_ptr& valueVector, ListHandle& listHandle) override; }; -class AdjLists : public ListsWithAdjAndPropertyListsUpdateStore { +class AdjLists : public Lists { public: AdjLists(const StorageStructureIDAndFName& storageStructureIDAndFName, BufferManager& bufferManager, NodeIDCompressionScheme nodeIDCompressionScheme, - bool isInMemory, WAL* wal, AdjAndPropertyListsUpdateStore* adjAndPropertyListsUpdateStore) - : ListsWithAdjAndPropertyListsUpdateStore{storageStructureIDAndFName, DataType(NODE_ID), + bool isInMemory, WAL* wal, ListsUpdateStore* listsUpdateStore) + : Lists{storageStructureIDAndFName, DataType(NODE_ID), nodeIDCompressionScheme.getNumBytesForNodeIDAfterCompression(), make_shared(storageStructureIDAndFName, &bufferManager, wal), - bufferManager, false, isInMemory, wal, adjAndPropertyListsUpdateStore}, + bufferManager, false /* hasNullBytes */, isInMemory, wal, listsUpdateStore}, nodeIDCompressionScheme{nodeIDCompressionScheme} {}; inline bool mayContainNulls() const override { return false; } @@ -271,7 +242,7 @@ class AdjLists : public ListsWithAdjAndPropertyListsUpdateStore { const shared_ptr& valueVector, ListHandle& listHandle) override; void readFromSmallList( const shared_ptr& valueVector, ListHandle& listHandle) override; - void readFromAdjAndPropertyListsUpdateStore( + void readFromListsUpdateStore( ListSyncState& listSyncState, shared_ptr valueVector); private: @@ -281,11 +252,10 @@ class AdjLists : public ListsWithAdjAndPropertyListsUpdateStore { class ListsFactory { public: - static unique_ptr - getListsWithAdjAndPropertyListsUpdateStore( - const StorageStructureIDAndFName& structureIDAndFName, const DataType& dataType, - const shared_ptr& adjListsHeaders, BufferManager& bufferManager, - bool isInMemory, WAL* wal, AdjAndPropertyListsUpdateStore* adjAndPropertyListsUpdateStore) { + static unique_ptr getLists(const StorageStructureIDAndFName& structureIDAndFName, + const DataType& dataType, const shared_ptr& adjListsHeaders, + BufferManager& bufferManager, bool isInMemory, WAL* wal, + ListsUpdateStore* listsUpdateStore) { switch (dataType.typeID) { case INT64: case DOUBLE: @@ -293,15 +263,15 @@ class ListsFactory { case DATE: case TIMESTAMP: case INTERVAL: - return make_unique(structureIDAndFName, - dataType, Types::getDataTypeSize(dataType), adjListsHeaders, bufferManager, - isInMemory, wal, adjAndPropertyListsUpdateStore); + return make_unique(structureIDAndFName, dataType, + Types::getDataTypeSize(dataType), adjListsHeaders, bufferManager, isInMemory, wal, + listsUpdateStore); case STRING: return make_unique(structureIDAndFName, adjListsHeaders, - bufferManager, isInMemory, wal, adjAndPropertyListsUpdateStore); + bufferManager, isInMemory, wal, listsUpdateStore); case LIST: return make_unique(structureIDAndFName, dataType, adjListsHeaders, - bufferManager, isInMemory, wal, adjAndPropertyListsUpdateStore); + bufferManager, isInMemory, wal, listsUpdateStore); default: throw StorageException("Invalid type for property list creation."); } diff --git a/src/storage/storage_structure/include/lists/lists_update_iterator.h b/src/storage/storage_structure/include/lists/lists_update_iterator.h index a8b36dfdfa..79aa5c146d 100644 --- a/src/storage/storage_structure/include/lists/lists_update_iterator.h +++ b/src/storage/storage_structure/include/lists/lists_update_iterator.h @@ -1,6 +1,6 @@ #pragma once -#include "unstructured_property_lists.h" +#include "lists.h" namespace kuzu { namespace storage { @@ -93,10 +93,9 @@ class ListsUpdateIterator { bool finishCalled; }; -class AdjOrUnstructuredPropertyListsUpdateIterator : public ListsUpdateIterator { +class AdjListsUpdateIterator : public ListsUpdateIterator { public: - explicit AdjOrUnstructuredPropertyListsUpdateIterator(Lists* lists) - : ListsUpdateIterator{lists} {} + explicit AdjListsUpdateIterator(Lists* lists) : ListsUpdateIterator{lists} {} private: inline void updateLargeListHeaderIfNecessary(uint32_t largeListIdx) override { @@ -121,8 +120,7 @@ class RelPropertyListsUpdateIterator : public ListsUpdateIterator { explicit RelPropertyListsUpdateIterator(Lists* lists) : ListsUpdateIterator{lists} {} private: - // Only adjListUpdateIterator and unstructuredListUpdateIterator need to update small or large - // list header. + // Only adjListUpdateIterator need to update small or large list header. inline void updateLargeListHeaderIfNecessary(uint32_t largeListIdx) override {} inline void updateSmallListHeaderIfNecessary( list_header_t oldHeader, list_header_t newHeader) override {} @@ -137,9 +135,8 @@ class ListsUpdateIteratorFactory { public: static unique_ptr getListsUpdateIterator(Lists* lists) { switch (lists->storageStructureIDAndFName.storageStructureID.listFileID.listType) { - case ListType::UNSTRUCTURED_NODE_PROPERTY_LISTS: case ListType::ADJ_LISTS: - return make_unique(lists); + return make_unique(lists); case ListType::REL_PROPERTY_LISTS: return make_unique(lists); default: diff --git a/src/storage/storage_structure/include/lists/adj_and_property_lists_update_store.h b/src/storage/storage_structure/include/lists/lists_update_store.h similarity index 90% rename from src/storage/storage_structure/include/lists/adj_and_property_lists_update_store.h rename to src/storage/storage_structure/include/lists/lists_update_store.h index 4587047126..3da2a0e182 100644 --- a/src/storage/storage_structure/include/lists/adj_and_property_lists_update_store.h +++ b/src/storage/storage_structure/include/lists/lists_update_store.h @@ -25,15 +25,15 @@ using ListUpdatesPerChunk = map; struct InMemList; -/* AdjAndPropertyListsUpdateStore stores all inserted edges in a factorizedTable in the format: +/* ListsUpdateStore stores all inserted edges in a factorizedTable in the format: * [srcNodeID, dstNodeID, relProp1, relProp2, ..., relPropN]. In order to efficiently find the * insertedEdges for a nodeTable, we introduce a mapping which stores the tupleIdxes of * insertedEdges for each nodeTable per direction. */ -class AdjAndPropertyListsUpdateStore { +class ListsUpdateStore { public: - AdjAndPropertyListsUpdateStore(MemoryManager& memoryManager, RelTableSchema& relTableSchema); + ListsUpdateStore(MemoryManager& memoryManager, RelTableSchema& relTableSchema); inline bool isEmpty() const { return factorizedTable->isEmpty(); } inline void clear() { @@ -59,7 +59,7 @@ class AdjAndPropertyListsUpdateStore { NodeIDCompressionScheme* nodeIDCompressionScheme); // If this is a one-to-one relTable, all properties are stored in columns. - // In this case, the adjAndPropertyListsUpdateStore should not store the insert rels in FT. + // In this case, the listsUpdateStore should not store the insert rels in FT. void insertRelIfNecessary(shared_ptr& srcNodeIDVector, shared_ptr& dstNodeIDVector, vector>& relPropertyVectors); @@ -83,7 +83,6 @@ class AdjAndPropertyListsUpdateStore { private: static inline RelNodeTableAndDir getRelNodeTableAndDirFromListFileID(ListFileID& listFileID) { - assert(listFileID.listType != ListType::UNSTRUCTURED_NODE_PROPERTY_LISTS); return listFileID.listType == ListType::ADJ_LISTS ? listFileID.adjListsID.relNodeTableAndDir : listFileID.relPropertyListID.relNodeTableAndDir; diff --git a/src/storage/storage_structure/include/lists/rel_update_store.h b/src/storage/storage_structure/include/lists/rel_update_store.h deleted file mode 100644 index fd8ba9a7b0..0000000000 --- a/src/storage/storage_structure/include/lists/rel_update_store.h +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once - -#include "src/catalog/include/catalog_structs.h" -#include "src/common/include/data_chunk/data_chunk.h" -#include "src/common/types/include/node_id_t.h" -#include "src/common/types/include/types.h" -#include "src/processor/result/include/factorized_table.h" -#include "src/storage/include/storage_utils.h" -#include "src/storage/storage_structure/include/lists/list_sync_state.h" - -namespace kuzu { -namespace storage { - -using namespace processor; -using namespace catalog; - -using InsertedEdgeTupleIdxs = map>; - -struct InMemList; - -class ListUpdateStore { - -public: - ListUpdateStore(MemoryManager& memoryManager, RelTableSchema& relTableSchema); - - inline uint32_t getColIdxInFT(uint32_t propertyID) const { - return propertyIDToColIdxMap.at(propertyID); - } - inline bool isEmpty() const { return factorizedTable->getNumTuples() == 0; } - inline map& getInsertedEdgeTupleIdxes() { - return chunkIdxToInsertedEdgeTupleIdxs; - } - inline void clear() { - factorizedTable->clear(); - chunkIdxToInsertedEdgeTupleIdxs.clear(); - } - - void readToListAndUpdateOverflowIfNecessary(ListFileID& listFileID, vector tupleIdxes, - InMemList& inMemList, uint64_t numElementsInPersistentStore, - DiskOverflowFile* diskOverflowFile, DataType dataType, - NodeIDCompressionScheme* nodeIDCompressionScheme); - - void addRel(vector>& srcDstNodeIDAndRelProperties); - - uint64_t getNumInsertedRelsForNodeOffset(node_offset_t nodeOffset) const; - - void readValues( - ListSyncState& listSyncState, shared_ptr valueVector, uint32_t colIdx) const; - -private: - unique_ptr factorizedTable; - shared_ptr srcNodeVector; - shared_ptr dstNodeVector; - shared_ptr nodeDataChunk; - map chunkIdxToInsertedEdgeTupleIdxs; - unordered_map propertyIDToColIdxMap; -}; - -class RelUpdateStore { -public: - RelUpdateStore(MemoryManager& memoryManager, RelTableSchema& relTableSchema) - : memoryManager{memoryManager}, relTableSchema{relTableSchema} {} - - void addRel(vector> srcDstNodeIDAndRelProperties); - - shared_ptr getOrCreateListUpdateStore( - RelDirection relDirection, table_id_t tableID); - -private: - void validateSrcDstNodeIDAndRelProperties( - vector> srcDstNodeIDAndRelProperties) const; - -private: - vector>> listUpdateStoresPerDirection{2}; - MemoryManager& memoryManager; - RelTableSchema relTableSchema; -}; - -} // namespace storage -} // namespace kuzu diff --git a/src/storage/storage_structure/include/lists/unstructured_properties_update_store.h b/src/storage/storage_structure/include/lists/unstructured_properties_update_store.h deleted file mode 100644 index f6b14dd597..0000000000 --- a/src/storage/storage_structure/include/lists/unstructured_properties_update_store.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once - -#include "src/storage/storage_structure/include/lists/lists.h" -#include "src/storage/storage_structure/include/lists/unstructured_property_lists_utils.h" - -namespace kuzu { -namespace storage { - -using UpdatedChunk = map>; - -/** - * UnstructuredPropertiesUpdateStore is not thread-safe and assumes that the - * UnstructuredPropertyLists, which is the sole user of UnstructuredPropertiesUpdateStore acquires - * necessary locks to ensure UnstructuredPropertiesUpdateStore is accessed in a thread-safe manner. - */ -class UnstructuredPropertiesUpdateStore { - -public: - UnstructuredPropertiesUpdateStore(DiskOverflowFile& stringDiskOverflowFile) - : stringDiskOverflowFile{stringDiskOverflowFile} {}; - - inline bool empty() { return updatedChunks.empty(); } - bool hasUpdatedList(node_offset_t nodeOffset); - UnstrPropListIterator getUpdatedListIterator(node_offset_t nodeOffset); - void setEmptyUpdatedPropertiesList(node_offset_t nodeOffset); - void setPropertyList( - node_offset_t nodeOffset, unique_ptr unstrPropListWrapper); - void setProperty(node_offset_t nodeOffset, uint32_t propertyKey, Value* value); - // Warning: This function assumes that an updatedList for the nodeOffsetForPropKeys already - // exists - void removeProperty(node_offset_t nodeOffset, uint32_t propertyKey); - inline void clear() { updatedChunks.clear(); } - -private: - uint64_t getChunkIdxAndInsertUpdatedChunkIfNecessaryWithoutLock(node_offset_t nodeOffset); - void insertUpdatedListWrapper(uint64_t chunkIdx, node_offset_t nodeOffset, - unique_ptr unstrPropListWrapper); - void setValue(uint8_t* updatedListData, uint64_t offsetInUpdatedList, Value* value, - uint32_t dataTypeSize); - -public: - DiskOverflowFile& stringDiskOverflowFile; - map> updatedChunks; -}; - -} // namespace storage -} // namespace kuzu diff --git a/src/storage/storage_structure/include/lists/unstructured_property_lists.h b/src/storage/storage_structure/include/lists/unstructured_property_lists.h deleted file mode 100644 index 7034975c78..0000000000 --- a/src/storage/storage_structure/include/lists/unstructured_property_lists.h +++ /dev/null @@ -1,84 +0,0 @@ -#pragma once - -#include "unstructured_properties_update_store.h" - -#include "src/storage/storage_structure/include/lists/lists.h" - -namespace kuzu { -namespace storage { - -using lock_t = unique_lock; - -// UnstructuredPropertyLists is the specialization of Lists for Node's unstructured property lists. -// Though this shares the identical representation as Lists, it is more aligned to Columns in -// terms of access. In particular, readValues(...) of UnstructuredPropertyLists> is given a -// NodeVector as input, similar to readValues() in Columns. For each node in NodeVector, -// unstructured property list of that node is read and the required property along with its -// dataTypeID is copied to a specialized UNSTRUCTURED-typed ValueVector. -class UnstructuredPropertyLists : public Lists { - -public: - UnstructuredPropertyLists(const StorageStructureIDAndFName& storageStructureIDAndFName, - BufferManager& bufferManager, bool isInMemory, WAL* wal) - : Lists{storageStructureIDAndFName, DataType(UNSTRUCTURED), 1, - make_shared(storageStructureIDAndFName, &bufferManager, wal), - bufferManager, false /*hasNULLBytes*/, isInMemory, wal}, - diskOverflowFile{storageStructureIDAndFName, bufferManager, isInMemory, wal}, - unstructuredListUpdateStore{diskOverflowFile} {}; - - void readProperties(Transaction* transaction, ValueVector* nodeIDVector, - const unordered_map& propertyKeyToResultVectorMap); - - void writeValues( - ValueVector* nodeIDVector, uint32_t propertyKey, ValueVector* vectorToWriteFrom); - - void initEmptyPropertyLists(node_offset_t nodeOffset); - void setOrRemoveProperty( - node_offset_t nodeOffset, uint32_t propertyKey, bool isSetting, Value* value = nullptr); - inline void setProperty(node_offset_t nodeOffset, uint32_t propertyKey, Value* value) { - setOrRemoveProperty(nodeOffset, propertyKey, true /* isSetting */, value); - } - inline void removeProperty(node_offset_t nodeOffset, uint32_t propertyKey) { - setOrRemoveProperty(nodeOffset, propertyKey, false /* isSetting */); - } - inline bool mayContainNulls() const override { return false; } - - // Currently, used only in CopyCSV tests. - unique_ptr> readUnstructuredPropertiesOfNode(node_offset_t nodeOffset); - - // Checkpoints the in memory version of the lists. - void checkpointInMemoryIfNecessary() override; - - // Rollbacks in memory any updates that have been performed. - void rollbackInMemoryIfNecessary() override; - - void prepareCommitOrRollbackIfNecessary(bool isCommit) override; - -private: - void prepareCommit(ListsUpdateIterator& listsUpdateIterator) override; - - void writeValue(node_offset_t nodeOffset, uint32_t propertyKey, ValueVector* vectorToWriteFrom, - uint32_t vectorPos); - - void readPropertiesForPosition(Transaction* transaction, ValueVector* nodeIDVector, - uint32_t pos, const unordered_map& propertyKeyToResultVectorMap); - - void readPropertyKeyAndDatatype(uint8_t* propertyKeyDataType, PageByteCursor& cursor, - const std::function& idxInPageListToListPageIdxMapper); - - void readPropertyValue(Value* propertyValue, uint64_t dataTypeSize, PageByteCursor& cursor, - const std::function& idxInPageListToListPageIdxMapper); - - void readFromAPage(uint8_t* value, uint64_t bytesToRead, PageByteCursor& cursor, - const std::function& idxInPageListToListPageIdxMapper); - -public: - // TODO(Semih/Guodong): Currently we serialize all access to unstructuredListUpdateStore - // and should optimize parallel updates. - mutex mtx; - DiskOverflowFile diskOverflowFile; - UnstructuredPropertiesUpdateStore unstructuredListUpdateStore; -}; - -} // namespace storage -} // namespace kuzu diff --git a/src/storage/storage_structure/include/lists/unstructured_property_lists_utils.h b/src/storage/storage_structure/include/lists/unstructured_property_lists_utils.h deleted file mode 100644 index a101e1a713..0000000000 --- a/src/storage/storage_structure/include/lists/unstructured_property_lists_utils.h +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once - -#include - -#include "src/common/include/configs.h" -#include "src/common/types/include/types.h" - -namespace kuzu { -namespace storage { - -using namespace kuzu::common; - -struct UnstructuredPropertyKeyDataType { - uint32_t keyIdx; - DataTypeID dataTypeID; -}; - -struct UnstrPropListWrapper { - - UnstrPropListWrapper(std::unique_ptr data, uint64_t size, uint64_t capacity) - : data{std::move(data)}, size{size}, capacity{capacity} {} - - std::unique_ptr data; - uint64_t size; - uint64_t capacity; - - inline void clear() { size = 0; } - - inline void incrementSize(uint64_t insertedDataSize) { size += insertedDataSize; } - - void increaseCapacityIfNeeded(uint64_t requiredCapacity); - - // Warning: This is a very slow operation that slides the entire list after the offset to left. - void removePropertyAtOffset(uint64_t offset, uint64_t dataTypeSize); -}; - -class UnstrPropListIterator { - -public: - UnstrPropListIterator() : UnstrPropListIterator(nullptr) {} - explicit UnstrPropListIterator(UnstrPropListWrapper* unstrPropListWrapper) - : unstrPropListWrapper{unstrPropListWrapper}, curOff{0} {} - - inline bool hasNext() { return curOff < unstrPropListWrapper->size; } - - UnstructuredPropertyKeyDataType& readNextPropKeyValue(); - - void skipValue(); - - inline uint64_t getCurOff() const { return curOff; } - - inline uint64_t getDataTypeSizeOfCurrProp() const { - assert(propKeyDataTypeForRetVal.keyIdx != UINT32_MAX); - return Types::getDataTypeSize(propKeyDataTypeForRetVal.dataTypeID); - } - - inline uint64_t getOffsetAtBeginningOfCurrProp() const { - assert(propKeyDataTypeForRetVal.keyIdx != UINT32_MAX); - return curOff - StorageConfig::UNSTR_PROP_HEADER_LEN; - } - - void copyValueOfCurrentProp(uint8_t* dst) { - memcpy(dst, unstrPropListWrapper->data.get() + curOff, getDataTypeSizeOfCurrProp()); - } - -private: - UnstrPropListWrapper* unstrPropListWrapper; - UnstructuredPropertyKeyDataType propKeyDataTypeForRetVal; - uint64_t curOff; -}; - -class UnstrPropListUtils { -public: - static bool findKeyPropertyAndPerformOp(UnstrPropListWrapper* updatedList, uint32_t propertyKey, - std::function opToPerform); - // void (*func)(UnstrPropListIterator& itr) -}; - -} // namespace storage -} // namespace kuzu diff --git a/src/storage/storage_structure/lists/lists.cpp b/src/storage/storage_structure/lists/lists.cpp index 276b74a56d..bc5106c594 100644 --- a/src/storage/storage_structure/lists/lists.cpp +++ b/src/storage/storage_structure/lists/lists.cpp @@ -15,6 +15,50 @@ void Lists::prepareCommitOrRollbackIfNecessary(bool isCommit) { updateItr->doneUpdating(); } +// Note: The given nodeOffset and largeListHandle may not be connected. For example if we +// are about to read a new nodeOffset, say v5, after having read a previous nodeOffset, say v7, with +// a largeList, then the input to this function can be nodeOffset: 5 and largeListHandle containing +// information about the last portion of v7's large list. Similarly, if nodeOffset is v3 and v3 +// has a small list then largeListHandle does not contain anything specific to v3 (it would likely +// be containing information about the last portion of the last large list that was read). +void Lists::readValues(const shared_ptr& valueVector, ListHandle& listHandle) { + auto& listSyncState = listHandle.listSyncState; + if (listSyncState.getListSourceStore() == ListSourceStore::ListsUpdateStore) { + listsUpdateStore->readValues( + storageStructureIDAndFName.storageStructureID.listFileID, listSyncState, valueVector); + } else { + // If the startElementOffset is 0, it means that this is the first time that we read from + // the list. As a result, we need to reset the cursor and mapper. + if (listHandle.listSyncState.getStartElemOffset() == 0) { + listHandle.resetCursorMapper(metadata, numElementsPerPage); + } + readFromList(valueVector, listHandle); + } +} + +void Lists::readFromSmallList(const shared_ptr& valueVector, ListHandle& listHandle) { + auto dummyReadOnlyTrx = Transaction::getDummyReadOnlyTrx(); + readBySequentialCopy(dummyReadOnlyTrx.get(), valueVector, listHandle.cursorAndMapper.cursor, + listHandle.cursorAndMapper.mapper); +} + +void Lists::readFromLargeList(const shared_ptr& valueVector, ListHandle& listHandle) { + // Assumes that the associated adjList has already updated the syncState. + auto pageCursor = PageUtils::getPageElementCursorForPos( + listHandle.listSyncState.getStartElemOffset(), numElementsPerPage); + auto dummyReadOnlyTrx = Transaction::getDummyReadOnlyTrx(); + readBySequentialCopy( + dummyReadOnlyTrx.get(), valueVector, pageCursor, listHandle.cursorAndMapper.mapper); +} + +void Lists::readFromList(const shared_ptr& valueVector, ListHandle& listHandle) { + if (ListHeaders::isALargeList(listHandle.listSyncState.getListHeader())) { + readFromLargeList(valueVector, listHandle); + } else { + readFromSmallList(valueVector, listHandle); + } +} + void Lists::fillInMemListsFromPersistentStore( CursorAndMapper& cursorAndMapper, uint64_t numElementsInPersistentStore, InMemList& inMemList) { uint64_t numElementsRead = 0; @@ -39,36 +83,23 @@ void Lists::fillInMemListsFromPersistentStore( } } -// Note: The given nodeOffset and largeListHandle may not be connected. For example if we -// are about to read a new nodeOffset, say v5, after having read a previous nodeOffset, say v7, with -// a largeList, then the input to this function can be nodeOffset: 5 and largeListHandle containing -// information about the last portion of v7's large list. Similarly, if nodeOffset is v3 and v3 -// has a small list then largeListHandle does not contain anything specific to v3 (it would likely -// be containing information about the last portion of the last large list that was read). -void ListsWithAdjAndPropertyListsUpdateStore::readValues( - const shared_ptr& valueVector, ListHandle& listHandle) { - auto& listSyncState = listHandle.listSyncState; - if (listSyncState.getListSourceStore() == ListSourceStore::AdjAndPropertyListsUpdateStore) { - adjAndPropertyListsUpdateStore->readValues( - storageStructureIDAndFName.storageStructureID.listFileID, listSyncState, valueVector); - } else { - // If the startElementOffset is 0, it means that this is the first time that we read from - // the list. As a result, we need to reset the cursor and mapper. - if (listHandle.listSyncState.getStartElemOffset() == 0) { - listHandle.resetCursorMapper(metadata, numElementsPerPage); - } - readFromList(valueVector, listHandle); +uint64_t Lists::getNumElementsInPersistentStore( + TransactionType transactionType, node_offset_t nodeOffset) { + if (transactionType == TransactionType::WRITE && + listsUpdateStore->isListEmptyInPersistentStore( + storageStructureIDAndFName.storageStructureID.listFileID, nodeOffset)) { + return 0; } + return getNumElementsFromListHeader(nodeOffset); } -void ListsWithAdjAndPropertyListsUpdateStore::initListReadingState( +void Lists::initListReadingState( node_offset_t nodeOffset, ListHandle& listHandle, TransactionType transactionType) { auto& listSyncState = listHandle.listSyncState; listSyncState.reset(); listSyncState.setBoundNodeOffset(nodeOffset); - auto isListEmptyInPersistentStore = - adjAndPropertyListsUpdateStore->isListEmptyInPersistentStore( - storageStructureIDAndFName.storageStructureID.listFileID, nodeOffset); + auto isListEmptyInPersistentStore = listsUpdateStore->isListEmptyInPersistentStore( + storageStructureIDAndFName.storageStructureID.listFileID, nodeOffset); if (transactionType == TransactionType::READ_ONLY || !isListEmptyInPersistentStore) { listSyncState.setListHeader(headers->getHeader(nodeOffset)); } else { @@ -80,75 +111,44 @@ void ListsWithAdjAndPropertyListsUpdateStore::initListReadingState( getNumElementsInPersistentStore(transactionType, nodeOffset); auto numElementsInUpdateStore = transactionType == WRITE ? - adjAndPropertyListsUpdateStore->getNumInsertedRelsForNodeOffset( + listsUpdateStore->getNumInsertedRelsForNodeOffset( storageStructureIDAndFName.storageStructureID.listFileID, nodeOffset) : 0; listSyncState.setNumValuesInList(numElementsInPersistentStore == 0 ? numElementsInUpdateStore : numElementsInPersistentStore); listSyncState.setDataToReadFromUpdateStore(numElementsInUpdateStore != 0); - // If there's no element is persistentStore and the adjAndPropertyListsUpdateStore is non-empty, - // we can skip reading from persistentStore and start reading from - // adjAndPropertyListsUpdateStore directly. + // If there's no element is persistentStore and the listsUpdateStore is non-empty, + // we can skip reading from persistentStore and start reading from listsUpdateStore directly. listSyncState.setSourceStore( ((numElementsInPersistentStore == 0 && numElementsInUpdateStore > 0) || isListEmptyInPersistentStore) ? - ListSourceStore::AdjAndPropertyListsUpdateStore : + ListSourceStore::ListsUpdateStore : ListSourceStore::PersistentStore); } -uint64_t ListsWithAdjAndPropertyListsUpdateStore::getNumElementsInPersistentStore( - TransactionType transactionType, node_offset_t nodeOffset) { - if (transactionType == TransactionType::WRITE && - adjAndPropertyListsUpdateStore->isListEmptyInPersistentStore( - storageStructureIDAndFName.storageStructureID.listFileID, nodeOffset)) { - return 0; - } - return getNumElementsFromListHeader(nodeOffset); -} - -void ListsWithAdjAndPropertyListsUpdateStore::readFromSmallList( - const shared_ptr& valueVector, ListHandle& listHandle) { - auto dummyReadOnlyTrx = Transaction::getDummyReadOnlyTrx(); - readBySequentialCopy(dummyReadOnlyTrx.get(), valueVector, listHandle.cursorAndMapper.cursor, - listHandle.cursorAndMapper.mapper); -} - -/** - * Note: This function is called for property Lists other than STRINGS. This is called by - * readValues, which is the main function for reading all Lists except UNSTRUCTURED - * and NODE_ID. - */ -void ListsWithAdjAndPropertyListsUpdateStore::readFromLargeList( - const shared_ptr& valueVector, ListHandle& listHandle) { - // assumes that the associated adjList has already updated the syncState. - auto pageCursor = PageUtils::getPageElementCursorForPos( - listHandle.listSyncState.getStartElemOffset(), numElementsPerPage); - auto dummyReadOnlyTrx = Transaction::getDummyReadOnlyTrx(); - readBySequentialCopy( - dummyReadOnlyTrx.get(), valueVector, pageCursor, listHandle.cursorAndMapper.mapper); -} - -void ListsWithAdjAndPropertyListsUpdateStore::readFromList( - const shared_ptr& valueVector, ListHandle& listHandle) { - if (ListHeaders::isALargeList(listHandle.listSyncState.getListHeader())) { - readFromLargeList(valueVector, listHandle); - } else { - readFromSmallList(valueVector, listHandle); - } +unique_ptr Lists::getInMemListWithDataFromUpdateStoreOnly( + node_offset_t nodeOffset, vector& insertedRelsTupleIdxInFT) { + auto inMemList = make_unique( + getNumElementsInListsUpdateStore(nodeOffset), elementSize, mayContainNulls()); + listsUpdateStore->readInsertionsToList(storageStructureIDAndFName.storageStructureID.listFileID, + insertedRelsTupleIdxInFT, *inMemList, 0 /* numElementsInPersistentStore */, + getDiskOverflowFileIfExists(), dataType, getNodeIDCompressionIfExists()); + return inMemList; } -void ListsWithAdjAndPropertyListsUpdateStore::prepareCommit( - ListsUpdateIterator& listsUpdateIterator) { - // See comments in UnstructuredPropertyLists::prepareCommit. - auto& listUpdatesPerChunk = adjAndPropertyListsUpdateStore->getListUpdatesPerChunk( +void Lists::prepareCommit(ListsUpdateIterator& listsUpdateIterator) { + // Note: In C++ iterating through maps happens in non-descending order of the keys. This + // property is critical when using listsUpdateIterator, which requires + // the user to make calls to writeInMemListToListPages in ascending order of nodeOffsets. + auto& listUpdatesPerChunk = listsUpdateStore->getListUpdatesPerChunk( storageStructureIDAndFName.storageStructureID.listFileID); for (auto updatedChunkItr = listUpdatesPerChunk.begin(); updatedChunkItr != listUpdatesPerChunk.end(); ++updatedChunkItr) { for (auto updatedNodeOffsetItr = updatedChunkItr->second.begin(); updatedNodeOffsetItr != updatedChunkItr->second.end(); updatedNodeOffsetItr++) { auto nodeOffset = updatedNodeOffsetItr->first; - if (adjAndPropertyListsUpdateStore->isListEmptyInPersistentStore( + if (listsUpdateStore->isListEmptyInPersistentStore( storageStructureIDAndFName.storageStructureID.listFileID, nodeOffset)) { listsUpdateIterator.updateList( nodeOffset, *getInMemListWithDataFromUpdateStoreOnly(nodeOffset, @@ -173,7 +173,7 @@ void ListsWithAdjAndPropertyListsUpdateStore::prepareCommit( auto numElementsInPersistentStore = getNumElementsFromListHeader(nodeOffset); fillInMemListsFromPersistentStore( cursorAndMapper, numElementsInPersistentStore, *inMemList); - adjAndPropertyListsUpdateStore->readInsertionsToList( + listsUpdateStore->readInsertionsToList( storageStructureIDAndFName.storageStructureID.listFileID, updatedNodeOffsetItr->second.insertedRelsTupleIdxInFT, *inMemList, numElementsInPersistentStore, getDiskOverflowFileIfExists(), dataType, @@ -184,39 +184,27 @@ void ListsWithAdjAndPropertyListsUpdateStore::prepareCommit( } } -unique_ptr -ListsWithAdjAndPropertyListsUpdateStore::getInMemListWithDataFromUpdateStoreOnly( - node_offset_t nodeOffset, vector& insertedRelsTupleIdxInFT) { - auto inMemList = make_unique( - getNumElementsInAdjAndPropertyListsUpdateStore(nodeOffset), elementSize, mayContainNulls()); - adjAndPropertyListsUpdateStore->readInsertionsToList( - storageStructureIDAndFName.storageStructureID.listFileID, insertedRelsTupleIdxInFT, - *inMemList, 0 /* numElementsInPersistentStore */, getDiskOverflowFileIfExists(), dataType, - getNodeIDCompressionIfExists()); - return inMemList; -} - void StringPropertyLists::readFromLargeList( const shared_ptr& valueVector, ListHandle& listHandle) { - ListsWithAdjAndPropertyListsUpdateStore::readFromLargeList(valueVector, listHandle); + Lists::readFromLargeList(valueVector, listHandle); diskOverflowFile.readStringsToVector(TransactionType::READ_ONLY, *valueVector); } void StringPropertyLists::readFromSmallList( const shared_ptr& valueVector, ListHandle& listHandle) { - ListsWithAdjAndPropertyListsUpdateStore::readFromSmallList(valueVector, listHandle); + Lists::readFromSmallList(valueVector, listHandle); diskOverflowFile.readStringsToVector(TransactionType::READ_ONLY, *valueVector); } void ListPropertyLists::readFromLargeList( const shared_ptr& valueVector, ListHandle& listHandle) { - ListsWithAdjAndPropertyListsUpdateStore::readFromLargeList(valueVector, listHandle); + Lists::readFromLargeList(valueVector, listHandle); diskOverflowFile.readListsToVector(TransactionType::READ_ONLY, *valueVector); } void ListPropertyLists::readFromSmallList( const shared_ptr& valueVector, ListHandle& listHandle) { - ListsWithAdjAndPropertyListsUpdateStore::readFromSmallList(valueVector, listHandle); + Lists::readFromSmallList(valueVector, listHandle); diskOverflowFile.readListsToVector(TransactionType::READ_ONLY, *valueVector); } @@ -225,10 +213,10 @@ void AdjLists::readValues(const shared_ptr& valueVector, ListHandle if (listSyncState.getListSourceStore() == ListSourceStore::PersistentStore && listSyncState.getStartElemOffset() + listSyncState.getNumValuesToRead() == listSyncState.getNumValuesInList()) { - listSyncState.setSourceStore(ListSourceStore::AdjAndPropertyListsUpdateStore); + listSyncState.setSourceStore(ListSourceStore::ListsUpdateStore); } - if (listSyncState.getListSourceStore() == ListSourceStore::AdjAndPropertyListsUpdateStore) { - readFromAdjAndPropertyListsUpdateStore(listSyncState, valueVector); + if (listSyncState.getListSourceStore() == ListSourceStore::ListsUpdateStore) { + readFromListsUpdateStore(listSyncState, valueVector); } else { // If the startElemOffset is invalid, it means that we never read from the list. As a // result, we need to reset the cursor and mapper. @@ -319,11 +307,11 @@ void AdjLists::readFromLargeList( void AdjLists::readFromSmallList( const shared_ptr& valueVector, ListHandle& listHandle) { valueVector->state->initOriginalAndSelectedSize(listHandle.listSyncState.getNumValuesInList()); - // We store the updates for adjLists in adjAndPropertyListsUpdateStore, however we store the + // We store the updates for adjLists in listsUpdateStore, however we store the // updates for adjColumn in the WAL version of the page. The adjColumn needs to pass a // transaction to readNodeIDsBySequentialCopy, so readNodeIDsBySequentialCopy can know whether // to read the wal version or the original version of the page. AdjLists never reads the wal - // version of the page(since its updates are stored in adjAndPropertyListsUpdateStore), so we + // version of the page(since its updates are stored in listsUpdateStore), so we // simply pass a dummy read-only transaction to readNodeIDsBySequentialCopy. auto dummyReadOnlyTrx = Transaction::getDummyReadOnlyTrx(); readNodeIDsBySequentialCopy(dummyReadOnlyTrx.get(), valueVector, @@ -336,18 +324,17 @@ void AdjLists::readFromSmallList( listHandle.listSyncState.setRangeToRead(0, listHandle.listSyncState.getNumValuesInList()); } -void AdjLists::readFromAdjAndPropertyListsUpdateStore( +void AdjLists::readFromListsUpdateStore( ListSyncState& listSyncState, shared_ptr valueVector) { if (listSyncState.getStartElemOffset() + listSyncState.getNumValuesToRead() == listSyncState.getNumValuesInList() || !listSyncState.hasValidRangeToRead()) { // We have read all values from persistent store or the persistent store is empty, we should - // reset listSyncState to indicate ranges in adjAndPropertyListsUpdateStore and start - // reading from adjAndPropertyListsUpdateStore. - listSyncState.setNumValuesInList( - adjAndPropertyListsUpdateStore->getNumInsertedRelsForNodeOffset( - storageStructureIDAndFName.storageStructureID.listFileID, - listSyncState.getBoundNodeOffset())); + // reset listSyncState to indicate ranges in listsUpdateStore and start + // reading from it. + listSyncState.setNumValuesInList(listsUpdateStore->getNumInsertedRelsForNodeOffset( + storageStructureIDAndFName.storageStructureID.listFileID, + listSyncState.getBoundNodeOffset())); listSyncState.setRangeToRead( 0, min(DEFAULT_VECTOR_CAPACITY, listSyncState.getNumValuesInList())); } else { @@ -356,7 +343,7 @@ void AdjLists::readFromAdjAndPropertyListsUpdateStore( listSyncState.getNumValuesInList() - listSyncState.getEndElemOffset())); } // Note that: we always store nbr node in the second column of factorizedTable. - adjAndPropertyListsUpdateStore->readValues( + listsUpdateStore->readValues( storageStructureIDAndFName.storageStructureID.listFileID, listSyncState, valueVector); } diff --git a/src/storage/storage_structure/lists/lists_update_iterator.cpp b/src/storage/storage_structure/lists/lists_update_iterator.cpp index 63c8e35c9c..f68e6b8a61 100644 --- a/src/storage/storage_structure/lists/lists_update_iterator.cpp +++ b/src/storage/storage_structure/lists/lists_update_iterator.cpp @@ -82,12 +82,6 @@ void ListsUpdateIterator::slideListsIfNecessary(uint64_t endNodeOffsetInclusive) // be slided if necessary. The necessity condition is if the old header is not equal to // the new header that would be formed by the current CSR offset. if (!ListHeaders::isALargeList(oldHeader)) { - // Note that we do not need to differentiate whether this function is running for - // AdjLists-UnstructuredPropertyLists (which need to compute newHeaders and actually - // update them) vs RelPropertyLists (which do not update headers and can always read new - // headers from the updated version of the header). This is because AdjList and - // RelPropertyLists are parallel and if a list remained small then, we would iteratively - // always compute the same new csrOffsets for each small list header. auto [listLen, csrOffset] = ListHeaders::getSmallListLenAndCSROffset(oldHeader); list_header_t newHeader = ListHeaders::getSmallListHeader(curCSROffset, listLen); if (newHeader != oldHeader) { @@ -165,9 +159,9 @@ void ListsUpdateIterator::updateLargeList(list_header_t oldHeader, InMemList& in TransactionType::WRITE) >> 1; // 2) We only need to update list header when this is an - // adjOrUnstructuredPropertyListsUpdateIterator because relPropertyList share the same + // adjListsUpdateIterator because relPropertyList share the same // header with adjList. The below updateLargeListHeaderIfNecessary(...) function will only - // update the header if the executing class is adjOrUnstructuredPropertyListsUpdateIterator. + // update the header if the executing class is adjListsUpdateIterator. updateLargeListHeaderIfNecessary(largeListIdx); // 3) Then we set a NULL pageListHeadIdx and also NULL for numElements of the new large // list. The call to insertNewPageGroupAndSetHeadIdxMap will update the pageListHeadIdx. And @@ -191,15 +185,15 @@ void ListsUpdateIterator::updateLargeList(list_header_t oldHeader, InMemList& in void ListsUpdateIterator::updateSmallListAndCurCSROffset( list_header_t oldHeader, InMemList& inMemList) { // Note that we do not need to differentiate whether this function is running for - // AdjLists-UnstructuredPropertyLists (which need to compute newHeaders and actually - // update them) vs RelPropertyLists (which do not update headers and can always read new - // headers from the updated version of the header). This is because AdjList and - // RelPropertyLists are parallel and if a list remained small then, we would iteratively - // always compute the same new csrOffsets for each small list header. + // AdjLists (which need to compute newHeaders and actually update them) vs RelPropertyLists + // (which do not update headers and can always read new headers from the updated version of the + // header). This is because AdjList and RelPropertyLists are parallel and if a list remained + // small then, we would iteratively always compute the same new csrOffsets for each small list + // header. list_header_t newHeader = ListHeaders::getSmallListHeader(curCSROffset, inMemList.numElements); - // 1: Only the adjOrUnstructuredPropertyListsUpdateIterator need to update - // the header, so the below updateSmallListHeaderIfNecessary(...) will only update the - // header if the executing class is adjOrUnstructuredPropertyListsUpdateIterator. + // 1: Only the adjListsUpdateIterator need to update the header, so the below + // updateSmallListHeaderIfNecessary(...) will only update the header if the executing class is + // adjListsUpdateIterator. updateSmallListHeaderIfNecessary(oldHeader, newHeader); // 2: Find the pageListHeadIdx for the chunk. If this chunk is "new", i.e., a new list was diff --git a/src/storage/storage_structure/lists/adj_and_property_lists_update_store.cpp b/src/storage/storage_structure/lists/lists_update_store.cpp similarity index 84% rename from src/storage/storage_structure/lists/adj_and_property_lists_update_store.cpp rename to src/storage/storage_structure/lists/lists_update_store.cpp index a99e838a61..9b5c8fe8ca 100644 --- a/src/storage/storage_structure/lists/adj_and_property_lists_update_store.cpp +++ b/src/storage/storage_structure/lists/lists_update_store.cpp @@ -1,12 +1,11 @@ -#include "src/storage/storage_structure/include/lists/adj_and_property_lists_update_store.h" +#include "src/storage/storage_structure/include/lists/lists_update_store.h" #include "src/storage/storage_structure/include/lists/lists.h" namespace kuzu { namespace storage { -AdjAndPropertyListsUpdateStore::AdjAndPropertyListsUpdateStore( - MemoryManager& memoryManager, RelTableSchema& relTableSchema) +ListsUpdateStore::ListsUpdateStore(MemoryManager& memoryManager, RelTableSchema& relTableSchema) : relTableSchema{relTableSchema} { auto factorizedTableSchema = make_unique(); // The first two columns of factorizedTable are for srcNodeID and dstNodeID. @@ -31,7 +30,7 @@ AdjAndPropertyListsUpdateStore::AdjAndPropertyListsUpdateStore( initListUpdatesPerTablePerDirection(); } -bool AdjAndPropertyListsUpdateStore::isListEmptyInPersistentStore( +bool ListsUpdateStore::isListEmptyInPersistentStore( ListFileID& listFileID, node_offset_t nodeOffset) const { auto relNodeTableAndDir = getRelNodeTableAndDirFromListFileID(listFileID); auto& listUpdatesPerChunk = listUpdatesPerTablePerDirection[relNodeTableAndDir.dir].at( @@ -44,7 +43,7 @@ bool AdjAndPropertyListsUpdateStore::isListEmptyInPersistentStore( return listUpdatesPerChunk.at(chunkIdx).at(nodeOffset).emptyListInPersistentStore; } -bool AdjAndPropertyListsUpdateStore::hasUpdates() const { +bool ListsUpdateStore::hasUpdates() const { for (auto relDirection : REL_DIRECTIONS) { for (const auto& listUpdatesPerTable : listUpdatesPerTablePerDirection[relDirection]) { if (!listUpdatesPerTable.second.empty()) { @@ -56,16 +55,15 @@ bool AdjAndPropertyListsUpdateStore::hasUpdates() const { } // Note: This function also resets the overflowptr of each string in inMemList if necessary. -void AdjAndPropertyListsUpdateStore::readInsertionsToList(ListFileID& listFileID, - vector tupleIdxes, InMemList& inMemList, uint64_t numElementsInPersistentStore, - DiskOverflowFile* diskOverflowFile, DataType dataType, - NodeIDCompressionScheme* nodeIDCompressionScheme) { +void ListsUpdateStore::readInsertionsToList(ListFileID& listFileID, vector tupleIdxes, + InMemList& inMemList, uint64_t numElementsInPersistentStore, DiskOverflowFile* diskOverflowFile, + DataType dataType, NodeIDCompressionScheme* nodeIDCompressionScheme) { factorizedTable->copyToInMemList(getColIdxInFT(listFileID), tupleIdxes, inMemList.getListData(), inMemList.nullMask.get(), numElementsInPersistentStore, diskOverflowFile, dataType, nodeIDCompressionScheme); } -void AdjAndPropertyListsUpdateStore::insertRelIfNecessary(shared_ptr& srcNodeIDVector, +void ListsUpdateStore::insertRelIfNecessary(shared_ptr& srcNodeIDVector, shared_ptr& dstNodeIDVector, vector>& relPropertyVectors) { auto srcNodeID = srcNodeIDVector->getValue(srcNodeIDVector->state->getPositionOfCurrIdx()); @@ -90,7 +88,7 @@ void AdjAndPropertyListsUpdateStore::insertRelIfNecessary(shared_ptr valueVector) const { +void ListsUpdateStore::readValues(ListFileID& listFileID, ListSyncState& listSyncState, + shared_ptr valueVector) const { auto numTuplesToRead = listSyncState.getNumValuesToRead(); auto nodeOffset = listSyncState.getBoundNodeOffset(); if (numTuplesToRead == 0) { @@ -123,7 +121,7 @@ void AdjAndPropertyListsUpdateStore::readValues(ListFileID& listFileID, valueVector->state->originalSize = numTuplesToRead; } -uint32_t AdjAndPropertyListsUpdateStore::getColIdxInFT(ListFileID& listFileID) const { +uint32_t ListsUpdateStore::getColIdxInFT(ListFileID& listFileID) const { if (listFileID.listType == ADJ_LISTS) { return listFileID.adjListsID.relNodeTableAndDir.dir == FWD ? 1 : 0; } else { @@ -131,7 +129,7 @@ uint32_t AdjAndPropertyListsUpdateStore::getColIdxInFT(ListFileID& listFileID) c } } -void AdjAndPropertyListsUpdateStore::initListUpdatesPerTablePerDirection() { +void ListsUpdateStore::initListUpdatesPerTablePerDirection() { listUpdatesPerTablePerDirection.clear(); for (auto direction : REL_DIRECTIONS) { listUpdatesPerTablePerDirection.push_back(map{}); diff --git a/src/storage/storage_structure/lists/unstructured_properties_update_store.cpp b/src/storage/storage_structure/lists/unstructured_properties_update_store.cpp deleted file mode 100644 index e555464308..0000000000 --- a/src/storage/storage_structure/lists/unstructured_properties_update_store.cpp +++ /dev/null @@ -1,118 +0,0 @@ -#include "src/storage/storage_structure/include/lists/unstructured_property_lists.h" - -using namespace kuzu::common; - -namespace kuzu { -namespace storage { - -bool UnstructuredPropertiesUpdateStore::hasUpdatedList(node_offset_t nodeOffset) { - uint64_t chunkIdx = StorageUtils::getListChunkIdx(nodeOffset); - return updatedChunks.contains(chunkIdx) && - updatedChunks.find(chunkIdx)->second->contains(nodeOffset); -} - -void UnstructuredPropertiesUpdateStore::setEmptyUpdatedPropertiesList(node_offset_t nodeOffset) { - uint64_t chunkIdx = getChunkIdxAndInsertUpdatedChunkIfNecessaryWithoutLock(nodeOffset); - auto updatedChunk = updatedChunks.find(chunkIdx)->second.get(); - if (!updatedChunk->contains(nodeOffset)) { - unique_ptr emptyList = make_unique(0); - insertUpdatedListWrapper( - chunkIdx, nodeOffset, make_unique(move(emptyList), 0, 0)); - } else { - updatedChunk->find(nodeOffset)->second->clear(); - } -} - -// Assumes the UpdatedChunk for nodeOffsetForPropKeys already exists. -// chunkIdx is passed because the current callers have already computed it not because it is -// necessary. -void UnstructuredPropertiesUpdateStore::insertUpdatedListWrapper(uint64_t chunkIdx, - node_offset_t nodeOffset, unique_ptr unstrPropListWrapper) { - auto updatedChunk = updatedChunks.find(chunkIdx)->second.get(); - updatedChunk->insert({nodeOffset, move(unstrPropListWrapper)}); -} - -void UnstructuredPropertiesUpdateStore::setPropertyList( - node_offset_t nodeOffset, unique_ptr unstrPropListWrapper) { - uint64_t chunkIdx = getChunkIdxAndInsertUpdatedChunkIfNecessaryWithoutLock(nodeOffset); - insertUpdatedListWrapper(chunkIdx, nodeOffset, move(unstrPropListWrapper)); -} - -// This function assumes that the caller has before copied the initial original property list to -// the local store. -void UnstructuredPropertiesUpdateStore::setProperty( - node_offset_t nodeOffset, uint32_t propertyKey, Value* value) { - uint64_t chunkIdx = getChunkIdxAndInsertUpdatedChunkIfNecessaryWithoutLock(nodeOffset); - auto updatedList = updatedChunks.find(chunkIdx)->second->find(nodeOffset)->second.get(); - bool found = UnstrPropListUtils::findKeyPropertyAndPerformOp( - updatedList, propertyKey, [this, &updatedList, &value](UnstrPropListIterator& itr) -> void { - setValue( - updatedList->data.get(), itr.getCurOff(), value, itr.getDataTypeSizeOfCurrProp()); - }); - // If the property did not exist, we need to append to the list - if (!found) { - uint64_t dataTypeSize = Types::getDataTypeSize(value->dataType); - uint64_t totalSize = StorageConfig::UNSTR_PROP_HEADER_LEN + dataTypeSize; - - updatedList->increaseCapacityIfNeeded(updatedList->size + totalSize); - uint64_t offsetToWriteTo = updatedList->size; - memcpy(updatedList->data.get() + offsetToWriteTo, reinterpret_cast(&propertyKey), - StorageConfig::UNSTR_PROP_KEY_IDX_LEN); - offsetToWriteTo += StorageConfig::UNSTR_PROP_KEY_IDX_LEN; - memcpy(updatedList->data.get() + offsetToWriteTo, - reinterpret_cast(&value->dataType.typeID), - StorageConfig::UNSTR_PROP_DATATYPE_LEN); - offsetToWriteTo += StorageConfig::UNSTR_PROP_DATATYPE_LEN; - setValue(updatedList->data.get(), offsetToWriteTo, value, dataTypeSize); - updatedList->incrementSize(totalSize); - } -} - -// dataTypeSize is passed because the current callers all have already computed it not because it is -// necessary. It can be computed from value->dataType if needed. -void UnstructuredPropertiesUpdateStore::setValue( - uint8_t* updatedListData, uint64_t offsetInUpdatedList, Value* value, uint32_t dataTypeSize) { - memcpy(updatedListData + offsetInUpdatedList, reinterpret_cast(&value->val), - dataTypeSize); - if (STRING == value->dataType.typeID) { - if (!ku_string_t::isShortString(value->val.strVal.len)) { - // If the string we write is a long string, its overflowPtr is currently - // pointing to the overflow buffer of vectorToWriteFrom. We need to move it - // to storage. - ku_string_t* stringToWriteTo = (ku_string_t*)(updatedListData + offsetInUpdatedList); - ku_string_t* stringToWriteFrom = (ku_string_t*)&value->val; - stringDiskOverflowFile.writeStringOverflowAndUpdateOverflowPtr( - *stringToWriteFrom, *stringToWriteTo); - } - } -} - -UnstrPropListIterator UnstructuredPropertiesUpdateStore::getUpdatedListIterator( - node_offset_t nodeOffset) { - uint64_t chunkIdx = StorageUtils::getListChunkIdx(nodeOffset); - return UnstrPropListIterator( - updatedChunks.find(chunkIdx)->second->find(nodeOffset)->second.get()); -} - -void UnstructuredPropertiesUpdateStore::removeProperty( - node_offset_t nodeOffset, uint32_t propertyKey) { - uint64_t chunkIdx = StorageUtils::getListChunkIdx(nodeOffset); - auto updatedList = updatedChunks.find(chunkIdx)->second->find(nodeOffset)->second.get(); - UnstrPropListUtils::findKeyPropertyAndPerformOp( - updatedList, propertyKey, [&updatedList](UnstrPropListIterator& itr) -> void { - updatedList->removePropertyAtOffset( - itr.getOffsetAtBeginningOfCurrProp(), itr.getDataTypeSizeOfCurrProp()); - }); -} - -uint64_t UnstructuredPropertiesUpdateStore::getChunkIdxAndInsertUpdatedChunkIfNecessaryWithoutLock( - node_offset_t nodeOffset) { - uint64_t chunkIdx = StorageUtils::getListChunkIdx(nodeOffset); - if (!updatedChunks.contains(chunkIdx)) { - updatedChunks.insert({chunkIdx, make_unique()}); - } - return chunkIdx; -} - -} // namespace storage -} // namespace kuzu diff --git a/src/storage/storage_structure/lists/unstructured_property_lists.cpp b/src/storage/storage_structure/lists/unstructured_property_lists.cpp deleted file mode 100644 index 1d6dc6d3ac..0000000000 --- a/src/storage/storage_structure/lists/unstructured_property_lists.cpp +++ /dev/null @@ -1,297 +0,0 @@ -#include "src/storage/storage_structure/include/lists/unstructured_property_lists.h" - -#include "src/storage/storage_structure/include/lists/lists_update_iterator.h" -#include "src/storage/storage_structure/include/lists/unstructured_property_lists_utils.h" - -using namespace kuzu::common; - -namespace kuzu { -namespace storage { - -void UnstructuredPropertyLists::readProperties(Transaction* transaction, ValueVector* nodeIDVector, - const unordered_map& propertyKeyToResultVectorMap) { - if (nodeIDVector->state->isFlat()) { - auto pos = nodeIDVector->state->getPositionOfCurrIdx(); - readPropertiesForPosition(transaction, nodeIDVector, pos, propertyKeyToResultVectorMap); - } else { - for (auto i = 0u; i < nodeIDVector->state->selVector->selectedSize; ++i) { - auto pos = nodeIDVector->state->selVector->selectedPositions[i]; - readPropertiesForPosition(transaction, nodeIDVector, pos, propertyKeyToResultVectorMap); - } - } -} - -void UnstructuredPropertyLists::writeValues( - ValueVector* nodeIDVector, uint32_t propertyKey, ValueVector* vectorToWriteFrom) { - assert(vectorToWriteFrom->dataType.typeID == UNSTRUCTURED); - if (nodeIDVector->state->isFlat() && vectorToWriteFrom->state->isFlat()) { - auto nodeOffset = nodeIDVector->readNodeOffset(nodeIDVector->state->getPositionOfCurrIdx()); - writeValue(nodeOffset, propertyKey, vectorToWriteFrom, - vectorToWriteFrom->state->getPositionOfCurrIdx()); - } else if (nodeIDVector->state->isFlat() && !vectorToWriteFrom->state->isFlat()) { - auto nodeOffset = nodeIDVector->readNodeOffset(nodeIDVector->state->getPositionOfCurrIdx()); - auto lastPos = vectorToWriteFrom->state->selVector->selectedSize - 1; - writeValue(nodeOffset, propertyKey, vectorToWriteFrom, lastPos); - } else if (!nodeIDVector->state->isFlat() && vectorToWriteFrom->state->isFlat()) { - for (auto i = 0u; i < nodeIDVector->state->selVector->selectedSize; ++i) { - auto nodeOffset = - nodeIDVector->readNodeOffset(nodeIDVector->state->selVector->selectedPositions[i]); - writeValue(nodeOffset, propertyKey, vectorToWriteFrom, - vectorToWriteFrom->state->getPositionOfCurrIdx()); - } - } else if (!nodeIDVector->state->isFlat() && !vectorToWriteFrom->state->isFlat()) { - for (auto i = 0u; i < nodeIDVector->state->selVector->selectedSize; ++i) { - auto pos = nodeIDVector->state->selVector->selectedPositions[i]; - auto nodeOffset = nodeIDVector->readNodeOffset(pos); - writeValue(nodeOffset, propertyKey, vectorToWriteFrom, pos); - } - } -} - -void UnstructuredPropertyLists::prepareCommitOrRollbackIfNecessary(bool isCommit) { - if (unstructuredListUpdateStore.updatedChunks.empty()) { - return; - } - // Note: We need to add this unstructuredPropertyLists to WAL's set of - // updatedUnstructuredPropertyLists here instead of for example during WALReplayer when - // modifying pages for the following reason: Note that until this function is called, no updates - // to the files of Lists has been made. That is, so far there are no log records in WAL to - // indicate a change to this Lists. Therefore, suppose a transaction makes changes, which - // results in changes to this Lists but then rolls back. Then since there are no log records, we - // cannot rely on the log for the WALReplayer to know that we need to roll back this - // unstructuredPropertyLists in memory. Therefore, we need to manually add this - // unstructuredPropertyLists to the set of updatedUnstructuredPropertyLists to rollback when the - // database class calls - // nodesStore->prepareUnstructuredPropertyListsToCommitOrRollbackIfNecessary, which blindly - // calls each Lists to check if they have something to commit or rollback. - wal->addToUpdatedNodeTables(storageStructureIDAndFName.storageStructureID.listFileID - .unstructuredNodePropertyListsID.tableID); - Lists::prepareCommitOrRollbackIfNecessary(isCommit); -} - -void UnstructuredPropertyLists::prepareCommit(ListsUpdateIterator& listsUpdateIterator) { - // Note: In C++ iterating through maps happens in non-descending order of the keys. This - // property is critical when using UnstructuredPropertyListsUpdateIterator, which requires - // the user to make calls to writeInMemListToListPages in ascending order of nodeOffsets. - for (auto updatedChunkItr = unstructuredListUpdateStore.updatedChunks.begin(); - updatedChunkItr != unstructuredListUpdateStore.updatedChunks.end(); ++updatedChunkItr) { - for (auto updatedNodeOffsetItr = updatedChunkItr->second->begin(); - updatedNodeOffsetItr != updatedChunkItr->second->end(); updatedNodeOffsetItr++) { - InMemList inMemList{ - updatedNodeOffsetItr->second->size, elementSize, false /* requireNullMask */}; - memcpy(inMemList.getListData(), updatedNodeOffsetItr->second->data.get(), - updatedNodeOffsetItr->second->size * elementSize); - listsUpdateIterator.updateList(updatedNodeOffsetItr->first, inMemList); - } - } -} - -void UnstructuredPropertyLists::readPropertiesForPosition(Transaction* transaction, - ValueVector* nodeIDVector, uint32_t pos, - const unordered_map& propertyKeyToResultVectorMap) { - if (nodeIDVector->isNull(pos)) { - for (auto& [key, vector] : propertyKeyToResultVectorMap) { - vector->setNull(pos, true); - } - return; - } - unordered_set propertyKeysFound; - auto nodeOffset = nodeIDVector->readNodeOffset(pos); - // This is declared outside to ensure that in case the if branch is executed, the allocated - // memory does not go out of space and we can keep a valid pointer in the pair above. In case - // the else branch executes, data is never used. - unique_ptr primaryStoreListWrapper; - UnstrPropListIterator itr; - if (transaction->isReadOnly() || !unstructuredListUpdateStore.hasUpdatedList(nodeOffset)) { - auto header = headers->getHeader(nodeOffset); - CursorAndMapper cursorAndMapper; - cursorAndMapper.reset(metadata, numElementsPerPage, header, nodeOffset); - uint64_t numElementsInLIst = getNumElementsFromListHeader(nodeOffset); - InMemList inMemList{numElementsInLIst, elementSize, false /* requireNullMask */}; - fillInMemListsFromPersistentStore(cursorAndMapper, numElementsInLIst, inMemList); - primaryStoreListWrapper = make_unique( - move(inMemList.listData), numElementsInLIst, numElementsInLIst /* capacity */); - itr = UnstrPropListIterator(primaryStoreListWrapper.get()); - } else { - itr = unstructuredListUpdateStore.getUpdatedListIterator(nodeOffset); - } - - while (itr.hasNext()) { - auto propertyKeyDataType = itr.readNextPropKeyValue(); - if (propertyKeyToResultVectorMap.contains(propertyKeyDataType.keyIdx)) { - propertyKeysFound.insert(propertyKeyDataType.keyIdx); - auto vector = propertyKeyToResultVectorMap.at(propertyKeyDataType.keyIdx); - vector->setNull(pos, false); - auto value = &((Value*)vector->getData())[pos]; - itr.copyValueOfCurrentProp(reinterpret_cast(&value->val)); - value->dataType.typeID = propertyKeyDataType.dataTypeID; - if (propertyKeyDataType.dataTypeID == STRING) { - diskOverflowFile.readStringToVector( - transaction->getType(), value->val.strVal, vector->getOverflowBuffer()); - } - } - // We skipValue regardless of whether we found a property and called - // itr.copyValueOfCurrentProp, because itr.copyValueOfCurrentProp does not move the - // curOff of the iterator. - itr.skipValue(); - if (propertyKeysFound.size() == - propertyKeyToResultVectorMap.size()) { // all properties are found. - break; - } - } - for (auto& [key, vector] : propertyKeyToResultVectorMap) { - if (!propertyKeysFound.contains(key)) { - vector->setNull(pos, true); - } - } -} - -void UnstructuredPropertyLists::writeValue(node_offset_t nodeOffset, uint32_t propertyKey, - ValueVector* vectorToWriteFrom, uint32_t vectorPos) { - if (vectorToWriteFrom->isNull(vectorPos)) { - removeProperty(nodeOffset, propertyKey); - } else { - auto value = vectorToWriteFrom->getValue(vectorPos); - setProperty(nodeOffset, propertyKey, &value); - } -} - -unique_ptr> UnstructuredPropertyLists::readUnstructuredPropertiesOfNode( - node_offset_t nodeOffset) { - CursorAndMapper cursorAndMapper; - cursorAndMapper.reset(metadata, numElementsPerPage, headers->getHeader(nodeOffset), nodeOffset); - auto numElementsInList = getNumElementsFromListHeader(nodeOffset); - auto retVal = make_unique>(); - PageByteCursor byteCursor{cursorAndMapper.cursor.pageIdx, cursorAndMapper.cursor.elemPosInPage}; - auto propertyKeyDataType = UnstructuredPropertyKeyDataType{UINT32_MAX, ANY}; - auto numBytesRead = 0u; - while (numBytesRead < numElementsInList) { - readPropertyKeyAndDatatype( - (uint8_t*)(&propertyKeyDataType), byteCursor, cursorAndMapper.mapper); - numBytesRead += StorageConfig::UNSTR_PROP_HEADER_LEN; - auto dataTypeSize = Types::getDataTypeSize(propertyKeyDataType.dataTypeID); - Value unstrPropertyValue{DataType(propertyKeyDataType.dataTypeID)}; - readPropertyValue(&unstrPropertyValue, - Types::getDataTypeSize(propertyKeyDataType.dataTypeID), byteCursor, - cursorAndMapper.mapper); - numBytesRead += dataTypeSize; - Literal propertyValueAsLiteral; - if (STRING == propertyKeyDataType.dataTypeID) { - propertyValueAsLiteral = Literal(diskOverflowFile.readString( - TransactionType::READ_ONLY, unstrPropertyValue.val.strVal)); - } else { - propertyValueAsLiteral = Literal( - (uint8_t*)&unstrPropertyValue.val, DataType(propertyKeyDataType.dataTypeID)); - } - retVal->insert(pair(propertyKeyDataType.keyIdx, propertyValueAsLiteral)); - } - return retVal; -} - -void UnstructuredPropertyLists::readPropertyKeyAndDatatype(uint8_t* propertyKeyDataType, - PageByteCursor& cursor, const function& idxInPageListToListPageIdxMapper) { - auto totalNumBytesRead = 0u; - auto bytesInCurrentPage = DEFAULT_PAGE_SIZE - cursor.offsetInPage; - auto bytesToReadInCurrentPage = - min((uint64_t)StorageConfig::UNSTR_PROP_HEADER_LEN, bytesInCurrentPage); - readFromAPage( - propertyKeyDataType, bytesToReadInCurrentPage, cursor, idxInPageListToListPageIdxMapper); - totalNumBytesRead += bytesToReadInCurrentPage; - if (StorageConfig::UNSTR_PROP_HEADER_LEN > totalNumBytesRead) { // move to next page - cursor.pageIdx++; - cursor.offsetInPage = 0; - auto bytesToReadInNextPage = StorageConfig::UNSTR_PROP_HEADER_LEN - totalNumBytesRead; - // IMPORTANT NOTE: Pranjal used to use bytesInCurrentPage instead of totalNumBytesRead - // in the following function. Xiyang think this is a bug and modify it. - readFromAPage(propertyKeyDataType + totalNumBytesRead, bytesToReadInNextPage, cursor, - idxInPageListToListPageIdxMapper); - } -} - -void UnstructuredPropertyLists::readPropertyValue(Value* propertyValue, uint64_t dataTypeSize, - PageByteCursor& cursor, const function& idxInPageListToListPageIdxMapper) { - auto totalNumBytesRead = 0u; - auto bytesInCurrentPage = DEFAULT_PAGE_SIZE - cursor.offsetInPage; - auto bytesToReadInCurrentPage = min(dataTypeSize, bytesInCurrentPage); - readFromAPage(((uint8_t*)&propertyValue->val), bytesToReadInCurrentPage, cursor, - idxInPageListToListPageIdxMapper); - totalNumBytesRead += bytesToReadInCurrentPage; - if (dataTypeSize > totalNumBytesRead) { // move to next page - cursor.pageIdx++; - cursor.offsetInPage = 0; - auto bytesToReadInNextPage = dataTypeSize - totalNumBytesRead; - readFromAPage(((uint8_t*)&propertyValue->val) + totalNumBytesRead, bytesToReadInNextPage, - cursor, idxInPageListToListPageIdxMapper); - } -} - -void UnstructuredPropertyLists::readFromAPage(uint8_t* value, uint64_t bytesToRead, - PageByteCursor& cursor, - const std::function& idxInPageListToListPageIdxMapper) { - uint64_t physicalPageIdx = idxInPageListToListPageIdxMapper(cursor.pageIdx); - auto frame = bufferManager.pin(fileHandle, physicalPageIdx); - memcpy(value, frame + cursor.offsetInPage, bytesToRead); - bufferManager.unpin(fileHandle, physicalPageIdx); - cursor.offsetInPage += bytesToRead; -} - -void UnstructuredPropertyLists::initEmptyPropertyLists(node_offset_t nodeOffset) { - lock_t lck{mtx}; - unstructuredListUpdateStore.setEmptyUpdatedPropertiesList(nodeOffset); -} - -void UnstructuredPropertyLists::setOrRemoveProperty( - node_offset_t nodeOffset, uint32_t propertyKey, bool isSetting, Value* value) { - lock_t lck{mtx}; - if (!unstructuredListUpdateStore.hasUpdatedList(nodeOffset)) { - CursorAndMapper cursorAndMapper; - cursorAndMapper.reset( - metadata, numElementsPerPage, headers->getHeader(nodeOffset), nodeOffset); - auto numElementsInList = getNumElementsFromListHeader(nodeOffset); - uint64_t updatedListCapacity = max(numElementsInList, - (uint64_t)(numElementsInList * StorageConfig::ARRAY_RESIZING_FACTOR)); - InMemList inMemList{updatedListCapacity, elementSize, false /* requireNullMask */}; - fillInMemListsFromPersistentStore(cursorAndMapper, numElementsInList, inMemList); - if (isSetting) { - unstructuredListUpdateStore.setPropertyList( - nodeOffset, make_unique(std::move(inMemList.listData), - numElementsInList, updatedListCapacity)); - } else if (!unstructuredListUpdateStore.hasUpdatedList(nodeOffset)) { - unique_ptr unstrListWrapper = make_unique( - std::move(inMemList.listData), numElementsInList, updatedListCapacity); - bool found = UnstrPropListUtils::findKeyPropertyAndPerformOp( - unstrListWrapper.get(), propertyKey, [](UnstrPropListIterator& itr) -> void {}); - if (found) { - unstructuredListUpdateStore.setPropertyList( - nodeOffset, std::move(unstrListWrapper)); - unstructuredListUpdateStore.removeProperty(nodeOffset, propertyKey); - } - } - } else if (!isSetting) { - unstructuredListUpdateStore.removeProperty(nodeOffset, propertyKey); - } - if (isSetting) { - unstructuredListUpdateStore.setProperty(nodeOffset, propertyKey, value); - } -} - -void UnstructuredPropertyLists::checkpointInMemoryIfNecessary() { - if (unstructuredListUpdateStore.updatedChunks.empty()) { - return; - } - headers->checkpointInMemoryIfNecessary(); - Lists::checkpointInMemoryIfNecessary(); - unstructuredListUpdateStore.clear(); -} - -void UnstructuredPropertyLists::rollbackInMemoryIfNecessary() { - if (unstructuredListUpdateStore.updatedChunks.empty()) { - return; - } - headers->rollbackInMemoryIfNecessary(); - Lists::rollbackInMemoryIfNecessary(); - unstructuredListUpdateStore.clear(); -} - -} // namespace storage -} // namespace kuzu diff --git a/src/storage/storage_structure/lists/unstructured_property_lists_utils.cpp b/src/storage/storage_structure/lists/unstructured_property_lists_utils.cpp deleted file mode 100644 index 27b1b9da54..0000000000 --- a/src/storage/storage_structure/lists/unstructured_property_lists_utils.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include "src/storage/storage_structure/include/lists/unstructured_property_lists_utils.h" - -namespace kuzu { -namespace storage { - -void UnstrPropListWrapper::increaseCapacityIfNeeded(uint64_t requiredCapacity) { - if (requiredCapacity < capacity) { - return; - } - uint64_t newCapacity = - std::max(requiredCapacity, (uint64_t)(capacity * StorageConfig::ARRAY_RESIZING_FACTOR)); - std::unique_ptr newData = std::make_unique(newCapacity); - memcpy(newData.get(), data.get(), capacity); - data.reset(); - data = std::move(newData); - capacity = newCapacity; -} - -void UnstrPropListWrapper::removePropertyAtOffset(uint64_t offset, uint64_t dataTypeSize) { - uint64_t sizeToSlide = StorageConfig::UNSTR_PROP_HEADER_LEN + dataTypeSize; - uint64_t endOffset = offset + StorageConfig::UNSTR_PROP_HEADER_LEN + dataTypeSize; - memcpy(data.get() + offset, data.get() + endOffset, size - endOffset); - size -= sizeToSlide; -} - -bool UnstrPropListUtils::findKeyPropertyAndPerformOp(UnstrPropListWrapper* updatedList, - uint32_t propertyKey, std::function opToPerform) { - UnstrPropListIterator itr(updatedList); - while (itr.hasNext()) { - auto propKeyDataType = itr.readNextPropKeyValue(); - if (propertyKey == propKeyDataType.keyIdx) { - opToPerform(itr); - return true; - } else { - itr.skipValue(); - } - } - return false; -} - -UnstructuredPropertyKeyDataType& UnstrPropListIterator::readNextPropKeyValue() { - memcpy(reinterpret_cast(&propKeyDataTypeForRetVal), - unstrPropListWrapper->data.get() + curOff, StorageConfig::UNSTR_PROP_HEADER_LEN); - curOff += StorageConfig::UNSTR_PROP_HEADER_LEN; - return propKeyDataTypeForRetVal; -} - -void UnstrPropListIterator::skipValue() { - curOff += Types::getDataTypeSize(propKeyDataTypeForRetVal.dataTypeID); - propKeyDataTypeForRetVal.keyIdx = UINT32_MAX; -} - -} // namespace storage -} // namespace kuzu diff --git a/src/storage/storage_utils.cpp b/src/storage/storage_utils.cpp index 261a79de07..219b056451 100644 --- a/src/storage/storage_utils.cpp +++ b/src/storage/storage_utils.cpp @@ -67,10 +67,6 @@ string StorageUtils::getListFName(const string& directory, StorageStructureID st string baseFName; ListFileID listFileID = storageStructureID.listFileID; switch (listFileID.listType) { - case UNSTRUCTURED_NODE_PROPERTY_LISTS: { - baseFName = getNodeUnstrPropertyListsFName( - directory, listFileID.unstructuredNodePropertyListsID.tableID, DBFileType::ORIGINAL); - } break; case ADJ_LISTS: { auto& relNodeTableAndDir = listFileID.adjListsID.relNodeTableAndDir; baseFName = getAdjListsFName(directory, relNodeTableAndDir.relTableID, diff --git a/src/storage/store/include/node_table.h b/src/storage/store/include/node_table.h index 93820ba4a1..4160fb767f 100644 --- a/src/storage/store/include/node_table.h +++ b/src/storage/store/include/node_table.h @@ -3,7 +3,6 @@ #include "src/catalog/include/catalog.h" #include "src/storage/index/include/hash_index.h" #include "src/storage/storage_structure/include/lists/lists.h" -#include "src/storage/storage_structure/include/lists/unstructured_property_lists.h" #include "src/storage/store/include/nodes_statistics_and_deleted_ids.h" #include "src/storage/wal/include/wal.h" @@ -26,9 +25,6 @@ class NodeTable { inline Column* getPropertyColumn(uint64_t propertyIdx) { return propertyColumns[propertyIdx].get(); } - inline UnstructuredPropertyLists* getUnstrPropertyLists() const { - return unstrPropertyLists.get(); - } inline PrimaryKeyIndex* getPKIndex() const { return pkIndex.get(); } inline NodesStatisticsAndDeletedIDs* getNodeStatisticsAndDeletedIDs() const { @@ -42,14 +38,8 @@ class NodeTable { void prepareCommitOrRollbackIfNecessary(bool isCommit); - inline void checkpointInMemoryIfNecessary() { - unstrPropertyLists->checkpointInMemoryIfNecessary(); - pkIndex->checkpointInMemoryIfNecessary(); - } - inline void rollbackInMemoryIfNecessary() { - unstrPropertyLists->rollbackInMemoryIfNecessary(); - pkIndex->rollbackInMemoryIfNecessary(); - } + inline void checkpointInMemoryIfNecessary() { pkIndex->checkpointInMemoryIfNecessary(); } + inline void rollbackInMemoryIfNecessary() { pkIndex->rollbackInMemoryIfNecessary(); } private: void deleteNode(node_offset_t nodeOffset, ValueVector* primaryKeyVector, uint32_t pos) const; @@ -60,8 +50,6 @@ class NodeTable { private: // This is for structured properties. vector> propertyColumns; - // All unstructured properties of a node are stored inside one UnstructuredPropertyLists. - unique_ptr unstrPropertyLists; // The index for ID property. // TODO(Guodong): rename this to primary key index unique_ptr pkIndex; diff --git a/src/storage/store/include/nodes_store.h b/src/storage/store/include/nodes_store.h index 2ca008706c..e8b3830710 100644 --- a/src/storage/store/include/nodes_store.h +++ b/src/storage/store/include/nodes_store.h @@ -20,9 +20,6 @@ class NodesStore { inline Column* getNodePropertyColumn(table_id_t tableID, uint64_t propertyIdx) const { return nodeTables.at(tableID)->getPropertyColumn(propertyIdx); } - inline UnstructuredPropertyLists* getNodeUnstrPropertyLists(table_id_t tableID) const { - return nodeTables.at(tableID)->getUnstrPropertyLists(); - } inline PrimaryKeyIndex* getPKIndex(table_id_t tableID) { return nodeTables[tableID]->getPKIndex(); } diff --git a/src/storage/store/include/rel_table.h b/src/storage/store/include/rel_table.h index 8eb90c427a..b90ef50cb3 100644 --- a/src/storage/store/include/rel_table.h +++ b/src/storage/store/include/rel_table.h @@ -12,8 +12,7 @@ namespace storage { using table_adj_columns_map_t = unordered_map>; using table_adj_lists_map_t = unordered_map>; using table_property_columns_map_t = unordered_map>>; -using table_property_lists_map_t = - unordered_map>>; +using table_property_lists_map_t = unordered_map>>; class RelTable { @@ -28,7 +27,7 @@ class RelTable { RelDirection relDirection, table_id_t tableID, uint64_t propertyIdx) { return propertyColumns[relDirection].at(tableID)[propertyIdx].get(); } - inline ListsWithAdjAndPropertyListsUpdateStore* getPropertyLists( + inline Lists* getPropertyLists( RelDirection relDirection, table_id_t tableID, uint64_t propertyIdx) { return propertyLists[relDirection].at(tableID)[propertyIdx].get(); } @@ -38,9 +37,7 @@ class RelTable { inline AdjLists* getAdjLists(RelDirection relDirection, table_id_t tableID) { return adjLists[relDirection].at(tableID).get(); } - inline AdjAndPropertyListsUpdateStore* getAdjAndPropertyListsUpdateStore() { - return adjAndPropertyListsUpdateStore.get(); - } + inline ListsUpdateStore* getListsUpdateStore() { return listsUpdateStore.get(); } inline table_id_t getRelTableID() const { return tableID; } vector getAdjListsForNodeTable(table_id_t tableID); @@ -57,7 +54,7 @@ class RelTable { private: inline void addToUpdatedRelTables() { wal->addToUpdatedRelTables(tableID); } - inline void clearAdjAndPropertyListsUpdateStore() { adjAndPropertyListsUpdateStore->clear(); } + inline void clearListsUpdateStore() { listsUpdateStore->clear(); } void initAdjColumnOrLists( const catalog::Catalog& catalog, BufferManager& bufferManager, WAL* wal); void initPropertyListsAndColumns( @@ -78,7 +75,7 @@ class RelTable { vector propertyLists; vector adjLists; bool isInMemoryMode; - unique_ptr adjAndPropertyListsUpdateStore; + unique_ptr listsUpdateStore; WAL* wal; }; diff --git a/src/storage/store/include/rels_store.h b/src/storage/store/include/rels_store.h index 5fa2786fca..169d28a530 100644 --- a/src/storage/store/include/rels_store.h +++ b/src/storage/store/include/rels_store.h @@ -24,9 +24,9 @@ class RelsStore { const uint64_t& propertyIdx) const { return relTables.at(relTableID)->getPropertyColumn(relDirection, nodeTableID, propertyIdx); } - inline ListsWithAdjAndPropertyListsUpdateStore* getRelPropertyLists( - const RelDirection& relDirection, const table_id_t& nodeTableID, - const table_id_t& relTableID, const uint64_t& propertyIdx) const { + inline Lists* getRelPropertyLists(const RelDirection& relDirection, + const table_id_t& nodeTableID, const table_id_t& relTableID, + const uint64_t& propertyIdx) const { return relTables.at(relTableID)->getPropertyLists(relDirection, nodeTableID, propertyIdx); } inline AdjColumn* getAdjColumn(const RelDirection& relDirection, const table_id_t& nodeTableID, diff --git a/src/storage/store/node_table.cpp b/src/storage/store/node_table.cpp index 8812c9ee11..ee3ea24e85 100644 --- a/src/storage/store/node_table.cpp +++ b/src/storage/store/node_table.cpp @@ -15,17 +15,11 @@ void NodeTable::loadColumnsAndListsFromDisk( propertyColumns.resize(nodeTableSchema->getAllNodeProperties().size()); for (auto i = 0u; i < nodeTableSchema->getAllNodeProperties().size(); i++) { auto property = nodeTableSchema->getAllNodeProperties()[i]; - if (property.dataType.typeID != UNSTRUCTURED) { - propertyColumns[i] = ColumnFactory::getColumn( - StorageUtils::getStructuredNodePropertyColumnStructureIDAndFName( - wal->getDirectory(), property), - property.dataType, bufferManager, isInMemory, wal); - } + propertyColumns[i] = ColumnFactory::getColumn( + StorageUtils::getStructuredNodePropertyColumnStructureIDAndFName( + wal->getDirectory(), property), + property.dataType, bufferManager, isInMemory, wal); } - unstrPropertyLists = make_unique( - StorageUtils::getUnstructuredNodePropertyListsStructureIDAndFName( - wal->getDirectory(), tableID), - bufferManager, isInMemory, wal); pkIndex = make_unique( StorageUtils::getNodeIndexIDAndFName(wal->getDirectory(), tableID), nodeTableSchema->getPrimaryKey().dataType, bufferManager, wal); @@ -48,7 +42,6 @@ node_offset_t NodeTable::addNodeAndResetProperties(ValueVector* primaryKeyVector for (auto& column : propertyColumns) { column->setNodeOffsetToNull(nodeOffset); } - unstrPropertyLists->initEmptyPropertyLists(nodeOffset); return nodeOffset; } @@ -73,7 +66,6 @@ void NodeTable::deleteNode( } void NodeTable::prepareCommitOrRollbackIfNecessary(bool isCommit) { - unstrPropertyLists->prepareCommitOrRollbackIfNecessary(isCommit); pkIndex->prepareCommitOrRollbackIfNecessary(isCommit); } diff --git a/src/storage/store/rel_table.cpp b/src/storage/store/rel_table.cpp index 7a7a3a32ff..82babe3cc6 100644 --- a/src/storage/store/rel_table.cpp +++ b/src/storage/store/rel_table.cpp @@ -10,9 +10,9 @@ namespace storage { RelTable::RelTable(const Catalog& catalog, table_id_t tableID, BufferManager& bufferManager, MemoryManager& memoryManager, bool isInMemoryMode, WAL* wal) : logger{LoggerUtils::getOrCreateLogger("storage")}, tableID{tableID}, - isInMemoryMode{isInMemoryMode}, - adjAndPropertyListsUpdateStore{make_unique( - memoryManager, *catalog.getReadOnlyVersion()->getRelTableSchema(tableID))}, + isInMemoryMode{isInMemoryMode}, listsUpdateStore{make_unique(memoryManager, + *catalog.getReadOnlyVersion()->getRelTableSchema( + tableID))}, wal{wal} { loadColumnsAndListsFromDisk(catalog, bufferManager); } @@ -58,13 +58,13 @@ void RelTable::prepareCommitOrRollbackIfNecessary(bool isCommit) { void RelTable::checkpointInMemoryIfNecessary() { performOpOnListsWithUpdates( std::bind(&Lists::checkpointInMemoryIfNecessary, std::placeholders::_1), - std::bind(&RelTable::clearAdjAndPropertyListsUpdateStore, this)); + std::bind(&RelTable::clearListsUpdateStore, this)); } void RelTable::rollbackInMemoryIfNecessary() { performOpOnListsWithUpdates( std::bind(&Lists::rollbackInMemoryIfNecessary, std::placeholders::_1), - std::bind(&RelTable::clearAdjAndPropertyListsUpdateStore, this)); + std::bind(&RelTable::clearListsUpdateStore, this)); } // This function assumes that the order of vectors in relPropertyVectorsPerRelTable as: @@ -100,8 +100,7 @@ void RelTable::insertRels(shared_ptr& srcNodeIDVector, } } } - adjAndPropertyListsUpdateStore->insertRelIfNecessary( - srcNodeIDVector, dstNodeIDVector, relPropertyVectors); + listsUpdateStore->insertRelIfNecessary(srcNodeIDVector, dstNodeIDVector, relPropertyVectors); } void RelTable::initEmptyRelsForNewNode(nodeID_t& nodeID) { @@ -110,7 +109,7 @@ void RelTable::initEmptyRelsForNewNode(nodeID_t& nodeID) { adjColumns[direction].at(nodeID.tableID)->setNodeOffsetToNull(nodeID.offset); } } - adjAndPropertyListsUpdateStore->initEmptyListInPersistentStore(nodeID); + listsUpdateStore->initEmptyListInPersistentStore(nodeID); } void RelTable::initAdjColumnOrLists( @@ -143,7 +142,7 @@ void RelTable::initAdjColumnOrLists( StorageUtils::getAdjListsStructureIDAndFName( wal->getDirectory(), tableID, boundTableID, relDirection), bufferManager, nodeIDCompressionScheme, isInMemoryMode, wal, - adjAndPropertyListsUpdateStore.get()); + listsUpdateStore.get()); adjLists[relDirection].emplace(boundTableID, move(adjList)); } } @@ -199,19 +198,19 @@ void RelTable::initPropertyListsForRelTable( catalog.getReadOnlyVersion()->getNodeTableIDsForRelTableDirection(tableID, relDirection)) { auto& properties = catalog.getReadOnlyVersion()->getRelProperties(tableID); auto adjListsHeaders = adjLists[relDirection].at(boundTableID)->getHeaders(); - propertyLists[relDirection].emplace(boundTableID, - vector>(properties.size())); + propertyLists[relDirection].emplace( + boundTableID, vector>(properties.size())); for (auto& property : properties) { auto propertyID = property.propertyID; logger->debug("relDirection {} nodeTableForAdjColumnAndProperties {} propertyIdx {} " "type {} name `{}`", relDirection, boundTableID, propertyID, property.dataType.typeID, property.name); propertyLists[relDirection].at(boundTableID)[property.propertyID] = - ListsFactory::getListsWithAdjAndPropertyListsUpdateStore( + ListsFactory::getLists( StorageUtils::getRelPropertyListsStructureIDAndFName( wal->getDirectory(), tableID, boundTableID, relDirection, property), property.dataType, adjListsHeaders, bufferManager, isInMemoryMode, wal, - adjAndPropertyListsUpdateStore.get()); + listsUpdateStore.get()); } } logger->debug("Initializing PropertyLists for rel {} done.", tableID); @@ -219,8 +218,7 @@ void RelTable::initPropertyListsForRelTable( void RelTable::performOpOnListsWithUpdates( std::function opOnListsWithUpdates, std::function opIfHasUpdates) { - auto& listUpdatesPerDirection = - adjAndPropertyListsUpdateStore->getListUpdatesPerTablePerDirection(); + auto& listUpdatesPerDirection = listsUpdateStore->getListUpdatesPerTablePerDirection(); for (auto& relDirection : REL_DIRECTIONS) { for (auto& listUpdatesPerTable : listUpdatesPerDirection[relDirection]) { if (!listUpdatesPerTable.second.empty()) { @@ -232,7 +230,7 @@ void RelTable::performOpOnListsWithUpdates( } } } - if (adjAndPropertyListsUpdateStore->hasUpdates()) { + if (listsUpdateStore->hasUpdates()) { opIfHasUpdates(); } } diff --git a/src/storage/wal/include/wal_record.h b/src/storage/wal/include/wal_record.h index 7f6e253169..9b8e08f720 100644 --- a/src/storage/wal/include/wal_record.h +++ b/src/storage/wal/include/wal_record.h @@ -8,9 +8,8 @@ using namespace kuzu::common; namespace kuzu { namespace storage { enum ListType : uint8_t { - UNSTRUCTURED_NODE_PROPERTY_LISTS = 0, - ADJ_LISTS = 1, - REL_PROPERTY_LISTS = 2, + ADJ_LISTS = 0, + REL_PROPERTY_LISTS = 1, }; enum ListFileType : uint8_t { @@ -41,17 +40,6 @@ struct RelNodeTableAndDir { } }; -struct UnstructuredNodePropertyListsID { - table_id_t tableID; - UnstructuredNodePropertyListsID() = default; - - explicit UnstructuredNodePropertyListsID(table_id_t tableID) : tableID{tableID} {} - - inline bool operator==(const UnstructuredNodePropertyListsID& rhs) const { - return tableID == rhs.tableID; - } -}; - struct AdjListsID { RelNodeTableAndDir relNodeTableAndDir; @@ -83,18 +71,12 @@ struct ListFileID { ListType listType; ListFileType listFileType; union { - UnstructuredNodePropertyListsID unstructuredNodePropertyListsID; AdjListsID adjListsID; RelPropertyListID relPropertyListID; }; ListFileID() = default; - ListFileID( - ListFileType listFileType, UnstructuredNodePropertyListsID unstructuredNodePropertyListsID) - : listType{UNSTRUCTURED_NODE_PROPERTY_LISTS}, listFileType{listFileType}, - unstructuredNodePropertyListsID{unstructuredNodePropertyListsID} {} - ListFileID(ListFileType listFileType, AdjListsID adjListsID) : listType{ADJ_LISTS}, listFileType{listFileType}, adjListsID{adjListsID} {} @@ -107,9 +89,6 @@ struct ListFileID { return false; } switch (listType) { - case UNSTRUCTURED_NODE_PROPERTY_LISTS: { - return unstructuredNodePropertyListsID == rhs.unstructuredNodePropertyListsID; - } case ADJ_LISTS: { return adjListsID == rhs.adjListsID; } @@ -261,9 +240,6 @@ struct StorageStructureID { static StorageStructureID newNodeIndexID(table_id_t tableID); - static StorageStructureID newUnstructuredNodePropertyListsID( - table_id_t tableID, ListFileType listFileType); - static StorageStructureID newAdjListsID( table_id_t tableID, table_id_t srcNodeTableID, RelDirection dir, ListFileType listFileType); diff --git a/src/storage/wal/wal_record.cpp b/src/storage/wal/wal_record.cpp index 229969909e..e8f36ce8ee 100644 --- a/src/storage/wal/wal_record.cpp +++ b/src/storage/wal/wal_record.cpp @@ -21,15 +21,6 @@ StorageStructureID StorageStructureID::newNodeIndexID(table_id_t tableID) { return retVal; } -StorageStructureID StorageStructureID::newUnstructuredNodePropertyListsID( - table_id_t tableID, ListFileType listFileType) { - StorageStructureID retVal; - retVal.isOverflow = false; - retVal.storageStructureType = LISTS; - retVal.listFileID = ListFileID(listFileType, UnstructuredNodePropertyListsID(tableID)); - return retVal; -} - StorageStructureID StorageStructureID::newAdjListsID( table_id_t tableID, table_id_t srcNodeTableID, RelDirection dir, ListFileType listFileType) { StorageStructureID retVal; diff --git a/src/storage/wal_replayer.cpp b/src/storage/wal_replayer.cpp index cf81cffaa6..035dbe6c5a 100644 --- a/src/storage/wal_replayer.cpp +++ b/src/storage/wal_replayer.cpp @@ -167,12 +167,6 @@ void WALReplayer::replayWALRecord(WALRecord& walRecord) { } break; case LISTS: { switch (storageStructureID.listFileID.listType) { - case UNSTRUCTURED_NODE_PROPERTY_LISTS: { - UnstructuredPropertyLists* unstructuredPropertyLists = - storageManager->getNodesStore().getNodeUnstrPropertyLists( - storageStructureID.listFileID.unstructuredNodePropertyListsID.tableID); - diskOverflowFile = &unstructuredPropertyLists->diskOverflowFile; - } break; case REL_PROPERTY_LISTS: { auto& relNodeTableAndDir = storageStructureID.listFileID.relPropertyListID.relNodeTableAndDir; @@ -386,31 +380,6 @@ VersionedFileHandle* WALReplayer::getVersionedFileHandleIfWALVersionAndBMShouldB } case LISTS: { switch (storageStructureID.listFileID.listType) { - case UNSTRUCTURED_NODE_PROPERTY_LISTS: { - UnstructuredPropertyLists* unstructuredPropertyLists = - storageManager->getNodesStore().getNodeUnstrPropertyLists( - storageStructureID.listFileID.unstructuredNodePropertyListsID.tableID); - switch (storageStructureID.listFileID.listFileType) { - case BASE_LISTS: { - return storageStructureID.isOverflow ? - unstructuredPropertyLists->diskOverflowFile.getFileHandle() : - unstructuredPropertyLists->getFileHandle(); - } - default: - // Note: We do not clear the WAL version of updated pages (nor do we need to - // update the Buffer Manager versions of these pages) for METADATA and - // HEADERS. The reason is METADATA and HEADERs are stored in - // InMemoryDiskArrays, which bypass the BufferManager and during - // checkpointing Lists, those InMemDiskArray rely on the WAL version of - // these pages existing to update their own in-memory versions manually. If - // we clear the WAL versions in WALReplayer - // InMeMDiskArray::checkpointOrRollbackInMemoryIfNecessaryNoLock will omit - // refreshing their in memory copies of these updated pages. If we make the - // InMemDiskArrays also store their pages through the BufferManager, we - // should return the VersionedFileHandle's for METADATA and HEADERs as well. - return nullptr; - } - } case ADJ_LISTS: { auto& relNodeTableAndDir = storageStructureID.listFileID.adjListsID.relNodeTableAndDir; auto adjLists = storageManager->getRelsStore().getAdjLists(relNodeTableAndDir.dir, @@ -420,7 +389,6 @@ VersionedFileHandle* WALReplayer::getVersionedFileHandleIfWALVersionAndBMShouldB return adjLists->getFileHandle(); } default: - // See comments for unstructured_node_property_lists. return nullptr; } } @@ -438,7 +406,6 @@ VersionedFileHandle* WALReplayer::getVersionedFileHandleIfWALVersionAndBMShouldB relPropLists->getFileHandle(); } default: - // See comments for unstructured_node_property_lists. return nullptr; } } diff --git a/src/storage/wal_replayer_utils.cpp b/src/storage/wal_replayer_utils.cpp index cf8b7e1e4a..294fc37343 100644 --- a/src/storage/wal_replayer_utils.cpp +++ b/src/storage/wal_replayer_utils.cpp @@ -30,11 +30,6 @@ void WALReplayerUtils::createEmptyDBFilesForNewNodeTable( InMemColumnFactory::getInMemPropertyColumn(fName, property.dataType, 0 /* numNodes */) ->saveToFile(); } - auto unstrPropertyLists = - make_unique(StorageUtils::getNodeUnstrPropertyListsFName(directory, - nodeTableSchema->tableID, DBFileType::ORIGINAL), - 0 /* numNodes */); - initLargeListPageListsAndSaveToFile(unstrPropertyLists.get()); if (nodeTableSchema->getPrimaryKey().dataType.typeID == INT64) { auto pkIndex = make_unique>( StorageUtils::getNodeIndexFName( @@ -158,8 +153,6 @@ void WALReplayerUtils::fileOperationOnNodeFiles(NodeTableSchema* nodeTableSchema columnFileOperation(StorageUtils::getNodePropertyColumnFName( directory, nodeTableSchema->tableID, property.propertyID, DBFileType::ORIGINAL)); } - listFileOperation(StorageUtils::getNodeUnstrPropertyListsFName( - directory, nodeTableSchema->tableID, DBFileType::ORIGINAL)); columnFileOperation( StorageUtils::getNodeIndexFName(directory, nodeTableSchema->tableID, DBFileType::ORIGINAL)); } diff --git a/test/binder/binder_error_test.cpp b/test/binder/binder_error_test.cpp index 471fe65e5c..28127b798c 100644 --- a/test/binder/binder_error_test.cpp +++ b/test/binder/binder_error_test.cpp @@ -115,10 +115,9 @@ TEST_F(BinderErrorTest, BindIDArithmetic) { "Binder exception: Cannot match a built-in function for given function +(NODE_ID,INT64). " "Supported inputs " "are\n(INT64,INT64) -> INT64\n(INT64,DOUBLE) -> DOUBLE\n(DOUBLE,INT64) -> " - "DOUBLE\n(DOUBLE,DOUBLE) -> DOUBLE\n(UNSTRUCTURED,UNSTRUCTURED) -> " - "UNSTRUCTURED\n(DATE,INT64) -> DATE\n(INT64,DATE) -> DATE\n(DATE,INTERVAL) -> " - "DATE\n(INTERVAL,DATE) -> DATE\n(TIMESTAMP,INTERVAL) -> TIMESTAMP\n(INTERVAL,TIMESTAMP) -> " - "TIMESTAMP\n(INTERVAL,INTERVAL) -> INTERVAL\n"; + "DOUBLE\n(DOUBLE,DOUBLE) -> DOUBLE\n(DATE,INT64) -> DATE\n(INT64,DATE) -> " + "DATE\n(DATE,INTERVAL) -> DATE\n(INTERVAL,DATE) -> DATE\n(TIMESTAMP,INTERVAL) -> " + "TIMESTAMP\n(INTERVAL,TIMESTAMP) -> TIMESTAMP\n(INTERVAL,INTERVAL) -> INTERVAL\n"; auto input = "MATCH (a:person)-[e1:knows]->(b:person) WHERE id(a) + 1 < id(b) RETURN *;"; ASSERT_STREQ(expectedException.c_str(), getBindingError(input).c_str()); } @@ -128,10 +127,9 @@ TEST_F(BinderErrorTest, BindDateAddDate) { "Binder exception: Cannot match a built-in function for given function +(DATE,DATE). " "Supported inputs " "are\n(INT64,INT64) -> INT64\n(INT64,DOUBLE) -> DOUBLE\n(DOUBLE,INT64) -> " - "DOUBLE\n(DOUBLE,DOUBLE) -> DOUBLE\n(UNSTRUCTURED,UNSTRUCTURED) -> " - "UNSTRUCTURED\n(DATE,INT64) -> DATE\n(INT64,DATE) -> DATE\n(DATE,INTERVAL) -> " - "DATE\n(INTERVAL,DATE) -> DATE\n(TIMESTAMP,INTERVAL) -> TIMESTAMP\n(INTERVAL,TIMESTAMP) -> " - "TIMESTAMP\n(INTERVAL,INTERVAL) -> INTERVAL\n"; + "DOUBLE\n(DOUBLE,DOUBLE) -> DOUBLE\n(DATE,INT64) -> DATE\n(INT64,DATE) -> " + "DATE\n(DATE,INTERVAL) -> DATE\n(INTERVAL,DATE) -> DATE\n(TIMESTAMP,INTERVAL) -> " + "TIMESTAMP\n(INTERVAL,TIMESTAMP) -> TIMESTAMP\n(INTERVAL,INTERVAL) -> INTERVAL\n"; auto input = "MATCH (a:person) RETURN a.birthdate + date('2031-02-01');"; ASSERT_STREQ(expectedException.c_str(), getBindingError(input).c_str()); } @@ -141,10 +139,9 @@ TEST_F(BinderErrorTest, BindTimestampArithmetic) { "Binder exception: Cannot match a built-in function for given function +(TIMESTAMP,INT64). " "Supported inputs " "are\n(INT64,INT64) -> INT64\n(INT64,DOUBLE) -> DOUBLE\n(DOUBLE,INT64) -> " - "DOUBLE\n(DOUBLE,DOUBLE) -> DOUBLE\n(UNSTRUCTURED,UNSTRUCTURED) -> " - "UNSTRUCTURED\n(DATE,INT64) -> DATE\n(INT64,DATE) -> DATE\n(DATE,INTERVAL) -> " - "DATE\n(INTERVAL,DATE) -> DATE\n(TIMESTAMP,INTERVAL) -> TIMESTAMP\n(INTERVAL,TIMESTAMP) -> " - "TIMESTAMP\n(INTERVAL,INTERVAL) -> INTERVAL\n"; + "DOUBLE\n(DOUBLE,DOUBLE) -> DOUBLE\n(DATE,INT64) -> DATE\n(INT64,DATE) -> " + "DATE\n(DATE,INTERVAL) -> DATE\n(INTERVAL,DATE) -> DATE\n(TIMESTAMP,INTERVAL) -> " + "TIMESTAMP\n(INTERVAL,TIMESTAMP) -> TIMESTAMP\n(INTERVAL,INTERVAL) -> INTERVAL\n"; auto input = "MATCH (a:person) WHERE a.registerTime + 1 < 5 RETURN *;"; ASSERT_STREQ(expectedException.c_str(), getBindingError(input).c_str()); } @@ -154,10 +151,9 @@ TEST_F(BinderErrorTest, BindTimestampAddTimestamp) { "Binder exception: Cannot match a built-in function for given function " "+(TIMESTAMP,TIMESTAMP). Supported " "inputs are\n(INT64,INT64) -> INT64\n(INT64,DOUBLE) -> DOUBLE\n(DOUBLE,INT64) -> " - "DOUBLE\n(DOUBLE,DOUBLE) -> DOUBLE\n(UNSTRUCTURED,UNSTRUCTURED) -> " - "UNSTRUCTURED\n(DATE,INT64) -> DATE\n(INT64,DATE) -> DATE\n(DATE,INTERVAL) -> " - "DATE\n(INTERVAL,DATE) -> DATE\n(TIMESTAMP,INTERVAL) -> TIMESTAMP\n(INTERVAL,TIMESTAMP) -> " - "TIMESTAMP\n(INTERVAL,INTERVAL) -> INTERVAL\n"; + "DOUBLE\n(DOUBLE,DOUBLE) -> DOUBLE\n(DATE,INT64) -> DATE\n(INT64,DATE) -> " + "DATE\n(DATE,INTERVAL) -> DATE\n(INTERVAL,DATE) -> DATE\n(TIMESTAMP,INTERVAL) -> " + "TIMESTAMP\n(INTERVAL,TIMESTAMP) -> TIMESTAMP\n(INTERVAL,INTERVAL) -> INTERVAL\n"; auto input = "MATCH (a:person) RETURN a.registerTime + timestamp('2031-02-11 01:02:03');"; ASSERT_STREQ(expectedException.c_str(), getBindingError(input).c_str()); } @@ -409,7 +405,7 @@ TEST_F(BinderErrorTest, MaxNodeID) { "Supported inputs are\nDISTINCT (BOOL) -> BOOL\n(BOOL) -> BOOL\nDISTINCT (INT64) -> " "INT64\n(INT64) -> INT64\nDISTINCT (DOUBLE) -> DOUBLE\n(DOUBLE) -> DOUBLE\nDISTINCT " "(DATE) -> DATE\n(DATE) -> DATE\nDISTINCT (STRING) -> STRING\n(STRING) -> " - "STRING\nDISTINCT (UNSTRUCTURED) -> UNSTRUCTURED\n(UNSTRUCTURED) -> UNSTRUCTURED\n"; + "STRING\n"; auto input = "MATCH (a:person) RETURN MIN(a);"; ASSERT_STREQ(expectedException.c_str(), getBindingError(input).c_str()); } diff --git a/test/catalog/catalog_test.cpp b/test/catalog/catalog_test.cpp index 99b4fb07ca..f6b5423cc7 100644 --- a/test/catalog/catalog_test.cpp +++ b/test/catalog/catalog_test.cpp @@ -33,11 +33,9 @@ class CatalogTest : public testing::Test { personProperties.emplace_back("usedNames", DataType(LIST, make_unique(STRING))); personProperties.emplace_back("courseScoresPerTerm", DataType(LIST, make_unique(LIST, make_unique(INT64)))); - vector unstrPropertyNames{"unstrIntProp"}; PERSON_TABLE_ID = catalog->getReadOnlyVersion()->addNodeTableSchema( "person", 0 /* primaryKeyIdx */, move(personProperties)); auto nodeTableSchema = catalog->getReadOnlyVersion()->getNodeTableSchema(PERSON_TABLE_ID); - nodeTableSchema->addUnstructuredProperties(unstrPropertyNames); vector knowsProperties; knowsProperties.emplace_back("START_ID_TABLE", STRING); @@ -122,13 +120,6 @@ TEST_F(CatalogTest, AddTablesTest) { ->getNodeProperty(PERSON_TABLE_ID, "courseScoresPerTerm") .dataType.childType->childType->typeID, INT64); - ASSERT_EQ(catalog->getReadOnlyVersion() - ->getUnstrPropertiesNameToIdMap(PERSON_TABLE_ID) - .at("unstrIntProp"), - 0); - ASSERT_EQ( - catalog->getReadOnlyVersion()->getAllNodeProperties(PERSON_TABLE_ID)[13].dataType.typeID, - UNSTRUCTURED); ASSERT_EQ(catalog->getReadOnlyVersion()->getRelProperty(KNOWS_TABLE_ID, "date").dataType.typeID, DATE); ASSERT_EQ( @@ -154,8 +145,4 @@ TEST_F(CatalogTest, SaveAndReadTest) { ASSERT_FALSE(catalog->getReadOnlyVersion()->containNodeTable("organisation")); ASSERT_TRUE(catalog->getReadOnlyVersion()->containRelTable("knows")); ASSERT_FALSE(catalog->getReadOnlyVersion()->containRelTable("likes")); - ASSERT_EQ(catalog->getReadOnlyVersion() - ->getUnstrPropertiesNameToIdMap(PERSON_TABLE_ID) - .at("unstrIntProp"), - 0); } diff --git a/test/common/vector/operations/vector_arithmetic_operations_test.cpp b/test/common/vector/operations/vector_arithmetic_operations_test.cpp index b14e474074..5766d910e5 100644 --- a/test/common/vector/operations/vector_arithmetic_operations_test.cpp +++ b/test/common/vector/operations/vector_arithmetic_operations_test.cpp @@ -3,7 +3,6 @@ #include "src/common/include/data_chunk/data_chunk.h" #include "src/common/include/type_utils.h" -#include "src/common/types/include/value.h" #include "src/function/arithmetic/operations/include/arithmetic_operations.h" #include "src/function/include/binary_operation_executor.h" #include "src/function/include/unary_operation_executor.h" @@ -46,16 +45,6 @@ class Int64ArithmeticOperandsInDifferentDataChunksTest : public OperandsInDiffer } }; -class UnstructuredArithmeticOperandsInSameDataChunkTest : public OperandsInSameDataChunk, - public Test { - -public: - DataTypeID getDataTypeOfOperands() override { return UNSTRUCTURED; } - DataTypeID getDataTypeOfResultVector() override { return UNSTRUCTURED; } - - void SetUp() override { initDataChunk(); } -}; - TEST_F(Int64ArithmeticOperandsInSameDataChunkTest, Int64UnaryAndBinaryAllUnflatNoNulls) { auto lVector = vector1; auto rVector = vector2; @@ -215,89 +204,3 @@ TEST_F(Int64ArithmeticOperandsInDifferentDataChunksTest, Int64BinaryOneFlatOneUn } ASSERT_FALSE(result->hasNoNullsGuarantee()); } - -TEST_F(UnstructuredArithmeticOperandsInSameDataChunkTest, UnstructuredInt64Test) { - auto lVector = vector1; - auto rVector = vector2; - - // Fill values before the comparison. - for (int i = 0; i < NUM_TUPLES; i++) { - lVector->setValue(i, Value((int64_t)i)); - rVector->setValue(i, Value((int64_t)110 - i)); - } - - UnaryOperationExecutor::execute(*lVector, *result); - for (int i = 0; i < NUM_TUPLES; i++) { - ASSERT_EQ(result->getValue(i).val.int64Val, -i); - } - - BinaryOperationExecutor::executeSwitch(*lVector, *rVector, *result); - for (int i = 0; i < NUM_TUPLES; i++) { - ASSERT_EQ(result->getValue(i).val.int64Val, 110); - } - - BinaryOperationExecutor::executeSwitch(*lVector, *rVector, *result); - for (int i = 0; i < NUM_TUPLES; i++) { - ASSERT_EQ(result->getValue(i).val.int64Val, 2 * i - 110); - } - - BinaryOperationExecutor::executeSwitch(*lVector, *rVector, *result); - for (int i = 0; i < NUM_TUPLES; i++) { - ASSERT_EQ(result->getValue(i).val.int64Val, i * (110 - i)); - } - - BinaryOperationExecutor::executeSwitch(*lVector, *rVector, *result); - for (int i = 0; i < NUM_TUPLES; i++) { - ASSERT_EQ(result->getValue(i).val.int64Val, i / (110 - i)); - } - - BinaryOperationExecutor::executeSwitch(*lVector, *rVector, *result); - for (int i = 0; i < NUM_TUPLES; i++) { - ASSERT_EQ(result->getValue(i).val.int64Val, i % (110 - i)); - } -} - -TEST_F(UnstructuredArithmeticOperandsInSameDataChunkTest, UnstructuredInt32AndDoubleTest) { - auto lVector = vector1; - auto rVector = vector2; - - // Fill values before the comparison. - for (int i = 0; i < NUM_TUPLES; i++) { - lVector->setValue(i, Value((double)i)); - rVector->setValue(i, Value((int64_t)(110 - i))); - } - - UnaryOperationExecutor::execute(*lVector, *result); - for (int i = 0; i < NUM_TUPLES; i++) { - ASSERT_EQ(result->getValue(i).val.doubleVal, (double)-i); - } - - BinaryOperationExecutor::executeSwitch(*lVector, *rVector, *result); - for (int i = 0; i < NUM_TUPLES; i++) { - ASSERT_EQ(result->getValue(i).val.doubleVal, (double)110); - } - - BinaryOperationExecutor::executeSwitch(*lVector, *rVector, *result); - for (int i = 0; i < NUM_TUPLES; i++) { - ASSERT_EQ(result->getValue(i).val.doubleVal, (double)(2 * i - 110)); - } - - BinaryOperationExecutor::executeSwitch(*lVector, *rVector, *result); - for (int i = 0; i < NUM_TUPLES; i++) { - ASSERT_EQ(result->getValue(i).val.doubleVal, (double)(i * (110 - i))); - } - - BinaryOperationExecutor::executeSwitch(*lVector, *rVector, *result); - for (int i = 0; i < NUM_TUPLES; i++) { - ASSERT_EQ(result->getValue(i).val.doubleVal, (double)i / (110 - i)); - } -} diff --git a/test/copy_csv/copy_csv_test.cpp b/test/copy_csv/copy_csv_test.cpp index 3bb4b75664..2bc66f4e1f 100644 --- a/test/copy_csv/copy_csv_test.cpp +++ b/test/copy_csv/copy_csv_test.cpp @@ -1,7 +1,6 @@ #include "test/test_utility/include/test_helper.h" #include "src/common/include/csv_reader/csv_reader.h" -#include "src/storage/storage_structure/include/lists/unstructured_property_lists.h" using namespace std; using namespace kuzu::common; @@ -42,55 +41,6 @@ class CopyCSVReadLists5BytesPerEdgeTest : public InMemoryDBTest { string getInputCSVDir() override { return "dataset/read-list-tests/5-bytes-per-edge/"; } }; -class CopyCSVEmptyListsTest : public InMemoryDBTest { -public: - string getInputCSVDir() override { return "dataset/copy-csv-empty-lists-test/"; } - // The test is here because accessing protected/private members of Lists and ListsMetadata - // requires the code to be inside CopyCSVEmptyListsTest class, which is a friend class to - // Lists and ListsMetadata. - void testCopyCSVEmptyListsTest() { - auto catalog = getCatalog(*database); - table_id_t pTableID = catalog->getReadOnlyVersion()->getNodeTableIDFromName("person"); - auto unstrPropLists = - getStorageManager(*database)->getNodesStore().getNodeUnstrPropertyLists(pTableID); - // The vPerson table has 4 chunks (2000/512) and only nodeOffset=1030, which is in chunk - // idx 2 has a non-empty list. So chunk ids 0, 1, and 3's chunkToPageListHeadIdxMap need to - // point to UINT32_MAX (representing null), while chunk 2 should point to 0. - uint64_t numChunks = 4; - EXPECT_EQ( - numChunks, unstrPropLists->metadata.chunkToPageListHeadIdxMap->header.numElements); - for (int chunkIdx = 0; chunkIdx < numChunks; chunkIdx++) { - EXPECT_EQ(chunkIdx == 2 ? 0 : UINT32_MAX, - (*unstrPropLists->metadata.chunkToPageListHeadIdxMap)[chunkIdx]); - } - // Check chunk idx 2's pageLists. - EXPECT_EQ(storage::ListsMetadataConfig::PAGE_LIST_GROUP_WITH_NEXT_PTR_SIZE, - unstrPropLists->metadata.pageLists->header.numElements); - for (int chunkPageListIdx = 0; - chunkPageListIdx < storage::ListsMetadataConfig::PAGE_LIST_GROUP_WITH_NEXT_PTR_SIZE; - ++chunkPageListIdx) { - if (chunkPageListIdx == 0) { - EXPECT_NE(PAGE_IDX_MAX, (*unstrPropLists->metadata.pageLists)[chunkPageListIdx]); - } else { - EXPECT_EQ(PAGE_IDX_MAX, (*unstrPropLists->metadata.pageLists)[chunkPageListIdx]); - } - } - // There are no large lists so largeListIdxToPageListHeadIdxMap should have 0 elements. - EXPECT_EQ(0, unstrPropLists->metadata.largeListIdxToPageListHeadIdxMap->header.numElements); - uint64_t maxPersonOffset = getStorageManager(*database) - ->getNodesStore() - .getNodesStatisticsAndDeletedIDs() - .getNodeStatisticsAndDeletedIDs(pTableID) - ->getMaxNodeOffset(); - EXPECT_EQ(1999, maxPersonOffset); - for (node_offset_t nodeOffset = 0; nodeOffset < maxPersonOffset; ++nodeOffset) { - auto unstructuredProperties = - unstrPropLists->readUnstructuredPropertiesOfNode(nodeOffset); - EXPECT_EQ((1030 == nodeOffset) ? 1 : 0, unstructuredProperties->size()); - } - } -}; - class CopyCSVLongStringTest : public InMemoryDBTest { string getInputCSVDir() override { return "dataset/copy-csv-fault-tests/long-string/"; } }; @@ -162,45 +112,6 @@ TEST_F(CopyNodeCSVPropertyTest, NodeStructuredStringPropertyTest) { } } -// TODO(Semih): Uncomment when enabling ad-hoc properties -// TEST_F(CopyNodeCSVPropertyTest, NodeUnstructuredPropertyTest) { -// auto graph = database->getStorageManager(); -// auto& catalog = *database->getCatalog(); -// auto tableID = catalog.getReadOnlyVersion()->getNodeTableIDFromName("person"); -// auto lists = reinterpret_cast( -// graph->getNodesStore().getNodeUnstrPropertyLists(tableID)); -// auto& propertyNameToIdMap = -// catalog.getReadOnlyVersion()->getUnstrPropertiesNameToIdMap(tableID); -// for (int i = 0; i < 1000; ++i) { -// auto propertiesMap = lists->readUnstructuredPropertiesOfNode(i); -// if (i == 300 || i == 400 || i == 500) { -// EXPECT_EQ(i * 4, propertiesMap->size()); -// for (int j = 0; j < i; ++j) { -// EXPECT_EQ("strPropVal" + to_string(j), -// propertiesMap->at(propertyNameToIdMap.at("strPropKey" + -// to_string(j))).strVal); -// EXPECT_EQ( -// j, propertiesMap->at(propertyNameToIdMap.at("int64PropKey" + to_string(j))) -// .val.int64Val); -// EXPECT_EQ(j * 1.0, -// propertiesMap->at(propertyNameToIdMap.at("doublePropKey" + to_string(j))) -// .val.doubleVal); -// EXPECT_FALSE(propertiesMap->at(propertyNameToIdMap.at("boolPropKey" + -// to_string(j))) -// .val.booleanVal); -// } -// } else { -// EXPECT_EQ(4, propertiesMap->size()); -// EXPECT_EQ( -// "strPropVal1", propertiesMap->at(propertyNameToIdMap.at("strPropKey1")).strVal); -// EXPECT_EQ(1, propertiesMap->at(propertyNameToIdMap.at("int64PropKey1")).val.int64Val); -// EXPECT_EQ( -// 1.0, propertiesMap->at(propertyNameToIdMap.at("doublePropKey1")).val.doubleVal); -// EXPECT_TRUE(propertiesMap->at(propertyNameToIdMap.at("boolPropKey1")).val.booleanVal); -// } -// } -//} - void verifyP0ToP5999(KnowsTablePTablePKnowsLists& knowsTablePTablePKnowsLists) { // p0 has 5001 fwd edges to p0...p5000 node_offset_t p0Offset = 0; @@ -327,11 +238,6 @@ TEST_F(CopyCSVSpecialCharTest, CopySpecialCharsCsv) { EXPECT_EQ("DEsW#ork", col->readValue(2).strVal); } -// TODO(Semih): Uncomment when enabling ad-hoc properties -// TEST_F(CopyCSVEmptyListsTest, CopyCSVEmptyLists) { -// testCopyCSVEmptyListsTest(); -//} - TEST_F(CopyCSVLongStringTest, LongStringError) { auto storageManager = getStorageManager(*database); auto catalog = getCatalog(*database); diff --git a/test/expression_evaluator/aggregate_expression_evaluation_test.cpp b/test/expression_evaluator/aggregate_expression_evaluation_test.cpp index 4e20bd9178..7440d92d67 100644 --- a/test/expression_evaluator/aggregate_expression_evaluation_test.cpp +++ b/test/expression_evaluator/aggregate_expression_evaluation_test.cpp @@ -23,25 +23,21 @@ class AggrExpressionEvaluatorTest : public Test { int64ValueVector = make_shared(INT64, memoryManager.get()); doubleValueVector = make_shared(DOUBLE, memoryManager.get()); stringValueVector = make_shared(STRING, memoryManager.get()); - unStrValueVector = make_shared(UNSTRUCTURED, memoryManager.get()); - dataChunk = make_shared(4); + dataChunk = make_shared(3); for (auto i = 0u; i < 100; i++) { int64ValueVector->setValue(i, (int64_t)i); doubleValueVector->setValue(i, (double_t)(i * 1.5)); - unStrValueVector->setValue(i, Value((int64_t)i)); stringValueVector->setValue(i, to_string(i)); if (i % 2 == 0) { int64ValueVector->setNull(i, true /* isNull */); doubleValueVector->setNull(i, true /* isNull */); stringValueVector->setNull(i, true /* isNull */); - unStrValueVector->setNull(i, true /* isNull */); } } dataChunk->state->selVector->selectedSize = 100; dataChunk->insert(0, int64ValueVector); dataChunk->insert(1, doubleValueVector); dataChunk->insert(2, stringValueVector); - dataChunk->insert(3, unStrValueVector); resultSet = make_shared(1); resultSet->insert(0, dataChunk); } @@ -52,7 +48,6 @@ class AggrExpressionEvaluatorTest : public Test { shared_ptr int64ValueVector; shared_ptr doubleValueVector; shared_ptr stringValueVector; - shared_ptr unStrValueVector; shared_ptr dataChunk; shared_ptr resultSet; }; @@ -134,28 +129,6 @@ TEST_F(AggrExpressionEvaluatorTest, DOUBLESumTest) { ASSERT_EQ(sumState->sum, sumValue); } -TEST_F(AggrExpressionEvaluatorTest, UNSTRSumTest) { - auto sumFunction = AggregateFunctionUtil::getSumFunction(DataType(UNSTRUCTURED), false); - auto sumState = ku_static_unique_pointer_cast::SumState>( - sumFunction->createInitialNullAggregateState()); - sumFunction->updateAllState( - (uint8_t*)sumState.get(), unStrValueVector.get(), 1 /* multiplicity */); - auto otherSumState = - ku_static_unique_pointer_cast::SumState>( - sumFunction->createInitialNullAggregateState()); - otherSumState->sum = Value((int64_t)10); - otherSumState->isNull = false; - sumFunction->combineState((uint8_t*)sumState.get(), (uint8_t*)otherSumState.get()); - sumFunction->finalizeState((uint8_t*)sumState.get()); - auto sumValue = otherSumState->sum.val.int64Val; - for (auto i = 0u; i < 100; i++) { - if (i % 2 != 0) { - sumValue += i; - } - } - ASSERT_EQ(sumState->sum.val.int64Val, sumValue); -} - TEST_F(AggrExpressionEvaluatorTest, INT64AvgTest) { auto avgFunction = AggregateFunctionUtil::getAvgFunction(DataType(INT64), false); auto avgState = ku_static_unique_pointer_cast::AvgState>( @@ -255,23 +228,6 @@ TEST_F(AggrExpressionEvaluatorTest, STRINGMaxTest) { ASSERT_EQ(maxState->val.getAsString(), "99"); } -TEST_F(AggrExpressionEvaluatorTest, UNSTRMaxTest) { - auto maxFunction = AggregateFunctionUtil::getMaxFunction(DataType(UNSTRUCTURED), false); - auto maxState = - ku_static_unique_pointer_cast::MinMaxState>( - maxFunction->createInitialNullAggregateState()); - maxFunction->updateAllState( - (uint8_t*)maxState.get(), unStrValueVector.get(), 1 /* multiplicity */); - auto otherMaxState = - ku_static_unique_pointer_cast::MinMaxState>( - maxFunction->createInitialNullAggregateState()); - otherMaxState->val = Value((int64_t)101); - otherMaxState->isNull = false; - maxFunction->combineState((uint8_t*)maxState.get(), (uint8_t*)otherMaxState.get()); - maxFunction->finalizeState((uint8_t*)maxState.get()); - ASSERT_EQ(maxState->val.val.int64Val, 101); -} - TEST_F(AggrExpressionEvaluatorTest, INT64MinTest) { auto minFunction = AggregateFunctionUtil::getMinFunction(DataType(INT64), false); auto minState = diff --git a/test/main/exception_test.cpp b/test/main/exception_test.cpp index a85d7450ea..eb613ba8ba 100644 --- a/test/main/exception_test.cpp +++ b/test/main/exception_test.cpp @@ -38,9 +38,8 @@ TEST_F(ApiTest, Exception) { auto function_error = "Binder exception: Cannot match a built-in function for given function +(INT64,STRING). " "Supported inputs are\n(INT64,INT64) -> INT64\n(INT64,DOUBLE) -> DOUBLE\n(DOUBLE,INT64) " - "-> DOUBLE\n(DOUBLE,DOUBLE) -> DOUBLE\n(UNSTRUCTURED,UNSTRUCTURED) -> " - "UNSTRUCTURED\n(DATE,INT64) -> DATE\n(INT64,DATE) -> DATE\n(DATE,INTERVAL) -> " - "DATE\n(INTERVAL,DATE) -> DATE\n(TIMESTAMP,INTERVAL) -> " + "-> DOUBLE\n(DOUBLE,DOUBLE) -> DOUBLE\n(DATE,INT64) -> DATE\n(INT64,DATE) -> " + "DATE\n(DATE,INTERVAL) -> DATE\n(INTERVAL,DATE) -> DATE\n(TIMESTAMP,INTERVAL) -> " "TIMESTAMP\n(INTERVAL,TIMESTAMP) -> TIMESTAMP\n(INTERVAL,INTERVAL) -> INTERVAL\n"; result = conn->query(function_error_query); ASSERT_FALSE(result->isSuccess()); @@ -48,19 +47,4 @@ TEST_F(ApiTest, Exception) { preparedStatement = conn->prepare(function_error_query); ASSERT_FALSE(preparedStatement->isSuccess()); ASSERT_STREQ(preparedStatement->getErrorMessage().c_str(), function_error); - - // TODO(Semih): Uncomment when enabling ad-hoc properties - // auto runtime_error_query = "MATCH (a:person) RETURN a.unstrDateProp + 'hh'"; - // auto runtime_error = "Runtime exception: Cannot add `DATE` and `STRING`"; - // result = conn->query(runtime_error_query); - // ASSERT_FALSE(result->isSuccess()); - // ASSERT_STREQ(result->getErrorMessage().c_str(), runtime_error); - // - // // test fetching result when query fails - // try { - // result->hasNext(); - // FAIL(); - // } catch (Exception& exception) { - // ASSERT_STREQ("Runtime exception: Cannot add `DATE` and `STRING`", exception.what()); - // } catch (std::exception& exception) { FAIL(); } } diff --git a/test/processor/physical_plan/operator/orderBy/key_block_merger_test.cpp b/test/processor/physical_plan/operator/orderBy/key_block_merger_test.cpp index 99ff9d1954..5bc8bde2a8 100644 --- a/test/processor/physical_plan/operator/orderBy/key_block_merger_test.cpp +++ b/test/processor/physical_plan/operator/orderBy/key_block_merger_test.cpp @@ -109,19 +109,18 @@ class KeyBlockMergerTest : public Test { auto orderByKeyEncoder2 = prepareSingleOrderByColEncoder(rightSortingData, rightNullMasks, dataTypeID, isAsc, 1 /* ftIdx */, hasPayLoadCol, factorizedTables, dataChunk1); - vector stringAndUnstructuredKeyColInfo; + vector strKeyColsInfo; if (hasPayLoadCol) { - stringAndUnstructuredKeyColInfo.emplace_back( - StringAndUnstructuredKeyColInfo(8 /* colOffsetInFT */, - 0 /* colOffsetInEncodedKeyBlock */, isAsc, true /* isStrCol */)); - } else if constexpr (is_same::value || is_same::value) { - stringAndUnstructuredKeyColInfo.emplace_back(StringAndUnstructuredKeyColInfo( - 0 /* colOffsetInFT */, 0 /* colOffsetInEncodedKeyBlock */, isAsc, - is_same::value /* isStrCol */)); + strKeyColsInfo.emplace_back(StrKeyColInfo(8 /* colOffsetInFT */, + 0 /* colOffsetInEncodedKeyBlock */, isAsc, true /* isStrCol */)); + } else if constexpr (is_same::value) { + strKeyColsInfo.emplace_back( + StrKeyColInfo(0 /* colOffsetInFT */, 0 /* colOffsetInEncodedKeyBlock */, isAsc, + is_same::value /* isStrCol */)); } - KeyBlockMerger keyBlockMerger = KeyBlockMerger(factorizedTables, - stringAndUnstructuredKeyColInfo, orderByKeyEncoder1.getNumBytesPerTuple()); + KeyBlockMerger keyBlockMerger = KeyBlockMerger( + factorizedTables, strKeyColsInfo, orderByKeyEncoder1.getNumBytesPerTuple()); auto numBytesPerEntry = orderByKeyEncoder1.getNumBytesPerTuple(); auto resultKeyBlock = make_shared(numBytesPerEntry, @@ -249,20 +248,20 @@ class KeyBlockMergerTest : public Test { vector expectedBlockOffsetOrder = {0, 0, 1, 1, 2, 2, 3}; vector expectedFactorizedTableIdxOrder = {4, 5, 5, 4, 5, 4, 4}; - vector stringAndUnstructuredKeyColInfo; + vector strKeyColsInfo; if (hasStrCol) { - stringAndUnstructuredKeyColInfo.emplace_back(StringAndUnstructuredKeyColInfo( - tableSchema->getColOffset(3 /* colIdx */) /* colOffsetInFT */, - Types::getDataTypeSize(INT64) + Types::getDataTypeSize(DOUBLE) + - Types::getDataTypeSize(TIMESTAMP) + 3, - true /* isAscOrder */, true /* isStrCol */)); + strKeyColsInfo.emplace_back( + StrKeyColInfo(tableSchema->getColOffset(3 /* colIdx */) /* colOffsetInFT */, + Types::getDataTypeSize(INT64) + Types::getDataTypeSize(DOUBLE) + + Types::getDataTypeSize(TIMESTAMP) + 3, + true /* isAscOrder */, true /* isStrCol */)); expectedBlockOffsetOrder = {0, 0, 1, 1, 2, 2, 3}; expectedFactorizedTableIdxOrder = {4, 5, 4, 5, 4, 5, 4}; } auto numBytesPerEntry = orderByKeyEncoder1.getNumBytesPerTuple(); - KeyBlockMerger keyBlockMerger = KeyBlockMerger(factorizedTables, - stringAndUnstructuredKeyColInfo, orderByKeyEncoder1.getNumBytesPerTuple()); + KeyBlockMerger keyBlockMerger = KeyBlockMerger( + factorizedTables, strKeyColsInfo, orderByKeyEncoder1.getNumBytesPerTuple()); auto resultKeyBlock = make_shared(numBytesPerEntry, 7ul, memoryManager.get()); auto keyBlockMergeTask = make_shared( @@ -390,20 +389,6 @@ TEST_F(KeyBlockMergerTest, singleOrderByColInt64LargeNumTuplesTest) { false /* hasPayLoadCol */); } -TEST_F(KeyBlockMergerTest, singleOrderByColUnstrTest) { - vector leftSortingData = { - Value(int64_t(52)), Value(59.4251), Value(int64_t(69)), Value(int64_t(0)) /* NULL */}; - vector rightSortingData = {Value(52.0004), Value(int64_t(59)), Value(68.98), - Value(int64_t(70)), Value(int64_t(0)) /* NULL */}; - vector leftNullMasks = {false, false, false, true}; - vector rightNullMasks = {false, false, false, false, true}; - vector expectedBlockOffsetOrder = {0, 0, 1, 1, 2, 2, 3, 3, 4}; - vector expectedFactorizedTableIdxOrder = {0, 1, 1, 0, 1, 0, 1, 0, 1}; - singleOrderByColMergeTest(leftSortingData, leftNullMasks, rightSortingData, rightNullMasks, - expectedBlockOffsetOrder, expectedFactorizedTableIdxOrder, UNSTRUCTURED, true /* isAsc */, - false /* hasPayLoadCol */); -} - TEST_F(KeyBlockMergerTest, singleOrderByColStringTest) { vector leftSortingData = { "" /* NULL */, "tiny str", "long string", "common prefix string3", "common prefix string1"}; @@ -480,21 +465,18 @@ TEST_F(KeyBlockMergerTest, multipleStrKeyColsTest) { auto orderByKeyEncoder3 = prepareMultipleStrKeyColsEncoder(dataChunk3, strValues3, 2 /* ftIdx */, factorizedTables); - vector stringAndUnstructuredKeyColInfo = { - StringAndUnstructuredKeyColInfo( - factorizedTables[0]->getTableSchema()->getColOffset(0 /* colIdx */), + vector strKeyColsInfo = { + StrKeyColInfo(factorizedTables[0]->getTableSchema()->getColOffset(0 /* colIdx */), 0 /* colOffsetInEncodedKeyBlock */, true /* isAscOrder */, true /* isStrCol */), - StringAndUnstructuredKeyColInfo( - factorizedTables[0]->getTableSchema()->getColOffset(1 /* colIdx */), + StrKeyColInfo(factorizedTables[0]->getTableSchema()->getColOffset(1 /* colIdx */), orderByKeyEncoder1.getEncodingSize(DataType(STRING)), true /* isAscOrder */, true /* isStrCol */), - StringAndUnstructuredKeyColInfo( - factorizedTables[0]->getTableSchema()->getColOffset(3 /* colIdx */), + StrKeyColInfo(factorizedTables[0]->getTableSchema()->getColOffset(3 /* colIdx */), orderByKeyEncoder1.getEncodingSize(DataType(STRING)) * 2, true /* isAscOrder */, true /* isStrCol */)}; - KeyBlockMerger keyBlockMerger = KeyBlockMerger(factorizedTables, - stringAndUnstructuredKeyColInfo, orderByKeyEncoder1.getNumBytesPerTuple()); + KeyBlockMerger keyBlockMerger = + KeyBlockMerger(factorizedTables, strKeyColsInfo, orderByKeyEncoder1.getNumBytesPerTuple()); auto numBytesPerEntry = orderByKeyEncoder1.getNumBytesPerTuple(); auto resultKeyBlock = make_shared(numBytesPerEntry, 7ul, memoryManager.get()); diff --git a/test/processor/physical_plan/operator/orderBy/order_by_key_encoder_test.cpp b/test/processor/physical_plan/operator/orderBy/order_by_key_encoder_test.cpp index 7002561dd2..c89e37eaa6 100644 --- a/test/processor/physical_plan/operator/orderBy/order_by_key_encoder_test.cpp +++ b/test/processor/physical_plan/operator/orderBy/order_by_key_encoder_test.cpp @@ -4,7 +4,6 @@ #include "src/common/include/configs.h" #include "src/common/include/data_chunk/data_chunk.h" -#include "src/common/types/include/value.h" #include "src/processor/operator/order_by/include/order_by_key_encoder.h" using ::testing::Test; @@ -556,41 +555,6 @@ TEST_F(OrderByKeyEncoderTest, singleOrderByColDoubleUnflatTest) { checkTupleIdxAndFactorizedTableIdx(5, keyBlockPtr); } -TEST_F(OrderByKeyEncoderTest, singleOrderByColUnstrUnflatTest) { - // For unstr datatype, orderByEncoder should ignore the actual datatype and simply encode them - // as 0. - shared_ptr dataChunk = make_shared(1); - dataChunk->state->selVector->selectedSize = 5; - shared_ptr unstrValueVector = - make_shared(UNSTRUCTURED, memoryManager.get()); - unstrValueVector->setValue(0, Value(38.22)); - unstrValueVector->setNull(1, true); - unstrValueVector->setValue(2, Value(Timestamp::FromCString("1962-04-07 11:12:35.123", - strlen("1962-04-07 11:12:35.123")))); - unstrValueVector->setValue(3, Value(int64_t(-97874221))); - unstrValueVector->setValue(4, Value(string("test str"))); - dataChunk->insert(0, unstrValueVector); - vector> valueVectors; - valueVectors.emplace_back(unstrValueVector); - auto isAscOrder = vector(1, true); - auto orderByKeyEncoder = OrderByKeyEncoder( - valueVectors, isAscOrder, memoryManager.get(), ftIdx, numTuplesPerBlockInFT); - orderByKeyEncoder.encodeKeys(); - uint8_t* keyBlockPtr = orderByKeyEncoder.getKeyBlocks()[0]->getData(); - - // For unstr values, we only need to check the nullByte and whether the encoded value is 0. - for (auto i = 0u; i < unstrValueVector->state->selVector->selectedSize; i++) { - if (i == 1) { - // Note: the 2nd value is a null. - checkNullVal(keyBlockPtr, UNSTRUCTURED, isAscOrder[0]); - } else { - checkNonNullFlag(keyBlockPtr, isAscOrder[0]); - ASSERT_EQ(*(keyBlockPtr++), 0x00); - } - checkTupleIdxAndFactorizedTableIdx(i, keyBlockPtr); - } -} - TEST_F(OrderByKeyEncoderTest, largeNumBytesPerTupleErrorTest) { // If the numBytesPerTuple is larger than 4096 bytes, the encoder will raise an encoding // exception we need ((LARGE_PAGE_SIZE - 8) / 9 + 1 number of columns(with datatype INT) to diff --git a/test/processor/physical_plan/operator/orderBy/radix_sort_test.cpp b/test/processor/physical_plan/operator/orderBy/radix_sort_test.cpp index 4c805a5319..297c35fd01 100644 --- a/test/processor/physical_plan/operator/orderBy/radix_sort_test.cpp +++ b/test/processor/physical_plan/operator/orderBy/radix_sort_test.cpp @@ -7,7 +7,6 @@ #include "src/common/include/assert.h" #include "src/common/include/configs.h" #include "src/common/include/data_chunk/data_chunk.h" -#include "src/common/types/include/value.h" #include "src/processor/operator/order_by/include/order_by_key_encoder.h" #include "src/processor/operator/order_by/include/radix_sort.h" @@ -82,7 +81,7 @@ class RadixSortTest : public Test { unique_ptr tableSchema = make_unique(); tableSchema->appendColumn(make_unique( false /* isUnflat */, 0 /* dataChunkPos */, Types::getDataTypeSize(dataTypeID))); - vector stringAndUnstructuredKeyColInfo; + vector strKeyColsInfo; if (hasPayLoadCol) { // Create a new payloadValueVector for the payload column. @@ -96,15 +95,15 @@ class RadixSortTest : public Test { allVectors.insert(allVectors.begin(), payloadValueVector); tableSchema->appendColumn(make_unique( false /* isUnflat */, 0 /* dataChunkPos */, Types::getDataTypeSize(dataTypeID))); - stringAndUnstructuredKeyColInfo.emplace_back( - StringAndUnstructuredKeyColInfo(tableSchema->getColOffset(1) /* colOffsetInFT */, + strKeyColsInfo.emplace_back( + StrKeyColInfo(tableSchema->getColOffset(1) /* colOffsetInFT */, 0 /* colOffsetInEncodedKeyBlock */, isAsc, is_same::value /* isStrCol */)); - } else if constexpr (is_same::value || is_same::value) { - // If this is a string or unstructured column and has no payload column, then the + } else if constexpr (is_same::value) { + // If this is a string column and has no payload column, then the // factorizedTable offset is just 0. - stringAndUnstructuredKeyColInfo.emplace_back( - StringAndUnstructuredKeyColInfo(tableSchema->getColOffset(0) /* colOffsetInFT */, + strKeyColsInfo.emplace_back( + StrKeyColInfo(tableSchema->getColOffset(0) /* colOffsetInFT */, 0 /* colOffsetInEncodedKeyBlock */, isAsc, is_same::value /* isStrCol */)); } @@ -116,8 +115,8 @@ class RadixSortTest : public Test { factorizedTableIdx, numTuplesPerBlockInFT); orderByKeyEncoder.encodeKeys(); - RadixSort radixSort = RadixSort(memoryManager.get(), factorizedTable, orderByKeyEncoder, - stringAndUnstructuredKeyColInfo); + RadixSort radixSort = + RadixSort(memoryManager.get(), factorizedTable, orderByKeyEncoder, strKeyColsInfo); sortAllKeyBlocks(orderByKeyEncoder, radixSort); checkTupleIdxesAndFactorizedTableIdxes(orderByKeyEncoder.getKeyBlocks()[0]->getData(), @@ -130,14 +129,13 @@ class RadixSortTest : public Test { auto mockDataChunk = make_shared(stringValues.size()); mockDataChunk->state->currIdx = 0; unique_ptr tableSchema = make_unique(); - vector stringAndUnstructuredKeyColInfo; + vector strKeyColsInfo; for (auto i = 0; i < stringValues.size(); i++) { auto stringValueVector = make_shared(STRING, memoryManager.get()); tableSchema->appendColumn(make_unique( false /* isUnflat */, 0 /* dataChunkPos */, sizeof(ku_string_t))); - stringAndUnstructuredKeyColInfo.push_back(StringAndUnstructuredKeyColInfo( - tableSchema->getColOffset(stringAndUnstructuredKeyColInfo.size()), - stringAndUnstructuredKeyColInfo.size() * + strKeyColsInfo.push_back(StrKeyColInfo(tableSchema->getColOffset(strKeyColsInfo.size()), + strKeyColsInfo.size() * OrderByKeyEncoder::getEncodingSize(stringValueVector->dataType), isAscOrder[i], true /* isStrCol */)); mockDataChunk->insert(i, stringValueVector); @@ -157,8 +155,8 @@ class RadixSortTest : public Test { mockDataChunk->state->currIdx++; } - auto radixSort = RadixSort(memoryManager.get(), factorizedTable, orderByKeyEncoder, - stringAndUnstructuredKeyColInfo); + auto radixSort = + RadixSort(memoryManager.get(), factorizedTable, orderByKeyEncoder, strKeyColsInfo); sortAllKeyBlocks(orderByKeyEncoder, radixSort); checkTupleIdxesAndFactorizedTableIdxes(orderByKeyEncoder.getKeyBlocks()[0]->getData(), @@ -269,54 +267,6 @@ TEST_F(RadixSortTest, singleOrderByColDoubleTest) { false /* isAsc */, false /* hasPayLoadCol */); } -TEST_F(RadixSortTest, singleOrderByColUnstrSameDataTypeTest) { - // SortingData contains unstructured value with the same datatype. - vector sortingData = {Value(4.7), Value(-0.5), Value(10.52), Value(double(0)) /* NULL */, - Value(double(0)) /* NULL */}; - vector nullMasks = {false, false, false, true, true}; - vector expectedFTBlockOffsetOrder = {1, 0, 2, 4, 3}; - singleOrderByColTest(sortingData, nullMasks, expectedFTBlockOffsetOrder, UNSTRUCTURED, - true /* isAsc */, false /* hasPayLoadCol */); -} - -TEST_F(RadixSortTest, singleOrderByColUnstrNumericalValTest) { - // SortingData contains a mixture of INT64 and double. - vector sortingData = { - Value(4.7), Value(-0.5), Value(int64_t(8)), Value(int64_t(0)) /* NULL */, Value(-0.045)}; - vector nullMasks = {false, false, false, true, false}; - vector expectedFTBlockOffsetOrder = {1, 4, 0, 2, 3}; - singleOrderByColTest(sortingData, nullMasks, expectedFTBlockOffsetOrder, UNSTRUCTURED, - true /* isAsc */, false /* hasPayLoadCol */); -} - -TEST_F(RadixSortTest, singleOrderByColUnstrTimeValTest) { - // SortingData contains a mixture of timestamp and date. - vector sortingData = { - Value(Timestamp::FromCString("2003-10-12 08:21:10", strlen("2003-10-12 08:21:10"))), - Value(Date::FromCString("2003-10-12", strlen("2003-10-12"))), Value(int64_t(0)) /* NULL */, - Value(Date::FromCString("2003-10-13", strlen("2003-10-13"))), - Value(Timestamp::FromCString("2003-10-13 01:02:03", strlen("2003-10-13 01:02:03")))}; - vector nullMasks = {false, false, true, false, false}; - vector expectedFTBlockOffsetOrder = {1, 0, 3, 4, 2}; - singleOrderByColTest(sortingData, nullMasks, expectedFTBlockOffsetOrder, UNSTRUCTURED, - true /* isAsc */, false /* hasPayLoadCol */); -} - -TEST_F(RadixSortTest, singleOrderByColUnstrErrorTest) { - // SortingData contains double and timestamp, the comparison function should throw an exception. - vector sortingData = { - Value(Timestamp::FromCString("2003-10-12 08:21:10", strlen("2003-10-12 08:21:10"))), - Value(4.2)}; - vector nullMasks = {false, false}; - vector expectedFTBlockOffsetOrder = {1, 0}; - try { - singleOrderByColTest(sortingData, nullMasks, expectedFTBlockOffsetOrder, UNSTRUCTURED, - true /* isAsc */, false /* hasPayLoadCol */); - FAIL(); - } catch (exception& e) { - } catch (std::exception& e) { FAIL(); } -} - TEST_F(RadixSortTest, singleOrderByColStringTest) { // Multiple groups of string with the same prefix generates multiple groups of ties during radix // sort. @@ -430,11 +380,10 @@ TEST_F(RadixSortTest, multipleOrderByColNoTieTest) { false /* isUnflat */, 0 /* dataChunkPos */, Types::getDataTypeSize(DATE))); FactorizedTable factorizedTable(memoryManager.get(), move(tableSchema)); - vector stringAndUnstructuredKeyColInfo = { - StringAndUnstructuredKeyColInfo(16 /* colOffsetInFT */, - OrderByKeyEncoder::getEncodingSize(DataType(INT64)) + - OrderByKeyEncoder::getEncodingSize(DataType(DOUBLE)), - true /* isAscOrder */, true /* isStrCol */)}; + vector strKeyColsInfo = {StrKeyColInfo(16 /* colOffsetInFT */, + OrderByKeyEncoder::getEncodingSize(DataType(INT64)) + + OrderByKeyEncoder::getEncodingSize(DataType(DOUBLE)), + true /* isAscOrder */, true /* isStrCol */)}; auto orderByKeyEncoder = OrderByKeyEncoder( orderByVectors, isAscOrder, memoryManager.get(), factorizedTableIdx, numTuplesPerBlockInFT); @@ -444,8 +393,8 @@ TEST_F(RadixSortTest, multipleOrderByColNoTieTest) { mockDataChunk->state->currIdx++; } - RadixSort radixSort = RadixSort( - memoryManager.get(), factorizedTable, orderByKeyEncoder, stringAndUnstructuredKeyColInfo); + RadixSort radixSort = + RadixSort(memoryManager.get(), factorizedTable, orderByKeyEncoder, strKeyColsInfo); sortAllKeyBlocks(orderByKeyEncoder, radixSort); vector expectedFTBlockOffsetOrder = {1, 4, 0, 2, 3}; diff --git a/test/runner/e2e_copy_csv_transaction_test.cpp b/test/runner/e2e_copy_csv_transaction_test.cpp index cb99f3bb1f..fd35447135 100644 --- a/test/runner/e2e_copy_csv_transaction_test.cpp +++ b/test/runner/e2e_copy_csv_transaction_test.cpp @@ -41,9 +41,9 @@ class TinySnbCopyCSVTransactionTest : public EmptyDBTest { auto nodeTableSchema = catalog->getReadOnlyVersion()->getNodeTableSchema(tableID); // Before checkPointing, we should have two versions of node column and list files. The // updates to maxNodeOffset should be invisible to read-only transactions. - validateNodeColumnAndListFilesExistence( + validateNodeColumnFilesExistence( nodeTableSchema, DBFileType::WAL_VERSION, true /* existence */); - validateNodeColumnAndListFilesExistence( + validateNodeColumnFilesExistence( nodeTableSchema, DBFileType::ORIGINAL, true /* existence */); ASSERT_EQ(make_unique(database.get()) ->query("MATCH (p:person) return *") @@ -61,9 +61,9 @@ class TinySnbCopyCSVTransactionTest : public EmptyDBTest { // After checkPointing, we should only have one version of node column and list // files(original version). The updates to maxNodeOffset should be visible to read-only // transaction; - validateNodeColumnAndListFilesExistence( + validateNodeColumnFilesExistence( nodeTableSchema, DBFileType::WAL_VERSION, false /* existence */); - validateNodeColumnAndListFilesExistence( + validateNodeColumnFilesExistence( nodeTableSchema, DBFileType::ORIGINAL, true /* existence */); validateTinysnbPersonAgeProperty(); ASSERT_EQ(getStorageManager(*database) diff --git a/test/runner/e2e_ddl_test.cpp b/test/runner/e2e_ddl_test.cpp index 5c7f4333bc..c7167bc867 100644 --- a/test/runner/e2e_ddl_test.cpp +++ b/test/runner/e2e_ddl_test.cpp @@ -218,21 +218,18 @@ class TinySnbDDLTest : public DBTest { make_unique(*catalog->getReadOnlyVersion()->getNodeTableSchema( catalog->getReadOnlyVersion()->getNodeTableIDFromName("university"))); executeQueryWithoutCommit("DROP TABLE university"); - validateNodeColumnAndListFilesExistence(nodeTableSchema.get(), DBFileType::ORIGINAL, true); + validateNodeColumnFilesExistence(nodeTableSchema.get(), DBFileType::ORIGINAL, true); ASSERT_TRUE(catalog->getReadOnlyVersion()->containNodeTable("university")); if (transactionTestType == TransactionTestType::RECOVERY) { commitButSkipCheckpointingForTestingRecovery(*conn); - validateNodeColumnAndListFilesExistence( - nodeTableSchema.get(), DBFileType::ORIGINAL, true); + validateNodeColumnFilesExistence(nodeTableSchema.get(), DBFileType::ORIGINAL, true); ASSERT_TRUE(catalog->getReadOnlyVersion()->containNodeTable("university")); initWithoutLoadingGraph(); - validateNodeColumnAndListFilesExistence( - nodeTableSchema.get(), DBFileType::ORIGINAL, false); + validateNodeColumnFilesExistence(nodeTableSchema.get(), DBFileType::ORIGINAL, false); ASSERT_FALSE(catalog->getReadOnlyVersion()->containNodeTable("university")); } else { conn->commit(); - validateNodeColumnAndListFilesExistence( - nodeTableSchema.get(), DBFileType::ORIGINAL, false); + validateNodeColumnFilesExistence(nodeTableSchema.get(), DBFileType::ORIGINAL, false); ASSERT_FALSE(catalog->getReadOnlyVersion()->containNodeTable("university")); } } diff --git a/test/runner/e2e_set_transaction_test.cpp b/test/runner/e2e_set_transaction_test.cpp index cadc7ab820..257317a17b 100644 --- a/test/runner/e2e_set_transaction_test.cpp +++ b/test/runner/e2e_set_transaction_test.cpp @@ -182,232 +182,3 @@ TEST_F(SetNodeStructuredPropTransactionTest, SetManyNodeLongStringPropRollbackTe auto result = conn->query("MATCH (a:person) WHERE a.ID=0 RETURN a.fName"); ASSERT_EQ(result->getNext()->getResultValue(0)->getStringVal(), "Alice"); } - -class SetNodeUnstrPropTransactionTest : public BaseSetNodePropTransactionTest { -public: - string getInputCSVDir() override { - return "dataset/unstructured-property-lists-updates-tests/"; - } - -public: - string existingIntVal = "123456"; - string existingStrVal = "abcdefghijklmn"; - string intVal = "677121"; - string sStrVal = "short"; - string lStrVal = "new-long-string"; -}; - -// TODO(Semih): Uncomment when enabling ad-hoc properties -// TEST_F(SetNodeUnstrPropTransactionTest, FixedLenPropertyShortStringInTrx) { -// conn->beginWriteTransaction(); -// conn->query( -// "MATCH (a:person) WHERE a.ID=123 SET a.ui123=" + intVal + ",a.us123='" + sStrVal + "'"); -// readAndAssertNodeProperty(conn.get(), 123, "ui123", vector{intVal}); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{sStrVal}); -// readAndAssertNodeProperty(readConn.get(), 123, "ui123", vector{existingIntVal}); -// readAndAssertNodeProperty(readConn.get(), 123, "us123", vector{existingStrVal}); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, FixedLenPropertyShortStringCommitNormalExecution) { -// conn->beginWriteTransaction(); -// conn->query( -// "MATCH (a:person) WHERE a.ID=123 SET a.ui123=" + intVal + ",a.us123='" + sStrVal + "'"); -// conn->commit(); -// readAndAssertNodeProperty(conn.get(), 123, "ui123", vector{intVal}); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{sStrVal}); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, FixedLenPropertyShortStringRollbackNormalExecution) { -// conn->beginWriteTransaction(); -// conn->query( -// "MATCH (a:person) WHERE a.ID=123 SET a.ui123=" + intVal + ",a.us123='" + sStrVal + "'"); -// conn->rollback(); -// readAndAssertNodeProperty(conn.get(), 123, "ui123", vector{existingIntVal}); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{existingStrVal}); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, FixedLenPropertyShortStringCommitRecovery) { -// conn->beginWriteTransaction(); -// conn->query( -// "MATCH (a:person) WHERE a.ID=123 SET a.ui123=" + intVal + ",a.us123='" + sStrVal + "'"); -// conn->commitButSkipCheckpointingForTestingRecovery(); -// createDBAndConn(); // run recovery -// readAndAssertNodeProperty(conn.get(), 123, "ui123", vector{intVal}); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{sStrVal}); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, FixedLenPropertyShortStringRollbackRecovery) { -// conn->beginWriteTransaction(); -// conn->query( -// "MATCH (a:person) WHERE a.ID=123 SET a.ui123=" + intVal + ",a.us123='" + sStrVal + "'"); -// conn->rollbackButSkipCheckpointingForTestingRecovery(); -// createDBAndConn(); // run recovery -// readAndAssertNodeProperty(conn.get(), 123, "ui123", vector{existingIntVal}); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{existingStrVal}); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, LongStringPropTestInTrx) { -// conn->beginWriteTransaction(); -// conn->query("MATCH (a:person) WHERE a.ID=123 SET a.us123='" + lStrVal + "'"); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{lStrVal}); -// readAndAssertNodeProperty(readConn.get(), 123, "us123", vector{existingStrVal}); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, LongStringPropTestCommitNormalExecution) { -// conn->beginWriteTransaction(); -// conn->query("MATCH (a:person) WHERE a.ID=123 SET a.us123='" + lStrVal + "'"); -// conn->commit(); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{lStrVal}); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, LongStringPropTestRollbackNormalExecution) { -// conn->beginWriteTransaction(); -// conn->query("MATCH (a:person) WHERE a.ID=123 SET a.us123='" + lStrVal + "'"); -// conn->rollback(); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{existingStrVal}); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, LongStringPropTestCommitRecovery) { -// conn->beginWriteTransaction(); -// conn->query("MATCH (a:person) WHERE a.ID=123 SET a.us123='" + lStrVal + "'"); -// conn->commitButSkipCheckpointingForTestingRecovery(); -// createDBAndConn(); // run recovery -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{lStrVal}); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, LongStringPropTestRollbackRecovery) { -// conn->beginWriteTransaction(); -// conn->query("MATCH (a:person) WHERE a.ID=123 SET a.us123='" + lStrVal + "'"); -// conn->rollbackButSkipCheckpointingForTestingRecovery(); -// createDBAndConn(); // run recovery -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{existingStrVal}); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, InsertNonExistingProps) { -// conn->beginWriteTransaction(); -// conn->query( -// "MATCH (a:person) WHERE a.ID=123 SET a.ui124=" + intVal + ",a.us125='" + lStrVal + "'"); -// readAndAssertNodeProperty(conn.get(), 123, "ui124", vector{intVal}); -// readAndAssertNodeProperty(conn.get(), 123, "us125", vector{lStrVal}); -// readAndAssertNodeProperty(readConn.get(), 123, "ui124", vector{""}); -// readAndAssertNodeProperty(readConn.get(), 123, "us125", vector{""}); -// conn->rollbackButSkipCheckpointingForTestingRecovery(); -// createDBAndConn(); // run recovery -// readAndAssertNodeProperty(conn.get(), 123, "ui124", vector{""}); -// readAndAssertNodeProperty(conn.get(), 123, "us125", vector{""}); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, RemoveExistingProperties) { -// conn->beginWriteTransaction(); -// conn->query("MATCH (a:person) WHERE a.ID=123 SET a.ui123=null,a.us123=null"); -// readAndAssertNodeProperty(conn.get(), 123, "ui123", vector{""}); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{""}); -// readAndAssertNodeProperty(readConn.get(), 123, "ui123", vector{existingIntVal}); -// readAndAssertNodeProperty(readConn.get(), 123, "us123", vector{existingStrVal}); -// conn->commit(); -// readAndAssertNodeProperty(conn.get(), 123, "ui123", vector{""}); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{""}); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, RemoveNonExistingProperties) { -// conn->beginWriteTransaction(); -// conn->query("MATCH (a:person) WHERE a.ID=123 SET a.ui124=null,a.us125=null"); -// readAndAssertNodeProperty(conn.get(), 123, "ui123", vector{existingIntVal}); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{existingStrVal}); -// readAndAssertNodeProperty(readConn.get(), 123, "ui123", vector{existingIntVal}); -// readAndAssertNodeProperty(readConn.get(), 123, "us123", vector{existingStrVal}); -// conn->rollback(); -// readAndAssertNodeProperty(conn.get(), 123, "ui123", vector{existingIntVal}); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{existingStrVal}); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, RemoveNewlyAddedProperties) { -// conn->beginWriteTransaction(); -// conn->query( -// "MATCH (a:person) WHERE a.ID=123 SET a.ui123=" + intVal + ",a.us125='" + lStrVal + "'"); -// conn->query("MATCH (a:person) WHERE a.ID=123 SET a.ui123=null,a.us125=null"); -// readAndAssertNodeProperty(conn.get(), 123, "ui123", vector{""}); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{existingStrVal}); -// readAndAssertNodeProperty(conn.get(), 123, "us125", vector{""}); -// readAndAssertNodeProperty(readConn.get(), 123, "ui123", vector{existingIntVal}); -// readAndAssertNodeProperty(readConn.get(), 123, "us123", vector{existingStrVal}); -// readAndAssertNodeProperty(readConn.get(), 123, "us125", vector{""}); -// conn->commitButSkipCheckpointingForTestingRecovery(); -// createDBAndConn(); // run recovery -// readAndAssertNodeProperty(conn.get(), 123, "ui123", vector{""}); -// readAndAssertNodeProperty(conn.get(), 123, "us123", vector{existingStrVal}); -// readAndAssertNodeProperty(conn.get(), 123, "us125", vector{""}); -//} - -// static void insertALargeNumberOfProperties( -// Connection* conn, const string& intParam, const string& strParam) { -// for (auto i = 0u; i <= 200; ++i) { -// conn->query("MATCH (a:person) WHERE a.ID=123 SET a.ui" + to_string(i) + "=" + intParam + -// ",a.us" + to_string(i) + "='" + strParam + "'"); -// } -//} - -// static void validateInsertALargeNumberOfPropertiesSucceeds( -// Connection* conn, const string& intParam, const string& strParam) { -// for (auto i = 0u; i <= 200; ++i) { -// BaseSetNodePropTransactionTest::readAndAssertNodeProperty( -// conn, 123, "ui" + to_string(i), vector{intParam}); -// BaseSetNodePropTransactionTest::readAndAssertNodeProperty( -// conn, 123, "us" + to_string(i), vector{strParam}); -// } -//} - -// static void validateInsertALargeNumberOfPropertiesFails( -// Connection* conn, const string& intParam, const string& strParam) { -// for (auto i = 0u; i <= 200; ++i) { -// if (i == 123) { -// BaseSetNodePropTransactionTest::readAndAssertNodeProperty( -// conn, 123, "ui123", vector{intParam}); -// BaseSetNodePropTransactionTest::readAndAssertNodeProperty( -// conn, 123, "us123", vector{strParam}); -// } else { -// BaseSetNodePropTransactionTest::readAndAssertNodeProperty( -// conn, 123, "ui" + to_string(i), vector{""}); -// BaseSetNodePropTransactionTest::readAndAssertNodeProperty( -// conn, 123, "us" + to_string(i), vector{""}); -// } -// } -//} - -// TODO(Semih): Uncomment when enabling ad-hoc properties -// TEST_F(SetNodeUnstrPropTransactionTest, InsertALargeNumberOfPropertiesInTrx) { -// conn->beginWriteTransaction(); -// insertALargeNumberOfProperties(conn.get(), intVal, lStrVal); -// validateInsertALargeNumberOfPropertiesSucceeds(conn.get(), intVal, lStrVal); -// validateInsertALargeNumberOfPropertiesFails(readConn.get(), existingIntVal, existingStrVal); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, InsertALargeNumberOfPropertiesCommitNormalExecution) { -// conn->beginWriteTransaction(); -// insertALargeNumberOfProperties(conn.get(), intVal, lStrVal); -// conn->commit(); -// validateInsertALargeNumberOfPropertiesSucceeds(conn.get(), intVal, lStrVal); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, InsertALargeNumberOfPropertiesRollbackNormalExecution) { -// conn->beginWriteTransaction(); -// insertALargeNumberOfProperties(conn.get(), intVal, lStrVal); -// conn->rollback(); -// validateInsertALargeNumberOfPropertiesFails(conn.get(), existingIntVal, existingStrVal); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, InsertALargeNumberOfPropertiesCommitRecovery) { -// conn->beginWriteTransaction(); -// insertALargeNumberOfProperties(conn.get(), intVal, lStrVal); -// conn->commitButSkipCheckpointingForTestingRecovery(); -// createDBAndConn(); // run recovery -// validateInsertALargeNumberOfPropertiesSucceeds(conn.get(), intVal, lStrVal); -//} -// -// TEST_F(SetNodeUnstrPropTransactionTest, InsertALargeNumberOfPropertiesRollbackRecovery) { -// conn->beginWriteTransaction(); -// insertALargeNumberOfProperties(conn.get(), intVal, lStrVal); -// conn->rollbackButSkipCheckpointingForTestingRecovery(); -// createDBAndConn(); // run recovery -// validateInsertALargeNumberOfPropertiesFails(conn.get(), existingIntVal, existingStrVal); -//} diff --git a/test/runner/e2e_update_test.cpp b/test/runner/e2e_update_test.cpp index 505d909d8a..96208ea76f 100644 --- a/test/runner/e2e_update_test.cpp +++ b/test/runner/e2e_update_test.cpp @@ -155,87 +155,6 @@ TEST_F(TinySnbUpdateTest, SetTwoHopNullTest) { auto groundTruth = vector{"0|", "10|83", "2|", "3|", "5|", "7|20", "8|25", "9|40"}; ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); } -// TODO(Semih): Uncomment when enabling ad-hoc properties -// TEST_F(TinySnbUpdateTest, SetNodeUnstrIntPropTest) { -// conn->query("MATCH (a:person) WHERE a.ID < 3 SET a.unstrInt64Prop=1"); -// auto result = conn->query("MATCH (a:person) WHERE a.ID < 6 RETURN a.ID,a.unstrInt64Prop"); -// auto groundTruth = vector{"0|1", "2|1", "3|4541124", "5|"}; -// ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); -//} -// -// TEST_F(TinySnbUpdateTest, SetNodeUnstrDatePropTest) { -// conn->query("MATCH (a:person) WHERE a.ID < 3 SET a.unstrDateProp1=date('2022-10-10')"); -// auto result = conn->query("MATCH (a:person) WHERE a.ID < 6 RETURN a.ID,a.unstrDateProp1"); -// auto groundTruth = vector{"0|2022-10-10", "2|2022-10-10", "3|1950-01-01", "5|"}; -// ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); -//} -// -// TEST_F(TinySnbUpdateTest, SetNodeUnstrIntervalPropTest) { -// conn->query("MATCH (a:person) WHERE a.ID < 3 SET a.unstrIntervalProp=interval('2 years')"); -// auto result = conn->query("MATCH (a:person) WHERE a.ID < 6 RETURN a.ID,a.unstrIntervalProp"); -// auto groundTruth = vector{"0|2 years", "2|2 years", "3|", "5|"}; -// ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); -//} -// -// TEST_F(TinySnbUpdateTest, SetNodeUnstBoolPropTest) { -// conn->query("MATCH (a:person) WHERE a.ID < 4 SET a.unstrBoolProp1=True"); -// auto result = conn->query("MATCH (a:person) WHERE a.ID < 6 RETURN a.ID,a.unstrBoolProp1"); -// auto groundTruth = vector{"0|True", "2|True", "3|True", "5|False"}; -// ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); -//} -// -// TEST_F(TinySnbUpdateTest, SetNodeUnstrShortStringPropTest) { -// conn->query("MATCH (a:person) WHERE a.ID < 3 SET a.label1='abcd'"); -// auto result = conn->query("MATCH (a:person) WHERE a.ID < 6 RETURN a.ID,a.label1"); -// auto groundTruth = vector{"0|abcd", "2|abcd", "3|", "5|good"}; -// ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); -//} -// -// TEST_F(TinySnbUpdateTest, SetNodeUnstrLongStringPropTest) { -// conn->query("MATCH (a:person) WHERE a.ID < 3 SET a.label1='abcdefghijklmnopqrstuvwxyz'"); -// auto result = conn->query("MATCH (a:person) WHERE a.ID < 6 RETURN a.ID,a.label1"); -// auto groundTruth = vector{ -// "0|abcdefghijklmnopqrstuvwxyz", "2|abcdefghijklmnopqrstuvwxyz", "3|", "5|good"}; -// ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); -//} -// -// TEST_F(TinySnbUpdateTest, SetNodeUnstLongStringErrorTest) { -// // conn->query( -// // "MATCH (a:person) WHERE a.ID < 3 SET a.label1='" + getStringExceedsOverflow() + -// "'"); -// // auto result = conn->query("MATCH (a:person) WHERE a.ID < 6 RETURN a.ID,a.label1"); -// // auto groundTruth = vector{"0|", "2|", "3|4541124", "5|"}; -// // ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); -// // ASSERT_FALSE(result->isSuccess()); -//} -// -// TEST_F(TinySnbUpdateTest, SetNodeUnstrPropNullTest) { -// conn->query("MATCH (a:person) WHERE a.ID < 3 SET a.unstrInt64Prop=null"); -// auto result = conn->query("MATCH (a:person) WHERE a.ID < 6 RETURN a.ID,a.unstrInt64Prop"); -// auto groundTruth = vector{"0|", "2|", "3|4541124", "5|"}; -// ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); -//} -// -// TEST_F(TinySnbUpdateTest, SetNodeUnstrPropFromSameNodeTest) { -// conn->query("MATCH (a:person) SET a.label1=a.label2"); -// auto result = conn->query("MATCH (a:person) WHERE a.ID < 6 RETURN a.ID, a.label1"); -// auto groundTruth = vector{"0|excellent", "2|excellent", "3|", "5|excellent"}; -// ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); -//} -// -// TEST_F(TinySnbUpdateTest, SetNodeUnstrProp1HopTest) { -// conn->query("MATCH (a:person)-[:knows]->(b:person) WHERE b.ID=0 SET a.label1=b.label2"); -// auto result = conn->query("MATCH (a:person) WHERE a.ID < 6 RETURN a.ID, a.label1"); -// auto groundTruth = vector{"0|good", "2|excellent", "3|excellent", "5|excellent"}; -// ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); -//} -// -// TEST_F(TinySnbUpdateTest, SetNodeMixedPropTest) { -// conn->query("MATCH (a:person) WHERE a.ID= 0 SET a.label1='abcd', a.fName='A'"); -// auto result = conn->query("MATCH (a:person) WHERE a.ID < 3 RETURN a.ID,a.fName,a.label1"); -// auto groundTruth = vector{"0|A|abcd", "2|Bob|"}; -// ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); -//} // Create clause test @@ -292,16 +211,6 @@ TEST_F(TinySnbUpdateTest, InsertNodeWithMixedLabelTest) { ASSERT_EQ(TestHelper::convertResultToString(*oResult), oGroundTruth); } -// TODO(Semih): Uncomment when enabling ad-hoc properties -// TEST_F(TinySnbUpdateTest, InsertNodeWithUnstrTest) { -// conn->query("CREATE (:person {ID:11, label1:'a', label2:'abcdefghijklmn'});"); -// auto result = conn->query( -// "MATCH (a:person) WHERE a.ID > 5 RETURN a.ID, a.label1, a.label2, a.unstrDateProp1"); -// auto groundTruth = vector{ -// "10||good|", "11|a|abcdefghijklmn|", "7|||", "8|excellent|excellent|", "9|good||"}; -// ASSERT_EQ(TestHelper::convertResultToString(*result), groundTruth); -//} - TEST_F(TinySnbUpdateTest, InsertNodeAfterMatchListTest) { conn->query("MATCH (a:person) CREATE (:person {ID:a.ID+11, age:a.age*2});"); auto result = conn->query("MATCH (a:person) RETURN a.ID, a.fName,a.age"); diff --git a/test/storage/BUILD.bazel b/test/storage/BUILD.bazel index 1fda4ee457..eea62e2f82 100644 --- a/test/storage/BUILD.bazel +++ b/test/storage/BUILD.bazel @@ -47,39 +47,22 @@ cc_test( ], ) -cc_test( - name = "unstructured_property_lists_updates_test", - srcs = [ - "unstructured_property_lists_updates_test.cpp", - ], - copts = [ - "-Iexternal/gtest/include", - ], - data = [ - "//dataset", - ], - deps = [ - "//src/storage:storage_manager", - "//test/test_utility:test_helper", - ], -) - -cc_test( - name = "disk_array_update_test", - srcs = [ - "disk_array_update_test.cpp", - ], - copts = [ - "-Iexternal/gtest/include", - ], - data = [ - "//dataset", - ], - deps = [ - "//src/storage:storage_manager", - "//test/test_utility:test_helper", - ], -) +#cc_test( +# name = "disk_array_update_test", +# srcs = [ +# "disk_array_update_test.cpp", +# ], +# copts = [ +# "-Iexternal/gtest/include", +# ], +# data = [ +# "//dataset", +# ], +# deps = [ +# "//src/storage:storage_manager", +# "//test/test_utility:test_helper", +# ], +#) cc_test( name = "rel_insertion_test", diff --git a/test/storage/disk_array_update_test.cpp b/test/storage/disk_array_update_test.cpp index 65bf5b18ee..4d228f1831 100644 --- a/test/storage/disk_array_update_test.cpp +++ b/test/storage/disk_array_update_test.cpp @@ -5,6 +5,9 @@ using namespace kuzu::storage; using namespace kuzu::testing; +// TODO(Guodong): the current disk array update test relies on unstructured property which +// has been removed in the recent PRs. + // Tests the core update functionality of DiskArray and InMemDiskArray. Specifically tests that // updates to DiskArrays happen transactionally. The tests use ListHeaders, which consists of a // single DiskArray as a wrapper. This is required and we cannot (easily) write tests that directly diff --git a/test/storage/node_insertion_deletion_test.cpp b/test/storage/node_insertion_deletion_test.cpp index 6b8df7ae73..5dfc751e5f 100644 --- a/test/storage/node_insertion_deletion_test.cpp +++ b/test/storage/node_insertion_deletion_test.cpp @@ -34,7 +34,7 @@ class NodeInsertionDeletionTests : public DBTest { node_offset_t addNode() { // TODO(Guodong/Semih/Xiyang): Currently it is not clear when and from where the hash index, - // structured columns, unstructured property Lists, adjacency Lists, and adj columns of a + // structured columns, adjacency Lists, and adj columns of a // newly added node should be informed that a new node is being inserted, so these data // structures either write values or NULLs or empty Lists etc. Within the scope of these // tests we only have an ID column and we are manually from outside diff --git a/test/storage/rel_insertion_test.cpp b/test/storage/rel_insertion_test.cpp index 709588c777..27a03174fa 100644 --- a/test/storage/rel_insertion_test.cpp +++ b/test/storage/rel_insertion_test.cpp @@ -432,7 +432,7 @@ class RelInsertionTest : public DBTest { // For many-to-one rel tables, the FWD is a list and the bwd is a column. For the FWD, we need // to write the inserted rels to the WAL version of the pages of the column. For the BWD, we - // need to write the inserted rels to adjAndPropertyListsUpdateStore. This test is designed + // need to write the inserted rels to listsUpdateStore. This test is designed // to test updates to a relTable which has a mixed of columns and lists. void insertRelsToManyToOneRelTable(bool isCommit, TransactionTestType transactionTestType) { auto query = "match (:person)-[t:teaches]->(:person) return t.length"; diff --git a/test/storage/unstructured_property_lists_updates_test.cpp b/test/storage/unstructured_property_lists_updates_test.cpp deleted file mode 100644 index 26ca40fa00..0000000000 --- a/test/storage/unstructured_property_lists_updates_test.cpp +++ /dev/null @@ -1,384 +0,0 @@ -#include "test/test_utility/include/test_helper.h" - -#include "src/common/include/in_mem_overflow_buffer_utils.h" - -using namespace kuzu::storage; -using namespace kuzu::testing; - -// Note: ID and nodeOffsetForPropKeys in this test are equal for each node, so we use nodeID and -// nodeOffsetForPropKeys interchangeably. -class UnstructuredPropertyListsUpdateTests : public DBTest { - -public: - void SetUp() override { - DBTest::SetUp(); - initWithoutLoadingGraph(); - } - - string getInputCSVDir() override { - return "dataset/unstructured-property-lists-updates-tests/"; - } - - void initWithoutLoadingGraph() { - if (inMemOverflowBuffer) { - inMemOverflowBuffer.reset(); - } - createDBAndConn(); - inMemOverflowBuffer = make_unique(getMemoryManager(*database)); - readConn = make_unique(database.get()); - personTableID = - getCatalog(*database)->getReadOnlyVersion()->getNodeTableIDFromName("person"); - personNodeTable = getStorageManager(*database)->getNodesStore().getNodeTable(personTableID); - - existingStrVal.dataType = DataType(DataTypeID::STRING); - string existingStr = "abcdefghijklmn"; - InMemOverflowBufferUtils::copyString(existingStr.c_str(), existingStr.size(), - existingStrVal.val.strVal, *inMemOverflowBuffer); - existingIntVal.dataType = DataType(DataTypeID::INT64); - existingIntVal.val.int64Val = 123456; - - shortStrVal.dataType = DataType(DataTypeID::STRING); - string shortStr = "short"; - InMemOverflowBufferUtils::copyString( - shortStr.c_str(), shortStr.size(), shortStrVal.val.strVal, *inMemOverflowBuffer); - longStrVal.dataType = DataType(DataTypeID::STRING); - string longStr = "new-long-string"; - InMemOverflowBufferUtils::copyString( - longStr.c_str(), longStr.size(), longStrVal.val.strVal, *inMemOverflowBuffer); - intVal.dataType = DataType(DataTypeID::INT64); - intVal.val.int64Val = 677121; - conn->beginWriteTransaction(); - } - - void commitOrRollbackConnectionAndInitDBIfNecessary( - bool isCommit, TransactionTestType transactionTestType) { - commitOrRollbackConnection(isCommit, transactionTestType); - if (transactionTestType == TransactionTestType::RECOVERY) { - // This creates a new database/conn/readConn and should run the recovery algorithm - initWithoutLoadingGraph(); - } - } - - // TODO(Xiyang): Currently we are manually calling set in getUnstrPropertyLists. Once we have - // frontend support, these sets should also be done through Cypher queries. - void setPropertyOfNode(node_offset_t nodeOffset, string propKey, Value& newVal) { - uint32_t unstrPropKey = getCatalog(*database) - ->getReadOnlyVersion() - ->getNodeProperty(personTableID, propKey) - .propertyID; - personNodeTable->getUnstrPropertyLists()->setProperty(nodeOffset, unstrPropKey, &newVal); - } - - void removeProperty(node_offset_t nodeOffset, string propKey) { - uint32_t unstrPropKey = getCatalog(*database) - ->getReadOnlyVersion() - ->getNodeProperty(personTableID, propKey) - .propertyID; - personNodeTable->getUnstrPropertyLists()->removeProperty(nodeOffset, unstrPropKey); - } - - void queryAndVerifyResults(node_offset_t nodeOffset, string intPropKey, string strPropKey, - Value* expectedIntForWriteTrx, Value* expectedStrValueForWriteTrx, - Value* expectedIntForReadTrx, Value* expectedStrValueForReadTrx) { - string query = "MATCH (a:person) WHERE a.ID = " + to_string(nodeOffset) + " RETURN a." + - intPropKey + ", a." + strPropKey; - auto writeQResult = conn->query(query); - auto writeConTuple = writeQResult->getNext(); - if (expectedIntForWriteTrx == nullptr) { - ASSERT_TRUE(writeConTuple->getResultValue(0)->isNullVal()); - } else { - ASSERT_FALSE(writeConTuple->getResultValue(0)->isNullVal()); - ASSERT_EQ(writeConTuple->getResultValue(0)->getInt64Val(), - expectedIntForWriteTrx->val.int64Val); - } - if (expectedStrValueForWriteTrx == nullptr) { - ASSERT_TRUE(writeConTuple->getResultValue(1)->isNullVal()); - } else { - ASSERT_FALSE(writeConTuple->getResultValue(1)->isNullVal()); - ASSERT_EQ(writeConTuple->getResultValue(1)->getStringVal(), - expectedStrValueForWriteTrx->val.strVal.getAsString()); - } - - auto readQResult = readConn->query(query); - auto readConTuple = readQResult->getNext(); - if (expectedIntForReadTrx == nullptr) { - ASSERT_TRUE(readConTuple->getResultValue(0)->isNullVal()); - } else { - ASSERT_FALSE(readConTuple->getResultValue(0)->isNullVal()); - ASSERT_EQ(readConTuple->getResultValue(0)->getInt64Val(), - expectedIntForReadTrx->val.int64Val); - } - if (expectedStrValueForReadTrx == nullptr) { - ASSERT_TRUE(readConTuple->getResultValue(1)->isNullVal()); - } else { - ASSERT_FALSE(readConTuple->getResultValue(1)->isNullVal()); - ASSERT_EQ(readConTuple->getResultValue(1)->getStringVal(), - expectedStrValueForReadTrx->val.strVal.getAsString()); - } - } - - void removeAllPropertiesBySetPropertyListEmptyTest( - bool isCommit, TransactionTestType transactionTestType) { - personNodeTable->getUnstrPropertyLists()->initEmptyPropertyLists(123); - queryAndVerifyResults(123, "ui123", "us123", nullptr /* expected int for write trx */, - nullptr /* expected str for write trx */, - &existingIntVal /* expected int for read trx */, - &existingStrVal /* expected str for write trx */); - commitOrRollbackConnectionAndInitDBIfNecessary(isCommit, transactionTestType); - if (isCommit) { - queryAndVerifyResults(123, "ui123", "us123", nullptr /* expected int for write trx */, - nullptr /* expected str for write trx */, nullptr /*expected int for read trx */, - nullptr /* expected str for read trx */); - } else { - queryAndVerifyResults(123, "ui123", "us123", - &existingIntVal /* expected int for write trx */, - &existingStrVal /* expected str for write trx */, - &existingIntVal /*expected int for read trx */, - &existingStrVal /* expected str for read trx */); - } - } - - void verifyEmptyDB(Connection* connection) { - for (uint64_t nodeOffsetForPropKeys = 0; nodeOffsetForPropKeys <= 600; - nodeOffsetForPropKeys++) { - string query = "MATCH (a:person) WHERE a.ui" + to_string(nodeOffsetForPropKeys) + - " IS NOT NULL OR a.us" + to_string(nodeOffsetForPropKeys) + - " IS NOT NULL RETURN count (*)"; - auto qResult = connection->query(query); - auto tuple = qResult->getNext(); - ASSERT_EQ(tuple->getResultValue(0)->getInt64Val(), 0); - } - } - - void verifyInitialDBState(Connection* connection) { - for (uint64_t nodeOffsetForPropKeys = 0; nodeOffsetForPropKeys <= 600; - nodeOffsetForPropKeys++) { - string query = "MATCH (a:person) WHERE a.ui" + to_string(nodeOffsetForPropKeys) + - " IS NOT NULL OR a.us" + to_string(nodeOffsetForPropKeys) + - " IS NOT NULL RETURN count (*)"; - auto qResult = connection->query(query); - auto tuple = qResult->getNext(); - if (nodeOffsetForPropKeys == 250) { - // If we are looking for 250's properties, e.g., ui250 and us250, then we expect the - // count to be only 1 because only node 250 contains these - ASSERT_EQ(tuple->getResultValue(0)->getInt64Val(), 1); - } else { - // If we are not looking for 250's properties, e.g., ui0 and us0, then we expect the - // count to be 2 because there are 2 nodes with those properties: 1 is the node with - // nodeID=nodeOffsetForPropKeys; and 2 is node 250 which has all unstructured - // properties. - ASSERT_EQ(tuple->getResultValue(0)->getInt64Val(), 2); - } - } - } - - void removeAllPropertiesOfAllNodesTest(bool isCommit, TransactionTestType transactionTestType) { - // We blindly remove all unstructured properties from all nodes one by one - for (uint64_t queryNodeOffset = 0; queryNodeOffset <= 600; queryNodeOffset++) { - for (uint64_t nodeOffsetForPropKeys = 0; nodeOffsetForPropKeys <= 600; - ++nodeOffsetForPropKeys) { - removeProperty(queryNodeOffset, "ui" + to_string(nodeOffsetForPropKeys)); - removeProperty(queryNodeOffset, "us" + to_string(nodeOffsetForPropKeys)); - } - } - - verifyEmptyDB(conn.get()); - verifyInitialDBState(readConn.get()); - - commitOrRollbackConnectionAndInitDBIfNecessary(isCommit, transactionTestType); - - if (isCommit) { - verifyEmptyDB(conn.get()); - verifyEmptyDB(readConn.get()); - } else { - verifyInitialDBState(conn.get()); - verifyInitialDBState(readConn.get()); - } - } - - // This function assumes that the current state of the db is empty. - void writeInitialDBStateTest( - bool isInitialStateEmpty, bool isCommit, TransactionTestType transactionTestType) { - for (uint64_t queryNodeOffset = 0; queryNodeOffset <= 600; queryNodeOffset++) { - if (queryNodeOffset == 250) { - for (uint64_t nodeOffsetForPropKeys = 0; nodeOffsetForPropKeys <= 600; - ++nodeOffsetForPropKeys) { - setPropertyOfNode( - queryNodeOffset, "ui" + to_string(nodeOffsetForPropKeys), existingIntVal); - setPropertyOfNode( - queryNodeOffset, "us" + to_string(nodeOffsetForPropKeys), existingStrVal); - } - } else { - setPropertyOfNode( - queryNodeOffset, "ui" + to_string(queryNodeOffset), existingIntVal); - setPropertyOfNode( - queryNodeOffset, "us" + to_string(queryNodeOffset), existingStrVal); - } - } - - verifyInitialDBState(conn.get()); - if (isInitialStateEmpty) { - verifyEmptyDB(readConn.get()); - } else { - verifyInitialDBState(readConn.get()); - } - commitOrRollbackConnectionAndInitDBIfNecessary(isCommit, transactionTestType); - - if (isCommit) { - verifyInitialDBState(conn.get()); - verifyInitialDBState(readConn.get()); - } else { - if (isInitialStateEmpty) { - verifyEmptyDB(conn.get()); - verifyEmptyDB(readConn.get()); - } else { - verifyInitialDBState(conn.get()); - verifyInitialDBState(readConn.get()); - } - } - } - - void removeAndWriteDataTwiceTest(bool isCommit, TransactionTestType transactionTestType) { - removeAllPropertiesOfAllNodesTest(isCommit, transactionTestType); - writeInitialDBStateTest(isCommit ? true /* initial state is empty db */ : - false /* initial state is inital db state */, - isCommit, transactionTestType); - removeAllPropertiesOfAllNodesTest(isCommit, transactionTestType); - writeInitialDBStateTest(isCommit ? true /* initial state is empty db */ : - false /* initial state is inital db state */, - isCommit, transactionTestType); - } - - void addNewListsTest(bool isCommit, TransactionTestType transactionTestType) { - uint32_t unstrIntPropKey = getCatalog(*database) - ->getReadOnlyVersion() - ->getNodeProperty(personTableID, "ui0") - .propertyID; - uint32_t unstrStrPropKey = getCatalog(*database) - ->getReadOnlyVersion() - ->getNodeProperty(personTableID, "us0") - .propertyID; - // Inserting until 1100 ensures that chunk 1 is filled and a new chunk 2 is started - for (node_offset_t nodeOffset = 601; nodeOffset < 1100; ++nodeOffset) { - personNodeTable->getUnstrPropertyLists()->initEmptyPropertyLists(nodeOffset); - personNodeTable->getUnstrPropertyLists()->setProperty( - nodeOffset, unstrIntPropKey, &existingIntVal); - personNodeTable->getUnstrPropertyLists()->setProperty( - nodeOffset, unstrStrPropKey, &existingStrVal); - } - - commitOrRollbackConnectionAndInitDBIfNecessary(isCommit, transactionTestType); - if (isCommit) { - // We test that the newly lists are inserted through callin ghte - // readUnstructuredPropertiesOfNode(), which was a function designed for tests because - // currently the frontend to add new nodes and unstructured properties is not supported. - for (node_offset_t nodeOffset = 601; nodeOffset < 1100; ++nodeOffset) { - auto unstrProperties = - personNodeTable->getUnstrPropertyLists()->readUnstructuredPropertiesOfNode( - nodeOffset); - ASSERT_EQ(2, unstrProperties->size()); - auto actualIntVal = unstrProperties->find(unstrIntPropKey)->second; - ASSERT_FALSE(actualIntVal.isNull()); - ASSERT_EQ(existingIntVal.val.int64Val, actualIntVal.val.int64Val); - auto actualStrVal = unstrProperties->find(unstrStrPropKey)->second; - ASSERT_FALSE(actualStrVal.isNull()); - ASSERT_EQ(existingStrVal.val.strVal.getAsString(), actualStrVal.strVal); - } - } else { - ASSERT_EQ(601, personNodeTable->getUnstrPropertyLists() - ->getHeaders() - ->headersDiskArray->getNumElements(TransactionType::WRITE)); - ASSERT_EQ(601, personNodeTable->getUnstrPropertyLists() - ->getHeaders() - ->headersDiskArray->getNumElements(TransactionType::READ_ONLY)); - } - } - -public: - unique_ptr readConn; - NodeTable* personNodeTable; - // Overflow is needed to update unstructured properties with long strings - unique_ptr inMemOverflowBuffer; - table_id_t personTableID; - Value existingStrVal, existingIntVal, shortStrVal, longStrVal, intVal; -}; - -// TODO(Semih): Uncomment when enabling ad-hoc properties -// TODO(Xiyang): migrate to delete -// TEST_F(UnstructuredPropertyListsUpdateTests, -// RemoveAllPropertiesBySetPropertyListEmptyCommitNormalExecution) { -// removeAllPropertiesBySetPropertyListEmptyTest( -// true /* commit */, TransactionTestType::NORMAL_EXECUTION); -//} -// -// TEST_F(UnstructuredPropertyListsUpdateTests, -// RemoveAllPropertiesBySetPropertyListEmptyRollbackNormalExecution) { -// removeAllPropertiesBySetPropertyListEmptyTest( -// false /* rollback */, TransactionTestType::NORMAL_EXECUTION); -//} -// -// TEST_F( -// UnstructuredPropertyListsUpdateTests, RemoveAllPropertiesBySetPropertyListEmptyCommitRecovery) -// { removeAllPropertiesBySetPropertyListEmptyTest(true /* commit */, -// TransactionTestType::RECOVERY); -//} -// -// TEST_F(UnstructuredPropertyListsUpdateTests, -// RemoveAllPropertiesBySetPropertyListEmptyRollbackRecovery) { -// removeAllPropertiesBySetPropertyListEmptyTest( -// false /* rollback */, TransactionTestType::RECOVERY); -//} -// -//// TODO(Semih/Ziyi): the following tests should be removed and moved into benchmark. -// TEST_F(UnstructuredPropertyListsUpdateTests, RemoveAllPropertiesOfAllNodesCommitNormalExecution) -// { -// removeAllPropertiesOfAllNodesTest(true /* commit */, TransactionTestType::NORMAL_EXECUTION); -//} -// -// TEST_F(UnstructuredPropertyListsUpdateTests, -// RemoveAllPropertiesOfAllNodesRollbackNormalExecution) { -// removeAllPropertiesOfAllNodesTest(false /* rollback */, -// TransactionTestType::NORMAL_EXECUTION); -//} -// -// TEST_F(UnstructuredPropertyListsUpdateTests, RemoveAllPropertiesOfAllNodesCommitRecovery) { -// removeAllPropertiesOfAllNodesTest(true /* commit */, TransactionTestType::RECOVERY); -//} -// -// TEST_F(UnstructuredPropertyListsUpdateTests, RemoveAllPropertiesOfAllNodesRollbackRecovery) { -// removeAllPropertiesOfAllNodesTest(false /* rollback */, TransactionTestType::RECOVERY); -//} -// -// TEST_F(UnstructuredPropertyListsUpdateTests, RemoveAndWriteDataTwiceTestCommitNormalExecution) { -// removeAndWriteDataTwiceTest(true /* commit */, TransactionTestType::NORMAL_EXECUTION); -//} -// -// TEST_F(UnstructuredPropertyListsUpdateTests, RemoveAndWriteDataTwiceTestRollbackNormalExecution) -// { -// removeAndWriteDataTwiceTest(false /* rollback */, TransactionTestType::NORMAL_EXECUTION); -//} -// -// TEST_F(UnstructuredPropertyListsUpdateTests, RemoveAndWriteDataTwiceTestCommitRecovery) { -// removeAndWriteDataTwiceTest(true /* commit */, TransactionTestType::RECOVERY); -//} -// -// TEST_F(UnstructuredPropertyListsUpdateTests, RemoveAndWriteDataTwiceTestRollbackRecovery) { -// removeAndWriteDataTwiceTest(false /* rollback */, TransactionTestType::RECOVERY); -//} -// -//// TODO(Xiyang): migrate to create -// TEST_F(UnstructuredPropertyListsUpdateTests, AddNewListTestCommitNormalExecution) { -// addNewListsTest(true /* commit */, TransactionTestType::NORMAL_EXECUTION); -//} -// -// TEST_F(UnstructuredPropertyListsUpdateTests, AddNewListTestRollbackNormalExecution) { -// addNewListsTest(false /* rollback */, TransactionTestType::NORMAL_EXECUTION); -//} -// -// TEST_F(UnstructuredPropertyListsUpdateTests, AddNewListTestCommitRecovery) { -// addNewListsTest(true /* commit */, TransactionTestType::RECOVERY); -//} -// -// TEST_F(UnstructuredPropertyListsUpdateTests, AddNewListTestRollbackRecovery) { -// addNewListsTest(false /* rollback */, TransactionTestType::RECOVERY); -//} diff --git a/test/test_files/tinySNB/agg/distinct_agg.test b/test/test_files/tinySNB/agg/distinct_agg.test index 9e99b26152..fa103bb647 100644 --- a/test/test_files/tinySNB/agg/distinct_agg.test +++ b/test/test_files/tinySNB/agg/distinct_agg.test @@ -1,5 +1,3 @@ -# TODO(Semih): Add the following when enabling ad-hoc properties -# in query: , COUNT(DISTINCT a.unstrDateProp1); in result: |2 -NAME SingleNodeDistinctAggTest1 -QUERY MATCH (a:person) RETURN COUNT(DISTINCT a.gender), COUNT(DISTINCT a.age) ---- 1 @@ -11,14 +9,6 @@ 1|2 2|2 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME OneHopDistinctAggTest -#-QUERY MATCH (a:person)-[:knows]->(b:person) RETURN a.isStudent, COUNT(a.ID), COUNT(DISTINCT b.unstrNumericProp) -#-ENUMERATE -#---- 2 -#False|8|2 -#True|6|2 - -NAME TwoHopDistinctAggTest -QUERY MATCH (a:person)-[:knows]->(b:person)-[:knows]->(c:person) RETURN a.ID, SUM(DISTINCT a.age), SUM(DISTINCT c.age) -ENUMERATE diff --git a/test/test_files/tinySNB/agg/hash.test b/test/test_files/tinySNB/agg/hash.test index 061b4daf85..887bd9596e 100644 --- a/test/test_files/tinySNB/agg/hash.test +++ b/test/test_files/tinySNB/agg/hash.test @@ -9,26 +9,6 @@ 45|3|5.000000|1 83|10|4.900000|1 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME SingleNodeAggTest2 -#-QUERY MATCH (a:person) RETURN a.unstrDateProp1, SUM(a.unstrNumericProp), COUNT(*) -#--PARALLELISM 4 -#---- 3 -#1900-01-01||1 -#1950-01-01|99|2 -#|68.000000|5 - -#-NAME GroupByKeyWithNullString -#-QUERY MATCH (a:person) return a.label1,a.label2, count(*) -#-PARALLELISM 1 -#---- 6 -#excellent|excellent|1 -#good|excellent|2 -#good||1 -#|excellent|1 -#|good|1 -#||2 - -NAME InMemOverflowBufferTest -QUERY MATCH (a:person) RETURN a.fName as name, COUNT(*) order by name desc -PARALLELISM 1 @@ -59,16 +39,6 @@ Alice|1 35|1|3 45|1|3 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME OneHopAggTest2 -#-QUERY MATCH (a:person)-[:knows]->(b:person) RETURN a.unstrNumericProp, SUM(a.unstrNumericProp2) -#-ENUMERATE -#---- 4 -#47|60 -#52| -#68.000000| -#| - -NAME OneHopHashAggTest -QUERY MATCH (a:person)-[:knows]->(b:person) RETURN a.gender, COUNT(*), SUM(b.age) --PARALLELISM 4 diff --git a/test/test_files/tinySNB/agg/multi_query_part.test b/test/test_files/tinySNB/agg/multi_query_part.test index 9f88c8dd10..61953ccc46 100644 --- a/test/test_files/tinySNB/agg/multi_query_part.test +++ b/test/test_files/tinySNB/agg/multi_query_part.test @@ -1,9 +1,3 @@ -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME SimpleCountMultiQueryTest -#-QUERY MATCH (a:person) WITH COUNT(a.age) + COUNT(a.unstrNumericProp) AS newCount RETURN newCount > 12 -#---- 1 -#False - -NAME SimpleAvgWithFilterMultiQueryTest -QUERY MATCH (a:person) WHERE a.birthdate = date('1980-10-26') WITH AVG(a.age) AS avgAge, AVG(a.eyeSight) AS avgEyeSight RETURN avgAge > avgEyeSight ---- 1 diff --git a/test/test_files/tinySNB/agg/simple.test b/test/test_files/tinySNB/agg/simple.test index a904a16f9d..2646b02881 100644 --- a/test/test_files/tinySNB/agg/simple.test +++ b/test/test_files/tinySNB/agg/simple.test @@ -5,15 +5,11 @@ ---- 1 36|Alice|5 -# TODO(Semih): Add the following when enabling ad-hoc properties -# in query: AVG(a.unstrNumericProp); in result: |55.666667 -NAME SimpleAvgTest -QUERY MATCH (a:person) RETURN AVG(a.age), AVG(a.eyeSight) ---- 1 37.250000|4.862500 -# TODO(Semih): Add the following when enabling ad-hoc properties -# in query: COUNT(a.unstrNumericProp) * 2.0; in result: |6.000000 -NAME SimpleCountTest -QUERY MATCH (a:person) RETURN COUNT(a.age) + 1 ---- 1 @@ -24,8 +20,6 @@ ---- 1 14 -# TODO(Semih): Add the following when enabling ad-hoc properties -# in query: SUM(a.unstrNumericProp); in result: |167.000000 -NAME SimpleSumTest -QUERY MATCH (a:person) RETURN SUM(a.age), SUM(a.eyeSight) ---- 1 @@ -41,8 +35,6 @@ ---- 1 False -# TODO(Semih): Add the following when enabling ad-hoc properties -# in query: , AVG(a.unstrNumericProp); in result: |55.666667 -NAME SimpleAvgTest -QUERY MATCH (a:person) RETURN AVG(a.age), AVG(a.eyeSight) ---- 1 @@ -58,8 +50,6 @@ False ---- 1 20|83|False|True|4.500000|5.100000|1900-01-01|1990-11-27 -# TODO(Semih): Add the following when enabling ad-hoc properties -# in query: MAX(b.unstrNumericProp); in result: |52 -NAME TwoHopTest -QUERY MATCH (a:person)-[:knows]->(b:person) RETURN SUM(b.age), MIN(b.ID), AVG(b.eyeSight) -ENUMERATE diff --git a/test/test_files/tinySNB/filter/node.test b/test/test_files/tinySNB/filter/node.test index 56ada27351..ec105d9a19 100644 --- a/test/test_files/tinySNB/filter/node.test +++ b/test/test_files/tinySNB/filter/node.test @@ -123,77 +123,6 @@ ---- 1 3 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME PersonUnstrFilteredTest1 -#-QUERY MATCH (a:person) WHERE a.unstrNumericProp > 48 RETURN COUNT(*) -#---- 1 -#2 - -#-NAME PersonUnstrFilteredTest2 -#-QUERY MATCH (a:person) WHERE a.unstrNumericProp <= 68 RETURN COUNT(*) -#---- 1 -#3 - -#-NAME PersonUnstrFilteredTest3 -#-QUERY MATCH (a:person) WHERE a.unstrNumericProp = 52 RETURN COUNT(*) -#---- 1 -#1 - -#-NAME PersonUnstrFilteredTest4 -#-QUERY MATCH (a:person) WHERE 10 + a.unstrNumericProp = 57 RETURN COUNT(*) -#---- 1 -#1 - -#-NAME PersonUnstrFilteredTest5 -#-QUERY MATCH (a:person) WHERE a.unstrNumericProp + a.unstrNumericProp2 = 67 RETURN COUNT(*) -#---- 1 -#1 - -#-NAME PersonUnstrFilteredTest6 -#-QUERY MATCH (a:person) WHERE a.unstrNumericProp - 10 > a.unstrNumericProp2 RETURN COUNT(*) -#---- 1 -#1 - -#-NAME PersonUnstrFilteredTest7 -#-QUERY MATCH (a:person) WHERE concat('abc ', string(a.unstrNumericProp)) = 'abc 52' RETURN COUNT(*) -#---- 1 -#1 - -#-NAME PersonUnstrFilteredTest8 -#-QUERY MATCH (a:person) WHERE concat(a.unstrNumericProp2, ' abcdefghijklm') = '20 abcdefghijklm' RETURN COUNT(*) -#---- 1 -#1 - -#-NAME PersonUnstrFilteredTest10 -#-QUERY MATCH (a:person) WHERE '47Bob' = concat(string(a.unstrNumericProp), a.fName) RETURN COUNT(*) -#---- 1 -#1 - -#-NAME PersonUnstrFilteredTest11 -#-QUERY MATCH (a:person) WHERE concat(string(a.unstrDateProp1), a.fName) = '1950-01-01Bob' RETURN COUNT(*) -#---- 1 -#1 - -#-NAME PersonUnstrFilteredTest12 -#-QUERY MATCH (a:person) WHERE a.unstrDateProp1 IS NULL RETURN COUNT(*) -#---- 1 -#5 - -#-NAME PersonUnstrFilteredTest13 -#-QUERY MATCH (a:person) WHERE a.unstrDateProp1 IS NOT NULL RETURN COUNT(*) -#---- 1 -#3 - -#-NAME PersonUnstrFilteredTest14 -#-QUERY MATCH (a:person) WHERE a.unstrTimestampProp1 IS NULL RETURN COUNT(*) -#---- 1 -#4 - -#-NAME PersonUnstrFilteredTest15 -#-QUERY MATCH (a:person) WHERE a.unstrTimestampProp2 IS NOT NULL RETURN COUNT(*) -#---- 1 -#2 - -NAME nodeCrossProduct -QUERY MATCH (a:person), (b:person {ID:a.ID}) WHERE a.ID < 4 RETURN COUNT(*) -ENUMERATE diff --git a/test/test_files/tinySNB/filter/one_hop.test b/test/test_files/tinySNB/filter/one_hop.test index 439ff77c28..0b4a00144a 100644 --- a/test/test_files/tinySNB/filter/one_hop.test +++ b/test/test_files/tinySNB/filter/one_hop.test @@ -32,13 +32,6 @@ ---- 1 6 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME PersonUnstrFilteredTest9 -#-QUERY MATCH (a:person)-[e1:knows]->(b:person) WHERE a.unstrNumericProp > b.unstrNumericProp RETURN COUNT(*) -#-ENUMERATE -#---- 1 -#1 - -NAME OneHopCrossProduct -QUERY MATCH (a:person {age:30}), (c:person)-[:knows]->(d:person{fName:'Greg'}) RETURN a.ID, c.ID -ENUMERATE diff --git a/test/test_files/tinySNB/function/arithmetic.test b/test/test_files/tinySNB/function/arithmetic.test index 8cda0fcbfd..e7fd0bf3d6 100644 --- a/test/test_files/tinySNB/function/arithmetic.test +++ b/test/test_files/tinySNB/function/arithmetic.test @@ -5,14 +5,6 @@ 0.340000 0.320000 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME powerFunctionOnUnstrIntUnstrIntTest -#-QUERY MATCH (a:organisation) RETURN (a.unstrInt64Prop % 7) ^ abs(a.unstrInt64Prop) -#---- 3 -#59049.000000 -#256.000000 -# - -NAME sinFunctionOnDoubleTest -QUERY MATCH (a:organisation) WHERE a.name <> 'abc' RETURN sin(a.mark) ---- 3 @@ -27,21 +19,6 @@ -0.811656 0.785018 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME sinFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) WHERE a.name <> 'good' RETURN sin(a.unstrInt64Prop) -#---- 3 -#-0.544021 -#0.756802 -# - -#-NAME sinFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN sin(a.unstrNumericProp) -#---- 3 -#0.066322 -#-0.157746 -# - -NAME cosFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN cos(a.mark) ---- 3 @@ -55,21 +32,6 @@ -0.584135 0.619473 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME cosFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN cos(a.unstrInt64Prop) -#---- 3 -#-0.839072 -#-0.653644 -# - -#-NAME cosFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN cos(a.unstrNumericProp) -#---- 3 -#0.997798 -#-0.987480 -# - -NAME tanFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN tan(a.mark) ---- 3 @@ -84,21 +46,6 @@ 1.389500 1.267234 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME tanFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN tan(a.unstrInt64Prop) -#---- 3 -#0.648361 -#-1.157821 -# - -#-NAME tanFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN tan(a.unstrNumericProp) -#---- 3 -#0.066468 -#0.159746 -# - -NAME cotFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN cot(a.mark) ---- 3 @@ -113,21 +60,6 @@ 0.719683 0.789120 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME cotFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN cot(a.unstrInt64Prop) -#---- 3 -#1.542351 -#-0.863691 -# - -#-NAME cotFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN cot(a.unstrNumericProp) -#---- 3 -#15.044779 -#6.259948 -# - -NAME asinFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN asin(a.rating) ---- 3 @@ -142,21 +74,6 @@ -1.570796 -1.570796 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME asinFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN asin(a.unstrInt64Prop % 2 - 1) -#---- 3 -#-1.570796 -#-1.570796 -# - -#-NAME asinFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN asin(a.unstrNumericProp / 14) -#---- 3 -#-1.103650 -#0.237953 -# - -NAME acosFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN acos(a.rating) ---- 3 @@ -171,21 +88,6 @@ 3.141593 3.141593 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME acosFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN acos(a.unstrInt64Prop % 2 - 1) -#---- 3 -#3.141593 -#3.141593 -# - -#-NAME acosFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN acos(a.unstrNumericProp / 14) -#---- 3 -#2.674447 -#1.332843 -# - -NAME atanFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN atan(a.rating) ---- 3 @@ -200,20 +102,6 @@ -0.785398 -0.785398 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME atanFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN atan(a.unstrInt64Prop % 2 - 1) -#---- 3 -#-0.785398 -#-0.785398 -# - -#-NAME atanFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN atan(a.unstrNumericProp / 14) -#---- 3 -#-0.728855 -#0.231489 - -NAME evenFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN even(a.mark) ---- 3 @@ -228,20 +116,6 @@ 934 824 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME evenFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN even(a.unstrInt64Prop) -#---- 3 -#10 -#-4 -# - -#-NAME evenFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN even(a.unstrNumericProp) -#---- 3 -#-14 -#4 - -NAME factorialFunctionOnInt64Test -QUERY MATCH (a:organisation) RETURN factorial(a.orgCode % 20) ---- 3 @@ -249,14 +123,6 @@ 24 87178291200 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME factorialFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN factorial(a.unstrInt64Prop + 4) -#---- 3 -#87178291200 -#1 -# - -NAME signFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN sign(a.mark) ---- 3 @@ -271,20 +137,6 @@ 1 1 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME signFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN sign(a.unstrInt64Prop) -#---- 3 -#1 -#-1 -# - -#-NAME signFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN sign(a.unstrNumericProp) -#---- 3 -#-1 -#1 - -NAME sqrtFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN sqrt(a.mark) ---- 3 @@ -299,21 +151,6 @@ 30.561414 28.705400 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME sqrtFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN sqrt(a.unstrInt64Prop + 6) -#---- 3 -#1.414214 -#4.000000 -# - -#-NAME sqrtFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN sqrt(a.unstrNumericProp + 13.5) -#---- 3 -#1.000000 -#4.098780 -# - -NAME cbrtFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN cbrt(a.mark) ---- 3 @@ -328,21 +165,6 @@ 9.774974 9.375096 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME cbrtFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN cbrt(a.unstrInt64Prop) -#---- 3 -#2.154435 -#-1.587401 -# - -#-NAME cbrtFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN cbrt(a.unstrNumericProp) -#---- 3 -#-2.320794 -#1.488806 -# - -NAME gammaFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN gamma(a.mark) ---- 3 @@ -357,19 +179,6 @@ 6 6 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME gammaFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN gamma(a.unstrInt64Prop + 7) -#---- 3 -#20922789888000 -#2 - -#-NAME gammaFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN gamma(abs(a.unstrNumericProp) - 3) -#---- 3 -#119292.461995 -#2.991569 - -NAME lgammaFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN lgamma(a.mark) ---- 3 @@ -384,14 +193,6 @@ 5451.570283 4706.038471 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME lgammaFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN lgamma(a.unstrInt64Prop + 5) -#---- 3 -#0.000000 -#25.191221 -# - -NAME lnFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN ln(a.mark) ---- 3 @@ -406,21 +207,6 @@ 6.839476 6.714171 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME lnFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN ln(a.unstrInt64Prop + 5) -#---- 3 -#2.708050 -#0.000000 -# - -#-NAME lnFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN ln(a.unstrNumericProp + 13.2) -#---- 3 -#-0.356675 -#2.803360 -# - -NAME logFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN log(a.mark) ---- 3 @@ -435,21 +221,6 @@ 2.970347 2.915927 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME logFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN log(a.unstrInt64Prop + 5) -#---- 3 -#1.176091 -#0.000000 -# - -#-NAME logFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN log(a.unstrNumericProp + 13.2) -#---- 3 -#-0.154902 -#1.217484 -# - -NAME log2FunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN log2(a.mark) ---- 3 @@ -464,21 +235,6 @@ 9.867279 9.686501 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME log2FunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN log2(a.unstrInt64Prop + 5) -#---- 3 -#3.906891 -#0.000000 -# - -#-NAME log2FunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN log2(a.unstrNumericProp + 13.2) -#---- 3 -#-0.514573 -#4.044394 -# - -NAME degreesFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN degrees(a.mark) ---- 3 @@ -493,21 +249,6 @@ 53514.258065 47211.722319 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME degreesFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN degrees(a.unstrInt64Prop) -#---- 3 -#572.957795 -#-229.183118 -# - -#-NAME degreesFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN degrees(a.unstrNumericProp) -#---- 3 -#-716.197244 -#189.076072 -# - -NAME radiansFunctionOnDoubleTest -QUERY MATCH (a:organisation) RETURN radians(a.mark) ---- 3 @@ -522,21 +263,6 @@ 16.301375 14.381513 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME radiansFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN radians(a.unstrInt64Prop) -#---- 3 -#0.174533 -#-0.069813 -# - -#-NAME radiansFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN radians(a.unstrNumericProp) -#---- 3 -#-0.218166 -#0.057596 -# - -NAME atan2FunctionOnDoubleDoubleTest -QUERY MATCH (a:organisation) RETURN atan2(a.mark, a.mark) ---- 3 @@ -565,28 +291,6 @@ 1.566407 1.565821 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME atan2FunctionOnUnstrInt64DoubleTest -#-QUERY MATCH (a:organisation) RETURN atan2(a.unstrInt64Prop, a.unstrNumericProp) -#---- 3 -#1.252049 -# -# - -#-NAME atan2FunctionOnUnstrDoubleUnstrDoubleTest -#-QUERY MATCH (a:organisation) RETURN atan2(a.unstrNumericProp, a.unstrNumericProp) -#---- 3 -#-2.356194 -# -#0.785398 - -#-NAME atan2FunctionOnUnstrDoubleUnstrIntTest -#-QUERY MATCH (a:organisation) RETURN atan2(a.unstrNumericProp, a.unstrInt64Prop) -#---- 3 -# -# -#0.318748 - -NAME roundFunctionOnDoubleTest -QUERY MATCH (a:organisation) WHERE a.ID <> 2 RETURN round(a.rating, 1) ---- 3 @@ -601,36 +305,6 @@ 824.000000 934.000000 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME roundFunctionOnUnstrDoubleTest -#-QUERY MATCH (a:organisation) WHERE a.ID <> 2 RETURN round(a.unstrNumericProp, a.unstrInt64Prop) -#---- 3 -#3.300000 -# -# - -#-NAME roundFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN round(a.unstrInt64Prop, 3) -#---- 3 -#-4.000000 -#10.000000 -# - -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME bitwiseXorFunctionOnInt64Test -#-QUERY MATCH (a:organisation) WHERE a.ID <> 2 RETURN bitwise_xor(a.orgCode, a.score) -#---- 3 -#-325 -#-966 -#831 - -#-NAME bitwiseXorFunctionOnUnstrInt64Test -#-QUERY MATCH (a:organisation) RETURN bitwise_xor(a.unstrInt64Prop, a.unstrInt64Prop) -#---- 3 -#0 -#0 -# - -NAME piFunctionAddStrIntTest -QUERY MATCH (a:organisation) RETURN a.orgCode + pi() ---- 3 @@ -638,19 +312,6 @@ 937.141593 827.141593 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME piFunctionAddUnstrNumericalValTest -#-QUERY MATCH (a:person) RETURN a.unstrNumericProp + pi() -#---- 8 -#50.141593 -#55.141593 -#71.141593 -# -# -# -# -# - -NAME AbsFunctionStrInt -QUERY MATCH (a:organisation) RETURN abs(a.score) ---- 3 @@ -658,14 +319,6 @@ 2 7 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME AbsFunctionUnstrValue -#-QUERY MATCH (a:organisation) RETURN abs(a.unstrNumericProp) -#---- 3 -# -#12.500000 -#3.300000 - -NAME FloorFunctionStrInt -QUERY MATCH (a:organisation) RETURN floor(a.score) ---- 3 @@ -673,32 +326,9 @@ -100 7 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME FloorFunctionUnstrValue -#-QUERY MATCH (a:organisation) RETURN floor(a.unstrNumericProp) -#---- 3 -#-13.000000 -# -#3.000000 - -NAME CeilFunctionStrInt -QUERY MATCH (a:organisation) RETURN ceil(a.score) ---- 3 -2 -100 7 - -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME CeilFunctionUnstrValue -#-QUERY MATCH (a:organisation) RETURN ceiling(a.unstrNumericProp) -#---- 3 -#-12.000000 -# -#4.000000 - -#-NAME CeilFloorFunctionTest -#-QUERY MATCH (a:organisation) RETURN ceil(ceil(a.unstrNumericProp + abs(-0.5)) + floor(3.5)) -#---- 3 -# -#-9.000000 -#7.000000 diff --git a/test/test_files/tinySNB/function/boolean.test b/test/test_files/tinySNB/function/boolean.test index afda834407..e27b253f64 100644 --- a/test/test_files/tinySNB/function/boolean.test +++ b/test/test_files/tinySNB/function/boolean.test @@ -44,22 +44,6 @@ Greg ---- 1 7 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredBoolEqualTest -#-QUERY MATCH (a:person) WHERE a.unstrBoolProp1 = a.isStudent RETURN count(*) -#---- 1 -#2 - -#-NAME UnstructuredBoolNotEqualTest -#-QUERY MATCH (a:person) WHERE a.unstrBoolProp1 <> a.isStudent RETURN count(*) -#---- 1 -#2 - -#-NAME UnstructuredBoolComparisonTest -#-QUERY MATCH (a:person) WHERE a.unstrBoolProp1 > a.isWorker RETURN count(*) -#---- 1 -#0 - -NAME BoolExecTest4 -QUERY MATCH (a:person) WHERE a.fName = 'Alice' RETURN a.isStudent and a.isWorker ---- 1 diff --git a/test/test_files/tinySNB/function/cast.test b/test/test_files/tinySNB/function/cast.test index 13049d0cd1..46ae0d01f4 100644 --- a/test/test_files/tinySNB/function/cast.test +++ b/test/test_files/tinySNB/function/cast.test @@ -105,100 +105,3 @@ Hubert Blaine Wolfeschlegelsteinhausenbergerdorff [[8]] [[10]] [[7],[10],[6,7]] - -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME CastUnstructuredNumericValueToString -#-QUERY MATCH (p:person) RETURN string(p.unstrNumericProp) -#---- 8 -#47 -#52 -#68.000000 -# -# -# -# -# - -#-NAME CastBoolToUnstructured -#-QUERY MATCH (p:person) RETURN p.unstrBoolProp1 = p.isStudent -#---- 8 -# -# -#True -#True -#False -# -# -#False - -#-NAME CastInt64ToUnstructured -#-QUERY MATCH (p:person) RETURN round(p.unstrNumericProp, p.gender) -#---- 8 -# -# -#47.000000 -#52.000000 -# -#68.000000 -# -# - -#-NAME CastDoubleToUnstructured -#-QUERY MATCH (p:person) RETURN atan2(p.unstrNumericProp, p.eyeSight) -#---- 8 -# -# -#1.462709 -#1.474937 -# -#1.501788 -# -# - -#-NAME CastDateToUnstructured -#-QUERY MATCH (p:person) RETURN least(p.unstrDateProp1, p.birthdate) -#---- 8 -#1900-01-01 -#1900-01-01 -#1940-06-22 -# -# -# -# -# - -#-NAME CastTimestampToUnstructured -#-QUERY MATCH (p:person) RETURN least(p.unstrTimestampProp1, p.registerTime) -#---- 8 -# -# -# -#2031-11-30 12:25:30 -#1946-08-25 19:07:22 -# -#1962-05-22 13:11:22.562 -#2023-02-21 13:25:30 - -#-NAME CastIntervalToUnstructured -#-QUERY MATCH (p:person) RETURN date_part(p.datePart, p.lastJobDuration) -#---- 8 -# -# -# -# -#0 -# -# -#5 - -#-NAME CastStringToUnstructured -#-QUERY MATCH (p:person) RETURN p.fName = p.label1 -#---- 8 -# -# -# -# -#False -#False -#False -#False diff --git a/test/test_files/tinySNB/function/date.test b/test/test_files/tinySNB/function/date.test index 6f0b546133..72726a3b07 100644 --- a/test/test_files/tinySNB/function/date.test +++ b/test/test_files/tinySNB/function/date.test @@ -3,42 +3,6 @@ ---- 1 2 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredStructuredDateComparison -#-QUERY MATCH (a:person) WHERE a.birthdate = a.unstrDateProp1 RETURN COUNT(*) -#---- 1 -#1 - -#-NAME DateTimestampEqual -#-QUERY MATCH (a:person) WHERE a.unstrDateProp2 = timestamp('1920-01-01') RETURN COUNT(*) -#---- 1 -#1 - -#-NAME DateTimestampGreaterThan -#-QUERY MATCH (a:person) WHERE a.unstrDateProp2 >= timestamp('1920-01-01') RETURN COUNT(*) -#---- 1 -#3 - -#-NAME TwoUnstructuredDateNotEqual -#-QUERY MATCH (a:person) WHERE a.unstrDateProp1 <> a.unstrDateProp2 RETURN COUNT(*) -#---- 1 -#2 - -#-NAME TwoUnstructuredDateEqual -#-QUERY MATCH (a:person) WHERE a.unstrDateProp1 = a.unstrDateProp2 RETURN COUNT(*) -#---- 1 -#1 - -#-NAME TwoUnstructuredDateComparison -#-QUERY MATCH (a:person) WHERE a.unstrDateProp1 >= a.unstrDateProp2 RETURN COUNT(*) -#---- 1 -#1 - -#-NAME UnstructuredDateLiteralComparison -#-QUERY MATCH (a:person) WHERE a.unstrDateProp1 <= date('1990-02-02') RETURN COUNT(*) -#---- 1 -#3 - -NAME StructuredDateArithmeticAddInt -QUERY MATCH (a:person) RETURN a.birthdate + 32 ---- 8 @@ -63,31 +27,6 @@ 1980-11-27 1990-12-29 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateArithmeticAddInt -#-QUERY MATCH (a:person) RETURN a.unstrDateProp1 + 41 -#---- 8 -# -# -# -# -# -#1900-02-11 -#1950-02-11 -#1950-02-11 - -#-NAME IntArithmeticAddUnstructuredDate -#-QUERY MATCH (a:person) RETURN 52 + a.unstrDateProp1 -#---- 8 -# -# -# -# -# -#1900-02-22 -#1950-02-22 -#1950-02-22 - -NAME StructuredDateArithmeticAddInterval1 -QUERY MATCH (a:person) WHERE a.birthdate <> date('1900-01-01') RETURN a.birthdate + interval('2 years 3 months 4 days') ---- 6 @@ -108,19 +47,6 @@ 1980-10-28 1990-11-29 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateArithmeticAddInterval -#-QUERY MATCH (a:person) RETURN a.unstrDateProp2 + interval('20 years 3 days 32 minutes 10512 ms') -#---- 8 -# -# -# -# -# -#1940-01-04 -#1970-01-04 -#1990-01-04 - -NAME structuredDateArithmeticSubtractInt -QUERY MATCH (a:person) WHERE a.birthdate <> date('1900-01-01') RETURN a.birthdate - 25 ---- 6 @@ -131,19 +57,6 @@ 1980-10-01 1990-11-02 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateArithmeticSubtractInt -#-QUERY MATCH (a:person) RETURN a.unstrDateProp1 - 25 -#---- 8 - - - - - -1899-12-07 -1949-12-07 -1949-12-07 - -NAME StructuredDateArithmeticSubtractInterval -QUERY MATCH (a:person) WHERE a.birthdate <> date('1900-01-01') RETURN a.birthdate - interval('4 years 11 months 31 days 100 seconds') ---- 6 @@ -154,19 +67,6 @@ 1975-10-26 1985-11-26 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateArithmeticSubtractInterval -#-QUERY MATCH (a:person) RETURN a.unstrDateProp1 - interval('15 month 32 days 30 minutes 40 minute') -#---- 8 -# -# -# -# -# -#1898-08-30 -#1948-08-30 -#1948-08-30 - -NAME StructuredDateArithmeticSubtractDate -QUERY MATCH (a:person) RETURN a.birthdate - date('1920-03-21') ---- 8 @@ -179,19 +79,6 @@ 25818 7398 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateArithmeticSubtractDate -#-QUERY MATCH (a:person) RETURN a.unstrDateProp1 - date('1921-05-04') -#---- 8 -# -# -# -# -# -#-7793 -#10469 -#10469 - -NAME StructuredDateMixedArithmeticOperations -QUERY MATCH (a:person) RETURN a.birthdate + 10 - interval('4 years 2 months 3 days') - 20 - date('1912-04-12'); ---- 8 @@ -204,19 +91,6 @@ 23499 27183 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateMixedArithmeticOperations -#-QUERY MATCH (a:person) RETURN a.unstrDateProp1 + 100 - interval('11 months 12 days') - 10 - date('1945-04-12'); -#---- 8 -# -# -# -# -# -#-16794 -#1468 -#1468 - -NAME StructuredDateConcatenateString -QUERY MATCH (a:person) RETURN concat(concat('Birthdate: ', string(a.birthdate)), ' test') ---- 8 @@ -229,26 +103,6 @@ Birthdate: 1980-10-26 test Birthdate: 1980-10-26 test Birthdate: 1990-11-27 test -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateConcatenateString -#-QUERY MATCH (a:person) RETURN concat(concat('unstrDate: ', a.unstrDateProp1), ' test') -#---- 8 -# -# -# -# -# -#unstrDate: 1900-01-01 test -#unstrDate: 1950-01-01 test -#unstrDate: 1950-01-01 test - -#-NAME CastToDate -#-QUERY MATCH (a:organisation) RETURN date(a.unstrStringProp) -#---- 3 -# -# -#1900-01-01 - -NAME StructuredDateDayNameFuncTest -QUERY MATCH (p:person) RETURN dayname(p.birthdate) ---- 8 @@ -261,19 +115,6 @@ Sunday Sunday Tuesday -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateDayNameFuncTest -#-QUERY MATCH (p:person) RETURN dayname(p.unstrDateProp) -#---- 8 -#Tuesday -#Tuesday -#Saturday -# -# -# -# -# - -NAME StructuredDateMonthNameFuncTest -QUERY MATCH (p:person) RETURN monthname(p.birthdate) ---- 8 @@ -286,19 +127,6 @@ October October November -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateMonthNameFuncTest -#-QUERY MATCH (p:person) RETURN monthname(p.unstrDateProp) -#---- 8 -#July -#February -#February -# -# -# -# -# - -NAME StructuredDateLastDayFuncTest -QUERY MATCH (p:person) RETURN last_day(p.birthdate) ---- 8 @@ -311,19 +139,6 @@ November 1980-10-31 1990-11-30 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateLastDayFuncTest -#-QUERY MATCH (p:person) RETURN last_day(p.unstrDateProp) -#---- 8 -#1952-07-31 -#2019-02-28 -#2020-02-29 -# -# -# -# -# - -NAME StructuredDateExtractYearFuncTest -QUERY MATCH (p:person) RETURN date_part("year", p.birthdate) ---- 8 @@ -336,19 +151,6 @@ November 1980 1990 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateExtractYearFuncTest -#-QUERY MATCH (p:person) RETURN date_part("Y", p.unstrDateProp) -#---- 8 -#1952 -#2019 -#2020 -# -# -# -# -# - -NAME StructuredDateExtractMonthFuncTest -QUERY MATCH (p:person) RETURN date_part("month", p.birthdate) ---- 8 @@ -361,18 +163,6 @@ November 10 11 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateExtractMonthFuncTest -#-QUERY MATCH (p:person) RETURN date_part("mon", p.unstrDateProp) -#---- 8 -#7 -#2 -#2 -# -# -# -# - -NAME StructuredDateExtractDayFuncTest -QUERY MATCH (p:person) RETURN date_part("Day", p.birthdate) ---- 8 @@ -385,19 +175,6 @@ November 26 27 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateExtractDayFuncTest -#-QUERY MATCH (p:person) RETURN date_part("daYs", p.unstrDateProp) -#---- 8 -#15 -#12 -#29 -# -# -# -# -# - -NAME StructuredDateExtractDecadeFuncTest -QUERY MATCH (p:person) RETURN date_part("decadE", p.birthdate) ---- 8 @@ -410,19 +187,6 @@ November 198 199 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateExtractDecadeFuncTest -#-QUERY MATCH (p:person) RETURN date_part("decAdes", p.unstrDateProp) -#---- 8 -#195 -#201 -#202 -# -# -# -# -# - -NAME StructuredDateExtractCenturyFuncTest -QUERY MATCH (p:person) RETURN date_part("cenTury", p.birthdate) ---- 8 @@ -435,19 +199,6 @@ November 20 20 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateExtractCenturyFuncTest -#-QUERY MATCH (p:person) RETURN date_part("Centuries", p.unstrDateProp) -#---- 8 -#20 -#21 -#21 -# -# -# -# -# - -NAME StructuredDateExtractMillenniumFuncTest -QUERY MATCH (p:person) RETURN date_part("millenniuM", p.birthdate) ---- 8 @@ -460,19 +211,6 @@ November 2 2 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateExtractMillenniumFuncTest -#-QUERY MATCH (p:person) RETURN date_part("millennia", p.unstrDateProp) -#---- 8 -#2 -#3 -#3 -# -# -# -# -# - -NAME StructuredDateExtractQuarterFuncTest -QUERY MATCH (p:person) RETURN date_part("quarTer", p.birthdate) ---- 8 @@ -485,19 +223,6 @@ November 4 4 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateExtractQuarterFuncTest -#-QUERY MATCH (p:person) RETURN date_part("Quarters", p.unstrDateProp) -#---- 8 -#3 -#1 -#1 -# -# -# -# -# - -NAME StructuredDateExtractMicroSecondsFuncTest -QUERY MATCH (p:person) RETURN date_part("microseconds", p.birthdate) ---- 8 @@ -510,19 +235,6 @@ November 0 0 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateExtractMicroSecondsFuncTest -#-QUERY MATCH (p:person) RETURN datepart("microsEcond", p.unstrDateProp) -#---- 8 -#0 -#0 -#0 -# -# -# -# -# - -NAME StructuredDateTruncYearFuncTest -QUERY MATCH (p:person) RETURN date_trunc("year", p.birthdate) ---- 8 @@ -535,19 +247,6 @@ November 1980-01-01 1990-01-01 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateTruncYearFuncTest -#-QUERY MATCH (p:person) RETURN datetrunc("YEAR", p.unstrDateProp) -#---- 8 -#1952-01-01 -#2019-01-01 -#2020-01-01 -# -# -# -# -# - -NAME StructuredDateTruncMonthFuncTest -QUERY MATCH (p:person) RETURN date_trunc("month", p.birthdate) ---- 8 @@ -560,18 +259,6 @@ November 1980-10-01 1990-11-01 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateTruncMonthFuncTest -#-QUERY MATCH (p:person) RETURN date_trunc("month", p.unstrDateProp) -#---- 8 -#1952-07-01 -#2019-02-01 -#2020-02-01 -# -# -# -# - -NAME StructuredDateTruncDayFuncTest -QUERY MATCH (p:person) RETURN date_trunc("Day", p.birthdate) ---- 8 @@ -584,18 +271,6 @@ November 1980-10-26 1990-11-27 -#-NAME UnstructuredDateTruncDayFuncTest -#-QUERY MATCH (p:person) RETURN date_trunc("daY", p.unstrDateProp) -#---- 8 -#1952-07-15 -#2019-02-12 -#2020-02-29 -# -# -# -# -# - -NAME StructuredDateTruncDecadeFuncTest -QUERY MATCH (p:person) RETURN date_trunc("decadE", p.birthdate) ---- 8 @@ -608,19 +283,6 @@ November 1980-01-01 1990-01-01 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateTruncDecadeFuncTest -#-QUERY MATCH (p:person) RETURN date_trunc("decAde", p.unstrDateProp) -#---- 8 -#1950-01-01 -#2010-01-01 -#2020-01-01 -# -# -# -# -# - -NAME StructuredDateTruncCenturyFuncTest -QUERY MATCH (p:person) RETURN date_trunc("cenTury", p.birthdate) ---- 8 @@ -633,19 +295,6 @@ November 1900-01-01 1900-01-01 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateTruncCenturyFuncTest -#-QUERY MATCH (p:person) RETURN date_trunc("Century", p.unstrDateProp) -#---- 8 -#1900-01-01 -#2000-01-01 -#2000-01-01 -# -# -# -# -# - -NAME StructuredDateTruncMillenniumFuncTest -QUERY MATCH (p:person) RETURN date_trunc("millenniuM", p.birthdate) ---- 8 @@ -658,19 +307,6 @@ November 1000-01-01 1000-01-01 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateTruncMillenniumFuncTest -#-QUERY MATCH (p:person) RETURN date_trunc("millennIum", p.unstrDateProp) -#---- 8 -#1000-01-01 -#2000-01-01 -#2000-01-01 -# -# -# -# -# - -NAME StructuredDateTruncQuarterFuncTest -QUERY MATCH (p:person) RETURN date_trunc("quarTer", p.birthdate) ---- 8 @@ -683,19 +319,6 @@ November 1980-10-01 1990-10-01 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateTruncQuarterFuncTest -#-QUERY MATCH (p:person) RETURN date_trunc("Quarter", p.unstrDateProp) -#---- 8 -#1952-07-01 -#2019-01-01 -#2020-01-01 -# -# -# -# -# - -NAME StructuredDateTruncSecondFuncTest -QUERY MATCH (p:person) RETURN date_trunc("second", p.birthdate) ---- 8 @@ -708,19 +331,6 @@ November 1980-10-26 1990-11-27 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateTruncSecondFuncTest -#-QUERY MATCH (p:person) RETURN date_trunc("sEconds", p.unstrDateProp) -#---- 8 -#1952-07-15 -#2019-02-12 -#2020-02-29 -# -# -# -# -# - -NAME StructuredDateGreatestFuncTest -QUERY MATCH (p:person) RETURN greatest(p.birthdate, date("1980-10-02")) ---- 8 @@ -733,19 +343,6 @@ November 1980-10-26 1990-11-27 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateGreatestFuncTest -#-QUERY MATCH (p:person) RETURN greatest(p.unstrDateProp, date("1975-12-22")) -#---- 8 -#1975-12-22 -#2019-02-12 -#2020-02-29 -# -# -# -# -# - -NAME StructuredDateLeastFuncTest -QUERY MATCH (p:person) RETURN least(p.birthdate, date("1980-10-02")) ---- 8 @@ -758,19 +355,6 @@ November 1980-10-02 1980-10-02 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredDateLeastFuncTest -#-QUERY MATCH (p:person) RETURN least(p.unstrDateProp, date("1975-12-22")) -#---- 8 -#1952-07-15 -#1975-12-22 -#1975-12-22 -# -# -# -# -# - -NAME StructuredIntMakeDateTest -QUERY MATCH (o:organisation) RETURN make_date(o.orgCode * 3, o.ID, 20) ---- 3 @@ -778,18 +362,6 @@ November 2802-04-20 2472-06-20 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntMakeDateTest -#-QUERY MATCH (p:person) RETURN make_date(1997, 12, p.unstrInt64Prop2 % 30) -#---- 8 -# -# -# -#1997-12-20 -# -#1997-12-13 -# - -NAME StructuredDateComparisonAcrossNodesNonEquality -QUERY MATCH (a:person)-[e1:knows]->(b:person) WHERE a.birthdate <> b.birthdate RETURN COUNT(*) ---- 1 diff --git a/test/test_files/tinySNB/function/interval.test b/test/test_files/tinySNB/function/interval.test index c7a53387f9..32ad697632 100644 --- a/test/test_files/tinySNB/function/interval.test +++ b/test/test_files/tinySNB/function/interval.test @@ -10,27 +10,6 @@ ---- 1 2 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredStructuredIntervalComparison -#-QUERY MATCH (o:organisation) WHERE o.licenseValidInterval = o.unstrIntervalProp1 RETURN COUNT(*) -#---- 1 -#1 - -#-NAME TwoUnstructuredIntervalComparison1 -#-QUERY MATCH (o:organisation) WHERE o.unstrIntervalProp1 <> o.unstrIntervalProp2 RETURN COUNT(*) -#---- 1 -#1 - -#-NAME TwoUnstructuredIntervalComparison2 -#-QUERY MATCH (o:organisation) WHERE o.unstrIntervalProp1 <= o.unstrIntervalProp2 RETURN COUNT(*) -#---- 1 -#2 - -#-NAME UnstructuredIntervalFunctionComparison -#-QUERY MATCH (o:organisation) WHERE o.unstrIntervalProp1 <= Interval('8 years 42 days 3 hours') RETURN COUNT(*) -#---- 1 -#1 - -NAME StructuredIntervalAdd -QUERY MATCH (a:person) RETURN a.lastJobDuration + interval('47 hours 30 minutes 30 seconds') ---- 8 @@ -65,26 +44,6 @@ 2025-02-25 23:53:30.30002 2033-12-04 22:53:30.30002 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME StructuredIntervalAddUnstructuredTime -#-QUERY MATCH (a:person) RETURN a.lastJobDuration + a.unstrTimeProp1 -#---- 8 -#1903-01-03 -#1982-05-04 -#1985-05-06 14:04:07 -#2008-11-05 13:49:41.000526 -# -# -# -# - -#-NAME UnstructuredIntervalAdd -#-QUERY MATCH (o:organisation) RETURN o.unstrIntervalProp1 + interval('10 years 20 days 42 h 32 minutes 312 milliseconds') -#---- 3 -# -#10 years 68 days 65:32:00.312 -#36 years 72 days 90:32:00.312 - -NAME StructuredIntervalSubtract -QUERY MATCH (a:person) RETURN a.lastJobDuration - interval('52 days 42 hours 31 seconds 22 milliseconds') ---- 8 @@ -97,14 +56,6 @@ 3 years -50 days -28:58:31.022 3 years -50 days -28:58:31.022 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalSubtract -#-QUERY MATCH (o:organisation) RETURN o.unstrIntervalProp1 - interval('40 months 200 days 420 hour 320 minutes 312 seconds') -#---- 3 -# -#-3 years -4 months -152 days -402:25:12 -#22 years 8 months -148 days -377:25:12 - -NAME StructuredIntervalMixedArithmeticOperations -QUERY MATCH (a:person) RETURN a.lastJobDuration + interval('2 hours 48 minutes 1000 seconds') - interval('188 days 48 hours') + interval('5 years 100 microseconds') ---- 8 @@ -117,14 +68,6 @@ 8 years -186 days -31:53:19.9999 8 years -186 days -31:53:19.9999 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalMixedArithmeticOperations -#-QUERY MATCH (o:organisation) RETURN o.unstrIntervalProp1 - interval('2 years 18 days 24 minutes') + interval('12 hours 100 seconds') - interval('100 days 32 hours 32 minutes') -#---- 3 -# -#-2 years -70 days 02:05:40 -#24 years -66 days 27:05:40 - -NAME StructuredIntervalConcatenateString -QUERY MATCH (o:organisation) RETURN concat(concat('The license is valid until ', string(o.licenseValidInterval)), ' test') ---- 3 @@ -132,14 +75,6 @@ The license is valid until 26 years 52 days 48:00:00 test The license is valid until 3 years 5 days test The license is valid until 82:00:00.1 test -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalConcatenateString -#-QUERY MATCH (o:organisation) RETURN concat(concat('unstrIntervalProp1: ', o.unstrIntervalProp1), ' test') -#---- 3 -# -#unstrIntervalProp1: 26 years 52 days 48:00:00 test -#unstrIntervalProp1: 48 days 23:00:00 test - -NAME StructuredIntervalDivideInt -QUERY MATCH (p:person) RETURN p.lastJobDuration / 3 ---- 8 @@ -182,14 +117,6 @@ The license is valid until 82:00:00.1 test 4 years 6 days 09:36:00 8 days 06:00:00 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalDivideInt -#-QUERY MATCH (o:organisation) RETURN o.unstrIntervalProp1 / 8 -#---- 3 -# -#3 years 3 months 6 days 18:00:00 -#6 days 02:52:30 - -NAME StructuredIntervalExtractYearFuncTest -QUERY MATCH (p:person) RETURN date_part("yeAr", p.lastJobDuration) ---- 8 @@ -202,19 +129,6 @@ The license is valid until 82:00:00.1 test 10 3 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalExtractYearFuncTest -#-QUERY MATCH (p:person) RETURN date_part("Y", p.unstrIntervalProp) -#---- 8 -#5 -#0 -# -# -# -# -# -# - -NAME StructuredIntervalExtractMonthFuncTest -QUERY MATCH (p:person) RETURN date_part("month", p.lastJobDuration) ---- 8 @@ -227,19 +141,6 @@ The license is valid until 82:00:00.1 test 5 0 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalExtractMonthFuncTest -#-QUERY MATCH (p:person) RETURN date_part("months", p.unstrIntervalProp) -#---- 8 -#0 -#0 -# -# -# -# -# -# - -NAME StructuredIntervalExtractDayFuncTest -QUERY MATCH (p:person) RETURN date_part("day", p.lastJobDuration) ---- 8 @@ -252,19 +153,6 @@ The license is valid until 82:00:00.1 test 0 2 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalExtractDayFuncTest -#-QUERY MATCH (p:person) RETURN date_part("day", p.unstrIntervalProp) -#---- 8 -#700 -#300 -# -# -# -# -# -# - -NAME StructuredIntervalExtractDecadeFuncTest -QUERY MATCH (p:person) RETURN date_part("Decade", p.lastJobDuration) ---- 8 @@ -277,19 +165,6 @@ The license is valid until 82:00:00.1 test 1 0 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalExtractDecadeFuncTest -#-QUERY MATCH (p:person) RETURN date_part("decade", p.unstrIntervalProp) -#---- 8 -#0 -#0 -# -# -# -# -# -# - -NAME StructuredIntervalExtractCenturyFuncTest -QUERY MATCH (p:person) RETURN date_part("century", p.lastJobDuration) ---- 8 @@ -302,19 +177,6 @@ The license is valid until 82:00:00.1 test 0 0 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalExtractCenturyFuncTest -#-QUERY MATCH (p:person) RETURN date_part("century", p.unstrIntervalProp) -#---- 8 -#0 -#0 -# -# -# -# -# -# - -NAME StructuredIntervalExtractMillenniumFuncTest -QUERY MATCH (p:person) RETURN date_part("MILLENNIUM", p.lastJobDuration) ---- 8 @@ -327,19 +189,6 @@ The license is valid until 82:00:00.1 test 0 0 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalExtractMillenniumFuncTest -#-QUERY MATCH (p:person) RETURN date_part("MILLENNIUM", p.unstrIntervalProp) -#---- 8 -#0 -#0 -# -# -# -# -# -# - -NAME StructuredIntervalExtractQuarterFuncTest -QUERY MATCH (p:person) RETURN date_part("QUARTER", p.lastJobDuration) ---- 8 @@ -352,19 +201,6 @@ The license is valid until 82:00:00.1 test 2 1 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalExtractQuarterFuncTest -#-QUERY MATCH (p:person) RETURN date_part("QUARTER", p.unstrIntervalProp) -#---- 8 -#1 -#1 -# -# -# -# -# -# - -NAME StructuredIntervalExtractMicrosecondFuncTest -QUERY MATCH (p:person) RETURN date_part("MICROSECOND", p.lastJobDuration) ---- 8 @@ -377,19 +213,6 @@ The license is valid until 82:00:00.1 test 24 0 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalExtractMicrosecondFuncTest -#-QUERY MATCH (p:person) RETURN date_part("MICROSECOND", p.unstrIntervalProp) -#---- 8 -#0 -#1000 -# -# -# -# -# -# - -NAME StructuredIntervalExtractMillisecondFuncTest -QUERY MATCH (p:person) RETURN date_part("MILLISECOND", p.lastJobDuration) ---- 8 @@ -402,19 +225,6 @@ The license is valid until 82:00:00.1 test 0 0 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalExtractMillisecondFuncTest -#-QUERY MATCH (p:person) RETURN date_part("MILLISECOND", p.unstrIntervalProp) -#---- 8 -#0 -#1 -# -# -# -# -# -# - -NAME StructuredIntervalExtractSecondFuncTest -QUERY MATCH (p:person) RETURN date_part("second", p.lastJobDuration) ---- 8 @@ -427,18 +237,6 @@ The license is valid until 82:00:00.1 test 0 0 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalExtractSecondFuncTest -#-QUERY MATCH (p:person) RETURN date_part("seconds", p.unstrIntervalProp) -#---- 8 -#0 -#0 -# -# -# -# -# -# -NAME StructuredIntervalExtractMinuteFuncTest -QUERY MATCH (p:person) RETURN date_part("minutes", p.lastJobDuration) @@ -452,19 +250,6 @@ The license is valid until 82:00:00.1 test 0 2 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalExtractMinuteFuncTest -#-QUERY MATCH (p:person) RETURN date_part("minute", p.unstrIntervalProp) -#---- 8 -#0 -#40 -# -# -# -# -# -# - -NAME StructuredIntervalExtractHourFuncTest -QUERY MATCH (p:person) RETURN date_part("hours", p.lastJobDuration) ---- 8 @@ -477,19 +262,6 @@ The license is valid until 82:00:00.1 test 13 13 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredIntervalExtractHourFuncTest -#-QUERY MATCH (p:person) RETURN date_part("hour", p.unstrIntervalProp) -#---- 8 -#5000 -#50 -# -# -# -# -# -# - -NAME StructuredInt64ToYearFuncTest -QUERY MATCH (p:person) RETURN to_years(p.age) ---- 8 @@ -502,19 +274,6 @@ The license is valid until 82:00:00.1 test 40 years 83 years -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredInt64ToYearFuncTest -#-QUERY MATCH (p:person) RETURN to_years(p.unstrInt64Prop2) -#---- 8 -#20 years -#43 years -# -# -# -# -# -# - -NAME StructuredInt64ToMonthsFuncTest -QUERY MATCH (p:person) RETURN to_months(p.age) ---- 8 @@ -527,19 +286,6 @@ The license is valid until 82:00:00.1 test 3 years 4 months 6 years 11 months -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredInt64ToMonthsFuncTest -#-QUERY MATCH (p:person) RETURN to_months(p.unstrInt64Prop2) -#---- 8 -#1 year 8 months -#3 years 7 months -# -# -# -# -# -# - -NAME StructuredInt64ToDaysFuncTest -QUERY MATCH (p:person) RETURN to_days(p.age) ---- 8 @@ -552,19 +298,6 @@ The license is valid until 82:00:00.1 test 40 days 83 days -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredInt64ToDaysFuncTest -#-QUERY MATCH (p:person) RETURN to_days(p.unstrInt64Prop2) -#---- 8 -#20 days -#43 days -# -# -# -# -# -# - -NAME StructuredInt64ToHoursFuncTest -QUERY MATCH (p:person) RETURN to_hours(p.age) ---- 8 @@ -577,19 +310,6 @@ The license is valid until 82:00:00.1 test 40:00:00 83:00:00 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredInt64ToHoursFuncTest -#-QUERY MATCH (p:person) RETURN to_hours(p.unstrInt64Prop2) -#---- 8 -#20:00:00 -#43:00:00 -# -# -# -# -# -# - -NAME StructuredInt64ToMinutesFuncTest -QUERY MATCH (p:person) RETURN to_minutes(p.age) ---- 8 @@ -602,19 +322,6 @@ The license is valid until 82:00:00.1 test 00:40:00 01:23:00 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredInt64ToMinutesFuncTest -#-QUERY MATCH (p:person) RETURN to_minutes(p.unstrInt64Prop2) -#---- 8 -#00:20:00 -#00:43:00 -# -# -# -# -# -# - -NAME StructuredInt64ToSecondsFuncTest -QUERY MATCH (p:person) RETURN to_seconds(p.age) ---- 8 @@ -627,19 +334,6 @@ The license is valid until 82:00:00.1 test 00:00:40 00:01:23 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredInt64ToSecondsFuncTest -#-QUERY MATCH (p:person) RETURN to_seconds(p.unstrInt64Prop2) -#---- 8 -#00:00:20 -#00:00:43 -# -# -# -# -# -# - -NAME StructuredInt64ToMillisecondsFuncTest -QUERY MATCH (p:person) RETURN to_milliseconds(p.age) ---- 8 @@ -652,19 +346,6 @@ The license is valid until 82:00:00.1 test 00:00:00.04 00:00:00.083 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredInt64ToMillisecondsFuncTest -#-QUERY MATCH (p:person) RETURN to_milliseconds(p.unstrInt64Prop2) -#---- 8 -#00:00:00.02 -#00:00:00.043 -# -# -# -# -# -# - -NAME StructuredInt64ToMicrosecondsFuncTest -QUERY MATCH (p:person) RETURN to_microseconds(p.age) ---- 8 @@ -677,19 +358,6 @@ The license is valid until 82:00:00.1 test 00:00:00.00004 00:00:00.000083 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredInt64ToMicrosecondsFuncTest -#-QUERY MATCH (p:person) RETURN to_microseconds(p.unstrInt64Prop2) -#---- 8 -#00:00:00.00002 -#00:00:00.000043 -# -# -# -# -# -# - -NAME StructuredIntervalComparisonAcrossNodesNonEquality -QUERY MATCH (a:person)-[e1:knows]->(b:person) WHERE a.lastJobDuration <> b.lastJobDuration RETURN COUNT(*) ---- 1 diff --git a/test/test_files/tinySNB/function/list.test b/test/test_files/tinySNB/function/list.test index a8607f2ed8..f308d6a247 100644 --- a/test/test_files/tinySNB/function/list.test +++ b/test/test_files/tinySNB/function/list.test @@ -634,14 +634,6 @@ ABFs CsWo DEsW -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME ListSliceUnstructuredString -#-QUERY MATCH (o:organisation) RETURN o.unstrStr[5:8] -#---- 3 -#RfEC -#cELL -# org - -NAME ListSliceStructuredStringRight -QUERY MATCH (a:person) RETURN a.fName[4:] ---- 8 @@ -682,23 +674,3 @@ DEsWork -QUERY RETURN array_contains([[100,200],[200,300],[300,400]], [100,200]) ---- 1 True - -# TODO(Xiyang): this is most likely a list executor bug -#-NAME ListCreate2 -#-QUERY MATCH (a:person)-[:knows]->(b:person) RETURN [a.age, b.age] -#-ENUMERATE -#---- 14 -#[20,25] -#[20,30] -#[20,35] -#[20,40] -#[20,45] -#[30,20] -#[30,35] -#[30,45] -#[35,20] -#[35,30] -#[35,45] -#[45,20] -#[45,30] -#[45,35] diff --git a/test/test_files/tinySNB/function/string.test b/test/test_files/tinySNB/function/string.test index 5b5c7eb003..7bae4e3bc6 100644 --- a/test/test_files/tinySNB/function/string.test +++ b/test/test_files/tinySNB/function/string.test @@ -88,23 +88,11 @@ ---- 1 1 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstrDateVarAndStrVarConcatUnstructured -#-QUERY MATCH (a:person) WHERE '1950-01-01Carol' = concat(a.unstrDateProp1, a.fName) RETURN COUNT(*) -#---- 1 -#1 - -NAME TimestampVarAndStrVarConcatStructured -QUERY MATCH (a:person) WHERE '2011-08-20 11:25:30Alice' = concat(string(a.registerTime), a.fName) RETURN COUNT(*) ---- 1 1 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstrTimestampVarAndStrVarConcatUnstructured -#-QUERY MATCH (a:person) WHERE '1962-05-22 13:11:22.562Greg' = concat(a.unstrTimestampProp1, a.fName) RETURN COUNT(*) -#---- 1 -#1 - -NAME ContainsReturn -QUERY MATCH (a:person) RETURN a.fName, a.fName CONTAINS "a" ORDER BY a.fName ---- 8 @@ -132,12 +120,6 @@ Bob ---- 1 7 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME ContainsSelect4 -#-QUERY MATCH (a:person) WHERE a.fName <> "Alice" and a.label2 CONTAINS a.label2 RETURN count(*) -#---- 1 -#4 - -NAME StartsWithReturn1 -QUERY MATCH (a:person) RETURN a.fName, a.fName STARTS WITH "A" ORDER BY a.fName ---- 8 @@ -157,30 +139,6 @@ True False False -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME StartsWithReturn2 -#-QUERY MATCH (a:person) RETURN a.label1, a.label1 STARTS WITH "g" ORDER BY a.fName -#---- 8 -#excellent|False -#good|True -#good|True -#good|True -#| -#| -#| -#| - -#-NAME StartsWithFilterReturn -#-QUERY MATCH (a:person) WHERE a.ID <> 0 RETURN a.label1, a.label1 STARTS WITH "g" ORDER BY a.fName -#---- 7 -#excellent|False -#good|True -#good|True -#| -#| -#| -#| - -NAME StartsWithSelect -QUERY MATCH (a:person) WHERE a.fName STARTS WITH "C" RETURN a.fName ---- 1 @@ -200,14 +158,6 @@ sóló cón tu párejâ the 😂😃🧘🏻‍♂️🌍🌦️🍞🚗 movie roma -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME LowerUnstructuredStr -#-QUERY MATCH (o:organisation) RETURN lower(o.unstrStr) -#---- 3 -# perfect -# excellent organisation -#good organisation ! - -NAME UpperStructuredStr -QUERY MATCH (o:organisation) RETURN upper(o.name) ---- 3 @@ -222,14 +172,6 @@ SÓLÓ CÓN TU PÁREJÂ THE 😂😃🧘🏻‍♂️🌍🌦️🍞🚗 MOVIE ROMA -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UpperUnstructuredStr -#-QUERY MATCH (o:organisation) RETURN ucase(o.unstrStr) -#---- 3 -# PERFECT -# EXCELLENT ORGANISATION -#GOOD ORGANISATION ! - -NAME TrimStructuredStr -QUERY MATCH (o:organisation) RETURN trim(o.name) ---- 3 @@ -237,14 +179,6 @@ ABFsUni CsWork DEsWork -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME TrimUnstructuredStr -#-QUERY MATCH (o:organisation) RETURN trim(o.unstrStr) -#---- 3 -#pERfECt -#EXcELLENT organisation -#GoOd organisation ! - -NAME LtrimStructuredStr -QUERY MATCH (o:organisation) RETURN ltrim(o.name) ---- 3 @@ -252,14 +186,6 @@ ABFsUni CsWork DEsWork -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME LtrimUnstructuredStr -#-QUERY MATCH (o:organisation) RETURN ltrim(o.unstrStr) -#---- 3 -#pERfECt -#EXcELLENT organisation -#GoOd organisation ! - -NAME RtrimStructuredStr -QUERY MATCH (o:organisation) RETURN rtrim(o.name) ---- 3 @@ -267,14 +193,6 @@ ABFsUni CsWork DEsWork -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME RtrimUnstructuredStr -#-QUERY MATCH (o:organisation) RETURN rtrim(o.unstrStr) -#---- 3 -# pERfECt -# EXcELLENT organisation -#GoOd organisation ! - -NAME ReverseStructuredStr -QUERY MATCH (o:organisation) RETURN reverse(o.name) ---- 3 @@ -289,14 +207,6 @@ kroWsED eivom 🚗🍞🌦️🌍🧘🏻‍♂️😃😂 ehT amoR -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME ReverseUnstructuredStr -#-QUERY MATCH (o:organisation) RETURN reverse(o.unstrStr) -#---- 3 -#tCEfREp -# noitasinagro TNELLEcXE -# ! noitasinagro dOoG - -NAME LengthStructuredStr -QUERY MATCH (o:organisation) RETURN length(o.name) ---- 3 @@ -304,14 +214,6 @@ amoR 6 7 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME LengthUnstructuredStr -#-QUERY MATCH (o:organisation) RETURN length(o.unstrStr) -#---- 3 -#9 -#27 -#20 - -NAME RepeatStructuredStr -QUERY MATCH (o:organisation) RETURN repeat(o.name, o.ID) ---- 3 @@ -319,14 +221,6 @@ ABFsUni CsWorkCsWorkCsWorkCsWork DEsWorkDEsWorkDEsWorkDEsWorkDEsWorkDEsWork -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME RepeatUnstructuredStr -#-QUERY MATCH (o:organisation) RETURN repeat(o.unstrStr, o.ID) -#---- 3 -# pERfECt -# EXcELLENT organisation EXcELLENT organisation EXcELLENT organisation EXcELLENT organisation -#GoOd organisation ! GoOd organisation ! GoOd organisation ! GoOd organisation ! GoOd organisation ! GoOd organisation ! - -NAME LpadStructuredStrAndLiteralInt -QUERY MATCH (p:person) RETURN lpad(p.fName, 5, "<") ---- 8 @@ -353,31 +247,6 @@ Huber -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME LpadStructuredStrAndStructuredInt -#-QUERY MATCH (p:person) RETURN lpad(p.fName, p.ID, "<") -#---- 8 -# -#Bo -#Car -#<") -#---- 8 -#good> -#good> -#excel -#good> -# -# -# -# - -NAME RpadOutOfRange -QUERY MATCH (o:organisation) RETURN rpad(o.name, -8, "y") ---- 3 @@ -460,18 +316,6 @@ arooq reg ubert Blaine -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME SubStrUnstructuredStrAndLiteralInt -#-QUERY MATCH (p:person) RETURN substring(p.label1, 3, 2) -#---- 8 -#od -#od -#ce -#od -# -# -# - -NAME LeftPositiveIdxStructuredStrAndLiteralInt -QUERY MATCH (p:person) RETURN left(p.fName, 11) ---- 8 @@ -516,20 +360,6 @@ Hubert Blaine Wolfeschlegelsteinhausenbergerd Sóló cón tu The 😂😃🧘🏻‍♂️🌍🌦️🍞 - -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME LeftUnstructuredStrAndLiteralInt -#-QUERY MATCH (p:person) RETURN left(p.label1, 2) -#---- 8 -#go -#go -#ex -#go -# -# -# -# - -NAME RightPositiveIdxStructuredStrAndLiteralInt -QUERY MATCH (p:person) RETURN right(p.fName, 10) ---- 8 @@ -575,19 +405,6 @@ rt Blaine Wolfeschlegelsteinhausenbergerdorff 😂😃🧘🏻‍♂️🌍🌦️🍞🚗 movie a -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME RightUnstructuredStrAndLiteralInt -#-QUERY MATCH (p:person) RETURN right(p.label1, 3) -#---- 8 -#ood -#ood -#ent -#ood -# -# -# -# - -NAME ArrayExtractPositiveIdxStructuredStrAndStructuredInt -QUERY MATCH (o:organisation) RETURN array_extract(o.name, o.ID + 2) ---- 3 @@ -670,29 +487,6 @@ R -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME ListExtractUnstructuredString -#-QUERY MATCH (o:organisation) RETURN o.unstrStr[4] -#---- 3 -#E -#X -#d - -#-NAME UnstrStrEqual -#-QUERY MATCH (o:organisation) WHERE o.unstrStr = ' pERfECt' RETURN count(*) -#---- 1 -#1 - -#-NAME UnstrStrNotEqual -#-QUERY MATCH (o:organisation) WHERE o.unstrStr <> ' pERfECt' RETURN count(*) -#---- 1 -#2 - -#-NAME UnstrStrComparison -#-QUERY MATCH (o:organisation) WHERE o.unstrStr < "Test string" RETURN count(*) -#---- 1 -#3 - -NAME SuffixStructuredStr -QUERY MATCH (o:organisation) RETURN suffix(o.name, "Work") ---- 3 @@ -700,21 +494,7 @@ False True True -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME SuffixUnstructuredStr -#-QUERY MATCH (p:person) RETURN suffix(p.label1, "od") -#---- 8 -#True -# -# -#True -# -#False -#True -# - -NAME SuffixSelect -QUERY MATCH (p:person) WHERE suffix(p.fName, "l") RETURN p.fName ---- 1 Carol - diff --git a/test/test_files/tinySNB/function/timestamp.test b/test/test_files/tinySNB/function/timestamp.test index 41b6a5c376..cef7601905 100644 --- a/test/test_files/tinySNB/function/timestamp.test +++ b/test/test_files/tinySNB/function/timestamp.test @@ -3,12 +3,6 @@ ---- 1 1 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME TimestampDateEqual -#-QUERY MATCH (a:person) WHERE date_trunc("daY", a.unstrTimestampProp2) = date('1976-12-23') RETURN COUNT(*) -#---- 1 -#1 - -NAME TimestampDateNotEqual -QUERY MATCH (a:person) WHERE date_trunc("daY", a.registerTime) <> date('1976-12-23') RETURN COUNT(*) ---- 1 @@ -34,27 +28,6 @@ ---- 1 2 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredStructuredTimestampComparison -#-QUERY MATCH (a:person) WHERE a.registerTime = a.unstrTimestampProp1 RETURN COUNT(*) -#---- 1 -#2 - -#-NAME TwoUnstructuredTimestampComparison -#-QUERY MATCH (a:person) WHERE a.unstrTimestampProp1 <> a.unstrTimestampProp2 RETURN COUNT(*) -#---- 1 -#2 - -#-NAME TwoUnstructuredTimestampComparison -#-QUERY MATCH (a:person) WHERE a.unstrTimestampProp1 <= a.unstrTimestampProp2 RETURN COUNT(*) -#---- 1 -#2 - -#-NAME UnstructuredTimestampLiteralComparison -#-QUERY MATCH (a:person) WHERE a.unstrTimestampProp1 <= timestamp('1985-11-22 13:12:22.562') RETURN COUNT(*) -#---- 1 -#2 - -NAME StructuredTimestampArithmeticAddInterval1 -QUERY MATCH (a:person) RETURN a.registerTime + interval('47 hours 30 minutes 30 seconds') ---- 8 @@ -80,19 +53,6 @@ 2025-02-25 23:53:30.30002 2033-12-04 22:53:30.30002 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampArithmeticAddInterval -#-QUERY MATCH (a:person) RETURN a.unstrTimestampProp1 + interval('10 years 20 days 42 h 32 minutes 312 milliseconds') -#---- 8 -# -# -# -# -#1956-09-16 13:39:22.312 -#1972-06-13 07:43:22.874 -#2033-03-15 07:57:30.312 -#2041-12-22 06:57:30.312 - -NAME StructuredTimestampArithmeticSubtractInterval -QUERY MATCH (a:person) RETURN a.registerTime - interval('12 years 7 months 10 days 20 h 30 m 100 us') ---- 8 @@ -105,19 +65,6 @@ 2010-07-10 16:55:29.9999 2019-04-19 15:55:29.9999 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampArithmeticSubtractInterval -#-QUERY MATCH (a:person) RETURN a.unstrTimestampProp1 - interval('40 months 200 days 420 hour 320 minutes 312 seconds') -#---- 8 -# -# -# -# -#1942-09-20 01:42:10 -#1958-06-18 19:46:10.562 -#2019-03-17 20:00:18 -#2027-12-25 19:00:18 - -NAME StructuredTimestampArithmeticSubtractTimestamp -QUERY MATCH (a:person) RETURN a.registerTime - timestamp('2013-01-02 14:22:31.45612') ---- 8 @@ -130,19 +77,6 @@ 3701 days 23:02:58.54388 6905 days 22:02:58.54388 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampArithmeticSubtractTimestamp -#-QUERY MATCH (a:person) RETURN a.unstrTimestampProp1 - timestamp('1976-01-02 13:44:12') -#---- 8 -# -# -# -# -#-10721 days -18:36:50 -#-4973 days -00:32:49.438 -#17216 days 23:41:18 -#20420 days 22:41:18 - -NAME StructuredTimestampMixedArithmeticOperations -QUERY MATCH (a:person) RETURN a.registerTime + interval('2 hours 48 minutes 1000 seconds') - interval('188 days 48 hours') - timestamp('1976-01-02 13:44:12') ---- 8 @@ -155,19 +89,6 @@ 17027 days 02:45:58 20231 days 01:45:58 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampMixedArithmeticOperations -#-QUERY MATCH (a:person) RETURN a.unstrTimestampProp1 - interval('2 years 18 days 24 minutes') + interval('12 hours 100 seconds') - timestamp('1976-01-02 13:44:12') -#---- 8 -# -# -# -# -#-11469 days -06:59:10 -#-5720 days -12:55:09.438 -#16469 days 11:18:58 -#19673 days 10:18:58 - -NAME StructuredTimestampConcatenateString -QUERY MATCH (a:person) RETURN concat(concat('Register Time: ', string(a.registerTime)), ' test') ---- 8 @@ -180,14 +101,6 @@ Register Time: 2011-08-20 11:25:30 test Register Time: 2023-02-21 13:25:30 test Register Time: 2031-11-30 12:25:30 test -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME castToTimestamp -#-QUERY MATCH (o:organisation) RETURN timestamp(o.unstrStringProp1) -#---- 3 -# -# -#1955-11-23 15:22:31 - -NAME StructuredTimestampExtractYearFuncTest -QUERY MATCH (p:person) RETURN date_part("yeAr", p.registerTime) ---- 8 @@ -200,19 +113,6 @@ Register Time: 2031-11-30 12:25:30 test 1976 2023 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampExtractYearFuncTest -#-QUERY MATCH (p:person) RETURN date_part("Y", p.unstrTimestampProp1) -#---- 8 -#2031 -#1946 -#1962 -#2023 -# -# -# -# - -NAME StructuredTimestampExtractMicroFuncTest -QUERY MATCH (p:person) RETURN date_part("microSeconds", p.registerTime) ---- 8 @@ -225,19 +125,6 @@ Register Time: 2031-11-30 12:25:30 test 42000000 30000000 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampExtractMicroFuncTest -#-QUERY MATCH (p:person) RETURN date_part("microsecond", p.unstrTimestampProp2) -#---- 8 -#42000000 -#30000526 -# -# -# -# -# -# - -NAME StructuredTimestampExtractMsFuncTest -QUERY MATCH (p:person) RETURN date_part("millisEcond", p.registerTime) ---- 8 @@ -250,18 +137,6 @@ Register Time: 2031-11-30 12:25:30 test 42000 30000 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampExtractMsFuncTest -#-QUERY MATCH (p:person) RETURN date_part("miLlisEconds", p.unstrTimestampProp2) -#---- 8 -#42000 -#30000 -# -# -# -# -# - -NAME StructuredTimestampExtractSecondFuncTest -QUERY MATCH (p:person) RETURN date_part("seConds", p.registerTime) ---- 8 @@ -274,19 +149,6 @@ Register Time: 2031-11-30 12:25:30 test 42 30 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampExtractSecondFuncTest -#-QUERY MATCH (p:person) RETURN date_part("seCOND", p.unstrTimestampProp2) -#---- 8 -#42 -#30 -# -# -# -# -# -# - -NAME StructuredTimestampExtractMinuteFuncTest -QUERY MATCH (p:person) RETURN date_part("minute", p.registerTime) ---- 8 @@ -299,19 +161,6 @@ Register Time: 2031-11-30 12:25:30 test 41 25 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampExtractMinuteFuncTest -#-QUERY MATCH (p:person) RETURN date_part("miNutes", p.unstrTimestampProp2) -#---- 8 -#21 -#25 -# -# -# -# -# -# - -NAME StructuredTimestampExtractHourFuncTest -QUERY MATCH (p:person) RETURN date_part("hours", p.registerTime) ---- 8 @@ -324,19 +173,6 @@ Register Time: 2031-11-30 12:25:30 test 4 13 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampExtractHourFuncTest -#-QUERY MATCH (p:person) RETURN date_part("Hour", p.unstrTimestampProp2) -#---- 8 -#11 -#13 -# -# -# -# -# -# - -NAME StructuredTimestampTruncDayFuncTest -QUERY MATCH (p:person) RETURN date_trunc("Day", p.registerTime) ---- 8 @@ -349,19 +185,6 @@ Register Time: 2031-11-30 12:25:30 test 1976-12-23 00:00:00 2023-02-21 00:00:00 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampTruncDayFuncTest -#-QUERY MATCH (p:person) RETURN date_trunc("daY", p.unstrTimestampProp2) -#---- 8 -#1976-12-23 00:00:00 -#2008-11-03 00:00:00 -# -# -# -# -# -# - -NAME StructuredTimestampTruncMicrosecondsFuncTest -QUERY MATCH (p:person) RETURN date_trunc("MIcroseCond", p.registerTime) ---- 8 @@ -374,19 +197,6 @@ Register Time: 2031-11-30 12:25:30 test 1976-12-23 04:41:42 2023-02-21 13:25:30 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampTruncMicrosecondsFuncTest -#-QUERY MATCH (p:person) RETURN date_trunc("MIcroseconds", p.unstrTimestampProp2) -#---- 8 -#1976-12-23 11:21:42 -#2008-11-03 13:25:30.000526 -# -# -# -# -# -# - -NAME StructuredTimestampTruncMillisecondsFuncTest -QUERY MATCH (p:person) RETURN date_trunc("mIlliSecond", p.registerTime) ---- 8 @@ -399,19 +209,6 @@ Register Time: 2031-11-30 12:25:30 test 1976-12-23 04:41:42 2023-02-21 13:25:30 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampTruncMillisecondsFuncTest -#-QUERY MATCH (p:person) RETURN date_trunc("mIlliSeconds", p.unstrTimestampProp2) -#---- 8 -#1976-12-23 11:21:42 -#2008-11-03 13:25:30 -# -# -# -# -# -# - -NAME StructuredTimestampTruncSecondsFuncTest -QUERY MATCH (p:person) RETURN date_trunc("secOnds", p.registerTime) ---- 8 @@ -424,19 +221,6 @@ Register Time: 2031-11-30 12:25:30 test 1976-12-23 04:41:42 2023-02-21 13:25:30 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampTruncSecondsFuncTest -#-QUERY MATCH (p:person) RETURN date_trunc("secondS", p.unstrTimestampProp2) -#---- 8 -#1976-12-23 11:21:42 -#2008-11-03 13:25:30 -# -# -# -# -# -# - -NAME StructuredTimestampTruncMinuteFuncTest -QUERY MATCH (p:person) RETURN date_trunc("Minutes", p.registerTime) ---- 8 @@ -449,19 +233,6 @@ Register Time: 2031-11-30 12:25:30 test 1976-12-23 04:41:00 2023-02-21 13:25:00 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampTruncMinuteFuncTest -#-QUERY MATCH (p:person) RETURN date_trunc("minutes", p.unstrTimestampProp2) -#---- 8 -#1976-12-23 11:21:00 -#2008-11-03 13:25:00 -# -# -# -# -# -# - -NAME StructuredTimestampTruncHourFuncTest -QUERY MATCH (p:person) RETURN date_trunc("Hours", p.registerTime) ---- 8 @@ -474,19 +245,6 @@ Register Time: 2031-11-30 12:25:30 test 1976-12-23 04:00:00 2023-02-21 13:00:00 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampTruncHourFuncTest -#-QUERY MATCH (p:person) RETURN date_trunc("houRs", p.unstrTimestampProp2) -#---- 8 -#1976-12-23 11:00:00 -#2008-11-03 13:00:00 -# -# -# -# -# -# - -NAME StructuredTimestampCenturyFuncTest -QUERY MATCH (p:person) RETURN century(p.registerTime) ---- 8 @@ -499,19 +257,6 @@ Register Time: 2031-11-30 12:25:30 test 20 21 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampCenturyFuncTest -#-QUERY MATCH (p:person) RETURN century(p.unstrTimestampProp2) -#---- 8 -#20 -#21 -# -# -# -# -# -# - -NAME StructuredTimestampDaynameFuncTest -QUERY MATCH (p:person) RETURN dayname(p.registerTime) ---- 8 @@ -524,19 +269,6 @@ Monday Thursday Tuesday -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampDaynameFuncTest -#-QUERY MATCH (p:person) RETURN dayname(p.unstrTimestampProp2) -#---- 8 -#Thursday -#Monday -# -# -# -# -# -# - -NAME StructuredTimestampMonthNameFuncTest -QUERY MATCH (p:person) RETURN monthname(p.registerTime) ---- 8 @@ -549,19 +281,6 @@ July December February -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampMonthNameFuncTest -#-QUERY MATCH (p:person) RETURN monthname(p.unstrTimestampProp2) -#---- 8 -#December -#November -# -# -# -# -# -# - -NAME StructuredTimestampLastDayFuncTest -QUERY MATCH (p:person) RETURN last_day(p.registerTime) ---- 8 @@ -574,19 +293,6 @@ February 1976-12-31 2023-02-28 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampLastDayFuncTest -#-QUERY MATCH (p:person) RETURN last_day(p.unstrTimestampProp2) -#---- 8 -#1976-12-31 -#2008-11-30 -# -# -# -# -# -# - -NAME StructuredInt64EpochMsFuncTest -QUERY MATCH (p:person) RETURN epoch_ms(p.age) ---- 8 @@ -599,19 +305,6 @@ February 1970-01-01 00:00:00.04 1970-01-01 00:00:00.083 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredInt64EpochMsFuncTest -#-QUERY MATCH (p:person) RETURN epoch_ms(p.unstrInt64Prop) -#---- 8 -#1970-01-06 05:20:44.124 -#1970-01-01 01:15:41.124 -#1970-01-01 01:13:32.124 -# -# -# -# -# - -NAME StructuredInt64ToTimestampFuncTest -QUERY MATCH (p:person) RETURN to_timestamp(p.age) ---- 8 @@ -624,19 +317,6 @@ February 1970-01-01 00:00:40 1970-01-01 00:01:23 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredInt64ToTimestampFuncTest -#-QUERY MATCH (p:person) RETURN to_timestamp(p.unstrInt64Prop) -#---- 8 -#1984-04-19 17:35:24 -#1970-02-22 13:25:24 -#1970-02-21 01:35:24 -# -# -# -# -# - -NAME StructuredTimestampGreatestFuncTest -QUERY MATCH (p:person) RETURN greatest(p.registerTime, timestamp("2006-02-12 11:25:33")) ---- 8 @@ -649,19 +329,6 @@ February 2006-02-12 11:25:33 2023-02-21 13:25:30 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampGreatestFuncTest -#-QUERY MATCH (p:person) RETURN greatest(p.unstrTimestampProp2, timestamp("1986-02-12 11:25:33")) -#---- 8 -#1986-02-12 11:25:33 -#2008-11-03 13:25:30.000526 -# -# -# -# -# -# - -NAME StructuredTimestampLeastFuncTest -QUERY MATCH (p:person) RETURN least(p.registerTime, timestamp("2006-02-12 11:25:33")) ---- 8 @@ -674,19 +341,6 @@ February 1976-12-23 04:41:42 2006-02-12 11:25:33 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME UnstructuredTimestampLeastFuncTest -#-QUERY MATCH (p:person) RETURN least(p.unstrTimestampProp2, timestamp("1986-02-12 11:25:33")) -#---- 8 -#1976-12-23 11:21:42 -#1986-02-12 11:25:33 -# -# -# -# -# -# - -NAME StructuredTimestampComparisonAcrossNodesNonEquality -QUERY MATCH (a:person)-[e1:knows]->(b:person) WHERE a.registerTime <> b.registerTime RETURN COUNT(*) ---- 1 diff --git a/test/test_files/tinySNB/optional_match/optional_match.test b/test/test_files/tinySNB/optional_match/optional_match.test index ee944259da..2ee8ac1a94 100644 --- a/test/test_files/tinySNB/optional_match/optional_match.test +++ b/test/test_files/tinySNB/optional_match/optional_match.test @@ -67,14 +67,6 @@ Elizabeth|Farooq Elizabeth|Greg Hubert Blaine Wolfeschlegelsteinhausenbergerdorff| -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME OptionalReadUnstrPropertyTest -#-QUERY MATCH (a:person)-[:knows]->(b:person) WHERE a.fName='Elizabeth' OPTIONAL MATCH (b)-[:studyAt]->(c:organisation) RETURN c.unstrNumericProp -#-ENUMERATE -#---- 2 -# -#-12.500000 - -NAME OptionalReturnTest -QUERY MATCH (a:person)-[:knows]->(b:person) WHERE a.fName='Alice' OPTIONAL MATCH (b)-[:studyAt]->(c:organisation) RETURN c.orgCode -ENUMERATE diff --git a/test/test_files/tinySNB/order_by/order_by.test b/test/test_files/tinySNB/order_by/order_by.test index 6ae68da7fd..e17ca5c7e6 100644 --- a/test/test_files/tinySNB/order_by/order_by.test +++ b/test/test_files/tinySNB/order_by/order_by.test @@ -90,81 +90,6 @@ Carol Bob Alice -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME OrderByUnstrSameDataTypeTest -#-QUERY MATCH (p:person) RETURN p.unstrDateProp1 ORDER BY p.unstrDateProp1 desc -#-PARALLELISM 2 -#---- 8 -# -# -# -# -# -#1950-01-01 -#1950-01-01 -#1900-01-01 - -#-NAME OrderByUnstrNumericTest -#-QUERY MATCH (p:person) RETURN p.unstrNumericProp ORDER BY p.unstrNumericProp asc -#-PARALLELISM 4 -#---- 8 -#47 -#52 -#68.000000 -# -# -# -# -# - -#-NAME OrderByUnstrTimeTest -#-QUERY MATCH (p:person) RETURN p.unstrTimeProp1 ORDER BY p.unstrTimeProp1 desc -#-PARALLELISM 3 -#---- 8 -# -# -# -# -#2008-11-03 13:25:30.000526 -#1982-05-04 01:02:07 -#1982-05-04 -#1900-01-01 - -#-NAME OrderByUnstrWithFilterTest -#-QUERY MATCH (p:person) WHERE p.gender = 2 RETURN p.unstrNumericProp ORDER BY p.unstrNumericProp desc -#-PARALLELISM 2 -#---- 5 -# -# -# -# -#47 - -#-NAME OrderByUnstrMultipleColTest -#-QUERY MATCH (p:person) RETURN p.unstrTimeProp1 ORDER BY p.gender desc, p.unstrTimeProp1 asc -#-PARALLELISM 3 -#---- 8 -#1982-05-04 -#1982-05-04 01:02:07 -# -# -# -#1900-01-01 -#2008-11-03 13:25:30.000526 - -#-NAME OrderByUnstrMultipleColTest2 -#-QUERY MATCH (p:person) RETURN p.age, p.unstrNumericProp ORDER BY p.isStudent, p.ID -#-PARALLELISM 4 -#---- 8 -#45|52 -#20| -#20|68.000000 -#40| -#83| -#35| -#30|47 -#25| - -NAME OrderByStrMultipleColTest -QUERY MATCH (p:person) RETURN p.age, p.eyeSight ORDER BY p.isWorker desc, p.age, p.eyeSight desc -PARALLELISM 4 diff --git a/test/test_files/tinySNB/projection/projection.test b/test/test_files/tinySNB/projection/projection.test index 8982383818..b8dbce27a9 100644 --- a/test/test_files/tinySNB/projection/projection.test +++ b/test/test_files/tinySNB/projection/projection.test @@ -35,20 +35,6 @@ False|| ---- 1 35|35 -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME IsNullTest1 -#-QUERY MATCH (a:person) RETURN a.fName, a.unstrNumericProp IS NULL, a.unstrDateProp1 IS NOT NULL -#---- 8 -#Alice|True|True -#Bob|False|True -#Carol|False|True -#Dan|True|False -#Elizabeth|False|False -#Farooq|True|False -#Greg|True|False -#Hubert Blaine Wolfeschlegelsteinhausenbergerdorff|True|False - -# TODO(Semih): Remove this test and uncomment below copy of this test when enabling ad-hoc properties -NAME OrgNodesReturnStarTest -QUERY MATCH (a:organisation) RETURN * ---- 3 @@ -56,26 +42,6 @@ False|| 4|CsWork|934|4.100000|-100|2 years 4 days 10 hours|26 years 52 days 48:00:00|0.780000 6|DEsWork|824|4.100000|7|2 years 4 hours 22 us 34 minutes|82:00:00.1|0.520000 -#-NAME OrgNodesReturnStarTest -#-QUERY MATCH (a:organisation) RETURN * -#---- 3 -#1|ABFsUni|325|3.700000|-2|10 years 5 months 13 hours 24 us|3 years 5 days|1.000000||48 days 23:00:00|48 days 23:00:00|-12.500000| pERfECt|| -#4|CsWork|934|4.100000|-100|2 years 4 days 10 hours|26 years 52 days 48:00:00|0.780000|-4|26 years 52 days 48:00:00|32 years 123 days 48:00:00|| EXcELLENT organisation || -#6|DEsWork|824|4.100000|7|2 years 4 hours 22 us 34 minutes|82:00:00.1|0.520000|10|||3.300000|GoOd organisation ! |1900-01-01|1955-11-23 15:22:31 - -# TODO(Semih): Uncomment when enabling ad-hoc properties -#-NAME PersonNodesTestUnstructuredProperty -#-QUERY MATCH (a:person) RETURN a.ID,a.unstrDateProp1 -#---- 8 -#0|1900-01-01 -#10| -#2|1950-01-01 -#3|1950-01-01 -#5| -#7| -#8| -#9| - -NAME PersonNodesTestNull -QUERY MATCH (a:person) RETURN a.ID, a.fName STARTS WITH NULL, a.isWorker, a.isWorker AND null ---- 8 diff --git a/test/test_utility/include/test_helper.h b/test/test_utility/include/test_helper.h index 0466297f37..2864907f71 100644 --- a/test/test_utility/include/test_helper.h +++ b/test/test_utility/include/test_helper.h @@ -142,7 +142,7 @@ class BaseGraphTest : public Test { void validateListFilesExistence( string fileName, bool existence, bool hasOverflow, bool hasHeader); - void validateNodeColumnAndListFilesExistence( + void validateNodeColumnFilesExistence( NodeTableSchema* nodeTableSchema, DBFileType dbFileType, bool existence); void validateRelColumnAndListFilesExistence( @@ -150,7 +150,7 @@ class BaseGraphTest : public Test { private: static inline bool containsOverflowFile(DataTypeID typeID) { - return typeID == STRING || typeID == LIST || typeID == UNSTRUCTURED; + return typeID == STRING || typeID == LIST; } void validateRelPropertyFiles(catalog::RelTableSchema* relTableSchema, table_id_t tableID, diff --git a/test/test_utility/test_helper.cpp b/test/test_utility/test_helper.cpp index a354576022..ca9da64d8c 100644 --- a/test/test_utility/test_helper.cpp +++ b/test/test_utility/test_helper.cpp @@ -148,7 +148,7 @@ void BaseGraphTest::validateListFilesExistence( } } -void BaseGraphTest::validateNodeColumnAndListFilesExistence( +void BaseGraphTest::validateNodeColumnFilesExistence( NodeTableSchema* nodeTableSchema, DBFileType dbFileType, bool existence) { for (auto& property : nodeTableSchema->structuredProperties) { validateColumnFilesExistence( @@ -156,10 +156,6 @@ void BaseGraphTest::validateNodeColumnAndListFilesExistence( nodeTableSchema->tableID, property.propertyID, dbFileType), existence, containsOverflowFile(property.dataType.typeID)); } - validateListFilesExistence( - StorageUtils::getNodeUnstrPropertyListsFName( - databaseConfig->databasePath, nodeTableSchema->tableID, dbFileType), - existence, true /* hasOverflow */, true /* hasHeader */); validateColumnFilesExistence(StorageUtils::getNodeIndexFName(databaseConfig->databasePath, nodeTableSchema->tableID, dbFileType), existence, containsOverflowFile(nodeTableSchema->getPrimaryKey().dataType.typeID)); diff --git a/third_party/utf8proc/utf8proc.cpp b/third_party/utf8proc/utf8proc.cpp index c5e3d2d312..00df41f35f 100644 --- a/third_party/utf8proc/utf8proc.cpp +++ b/third_party/utf8proc/utf8proc.cpp @@ -97,7 +97,8 @@ namespace utf8proc { #define STRINGIZEx(x) #x #define STRINGIZE(x) STRINGIZEx(x) UTF8PROC_DLLEXPORT const char* utf8proc_version(void) { - return STRINGIZE(UTF8PROC_VERSION_MAJOR) "." STRINGIZE(UTF8PROC_VERSION_MINOR) "." STRINGIZE(UTF8PROC_VERSION_PATCH) ""; + return STRINGIZE(UTF8PROC_VERSION_MAJOR) "." STRINGIZE(UTF8PROC_VERSION_MINOR) "." STRINGIZE( + UTF8PROC_VERSION_PATCH) ""; } UTF8PROC_DLLEXPORT const char* utf8proc_unicode_version(void) { @@ -263,33 +264,43 @@ UTF8PROC_DLLEXPORT const utf8proc_property_t* utf8proc_get_property(utf8proc_int See the special support in grapheme_break_extended, for required bookkeeping by the caller. */ static utf8proc_bool grapheme_break_simple(int lbc, int tbc) { - return - (lbc == UTF8PROC_BOUNDCLASS_START) ? true : // GB1 - (lbc == UTF8PROC_BOUNDCLASS_CR && // GB3 - tbc == UTF8PROC_BOUNDCLASS_LF) ? false : // --- - (lbc >= UTF8PROC_BOUNDCLASS_CR && lbc <= UTF8PROC_BOUNDCLASS_CONTROL) ? true : // GB4 - (tbc >= UTF8PROC_BOUNDCLASS_CR && tbc <= UTF8PROC_BOUNDCLASS_CONTROL) ? true : // GB5 - (lbc == UTF8PROC_BOUNDCLASS_L && // GB6 - (tbc == UTF8PROC_BOUNDCLASS_L || // --- - tbc == UTF8PROC_BOUNDCLASS_V || // --- - tbc == UTF8PROC_BOUNDCLASS_LV || // --- - tbc == UTF8PROC_BOUNDCLASS_LVT)) ? false : // --- - ((lbc == UTF8PROC_BOUNDCLASS_LV || // GB7 - lbc == UTF8PROC_BOUNDCLASS_V) && // --- - (tbc == UTF8PROC_BOUNDCLASS_V || // --- - tbc == UTF8PROC_BOUNDCLASS_T)) ? false : // --- - ((lbc == UTF8PROC_BOUNDCLASS_LVT || // GB8 - lbc == UTF8PROC_BOUNDCLASS_T) && // --- - tbc == UTF8PROC_BOUNDCLASS_T) ? false : // --- - (tbc == UTF8PROC_BOUNDCLASS_EXTEND || // GB9 - tbc == UTF8PROC_BOUNDCLASS_ZWJ || // --- - tbc == UTF8PROC_BOUNDCLASS_SPACINGMARK || // GB9a - lbc == UTF8PROC_BOUNDCLASS_PREPEND) ? false : // GB9b - (lbc == UTF8PROC_BOUNDCLASS_E_ZWG && // GB11 (requires additional handling below) - tbc == UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC) ? false : // ---- - (lbc == UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR && // GB12/13 (requires additional handling below) - tbc == UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR) ? false : // ---- - true; // GB999 + return (lbc == UTF8PROC_BOUNDCLASS_START) ? true : // GB1 + (lbc == UTF8PROC_BOUNDCLASS_CR && // GB3 + tbc == UTF8PROC_BOUNDCLASS_LF) ? + false : // --- + (lbc >= UTF8PROC_BOUNDCLASS_CR && lbc <= UTF8PROC_BOUNDCLASS_CONTROL) ? + true : // GB4 + (tbc >= UTF8PROC_BOUNDCLASS_CR && tbc <= UTF8PROC_BOUNDCLASS_CONTROL) ? + true : // GB5 + (lbc == UTF8PROC_BOUNDCLASS_L && // GB6 + (tbc == UTF8PROC_BOUNDCLASS_L || // --- + tbc == UTF8PROC_BOUNDCLASS_V || // --- + tbc == UTF8PROC_BOUNDCLASS_LV || // --- + tbc == UTF8PROC_BOUNDCLASS_LVT)) ? + false : // --- + ((lbc == UTF8PROC_BOUNDCLASS_LV || // GB7 + lbc == UTF8PROC_BOUNDCLASS_V) && // --- + (tbc == UTF8PROC_BOUNDCLASS_V || // --- + tbc == UTF8PROC_BOUNDCLASS_T)) ? + false : // --- + ((lbc == UTF8PROC_BOUNDCLASS_LVT || // GB8 + lbc == UTF8PROC_BOUNDCLASS_T) && // --- + tbc == UTF8PROC_BOUNDCLASS_T) ? + false : // --- + (tbc == UTF8PROC_BOUNDCLASS_EXTEND || // GB9 + tbc == UTF8PROC_BOUNDCLASS_ZWJ || // --- + tbc == UTF8PROC_BOUNDCLASS_SPACINGMARK || // GB9a + lbc == UTF8PROC_BOUNDCLASS_PREPEND) ? + false : // GB9b + (lbc == UTF8PROC_BOUNDCLASS_E_ZWG && // GB11 (requires + // additional + // handling below) + tbc == UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC) ? + false : // ---- + (lbc == UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR && // GB12/13 (requires additional handling below) + tbc == UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR) ? + false : // ---- + true; // GB999 } utf8proc_bool grapheme_break_extended(int lbc, int tbc, utf8proc_int32_t* state) { diff --git a/tools/python_api/py_query_result_converter.cpp b/tools/python_api/py_query_result_converter.cpp index 901f63187c..265f5e8688 100644 --- a/tools/python_api/py_query_result_converter.cpp +++ b/tools/python_api/py_query_result_converter.cpp @@ -51,12 +51,6 @@ void NPArrayWrapper::appendElement(ResultValue* value) { ((py::list*)dataBuffer)[numElements] = PyQueryResult::convertValueToPyObject(*value); break; } - case UNSTRUCTURED: { - auto str = value->toString(); - ((PyObject**)dataBuffer)[numElements] = - PyUnicode_FromStringAndSize(str.c_str(), str.size()); - break; - } default: { assert(false); } @@ -80,7 +74,6 @@ py::dtype NPArrayWrapper::convertToArrayType(const DataType& type) { dtype = "bool"; break; } - case UNSTRUCTURED: case LIST: case STRING: { dtype = "object"; diff --git a/tools/python_api/test/test_df.py b/tools/python_api/test/test_df.py index ab5692c99f..06a7daed51 100644 --- a/tools/python_api/test/test_df.py +++ b/tools/python_api/test/test_df.py @@ -55,14 +55,6 @@ def _test_to_df(conn): [[7, 4], [8, 8], [9]], [[6], [7], [8]], [[8]], [[10]], [[7], [10], [6, 7]]] assert str(pd['p.courseScoresPerTerm'].dtype) == "object" - # TODO(Xiyang): uncomment tests when adhoc properties are enabled - # unstrProp = pd['p.unstrNumericProp'].tolist() - # assert (isna(unstrProp[0]) and isna(unstrProp[3]) and isna(unstrProp[5]) and isna(unstrProp[6]) and isna( - # unstrProp[7])) - # assert unstrProp[1] == '47' - # assert unstrProp[2] == '52' - # assert unstrProp[4] == '68.000000' - # assert str(pd['p.unstrNumericProp'].dtype) == "object" _test_to_df(conn)