From 6bd56ccd7e7cd6ce790f95930e99b37d883b12fb Mon Sep 17 00:00:00 2001 From: tiancaiamao Date: Wed, 24 Oct 2018 16:44:41 +0800 Subject: [PATCH 1/2] *: move parser to a separate repository --- Gopkg.lock | 240 +- Gopkg.toml | 7 +- Makefile | 42 +- ast/ddl_test.go | 64 - ast/dml_test.go | 70 - ast/expressions_test.go | 103 - ast/flag_test.go | 153 - ast/format_test.go | 98 - ast/functions_test.go | 38 - ast/misc_test.go | 190 - ast/read_only_checker_test.go | 44 - cmd/benchdb/main.go | 2 +- cmd/benchfilesort/main.go | 2 +- cmd/benchkv/main.go | 2 +- cmd/benchraw/main.go | 2 +- cmd/explaintest/main.go | 2 +- cmd/importer/db.go | 2 +- cmd/importer/parser.go | 6 +- cmd/importer/stats.go | 2 +- ddl/callback.go | 2 +- ddl/callback_test.go | 2 +- ddl/column.go | 6 +- ddl/column_change_test.go | 4 +- ddl/column_test.go | 10 +- ddl/db_change_test.go | 8 +- ddl/db_integration_test.go | 2 +- ddl/db_test.go | 10 +- ddl/ddl.go | 8 +- ddl/ddl_api.go | 8 +- ddl/ddl_test.go | 6 +- ddl/ddl_worker.go | 4 +- ddl/ddl_worker_test.go | 6 +- ddl/delete_range.go | 4 +- ddl/fail_db_test.go | 2 +- ddl/fail_test.go | 4 +- ddl/foreign_key.go | 2 +- ddl/foreign_key_test.go | 4 +- ddl/generated_column.go | 2 +- ddl/index.go | 6 +- ddl/index_change_test.go | 4 +- ddl/mock.go | 4 +- ddl/partition.go | 8 +- ddl/reorg.go | 6 +- ddl/reorg_test.go | 2 +- ddl/schema.go | 2 +- ddl/schema_test.go | 4 +- ddl/session_pool.go | 2 +- ddl/stat_test.go | 2 +- ddl/table.go | 2 +- ddl/table_split_test.go | 2 +- ddl/table_test.go | 4 +- ddl/util/event.go | 2 +- ddl/util/util.go | 2 +- distsql/distsql_test.go | 4 +- distsql/request_builder.go | 2 +- distsql/select_result.go | 2 +- distsql/stream.go | 2 +- domain/domain.go | 6 +- domain/domain_test.go | 4 +- domain/global_vars_cache.go | 2 +- domain/info.go | 2 +- domain/schema_checker_test.go | 2 +- domain/topn_slow_query.go | 2 +- executor/adapter.go | 8 +- executor/admin.go | 6 +- executor/admin_test.go | 2 +- executor/aggfuncs/aggfunc_test.go | 2 +- executor/aggfuncs/builder.go | 4 +- executor/aggfuncs/func_avg.go | 2 +- executor/aggfuncs/func_avg_test.go | 4 +- executor/aggfuncs/func_count_test.go | 4 +- executor/aggfuncs/func_max_min_test.go | 4 +- executor/aggfuncs/func_sum_test.go | 4 +- executor/aggregate.go | 2 +- executor/aggregate_test.go | 2 +- executor/analyze.go | 4 +- executor/analyze_test.go | 4 +- executor/batch_checker.go | 2 +- executor/builder.go | 6 +- executor/checksum.go | 2 +- executor/compiler.go | 2 +- executor/ddl.go | 6 +- executor/ddl_test.go | 6 +- executor/delete.go | 2 +- executor/distsql.go | 6 +- executor/distsql_test.go | 2 +- executor/errors.go | 4 +- executor/executor.go | 8 +- executor/executor_pkg_test.go | 8 +- executor/executor_test.go | 8 +- executor/grant.go | 6 +- executor/grant_test.go | 2 +- executor/index_lookup_join.go | 4 +- executor/insert.go | 2 +- executor/insert_common.go | 6 +- executor/insert_test.go | 2 +- executor/join.go | 2 +- executor/load_data.go | 2 +- executor/metrics_test.go | 2 +- executor/pkg_test.go | 4 +- executor/point_get.go | 4 +- executor/prepared.go | 4 +- executor/prepared_test.go | 2 +- executor/revoke.go | 4 +- executor/revoke_test.go | 2 +- executor/set.go | 6 +- executor/set_test.go | 2 +- executor/show.go | 12 +- executor/show_stats.go | 2 +- executor/show_test.go | 6 +- executor/simple.go | 10 +- executor/simple_test.go | 8 +- executor/statement_context_test.go | 2 +- executor/table_reader.go | 2 +- executor/trace.go | 2 +- executor/union_scan.go | 2 +- executor/update.go | 2 +- executor/write.go | 4 +- executor/write_test.go | 2 +- expression/aggregation/agg_to_pb.go | 2 +- expression/aggregation/agg_to_pb_test.go | 6 +- expression/aggregation/aggregation.go | 8 +- expression/aggregation/aggregation_test.go | 4 +- expression/aggregation/avg.go | 4 +- expression/aggregation/bench_test.go | 4 +- expression/aggregation/descriptor.go | 8 +- expression/bench_test.go | 8 +- expression/builtin.go | 8 +- expression/builtin_arithmetic.go | 4 +- expression/builtin_arithmetic_test.go | 4 +- expression/builtin_cast.go | 10 +- expression/builtin_cast_test.go | 6 +- expression/builtin_compare.go | 8 +- expression/builtin_compare_test.go | 4 +- expression/builtin_control.go | 4 +- expression/builtin_control_test.go | 2 +- expression/builtin_encryption.go | 4 +- expression/builtin_encryption_test.go | 4 +- expression/builtin_info.go | 2 +- expression/builtin_info_test.go | 8 +- expression/builtin_json.go | 4 +- expression/builtin_json_test.go | 2 +- expression/builtin_math.go | 2 +- expression/builtin_math_test.go | 6 +- expression/builtin_miscellaneous.go | 4 +- expression/builtin_miscellaneous_test.go | 2 +- expression/builtin_op.go | 4 +- expression/builtin_op_test.go | 2 +- expression/builtin_other.go | 2 +- expression/builtin_other_test.go | 4 +- expression/builtin_string.go | 6 +- expression/builtin_string_test.go | 8 +- expression/builtin_test.go | 8 +- expression/builtin_time.go | 4 +- expression/builtin_time_test.go | 6 +- expression/chunk_executor.go | 4 +- expression/column.go | 4 +- expression/column_test.go | 4 +- expression/constant.go | 4 +- expression/constant_fold.go | 2 +- expression/constant_propagation.go | 6 +- expression/constant_test.go | 6 +- expression/distsql_builtin.go | 4 +- expression/distsql_builtin_test.go | 2 +- expression/errors.go | 4 +- expression/evaluator_test.go | 10 +- expression/expr_to_pb.go | 8 +- expression/expr_to_pb_test.go | 6 +- expression/expression.go | 8 +- expression/expression_test.go | 6 +- expression/function_traits.go | 2 +- expression/function_traits_test.go | 2 +- expression/helper.go | 6 +- expression/helper_test.go | 6 +- expression/integration_test.go | 8 +- expression/scalar_function.go | 8 +- expression/scalar_function_test.go | 6 +- expression/schema.go | 2 +- expression/schema_test.go | 2 +- expression/simple_rewriter.go | 10 +- expression/typeinfer_test.go | 6 +- expression/util.go | 8 +- expression/util_test.go | 4 +- infoschema/builder.go | 2 +- infoschema/infoschema.go | 6 +- infoschema/infoschema_test.go | 4 +- infoschema/tables.go | 6 +- infoschema/tables_test.go | 2 +- kv/error.go | 4 +- kv/memdb_buffer.go | 2 +- kv/txn.go | 2 +- kv/union_store_test.go | 2 +- meta/autoid/autoid.go | 2 +- meta/autoid/autoid_test.go | 2 +- meta/meta.go | 6 +- meta/meta_test.go | 2 +- metrics/server.go | 2 +- model/model_test.go | 307 - mysql/const_test.go | 321 - mysql/error_test.go | 37 - mysql/type_test.go | 37 - owner/fail_test.go | 2 +- owner/manager.go | 2 +- parser/bench_test.go | 66 - parser/consistent_test.go | 108 - parser/goyacc/main.go | 819 -- parser/lexer_test.go | 363 - parser/opcode/opcode_test.go | 49 - parser/parser.y | 7210 ---------- parser/parser_test.go | 2469 ---- perfschema/init.go | 6 +- perfschema/perfschema.go | 2 +- perfschema/tables.go | 2 +- planner/core/cache.go | 2 +- planner/core/cache_test.go | 2 +- planner/core/cacheable_checker.go | 2 +- planner/core/cacheable_checker_test.go | 4 +- planner/core/common_plans.go | 8 +- planner/core/errors.go | 4 +- planner/core/exhaust_physical_plans.go | 8 +- planner/core/expression_rewriter.go | 8 +- planner/core/expression_test.go | 8 +- planner/core/find_best_task.go | 4 +- planner/core/logical_plan_builder.go | 10 +- planner/core/logical_plan_test.go | 10 +- planner/core/logical_plans.go | 6 +- planner/core/logical_plans_test.go | 6 +- planner/core/optimizer.go | 2 +- planner/core/physical_plan_test.go | 4 +- planner/core/physical_plans.go | 4 +- planner/core/plan.go | 2 +- planner/core/plan_to_pb.go | 2 +- planner/core/plan_to_pb_test.go | 4 +- planner/core/planbuilder.go | 8 +- planner/core/planbuilder_test.go | 4 +- planner/core/point_get_plan.go | 8 +- planner/core/preprocess.go | 10 +- planner/core/preprocess_test.go | 6 +- planner/core/resolve_indices.go | 2 +- planner/core/rule_aggregation_elimination.go | 4 +- planner/core/rule_aggregation_push_down.go | 6 +- planner/core/rule_build_key_info.go | 4 +- planner/core/rule_column_pruning.go | 4 +- planner/core/rule_decorrelate.go | 4 +- planner/core/rule_join_reorder.go | 2 +- planner/core/rule_max_min_eliminate.go | 4 +- planner/core/rule_predicate_push_down.go | 6 +- planner/core/task.go | 6 +- planner/core/trace.go | 2 +- planner/core/util.go | 2 +- planner/optimize.go | 2 +- privilege/privilege.go | 4 +- privilege/privileges/cache.go | 6 +- privilege/privileges/cache_test.go | 2 +- privilege/privileges/privileges.go | 6 +- privilege/privileges/privileges_test.go | 4 +- server/column.go | 2 +- server/conn.go | 6 +- server/conn_stmt.go | 2 +- server/conn_stmt_test.go | 4 +- server/conn_test.go | 2 +- server/driver.go | 2 +- server/driver_tidb.go | 8 +- server/driver_tidb_test.go | 8 +- server/http_handler.go | 4 +- server/http_handler_test.go | 4 +- server/http_status.go | 4 +- server/packetio.go | 4 +- server/server.go | 4 +- server/server_test.go | 2 +- server/statistics_handler.go | 2 +- server/tidb_test.go | 2 +- server/util.go | 2 +- server/util_test.go | 2 +- session/bootstrap.go | 6 +- session/bootstrap_test.go | 4 +- session/session.go | 14 +- session/session_test.go | 10 +- session/tidb.go | 8 +- session/tidb_test.go | 2 +- sessionctx/binloginfo/binloginfo.go | 2 +- sessionctx/binloginfo/binloginfo_test.go | 2 +- sessionctx/stmtctx/stmtctx.go | 2 +- sessionctx/variable/session.go | 8 +- sessionctx/variable/sysvar.go | 6 +- sessionctx/variable/tidb_vars.go | 2 +- sessionctx/variable/varsutil.go | 2 +- sessionctx/variable/varsutil_test.go | 4 +- statistics/bootstrap.go | 6 +- statistics/ddl.go | 6 +- statistics/ddl_test.go | 2 +- statistics/dump.go | 4 +- statistics/dump_test.go | 2 +- statistics/feedback.go | 2 +- statistics/feedback_test.go | 2 +- statistics/handle.go | 2 +- statistics/handle_test.go | 2 +- statistics/histogram.go | 6 +- statistics/sample.go | 6 +- statistics/sample_test.go | 2 +- statistics/scalar.go | 2 +- statistics/scalar_test.go | 2 +- statistics/selectivity.go | 4 +- statistics/selectivity_test.go | 4 +- statistics/statistics_test.go | 6 +- statistics/table.go | 4 +- statistics/update.go | 2 +- statistics/update_test.go | 4 +- store/mockstore/mocktikv/analyze.go | 8 +- store/mockstore/mocktikv/cop_handler_dag.go | 6 +- store/mockstore/mocktikv/executor.go | 4 +- store/mockstore/mocktikv/mvcc_leveldb.go | 2 +- store/mockstore/mocktikv/rpc.go | 2 +- store/tikv/2pc.go | 2 +- store/tikv/2pc_fail_test.go | 2 +- store/tikv/backoff.go | 4 +- store/tikv/client.go | 2 +- store/tikv/error.go | 4 +- store/tikv/gcworker/gc_worker.go | 2 +- store/tikv/isolation_test.go | 2 +- store/tikv/safepoint_test.go | 2 +- store/tikv/sql_fail_test.go | 2 +- store/tikv/tikv_test.go | 2 +- structure/structure.go | 2 +- table/column.go | 8 +- table/column_test.go | 6 +- table/index.go | 2 +- table/table.go | 6 +- table/tables/gen_expr.go | 6 +- table/tables/gen_expr_test.go | 2 +- table/tables/index.go | 4 +- table/tables/index_test.go | 4 +- table/tables/partition.go | 2 +- table/tables/tables.go | 4 +- table/tables/tables_test.go | 2 +- tablecodec/tablecodec.go | 4 +- tablecodec/tablecodec_test.go | 2 +- terror/terror.go | 2 +- tidb-server/main.go | 4 +- types/compare_test.go | 2 +- types/convert.go | 4 +- types/convert_test.go | 6 +- types/datum.go | 6 +- types/datum_eval.go | 2 +- types/datum_test.go | 2 +- types/errors.go | 6 +- types/etc.go | 10 +- types/etc_test.go | 4 +- types/eval_type.go | 2 +- types/field_type.go | 6 +- types/field_type_test.go | 4 +- types/format_test.go | 2 +- types/json/binary.go | 2 +- types/json/constants.go | 4 +- types/mydecimal.go | 4 +- types/parser_driver/value_expr.go | 4 +- types/time.go | 4 +- types/time_test.go | 2 +- util/admin/admin.go | 6 +- util/admin/admin_test.go | 2 +- util/auth/auth_test.go | 50 - util/charset/charset_test.go | 94 - util/chunk/chunk_test.go | 2 +- util/chunk/codec.go | 2 +- util/chunk/codec_test.go | 2 +- util/chunk/compare.go | 2 +- util/chunk/iterator_test.go | 2 +- util/chunk/list_test.go | 2 +- util/chunk/mutrow.go | 2 +- util/chunk/mutrow_test.go | 2 +- util/chunk/row.go | 2 +- util/codec/bench_test.go | 2 +- util/codec/codec.go | 4 +- util/codec/codec_test.go | 4 +- util/filesort/filesort.go | 2 +- util/kvencoder/kv_encoder.go | 2 +- util/memory/action.go | 4 +- util/printer/printer.go | 2 +- util/ranger/checker.go | 4 +- util/ranger/detacher.go | 4 +- util/ranger/points.go | 6 +- util/ranger/ranger.go | 6 +- util/ranger/ranger_test.go | 2 +- util/rowDecoder/decoder.go | 4 +- util/sqlexec/restricted_sql_executor.go | 2 +- vendor/github.com/cznic/golex/LICENSE | 27 - vendor/github.com/cznic/golex/lex/api.go | 410 - vendor/github.com/cznic/golex/lex/doc.go | 40 - vendor/github.com/cznic/parser/nquads/LICENSE | 27 - vendor/github.com/cznic/parser/yacc/LICENSE | 27 - vendor/github.com/cznic/parser/yacc/api.go | 92 - vendor/github.com/cznic/parser/yacc/ast.go | 514 - .../github.com/cznic/parser/yacc/generate.go | 128 - .../github.com/cznic/parser/yacc/goscanner.go | 436 - vendor/github.com/cznic/parser/yacc/lexer.go | 656 - vendor/github.com/cznic/parser/yacc/parser.go | 938 -- .../github.com/cznic/parser/yacc/scanner.go | 856 -- vendor/github.com/cznic/strutil/LICENSE | 27 - vendor/github.com/cznic/strutil/strutil.go | 645 - vendor/github.com/cznic/y/LICENSE | 27 - vendor/github.com/cznic/y/api.go | 966 -- vendor/github.com/cznic/y/y.go | 2199 --- vendor/github.com/pingcap/errors/LICENSE | 23 + vendor/github.com/pingcap/errors/errors.go | 324 + vendor/github.com/pingcap/errors/group.go | 42 + .../github.com/pingcap/errors/juju_adaptor.go | 79 + vendor/github.com/pingcap/errors/stack.go | 226 + vendor/github.com/pingcap/parser/LICENSE | 201 + .../github.com/pingcap/parser/ast}/ast.go | 4 +- .../github.com/pingcap/parser/ast}/base.go | 2 +- .../github.com/pingcap/parser/ast}/ddl.go | 4 +- .../github.com/pingcap/parser/ast}/dml.go | 6 +- .../pingcap/parser/ast}/expressions.go | 4 +- .../github.com/pingcap/parser/ast}/flag.go | 0 .../pingcap/parser/ast}/functions.go | 4 +- .../github.com/pingcap/parser/ast}/misc.go | 6 +- .../pingcap/parser/ast}/read_only_checker.go | 0 .../github.com/pingcap/parser/ast}/stats.go | 2 +- .../github.com/pingcap/parser}/auth/auth.go | 4 +- .../pingcap/parser}/charset/charset.go | 4 +- .../pingcap/parser}/charset/encoding_table.go | 0 .../pingcap/parser/format/format.go | 195 + .../github.com/pingcap/parser}/lexer.go | 2 +- .../github.com/pingcap/parser}/misc.go | 2 +- .../github.com/pingcap/parser/model}/ddl.go | 4 +- .../github.com/pingcap/parser/model}/flags.go | 0 .../github.com/pingcap/parser/model}/model.go | 6 +- .../pingcap/parser/mysql}/charset.go | 0 .../github.com/pingcap/parser/mysql}/const.go | 0 .../pingcap/parser/mysql}/errcode.go | 0 .../pingcap/parser/mysql}/errname.go | 0 .../github.com/pingcap/parser/mysql}/error.go | 0 .../pingcap/parser/mysql}/locale_format.go | 2 +- .../github.com/pingcap/parser/mysql}/state.go | 0 .../github.com/pingcap/parser/mysql}/type.go | 0 .../github.com/pingcap/parser/mysql}/util.go | 0 .../pingcap/parser}/opcode/opcode.go | 0 vendor/github.com/pingcap/parser/parser.go | 11728 ++++++++++++++++ .../pingcap/parser/terror/terror.go | 344 + .../github.com/pingcap/parser}/types/etc.go | 4 +- .../pingcap/parser}/types/eval_type.go | 0 .../pingcap/parser}/types/field_type.go | 6 +- .../github.com/pingcap/parser}/yy_parser.go | 8 +- x-server/conn.go | 2 +- x-server/server.go | 4 +- 445 files changed, 13987 insertions(+), 21717 deletions(-) delete mode 100644 ast/ddl_test.go delete mode 100644 ast/dml_test.go delete mode 100644 ast/expressions_test.go delete mode 100644 ast/flag_test.go delete mode 100644 ast/format_test.go delete mode 100644 ast/functions_test.go delete mode 100644 ast/misc_test.go delete mode 100644 ast/read_only_checker_test.go delete mode 100644 model/model_test.go delete mode 100644 mysql/const_test.go delete mode 100644 mysql/error_test.go delete mode 100644 mysql/type_test.go delete mode 100644 parser/bench_test.go delete mode 100644 parser/consistent_test.go delete mode 100644 parser/goyacc/main.go delete mode 100644 parser/lexer_test.go delete mode 100644 parser/opcode/opcode_test.go delete mode 100644 parser/parser.y delete mode 100644 parser/parser_test.go delete mode 100644 util/auth/auth_test.go delete mode 100644 util/charset/charset_test.go delete mode 100644 vendor/github.com/cznic/golex/LICENSE delete mode 100644 vendor/github.com/cznic/golex/lex/api.go delete mode 100644 vendor/github.com/cznic/golex/lex/doc.go delete mode 100644 vendor/github.com/cznic/parser/nquads/LICENSE delete mode 100644 vendor/github.com/cznic/parser/yacc/LICENSE delete mode 100644 vendor/github.com/cznic/parser/yacc/api.go delete mode 100644 vendor/github.com/cznic/parser/yacc/ast.go delete mode 100644 vendor/github.com/cznic/parser/yacc/generate.go delete mode 100644 vendor/github.com/cznic/parser/yacc/goscanner.go delete mode 100644 vendor/github.com/cznic/parser/yacc/lexer.go delete mode 100644 vendor/github.com/cznic/parser/yacc/parser.go delete mode 100644 vendor/github.com/cznic/parser/yacc/scanner.go delete mode 100644 vendor/github.com/cznic/strutil/LICENSE delete mode 100644 vendor/github.com/cznic/strutil/strutil.go delete mode 100644 vendor/github.com/cznic/y/LICENSE delete mode 100644 vendor/github.com/cznic/y/api.go delete mode 100644 vendor/github.com/cznic/y/y.go create mode 100644 vendor/github.com/pingcap/errors/LICENSE create mode 100644 vendor/github.com/pingcap/errors/errors.go create mode 100644 vendor/github.com/pingcap/errors/group.go create mode 100644 vendor/github.com/pingcap/errors/juju_adaptor.go create mode 100644 vendor/github.com/pingcap/errors/stack.go create mode 100644 vendor/github.com/pingcap/parser/LICENSE rename {ast => vendor/github.com/pingcap/parser/ast}/ast.go (98%) rename {ast => vendor/github.com/pingcap/parser/ast}/base.go (98%) rename {ast => vendor/github.com/pingcap/parser/ast}/ddl.go (99%) rename {ast => vendor/github.com/pingcap/parser/ast}/dml.go (99%) rename {ast => vendor/github.com/pingcap/parser/ast}/expressions.go (99%) rename {ast => vendor/github.com/pingcap/parser/ast}/flag.go (100%) rename {ast => vendor/github.com/pingcap/parser/ast}/functions.go (99%) rename {ast => vendor/github.com/pingcap/parser/ast}/misc.go (99%) rename {ast => vendor/github.com/pingcap/parser/ast}/read_only_checker.go (100%) rename {ast => vendor/github.com/pingcap/parser/ast}/stats.go (98%) rename {util => vendor/github.com/pingcap/parser}/auth/auth.go (97%) rename {util => vendor/github.com/pingcap/parser}/charset/charset.go (99%) rename {util => vendor/github.com/pingcap/parser}/charset/encoding_table.go (100%) create mode 100644 vendor/github.com/pingcap/parser/format/format.go rename {parser => vendor/github.com/pingcap/parser}/lexer.go (99%) rename {parser => vendor/github.com/pingcap/parser}/misc.go (99%) rename {model => vendor/github.com/pingcap/parser/model}/ddl.go (99%) rename {model => vendor/github.com/pingcap/parser/model}/flags.go (100%) rename {model => vendor/github.com/pingcap/parser/model}/model.go (99%) rename {mysql => vendor/github.com/pingcap/parser/mysql}/charset.go (100%) rename {mysql => vendor/github.com/pingcap/parser/mysql}/const.go (100%) rename {mysql => vendor/github.com/pingcap/parser/mysql}/errcode.go (100%) rename {mysql => vendor/github.com/pingcap/parser/mysql}/errname.go (100%) rename {mysql => vendor/github.com/pingcap/parser/mysql}/error.go (100%) rename {mysql => vendor/github.com/pingcap/parser/mysql}/locale_format.go (98%) rename {mysql => vendor/github.com/pingcap/parser/mysql}/state.go (100%) rename {mysql => vendor/github.com/pingcap/parser/mysql}/type.go (100%) rename {mysql => vendor/github.com/pingcap/parser/mysql}/util.go (100%) rename {parser => vendor/github.com/pingcap/parser}/opcode/opcode.go (100%) create mode 100644 vendor/github.com/pingcap/parser/parser.go create mode 100644 vendor/github.com/pingcap/parser/terror/terror.go rename {parser => vendor/github.com/pingcap/parser}/types/etc.go (97%) rename {parser => vendor/github.com/pingcap/parser}/types/eval_type.go (100%) rename {parser => vendor/github.com/pingcap/parser}/types/field_type.go (98%) rename {parser => vendor/github.com/pingcap/parser}/yy_parser.go (98%) diff --git a/Gopkg.lock b/Gopkg.lock index 6d175e0dcf543..889a38ef909a3 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -3,44 +3,33 @@ [[projects]] branch = "master" - digest = "1:be3ccd9f881604e4dd6d15cccfa126aa309232f0ba075ae5f92d3ef729a62758" name = "github.com/BurntSushi/toml" packages = ["."] - pruneopts = "NUT" revision = "a368813c5e648fee92e5f6c30e3944ff9d5e8895" [[projects]] - digest = "1:9752dad5e89cd779096bf2477a4ded16bea7ac62de453c8d6b4bf841d51a8512" name = "github.com/apache/thrift" packages = ["lib/go/thrift"] - pruneopts = "NUT" revision = "b2a4d4ae21c789b689dd162deb819665567f481c" version = "0.10.0" [[projects]] - digest = "1:75d40fa0c338f4c56056a3985e91fa371e8fcd0293e45b80afa7debecaf56012" name = "github.com/beorn7/perks" packages = ["quantile"] - pruneopts = "NUT" revision = "3ac7bf7a47d159a033b107610db8a1b6575507a4" [[projects]] branch = "master" - digest = "1:7b12da6e82292eb06e24dfe544c628115a3f4316c152f9dcb87d4f60cbf7cd7d" name = "github.com/blacktear23/go-proxyprotocol" packages = ["."] - pruneopts = "NUT" revision = "62e368e1c4700c34b4b6f77afd49b215211574c2" [[projects]] - digest = "1:60142a898f3808b3e6aa604e5f3296bdef921e625ef3223b6019c1a345b8765c" name = "github.com/codahale/hdrhistogram" packages = ["."] - pruneopts = "NUT" revision = "f8ad88b59a584afeee9d334eff879b104439117b" [[projects]] - digest = "1:7a5c43af23a0c21f4f1762d54af95586f9c04836257e66631557d8f8200ef0e1" name = "github.com/coreos/etcd" packages = [ "auth/authpb", @@ -49,81 +38,40 @@ "etcdserver/api/v3rpc/rpctypes", "etcdserver/etcdserverpb", "mvcc/mvccpb", - "pkg/types", + "pkg/types" ] - pruneopts = "NUT" revision = "eddf599c689ec85f4752060edff5a72e81e9106a" version = "v3.2.18" [[projects]] - digest = "1:883ab1d72c3c5851413baad190ebe3ceaf31bb8dece09a943ac07f9e722f811c" - name = "github.com/cznic/golex" - packages = ["lex"] - pruneopts = "NUT" - revision = "da5a7153a51074477ecac5c45a7e5182a0c72448" - -[[projects]] - digest = "1:f80ed82cae006d02025cd63bd7cbe63a7e593de2714db785ea36d6323cc995eb" name = "github.com/cznic/mathutil" packages = ["."] - pruneopts = "NUT" revision = "78ad7f262603437f0ecfebc835d80094f89c8f54" [[projects]] branch = "master" - digest = "1:a7e4a0d213c4c29e79a0da8fe9d16bbcedce561763ff643bff252ea14260f61c" - name = "github.com/cznic/parser" - packages = ["yacc"] - pruneopts = "NUT" - revision = "31edd927e5b19d1c4a260c41a397e7f81d6694d9" - -[[projects]] - branch = "master" - digest = "1:809006f9378a46bcc70bc4330d14f43c1a7818ae9d93c09cab062e575d7e95a2" name = "github.com/cznic/sortutil" packages = ["."] - pruneopts = "NUT" revision = "4c7342852e65c2088c981288f2c5610d10b9f7f4" -[[projects]] - digest = "1:5799bcff29ed827fa851b40b2f650bc777df4b67fd9b8a3041d9d89b9eb2fd86" - name = "github.com/cznic/strutil" - packages = ["."] - pruneopts = "NUT" - revision = "1eb03e3cc9d345307a45ec82bd3016cde4bd4464" - -[[projects]] - digest = "1:71705901e4a356cde002ae6f0052fb661f59971c12262c12006b25cec40025b1" - name = "github.com/cznic/y" - packages = ["."] - pruneopts = "NUT" - revision = "9fdf92d4aac058959f814606bb729ed50f5e4240" - [[projects]] branch = "master" - digest = "1:f18dbc529543fe5fd5294f8385ea1f71681be964c43461f5f45335bb51ba83ae" name = "github.com/etcd-io/gofail" packages = ["runtime"] - pruneopts = "NUT" revision = "51ce9a71510a58bad5ae66ddd278ef28762a1550" [[projects]] - digest = "1:973dbcbbb1be662b61604319582383c315add70906a68d14894f31542ffc3a25" name = "github.com/go-sql-driver/mysql" packages = ["."] - pruneopts = "NUT" revision = "3955978caca48c1658a4bb7a9c6a0f084e326af3" [[projects]] - digest = "1:38e684375ef5b55e812332266d63f9fc5b6329ab303067c4cdda051db6d29ca4" name = "github.com/gogo/protobuf" packages = ["proto"] - pruneopts = "NUT" revision = "636bf0302bc95575d69441b25a2603156ffdddf1" version = "v1.1.1" [[projects]] - digest = "1:6aef947ba53156da1a66ee891d70d61835e0dcfc9f0d728ae1132db651e81c22" name = "github.com/golang/protobuf" packages = [ "jsonpb", @@ -133,135 +81,111 @@ "ptypes/any", "ptypes/duration", "ptypes/struct", - "ptypes/timestamp", + "ptypes/timestamp" ] - pruneopts = "NUT" revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" version = "v1.1.0" [[projects]] - digest = "1:c6dfb6c55c1989f1d89622b3c45b786127f76f47322c50e487585f823cb12543" name = "github.com/golang/snappy" packages = ["."] - pruneopts = "NUT" revision = "723cc1e459b8eea2dea4583200fd60757d40097a" [[projects]] branch = "master" - digest = "1:c0883bc20a7c1ff552ff53d414f3cdc28fe847d15fab48c4486aa772ab2fb131" name = "github.com/google/btree" packages = ["."] - pruneopts = "NUT" revision = "316fb6d3f031ae8f4d457c6c5186b9e3ded70435" [[projects]] - digest = "1:dbd86d229eacaa86a98b10f8fb3e3fc69a1913e0f4e010e7cc1f92bf12edca92" name = "github.com/gorilla/context" packages = ["."] - pruneopts = "NUT" revision = "1ea25387ff6f684839d82767c1733ff4d4d15d0a" version = "v1.1" [[projects]] - digest = "1:054b11c45900b575d23fa8e0fa3636a784e2c4d1d43d05e8e20fd592ebe0d5db" name = "github.com/gorilla/mux" packages = ["."] - pruneopts = "NUT" revision = "599cba5e7b6137d46ddf58fb1765f5d928e69604" [[projects]] - digest = "1:0aa5274053fdc232896f0835c712f4a39992d959f8e2363f189a7b0df36f136b" name = "github.com/grpc-ecosystem/go-grpc-middleware" packages = [ ".", "tags", "tracing/opentracing", - "util/metautils", + "util/metautils" ] - pruneopts = "NUT" revision = "82921fcf811d228d2fa202bc31238b356bf9f8d5" [[projects]] - digest = "1:96c558cff0532e2e9ffc0b6d7c8c7431c592d781b109343aa51e27f9fd9a6b82" name = "github.com/grpc-ecosystem/go-grpc-prometheus" packages = ["."] - pruneopts = "NUT" revision = "6b7015e65d366bf3f19b2b2a000a831940f0f7e0" version = "v1.1" [[projects]] - digest = "1:5e55a8699c9ff7aba1e4c8952aeda209685d88d4cb63a8766c338e333b8e65d6" name = "github.com/klauspost/cpuid" packages = ["."] - pruneopts = "NUT" revision = "ae7887de9fa5d2db4eaa8174a7eff2c1ac00f2da" version = "v1.1" [[projects]] branch = "master" - digest = "1:5985ef4caf91ece5d54817c11ea25f182697534f8ae6521eadcd628c142ac4b6" name = "github.com/matttproud/golang_protobuf_extensions" packages = ["pbutil"] - pruneopts = "NUT" revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c" [[projects]] branch = "master" - digest = "1:b95cb972bfd3eb737d334b1703a51a82d1d1d3e92f7f355798d94796c7120c73" name = "github.com/ngaut/pools" packages = ["."] - pruneopts = "NUT" revision = "b7bc8c42aac787667ba45adea78233f53f548443" [[projects]] branch = "master" - digest = "1:7d5f99346aa63d23681f4d92708469f32384d0c26722a4de5725bd0f22caedac" name = "github.com/ngaut/sync2" packages = ["."] - pruneopts = "NUT" revision = "7a24ed77b2efb460c1468b7dc917821c66e80e55" [[projects]] - digest = "1:cc405544fecfb5a8e0c409127ef67ce3b91d11143a00121e5b822e4f8eabe7d2" name = "github.com/opentracing/basictracer-go" packages = [ ".", - "wire", + "wire" ] - pruneopts = "NUT" revision = "1b32af207119a14b1b231d451df3ed04a72efebf" version = "v1.0.0" [[projects]] - digest = "1:7da29c22bcc5c2ffb308324377dc00b5084650348c2799e573ed226d8cc9faf0" name = "github.com/opentracing/opentracing-go" packages = [ ".", "ext", - "log", + "log" ] - pruneopts = "NUT" revision = "1949ddbfd147afd4d964a9f00b24eb291e0e7c38" version = "v1.0.2" [[projects]] branch = "master" - digest = "1:3bf17a6e6eaa6ad24152148a631d18662f7212e21637c2699bff3369b7f00fa2" name = "github.com/petar/GoLLRB" packages = ["llrb"] - pruneopts = "NUT" revision = "53be0d36a84c2a886ca057d34b6aa4468df9ccb4" [[projects]] branch = "master" - digest = "1:dc85cc12f7f97c2b033157f9d40395b2f0458b7bd3083257f8f661ea6f48f89a" name = "github.com/pingcap/check" packages = ["."] - pruneopts = "NUT" revision = "1c287c953996ab3a0bf535dba9d53d809d3dc0b6" [[projects]] - digest = "1:8fd099a567b1e9b3a7e1f66d8547a0d2b1852427e86a0dae96fa59e9583e13e6" + name = "github.com/pingcap/errors" + packages = ["."] + revision = "31ffda8a65b0f910c6d65f1fef40e761fd606384" + version = "v0.10.1" + +[[projects]] name = "github.com/pingcap/goleveldb" packages = [ "leveldb", @@ -275,14 +199,12 @@ "leveldb/opt", "leveldb/storage", "leveldb/table", - "leveldb/util", + "leveldb/util" ] - pruneopts = "NUT" revision = "8d44bfdf1030639ae7130922c95df12d6d4da3b6" [[projects]] branch = "master" - digest = "1:84db0209caf3c48beaec43d15bd22ca6256d958b807c2ac626e2425e232e92c4" name = "github.com/pingcap/kvproto" packages = [ "pkg/coprocessor", @@ -292,100 +214,95 @@ "pkg/metapb", "pkg/pdpb", "pkg/raft_serverpb", - "pkg/tikvpb", + "pkg/tikvpb" ] - pruneopts = "NUT" revision = "529c652955d8fa74faf56f91b2f428d5779fd7d5" [[projects]] branch = "master" - digest = "1:8f576565a8479071ca1951bf678519b1c32480aad8dec2379a64858c31d9e6a9" + name = "github.com/pingcap/parser" + packages = [ + ".", + "ast", + "auth", + "charset", + "format", + "model", + "mysql", + "opcode", + "terror", + "types" + ] + revision = "53ac409ed043f89a850043d2440aaaa7dd863a1c" + +[[projects]] + branch = "master" name = "github.com/pingcap/pd" packages = ["client"] - pruneopts = "NUT" revision = "eb892dda1e33a0b76191d39894ad4a806f313f6e" [[projects]] branch = "master" - digest = "1:9d9d9bf758fc9bbf1a4976534c1622dbca61a8da53d98416dbb711e309e379f7" name = "github.com/pingcap/tipb" packages = [ "go-binlog", "go-tipb", - "sharedbytes", + "sharedbytes" ] - pruneopts = "NUT" revision = "11e33c750323a0267a6aee335eaaeb7831bdae67" [[projects]] - digest = "1:91fee14a873676b2118c54e08c2e04897ea5c141b55a9b9fb8cf0721458d0d85" name = "github.com/pkg/errors" packages = ["."] - pruneopts = "NUT" revision = "9316aeb006f59424c65ff505c217f90c43d6445d" source = "https://github.com/pingcap/errors.git" version = "v0.9.0" [[projects]] - digest = "1:1ef3c4d6e78616bd3d1b5b7d8899febb9aa1b83d3373fbbdc2804408c7977b57" name = "github.com/prometheus/client_golang" packages = [ "prometheus", - "prometheus/push", + "prometheus/push" ] - pruneopts = "NUT" revision = "c5b7fccd204277076155f10851dad72b76a49317" version = "v0.8.0" [[projects]] - digest = "1:9fe8945a11a9f588a9d306b4741cad634da9015a704271b9506810e2cc77fa17" name = "github.com/prometheus/client_model" packages = ["go"] - pruneopts = "NUT" revision = "fa8ad6fec33561be4280a8f0514318c79d7f6cb6" [[projects]] - digest = "1:c90717fa0864d47e19eaa855af60b202b537795f485052c7f48333c679dd7310" name = "github.com/prometheus/common" packages = [ "expfmt", "internal/bitbucket.org/ww/goautoneg", - "model", + "model" ] - pruneopts = "NUT" revision = "4402f4e5ea79ec15f3c574773b6a5198fbea215f" [[projects]] - digest = "1:dcfff2d5e99e01dcb856dd8afb0b509c1d05443f0b523cc5333b33a819829ed9" name = "github.com/prometheus/procfs" packages = ["."] - pruneopts = "NUT" revision = "abf152e5f3e97f2fafac028d2cc06c1feb87ffa5" [[projects]] - digest = "1:4c173651d2deb815a0420aeb1b3f7ca3c4aef2d980ba164a501a53f6abf368ef" name = "github.com/sirupsen/logrus" packages = ["."] - pruneopts = "NUT" revision = "3bcb09397d6d88e7676a9bc8433ca11ba5304837" [[projects]] - digest = "1:0af5ed795eeb9df3e3d32e2c0229b012e2c107945f75a0556733d643c94e55be" name = "github.com/spaolacci/murmur3" packages = ["."] - pruneopts = "NUT" revision = "0d12bf811670bf6a1a63828dfbd003eded177fce" version = "v1.0" [[projects]] - digest = "1:194c26fad062f6b1530720ee1afd6cd6f40d79274b2434caef2693b1da5d2ab2" name = "github.com/twinj/uuid" packages = ["."] - pruneopts = "NUT" revision = "70cac2bcd273ef6a371bb96cde363d28b68734c3" [[projects]] - digest = "1:0e28a98b9579858cb5de885935499fefebc8bc44a652cde08a6d035ee7435603" name = "github.com/uber/jaeger-client-go" packages = [ ".", @@ -397,22 +314,18 @@ "thrift-gen/jaeger", "thrift-gen/sampling", "thrift-gen/zipkincore", - "utils", + "utils" ] - pruneopts = "NUT" revision = "d021e646f5187d77b55592c3efee1a2810e895d7" version = "v2.8.0" [[projects]] - digest = "1:0da2810678a062e0567c3215911869b0423da0e497c56683ff8e87e7a6952597" name = "github.com/uber/jaeger-lib" packages = ["metrics"] - pruneopts = "NUT" revision = "3b2a9ad2a045881ab7a0f81d465be54c8292ee4f" version = "v1.1.0" [[projects]] - digest = "1:686219a880e6ec42870431372756a66c19c1396e9fe203b659179422d3c6bf96" name = "golang.org/x/net" packages = [ "context", @@ -421,21 +334,17 @@ "idna", "internal/timeseries", "lex/httplex", - "trace", + "trace" ] - pruneopts = "NUT" revision = "d1e1b351919c6738fdeb9893d5c998b161464f0c" [[projects]] branch = "master" - digest = "1:2f375ec82e53522eb4a1670f2f24f064f407ef2b32e01bb217f5daa4a4d226d6" name = "golang.org/x/sys" packages = ["unix"] - pruneopts = "NUT" revision = "7dfd1290c7917b7ba22824b9d24954ab3002fe24" [[projects]] - digest = "1:a005696b163ffe1842de27eeb3ccfece9d3c2e70d02b83ea1d8c0eeab597c9e0" name = "golang.org/x/text" packages = [ "encoding", @@ -457,23 +366,19 @@ "unicode/bidi", "unicode/cldr", "unicode/norm", - "unicode/rangetable", + "unicode/rangetable" ] - pruneopts = "NUT" revision = "4ee4af566555f5fbe026368b75596286a312663a" [[projects]] - digest = "1:0efcfe82e59b828eb6f4115bba88ff45c0898c38e823fbe7f450bdffed9e739b" name = "google.golang.org/genproto" packages = [ "googleapis/api/annotations", - "googleapis/rpc/status", + "googleapis/rpc/status" ] - pruneopts = "NUT" revision = "6b7d9516179cd47f4714cfeb0103ad1dede756c4" [[projects]] - digest = "1:7cd8d3d0020bbbe235958c87a2c042c4a8505e401b6e0496880990228fc34f4b" name = "google.golang.org/grpc" packages = [ ".", @@ -500,88 +405,21 @@ "stats", "status", "tap", - "transport", + "transport" ] - pruneopts = "NUT" revision = "7a6a684ca69eb4cae85ad0a484f2e531598c047b" source = "https://github.com/grpc/grpc-go.git" version = "v1.12.2" [[projects]] - digest = "1:7d95d61ff5828a65cf072a46f3c68d67daffdd11e97d758b0af2176cde717fcd" name = "gopkg.in/natefinch/lumberjack.v2" packages = ["."] - pruneopts = "NUT" revision = "dd45e6a67c53f673bb49ca8a001fd3a63ceb640e" version = "v2.0" [solve-meta] analyzer-name = "dep" analyzer-version = 1 - input-imports = [ - "github.com/BurntSushi/toml", - "github.com/blacktear23/go-proxyprotocol", - "github.com/coreos/etcd/clientv3", - "github.com/coreos/etcd/clientv3/concurrency", - "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes", - "github.com/coreos/etcd/mvcc/mvccpb", - "github.com/cznic/mathutil", - "github.com/cznic/parser/yacc", - "github.com/cznic/sortutil", - "github.com/cznic/strutil", - "github.com/cznic/y", - "github.com/etcd-io/gofail/runtime", - "github.com/go-sql-driver/mysql", - "github.com/golang/protobuf/jsonpb", - "github.com/golang/protobuf/proto", - "github.com/google/btree", - "github.com/gorilla/mux", - "github.com/grpc-ecosystem/go-grpc-middleware", - "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing", - "github.com/grpc-ecosystem/go-grpc-prometheus", - "github.com/klauspost/cpuid", - "github.com/ngaut/pools", - "github.com/ngaut/sync2", - "github.com/opentracing/basictracer-go", - "github.com/opentracing/opentracing-go", - "github.com/pingcap/check", - "github.com/pingcap/goleveldb/leveldb", - "github.com/pingcap/goleveldb/leveldb/comparer", - "github.com/pingcap/goleveldb/leveldb/iterator", - "github.com/pingcap/goleveldb/leveldb/memdb", - "github.com/pingcap/goleveldb/leveldb/opt", - "github.com/pingcap/goleveldb/leveldb/storage", - "github.com/pingcap/goleveldb/leveldb/util", - "github.com/pingcap/kvproto/pkg/coprocessor", - "github.com/pingcap/kvproto/pkg/errorpb", - "github.com/pingcap/kvproto/pkg/kvrpcpb", - "github.com/pingcap/kvproto/pkg/metapb", - "github.com/pingcap/kvproto/pkg/tikvpb", - "github.com/pingcap/pd/client", - "github.com/pingcap/tipb/go-binlog", - "github.com/pingcap/tipb/go-tipb", - "github.com/pkg/errors", - "github.com/prometheus/client_golang/prometheus", - "github.com/prometheus/client_golang/prometheus/push", - "github.com/sirupsen/logrus", - "github.com/spaolacci/murmur3", - "github.com/twinj/uuid", - "github.com/uber/jaeger-client-go/config", - "golang.org/x/net/context", - "golang.org/x/text/encoding", - "golang.org/x/text/encoding/charmap", - "golang.org/x/text/encoding/japanese", - "golang.org/x/text/encoding/korean", - "golang.org/x/text/encoding/simplifiedchinese", - "golang.org/x/text/encoding/traditionalchinese", - "golang.org/x/text/encoding/unicode", - "golang.org/x/text/transform", - "google.golang.org/grpc", - "google.golang.org/grpc/codes", - "google.golang.org/grpc/credentials", - "google.golang.org/grpc/keepalive", - "google.golang.org/grpc/metadata", - "gopkg.in/natefinch/lumberjack.v2", - ] + inputs-digest = "97e05f1d47a56848ca61ce3ca55d52257dca3643cb3b540136da4029fb4c45e8" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 2c29ff527877a..b67407783d317 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -28,10 +28,6 @@ required = ["github.com/golang/protobuf/jsonpb"] version = "1.1.0" name = "github.com/golang/protobuf" -[[constraint]] - branch = "master" - name = "github.com/cznic/parser" - [[constraint]] branch = "master" name = "github.com/cznic/sortutil" @@ -102,3 +98,6 @@ required = ["github.com/golang/protobuf/jsonpb"] version = "0.9.0" source = "https://github.com/pingcap/errors.git" +[[constraint]] + branch = "master" + name = "github.com/pingcap/parser" \ No newline at end of file diff --git a/Makefile b/Makefile index a3013863c404d..7e7f26b4e5dc6 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,7 @@ FILES := $$(find $$($(PACKAGE_DIRECTORIES)) -name "*.go" | grep -vE "vendor" GOFAIL_ENABLE := $$(find $$PWD/ -type d | grep -vE "(\.git|vendor)" | xargs gofail enable) GOFAIL_DISABLE := $$(find $$PWD/ -type d | grep -vE "(\.git|vendor)" | xargs gofail disable) -LDFLAGS += -X "github.com/pingcap/tidb/mysql.TiDBReleaseVersion=$(shell git describe --tags --dirty)" +LDFLAGS += -X "github.com/pingcap/parser/mysql.TiDBReleaseVersion=$(shell git describe --tags --dirty)" LDFLAGS += -X "github.com/pingcap/tidb/util/printer.TiDBBuildTS=$(shell date -u '+%Y-%m-%d %I:%M:%S')" LDFLAGS += -X "github.com/pingcap/tidb/util/printer.TiDBGitHash=$(shell git rev-parse HEAD)" LDFLAGS += -X "github.com/pingcap/tidb/util/printer.TiDBGitBranch=$(shell git rev-parse --abbrev-ref HEAD)" @@ -40,7 +40,7 @@ CHECK_LDFLAGS += $(LDFLAGS) ${TEST_LDFLAGS} TARGET = "" -.PHONY: all build update parser clean todo test gotest interpreter server dev benchkv benchraw check parserlib checklist +.PHONY: all build update clean todo test gotest interpreter server dev benchkv benchraw check checklist default: server buildsucc @@ -51,35 +51,11 @@ buildsucc: all: dev server benchkv -dev: checklist parserlib test check +dev: checklist test check build: $(GOBUILD) -goyacc: - $(GOBUILD) -o bin/goyacc parser/goyacc/main.go - -parser: goyacc - bin/goyacc -o /dev/null parser/parser.y - bin/goyacc -o parser/parser.go parser/parser.y 2>&1 | egrep "(shift|reduce)/reduce" | awk '{print} END {if (NR > 0) {print "Find conflict in parser.y. Please check y.output for more information."; exit 1;}}' - rm -f y.output - - @if [ $(ARCH) = $(LINUX) ]; \ - then \ - sed -i -e 's|//line.*||' -e 's/yyEofCode/yyEOFCode/' parser/parser.go; \ - elif [ $(ARCH) = $(MAC) ]; \ - then \ - /usr/bin/sed -i "" 's|//line.*||' parser/parser.go; \ - /usr/bin/sed -i "" 's/yyEofCode/yyEOFCode/' parser/parser.go; \ - fi - - @awk 'BEGIN{print "// Code generated by goyacc"} {print $0}' parser/parser.go > tmp_parser.go && mv tmp_parser.go parser/parser.go; - -parserlib: parser/parser.go - -parser/parser.go: parser/parser.y - make parser - # The retool tools.json is setup from hack/retool-install.sh check-setup: @which retool >/dev/null 2>&1 || go get github.com/twitchtv/retool @@ -134,7 +110,7 @@ test: checklist gotest explaintest explaintest: server @cd cmd/explaintest && ./run-tests.sh -s ../../bin/tidb-server -gotest: parserlib +gotest: go get github.com/etcd-io/gofail @$(GOFAIL_ENABLE) ifeq ("$(TRAVIS_COVERAGE)", "1") @@ -151,21 +127,21 @@ else endif @$(GOFAIL_DISABLE) -race: parserlib +race: go get github.com/etcd-io/gofail @$(GOFAIL_ENABLE) @export log_level=debug; \ $(GOTEST) -timeout 20m -race $(PACKAGES) || { $(GOFAIL_DISABLE); exit 1; } @$(GOFAIL_DISABLE) -leak: parserlib +leak: go get github.com/etcd-io/gofail @$(GOFAIL_ENABLE) @export log_level=debug; \ $(GOTEST) -tags leak $(PACKAGES) || { $(GOFAIL_DISABLE); exit 1; } @$(GOFAIL_DISABLE) -tikv_integration_test: parserlib +tikv_integration_test: go get github.com/etcd-io/gofail @$(GOFAIL_ENABLE) $(GOTEST) ./store/tikv/. -with-tikv=true || { $(GOFAIL_DISABLE); exit 1; } @@ -182,14 +158,14 @@ ifeq ("$(WITH_CHECK)", "1") CHECK_FLAG = $(TEST_LDFLAGS) endif -server: parserlib +server: ifeq ($(TARGET), "") $(GOBUILD) $(RACE_FLAG) -ldflags '$(LDFLAGS) $(CHECK_FLAG)' -o bin/tidb-server tidb-server/main.go else $(GOBUILD) $(RACE_FLAG) -ldflags '$(LDFLAGS) $(CHECK_FLAG)' -o '$(TARGET)' tidb-server/main.go endif -server_check: parserlib +server_check: ifeq ($(TARGET), "") $(GOBUILD) $(RACE_FLAG) -ldflags '$(CHECK_LDFLAGS)' -o bin/tidb-server tidb-server/main.go else diff --git a/ast/ddl_test.go b/ast/ddl_test.go deleted file mode 100644 index 1aa83a5092a19..0000000000000 --- a/ast/ddl_test.go +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package ast_test - -import ( - . "github.com/pingcap/check" - . "github.com/pingcap/tidb/ast" -) - -var _ = Suite(&testDDLSuite{}) - -type testDDLSuite struct { -} - -func (ts *testDDLSuite) TestDDLVisitorCover(c *C) { - ce := &checkExpr{} - constraint := &Constraint{Keys: []*IndexColName{{Column: &ColumnName{}}, {Column: &ColumnName{}}}, Refer: &ReferenceDef{}, Option: &IndexOption{}} - - alterTableSpec := &AlterTableSpec{Constraint: constraint, Options: []*TableOption{{}}, NewTable: &TableName{}, NewColumns: []*ColumnDef{{Name: &ColumnName{}}}, OldColumnName: &ColumnName{}, Position: &ColumnPosition{RelativeColumn: &ColumnName{}}} - - stmts := []struct { - node Node - expectedEnterCnt int - expectedLeaveCnt int - }{ - {&CreateDatabaseStmt{}, 0, 0}, - {&DropDatabaseStmt{}, 0, 0}, - {&DropIndexStmt{Table: &TableName{}}, 0, 0}, - {&DropTableStmt{Tables: []*TableName{{}, {}}}, 0, 0}, - {&RenameTableStmt{OldTable: &TableName{}, NewTable: &TableName{}}, 0, 0}, - {&TruncateTableStmt{Table: &TableName{}}, 0, 0}, - - // TODO: cover children - {&AlterTableStmt{Table: &TableName{}, Specs: []*AlterTableSpec{alterTableSpec}}, 0, 0}, - {&CreateIndexStmt{Table: &TableName{}}, 0, 0}, - {&CreateTableStmt{Table: &TableName{}, ReferTable: &TableName{}}, 0, 0}, - {&AlterTableSpec{}, 0, 0}, - {&ColumnDef{Name: &ColumnName{}, Options: []*ColumnOption{{Expr: ce}}}, 1, 1}, - {&ColumnOption{Expr: ce}, 1, 1}, - {&ColumnPosition{RelativeColumn: &ColumnName{}}, 0, 0}, - {&Constraint{Keys: []*IndexColName{{Column: &ColumnName{}}, {Column: &ColumnName{}}}, Refer: &ReferenceDef{}, Option: &IndexOption{}}, 0, 0}, - {&IndexColName{Column: &ColumnName{}}, 0, 0}, - {&ReferenceDef{Table: &TableName{}, IndexColNames: []*IndexColName{{Column: &ColumnName{}}, {Column: &ColumnName{}}}, OnDelete: &OnDeleteOpt{}, OnUpdate: &OnUpdateOpt{}}, 0, 0}, - } - - for _, v := range stmts { - ce.reset() - v.node.Accept(checkVisitor{}) - c.Check(ce.enterCnt, Equals, v.expectedEnterCnt) - c.Check(ce.leaveCnt, Equals, v.expectedLeaveCnt) - v.node.Accept(visitor1{}) - } -} diff --git a/ast/dml_test.go b/ast/dml_test.go deleted file mode 100644 index 9c6decc35c295..0000000000000 --- a/ast/dml_test.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package ast_test - -import ( - . "github.com/pingcap/check" - . "github.com/pingcap/tidb/ast" -) - -var _ = Suite(&testDMLSuite{}) - -type testDMLSuite struct { -} - -func (ts *testDMLSuite) TestDMLVisitorCover(c *C) { - ce := &checkExpr{} - - tableRefsClause := &TableRefsClause{TableRefs: &Join{Left: &TableSource{Source: &TableName{}}, On: &OnCondition{Expr: ce}}} - - stmts := []struct { - node Node - expectedEnterCnt int - expectedLeaveCnt int - }{ - {&DeleteStmt{TableRefs: tableRefsClause, Tables: &DeleteTableList{}, Where: ce, - Order: &OrderByClause{}, Limit: &Limit{Count: ce, Offset: ce}}, 4, 4}, - {&ShowStmt{Table: &TableName{}, Column: &ColumnName{}, Pattern: &PatternLikeExpr{Expr: ce, Pattern: ce}, Where: ce}, 3, 3}, - {&LoadDataStmt{Table: &TableName{}, Columns: []*ColumnName{{}}, FieldsInfo: &FieldsClause{}, LinesInfo: &LinesClause{}}, 0, 0}, - {&Assignment{Column: &ColumnName{}, Expr: ce}, 1, 1}, - {&ByItem{Expr: ce}, 1, 1}, - {&GroupByClause{Items: []*ByItem{{Expr: ce}, {Expr: ce}}}, 2, 2}, - {&HavingClause{Expr: ce}, 1, 1}, - {&Join{Left: &TableSource{Source: &TableName{}}}, 0, 0}, - {&Limit{Count: ce, Offset: ce}, 2, 2}, - {&OnCondition{Expr: ce}, 1, 1}, - {&OrderByClause{Items: []*ByItem{{Expr: ce}, {Expr: ce}}}, 2, 2}, - {&SelectField{Expr: ce, WildCard: &WildCardField{}}, 1, 1}, - {&TableName{}, 0, 0}, - {tableRefsClause, 1, 1}, - {&TableSource{Source: &TableName{}}, 0, 0}, - {&WildCardField{}, 0, 0}, - - // TODO: cover childrens - {&InsertStmt{Table: tableRefsClause}, 1, 1}, - {&UnionStmt{}, 0, 0}, - {&UpdateStmt{TableRefs: tableRefsClause}, 1, 1}, - {&SelectStmt{}, 0, 0}, - {&FieldList{}, 0, 0}, - {&UnionSelectList{}, 0, 0}, - } - - for _, v := range stmts { - ce.reset() - v.node.Accept(checkVisitor{}) - c.Check(ce.enterCnt, Equals, v.expectedEnterCnt) - c.Check(ce.leaveCnt, Equals, v.expectedLeaveCnt) - v.node.Accept(visitor1{}) - } -} diff --git a/ast/expressions_test.go b/ast/expressions_test.go deleted file mode 100644 index 99fe630afaa37..0000000000000 --- a/ast/expressions_test.go +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package ast_test - -import ( - . "github.com/pingcap/check" - . "github.com/pingcap/tidb/ast" - _ "github.com/pingcap/tidb/types/parser_driver" -) - -var _ = Suite(&testExpressionsSuite{}) - -type testExpressionsSuite struct { -} - -type checkVisitor struct{} - -func (v checkVisitor) Enter(in Node) (Node, bool) { - if e, ok := in.(*checkExpr); ok { - e.enterCnt++ - return in, true - } - return in, false -} - -func (v checkVisitor) Leave(in Node) (Node, bool) { - if e, ok := in.(*checkExpr); ok { - e.leaveCnt++ - } - return in, true -} - -type checkExpr struct { - ValueExpr - - enterCnt int - leaveCnt int -} - -func (n *checkExpr) Accept(v Visitor) (Node, bool) { - newNode, skipChildren := v.Enter(n) - if skipChildren { - return v.Leave(newNode) - } - n = newNode.(*checkExpr) - return v.Leave(n) -} - -func (n *checkExpr) reset() { - n.enterCnt = 0 - n.leaveCnt = 0 -} - -func (tc *testExpressionsSuite) TestExpresionsVisitorCover(c *C) { - ce := &checkExpr{} - stmts := - []struct { - node Node - expectedEnterCnt int - expectedLeaveCnt int - }{ - {&BetweenExpr{Expr: ce, Left: ce, Right: ce}, 3, 3}, - {&BinaryOperationExpr{L: ce, R: ce}, 2, 2}, - {&CaseExpr{Value: ce, WhenClauses: []*WhenClause{{Expr: ce, Result: ce}, - {Expr: ce, Result: ce}}, ElseClause: ce}, 6, 6}, - {&ColumnNameExpr{Name: &ColumnName{}}, 0, 0}, - {&CompareSubqueryExpr{L: ce, R: ce}, 2, 2}, - {&DefaultExpr{Name: &ColumnName{}}, 0, 0}, - {&ExistsSubqueryExpr{Sel: ce}, 1, 1}, - {&IsNullExpr{Expr: ce}, 1, 1}, - {&IsTruthExpr{Expr: ce}, 1, 1}, - {NewParamMarkerExpr(0), 0, 0}, - {&ParenthesesExpr{Expr: ce}, 1, 1}, - {&PatternInExpr{Expr: ce, List: []ExprNode{ce, ce, ce}, Sel: ce}, 5, 5}, - {&PatternLikeExpr{Expr: ce, Pattern: ce}, 2, 2}, - {&PatternRegexpExpr{Expr: ce, Pattern: ce}, 2, 2}, - {&PositionExpr{}, 0, 0}, - {&RowExpr{Values: []ExprNode{ce, ce}}, 2, 2}, - {&UnaryOperationExpr{V: ce}, 1, 1}, - {NewValueExpr(0), 0, 0}, - {&ValuesExpr{Column: &ColumnNameExpr{Name: &ColumnName{}}}, 0, 0}, - {&VariableExpr{Value: ce}, 1, 1}, - } - - for _, v := range stmts { - ce.reset() - v.node.Accept(checkVisitor{}) - c.Check(ce.enterCnt, Equals, v.expectedEnterCnt) - c.Check(ce.leaveCnt, Equals, v.expectedLeaveCnt) - v.node.Accept(visitor1{}) - } -} diff --git a/ast/flag_test.go b/ast/flag_test.go deleted file mode 100644 index a3f7c5d3762c8..0000000000000 --- a/ast/flag_test.go +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package ast_test - -import ( - "testing" - - . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/parser" -) - -func TestT(t *testing.T) { - CustomVerboseFlag = true - TestingT(t) -} - -var _ = Suite(&testFlagSuite{}) - -type testFlagSuite struct { - *parser.Parser -} - -func (ts *testFlagSuite) SetUpSuite(c *C) { - ts.Parser = parser.New() -} - -func (ts *testFlagSuite) TestHasAggFlag(c *C) { - expr := &ast.BetweenExpr{} - flagTests := []struct { - flag uint64 - hasAgg bool - }{ - {ast.FlagHasAggregateFunc, true}, - {ast.FlagHasAggregateFunc | ast.FlagHasVariable, true}, - {ast.FlagHasVariable, false}, - } - for _, tt := range flagTests { - expr.SetFlag(tt.flag) - c.Assert(ast.HasAggFlag(expr), Equals, tt.hasAgg) - } -} - -func (ts *testFlagSuite) TestFlag(c *C) { - flagTests := []struct { - expr string - flag uint64 - }{ - { - "1 between 0 and 2", - ast.FlagConstant, - }, - { - "case 1 when 1 then 1 else 0 end", - ast.FlagConstant, - }, - { - "case 1 when 1 then 1 else 0 end", - ast.FlagConstant, - }, - { - "case 1 when a > 1 then 1 else 0 end", - ast.FlagConstant | ast.FlagHasReference, - }, - { - "1 = ANY (select 1) OR exists (select 1)", - ast.FlagHasSubquery, - }, - { - "1 in (1) or 1 is true or null is null or 'abc' like 'abc' or 'abc' rlike 'abc'", - ast.FlagConstant, - }, - { - "row (1, 1) = row (1, 1)", - ast.FlagConstant, - }, - { - "(1 + a) > ?", - ast.FlagHasReference | ast.FlagHasParamMarker, - }, - { - "trim('abc ')", - ast.FlagHasFunc, - }, - { - "now() + EXTRACT(YEAR FROM '2009-07-02') + CAST(1 AS UNSIGNED)", - ast.FlagHasFunc, - }, - { - "substring('abc', 1)", - ast.FlagHasFunc, - }, - { - "sum(a)", - ast.FlagHasAggregateFunc | ast.FlagHasReference, - }, - { - "(select 1) as a", - ast.FlagHasSubquery, - }, - { - "@auto_commit", - ast.FlagHasVariable, - }, - { - "default(a)", - ast.FlagHasDefault, - }, - { - "a is null", - ast.FlagHasReference, - }, - { - "1 is true", - ast.FlagConstant, - }, - { - "a in (1, count(*), 3)", - ast.FlagConstant | ast.FlagHasReference | ast.FlagHasAggregateFunc, - }, - { - "'Michael!' REGEXP '.*'", - ast.FlagConstant, - }, - { - "a REGEXP '.*'", - ast.FlagHasReference, - }, - { - "-a", - ast.FlagHasReference, - }, - } - for _, tt := range flagTests { - stmt, err := ts.ParseOneStmt("select "+tt.expr, "", "") - c.Assert(err, IsNil) - selectStmt := stmt.(*ast.SelectStmt) - ast.SetFlag(selectStmt) - expr := selectStmt.Fields.Fields[0].Expr - c.Assert(expr.GetFlag(), Equals, tt.flag, Commentf("For %s", tt.expr)) - } -} diff --git a/ast/format_test.go b/ast/format_test.go deleted file mode 100644 index a5a70030e69b2..0000000000000 --- a/ast/format_test.go +++ /dev/null @@ -1,98 +0,0 @@ -package ast_test - -import ( - "bytes" - "fmt" - - . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/parser" -) - -var _ = Suite(&testAstFormatSuite{}) - -type testAstFormatSuite struct { -} - -func getDefaultCharsetAndCollate() (string, string) { - return "utf8", "utf8_bin" -} - -func (ts *testAstFormatSuite) TestAstFormat(c *C) { - var testcases = []struct { - input string - output string - }{ - // Literals. - {`null`, `NULL`}, - {`true`, `TRUE`}, - {`350`, `350`}, - {`001e-12`, `1e-12`}, // Float. - {`345.678`, `345.678`}, - {`00.0001000`, `0.0001000`}, // Decimal. - {`null`, `NULL`}, - {`"Hello, world"`, `"Hello, world"`}, - {`'Hello, world'`, `"Hello, world"`}, - {`'Hello, "world"'`, `"Hello, \"world\""`}, - {`_utf8'你好'`, `"你好"`}, - {`x'bcde'`, "x'bcde'"}, - {`x''`, "x''"}, - {`x'0035'`, "x'0035'"}, // Shouldn't trim leading zero. - {`b'00111111'`, `b'111111'`}, - {`time'10:10:10.123'`, `timeliteral("10:10:10.123")`}, - {`timestamp'1999-01-01 10:0:0.123'`, `timestampliteral("1999-01-01 10:0:0.123")`}, - {`date '1700-01-01'`, `dateliteral("1700-01-01")`}, - - // Expressions. - {`f between 30 and 50`, "`f` BETWEEN 30 AND 50"}, - {`f not between 30 and 50`, "`f` NOT BETWEEN 30 AND 50"}, - {`345 + " hello "`, `345 + " hello "`}, - {`"hello world" >= 'hello world'`, `"hello world" >= "hello world"`}, - {`case 3 when 1 then false else true end`, `CASE 3 WHEN 1 THEN FALSE ELSE TRUE END`}, - {`database.table.column`, "`database`.`table`.`column`"}, // ColumnNameExpr - {`3 is null`, `3 IS NULL`}, - {`3 is not null`, `3 IS NOT NULL`}, - {`3 is true`, `3 IS TRUE`}, - {`3 is not true`, `3 IS NOT TRUE`}, - {`3 is false`, `3 IS FALSE`}, - {` ( x is false )`, "(`x` IS FALSE)"}, - {`3 in ( a,b,"h",6 )`, "3 IN (`a`,`b`,\"h\",6)"}, - {`3 not in ( a,b,"h",6 )`, "3 NOT IN (`a`,`b`,\"h\",6)"}, - {`"abc" like '%b%'`, `"abc" LIKE "%b%"`}, - {`"abc" not like '%b%'`, `"abc" NOT LIKE "%b%"`}, - {`"abc" like '%b%' escape '_'`, `"abc" LIKE "%b%" ESCAPE '_'`}, - {`"abc" regexp '.*bc?'`, `"abc" REGEXP ".*bc?"`}, - {`"abc" not regexp '.*bc?'`, `"abc" NOT REGEXP ".*bc?"`}, - {`- 4`, `-4`}, - {`- ( - 4 ) `, `-(-4)`}, - // Functions. - {` json_extract ( a,'$.b',"$.\"c d\"" ) `, "json_extract(`a`, \"$.b\", \"$.\\\"c d\\\"\")"}, - {` length ( a )`, "length(`a`)"}, - {`a -> '$.a'`, "json_extract(`a`, \"$.a\")"}, - {`a.b ->> '$.a'`, "json_unquote(json_extract(`a`.`b`, \"$.a\"))"}, - {`DATE_ADD('1970-01-01', interval 3 second)`, `date_add("1970-01-01", INTERVAL 3 SECOND)`}, - {`TIMESTAMPDIFF(month, '2001-01-01', '2001-02-02 12:03:05.123')`, `timestampdiff(MONTH, "2001-01-01", "2001-02-02 12:03:05.123")`}, - // Cast, Convert and Binary. - // There should not be spaces between 'cast' and '(' unless 'IGNORE_SPACE' mode is set. - // see: https://dev.mysql.com/doc/refman/5.7/en/function-resolution.html - {` cast( a as signed ) `, "CAST(`a` AS SIGNED)"}, - {` cast( a as unsigned integer) `, "CAST(`a` AS UNSIGNED)"}, - {` cast( a as char(3) binary) `, "CAST(`a` AS CHAR(3) BINARY)"}, - {` cast( a as decimal ) `, "CAST(`a` AS DECIMAL(11))"}, - {` cast( a as decimal (3) ) `, "CAST(`a` AS DECIMAL(3))"}, - {` cast( a as decimal (3,3) ) `, "CAST(`a` AS DECIMAL(3, 3))"}, - {` convert (a, signed) `, "CONVERT(`a`, SIGNED)"}, - {` binary "hello"`, `BINARY "hello"`}, - } - for _, tt := range testcases { - expr := fmt.Sprintf("select %s", tt.input) - charset, collation := getDefaultCharsetAndCollate() - stmts, err := parser.New().Parse(expr, charset, collation) - node := stmts[0].(*ast.SelectStmt).Fields.Fields[0].Expr - c.Assert(err, IsNil) - - writer := bytes.NewBufferString("") - node.Format(writer) - c.Assert(writer.String(), Equals, tt.output) - } -} diff --git a/ast/functions_test.go b/ast/functions_test.go deleted file mode 100644 index 01c37fa1b1eb1..0000000000000 --- a/ast/functions_test.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package ast_test - -import ( - . "github.com/pingcap/check" - . "github.com/pingcap/tidb/ast" -) - -var _ = Suite(&testFunctionsSuite{}) - -type testFunctionsSuite struct { -} - -func (ts *testFunctionsSuite) TestFunctionsVisitorCover(c *C) { - valueExpr := NewValueExpr(42) - stmts := []Node{ - &AggregateFuncExpr{Args: []ExprNode{valueExpr}}, - &FuncCallExpr{Args: []ExprNode{valueExpr}}, - &FuncCastExpr{Expr: valueExpr}, - } - - for _, stmt := range stmts { - stmt.Accept(visitor{}) - stmt.Accept(visitor1{}) - } -} diff --git a/ast/misc_test.go b/ast/misc_test.go deleted file mode 100644 index 0786d38e14e75..0000000000000 --- a/ast/misc_test.go +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package ast_test - -import ( - . "github.com/pingcap/check" - . "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/parser" - "github.com/pingcap/tidb/util/auth" -) - -var _ = Suite(&testMiscSuite{}) - -type testMiscSuite struct { -} - -type visitor struct{} - -func (v visitor) Enter(in Node) (Node, bool) { - return in, false -} - -func (v visitor) Leave(in Node) (Node, bool) { - return in, true -} - -type visitor1 struct { - visitor -} - -func (visitor1) Enter(in Node) (Node, bool) { - return in, true -} - -func (ts *testMiscSuite) TestMiscVisitorCover(c *C) { - valueExpr := NewValueExpr(42) - stmts := []Node{ - &AdminStmt{}, - &AlterUserStmt{}, - &BeginStmt{}, - &BinlogStmt{}, - &CommitStmt{}, - &CreateUserStmt{}, - &DeallocateStmt{}, - &DoStmt{}, - &ExecuteStmt{UsingVars: []ExprNode{valueExpr}}, - &ExplainStmt{Stmt: &ShowStmt{}}, - &GrantStmt{}, - &PrepareStmt{SQLVar: &VariableExpr{Value: valueExpr}}, - &RollbackStmt{}, - &SetPwdStmt{}, - &SetStmt{Variables: []*VariableAssignment{ - { - Value: valueExpr, - }, - }}, - &UseStmt{}, - &AnalyzeTableStmt{ - TableNames: []*TableName{ - {}, - }, - }, - &FlushStmt{}, - &PrivElem{}, - &VariableAssignment{Value: valueExpr}, - &KillStmt{}, - &DropStatsStmt{Table: &TableName{}}, - } - - for _, v := range stmts { - v.Accept(visitor{}) - v.Accept(visitor1{}) - } -} - -func (ts *testMiscSuite) TestDDLVisitorCover(c *C) { - sql := ` -create table t (c1 smallint unsigned, c2 int unsigned); -alter table t add column a smallint unsigned after b; -create index t_i on t (id); -create database test character set utf8; -drop database test; -drop index t_i on t; -drop table t; -truncate t; -create table t ( -jobAbbr char(4) not null, -constraint foreign key (jobabbr) references ffxi_jobtype (jobabbr) on delete cascade on update cascade -); -` - parse := parser.New() - stmts, err := parse.Parse(sql, "", "") - c.Assert(err, IsNil) - for _, stmt := range stmts { - stmt.Accept(visitor{}) - stmt.Accept(visitor1{}) - } -} - -func (ts *testMiscSuite) TestDMLVistorCover(c *C) { - sql := `delete from somelog where user = 'jcole' order by timestamp_column limit 1; -delete t1, t2 from t1 inner join t2 inner join t3 where t1.id=t2.id and t2.id=t3.id; -select * from t where exists(select * from t k where t.c = k.c having sum(c) = 1); -insert into t_copy select * from t where t.x > 5; -(select /*+ TIDB_INLJ(t1) */ a from t1 where a=10 and b=1) union (select /*+ TIDB_SMJ(t2) */ a from t2 where a=11 and b=2) order by a limit 10; -update t1 set col1 = col1 + 1, col2 = col1; -show create table t; -load data infile '/tmp/t.csv' into table t fields terminated by 'ab' enclosed by 'b';` - - p := parser.New() - stmts, err := p.Parse(sql, "", "") - c.Assert(err, IsNil) - for _, stmt := range stmts { - stmt.Accept(visitor{}) - stmt.Accept(visitor1{}) - } -} - -func (ts *testMiscSuite) TestSensitiveStatement(c *C) { - positive := []StmtNode{ - &SetPwdStmt{}, - &CreateUserStmt{}, - &AlterUserStmt{}, - &GrantStmt{}, - } - for i, stmt := range positive { - _, ok := stmt.(SensitiveStmtNode) - c.Assert(ok, IsTrue, Commentf("%d, %#v fail", i, stmt)) - } - - negative := []StmtNode{ - &DropUserStmt{}, - &RevokeStmt{}, - &AlterTableStmt{}, - &CreateDatabaseStmt{}, - &CreateIndexStmt{}, - &CreateTableStmt{}, - &DropDatabaseStmt{}, - &DropIndexStmt{}, - &DropTableStmt{}, - &RenameTableStmt{}, - &TruncateTableStmt{}, - } - for _, stmt := range negative { - _, ok := stmt.(SensitiveStmtNode) - c.Assert(ok, IsFalse) - } -} - -func (ts *testMiscSuite) TestUserSpec(c *C) { - hashString := "*3D56A309CD04FA2EEF181462E59011F075C89548" - u := UserSpec{ - User: &auth.UserIdentity{ - Username: "test", - }, - AuthOpt: &AuthOption{ - ByAuthString: false, - AuthString: "xxx", - HashString: hashString, - }, - } - pwd, ok := u.EncodedPassword() - c.Assert(ok, IsTrue) - c.Assert(pwd, Equals, u.AuthOpt.HashString) - - u.AuthOpt.HashString = "not-good-password-format" - pwd, ok = u.EncodedPassword() - c.Assert(ok, IsFalse) - - u.AuthOpt.ByAuthString = true - pwd, ok = u.EncodedPassword() - c.Assert(ok, IsTrue) - c.Assert(pwd, Equals, hashString) - - u.AuthOpt.AuthString = "" - pwd, ok = u.EncodedPassword() - c.Assert(ok, IsTrue) - c.Assert(pwd, Equals, "") -} diff --git a/ast/read_only_checker_test.go b/ast/read_only_checker_test.go deleted file mode 100644 index 7abd27f066fe5..0000000000000 --- a/ast/read_only_checker_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package ast - -import ( - . "github.com/pingcap/check" -) - -var _ = Suite(&testCacheableSuite{}) - -type testCacheableSuite struct { -} - -func (s *testCacheableSuite) TestCacheable(c *C) { - // test non-SelectStmt - var stmt Node = &DeleteStmt{} - c.Assert(IsReadOnly(stmt), IsFalse) - - stmt = &InsertStmt{} - c.Assert(IsReadOnly(stmt), IsFalse) - - stmt = &UpdateStmt{} - c.Assert(IsReadOnly(stmt), IsFalse) - - stmt = &ExplainStmt{} - c.Assert(IsReadOnly(stmt), IsTrue) - - stmt = &ExplainStmt{} - c.Assert(IsReadOnly(stmt), IsTrue) - - stmt = &DoStmt{} - c.Assert(IsReadOnly(stmt), IsTrue) -} diff --git a/cmd/benchdb/main.go b/cmd/benchdb/main.go index e6a91936b9869..54dacd9bcfbc5 100644 --- a/cmd/benchdb/main.go +++ b/cmd/benchdb/main.go @@ -21,9 +21,9 @@ import ( "strings" "time" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/tikv" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util/logutil" log "github.com/sirupsen/logrus" "golang.org/x/net/context" diff --git a/cmd/benchfilesort/main.go b/cmd/benchfilesort/main.go index 296afe0554bb6..3116638efb902 100644 --- a/cmd/benchfilesort/main.go +++ b/cmd/benchfilesort/main.go @@ -24,8 +24,8 @@ import ( "runtime/pprof" "time" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/filesort" diff --git a/cmd/benchkv/main.go b/cmd/benchkv/main.go index 06d35ec9a0139..9210170dba708 100644 --- a/cmd/benchkv/main.go +++ b/cmd/benchkv/main.go @@ -24,9 +24,9 @@ import ( _ "github.com/go-sql-driver/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/store/tikv" - "github.com/pingcap/tidb/terror" "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus" log "github.com/sirupsen/logrus" diff --git a/cmd/benchraw/main.go b/cmd/benchraw/main.go index fcbc3ec428101..f1c6f30b40279 100644 --- a/cmd/benchraw/main.go +++ b/cmd/benchraw/main.go @@ -22,9 +22,9 @@ import ( "sync" "time" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/store/tikv" - "github.com/pingcap/tidb/terror" "github.com/pkg/errors" log "github.com/sirupsen/logrus" ) diff --git a/cmd/explaintest/main.go b/cmd/explaintest/main.go index 2da89d708e071..cc3e6dd9b6e61 100644 --- a/cmd/explaintest/main.go +++ b/cmd/explaintest/main.go @@ -26,7 +26,7 @@ import ( "flag" "github.com/go-sql-driver/mysql" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/util/logutil" diff --git a/cmd/importer/db.go b/cmd/importer/db.go index 5f5d174bc3f45..92bf182828ed0 100644 --- a/cmd/importer/db.go +++ b/cmd/importer/db.go @@ -21,7 +21,7 @@ import ( "strings" _ "github.com/go-sql-driver/mysql" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pkg/errors" log "github.com/sirupsen/logrus" ) diff --git a/cmd/importer/parser.go b/cmd/importer/parser.go index f97563211ce0e..b953403698d88 100644 --- a/cmd/importer/parser.go +++ b/cmd/importer/parser.go @@ -18,10 +18,10 @@ import ( "strconv" "strings" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/ddl" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/parser" _ "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" diff --git a/cmd/importer/stats.go b/cmd/importer/stats.go index e9917cd1872c6..5ef2a543805e3 100644 --- a/cmd/importer/stats.go +++ b/cmd/importer/stats.go @@ -19,7 +19,7 @@ import ( "math/rand" "time" - "github.com/pingcap/tidb/model" + "github.com/pingcap/parser/model" stats "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/ddl/callback.go b/ddl/callback.go index 0b290df42aead..340f0d2726165 100644 --- a/ddl/callback.go +++ b/ddl/callback.go @@ -14,8 +14,8 @@ package ddl import ( + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "golang.org/x/net/context" ) diff --git a/ddl/callback_test.go b/ddl/callback_test.go index 57b23d96c9e5e..4b60b4d4f9afd 100644 --- a/ddl/callback_test.go +++ b/ddl/callback_test.go @@ -15,8 +15,8 @@ package ddl import ( . "github.com/pingcap/check" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" log "github.com/sirupsen/logrus" "golang.org/x/net/context" diff --git a/ddl/column.go b/ddl/column.go index 35889a528fe84..e28ff4b18bc12 100644 --- a/ddl/column.go +++ b/ddl/column.go @@ -16,12 +16,12 @@ package ddl import ( "fmt" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/util/sqlexec" "github.com/pkg/errors" diff --git a/ddl/column_change_test.go b/ddl/column_change_test.go index 9ea837ae0a5b1..6655067a3f9c8 100644 --- a/ddl/column_change_test.go +++ b/ddl/column_change_test.go @@ -19,11 +19,11 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" diff --git a/ddl/column_test.go b/ddl/column_test.go index 4eea2c9b862d0..1859f1a696d73 100644 --- a/ddl/column_test.go +++ b/ddl/column_test.go @@ -18,16 +18,16 @@ import ( "sync" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/testleak" "github.com/pkg/errors" diff --git a/ddl/db_change_test.go b/ddl/db_change_test.go index bac31f693cd78..ce9d7d3c053a2 100644 --- a/ddl/db_change_test.go +++ b/ddl/db_change_test.go @@ -21,18 +21,18 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/store/mockstore" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util/admin" "github.com/pingcap/tidb/util/sqlexec" "github.com/pingcap/tidb/util/testkit" diff --git a/ddl/db_integration_test.go b/ddl/db_integration_test.go index 77f03ba8ad119..2698a82b5256c 100644 --- a/ddl/db_integration_test.go +++ b/ddl/db_integration_test.go @@ -17,6 +17,7 @@ import ( "fmt" . "github.com/pingcap/check" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/infoschema" @@ -25,7 +26,6 @@ import ( "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/store/mockstore" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testkit" diff --git a/ddl/db_test.go b/ddl/db_test.go index 2f415c5457296..274eca7290eba 100644 --- a/ddl/db_test.go +++ b/ddl/db_test.go @@ -24,16 +24,17 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + tmysql "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - tmysql "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/store/mockstore" @@ -41,7 +42,6 @@ import ( "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/admin" "github.com/pingcap/tidb/util/mock" diff --git a/ddl/ddl.go b/ddl/ddl.go index 6114e51950142..434b521b29f29 100644 --- a/ddl/ddl.go +++ b/ddl/ddl.go @@ -24,20 +24,20 @@ import ( "github.com/coreos/etcd/clientv3" "github.com/ngaut/pools" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/owner" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/binloginfo" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" tidbutil "github.com/pingcap/tidb/util" "github.com/pkg/errors" log "github.com/sirupsen/logrus" diff --git a/ddl/ddl_api.go b/ddl/ddl_api.go index 3c6aa44f9c60e..4b022a47076f3 100644 --- a/ddl/ddl_api.go +++ b/ddl/ddl_api.go @@ -24,17 +24,17 @@ import ( "time" "github.com/cznic/mathutil" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pkg/errors" ) diff --git a/ddl/ddl_test.go b/ddl/ddl_test.go index a353102726404..855619a2f6d46 100644 --- a/ddl/ddl_test.go +++ b/ddl/ddl_test.go @@ -20,14 +20,14 @@ import ( "github.com/coreos/etcd/clientv3" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/store/mockstore" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/logutil" diff --git a/ddl/ddl_worker.go b/ddl/ddl_worker.go index d015911a3c80b..4dae0e08f04ce 100644 --- a/ddl/ddl_worker.go +++ b/ddl/ddl_worker.go @@ -20,13 +20,13 @@ import ( "time" "github.com/ngaut/pools" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/binloginfo" - "github.com/pingcap/tidb/terror" "github.com/pkg/errors" log "github.com/sirupsen/logrus" "golang.org/x/net/context" diff --git a/ddl/ddl_worker_test.go b/ddl/ddl_worker_test.go index 8aa62e5b684ba..dbba30142bea0 100644 --- a/ddl/ddl_worker_test.go +++ b/ddl/ddl_worker_test.go @@ -18,11 +18,11 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/admin" diff --git a/ddl/delete_range.go b/ddl/delete_range.go index aa1bf30640ad3..25a4512d6beeb 100644 --- a/ddl/delete_range.go +++ b/ddl/delete_range.go @@ -20,12 +20,12 @@ import ( "math" "sync" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util/sqlexec" "github.com/pkg/errors" log "github.com/sirupsen/logrus" diff --git a/ddl/fail_db_test.go b/ddl/fail_db_test.go index 086f13af894eb..a19529660c9a6 100644 --- a/ddl/fail_db_test.go +++ b/ddl/fail_db_test.go @@ -18,8 +18,8 @@ import ( gofail "github.com/etcd-io/gofail/runtime" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/domain" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/util/testkit" "golang.org/x/net/context" ) diff --git a/ddl/fail_test.go b/ddl/fail_test.go index f89c4a9aae2ff..f182dbe388c5f 100644 --- a/ddl/fail_test.go +++ b/ddl/fail_test.go @@ -16,8 +16,8 @@ package ddl import ( gofail "github.com/etcd-io/gofail/runtime" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/types" "golang.org/x/net/context" ) diff --git a/ddl/foreign_key.go b/ddl/foreign_key.go index e9aa4c0eb43ad..d6c3de7d75c1e 100644 --- a/ddl/foreign_key.go +++ b/ddl/foreign_key.go @@ -14,9 +14,9 @@ package ddl import ( + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" "github.com/pkg/errors" ) diff --git a/ddl/foreign_key_test.go b/ddl/foreign_key_test.go index 7fdde31834477..778143ef8c5ad 100644 --- a/ddl/foreign_key_test.go +++ b/ddl/foreign_key_test.go @@ -18,9 +18,9 @@ import ( "sync" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/util/testleak" diff --git a/ddl/generated_column.go b/ddl/generated_column.go index 899249a9fb658..3120b2d907258 100644 --- a/ddl/generated_column.go +++ b/ddl/generated_column.go @@ -14,7 +14,7 @@ package ddl import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/table" "github.com/pkg/errors" ) diff --git a/ddl/index.go b/ddl/index.go index 48455800f190d..2e92bf619c05e 100644 --- a/ddl/index.go +++ b/ddl/index.go @@ -19,14 +19,14 @@ import ( "sync/atomic" "time" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/store/tikv" diff --git a/ddl/index_change_test.go b/ddl/index_change_test.go index ec7d1ca73b3fa..518b0847471c7 100644 --- a/ddl/index_change_test.go +++ b/ddl/index_change_test.go @@ -15,10 +15,10 @@ package ddl import ( . "github.com/pingcap/check" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" diff --git a/ddl/mock.go b/ddl/mock.go index 3ab786fd0138c..6060eb9bba5bb 100644 --- a/ddl/mock.go +++ b/ddl/mock.go @@ -18,8 +18,8 @@ import ( "time" "github.com/coreos/etcd/clientv3" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/sessionctx" "github.com/pkg/errors" "golang.org/x/net/context" diff --git a/ddl/partition.go b/ddl/partition.go index 16933b9bf6351..b2fdb760a4c44 100644 --- a/ddl/partition.go +++ b/ddl/partition.go @@ -19,12 +19,12 @@ import ( "strconv" "strings" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/opcode" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" diff --git a/ddl/reorg.go b/ddl/reorg.go index 10cf2d85b9064..52b6009d927f2 100644 --- a/ddl/reorg.go +++ b/ddl/reorg.go @@ -18,15 +18,15 @@ import ( "sync/atomic" "time" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/distsql" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/mock" diff --git a/ddl/reorg_test.go b/ddl/reorg_test.go index 84ba4b94bf60c..1bcfe9d21c402 100644 --- a/ddl/reorg_test.go +++ b/ddl/reorg_test.go @@ -17,9 +17,9 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/types" "golang.org/x/net/context" ) diff --git a/ddl/schema.go b/ddl/schema.go index 8e3272c033e1c..0c5cc0e82e21e 100644 --- a/ddl/schema.go +++ b/ddl/schema.go @@ -14,9 +14,9 @@ package ddl import ( + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" "github.com/pkg/errors" ) diff --git a/ddl/schema_test.go b/ddl/schema_test.go index ffe058822e49b..e7fd0941eef77 100644 --- a/ddl/schema_test.go +++ b/ddl/schema_test.go @@ -17,12 +17,12 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testleak" diff --git a/ddl/session_pool.go b/ddl/session_pool.go index 2fa4f39ce6966..7710355ce794b 100644 --- a/ddl/session_pool.go +++ b/ddl/session_pool.go @@ -17,7 +17,7 @@ import ( "sync" "github.com/ngaut/pools" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/util/mock" "github.com/pkg/errors" diff --git a/ddl/stat_test.go b/ddl/stat_test.go index ac19d7984daf9..304be372c5176 100644 --- a/ddl/stat_test.go +++ b/ddl/stat_test.go @@ -17,7 +17,7 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/model" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testleak" "golang.org/x/net/context" diff --git a/ddl/table.go b/ddl/table.go index 45a5a2372193f..16789cd8da0e5 100644 --- a/ddl/table.go +++ b/ddl/table.go @@ -18,12 +18,12 @@ import ( "strconv" "strings" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/tablecodec" "github.com/pkg/errors" diff --git a/ddl/table_split_test.go b/ddl/table_split_test.go index 01a4bcd6def75..697f18c16aa64 100644 --- a/ddl/table_split_test.go +++ b/ddl/table_split_test.go @@ -18,8 +18,8 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/ddl" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/store/tikv" diff --git a/ddl/table_test.go b/ddl/table_test.go index 7fef7c9bd50b5..ad39b3abd9f41 100644 --- a/ddl/table_test.go +++ b/ddl/table_test.go @@ -17,11 +17,11 @@ import ( "fmt" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" diff --git a/ddl/util/event.go b/ddl/util/event.go index d0575a76bccd8..a689c445c13c4 100644 --- a/ddl/util/event.go +++ b/ddl/util/event.go @@ -16,7 +16,7 @@ package util import ( "fmt" - "github.com/pingcap/tidb/model" + "github.com/pingcap/parser/model" ) // Event is an event that a ddl operation happened. diff --git a/ddl/util/util.go b/ddl/util/util.go index f2b7c63a4ff14..c9a3c42a65633 100644 --- a/ddl/util/util.go +++ b/ddl/util/util.go @@ -17,9 +17,9 @@ import ( "encoding/hex" "fmt" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/sqlexec" "github.com/pkg/errors" diff --git a/distsql/distsql_test.go b/distsql/distsql_test.go index b06dd9afa6c56..8d20dbd89f755 100644 --- a/distsql/distsql_test.go +++ b/distsql/distsql_test.go @@ -19,13 +19,13 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/execdetails" diff --git a/distsql/request_builder.go b/distsql/request_builder.go index 5dddc206171d3..6dd12c6f20c22 100644 --- a/distsql/request_builder.go +++ b/distsql/request_builder.go @@ -16,8 +16,8 @@ package distsql import ( "math" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/statistics" diff --git a/distsql/select_result.go b/distsql/select_result.go index aca9ee0e9f561..9558f9e680ccc 100644 --- a/distsql/select_result.go +++ b/distsql/select_result.go @@ -16,11 +16,11 @@ package distsql import ( "time" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/statistics" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" diff --git a/distsql/stream.go b/distsql/stream.go index f5bd33583ccd6..0f651a53dc721 100644 --- a/distsql/stream.go +++ b/distsql/stream.go @@ -14,11 +14,11 @@ package distsql import ( + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/statistics" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" diff --git a/domain/domain.go b/domain/domain.go index 8061751fc852b..6769e944a3137 100644 --- a/domain/domain.go +++ b/domain/domain.go @@ -25,20 +25,20 @@ import ( "github.com/grpc-ecosystem/go-grpc-prometheus" "github.com/ngaut/pools" "github.com/ngaut/sync2" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/owner" "github.com/pingcap/tidb/privilege/privileges" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/statistics" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util" "github.com/pkg/errors" log "github.com/sirupsen/logrus" diff --git a/domain/domain_test.go b/domain/domain_test.go index 63f90deda925e..c516632a99487 100644 --- a/domain/domain_test.go +++ b/domain/domain_test.go @@ -19,8 +19,8 @@ import ( "github.com/ngaut/pools" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testleak" diff --git a/domain/global_vars_cache.go b/domain/global_vars_cache.go index a246f5af20f6c..1b316b4195ad7 100644 --- a/domain/global_vars_cache.go +++ b/domain/global_vars_cache.go @@ -17,7 +17,7 @@ import ( "sync" "time" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/util/chunk" ) diff --git a/domain/info.go b/domain/info.go index 7d11e63436957..226b395eed0c4 100644 --- a/domain/info.go +++ b/domain/info.go @@ -20,9 +20,9 @@ import ( "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/clientv3/concurrency" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/ddl" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/owner" "github.com/pingcap/tidb/util/hack" "github.com/pingcap/tidb/util/printer" diff --git a/domain/schema_checker_test.go b/domain/schema_checker_test.go index b148525d200a2..bad9db98d0dc8 100644 --- a/domain/schema_checker_test.go +++ b/domain/schema_checker_test.go @@ -17,7 +17,7 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/terror" ) func (s *testSuite) TestSchemaCheckerSimple(c *C) { diff --git a/domain/topn_slow_query.go b/domain/topn_slow_query.go index f8ae69c0be67e..0bf6721454d6c 100644 --- a/domain/topn_slow_query.go +++ b/domain/topn_slow_query.go @@ -19,7 +19,7 @@ import ( "sync" "time" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/util/execdetails" ) diff --git a/executor/adapter.go b/executor/adapter.go index 3c1593769b7b5..44f6d5eaed6b7 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -20,20 +20,20 @@ import ( "sync/atomic" "time" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/planner" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/sqlexec" diff --git a/executor/admin.go b/executor/admin.go index 1fe645ae15de3..d7dd92d6cc36c 100644 --- a/executor/admin.go +++ b/executor/admin.go @@ -16,17 +16,17 @@ package executor import ( "math" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/distsql" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/ranger" diff --git a/executor/admin_test.go b/executor/admin_test.go index 0a1282c582388..e80d9f84d0c5a 100644 --- a/executor/admin_test.go +++ b/executor/admin_test.go @@ -17,8 +17,8 @@ import ( "fmt" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/executor" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" diff --git a/executor/aggfuncs/aggfunc_test.go b/executor/aggfuncs/aggfunc_test.go index ac4c1df5f6b22..2f40e218431b4 100644 --- a/executor/aggfuncs/aggfunc_test.go +++ b/executor/aggfuncs/aggfunc_test.go @@ -18,7 +18,7 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/parser" + "github.com/pingcap/parser" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testleak" diff --git a/executor/aggfuncs/builder.go b/executor/aggfuncs/builder.go index ec6f4c4d76545..097c90affa782 100644 --- a/executor/aggfuncs/builder.go +++ b/executor/aggfuncs/builder.go @@ -17,10 +17,10 @@ import ( "fmt" "strconv" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/types" diff --git a/executor/aggfuncs/func_avg.go b/executor/aggfuncs/func_avg.go index f917c60e1d044..b31b0f96ed69a 100644 --- a/executor/aggfuncs/func_avg.go +++ b/executor/aggfuncs/func_avg.go @@ -15,7 +15,7 @@ package aggfuncs import ( "github.com/cznic/mathutil" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/executor/aggfuncs/func_avg_test.go b/executor/aggfuncs/func_avg_test.go index b6f687fe6a058..d51a2ff54c289 100644 --- a/executor/aggfuncs/func_avg_test.go +++ b/executor/aggfuncs/func_avg_test.go @@ -15,11 +15,11 @@ package aggfuncs_test import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/executor/aggfuncs" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" ) diff --git a/executor/aggfuncs/func_count_test.go b/executor/aggfuncs/func_count_test.go index 78af72476e1f6..38a7c91bf8097 100644 --- a/executor/aggfuncs/func_count_test.go +++ b/executor/aggfuncs/func_count_test.go @@ -15,11 +15,11 @@ package aggfuncs_test import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/executor/aggfuncs" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" ) diff --git a/executor/aggfuncs/func_max_min_test.go b/executor/aggfuncs/func_max_min_test.go index 04be5a4b4b923..1f9183c3497cf 100644 --- a/executor/aggfuncs/func_max_min_test.go +++ b/executor/aggfuncs/func_max_min_test.go @@ -15,11 +15,11 @@ package aggfuncs_test import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/executor/aggfuncs" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" ) diff --git a/executor/aggfuncs/func_sum_test.go b/executor/aggfuncs/func_sum_test.go index 604c605159439..c6181a11529be 100644 --- a/executor/aggfuncs/func_sum_test.go +++ b/executor/aggfuncs/func_sum_test.go @@ -15,11 +15,11 @@ package aggfuncs_test import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/executor/aggfuncs" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" ) diff --git a/executor/aggregate.go b/executor/aggregate.go index 6c28ef688b90b..a72ad4f0d37a2 100644 --- a/executor/aggregate.go +++ b/executor/aggregate.go @@ -17,9 +17,9 @@ import ( "sync" "time" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/executor/aggfuncs" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" diff --git a/executor/aggregate_test.go b/executor/aggregate_test.go index caf1e085a53ea..1e049fb9d5673 100644 --- a/executor/aggregate_test.go +++ b/executor/aggregate_test.go @@ -15,8 +15,8 @@ package executor_test import ( . "github.com/pingcap/check" + "github.com/pingcap/parser/terror" plannercore "github.com/pingcap/tidb/planner/core" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util/testkit" ) diff --git a/executor/analyze.go b/executor/analyze.go index 12e49ff22649d..85fa0987cfe88 100644 --- a/executor/analyze.go +++ b/executor/analyze.go @@ -17,11 +17,11 @@ import ( "runtime" "strconv" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/distsql" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/statistics" diff --git a/executor/analyze_test.go b/executor/analyze_test.go index 7ced9fa7a494e..c5ba232fb07de 100644 --- a/executor/analyze_test.go +++ b/executor/analyze_test.go @@ -18,9 +18,9 @@ import ( "strings" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/executor" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/util/testkit" diff --git a/executor/batch_checker.go b/executor/batch_checker.go index 6f3ae9254ff2b..558e25884a55e 100644 --- a/executor/batch_checker.go +++ b/executor/batch_checker.go @@ -14,8 +14,8 @@ package executor import ( + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" diff --git a/executor/builder.go b/executor/builder.go index de3a0b3c60256..f2d6dda2f1113 100644 --- a/executor/builder.go +++ b/executor/builder.go @@ -24,7 +24,9 @@ import ( "github.com/cznic/mathutil" "github.com/cznic/sortutil" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/distsql" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/executor/aggfuncs" @@ -33,8 +35,6 @@ import ( "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" diff --git a/executor/checksum.go b/executor/checksum.go index 04c5d18dc2dcd..e9d6832096339 100644 --- a/executor/checksum.go +++ b/executor/checksum.go @@ -16,9 +16,9 @@ package executor import ( "strconv" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/distsql" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/util/chunk" diff --git a/executor/compiler.go b/executor/compiler.go index 3db47c7070904..778a555e74194 100644 --- a/executor/compiler.go +++ b/executor/compiler.go @@ -17,7 +17,7 @@ import ( "fmt" "github.com/opentracing/opentracing-go" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/metrics" diff --git a/executor/ddl.go b/executor/ddl.go index d972c69a7b18e..dd399aa28d626 100644 --- a/executor/ddl.go +++ b/executor/ddl.go @@ -17,12 +17,12 @@ import ( "fmt" "strings" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/executor/ddl_test.go b/executor/ddl_test.go index b91a57b4b1559..46b09a0aa3313 100644 --- a/executor/ddl_test.go +++ b/executor/ddl_test.go @@ -20,13 +20,13 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/domain" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/testkit" diff --git a/executor/delete.go b/executor/delete.go index c51911e2db87e..991e2f2817ed5 100644 --- a/executor/delete.go +++ b/executor/delete.go @@ -14,7 +14,7 @@ package executor import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" diff --git a/executor/distsql.go b/executor/distsql.go index 8f7beae3cc28e..89caee248ecf1 100644 --- a/executor/distsql.go +++ b/executor/distsql.go @@ -22,17 +22,17 @@ import ( "time" "unsafe" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/distsql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/memory" diff --git a/executor/distsql_test.go b/executor/distsql_test.go index 070c10233e1be..c4b29c80071ca 100644 --- a/executor/distsql_test.go +++ b/executor/distsql_test.go @@ -22,9 +22,9 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/executor" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/store/tikv" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/util/testkit" diff --git a/executor/errors.go b/executor/errors.go index ec8482ac56a44..ff7ae49e4de39 100644 --- a/executor/errors.go +++ b/executor/errors.go @@ -14,8 +14,8 @@ package executor import ( - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" ) // Error codes that are not mapping to mysql error codes. diff --git a/executor/executor.go b/executor/executor.go index e792ea2127b14..83381ed6b5046 100644 --- a/executor/executor.go +++ b/executor/executor.go @@ -21,21 +21,21 @@ import ( "time" "github.com/cznic/mathutil" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/admin" "github.com/pingcap/tidb/util/chunk" diff --git a/executor/executor_pkg_test.go b/executor/executor_pkg_test.go index bd79e219420b0..b699cee269ca3 100644 --- a/executor/executor_pkg_test.go +++ b/executor/executor_pkg_test.go @@ -17,14 +17,14 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/ranger" diff --git a/executor/executor_test.go b/executor/executor_test.go index 7c5841cc3bf80..844d68c61f4b0 100644 --- a/executor/executor_test.go +++ b/executor/executor_test.go @@ -29,14 +29,15 @@ import ( "github.com/golang/protobuf/proto" . "github.com/pingcap/check" pb "github.com/pingcap/kvproto/pkg/kvrpcpb" + "github.com/pingcap/parser" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/planner" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" @@ -51,7 +52,6 @@ import ( "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/admin" "github.com/pingcap/tidb/util/codec" diff --git a/executor/grant.go b/executor/grant.go index 8bff64ddba034..2886e1de36791 100644 --- a/executor/grant.go +++ b/executor/grant.go @@ -17,11 +17,11 @@ import ( "fmt" "strings" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/util/chunk" diff --git a/executor/grant_test.go b/executor/grant_test.go index db198f94f454e..bb3d33262ebea 100644 --- a/executor/grant_test.go +++ b/executor/grant_test.go @@ -18,7 +18,7 @@ import ( "strings" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/util/testkit" ) diff --git a/executor/index_lookup_join.go b/executor/index_lookup_join.go index bc05f56d971fd..7fcb4bb08bac5 100644 --- a/executor/index_lookup_join.go +++ b/executor/index_lookup_join.go @@ -21,11 +21,11 @@ import ( "time" "unsafe" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" diff --git a/executor/insert.go b/executor/insert.go index a62a2524c8003..43a4dbded119b 100644 --- a/executor/insert.go +++ b/executor/insert.go @@ -14,9 +14,9 @@ package executor import ( + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" diff --git a/executor/insert_common.go b/executor/insert_common.go index a76b2f5272e96..59655a57af6b1 100644 --- a/executor/insert_common.go +++ b/executor/insert_common.go @@ -16,11 +16,11 @@ package executor import ( "fmt" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/executor/insert_test.go b/executor/insert_test.go index 38bd7b2ad1a1b..ef379bd4868c2 100644 --- a/executor/insert_test.go +++ b/executor/insert_test.go @@ -15,8 +15,8 @@ package executor_test import ( . "github.com/pingcap/check" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util/testkit" ) diff --git a/executor/join.go b/executor/join.go index 90371c38cee65..c62d73ab65e95 100644 --- a/executor/join.go +++ b/executor/join.go @@ -20,9 +20,9 @@ import ( "time" "unsafe" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/expression" plannercore "github.com/pingcap/tidb/planner/core" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" diff --git a/executor/load_data.go b/executor/load_data.go index 83171cbbd8589..6ab6c7aa5050c 100644 --- a/executor/load_data.go +++ b/executor/load_data.go @@ -18,7 +18,7 @@ import ( "fmt" "strings" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" diff --git a/executor/metrics_test.go b/executor/metrics_test.go index 13a17a619701e..8bc0207c21088 100644 --- a/executor/metrics_test.go +++ b/executor/metrics_test.go @@ -17,8 +17,8 @@ import ( "fmt" . "github.com/pingcap/check" + "github.com/pingcap/parser" "github.com/pingcap/tidb/executor" - "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/planner" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/sessionctx" diff --git a/executor/pkg_test.go b/executor/pkg_test.go index 3115a634b7ee6..7a6a6cbd6b02d 100644 --- a/executor/pkg_test.go +++ b/executor/pkg_test.go @@ -4,9 +4,9 @@ import ( "fmt" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/mysql" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/executor/point_get.go b/executor/point_get.go index 3d41181675bfc..e74c29e8aafbb 100644 --- a/executor/point_get.go +++ b/executor/point_get.go @@ -14,10 +14,10 @@ package executor import ( + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" diff --git a/executor/prepared.go b/executor/prepared.go index d857979c4b69a..2c3f97361b1f6 100644 --- a/executor/prepared.go +++ b/executor/prepared.go @@ -17,10 +17,10 @@ import ( "math" "sort" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/planner" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/sessionctx" diff --git a/executor/prepared_test.go b/executor/prepared_test.go index 8a255a3b2d6c9..8ee067bb15424 100644 --- a/executor/prepared_test.go +++ b/executor/prepared_test.go @@ -18,9 +18,9 @@ import ( "strings" . "github.com/pingcap/check" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/executor" plannercore "github.com/pingcap/tidb/planner/core" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util/testkit" "github.com/pkg/errors" "golang.org/x/net/context" diff --git a/executor/revoke.go b/executor/revoke.go index 3f2edb6c7249b..35992f885615f 100644 --- a/executor/revoke.go +++ b/executor/revoke.go @@ -16,10 +16,10 @@ package executor import ( "fmt" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/util/chunk" diff --git a/executor/revoke_test.go b/executor/revoke_test.go index cc3025f7a55e5..de194356b0a95 100644 --- a/executor/revoke_test.go +++ b/executor/revoke_test.go @@ -18,7 +18,7 @@ import ( "strings" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/util/testkit" ) diff --git a/executor/set.go b/executor/set.go index 76562a6a4f8f9..f7f7853c8717c 100644 --- a/executor/set.go +++ b/executor/set.go @@ -18,14 +18,14 @@ import ( "strings" "time" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/sqlexec" "github.com/pkg/errors" diff --git a/executor/set_test.go b/executor/set_test.go index 1bba2c11f2f67..529bd74a5d178 100644 --- a/executor/set_test.go +++ b/executor/set_test.go @@ -15,9 +15,9 @@ package executor_test import ( . "github.com/pingcap/check" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util/testkit" "github.com/pingcap/tidb/util/testutil" "golang.org/x/net/context" diff --git a/executor/show.go b/executor/show.go index e94e8b4bc19c4..a959a30aa9457 100644 --- a/executor/show.go +++ b/executor/show.go @@ -22,19 +22,19 @@ import ( "time" "github.com/cznic/mathutil" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/privilege" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" - "github.com/pingcap/tidb/util/auth" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/format" "github.com/pkg/errors" diff --git a/executor/show_stats.go b/executor/show_stats.go index 6c8c4f0ddc258..a6e77cba4de7a 100644 --- a/executor/show_stats.go +++ b/executor/show_stats.go @@ -16,8 +16,8 @@ package executor import ( "time" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/domain" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/store/tikv/oracle" "github.com/pingcap/tidb/types" diff --git a/executor/show_test.go b/executor/show_test.go index 94a717ff46cbd..9c09d7dc81598 100644 --- a/executor/show_test.go +++ b/executor/show_test.go @@ -19,15 +19,15 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/testkit" "github.com/pingcap/tidb/util/testutil" "github.com/pkg/errors" diff --git a/executor/simple.go b/executor/simple.go index e05f20012260d..849c874a3d40b 100644 --- a/executor/simple.go +++ b/executor/simple.go @@ -17,16 +17,16 @@ import ( "fmt" "strings" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/sqlexec" "github.com/pkg/errors" diff --git a/executor/simple_test.go b/executor/simple_test.go index c0a14e4e13c52..0564f01bc6f87 100644 --- a/executor/simple_test.go +++ b/executor/simple_test.go @@ -15,14 +15,14 @@ package executor_test import ( . "github.com/pingcap/check" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/executor" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/testkit" "golang.org/x/net/context" ) diff --git a/executor/statement_context_test.go b/executor/statement_context_test.go index 5808488fed575..df7d86d4115a8 100644 --- a/executor/statement_context_test.go +++ b/executor/statement_context_test.go @@ -18,8 +18,8 @@ import ( "unicode/utf8" . "github.com/pingcap/check" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util/testkit" ) diff --git a/executor/table_reader.go b/executor/table_reader.go index a941e3706bee8..3c81d402d141c 100644 --- a/executor/table_reader.go +++ b/executor/table_reader.go @@ -16,8 +16,8 @@ package executor import ( "time" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/distsql" - "github.com/pingcap/tidb/model" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/table" diff --git a/executor/trace.go b/executor/trace.go index fd6db06e6346d..6112ea85b4d50 100644 --- a/executor/trace.go +++ b/executor/trace.go @@ -18,7 +18,7 @@ import ( "github.com/opentracing/basictracer-go" opentracing "github.com/opentracing/opentracing-go" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/planner" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/util/chunk" diff --git a/executor/union_scan.go b/executor/union_scan.go index 1ac6689c1b58d..aad9bb157fef4 100644 --- a/executor/union_scan.go +++ b/executor/union_scan.go @@ -17,8 +17,8 @@ import ( "sort" "time" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/executor/update.go b/executor/update.go index dc04ef5f505f3..9065cdbed6ec5 100644 --- a/executor/update.go +++ b/executor/update.go @@ -14,9 +14,9 @@ package executor import ( + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/executor/write.go b/executor/write.go index eac952453da87..7f5b8709720d9 100644 --- a/executor/write.go +++ b/executor/write.go @@ -16,9 +16,9 @@ package executor import ( "strings" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" diff --git a/executor/write_test.go b/executor/write_test.go index 4b5ab134f6e51..59f6667946615 100644 --- a/executor/write_test.go +++ b/executor/write_test.go @@ -19,9 +19,9 @@ import ( "sync/atomic" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/store/mockstore" diff --git a/expression/aggregation/agg_to_pb.go b/expression/aggregation/agg_to_pb.go index 31a743d59621a..59d09db237701 100644 --- a/expression/aggregation/agg_to_pb.go +++ b/expression/aggregation/agg_to_pb.go @@ -14,7 +14,7 @@ package aggregation import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/sessionctx/stmtctx" diff --git a/expression/aggregation/agg_to_pb_test.go b/expression/aggregation/agg_to_pb_test.go index 2a17b120e5394..af8ca6d26f8a2 100644 --- a/expression/aggregation/agg_to_pb_test.go +++ b/expression/aggregation/agg_to_pb_test.go @@ -18,10 +18,10 @@ import ( "testing" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" diff --git a/expression/aggregation/aggregation.go b/expression/aggregation/aggregation.go index 9d2ac730767e3..62eba44691139 100644 --- a/expression/aggregation/aggregation.go +++ b/expression/aggregation/aggregation.go @@ -16,14 +16,14 @@ package aggregation import ( "bytes" "fmt" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tipb/go-tipb" "github.com/pkg/errors" diff --git a/expression/aggregation/aggregation_test.go b/expression/aggregation/aggregation_test.go index 9040f06aeccc9..0ebbe8a330eef 100644 --- a/expression/aggregation/aggregation_test.go +++ b/expression/aggregation/aggregation_test.go @@ -17,9 +17,9 @@ import ( "math" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/types" diff --git a/expression/aggregation/avg.go b/expression/aggregation/avg.go index b934e6be2eb6a..04d70fa985d04 100644 --- a/expression/aggregation/avg.go +++ b/expression/aggregation/avg.go @@ -15,9 +15,9 @@ package aggregation import ( "github.com/cznic/mathutil" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pkg/errors" diff --git a/expression/aggregation/bench_test.go b/expression/aggregation/bench_test.go index 5b7c2bcee2e4f..e49deebe00da3 100644 --- a/expression/aggregation/bench_test.go +++ b/expression/aggregation/bench_test.go @@ -16,9 +16,9 @@ package aggregation import ( "testing" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" ) diff --git a/expression/aggregation/descriptor.go b/expression/aggregation/descriptor.go index 7c47ec85c0d64..e631c9cd6629d 100644 --- a/expression/aggregation/descriptor.go +++ b/expression/aggregation/descriptor.go @@ -21,14 +21,14 @@ import ( "strings" "github.com/cznic/mathutil" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" ) // AggFuncDesc describes an aggregation function signature, only used in planner. diff --git a/expression/bench_test.go b/expression/bench_test.go index 1704afa516d3c..bc4a58ed81b45 100644 --- a/expression/bench_test.go +++ b/expression/bench_test.go @@ -20,12 +20,12 @@ import ( "testing" "time" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/mock" ) diff --git a/expression/builtin.go b/expression/builtin.go index ba165008278f9..51379440e7e28 100644 --- a/expression/builtin.go +++ b/expression/builtin.go @@ -18,13 +18,13 @@ package expression import ( - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/opcode" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tipb/go-tipb" ) diff --git a/expression/builtin_arithmetic.go b/expression/builtin_arithmetic.go index 85c620264d25d..1f7369699519a 100644 --- a/expression/builtin_arithmetic.go +++ b/expression/builtin_arithmetic.go @@ -18,9 +18,9 @@ import ( "math" "github.com/cznic/mathutil" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tipb/go-tipb" diff --git a/expression/builtin_arithmetic_test.go b/expression/builtin_arithmetic_test.go index 68fe74333ef5a..61a47bbc5d334 100644 --- a/expression/builtin_arithmetic_test.go +++ b/expression/builtin_arithmetic_test.go @@ -17,8 +17,8 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/testleak" diff --git a/expression/builtin_cast.go b/expression/builtin_cast.go index f30437dc0c39a..df3092c0997b4 100644 --- a/expression/builtin_cast.go +++ b/expression/builtin_cast.go @@ -26,14 +26,14 @@ import ( "strconv" "strings" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tipb/go-tipb" "github.com/pkg/errors" diff --git a/expression/builtin_cast_test.go b/expression/builtin_cast_test.go index ab92b03021295..c754d5a5a23e0 100644 --- a/expression/builtin_cast_test.go +++ b/expression/builtin_cast_test.go @@ -20,11 +20,11 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" ) diff --git a/expression/builtin_compare.go b/expression/builtin_compare.go index c83f861b546b7..0744720694378 100644 --- a/expression/builtin_compare.go +++ b/expression/builtin_compare.go @@ -16,11 +16,11 @@ package expression import ( "math" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/opcode" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/chunk" diff --git a/expression/builtin_compare_test.go b/expression/builtin_compare_test.go index 4ce6c3386e750..24cd01ea541dd 100644 --- a/expression/builtin_compare_test.go +++ b/expression/builtin_compare_test.go @@ -17,8 +17,8 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/chunk" diff --git a/expression/builtin_control.go b/expression/builtin_control.go index 9900a22bed4a8..fc8013f6096cc 100644 --- a/expression/builtin_control.go +++ b/expression/builtin_control.go @@ -15,11 +15,11 @@ package expression import ( "github.com/cznic/mathutil" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tipb/go-tipb" "github.com/pkg/errors" diff --git a/expression/builtin_control_test.go b/expression/builtin_control_test.go index de589e1a0b4fc..37101ec326f88 100644 --- a/expression/builtin_control_test.go +++ b/expression/builtin_control_test.go @@ -18,7 +18,7 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/testleak" diff --git a/expression/builtin_encryption.go b/expression/builtin_encryption.go index 94eaef8a84574..7772cd344a8a2 100644 --- a/expression/builtin_encryption.go +++ b/expression/builtin_encryption.go @@ -28,11 +28,11 @@ import ( "io" "strings" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/encrypt" "github.com/pkg/errors" diff --git a/expression/builtin_encryption_test.go b/expression/builtin_encryption_test.go index 99f29ea972933..7a1b09254f6f2 100644 --- a/expression/builtin_encryption_test.go +++ b/expression/builtin_encryption_test.go @@ -18,9 +18,9 @@ import ( "strings" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/hack" diff --git a/expression/builtin_info.go b/expression/builtin_info.go index 4bb90b8e9901b..62b04255af9c9 100644 --- a/expression/builtin_info.go +++ b/expression/builtin_info.go @@ -18,7 +18,7 @@ package expression import ( - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/expression/builtin_info_test.go b/expression/builtin_info_test.go index c4bae7f784ca0..ba9e53c2dc2a4 100644 --- a/expression/builtin_info_test.go +++ b/expression/builtin_info_test.go @@ -17,11 +17,11 @@ import ( "math" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/auth" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/printer" diff --git a/expression/builtin_json.go b/expression/builtin_json.go index 5ca057e9f99af..f922c6cac8d90 100644 --- a/expression/builtin_json.go +++ b/expression/builtin_json.go @@ -14,8 +14,8 @@ package expression import ( - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" diff --git a/expression/builtin_json_test.go b/expression/builtin_json_test.go index 6dc1bf1521197..1c3b5ed1d7e0b 100644 --- a/expression/builtin_json_test.go +++ b/expression/builtin_json_test.go @@ -15,7 +15,7 @@ package expression import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/chunk" diff --git a/expression/builtin_math.go b/expression/builtin_math.go index 04c59608d3bbd..abdc8ec70fe5b 100644 --- a/expression/builtin_math.go +++ b/expression/builtin_math.go @@ -27,7 +27,7 @@ import ( "time" "github.com/cznic/mathutil" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/expression/builtin_math_test.go b/expression/builtin_math_test.go index a0c291603a5c3..ce5a623838148 100644 --- a/expression/builtin_math_test.go +++ b/expression/builtin_math_test.go @@ -20,10 +20,10 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/testleak" "github.com/pingcap/tidb/util/testutil" diff --git a/expression/builtin_miscellaneous.go b/expression/builtin_miscellaneous.go index b249551247340..c046861911395 100644 --- a/expression/builtin_miscellaneous.go +++ b/expression/builtin_miscellaneous.go @@ -21,11 +21,11 @@ import ( "strings" "time" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pkg/errors" "github.com/twinj/uuid" diff --git a/expression/builtin_miscellaneous_test.go b/expression/builtin_miscellaneous_test.go index 213ed1e8d1cc7..79143dad631a4 100644 --- a/expression/builtin_miscellaneous_test.go +++ b/expression/builtin_miscellaneous_test.go @@ -17,7 +17,7 @@ import ( "strings" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/testleak" diff --git a/expression/builtin_op.go b/expression/builtin_op.go index 1c4109da9c1b1..e98d83af53835 100644 --- a/expression/builtin_op.go +++ b/expression/builtin_op.go @@ -17,8 +17,8 @@ import ( "fmt" "math" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/opcode" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/expression/builtin_op_test.go b/expression/builtin_op_test.go index 5e726be8745c7..f57f17aab557f 100644 --- a/expression/builtin_op_test.go +++ b/expression/builtin_op_test.go @@ -17,7 +17,7 @@ import ( "math" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/testleak" diff --git a/expression/builtin_other.go b/expression/builtin_other.go index 8afc8e9c0cce6..7cfc36e46541a 100644 --- a/expression/builtin_other.go +++ b/expression/builtin_other.go @@ -16,7 +16,7 @@ package expression import ( "strings" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" diff --git a/expression/builtin_other_test.go b/expression/builtin_other_test.go index b0b3494cbed92..0d4a8dee9499f 100644 --- a/expression/builtin_other_test.go +++ b/expression/builtin_other_test.go @@ -19,8 +19,8 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" diff --git a/expression/builtin_string.go b/expression/builtin_string.go index fd429d893a354..ac1dc3f2a8b53 100644 --- a/expression/builtin_string.go +++ b/expression/builtin_string.go @@ -27,12 +27,12 @@ import ( "strings" "unicode/utf8" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/hack" "github.com/pkg/errors" diff --git a/expression/builtin_string_test.go b/expression/builtin_string_test.go index c90068ae365fe..944b763bb8121 100644 --- a/expression/builtin_string_test.go +++ b/expression/builtin_string_test.go @@ -20,12 +20,12 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testleak" diff --git a/expression/builtin_test.go b/expression/builtin_test.go index b12f49ada982a..2be7dccf751cf 100644 --- a/expression/builtin_test.go +++ b/expression/builtin_test.go @@ -17,12 +17,12 @@ import ( "reflect" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/testleak" "github.com/pkg/errors" diff --git a/expression/builtin_time.go b/expression/builtin_time.go index dd04e9c294b05..d171e058896e8 100644 --- a/expression/builtin_time.go +++ b/expression/builtin_time.go @@ -26,10 +26,10 @@ import ( "time" "github.com/cznic/mathutil" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tipb/go-tipb" diff --git a/expression/builtin_time_test.go b/expression/builtin_time_test.go index f58df38ac6497..b5361b4bd7a17 100644 --- a/expression/builtin_time_test.go +++ b/expression/builtin_time_test.go @@ -20,13 +20,13 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testleak" diff --git a/expression/chunk_executor.go b/expression/chunk_executor.go index 857211d65a3e1..76efd21031af0 100644 --- a/expression/chunk_executor.go +++ b/expression/chunk_executor.go @@ -16,8 +16,8 @@ package expression import ( "strconv" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/expression/column.go b/expression/column.go index 2c47c38b451c3..5306565373996 100644 --- a/expression/column.go +++ b/expression/column.go @@ -17,8 +17,8 @@ import ( "fmt" "strings" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" diff --git a/expression/column_test.go b/expression/column_test.go index 62a180aab604a..8f11509783055 100644 --- a/expression/column_test.go +++ b/expression/column_test.go @@ -15,8 +15,8 @@ package expression import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/testleak" diff --git a/expression/constant.go b/expression/constant.go index a7a83ebe9b2cb..3c6a95948f446 100644 --- a/expression/constant.go +++ b/expression/constant.go @@ -16,10 +16,10 @@ package expression import ( "fmt" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/chunk" diff --git a/expression/constant_fold.go b/expression/constant_fold.go index 0f7e85fa18ba9..738def5d041bb 100644 --- a/expression/constant_fold.go +++ b/expression/constant_fold.go @@ -14,7 +14,7 @@ package expression import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/util/chunk" log "github.com/sirupsen/logrus" ) diff --git a/expression/constant_propagation.go b/expression/constant_propagation.go index 11f9bbe9b8055..aee7139db2080 100644 --- a/expression/constant_propagation.go +++ b/expression/constant_propagation.go @@ -14,10 +14,10 @@ package expression import ( - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/disjointset" diff --git a/expression/constant_test.go b/expression/constant_test.go index bda66eb8b3f46..e864c6e3a4fbb 100644 --- a/expression/constant_test.go +++ b/expression/constant_test.go @@ -19,9 +19,9 @@ import ( "strings" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testleak" diff --git a/expression/distsql_builtin.go b/expression/distsql_builtin.go index c2df220d869bf..7d90ff1db72af 100644 --- a/expression/distsql_builtin.go +++ b/expression/distsql_builtin.go @@ -17,8 +17,8 @@ import ( "fmt" "time" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" diff --git a/expression/distsql_builtin_test.go b/expression/distsql_builtin_test.go index 2df78ca40fe9b..25162e2edcdf2 100644 --- a/expression/distsql_builtin_test.go +++ b/expression/distsql_builtin_test.go @@ -17,7 +17,7 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/expression/errors.go b/expression/errors.go index 0de8f48eb3d05..1925b0b025989 100644 --- a/expression/errors.go +++ b/expression/errors.go @@ -14,9 +14,9 @@ package expression import ( - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" ) diff --git a/expression/evaluator_test.go b/expression/evaluator_test.go index 95999a46b6615..b938d5eb6b88f 100644 --- a/expression/evaluator_test.go +++ b/expression/evaluator_test.go @@ -18,13 +18,13 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testleak" diff --git a/expression/expr_to_pb.go b/expression/expr_to_pb.go index 6dee4893ba66c..1e5384c60de6a 100644 --- a/expression/expr_to_pb.go +++ b/expression/expr_to_pb.go @@ -16,13 +16,13 @@ package expression import ( "time" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tipb/go-tipb" diff --git a/expression/expr_to_pb_test.go b/expression/expr_to_pb_test.go index a4d96e571411d..edd06d9b3dcd3 100644 --- a/expression/expr_to_pb_test.go +++ b/expression/expr_to_pb_test.go @@ -17,11 +17,11 @@ import ( "encoding/json" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/mock" ) diff --git a/expression/expression.go b/expression/expression.go index 072bc5a62f1bf..5d6fa3a276723 100644 --- a/expression/expression.go +++ b/expression/expression.go @@ -17,12 +17,12 @@ import ( goJSON "encoding/json" "fmt" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/chunk" diff --git a/expression/expression_test.go b/expression/expression_test.go index 0fe3b7da63bd5..d96135617bc7f 100644 --- a/expression/expression_test.go +++ b/expression/expression_test.go @@ -17,9 +17,9 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/testleak" diff --git a/expression/function_traits.go b/expression/function_traits.go index ae3f4b05ea888..8d8913fd354d4 100644 --- a/expression/function_traits.go +++ b/expression/function_traits.go @@ -14,7 +14,7 @@ package expression import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" ) // UnCacheableFunctions stores functions which can not be cached to plan cache. diff --git a/expression/function_traits_test.go b/expression/function_traits_test.go index 13982d9e85907..11a21da4beb65 100644 --- a/expression/function_traits_test.go +++ b/expression/function_traits_test.go @@ -15,7 +15,7 @@ package expression import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/util/testleak" ) diff --git a/expression/helper.go b/expression/helper.go index aa2a04c1a8740..7759d944b756b 100644 --- a/expression/helper.go +++ b/expression/helper.go @@ -18,11 +18,11 @@ import ( "strings" "time" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/parser_driver" "github.com/pkg/errors" diff --git a/expression/helper_test.go b/expression/helper_test.go index f63109a5a28e6..e0acecfdf817b 100644 --- a/expression/helper_test.go +++ b/expression/helper_test.go @@ -18,9 +18,9 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" diff --git a/expression/integration_test.go b/expression/integration_test.go index c81203e1518b3..301ad8955c484 100644 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -21,19 +21,19 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testkit" "github.com/pingcap/tidb/util/testleak" diff --git a/expression/scalar_function.go b/expression/scalar_function.go index 34f0d7673e7ec..7705c2ff48b08 100644 --- a/expression/scalar_function.go +++ b/expression/scalar_function.go @@ -17,12 +17,12 @@ import ( "bytes" "fmt" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/chunk" diff --git a/expression/scalar_function_test.go b/expression/scalar_function_test.go index f4088c2b010c1..ef466355c1f53 100644 --- a/expression/scalar_function_test.go +++ b/expression/scalar_function_test.go @@ -17,9 +17,9 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/testleak" diff --git a/expression/schema.go b/expression/schema.go index ffa41b72498d9..50cdb9d6b4dbf 100644 --- a/expression/schema.go +++ b/expression/schema.go @@ -16,7 +16,7 @@ package expression import ( "strings" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pkg/errors" ) diff --git a/expression/schema_test.go b/expression/schema_test.go index d28a41d7263f7..6ea5de276245b 100644 --- a/expression/schema_test.go +++ b/expression/schema_test.go @@ -17,7 +17,7 @@ import ( "fmt" . "github.com/pingcap/check" - "github.com/pingcap/tidb/model" + "github.com/pingcap/parser/model" ) // generateKeys4Schema will generate keys for a given schema. Used only in this file. diff --git a/expression/simple_rewriter.go b/expression/simple_rewriter.go index 6cc6335b96d9f..fd57d166bb4a6 100644 --- a/expression/simple_rewriter.go +++ b/expression/simple_rewriter.go @@ -14,11 +14,11 @@ package expression import ( - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" - "github.com/pingcap/tidb/parser/opcode" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/opcode" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/parser_driver" diff --git a/expression/typeinfer_test.go b/expression/typeinfer_test.go index bb86b140d5caf..1517cc674443f 100644 --- a/expression/typeinfer_test.go +++ b/expression/typeinfer_test.go @@ -17,14 +17,14 @@ import ( "math" . "github.com/pingcap/check" + "github.com/pingcap/parser" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/domain" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/printer" "github.com/pingcap/tidb/util/testkit" "github.com/pingcap/tidb/util/testleak" diff --git a/expression/util.go b/expression/util.go index 6d7679b0c0f4f..6bf507fd17e52 100644 --- a/expression/util.go +++ b/expression/util.go @@ -19,11 +19,11 @@ import ( "time" "unicode" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/opcode" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/hack" diff --git a/expression/util_test.go b/expression/util_test.go index 2fdbc067dff9e..7e810180dc264 100644 --- a/expression/util_test.go +++ b/expression/util_test.go @@ -17,8 +17,8 @@ import ( "testing" "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testleak" diff --git a/infoschema/builder.go b/infoschema/builder.go index 85caaee73e17f..2f6b1a6ebc3b8 100644 --- a/infoschema/builder.go +++ b/infoschema/builder.go @@ -17,9 +17,9 @@ import ( "fmt" "sort" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/perfschema" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" diff --git a/infoschema/infoschema.go b/infoschema/infoschema.go index 94469ce7f5c45..79da4b273b2b0 100644 --- a/infoschema/infoschema.go +++ b/infoschema/infoschema.go @@ -17,12 +17,12 @@ import ( "sort" "sync/atomic" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/table" - "github.com/pingcap/tidb/terror" ) var ( diff --git a/infoschema/infoschema_test.go b/infoschema/infoschema_test.go index 840730638092a..13b4217fcdbf1 100644 --- a/infoschema/infoschema_test.go +++ b/infoschema/infoschema_test.go @@ -18,11 +18,11 @@ import ( "testing" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/perfschema" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/types" diff --git a/infoschema/tables.go b/infoschema/tables.go index e1cd952fc9c7e..f7cabdcedcb2d 100644 --- a/infoschema/tables.go +++ b/infoschema/tables.go @@ -19,16 +19,16 @@ import ( "sync" "time" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/privilege" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/sqlexec" "github.com/pkg/errors" ) diff --git a/infoschema/tables_test.go b/infoschema/tables_test.go index 919f7b9a9e0b7..f8228f944993d 100644 --- a/infoschema/tables_test.go +++ b/infoschema/tables_test.go @@ -15,11 +15,11 @@ package infoschema_test import ( . "github.com/pingcap/check" + "github.com/pingcap/parser/auth" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/store/mockstore" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/testkit" "github.com/pingcap/tidb/util/testleak" ) diff --git a/kv/error.go b/kv/error.go index 68be6b86f04fb..b705165238783 100644 --- a/kv/error.go +++ b/kv/error.go @@ -16,8 +16,8 @@ package kv import ( "strings" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" ) // KV error codes. diff --git a/kv/memdb_buffer.go b/kv/memdb_buffer.go index a4aaf7496ce0f..76b93c355479c 100644 --- a/kv/memdb_buffer.go +++ b/kv/memdb_buffer.go @@ -23,7 +23,7 @@ import ( "github.com/pingcap/goleveldb/leveldb/iterator" "github.com/pingcap/goleveldb/leveldb/memdb" "github.com/pingcap/goleveldb/leveldb/util" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/terror" "github.com/pkg/errors" ) diff --git a/kv/txn.go b/kv/txn.go index 56221f45d3cfe..74c1bd10cf2ce 100644 --- a/kv/txn.go +++ b/kv/txn.go @@ -18,7 +18,7 @@ import ( "math/rand" "time" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/terror" "github.com/pkg/errors" log "github.com/sirupsen/logrus" "golang.org/x/net/context" diff --git a/kv/union_store_test.go b/kv/union_store_test.go index 6241e853582de..c4e6c400f915a 100644 --- a/kv/union_store_test.go +++ b/kv/union_store_test.go @@ -15,7 +15,7 @@ package kv import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/util/testleak" ) diff --git a/meta/autoid/autoid.go b/meta/autoid/autoid.go index 095b7ba271db4..4c8ba2e189473 100644 --- a/meta/autoid/autoid.go +++ b/meta/autoid/autoid.go @@ -20,10 +20,10 @@ import ( "time" "github.com/cznic/mathutil" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/terror" "github.com/pkg/errors" log "github.com/sirupsen/logrus" ) diff --git a/meta/autoid/autoid_test.go b/meta/autoid/autoid_test.go index 15caebe1cd36d..173466190c53e 100644 --- a/meta/autoid/autoid_test.go +++ b/meta/autoid/autoid_test.go @@ -20,10 +20,10 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/store/mockstore" "github.com/pkg/errors" ) diff --git a/meta/meta.go b/meta/meta.go index 35032ad119d3b..e2fac6203cfbc 100644 --- a/meta/meta.go +++ b/meta/meta.go @@ -24,12 +24,12 @@ import ( "sync" "time" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/structure" - "github.com/pingcap/tidb/terror" "github.com/pkg/errors" log "github.com/sirupsen/logrus" ) diff --git a/meta/meta_test.go b/meta/meta_test.go index 823f71b3e0167..81a987a3fb4ea 100644 --- a/meta/meta_test.go +++ b/meta/meta_test.go @@ -19,8 +19,8 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/util/testleak" "golang.org/x/net/context" diff --git a/metrics/server.go b/metrics/server.go index e8417274d2775..c18058f1461eb 100644 --- a/metrics/server.go +++ b/metrics/server.go @@ -16,7 +16,7 @@ package metrics import ( "strconv" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/terror" "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus" ) diff --git a/model/model_test.go b/model/model_test.go deleted file mode 100644 index a7cf298adb30d..0000000000000 --- a/model/model_test.go +++ /dev/null @@ -1,307 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package model - -import ( - "encoding/json" - "fmt" - "testing" - "time" - - . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/types" -) - -func TestT(t *testing.T) { - CustomVerboseFlag = true - TestingT(t) -} - -var _ = Suite(&testModelSuite{}) - -type testModelSuite struct { -} - -func (*testModelSuite) TestT(c *C) { - abc := NewCIStr("aBC") - c.Assert(abc.O, Equals, "aBC") - c.Assert(abc.L, Equals, "abc") - c.Assert(abc.String(), Equals, "aBC") -} - -func (*testModelSuite) TestModelBasic(c *C) { - column := &ColumnInfo{ - ID: 1, - Name: NewCIStr("c"), - Offset: 0, - DefaultValue: 0, - FieldType: *types.NewFieldType(0), - } - column.Flag |= mysql.PriKeyFlag - - index := &IndexInfo{ - Name: NewCIStr("key"), - Table: NewCIStr("t"), - Columns: []*IndexColumn{ - { - Name: NewCIStr("c"), - Offset: 0, - Length: 10, - }}, - Unique: true, - Primary: true, - } - - fk := &FKInfo{ - RefCols: []CIStr{NewCIStr("a")}, - Cols: []CIStr{NewCIStr("a")}, - } - - table := &TableInfo{ - ID: 1, - Name: NewCIStr("t"), - Charset: "utf8", - Collate: "utf8_bin", - Columns: []*ColumnInfo{column}, - Indices: []*IndexInfo{index}, - ForeignKeys: []*FKInfo{fk}, - PKIsHandle: true, - } - - dbInfo := &DBInfo{ - ID: 1, - Name: NewCIStr("test"), - Charset: "utf8", - Collate: "utf8_bin", - Tables: []*TableInfo{table}, - } - - n := dbInfo.Clone() - c.Assert(n, DeepEquals, dbInfo) - - pkName := table.GetPkName() - c.Assert(pkName, Equals, NewCIStr("c")) - newColumn := table.GetPkColInfo() - c.Assert(newColumn, DeepEquals, column) - inIdx := table.ColumnIsInIndex(column) - c.Assert(inIdx, Equals, true) - tp := IndexTypeBtree - c.Assert(tp.String(), Equals, "BTREE") - tp = IndexTypeHash - c.Assert(tp.String(), Equals, "HASH") - tp = 1E5 - c.Assert(tp.String(), Equals, "") - has := index.HasPrefixIndex() - c.Assert(has, Equals, true) - t := table.GetUpdateTime() - c.Assert(t, Equals, TSConvert2Time(table.UpdateTS)) - - // Corner cases - column.Flag ^= mysql.PriKeyFlag - pkName = table.GetPkName() - c.Assert(pkName, Equals, NewCIStr("")) - newColumn = table.GetPkColInfo() - c.Assert(newColumn, IsNil) - anCol := &ColumnInfo{ - Name: NewCIStr("d"), - } - exIdx := table.ColumnIsInIndex(anCol) - c.Assert(exIdx, Equals, false) - anIndex := &IndexInfo{ - Columns: []*IndexColumn{}, - } - no := anIndex.HasPrefixIndex() - c.Assert(no, Equals, false) -} - -func (*testModelSuite) TestJobStartTime(c *C) { - job := &Job{ - ID: 123, - BinlogInfo: &HistoryInfo{}, - } - t := time.Unix(0, 0) - c.Assert(t, Equals, TSConvert2Time(job.StartTS)) - ret := fmt.Sprintf("%s", job) - c.Assert(job.String(), Equals, ret) -} - -func (*testModelSuite) TestJobCodec(c *C) { - type A struct { - Name string - } - job := &Job{ - ID: 1, - TableID: 2, - SchemaID: 1, - BinlogInfo: &HistoryInfo{}, - Args: []interface{}{NewCIStr("a"), A{Name: "abc"}}, - } - job.BinlogInfo.AddDBInfo(123, &DBInfo{ID: 1, Name: NewCIStr("test_history_db")}) - job.BinlogInfo.AddTableInfo(123, &TableInfo{ID: 1, Name: NewCIStr("test_history_tbl")}) - - // Test IsDependentOn. - // job: table ID is 2 - // job1: table ID is 2 - var err error - job1 := &Job{ - ID: 2, - TableID: 2, - SchemaID: 1, - Type: ActionRenameTable, - BinlogInfo: &HistoryInfo{}, - Args: []interface{}{int64(3), NewCIStr("new_table_name")}, - } - job1.RawArgs, err = json.Marshal(job1.Args) - c.Assert(err, IsNil) - isDependent, err := job.IsDependentOn(job1) - c.Assert(err, IsNil) - c.Assert(isDependent, IsTrue) - // job1: rename table, old schema ID is 3 - // job2: create schema, schema ID is 3 - job2 := &Job{ - ID: 3, - TableID: 3, - SchemaID: 3, - Type: ActionCreateSchema, - BinlogInfo: &HistoryInfo{}, - } - isDependent, err = job2.IsDependentOn(job1) - c.Assert(err, IsNil) - c.Assert(isDependent, IsTrue) - - c.Assert(job.IsCancelled(), Equals, false) - b, err := job.Encode(false) - c.Assert(err, IsNil) - newJob := &Job{} - err = newJob.Decode(b) - c.Assert(err, IsNil) - c.Assert(newJob.BinlogInfo, DeepEquals, job.BinlogInfo) - name := CIStr{} - a := A{} - err = newJob.DecodeArgs(&name, &a) - c.Assert(err, IsNil) - c.Assert(name, DeepEquals, NewCIStr("")) - c.Assert(a, DeepEquals, A{Name: ""}) - c.Assert(len(newJob.String()), Greater, 0) - - job.BinlogInfo.Clean() - b1, err := job.Encode(true) - c.Assert(err, IsNil) - newJob = &Job{} - err = newJob.Decode(b1) - c.Assert(err, IsNil) - c.Assert(newJob.BinlogInfo, DeepEquals, &HistoryInfo{}) - name = CIStr{} - a = A{} - err = newJob.DecodeArgs(&name, &a) - c.Assert(err, IsNil) - c.Assert(name, DeepEquals, NewCIStr("a")) - c.Assert(a, DeepEquals, A{Name: "abc"}) - c.Assert(len(newJob.String()), Greater, 0) - - b2, err := job.Encode(true) - c.Assert(err, IsNil) - newJob = &Job{} - err = newJob.Decode(b2) - c.Assert(err, IsNil) - name = CIStr{} - // Don't decode to a here. - err = newJob.DecodeArgs(&name) - c.Assert(err, IsNil) - c.Assert(name, DeepEquals, NewCIStr("a")) - c.Assert(len(newJob.String()), Greater, 0) - - job.State = JobStateDone - c.Assert(job.IsDone(), IsTrue) - c.Assert(job.IsFinished(), IsTrue) - c.Assert(job.IsRunning(), IsFalse) - c.Assert(job.IsSynced(), IsFalse) - c.Assert(job.IsRollbackDone(), IsFalse) - job.SetRowCount(3) - c.Assert(job.GetRowCount(), Equals, int64(3)) -} - -func (testModelSuite) TestState(c *C) { - schemaTbl := []SchemaState{ - StateDeleteOnly, - StateWriteOnly, - StateWriteReorganization, - StateDeleteReorganization, - StatePublic, - } - - for _, state := range schemaTbl { - c.Assert(len(state.String()), Greater, 0) - } - - jobTbl := []JobState{ - JobStateRunning, - JobStateDone, - JobStateCancelled, - JobStateRollingback, - JobStateRollbackDone, - JobStateSynced, - } - - for _, state := range jobTbl { - c.Assert(len(state.String()), Greater, 0) - } -} - -func (testModelSuite) TestString(c *C) { - acts := []struct { - act ActionType - result string - }{ - {ActionNone, "none"}, - {ActionAddForeignKey, "add foreign key"}, - {ActionDropForeignKey, "drop foreign key"}, - {ActionTruncateTable, "truncate table"}, - {ActionModifyColumn, "modify column"}, - {ActionRenameTable, "rename table"}, - {ActionSetDefaultValue, "set default value"}, - {ActionCreateSchema, "create schema"}, - {ActionDropSchema, "drop schema"}, - {ActionCreateTable, "create table"}, - {ActionDropTable, "drop table"}, - {ActionAddIndex, "add index"}, - {ActionDropIndex, "drop index"}, - {ActionAddColumn, "add column"}, - {ActionDropColumn, "drop column"}, - } - - for _, v := range acts { - str := v.act.String() - c.Assert(str, Equals, v.result) - } -} - -func (testModelSuite) TestUnmarshalCIStr(c *C) { - var ci CIStr - - // Test unmarshal CIStr from a single string. - str := "aaBB" - buf, err := json.Marshal(str) - c.Assert(err, IsNil) - ci.UnmarshalJSON(buf) - c.Assert(ci.O, Equals, str) - c.Assert(ci.L, Equals, "aabb") - - buf, err = json.Marshal(ci) - c.Assert(string(buf), Equals, `{"O":"aaBB","L":"aabb"}`) - ci.UnmarshalJSON(buf) - c.Assert(ci.O, Equals, str) - c.Assert(ci.L, Equals, "aabb") -} diff --git a/mysql/const_test.go b/mysql/const_test.go deleted file mode 100644 index 4ad54fd5df097..0000000000000 --- a/mysql/const_test.go +++ /dev/null @@ -1,321 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql_test - -import ( - "flag" - "testing" - - . "github.com/pingcap/check" - "github.com/pingcap/tidb/domain" - "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" - "github.com/pingcap/tidb/session" - "github.com/pingcap/tidb/store/mockstore" - "github.com/pingcap/tidb/store/mockstore/mocktikv" - "github.com/pingcap/tidb/util/testkit" - "github.com/pingcap/tidb/util/testleak" - "golang.org/x/net/context" -) - -func TestT(t *testing.T) { - CustomVerboseFlag = true - TestingT(t) -} - -var _ = Suite(&testMySQLConstSuite{}) - -type testMySQLConstSuite struct { - cluster *mocktikv.Cluster - mvccStore mocktikv.MVCCStore - store kv.Storage - dom *domain.Domain - *parser.Parser -} - -var mockTikv = flag.Bool("mockTikv", true, "use mock tikv store in executor test") - -func (s *testMySQLConstSuite) SetUpSuite(c *C) { - s.Parser = parser.New() - flag.Lookup("mockTikv") - useMockTikv := *mockTikv - if useMockTikv { - s.cluster = mocktikv.NewCluster() - mocktikv.BootstrapWithSingleStore(s.cluster) - s.mvccStore = mocktikv.MustNewMVCCStore() - store, err := mockstore.NewMockTikvStore( - mockstore.WithCluster(s.cluster), - mockstore.WithMVCCStore(s.mvccStore), - ) - c.Assert(err, IsNil) - s.store = store - session.SetSchemaLease(0) - session.SetStatsLease(0) - } - var err error - s.dom, err = session.BootstrapSession(s.store) - c.Assert(err, IsNil) -} - -func (s *testMySQLConstSuite) TearDownSuite(c *C) { - s.dom.Close() - s.store.Close() - testleak.AfterTest(c)() -} - -func (s *testMySQLConstSuite) TestGetSQLMode(c *C) { - positiveCases := []struct { - arg string - }{ - {"NO_ZERO_DATE"}, - {",,NO_ZERO_DATE"}, - {"NO_ZERO_DATE,NO_ZERO_IN_DATE"}, - {""}, - {", "}, - {","}, - } - - for _, t := range positiveCases { - _, err := mysql.GetSQLMode(mysql.FormatSQLModeStr(t.arg)) - c.Assert(err, IsNil) - } - - negativeCases := []struct { - arg string - }{ - {"NO_ZERO_DATE, NO_ZERO_IN_DATE"}, - {"NO_ZERO_DATE,adfadsdfasdfads"}, - {", ,NO_ZERO_DATE"}, - {" ,"}, - } - - for _, t := range negativeCases { - _, err := mysql.GetSQLMode(mysql.FormatSQLModeStr(t.arg)) - c.Assert(err, NotNil) - } -} - -func (s *testMySQLConstSuite) TestSQLMode(c *C) { - tests := []struct { - arg string - hasNoZeroDateMode bool - hasNoZeroInDateMode bool - hasErrorForDivisionByZeroMode bool - }{ - {"NO_ZERO_DATE", true, false, false}, - {"NO_ZERO_IN_DATE", false, true, false}, - {"ERROR_FOR_DIVISION_BY_ZERO", false, false, true}, - {"NO_ZERO_IN_DATE,NO_ZERO_DATE", true, true, false}, - {"NO_ZERO_DATE,NO_ZERO_IN_DATE", true, true, false}, - {"NO_ZERO_DATE,NO_ZERO_IN_DATE", true, true, false}, - {"NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO", true, true, true}, - {"NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO", false, true, true}, - {"", false, false, false}, - } - - for _, t := range tests { - sqlMode, _ := mysql.GetSQLMode(t.arg) - c.Assert(sqlMode.HasNoZeroDateMode(), Equals, t.hasNoZeroDateMode) - c.Assert(sqlMode.HasNoZeroInDateMode(), Equals, t.hasNoZeroInDateMode) - c.Assert(sqlMode.HasErrorForDivisionByZeroMode(), Equals, t.hasErrorForDivisionByZeroMode) - } -} - -func (s *testMySQLConstSuite) TestRealAsFloatMode(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t;") - tk.MustExec("create table t (a real);") - result := tk.MustQuery("desc t") - c.Check(result.Rows(), HasLen, 1) - row := result.Rows()[0] - c.Assert(row[1], Equals, "double") - - tk.MustExec("drop table if exists t;") - tk.MustExec("set sql_mode='REAL_AS_FLOAT'") - tk.MustExec("create table t (a real)") - result = tk.MustQuery("desc t") - c.Check(result.Rows(), HasLen, 1) - row = result.Rows()[0] - c.Assert(row[1], Equals, "float") -} - -func (s *testMySQLConstSuite) TestPipesAsConcatMode(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("SET sql_mode='PIPES_AS_CONCAT';") - r := tk.MustQuery(`SELECT 'hello' || 'world';`) - r.Check(testkit.Rows("helloworld")) -} - -func (s *testMySQLConstSuite) TestNoUnsignedSubtractionMode(c *C) { - tk := testkit.NewTestKit(c, s.store) - ctx := context.Background() - tk.MustExec("set sql_mode='NO_UNSIGNED_SUBTRACTION'") - r := tk.MustQuery("SELECT CAST(0 as UNSIGNED) - 1;") - r.Check(testkit.Rows("-1")) - rs, _ := tk.Exec("SELECT CAST(18446744073709551615 as UNSIGNED) - 1;") - _, err := session.GetRows4Test(ctx, tk.Se, rs) - c.Assert(err, NotNil) - c.Assert(rs.Close(), IsNil) - rs, _ = tk.Exec("SELECT 1 - CAST(18446744073709551615 as UNSIGNED);") - _, err = session.GetRows4Test(ctx, tk.Se, rs) - c.Assert(err, NotNil) - c.Assert(rs.Close(), IsNil) - rs, _ = tk.Exec("SELECT CAST(-1 as UNSIGNED) - 1") - _, err = session.GetRows4Test(ctx, tk.Se, rs) - c.Assert(err, NotNil) - c.Assert(rs.Close(), IsNil) - rs, _ = tk.Exec("SELECT CAST(9223372036854775808 as UNSIGNED) - 1") - _, err = session.GetRows4Test(ctx, tk.Se, rs) - c.Assert(err, NotNil) - c.Assert(rs.Close(), IsNil) -} - -func (s *testMySQLConstSuite) TestHighNotPrecedenceMode(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int);") - tk.MustExec("insert into t1 values (0),(1),(NULL);") - r := tk.MustQuery(`SELECT * FROM t1 WHERE NOT a BETWEEN 2 AND 3;`) - r.Check(testkit.Rows("0", "1")) - r = tk.MustQuery(`SELECT NOT 1 BETWEEN -5 AND 5;`) - r.Check(testkit.Rows("0")) - tk.MustExec("set sql_mode='high_not_precedence';") - r = tk.MustQuery(`SELECT * FROM t1 WHERE NOT a BETWEEN 2 AND 3;`) - r.Check(testkit.Rows()) - r = tk.MustQuery(`SELECT NOT 1 BETWEEN -5 AND 5;`) - r.Check(testkit.Rows("1")) -} - -func (s *testMySQLConstSuite) TestIgnoreSpaceMode(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("set sql_mode=''") - tk.MustExec("CREATE TABLE COUNT (a bigint);") - tk.MustExec("DROP TABLE COUNT;") - tk.MustExec("CREATE TABLE `COUNT` (a bigint);") - tk.MustExec("DROP TABLE COUNT;") - _, err := tk.Exec("CREATE TABLE COUNT(a bigint);") - c.Assert(err, NotNil) - tk.MustExec("CREATE TABLE test.COUNT(a bigint);") - tk.MustExec("DROP TABLE COUNT;") - - tk.MustExec("CREATE TABLE BIT_AND (a bigint);") - tk.MustExec("DROP TABLE BIT_AND;") - tk.MustExec("CREATE TABLE `BIT_AND` (a bigint);") - tk.MustExec("DROP TABLE BIT_AND;") - _, err = tk.Exec("CREATE TABLE BIT_AND(a bigint);") - c.Assert(err, NotNil) - tk.MustExec("CREATE TABLE test.BIT_AND(a bigint);") - tk.MustExec("DROP TABLE BIT_AND;") - - tk.MustExec("CREATE TABLE NOW (a bigint);") - tk.MustExec("DROP TABLE NOW;") - tk.MustExec("CREATE TABLE `NOW` (a bigint);") - tk.MustExec("DROP TABLE NOW;") - _, err = tk.Exec("CREATE TABLE NOW(a bigint);") - c.Assert(err, NotNil) - tk.MustExec("CREATE TABLE test.NOW(a bigint);") - tk.MustExec("DROP TABLE NOW;") - - tk.MustExec("set sql_mode='IGNORE_SPACE'") - _, err = tk.Exec("CREATE TABLE COUNT (a bigint);") - c.Assert(err, NotNil) - tk.MustExec("CREATE TABLE `COUNT` (a bigint);") - tk.MustExec("DROP TABLE COUNT;") - _, err = tk.Exec("CREATE TABLE COUNT(a bigint);") - c.Assert(err, NotNil) - tk.MustExec("CREATE TABLE test.COUNT(a bigint);") - tk.MustExec("DROP TABLE COUNT;") - - _, err = tk.Exec("CREATE TABLE BIT_AND (a bigint);") - c.Assert(err, NotNil) - tk.MustExec("CREATE TABLE `BIT_AND` (a bigint);") - tk.MustExec("DROP TABLE BIT_AND;") - _, err = tk.Exec("CREATE TABLE BIT_AND(a bigint);") - c.Assert(err, NotNil) - tk.MustExec("CREATE TABLE test.BIT_AND(a bigint);") - tk.MustExec("DROP TABLE BIT_AND;") - - _, err = tk.Exec("CREATE TABLE NOW (a bigint);") - c.Assert(err, NotNil) - tk.MustExec("CREATE TABLE `NOW` (a bigint);") - tk.MustExec("DROP TABLE NOW;") - _, err = tk.Exec("CREATE TABLE NOW(a bigint);") - c.Assert(err, NotNil) - tk.MustExec("CREATE TABLE test.NOW(a bigint);") - tk.MustExec("DROP TABLE NOW;") - -} - -func (s *testMySQLConstSuite) TestPadCharToFullLengthMode(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - // test type `CHAR(n)` - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a char(10));") - tk.MustExec("insert into t1 values ('xy');") - tk.MustExec("set sql_mode='';") - r := tk.MustQuery(`SELECT a='xy ', char_length(a) FROM t1;`) - r.Check(testkit.Rows("0 2")) - r = tk.MustQuery(`SELECT count(*) FROM t1 WHERE a='xy ';`) - r.Check(testkit.Rows("0")) - tk.MustExec("set sql_mode='PAD_CHAR_TO_FULL_LENGTH';") - r = tk.MustQuery(`SELECT a='xy ', char_length(a) FROM t1;`) - r.Check(testkit.Rows("1 10")) - r = tk.MustQuery(`SELECT count(*) FROM t1 WHERE a='xy ';`) - r.Check(testkit.Rows("1")) - - // test type `VARCHAR(n)` - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a varchar(10));") - tk.MustExec("insert into t1 values ('xy');") - tk.MustExec("set sql_mode='';") - r = tk.MustQuery(`SELECT a='xy ', char_length(a) FROM t1;`) - r.Check(testkit.Rows("0 2")) - r = tk.MustQuery(`SELECT count(*) FROM t1 WHERE a='xy ';`) - r.Check(testkit.Rows("0")) - tk.MustExec("set sql_mode='PAD_CHAR_TO_FULL_LENGTH';") - r = tk.MustQuery(`SELECT a='xy ', char_length(a) FROM t1;`) - r.Check(testkit.Rows("0 2")) -} - -func (s *testMySQLConstSuite) TestNoBackslashEscapesMode(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("set sql_mode=''") - r := tk.MustQuery("SELECT '\\\\'") - r.Check(testkit.Rows("\\")) - tk.MustExec("set sql_mode='NO_BACKSLASH_ESCAPES'") - r = tk.MustQuery("SELECT '\\\\'") - r.Check(testkit.Rows("\\\\")) -} - -func (s *testMySQLConstSuite) TestServerStatus(c *C) { - tests := []struct { - arg uint16 - IsCursorExists bool - }{ - {0, false}, - {mysql.ServerStatusInTrans | mysql.ServerStatusNoBackslashEscaped, false}, - {mysql.ServerStatusCursorExists, true}, - {mysql.ServerStatusCursorExists | mysql.ServerStatusLastRowSend, true}, - } - - for _, t := range tests { - ret := mysql.HasCursorExistsFlag(t.arg) - c.Assert(ret, Equals, t.IsCursorExists) - } -} diff --git a/mysql/error_test.go b/mysql/error_test.go deleted file mode 100644 index a57c548353f7d..0000000000000 --- a/mysql/error_test.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -import ( - . "github.com/pingcap/check" -) - -var _ = Suite(&testSQLErrorSuite{}) - -type testSQLErrorSuite struct { -} - -func (s *testSQLErrorSuite) TestSQLError(c *C) { - e := NewErrf(ErrNoDB, "no db error") - c.Assert(len(e.Error()), Greater, 0) - - e = NewErrf(0, "customized error") - c.Assert(len(e.Error()), Greater, 0) - - e = NewErr(ErrNoDB) - c.Assert(len(e.Error()), Greater, 0) - - e = NewErr(0, "customized error") - c.Assert(len(e.Error()), Greater, 0) -} diff --git a/mysql/type_test.go b/mysql/type_test.go deleted file mode 100644 index a5139b1681819..0000000000000 --- a/mysql/type_test.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package mysql - -import ( - . "github.com/pingcap/check" -) - -var _ = Suite(&testTypeSuite{}) - -type testTypeSuite struct{} - -func (s *testTypeSuite) TestFlags(c *C) { - c.Assert(HasNotNullFlag(NotNullFlag), IsTrue) - c.Assert(HasUniKeyFlag(UniqueKeyFlag), IsTrue) - c.Assert(HasNotNullFlag(NotNullFlag), IsTrue) - c.Assert(HasNoDefaultValueFlag(NoDefaultValueFlag), IsTrue) - c.Assert(HasAutoIncrementFlag(AutoIncrementFlag), IsTrue) - c.Assert(HasUnsignedFlag(UnsignedFlag), IsTrue) - c.Assert(HasZerofillFlag(ZerofillFlag), IsTrue) - c.Assert(HasBinaryFlag(BinaryFlag), IsTrue) - c.Assert(HasPriKeyFlag(PriKeyFlag), IsTrue) - c.Assert(HasMultipleKeyFlag(MultipleKeyFlag), IsTrue) - c.Assert(HasTimestampFlag(TimestampFlag), IsTrue) - c.Assert(HasOnUpdateNowFlag(OnUpdateNowFlag), IsTrue) -} diff --git a/owner/fail_test.go b/owner/fail_test.go index acc94606441ec..5574c34846014 100644 --- a/owner/fail_test.go +++ b/owner/fail_test.go @@ -23,7 +23,7 @@ import ( "github.com/coreos/etcd/clientv3" gofail "github.com/etcd-io/gofail/runtime" . "github.com/pingcap/check" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/testleak" "golang.org/x/net/context" diff --git a/owner/manager.go b/owner/manager.go index 6ac8d8eac285f..640bb5d571cf6 100644 --- a/owner/manager.go +++ b/owner/manager.go @@ -26,8 +26,8 @@ import ( "github.com/coreos/etcd/clientv3/concurrency" "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" "github.com/coreos/etcd/mvcc/mvccpb" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util" "github.com/pkg/errors" log "github.com/sirupsen/logrus" diff --git a/parser/bench_test.go b/parser/bench_test.go deleted file mode 100644 index b22f811463c56..0000000000000 --- a/parser/bench_test.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package parser - -import ( - "testing" -) - -func BenchmarkSysbenchSelect(b *testing.B) { - parser := New() - sql := "SELECT pad FROM sbtest1 WHERE id=1;" - b.ResetTimer() - for i := 0; i < b.N; i++ { - _, err := parser.Parse(sql, "", "") - if err != nil { - b.Fatal(err) - } - } - b.ReportAllocs() -} - -func BenchmarkParseComplex(b *testing.B) { - var table = []string{ - `SELECT DISTINCT ca.l9_convergence_code AS atb2, cu.cust_sub_type AS account_type, cst.description AS account_type_desc, ss.prim_resource_val AS msisdn, ca.ban AS ban_key, To_char(mo.memo_date, 'YYYYMMDD') AS memo_date, cu.l9_identification AS thai_id, ss.subscriber_no AS subs_key, ss.dealer_code AS shop_code, cd.description AS shop_name, mot.short_desc, Regexp_substr(mo.attr1value, '[^ ;]+', 1, 3) staff_id, mo.operator_id AS user_id, mo.memo_system_text, co2.soc_name AS first_socname, co3.soc_name AS previous_socname, co.soc_name AS current_socname, Regexp_substr(mo.attr1value, '[^ ; ]+', 1, 1) NAME, co.soc_description AS current_pp_desc, co3.soc_description AS prev_pp_desc, co.soc_cd AS soc_cd, ( SELECT Sum(br.amount) FROM bl1_rc_rates BR, customer CU, subscriber SS WHERE br.service_receiver_id = ss.subscriber_no AND br.receiver_customer = ss.customer_id AND br.effective_date <= br.expiration_date AND (( ss. sub_status <> 'C' AND ss. sub_status <> 'T' AND br.expiration_date IS NULL) OR ( ss. sub_status = 'C' AND br.expiration_date LIKE ss.effective_date)) AND br.pp_ind = 'Y' AND br.cycle_code = cu.bill_cycle) AS pp_rate, cu.bill_cycle AS cycle_code, To_char(Nvl(ss.l9_tmv_act_date, ss.init_act_date),'YYYYMMDD') AS activated_date, To_char(cd.effective_date, 'YYYYMMDD') AS shop_effective_date, cd.expiration_date AS shop_expired_date, ca.l9_company_code AS company_code FROM service_details S, product CO, csm_pay_channel CPC, account CA, subscriber SS, customer CU, customer_sub_type CST, csm_dealer CD, service_details S2, product CO2, service_details S3, product CO3, memo MO , memo_type MOT, logical_date LO, charge_details CHD WHERE ss.subscriber_no = chd.agreement_no AND cpc.pym_channel_no = chd.target_pcn AND chd.chg_split_type = 'DR' AND chd.expiration_date IS NULL AND s.soc = co.soc_cd AND co.soc_type = 'P' AND s.agreement_no = ss.subscriber_no AND ss.prim_resource_tp = 'C' AND cpc.payment_category = 'POST' AND ca.ban = cpc.ban AND ( ca.l9_company_code = 'RF' OR ca.l9_company_code = 'RM' OR ca.l9_company_code = 'TM') AND ss.customer_id = cu.customer_id AND cu.cust_sub_type = cst.cust_sub_type AND cu.customer_type = cst.customer_type AND ss.dealer_code = cd.dealer AND s2.effective_date= ( SELECT Max(sa1.effective_date) FROM service_details SA1, product o1 WHERE sa1.agreement_no = ss.subscriber_no AND co.soc_cd = sa1.soc AND co.soc_type = 'P' ) AND s2.agreement_no = s.agreement_no AND s2.soc = co2.soc_cd AND co2.soc_type = 'P' AND s2.effective_date = ( SELECT Min(sa1.effective_date) FROM service_details SA1, product o1 WHERE sa1.agreement_no = ss.subscriber_no AND co2.soc_cd = sa1.soc AND co.soc_type = 'P' ) AND s3.agreement_no = s.agreement_no AND s3.soc = co3.soc_cd AND co3.soc_type = 'P' AND s3.effective_date = ( SELECT Max(sa1.effective_date) FROM service_details SA1, a product o1 WHERE sa1.agreement_no = ss.subscriber_no AND sa1.effective_date < ( SELECT Max(sa1.effective_date) FROM service_details SA1, product o1 WHERE sa1.agreement_no = ss.subscriber_no AND co3.soc_cd = sa1.soc AND co3.soc_type = 'P' ) AND co3.soc_cd = sa1.soc AND o1.soc_type = 'P' ) AND mo.entity_id = ss.subscriber_no AND mo.entity_type_id = 6 AND mo.memo_type_id = mot.memo_type_id AND Trunc(mo.sys_creation_date) = ( SELECT Trunc(lo.logical_date - 1) FROM lo) trunc(lo.logical_date - 1) AND lo.expiration_date IS NULL AND lo.logical_date_type = 'B' AND lo.expiration_date IS NULL AND ( mot.short_desc = 'BCN' OR mot.short_desc = 'BCNM' )`} - parser := New() - b.ResetTimer() - for i := 0; i < b.N; i++ { - for _, v := range table { - _, err := parser.Parse(v, "", "") - if err != nil { - b.Failed() - } - } - } - b.ReportAllocs() -} - -func BenchmarkParseSimple(b *testing.B) { - var table = []string{ - "insert into t values (1), (2), (3)", - "insert into t values (4), (5), (6), (7)", - "select c from t where c > 2", - } - parser := New() - b.ResetTimer() - for i := 0; i < b.N; i++ { - for _, v := range table { - _, err := parser.Parse(v, "", "") - if err != nil { - b.Failed() - } - } - } - b.ReportAllocs() -} diff --git a/parser/consistent_test.go b/parser/consistent_test.go deleted file mode 100644 index 3872792130b00..0000000000000 --- a/parser/consistent_test.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2017 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package parser - -import ( - "io/ioutil" - "os" - "path" - "runtime" - "sort" - "strings" - - . "github.com/pingcap/check" -) - -var _ = Suite(&testConsistentSuite{}) - -type testConsistentSuite struct { -} - -func (s *testConsistentSuite) TestKeywordConsistent(c *C) { - _, filename, _, _ := runtime.Caller(0) - parserFilename := path.Join(path.Dir(filename), "parser.y") - parserFile, err := os.Open(parserFilename) - c.Assert(err, IsNil) - data, err := ioutil.ReadAll(parserFile) - c.Assert(err, IsNil) - content := string(data) - - reservedKeywordStartMarker := "\t/* The following tokens belong to ReservedKeyword. */" - unreservedKeywordStartMarker := "\t/* The following tokens belong to UnReservedKeyword. */" - notKeywordTokenStartMarker := "\t/* The following tokens belong to NotKeywordToken. */" - tidbKeywordStartMarker := "\t/* The following tokens belong to TiDBKeyword. */" - identTokenEndMarker := "%token\t" - - reservedKeywords := extractKeywords(content, reservedKeywordStartMarker, unreservedKeywordStartMarker) - - unreservedKeywords := extractKeywords(content, unreservedKeywordStartMarker, notKeywordTokenStartMarker) - - notKeywordTokens := extractKeywords(content, notKeywordTokenStartMarker, tidbKeywordStartMarker) - - tidbKeywords := extractKeywords(content, tidbKeywordStartMarker, identTokenEndMarker) - - for k, v := range aliases { - c.Assert(k != v, IsTrue) - c.Assert(tokenMap[k], Equals, tokenMap[v]) - } - keywordCount := len(reservedKeywords) + len(unreservedKeywords) + len(notKeywordTokens) + len(tidbKeywords) - c.Assert(len(tokenMap)-len(aliases), Equals, keywordCount) - - unreservedCollectionDef := extractKeywordsFromCollectionDef(content, "\nUnReservedKeyword:") - c.Assert(unreservedKeywords, DeepEquals, unreservedCollectionDef) - - notKeywordTokensCollectionDef := extractKeywordsFromCollectionDef(content, "\nNotKeywordToken:") - c.Assert(notKeywordTokens, DeepEquals, notKeywordTokensCollectionDef) - - tidbKeywordsCollectionDef := extractKeywordsFromCollectionDef(content, "\nTiDBKeyword:") - c.Assert(tidbKeywords, DeepEquals, tidbKeywordsCollectionDef) -} - -func extractMiddle(str, startMarker, endMarker string) string { - startIdx := strings.Index(str, startMarker) - if startIdx == -1 { - return "" - } - str = str[startIdx+len(startMarker):] - endIdx := strings.Index(str, endMarker) - if endIdx == -1 { - return "" - } - return str[:endIdx] -} - -func extractQuotedWords(strs []string) []string { - var words []string - for _, str := range strs { - word := extractMiddle(str, "\"", "\"") - if word == "" { - continue - } - words = append(words, word) - } - sort.Strings(words) - return words -} - -func extractKeywords(content, startMarker, endMarker string) []string { - keywordSection := extractMiddle(content, startMarker, endMarker) - lines := strings.Split(keywordSection, "\n") - return extractQuotedWords(lines) -} - -func extractKeywordsFromCollectionDef(content, startMarker string) []string { - keywordSection := extractMiddle(content, startMarker, "\n\n") - words := strings.Split(keywordSection, "|") - return extractQuotedWords(words) -} diff --git a/parser/goyacc/main.go b/parser/goyacc/main.go deleted file mode 100644 index 69da64b733ddb..0000000000000 --- a/parser/goyacc/main.go +++ /dev/null @@ -1,819 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -// Copyright 2014 The goyacc Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// This source code uses portions of code previously published in the Go tool -// yacc[0] program, the respective license can be found in the LICENSE-GO-YACC -// file. - -// Goyacc is a version of yacc generating Go parsers. -// -// Usage -// -// Note: If no non flag arguments are given, goyacc reads standard input. -// -// goyacc [options] [input] -// -// options and (defaults) -// -c Report state closures. (false) -// -cr Check all states are reducible. (false) -// -dlval Debug value when runtime yyDebug >= 3. ("lval") -// -dlvalf Debug format of -dlval. ("%+v") -// -ex Explain how were conflicts resolved. (false) -// -l Disable line directives, for compatibility only - ignored. (false) -// -la Report all lookahead sets. (false) -// -o outputFile Parser output. ("y.go") -// -p prefix Name prefix to use in generated code. ("yy") -// -v reportFile Create grammar report. ("y.output") -// -xe examplesFile Generate error messages by examples. ("") -// -xegen examplesFile Generate a file suitable for -xe automatically from the grammar. -// The file must not exist. ("") -// -// -// -// Changelog -// -// 2015-03-24: The search for a custom error message is now extended to include -// also the last state that was shifted into, if any. This change resolves a -// problem in which a lookahead symbol is valid for a reduce action in state A, -// but the same symbol is later never accepted by any shift action in some -// state B which is popped from the state stack after the reduction is -// performed. The computed from example state is A but when the error is -// actually detected, the state is now B and the custom error was thus not -// used. -// -// 2015-02-23: Added -xegen flag. It can be used to automagically generate a -// skeleton errors by example file which can be, for example, edited and/or -// submited later as an argument of the -xe option. -// -// 2014-12-18: Support %precedence for better bison compatibility[3]. The -// actual changes are in packages goyacc is dependent on. Goyacc users should -// rebuild the binary: -// -// $ go get -u github.com/cznic/goyacc -// -// 2014-12-02: Added support for the optional yyLexerEx interface. The Reduced -// method can be useful for debugging and/or automatically producing examples -// by parsing code fragments. If it returns true the parser exits immediately -// with return value -1. -// -// Overview -// -// The generated parser is reentrant and mostly backwards compatible with -// parsers generated by go tool yacc[0]. yyParse expects to be given an -// argument that conforms to the following interface: -// -// type yyLexer interface { -// Lex(lval *yySymType) int -// Errorf(format string, a ...interface{}) -// Errors() []error -// } -// -// Optionally the argument to yyParse may implement the following interface: -// -// type yyLexerEx interface { -// yyLexer -// // Hook for recording a reduction. -// Reduced(rule, state int, lval *yySymType) (stop bool) // Client should copy *lval. -// } -// -// Lex should return the token identifier, and place other token information in -// lval (which replaces the usual yylval). Error is equivalent to yyerror in -// the original yacc. -// -// Code inside the parser may refer to the variable yylex, which holds the -// yyLexer passed to Parse. -// -// Multiple grammars compiled into a single program should be placed in -// distinct packages. If that is impossible, the "-p prefix" flag to yacc sets -// the prefix, by default yy, that begins the names of symbols, including -// types, the parser, and the lexer, generated and referenced by yacc's -// generated code. Setting it to distinct values allows multiple grammars to be -// placed in a single package. -// -// Differences wrt go tool yacc -// -// - goyacc implements ideas from "Generating LR Syntax Error Messages from -// Examples"[1]. Use the -xe flag to pass a name of the example file. For more -// details about the example format please see [2]. -// -// - The grammar report includes example token sequences leading to the -// particular state. Can help understanding conflicts. -// -// - Minor changes in parser debug output. -// -// Links -// -// Referenced from elsewhere: -// -// [0]: http://golang.org/cmd/yacc/ -// [1]: http://people.via.ecp.fr/~stilgar/doc/compilo/parser/Generating%20LR%20Syntax%20Error%20Messages.pdf -// [2]: http://godoc.org/github.com/cznic/y#hdr-Error_Examples -// [3]: http://www.gnu.org/software/bison/manual/html_node/Precedence-Only.html#Precedence-Only -package main - -import ( - "bufio" - "bytes" - "flag" - "fmt" - "go/format" - "go/scanner" - "go/token" - "io" - "io/ioutil" - "log" - "os" - "runtime" - "sort" - "strings" - - "github.com/cznic/mathutil" - "github.com/cznic/parser/yacc" - "github.com/cznic/sortutil" - "github.com/cznic/strutil" - "github.com/cznic/y" -) - -var ( - //oNoDefault = flag.Bool("nodefault", false, "disable generating $default actions") - oClosures = flag.Bool("c", false, "report state closures") - oReducible = flag.Bool("cr", false, "check all states are reducible") - oDlval = flag.String("dlval", "lval", "debug value (runtime yyDebug >= 3)") - oDlvalf = flag.String("dlvalf", "%+v", "debug format of -dlval (runtime yyDebug >= 3)") - oLA = flag.Bool("la", false, "report all lookahead sets") - oNoLines = flag.Bool("l", false, "disable line directives (for compatibility ony - ignored)") - oOut = flag.String("o", "y.go", "parser output") - oPref = flag.String("p", "yy", "name prefix to use in generated code") - oReport = flag.String("v", "y.output", "create grammar report") - oResolved = flag.Bool("ex", false, "explain how were conflicts resolved") - oXErrors = flag.String("xe", "", "generate eXtra errors from examples source file") - oXErrorsGen = flag.String("xegen", "", "generate error from examples source file automatically from the grammar") -) - -func main() { - log.SetFlags(0) - - defer func() { - _, file, line, ok := runtime.Caller(2) - if e := recover(); e != nil { - switch { - case ok: - log.Fatalf("%s:%d: panic: %v", file, line, e) - default: - log.Fatalf("panic: %v", e) - } - } - }() - - flag.Parse() - var in string - switch flag.NArg() { - case 0: - in = os.Stdin.Name() - case 1: - in = flag.Arg(0) - default: - log.Fatal("expected at most one non flag argument") - } - - if err := main1(in); err != nil { - switch x := err.(type) { - case scanner.ErrorList: - for _, v := range x { - fmt.Fprintf(os.Stderr, "%v\n", v) - } - os.Exit(1) - default: - log.Fatal(err) - } - } -} - -type symUsed struct { - sym *y.Symbol - used int -} - -type symsUsed []symUsed - -func (s symsUsed) Len() int { return len(s) } -func (s symsUsed) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -func (s symsUsed) Less(i, j int) bool { - if s[i].used > s[j].used { - return true - } - - if s[i].used < s[j].used { - return false - } - - return strings.ToLower(s[i].sym.Name) < strings.ToLower(s[j].sym.Name) -} - -func main1(in string) (err error) { - var out io.Writer - if nm := *oOut; nm != "" { - var f *os.File - var e error - if f, err = os.Create(nm); err != nil { - return err - } - - defer func() { - if e1 := f.Close(); e1 != nil && err == nil { - err = e1 - } - }() - w := bufio.NewWriter(f) - defer func() { - if e1 := w.Flush(); e1 != nil && err == nil { - err = e1 - } - }() - buf := bytes.NewBuffer(nil) - out = buf - defer func() { - var dest []byte - if dest, e = format.Source(buf.Bytes()); e != nil { - dest = buf.Bytes() - } - - if _, e = w.Write(dest); e != nil && err == nil { - err = e - } - }() - } - - var rep io.Writer - if nm := *oReport; nm != "" { - f, err1 := os.Create(nm) - if err1 != nil { - return err1 - } - - defer func() { - if e := f.Close(); e != nil && err == nil { - err = e - } - }() - w := bufio.NewWriter(f) - defer func() { - if e := w.Flush(); e != nil && err == nil { - err = e - } - }() - rep = w - } - - var xerrors []byte - if nm := *oXErrors; nm != "" { - b, err1 := ioutil.ReadFile(nm) - if err1 != nil { - return err1 - } - - xerrors = b - } - - p, err := y.ProcessFile(token.NewFileSet(), in, &y.Options{ - //NoDefault: *oNoDefault, - AllowConflicts: true, - Closures: *oClosures, - LA: *oLA, - Reducible: *oReducible, - Report: rep, - Resolved: *oResolved, - XErrorsName: *oXErrors, - XErrorsSrc: xerrors, - }) - if err != nil { - return err - } - - if fn := *oXErrorsGen; fn != "" { - f, err := os.OpenFile(fn, os.O_RDWR|os.O_CREATE, 0666) - if err != nil { - return err - } - - b := bufio.NewWriter(f) - if err := p.SkeletonXErrors(b); err != nil { - return err - } - - if err := b.Flush(); err != nil { - return err - } - - if err := f.Close(); err != nil { - return err - } - } - - msu := make(map[*y.Symbol]int, len(p.Syms)) // sym -> usage - for nm, sym := range p.Syms { - if nm == "" || nm == "ε" || nm == "$accept" || nm == "#" { - continue - } - - msu[sym] = 0 - } - var minArg, maxArg int - for _, state := range p.Table { - for _, act := range state { - msu[act.Sym]++ - k, arg := act.Kind() - if k == 'a' { - continue - } - - if k == 'r' { - arg = -arg - } - minArg, maxArg = mathutil.Min(minArg, arg), mathutil.Max(maxArg, arg) - } - } - su := make(symsUsed, 0, len(msu)) - for sym, used := range msu { - su = append(su, symUsed{sym, used}) - } - sort.Sort(su) - - // ----------------------------------------------------------- Prologue - f := strutil.IndentFormatter(out, "\t") - mustFormat(f, "// CAUTION: Generated file - DO NOT EDIT.\n\n") - mustFormat(f, "%s", injectImport(p.Prologue)) - mustFormat(f, ` -type %[1]sSymType %i%s%u - -type %[1]sXError struct { - state, xsym int -} -`, *oPref, p.UnionSrc) - - // ---------------------------------------------------------- Constants - nsyms := map[string]*y.Symbol{} - a := make([]string, 0, len(msu)) - maxTokName := 0 - for sym := range msu { - nm := sym.Name - if nm == "$default" || nm == "$end" || sym.IsTerminal && nm[0] != '\'' && sym.Value > 0 { - maxTokName = mathutil.Max(maxTokName, len(nm)) - a = append(a, nm) - } - nsyms[nm] = sym - } - sort.Strings(a) - mustFormat(f, "\nconst (%i\n") - for _, v := range a { - nm := v - switch nm { - case "error": - nm = *oPref + "ErrCode" - case "$default": - nm = *oPref + "Default" - case "$end": - nm = *oPref + "EOFCode" - } - mustFormat(f, "%s%s = %d\n", nm, strings.Repeat(" ", maxTokName-len(nm)+1), nsyms[v].Value) - } - minArg-- // eg: [-13, 42], minArg -14 maps -13 to 1 so zero cell values -> empty. - mustFormat(f, "\n%sMaxDepth = 200\n", *oPref) - mustFormat(f, "%sTabOfs = %d\n", *oPref, minArg) - mustFormat(f, "%u)") - - // ---------------------------------------------------------- Variables - mustFormat(f, "\n\nvar (%i\n") - - // Lex translation table - mustFormat(f, "%sXLAT = map[int]int{%i\n", *oPref) - xlat := make(map[int]int, len(su)) - var errSym int - for i, v := range su { - if v.sym.Name == "error" { - errSym = i - } - xlat[v.sym.Value] = i - mustFormat(f, "%6d: %3d, // %s (%dx)\n", v.sym.Value, i, v.sym.Name, msu[v.sym]) - } - mustFormat(f, "%u}\n") - - // Symbol names - mustFormat(f, "\n%sSymNames = []string{%i\n", *oPref) - for _, v := range su { - mustFormat(f, "%q,\n", v.sym.Name) - } - mustFormat(f, "%u}\n") - - // Reduction table - mustFormat(f, "\n%sReductions = []struct{xsym, components int}{%i\n", *oPref) - for _, rule := range p.Rules { - mustFormat(f, "{%d, %d},\n", xlat[rule.Sym.Value], len(rule.Components)) - } - mustFormat(f, "%u}\n") - - // XError table - mustFormat(f, "\n%[1]sXErrors = map[%[1]sXError]string{%i\n", *oPref) - for _, xerr := range p.XErrors { - state := xerr.Stack[len(xerr.Stack)-1] - xsym := -1 - if xerr.Lookahead != nil { - xsym = xlat[xerr.Lookahead.Value] - } - mustFormat(f, "%[1]sXError{%d, %d}: \"%s\",\n", *oPref, state, xsym, xerr.Msg) - } - mustFormat(f, "%u}\n\n") - - // Parse table - tbits := 32 - switch n := mathutil.BitLen(maxArg - minArg + 1); { - case n < 8: - tbits = 8 - case n < 16: - tbits = 16 - } - mustFormat(f, "%sParseTab = [%d][]uint%d{%i\n", *oPref, len(p.Table), tbits) - nCells := 0 - var tabRow sortutil.Uint64Slice - for si, state := range p.Table { - tabRow = tabRow[:0] - max := 0 - for _, act := range state { - sym := act.Sym - xsym, ok := xlat[sym.Value] - if !ok { - panic("internal error 001") - } - - max = mathutil.Max(max, xsym) - kind, arg := act.Kind() - switch kind { - case 'a': - arg = 0 - case 'r': - arg *= -1 - } - tabRow = append(tabRow, uint64(xsym)<<32|uint64(arg-minArg)) - } - nCells += max - tabRow.Sort() - col := -1 - if si%5 == 0 { - mustFormat(f, "// %d\n", si) - } - mustFormat(f, "{") - for i, v := range tabRow { - xsym := int(uint32(v >> 32)) - arg := int(uint32(v)) - if col+1 != xsym { - mustFormat(f, "%d: ", xsym) - } - switch { - case i == len(tabRow)-1: - mustFormat(f, "%d", arg) - default: - mustFormat(f, "%d, ", arg) - } - col = xsym - } - mustFormat(f, "},\n") - } - mustFormat(f, "%u}\n") - fmt.Fprintf(os.Stderr, "Parse table entries: %d of %d, x %d bits == %d bytes\n", nCells, len(p.Table)*len(msu), tbits, nCells*tbits/8) - if n := p.ConflictsSR; n != 0 { - fmt.Fprintf(os.Stderr, "conflicts: %d shift/reduce\n", n) - } - if n := p.ConflictsRR; n != 0 { - fmt.Fprintf(os.Stderr, "conflicts: %d reduce/reduce\n", n) - } - - mustFormat(f, `%u) - -var %[1]sDebug = 0 - -type %[1]sLexer interface { - Lex(lval *%[1]sSymType) int - Errorf(format string, a ...interface{}) - Errors() []error -} - -type %[1]sLexerEx interface { - %[1]sLexer - Reduced(rule, state int, lval *%[1]sSymType) bool -} - -func %[1]sSymName(c int) (s string) { - x, ok := %[1]sXLAT[c] - if ok { - return %[1]sSymNames[x] - } - - return __yyfmt__.Sprintf("%%d", c) -} - -func %[1]slex1(yylex %[1]sLexer, lval *%[1]sSymType) (n int) { - n = yylex.Lex(lval) - if n <= 0 { - n = %[1]sEOFCode - } - if %[1]sDebug >= 3 { - __yyfmt__.Printf("\nlex %%s(%%#x %%d), %[4]s: %[3]s\n", %[1]sSymName(n), n, n, %[4]s) - } - return n -} - -func %[1]sParse(yylex %[1]sLexer, parser *Parser) int { - const yyError = %[2]d - - yyEx, _ := yylex.(%[1]sLexerEx) - var yyn int - parser.yylval = %[1]sSymType{} - parser.yyVAL = %[1]sSymType{} - yyS := parser.cache - - Nerrs := 0 /* number of errors */ - Errflag := 0 /* error recovery flag */ - yyerrok := func() { - if %[1]sDebug >= 2 { - __yyfmt__.Printf("yyerrok()\n") - } - Errflag = 0 - } - _ = yyerrok - yystate := 0 - yychar := -1 - var yyxchar int - var yyshift int - yyp := -1 - goto yystack - -ret0: - return 0 - -ret1: - return 1 - -yystack: - /* put a state and value onto the stack */ - yyp++ - if yyp >= len(yyS) { - nyys := make([]%[1]sSymType, len(yyS)*2) - copy(nyys, yyS) - yyS = nyys - parser.cache = yyS - } - yyS[yyp] = parser.yyVAL - yyS[yyp].yys = yystate - -yynewstate: - if yychar < 0 { - yychar = %[1]slex1(yylex, &parser.yylval) - var ok bool - if yyxchar, ok = %[1]sXLAT[yychar]; !ok { - yyxchar = len(%[1]sSymNames) // > tab width - } - } - if %[1]sDebug >= 4 { - var a []int - for _, v := range yyS[:yyp+1] { - a = append(a, v.yys) - } - __yyfmt__.Printf("state stack %%v\n", a) - } - row := %[1]sParseTab[yystate] - yyn = 0 - if yyxchar < len(row) { - if yyn = int(row[yyxchar]); yyn != 0 { - yyn += %[1]sTabOfs - } - } - switch { - case yyn > 0: // shift - yychar = -1 - parser.yyVAL = parser.yylval - yystate = yyn - yyshift = yyn - if %[1]sDebug >= 2 { - __yyfmt__.Printf("shift, and goto state %%d\n", yystate) - } - if Errflag > 0 { - Errflag-- - } - goto yystack - case yyn < 0: // reduce - case yystate == 1: // accept - if %[1]sDebug >= 2 { - __yyfmt__.Println("accept") - } - goto ret0 - } - - if yyn == 0 { - /* error ... attempt to resume parsing */ - switch Errflag { - case 0: /* brand new error */ - if %[1]sDebug >= 1 { - __yyfmt__.Printf("no action for %%s in state %%d\n", %[1]sSymName(yychar), yystate) - } - msg, ok := %[1]sXErrors[%[1]sXError{yystate, yyxchar}] - if !ok { - msg, ok = %[1]sXErrors[%[1]sXError{yystate, -1}] - } - if !ok && yyshift != 0 { - msg, ok = %[1]sXErrors[%[1]sXError{yyshift, yyxchar}] - } - if !ok { - msg, ok = %[1]sXErrors[%[1]sXError{yyshift, -1}] - } - if !ok || msg == "" { - msg = "syntax error" - } - // ignore goyacc error message - yylex.Errorf("") - Nerrs++ - fallthrough - - case 1, 2: /* incompletely recovered error ... try again */ - Errflag = 3 - - /* find a state where "error" is a legal shift action */ - for yyp >= 0 { - row := %[1]sParseTab[yyS[yyp].yys] - if yyError < len(row) { - yyn = int(row[yyError])+%[1]sTabOfs - if yyn > 0 { // hit - if %[1]sDebug >= 2 { - __yyfmt__.Printf("error recovery found error shift in state %%d\n", yyS[yyp].yys) - } - yystate = yyn /* simulate a shift of "error" */ - goto yystack - } - } - - /* the current p has no shift on "error", pop stack */ - if %[1]sDebug >= 2 { - __yyfmt__.Printf("error recovery pops state %%d\n", yyS[yyp].yys) - } - yyp-- - } - /* there is no state on the stack with an error shift ... abort */ - if %[1]sDebug >= 2 { - __yyfmt__.Printf("error recovery failed\n") - } - goto ret1 - - case 3: /* no shift yet; clobber input char */ - if %[1]sDebug >= 2 { - __yyfmt__.Printf("error recovery discards %%s\n", %[1]sSymName(yychar)) - } - if yychar == %[1]sEOFCode { - goto ret1 - } - - yychar = -1 - goto yynewstate /* try again in the same state */ - } - } - - r := -yyn - x0 := %[1]sReductions[r] - x, n := x0.xsym, x0.components - yypt := yyp - _ = yypt // guard against "declared and not used" - - yyp -= n - if yyp+1 >= len(yyS) { - nyys := make([]%[1]sSymType, len(yyS)*2) - copy(nyys, yyS) - yyS = nyys - parser.cache = yyS - } - parser.yyVAL = yyS[yyp+1] - - /* consult goto table to find next state */ - exState := yystate - yystate = int(%[1]sParseTab[yyS[yyp].yys][x])+%[1]sTabOfs - /* reduction by production r */ - if %[1]sDebug >= 2 { - __yyfmt__.Printf("reduce using rule %%v (%%s), and goto state %%d\n", r, %[1]sSymNames[x], yystate) - } - - switch r {%i -`, - *oPref, errSym, *oDlvalf, *oDlval) - for r, rule := range p.Rules { - if rule.Action == nil { - continue - } - - action := rule.Action.Values - if len(action) == 0 { - continue - } - - if len(action) == 1 { - part := action[0] - if part.Type == parser.ActionValueGo { - src := part.Src - src = src[1 : len(src)-1] // Remove lead '{' and trail '}' - if strings.TrimSpace(src) == "" { - continue - } - } - } - - components := rule.Components - typ := rule.Sym.Type - max := len(components) - if p1 := rule.Parent; p1 != nil { - max = rule.MaxParentDlr - components = p1.Components - } - mustFormat(f, "case %d: ", r) - for _, part := range action { - num := part.Num - switch part.Type { - case parser.ActionValueGo: - mustFormat(f, "%s", part.Src) - case parser.ActionValueDlrDlr: - mustFormat(f, "parser.yyVAL.%s", typ) - if typ == "" { - panic("internal error 002") - } - case parser.ActionValueDlrNum: - typ := p.Syms[components[num-1]].Type - if typ == "" { - panic("internal error 003") - } - mustFormat(f, "yyS[yypt-%d].%s", max-num, typ) - case parser.ActionValueDlrTagDlr: - mustFormat(f, "parser.yyVAL.%s", part.Tag) - case parser.ActionValueDlrTagNum: - mustFormat(f, "yyS[yypt-%d].%s", max-num, part.Tag) - } - } - mustFormat(f, "\n") - } - mustFormat(f, `%u - } - - if yyEx != nil && yyEx.Reduced(r, exState, &parser.yyVAL) { - return -1 - } - goto yystack /* stack new state and value */ -} - -%[2]s -`, *oPref, p.Tail) - _ = oNoLines //TODO Ignored for now - return nil -} - -func injectImport(src string) string { - const inj = ` - -import __yyfmt__ "fmt" -` - fset := token.NewFileSet() - file := fset.AddFile("", -1, len(src)) - var s scanner.Scanner - s.Init( - file, - []byte(src), - nil, - scanner.ScanComments, - ) - for { - switch _, tok, _ := s.Scan(); tok { - case token.EOF: - return inj + src - case token.PACKAGE: - s.Scan() // ident - pos, _, _ := s.Scan() - ofs := file.Offset(pos) - return src[:ofs] + inj + src[ofs:] - } - } -} - -func mustFormat(f strutil.Formatter, format string, args ...interface{}) { - _, err := f.Format(format, args...) - if err != nil { - log.Fatalf("format error %v", err) - } -} diff --git a/parser/lexer_test.go b/parser/lexer_test.go deleted file mode 100644 index a9a066665c436..0000000000000 --- a/parser/lexer_test.go +++ /dev/null @@ -1,363 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package parser - -import ( - "fmt" - "unicode" - - . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/util/testleak" -) - -var _ = Suite(&testLexerSuite{}) - -type testLexerSuite struct { -} - -func (s *testLexerSuite) TestTokenID(c *C) { - defer testleak.AfterTest(c)() - for str, tok := range tokenMap { - l := NewScanner(str) - var v yySymType - tok1 := l.Lex(&v) - c.Check(tok, Equals, tok1) - } -} - -func (s *testLexerSuite) TestSingleChar(c *C) { - defer testleak.AfterTest(c)() - table := []byte{'|', '&', '-', '+', '*', '/', '%', '^', '~', '(', ',', ')'} - for _, tok := range table { - l := NewScanner(string(tok)) - var v yySymType - tok1 := l.Lex(&v) - c.Check(int(tok), Equals, tok1) - } -} - -type testCaseItem struct { - str string - tok int -} - -func (s *testLexerSuite) TestSingleCharOther(c *C) { - defer testleak.AfterTest(c)() - table := []testCaseItem{ - {"AT", identifier}, - {"?", paramMarker}, - {"PLACEHOLDER", identifier}, - {"=", eq}, - {".", int('.')}, - } - runTest(c, table) -} - -func (s *testLexerSuite) TestAtLeadingIdentifier(c *C) { - defer testleak.AfterTest(c)() - table := []testCaseItem{ - {"@", singleAtIdentifier}, - {"@''", singleAtIdentifier}, - {"@1", singleAtIdentifier}, - {"@.1_", singleAtIdentifier}, - {"@-1.", singleAtIdentifier}, - {"@~", singleAtIdentifier}, - {"@$", singleAtIdentifier}, - {"@a_3cbbc", singleAtIdentifier}, - {"@`a_3cbbc`", singleAtIdentifier}, - {"@-3cbbc", singleAtIdentifier}, - {"@!3cbbc", singleAtIdentifier}, - {"@@global.test", doubleAtIdentifier}, - {"@@session.test", doubleAtIdentifier}, - {"@@local.test", doubleAtIdentifier}, - {"@@test", doubleAtIdentifier}, - } - runTest(c, table) -} - -func (s *testLexerSuite) TestUnderscoreCS(c *C) { - defer testleak.AfterTest(c)() - var v yySymType - scanner := NewScanner(`_utf8"string"`) - tok := scanner.Lex(&v) - c.Check(tok, Equals, underscoreCS) - tok = scanner.Lex(&v) - c.Check(tok, Equals, stringLit) - - scanner.reset("N'string'") - tok = scanner.Lex(&v) - c.Check(tok, Equals, underscoreCS) - tok = scanner.Lex(&v) - c.Check(tok, Equals, stringLit) -} - -func (s *testLexerSuite) TestLiteral(c *C) { - defer testleak.AfterTest(c)() - table := []testCaseItem{ - {`'''a'''`, stringLit}, - {`''a''`, stringLit}, - {`""a""`, stringLit}, - {`\'a\'`, int('\\')}, - {`\"a\"`, int('\\')}, - {"0.2314", decLit}, - {"1234567890123456789012345678901234567890", decLit}, - {"132.313", decLit}, - {"132.3e231", floatLit}, - {"132.3e-231", floatLit}, - {"23416", intLit}, - {"123test", identifier}, - {"123" + string(unicode.ReplacementChar) + "xxx", identifier}, - {"0", intLit}, - {"0x3c26", hexLit}, - {"x'13181C76734725455A'", hexLit}, - {"0b01", bitLit}, - {fmt.Sprintf("t1%c", 0), identifier}, - {"N'some text'", underscoreCS}, - {"n'some text'", underscoreCS}, - {"\\N", null}, - {".*", int('.')}, // `.`, `*` - {".1_t_1_x", int('.')}, // `.`, `1_t_1_x` - // Issue #3954 - {".1e23", floatLit}, // `.1e23` - {".123", decLit}, // `.123` - {".1*23", decLit}, // `.1`, `*`, `23` - {".1,23", decLit}, // `.1`, `,`, `23` - {".1 23", decLit}, // `.1`, `23` - // TODO: See #3963. The following test cases do not test the ambiguity. - {".1$23", int('.')}, // `.`, `1$23` - {".1a23", int('.')}, // `.`, `1a23` - {".1e23$23", int('.')}, // `.`, `1e23$23` - {".1e23a23", int('.')}, // `.`, `1e23a23` - {".1C23", int('.')}, // `.`, `1C23` - {".1\u0081", int('.')}, // `.`, `1\u0081` - {".1\uff34", int('.')}, // `.`, `1\uff34` - {`b''`, bitLit}, - {`b'0101'`, bitLit}, - {`0b0101`, bitLit}, - } - runTest(c, table) -} - -func runTest(c *C, table []testCaseItem) { - var val yySymType - for _, v := range table { - l := NewScanner(v.str) - tok := l.Lex(&val) - c.Check(tok, Equals, v.tok, Commentf(v.str)) - } -} - -func (s *testLexerSuite) TestComment(c *C) { - defer testleak.AfterTest(c)() - - table := []testCaseItem{ - {"-- select --\n1", intLit}, - {"/*!40101 SET character_set_client = utf8 */;", set}, - {"/*+ BKA(t1) */", hintBegin}, - {"/* SET character_set_client = utf8 */;", int(';')}, - {"/* some comments */ SELECT ", selectKwd}, - {`-- comment continues to the end of line -SELECT`, selectKwd}, - {`# comment continues to the end of line -SELECT`, selectKwd}, - {"#comment\n123", intLit}, - {"--5", int('-')}, - {"--\nSELECT", selectKwd}, - {"--\tSELECT", 0}, - {"--\r\nSELECT", selectKwd}, - {"--", 0}, - } - runTest(c, table) -} - -func (s *testLexerSuite) TestscanQuotedIdent(c *C) { - defer testleak.AfterTest(c)() - l := NewScanner("`fk`") - l.r.peek() - tok, pos, lit := scanQuotedIdent(l) - c.Assert(pos.Offset, Equals, 0) - c.Assert(tok, Equals, quotedIdentifier) - c.Assert(lit, Equals, "fk") -} - -func (s *testLexerSuite) TestscanString(c *C) { - defer testleak.AfterTest(c)() - table := []struct { - raw string - expect string - }{ - {`' \n\tTest String'`, " \n\tTest String"}, - {`'\x\B'`, "xB"}, - {`'\0\'\"\b\n\r\t\\'`, "\000'\"\b\n\r\t\\"}, - {`'\Z'`, string(26)}, - {`'\%\_'`, `\%\_`}, - {`'hello'`, "hello"}, - {`'"hello"'`, `"hello"`}, - {`'""hello""'`, `""hello""`}, - {`'hel''lo'`, "hel'lo"}, - {`'\'hello'`, "'hello"}, - {`"hello"`, "hello"}, - {`"'hello'"`, "'hello'"}, - {`"''hello''"`, "''hello''"}, - {`"hel""lo"`, `hel"lo`}, - {`"\"hello"`, `"hello`}, - {`'disappearing\ backslash'`, "disappearing backslash"}, - {"'한국의中文UTF8およびテキストトラック'", "한국의中文UTF8およびテキストトラック"}, - {"'\\a\x90'", "a\x90"}, - {`"\aèàø»"`, `aèàø»`}, - } - - for _, v := range table { - l := NewScanner(v.raw) - tok, pos, lit := l.scan() - c.Assert(tok, Equals, stringLit) - c.Assert(pos.Offset, Equals, 0) - c.Assert(lit, Equals, v.expect) - } -} - -func (s *testLexerSuite) TestIdentifier(c *C) { - defer testleak.AfterTest(c)() - replacementString := string(unicode.ReplacementChar) + "xxx" - table := [][2]string{ - {`哈哈`, "哈哈"}, - {"`numeric`", "numeric"}, - {"\r\n \r \n \tthere\t \n", "there"}, - {`5number`, `5number`}, - {"1_x", "1_x"}, - {"0_x", "0_x"}, - {replacementString, replacementString}, - {fmt.Sprintf("t1%cxxx", 0), "t1"}, - } - l := &Scanner{} - for _, item := range table { - l.reset(item[0]) - var v yySymType - tok := l.Lex(&v) - c.Assert(tok, Equals, identifier) - c.Assert(v.ident, Equals, item[1]) - } -} - -func (s *testLexerSuite) TestSpecialComment(c *C) { - l := NewScanner("/*!40101 select\n5*/") - tok, pos, lit := l.scan() - c.Assert(tok, Equals, identifier) - c.Assert(lit, Equals, "select") - c.Assert(pos, Equals, Pos{0, 0, 9}) - - tok, pos, lit = l.scan() - c.Assert(tok, Equals, intLit) - c.Assert(lit, Equals, "5") - c.Assert(pos, Equals, Pos{1, 1, 16}) -} - -func (s *testLexerSuite) TestOptimizerHint(c *C) { - l := NewScanner(" /*+ BKA(t1) */") - tokens := []struct { - tok int - lit string - pos int - }{ - {hintBegin, "", 2}, - {identifier, "BKA", 6}, - {int('('), "(", 9}, - {identifier, "t1", 10}, - {int(')'), ")", 12}, - {hintEnd, "", 14}, - } - for i := 0; ; i++ { - tok, pos, lit := l.scan() - if tok == 0 { - return - } - c.Assert(tok, Equals, tokens[i].tok, Commentf("%d", i)) - c.Assert(lit, Equals, tokens[i].lit, Commentf("%d", i)) - c.Assert(pos.Offset, Equals, tokens[i].pos, Commentf("%d", i)) - } -} - -func (s *testLexerSuite) TestInt(c *C) { - tests := []struct { - input string - expect uint64 - }{ - {"01000001783", 1000001783}, - {"00001783", 1783}, - {"0", 0}, - {"0000", 0}, - {"01", 1}, - {"10", 10}, - } - scanner := NewScanner("") - for _, t := range tests { - var v yySymType - scanner.reset(t.input) - tok := scanner.Lex(&v) - c.Assert(tok, Equals, intLit) - switch i := v.item.(type) { - case int64: - c.Assert(uint64(i), Equals, t.expect) - case uint64: - c.Assert(i, Equals, t.expect) - default: - c.Fail() - } - } -} - -func (s *testLexerSuite) TestSQLModeANSIQuotes(c *C) { - tests := []struct { - input string - tok int - ident string - }{ - {`"identifier"`, identifier, "identifier"}, - {"`identifier`", identifier, "identifier"}, - {`"identifier""and"`, identifier, `identifier"and`}, - {`'string''string'`, stringLit, "string'string"}, - {`"identifier"'and'`, identifier, "identifier"}, - {`'string'"identifier"`, stringLit, "string"}, - } - scanner := NewScanner("") - scanner.SetSQLMode(mysql.ModeANSIQuotes) - for _, t := range tests { - var v yySymType - scanner.reset(t.input) - tok := scanner.Lex(&v) - c.Assert(tok, Equals, t.tok) - c.Assert(v.ident, Equals, t.ident) - } - scanner.reset(`'string' 'string'`) - var v yySymType - tok := scanner.Lex(&v) - c.Assert(tok, Equals, stringLit) - c.Assert(v.ident, Equals, "string") - tok = scanner.Lex(&v) - c.Assert(tok, Equals, stringLit) - c.Assert(v.ident, Equals, "string") -} - -func (s *testLexerSuite) TestIllegal(c *C) { - defer testleak.AfterTest(c)() - table := []testCaseItem{ - {"'", 0}, - {"'fu", 0}, - {"'\\n", 0}, - {"'\\", 0}, - {fmt.Sprintf("%c", 0), invalid}, - } - runTest(c, table) -} diff --git a/parser/opcode/opcode_test.go b/parser/opcode/opcode_test.go deleted file mode 100644 index a4c2821b249f1..0000000000000 --- a/parser/opcode/opcode_test.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package opcode - -import ( - "bytes" - "testing" -) - -func TestT(t *testing.T) { - op := Plus - if op.String() != "plus" { - t.Fatalf("invalid op code") - } - - if len(Ops) != len(opsLiteral) { - t.Error("inconsistent count ops and opsliteral") - } - var buf bytes.Buffer - for op := range Ops { - op.Format(&buf) - if buf.String() != opsLiteral[op] { - t.Error("format op fail", op) - } - buf.Reset() - } - - // Test invalid opcode - defer func() { - recover() - }() - - op = 0 - s := op.String() - if len(s) > 0 { - t.Fail() - } -} diff --git a/parser/parser.y b/parser/parser.y deleted file mode 100644 index 2950d6f9353c4..0000000000000 --- a/parser/parser.y +++ /dev/null @@ -1,7210 +0,0 @@ -%{ -// Copyright 2013 The ql Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSES/QL-LICENSE file. - -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -// Initial yacc source generated by ebnf2y[1] -// at 2013-10-04 23:10:47.861401015 +0200 CEST -// -// $ ebnf2y -o ql.y -oe ql.ebnf -start StatementList -pkg ql -p _ -// -// [1]: http://github.com/cznic/ebnf2y - -package parser - -import ( - "strings" - - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/parser/opcode" - "github.com/pingcap/tidb/util/auth" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/parser/types" -) - -%} - -%union { - offset int // offset - item interface{} - ident string - expr ast.ExprNode - statement ast.StmtNode -} - -%token - /*yy:token "%c" */ identifier "identifier" - /*yy:token "_%c" */ underscoreCS "UNDERSCORE_CHARSET" - /*yy:token "\"%c\"" */ stringLit "string literal" - singleAtIdentifier "identifier with single leading at" - doubleAtIdentifier "identifier with double leading at" - invalid "a special token never used by parser, used by lexer to indicate error" - hintBegin "hintBegin is a virtual token for optimizer hint grammar" - hintEnd "hintEnd is a virtual token for optimizer hint grammar" - andand "&&" - pipes "||" - - /* The following tokens belong to ODBCDateTimeType. */ - odbcDateType "d" - odbcTimeType "t" - odbcTimestampType "ts" - - /* The following tokens belong to ReservedKeyword. */ - add "ADD" - all "ALL" - alter "ALTER" - analyze "ANALYZE" - and "AND" - as "AS" - asc "ASC" - between "BETWEEN" - bigIntType "BIGINT" - binaryType "BINARY" - blobType "BLOB" - both "BOTH" - by "BY" - cascade "CASCADE" - caseKwd "CASE" - change "CHANGE" - character "CHARACTER" - charType "CHAR" - check "CHECK" - collate "COLLATE" - column "COLUMN" - constraint "CONSTRAINT" - convert "CONVERT" - create "CREATE" - cross "CROSS" - currentDate "CURRENT_DATE" - currentTime "CURRENT_TIME" - currentTs "CURRENT_TIMESTAMP" - currentUser "CURRENT_USER" - database "DATABASE" - databases "DATABASES" - dayHour "DAY_HOUR" - dayMicrosecond "DAY_MICROSECOND" - dayMinute "DAY_MINUTE" - daySecond "DAY_SECOND" - decimalType "DECIMAL" - defaultKwd "DEFAULT" - delayed "DELAYED" - deleteKwd "DELETE" - desc "DESC" - describe "DESCRIBE" - distinct "DISTINCT" - distinctRow "DISTINCTROW" - div "DIV" - doubleType "DOUBLE" - drop "DROP" - dual "DUAL" - elseKwd "ELSE" - enclosed "ENCLOSED" - escaped "ESCAPED" - exists "EXISTS" - explain "EXPLAIN" - falseKwd "FALSE" - floatType "FLOAT" - forKwd "FOR" - force "FORCE" - foreign "FOREIGN" - from "FROM" - fulltext "FULLTEXT" - generated "GENERATED" - grant "GRANT" - group "GROUP" - having "HAVING" - highPriority "HIGH_PRIORITY" - hourMicrosecond "HOUR_MICROSECOND" - hourMinute "HOUR_MINUTE" - hourSecond "HOUR_SECOND" - ifKwd "IF" - ignore "IGNORE" - in "IN" - index "INDEX" - infile "INFILE" - inner "INNER" - integerType "INTEGER" - interval "INTERVAL" - into "INTO" - is "IS" - insert "INSERT" - intType "INT" - int1Type "INT1" - int2Type "INT2" - int3Type "INT3" - int4Type "INT4" - int8Type "INT8" - join "JOIN" - key "KEY" - keys "KEYS" - kill "KILL" - leading "LEADING" - left "LEFT" - like "LIKE" - limit "LIMIT" - lines "LINES" - load "LOAD" - localTime "LOCALTIME" - localTs "LOCALTIMESTAMP" - lock "LOCK" - longblobType "LONGBLOB" - longtextType "LONGTEXT" - lowPriority "LOW_PRIORITY" - maxValue "MAXVALUE" - mediumblobType "MEDIUMBLOB" - mediumIntType "MEDIUMINT" - mediumtextType "MEDIUMTEXT" - minuteMicrosecond "MINUTE_MICROSECOND" - minuteSecond "MINUTE_SECOND" - mod "MOD" - not "NOT" - noWriteToBinLog "NO_WRITE_TO_BINLOG" - null "NULL" - numericType "NUMERIC" - nvarcharType "NVARCHAR" - on "ON" - option "OPTION" - or "OR" - order "ORDER" - outer "OUTER" - packKeys "PACK_KEYS" - partition "PARTITION" - precisionType "PRECISION" - primary "PRIMARY" - procedure "PROCEDURE" - shardRowIDBits "SHARD_ROW_ID_BITS" - rangeKwd "RANGE" - read "READ" - realType "REAL" - references "REFERENCES" - regexpKwd "REGEXP" - rename "RENAME" - repeat "REPEAT" - replace "REPLACE" - restrict "RESTRICT" - revoke "REVOKE" - right "RIGHT" - rlike "RLIKE" - secondMicrosecond "SECOND_MICROSECOND" - selectKwd "SELECT" - set "SET" - show "SHOW" - smallIntType "SMALLINT" - sql "SQL" - sqlCalcFoundRows "SQL_CALC_FOUND_ROWS" - starting "STARTING" - straightJoin "STRAIGHT_JOIN" - tableKwd "TABLE" - stored "STORED" - terminated "TERMINATED" - then "THEN" - tinyblobType "TINYBLOB" - tinyIntType "TINYINT" - tinytextType "TINYTEXT" - to "TO" - trailing "TRAILING" - trigger "TRIGGER" - trueKwd "TRUE" - unique "UNIQUE" - union "UNION" - unlock "UNLOCK" - unsigned "UNSIGNED" - update "UPDATE" - usage "USAGE" - use "USE" - using "USING" - utcDate "UTC_DATE" - utcTimestamp "UTC_TIMESTAMP" - utcTime "UTC_TIME" - values "VALUES" - long "LONG" - varcharType "VARCHAR" - varbinaryType "VARBINARY" - virtual "VIRTUAL" - when "WHEN" - where "WHERE" - write "WRITE" - with "WITH" - xor "XOR" - yearMonth "YEAR_MONTH" - zerofill "ZEROFILL" - natural "NATURAL" - - /* The following tokens belong to UnReservedKeyword. */ - action "ACTION" - after "AFTER" - always "ALWAYS" - algorithm "ALGORITHM" - any "ANY" - ascii "ASCII" - autoIncrement "AUTO_INCREMENT" - avgRowLength "AVG_ROW_LENGTH" - avg "AVG" - begin "BEGIN" - binlog "BINLOG" - bitType "BIT" - booleanType "BOOLEAN" - boolType "BOOL" - btree "BTREE" - byteType "BYTE" - cascaded "CASCADED" - charsetKwd "CHARSET" - checksum "CHECKSUM" - cleanup "CLEANUP" - client "CLIENT" - coalesce "COALESCE" - collation "COLLATION" - columns "COLUMNS" - comment "COMMENT" - commit "COMMIT" - committed "COMMITTED" - compact "COMPACT" - compressed "COMPRESSED" - compression "COMPRESSION" - connection "CONNECTION" - consistent "CONSISTENT" - day "DAY" - data "DATA" - dateType "DATE" - datetimeType "DATETIME" - deallocate "DEALLOCATE" - definer "DEFINER" - delayKeyWrite "DELAY_KEY_WRITE" - disable "DISABLE" - do "DO" - duplicate "DUPLICATE" - dynamic "DYNAMIC" - enable "ENABLE" - end "END" - engine "ENGINE" - engines "ENGINES" - enum "ENUM" - event "EVENT" - events "EVENTS" - escape "ESCAPE" - exclusive "EXCLUSIVE" - execute "EXECUTE" - fields "FIELDS" - first "FIRST" - fixed "FIXED" - flush "FLUSH" - format "FORMAT" - full "FULL" - function "FUNCTION" - grants "GRANTS" - hash "HASH" - hour "HOUR" - identified "IDENTIFIED" - isolation "ISOLATION" - indexes "INDEXES" - invoker "INVOKER" - jsonType "JSON" - keyBlockSize "KEY_BLOCK_SIZE" - local "LOCAL" - less "LESS" - level "LEVEL" - master "MASTER" - microsecond "MICROSECOND" - minute "MINUTE" - mode "MODE" - modify "MODIFY" - month "MONTH" - maxRows "MAX_ROWS" - maxConnectionsPerHour "MAX_CONNECTIONS_PER_HOUR" - maxQueriesPerHour "MAX_QUERIES_PER_HOUR" - maxUpdatesPerHour "MAX_UPDATES_PER_HOUR" - maxUserConnections "MAX_USER_CONNECTIONS" - merge "MERGE" - minRows "MIN_ROWS" - names "NAMES" - national "NATIONAL" - no "NO" - none "NONE" - offset "OFFSET" - only "ONLY" - password "PASSWORD" - partitions "PARTITIONS" - pipesAsOr - plugins "PLUGINS" - prepare "PREPARE" - privileges "PRIVILEGES" - process "PROCESS" - processlist "PROCESSLIST" - profiles "PROFILES" - quarter "QUARTER" - query "QUERY" - queries "QUERIES" - quick "QUICK" - recover "RECOVER" - redundant "REDUNDANT" - reload "RELOAD" - repeatable "REPEATABLE" - replication "REPLICATION" - reverse "REVERSE" - rollback "ROLLBACK" - routine "ROUTINE" - row "ROW" - rowCount "ROW_COUNT" - rowFormat "ROW_FORMAT" - second "SECOND" - security "SECURITY" - separator "SEPARATOR" - serializable "SERIALIZABLE" - session "SESSION" - share "SHARE" - shared "SHARED" - signed "SIGNED" - slave "SLAVE" - slow "SLOW" - snapshot "SNAPSHOT" - sqlCache "SQL_CACHE" - sqlNoCache "SQL_NO_CACHE" - start "START" - statsPersistent "STATS_PERSISTENT" - status "STATUS" - subpartition "SUBPARTITION" - subpartitions "SUBPARTITIONS" - super "SUPER" - some "SOME" - global "GLOBAL" - tables "TABLES" - tablespace "TABLESPACE" - temporary "TEMPORARY" - temptable "TEMPTABLE" - textType "TEXT" - than "THAN" - timeType "TIME" - timestampType "TIMESTAMP" - trace "TRACE" - transaction "TRANSACTION" - triggers "TRIGGERS" - truncate "TRUNCATE" - uncommitted "UNCOMMITTED" - unknown "UNKNOWN" - user "USER" - undefined "UNDEFINED" - value "VALUE" - variables "VARIABLES" - view "VIEW" - warnings "WARNINGS" - identSQLErrors "ERRORS" - week "WEEK" - yearType "YEAR" - - /* The following tokens belong to NotKeywordToken. */ - addDate "ADDDATE" - bitAnd "BIT_AND" - bitOr "BIT_OR" - bitXor "BIT_XOR" - cast "CAST" - copyKwd "COPY" - count "COUNT" - curTime "CURTIME" - dateAdd "DATE_ADD" - dateSub "DATE_SUB" - extract "EXTRACT" - getFormat "GET_FORMAT" - groupConcat "GROUP_CONCAT" - inplace "INPLACE" - internal "INTERNAL" - min "MIN" - max "MAX" - maxExecutionTime "MAX_EXECUTION_TIME" - now "NOW" - position "POSITION" - recent "RECENT" - subDate "SUBDATE" - sum "SUM" - substring "SUBSTRING" - timestampAdd "TIMESTAMPADD" - timestampDiff "TIMESTAMPDIFF" - top "TOP" - trim "TRIM" - - /* The following tokens belong to TiDBKeyword. */ - admin "ADMIN" - buckets "BUCKETS" - cancel "CANCEL" - ddl "DDL" - jobs "JOBS" - job "JOB" - stats "STATS" - statsMeta "STATS_META" - statsHistograms "STATS_HISTOGRAMS" - statsBuckets "STATS_BUCKETS" - statsHealthy "STATS_HEALTHY" - tidb "TIDB" - tidbHJ "TIDB_HJ" - tidbSMJ "TIDB_SMJ" - tidbINLJ "TIDB_INLJ" - - builtinAddDate - builtinBitAnd - builtinBitOr - builtinBitXor - builtinCast - builtinCount - builtinCurDate - builtinCurTime - builtinDateAdd - builtinDateSub - builtinExtract - builtinGroupConcat - builtinMax - builtinMin - builtinNow - builtinPosition - builtinStddevPop - builtinSubDate - builtinSubstring - builtinSum - builtinSysDate - builtinTrim - builtinUser - builtinVarPop - builtinVarSamp - -%token - - /*yy:token "1.%d" */ floatLit "floating-point literal" - /*yy:token "1.%d" */ decLit "decimal literal" - /*yy:token "%d" */ intLit "integer literal" - /*yy:token "%x" */ hexLit "hexadecimal literal" - /*yy:token "%b" */ bitLit "bit literal" - - andnot "&^" - assignmentEq ":=" - eq "=" - ge ">=" - le "<=" - jss "->" - juss "->>" - lsh "<<" - neq "!=" - neqSynonym "<>" - nulleq "<=>" - paramMarker "?" - rsh ">>" - -%token not2 - -%type - Expression "expression" - MaxValueOrExpression "maxvalue or expression" - BoolPri "boolean primary expression" - ExprOrDefault "expression or default" - PredicateExpr "Predicate expression factor" - SetExpr "Set variable statement value's expression" - BitExpr "bit expression" - SimpleExpr "simple expression" - SimpleIdent "Simple Identifier expression" - SumExpr "aggregate functions" - FunctionCallGeneric "Function call with Identifier" - FunctionCallKeyword "Function call with keyword as function name" - FunctionCallNonKeyword "Function call with nonkeyword as function name" - Literal "literal value" - Variable "User or system variable" - SystemVariable "System defined variable name" - UserVariable "User defined variable name" - SubSelect "Sub Select" - StringLiteral "text literal" - ExpressionOpt "Optional expression" - SignedLiteral "Literal or NumLiteral with sign" - DefaultValueExpr "DefaultValueExpr(Now or Signed Literal)" - NowSymOptionFraction "NowSym with optional fraction part" - -%type - AdminStmt "Check table statement or show ddl statement" - AlterTableStmt "Alter table statement" - AlterUserStmt "Alter user statement" - AnalyzeTableStmt "Analyze table statement" - BeginTransactionStmt "BEGIN TRANSACTION statement" - BinlogStmt "Binlog base64 statement" - CommitStmt "COMMIT statement" - CreateTableStmt "CREATE TABLE statement" - CreateViewStmt "CREATE VIEW stetement" - CreateUserStmt "CREATE User statement" - CreateDatabaseStmt "Create Database Statement" - CreateIndexStmt "CREATE INDEX statement" - DoStmt "Do statement" - DropDatabaseStmt "DROP DATABASE statement" - DropIndexStmt "DROP INDEX statement" - DropStatsStmt "DROP STATS statement" - DropTableStmt "DROP TABLE statement" - DropUserStmt "DROP USER" - DropViewStmt "DROP VIEW statement" - DeallocateStmt "Deallocate prepared statement" - DeleteFromStmt "DELETE FROM statement" - EmptyStmt "empty statement" - ExecuteStmt "Execute statement" - ExplainStmt "EXPLAIN statement" - ExplainableStmt "explainable statement" - FlushStmt "Flush statement" - GrantStmt "Grant statement" - InsertIntoStmt "INSERT INTO statement" - KillStmt "Kill statement" - LoadDataStmt "Load data statement" - LoadStatsStmt "Load statistic statement" - LockTablesStmt "Lock tables statement" - PreparedStmt "PreparedStmt" - SelectStmt "SELECT statement" - RenameTableStmt "rename table statement" - ReplaceIntoStmt "REPLACE INTO statement" - RevokeStmt "Revoke statement" - RollbackStmt "ROLLBACK statement" - SetStmt "Set variable statement" - ShowStmt "Show engines/databases/tables/columns/warnings/status statement" - Statement "statement" - TraceStmt "TRACE statement" - TraceableStmt "traceable statment" - TruncateTableStmt "TRUNCATE TABLE statement" - UnlockTablesStmt "Unlock tables statement" - UpdateStmt "UPDATE statement" - UnionStmt "Union select state ment" - UseStmt "USE statement" - -%type - AdminShowSlow "Admin Show Slow statement" - AlterTableOptionListOpt "alter table option list opt" - AlterTableSpec "Alter table specification" - AlterTableSpecList "Alter table specification list" - AnyOrAll "Any or All for subquery" - Assignment "assignment" - AssignmentList "assignment list" - AssignmentListOpt "assignment list opt" - AuthOption "User auth option" - AuthString "Password string value" - OptionalBraces "optional braces" - CastType "Cast function target type" - CharsetName "Character set name" - ColumnDef "table column definition" - ColumnDefList "table column definition list" - ColumnName "column name" - ColumnNameList "column name list" - ColumnList "column list" - ColumnNameListOpt "column name list opt" - ColumnNameListOptWithBrackets "column name list opt with brackets" - ColumnSetValue "insert statement set value by column name" - ColumnSetValueList "insert statement set value by column name list" - CompareOp "Compare opcode" - ColumnOption "column definition option" - ColumnOptionList "column definition option list" - VirtualOrStored "indicate generated column is stored or not" - ColumnOptionListOpt "optional column definition option list" - Constraint "table constraint" - ConstraintElem "table constraint element" - ConstraintKeywordOpt "Constraint Keyword or empty" - CreateIndexStmtUnique "CREATE INDEX optional UNIQUE clause" - CreateTableOptionListOpt "create table option list opt" - CreateTableSelectOpt "Select/Union statement in CREATE TABLE ... SELECT" - DatabaseOption "CREATE Database specification" - DatabaseOptionList "CREATE Database specification list" - DatabaseOptionListOpt "CREATE Database specification list opt" - DBName "Database Name" - DistinctOpt "Explicit distinct option" - DefaultFalseDistinctOpt "Distinct option which defaults to false" - DefaultTrueDistinctOpt "Distinct option which defaults to true" - BuggyDefaultFalseDistinctOpt "Distinct option which accepts DISTINCT ALL and defaults to false" - Enclosed "Enclosed by" - EqOpt "= or empty" - EscapedTableRef "escaped table reference" - Escaped "Escaped by" - ExpressionList "expression list" - MaxValueOrExpressionList "maxvalue or expression list" - ExpressionListOpt "expression list opt" - FuncDatetimePrecListOpt "Function datetime precision list opt" - FuncDatetimePrecList "Function datetime precision list" - Field "field expression" - Fields "Fields clause" - FieldsTerminated "Fields terminated by" - FieldAsName "Field alias name" - FieldAsNameOpt "Field alias name opt" - FieldList "field expression list" - FlushOption "Flush option" - TableRefsClause "Table references clause" - FuncDatetimePrec "Function datetime precision" - GlobalScope "The scope of variable" - GroupByClause "GROUP BY clause" - HashString "Hashed string" - HavingClause "HAVING clause" - HandleRange "handle range" - HandleRangeList "handle range list" - IfExists "If Exists" - IfNotExists "If Not Exists" - IgnoreOptional "IGNORE or empty" - IndexColName "Index column name" - IndexColNameList "List of index column name" - IndexHint "index hint" - IndexHintList "index hint list" - IndexHintListOpt "index hint list opt" - IndexHintScope "index hint scope" - IndexHintType "index hint type" - IndexName "index name" - IndexNameList "index name list" - IndexOption "Index Option" - IndexOptionList "Index Option List or empty" - IndexType "index type" - IndexTypeOpt "Optional index type" - InsertValues "Rest part of INSERT/REPLACE INTO statement" - JoinTable "join table" - JoinType "join type" - KillOrKillTiDB "Kill or Kill TiDB" - LikeEscapeOpt "like escape option" - LikeTableWithOrWithoutParen "LIKE table_name or ( LIKE table_name )" - LimitClause "LIMIT clause" - LimitOption "Limit option could be integer or parameter marker." - Lines "Lines clause" - LinesTerminated "Lines terminated by" - LocalOpt "Local opt" - LockClause "Alter table lock clause" - MaxNumBuckets "Max number of buckets" - NumLiteral "Num/Int/Float/Decimal Literal" - NoWriteToBinLogAliasOpt "NO_WRITE_TO_BINLOG alias LOCAL or empty" - ObjectType "Grant statement object type" - OnDuplicateKeyUpdate "ON DUPLICATE KEY UPDATE value list" - DuplicateOpt "[IGNORE|REPLACE] in CREATE TABLE ... SELECT statement" - OptFull "Full or empty" - Order "ORDER BY clause optional collation specification" - OrderBy "ORDER BY clause" - OrReplace "or replace" - ByItem "BY item" - OrderByOptional "Optional ORDER BY clause optional" - ByList "BY list" - QuickOptional "QUICK or empty" - PartitionDefinition "Partition definition" - PartitionDefinitionList "Partition definition list" - PartitionDefinitionListOpt "Partition definition list option" - PartitionOpt "Partition option" - PartitionNameList "Partition name list" - PartitionNumOpt "PARTITION NUM option" - PartDefValuesOpt "VALUES {LESS THAN {(expr | value_list) | MAXVALUE} | IN {value_list}" - PartDefOptionsOpt "PartDefOptionList option" - PartDefOptionList "PartDefOption list" - PartDefOption "COMMENT [=] xxx | TABLESPACE [=] tablespace_name | ENGINE [=] xxx" - PasswordOpt "Password option" - ColumnPosition "Column position [First|After ColumnName]" - PrepareSQL "Prepare statement sql string" - PriorityOpt "Statement priority option" - PrivElem "Privilege element" - PrivElemList "Privilege element list" - PrivLevel "Privilege scope" - PrivType "Privilege type" - ReferDef "Reference definition" - OnDeleteOpt "optional ON DELETE clause" - OnUpdateOpt "optional ON UPDATE clause" - OptGConcatSeparator "optional GROUP_CONCAT SEPARATOR" - ReferOpt "reference option" - RowFormat "Row format option" - RowValue "Row value" - SelectLockOpt "FOR UPDATE or LOCK IN SHARE MODE," - SelectStmtCalcFoundRows "SELECT statement optional SQL_CALC_FOUND_ROWS" - SelectStmtSQLCache "SELECT statement optional SQL_CAHCE/SQL_NO_CACHE" - SelectStmtStraightJoin "SELECT statement optional STRAIGHT_JOIN" - SelectStmtFieldList "SELECT statement field list" - SelectStmtLimit "SELECT statement optional LIMIT clause" - SelectStmtOpts "Select statement options" - SelectStmtBasic "SELECT statement from constant value" - SelectStmtFromDual "SELECT statement from dual" - SelectStmtFromTable "SELECT statement from table" - SelectStmtGroup "SELECT statement optional GROUP BY clause" - ShowTargetFilterable "Show target that can be filtered by WHERE or LIKE" - ShowDatabaseNameOpt "Show tables/columns statement database name option" - ShowTableAliasOpt "Show table alias option" - ShowLikeOrWhereOpt "Show like or where clause option" - Starting "Starting by" - StatementList "statement list" - StatsPersistentVal "stats_persistent value" - StringName "string literal or identifier" - StringList "string list" - SubPartitionOpt "SubPartition option" - SubPartitionNumOpt "SubPartition NUM option" - Symbol "Constraint Symbol" - TableAsName "table alias name" - TableAsNameOpt "table alias name optional" - TableElement "table definition element" - TableElementList "table definition element list" - TableElementListOpt "table definition element list optional" - TableFactor "table factor" - TableLock "Table name and lock type" - TableLockList "Table lock list" - TableName "Table name" - TableNameList "Table name list" - TableNameListOpt "Table name list opt" - TableOption "create table option" - TableOptionList "create table option list" - TableRef "table reference" - TableRefs "table references" - TableToTable "rename table to table" - TableToTableList "rename table to table by list" - - TransactionChar "Transaction characteristic" - TransactionChars "Transaction characteristic list" - TrimDirection "Trim string direction" - UnionOpt "Union Option(empty/ALL/DISTINCT)" - UnionClauseList "Union select clause list" - UnionSelect "Union (select) item" - Username "Username" - UsernameList "UsernameList" - UserSpec "Username and auth option" - UserSpecList "Username and auth option list" - UserVariableList "User defined variable name list" - Values "values" - ValuesList "values list" - ValuesOpt "values optional" - VariableAssignment "set variable value" - VariableAssignmentList "set variable value list" - ViewAlgorithm "view algorithm" - ViewCheckOption "view check option" - ViewDefiner "view definer" - ViewName "view name" - ViewFieldList "create view statement field list" - ViewSQLSecurity "view sql security" - WhereClause "WHERE clause" - WhereClauseOptional "Optional WHERE clause" - WhenClause "When clause" - WhenClauseList "When clause list" - WithReadLockOpt "With Read Lock opt" - WithGrantOptionOpt "With Grant Option opt" - ElseOpt "Optional else clause" - Type "Types" - - BetweenOrNotOp "Between predicate" - IsOrNotOp "Is predicate" - InOrNotOp "In predicate" - LikeOrNotOp "Like predicate" - RegexpOrNotOp "Regexp predicate" - - NumericType "Numeric types" - IntegerType "Integer Types types" - BooleanType "Boolean Types types" - FixedPointType "Exact value types" - FloatingPointType "Approximate value types" - BitValueType "bit value types" - StringType "String types" - BlobType "Blob types" - TextType "Text types" - DateAndTimeType "Date and Time types" - - OptFieldLen "Field length or empty" - FieldLen "Field length" - FieldOpts "Field type definition option list" - FieldOpt "Field type definition option" - FloatOpt "Floating-point type option" - Precision "Floating-point precision option" - OptBinary "Optional BINARY" - OptBinMod "Optional BINARY mode" - OptCharset "Optional Character setting" - OptCollate "Optional Collate setting" - IgnoreLines "Ignore num(int) lines" - NUM "A number" - NumList "Some numbers" - LengthNum "Field length num(uint64)" - HintTableList "Table list in optimizer hint" - TableOptimizerHintOpt "Table level optimizer hint" - TableOptimizerHints "Table level optimizer hints" - TableOptimizerHintList "Table level optimizer hint list" - -%type - EQOrAssignmentEQ "= or :=" - AsOpt "AS or EmptyString" - KeyOrIndex "{KEY|INDEX}" - ColumnKeywordOpt "Column keyword or empty" - PrimaryOpt "Optional primary keyword" - NowSym "CURRENT_TIMESTAMP/LOCALTIME/LOCALTIMESTAMP" - NowSymFunc "CURRENT_TIMESTAMP/LOCALTIME/LOCALTIMESTAMP/NOW" - DefaultKwdOpt "optional DEFAULT keyword" - DatabaseSym "DATABASE or SCHEMA" - ExplainSym "EXPLAIN or DESCRIBE or DESC" - RegexpSym "REGEXP or RLIKE" - IntoOpt "INTO or EmptyString" - ValueSym "Value or Values" - Varchar "{NATIONAL VARCHAR|VARCHAR|NVARCHAR}" - TimeUnit "Time unit for 'DATE_ADD', 'DATE_SUB', 'ADDDATE', 'SUBDATE', 'EXTRACT'" - TimestampUnit "Time unit for 'TIMESTAMPADD' and 'TIMESTAMPDIFF'" - DeallocateSym "Deallocate or drop" - OuterOpt "optional OUTER clause" - CrossOpt "Cross join option" - TablesTerminalSym "{TABLE|TABLES}" - IsolationLevel "Isolation level" - ShowIndexKwd "Show index/indexs/key keyword" - DistinctKwd "DISTINCT/DISTINCTROW keyword" - FromOrIn "From or In" - OptTable "Optional table keyword" - OptInteger "Optional Integer keyword" - NationalOpt "National option" - CharsetKw "charset or charater set" - CommaOpt "optional comma" - LockType "Table locks type" - logAnd "logical and operator" - logOr "logical or operator" - FieldsOrColumns "Fields or columns" - GetFormatSelector "{DATE|DATETIME|TIME|TIMESTAMP}" - -%type - ODBCDateTimeType "ODBC type keywords for date and time literals" - Identifier "identifier or unreserved keyword" - NotKeywordToken "Tokens not mysql keyword but treated specially" - UnReservedKeyword "MySQL unreserved keywords" - TiDBKeyword "TiDB added keywords" - FunctionNameConflict "Built-in function call names which are conflict with keywords" - FunctionNameOptionalBraces "Function with optional braces, all of them are reserved keywords." - FunctionNameDatetimePrecision "Function with optional datetime precision, all of them are reserved keywords." - FunctionNameDateArith "Date arith function call names (date_add or date_sub)" - FunctionNameDateArithMultiForms "Date arith function call names (adddate or subdate)" - -%precedence empty - -%precedence sqlCache sqlNoCache -%precedence lowerThanIntervalKeyword -%precedence interval -%precedence lowerThanStringLitToken -%precedence stringLit -%precedence lowerThanSetKeyword -%precedence set -%precedence lowerThanInsertValues -%precedence insertValues -%precedence lowerThanCreateTableSelect -%precedence createTableSelect -%precedence lowerThanKey -%precedence key - -%left join straightJoin inner cross left right full natural -/* A dummy token to force the priority of TableRef production in a join. */ -%left tableRefPriority -%precedence lowerThanOn -%precedence on using -%right assignmentEq -%left pipes or pipesAsOr -%left xor -%left andand and -%left between -%precedence lowerThanEq -%left eq ge le neq neqSynonym '>' '<' is like in -%left '|' -%left '&' -%left rsh lsh -%left '-' '+' -%left '*' '/' '%' div mod -%left '^' -%left '~' neg -%right not not2 -%right collate - -%precedence '(' -%precedence quick -%precedence escape -%precedence lowerThanComma -%precedence ',' -%precedence higherThanComma - -%start Start - -%% - -Start: - StatementList - -/**************************************AlterTableStmt*************************************** - * See https://dev.mysql.com/doc/refman/5.7/en/alter-table.html - *******************************************************************************************/ -AlterTableStmt: - "ALTER" IgnoreOptional "TABLE" TableName AlterTableSpecList - { - $$ = &ast.AlterTableStmt{ - Table: $4.(*ast.TableName), - Specs: $5.([]*ast.AlterTableSpec), - } - } -| "ALTER" IgnoreOptional "TABLE" TableName "ANALYZE" "PARTITION" PartitionNameList MaxNumBuckets - { - $$ = &ast.AnalyzeTableStmt{TableNames: []*ast.TableName{$4.(*ast.TableName)}, PartitionNames: $7.([]model.CIStr), MaxNumBuckets: $8.(uint64),} - } -| "ALTER" IgnoreOptional "TABLE" TableName "ANALYZE" "PARTITION" PartitionNameList "INDEX" IndexNameList MaxNumBuckets - { - $$ = &ast.AnalyzeTableStmt{ - TableNames: []*ast.TableName{$4.(*ast.TableName)}, - PartitionNames: $7.([]model.CIStr), - IndexNames: $9.([]model.CIStr), - IndexFlag: true, - MaxNumBuckets: $10.(uint64), - } - } - -AlterTableSpec: - AlterTableOptionListOpt - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableOption, - Options:$1.([]*ast.TableOption), - } - } -| "CONVERT" "TO" CharsetKw CharsetName OptCollate - { - op := &ast.AlterTableSpec{ - Tp: ast.AlterTableOption, - Options:[]*ast.TableOption{{Tp: ast.TableOptionCharset, StrValue: $4.(string)}}, - } - if $5 != "" { - op.Options = append(op.Options, &ast.TableOption{Tp: ast.TableOptionCollate, StrValue: $5.(string)}) - } - $$ = op - } -| "ADD" ColumnKeywordOpt ColumnDef ColumnPosition - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableAddColumns, - NewColumns: []*ast.ColumnDef{$3.(*ast.ColumnDef)}, - Position: $4.(*ast.ColumnPosition), - } - } -| "ADD" ColumnKeywordOpt '(' ColumnDefList ')' - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableAddColumns, - NewColumns: $4.([]*ast.ColumnDef), - } - } -| "ADD" Constraint - { - constraint := $2.(*ast.Constraint) - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableAddConstraint, - Constraint: constraint, - } - } -| "ADD" "PARTITION" PartitionDefinitionListOpt - { - var defs []*ast.PartitionDefinition - if $3 != nil { - defs = $3.([]*ast.PartitionDefinition) - } - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableAddPartitions, - PartDefinitions: defs, - } - } -| "DROP" ColumnKeywordOpt ColumnName RestrictOrCascadeOpt - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableDropColumn, - OldColumnName: $3.(*ast.ColumnName), - } - } -| "DROP" "PRIMARY" "KEY" - { - $$ = &ast.AlterTableSpec{Tp: ast.AlterTableDropPrimaryKey} - } -| "DROP" "PARTITION" Identifier - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableDropPartition, - Name: $3, - } - } -| "DROP" KeyOrIndex Identifier - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableDropIndex, - Name: $3, - } - } -| "DROP" "FOREIGN" "KEY" Symbol - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableDropForeignKey, - Name: $4.(string), - } - } -| "DISABLE" "KEYS" - { - $$ = &ast.AlterTableSpec{} - } -| "ENABLE" "KEYS" - { - $$ = &ast.AlterTableSpec{} - } -| "MODIFY" ColumnKeywordOpt ColumnDef ColumnPosition - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableModifyColumn, - NewColumns: []*ast.ColumnDef{$3.(*ast.ColumnDef)}, - Position: $4.(*ast.ColumnPosition), - } - } -| "CHANGE" ColumnKeywordOpt ColumnName ColumnDef ColumnPosition - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableChangeColumn, - OldColumnName: $3.(*ast.ColumnName), - NewColumns: []*ast.ColumnDef{$4.(*ast.ColumnDef)}, - Position: $5.(*ast.ColumnPosition), - } - } -| "ALTER" ColumnKeywordOpt ColumnName "SET" "DEFAULT" SignedLiteral - { - option := &ast.ColumnOption{Expr: $6} - colDef := &ast.ColumnDef{ - Name: $3.(*ast.ColumnName), - Options: []*ast.ColumnOption{option}, - } - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableAlterColumn, - NewColumns: []*ast.ColumnDef{colDef}, - } - } -| "ALTER" ColumnKeywordOpt ColumnName "DROP" "DEFAULT" - { - colDef := &ast.ColumnDef{ - Name: $3.(*ast.ColumnName), - } - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableAlterColumn, - NewColumns: []*ast.ColumnDef{colDef}, - } - } -| "RENAME" "TO" TableName - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableRenameTable, - NewTable: $3.(*ast.TableName), - } - } -| "RENAME" TableName - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableRenameTable, - NewTable: $2.(*ast.TableName), - } - } -| "RENAME" "AS" TableName - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableRenameTable, - NewTable: $3.(*ast.TableName), - } - } -| "RENAME" KeyOrIndex Identifier "TO" Identifier - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableRenameIndex, - FromKey: model.NewCIStr($3), - ToKey: model.NewCIStr($5), - } - } -| LockClause - { - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableLock, - LockType: $1.(ast.LockType), - } - } -| "ALGORITHM" EqOpt AlterAlgorithm - { - // Parse it and ignore it. Just for compatibility. - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableAlgorithm, - } - } -| "FORCE" - { - // Parse it and ignore it. Just for compatibility. - $$ = &ast.AlterTableSpec{ - Tp: ast.AlterTableForce, - } - } - - -AlterAlgorithm: - "DEFAULT" | "INPLACE" | "COPY" - -LockClauseOpt: - {} -| LockClause {} - -LockClause: - "LOCK" eq "NONE" - { - $$ = ast.LockTypeNone - } -| "LOCK" eq "DEFAULT" - { - $$ = ast.LockTypeDefault - } -| "LOCK" eq "SHARED" - { - $$ = ast.LockTypeShared - } -| "LOCK" eq "EXCLUSIVE" - { - $$ = ast.LockTypeExclusive - } - -KeyOrIndex: "KEY" | "INDEX" - - -KeyOrIndexOpt: - {} -| KeyOrIndex - -ColumnKeywordOpt: - {} -| "COLUMN" - -ColumnPosition: - { - $$ = &ast.ColumnPosition{Tp: ast.ColumnPositionNone} - } -| "FIRST" - { - $$ = &ast.ColumnPosition{Tp: ast.ColumnPositionFirst} - } -| "AFTER" ColumnName - { - $$ = &ast.ColumnPosition{ - Tp: ast.ColumnPositionAfter, - RelativeColumn: $2.(*ast.ColumnName), - } - } - -AlterTableSpecList: - AlterTableSpec - { - $$ = []*ast.AlterTableSpec{$1.(*ast.AlterTableSpec)} - } -| AlterTableSpecList ',' AlterTableSpec - { - $$ = append($1.([]*ast.AlterTableSpec), $3.(*ast.AlterTableSpec)) - } - -PartitionNameList: - Identifier - { - $$ = []model.CIStr{model.NewCIStr($1)} - } -| PartitionNameList ',' Identifier - { - $$ = append($1.([]model.CIStr), model.NewCIStr($3)) - } - -ConstraintKeywordOpt: - { - $$ = nil - } -| "CONSTRAINT" - { - $$ = nil - } -| "CONSTRAINT" Symbol - { - $$ = $2.(string) - } - -Symbol: - Identifier - { - $$ = $1 - } - -/**************************************RenameTableStmt*************************************** - * See http://dev.mysql.com/doc/refman/5.7/en/rename-table.html - * - * TODO: refactor this when you are going to add full support for multiple schema changes. - * Currently it is only useful for syncer which depends heavily on tidb parser to do some dirty work. - *******************************************************************************************/ -RenameTableStmt: - "RENAME" "TABLE" TableToTableList - { - $$ = &ast.RenameTableStmt{ - OldTable: $3.([]*ast.TableToTable)[0].OldTable, - NewTable: $3.([]*ast.TableToTable)[0].NewTable, - TableToTables: $3.([]*ast.TableToTable), - } - } - -TableToTableList: - TableToTable - { - $$ = []*ast.TableToTable{$1.(*ast.TableToTable)} - } -| TableToTableList ',' TableToTable - { - $$ = append($1.([]*ast.TableToTable), $3.(*ast.TableToTable)) - } - -TableToTable: - TableName "TO" TableName - { - $$ = &ast.TableToTable{ - OldTable: $1.(*ast.TableName), - NewTable: $3.(*ast.TableName), - } - } - - -/*******************************************************************************************/ - -AnalyzeTableStmt: - "ANALYZE" "TABLE" TableNameList MaxNumBuckets - { - $$ = &ast.AnalyzeTableStmt{TableNames: $3.([]*ast.TableName), MaxNumBuckets: $4.(uint64)} - } -| "ANALYZE" "TABLE" TableName "INDEX" IndexNameList MaxNumBuckets - { - $$ = &ast.AnalyzeTableStmt{TableNames: []*ast.TableName{$3.(*ast.TableName)}, IndexNames: $5.([]model.CIStr), IndexFlag: true, MaxNumBuckets: $6.(uint64)} - } -| "ANALYZE" "TABLE" TableName "PARTITION" PartitionNameList MaxNumBuckets - { - $$ = &ast.AnalyzeTableStmt{TableNames: []*ast.TableName{$3.(*ast.TableName)}, PartitionNames: $5.([]model.CIStr), MaxNumBuckets: $6.(uint64),} - } -| "ANALYZE" "TABLE" TableName "PARTITION" PartitionNameList "INDEX" IndexNameList MaxNumBuckets - { - $$ = &ast.AnalyzeTableStmt{ - TableNames: []*ast.TableName{$3.(*ast.TableName)}, - PartitionNames: $5.([]model.CIStr), - IndexNames: $7.([]model.CIStr), - IndexFlag: true, - MaxNumBuckets: $8.(uint64), - } - } - -MaxNumBuckets: - { - $$ = uint64(0) - } -| "WITH" NUM "BUCKETS" - { - $$ = getUint64FromNUM($2) - } - -/*******************************************************************************************/ -Assignment: - ColumnName eq Expression - { - $$ = &ast.Assignment{Column: $1.(*ast.ColumnName), Expr:$3} - } - -AssignmentList: - Assignment - { - $$ = []*ast.Assignment{$1.(*ast.Assignment)} - } -| AssignmentList ',' Assignment - { - $$ = append($1.([]*ast.Assignment), $3.(*ast.Assignment)) - } - -AssignmentListOpt: - /* EMPTY */ - { - $$ = []*ast.Assignment{} - } -| AssignmentList - -BeginTransactionStmt: - "BEGIN" - { - $$ = &ast.BeginStmt{} - } -| "START" "TRANSACTION" - { - $$ = &ast.BeginStmt{} - } -| "START" "TRANSACTION" "WITH" "CONSISTENT" "SNAPSHOT" - { - $$ = &ast.BeginStmt{} - } - -BinlogStmt: - "BINLOG" stringLit - { - $$ = &ast.BinlogStmt{Str: $2} - } - -ColumnDefList: - ColumnDef - { - $$ = []*ast.ColumnDef{$1.(*ast.ColumnDef)} - } -| ColumnDefList ',' ColumnDef - { - $$ = append($1.([]*ast.ColumnDef), $3.(*ast.ColumnDef)) - } - -ColumnDef: - ColumnName Type ColumnOptionListOpt - { - $$ = &ast.ColumnDef{Name: $1.(*ast.ColumnName), Tp: $2.(*types.FieldType), Options: $3.([]*ast.ColumnOption)} - } - -ColumnName: - Identifier - { - $$ = &ast.ColumnName{Name: model.NewCIStr($1)} - } -| Identifier '.' Identifier - { - $$ = &ast.ColumnName{Table: model.NewCIStr($1), Name: model.NewCIStr($3)} - } -| Identifier '.' Identifier '.' Identifier - { - $$ = &ast.ColumnName{Schema: model.NewCIStr($1), Table: model.NewCIStr($3), Name: model.NewCIStr($5)} - } - -ColumnNameList: - ColumnName - { - $$ = []*ast.ColumnName{$1.(*ast.ColumnName)} - } -| ColumnNameList ',' ColumnName - { - $$ = append($1.([]*ast.ColumnName), $3.(*ast.ColumnName)) - } - -ColumnNameListOpt: - /* EMPTY */ - { - $$ = []*ast.ColumnName{} - } -| ColumnNameList - { - $$ = $1.([]*ast.ColumnName) - } - -ColumnNameListOptWithBrackets: - /* EMPTY */ - { - $$ = []*ast.ColumnName{} - } -| '(' ColumnNameListOpt ')' - { - $$ = $2.([]*ast.ColumnName) - } - -CommitStmt: - "COMMIT" - { - $$ = &ast.CommitStmt{} - } - -PrimaryOpt: - {} -| "PRIMARY" - -ColumnOption: - "NOT" "NULL" - { - $$ = &ast.ColumnOption{Tp: ast.ColumnOptionNotNull} - } -| "NULL" - { - $$ = &ast.ColumnOption{Tp: ast.ColumnOptionNull} - } -| "AUTO_INCREMENT" - { - $$ = &ast.ColumnOption{Tp: ast.ColumnOptionAutoIncrement} - } -| PrimaryOpt "KEY" - { - // KEY is normally a synonym for INDEX. The key attribute PRIMARY KEY - // can also be specified as just KEY when given in a column definition. - // See http://dev.mysql.com/doc/refman/5.7/en/create-table.html - $$ = &ast.ColumnOption{Tp: ast.ColumnOptionPrimaryKey} - } -| "UNIQUE" %prec lowerThanKey - { - $$ = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey} - } -| "UNIQUE" "KEY" - { - $$ = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey} - } -| "DEFAULT" DefaultValueExpr - { - $$ = &ast.ColumnOption{Tp: ast.ColumnOptionDefaultValue, Expr: $2} - } -| "ON" "UPDATE" NowSymOptionFraction - { - nowFunc := &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP")} - $$ = &ast.ColumnOption{Tp: ast.ColumnOptionOnUpdate, Expr: nowFunc} - } -| "COMMENT" stringLit - { - $$ = &ast.ColumnOption{Tp: ast.ColumnOptionComment, Expr: ast.NewValueExpr($2)} - } -| "CHECK" '(' Expression ')' - { - // See https://dev.mysql.com/doc/refman/5.7/en/create-table.html - // The CHECK clause is parsed but ignored by all storage engines. - $$ = &ast.ColumnOption{} - } -| GeneratedAlways "AS" '(' Expression ')' VirtualOrStored - { - startOffset := parser.startOffset(&yyS[yypt-2]) - endOffset := parser.endOffset(&yyS[yypt-1]) - expr := $4 - expr.SetText(parser.src[startOffset:endOffset]) - - $$ = &ast.ColumnOption{ - Tp: ast.ColumnOptionGenerated, - Expr: expr, - Stored: $6.(bool), - } - } -| ReferDef - { - $$ = &ast.ColumnOption{ - Tp: ast.ColumnOptionReference, - Refer: $1.(*ast.ReferenceDef), - } - } - -GeneratedAlways: | "GENERATED" "ALWAYS" - -VirtualOrStored: - { - $$ = false - } -| "VIRTUAL" - { - $$ = false - } -| "STORED" - { - $$ = true - } - -ColumnOptionList: - ColumnOption - { - $$ = []*ast.ColumnOption{$1.(*ast.ColumnOption)} - } -| ColumnOptionList ColumnOption - { - $$ = append($1.([]*ast.ColumnOption), $2.(*ast.ColumnOption)) - } - -ColumnOptionListOpt: - { - $$ = []*ast.ColumnOption{} - } -| ColumnOptionList - { - $$ = $1.([]*ast.ColumnOption) - } - -ConstraintElem: - "PRIMARY" "KEY" IndexName IndexTypeOpt '(' IndexColNameList ')' IndexOptionList - { - c := &ast.Constraint{ - Tp: ast.ConstraintPrimaryKey, - Keys: $6.([]*ast.IndexColName), - } - if $8 != nil { - c.Option = $8.(*ast.IndexOption) - } - if $4 != nil { - if c.Option == nil { - c.Option = &ast.IndexOption{} - } - c.Option.Tp = $4.(model.IndexType) - } - $$ = c - } -| "FULLTEXT" KeyOrIndex IndexName '(' IndexColNameList ')' IndexOptionList - { - c := &ast.Constraint{ - Tp: ast.ConstraintFulltext, - Keys: $5.([]*ast.IndexColName), - Name: $3.(string), - } - if $7 != nil { - c.Option = $7.(*ast.IndexOption) - } - $$ = c - } -| KeyOrIndex IndexName IndexTypeOpt '(' IndexColNameList ')' IndexOptionList - { - c := &ast.Constraint{ - Tp: ast.ConstraintIndex, - Keys: $5.([]*ast.IndexColName), - Name: $2.(string), - } - if $7 != nil { - c.Option = $7.(*ast.IndexOption) - } - if $3 != nil { - if c.Option == nil { - c.Option = &ast.IndexOption{} - } - c.Option.Tp = $3.(model.IndexType) - } - $$ = c - } -| "UNIQUE" KeyOrIndexOpt IndexName IndexTypeOpt '(' IndexColNameList ')' IndexOptionList - { - c := &ast.Constraint{ - Tp: ast.ConstraintUniq, - Keys: $6.([]*ast.IndexColName), - Name: $3.(string), - } - if $8 != nil { - c.Option = $8.(*ast.IndexOption) - } - if $4 != nil { - if c.Option == nil { - c.Option = &ast.IndexOption{} - } - c.Option.Tp = $4.(model.IndexType) - } - $$ = c - } -| "FOREIGN" "KEY" IndexName '(' IndexColNameList ')' ReferDef - { - $$ = &ast.Constraint{ - Tp: ast.ConstraintForeignKey, - Keys: $5.([]*ast.IndexColName), - Name: $3.(string), - Refer: $7.(*ast.ReferenceDef), - } - } - -ReferDef: - "REFERENCES" TableName '(' IndexColNameList ')' OnDeleteOpt OnUpdateOpt - { - var onDeleteOpt *ast.OnDeleteOpt - if $6 != nil { - onDeleteOpt = $6.(*ast.OnDeleteOpt) - } - var onUpdateOpt *ast.OnUpdateOpt - if $7 != nil { - onUpdateOpt = $7.(*ast.OnUpdateOpt) - } - $$ = &ast.ReferenceDef{ - Table: $2.(*ast.TableName), - IndexColNames: $4.([]*ast.IndexColName), - OnDelete: onDeleteOpt, - OnUpdate: onUpdateOpt, - } - } - -OnDeleteOpt: - { - $$ = &ast.OnDeleteOpt{} - } %prec lowerThanOn -| "ON" "DELETE" ReferOpt - { - $$ = &ast.OnDeleteOpt{ReferOpt: $3.(ast.ReferOptionType)} - } - -OnUpdateOpt: - { - $$ = &ast.OnUpdateOpt{} - } %prec lowerThanOn -| "ON" "UPDATE" ReferOpt - { - $$ = &ast.OnUpdateOpt{ReferOpt: $3.(ast.ReferOptionType)} - } - -ReferOpt: - "RESTRICT" - { - $$ = ast.ReferOptionRestrict - } -| "CASCADE" - { - $$ = ast.ReferOptionCascade - } -| "SET" "NULL" - { - $$ = ast.ReferOptionSetNull - } -| "NO" "ACTION" - { - $$ = ast.ReferOptionNoAction - } - -/* - * The DEFAULT clause specifies a default value for a column. - * With one exception, the default value must be a constant; - * it cannot be a function or an expression. This means, for example, - * that you cannot set the default for a date column to be the value of - * a function such as NOW() or CURRENT_DATE. The exception is that you - * can specify CURRENT_TIMESTAMP as the default for a TIMESTAMP or DATETIME column. - * - * See http://dev.mysql.com/doc/refman/5.7/en/create-table.html - * https://github.com/mysql/mysql-server/blob/5.7/sql/sql_yacc.yy#L6832 - */ -DefaultValueExpr: - NowSymOptionFraction | SignedLiteral - -NowSymOptionFraction: - NowSym - { - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP")} - } -| NowSymFunc '(' ')' - { - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP")} - } -| NowSymFunc '(' NUM ')' - { - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP")} - } - -/* -* See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_localtime -* TODO: Process other three keywords -*/ -NowSymFunc: - "CURRENT_TIMESTAMP" | "LOCALTIME" | "LOCALTIMESTAMP" | builtinNow -NowSym: - "CURRENT_TIMESTAMP" | "LOCALTIME" | "LOCALTIMESTAMP" - - -SignedLiteral: - Literal - { - $$ = ast.NewValueExpr($1) - } -| '+' NumLiteral - { - $$ = &ast.UnaryOperationExpr{Op: opcode.Plus, V: ast.NewValueExpr($2)} - } -| '-' NumLiteral - { - $$ = &ast.UnaryOperationExpr{Op: opcode.Minus, V: ast.NewValueExpr($2)} - } - -NumLiteral: - intLit -| floatLit -| decLit - - -CreateIndexStmt: - "CREATE" CreateIndexStmtUnique "INDEX" Identifier IndexTypeOpt "ON" TableName '(' IndexColNameList ')' IndexOptionList LockClauseOpt - { - var indexOption *ast.IndexOption - if $11 != nil { - indexOption = $11.(*ast.IndexOption) - if indexOption.Tp == model.IndexTypeInvalid { - if $5 != nil { - indexOption.Tp = $5.(model.IndexType) - } - } - } else { - indexOption = &ast.IndexOption{} - if $5 != nil { - indexOption.Tp = $5.(model.IndexType) - } - } - $$ = &ast.CreateIndexStmt{ - Unique: $2.(bool), - IndexName: $4, - Table: $7.(*ast.TableName), - IndexColNames: $9.([]*ast.IndexColName), - IndexOption: indexOption, - } - } - -CreateIndexStmtUnique: - { - $$ = false - } -| "UNIQUE" - { - $$ = true - } - -IndexColName: - ColumnName OptFieldLen Order - { - //Order is parsed but just ignored as MySQL did - $$ = &ast.IndexColName{Column: $1.(*ast.ColumnName), Length: $2.(int)} - } - -IndexColNameList: - IndexColName - { - $$ = []*ast.IndexColName{$1.(*ast.IndexColName)} - } -| IndexColNameList ',' IndexColName - { - $$ = append($1.([]*ast.IndexColName), $3.(*ast.IndexColName)) - } - - - -/******************************************************************* - * - * Create Database Statement - * CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name - * [create_specification] ... - * - * create_specification: - * [DEFAULT] CHARACTER SET [=] charset_name - * | [DEFAULT] COLLATE [=] collation_name - *******************************************************************/ -CreateDatabaseStmt: - "CREATE" DatabaseSym IfNotExists DBName DatabaseOptionListOpt - { - $$ = &ast.CreateDatabaseStmt{ - IfNotExists: $3.(bool), - Name: $4.(string), - Options: $5.([]*ast.DatabaseOption), - } - } - -DBName: - Identifier - { - $$ = $1 - } - -DatabaseOption: - DefaultKwdOpt CharsetKw EqOpt CharsetName - { - $$ = &ast.DatabaseOption{Tp: ast.DatabaseOptionCharset, Value: $4.(string)} - } -| DefaultKwdOpt "COLLATE" EqOpt StringName - { - $$ = &ast.DatabaseOption{Tp: ast.DatabaseOptionCollate, Value: $4.(string)} - } - -DatabaseOptionListOpt: - { - $$ = []*ast.DatabaseOption{} - } -| DatabaseOptionList - -DatabaseOptionList: - DatabaseOption - { - $$ = []*ast.DatabaseOption{$1.(*ast.DatabaseOption)} - } -| DatabaseOptionList DatabaseOption - { - $$ = append($1.([]*ast.DatabaseOption), $2.(*ast.DatabaseOption)) - } - -/******************************************************************* - * - * Create Table Statement - * - * Example: - * CREATE TABLE Persons - * ( - * P_Id int NOT NULL, - * LastName varchar(255) NOT NULL, - * FirstName varchar(255), - * Address varchar(255), - * City varchar(255), - * PRIMARY KEY (P_Id) - * ) - *******************************************************************/ - -CreateTableStmt: - "CREATE" "TABLE" IfNotExists TableName TableElementListOpt CreateTableOptionListOpt PartitionOpt DuplicateOpt AsOpt CreateTableSelectOpt - { - stmt := $5.(*ast.CreateTableStmt) - stmt.Table = $4.(*ast.TableName) - stmt.IfNotExists = $3.(bool) - stmt.Options = $6.([]*ast.TableOption) - if $7 != nil { - stmt.Partition = $7.(*ast.PartitionOptions) - } - stmt.OnDuplicate = $8.(ast.OnDuplicateCreateTableSelectType) - stmt.Select = $10.(*ast.CreateTableStmt).Select - $$ = stmt - } -| "CREATE" "TABLE" IfNotExists TableName LikeTableWithOrWithoutParen - { - $$ = &ast.CreateTableStmt{ - Table: $4.(*ast.TableName), - ReferTable: $5.(*ast.TableName), - IfNotExists: $3.(bool), - } - } - -DefaultKwdOpt: - {} -| "DEFAULT" - -PartitionOpt: - { - $$ = nil - } -| "PARTITION" "BY" "KEY" '(' ColumnNameList ')' PartitionNumOpt PartitionDefinitionListOpt - { - $$ = nil - } -| "PARTITION" "BY" "HASH" '(' Expression ')' PartitionNumOpt PartitionDefinitionListOpt - { - $$ = nil - } -| "PARTITION" "BY" "RANGE" '(' Expression ')' PartitionNumOpt SubPartitionOpt PartitionDefinitionListOpt - { - var defs []*ast.PartitionDefinition - if $9 != nil { - defs = $9.([]*ast.PartitionDefinition) - } - $$ = &ast.PartitionOptions{ - Tp: model.PartitionTypeRange, - Expr: $5.(ast.ExprNode), - Definitions: defs, - } - } -| "PARTITION" "BY" "RANGE" "COLUMNS" '(' ColumnNameList ')' PartitionNumOpt PartitionDefinitionListOpt - { - var defs []*ast.PartitionDefinition - if $9 != nil { - defs = $9.([]*ast.PartitionDefinition) - } - $$ = &ast.PartitionOptions{ - Tp: model.PartitionTypeRange, - ColumnNames: $6.([]*ast.ColumnName), - Definitions: defs, - } - } - -SubPartitionOpt: - {} -| "SUBPARTITION" "BY" "HASH" '(' Expression ')' SubPartitionNumOpt - {} -| "SUBPARTITION" "BY" "KEY" '(' ColumnNameList ')' SubPartitionNumOpt - {} - -SubPartitionNumOpt: - {} -| "SUBPARTITIONS" NUM - {} - -PartitionNumOpt: - {} -| "PARTITIONS" NUM - {} - -PartitionDefinitionListOpt: - /* empty */ %prec lowerThanCreateTableSelect - { - $$ = nil - } -| '(' PartitionDefinitionList ')' - { - $$ = $2.([]*ast.PartitionDefinition) - } - -PartitionDefinitionList: - PartitionDefinition - { - $$ = []*ast.PartitionDefinition{$1.(*ast.PartitionDefinition)} - } -| PartitionDefinitionList ',' PartitionDefinition - { - $$ = append($1.([]*ast.PartitionDefinition), $3.(*ast.PartitionDefinition)) - } - -PartitionDefinition: - "PARTITION" Identifier PartDefValuesOpt PartDefOptionsOpt - { - partDef := &ast.PartitionDefinition{ - Name: model.NewCIStr($2), - } - switch $3.(type) { - case []ast.ExprNode: - partDef.LessThan = $3.([]ast.ExprNode) - case ast.ExprNode: - partDef.LessThan = make([]ast.ExprNode, 1) - partDef.LessThan[0] = $3.(ast.ExprNode) - } - - if comment, ok := $4.(string); ok { - partDef.Comment = comment - } - $$ = partDef - } - -PartDefOptionsOpt: - { - $$ = nil - } -| PartDefOptionList - { - $$ = $1 - } - -PartDefOptionList: - PartDefOption - { - $$ = $1 - } -| PartDefOptionList PartDefOption - { - if $1 != nil { - $$ = $1 - } else { - $$ = $2 - } - } - -PartDefOption: - "COMMENT" EqOpt stringLit - { - $$ = $3 - } -| "ENGINE" EqOpt Identifier - { - $$ = nil - } -| "TABLESPACE" EqOpt Identifier - { - $$ = nil - } - - -PartDefValuesOpt: - { - $$ = nil - } -| "VALUES" "LESS" "THAN" "MAXVALUE" - { - $$ = &ast.MaxValueExpr{} - } -| "VALUES" "LESS" "THAN" '(' MaxValueOrExpressionList ')' - { - $$ = $5 - } - -DuplicateOpt: - { - $$ = ast.OnDuplicateCreateTableSelectError - } -| "IGNORE" - { - $$ = ast.OnDuplicateCreateTableSelectIgnore - } -| "REPLACE" - { - $$ = ast.OnDuplicateCreateTableSelectReplace - } - -AsOpt: - {} -| "AS" - {} - -CreateTableSelectOpt: - /* empty */ - { - $$ = &ast.CreateTableStmt{} - } -| - SelectStmt - { - $$ = &ast.CreateTableStmt{Select: $1} - } -| - UnionStmt - { - $$ = &ast.CreateTableStmt{Select: $1} - } -| - SubSelect %prec createTableSelect - // TODO: We may need better solution as issue #320. - { - $$ = &ast.CreateTableStmt{Select: $1} - } - -LikeTableWithOrWithoutParen: - "LIKE" TableName - { - $$ = $2 - } -| - '(' "LIKE" TableName ')' - { - $$ = $3 - } - -/******************************************************************* - * - * Create View Statement - * - * Example: - * CREATE VIEW OR REPLACE ALGORITHM = MERGE DEFINER="root@localhost" SQL SECURITY = definer view_name (col1,col2) - * as select Col1,Col2 from table WITH LOCAL CHECK OPTION - *******************************************************************/ -CreateViewStmt: - "CREATE" OrReplace ViewAlgorithm ViewDefiner ViewSQLSecurity "VIEW" ViewName ViewFieldList "AS" SelectStmt ViewCheckOption - { - startOffset := parser.startOffset(&yyS[yypt-1]) - selStmt := $10.(*ast.SelectStmt) - selStmt.SetText(string(parser.src[startOffset:])) - x := &ast.CreateViewStmt { - OrReplace: $2.(bool), - ViewName: $7.(*ast.TableName), - Select: selStmt, - } - if $8 != nil{ - x.Cols = $8.([]model.CIStr) - } - $$ = x - } - -OrReplace: - { - $$ = false - } -| "OR" "REPLACE" - { - $$ = true - } - -ViewAlgorithm: - /* EMPTY */ - { - $$ = "UNDEFINED" - } -| "ALGORITHM" "=" "UNDEFINED" - { - $$ = strings.ToUpper($3) - } -| "ALGORITHM" "=" "MERGE" - { - $$ = strings.ToUpper($3) - } -| "ALGORITHM" "=" "TEMPTABLE" - { - $$ = strings.ToUpper($3) - } - -ViewDefiner: - /* EMPTY */ - { - $$ = nil - } -| "DEFINER" "=" Username - { - $$ = $3 - } - -ViewSQLSecurity: - /* EMPTY */ - { - $$ = "DEFINER" - } -| "SQL" "SECURITY" "DEFINER" - { - $$ = $3 - } -| "SQL" "SECURITY" "INVOKER" - { - $$ = $3 - } - -ViewName: - TableName - { - $$ = $1.(*ast.TableName) - } - -ViewFieldList: - /* Empty */ - { - $$ = nil - } -| '(' ColumnList ')' - { - $$ = $2.([]model.CIStr) - } - -ColumnList: - Identifier - { - $$ = []model.CIStr{model.NewCIStr($1)} - } -| ColumnList ',' Identifier - { - $$ = append($1.([]model.CIStr), model.NewCIStr($3)) - } - -ViewCheckOption: - /* EMPTY */ - { - $$ = nil - } -| "WITH" "CASCADED" "CHECK" "OPTION" - { - $$ = $2 - } -| "WITH" "LOCAL" "CHECK" "OPTION" - { - $$ = $2 - } - -/****************************************************************** - * Do statement - * See https://dev.mysql.com/doc/refman/5.7/en/do.html - ******************************************************************/ -DoStmt: - "DO" ExpressionList - { - $$ = &ast.DoStmt { - Exprs: $2.([]ast.ExprNode), - } - } - -/******************************************************************* - * - * Delete Statement - * - *******************************************************************/ -DeleteFromStmt: - "DELETE" TableOptimizerHints PriorityOpt QuickOptional IgnoreOptional "FROM" TableName IndexHintListOpt WhereClauseOptional OrderByOptional LimitClause - { - // Single Table - tn := $7.(*ast.TableName) - tn.IndexHints = $8.([]*ast.IndexHint) - join := &ast.Join{Left: &ast.TableSource{Source: tn}, Right: nil} - x := &ast.DeleteStmt{ - TableRefs: &ast.TableRefsClause{TableRefs: join}, - Priority: $3.(mysql.PriorityEnum), - Quick: $4.(bool), - IgnoreErr: $5.(bool), - } - if $9 != nil { - x.Where = $9.(ast.ExprNode) - } - if $10 != nil { - x.Order = $10.(*ast.OrderByClause) - } - if $11 != nil { - x.Limit = $11.(*ast.Limit) - } - - $$ = x - } -| "DELETE" TableOptimizerHints PriorityOpt QuickOptional IgnoreOptional TableNameList "FROM" TableRefs WhereClauseOptional - { - // Multiple Table - x := &ast.DeleteStmt{ - Priority: $3.(mysql.PriorityEnum), - Quick: $4.(bool), - IgnoreErr: $5.(bool), - IsMultiTable: true, - BeforeFrom: true, - Tables: &ast.DeleteTableList{Tables: $6.([]*ast.TableName)}, - TableRefs: &ast.TableRefsClause{TableRefs: $8.(*ast.Join)}, - } - if $2 != nil { - x.TableHints = $2.([]*ast.TableOptimizerHint) - } - if $9 != nil { - x.Where = $9.(ast.ExprNode) - } - $$ = x - } - -| "DELETE" TableOptimizerHints PriorityOpt QuickOptional IgnoreOptional "FROM" TableNameList "USING" TableRefs WhereClauseOptional - { - // Multiple Table - x := &ast.DeleteStmt{ - Priority: $3.(mysql.PriorityEnum), - Quick: $4.(bool), - IgnoreErr: $5.(bool), - IsMultiTable: true, - Tables: &ast.DeleteTableList{Tables: $7.([]*ast.TableName)}, - TableRefs: &ast.TableRefsClause{TableRefs: $9.(*ast.Join)}, - } - if $2 != nil { - x.TableHints = $2.([]*ast.TableOptimizerHint) - } - if $10 != nil { - x.Where = $10.(ast.ExprNode) - } - $$ = x - } - -DatabaseSym: -"DATABASE" - -DropDatabaseStmt: - "DROP" DatabaseSym IfExists DBName - { - $$ = &ast.DropDatabaseStmt{IfExists: $3.(bool), Name: $4.(string)} - } - -DropIndexStmt: - "DROP" "INDEX" IfExists Identifier "ON" TableName - { - $$ = &ast.DropIndexStmt{IfExists: $3.(bool), IndexName: $4, Table: $6.(*ast.TableName)} - } - -DropTableStmt: - "DROP" TableOrTables TableNameList RestrictOrCascadeOpt - { - $$ = &ast.DropTableStmt{Tables: $3.([]*ast.TableName)} - } -| "DROP" TableOrTables "IF" "EXISTS" TableNameList RestrictOrCascadeOpt - { - $$ = &ast.DropTableStmt{IfExists: true, Tables: $5.([]*ast.TableName)} - } - -DropViewStmt: - "DROP" "VIEW" "IF" "EXISTS" TableNameList - { - $$ = &ast.DoStmt{} - } - -DropUserStmt: - "DROP" "USER" UsernameList - { - $$ = &ast.DropUserStmt{IfExists: false, UserList: $3.([]*auth.UserIdentity)} - } -| "DROP" "USER" "IF" "EXISTS" UsernameList - { - $$ = &ast.DropUserStmt{IfExists: true, UserList: $5.([]*auth.UserIdentity)} - } - -DropStatsStmt: - "DROP" "STATS" TableName - { - $$ = &ast.DropStatsStmt{Table: $3.(*ast.TableName)} - } - -RestrictOrCascadeOpt: - {} -| "RESTRICT" -| "CASCADE" - -TableOrTables: - "TABLE" -| "TABLES" - -EqOpt: - {} -| eq - -EmptyStmt: - /* EMPTY */ - { - $$ = nil - } - -TraceStmt: - "TRACE" TraceableStmt - { - $$ = &ast.TraceStmt{ - Stmt: $2, - Format: "row", - } - } - -ExplainSym: -"EXPLAIN" | "DESCRIBE" | "DESC" - -ExplainStmt: - ExplainSym TableName - { - $$ = &ast.ExplainStmt{ - Stmt: &ast.ShowStmt{ - Tp: ast.ShowColumns, - Table: $2.(*ast.TableName), - }, - } - } -| ExplainSym TableName ColumnName - { - $$ = &ast.ExplainStmt{ - Stmt: &ast.ShowStmt{ - Tp: ast.ShowColumns, - Table: $2.(*ast.TableName), - Column: $3.(*ast.ColumnName), - }, - } - } -| ExplainSym ExplainableStmt - { - $$ = &ast.ExplainStmt{ - Stmt: $2, - Format: "row", - } - } -| ExplainSym "FORMAT" "=" stringLit ExplainableStmt - { - $$ = &ast.ExplainStmt{ - Stmt: $5, - Format: $4, - } - } -| ExplainSym "ANALYZE" ExplainableStmt - { - $$ = &ast.ExplainStmt { - Stmt: $3, - Format: "row", - Analyze: true, - } - } - -LengthNum: - NUM - { - $$ = getUint64FromNUM($1) - } - -NUM: - intLit - -Expression: - singleAtIdentifier assignmentEq Expression %prec assignmentEq - { - v := $1 - v = strings.TrimPrefix(v, "@") - $$ = &ast.VariableExpr{ - Name: v, - IsGlobal: false, - IsSystem: false, - Value: $3, - } - } -| Expression logOr Expression %prec pipes - { - $$ = &ast.BinaryOperationExpr{Op: opcode.LogicOr, L: $1, R: $3} - } -| Expression "XOR" Expression %prec xor - { - $$ = &ast.BinaryOperationExpr{Op: opcode.LogicXor, L: $1, R: $3} - } -| Expression logAnd Expression %prec andand - { - $$ = &ast.BinaryOperationExpr{Op: opcode.LogicAnd, L: $1, R: $3} - } -| "NOT" Expression %prec not - { - expr, ok := $2.(*ast.ExistsSubqueryExpr) - if ok { - expr.Not = true - $$ = $2 - } else { - $$ = &ast.UnaryOperationExpr{Op: opcode.Not, V: $2} - } - } -| BoolPri IsOrNotOp trueKwd %prec is - { - $$ = &ast.IsTruthExpr{Expr:$1, Not: !$2.(bool), True: int64(1)} - } -| BoolPri IsOrNotOp falseKwd %prec is - { - $$ = &ast.IsTruthExpr{Expr:$1, Not: !$2.(bool), True: int64(0)} - } -| BoolPri IsOrNotOp "UNKNOWN" %prec is - { - /* https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_is */ - $$ = &ast.IsNullExpr{Expr: $1, Not: !$2.(bool)} - } -| BoolPri - -MaxValueOrExpression: - "MAXVALUE" - { - $$ = &ast.MaxValueExpr{} - } -| Expression - { - $$ = $1 - } - - -logOr: - pipesAsOr -| "OR" - -logAnd: -"&&" | "AND" - -ExpressionList: - Expression - { - $$ = []ast.ExprNode{$1} - } -| ExpressionList ',' Expression - { - $$ = append($1.([]ast.ExprNode), $3) - } - -MaxValueOrExpressionList: - MaxValueOrExpression - { - $$ = []ast.ExprNode{$1} -} -| MaxValueOrExpressionList ',' MaxValueOrExpression -{ - $$ = append($1.([]ast.ExprNode), $3) - } - - -ExpressionListOpt: - { - $$ = []ast.ExprNode{} - } -| ExpressionList - -FuncDatetimePrecListOpt: - { - $$ = []ast.ExprNode{} - } -| FuncDatetimePrecList - { - $$ = $1 - } - -FuncDatetimePrecList: - intLit - { - expr := ast.NewValueExpr($1) - $$ = []ast.ExprNode{expr} - } - -BoolPri: - BoolPri IsOrNotOp "NULL" %prec is - { - $$ = &ast.IsNullExpr{Expr: $1, Not: !$2.(bool)} - } -| BoolPri CompareOp PredicateExpr %prec eq - { - $$ = &ast.BinaryOperationExpr{Op: $2.(opcode.Op), L: $1, R: $3} - } -| BoolPri CompareOp AnyOrAll SubSelect %prec eq - { - sq := $4.(*ast.SubqueryExpr) - sq.MultiRows = true - $$ = &ast.CompareSubqueryExpr{Op: $2.(opcode.Op), L: $1, R: sq, All: $3.(bool)} - } -| BoolPri CompareOp singleAtIdentifier assignmentEq PredicateExpr %prec assignmentEq - { - v := $3 - v = strings.TrimPrefix(v, "@") - variable := &ast.VariableExpr{ - Name: v, - IsGlobal: false, - IsSystem: false, - Value: $5, - } - $$ = &ast.BinaryOperationExpr{Op: $2.(opcode.Op), L: $1, R: variable} - } -| PredicateExpr - -CompareOp: - ">=" - { - $$ = opcode.GE - } -| '>' - { - $$ = opcode.GT - } -| "<=" - { - $$ = opcode.LE - } -| '<' - { - $$ = opcode.LT - } -| "!=" - { - $$ = opcode.NE - } -| "<>" - { - $$ = opcode.NE - } -| "=" - { - $$ = opcode.EQ - } -| "<=>" - { - $$ = opcode.NullEQ - } - -BetweenOrNotOp: - "BETWEEN" - { - $$ = true - } -| "NOT" "BETWEEN" - { - $$ = false - } - -IsOrNotOp: - "IS" - { - $$ = true - } -| "IS" "NOT" - { - $$ = false - } - -InOrNotOp: - "IN" - { - $$ = true - } -| "NOT" "IN" - { - $$ = false - } - -LikeOrNotOp: - "LIKE" - { - $$ = true - } -| "NOT" "LIKE" - { - $$ = false - } - -RegexpOrNotOp: - RegexpSym - { - $$ = true - } -| "NOT" RegexpSym - { - $$ = false - } - -AnyOrAll: - "ANY" - { - $$ = false - } -| "SOME" - { - $$ = false - } -| "ALL" - { - $$ = true - } - -PredicateExpr: - BitExpr InOrNotOp '(' ExpressionList ')' - { - $$ = &ast.PatternInExpr{Expr: $1, Not: !$2.(bool), List: $4.([]ast.ExprNode)} - } -| BitExpr InOrNotOp SubSelect - { - sq := $3.(*ast.SubqueryExpr) - sq.MultiRows = true - $$ = &ast.PatternInExpr{Expr: $1, Not: !$2.(bool), Sel: sq} - } -| BitExpr BetweenOrNotOp BitExpr "AND" PredicateExpr - { - $$ = &ast.BetweenExpr{ - Expr: $1, - Left: $3, - Right: $5, - Not: !$2.(bool), - } - } -| BitExpr LikeOrNotOp SimpleExpr LikeEscapeOpt - { - escape := $4.(string) - if len(escape) > 1 { - yylex.Errorf("Incorrect arguments %s to ESCAPE", escape) - return 1 - } else if len(escape) == 0 { - escape = "\\" - } - $$ = &ast.PatternLikeExpr{ - Expr: $1, - Pattern: $3, - Not: !$2.(bool), - Escape: escape[0], - } - } -| BitExpr RegexpOrNotOp SimpleExpr - { - $$ = &ast.PatternRegexpExpr{Expr: $1, Pattern: $3, Not: !$2.(bool)} - } -| BitExpr - -RegexpSym: -"REGEXP" | "RLIKE" - -LikeEscapeOpt: - %prec empty - { - $$ = "\\" - } -| "ESCAPE" stringLit - { - $$ = $2 - } - -Field: - '*' - { - $$ = &ast.SelectField{WildCard: &ast.WildCardField{}} - } -| Identifier '.' '*' - { - wildCard := &ast.WildCardField{Table: model.NewCIStr($1)} - $$ = &ast.SelectField{WildCard: wildCard} - } -| Identifier '.' Identifier '.' '*' - { - wildCard := &ast.WildCardField{Schema: model.NewCIStr($1), Table: model.NewCIStr($3)} - $$ = &ast.SelectField{WildCard: wildCard} - } -| Expression FieldAsNameOpt - { - expr := $1 - asName := $2.(string) - $$ = &ast.SelectField{Expr: expr, AsName: model.NewCIStr(asName)} - } -| '{' Identifier Expression '}' FieldAsNameOpt - { - /* - * ODBC escape syntax. - * See https://dev.mysql.com/doc/refman/5.7/en/expressions.html - */ - expr := $3 - asName := $5.(string) - $$ = &ast.SelectField{Expr: expr, AsName: model.NewCIStr(asName)} - } - -FieldAsNameOpt: - /* EMPTY */ - { - $$ = "" - } -| FieldAsName - { - $$ = $1 - } - -FieldAsName: - Identifier - { - $$ = $1 - } -| "AS" Identifier - { - $$ = $2 - } -| stringLit - { - $$ = $1 - } -| "AS" stringLit - { - $$ = $2 - } - -FieldList: - Field - { - field := $1.(*ast.SelectField) - field.Offset = parser.startOffset(&yyS[yypt]) - $$ = []*ast.SelectField{field} - } -| FieldList ',' Field - { - - fl := $1.([]*ast.SelectField) - last := fl[len(fl)-1] - if last.Expr != nil && last.AsName.O == "" { - lastEnd := parser.endOffset(&yyS[yypt-1]) - last.SetText(parser.src[last.Offset:lastEnd]) - } - newField := $3.(*ast.SelectField) - newField.Offset = parser.startOffset(&yyS[yypt]) - $$ = append(fl, newField) - } - -GroupByClause: - "GROUP" "BY" ByList - { - $$ = &ast.GroupByClause{Items: $3.([]*ast.ByItem)} - } - -HavingClause: - { - $$ = nil - } -| "HAVING" Expression - { - $$ = &ast.HavingClause{Expr: $2} - } - -IfExists: - { - $$ = false - } -| "IF" "EXISTS" - { - $$ = true - } - -IfNotExists: - { - $$ = false - } -| "IF" "NOT" "EXISTS" - { - $$ = true - } - - -IgnoreOptional: - { - $$ = false - } -| "IGNORE" - { - $$ = true - } - -IndexName: - { - $$ = "" - } -| Identifier - { - //"index name" - $$ = $1 - } - -IndexOptionList: - { - $$ = nil - } -| IndexOptionList IndexOption - { - // Merge the options - if $1 == nil { - $$ = $2 - } else { - opt1 := $1.(*ast.IndexOption) - opt2 := $2.(*ast.IndexOption) - if len(opt2.Comment) > 0 { - opt1.Comment = opt2.Comment - } else if opt2.Tp != 0 { - opt1.Tp = opt2.Tp - } - $$ = opt1 - } - } - - -IndexOption: - "KEY_BLOCK_SIZE" EqOpt LengthNum - { - $$ = &ast.IndexOption{ - // TODO bug should be fix here! - // KeyBlockSize: $1.(uint64), - } - } -| IndexType - { - $$ = &ast.IndexOption { - Tp: $1.(model.IndexType), - } - } -| "COMMENT" stringLit - { - $$ = &ast.IndexOption { - Comment: $2, - } - } - -IndexType: - "USING" "BTREE" - { - $$ = model.IndexTypeBtree - } -| "USING" "HASH" - { - $$ = model.IndexTypeHash - } - -IndexTypeOpt: - { - $$ = nil - } -| IndexType - { - $$ = $1 - } - -/**********************************Identifier********************************************/ -Identifier: -identifier | UnReservedKeyword | NotKeywordToken | TiDBKeyword - -UnReservedKeyword: - "ACTION" | "ASCII" | "AUTO_INCREMENT" | "AFTER" | "ALWAYS" | "AVG" | "BEGIN" | "BIT" | "BOOL" | "BOOLEAN" | "BTREE" | "BYTE" | "CLEANUP" | "CHARSET" -| "COLUMNS" | "COMMIT" | "COMPACT" | "COMPRESSED" | "CONSISTENT" | "DATA" | "DATE" %prec lowerThanStringLitToken| "DATETIME" | "DAY" | "DEALLOCATE" | "DO" | "DUPLICATE" -| "DYNAMIC"| "END" | "ENGINE" | "ENGINES" | "ENUM" | "ERRORS" | "ESCAPE" | "EXECUTE" | "FIELDS" | "FIRST" | "FIXED" | "FLUSH" | "FORMAT" | "FULL" |"GLOBAL" -| "HASH" | "HOUR" | "LESS" | "LOCAL" | "NAMES" | "OFFSET" | "PASSWORD" %prec lowerThanEq | "PREPARE" | "QUICK" | "REDUNDANT" -| "ROLLBACK" | "SESSION" | "SIGNED" | "SNAPSHOT" | "START" | "STATUS" | "SUBPARTITIONS" | "SUBPARTITION" | "TABLES" | "TABLESPACE" | "TEXT" | "THAN" | "TIME" %prec lowerThanStringLitToken -| "TIMESTAMP" %prec lowerThanStringLitToken | "TRACE" | "TRANSACTION" | "TRUNCATE" | "UNKNOWN" | "VALUE" | "WARNINGS" | "YEAR" | "MODE" | "WEEK" | "ANY" | "SOME" | "USER" | "IDENTIFIED" -| "COLLATION" | "COMMENT" | "AVG_ROW_LENGTH" | "CONNECTION" | "CHECKSUM" | "COMPRESSION" | "KEY_BLOCK_SIZE" | "MASTER" | "MAX_ROWS" -| "MIN_ROWS" | "NATIONAL" | "ROW" | "ROW_FORMAT" | "QUARTER" | "GRANTS" | "TRIGGERS" | "DELAY_KEY_WRITE" | "ISOLATION" | "JSON" -| "REPEATABLE" | "COMMITTED" | "UNCOMMITTED" | "ONLY" | "SERIALIZABLE" | "LEVEL" | "VARIABLES" | "SQL_CACHE" | "INDEXES" | "PROCESSLIST" -| "SQL_NO_CACHE" | "DISABLE" | "ENABLE" | "REVERSE" | "PRIVILEGES" | "NO" | "BINLOG" | "FUNCTION" | "VIEW" | "MODIFY" | "EVENTS" | "PARTITIONS" -| "NONE" | "SUPER" | "EXCLUSIVE" | "STATS_PERSISTENT" | "ROW_COUNT" | "COALESCE" | "MONTH" | "PROCESS" | "PROFILES" -| "MICROSECOND" | "MINUTE" | "PLUGINS" | "QUERY" | "QUERIES" | "SECOND" | "SEPARATOR" | "SHARE" | "SHARED" | "SLOW" | "MAX_CONNECTIONS_PER_HOUR" | "MAX_QUERIES_PER_HOUR" | "MAX_UPDATES_PER_HOUR" -| "MAX_USER_CONNECTIONS" | "REPLICATION" | "CLIENT" | "SLAVE" | "RELOAD" | "TEMPORARY" | "ROUTINE" | "EVENT" | "ALGORITHM" | "DEFINER" | "INVOKER" | "MERGE" | "TEMPTABLE" | "UNDEFINED" | "SECURITY" | "CASCADED" | "RECOVER" - - - -TiDBKeyword: -"ADMIN" | "BUCKETS" | "CANCEL" | "DDL" | "JOBS" | "JOB" | "STATS" | "STATS_META" | "STATS_HISTOGRAMS" | "STATS_BUCKETS" | "STATS_HEALTHY" | "TIDB" | "TIDB_HJ" | "TIDB_SMJ" | "TIDB_INLJ" - -NotKeywordToken: - "ADDDATE" | "BIT_AND" | "BIT_OR" | "BIT_XOR" | "CAST" | "COPY" | "COUNT" | "CURTIME" | "DATE_ADD" | "DATE_SUB" | "EXTRACT" | "GET_FORMAT" | "GROUP_CONCAT" | "INPLACE" | "INTERNAL" -|"MIN" | "MAX" | "MAX_EXECUTION_TIME" | "NOW" | "RECENT" | "POSITION" | "SUBDATE" | "SUBSTRING" | "SUM" | "TIMESTAMPADD" | "TIMESTAMPDIFF" | "TOP" | "TRIM" - -/************************************************************************************ - * - * Insert Statements - * - * TODO: support PARTITION - **********************************************************************************/ -InsertIntoStmt: - "INSERT" PriorityOpt IgnoreOptional IntoOpt TableName InsertValues OnDuplicateKeyUpdate - { - x := $6.(*ast.InsertStmt) - x.Priority = $2.(mysql.PriorityEnum) - x.IgnoreErr = $3.(bool) - // Wraps many layers here so that it can be processed the same way as select statement. - ts := &ast.TableSource{Source: $5.(*ast.TableName)} - x.Table = &ast.TableRefsClause{TableRefs: &ast.Join{Left: ts}} - if $7 != nil { - x.OnDuplicate = $7.([]*ast.Assignment) - } - $$ = x - } - -IntoOpt: - {} -| "INTO" - -InsertValues: - '(' ColumnNameListOpt ')' ValueSym ValuesList - { - $$ = &ast.InsertStmt{ - Columns: $2.([]*ast.ColumnName), - Lists: $5.([][]ast.ExprNode), - } - } -| '(' ColumnNameListOpt ')' SelectStmt - { - $$ = &ast.InsertStmt{Columns: $2.([]*ast.ColumnName), Select: $4.(*ast.SelectStmt)} - } -| '(' ColumnNameListOpt ')' '(' SelectStmt ')' - { - $$ = &ast.InsertStmt{Columns: $2.([]*ast.ColumnName), Select: $5.(*ast.SelectStmt)} - } -| '(' ColumnNameListOpt ')' UnionStmt - { - $$ = &ast.InsertStmt{Columns: $2.([]*ast.ColumnName), Select: $4.(*ast.UnionStmt)} - } -| ValueSym ValuesList %prec insertValues - { - $$ = &ast.InsertStmt{Lists: $2.([][]ast.ExprNode)} - } -| '(' SelectStmt ')' - { - $$ = &ast.InsertStmt{Select: $2.(*ast.SelectStmt)} - } -| SelectStmt - { - $$ = &ast.InsertStmt{Select: $1.(*ast.SelectStmt)} - } -| UnionStmt - { - $$ = &ast.InsertStmt{Select: $1.(*ast.UnionStmt)} - } -| "SET" ColumnSetValueList - { - $$ = &ast.InsertStmt{Setlist: $2.([]*ast.Assignment)} - } - -ValueSym: -"VALUE" | "VALUES" - -ValuesList: - RowValue - { - $$ = [][]ast.ExprNode{$1.([]ast.ExprNode)} - } -| ValuesList ',' RowValue - { - $$ = append($1.([][]ast.ExprNode), $3.([]ast.ExprNode)) - } - -RowValue: - '(' ValuesOpt ')' - { - $$ = $2 - } - -ValuesOpt: - { - $$ = []ast.ExprNode{} - } -| Values - -Values: - Values ',' ExprOrDefault - { - $$ = append($1.([]ast.ExprNode), $3) - } -| ExprOrDefault - { - $$ = []ast.ExprNode{$1} - } - -ExprOrDefault: - Expression -| "DEFAULT" - { - $$ = &ast.DefaultExpr{} - } - -ColumnSetValue: - ColumnName eq Expression - { - $$ = &ast.Assignment{ - Column: $1.(*ast.ColumnName), - Expr: $3, - } - } - -ColumnSetValueList: - { - $$ = []*ast.Assignment{} - } -| ColumnSetValue - { - $$ = []*ast.Assignment{$1.(*ast.Assignment)} - } -| ColumnSetValueList ',' ColumnSetValue - { - $$ = append($1.([]*ast.Assignment), $3.(*ast.Assignment)) - } - -/* - * ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... - * See https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html - */ -OnDuplicateKeyUpdate: - { - $$ = nil - } -| "ON" "DUPLICATE" "KEY" "UPDATE" AssignmentList - { - $$ = $5 - } - -/***********************************Insert Statements END************************************/ - -/************************************************************************************ - * Replace Statements - * See https://dev.mysql.com/doc/refman/5.7/en/replace.html - * - * TODO: support PARTITION - **********************************************************************************/ -ReplaceIntoStmt: - "REPLACE" PriorityOpt IntoOpt TableName InsertValues - { - x := $5.(*ast.InsertStmt) - x.IsReplace = true - x.Priority = $2.(mysql.PriorityEnum) - ts := &ast.TableSource{Source: $4.(*ast.TableName)} - x.Table = &ast.TableRefsClause{TableRefs: &ast.Join{Left: ts}} - $$ = x - } - -/***********************************Replace Statements END************************************/ - -ODBCDateTimeType: - "d" - { - $$ = ast.DateLiteral - } -| "t" - { - $$ = ast.TimeLiteral - } -| "ts" - { - $$ = ast.TimestampLiteral - } - -Literal: - "FALSE" - { - $$ = ast.NewValueExpr(false) - } -| "NULL" - { - $$ = ast.NewValueExpr(nil) - } -| "TRUE" - { - $$ = ast.NewValueExpr(true) - } -| floatLit - { - $$ = ast.NewValueExpr($1) - } -| decLit - { - $$ = ast.NewValueExpr($1) - } -| intLit - { - $$ = ast.NewValueExpr($1) - } -| StringLiteral %prec lowerThanStringLitToken - { - $$ = $1 - } -| "UNDERSCORE_CHARSET" stringLit - { - // See https://dev.mysql.com/doc/refman/5.7/en/charset-literal.html - co, err := charset.GetDefaultCollation($1) - if err != nil { - yylex.Errorf("Get collation error for charset: %s", $1) - return 1 - } - expr := ast.NewValueExpr($2) - tp := expr.GetType() - tp.Charset = $1 - tp.Collate = co - if tp.Collate == charset.CollationBin { - tp.Flag |= mysql.BinaryFlag - } - $$ = expr - } -| hexLit - { - $$ = ast.NewValueExpr($1) - } -| bitLit - { - $$ = ast.NewValueExpr($1) - } - -StringLiteral: - stringLit - { - expr := ast.NewValueExpr($1) - $$ = expr - } -| StringLiteral stringLit - { - valExpr := $1.(ast.ValueExpr) - strLit := valExpr.GetString() - expr := ast.NewValueExpr(strLit+$2) - // Fix #4239, use first string literal as projection name. - if valExpr.GetProjectionOffset() >= 0 { - expr.SetProjectionOffset(valExpr.GetProjectionOffset()) - } else { - expr.SetProjectionOffset(len(strLit)) - } - $$ = expr - } - - -OrderBy: - "ORDER" "BY" ByList - { - $$ = &ast.OrderByClause{Items: $3.([]*ast.ByItem)} - } - -ByList: - ByItem - { - $$ = []*ast.ByItem{$1.(*ast.ByItem)} - } -| ByList ',' ByItem - { - $$ = append($1.([]*ast.ByItem), $3.(*ast.ByItem)) - } - -ByItem: - Expression Order - { - expr := $1 - valueExpr, ok := expr.(ast.ValueExpr) - if ok { - position, isPosition := valueExpr.GetValue().(int64) - if isPosition { - expr = &ast.PositionExpr{N: int(position)} - } - } - $$ = &ast.ByItem{Expr: expr, Desc: $2.(bool)} - } - -Order: - /* EMPTY */ - { - $$ = false // ASC by default - } -| "ASC" - { - $$ = false - } -| "DESC" - { - $$ = true - } - -OrderByOptional: - { - $$ = nil - } -| OrderBy - { - $$ = $1 - } - -BitExpr: - BitExpr '|' BitExpr %prec '|' - { - $$ = &ast.BinaryOperationExpr{Op: opcode.Or, L: $1, R: $3} - } -| BitExpr '&' BitExpr %prec '&' - { - $$ = &ast.BinaryOperationExpr{Op: opcode.And, L: $1, R: $3} - } -| BitExpr "<<" BitExpr %prec lsh - { - $$ = &ast.BinaryOperationExpr{Op: opcode.LeftShift, L: $1, R: $3} - } -| BitExpr ">>" BitExpr %prec rsh - { - $$ = &ast.BinaryOperationExpr{Op: opcode.RightShift, L: $1, R: $3} - } -| BitExpr '+' BitExpr %prec '+' - { - $$ = &ast.BinaryOperationExpr{Op: opcode.Plus, L: $1, R: $3} - } -| BitExpr '-' BitExpr %prec '-' - { - $$ = &ast.BinaryOperationExpr{Op: opcode.Minus, L: $1, R: $3} - } -| BitExpr '+' "INTERVAL" Expression TimeUnit %prec '+' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr("DATE_ADD"), - Args: []ast.ExprNode{ - $1, - $4, - ast.NewValueExpr($5), - }, - } - } -| BitExpr '-' "INTERVAL" Expression TimeUnit %prec '+' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr("DATE_SUB"), - Args: []ast.ExprNode{ - $1, - $4, - ast.NewValueExpr($5), - }, - } - } -| BitExpr '*' BitExpr %prec '*' - { - $$ = &ast.BinaryOperationExpr{Op: opcode.Mul, L: $1, R: $3} - } -| BitExpr '/' BitExpr %prec '/' - { - $$ = &ast.BinaryOperationExpr{Op: opcode.Div, L: $1, R: $3} - } -| BitExpr '%' BitExpr %prec '%' - { - $$ = &ast.BinaryOperationExpr{Op: opcode.Mod, L: $1, R: $3} - } -| BitExpr "DIV" BitExpr %prec div - { - $$ = &ast.BinaryOperationExpr{Op: opcode.IntDiv, L: $1, R: $3} - } -| BitExpr "MOD" BitExpr %prec mod - { - $$ = &ast.BinaryOperationExpr{Op: opcode.Mod, L: $1, R: $3} - } -| BitExpr '^' BitExpr - { - $$ = &ast.BinaryOperationExpr{Op: opcode.Xor, L: $1, R: $3} - } -| SimpleExpr - -SimpleIdent: - Identifier - { - $$ = &ast.ColumnNameExpr{Name: &ast.ColumnName{ - Name: model.NewCIStr($1), - }} - } -| Identifier '.' Identifier - { - $$ = &ast.ColumnNameExpr{Name: &ast.ColumnName{ - Table: model.NewCIStr($1), - Name: model.NewCIStr($3), - }} - } -| '.' Identifier '.' Identifier - { - $$ = &ast.ColumnNameExpr{Name: &ast.ColumnName{ - Table: model.NewCIStr($2), - Name: model.NewCIStr($4), - }} - } -| Identifier '.' Identifier '.' Identifier - { - $$ = &ast.ColumnNameExpr{Name: &ast.ColumnName{ - Schema: model.NewCIStr($1), - Table: model.NewCIStr($3), - Name: model.NewCIStr($5), - }} - } - -SimpleExpr: - SimpleIdent -| FunctionCallKeyword -| FunctionCallNonKeyword -| FunctionCallGeneric -| SimpleExpr "COLLATE" StringName %prec neg - { - // TODO: Create a builtin function hold expr and collation. When do evaluation, convert expr result using the collation. - $$ = $1 - } -| Literal -| paramMarker - { - $$ = ast.NewParamMarkerExpr(yyS[yypt].offset) - } -| Variable -| SumExpr -| '!' SimpleExpr %prec neg - { - $$ = &ast.UnaryOperationExpr{Op: opcode.Not, V: $2} - } -| '~' SimpleExpr %prec neg - { - $$ = &ast.UnaryOperationExpr{Op: opcode.BitNeg, V: $2} - } -| '-' SimpleExpr %prec neg - { - $$ = &ast.UnaryOperationExpr{Op: opcode.Minus, V: $2} - } -| '+' SimpleExpr %prec neg - { - $$ = &ast.UnaryOperationExpr{Op: opcode.Plus, V: $2} - } -| SimpleExpr pipes SimpleExpr - { - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.Concat), Args: []ast.ExprNode{$1, $3}} - } -| not2 SimpleExpr %prec neg - { - $$ = &ast.UnaryOperationExpr{Op: opcode.Not, V: $2} - } -| SubSelect -| '(' Expression ')' { - startOffset := parser.startOffset(&yyS[yypt-1]) - endOffset := parser.endOffset(&yyS[yypt]) - expr := $2 - expr.SetText(parser.src[startOffset:endOffset]) - $$ = &ast.ParenthesesExpr{Expr: expr} - } -| '(' ExpressionList ',' Expression ')' - { - values := append($2.([]ast.ExprNode), $4) - $$ = &ast.RowExpr{Values: values} - } -| "ROW" '(' ExpressionList ',' Expression ')' - { - values := append($3.([]ast.ExprNode), $5) - $$ = &ast.RowExpr{Values: values} - } -| "EXISTS" SubSelect - { - sq := $2.(*ast.SubqueryExpr) - sq.Exists = true - $$ = &ast.ExistsSubqueryExpr{Sel: sq} - } -| "BINARY" SimpleExpr %prec neg - { - // See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#operator_binary - x := types.NewFieldType(mysql.TypeString) - x.Charset = charset.CharsetBin - x.Collate = charset.CharsetBin - $$ = &ast.FuncCastExpr{ - Expr: $2, - Tp: x, - FunctionType: ast.CastBinaryOperator, - } - } -| builtinCast '(' Expression "AS" CastType ')' - { - /* See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_cast */ - tp := $5.(*types.FieldType) - defaultFlen, defaultDecimal := mysql.GetDefaultFieldLengthAndDecimalForCast(tp.Tp) - if tp.Flen == types.UnspecifiedLength { - tp.Flen = defaultFlen - } - if tp.Decimal == types.UnspecifiedLength { - tp.Decimal = defaultDecimal - } - $$ = &ast.FuncCastExpr{ - Expr: $3, - Tp: tp, - FunctionType: ast.CastFunction, - } - } -| "CASE" ExpressionOpt WhenClauseList ElseOpt "END" - { - x := &ast.CaseExpr{WhenClauses: $3.([]*ast.WhenClause)} - if $2 != nil { - x.Value = $2 - } - if $4 != nil { - x.ElseClause = $4.(ast.ExprNode) - } - $$ = x - } -| "CONVERT" '(' Expression ',' CastType ')' - { - // See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert - tp := $5.(*types.FieldType) - defaultFlen, defaultDecimal := mysql.GetDefaultFieldLengthAndDecimalForCast(tp.Tp) - if tp.Flen == types.UnspecifiedLength { - tp.Flen = defaultFlen - } - if tp.Decimal == types.UnspecifiedLength { - tp.Decimal = defaultDecimal - } - $$ = &ast.FuncCastExpr{ - Expr: $3, - Tp: tp, - FunctionType: ast.CastConvertFunction, - } - } -| "CONVERT" '(' Expression "USING" StringName ')' - { - // See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert - charset1 := ast.NewValueExpr($5) - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{$3, charset1}, - } - } -| "DEFAULT" '(' SimpleIdent ')' - { - $$ = &ast.DefaultExpr{Name: $3.(*ast.ColumnNameExpr).Name} - } -| "VALUES" '(' SimpleIdent ')' %prec lowerThanInsertValues - { - $$ = &ast.ValuesExpr{Column: $3.(*ast.ColumnNameExpr)} - } -| SimpleIdent jss stringLit - { - expr := ast.NewValueExpr($3) - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.JSONExtract), Args: []ast.ExprNode{$1, expr}} - } -| SimpleIdent juss stringLit - { - expr := ast.NewValueExpr($3) - extract := &ast.FuncCallExpr{FnName: model.NewCIStr(ast.JSONExtract), Args: []ast.ExprNode{$1, expr}} - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.JSONUnquote), Args: []ast.ExprNode{extract}} - } - -DistinctKwd: - "DISTINCT" -| "DISTINCTROW" - -DistinctOpt: - "ALL" - { - $$ = false - } -| DistinctKwd - { - $$ = true - } - -DefaultFalseDistinctOpt: - { - $$ = false - } -| DistinctOpt - -DefaultTrueDistinctOpt: - { - $$ = true - } -| DistinctOpt - -BuggyDefaultFalseDistinctOpt: - DefaultFalseDistinctOpt -| DistinctKwd "ALL" - { - $$ = true - } - - -FunctionNameConflict: - "ASCII" -| "CHARSET" -| "COALESCE" -| "COLLATION" -| "DATE" -| "DATABASE" -| "DAY" -| "HOUR" -| "IF" -| "INTERVAL" %prec lowerThanIntervalKeyword -| "FORMAT" -| "LEFT" -| "MICROSECOND" -| "MINUTE" -| "MONTH" -| builtinNow -| "QUARTER" -| "REPEAT" -| "REPLACE" -| "REVERSE" -| "RIGHT" -| "ROW_COUNT" -| "SECOND" -| "TIME" -| "TIMESTAMP" -| "TRUNCATE" -| "USER" -| "WEEK" -| "YEAR" - -OptionalBraces: - {} | '(' ')' {} - -FunctionNameOptionalBraces: - "CURRENT_USER" -| "CURRENT_DATE" -| "UTC_DATE" - -FunctionNameDatetimePrecision: - "CURRENT_TIME" -| "CURRENT_TIMESTAMP" -| "LOCALTIME" -| "LOCALTIMESTAMP" -| "UTC_TIME" -| "UTC_TIMESTAMP" - -FunctionCallKeyword: - FunctionNameConflict '(' ExpressionListOpt ')' - { - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr($1), Args: $3.([]ast.ExprNode)} - } -| builtinUser '(' ExpressionListOpt ')' - { - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr($1), Args: $3.([]ast.ExprNode)} - } -| FunctionNameOptionalBraces OptionalBraces - { - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr($1)} - } -| builtinCurDate '(' ')' - { - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr($1)} - } -| FunctionNameDatetimePrecision FuncDatetimePrec - { - args := []ast.ExprNode{} - if $2 != nil { - args = append(args, $2.(ast.ExprNode)) - } - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr($1), Args: args} - } -| "CHAR" '(' ExpressionList ')' - { - nilVal := ast.NewValueExpr(nil) - args := $3.([]ast.ExprNode) - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr(ast.CharFunc), - Args: append(args, nilVal), - } - } -| "CHAR" '(' ExpressionList "USING" StringName ')' - { - charset1 := ast.NewValueExpr($5) - args := $3.([]ast.ExprNode) - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr(ast.CharFunc), - Args: append(args, charset1), - } - } -| "DATE" stringLit - { - expr := ast.NewValueExpr($2) - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.DateLiteral), Args: []ast.ExprNode{expr}} - } -| "TIME" stringLit - { - expr := ast.NewValueExpr($2) - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.TimeLiteral), Args: []ast.ExprNode{expr}} - } -| "TIMESTAMP" stringLit - { - expr := ast.NewValueExpr($2) - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.TimestampLiteral), Args: []ast.ExprNode{expr}} - } -| "INSERT" '(' ExpressionListOpt ')' - { - $$ = &ast.FuncCallExpr{FnName:model.NewCIStr(ast.InsertFunc), Args: $3.([]ast.ExprNode)} - } -| "MOD" '(' BitExpr ',' BitExpr ')' - { - $$ = &ast.BinaryOperationExpr{Op: opcode.Mod, L: $3, R: $5} - } -| "PASSWORD" '(' ExpressionListOpt ')' - { - $$ = &ast.FuncCallExpr{FnName:model.NewCIStr(ast.PasswordFunc), Args: $3.([]ast.ExprNode)} - } -| '{' ODBCDateTimeType stringLit '}' - { - // This is ODBC syntax for date and time literals. - // See: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html - expr := ast.NewValueExpr($3) - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr($2), Args: []ast.ExprNode{expr}} - } - -FunctionCallNonKeyword: - builtinCurTime '(' FuncDatetimePrecListOpt ')' - { - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr($1), Args: $3.([]ast.ExprNode)} - } -| builtinSysDate '(' FuncDatetimePrecListOpt ')' - { - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr($1), Args: $3.([]ast.ExprNode)} - } -| FunctionNameDateArithMultiForms '(' Expression ',' Expression ')' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{ - $3, - $5, - ast.NewValueExpr("DAY"), - }, - } - } -| FunctionNameDateArithMultiForms '(' Expression ',' "INTERVAL" Expression TimeUnit ')' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{ - $3, - $6, - ast.NewValueExpr($7), - }, - } - } -| FunctionNameDateArith '(' Expression ',' "INTERVAL" Expression TimeUnit ')' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{ - $3, - $6, - ast.NewValueExpr($7), - }, - } - } -| builtinExtract '(' TimeUnit "FROM" Expression ')' - { - timeUnit := ast.NewValueExpr($3) - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{timeUnit, $5}, - } - } -| "GET_FORMAT" '(' GetFormatSelector ',' Expression ')' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{ast.NewValueExpr($3), $5}, - } - } -| builtinPosition '(' BitExpr "IN" Expression ')' - { - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr($1), Args: []ast.ExprNode{$3, $5}} - } -| builtinSubstring '(' Expression ',' Expression ')' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{$3, $5}, - } - } -| builtinSubstring '(' Expression "FROM" Expression ')' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{$3, $5}, - } - } -| builtinSubstring '(' Expression ',' Expression ',' Expression ')' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{$3, $5, $7}, - } - } -| builtinSubstring '(' Expression "FROM" Expression "FOR" Expression ')' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{$3, $5, $7}, - } - } -| "TIMESTAMPADD" '(' TimestampUnit ',' Expression ',' Expression ')' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{ast.NewValueExpr($3), $5, $7}, - } - } -| "TIMESTAMPDIFF" '(' TimestampUnit ',' Expression ',' Expression ')' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{ast.NewValueExpr($3), $5, $7}, - } - } -| builtinTrim '(' Expression ')' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{$3}, - } - } -| builtinTrim '(' Expression "FROM" Expression ')' - { - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{$5, $3}, - } - } -| builtinTrim '(' TrimDirection "FROM" Expression ')' - { - nilVal := ast.NewValueExpr(nil) - direction := ast.NewValueExpr(int($3.(ast.TrimDirectionType))) - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{$5, nilVal, direction}, - } - } -| builtinTrim '(' TrimDirection Expression "FROM" Expression ')' - { - direction := ast.NewValueExpr(int($3.(ast.TrimDirectionType))) - $$ = &ast.FuncCallExpr{ - FnName: model.NewCIStr($1), - Args: []ast.ExprNode{$6, $4, direction}, - } - } - -GetFormatSelector: - "DATE" - { - $$ = strings.ToUpper($1) - } -| "DATETIME" - { - $$ = strings.ToUpper($1) - } -| "TIME" - { - $$ = strings.ToUpper($1) - } -| "TIMESTAMP" - { - $$ = strings.ToUpper($1) - } - - -FunctionNameDateArith: - builtinDateAdd -| builtinDateSub - - -FunctionNameDateArithMultiForms: - builtinAddDate -| builtinSubDate - - -TrimDirection: - "BOTH" - { - $$ = ast.TrimBoth - } -| "LEADING" - { - $$ = ast.TrimLeading - } -| "TRAILING" - { - $$ = ast.TrimTrailing - } - -SumExpr: - "AVG" '(' BuggyDefaultFalseDistinctOpt Expression ')' - { - $$ = &ast.AggregateFuncExpr{F: $1, Args: []ast.ExprNode{$4}, Distinct: $3.(bool)} - } -| builtinBitAnd '(' Expression ')' - { - $$ = &ast.AggregateFuncExpr{F: $1, Args: []ast.ExprNode{$3}} - } -| builtinBitAnd '(' "ALL" Expression ')' - { - $$ = &ast.AggregateFuncExpr{F: $1, Args: []ast.ExprNode{$4}} - } -| builtinBitOr '(' Expression ')' - { - $$ = &ast.AggregateFuncExpr{F: $1, Args: []ast.ExprNode{$3}} - } -| builtinBitOr '(' "ALL" Expression ')' - { - $$ = &ast.AggregateFuncExpr{F: $1, Args: []ast.ExprNode{$4}} - } -| builtinBitXor '(' Expression ')' - { - $$ = &ast.AggregateFuncExpr{F: $1, Args: []ast.ExprNode{$3}} - } -| builtinBitXor '(' "ALL" Expression ')' - { - $$ = &ast.AggregateFuncExpr{F: $1, Args: []ast.ExprNode{$4}} - } -| builtinCount '(' DistinctKwd ExpressionList ')' - { - $$ = &ast.AggregateFuncExpr{F: $1, Args: $4.([]ast.ExprNode), Distinct: true} - } -| builtinCount '(' "ALL" Expression ')' - { - $$ = &ast.AggregateFuncExpr{F: $1, Args: []ast.ExprNode{$4}} - } -| builtinCount '(' Expression ')' - { - $$ = &ast.AggregateFuncExpr{F: $1, Args: []ast.ExprNode{$3}} - } -| builtinCount '(' '*' ')' - { - args := []ast.ExprNode{ast.NewValueExpr(1)} - $$ = &ast.AggregateFuncExpr{F: $1, Args: args} - } -| builtinGroupConcat '(' BuggyDefaultFalseDistinctOpt ExpressionList OrderByOptional OptGConcatSeparator ')' - { - args := $4.([]ast.ExprNode) - args = append(args, $6.(ast.ExprNode)) - $$ = &ast.AggregateFuncExpr{F: $1, Args: args, Distinct: $3.(bool)} - } -| builtinMax '(' BuggyDefaultFalseDistinctOpt Expression ')' - { - $$ = &ast.AggregateFuncExpr{F: $1, Args: []ast.ExprNode{$4}, Distinct: $3.(bool)} - } -| builtinMin '(' BuggyDefaultFalseDistinctOpt Expression ')' - { - $$ = &ast.AggregateFuncExpr{F: $1, Args: []ast.ExprNode{$4}, Distinct: $3.(bool)} - } -| builtinSum '(' BuggyDefaultFalseDistinctOpt Expression ')' - { - $$ = &ast.AggregateFuncExpr{F: $1, Args: []ast.ExprNode{$4}, Distinct: $3.(bool)} - } - -OptGConcatSeparator: - { - $$ = ast.NewValueExpr(",") - } -| "SEPARATOR" stringLit - { - $$ = ast.NewValueExpr($2) - } - - -FunctionCallGeneric: - identifier '(' ExpressionListOpt ')' - { - $$ = &ast.FuncCallExpr{FnName: model.NewCIStr($1), Args: $3.([]ast.ExprNode)} - } - -FuncDatetimePrec: - { - $$ = nil - } -| '(' ')' - { - $$ = nil - } -| '(' intLit ')' - { - expr := ast.NewValueExpr($2) - $$ = expr - } - -TimeUnit: - "MICROSECOND" - { - $$ = strings.ToUpper($1) - } -| "SECOND" - { - $$ = strings.ToUpper($1) - } -| "MINUTE" - { - $$ = strings.ToUpper($1) - } -| "HOUR" - { - $$ = strings.ToUpper($1) - } -| "DAY" - { - $$ = strings.ToUpper($1) - } -| "WEEK" - { - $$ = strings.ToUpper($1) - } -| "MONTH" - { - $$ = strings.ToUpper($1) - } -| "QUARTER" - { - $$ = strings.ToUpper($1) - } -| "YEAR" - { - $$ = strings.ToUpper($1) - } -| "SECOND_MICROSECOND" - { - $$ = strings.ToUpper($1) - } -| "MINUTE_MICROSECOND" - { - $$ = strings.ToUpper($1) - } -| "MINUTE_SECOND" - { - $$ = strings.ToUpper($1) - } -| "HOUR_MICROSECOND" - { - $$ = strings.ToUpper($1) - } -| "HOUR_SECOND" - { - $$ = strings.ToUpper($1) - } -| "HOUR_MINUTE" - { - $$ = strings.ToUpper($1) - } -| "DAY_MICROSECOND" - { - $$ = strings.ToUpper($1) - } -| "DAY_SECOND" - { - $$ = strings.ToUpper($1) - } -| "DAY_MINUTE" - { - $$ = strings.ToUpper($1) - } -| "DAY_HOUR" - { - $$ = strings.ToUpper($1) - } -| "YEAR_MONTH" - { - $$ = strings.ToUpper($1) - } - -TimestampUnit: - "MICROSECOND" - { - $$ = strings.ToUpper($1) - } -| "SECOND" - { - $$ = strings.ToUpper($1) - } -| "MINUTE" - { - $$ = strings.ToUpper($1) - } -| "HOUR" - { - $$ = strings.ToUpper($1) - } -| "DAY" - { - $$ = strings.ToUpper($1) - } -| "WEEK" - { - $$ = strings.ToUpper($1) - } -| "MONTH" - { - $$ = strings.ToUpper($1) - } -| "QUARTER" - { - $$ = strings.ToUpper($1) - } -| "YEAR" - { - $$ = strings.ToUpper($1) - } - -ExpressionOpt: - { - $$ = nil - } -| Expression - { - $$ = $1 - } - -WhenClauseList: - WhenClause - { - $$ = []*ast.WhenClause{$1.(*ast.WhenClause)} - } -| WhenClauseList WhenClause - { - $$ = append($1.([]*ast.WhenClause), $2.(*ast.WhenClause)) - } - -WhenClause: - "WHEN" Expression "THEN" Expression - { - $$ = &ast.WhenClause{ - Expr: $2, - Result: $4, - } - } - -ElseOpt: - /* empty */ - { - $$ = nil - } -| "ELSE" Expression - { - $$ = $2 - } - -CastType: - "BINARY" OptFieldLen - { - x := types.NewFieldType(mysql.TypeVarString) - x.Flen = $2.(int) // TODO: Flen should be the flen of expression - if x.Flen != types.UnspecifiedLength { - x.Tp = mysql.TypeString - } - x.Charset = charset.CharsetBin - x.Collate = charset.CollationBin - x.Flag |= mysql.BinaryFlag - $$ = x - } -| "CHAR" OptFieldLen OptBinary - { - x := types.NewFieldType(mysql.TypeVarString) - x.Flen = $2.(int) // TODO: Flen should be the flen of expression - x.Charset = $3.(*ast.OptBinary).Charset - if $3.(*ast.OptBinary).IsBinary{ - x.Flag |= mysql.BinaryFlag - } - if x.Charset == "" { - x.Charset = charset.CharsetUTF8 - x.Collate = charset.CollationUTF8 - } - $$ = x - } -| "DATE" - { - x := types.NewFieldType(mysql.TypeDate) - x.Charset = charset.CharsetBin - x.Collate = charset.CollationBin - x.Flag |= mysql.BinaryFlag - $$ = x - } -| "DATETIME" OptFieldLen - { - x := types.NewFieldType(mysql.TypeDatetime) - x.Flen, _ = mysql.GetDefaultFieldLengthAndDecimalForCast(mysql.TypeDatetime) - x.Decimal = $2.(int) - if x.Decimal > 0 { - x.Flen = x.Flen + 1 + x.Decimal - } - x.Charset = charset.CharsetBin - x.Collate = charset.CollationBin - x.Flag |= mysql.BinaryFlag - $$ = x - } -| "DECIMAL" FloatOpt - { - fopt := $2.(*ast.FloatOpt) - x := types.NewFieldType(mysql.TypeNewDecimal) - x.Flen = fopt.Flen - x.Decimal = fopt.Decimal - x.Charset = charset.CharsetBin - x.Collate = charset.CollationBin - x.Flag |= mysql.BinaryFlag - $$ = x - } -| "TIME" OptFieldLen - { - x := types.NewFieldType(mysql.TypeDuration) - x.Flen, _ = mysql.GetDefaultFieldLengthAndDecimalForCast(mysql.TypeDuration) - x.Decimal = $2.(int) - if x.Decimal > 0 { - x.Flen = x.Flen + 1 + x.Decimal - } - x.Charset = charset.CharsetBin - x.Collate = charset.CollationBin - x.Flag |= mysql.BinaryFlag - $$ = x - } -| "SIGNED" OptInteger - { - x := types.NewFieldType(mysql.TypeLonglong) - x.Charset = charset.CharsetBin - x.Collate = charset.CollationBin - x.Flag |= mysql.BinaryFlag - $$ = x - } -| "UNSIGNED" OptInteger - { - x := types.NewFieldType(mysql.TypeLonglong) - x.Flag |= mysql.UnsignedFlag | mysql.BinaryFlag - x.Charset = charset.CharsetBin - x.Collate = charset.CollationBin - $$ = x - } -| "JSON" - { - x := types.NewFieldType(mysql.TypeJSON) - x.Flag |= mysql.BinaryFlag | (mysql.ParseToJSONFlag) - x.Charset = charset.CharsetUTF8 - x.Collate = charset.CollationUTF8 - $$ = x - } - -PriorityOpt: - { - $$ = mysql.NoPriority - } -| "LOW_PRIORITY" - { - $$ = mysql.LowPriority - } -| "HIGH_PRIORITY" - { - $$ = mysql.HighPriority - } -| "DELAYED" - { - $$ = mysql.DelayedPriority - } - -TableName: - Identifier - { - $$ = &ast.TableName{Name:model.NewCIStr($1)} - } -| Identifier '.' Identifier - { - $$ = &ast.TableName{Schema:model.NewCIStr($1), Name:model.NewCIStr($3)} - } - -TableNameList: - TableName - { - tbl := []*ast.TableName{$1.(*ast.TableName)} - $$ = tbl - } -| TableNameList ',' TableName - { - $$ = append($1.([]*ast.TableName), $3.(*ast.TableName)) - } - -QuickOptional: - %prec empty - { - $$ = false - } -| "QUICK" - { - $$ = true - } - -/***************************Prepared Statement Start****************************** - * See https://dev.mysql.com/doc/refman/5.7/en/prepare.html - * Example: - * PREPARE stmt_name FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'; - * OR - * SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'; - * PREPARE stmt_name FROM @s; - */ - -PreparedStmt: - "PREPARE" Identifier "FROM" PrepareSQL - { - var sqlText string - var sqlVar *ast.VariableExpr - switch $4.(type) { - case string: - sqlText = $4.(string) - case *ast.VariableExpr: - sqlVar = $4.(*ast.VariableExpr) - } - $$ = &ast.PrepareStmt{ - Name: $2, - SQLText: sqlText, - SQLVar: sqlVar, - } - } - -PrepareSQL: - stringLit - { - $$ = $1 - } -| UserVariable - { - $$ = $1.(interface{}) - } - - -/* - * See https://dev.mysql.com/doc/refman/5.7/en/execute.html - * Example: - * EXECUTE stmt1 USING @a, @b; - * OR - * EXECUTE stmt1; - */ -ExecuteStmt: - "EXECUTE" Identifier - { - $$ = &ast.ExecuteStmt{Name: $2} - } -| "EXECUTE" Identifier "USING" UserVariableList - { - $$ = &ast.ExecuteStmt{ - Name: $2, - UsingVars: $4.([]ast.ExprNode), - } - } - -UserVariableList: - UserVariable - { - $$ = []ast.ExprNode{$1} - } -| UserVariableList ',' UserVariable - { - $$ = append($1.([]ast.ExprNode), $3) - } - -/* - * See https://dev.mysql.com/doc/refman/5.0/en/deallocate-prepare.html - */ - -DeallocateStmt: - DeallocateSym "PREPARE" Identifier - { - $$ = &ast.DeallocateStmt{Name: $3} - } - -DeallocateSym: -"DEALLOCATE" | "DROP" - -/****************************Prepared Statement End*******************************/ - - -RollbackStmt: - "ROLLBACK" - { - $$ = &ast.RollbackStmt{} - } - -SelectStmtBasic: - "SELECT" SelectStmtOpts SelectStmtFieldList - { - st := &ast.SelectStmt { - SelectStmtOpts: $2.(*ast.SelectStmtOpts), - Distinct: $2.(*ast.SelectStmtOpts).Distinct, - Fields: $3.(*ast.FieldList), - } - $$ = st - } - -SelectStmtFromDual: - SelectStmtBasic FromDual WhereClauseOptional OrderByOptional - { - st := $1.(*ast.SelectStmt) - lastField := st.Fields.Fields[len(st.Fields.Fields)-1] - if lastField.Expr != nil && lastField.AsName.O == "" { - lastEnd := yyS[yypt-2].offset-1 - lastField.SetText(parser.src[lastField.Offset:lastEnd]) - } - if $3 != nil { - st.Where = $3.(ast.ExprNode) - } - - if $4 != nil { - st.OrderBy = $4.(*ast.OrderByClause) - } - } - - -SelectStmtFromTable: - SelectStmtBasic "FROM" - TableRefsClause WhereClauseOptional SelectStmtGroup HavingClause - { - st := $1.(*ast.SelectStmt) - st.From = $3.(*ast.TableRefsClause) - if st.SelectStmtOpts.TableHints != nil { - st.TableHints = st.SelectStmtOpts.TableHints - } - lastField := st.Fields.Fields[len(st.Fields.Fields)-1] - if lastField.Expr != nil && lastField.AsName.O == "" { - lastEnd := parser.endOffset(&yyS[yypt-4]) - lastField.SetText(parser.src[lastField.Offset:lastEnd]) - } - if $4 != nil { - st.Where = $4.(ast.ExprNode) - } - if $5 != nil { - st.GroupBy = $5.(*ast.GroupByClause) - } - if $6 != nil { - st.Having = $6.(*ast.HavingClause) - } - $$ = st - } - -SelectStmt: - SelectStmtBasic OrderByOptional SelectStmtLimit SelectLockOpt - { - st := $1.(*ast.SelectStmt) - st.LockTp = $4.(ast.SelectLockType) - lastField := st.Fields.Fields[len(st.Fields.Fields)-1] - if lastField.Expr != nil && lastField.AsName.O == "" { - src := parser.src - var lastEnd int - if $2 != nil { - lastEnd = yyS[yypt-2].offset-1 - } else if $3 != nil { - lastEnd = yyS[yypt-1].offset-1 - } else if $4 != ast.SelectLockNone { - lastEnd = yyS[yypt].offset-1 - } else { - lastEnd = len(src) - if src[lastEnd-1] == ';' { - lastEnd-- - } - } - lastField.SetText(src[lastField.Offset:lastEnd]) - } - if $2 != nil { - st.OrderBy = $2.(*ast.OrderByClause) - } - if $3 != nil { - st.Limit = $3.(*ast.Limit) - } - $$ = st - } -| SelectStmtFromDual SelectStmtLimit SelectLockOpt - { - st := $1.(*ast.SelectStmt) - st.LockTp = $3.(ast.SelectLockType) - if $2 != nil { - st.Limit = $2.(*ast.Limit) - } - $$ = st - } -| SelectStmtFromTable OrderByOptional SelectStmtLimit SelectLockOpt - { - st := $1.(*ast.SelectStmt) - st.LockTp = $4.(ast.SelectLockType) - if $2 != nil { - st.OrderBy = $2.(*ast.OrderByClause) - } - if $3 != nil { - st.Limit = $3.(*ast.Limit) - } - $$ = st - } - -FromDual: - "FROM" "DUAL" - - -TableRefsClause: - TableRefs - { - $$ = &ast.TableRefsClause{TableRefs: $1.(*ast.Join)} - } - -TableRefs: - EscapedTableRef - { - if j, ok := $1.(*ast.Join); ok { - // if $1 is Join, use it directly - $$ = j - } else { - $$ = &ast.Join{Left: $1.(ast.ResultSetNode), Right: nil} - } - } -| TableRefs ',' EscapedTableRef - { - /* from a, b is default cross join */ - $$ = &ast.Join{Left: $1.(ast.ResultSetNode), Right: $3.(ast.ResultSetNode), Tp: ast.CrossJoin} - } - -EscapedTableRef: - TableRef %prec lowerThanSetKeyword - { - $$ = $1 - } -| '{' Identifier TableRef '}' - { - /* - * ODBC escape syntax for outer join is { OJ join_table } - * Use an Identifier for OJ - */ - $$ = $3 - } - -TableRef: - TableFactor - { - $$ = $1 - } -| JoinTable - { - $$ = $1 - } - -TableFactor: - TableName TableAsNameOpt IndexHintListOpt - { - tn := $1.(*ast.TableName) - tn.IndexHints = $3.([]*ast.IndexHint) - $$ = &ast.TableSource{Source: tn, AsName: $2.(model.CIStr)} - } -| '(' SelectStmt ')' TableAsName - { - st := $2.(*ast.SelectStmt) - endOffset := parser.endOffset(&yyS[yypt-1]) - parser.setLastSelectFieldText(st, endOffset) - $$ = &ast.TableSource{Source: $2.(*ast.SelectStmt), AsName: $4.(model.CIStr)} - } -| '(' UnionStmt ')' TableAsName - { - $$ = &ast.TableSource{Source: $2.(*ast.UnionStmt), AsName: $4.(model.CIStr)} - } -| '(' TableRefs ')' - { - $$ = $2 - } - -TableAsNameOpt: - { - $$ = model.CIStr{} - } -| TableAsName - { - $$ = $1 - } - -TableAsName: - Identifier - { - $$ = model.NewCIStr($1) - } -| "AS" Identifier - { - $$ = model.NewCIStr($2) - } - -IndexHintType: - "USE" KeyOrIndex - { - $$ = ast.HintUse - } -| "IGNORE" KeyOrIndex - { - $$ = ast.HintIgnore - } -| "FORCE" KeyOrIndex - { - $$ = ast.HintForce - } - -IndexHintScope: - { - $$ = ast.HintForScan - } -| "FOR" "JOIN" - { - $$ = ast.HintForJoin - } -| "FOR" "ORDER" "BY" - { - $$ = ast.HintForOrderBy - } -| "FOR" "GROUP" "BY" - { - $$ = ast.HintForGroupBy - } - - -IndexHint: - IndexHintType IndexHintScope '(' IndexNameList ')' - { - $$ = &ast.IndexHint{ - IndexNames: $4.([]model.CIStr), - HintType: $1.(ast.IndexHintType), - HintScope: $2.(ast.IndexHintScope), - } - } - -IndexNameList: - { - var nameList []model.CIStr - $$ = nameList - } -| Identifier - { - $$ = []model.CIStr{model.NewCIStr($1)} - } -| IndexNameList ',' Identifier - { - $$ = append($1.([]model.CIStr), model.NewCIStr($3)) - } - - -IndexHintList: - IndexHint - { - $$ = []*ast.IndexHint{$1.(*ast.IndexHint)} - } -| IndexHintList IndexHint - { - $$ = append($1.([]*ast.IndexHint), $2.(*ast.IndexHint)) - } - -IndexHintListOpt: - { - var hintList []*ast.IndexHint - $$ = hintList - } -| IndexHintList - { - $$ = $1 - } - -JoinTable: - /* Use %prec to evaluate production TableRef before cross join */ - TableRef CrossOpt TableRef %prec tableRefPriority - { - $$ = &ast.Join{Left: $1.(ast.ResultSetNode), Right: $3.(ast.ResultSetNode), Tp: ast.CrossJoin} - } -| TableRef CrossOpt TableRef "ON" Expression - { - on := &ast.OnCondition{Expr: $5} - $$ = &ast.Join{Left: $1.(ast.ResultSetNode), Right: $3.(ast.ResultSetNode), Tp: ast.CrossJoin, On: on} - } -| TableRef CrossOpt TableRef "USING" '(' ColumnNameList ')' - { - $$ = &ast.Join{Left: $1.(ast.ResultSetNode), Right: $3.(ast.ResultSetNode), Tp: ast.CrossJoin, Using: $6.([]*ast.ColumnName)} - } -| TableRef JoinType OuterOpt "JOIN" TableRef "ON" Expression - { - on := &ast.OnCondition{Expr: $7} - $$ = &ast.Join{Left: $1.(ast.ResultSetNode), Right: $5.(ast.ResultSetNode), Tp: $2.(ast.JoinType), On: on} - } -| TableRef JoinType OuterOpt "JOIN" TableRef "USING" '(' ColumnNameList ')' - { - $$ = &ast.Join{Left: $1.(ast.ResultSetNode), Right: $5.(ast.ResultSetNode), Tp: $2.(ast.JoinType), Using: $8.([]*ast.ColumnName)} - } -| TableRef "NATURAL" "JOIN" TableRef - { - $$ = &ast.Join{Left: $1.(ast.ResultSetNode), Right: $4.(ast.ResultSetNode), NaturalJoin: true} - } -| TableRef "NATURAL" JoinType OuterOpt "JOIN" TableRef - { - $$ = &ast.Join{Left: $1.(ast.ResultSetNode), Right: $6.(ast.ResultSetNode), Tp: $3.(ast.JoinType), NaturalJoin: true} - } -| TableRef "STRAIGHT_JOIN" TableRef - { - $$ = &ast.Join{Left: $1.(ast.ResultSetNode), Right: $3.(ast.ResultSetNode), StraightJoin: true} - } -| TableRef "STRAIGHT_JOIN" TableRef "ON" Expression - { - on := &ast.OnCondition{Expr: $5} - $$ = &ast.Join{Left: $1.(ast.ResultSetNode), Right: $3.(ast.ResultSetNode), StraightJoin: true, On: on} - } - -JoinType: - "LEFT" - { - $$ = ast.LeftJoin - } -| "RIGHT" - { - $$ = ast.RightJoin - } - -OuterOpt: - {} -| "OUTER" - -CrossOpt: - "JOIN" -| "CROSS" "JOIN" -| "INNER" "JOIN" - - -LimitClause: - { - $$ = nil - } -| "LIMIT" LimitOption - { - $$ = &ast.Limit{Count: $2.(ast.ValueExpr)} - } - -LimitOption: - LengthNum - { - $$ = ast.NewValueExpr($1) - } -| paramMarker - { - $$ = ast.NewParamMarkerExpr(yyS[yypt].offset) - } - -SelectStmtLimit: - { - $$ = nil - } -| "LIMIT" LimitOption - { - $$ = &ast.Limit{Count: $2.(ast.ExprNode)} - } -| "LIMIT" LimitOption ',' LimitOption - { - $$ = &ast.Limit{Offset: $2.(ast.ExprNode), Count: $4.(ast.ExprNode)} - } -| "LIMIT" LimitOption "OFFSET" LimitOption - { - $$ = &ast.Limit{Offset: $4.(ast.ExprNode), Count: $2.(ast.ExprNode)} - } - - -SelectStmtOpts: - TableOptimizerHints DefaultFalseDistinctOpt PriorityOpt SelectStmtSQLCache SelectStmtCalcFoundRows SelectStmtStraightJoin - { - opt := &ast.SelectStmtOpts{} - if $1 != nil { - opt.TableHints = $1.([]*ast.TableOptimizerHint) - } - if $2 != nil { - opt.Distinct = $2.(bool) - } - if $3 != nil { - opt.Priority = $3.(mysql.PriorityEnum) - } - if $4 != nil { - opt.SQLCache = $4.(bool) - } - if $5 != nil { - opt.CalcFoundRows = $5.(bool) - } - if $6 != nil { - opt.StraightJoin = $6.(bool) - } - - $$ = opt - } - -TableOptimizerHints: - /* empty */ - { - $$ = nil - } -| hintBegin TableOptimizerHintList hintEnd - { - $$ = $2 - } - -HintTableList: - Identifier - { - $$ = []model.CIStr{model.NewCIStr($1)} - } -| HintTableList ',' Identifier - { - $$ = append($1.([]model.CIStr), model.NewCIStr($3)) - } - -TableOptimizerHintList: - TableOptimizerHintOpt - { - $$ = []*ast.TableOptimizerHint{$1.(*ast.TableOptimizerHint)} - } -| TableOptimizerHintList TableOptimizerHintOpt - { - $$ = append($1.([]*ast.TableOptimizerHint), $2.(*ast.TableOptimizerHint)) - } - -TableOptimizerHintOpt: - tidbSMJ '(' HintTableList ')' - { - $$ = &ast.TableOptimizerHint{HintName: model.NewCIStr($1), Tables: $3.([]model.CIStr)} - } -| tidbINLJ '(' HintTableList ')' - { - $$ = &ast.TableOptimizerHint{HintName: model.NewCIStr($1), Tables: $3.([]model.CIStr)} - } -| tidbHJ '(' HintTableList ')' - { - $$ = &ast.TableOptimizerHint{HintName: model.NewCIStr($1), Tables: $3.([]model.CIStr)} - } -| maxExecutionTime '(' NUM ')' - { - $$ = &ast.TableOptimizerHint{HintName: model.NewCIStr($1), MaxExecutionTime: getUint64FromNUM($3)} - } - -SelectStmtCalcFoundRows: - { - $$ = false - } -| "SQL_CALC_FOUND_ROWS" - { - $$ = true - } -SelectStmtSQLCache: - %prec empty - { - $$ = true - } -| "SQL_CACHE" - { - $$ = true - } -| "SQL_NO_CACHE" - { - $$ = false - } -SelectStmtStraightJoin: - %prec empty - { - $$ = false - } -| "STRAIGHT_JOIN" - { - $$ = true - } - -SelectStmtFieldList: - FieldList - { - $$ = &ast.FieldList{Fields: $1.([]*ast.SelectField)} - } - -SelectStmtGroup: - /* EMPTY */ - { - $$ = nil - } -| GroupByClause - -// See https://dev.mysql.com/doc/refman/5.7/en/subqueries.html -SubSelect: - '(' SelectStmt ')' - { - s := $2.(*ast.SelectStmt) - endOffset := parser.endOffset(&yyS[yypt]) - parser.setLastSelectFieldText(s, endOffset) - src := parser.src - // See the implementation of yyParse function - s.SetText(src[yyS[yypt-1].offset:yyS[yypt].offset]) - $$ = &ast.SubqueryExpr{Query: s} - } -| '(' UnionStmt ')' - { - s := $2.(*ast.UnionStmt) - src := parser.src - // See the implementation of yyParse function - s.SetText(src[yyS[yypt-1].offset:yyS[yypt].offset]) - $$ = &ast.SubqueryExpr{Query: s} - } - -// See https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-reads.html -SelectLockOpt: - /* empty */ - { - $$ = ast.SelectLockNone - } -| "FOR" "UPDATE" - { - $$ = ast.SelectLockForUpdate - } -| "LOCK" "IN" "SHARE" "MODE" - { - $$ = ast.SelectLockInShareMode - } - -// See https://dev.mysql.com/doc/refman/5.7/en/union.html -UnionStmt: - UnionClauseList "UNION" UnionOpt SelectStmtBasic OrderByOptional SelectStmtLimit SelectLockOpt - { - st := $4.(*ast.SelectStmt) - union := $1.(*ast.UnionStmt) - st.IsAfterUnionDistinct = $3.(bool) - lastSelect := union.SelectList.Selects[len(union.SelectList.Selects)-1] - endOffset := parser.endOffset(&yyS[yypt-5]) - parser.setLastSelectFieldText(lastSelect, endOffset) - union.SelectList.Selects = append(union.SelectList.Selects, st) - if $5 != nil { - union.OrderBy = $5.(*ast.OrderByClause) - } - if $6 != nil { - union.Limit = $6.(*ast.Limit) - } - if $5 == nil && $6 == nil { - st.LockTp = $7.(ast.SelectLockType) - } - $$ = union - } -| UnionClauseList "UNION" UnionOpt SelectStmtFromDual SelectStmtLimit SelectLockOpt - { - st := $4.(*ast.SelectStmt) - union := $1.(*ast.UnionStmt) - st.IsAfterUnionDistinct = $3.(bool) - lastSelect := union.SelectList.Selects[len(union.SelectList.Selects)-1] - endOffset := parser.endOffset(&yyS[yypt-4]) - parser.setLastSelectFieldText(lastSelect, endOffset) - union.SelectList.Selects = append(union.SelectList.Selects, st) - if $5 != nil { - union.Limit = $5.(*ast.Limit) - } else { - st.LockTp = $6.(ast.SelectLockType) - } - $$ = union - } -| UnionClauseList "UNION" UnionOpt SelectStmtFromTable OrderByOptional - SelectStmtLimit SelectLockOpt - { - st := $4.(*ast.SelectStmt) - union := $1.(*ast.UnionStmt) - st.IsAfterUnionDistinct = $3.(bool) - lastSelect := union.SelectList.Selects[len(union.SelectList.Selects)-1] - endOffset := parser.endOffset(&yyS[yypt-5]) - parser.setLastSelectFieldText(lastSelect, endOffset) - union.SelectList.Selects = append(union.SelectList.Selects, st) - if $5 != nil { - union.OrderBy = $5.(*ast.OrderByClause) - } - if $6 != nil { - union.Limit = $6.(*ast.Limit) - } - if $5 == nil && $6 == nil { - st.LockTp = $7.(ast.SelectLockType) - } - $$ = union - } -| UnionClauseList "UNION" UnionOpt '(' SelectStmt ')' OrderByOptional SelectStmtLimit - { - union := $1.(*ast.UnionStmt) - lastSelect := union.SelectList.Selects[len(union.SelectList.Selects)-1] - endOffset := parser.endOffset(&yyS[yypt-6]) - parser.setLastSelectFieldText(lastSelect, endOffset) - st := $5.(*ast.SelectStmt) - st.IsInBraces = true - st.IsAfterUnionDistinct = $3.(bool) - endOffset = parser.endOffset(&yyS[yypt-2]) - parser.setLastSelectFieldText(st, endOffset) - union.SelectList.Selects = append(union.SelectList.Selects, st) - if $7 != nil { - union.OrderBy = $7.(*ast.OrderByClause) - } - if $8 != nil { - union.Limit = $8.(*ast.Limit) - } - $$ = union - } - -UnionClauseList: - UnionSelect - { - selectList := &ast.UnionSelectList{Selects: []*ast.SelectStmt{$1.(*ast.SelectStmt)}} - $$ = &ast.UnionStmt{ - SelectList: selectList, - } - } -| UnionClauseList "UNION" UnionOpt UnionSelect - { - union := $1.(*ast.UnionStmt) - st := $4.(*ast.SelectStmt) - st.IsAfterUnionDistinct = $3.(bool) - lastSelect := union.SelectList.Selects[len(union.SelectList.Selects)-1] - endOffset := parser.endOffset(&yyS[yypt-2]) - parser.setLastSelectFieldText(lastSelect, endOffset) - union.SelectList.Selects = append(union.SelectList.Selects, st) - $$ = union - } - -UnionSelect: - SelectStmt - { - $$ = $1.(interface{}) - } -| '(' SelectStmt ')' - { - st := $2.(*ast.SelectStmt) - st.IsInBraces = true - endOffset := parser.endOffset(&yyS[yypt]) - parser.setLastSelectFieldText(st, endOffset) - $$ = $2 - } - -UnionOpt: -DefaultTrueDistinctOpt - - -/********************Set Statement*******************************/ -SetStmt: - "SET" VariableAssignmentList - { - $$ = &ast.SetStmt{Variables: $2.([]*ast.VariableAssignment)} - } -| "SET" "PASSWORD" EQOrAssignmentEQ PasswordOpt - { - $$ = &ast.SetPwdStmt{Password: $4.(string)} - } -| "SET" "PASSWORD" "FOR" Username EQOrAssignmentEQ PasswordOpt - { - $$ = &ast.SetPwdStmt{User: $4.(*auth.UserIdentity), Password: $6.(string)} - } -| "SET" "GLOBAL" "TRANSACTION" TransactionChars - { - vars := $4.([]*ast.VariableAssignment) - for _, v := range vars { - v.IsGlobal = true - } - $$ = &ast.SetStmt{Variables: vars} - } -| "SET" "SESSION" "TRANSACTION" TransactionChars - { - $$ = &ast.SetStmt{Variables: $4.([]*ast.VariableAssignment)} - } -| "SET" "TRANSACTION" TransactionChars - { - assigns := $3.([]*ast.VariableAssignment) - for i:=0; i 24 { - x.Tp = mysql.TypeDouble - } - } - x.Decimal = fopt.Decimal - for _, o := range $3.([]*ast.TypeOpt) { - if o.IsUnsigned { - x.Flag |= mysql.UnsignedFlag - } - if o.IsZerofill { - x.Flag |= mysql.ZerofillFlag - } - } - $$ = x - } -| BitValueType OptFieldLen - { - x := types.NewFieldType($1.(byte)) - x.Flen = $2.(int) - if x.Flen == types.UnspecifiedLength || x.Flen == 0 { - x.Flen = 1 - } else if x.Flen > 64 { - yylex.Errorf("invalid field length %d for bit type, must in [1, 64]", x.Flen) - } - $$ = x - } - -IntegerType: - "TINYINT" - { - $$ = mysql.TypeTiny - } -| "SMALLINT" - { - $$ = mysql.TypeShort - } -| "MEDIUMINT" - { - $$ = mysql.TypeInt24 - } -| "INT" - { - $$ = mysql.TypeLong - } -| "INT1" - { - $$ = mysql.TypeTiny - } -| "INT2" - { - $$ = mysql.TypeShort - } -| "INT3" - { - $$ = mysql.TypeInt24 - } -| "INT4" - { - $$ = mysql.TypeLong - } -| "INT8" - { - $$ = mysql.TypeLonglong - } -| "INTEGER" - { - $$ = mysql.TypeLong - } -| "BIGINT" - { - $$ = mysql.TypeLonglong - } - - -BooleanType: - "BOOL" - { - $$ = mysql.TypeTiny - } -| "BOOLEAN" - { - $$ = mysql.TypeTiny - } - -OptInteger: - {} -| "INTEGER" -| "INT" - -FixedPointType: - "DECIMAL" - { - $$ = mysql.TypeNewDecimal - } -| "NUMERIC" - { - $$ = mysql.TypeNewDecimal - } - -FloatingPointType: - "FLOAT" - { - $$ = mysql.TypeFloat - } -| "REAL" - { - if parser.lexer.GetSQLMode().HasRealAsFloatMode() { - $$ = mysql.TypeFloat - } else { - $$ = mysql.TypeDouble - } - } -| "DOUBLE" - { - $$ = mysql.TypeDouble - } -| "DOUBLE" "PRECISION" - { - $$ = mysql.TypeDouble - } - -BitValueType: - "BIT" - { - $$ = mysql.TypeBit - } - -StringType: - NationalOpt "CHAR" FieldLen OptBinary OptCollate - { - x := types.NewFieldType(mysql.TypeString) - x.Flen = $3.(int) - x.Charset = $4.(*ast.OptBinary).Charset - x.Collate = $5.(string) - if $4.(*ast.OptBinary).IsBinary { - x.Flag |= mysql.BinaryFlag - } - $$ = x - } -| NationalOpt "CHAR" OptBinary OptCollate - { - x := types.NewFieldType(mysql.TypeString) - x.Charset = $3.(*ast.OptBinary).Charset - x.Collate = $4.(string) - if $3.(*ast.OptBinary).IsBinary { - x.Flag |= mysql.BinaryFlag - } - $$ = x - } -| "NATIONAL" "CHARACTER" FieldLen OptBinary OptCollate - { - x := types.NewFieldType(mysql.TypeString) - x.Flen = $3.(int) - x.Charset = $4.(*ast.OptBinary).Charset - x.Collate = $5.(string) - if $4.(*ast.OptBinary).IsBinary { - x.Flag |= mysql.BinaryFlag - } - $$ = x - } -| Varchar FieldLen OptBinary OptCollate - { - x := types.NewFieldType(mysql.TypeVarchar) - x.Flen = $2.(int) - x.Charset = $3.(*ast.OptBinary).Charset - x.Collate = $4.(string) - if $3.(*ast.OptBinary).IsBinary { - x.Flag |= mysql.BinaryFlag - } - $$ = x - } -| "BINARY" OptFieldLen - { - x := types.NewFieldType(mysql.TypeString) - x.Flen = $2.(int) - x.Charset = charset.CharsetBin - x.Collate = charset.CharsetBin - x.Flag |= mysql.BinaryFlag - $$ = x - } -| "VARBINARY" FieldLen - { - x := types.NewFieldType(mysql.TypeVarchar) - x.Flen = $2.(int) - x.Charset = charset.CharsetBin - x.Collate = charset.CharsetBin - x.Flag |= mysql.BinaryFlag - $$ = x - } -| BlobType - { - x := $1.(*types.FieldType) - x.Charset = charset.CharsetBin - x.Collate = charset.CharsetBin - x.Flag |= mysql.BinaryFlag - $$ = $1.(*types.FieldType) - } -| TextType OptBinary OptCollate - { - x := $1.(*types.FieldType) - x.Charset = $2.(*ast.OptBinary).Charset - x.Collate = $3.(string) - if $2.(*ast.OptBinary).IsBinary { - x.Flag |= mysql.BinaryFlag - } - $$ = x - } -| "ENUM" '(' StringList ')' OptCharset OptCollate - { - x := types.NewFieldType(mysql.TypeEnum) - x.Elems = $3.([]string) - x.Charset = $5.(string) - x.Collate = $6.(string) - $$ = x - } -| "SET" '(' StringList ')' OptCharset OptCollate - { - x := types.NewFieldType(mysql.TypeSet) - x.Elems = $3.([]string) - x.Charset = $5.(string) - x.Collate = $6.(string) - $$ = x - } -| "JSON" - { - x := types.NewFieldType(mysql.TypeJSON) - x.Decimal = 0 - x.Charset = charset.CharsetBin - x.Collate = charset.CollationBin - $$ = x - } - -NationalOpt: - {} -| "NATIONAL" - -Varchar: -"NATIONAL" "VARCHAR" -| "VARCHAR" -| "NVARCHAR" - - -BlobType: - "TINYBLOB" - { - x := types.NewFieldType(mysql.TypeTinyBlob) - $$ = x - } -| "BLOB" OptFieldLen - { - x := types.NewFieldType(mysql.TypeBlob) - x.Flen = $2.(int) - $$ = x - } -| "MEDIUMBLOB" - { - x := types.NewFieldType(mysql.TypeMediumBlob) - $$ = x - } -| "LONGBLOB" - { - x := types.NewFieldType(mysql.TypeLongBlob) - $$ = x - } - -TextType: - "TINYTEXT" - { - x := types.NewFieldType(mysql.TypeTinyBlob) - $$ = x - - } -| "TEXT" OptFieldLen - { - x := types.NewFieldType(mysql.TypeBlob) - x.Flen = $2.(int) - $$ = x - } -| "MEDIUMTEXT" - { - x := types.NewFieldType(mysql.TypeMediumBlob) - $$ = x - } -| "LONGTEXT" - { - x := types.NewFieldType(mysql.TypeLongBlob) - $$ = x - } -| "LONG" "VARCHAR" - { - x := types.NewFieldType(mysql.TypeMediumBlob) - $$ = x - } - - -DateAndTimeType: - "DATE" - { - x := types.NewFieldType(mysql.TypeDate) - $$ = x - } -| "DATETIME" OptFieldLen - { - x := types.NewFieldType(mysql.TypeDatetime) - x.Flen = mysql.MaxDatetimeWidthNoFsp - x.Decimal = $2.(int) - if x.Decimal > 0 { - x.Flen = x.Flen + 1 + x.Decimal - } - $$ = x - } -| "TIMESTAMP" OptFieldLen - { - x := types.NewFieldType(mysql.TypeTimestamp) - x.Flen = mysql.MaxDatetimeWidthNoFsp - x.Decimal = $2.(int) - if x.Decimal > 0 { - x.Flen = x.Flen + 1 + x.Decimal - } - $$ = x - } -| "TIME" OptFieldLen - { - x := types.NewFieldType(mysql.TypeDuration) - x.Flen = mysql.MaxDurationWidthNoFsp - x.Decimal = $2.(int) - if x.Decimal > 0 { - x.Flen = x.Flen + 1 + x.Decimal - } - $$ = x - } -| "YEAR" OptFieldLen FieldOpts - { - x := types.NewFieldType(mysql.TypeYear) - x.Flen = $2.(int) - if x.Flen != types.UnspecifiedLength && x.Flen != 4 { - yylex.Errorf("Supports only YEAR or YEAR(4) column.") - return -1 - } - $$ = x - } - -FieldLen: - '(' LengthNum ')' - { - $$ = int($2.(uint64)) - } - -OptFieldLen: - { - $$ = types.UnspecifiedLength - } -| FieldLen - { - $$ = $1.(int) - } - -FieldOpt: - "UNSIGNED" - { - $$ = &ast.TypeOpt{IsUnsigned: true} - } -| "SIGNED" - { - $$ = &ast.TypeOpt{IsUnsigned: false} - } -| "ZEROFILL" - { - $$ = &ast.TypeOpt{IsZerofill: true, IsUnsigned: true} - } - -FieldOpts: - { - $$ = []*ast.TypeOpt{} - } -| FieldOpts FieldOpt - { - $$ = append($1.([]*ast.TypeOpt), $2.(*ast.TypeOpt)) - } - -FloatOpt: - { - $$ = &ast.FloatOpt{Flen: types.UnspecifiedLength, Decimal: types.UnspecifiedLength} - } -| FieldLen - { - $$ = &ast.FloatOpt{Flen: $1.(int), Decimal: types.UnspecifiedLength} - } -| Precision - { - $$ = $1.(*ast.FloatOpt) - } - -Precision: - '(' LengthNum ',' LengthNum ')' - { - $$ = &ast.FloatOpt{Flen: int($2.(uint64)), Decimal: int($4.(uint64))} - } - -OptBinMod: - { - $$ = false - } -| "BINARY" - { - $$ = true - } - -OptBinary: - { - $$ = &ast.OptBinary{ - IsBinary: false, - Charset: "", - } - } -| "BINARY" OptCharset - { - $$ = &ast.OptBinary{ - IsBinary: true, - Charset: $2.(string), - } - } -| CharsetKw CharsetName OptBinMod - { - $$ = &ast.OptBinary{ - IsBinary: $3.(bool), - Charset: $2.(string), - } - } - -OptCharset: - { - $$ = "" - } -| CharsetKw CharsetName - { - $$ = $2.(string) - } - -CharsetKw: - "CHARACTER" "SET" -| "CHARSET" - -OptCollate: - { - $$ = "" - } -| "COLLATE" StringName - { - $$ = $2.(string) - } - -StringList: - stringLit - { - $$ = []string{$1} - } -| StringList ',' stringLit - { - $$ = append($1.([]string), $3) - } - -StringName: - stringLit - { - $$ = $1 - } -| Identifier - { - $$ = $1 - } - -/*********************************************************************************** - * Update Statement - * See https://dev.mysql.com/doc/refman/5.7/en/update.html - ***********************************************************************************/ -UpdateStmt: - "UPDATE" TableOptimizerHints PriorityOpt IgnoreOptional TableRef "SET" AssignmentList WhereClauseOptional OrderByOptional LimitClause - { - var refs *ast.Join - if x, ok := $5.(*ast.Join); ok { - refs = x - } else { - refs = &ast.Join{Left: $5.(ast.ResultSetNode)} - } - st := &ast.UpdateStmt{ - Priority: $3.(mysql.PriorityEnum), - TableRefs: &ast.TableRefsClause{TableRefs: refs}, - List: $7.([]*ast.Assignment), - IgnoreErr: $4.(bool), - } - if $2 != nil { - st.TableHints = $2.([]*ast.TableOptimizerHint) - } - if $8 != nil { - st.Where = $8.(ast.ExprNode) - } - if $9 != nil { - st.Order = $9.(*ast.OrderByClause) - } - if $10 != nil { - st.Limit = $10.(*ast.Limit) - } - $$ = st - } -| "UPDATE" TableOptimizerHints PriorityOpt IgnoreOptional TableRefs "SET" AssignmentList WhereClauseOptional - { - st := &ast.UpdateStmt{ - Priority: $3.(mysql.PriorityEnum), - TableRefs: &ast.TableRefsClause{TableRefs: $5.(*ast.Join)}, - List: $7.([]*ast.Assignment), - IgnoreErr: $4.(bool), - } - if $2 != nil { - st.TableHints = $2.([]*ast.TableOptimizerHint) - } - if $8 != nil { - st.Where = $8.(ast.ExprNode) - } - $$ = st - } - -UseStmt: - "USE" DBName - { - $$ = &ast.UseStmt{DBName: $2.(string)} - } - -WhereClause: - "WHERE" Expression - { - $$ = $2 - } - -WhereClauseOptional: - { - $$ = nil - } -| WhereClause - { - $$ = $1 - } - -CommaOpt: - {} -| ',' - {} - -/************************************************************************************ - * Account Management Statements - * https://dev.mysql.com/doc/refman/5.7/en/account-management-sql.html - ************************************************************************************/ -CreateUserStmt: - "CREATE" "USER" IfNotExists UserSpecList - { - // See https://dev.mysql.com/doc/refman/5.7/en/create-user.html - $$ = &ast.CreateUserStmt{ - IfNotExists: $3.(bool), - Specs: $4.([]*ast.UserSpec), - } - } - -/* See http://dev.mysql.com/doc/refman/5.7/en/alter-user.html */ -AlterUserStmt: - "ALTER" "USER" IfExists UserSpecList - { - $$ = &ast.AlterUserStmt{ - IfExists: $3.(bool), - Specs: $4.([]*ast.UserSpec), - } - } -| "ALTER" "USER" IfExists "USER" '(' ')' "IDENTIFIED" "BY" AuthString - { - auth := &ast.AuthOption { - AuthString: $9.(string), - ByAuthString: true, - } - $$ = &ast.AlterUserStmt{ - IfExists: $3.(bool), - CurrentAuth: auth, - } - } - -UserSpec: - Username AuthOption - { - userSpec := &ast.UserSpec{ - User: $1.(*auth.UserIdentity), - } - if $2 != nil { - userSpec.AuthOpt = $2.(*ast.AuthOption) - } - $$ = userSpec - } - -UserSpecList: - UserSpec - { - $$ = []*ast.UserSpec{$1.(*ast.UserSpec)} - } -| UserSpecList ',' UserSpec - { - $$ = append($1.([]*ast.UserSpec), $3.(*ast.UserSpec)) - } - -AuthOption: - { - $$ = nil - } -| "IDENTIFIED" "BY" AuthString - { - $$ = &ast.AuthOption { - AuthString: $3.(string), - ByAuthString: true, - } - } -| "IDENTIFIED" "WITH" StringName - { - $$ = nil - } -| "IDENTIFIED" "WITH" StringName "BY" AuthString - { - $$ = &ast.AuthOption { - AuthString: $5.(string), - ByAuthString: true, - } - } -| "IDENTIFIED" "WITH" StringName "AS" HashString - { - $$ = &ast.AuthOption{ - HashString: $5.(string), - } - } -| "IDENTIFIED" "BY" "PASSWORD" HashString - { - $$ = &ast.AuthOption{ - HashString: $4.(string), - } - } - -HashString: - stringLit - { - $$ = $1 - } - -/************************************************************************************* - * Grant statement - * See https://dev.mysql.com/doc/refman/5.7/en/grant.html - *************************************************************************************/ -GrantStmt: - "GRANT" PrivElemList "ON" ObjectType PrivLevel "TO" UserSpecList WithGrantOptionOpt - { - $$ = &ast.GrantStmt{ - Privs: $2.([]*ast.PrivElem), - ObjectType: $4.(ast.ObjectTypeType), - Level: $5.(*ast.GrantLevel), - Users: $7.([]*ast.UserSpec), - WithGrant: $8.(bool), - } - } - -WithGrantOptionOpt: - { - $$ = false - } -| "WITH" "GRANT" "OPTION" - { - $$ = true - } -| "WITH" "MAX_QUERIES_PER_HOUR" NUM - { - $$ = false - } -| "WITH" "MAX_UPDATES_PER_HOUR" NUM - { - $$ = false - } -| "WITH" "MAX_CONNECTIONS_PER_HOUR" NUM - { - $$ = false - } -| "WITH" "MAX_USER_CONNECTIONS" NUM - { - $$ = false - } - -PrivElem: - PrivType - { - $$ = &ast.PrivElem{ - Priv: $1.(mysql.PrivilegeType), - } - } -| PrivType '(' ColumnNameList ')' - { - $$ = &ast.PrivElem{ - Priv: $1.(mysql.PrivilegeType), - Cols: $3.([]*ast.ColumnName), - } - } - -PrivElemList: - PrivElem - { - $$ = []*ast.PrivElem{$1.(*ast.PrivElem)} - } -| PrivElemList ',' PrivElem - { - $$ = append($1.([]*ast.PrivElem), $3.(*ast.PrivElem)) - } - -PrivType: - "ALL" - { - $$ = mysql.AllPriv - } -| "ALL" "PRIVILEGES" - { - $$ = mysql.AllPriv - } -| "ALTER" - { - $$ = mysql.AlterPriv - } -| "CREATE" - { - $$ = mysql.CreatePriv - } -| "CREATE" "USER" - { - $$ = mysql.CreateUserPriv - } -| "TRIGGER" - { - $$ = mysql.TriggerPriv - } -| "DELETE" - { - $$ = mysql.DeletePriv - } -| "DROP" - { - $$ = mysql.DropPriv - } -| "PROCESS" - { - $$ = mysql.ProcessPriv - } -| "EXECUTE" - { - $$ = mysql.ExecutePriv - } -| "INDEX" - { - $$ = mysql.IndexPriv - } -| "INSERT" - { - $$ = mysql.InsertPriv - } -| "SELECT" - { - $$ = mysql.SelectPriv - } -| "SUPER" - { - $$ = mysql.SuperPriv - } -| "SHOW" "DATABASES" - { - $$ = mysql.ShowDBPriv - } -| "UPDATE" - { - $$ = mysql.UpdatePriv - } -| "GRANT" "OPTION" - { - $$ = mysql.GrantPriv - } -| "REFERENCES" - { - $$ = mysql.ReferencesPriv - } -| "REPLICATION" "SLAVE" - { - $$ = mysql.PrivilegeType(0) - } -| "REPLICATION" "CLIENT" - { - $$ = mysql.PrivilegeType(0) - } -| "USAGE" - { - $$ = mysql.PrivilegeType(0) - } -| "RELOAD" - { - $$ = mysql.PrivilegeType(0) - } -| "CREATE" "TEMPORARY" "TABLES" - { - $$ = mysql.PrivilegeType(0) - } -| "LOCK" "TABLES" - { - $$ = mysql.PrivilegeType(0) - } -| "CREATE" "VIEW" - { - $$ = mysql.PrivilegeType(0) - } -| "SHOW" "VIEW" - { - $$ = mysql.PrivilegeType(0) - } -| "CREATE" "ROUTINE" - { - $$ = mysql.PrivilegeType(0) - } -| "ALTER" "ROUTINE" - { - $$ = mysql.PrivilegeType(0) - } -| "EVENT" - { - $$ = mysql.PrivilegeType(0) - } - -ObjectType: - { - $$ = ast.ObjectTypeNone - } -| "TABLE" - { - $$ = ast.ObjectTypeTable - } - -PrivLevel: - '*' - { - $$ = &ast.GrantLevel { - Level: ast.GrantLevelDB, - } - } -| '*' '.' '*' - { - $$ = &ast.GrantLevel { - Level: ast.GrantLevelGlobal, - } - } -| Identifier '.' '*' - { - $$ = &ast.GrantLevel { - Level: ast.GrantLevelDB, - DBName: $1, - } - } -| Identifier '.' Identifier - { - $$ = &ast.GrantLevel { - Level: ast.GrantLevelTable, - DBName: $1, - TableName: $3, - } - } -| Identifier - { - $$ = &ast.GrantLevel { - Level: ast.GrantLevelTable, - TableName: $1, - } - } - -/**************************************RevokeStmt******************************************* - * See https://dev.mysql.com/doc/refman/5.7/en/revoke.html - *******************************************************************************************/ -RevokeStmt: - "REVOKE" PrivElemList "ON" ObjectType PrivLevel "FROM" UserSpecList - { - $$ = &ast.RevokeStmt{ - Privs: $2.([]*ast.PrivElem), - ObjectType: $4.(ast.ObjectTypeType), - Level: $5.(*ast.GrantLevel), - Users: $7.([]*ast.UserSpec), - } - } - -/**************************************LoadDataStmt***************************************** - * See https://dev.mysql.com/doc/refman/5.7/en/load-data.html - *******************************************************************************************/ -LoadDataStmt: - "LOAD" "DATA" LocalOpt "INFILE" stringLit "INTO" "TABLE" TableName CharsetOpt Fields Lines IgnoreLines ColumnNameListOptWithBrackets - { - x := &ast.LoadDataStmt{ - Path: $5, - Table: $8.(*ast.TableName), - Columns: $13.([]*ast.ColumnName), - IgnoreLines:$12.(uint64), - } - if $3 != nil { - x.IsLocal = true - } - if $10 != nil { - x.FieldsInfo = $10.(*ast.FieldsClause) - } - if $11 != nil { - x.LinesInfo = $11.(*ast.LinesClause) - } - $$ = x - } - -IgnoreLines: - { - $$ = uint64(0) - } -| "IGNORE" NUM "LINES" - { - $$ = getUint64FromNUM($2) - } - -CharsetOpt: - {} -| "CHARACTER" "SET" CharsetName - -LocalOpt: - { - $$ = nil - } -| "LOCAL" - { - $$ = $1 - } - -Fields: - { - escape := "\\" - $$ = &ast.FieldsClause{ - Terminated: "\t", - Escaped: escape[0], - } - } -| FieldsOrColumns FieldsTerminated Enclosed Escaped - { - escape := $4.(string) - if escape != "\\" && len(escape) > 1 { - yylex.Errorf("Incorrect arguments %s to ESCAPE", escape) - return 1 - } - var enclosed byte - str := $3.(string) - if len(str) > 1 { - yylex.Errorf("Incorrect arguments %s to ENCLOSED", escape) - return 1 - }else if len(str) != 0 { - enclosed = str[0] - } - var escaped byte - if len(escape) > 0 { - escaped = escape[0] - } - $$ = &ast.FieldsClause{ - Terminated: $2.(string), - Enclosed: enclosed, - Escaped: escaped, - } - } - -FieldsOrColumns: -"FIELDS" | "COLUMNS" - -FieldsTerminated: - { - $$ = "\t" - } -| "TERMINATED" "BY" stringLit - { - $$ = $3 - } - -Enclosed: - { - $$ = "" - } -| "ENCLOSED" "BY" stringLit - { - $$ = $3 - } - -Escaped: - { - $$ = "\\" - } -| "ESCAPED" "BY" stringLit - { - $$ = $3 - } - -Lines: - { - $$ = &ast.LinesClause{Terminated: "\n"} - } -| "LINES" Starting LinesTerminated - { - $$ = &ast.LinesClause{Starting: $2.(string), Terminated: $3.(string)} - } - -Starting: - { - $$ = "" - } -| "STARTING" "BY" stringLit - { - $$ = $3 - } - -LinesTerminated: - { - $$ = "\n" - } -| "TERMINATED" "BY" stringLit - { - $$ = $3 - } - - -/********************************************************************* - * Lock/Unlock Tables - * See http://dev.mysql.com/doc/refman/5.7/en/lock-tables.html - * All the statement leaves empty. This is used to prevent mysqldump error. - *********************************************************************/ - -UnlockTablesStmt: - "UNLOCK" TablesTerminalSym {} - -LockTablesStmt: - "LOCK" TablesTerminalSym TableLockList - {} - -TablesTerminalSym: - "TABLES" -| "TABLE" - -TableLock: - TableName LockType - -LockType: - "READ" -| "READ" "LOCAL" -| "WRITE" - -TableLockList: - TableLock -| TableLockList ',' TableLock - - -/******************************************************************** - * Kill Statement - * See https://dev.mysql.com/doc/refman/5.7/en/kill.html - *******************************************************************/ - -KillStmt: - KillOrKillTiDB NUM - { - $$ = &ast.KillStmt{ - ConnectionID: getUint64FromNUM($2), - TiDBExtension: $1.(bool), - } - } -| KillOrKillTiDB "CONNECTION" NUM - { - $$ = &ast.KillStmt{ - ConnectionID: getUint64FromNUM($3), - TiDBExtension: $1.(bool), - } - } -| KillOrKillTiDB "QUERY" NUM - { - $$ = &ast.KillStmt{ - ConnectionID: getUint64FromNUM($3), - Query: true, - TiDBExtension: $1.(bool), - } - } - -KillOrKillTiDB: - "KILL" - { - $$ = false - } -/* KILL TIDB is a special grammar extension in TiDB, it can be used only when - the client connect to TiDB directly, not proxied under LVS. */ -| "KILL" "TIDB" - { - $$ = true - } - -/*******************************************************************************************/ - -LoadStatsStmt: - "LOAD" "STATS" stringLit - { - $$ = &ast.LoadStatsStmt{ - Path: $3, - } - } - -%% diff --git a/parser/parser_test.go b/parser/parser_test.go deleted file mode 100644 index 344f6b6862a7d..0000000000000 --- a/parser/parser_test.go +++ /dev/null @@ -1,2469 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package parser - -import ( - "fmt" - "runtime" - "strings" - "testing" - - . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" - _ "github.com/pingcap/tidb/types/parser_driver" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/testleak" - "github.com/pkg/errors" -) - -func TestT(t *testing.T) { - CustomVerboseFlag = true - TestingT(t) -} - -var _ = Suite(&testParserSuite{}) - -type testParserSuite struct { -} - -func (s *testParserSuite) TestSimple(c *C) { - defer testleak.AfterTest(c)() - parser := New() - - reservedKws := []string{ - "add", "all", "alter", "analyze", "and", "as", "asc", "between", "bigint", - "binary", "blob", "both", "by", "cascade", "case", "change", "character", "check", "collate", - "column", "constraint", "convert", "create", "cross", "current_date", "current_time", - "current_timestamp", "current_user", "database", "databases", "day_hour", "day_microsecond", - "day_minute", "day_second", "decimal", "default", "delete", "desc", "describe", - "distinct", "distinctRow", "div", "double", "drop", "dual", "else", "enclosed", "escaped", - "exists", "explain", "false", "float", "for", "force", "foreign", "from", - "fulltext", "grant", "group", "having", "hour_microsecond", "hour_minute", - "hour_second", "if", "ignore", "in", "index", "infile", "inner", "insert", "int", "into", "integer", - "interval", "is", "join", "key", "keys", "kill", "leading", "left", "like", "limit", "lines", "load", - "localtime", "localtimestamp", "lock", "longblob", "longtext", "mediumblob", "maxvalue", "mediumint", "mediumtext", - "minute_microsecond", "minute_second", "mod", "not", "no_write_to_binlog", "null", "numeric", - "on", "option", "or", "order", "outer", "partition", "precision", "primary", "procedure", "range", "read", "real", - "references", "regexp", "rename", "repeat", "replace", "revoke", "restrict", "right", "rlike", - "schema", "schemas", "second_microsecond", "select", "set", "show", "smallint", - "starting", "table", "terminated", "then", "tinyblob", "tinyint", "tinytext", "to", - "trailing", "true", "union", "unique", "unlock", "unsigned", - "update", "use", "using", "utc_date", "values", "varbinary", "varchar", - "when", "where", "write", "xor", "year_month", "zerofill", - "generated", "virtual", "stored", "usage", - "delayed", "high_priority", "low_priority", - // TODO: support the following keywords - // "with", - } - for _, kw := range reservedKws { - src := fmt.Sprintf("SELECT * FROM db.%s;", kw) - _, err := parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil, Commentf("source %s", src)) - - src = fmt.Sprintf("SELECT * FROM %s.desc", kw) - _, err = parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil, Commentf("source %s", src)) - - src = fmt.Sprintf("SELECT t.%s FROM t", kw) - _, err = parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil, Commentf("source %s", src)) - } - - // Testcase for unreserved keywords - unreservedKws := []string{ - "auto_increment", "after", "begin", "bit", "bool", "boolean", "charset", "columns", "commit", - "date", "datediff", "datetime", "deallocate", "do", "from_days", "end", "engine", "engines", "execute", "first", "full", - "local", "names", "offset", "password", "prepare", "quick", "rollback", "session", "signed", - "start", "global", "tables", "tablespace", "text", "time", "timestamp", "tidb", "transaction", "truncate", "unknown", - "value", "warnings", "year", "now", "substr", "subpartition", "subpartitions", "substring", "mode", "any", "some", "user", "identified", - "collation", "comment", "avg_row_length", "checksum", "compression", "connection", "key_block_size", - "max_rows", "min_rows", "national", "row", "quarter", "escape", "grants", "status", "fields", "triggers", - "delay_key_write", "isolation", "partitions", "repeatable", "committed", "uncommitted", "only", "serializable", "level", - "curtime", "variables", "dayname", "version", "btree", "hash", "row_format", "dynamic", "fixed", "compressed", - "compact", "redundant", "sql_no_cache sql_no_cache", "sql_cache sql_cache", "action", "round", - "enable", "disable", "reverse", "space", "privileges", "get_lock", "release_lock", "sleep", "no", "greatest", "least", - "binlog", "hex", "unhex", "function", "indexes", "from_unixtime", "processlist", "events", "less", "than", "timediff", - "ln", "log", "log2", "log10", "timestampdiff", "pi", "quote", "none", "super", "shared", "exclusive", - "always", "stats", "stats_meta", "stats_histogram", "stats_buckets", "stats_healthy", "tidb_version", "replication", "slave", "client", - "max_connections_per_hour", "max_queries_per_hour", "max_updates_per_hour", "max_user_connections", "event", "reload", "routine", "temporary", - } - for _, kw := range unreservedKws { - src := fmt.Sprintf("SELECT %s FROM tbl;", kw) - _, err := parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil, Commentf("source %s", src)) - } - - // Testcase for prepared statement - src := "SELECT id+?, id+? from t;" - _, err := parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil) - - // Testcase for -- Comment and unary -- operator - src = "CREATE TABLE foo (a SMALLINT UNSIGNED, b INT UNSIGNED); -- foo\nSelect --1 from foo;" - stmts, err := parser.Parse(src, "", "") - c.Assert(err, IsNil) - c.Assert(stmts, HasLen, 2) - - // Testcase for /*! xx */ - // See http://dev.mysql.com/doc/refman/5.7/en/comments.html - // Fix: https://github.com/pingcap/tidb/issues/971 - src = "/*!40101 SET character_set_client = utf8 */;" - stmts, err = parser.Parse(src, "", "") - c.Assert(err, IsNil) - c.Assert(stmts, HasLen, 1) - stmt := stmts[0] - _, ok := stmt.(*ast.SetStmt) - c.Assert(ok, IsTrue) - - // for issue #2017 - src = "insert into blobtable (a) values ('/*! truncated */');" - stmt, err = parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil) - is, ok := stmt.(*ast.InsertStmt) - c.Assert(ok, IsTrue) - c.Assert(is.Lists, HasLen, 1) - c.Assert(is.Lists[0], HasLen, 1) - c.Assert(is.Lists[0][0].(ast.ValueExpr).GetDatumString(), Equals, "/*! truncated */") - - // Testcase for CONVERT(expr,type) - src = "SELECT CONVERT('111', SIGNED);" - st, err := parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil) - ss, ok := st.(*ast.SelectStmt) - c.Assert(ok, IsTrue) - c.Assert(len(ss.Fields.Fields), Equals, 1) - cv, ok := ss.Fields.Fields[0].Expr.(*ast.FuncCastExpr) - c.Assert(ok, IsTrue) - c.Assert(cv.FunctionType, Equals, ast.CastConvertFunction) - - // for query start with comment - srcs := []string{ - "/* some comments */ SELECT CONVERT('111', SIGNED) ;", - "/* some comments */ /*comment*/ SELECT CONVERT('111', SIGNED) ;", - "SELECT /*comment*/ CONVERT('111', SIGNED) ;", - "SELECT CONVERT('111', /*comment*/ SIGNED) ;", - "SELECT CONVERT('111', SIGNED) /*comment*/;", - } - for _, src := range srcs { - st, err = parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil) - ss, ok = st.(*ast.SelectStmt) - c.Assert(ok, IsTrue) - } - - // for issue #961 - src = "create table t (c int key);" - st, err = parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil) - cs, ok := st.(*ast.CreateTableStmt) - c.Assert(ok, IsTrue) - c.Assert(cs.Cols, HasLen, 1) - c.Assert(cs.Cols[0].Options, HasLen, 1) - c.Assert(cs.Cols[0].Options[0].Tp, Equals, ast.ColumnOptionPrimaryKey) - - // for issue #4497 - src = "create table t1(a NVARCHAR(100));" - _, err = parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil) - - // for issue 2803 - src = "use quote;" - _, err = parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil) - - // issue #4354 - src = "select b'';" - _, err = parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil) - - src = "select B'';" - _, err = parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil) - - // src = "select 0b'';" - // _, err = parser.ParseOneStmt(src, "", "") - // c.Assert(err, NotNil) - - // for #4909, support numericType `signed` filedOpt. - src = "CREATE TABLE t(_sms smallint signed, _smu smallint unsigned);" - _, err = parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil) - - // for #7371, support NATIONAL CHARACTER - // reference link: https://dev.mysql.com/doc/refman/5.7/en/charset-national.html - src = "CREATE TABLE t(c1 NATIONAL CHARACTER(10));" - _, err = parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil) - - src = `CREATE TABLE t(a tinyint signed, - b smallint signed, - c mediumint signed, - d int signed, - e int1 signed, - f int2 signed, - g int3 signed, - h int4 signed, - i int8 signed, - j integer signed, - k bigint signed, - l bool signed, - m boolean signed - );` - - st, err = parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil) - ct, ok := st.(*ast.CreateTableStmt) - c.Assert(ok, IsTrue) - for _, col := range ct.Cols { - c.Assert(col.Tp.Flag&mysql.UnsignedFlag, Equals, uint(0)) - } - - // for issue #4006 - src = `insert into tb(v) (select v from tb);` - _, err = parser.ParseOneStmt(src, "", "") - c.Assert(err, IsNil) -} - -type testCase struct { - src string - ok bool -} - -type testErrMsgCase struct { - src string - ok bool - err error -} - -func (s *testParserSuite) RunTest(c *C, table []testCase) { - parser := New() - for _, t := range table { - _, err := parser.Parse(t.src, "", "") - comment := Commentf("source %v", t.src) - if t.ok { - c.Assert(err, IsNil, comment) - } else { - c.Assert(err, NotNil, comment) - } - } -} - -func (s *testParserSuite) RunErrMsgTest(c *C, table []testErrMsgCase) { - parser := New() - for _, t := range table { - _, err := parser.Parse(t.src, "", "") - comment := Commentf("source %v", t.src) - if t.err != nil { - c.Assert(terror.ErrorEqual(err, t.err), IsTrue, comment) - } else { - c.Assert(err, IsNil, comment) - } - } -} - -func (s *testParserSuite) TestDMLStmt(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {"", true}, - {";", true}, - {"INSERT INTO foo VALUES (1234)", true}, - {"INSERT INTO foo VALUES (1234, 5678)", true}, - {"INSERT INTO t1 (SELECT * FROM t2)", true}, - // 15 - {"INSERT INTO foo VALUES (1 || 2)", true}, - {"INSERT INTO foo VALUES (1 | 2)", true}, - {"INSERT INTO foo VALUES (false || true)", true}, - {"INSERT INTO foo VALUES (bar(5678))", true}, - // 20 - {"INSERT INTO foo VALUES ()", true}, - {"SELECT * FROM t", true}, - {"SELECT * FROM t AS u", true}, - // 25 - {"SELECT * FROM t, v", true}, - {"SELECT * FROM t AS u, v", true}, - {"SELECT * FROM t, v AS w", true}, - {"SELECT * FROM t AS u, v AS w", true}, - {"SELECT * FROM foo, bar, foo", true}, - // 30 - {"SELECT DISTINCTS * FROM t", false}, - {"SELECT DISTINCT * FROM t", true}, - {"SELECT DISTINCTROW * FROM t", true}, - {"SELECT ALL * FROM t", true}, - {"SELECT DISTINCT ALL * FROM t", false}, - {"SELECT DISTINCTROW ALL * FROM t", false}, - {"INSERT INTO foo (a) VALUES (42)", true}, - {"INSERT INTO foo (a,) VALUES (42,)", false}, - // 35 - {"INSERT INTO foo (a,b) VALUES (42,314)", true}, - {"INSERT INTO foo (a,b,) VALUES (42,314)", false}, - {"INSERT INTO foo (a,b,) VALUES (42,314,)", false}, - {"INSERT INTO foo () VALUES ()", true}, - {"INSERT INTO foo VALUE ()", true}, - - // for issue 2402 - {"INSERT INTO tt VALUES (01000001783);", true}, - {"INSERT INTO tt VALUES (default);", true}, - - {"REPLACE INTO foo VALUES (1 || 2)", true}, - {"REPLACE INTO foo VALUES (1 | 2)", true}, - {"REPLACE INTO foo VALUES (false || true)", true}, - {"REPLACE INTO foo VALUES (bar(5678))", true}, - {"REPLACE INTO foo VALUES ()", true}, - {"REPLACE INTO foo (a,b) VALUES (42,314)", true}, - {"REPLACE INTO foo (a,b,) VALUES (42,314)", false}, - {"REPLACE INTO foo (a,b,) VALUES (42,314,)", false}, - {"REPLACE INTO foo () VALUES ()", true}, - {"REPLACE INTO foo VALUE ()", true}, - // 40 - {`SELECT stuff.id - FROM stuff - WHERE stuff.value >= ALL (SELECT stuff.value - FROM stuff)`, true}, - {"BEGIN", true}, - {"START TRANSACTION", true}, - // 45 - {"COMMIT", true}, - {"ROLLBACK", true}, - {`BEGIN; - INSERT INTO foo VALUES (42, 3.14); - INSERT INTO foo VALUES (-1, 2.78); - COMMIT;`, true}, - {`BEGIN; - INSERT INTO tmp SELECT * from bar; - SELECT * from tmp; - ROLLBACK;`, true}, - - // qualified select - {"SELECT a.b.c FROM t", true}, - {"SELECT a.b.*.c FROM t", false}, - {"SELECT a.b.* FROM t", true}, - {"SELECT a FROM t", true}, - {"SELECT a.b.c.d FROM t", false}, - - // do statement - {"DO 1", true}, - {"DO 1 from t", false}, - - // load data - {"load data infile '/tmp/t.csv' into table t", true}, - {"load data infile '/tmp/t.csv' into table t character set utf8", true}, - {"load data infile '/tmp/t.csv' into table t fields terminated by 'ab'", true}, - {"load data infile '/tmp/t.csv' into table t columns terminated by 'ab'", true}, - {"load data infile '/tmp/t.csv' into table t fields terminated by 'ab' enclosed by 'b'", true}, - {"load data infile '/tmp/t.csv' into table t fields terminated by 'ab' enclosed by 'b' escaped by '*'", true}, - {"load data infile '/tmp/t.csv' into table t lines starting by 'ab'", true}, - {"load data infile '/tmp/t.csv' into table t lines starting by 'ab' terminated by 'xy'", true}, - {"load data infile '/tmp/t.csv' into table t fields terminated by 'ab' lines terminated by 'xy'", true}, - {"load data infile '/tmp/t.csv' into table t terminated by 'xy' fields terminated by 'ab'", false}, - {"load data local infile '/tmp/t.csv' into table t", true}, - {"load data local infile '/tmp/t.csv' into table t fields terminated by 'ab'", true}, - {"load data local infile '/tmp/t.csv' into table t columns terminated by 'ab'", true}, - {"load data local infile '/tmp/t.csv' into table t fields terminated by 'ab' enclosed by 'b'", true}, - {"load data local infile '/tmp/t.csv' into table t fields terminated by 'ab' enclosed by 'b' escaped by '*'", true}, - {"load data local infile '/tmp/t.csv' into table t character set utf8 fields terminated by 'ab' enclosed by 'b' escaped by '*'", true}, - {"load data local infile '/tmp/t.csv' into table t lines starting by 'ab'", true}, - {"load data local infile '/tmp/t.csv' into table t lines starting by 'ab' terminated by 'xy'", true}, - {"load data local infile '/tmp/t.csv' into table t fields terminated by 'ab' lines terminated by 'xy'", true}, - {"load data local infile '/tmp/t.csv' into table t terminated by 'xy' fields terminated by 'ab'", false}, - {"load data infile '/tmp/t.csv' into table t (a,b)", true}, - {"load data local infile '/tmp/t.csv' into table t (a,b)", true}, - {"load data local infile '/tmp/t.csv' into table t fields terminated by 'ab' (a,b)", true}, - {"load data local infile '/tmp/t.csv' into table t columns terminated by 'ab' (a,b)", true}, - {"load data local infile '/tmp/t.csv' into table t fields terminated by 'ab' enclosed by 'b' (a,b)", true}, - {"load data local infile '/tmp/t.csv' into table t fields terminated by 'ab' enclosed by 'b' escaped by '*' (a,b)", true}, - {"load data local infile '/tmp/t.csv' into table t character set utf8 fields terminated by 'ab' enclosed by 'b' escaped by '*' (a,b)", true}, - {"load data local infile '/tmp/t.csv' into table t lines starting by 'ab' (a,b)", true}, - {"load data local infile '/tmp/t.csv' into table t lines starting by 'ab' terminated by 'xy' (a,b)", true}, - {"load data local infile '/tmp/t.csv' into table t character set utf8 fields terminated by 'ab' lines terminated by 'xy' (a,b)", true}, - {"load data local infile '/tmp/t.csv' into table t fields terminated by 'ab' lines terminated by 'xy' (a,b)", true}, - {"load data local infile '/tmp/t.csv' into table t (a,b) fields terminated by 'ab'", false}, - {"load data local infile '/tmp/t.csv' into table t ignore 1 lines", true}, - {"load data local infile '/tmp/t.csv' into table t ignore -1 lines", false}, - {"load data local infile '/tmp/t.csv' into table t fields terminated by 'ab' enclosed by 'b' (a,b) ignore 1 lines", false}, - {"load data local infile '/tmp/t.csv' into table t lines starting by 'ab' terminated by 'xy' ignore 1 lines", true}, - {"load data local infile '/tmp/t.csv' into table t fields terminated by 'ab' enclosed by 'b' escaped by '*' ignore 1 lines (a,b)", true}, - {"load data local infile '/tmp/t.csv' into table t fields terminated by 'ab' enclosed by 'b' escaped by ''", true}, - - // select for update - {"SELECT * from t for update", true}, - {"SELECT * from t lock in share mode", true}, - - // from join - {"SELECT * from t1, t2, t3", true}, - {"select * from t1 join t2 left join t3 on t2.id = t3.id", true}, - {"select * from t1 right join t2 on t1.id = t2.id left join t3 on t3.id = t2.id", true}, - {"select * from t1 right join t2 on t1.id = t2.id left join t3", false}, - {"select * from t1 join t2 left join t3 using (id)", true}, - {"select * from t1 right join t2 using (id) left join t3 using (id)", true}, - {"select * from t1 right join t2 using (id) left join t3", false}, - {"select * from t1 natural join t2", true}, - {"select * from t1 natural right join t2", true}, - {"select * from t1 natural left outer join t2", true}, - {"select * from t1 natural inner join t2", false}, - {"select * from t1 natural cross join t2", false}, - - // for straight_join - {"select * from t1 straight_join t2 on t1.id = t2.id", true}, - {"select straight_join * from t1 join t2 on t1.id = t2.id", true}, - {"select straight_join * from t1 left join t2 on t1.id = t2.id", true}, - {"select straight_join * from t1 right join t2 on t1.id = t2.id", true}, - {"select straight_join * from t1 straight_join t2 on t1.id = t2.id", true}, - - // for "USE INDEX" in delete statement - {"DELETE FROM t1 USE INDEX(idx_a) WHERE t1.id=1;", true}, - {"DELETE t1, t2 FROM t1 USE INDEX(idx_a) JOIN t2 WHERE t1.id=t2.id;", true}, - {"DELETE t1, t2 FROM t1 USE INDEX(idx_a) JOIN t2 USE INDEX(idx_a) WHERE t1.id=t2.id;", true}, - - // for admin - {"admin show ddl;", true}, - {"admin show ddl jobs;", true}, - {"admin show ddl jobs 20;", true}, - {"admin show ddl jobs -1;", false}, - {"admin show ddl job queries 1", true}, - {"admin show ddl job queries 1, 2, 3, 4", true}, - {"admin check table t1, t2;", true}, - {"admin check index tableName idxName;", true}, - {"admin check index tableName idxName (1, 2), (4, 5);", true}, - {"admin checksum table t1, t2;", true}, - {"admin cancel ddl jobs 1", true}, - {"admin cancel ddl jobs 1, 2", true}, - {"admin recover index t1 idx_a", true}, - {"admin cleanup index t1 idx_a", true}, - {"admin show slow top 3", true}, - {"admin show slow top internal 7", true}, - {"admin show slow top all 9", true}, - {"admin show slow recent 11", true}, - - // for on duplicate key update - {"INSERT INTO t (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);", true}, - {"INSERT IGNORE INTO t (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);", true}, - - // for delete statement - {"DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;", true}, - {"DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;", true}, - {"DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id limit 10;", false}, - {"DELETE /*+ TiDB_INLJ(t1, t2) */ t1, t2 from t1, t2 where t1.id=t2.id;", true}, - {"DELETE /*+ TiDB_HJ(t1, t2) */ t1, t2 from t1, t2 where t1.id=t2.id", true}, - - // for update statement - {"UPDATE t SET id = id + 1 ORDER BY id DESC;", true}, - {"UPDATE items,month SET items.price=month.price WHERE items.id=month.id;", true}, - {"UPDATE items,month SET items.price=month.price WHERE items.id=month.id LIMIT 10;", false}, - {"UPDATE user T0 LEFT OUTER JOIN user_profile T1 ON T1.id = T0.profile_id SET T0.profile_id = 1 WHERE T0.profile_id IN (1);", true}, - {"UPDATE /*+ TiDB_INLJ(t1, t2) */ t1, t2 set t1.profile_id = 1, t2.profile_id = 1 where ta.a=t.ba", true}, - {"UPDATE /*+ TiDB_SMJ(t1, t2) */ t1, t2 set t1.profile_id = 1, t2.profile_id = 1 where ta.a=t.ba", true}, - - // for select with where clause - {"SELECT * FROM t WHERE 1 = 1", true}, - - // for dual - {"select 1 from dual", true}, - {"select 1 from dual limit 1", true}, - {"select 1 where exists (select 2)", false}, - {"select 1 from dual where not exists (select 2)", true}, - {"select 1 as a from dual order by a", true}, - {"select 1 as a from dual where 1 < any (select 2) order by a", true}, - {"select 1 order by 1", true}, - - // for https://github.com/pingcap/tidb/issues/320 - {`(select 1);`, true}, - - // for https://github.com/pingcap/tidb/issues/1050 - {`SELECT /*!40001 SQL_NO_CACHE */ * FROM test WHERE 1 limit 0, 2000;`, true}, - - {`ANALYZE TABLE t`, true}, - - // for comments - {`/** 20180417 **/ show databases;`, true}, - {`/* 20180417 **/ show databases;`, true}, - {`/** 20180417 */ show databases;`, true}, - {`/** 20180417 ******/ show databases;`, true}, - - // for Binlog stmt - {`BINLOG ' -BxSFVw8JAAAA8QAAAPUAAAAAAAQANS41LjQ0LU1hcmlhREItbG9nAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAA2QAEGggAAAAICAgCAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAA5gm5Mg== -'/*!*/;`, true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestDBAStmt(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - // for SHOW statement - {"SHOW VARIABLES LIKE 'character_set_results'", true}, - {"SHOW GLOBAL VARIABLES LIKE 'character_set_results'", true}, - {"SHOW SESSION VARIABLES LIKE 'character_set_results'", true}, - {"SHOW VARIABLES", true}, - {"SHOW GLOBAL VARIABLES", true}, - {"SHOW GLOBAL VARIABLES WHERE Variable_name = 'autocommit'", true}, - {"SHOW STATUS", true}, - {"SHOW GLOBAL STATUS", true}, - {"SHOW SESSION STATUS", true}, - {`SHOW STATUS LIKE 'Up%'`, true}, - {`SHOW STATUS WHERE Variable_name LIKE 'Up%'`, true}, - {`SHOW FULL TABLES FROM icar_qa LIKE play_evolutions`, true}, - {`SHOW FULL TABLES WHERE Table_Type != 'VIEW'`, true}, - {`SHOW GRANTS`, true}, - {`SHOW GRANTS FOR 'test'@'localhost'`, true}, - {`SHOW GRANTS FOR current_user()`, true}, - {`SHOW GRANTS FOR current_user`, true}, - {`SHOW COLUMNS FROM City;`, true}, - {`SHOW COLUMNS FROM tv189.1_t_1_x;`, true}, - {`SHOW FIELDS FROM City;`, true}, - {`SHOW TRIGGERS LIKE 't'`, true}, - {`SHOW DATABASES LIKE 'test2'`, true}, - {`SHOW PROCEDURE STATUS WHERE Db='test'`, true}, - {`SHOW FUNCTION STATUS WHERE Db='test'`, true}, - {`SHOW INDEX FROM t;`, true}, - {`SHOW KEYS FROM t;`, true}, - {`SHOW INDEX IN t;`, true}, - {`SHOW KEYS IN t;`, true}, - {`SHOW INDEXES IN t where true;`, true}, - {`SHOW KEYS FROM t FROM test where true;`, true}, - {`SHOW EVENTS FROM test_db WHERE definer = 'current_user'`, true}, - {`SHOW PLUGINS`, true}, - {`SHOW PROFILES`, true}, - {`SHOW MASTER STATUS`, true}, - {`SHOW PRIVILEGES`, true}, - // for show character set - {"show character set;", true}, - {"show charset", true}, - // for show collation - {"show collation", true}, - {`show collation like 'utf8%'`, true}, - {"show collation where Charset = 'utf8' and Collation = 'utf8_bin'", true}, - // for show full columns - {"show columns in t;", true}, - {"show full columns in t;", true}, - // for show create table - {"show create table test.t", true}, - {"show create table t", true}, - // for show stats_meta. - {"show stats_meta", true}, - {"show stats_meta where table_name = 't'", true}, - // for show stats_histograms - {"show stats_histograms", true}, - {"show stats_histograms where col_name = 'a'", true}, - // for show stats_buckets - {"show stats_buckets", true}, - {"show stats_buckets where col_name = 'a'", true}, - // for show stats_healthy. - {"show stats_healthy", true}, - {"show stats_healthy where table_name = 't'", true}, - - // for load stats - {"load stats '/tmp/stats.json'", true}, - // set - // user defined - {"SET @ = 1", true}, - {"SET @' ' = 1", true}, - {"SET @! = 1", false}, - {"SET @1 = 1", true}, - {"SET @a = 1", true}, - {"SET @b := 1", true}, - {"SET @.c = 1", true}, - {"SET @_d = 1", true}, - {"SET @_e._$. = 1", true}, - {"SET @~f = 1", false}, - {"SET @`g,` = 1", true}, - {"SET @`g,` := 1", true}, - // session system variables - {"SET SESSION autocommit = 1", true}, - {"SET SESSION autocommit := 1", true}, - {"SET @@session.autocommit = 1", true}, - {"SET @@session.autocommit := 1", true}, - {"SET @@SESSION.autocommit = 1", true}, - {"SET @@GLOBAL.GTID_PURGED = '123'", true}, - {"SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN", true}, - {"SET @MYSQLDUMP_TEMP_LOG_BIN := @@SESSION.SQL_LOG_BIN", true}, - {"SET LOCAL autocommit = 1", true}, - {"SET LOCAL autocommit := 1", true}, - {"SET @@local.autocommit = 1", true}, - {"SET @@autocommit = 1", true}, - {"SET @@SQL_MODE := ''", true}, - {"SET autocommit = 1", true}, - {"SET autocommit := 1", true}, - // global system variables - {"SET GLOBAL autocommit = 1", true}, - {"SET GLOBAL autocommit := 1", true}, - {"SET @@global.autocommit = 1", true}, - {"SET @@global.autocommit := 1", true}, - // set default value - {"SET @@global.autocommit = default", true}, - {"SET @@session.autocommit = default", true}, - // SET CHARACTER SET - {"SET CHARACTER SET utf8mb4;", true}, - {"SET CHARACTER SET 'utf8mb4';", true}, - // set password - {"SET PASSWORD = 'password';", true}, - {"SET PASSWORD := 'password';", true}, - {"SET PASSWORD FOR 'root'@'localhost' = 'password';", true}, - {"SET PASSWORD FOR 'root'@'localhost' := 'password';", true}, - // SET TRANSACTION Syntax - {"SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ", true}, - {"SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ", true}, - {"SET SESSION TRANSACTION READ WRITE", true}, - {"SET SESSION TRANSACTION READ ONLY", true}, - {"SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED", true}, - {"SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED", true}, - {"SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE", true}, - {"SET TRANSACTION ISOLATION LEVEL REPEATABLE READ", true}, - {"SET TRANSACTION READ WRITE", true}, - {"SET TRANSACTION READ ONLY", true}, - {"SET TRANSACTION ISOLATION LEVEL READ COMMITTED", true}, - {"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED", true}, - {"SET TRANSACTION ISOLATION LEVEL SERIALIZABLE", true}, - // for set names - {"set names utf8", true}, - {"set names utf8 collate utf8_unicode_ci", true}, - {"set names binary", true}, - // for set names and set vars - {"set names utf8, @@session.sql_mode=1;", true}, - {"set @@session.sql_mode=1, names utf8, charset utf8;", true}, - - // for FLUSH statement - {"flush no_write_to_binlog tables tbl1 with read lock", true}, - {"flush table", true}, - {"flush tables", true}, - {"flush tables tbl1", true}, - {"flush no_write_to_binlog tables tbl1", true}, - {"flush local tables tbl1", true}, - {"flush table with read lock", true}, - {"flush tables tbl1, tbl2, tbl3", true}, - {"flush tables tbl1, tbl2, tbl3 with read lock", true}, - {"flush privileges", true}, - {"flush status", true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestFlushTable(c *C) { - parser := New() - stmt, err := parser.Parse("flush local tables tbl1,tbl2 with read lock", "", "") - c.Assert(err, IsNil) - flushTable := stmt[0].(*ast.FlushStmt) - c.Assert(flushTable.Tp, Equals, ast.FlushTables) - c.Assert(flushTable.Tables[0].Name.L, Equals, "tbl1") - c.Assert(flushTable.Tables[1].Name.L, Equals, "tbl2") - c.Assert(flushTable.NoWriteToBinLog, IsTrue) - c.Assert(flushTable.ReadLock, IsTrue) -} - -func (s *testParserSuite) TestFlushPrivileges(c *C) { - parser := New() - stmt, err := parser.Parse("flush privileges", "", "") - c.Assert(err, IsNil) - flushPrivilege := stmt[0].(*ast.FlushStmt) - c.Assert(flushPrivilege.Tp, Equals, ast.FlushPrivileges) -} - -func (s *testParserSuite) TestExpression(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - // sign expression - {"SELECT ++1", true}, - {"SELECT -*1", false}, - {"SELECT -+1", true}, - {"SELECT -1", true}, - {"SELECT --1", true}, - - // for string literal - {`select '''a''', """a"""`, true}, - {`select ''a''`, false}, - {`select ""a""`, false}, - {`select '''a''';`, true}, - {`select '\'a\'';`, true}, - {`select "\"a\"";`, true}, - {`select """a""";`, true}, - {`select _utf8"string";`, true}, - {`select _binary"string";`, true}, - {"select N'string'", true}, - {"select n'string'", true}, - // for comparison - {"select 1 <=> 0, 1 <=> null, 1 = null", true}, - // for date literal - {"select date'1989-09-10'", true}, - {"select date 19890910", false}, - // for time literal - {"select time '00:00:00.111'", true}, - {"select time 19890910", false}, - // for timestamp literal - {"select timestamp '1989-09-10 11:11:11'", true}, - {"select timestamp 19890910", false}, - - // The ODBC syntax for time/date/timestamp literal. - // See: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html - {"select {ts '1989-09-10 11:11:11'}", true}, - {"select {d '1989-09-10'}", true}, - {"select {t '00:00:00.111'}", true}, - // If the identifier is not in (t, d, ts), we just ignore it and consider the following expression as the value. - // See: https://dev.mysql.com/doc/refman/5.7/en/expressions.html - {"select {ts123 '1989-09-10 11:11:11'}", true}, - {"select {ts123 123}", true}, - {"select {ts123 1 xor 1}", true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestBuiltin(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - // for builtin functions - {"SELECT POW(1, 2)", true}, - {"SELECT POW(1, 2, 1)", true}, // illegal number of arguments shall pass too - {"SELECT POW(1, 0.5)", true}, - {"SELECT POW(1, -1)", true}, - {"SELECT POW(-1, 1)", true}, - {"SELECT RAND();", true}, - {"SELECT RAND(1);", true}, - {"SELECT MOD(10, 2);", true}, - {"SELECT ROUND(-1.23);", true}, - {"SELECT ROUND(1.23, 1);", true}, - {"SELECT ROUND(1.23, 1, 1);", true}, - {"SELECT CEIL(-1.23);", true}, - {"SELECT CEILING(1.23);", true}, - {"SELECT FLOOR(-1.23);", true}, - {"SELECT LN(1);", true}, - {"SELECT LN(1, 2);", true}, - {"SELECT LOG(-2);", true}, - {"SELECT LOG(2, 65536);", true}, - {"SELECT LOG(2, 65536, 1);", true}, - {"SELECT LOG2(2);", true}, - {"SELECT LOG2(2, 2);", true}, - {"SELECT LOG10(10);", true}, - {"SELECT LOG10(10, 1);", true}, - {"SELECT ABS(10, 1);", true}, - {"SELECT ABS(10);", true}, - {"SELECT ABS();", true}, - {"SELECT CONV(10+'10'+'10'+X'0a',10,10);", true}, - {"SELECT CONV();", true}, - {"SELECT CRC32('MySQL');", true}, - {"SELECT CRC32();", true}, - {"SELECT SIGN();", true}, - {"SELECT SIGN(0);", true}, - {"SELECT SQRT(0);", true}, - {"SELECT SQRT();", true}, - {"SELECT ACOS();", true}, - {"SELECT ACOS(1);", true}, - {"SELECT ACOS(1, 2);", true}, - {"SELECT ASIN();", true}, - {"SELECT ASIN(1);", true}, - {"SELECT ASIN(1, 2);", true}, - {"SELECT ATAN(0), ATAN(1), ATAN(1, 2);", true}, - {"SELECT ATAN2(), ATAN2(1,2);", true}, - {"SELECT COS(0);", true}, - {"SELECT COS(1);", true}, - {"SELECT COS(1, 2);", true}, - {"SELECT COT();", true}, - {"SELECT COT(1);", true}, - {"SELECT COT(1, 2);", true}, - {"SELECT DEGREES();", true}, - {"SELECT DEGREES(0);", true}, - {"SELECT EXP();", true}, - {"SELECT EXP(1);", true}, - {"SELECT PI();", true}, - {"SELECT PI(1);", true}, - {"SELECT RADIANS();", true}, - {"SELECT RADIANS(1);", true}, - {"SELECT SIN();", true}, - {"SELECT SIN(1);", true}, - {"SELECT TAN(1);", true}, - {"SELECT TAN();", true}, - {"SELECT TRUNCATE(1.223,1);", true}, - {"SELECT TRUNCATE();", true}, - - {"SELECT SUBSTR('Quadratically',5);", true}, - {"SELECT SUBSTR('Quadratically',5, 3);", true}, - {"SELECT SUBSTR('Quadratically' FROM 5);", true}, - {"SELECT SUBSTR('Quadratically' FROM 5 FOR 3);", true}, - - {"SELECT SUBSTRING('Quadratically',5);", true}, - {"SELECT SUBSTRING('Quadratically',5, 3);", true}, - {"SELECT SUBSTRING('Quadratically' FROM 5);", true}, - {"SELECT SUBSTRING('Quadratically' FROM 5 FOR 3);", true}, - - {"SELECT CONVERT('111', SIGNED);", true}, - - {"SELECT LEAST(), LEAST(1, 2, 3);", true}, - - {"SELECT INTERVAL(1, 0, 1, 2)", true}, - {"SELECT DATE_ADD('2008-01-02', INTERVAL INTERVAL(1, 0, 1) DAY);", true}, - - // information functions - {"SELECT DATABASE();", true}, - {"SELECT SCHEMA();", true}, - {"SELECT USER();", true}, - {"SELECT USER(1);", true}, - {"SELECT CURRENT_USER();", true}, - {"SELECT CURRENT_USER;", true}, - {"SELECT CONNECTION_ID();", true}, - {"SELECT VERSION();", true}, - {"SELECT BENCHMARK(1000000, AES_ENCRYPT('text',UNHEX('F3229A0B371ED2D9441B830D21A390C3')));", true}, - {"SELECT BENCHMARK(AES_ENCRYPT('text',UNHEX('F3229A0B371ED2D9441B830D21A390C3')));", true}, - {"SELECT CHARSET('abc');", true}, - {"SELECT COERCIBILITY('abc');", true}, - {"SELECT COERCIBILITY('abc', 'a');", true}, - {"SELECT COLLATION('abc');", true}, - {"SELECT ROW_COUNT();", true}, - {"SELECT SESSION_USER();", true}, - {"SELECT SYSTEM_USER();", true}, - - {"SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);", true}, - {"SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);", true}, - - {`SELECT ASCII(), ASCII(""), ASCII("A"), ASCII(1);`, true}, - - {`SELECT LOWER("A"), UPPER("a")`, true}, - {`SELECT LCASE("A"), UCASE("a")`, true}, - - {`SELECT REPLACE('www.mysql.com', 'w', 'Ww')`, true}, - - {`SELECT LOCATE('bar', 'foobarbar');`, true}, - {`SELECT LOCATE('bar', 'foobarbar', 5);`, true}, - - {`SELECT tidb_version();`, true}, - {`SELECT tidb_is_ddl_owner();`, true}, - - // for time fsp - {"CREATE TABLE t( c1 TIME(2), c2 DATETIME(2), c3 TIMESTAMP(2) );", true}, - - // for row - {"select row(1)", false}, - {"select row(1, 1,)", false}, - {"select (1, 1,)", false}, - {"select row(1, 1) > row(1, 1), row(1, 1, 1) > row(1, 1, 1)", true}, - {"Select (1, 1) > (1, 1)", true}, - {"create table t (row int)", true}, - - // for cast with charset - {"SELECT *, CAST(data AS CHAR CHARACTER SET utf8) FROM t;", true}, - - // for cast as JSON - {"SELECT *, CAST(data AS JSON) FROM t;", true}, - - // for cast as signed int, fix issue #3691. - {"select cast(1 as signed int);", true}, - - // for last_insert_id - {"SELECT last_insert_id();", true}, - {"SELECT last_insert_id(1);", true}, - - // for binary operator - {"SELECT binary 'a';", true}, - - // for bit_count - {`SELECT BIT_COUNT(1);`, true}, - - // select time - {"select current_timestamp", true}, - {"select current_timestamp()", true}, - {"select current_timestamp(6)", true}, - {"select current_timestamp(null)", false}, - {"select current_timestamp(-1)", false}, - {"select current_timestamp(1.0)", false}, - {"select current_timestamp('2')", false}, - {"select now()", true}, - {"select now(6)", true}, - {"select sysdate(), sysdate(6)", true}, - {"SELECT time('01:02:03');", true}, - {"SELECT time('01:02:03.1')", true}, - {"SELECT time('20.1')", true}, - {"SELECT TIMEDIFF('2000:01:01 00:00:00', '2000:01:01 00:00:00.000001');", true}, - {"SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');", true}, - {"SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');", true}, - {"SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');", true}, - - // select current_time - {"select current_time", true}, - {"select current_time()", true}, - {"select current_time(6)", true}, - {"select current_time(-1)", false}, - {"select current_time(1.0)", false}, - {"select current_time('1')", false}, - {"select current_time(null)", false}, - {"select curtime()", true}, - {"select curtime(6)", true}, - {"select curtime(-1)", false}, - {"select curtime(1.0)", false}, - {"select curtime('1')", false}, - {"select curtime(null)", false}, - - // select utc_timestamp - {"select utc_timestamp", true}, - {"select utc_timestamp()", true}, - {"select utc_timestamp(6)", true}, - {"select utc_timestamp(-1)", false}, - {"select utc_timestamp(1.0)", false}, - {"select utc_timestamp('1')", false}, - {"select utc_timestamp(null)", false}, - - // select utc_time - {"select utc_time", true}, - {"select utc_time()", true}, - {"select utc_time(6)", true}, - {"select utc_time(-1)", false}, - {"select utc_time(1.0)", false}, - {"select utc_time('1')", false}, - {"select utc_time(null)", false}, - - // for microsecond, second, minute, hour - {"SELECT MICROSECOND('2009-12-31 23:59:59.000010');", true}, - {"SELECT SECOND('10:05:03');", true}, - {"SELECT MINUTE('2008-02-03 10:05:03');", true}, - {"SELECT HOUR(), HOUR('10:05:03');", true}, - - // for date, day, weekday - {"SELECT CURRENT_DATE, CURRENT_DATE(), CURDATE()", true}, - {"SELECT CURRENT_DATE, CURRENT_DATE(), CURDATE(1)", false}, - {"SELECT DATEDIFF('2003-12-31', '2003-12-30');", true}, - {"SELECT DATE('2003-12-31 01:02:03');", true}, - {"SELECT DATE();", true}, - {"SELECT DATE('2003-12-31 01:02:03', '');", true}, - {`SELECT DATE_FORMAT('2003-12-31 01:02:03', '%W %M %Y');`, true}, - {"SELECT DAY('2007-02-03');", true}, - {"SELECT DAYOFMONTH('2007-02-03');", true}, - {"SELECT DAYOFWEEK('2007-02-03');", true}, - {"SELECT DAYOFYEAR('2007-02-03');", true}, - {"SELECT DAYNAME('2007-02-03');", true}, - {"SELECT FROM_DAYS(1423);", true}, - {"SELECT WEEKDAY('2007-02-03');", true}, - - // for utc_date - {"SELECT UTC_DATE, UTC_DATE();", true}, - {"SELECT UTC_DATE(), UTC_DATE()+0", true}, - - // for week, month, year - {"SELECT WEEK();", true}, - {"SELECT WEEK('2007-02-03');", true}, - {"SELECT WEEK('2007-02-03', 0);", true}, - {"SELECT WEEKOFYEAR('2007-02-03');", true}, - {"SELECT MONTH('2007-02-03');", true}, - {"SELECT MONTHNAME('2007-02-03');", true}, - {"SELECT YEAR('2007-02-03');", true}, - {"SELECT YEARWEEK('2007-02-03');", true}, - {"SELECT YEARWEEK('2007-02-03', 0);", true}, - - // for ADDTIME, SUBTIME - {"SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');", true}, - {"SELECT ADDTIME('02:00:00.999998');", true}, - {"SELECT ADDTIME();", true}, - {"SELECT SUBTIME('01:00:00.999999', '02:00:00.999998');", true}, - - // for CONVERT_TZ - {"SELECT CONVERT_TZ();", true}, - {"SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');", true}, - {"SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00', '+10:00');", true}, - - // for GET_FORMAT - {"SELECT GET_FORMAT(DATE, 'USA');", true}, - {"SELECT GET_FORMAT(DATETIME, 'USA');", true}, - {"SELECT GET_FORMAT(TIME, 'USA');", true}, - {"SELECT GET_FORMAT(TIMESTAMP, 'USA');", true}, - - // for LOCALTIME, LOCALTIMESTAMP - {"SELECT LOCALTIME(), LOCALTIME(1)", true}, - {"SELECT LOCALTIMESTAMP(), LOCALTIMESTAMP(2)", true}, - - // for MAKEDATE, MAKETIME - {"SELECT MAKEDATE(2011,31);", true}, - {"SELECT MAKETIME(12,15,30);", true}, - {"SELECT MAKEDATE();", true}, - {"SELECT MAKETIME();", true}, - - // for PERIOD_ADD, PERIOD_DIFF - {"SELECT PERIOD_ADD(200801,2)", true}, - {"SELECT PERIOD_DIFF(200802,200703)", true}, - - // for QUARTER - {"SELECT QUARTER('2008-04-01');", true}, - - // for SEC_TO_TIME - {"SELECT SEC_TO_TIME(2378)", true}, - - // for TIME_FORMAT - {`SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l')`, true}, - - // for TIME_TO_SEC - {"SELECT TIME_TO_SEC('22:23:00')", true}, - - // for TIMESTAMPADD - {"SELECT TIMESTAMPADD(WEEK,1,'2003-01-02');", true}, - - // for TO_DAYS, TO_SECONDS - {"SELECT TO_DAYS('2007-10-07')", true}, - {"SELECT TO_SECONDS('2009-11-29')", true}, - - // for LAST_DAY - {"SELECT LAST_DAY('2003-02-05');", true}, - - // for UTC_TIME - {"SELECT UTC_TIME(), UTC_TIME(1)", true}, - - // for time extract - {`select extract(microsecond from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(second from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(minute from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(hour from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(day from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(week from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(month from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(quarter from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(year from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(second_microsecond from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(minute_microsecond from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(minute_second from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(hour_microsecond from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(hour_second from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(hour_minute from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(day_microsecond from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(day_second from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(day_minute from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(day_hour from "2011-11-11 10:10:10.123456")`, true}, - {`select extract(year_month from "2011-11-11 10:10:10.123456")`, true}, - - // for from_unixtime - {`select from_unixtime(1447430881)`, true}, - {`select from_unixtime(1447430881.123456)`, true}, - {`select from_unixtime(1447430881.1234567)`, true}, - {`select from_unixtime(1447430881.9999999)`, true}, - {`select from_unixtime(1447430881, "%Y %D %M %h:%i:%s %x")`, true}, - {`select from_unixtime(1447430881.123456, "%Y %D %M %h:%i:%s %x")`, true}, - {`select from_unixtime(1447430881.1234567, "%Y %D %M %h:%i:%s %x")`, true}, - - // for issue 224 - {`SELECT CAST('test collated returns' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;`, true}, - - // for string functions - // trim - {`SELECT TRIM(' bar ');`, true}, - {`SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');`, true}, - {`SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');`, true}, - {`SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');`, true}, - {`SELECT LTRIM(' foo ');`, true}, - {`SELECT RTRIM(' bar ');`, true}, - - {`SELECT RPAD('hi', 6, 'c');`, true}, - {`SELECT BIT_LENGTH('hi');`, true}, - {`SELECT CHAR(65);`, true}, - {`SELECT CHAR_LENGTH('abc');`, true}, - {`SELECT CHARACTER_LENGTH('abc');`, true}, - {`SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');`, true}, - {`SELECT FIND_IN_SET('foo', 'foo,bar')`, true}, - {`SELECT FIND_IN_SET('foo')`, true}, // illegal number of argument still pass - {`SELECT MAKE_SET(1,'a'), MAKE_SET(1,'a','b','c')`, true}, - {`SELECT MID('Sakila', -5, 3)`, true}, - {`SELECT OCT(12)`, true}, - {`SELECT OCTET_LENGTH('text')`, true}, - {`SELECT ORD('2')`, true}, - {`SELECT POSITION('bar' IN 'foobarbar')`, true}, - {`SELECT QUOTE('Don\'t!')`, true}, - {`SELECT BIN(12)`, true}, - {`SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo')`, true}, - {`SELECT EXPORT_SET(5,'Y','N'), EXPORT_SET(5,'Y','N',','), EXPORT_SET(5,'Y','N',',',4)`, true}, - {`SELECT FORMAT(), FORMAT(12332.2,2,'de_DE'), FORMAT(12332.123456, 4)`, true}, - {`SELECT FROM_BASE64('abc')`, true}, - {`SELECT TO_BASE64('abc')`, true}, - {`SELECT INSERT(), INSERT('Quadratic', 3, 4, 'What'), INSTR('foobarbar', 'bar')`, true}, - {`SELECT LOAD_FILE('/tmp/picture')`, true}, - {`SELECT LPAD('hi',4,'??')`, true}, - {`SELECT LEFT("foobar", 3)`, true}, - {`SELECT RIGHT("foobar", 3)`, true}, - - // repeat - {`SELECT REPEAT("a", 10);`, true}, - - // for miscellaneous functions - {`SELECT SLEEP(10);`, true}, - {`SELECT ANY_VALUE(@arg);`, true}, - {`SELECT INET_ATON('10.0.5.9');`, true}, - {`SELECT INET_NTOA(167773449);`, true}, - {`SELECT INET6_ATON('fdfe::5a55:caff:fefa:9089');`, true}, - {`SELECT INET6_NTOA(INET_NTOA(167773449));`, true}, - {`SELECT IS_FREE_LOCK(@str);`, true}, - {`SELECT IS_IPV4('10.0.5.9');`, true}, - {`SELECT IS_IPV4_COMPAT(INET6_ATON('::10.0.5.9'));`, true}, - {`SELECT IS_IPV4_MAPPED(INET6_ATON('::10.0.5.9'));`, true}, - {`SELECT IS_IPV6('10.0.5.9');`, true}, - {`SELECT IS_USED_LOCK(@str);`, true}, - {`SELECT MASTER_POS_WAIT(@log_name, @log_pos), MASTER_POS_WAIT(@log_name, @log_pos, @timeout), MASTER_POS_WAIT(@log_name, @log_pos, @timeout, @channel_name);`, true}, - {`SELECT NAME_CONST('myname', 14);`, true}, - {`SELECT RELEASE_ALL_LOCKS();`, true}, - {`SELECT UUID();`, true}, - {`SELECT UUID_SHORT()`, true}, - // test illegal arguments - {`SELECT SLEEP();`, true}, - {`SELECT ANY_VALUE();`, true}, - {`SELECT INET_ATON();`, true}, - {`SELECT INET_NTOA();`, true}, - {`SELECT INET6_ATON();`, true}, - {`SELECT INET6_NTOA(INET_NTOA());`, true}, - {`SELECT IS_FREE_LOCK();`, true}, - {`SELECT IS_IPV4();`, true}, - {`SELECT IS_IPV4_COMPAT(INET6_ATON());`, true}, - {`SELECT IS_IPV4_MAPPED(INET6_ATON());`, true}, - {`SELECT IS_IPV6()`, true}, - {`SELECT IS_USED_LOCK();`, true}, - {`SELECT MASTER_POS_WAIT();`, true}, - {`SELECT NAME_CONST();`, true}, - {`SELECT RELEASE_ALL_LOCKS(1);`, true}, - {`SELECT UUID(1);`, true}, - {`SELECT UUID_SHORT(1)`, true}, - // interval - {`select "2011-11-11 10:10:10.123456" + interval 10 second`, true}, - {`select "2011-11-11 10:10:10.123456" - interval 10 second`, true}, - // for date_add - {`select date_add("2011-11-11 10:10:10.123456", interval 10 microsecond)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval 10 second)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval 10 minute)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval 10 hour)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval 10 day)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval 1 week)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval 1 month)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval 1 quarter)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval 1 year)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval "10.10" second_microsecond)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval "10:10.10" minute_microsecond)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval "10:10" minute_second)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval "10:10:10.10" hour_microsecond)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval "10:10:10" hour_second)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval "10:10" hour_minute)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval 10.10 hour_minute)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval "11 10:10:10.10" day_microsecond)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval "11 10:10:10" day_second)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval "11 10:10" day_minute)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval "11 10" day_hour)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", interval "11-11" year_month)`, true}, - {`select date_add("2011-11-11 10:10:10.123456", 10)`, false}, - {`select date_add("2011-11-11 10:10:10.123456", 0.10)`, false}, - {`select date_add("2011-11-11 10:10:10.123456", "11,11")`, false}, - - // for strcmp - {`select strcmp('abc', 'def')`, true}, - - // for adddate - {`select adddate("2011-11-11 10:10:10.123456", interval 10 microsecond)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval 10 second)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval 10 minute)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval 10 hour)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval 10 day)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval 1 week)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval 1 month)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval 1 quarter)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval 1 year)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval "10.10" second_microsecond)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval "10:10.10" minute_microsecond)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval "10:10" minute_second)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval "10:10:10.10" hour_microsecond)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval "10:10:10" hour_second)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval "10:10" hour_minute)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval 10.10 hour_minute)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval "11 10:10:10.10" day_microsecond)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval "11 10:10:10" day_second)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval "11 10:10" day_minute)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval "11 10" day_hour)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", interval "11-11" year_month)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", 10)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", 0.10)`, true}, - {`select adddate("2011-11-11 10:10:10.123456", "11,11")`, true}, - - // for date_sub - {`select date_sub("2011-11-11 10:10:10.123456", interval 10 microsecond)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval 10 second)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval 10 minute)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval 10 hour)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval 10 day)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval 1 week)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval 1 month)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval 1 quarter)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval 1 year)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval "10.10" second_microsecond)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval "10:10.10" minute_microsecond)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval "10:10" minute_second)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval "10:10:10.10" hour_microsecond)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval "10:10:10" hour_second)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval "10:10" hour_minute)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval 10.10 hour_minute)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval "11 10:10:10.10" day_microsecond)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval "11 10:10:10" day_second)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval "11 10:10" day_minute)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval "11 10" day_hour)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", interval "11-11" year_month)`, true}, - {`select date_sub("2011-11-11 10:10:10.123456", 10)`, false}, - {`select date_sub("2011-11-11 10:10:10.123456", 0.10)`, false}, - {`select date_sub("2011-11-11 10:10:10.123456", "11,11")`, false}, - - // for subdate - {`select subdate("2011-11-11 10:10:10.123456", interval 10 microsecond)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval 10 second)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval 10 minute)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval 10 hour)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval 10 day)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval 1 week)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval 1 month)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval 1 quarter)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval 1 year)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval "10.10" second_microsecond)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval "10:10.10" minute_microsecond)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval "10:10" minute_second)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval "10:10:10.10" hour_microsecond)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval "10:10:10" hour_second)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval "10:10" hour_minute)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval 10.10 hour_minute)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval "11 10:10:10.10" day_microsecond)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval "11 10:10:10" day_second)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval "11 10:10" day_minute)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval "11 10" day_hour)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", interval "11-11" year_month)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", 10)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", 0.10)`, true}, - {`select subdate("2011-11-11 10:10:10.123456", "11,11")`, true}, - - // for unix_timestamp - {`select unix_timestamp()`, true}, - {`select unix_timestamp('2015-11-13 10:20:19.012')`, true}, - - // for misc functions - {`SELECT GET_LOCK('lock1',10);`, true}, - {`SELECT RELEASE_LOCK('lock1');`, true}, - - // for aggregate functions - {`select avg(), avg(c1,c2) from t;`, false}, - {`select avg(distinct c1) from t;`, true}, - {`select avg(distinctrow c1) from t;`, true}, - {`select avg(distinct all c1) from t;`, true}, - {`select avg(distinctrow all c1) from t;`, true}, - {`select avg(c2) from t;`, true}, - {`select bit_and(c1) from t;`, true}, - {`select bit_and(all c1) from t;`, true}, - {`select bit_and(distinct c1) from t;`, false}, - {`select bit_and(distinctrow c1) from t;`, false}, - {`select bit_and(distinctrow all c1) from t;`, false}, - {`select bit_and(distinct all c1) from t;`, false}, - {`select bit_and(), bit_and(distinct c1) from t;`, false}, - {`select bit_and(), bit_and(distinctrow c1) from t;`, false}, - {`select bit_and(), bit_and(all c1) from t;`, false}, - {`select bit_or(c1) from t;`, true}, - {`select bit_or(all c1) from t;`, true}, - {`select bit_or(distinct c1) from t;`, false}, - {`select bit_or(distinctrow c1) from t;`, false}, - {`select bit_or(distinctrow all c1) from t;`, false}, - {`select bit_or(distinct all c1) from t;`, false}, - {`select bit_or(), bit_or(distinct c1) from t;`, false}, - {`select bit_or(), bit_or(distinctrow c1) from t;`, false}, - {`select bit_or(), bit_or(all c1) from t;`, false}, - {`select bit_xor(c1) from t;`, true}, - {`select bit_xor(all c1) from t;`, true}, - {`select bit_xor(distinct c1) from t;`, false}, - {`select bit_xor(distinctrow c1) from t;`, false}, - {`select bit_xor(distinctrow all c1) from t;`, false}, - {`select bit_xor(), bit_xor(distinct c1) from t;`, false}, - {`select bit_xor(), bit_xor(distinctrow c1) from t;`, false}, - {`select bit_xor(), bit_xor(all c1) from t;`, false}, - {`select max(c1,c2) from t;`, false}, - {`select max(distinct c1) from t;`, true}, - {`select max(distinctrow c1) from t;`, true}, - {`select max(distinct all c1) from t;`, true}, - {`select max(distinctrow all c1) from t;`, true}, - {`select max(c2) from t;`, true}, - {`select min(c1,c2) from t;`, false}, - {`select min(distinct c1) from t;`, true}, - {`select min(distinctrow c1) from t;`, true}, - {`select min(distinct all c1) from t;`, true}, - {`select min(distinctrow all c1) from t;`, true}, - {`select min(c2) from t;`, true}, - {`select sum(c1,c2) from t;`, false}, - {`select sum(distinct c1) from t;`, true}, - {`select sum(distinctrow c1) from t;`, true}, - {`select sum(distinct all c1) from t;`, true}, - {`select sum(distinctrow all c1) from t;`, true}, - {`select sum(c2) from t;`, true}, - {`select count(c1) from t;`, true}, - {`select count(distinct *) from t;`, false}, - {`select count(distinctrow *) from t;`, false}, - {`select count(*) from t;`, true}, - {`select count(distinct c1, c2) from t;`, true}, - {`select count(distinctrow c1, c2) from t;`, true}, - {`select count(c1, c2) from t;`, false}, - {`select count(all c1) from t;`, true}, - {`select count(distinct all c1) from t;`, false}, - {`select count(distinctrow all c1) from t;`, false}, - {`select group_concat(c2,c1) from t group by c1;`, true}, - {`select group_concat(c2,c1 SEPARATOR ';') from t group by c1;`, true}, - {`select group_concat(distinct c2,c1) from t group by c1;`, true}, - {`select group_concat(distinctrow c2,c1) from t group by c1;`, true}, - {`SELECT student_name, GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ') FROM student GROUP BY student_name;`, true}, - - // for encryption and compression functions - {`select AES_ENCRYPT('text',UNHEX('F3229A0B371ED2D9441B830D21A390C3'))`, true}, - {`select AES_DECRYPT(@crypt_str,@key_str)`, true}, - {`select AES_DECRYPT(@crypt_str,@key_str,@init_vector);`, true}, - {`SELECT COMPRESS('');`, true}, - {`SELECT DECODE(@crypt_str, @pass_str);`, true}, - {`SELECT DES_DECRYPT(@crypt_str), DES_DECRYPT(@crypt_str, @key_str);`, true}, - {`SELECT DES_ENCRYPT(@str), DES_ENCRYPT(@key_num);`, true}, - {`SELECT ENCODE('cleartext', CONCAT('my_random_salt','my_secret_password'));`, true}, - {`SELECT ENCRYPT('hello'), ENCRYPT('hello', @salt);`, true}, - {`SELECT MD5('testing');`, true}, - {`SELECT OLD_PASSWORD(@str);`, true}, - {`SELECT PASSWORD(@str);`, true}, - {`SELECT RANDOM_BYTES(@len);`, true}, - {`SELECT SHA1('abc');`, true}, - {`SELECT SHA('abc');`, true}, - {`SELECT SHA2('abc', 224);`, true}, - {`SELECT UNCOMPRESS('any string');`, true}, - {`SELECT UNCOMPRESSED_LENGTH(@compressed_string);`, true}, - {`SELECT VALIDATE_PASSWORD_STRENGTH(@str);`, true}, - - // For JSON functions. - {`SELECT JSON_EXTRACT();`, true}, - {`SELECT JSON_UNQUOTE();`, true}, - {`SELECT JSON_TYPE('[123]');`, true}, - {`SELECT JSON_TYPE();`, true}, - - // For two json grammar sugar. - {`SELECT a->'$.a' FROM t`, true}, - {`SELECT a->>'$.a' FROM t`, true}, - {`SELECT '{}'->'$.a' FROM t`, false}, - {`SELECT '{}'->>'$.a' FROM t`, false}, - {`SELECT a->3 FROM t`, false}, - {`SELECT a->>3 FROM t`, false}, - - // Test that quoted identifier can be a function name. - {"SELECT `uuid`()", true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestIdentifier(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - // for quote identifier - {"select `a`, `a.b`, `a b` from t", true}, - // for unquoted identifier - {"create table MergeContextTest$Simple (value integer not null, primary key (value))", true}, - // for as - {"select 1 as a, 1 as `a`, 1 as \"a\", 1 as 'a'", true}, - {`select 1 as a, 1 as "a", 1 as 'a'`, true}, - {`select 1 a, 1 "a", 1 'a'`, true}, - {`select * from t as "a"`, false}, - {`select * from t a`, true}, - // reserved keyword can't be used as identifier directly, but A.B pattern is an exception - {`select COUNT from DESC`, false}, - {`select COUNT from SELECT.DESC`, true}, - {"use `select`", true}, - {"use select", false}, - {`select * from t as a`, true}, - {"select 1 full, 1 row, 1 abs", true}, - {"select * from t full, t1 row, t2 abs", true}, - // for issue 1878, identifiers may begin with digit. - {"create database 123test", true}, - {"create database 123", false}, - {"create database `123`", true}, - {"create table `123` (123a1 int)", true}, - {"create table 123 (123a1 int)", false}, - {fmt.Sprintf("select * from t%cble", 0), false}, - {"select 1 full, 1 row, 1 abs", true}, - {"select * from t full, t1 row, t2 abs", true}, - // for issue 3954, should NOT be recognized as identifiers. - {`select .78+123`, true}, - {`select .78+.21`, true}, - {`select .78-123`, true}, - {`select .78-.21`, true}, - {`select .78--123`, true}, - {`select .78*123`, true}, - {`select .78*.21`, true}, - {`select .78/123`, true}, - {`select .78/.21`, true}, - {`select .78,123`, true}, - {`select .78,.21`, true}, - {`select .78 , 123`, true}, - {`select .78.123`, false}, - {`select .78#123`, true}, // select .78 - {`insert float_test values(.67, 'string');`, true}, - {`select .78'123'`, true}, // select .78 as '123' - {"select .78`123`", true}, // select .78 as `123` - {`select .78"123"`, true}, // select .78 as "123" - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestDDL(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {"CREATE", false}, - {"CREATE TABLE", false}, - {"CREATE TABLE foo (", false}, - {"CREATE TABLE foo ()", false}, - {"CREATE TABLE foo ();", false}, - {"CREATE TABLE foo (a TINYINT UNSIGNED);", true}, - {"CREATE TABLE foo (a SMALLINT UNSIGNED, b INT UNSIGNED)", true}, - {"CREATE TABLE foo (a bigint unsigned, b bool);", true}, - {"CREATE TABLE foo (a TINYINT, b SMALLINT) CREATE TABLE bar (x INT, y int64)", false}, - {"CREATE TABLE foo (a int, b float); CREATE TABLE bar (x double, y float)", true}, - {"CREATE TABLE foo (a bytes)", false}, - {"CREATE TABLE foo (a SMALLINT UNSIGNED, b INT UNSIGNED)", true}, - {"CREATE TABLE foo (a SMALLINT UNSIGNED, b INT UNSIGNED) -- foo", true}, - // {"CREATE TABLE foo (a SMALLINT UNSIGNED, b INT UNSIGNED) // foo", true}, - {"CREATE TABLE foo (a SMALLINT UNSIGNED, b INT UNSIGNED) /* foo */", true}, - {"CREATE TABLE foo /* foo */ (a SMALLINT UNSIGNED, b INT UNSIGNED) /* foo */", true}, - {"CREATE TABLE foo (name CHAR(50) BINARY)", true}, - {"CREATE TABLE foo (name CHAR(50) COLLATE utf8_bin)", true}, - {"CREATE TABLE foo (name CHAR(50) CHARACTER SET utf8)", true}, - {"CREATE TABLE foo (name CHAR(50) CHARACTER SET utf8 BINARY)", true}, - {"CREATE TABLE foo (name CHAR(50) CHARACTER SET utf8 BINARY CHARACTER set utf8)", false}, - {"CREATE TABLE foo (name CHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin)", true}, - {"CREATE TABLE foo (a.b, b);", false}, - {"CREATE TABLE foo (a, b.c);", false}, - {"CREATE TABLE (name CHAR(50) BINARY)", false}, - // for table option - {"create table t (c int) avg_row_length = 3", true}, - {"create table t (c int) avg_row_length 3", true}, - {"create table t (c int) checksum = 0", true}, - {"create table t (c int) checksum 1", true}, - {"create table t (c int) compression = 'NONE'", true}, - {"create table t (c int) compression 'lz4'", true}, - {"create table t (c int) connection = 'abc'", true}, - {"create table t (c int) connection 'abc'", true}, - {"create table t (c int) key_block_size = 1024", true}, - {"create table t (c int) key_block_size 1024", true}, - {"create table t (c int) max_rows = 1000", true}, - {"create table t (c int) max_rows 1000", true}, - {"create table t (c int) min_rows = 1000", true}, - {"create table t (c int) min_rows 1000", true}, - {"create table t (c int) password = 'abc'", true}, - {"create table t (c int) password 'abc'", true}, - {"create table t (c int) DELAY_KEY_WRITE=1", true}, - {"create table t (c int) DELAY_KEY_WRITE 1", true}, - {"create table t (c int) ROW_FORMAT = default", true}, - {"create table t (c int) ROW_FORMAT default", true}, - {"create table t (c int) ROW_FORMAT = fixed", true}, - {"create table t (c int) ROW_FORMAT = compressed", true}, - {"create table t (c int) ROW_FORMAT = compact", true}, - {"create table t (c int) ROW_FORMAT = redundant", true}, - {"create table t (c int) ROW_FORMAT = dynamic", true}, - {"create table t (c int) STATS_PERSISTENT = default", true}, - {"create table t (c int) STATS_PERSISTENT = 0", true}, - {"create table t (c int) STATS_PERSISTENT = 1", true}, - {"create table t (c int) PACK_KEYS = 1", true}, - {"create table t (c int) PACK_KEYS = 0", true}, - {"create table t (c int) PACK_KEYS = DEFAULT", true}, - {`create table testTableCompression (c VARCHAR(15000)) compression="ZLIB";`, true}, - {`create table t1 (c1 int) compression="zlib";`, true}, - - // partition option - {"create table t (c int) PARTITION BY HASH (c) PARTITIONS 32;", true}, - {"create table t (c int) PARTITION BY RANGE (Year(VDate)) (PARTITION p1980 VALUES LESS THAN (1980) ENGINE = MyISAM, PARTITION p1990 VALUES LESS THAN (1990) ENGINE = MyISAM, PARTITION pothers VALUES LESS THAN MAXVALUE ENGINE = MyISAM)", true}, - {"create table t (c int, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '') PARTITION BY RANGE (UNIX_TIMESTAMP(create_time)) (PARTITION p201610 VALUES LESS THAN(1477929600), PARTITION p201611 VALUES LESS THAN(1480521600),PARTITION p201612 VALUES LESS THAN(1483200000),PARTITION p201701 VALUES LESS THAN(1485878400),PARTITION p201702 VALUES LESS THAN(1488297600),PARTITION p201703 VALUES LESS THAN(1490976000))", true}, - {"CREATE TABLE `md_product_shop` (`shopCode` varchar(4) DEFAULT NULL COMMENT '地点') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 /*!50100 PARTITION BY KEY (shopCode) PARTITIONS 19 */;", true}, - {"CREATE TABLE `payinfo1` (`id` bigint(20) NOT NULL AUTO_INCREMENT, `oderTime` datetime NOT NULL) ENGINE=InnoDB AUTO_INCREMENT=641533032 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8 /*!50500 PARTITION BY RANGE COLUMNS(oderTime) (PARTITION P2011 VALUES LESS THAN ('2012-01-01 00:00:00') ENGINE = InnoDB, PARTITION P1201 VALUES LESS THAN ('2012-02-01 00:00:00') ENGINE = InnoDB, PARTITION PMAX VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB)*/;", true}, - {`CREATE TABLE app_channel_daily_report (id bigint(20) NOT NULL AUTO_INCREMENT, app_version varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'default', gmt_create datetime NOT NULL COMMENT '创建时间', PRIMARY KEY (id)) ENGINE=InnoDB AUTO_INCREMENT=33703438 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci -/*!50100 PARTITION BY RANGE (month(gmt_create)-1) -(PARTITION part0 VALUES LESS THAN (1) COMMENT = '1月份' ENGINE = InnoDB, - PARTITION part1 VALUES LESS THAN (2) COMMENT = '2月份' ENGINE = InnoDB, - PARTITION part2 VALUES LESS THAN (3) COMMENT = '3月份' ENGINE = InnoDB, - PARTITION part3 VALUES LESS THAN (4) COMMENT = '4月份' ENGINE = InnoDB, - PARTITION part4 VALUES LESS THAN (5) COMMENT = '5月份' ENGINE = InnoDB, - PARTITION part5 VALUES LESS THAN (6) COMMENT = '6月份' ENGINE = InnoDB, - PARTITION part6 VALUES LESS THAN (7) COMMENT = '7月份' ENGINE = InnoDB, - PARTITION part7 VALUES LESS THAN (8) COMMENT = '8月份' ENGINE = InnoDB, - PARTITION part8 VALUES LESS THAN (9) COMMENT = '9月份' ENGINE = InnoDB, - PARTITION part9 VALUES LESS THAN (10) COMMENT = '10月份' ENGINE = InnoDB, - PARTITION part10 VALUES LESS THAN (11) COMMENT = '11月份' ENGINE = InnoDB, - PARTITION part11 VALUES LESS THAN (12) COMMENT = '12月份' ENGINE = InnoDB) */ ;`, true}, - - // for check clause - {"create table t (c1 bool, c2 bool, check (c1 in (0, 1)), check (c2 in (0, 1)))", true}, - {"CREATE TABLE Customer (SD integer CHECK (SD > 0), First_Name varchar(30));", true}, - - {"create database xxx", true}, - {"create database if exists xxx", false}, - {"create database if not exists xxx", true}, - {"create schema xxx", true}, - {"create schema if exists xxx", false}, - {"create schema if not exists xxx", true}, - // for drop database/schema/table/stats - {"drop database xxx", true}, - {"drop database if exists xxx", true}, - {"drop database if not exists xxx", false}, - {"drop schema xxx", true}, - {"drop schema if exists xxx", true}, - {"drop schema if not exists xxx", false}, - {"drop table", false}, - {"drop table xxx", true}, - {"drop table xxx, yyy", true}, - {"drop tables xxx", true}, - {"drop tables xxx, yyy", true}, - {"drop table if exists xxx", true}, - {"drop table if not exists xxx", false}, - {"drop table xxx restrict", true}, - {"drop table xxx, yyy cascade", true}, - {"drop table if exists xxx restrict", true}, - {"drop view if exists xxx", true}, - {"drop stats t", true}, - // for issue 974 - {`CREATE TABLE address ( - id bigint(20) NOT NULL AUTO_INCREMENT, - create_at datetime NOT NULL, - deleted tinyint(1) NOT NULL, - update_at datetime NOT NULL, - version bigint(20) DEFAULT NULL, - address varchar(128) NOT NULL, - address_detail varchar(128) NOT NULL, - cellphone varchar(16) NOT NULL, - latitude double NOT NULL, - longitude double NOT NULL, - name varchar(16) NOT NULL, - sex tinyint(1) NOT NULL, - user_id bigint(20) NOT NULL, - PRIMARY KEY (id), - CONSTRAINT FK_7rod8a71yep5vxasb0ms3osbg FOREIGN KEY (user_id) REFERENCES waimaiqa.user (id), - INDEX FK_7rod8a71yep5vxasb0ms3osbg (user_id) comment '' - ) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ROW_FORMAT=COMPACT COMMENT='' CHECKSUM=0 DELAY_KEY_WRITE=0;`, true}, - // for issue 975 - {`CREATE TABLE test_data ( - id bigint(20) NOT NULL AUTO_INCREMENT, - create_at datetime NOT NULL, - deleted tinyint(1) NOT NULL, - update_at datetime NOT NULL, - version bigint(20) DEFAULT NULL, - address varchar(255) NOT NULL, - amount decimal(19,2) DEFAULT NULL, - charge_id varchar(32) DEFAULT NULL, - paid_amount decimal(19,2) DEFAULT NULL, - transaction_no varchar(64) DEFAULT NULL, - wx_mp_app_id varchar(32) DEFAULT NULL, - contacts varchar(50) DEFAULT NULL, - deliver_fee decimal(19,2) DEFAULT NULL, - deliver_info varchar(255) DEFAULT NULL, - deliver_time varchar(255) DEFAULT NULL, - description varchar(255) DEFAULT NULL, - invoice varchar(255) DEFAULT NULL, - order_from int(11) DEFAULT NULL, - order_state int(11) NOT NULL, - packing_fee decimal(19,2) DEFAULT NULL, - payment_time datetime DEFAULT NULL, - payment_type int(11) DEFAULT NULL, - phone varchar(50) NOT NULL, - store_employee_id bigint(20) DEFAULT NULL, - store_id bigint(20) NOT NULL, - user_id bigint(20) NOT NULL, - payment_mode int(11) NOT NULL, - current_latitude double NOT NULL, - current_longitude double NOT NULL, - address_latitude double NOT NULL, - address_longitude double NOT NULL, - PRIMARY KEY (id), - CONSTRAINT food_order_ibfk_1 FOREIGN KEY (user_id) REFERENCES waimaiqa.user (id), - CONSTRAINT food_order_ibfk_2 FOREIGN KEY (store_id) REFERENCES waimaiqa.store (id), - CONSTRAINT food_order_ibfk_3 FOREIGN KEY (store_employee_id) REFERENCES waimaiqa.store_employee (id), - UNIQUE FK_UNIQUE_charge_id USING BTREE (charge_id) comment '', - INDEX FK_eqst2x1xisn3o0wbrlahnnqq8 USING BTREE (store_employee_id) comment '', - INDEX FK_8jcmec4kb03f4dod0uqwm54o9 USING BTREE (store_id) comment '', - INDEX FK_a3t0m9apja9jmrn60uab30pqd USING BTREE (user_id) comment '' - ) ENGINE=InnoDB AUTO_INCREMENT=95 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ROW_FORMAT=COMPACT COMMENT='' CHECKSUM=0 DELAY_KEY_WRITE=0;`, true}, - {`create table t (c int KEY);`, true}, - {`CREATE TABLE address ( - id bigint(20) NOT NULL AUTO_INCREMENT, - create_at datetime NOT NULL, - deleted tinyint(1) NOT NULL, - update_at datetime NOT NULL, - version bigint(20) DEFAULT NULL, - address varchar(128) NOT NULL, - address_detail varchar(128) NOT NULL, - cellphone varchar(16) NOT NULL, - latitude double NOT NULL, - longitude double NOT NULL, - name varchar(16) NOT NULL, - sex tinyint(1) NOT NULL, - user_id bigint(20) NOT NULL, - PRIMARY KEY (id), - CONSTRAINT FK_7rod8a71yep5vxasb0ms3osbg FOREIGN KEY (user_id) REFERENCES waimaiqa.user (id) ON DELETE CASCADE ON UPDATE NO ACTION, - INDEX FK_7rod8a71yep5vxasb0ms3osbg (user_id) comment '' - ) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ROW_FORMAT=COMPACT COMMENT='' CHECKSUM=0 DELAY_KEY_WRITE=0;`, true}, - {"CREATE TABLE address (\r\nid bigint(20) NOT NULL AUTO_INCREMENT,\r\ncreate_at datetime NOT NULL,\r\ndeleted tinyint(1) NOT NULL,\r\nupdate_at datetime NOT NULL,\r\nversion bigint(20) DEFAULT NULL,\r\naddress varchar(128) NOT NULL,\r\naddress_detail varchar(128) NOT NULL,\r\ncellphone varchar(16) NOT NULL,\r\nlatitude double NOT NULL,\r\nlongitude double NOT NULL,\r\nname varchar(16) NOT NULL,\r\nsex tinyint(1) NOT NULL,\r\nuser_id bigint(20) NOT NULL,\r\nPRIMARY KEY (id),\r\nCONSTRAINT FK_7rod8a71yep5vxasb0ms3osbg FOREIGN KEY (user_id) REFERENCES waimaiqa.user (id) ON DELETE CASCADE ON UPDATE NO ACTION,\r\nINDEX FK_7rod8a71yep5vxasb0ms3osbg (user_id) comment ''\r\n) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ROW_FORMAT=COMPACT COMMENT='' CHECKSUM=0 DELAY_KEY_WRITE=0;", true}, - // for issue 1802 - {`CREATE TABLE t1 ( - accout_id int(11) DEFAULT '0', - summoner_id int(11) DEFAULT '0', - union_name varbinary(52) NOT NULL, - union_id int(11) DEFAULT '0', - PRIMARY KEY (union_name)) ENGINE=MyISAM DEFAULT CHARSET=binary;`, true}, - // Create table with multiple index options. - {`create table t (c int, index ci (c) USING BTREE COMMENT "123");`, true}, - // for default value - {"CREATE TABLE sbtest (id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, k integer UNSIGNED DEFAULT '0' NOT NULL, c char(120) DEFAULT '' NOT NULL, pad char(60) DEFAULT '' NOT NULL, PRIMARY KEY (id) )", true}, - {"create table test (create_date TIMESTAMP NOT NULL COMMENT '创建日期 create date' DEFAULT now());", true}, - {"create table ts (t int, v timestamp(3) default CURRENT_TIMESTAMP(3));", true}, - // Create table with primary key name. - {"create table if not exists `t` (`id` int not null auto_increment comment '消息ID', primary key `pk_id` (`id`) );", true}, - // Create table with like. - {"create table a like b", true}, - {"create table a (like b)", true}, - {"create table if not exists a like b", true}, - {"create table if not exists a (like b)", true}, - {"create table if not exists a like (b)", false}, - {"create table a (t int) like b", false}, - {"create table a (t int) like (b)", false}, - // Create table with select statement - {"create table a select * from b", true}, - {"create table a as select * from b", true}, - {"create table a (m int, n datetime) as select * from b", true}, - {"create table a (unique(n)) as select n from b", true}, - {"create table a ignore as select n from b", true}, - {"create table a replace as select n from b", true}, - {"create table a (m int) replace as (select n as m from b union select n+1 as m from c group by 1 limit 2)", true}, - - // Create table with no option is valid for parser - {"create table a", true}, - - {"create table t (a timestamp default now)", false}, - {"create table t (a timestamp default now())", true}, - {"create table t (a timestamp default now() on update now)", false}, - {"create table t (a timestamp default now() on update now())", true}, - {"CREATE TABLE t (c TEXT) default CHARACTER SET utf8, default COLLATE utf8_general_ci;", true}, - {"CREATE TABLE t (c TEXT) shard_row_id_bits = 1;", true}, - // Create table with ON UPDATE CURRENT_TIMESTAMP(6), specify fraction part. - {"CREATE TABLE IF NOT EXISTS `general_log` (`event_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),`user_host` mediumtext NOT NULL,`thread_id` bigint(20) unsigned NOT NULL,`server_id` int(10) unsigned NOT NULL,`command_type` varchar(64) NOT NULL,`argument` mediumblob NOT NULL) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'", true}, - // For reference_definition in column_definition. - {"CREATE TABLE followers ( f1 int NOT NULL REFERENCES user_profiles (uid) );", true}, - - // for alter table - {"ALTER TABLE t ADD COLUMN (a SMALLINT UNSIGNED)", true}, - {"ALTER TABLE ADD COLUMN (a SMALLINT UNSIGNED)", false}, - {"ALTER TABLE t ADD COLUMN (a SMALLINT UNSIGNED, b varchar(255))", true}, - {"ALTER TABLE t ADD COLUMN (a SMALLINT UNSIGNED FIRST)", false}, - {"ALTER TABLE t ADD COLUMN a SMALLINT UNSIGNED", true}, - {"ALTER TABLE t ADD COLUMN a SMALLINT UNSIGNED FIRST", true}, - {"ALTER TABLE t ADD COLUMN a SMALLINT UNSIGNED AFTER b", true}, - {"ALTER TABLE employees ADD PARTITION", true}, - {"ALTER TABLE employees ADD PARTITION ( PARTITION P1 VALUES LESS THAN (2010))", true}, - {"ALTER TABLE employees ADD PARTITION ( PARTITION P2 VALUES LESS THAN MAXVALUE)", true}, - {`ALTER TABLE employees ADD PARTITION ( - PARTITION P1 VALUES LESS THAN (2010), - PARTITION P2 VALUES LESS THAN (2015), - PARTITION P3 VALUES LESS THAN MAXVALUE)`, true}, - // For drop table partition statement. - {"alter table t drop partition p1;", true}, - {"alter table t drop partition p2;", true}, - {"ALTER TABLE t DISABLE KEYS", true}, - {"ALTER TABLE t ENABLE KEYS", true}, - {"ALTER TABLE t MODIFY COLUMN a varchar(255)", true}, - {"ALTER TABLE t CHANGE COLUMN a b varchar(255)", true}, - {"ALTER TABLE t CHANGE COLUMN a b varchar(255) CHARACTER SET utf8 BINARY", true}, - {"ALTER TABLE t CHANGE COLUMN a b varchar(255) FIRST", true}, - {"ALTER TABLE db.t RENAME to db1.t1", true}, - {"ALTER TABLE db.t RENAME db1.t1", true}, - {"ALTER TABLE t RENAME as t1", true}, - {"ALTER TABLE t ALTER COLUMN a SET DEFAULT 1", true}, - {"ALTER TABLE t ALTER a SET DEFAULT 1", true}, - {"ALTER TABLE t ALTER COLUMN a SET DEFAULT CURRENT_TIMESTAMP", false}, - {"ALTER TABLE t ALTER COLUMN a SET DEFAULT NOW()", false}, - {"ALTER TABLE t ALTER COLUMN a SET DEFAULT 1+1", false}, - {"ALTER TABLE t ALTER COLUMN a DROP DEFAULT", true}, - {"ALTER TABLE t ALTER a DROP DEFAULT", true}, - {"ALTER TABLE t ADD COLUMN a SMALLINT UNSIGNED, lock=none", true}, - {"ALTER TABLE t ADD COLUMN a SMALLINT UNSIGNED, lock=default", true}, - {"ALTER TABLE t ADD COLUMN a SMALLINT UNSIGNED, lock=shared", true}, - {"ALTER TABLE t ADD COLUMN a SMALLINT UNSIGNED, lock=exclusive", true}, - {"ALTER TABLE t ADD COLUMN a SMALLINT UNSIGNED, LOCK=NONE", true}, - {"ALTER TABLE t ADD COLUMN a SMALLINT UNSIGNED, LOCK=DEFAULT", true}, - {"ALTER TABLE t ADD COLUMN a SMALLINT UNSIGNED, LOCK=SHARED", true}, - {"ALTER TABLE t ADD COLUMN a SMALLINT UNSIGNED, LOCK=EXCLUSIVE", true}, - {"ALTER TABLE t ADD FULLTEXT KEY `FullText` (`name` ASC)", true}, - {"ALTER TABLE t ADD FULLTEXT INDEX `FullText` (`name` ASC)", true}, - {"ALTER TABLE t ADD INDEX (a) USING BTREE COMMENT 'a'", true}, - {"ALTER TABLE t ADD KEY (a) USING HASH COMMENT 'a'", true}, - {"ALTER TABLE t ADD PRIMARY KEY (a) COMMENT 'a'", true}, - {"ALTER TABLE t ADD UNIQUE (a) COMMENT 'a'", true}, - {"ALTER TABLE t ADD UNIQUE KEY (a) COMMENT 'a'", true}, - {"ALTER TABLE t ADD UNIQUE INDEX (a) COMMENT 'a'", true}, - {"ALTER TABLE t ENGINE ''", true}, - {"ALTER TABLE t ENGINE = ''", true}, - {"ALTER TABLE t ENGINE = 'innodb'", true}, - {"ALTER TABLE t ENGINE = innodb", true}, - {"ALTER TABLE `db`.`t` ENGINE = ``", true}, - {"ALTER TABLE t ADD COLUMN a SMALLINT UNSIGNED, ADD COLUMN a SMALLINT", true}, - {"ALTER TABLE t ADD COLUMN a SMALLINT, ENGINE = '', default COLLATE = utf8_general_ci", true}, - {"ALTER TABLE t ENGINE = '', COMMENT='', default COLLATE = utf8_general_ci", true}, - {"ALTER TABLE t ENGINE = '', ADD COLUMN a SMALLINT", true}, - {"ALTER TABLE t default COLLATE = utf8_general_ci, ENGINE = '', ADD COLUMN a SMALLINT", true}, - {"ALTER TABLE t shard_row_id_bits = 1", true}, - {"ALTER TABLE t AUTO_INCREMENT 3", true}, - {"ALTER TABLE t AUTO_INCREMENT = 3", true}, - {"ALTER TABLE `hello-world@dev`.`User` ADD COLUMN `name` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL , ALGORITHM = DEFAULT;", true}, - {"ALTER TABLE `hello-world@dev`.`User` ADD COLUMN `name` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL , ALGORITHM = INPLACE;", true}, - {"ALTER TABLE `hello-world@dev`.`User` ADD COLUMN `name` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL , ALGORITHM = COPY;", true}, - {"ALTER TABLE t CONVERT TO CHARACTER SET utf8;", true}, - {"ALTER TABLE t CONVERT TO CHARSET utf8;", true}, - {"ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;", true}, - {"ALTER TABLE t CONVERT TO CHARSET utf8 COLLATE utf8_bin;", true}, - {"ALTER TABLE t FORCE", true}, - {"ALTER TABLE t DROP INDEX;", false}, - {"ALTER TABLE t DROP COLUMN a CASCADE", true}, - {`ALTER TABLE testTableCompression COMPRESSION="LZ4";`, true}, - {`ALTER TABLE t1 COMPRESSION="zlib";`, true}, - - // For #6405 - {"ALTER TABLE t RENAME KEY a TO b;", true}, - {"ALTER TABLE t RENAME INDEX a TO b;", true}, - - {"alter table t analyze partition a", true}, - {"alter table t analyze partition a with 4 buckets", true}, - {"alter table t analyze partition a index b", true}, - {"alter table t analyze partition a index b with 4 buckets", true}, - - // For create index statement - {"CREATE INDEX idx ON t (a)", true}, - {"CREATE INDEX idx ON t (a) USING HASH", true}, - {"CREATE INDEX idx ON t (a) COMMENT 'foo'", true}, - {"CREATE INDEX idx ON t (a) USING HASH COMMENT 'foo'", true}, - {"CREATE INDEX idx ON t (a) LOCK=NONE", true}, - {"CREATE INDEX idx USING BTREE ON t (a) USING HASH COMMENT 'foo'", true}, - {"CREATE INDEX idx USING BTREE ON t (a)", true}, - - // for rename table statement - {"RENAME TABLE t TO t1", true}, - {"RENAME TABLE t t1", false}, - {"RENAME TABLE d.t TO d1.t1", true}, - {"RENAME TABLE t1 TO t2, t3 TO t4", true}, - - // for truncate statement - {"TRUNCATE TABLE t1", true}, - {"TRUNCATE t1", true}, - - // for empty alert table index - {"ALTER TABLE t ADD INDEX () ", false}, - {"ALTER TABLE t ADD UNIQUE ()", false}, - {"ALTER TABLE t ADD UNIQUE INDEX ()", false}, - {"ALTER TABLE t ADD UNIQUE KEY ()", false}, - - // for issue 4538 - {"create table a (process double)", true}, - - // for issue 4740 - {"create table t (a int1, b int2, c int3, d int4, e int8)", true}, - - // for issue 5918 - {"create table t (lv long varchar null)", true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestOptimizerHints(c *C) { - parser := New() - stmt, err := parser.Parse("select /*+ tidb_SMJ(T1,t2) tidb_smj(T3,t4) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") - c.Assert(err, IsNil) - selectStmt := stmt[0].(*ast.SelectStmt) - - hints := selectStmt.TableHints - c.Assert(len(hints), Equals, 2) - c.Assert(hints[0].HintName.L, Equals, "tidb_smj") - c.Assert(len(hints[0].Tables), Equals, 2) - c.Assert(hints[0].Tables[0].L, Equals, "t1") - c.Assert(hints[0].Tables[1].L, Equals, "t2") - - c.Assert(hints[1].HintName.L, Equals, "tidb_smj") - c.Assert(hints[1].Tables[0].L, Equals, "t3") - c.Assert(hints[1].Tables[1].L, Equals, "t4") - - c.Assert(len(selectStmt.TableHints), Equals, 2) - - stmt, err = parser.Parse("select /*+ TIDB_INLJ(t1, T2) tidb_inlj(t3, t4) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") - c.Assert(err, IsNil) - selectStmt = stmt[0].(*ast.SelectStmt) - - hints = selectStmt.TableHints - c.Assert(len(hints), Equals, 2) - c.Assert(hints[0].HintName.L, Equals, "tidb_inlj") - c.Assert(len(hints[0].Tables), Equals, 2) - c.Assert(hints[0].Tables[0].L, Equals, "t1") - c.Assert(hints[0].Tables[1].L, Equals, "t2") - - c.Assert(hints[1].HintName.L, Equals, "tidb_inlj") - c.Assert(hints[1].Tables[0].L, Equals, "t3") - c.Assert(hints[1].Tables[1].L, Equals, "t4") - - stmt, err = parser.Parse("select /*+ TIDB_HJ(t1, T2) tidb_hj(t3, t4) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") - c.Assert(err, IsNil) - selectStmt = stmt[0].(*ast.SelectStmt) - - hints = selectStmt.TableHints - c.Assert(len(hints), Equals, 2) - c.Assert(hints[0].HintName.L, Equals, "tidb_hj") - c.Assert(len(hints[0].Tables), Equals, 2) - c.Assert(hints[0].Tables[0].L, Equals, "t1") - c.Assert(hints[0].Tables[1].L, Equals, "t2") - - c.Assert(hints[1].HintName.L, Equals, "tidb_hj") - c.Assert(hints[1].Tables[0].L, Equals, "t3") - c.Assert(hints[1].Tables[1].L, Equals, "t4") - - stmt, err = parser.Parse("SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 where t1.c1 = t2.c1", "", "") - c.Assert(err, IsNil) - selectStmt = stmt[0].(*ast.SelectStmt) - hints = selectStmt.TableHints - c.Assert(len(hints), Equals, 1) - c.Assert(hints[0].HintName.L, Equals, "max_execution_time") - c.Assert(hints[0].MaxExecutionTime, Equals, uint64(1000)) -} - -func (s *testParserSuite) TestType(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - // for time fsp - {"CREATE TABLE t( c1 TIME(2), c2 DATETIME(2), c3 TIMESTAMP(2) );", true}, - - // for hexadecimal - {"select x'0a', X'11', 0x11", true}, - {"select x'13181C76734725455A'", true}, - {"select x'0xaa'", false}, - {"select 0X11", false}, - {"select 0x4920616D2061206C6F6E672068657820737472696E67", true}, - - // for bit - {"select 0b01, 0b0, b'11', B'11'", true}, - {"select 0B01", false}, - {"select 0b21", false}, - - // for enum and set type - {"create table t (c1 enum('a', 'b'), c2 set('a', 'b'))", true}, - {"create table t (c1 enum)", false}, - {"create table t (c1 set)", false}, - - // for blob and text field length - {"create table t (c1 blob(1024), c2 text(1024))", true}, - - // for year - {"create table t (y year(4), y1 year)", true}, - {"create table t (y year(4) unsigned zerofill zerofill, y1 year signed unsigned zerofill)", true}, - - // for national - {"create table t (c1 national char(2), c2 national varchar(2))", true}, - - // for json type - {`create table t (a JSON);`, true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestPrivilege(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - // for create user - {`CREATE USER 'test'`, true}, - {`CREATE USER test`, true}, - {"CREATE USER `test`", true}, - {"CREATE USER test-user", false}, - {"CREATE USER test.user", false}, - {"CREATE USER 'test-user'", true}, - {"CREATE USER `test-user`", true}, - {"CREATE USER test.user", false}, - {"CREATE USER 'test.user'", true}, - {"CREATE USER `test.user`", true}, - {"CREATE USER uesr1@localhost", true}, - {"CREATE USER `uesr1`@localhost", true}, - {"CREATE USER uesr1@`localhost`", true}, - {"CREATE USER `uesr1`@`localhost`", true}, - {"CREATE USER 'uesr1'@localhost", true}, - {"CREATE USER uesr1@'localhost'", true}, - {"CREATE USER 'uesr1'@'localhost'", true}, - {"CREATE USER 'uesr1'@`localhost`", true}, - {"CREATE USER `uesr1`@'localhost'", true}, - {"create user 'bug19354014user'@'%' identified WITH mysql_native_password", true}, - {"create user 'bug19354014user'@'%' identified WITH mysql_native_password by 'new-password'", true}, - {"create user 'bug19354014user'@'%' identified WITH mysql_native_password as 'hashstring'", true}, - {`CREATE USER IF NOT EXISTS 'root'@'localhost' IDENTIFIED BY 'new-password'`, true}, - {`CREATE USER 'root'@'localhost' IDENTIFIED BY 'new-password'`, true}, - {`CREATE USER 'root'@'localhost' IDENTIFIED BY PASSWORD 'hashstring'`, true}, - {`CREATE USER 'root'@'localhost' IDENTIFIED BY 'new-password', 'root'@'127.0.0.1' IDENTIFIED BY PASSWORD 'hashstring'`, true}, - {`ALTER USER IF EXISTS 'root'@'localhost' IDENTIFIED BY 'new-password'`, true}, - {`ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password'`, true}, - {`ALTER USER 'root'@'localhost' IDENTIFIED BY PASSWORD 'hashstring'`, true}, - {`ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password', 'root'@'127.0.0.1' IDENTIFIED BY PASSWORD 'hashstring'`, true}, - {`ALTER USER USER() IDENTIFIED BY 'new-password'`, true}, - {`ALTER USER IF EXISTS USER() IDENTIFIED BY 'new-password'`, true}, - {`DROP USER 'root'@'localhost', 'root1'@'localhost'`, true}, - {`DROP USER IF EXISTS 'root'@'localhost'`, true}, - - // for grant statement - {"GRANT ALL ON db1.* TO 'jeffrey'@'localhost';", true}, - {"GRANT ALL ON db1.* TO 'jeffrey'@'localhost' WITH GRANT OPTION;", true}, - {"GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';", true}, - {"GRANT ALL ON *.* TO 'someuser'@'somehost';", true}, - {"GRANT SELECT, INSERT ON *.* TO 'someuser'@'somehost';", true}, - {"GRANT ALL ON mydb.* TO 'someuser'@'somehost';", true}, - {"GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';", true}, - {"GRANT ALL ON mydb.mytbl TO 'someuser'@'somehost';", true}, - {"GRANT SELECT, INSERT ON mydb.mytbl TO 'someuser'@'somehost';", true}, - {"GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost';", true}, - {"grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by 'password';", true}, - {"GRANT SELECT ON test.* to 'test'", true}, // For issue 2654. - {"grant PROCESS,usage, REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'xxxxxxxxxx'@'%' identified by password 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'", true}, // For issue 4865 - {"/* rds internal mark */ GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, RELOAD, PROCESS, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER on *.* to 'root2'@'%' identified by password '*sdsadsdsadssadsadsadsadsada' with grant option", true}, - - // for revoke statement - {"REVOKE ALL ON db1.* FROM 'jeffrey'@'localhost';", true}, - {"REVOKE SELECT ON db2.invoice FROM 'jeffrey'@'localhost';", true}, - {"REVOKE ALL ON *.* FROM 'someuser'@'somehost';", true}, - {"REVOKE SELECT, INSERT ON *.* FROM 'someuser'@'somehost';", true}, - {"REVOKE ALL ON mydb.* FROM 'someuser'@'somehost';", true}, - {"REVOKE SELECT, INSERT ON mydb.* FROM 'someuser'@'somehost';", true}, - {"REVOKE ALL ON mydb.mytbl FROM 'someuser'@'somehost';", true}, - {"REVOKE SELECT, INSERT ON mydb.mytbl FROM 'someuser'@'somehost';", true}, - {"REVOKE SELECT (col1), INSERT (col1,col2) ON mydb.mytbl FROM 'someuser'@'somehost';", true}, - {"REVOKE all privileges on zabbix.* FROM 'zabbix'@'localhost' identified by 'password';", true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestComment(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {"create table t (c int comment 'comment')", true}, - {"create table t (c int) comment = 'comment'", true}, - {"create table t (c int) comment 'comment'", true}, - {"create table t (c int) comment comment", false}, - {"create table t (comment text)", true}, - {"START TRANSACTION /*!40108 WITH CONSISTENT SNAPSHOT */", true}, - // for comment in query - {"/*comment*/ /*comment*/ select c /* this is a comment */ from t;", true}, - // for unclosed comment - {"delete from t where a = 7 or 1=1/*' and b = 'p'", false}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestCommentErrMsg(c *C) { - defer testleak.AfterTest(c)() - table := []testErrMsgCase{ - {"delete from t where a = 7 or 1=1/*' and b = 'p'", false, errors.New("[parser:1064]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*' and b = 'p'' at line 1")}, - {"delete from t where a = 7 or\n 1=1/*' and b = 'p'", false, errors.New("[parser:1064]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*' and b = 'p'' at line 2")}, - {"select 1/*", false, errors.New("[parser:1064]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*' at line 1")}, - {"select 1/* comment */", false, nil}, - } - s.RunErrMsgTest(c, table) -} - -type subqueryChecker struct { - text string - c *C -} - -// Enter implements ast.Visitor interface. -func (sc *subqueryChecker) Enter(inNode ast.Node) (outNode ast.Node, skipChildren bool) { - if expr, ok := inNode.(*ast.SubqueryExpr); ok { - sc.c.Assert(expr.Query.Text(), Equals, sc.text) - return inNode, true - } - return inNode, false -} - -// Leave implements ast.Visitor interface. -func (sc *subqueryChecker) Leave(inNode ast.Node) (node ast.Node, ok bool) { - return inNode, true -} - -func (s *testParserSuite) TestSubquery(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - // for compare subquery - {"SELECT 1 > (select 1)", true}, - {"SELECT 1 > ANY (select 1)", true}, - {"SELECT 1 > ALL (select 1)", true}, - {"SELECT 1 > SOME (select 1)", true}, - - // for exists subquery - {"SELECT EXISTS select 1", false}, - {"SELECT EXISTS (select 1)", true}, - {"SELECT + EXISTS (select 1)", true}, - {"SELECT - EXISTS (select 1)", true}, - {"SELECT NOT EXISTS (select 1)", true}, - {"SELECT + NOT EXISTS (select 1)", false}, - {"SELECT - NOT EXISTS (select 1)", false}, - } - s.RunTest(c, table) - - tests := []struct { - input string - text string - }{ - {"SELECT 1 > (select 1)", "select 1"}, - {"SELECT 1 > (select 1 union select 2)", "select 1 union select 2"}, - } - parser := New() - for _, t := range tests { - stmt, err := parser.ParseOneStmt(t.input, "", "") - c.Assert(err, IsNil) - stmt.Accept(&subqueryChecker{ - text: t.text, - c: c, - }) - } -} -func (s *testParserSuite) TestUnion(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {"select c1 from t1 union select c2 from t2", true}, - {"select c1 from t1 union (select c2 from t2)", true}, - {"select c1 from t1 union (select c2 from t2) order by c1", true}, - {"select c1 from t1 union select c2 from t2 order by c2", true}, - {"select c1 from t1 union (select c2 from t2) limit 1", true}, - {"select c1 from t1 union (select c2 from t2) limit 1, 1", true}, - {"select c1 from t1 union (select c2 from t2) order by c1 limit 1", true}, - {"(select c1 from t1) union distinct select c2 from t2", true}, - {"(select c1 from t1) union distinctrow select c2 from t2", true}, - {"(select c1 from t1) union all select c2 from t2", true}, - {"(select c1 from t1) union distinct all select c2 from t2", false}, - {"(select c1 from t1) union distinctrow all select c2 from t2", false}, - {"(select c1 from t1) union (select c2 from t2) order by c1 union select c3 from t3", false}, - {"(select c1 from t1) union (select c2 from t2) limit 1 union select c3 from t3", false}, - {"(select c1 from t1) union select c2 from t2 union (select c3 from t3) order by c1 limit 1", true}, - {"select (select 1 union select 1) as a", true}, - {"select * from (select 1 union select 2) as a", true}, - {"insert into t select c1 from t1 union select c2 from t2", true}, - {"insert into t (c) select c1 from t1 union select c2 from t2", true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestLikeEscape(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - // for like escape - {`select "abc_" like "abc\\_" escape ''`, true}, - {`select "abc_" like "abc\\_" escape '\\'`, true}, - {`select "abc_" like "abc\\_" escape '||'`, false}, - {`select "abc" like "escape" escape '+'`, true}, - } - - s.RunTest(c, table) -} - -func (s *testParserSuite) TestMysqlDump(c *C) { - defer testleak.AfterTest(c)() - // Statements used by mysqldump. - table := []testCase{ - {`UNLOCK TABLES;`, true}, - {`LOCK TABLES t1 READ;`, true}, - {`show table status like 't'`, true}, - {`LOCK TABLES t2 WRITE`, true}, - - // for unlock table and lock table - {`UNLOCK TABLE;`, true}, - {`LOCK TABLE t1 READ;`, true}, - {`show table status like 't'`, true}, - {`LOCK TABLE t2 WRITE`, true}, - {`LOCK TABLE t1 WRITE, t3 READ`, true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestIndexHint(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {`select * from t use index ();`, true}, - {`select * from t use index (idx);`, true}, - {`select * from t use index (idx1, idx2);`, true}, - {`select * from t ignore key (idx1)`, true}, - {`select * from t force index for join (idx1)`, true}, - {`select * from t use index for order by (idx1)`, true}, - {`select * from t force index for group by (idx1)`, true}, - {`select * from t use index for group by (idx1) use index for order by (idx2), t2`, true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestPriority(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {`select high_priority * from t`, true}, - {`select low_priority * from t`, true}, - {`select delayed * from t`, true}, - {`insert high_priority into t values (1)`, true}, - {`insert LOW_PRIORITY into t values (1)`, true}, - {`insert delayed into t values (1)`, true}, - {`update low_priority t set a = 2`, true}, - {`update high_priority t set a = 2`, true}, - {`update delayed t set a = 2`, true}, - {`delete low_priority from t where a = 2`, true}, - {`delete high_priority from t where a = 2`, true}, - {`delete delayed from t where a = 2`, true}, - {`replace high_priority into t values (1)`, true}, - {`replace LOW_PRIORITY into t values (1)`, true}, - {`replace delayed into t values (1)`, true}, - } - s.RunTest(c, table) - - parser := New() - stmt, err := parser.Parse("select HIGH_PRIORITY * from t", "", "") - c.Assert(err, IsNil) - sel := stmt[0].(*ast.SelectStmt) - c.Assert(sel.SelectStmtOpts.Priority, Equals, mysql.HighPriority) -} - -func (s *testParserSuite) TestSQLNoCache(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {`select SQL_NO_CACHE * from t`, false}, - {`select SQL_CACHE * from t`, true}, - {`select * from t`, true}, - } - - parser := New() - for _, tt := range table { - stmt, err := parser.Parse(tt.src, "", "") - c.Assert(err, IsNil) - - sel := stmt[0].(*ast.SelectStmt) - c.Assert(sel.SelectStmtOpts.SQLCache, Equals, tt.ok) - } -} - -func (s *testParserSuite) TestEscape(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {`select """;`, false}, - {`select """";`, true}, - {`select "汉字";`, true}, - {`select 'abc"def';`, true}, - {`select 'a\r\n';`, true}, - {`select "\a\r\n"`, true}, - {`select "\xFF"`, true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestInsertStatementMemoryAllocation(c *C) { - sql := "insert t values (1)" + strings.Repeat(",(1)", 1000) - var oldStats, newStats runtime.MemStats - runtime.ReadMemStats(&oldStats) - _, err := New().ParseOneStmt(sql, "", "") - c.Assert(err, IsNil) - runtime.ReadMemStats(&newStats) - c.Assert(int(newStats.TotalAlloc-oldStats.TotalAlloc), Less, 1024*500) -} - -func (s *testParserSuite) TestExplain(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {"explain select c1 from t1", true}, - {"explain delete t1, t2 from t1 inner join t2 inner join t3 where t1.id=t2.id and t2.id=t3.id;", true}, - {"explain insert into t values (1), (2), (3)", true}, - {"explain replace into foo values (1 || 2)", true}, - {"explain update t set id = id + 1 order by id desc;", true}, - {"explain select c1 from t1 union (select c2 from t2) limit 1, 1", true}, - {`explain format = "row" select c1 from t1 union (select c2 from t2) limit 1, 1`, true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestTrace(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {"trace select c1 from t1", true}, - {"trace delete t1, t2 from t1 inner join t2 inner join t3 where t1.id=t2.id and t2.id=t3.id;", true}, - {"trace insert into t values (1), (2), (3)", true}, - {"trace replace into foo values (1 || 2)", true}, - {"trace update t set id = id + 1 order by id desc;", true}, - {"trace select c1 from t1 union (select c2 from t2) limit 1, 1", true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestView(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {"create view v as select * from t", true}, - {"create or replace view v as select * from t", true}, - {"create or replace algorithm = undefined view v as select * from t", true}, - {"create or replace algorithm = merge view v as select * from t", true}, - {"create or replace algorithm = temptable view v as select * from t", true}, - {"create or replace algorithm = merge definer = 'root' view v as select * from t", true}, - {"create or replace algorithm = merge definer = 'root' sql security definer view v as select * from t", true}, - {"create or replace algorithm = merge definer = 'root' sql security invoker view v as select * from t", true}, - {"create or replace algorithm = merge definer = 'root' sql security invoker view v(a,b) as select * from t", true}, - {"create or replace algorithm = merge definer = 'root' sql security invoker view v(a,b) as select * from t with local check option", true}, - {"create or replace algorithm = merge definer = 'root' sql security invoker view v(a,b) as select * from t with cascaded check option", true}, - {"create or replace algorithm = merge definer = current_user view v as select * from t", true}, - } - s.RunTest(c, table) - - // Test case for the text of the select statement in create view statement. - p := New() - sms, err := p.Parse("create view v as select * from t", "", "") - c.Assert(err, IsNil) - v, ok := sms[0].(*ast.CreateViewStmt) - c.Assert(ok, IsTrue) - c.Assert(v.Select.Text(), Equals, "select * from t") -} - -func (s *testParserSuite) TestTimestampDiffUnit(c *C) { - // Test case for timestampdiff unit. - // TimeUnit should be unified to upper case. - parser := New() - stmt, err := parser.Parse("SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01'), TIMESTAMPDIFF(month,'2003-02-01','2003-05-01');", "", "") - c.Assert(err, IsNil) - ss := stmt[0].(*ast.SelectStmt) - fields := ss.Fields.Fields - c.Assert(len(fields), Equals, 2) - expr := fields[0].Expr - f, ok := expr.(*ast.FuncCallExpr) - c.Assert(ok, IsTrue) - c.Assert(f.Args[0].(ast.ValueExpr).GetDatumString(), Equals, "MONTH") - - expr = fields[1].Expr - f, ok = expr.(*ast.FuncCallExpr) - c.Assert(ok, IsTrue) - c.Assert(f.Args[0].(ast.ValueExpr).GetDatumString(), Equals, "MONTH") - - // Test Illegal TimeUnit for TimestampDiff - table := []testCase{ - {"SELECT TIMESTAMPDIFF(SECOND_MICROSECOND,'2003-02-01','2003-05-01')", false}, - {"SELECT TIMESTAMPDIFF(MINUTE_MICROSECOND,'2003-02-01','2003-05-01')", false}, - {"SELECT TIMESTAMPDIFF(MINUTE_SECOND,'2003-02-01','2003-05-01')", false}, - {"SELECT TIMESTAMPDIFF(HOUR_MICROSECOND,'2003-02-01','2003-05-01')", false}, - {"SELECT TIMESTAMPDIFF(HOUR_SECOND,'2003-02-01','2003-05-01')", false}, - {"SELECT TIMESTAMPDIFF(HOUR_MINUTE,'2003-02-01','2003-05-01')", false}, - {"SELECT TIMESTAMPDIFF(DAY_MICROSECOND,'2003-02-01','2003-05-01')", false}, - {"SELECT TIMESTAMPDIFF(DAY_SECOND,'2003-02-01','2003-05-01')", false}, - {"SELECT TIMESTAMPDIFF(DAY_MINUTE,'2003-02-01','2003-05-01')", false}, - {"SELECT TIMESTAMPDIFF(DAY_HOUR,'2003-02-01','2003-05-01')", false}, - {"SELECT TIMESTAMPDIFF(YEAR_MONTH,'2003-02-01','2003-05-01')", false}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestSessionManage(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - // Kill statement. - // See https://dev.mysql.com/doc/refman/5.7/en/kill.html - {"kill 23123", true}, - {"kill connection 23123", true}, - {"kill query 23123", true}, - {"kill tidb 23123", true}, - {"kill tidb connection 23123", true}, - {"kill tidb query 23123", true}, - {"show processlist", true}, - {"show full processlist", true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestSQLModeANSIQuotes(c *C) { - parser := New() - parser.SetSQLMode(mysql.ModeANSIQuotes) - tests := []string{ - `CREATE TABLE "table" ("id" int)`, - `select * from t "tt"`, - } - for _, test := range tests { - _, err := parser.Parse(test, "", "") - c.Assert(err, IsNil) - } -} - -func (s *testParserSuite) TestDDLStatements(c *C) { - parser := New() - // Tests that whatever the charset it is define, we always assign utf8 charset and utf8_bin collate. - createTableStr := `CREATE TABLE t ( - a varchar(64) binary, - b char(10) charset utf8 collate utf8_general_ci, - c text charset latin1) ENGINE=innoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin` - stmts, err := parser.Parse(createTableStr, "", "") - c.Assert(err, IsNil) - stmt := stmts[0].(*ast.CreateTableStmt) - c.Assert(mysql.HasBinaryFlag(stmt.Cols[0].Tp.Flag), IsTrue) - for _, colDef := range stmt.Cols[1:] { - c.Assert(mysql.HasBinaryFlag(colDef.Tp.Flag), IsFalse) - } - for _, tblOpt := range stmt.Options { - switch tblOpt.Tp { - case ast.TableOptionCharset: - c.Assert(tblOpt.StrValue, Equals, "utf8") - case ast.TableOptionCollate: - c.Assert(tblOpt.StrValue, Equals, "utf8_bin") - } - } - createTableStr = `CREATE TABLE t ( - a varbinary(64), - b binary(10), - c blob)` - stmts, err = parser.Parse(createTableStr, "", "") - c.Assert(err, IsNil) - stmt = stmts[0].(*ast.CreateTableStmt) - for _, colDef := range stmt.Cols { - c.Assert(colDef.Tp.Charset, Equals, charset.CharsetBin) - c.Assert(colDef.Tp.Collate, Equals, charset.CollationBin) - c.Assert(mysql.HasBinaryFlag(colDef.Tp.Flag), IsTrue) - } -} - -func (s *testParserSuite) TestAnalyze(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {"analyze table t1", true}, - {"analyze table t,t1", true}, - {"analyze table t1 index", true}, - {"analyze table t1 index a", true}, - {"analyze table t1 index a,b", true}, - {"analyze table t with 4 buckets", true}, - {"analyze table t index a with 4 buckets", true}, - {"analyze table t partition a", true}, - {"analyze table t partition a with 4 buckets", true}, - {"analyze table t partition a index b", true}, - {"analyze table t partition a index b with 4 buckets", true}, - } - s.RunTest(c, table) -} - -func (s *testParserSuite) TestGeneratedColumn(c *C) { - defer testleak.AfterTest(c)() - tests := []struct { - input string - ok bool - expr string - }{ - {"create table t (c int, d int generated always as (c + 1) virtual)", true, "c + 1"}, - {"create table t (c int, d int as ( c + 1 ) virtual)", true, "c + 1"}, - {"create table t (c int, d int as (1 + 1) stored)", true, "1 + 1"}, - } - parser := New() - for _, tt := range tests { - stmtNodes, err := parser.Parse(tt.input, "", "") - if tt.ok { - c.Assert(err, IsNil) - stmtNode := stmtNodes[0] - for _, col := range stmtNode.(*ast.CreateTableStmt).Cols { - for _, opt := range col.Options { - if opt.Tp == ast.ColumnOptionGenerated { - c.Assert(opt.Expr.Text(), Equals, tt.expr) - } - } - } - } else { - c.Assert(err, NotNil) - } - } - -} - -func (s *testParserSuite) TestSetTransaction(c *C) { - defer testleak.AfterTest(c)() - // Set transaction is equivalent to setting the global or session value of tx_isolation. - // For example: - // SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED - // SET SESSION tx_isolation='READ-COMMITTED' - tests := []struct { - input string - isGlobal bool - value string - }{ - { - "SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED", - false, "READ-COMMITTED", - }, - { - "SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ", - true, "REPEATABLE-READ", - }, - } - parser := New() - for _, t := range tests { - stmt1, err := parser.ParseOneStmt(t.input, "", "") - c.Assert(err, IsNil) - setStmt := stmt1.(*ast.SetStmt) - vars := setStmt.Variables[0] - c.Assert(vars.Name, Equals, "tx_isolation") - c.Assert(vars.IsGlobal, Equals, t.isGlobal) - c.Assert(vars.IsSystem, Equals, true) - c.Assert(vars.Value.(ast.ValueExpr).GetValue(), Equals, t.value) - } -} - -func (s *testParserSuite) TestSideEffect(c *C) { - // This test cover a bug that parse an error SQL doesn't leave the parser in a - // clean state, cause the following SQL parse fail. - parser := New() - _, err := parser.ParseOneStmt("create table t /*!50100 'abc', 'abc' */;", "", "") - c.Assert(err, NotNil) - - _, err = parser.ParseOneStmt("show tables;", "", "") - c.Assert(err, IsNil) -} - -func (s *testParserSuite) TestTablePartition(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {"ALTER TABLE t1 ADD PARTITION (PARTITION `p5` VALUES LESS THAN (2010) COMMENT 'APSTART \\' APEND')", true}, - {"ALTER TABLE t1 ADD PARTITION (PARTITION `p5` VALUES LESS THAN (2010) COMMENT = 'xxx')", true}, - {`CREATE TABLE t1 (a int not null,b int not null,c int not null,primary key(a,b)) - partition by range (a) - partitions 3 - (partition x1 values less than (5), - partition x2 values less than (10), - partition x3 values less than maxvalue);`, true}, - {"CREATE TABLE t1 (a int not null) partition by range (a) (partition x1 values less than (5) tablespace ts1)", true}, - {`create table t (a int) partition by range (a) - (PARTITION p0 VALUES LESS THAN (63340531200) ENGINE = MyISAM, - PARTITION p1 VALUES LESS THAN (63342604800) ENGINE MyISAM)`, true}, - {`create table t (a int) partition by range (a) - (PARTITION p0 VALUES LESS THAN (63340531200) ENGINE = MyISAM COMMENT 'xxx', - PARTITION p1 VALUES LESS THAN (63342604800) ENGINE = MyISAM)`, true}, - {`create table t1 (a int) partition by range (a) - (PARTITION p0 VALUES LESS THAN (63340531200) COMMENT 'xxx' ENGINE = MyISAM , - PARTITION p1 VALUES LESS THAN (63342604800) ENGINE = MyISAM)`, true}, - {`create table t (id int) - partition by range (id) - subpartition by key (id) subpartitions 2 - (partition p0 values less than (42))`, true}, - {`create table t (id int) - partition by range (id) - subpartition by hash (id) - (partition p0 values less than (42))`, true}, - } - s.RunTest(c, table) - - // Check comment content. - parser := New() - stmt, err := parser.ParseOneStmt("create table t (id int) partition by range (id) (partition p0 values less than (10) comment 'check')", "", "") - c.Assert(err, IsNil) - createTable := stmt.(*ast.CreateTableStmt) - c.Assert(createTable.Partition.Definitions[0].Comment, Equals, "check") -} - -func (s *testParserSuite) TestNotExistsSubquery(c *C) { - defer testleak.AfterTest(c)() - table := []testCase{ - {`select * from t1 where not exists (select * from t2 where t1.a = t2.a)`, true}, - } - - parser := New() - for _, tt := range table { - stmt, err := parser.Parse(tt.src, "", "") - c.Assert(err, IsNil) - - sel := stmt[0].(*ast.SelectStmt) - exists, ok := sel.Where.(*ast.ExistsSubqueryExpr) - c.Assert(ok, IsTrue) - c.Assert(exists.Not, Equals, tt.ok) - } -} diff --git a/perfschema/init.go b/perfschema/init.go index 270afe27f94fd..477d60e5aab48 100644 --- a/perfschema/init.go +++ b/perfschema/init.go @@ -14,12 +14,12 @@ package perfschema import ( + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" ) type columnInfo struct { diff --git a/perfschema/perfschema.go b/perfschema/perfschema.go index 2e5c1a8106694..8d017b9e37630 100644 --- a/perfschema/perfschema.go +++ b/perfschema/perfschema.go @@ -14,7 +14,7 @@ package perfschema import ( - "github.com/pingcap/tidb/model" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/table" ) diff --git a/perfschema/tables.go b/perfschema/tables.go index 8f89614152cf4..2d925ae2b1b2a 100644 --- a/perfschema/tables.go +++ b/perfschema/tables.go @@ -14,9 +14,9 @@ package perfschema import ( + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" diff --git a/planner/core/cache.go b/planner/core/cache.go index b86eae67aecd7..b16a99992a6cf 100644 --- a/planner/core/cache.go +++ b/planner/core/cache.go @@ -17,7 +17,7 @@ import ( "sync/atomic" "time" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/hack" diff --git a/planner/core/cache_test.go b/planner/core/cache_test.go index 66af8cdd4c1f9..2d3ab7ea76010 100644 --- a/planner/core/cache_test.go +++ b/planner/core/cache_test.go @@ -16,7 +16,7 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/util/testleak" ) diff --git a/planner/core/cacheable_checker.go b/planner/core/cacheable_checker.go index be927cc18986d..2569bf89567a9 100644 --- a/planner/core/cacheable_checker.go +++ b/planner/core/cacheable_checker.go @@ -14,7 +14,7 @@ package core import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/types/parser_driver" ) diff --git a/planner/core/cacheable_checker_test.go b/planner/core/cacheable_checker_test.go index 47725b5b6f122..9b6c1367e3042 100644 --- a/planner/core/cacheable_checker_test.go +++ b/planner/core/cacheable_checker_test.go @@ -15,9 +15,9 @@ package core import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/types/parser_driver" ) diff --git a/planner/core/common_plans.go b/planner/core/common_plans.go index aa1a1598cefe9..30770f0408e4a 100644 --- a/planner/core/common_plans.go +++ b/planner/core/common_plans.go @@ -19,16 +19,16 @@ import ( "strconv" "strings" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types/parser_driver" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/kvcache" "github.com/pingcap/tidb/util/ranger" diff --git a/planner/core/errors.go b/planner/core/errors.go index 2b4ce819c6cfc..55f01919ddf1f 100644 --- a/planner/core/errors.go +++ b/planner/core/errors.go @@ -14,8 +14,8 @@ package core import ( - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" ) const ( diff --git a/planner/core/exhaust_physical_plans.go b/planner/core/exhaust_physical_plans.go index 23fcd817cea76..e8710d5dfae54 100644 --- a/planner/core/exhaust_physical_plans.go +++ b/planner/core/exhaust_physical_plans.go @@ -16,13 +16,13 @@ package core import ( "math" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/planner/property" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/ranger" "github.com/pkg/errors" diff --git a/planner/core/expression_rewriter.go b/planner/core/expression_rewriter.go index 960d64bfc67f9..156cd4e048472 100644 --- a/planner/core/expression_rewriter.go +++ b/planner/core/expression_rewriter.go @@ -17,13 +17,13 @@ import ( "strconv" "strings" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/opcode" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/types" diff --git a/planner/core/expression_test.go b/planner/core/expression_test.go index 71584c1a65cf0..21bd952f0ed9d 100644 --- a/planner/core/expression_test.go +++ b/planner/core/expression_test.go @@ -17,12 +17,12 @@ import ( "fmt" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testleak" "github.com/pingcap/tidb/util/testutil" diff --git a/planner/core/find_best_task.go b/planner/core/find_best_task.go index bca0725384d33..89dd20e89fb1e 100644 --- a/planner/core/find_best_task.go +++ b/planner/core/find_best_task.go @@ -16,10 +16,10 @@ package core import ( "math" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/planner/property" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index 2fc1730640956..eb17af6fe781b 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -22,16 +22,16 @@ import ( "unicode" "github.com/cznic/mathutil" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/opcode" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" - "github.com/pingcap/tidb/parser/opcode" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/statistics" diff --git a/planner/core/logical_plan_test.go b/planner/core/logical_plan_test.go index 7f115234ff213..484fcd0b8aa7c 100644 --- a/planner/core/logical_plan_test.go +++ b/planner/core/logical_plan_test.go @@ -19,15 +19,15 @@ import ( "testing" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testleak" diff --git a/planner/core/logical_plans.go b/planner/core/logical_plans.go index 9caedb2b3cea1..b50fd67f768ff 100644 --- a/planner/core/logical_plans.go +++ b/planner/core/logical_plans.go @@ -16,11 +16,11 @@ package core import ( "math" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" diff --git a/planner/core/logical_plans_test.go b/planner/core/logical_plans_test.go index 03e2524da74c4..acda1c36ffbf1 100644 --- a/planner/core/logical_plans_test.go +++ b/planner/core/logical_plans_test.go @@ -17,10 +17,10 @@ import ( "fmt" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/testleak" diff --git a/planner/core/optimizer.go b/planner/core/optimizer.go index 33ff0d44e1832..84469150c29c6 100644 --- a/planner/core/optimizer.go +++ b/planner/core/optimizer.go @@ -16,7 +16,7 @@ package core import ( "math" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/planner/property" diff --git a/planner/core/physical_plan_test.go b/planner/core/physical_plan_test.go index 0386059230822..71532c0aa9508 100644 --- a/planner/core/physical_plan_test.go +++ b/planner/core/physical_plan_test.go @@ -15,10 +15,10 @@ package core_test import ( . "github.com/pingcap/check" + "github.com/pingcap/parser" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/planner" "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" diff --git a/planner/core/physical_plans.go b/planner/core/physical_plans.go index 53e80699f78ef..05be5e39eee37 100644 --- a/planner/core/physical_plans.go +++ b/planner/core/physical_plans.go @@ -14,10 +14,10 @@ package core import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/types" diff --git a/planner/core/plan.go b/planner/core/plan.go index 4ac105b0354b4..80831f63bdd81 100644 --- a/planner/core/plan.go +++ b/planner/core/plan.go @@ -17,7 +17,7 @@ import ( "fmt" "math" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/planner/property" "github.com/pingcap/tidb/sessionctx" diff --git a/planner/core/plan_to_pb.go b/planner/core/plan_to_pb.go index 1494052fcd591..258fd5b30bc46 100644 --- a/planner/core/plan_to_pb.go +++ b/planner/core/plan_to_pb.go @@ -14,9 +14,9 @@ package core import ( + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/tablecodec" diff --git a/planner/core/plan_to_pb_test.go b/planner/core/plan_to_pb_test.go index e507be3295f14..fd1ff48291a70 100644 --- a/planner/core/plan_to_pb_test.go +++ b/planner/core/plan_to_pb_test.go @@ -15,9 +15,9 @@ package core import ( . "github.com/pingcap/check" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/testleak" "github.com/pingcap/tipb/go-tipb" diff --git a/planner/core/planbuilder.go b/planner/core/planbuilder.go index f64c282e1660f..e7f8dcabe26d8 100644 --- a/planner/core/planbuilder.go +++ b/planner/core/planbuilder.go @@ -18,13 +18,13 @@ import ( "strings" "github.com/cznic/mathutil" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/opcode" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" "github.com/pingcap/tidb/planner/property" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" diff --git a/planner/core/planbuilder_test.go b/planner/core/planbuilder_test.go index 6d181b4558b57..037a6173f95f7 100644 --- a/planner/core/planbuilder_test.go +++ b/planner/core/planbuilder_test.go @@ -15,8 +15,8 @@ package core import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" ) var _ = Suite(&testPlanBuilderSuite{}) diff --git a/planner/core/point_get_plan.go b/planner/core/point_get_plan.go index 64e809e576207..340dd31d3dfec 100644 --- a/planner/core/point_get_plan.go +++ b/planner/core/point_get_plan.go @@ -17,11 +17,11 @@ import ( "bytes" "fmt" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/opcode" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" "github.com/pingcap/tidb/planner/property" "github.com/pingcap/tidb/privilege" "github.com/pingcap/tidb/sessionctx" diff --git a/planner/core/preprocess.go b/planner/core/preprocess.go index 15ba5ee800fbe..b4ca94946604f 100644 --- a/planner/core/preprocess.go +++ b/planner/core/preprocess.go @@ -17,16 +17,16 @@ import ( "math" "strings" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/parser_driver" - "github.com/pingcap/tidb/util/charset" "github.com/pkg/errors" ) diff --git a/planner/core/preprocess_test.go b/planner/core/preprocess_test.go index 17deb8a09d48b..fb6b1ae659990 100644 --- a/planner/core/preprocess_test.go +++ b/planner/core/preprocess_test.go @@ -15,14 +15,14 @@ package core_test import ( . "github.com/pingcap/check" + "github.com/pingcap/parser" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/testleak" "github.com/pkg/errors" diff --git a/planner/core/resolve_indices.go b/planner/core/resolve_indices.go index d11f3c49d453e..b4c7e7898714e 100644 --- a/planner/core/resolve_indices.go +++ b/planner/core/resolve_indices.go @@ -14,8 +14,8 @@ package core import ( + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" ) // ResolveIndices implements Plan interface. diff --git a/planner/core/rule_aggregation_elimination.go b/planner/core/rule_aggregation_elimination.go index f062e74a2f9cd..86cda73c899c9 100644 --- a/planner/core/rule_aggregation_elimination.go +++ b/planner/core/rule_aggregation_elimination.go @@ -16,10 +16,10 @@ package core import ( "math" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" ) diff --git a/planner/core/rule_aggregation_push_down.go b/planner/core/rule_aggregation_push_down.go index d7bd7a073f53c..910d297757e33 100644 --- a/planner/core/rule_aggregation_push_down.go +++ b/planner/core/rule_aggregation_push_down.go @@ -15,11 +15,11 @@ package core import ( "fmt" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" ) diff --git a/planner/core/rule_build_key_info.go b/planner/core/rule_build_key_info.go index 161ed782d4aa8..92c2e67a99bf0 100644 --- a/planner/core/rule_build_key_info.go +++ b/planner/core/rule_build_key_info.go @@ -14,9 +14,9 @@ package core import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/mysql" ) type buildKeySolver struct{} diff --git a/planner/core/rule_column_pruning.go b/planner/core/rule_column_pruning.go index 210931c1db70c..b96ed9e76a314 100644 --- a/planner/core/rule_column_pruning.go +++ b/planner/core/rule_column_pruning.go @@ -14,10 +14,10 @@ package core import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" log "github.com/sirupsen/logrus" ) diff --git a/planner/core/rule_decorrelate.go b/planner/core/rule_decorrelate.go index 4cb9661e68116..13f6400e42e7b 100644 --- a/planner/core/rule_decorrelate.go +++ b/planner/core/rule_decorrelate.go @@ -16,10 +16,10 @@ package core import ( "math" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/types" "github.com/pkg/errors" ) diff --git a/planner/core/rule_join_reorder.go b/planner/core/rule_join_reorder.go index 70e39cbaa0494..c6e71192a3940 100644 --- a/planner/core/rule_join_reorder.go +++ b/planner/core/rule_join_reorder.go @@ -16,7 +16,7 @@ package core import ( "sort" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/sessionctx" log "github.com/sirupsen/logrus" diff --git a/planner/core/rule_max_min_eliminate.go b/planner/core/rule_max_min_eliminate.go index 46bc666b371f8..c53cbf091475a 100644 --- a/planner/core/rule_max_min_eliminate.go +++ b/planner/core/rule_max_min_eliminate.go @@ -13,9 +13,9 @@ package core import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/types" ) diff --git a/planner/core/rule_predicate_push_down.go b/planner/core/rule_predicate_push_down.go index ffcb7467920ca..acfc90340feb3 100644 --- a/planner/core/rule_predicate_push_down.go +++ b/planner/core/rule_predicate_push_down.go @@ -13,10 +13,10 @@ package core import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" ) diff --git a/planner/core/task.go b/planner/core/task.go index a7c0e322e4381..17f2568c465cb 100644 --- a/planner/core/task.go +++ b/planner/core/task.go @@ -17,13 +17,13 @@ import ( "fmt" "math" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" ) // task is a new version of `PhysicalPlanInfo`. It stores cost information for a task. diff --git a/planner/core/trace.go b/planner/core/trace.go index 765ab9d7f0a02..ae879cf885e86 100644 --- a/planner/core/trace.go +++ b/planner/core/trace.go @@ -1,7 +1,7 @@ package core import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" ) // Trace represents a trace plan. diff --git a/planner/core/util.go b/planner/core/util.go index 2fe957687fd78..308344beff531 100644 --- a/planner/core/util.go +++ b/planner/core/util.go @@ -14,7 +14,7 @@ package core import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/expression" ) diff --git a/planner/optimize.go b/planner/optimize.go index 50c2706436107..b17aa11adc8af 100644 --- a/planner/optimize.go +++ b/planner/optimize.go @@ -14,7 +14,7 @@ package planner import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/infoschema" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/privilege" diff --git a/privilege/privilege.go b/privilege/privilege.go index e14b95914af84..0349034bdbbe2 100644 --- a/privilege/privilege.go +++ b/privilege/privilege.go @@ -14,10 +14,10 @@ package privilege import ( - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/auth" ) type keyType int diff --git a/privilege/privileges/cache.go b/privilege/privileges/cache.go index 75087a2e2f9f5..43bcd6f9f49fc 100644 --- a/privilege/privileges/cache.go +++ b/privilege/privileges/cache.go @@ -20,10 +20,10 @@ import ( "sync/atomic" "time" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/sqlexec" diff --git a/privilege/privileges/cache_test.go b/privilege/privileges/cache_test.go index 723373e80ffa3..a66664c566d29 100644 --- a/privilege/privileges/cache_test.go +++ b/privilege/privileges/cache_test.go @@ -15,9 +15,9 @@ package privileges_test import ( . "github.com/pingcap/check" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/privilege/privileges" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/mockstore" diff --git a/privilege/privileges/privileges.go b/privilege/privileges/privileges.go index 6105875910077..d16d02a668cb1 100644 --- a/privilege/privileges/privileges.go +++ b/privilege/privileges/privileges.go @@ -16,12 +16,12 @@ package privileges import ( "strings" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/privilege" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/auth" log "github.com/sirupsen/logrus" ) diff --git a/privilege/privileges/privileges_test.go b/privilege/privileges/privileges_test.go index 46ca52711cb60..326fb81ba8306 100644 --- a/privilege/privileges/privileges_test.go +++ b/privilege/privileges/privileges_test.go @@ -19,14 +19,14 @@ import ( "testing" . "github.com/pingcap/check" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/privilege" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/store/mockstore" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/testleak" "github.com/pingcap/tidb/util/testutil" "golang.org/x/net/context" diff --git a/server/column.go b/server/column.go index 27ca3c23d734e..850b02eb3097c 100644 --- a/server/column.go +++ b/server/column.go @@ -14,7 +14,7 @@ package server import ( - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" ) // ColumnInfo contains information of a column diff --git a/server/conn.go b/server/conn.go index 11f2ebbc89de0..09fe05762c131 100644 --- a/server/conn.go +++ b/server/conn.go @@ -49,14 +49,14 @@ import ( "time" "github.com/opentracing/opentracing-go" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util/arena" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/hack" "github.com/pingcap/tidb/util/memory" diff --git a/server/conn_stmt.go b/server/conn_stmt.go index a6227dca81927..9a058e506d925 100644 --- a/server/conn_stmt.go +++ b/server/conn_stmt.go @@ -41,7 +41,7 @@ import ( "strconv" "time" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/hack" "github.com/pkg/errors" diff --git a/server/conn_stmt_test.go b/server/conn_stmt_test.go index d131e39d6f22c..8aae1b6e0b08f 100644 --- a/server/conn_stmt_test.go +++ b/server/conn_stmt_test.go @@ -15,8 +15,8 @@ package server import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/types" ) diff --git a/server/conn_test.go b/server/conn_test.go index 037399dd7dd4a..8e56bad74c9e3 100644 --- a/server/conn_test.go +++ b/server/conn_test.go @@ -19,7 +19,7 @@ import ( "encoding/binary" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" ) type ConnTestSuite struct{} diff --git a/server/driver.go b/server/driver.go index 5a22c92524478..734956b5117e1 100644 --- a/server/driver.go +++ b/server/driver.go @@ -18,9 +18,9 @@ import ( "fmt" "time" + "github.com/pingcap/parser/auth" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/chunk" "golang.org/x/net/context" ) diff --git a/server/driver_tidb.go b/server/driver_tidb.go index a7df39d6f7683..065a9973cdb8d 100644 --- a/server/driver_tidb.go +++ b/server/driver_tidb.go @@ -18,15 +18,15 @@ import ( "fmt" "time" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/sqlexec" "github.com/pkg/errors" diff --git a/server/driver_tidb_test.go b/server/driver_tidb_test.go index 97e7b87b05040..b2dcab0a60b87 100644 --- a/server/driver_tidb_test.go +++ b/server/driver_tidb_test.go @@ -15,11 +15,11 @@ package server import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" ) type tidbResultSetTestSuite struct{} diff --git a/server/http_handler.go b/server/http_handler.go index 5fdebb28d1062..9802b9e84c839 100644 --- a/server/http_handler.go +++ b/server/http_handler.go @@ -30,12 +30,13 @@ import ( "github.com/gorilla/mux" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/kvproto/pkg/metapb" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/binloginfo" @@ -45,7 +46,6 @@ import ( "github.com/pingcap/tidb/store/tikv/tikvrpc" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/codec" "github.com/pkg/errors" diff --git a/server/http_handler_test.go b/server/http_handler_test.go index 0dc9b279a7100..a43a3b5ddad7a 100644 --- a/server/http_handler_test.go +++ b/server/http_handler_test.go @@ -30,12 +30,12 @@ import ( . "github.com/pingcap/check" "github.com/pingcap/kvproto/pkg/kvrpcpb" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" diff --git a/server/http_status.go b/server/http_status.go index 47470f2318028..5e872582592be 100644 --- a/server/http_status.go +++ b/server/http_status.go @@ -21,9 +21,9 @@ import ( "net/http/pprof" "github.com/gorilla/mux" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util/printer" "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus" diff --git a/server/packetio.go b/server/packetio.go index ae16f5d143063..1e95b6a0e2e35 100644 --- a/server/packetio.go +++ b/server/packetio.go @@ -38,8 +38,8 @@ import ( "bufio" "io" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pkg/errors" ) diff --git a/server/server.go b/server/server.go index 9b8e0ecd10d48..51cc6930a6c9d 100644 --- a/server/server.go +++ b/server/server.go @@ -43,11 +43,11 @@ import ( "time" "github.com/blacktear23/go-proxyprotocol" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util" "github.com/pkg/errors" log "github.com/sirupsen/logrus" diff --git a/server/server_test.go b/server/server_test.go index 796c696d85cf0..a672791aa9eec 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -27,8 +27,8 @@ import ( "github.com/go-sql-driver/mysql" . "github.com/pingcap/check" + tmysql "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/kv" - tmysql "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/printer" log "github.com/sirupsen/logrus" diff --git a/server/statistics_handler.go b/server/statistics_handler.go index 2dd1db833ed7b..40761114073f1 100644 --- a/server/statistics_handler.go +++ b/server/statistics_handler.go @@ -17,8 +17,8 @@ import ( "net/http" "github.com/gorilla/mux" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/domain" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/session" ) diff --git a/server/tidb_test.go b/server/tidb_test.go index db9c56cd77541..a77668fe6e5bc 100644 --- a/server/tidb_test.go +++ b/server/tidb_test.go @@ -28,11 +28,11 @@ import ( "github.com/go-sql-driver/mysql" . "github.com/pingcap/check" + tmysql "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" - tmysql "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/mockstore" "github.com/pkg/errors" diff --git a/server/util.go b/server/util.go index 12037a4301259..a2d351278fc69 100644 --- a/server/util.go +++ b/server/util.go @@ -43,8 +43,8 @@ import ( "strconv" "time" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/hack" diff --git a/server/util_test.go b/server/util_test.go index ee6dac5f81ce8..cd18b4c8e98fa 100644 --- a/server/util_test.go +++ b/server/util_test.go @@ -15,9 +15,9 @@ package server import ( . "github.com/pingcap/check" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/types" diff --git a/session/bootstrap.go b/session/bootstrap.go index 62986e734e58f..424779630306a 100644 --- a/session/bootstrap.go +++ b/session/bootstrap.go @@ -25,12 +25,12 @@ import ( "strings" "time" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/variable" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/timeutil" "github.com/pkg/errors" diff --git a/session/bootstrap_test.go b/session/bootstrap_test.go index 5790f96fe10ca..e0d96951f43d4 100644 --- a/session/bootstrap_test.go +++ b/session/bootstrap_test.go @@ -17,14 +17,14 @@ import ( "fmt" . "github.com/pingcap/check" + "github.com/pingcap/parser" + "github.com/pingcap/parser/auth" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/statistics" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/testleak" "golang.org/x/net/context" ) diff --git a/session/session.go b/session/session.go index a44b941e60682..1f72f78c6cffe 100644 --- a/session/session.go +++ b/session/session.go @@ -28,16 +28,19 @@ import ( "time" "github.com/ngaut/pools" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/owner" - "github.com/pingcap/tidb/parser" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/privilege" "github.com/pingcap/tidb/privilege/privileges" @@ -46,11 +49,8 @@ import ( "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/statistics" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/auth" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/kvcache" "github.com/pingcap/tidb/util/sqlexec" diff --git a/session/session_test.go b/session/session_test.go index 30f0f7a745eec..3d87505793f23 100644 --- a/session/session_test.go +++ b/session/session_test.go @@ -20,13 +20,15 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/privilege/privileges" "github.com/pingcap/tidb/session" @@ -35,9 +37,7 @@ import ( "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/store/mockstore/mocktikv" "github.com/pingcap/tidb/table/tables" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/sqlexec" "github.com/pingcap/tidb/util/testkit" "github.com/pingcap/tidb/util/testleak" diff --git a/session/tidb.go b/session/tidb.go index 460620da25b50..5595f52d82bc7 100644 --- a/session/tidb.go +++ b/session/tidb.go @@ -23,15 +23,15 @@ import ( "sync" "time" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/executor" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/sqlexec" diff --git a/session/tidb_test.go b/session/tidb_test.go index 10c0ad259dea8..2a631c554baaf 100644 --- a/session/tidb_test.go +++ b/session/tidb_test.go @@ -22,12 +22,12 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/auth" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/sqlexec" "github.com/pingcap/tidb/util/testleak" diff --git a/sessionctx/binloginfo/binloginfo.go b/sessionctx/binloginfo/binloginfo.go index acd9ae82dc8d4..4084d4b56354c 100644 --- a/sessionctx/binloginfo/binloginfo.go +++ b/sessionctx/binloginfo/binloginfo.go @@ -20,10 +20,10 @@ import ( "sync/atomic" "time" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" binlog "github.com/pingcap/tipb/go-binlog" "github.com/pkg/errors" log "github.com/sirupsen/logrus" diff --git a/sessionctx/binloginfo/binloginfo_test.go b/sessionctx/binloginfo/binloginfo_test.go index 8650a9afb1ede..73ca53abfd4d7 100644 --- a/sessionctx/binloginfo/binloginfo_test.go +++ b/sessionctx/binloginfo/binloginfo_test.go @@ -22,6 +22,7 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" @@ -29,7 +30,6 @@ import ( "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/binloginfo" "github.com/pingcap/tidb/store/mockstore" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/logutil" diff --git a/sessionctx/stmtctx/stmtctx.go b/sessionctx/stmtctx/stmtctx.go index e59d2da7194cb..66db63081c5b8 100644 --- a/sessionctx/stmtctx/stmtctx.go +++ b/sessionctx/stmtctx/stmtctx.go @@ -18,7 +18,7 @@ import ( "sync" "time" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/memory" ) diff --git a/sessionctx/variable/session.go b/sessionctx/variable/session.go index 954a72a568718..784bb8d24f049 100644 --- a/sessionctx/variable/session.go +++ b/sessionctx/variable/session.go @@ -22,15 +22,15 @@ import ( "time" "github.com/klauspost/cpuid" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/auth" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/timeutil" "github.com/pkg/errors" diff --git a/sessionctx/variable/sysvar.go b/sessionctx/variable/sysvar.go index 4e4534935c819..00383aa56d860 100644 --- a/sessionctx/variable/sysvar.go +++ b/sessionctx/variable/sysvar.go @@ -17,11 +17,11 @@ import ( "strconv" "strings" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/charset" ) // ScopeFlag is for system variable whether can be changed in global/session dynamically or not. diff --git a/sessionctx/variable/tidb_vars.go b/sessionctx/variable/tidb_vars.go index c754743d5ac8b..fd2fa6588d7bb 100644 --- a/sessionctx/variable/tidb_vars.go +++ b/sessionctx/variable/tidb_vars.go @@ -16,7 +16,7 @@ package variable import ( "os" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" ) /* diff --git a/sessionctx/variable/varsutil.go b/sessionctx/variable/varsutil.go index a64f0a31a7a67..db9ac1b427e68 100644 --- a/sessionctx/variable/varsutil.go +++ b/sessionctx/variable/varsutil.go @@ -22,8 +22,8 @@ import ( "sync/atomic" "time" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/timeutil" "github.com/pkg/errors" diff --git a/sessionctx/variable/varsutil_test.go b/sessionctx/variable/varsutil_test.go index b939b18e19e70..147ef678eecd7 100644 --- a/sessionctx/variable/varsutil_test.go +++ b/sessionctx/variable/varsutil_test.go @@ -19,9 +19,9 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/testleak" ) diff --git a/statistics/bootstrap.go b/statistics/bootstrap.go index 850ad1a043a71..8a346969f5a31 100644 --- a/statistics/bootstrap.go +++ b/statistics/bootstrap.go @@ -16,11 +16,11 @@ package statistics import ( "fmt" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/sqlexec" diff --git a/statistics/ddl.go b/statistics/ddl.go index 022583ca2198e..b8cedc71fee1c 100644 --- a/statistics/ddl.go +++ b/statistics/ddl.go @@ -16,10 +16,10 @@ package statistics import ( "fmt" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/ddl/util" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/sqlexec" "github.com/pkg/errors" diff --git a/statistics/ddl_test.go b/statistics/ddl_test.go index aa1070125f0d6..a87895836b408 100644 --- a/statistics/ddl_test.go +++ b/statistics/ddl_test.go @@ -15,7 +15,7 @@ package statistics_test import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/model" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/testkit" diff --git a/statistics/dump.go b/statistics/dump.go index 70a04e87b21c8..49a08f127e838 100644 --- a/statistics/dump.go +++ b/statistics/dump.go @@ -16,9 +16,9 @@ package statistics import ( "time" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tipb/go-tipb" diff --git a/statistics/dump_test.go b/statistics/dump_test.go index 5564c688bdd82..c3824d38b88f3 100644 --- a/statistics/dump_test.go +++ b/statistics/dump_test.go @@ -17,9 +17,9 @@ import ( "fmt" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/util/testkit" "github.com/pingcap/tidb/util/testleak" diff --git a/statistics/feedback.go b/statistics/feedback.go index 6d8d4e22496f2..405c084943e63 100644 --- a/statistics/feedback.go +++ b/statistics/feedback.go @@ -23,9 +23,9 @@ import ( "time" "github.com/cznic/mathutil" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" diff --git a/statistics/feedback_test.go b/statistics/feedback_test.go index f5b83b44ee663..08058c386bef2 100644 --- a/statistics/feedback_test.go +++ b/statistics/feedback_test.go @@ -15,7 +15,7 @@ package statistics import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/codec" ) diff --git a/statistics/handle.go b/statistics/handle.go index b014d863c97e5..7033df47deed1 100644 --- a/statistics/handle.go +++ b/statistics/handle.go @@ -19,9 +19,9 @@ import ( "sync/atomic" "time" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/infoschema" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/store/tikv/oracle" "github.com/pingcap/tidb/table" diff --git a/statistics/handle_test.go b/statistics/handle_test.go index 6cfdca998e0d1..778e7cf06d7d6 100644 --- a/statistics/handle_test.go +++ b/statistics/handle_test.go @@ -18,9 +18,9 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/statistics" diff --git a/statistics/histogram.go b/statistics/histogram.go index ca52273b20e1a..fdf9c841bd2c9 100644 --- a/statistics/histogram.go +++ b/statistics/histogram.go @@ -20,12 +20,12 @@ import ( "strings" "time" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" diff --git a/statistics/sample.go b/statistics/sample.go index 9e43f984873a6..70eed697a812a 100644 --- a/statistics/sample.go +++ b/statistics/sample.go @@ -17,10 +17,10 @@ import ( "fmt" "math/rand" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/sqlexec" diff --git a/statistics/sample_test.go b/statistics/sample_test.go index 66d8ceec313fb..dfc7b59df597b 100644 --- a/statistics/sample_test.go +++ b/statistics/sample_test.go @@ -17,7 +17,7 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" diff --git a/statistics/scalar.go b/statistics/scalar.go index 1ea756a6e6d0c..446a78a7383f6 100644 --- a/statistics/scalar.go +++ b/statistics/scalar.go @@ -17,7 +17,7 @@ import ( "encoding/binary" "math" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" ) diff --git a/statistics/scalar_test.go b/statistics/scalar_test.go index 80a1d860fa435..027294a075b62 100644 --- a/statistics/scalar_test.go +++ b/statistics/scalar_test.go @@ -17,7 +17,7 @@ import ( "math" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" ) diff --git a/statistics/selectivity.go b/statistics/selectivity.go index ef474455d98ea..58d4a6a9ffc62 100644 --- a/statistics/selectivity.go +++ b/statistics/selectivity.go @@ -16,9 +16,9 @@ package statistics import ( "math" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/util/ranger" "github.com/pkg/errors" diff --git a/statistics/selectivity_test.go b/statistics/selectivity_test.go index 77225890c2fca..1c6d2ea3c888b 100644 --- a/statistics/selectivity_test.go +++ b/statistics/selectivity_test.go @@ -22,10 +22,10 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" diff --git a/statistics/statistics_test.go b/statistics/statistics_test.go index 6b71236e76164..fb79e934c18be 100644 --- a/statistics/statistics_test.go +++ b/statistics/statistics_test.go @@ -19,9 +19,9 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" diff --git a/statistics/table.go b/statistics/table.go index 3592b95fea1ef..d7dc89b55b6d6 100644 --- a/statistics/table.go +++ b/statistics/table.go @@ -19,9 +19,9 @@ import ( "strings" "sync" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" diff --git a/statistics/update.go b/statistics/update.go index dc5cf3865a360..2508edc0d8d72 100644 --- a/statistics/update.go +++ b/statistics/update.go @@ -21,9 +21,9 @@ import ( "sync" "time" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/store/tikv/oracle" "github.com/pingcap/tidb/util/chunk" diff --git a/statistics/update_test.go b/statistics/update_test.go index 1feeb64e8bc4f..2478645062e7c 100644 --- a/statistics/update_test.go +++ b/statistics/update_test.go @@ -19,10 +19,10 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/statistics" diff --git a/store/mockstore/mocktikv/analyze.go b/store/mockstore/mocktikv/analyze.go index 9b9f799880acb..2659a4cde994e 100644 --- a/store/mockstore/mocktikv/analyze.go +++ b/store/mockstore/mocktikv/analyze.go @@ -16,13 +16,13 @@ package mocktikv import ( "github.com/golang/protobuf/proto" "github.com/pingcap/kvproto/pkg/coprocessor" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tipb/go-tipb" diff --git a/store/mockstore/mocktikv/cop_handler_dag.go b/store/mockstore/mocktikv/cop_handler_dag.go index 0d874793e121b..913f839c6d9e0 100644 --- a/store/mockstore/mocktikv/cop_handler_dag.go +++ b/store/mockstore/mocktikv/cop_handler_dag.go @@ -23,14 +23,14 @@ import ( "github.com/pingcap/kvproto/pkg/errorpb" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/kvproto/pkg/tikvpb" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/expression/aggregation" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/codec" mockpkg "github.com/pingcap/tidb/util/mock" diff --git a/store/mockstore/mocktikv/executor.go b/store/mockstore/mocktikv/executor.go index b3d78396fdf3e..29f478b8e277f 100644 --- a/store/mockstore/mocktikv/executor.go +++ b/store/mockstore/mocktikv/executor.go @@ -19,10 +19,10 @@ import ( "sort" "github.com/pingcap/kvproto/pkg/kvrpcpb" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" diff --git a/store/mockstore/mocktikv/mvcc_leveldb.go b/store/mockstore/mocktikv/mvcc_leveldb.go index 34abd116a3449..53cdb92c5a5d9 100644 --- a/store/mockstore/mocktikv/mvcc_leveldb.go +++ b/store/mockstore/mocktikv/mvcc_leveldb.go @@ -24,7 +24,7 @@ import ( "github.com/pingcap/goleveldb/leveldb/storage" "github.com/pingcap/goleveldb/leveldb/util" "github.com/pingcap/kvproto/pkg/kvrpcpb" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/util/codec" "github.com/pkg/errors" log "github.com/sirupsen/logrus" diff --git a/store/mockstore/mocktikv/rpc.go b/store/mockstore/mocktikv/rpc.go index 93a24331d9d9d..34ff33c87c5ec 100644 --- a/store/mockstore/mocktikv/rpc.go +++ b/store/mockstore/mocktikv/rpc.go @@ -24,9 +24,9 @@ import ( "github.com/pingcap/kvproto/pkg/errorpb" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/kvproto/pkg/metapb" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/store/tikv/tikvrpc" - "github.com/pingcap/tidb/terror" "github.com/pkg/errors" "golang.org/x/net/context" ) diff --git a/store/tikv/2pc.go b/store/tikv/2pc.go index 347490b64ebf1..cc5220fd11850 100644 --- a/store/tikv/2pc.go +++ b/store/tikv/2pc.go @@ -21,12 +21,12 @@ import ( "time" pb "github.com/pingcap/kvproto/pkg/kvrpcpb" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" "github.com/pingcap/tidb/sessionctx/binloginfo" "github.com/pingcap/tidb/store/tikv/tikvrpc" "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/terror" binlog "github.com/pingcap/tipb/go-binlog" "github.com/pkg/errors" log "github.com/sirupsen/logrus" diff --git a/store/tikv/2pc_fail_test.go b/store/tikv/2pc_fail_test.go index e840c94bed02b..1f2368d8fa833 100644 --- a/store/tikv/2pc_fail_test.go +++ b/store/tikv/2pc_fail_test.go @@ -16,7 +16,7 @@ package tikv import ( gofail "github.com/etcd-io/gofail/runtime" . "github.com/pingcap/check" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/terror" "github.com/pkg/errors" "golang.org/x/net/context" ) diff --git a/store/tikv/backoff.go b/store/tikv/backoff.go index 69e68adfb0251..c804107a5867c 100644 --- a/store/tikv/backoff.go +++ b/store/tikv/backoff.go @@ -20,10 +20,10 @@ import ( "strings" "time" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" "github.com/pkg/errors" log "github.com/sirupsen/logrus" "golang.org/x/net/context" diff --git a/store/tikv/client.go b/store/tikv/client.go index b1e95abc3b1e6..1633a01cde8ee 100644 --- a/store/tikv/client.go +++ b/store/tikv/client.go @@ -26,10 +26,10 @@ import ( "github.com/grpc-ecosystem/go-grpc-prometheus" "github.com/pingcap/kvproto/pkg/coprocessor" "github.com/pingcap/kvproto/pkg/tikvpb" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/metrics" "github.com/pingcap/tidb/store/tikv/tikvrpc" - "github.com/pingcap/tidb/terror" "github.com/pkg/errors" log "github.com/sirupsen/logrus" "golang.org/x/net/context" diff --git a/store/tikv/error.go b/store/tikv/error.go index 9c78022c5fcae..9329de2eaf221 100644 --- a/store/tikv/error.go +++ b/store/tikv/error.go @@ -14,8 +14,8 @@ package tikv import ( - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pkg/errors" ) diff --git a/store/tikv/gcworker/gc_worker.go b/store/tikv/gcworker/gc_worker.go index c960808d25ba9..22a8726e86d6a 100644 --- a/store/tikv/gcworker/gc_worker.go +++ b/store/tikv/gcworker/gc_worker.go @@ -25,6 +25,7 @@ import ( "github.com/pingcap/kvproto/pkg/errorpb" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/kvproto/pkg/metapb" + "github.com/pingcap/parser/terror" "github.com/pingcap/pd/client" "github.com/pingcap/tidb/ddl/util" "github.com/pingcap/tidb/kv" @@ -35,7 +36,6 @@ import ( "github.com/pingcap/tidb/store/tikv" "github.com/pingcap/tidb/store/tikv/oracle" "github.com/pingcap/tidb/store/tikv/tikvrpc" - "github.com/pingcap/tidb/terror" tidbutil "github.com/pingcap/tidb/util" "github.com/pkg/errors" log "github.com/sirupsen/logrus" diff --git a/store/tikv/isolation_test.go b/store/tikv/isolation_test.go index eeb5aa80e185d..e95028269a135 100644 --- a/store/tikv/isolation_test.go +++ b/store/tikv/isolation_test.go @@ -22,8 +22,8 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/terror" "golang.org/x/net/context" ) diff --git a/store/tikv/safepoint_test.go b/store/tikv/safepoint_test.go index 29b640a1d48fd..e2142ccf9f1a2 100644 --- a/store/tikv/safepoint_test.go +++ b/store/tikv/safepoint_test.go @@ -18,8 +18,8 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/terror" "github.com/pkg/errors" "golang.org/x/net/context" ) diff --git a/store/tikv/sql_fail_test.go b/store/tikv/sql_fail_test.go index 4fb976c557198..30bbc95c25ff7 100644 --- a/store/tikv/sql_fail_test.go +++ b/store/tikv/sql_fail_test.go @@ -20,10 +20,10 @@ import ( gofail "github.com/etcd-io/gofail/runtime" . "github.com/pingcap/check" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/session" . "github.com/pingcap/tidb/store/tikv" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testkit" "golang.org/x/net/context" diff --git a/store/tikv/tikv_test.go b/store/tikv/tikv_test.go index 2f759076cb6ab..a19a7d941075f 100644 --- a/store/tikv/tikv_test.go +++ b/store/tikv/tikv_test.go @@ -21,7 +21,7 @@ import ( "strings" . "github.com/pingcap/check" - "github.com/pingcap/tidb/parser" + "github.com/pingcap/parser" ) // OneByOneSuite is a suite, When with-tikv flag is true, there is only one storage, so the test suite have to run one by one. diff --git a/structure/structure.go b/structure/structure.go index 81853deeeafed..4f7eb0e50ec7d 100644 --- a/structure/structure.go +++ b/structure/structure.go @@ -14,8 +14,8 @@ package structure import ( + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/terror" ) // structure error codes. diff --git a/table/column.go b/table/column.go index 0be60ad77dad2..9902b83aa07da 100644 --- a/table/column.go +++ b/table/column.go @@ -21,15 +21,15 @@ import ( "strings" "unicode/utf8" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/hack" "github.com/pkg/errors" log "github.com/sirupsen/logrus" diff --git a/table/column_test.go b/table/column_test.go index 4bf3bc104c0c3..3d34a1436892f 100644 --- a/table/column_test.go +++ b/table/column_test.go @@ -17,11 +17,11 @@ import ( "testing" . "github.com/pingcap/check" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testleak" ) diff --git a/table/index.go b/table/index.go index 8957025549dcd..1b7d247c6ed13 100644 --- a/table/index.go +++ b/table/index.go @@ -14,8 +14,8 @@ package table import ( + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" diff --git a/table/table.go b/table/table.go index ac99df34f397e..021bb6740ad4d 100644 --- a/table/table.go +++ b/table/table.go @@ -18,12 +18,12 @@ package table import ( + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" ) diff --git a/table/tables/gen_expr.go b/table/tables/gen_expr.go index fa94ca009c74d..f0f88e2924cc7 100644 --- a/table/tables/gen_expr.go +++ b/table/tables/gen_expr.go @@ -16,9 +16,9 @@ package tables import ( "fmt" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/parser" + "github.com/pingcap/parser" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" "github.com/pkg/errors" ) diff --git a/table/tables/gen_expr_test.go b/table/tables/gen_expr_test.go index 89de193f5cd42..9723e32e63841 100644 --- a/table/tables/gen_expr_test.go +++ b/table/tables/gen_expr_test.go @@ -15,7 +15,7 @@ package tables import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" ) var _ = Suite(&testGenExprSuite{}) diff --git a/table/tables/index.go b/table/tables/index.go index e11993001bfac..e4253d9275537 100644 --- a/table/tables/index.go +++ b/table/tables/index.go @@ -19,14 +19,14 @@ import ( "io" "unicode/utf8" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/codec" "github.com/pkg/errors" ) diff --git a/table/tables/index_test.go b/table/tables/index_test.go index 5e8350e8dd46c..1abe161696f6f 100644 --- a/table/tables/index_test.go +++ b/table/tables/index_test.go @@ -18,14 +18,14 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/table/tables" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" "github.com/pingcap/tidb/util/testleak" diff --git a/table/tables/partition.go b/table/tables/partition.go index 762c4e7976e7f..efcaf596d7b62 100644 --- a/table/tables/partition.go +++ b/table/tables/partition.go @@ -19,9 +19,9 @@ import ( "sort" "strings" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/tablecodec" diff --git a/table/tables/tables.go b/table/tables/tables.go index 319e4bf55c5e7..f244991c5d9cd 100644 --- a/table/tables/tables.go +++ b/table/tables/tables.go @@ -24,10 +24,10 @@ import ( "strings" "time" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/owner" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" diff --git a/table/tables/tables_test.go b/table/tables/tables_test.go index 0eccc2d025d0b..fd46a6428bdd6 100644 --- a/table/tables/tables_test.go +++ b/table/tables/tables_test.go @@ -17,9 +17,9 @@ import ( "testing" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/binloginfo" diff --git a/tablecodec/tablecodec.go b/tablecodec/tablecodec.go index ec07f38b0f05e..3f31f5613a9c3 100644 --- a/tablecodec/tablecodec.go +++ b/tablecodec/tablecodec.go @@ -19,10 +19,10 @@ import ( "math" "time" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/codec" "github.com/pkg/errors" diff --git a/tablecodec/tablecodec_test.go b/tablecodec/tablecodec_test.go index 6ae12dc1b0b11..a68f26d6ef873 100644 --- a/tablecodec/tablecodec_test.go +++ b/tablecodec/tablecodec_test.go @@ -21,8 +21,8 @@ import ( gofail "github.com/etcd-io/gofail/runtime" . "github.com/pingcap/check" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/codec" diff --git a/terror/terror.go b/terror/terror.go index 3cc1c2d17105c..c38e0e18a1b24 100644 --- a/terror/terror.go +++ b/terror/terror.go @@ -18,7 +18,7 @@ import ( "fmt" "strconv" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pkg/errors" log "github.com/sirupsen/logrus" ) diff --git a/tidb-server/main.go b/tidb-server/main.go index 2e3f7eebf13ae..57300d60b9436 100644 --- a/tidb-server/main.go +++ b/tidb-server/main.go @@ -24,12 +24,13 @@ import ( "time" "github.com/opentracing/opentracing-go" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/metrics" - "github.com/pingcap/tidb/mysql" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/privilege/privileges" "github.com/pingcap/tidb/server" @@ -40,7 +41,6 @@ import ( "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/store/tikv" "github.com/pingcap/tidb/store/tikv/gcworker" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/printer" diff --git a/types/compare_test.go b/types/compare_test.go index 8bdd621b61ff3..cf51757fc637c 100644 --- a/types/compare_test.go +++ b/types/compare_test.go @@ -17,7 +17,7 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/util/testleak" ) diff --git a/types/convert.go b/types/convert.go index 8997426901b73..6698e135c383f 100644 --- a/types/convert.go +++ b/types/convert.go @@ -22,9 +22,9 @@ import ( "strconv" "strings" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/hack" "github.com/pkg/errors" diff --git a/types/convert_test.go b/types/convert_test.go index 35cb6d45df524..010b22f3ba5bb 100644 --- a/types/convert_test.go +++ b/types/convert_test.go @@ -20,11 +20,11 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types/json" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/testleak" "github.com/pkg/errors" ) diff --git a/types/datum.go b/types/datum.go index 959231e633b0f..c6d4643c4c40a 100644 --- a/types/datum.go +++ b/types/datum.go @@ -22,11 +22,11 @@ import ( "time" "unicode/utf8" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types/json" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/hack" "github.com/pkg/errors" log "github.com/sirupsen/logrus" diff --git a/types/datum_eval.go b/types/datum_eval.go index af8a7f993402b..9cbdaa4fa84fa 100644 --- a/types/datum_eval.go +++ b/types/datum_eval.go @@ -15,7 +15,7 @@ package types import ( "github.com/cznic/mathutil" - "github.com/pingcap/tidb/parser/opcode" + "github.com/pingcap/parser/opcode" "github.com/pkg/errors" ) diff --git a/types/datum_test.go b/types/datum_test.go index f2317a77792a6..a2d7a64739020 100644 --- a/types/datum_test.go +++ b/types/datum_test.go @@ -19,7 +19,7 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types/json" ) diff --git a/types/errors.go b/types/errors.go index 9665cf351fc6b..9e1919b45d97e 100644 --- a/types/errors.go +++ b/types/errors.go @@ -14,9 +14,9 @@ package types import ( - "github.com/pingcap/tidb/mysql" - parser_types "github.com/pingcap/tidb/parser/types" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" + parser_types "github.com/pingcap/parser/types" ) var ( diff --git a/types/etc.go b/types/etc.go index 9454b3cb3dcbc..626139a7d328a 100644 --- a/types/etc.go +++ b/types/etc.go @@ -20,11 +20,11 @@ package types import ( "io" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/opcode" - ast "github.com/pingcap/tidb/parser/types" - "github.com/pingcap/tidb/terror" - "github.com/pingcap/tidb/util/charset" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/opcode" + "github.com/pingcap/parser/terror" + ast "github.com/pingcap/parser/types" "github.com/pkg/errors" ) diff --git a/types/etc_test.go b/types/etc_test.go index 60d272bff2866..32de5aa88ee20 100644 --- a/types/etc_test.go +++ b/types/etc_test.go @@ -18,8 +18,8 @@ import ( "testing" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/util/testleak" ) diff --git a/types/eval_type.go b/types/eval_type.go index c3d21321fa77e..3eb17cae856f9 100644 --- a/types/eval_type.go +++ b/types/eval_type.go @@ -13,7 +13,7 @@ package types -import ast "github.com/pingcap/tidb/parser/types" +import ast "github.com/pingcap/parser/types" // EvalType indicates the specified types that arguments and result of a built-in function should be. type EvalType = ast.EvalType diff --git a/types/field_type.go b/types/field_type.go index d402e8510ab7e..9da5c8044a0fd 100644 --- a/types/field_type.go +++ b/types/field_type.go @@ -16,10 +16,10 @@ package types import ( "strconv" - "github.com/pingcap/tidb/mysql" - ast "github.com/pingcap/tidb/parser/types" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" + ast "github.com/pingcap/parser/types" "github.com/pingcap/tidb/types/json" - "github.com/pingcap/tidb/util/charset" ) // UnspecifiedLength is unspecified length. diff --git a/types/field_type_test.go b/types/field_type_test.go index 71a6ea2983f55..f1d0292270223 100644 --- a/types/field_type_test.go +++ b/types/field_type_test.go @@ -15,8 +15,8 @@ package types import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/util/charset" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/util/testleak" ) diff --git a/types/format_test.go b/types/format_test.go index fb9b199c1f61b..16fbf6a963971 100644 --- a/types/format_test.go +++ b/types/format_test.go @@ -15,7 +15,7 @@ package types_test import ( . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" ) diff --git a/types/json/binary.go b/types/json/binary.go index a495c042cb344..182c08dcd4683 100644 --- a/types/json/binary.go +++ b/types/json/binary.go @@ -25,7 +25,7 @@ import ( "strings" "unicode/utf8" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/util/hack" "github.com/pkg/errors" ) diff --git a/types/json/constants.go b/types/json/constants.go index f5bc92daf336c..03c9a5aa7a5a2 100644 --- a/types/json/constants.go +++ b/types/json/constants.go @@ -17,8 +17,8 @@ import ( "encoding/binary" "unicode/utf8" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" ) // TypeCode indicates JSON type. diff --git a/types/mydecimal.go b/types/mydecimal.go index 97d037b80455b..dec19cfee333d 100644 --- a/types/mydecimal.go +++ b/types/mydecimal.go @@ -17,8 +17,8 @@ import ( "math" "strconv" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pkg/errors" ) diff --git a/types/parser_driver/value_expr.go b/types/parser_driver/value_expr.go index e87045faa2b4e..09a8a8a1fb430 100644 --- a/types/parser_driver/value_expr.go +++ b/types/parser_driver/value_expr.go @@ -18,8 +18,8 @@ import ( "io" "strconv" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/hack" ) diff --git a/types/time.go b/types/time.go index b5474a28dd51e..c2694b2cd7ff1 100644 --- a/types/time.go +++ b/types/time.go @@ -23,9 +23,9 @@ import ( gotime "time" "unicode" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pkg/errors" log "github.com/sirupsen/logrus" ) diff --git a/types/time_test.go b/types/time_test.go index 46e659c78919f..959d78bc6e76d 100644 --- a/types/time_test.go +++ b/types/time_test.go @@ -18,7 +18,7 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/mock" diff --git a/util/admin/admin.go b/util/admin/admin.go index 04958458ccef3..a1985bd09a82c 100644 --- a/util/admin/admin.go +++ b/util/admin/admin.go @@ -19,17 +19,17 @@ import ( "sort" "time" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/table/tables" "github.com/pingcap/tidb/tablecodec" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/rowDecoder" diff --git a/util/admin/admin_test.go b/util/admin/admin_test.go index 1e88fe08a67bc..d678f7d4543fc 100644 --- a/util/admin/admin_test.go +++ b/util/admin/admin_test.go @@ -19,10 +19,10 @@ import ( "time" . "github.com/pingcap/check" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" diff --git a/util/auth/auth_test.go b/util/auth/auth_test.go deleted file mode 100644 index 86cdd11eda0d9..0000000000000 --- a/util/auth/auth_test.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package auth - -import ( - . "github.com/pingcap/check" - "github.com/pingcap/tidb/util/testleak" -) - -var _ = Suite(&testAuthSuite{}) - -type testAuthSuite struct { -} - -func (s *testAuthSuite) TestEncodePassword(c *C) { - defer testleak.AfterTest(c)() - pwd := "123" - c.Assert(EncodePassword(pwd), Equals, "*23AE809DDACAF96AF0FD78ED04B6A265E05AA257") -} - -func (s *testAuthSuite) TestDecodePassword(c *C) { - defer testleak.AfterTest(c)() - x, err := DecodePassword(EncodePassword("123")) - c.Assert(err, IsNil) - c.Assert(x, DeepEquals, Sha1Hash(Sha1Hash([]byte("123")))) -} - -func (s *testAuthSuite) TestCheckScramble(c *C) { - defer testleak.AfterTest(c)() - pwd := "abc" - salt := []byte{85, 92, 45, 22, 58, 79, 107, 6, 122, 125, 58, 80, 12, 90, 103, 32, 90, 10, 74, 82} - auth := []byte{24, 180, 183, 225, 166, 6, 81, 102, 70, 248, 199, 143, 91, 204, 169, 9, 161, 171, 203, 33} - encodepwd := EncodePassword(pwd) - hpwd, err := DecodePassword(encodepwd) - c.Assert(err, IsNil) - - res := CheckScrambledPassword(salt, hpwd, auth) - c.Assert(res, IsTrue) -} diff --git a/util/charset/charset_test.go b/util/charset/charset_test.go deleted file mode 100644 index c400d97f183be..0000000000000 --- a/util/charset/charset_test.go +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package charset - -import ( - "testing" - - . "github.com/pingcap/check" - "github.com/pingcap/tidb/util/testleak" -) - -func TestT(t *testing.T) { - CustomVerboseFlag = true - TestingT(t) -} - -var _ = Suite(&testCharsetSuite{}) - -type testCharsetSuite struct { -} - -func testValidCharset(c *C, charset string, collation string, expect bool) { - b := ValidCharsetAndCollation(charset, collation) - c.Assert(b, Equals, expect) -} - -func (s *testCharsetSuite) TestValidCharset(c *C) { - defer testleak.AfterTest(c)() - tests := []struct { - cs string - co string - succ bool - }{ - {"utf8", "utf8_general_ci", true}, - {"", "utf8_general_ci", true}, - {"utf8mb4", "utf8mb4_bin", true}, - {"latin1", "latin1_bin", true}, - {"utf8", "utf8_invalid_ci", false}, - {"utf16", "utf16_bin", false}, - {"gb2312", "gb2312_chinese_ci", false}, - } - for _, tt := range tests { - testValidCharset(c, tt.cs, tt.co, tt.succ) - } -} - -func (s *testCharsetSuite) TestGetAllCharsets(c *C) { - defer testleak.AfterTest(c)() - charset := &Charset{"test", "test_bin", nil, "Test", 5} - charsetInfos = append(charsetInfos, charset) - descs := GetAllCharsets() - c.Assert(len(descs), Equals, len(charsetInfos)-1) -} - -func testGetDefaultCollation(c *C, charset string, expectCollation string, succ bool) { - b, err := GetDefaultCollation(charset) - if !succ { - c.Assert(err, NotNil) - return - } - c.Assert(b, Equals, expectCollation) -} - -func (s *testCharsetSuite) TestGetDefaultCollation(c *C) { - defer testleak.AfterTest(c)() - tests := []struct { - cs string - co string - succ bool - }{ - {"utf8", "utf8_bin", true}, - {"UTF8", "utf8_bin", true}, - {"utf8mb4", "utf8mb4_bin", true}, - {"ascii", "ascii_bin", true}, - {"binary", "binary", true}, - {"latin1", "latin1_bin", true}, - {"invalid_cs", "", false}, - {"", "utf8_bin", false}, - } - for _, tt := range tests { - testGetDefaultCollation(c, tt.cs, tt.co, tt.succ) - } -} diff --git a/util/chunk/chunk_test.go b/util/chunk/chunk_test.go index 4edce4b9f35ea..b78be4ad67f5c 100644 --- a/util/chunk/chunk_test.go +++ b/util/chunk/chunk_test.go @@ -25,7 +25,7 @@ import ( "unsafe" "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" diff --git a/util/chunk/codec.go b/util/chunk/codec.go index 20401f95f762b..43a5f5b17327d 100644 --- a/util/chunk/codec.go +++ b/util/chunk/codec.go @@ -19,7 +19,7 @@ import ( "unsafe" "github.com/cznic/mathutil" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" ) diff --git a/util/chunk/codec_test.go b/util/chunk/codec_test.go index 99aa4027647d1..abf5351784cc8 100644 --- a/util/chunk/codec_test.go +++ b/util/chunk/codec_test.go @@ -18,7 +18,7 @@ import ( "testing" "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/hack" diff --git a/util/chunk/compare.go b/util/chunk/compare.go index 60dc70ced817b..a8adbfc4174a9 100644 --- a/util/chunk/compare.go +++ b/util/chunk/compare.go @@ -16,7 +16,7 @@ package chunk import ( "sort" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" ) diff --git a/util/chunk/iterator_test.go b/util/chunk/iterator_test.go index eb4f9d7c04cf7..5438f062a1383 100644 --- a/util/chunk/iterator_test.go +++ b/util/chunk/iterator_test.go @@ -15,7 +15,7 @@ package chunk import ( "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" ) diff --git a/util/chunk/list_test.go b/util/chunk/list_test.go index 81ac3f3b29d52..9669e784a9e2b 100644 --- a/util/chunk/list_test.go +++ b/util/chunk/list_test.go @@ -21,7 +21,7 @@ import ( "time" "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" ) diff --git a/util/chunk/mutrow.go b/util/chunk/mutrow.go index 1eba29a2f9e5c..17a3c4f4dd31c 100644 --- a/util/chunk/mutrow.go +++ b/util/chunk/mutrow.go @@ -18,7 +18,7 @@ import ( "math" "unsafe" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/hack" diff --git a/util/chunk/mutrow_test.go b/util/chunk/mutrow_test.go index bf2e925c7fb41..1405773f027f4 100644 --- a/util/chunk/mutrow_test.go +++ b/util/chunk/mutrow_test.go @@ -18,7 +18,7 @@ import ( "time" "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" diff --git a/util/chunk/row.go b/util/chunk/row.go index dcf573eea66b5..df2bd96df91f6 100644 --- a/util/chunk/row.go +++ b/util/chunk/row.go @@ -17,7 +17,7 @@ import ( "time" "unsafe" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/hack" diff --git a/util/codec/bench_test.go b/util/codec/bench_test.go index 4929458dcf994..0dd8d2d05b5d3 100644 --- a/util/codec/bench_test.go +++ b/util/codec/bench_test.go @@ -16,7 +16,7 @@ package codec import ( "testing" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" ) diff --git a/util/codec/codec.go b/util/codec/codec.go index 01d330ae8f68e..80839b5ca5340 100644 --- a/util/codec/codec.go +++ b/util/codec/codec.go @@ -17,9 +17,9 @@ import ( "encoding/binary" "time" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/chunk" diff --git a/util/codec/codec_test.go b/util/codec/codec_test.go index bca3923d19644..86679c9052bdd 100644 --- a/util/codec/codec_test.go +++ b/util/codec/codec_test.go @@ -20,9 +20,9 @@ import ( "time" . "github.com/pingcap/check" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util/chunk" diff --git a/util/filesort/filesort.go b/util/filesort/filesort.go index 6701ca825324e..5b61cc904b7c2 100644 --- a/util/filesort/filesort.go +++ b/util/filesort/filesort.go @@ -25,8 +25,8 @@ import ( "sync/atomic" "time" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/codec" "github.com/pkg/errors" diff --git a/util/kvencoder/kv_encoder.go b/util/kvencoder/kv_encoder.go index 9fb4167172619..9184e0d439aec 100644 --- a/util/kvencoder/kv_encoder.go +++ b/util/kvencoder/kv_encoder.go @@ -20,11 +20,11 @@ import ( "sync" "sync/atomic" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta" "github.com/pingcap/tidb/meta/autoid" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/tablecodec" diff --git a/util/memory/action.go b/util/memory/action.go index 1873d3c2cca24..7e8ddaf49ded1 100644 --- a/util/memory/action.go +++ b/util/memory/action.go @@ -16,8 +16,8 @@ package memory import ( "sync" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" log "github.com/sirupsen/logrus" ) diff --git a/util/printer/printer.go b/util/printer/printer.go index 510c87c2592da..fdae8b19f32bc 100644 --- a/util/printer/printer.go +++ b/util/printer/printer.go @@ -18,8 +18,8 @@ import ( "encoding/json" "fmt" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/config" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/util/israce" log "github.com/sirupsen/logrus" ) diff --git a/util/ranger/checker.go b/util/ranger/checker.go index 6973d6bec8304..74ea582ca94de 100644 --- a/util/ranger/checker.go +++ b/util/ranger/checker.go @@ -14,9 +14,9 @@ package ranger import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/types" ) diff --git a/util/ranger/detacher.go b/util/ranger/detacher.go index 31be5566d0843..529f4cb92c9a8 100644 --- a/util/ranger/detacher.go +++ b/util/ranger/detacher.go @@ -14,9 +14,9 @@ package ranger import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/model" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/types" "github.com/pkg/errors" diff --git a/util/ranger/points.go b/util/ranger/points.go index 4f31943d88f53..0b830545e578f 100644 --- a/util/ranger/points.go +++ b/util/ranger/points.go @@ -18,11 +18,11 @@ import ( "math" "sort" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx/stmtctx" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pkg/errors" diff --git a/util/ranger/ranger.go b/util/ranger/ranger.go index 2a7c1ca87d7b4..5631c1ff7c995 100644 --- a/util/ranger/ranger.go +++ b/util/ranger/ranger.go @@ -19,14 +19,14 @@ import ( "sort" "unicode/utf8" - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/sessionctx/stmtctx" "github.com/pingcap/tidb/types" - "github.com/pingcap/tidb/util/charset" "github.com/pingcap/tidb/util/codec" "github.com/pkg/errors" ) diff --git a/util/ranger/ranger_test.go b/util/ranger/ranger_test.go index 56ec9261417d3..8947aec481cc5 100644 --- a/util/ranger/ranger_test.go +++ b/util/ranger/ranger_test.go @@ -18,10 +18,10 @@ import ( "testing" . "github.com/pingcap/check" + "github.com/pingcap/parser" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" - "github.com/pingcap/tidb/parser" plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" diff --git a/util/rowDecoder/decoder.go b/util/rowDecoder/decoder.go index 8cac9f55a3646..86d69fa1e457f 100644 --- a/util/rowDecoder/decoder.go +++ b/util/rowDecoder/decoder.go @@ -16,9 +16,9 @@ package decoder import ( "time" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/tablecodec" diff --git a/util/sqlexec/restricted_sql_executor.go b/util/sqlexec/restricted_sql_executor.go index fd1d5adb846de..672845de616bc 100644 --- a/util/sqlexec/restricted_sql_executor.go +++ b/util/sqlexec/restricted_sql_executor.go @@ -14,7 +14,7 @@ package sqlexec import ( - "github.com/pingcap/tidb/ast" + "github.com/pingcap/parser/ast" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/util/chunk" "golang.org/x/net/context" diff --git a/vendor/github.com/cznic/golex/LICENSE b/vendor/github.com/cznic/golex/LICENSE deleted file mode 100644 index cbf4063474594..0000000000000 --- a/vendor/github.com/cznic/golex/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2014 The golex Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the names of the authors nor the names of the -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/cznic/golex/lex/api.go b/vendor/github.com/cznic/golex/lex/api.go deleted file mode 100644 index 3f84390370351..0000000000000 --- a/vendor/github.com/cznic/golex/lex/api.go +++ /dev/null @@ -1,410 +0,0 @@ -// Copyright (c) 2015 The golex Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package lex - -import ( - "bytes" - "fmt" - "go/token" - "io" - "os" -) - -// BOM handling modes which can be set by the BOMMode Option. Default is BOMIgnoreFirst. -const ( - BOMError = iota // BOM is an error anywhere. - BOMIgnoreFirst // Skip BOM if at beginning, report as error if anywhere else. - BOMPassAll // No special handling of BOM. - BOMPassFirst // No special handling of BOM if at beginning, report as error if anywhere else. -) - -const ( - NonASCII = 0x80 // DefaultRuneClass returns NonASCII for non ASCII runes. - RuneEOF = -1 // Distinct from any valid Unicode rune value. -) - -// DefaultRuneClass returns the character class of r. If r is an ASCII code -// then its class equals the ASCII code. Any other rune is of class NonASCII. -// -// DefaultRuneClass is the default implementation Lexer will use to convert -// runes (21 bit entities) to scanner classes (8 bit entities). -// -// Non ASCII aware lexical analyzers will typically use their own -// categorization function. To assign such custom function use the RuneClass -// option. -func DefaultRuneClass(r rune) int { - if r >= 0 && r < 0x80 { - return int(r) - } - - return NonASCII -} - -// Char represents a rune and its position. -type Char struct { - Rune rune - pos int32 -} - -// NewChar returns a new Char value. -func NewChar(pos token.Pos, r rune) Char { return Char{pos: int32(pos), Rune: r} } - -// IsValid reports whether c is not a zero Char. -func (c Char) IsValid() bool { return c.Pos().IsValid() } - -// Pos returns the token.Pos associated with c. -func (c Char) Pos() token.Pos { return token.Pos(c.pos) } - -// CharReader is a RuneReader providing additionally explicit position -// information by returning a Char instead of a rune as its first result. -type CharReader interface { - ReadChar() (c Char, size int, err error) -} - -// Lexer suports golex[0] generated lexical analyzers. -type Lexer struct { - File *token.File // The *token.File passed to New. - First Char // First remembers the lookahead char when Rule0 was invoked. - Last Char // Last remembers the last Char returned by Next. - Prev Char // Prev remembers the Char previous to Last. - bomMode int // See the BOM* constants. - bytesBuf bytes.Buffer // Used by TokenBytes. - charSrc CharReader // Lexer alternative input. - classf func(rune) int // - errorf func(token.Pos, string) // - lookahead Char // Lookahead if non zero. - mark int // Longest match marker. - off int // Used for File.AddLine. - src io.RuneReader // Lexer input. - tokenBuf []Char // Lexeme collector. - ungetBuf []Char // Unget buffer. -} - -// New returns a new *Lexer. The result can be amended using opts. -// -// Non Unicode Input -// -// To consume sources in other encodings and still have exact position -// information, pass an io.RuneReader which returns the next input character -// reencoded as an Unicode rune but returns the size (number of bytes used to -// encode it) of the original character, not the size of its UTF-8 -// representation after converted to an Unicode rune. Size is the second -// returned value of io.RuneReader.ReadRune method[4]. -// -// When src optionally implements CharReader its ReadChar method is used -// instead of io.ReadRune. -func New(file *token.File, src io.RuneReader, opts ...Option) (*Lexer, error) { - r := &Lexer{ - File: file, - bomMode: BOMIgnoreFirst, - classf: DefaultRuneClass, - src: src, - } - if x, ok := src.(CharReader); ok { - r.charSrc = x - } - r.errorf = r.defaultErrorf - for _, o := range opts { - if err := o(r); err != nil { - return nil, err - } - } - return r, nil -} - -// Abort handles the situation when the scanner does not successfully recognize -// any token or when an attempt to find the longest match "overruns" from an -// accepting state only to never reach an accepting state again. In the first -// case the scanner was never in an accepting state since last call to Rule0 -// and then (true, previousLookahead rune) is returned, effectively consuming a -// single Char token, avoiding scanner stall. Otherwise there was at least one -// accepting scanner state marked using Mark. In this case Abort rollbacks the -// lexer state to the marked state and returns (false, 0). The scanner must -// then execute a prescribed goto statement. For example: -// -// %yyc c -// %yyn c = l.Next() -// %yym l.Mark() -// -// %{ -// package foo -// -// import (...) -// -// type lexer struct { -// *lex.Lexer -// ... -// } -// -// func newLexer(...) *lexer { -// return &lexer{ -// lex.NewLexer(...), -// ... -// } -// } -// -// func (l *lexer) scan() int { -// c := l.Enter() -// %} -// -// ... more lex defintions -// -// %% -// -// c = l.Rule0() -// -// ... lex rules -// -// %% -// -// if c, ok := l.Abort(); ok { -// return c -// } -// -// goto yyAction -// } -func (l *Lexer) Abort() (int, bool) { - if l.mark >= 0 { - if len(l.tokenBuf) > l.mark { - l.Unget(l.lookahead) - for i := len(l.tokenBuf) - 1; i >= l.mark; i-- { - l.Unget(l.tokenBuf[i]) - } - } - l.tokenBuf = l.tokenBuf[:l.mark] - return 0, false - } - - switch n := len(l.tokenBuf); n { - case 0: // [] z - c := l.lookahead - l.Next() - return int(c.Rune), true - case 1: // [a] z - return int(l.tokenBuf[0].Rune), true - default: // [a, b, ...], z - c := l.tokenBuf[0] // a - l.Unget(l.lookahead) // z - for i := n - 1; i > 1; i-- { - l.Unget(l.tokenBuf[i]) // ... - } - l.lookahead = l.tokenBuf[1] // b - l.tokenBuf = l.tokenBuf[:1] - return int(c.Rune), true - } -} - -func (l *Lexer) class() int { return l.classf(l.lookahead.Rune) } - -func (l *Lexer) defaultErrorf(pos token.Pos, msg string) { - l.Error(fmt.Sprintf("%v: %v", l.File.Position(pos), msg)) -} - -// Enter ensures the lexer has a valid lookahead Char and returns its class. -// Typical use in an .l file -// -// func (l *lexer) scan() lex.Char { -// c := l.Enter() -// ... -func (l *Lexer) Enter() int { - if !l.lookahead.IsValid() { - l.Next() - } - return l.class() -} - -// Error Implements yyLexer[2] by printing the msg to stderr. -func (l *Lexer) Error(msg string) { - fmt.Fprintf(os.Stderr, "%s\n", msg) -} - -// Lookahead returns the current lookahead. -func (l *Lexer) Lookahead() Char { - if !l.lookahead.IsValid() { - l.Next() - } - return l.lookahead -} - -// Mark records the current state of scanner as accepting. It implements the -// golex macro %yym. Typical usage in an .l file: -// -// %yym l.Mark() -func (l *Lexer) Mark() { l.mark = len(l.tokenBuf) } - -func (l *Lexer) next() int { - const bom = '\ufeff' - - if c := l.lookahead; c.IsValid() { - l.tokenBuf = append(l.tokenBuf, c) - } - if n := len(l.ungetBuf); n != 0 { - l.lookahead = l.ungetBuf[n-1] - l.ungetBuf = l.ungetBuf[:n-1] - return l.class() - } - - if l.src == nil { - return RuneEOF - } - - var r rune - var sz int - var err error - var pos token.Pos - var c Char -again: - off0 := l.off - switch cs := l.charSrc; { - case cs != nil: - c, sz, err = cs.ReadChar() - r = c.Rune - pos = c.Pos() - default: - r, sz, err = l.src.ReadRune() - pos = l.File.Pos(l.off) - } - l.off += sz - if err != nil { - l.src = nil - r = RuneEOF - if err != io.EOF { - l.errorf(pos, err.Error()) - } - } - - if r == bom { - switch l.bomMode { - default: - fallthrough - case BOMIgnoreFirst: - if off0 != 0 { - l.errorf(pos, "unicode (UTF-8) BOM in middle of file") - } - goto again - case BOMPassAll: - // nop - case BOMPassFirst: - if off0 != 0 { - l.errorf(pos, "unicode (UTF-8) BOM in middle of file") - goto again - } - case BOMError: - switch { - case off0 == 0: - l.errorf(pos, "unicode (UTF-8) BOM at beginnig of file") - default: - l.errorf(pos, "unicode (UTF-8) BOM in middle of file") - } - goto again - } - } - - l.lookahead = NewChar(pos, r) - if r == '\n' { - l.File.AddLine(l.off) - } - return l.class() -} - -// Next advances the scanner for one rune and returns the respective character -// class of the new lookahead. Typical usage in an .l file: -// -// %yyn c = l.Next() -func (l *Lexer) Next() int { - l.Prev = l.Last - r := l.next() - l.Last = l.lookahead - return r -} - -// Offset returns the current reading offset of the lexer's source. -func (l *Lexer) Offset() int { return l.off } - -// Rule0 initializes the scanner state before the attempt to recognize a token -// starts. The token collecting buffer is cleared. Rule0 records the current -// lookahead in l.First and returns its class. Typical usage in an .l file: -// -// ... lex definitions -// -// %% -// -// c := l.Rule0() -// -// first-pattern-regexp -func (l *Lexer) Rule0() int { - if !l.lookahead.IsValid() { - l.Next() - } - l.First = l.lookahead - l.mark = -1 - if len(l.tokenBuf) > 1<<18 { //DONE constant tuned - l.tokenBuf = nil - } else { - l.tokenBuf = l.tokenBuf[:0] - } - return l.class() -} - -// Token returns the currently collected token chars. The result is R/O. -func (l *Lexer) Token() []Char { return l.tokenBuf } - -// TokenBytes returns the UTF-8 encoding of Token. If builder is not nil then -// it's called instead to build the encoded token byte value into the buffer -// passed to it. -// -// The Result is R/O. -func (l *Lexer) TokenBytes(builder func(*bytes.Buffer)) []byte { - if len(l.bytesBuf.Bytes()) < 1<<18 { //DONE constant tuned - l.bytesBuf.Reset() - } else { - l.bytesBuf = bytes.Buffer{} - } - switch { - case builder != nil: - builder(&l.bytesBuf) - default: - for _, c := range l.Token() { - l.bytesBuf.WriteRune(c.Rune) - } - } - return l.bytesBuf.Bytes() -} - -// Unget unreads all chars in c. -func (l *Lexer) Unget(c ...Char) { - l.ungetBuf = append(l.ungetBuf, c...) - l.lookahead = Char{} // Must invalidate lookahead. -} - -// Option is a function which can be passed as an optional argument to New. -type Option func(*Lexer) error - -// BOMMode option selects how the lexer handles BOMs. See the BOM* constants for details. -func BOMMode(mode int) Option { - return func(l *Lexer) error { - l.bomMode = mode - return nil - } -} - -// ErrorFunc option sets a function called when an, for example I/O error, -// occurs. The default is to call Error with the position and message already -// formated as a string. -func ErrorFunc(f func(token.Pos, string)) Option { - return func(l *Lexer) error { - l.errorf = f - return nil - } -} - -// RuneClass option sets the function used to convert runes to character -// classes. -func RuneClass(f func(rune) int) Option { - return func(l *Lexer) error { - l.classf = f - return nil - } -} diff --git a/vendor/github.com/cznic/golex/lex/doc.go b/vendor/github.com/cznic/golex/lex/doc.go deleted file mode 100644 index 10b0b43073177..0000000000000 --- a/vendor/github.com/cznic/golex/lex/doc.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) 2015 The golex Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package lex is a Unicode-friendly run time library for golex[0] generated -// lexical analyzers[1]. -// -// Changelog -// -// 2015-04-08: Initial release. -// -// Character classes -// -// Golex internally handles only 8 bit "characters". Many Unicode-aware -// tokenizers do not actually need to recognize every Unicode rune, but only -// some particular partitions/subsets. Like, for example, a particular Unicode -// category, say upper case letters: Lu. -// -// The idea is to convert all runes in a particular set as a single 8 bit -// character allocated outside the ASCII range of codes. The token value, a -// string of runes and their exact positions is collected as usual (see the -// Token and TokenBytes method), but the tokenizer DFA is simpler (and thus -// smaller and perhaps also faster) when this technique is used. In the example -// program (see below), recognizing (and skipping) white space, integer -// literals, one keyword and Go identifiers requires only an 8 state DFA[5]. -// -// To provide the conversion from runes to character classes, "install" your -// converting function using the RuneClass option. -// -// References -// -// - -// -// [0]: http://godoc.org/github.com/cznic/golex -// [1]: http://en.wikipedia.org/wiki/Lexical_analysis -// [2]: http://golang.org/cmd/yacc/ -// [3]: https://github.com/cznic/golex/blob/master/lex/example.l -// [4]: http://golang.org/pkg/io/#RuneReader -// [5]: https://github.com/cznic/golex/blob/master/lex/dfa -package lex diff --git a/vendor/github.com/cznic/parser/nquads/LICENSE b/vendor/github.com/cznic/parser/nquads/LICENSE deleted file mode 100644 index f007b7fa8ff3a..0000000000000 --- a/vendor/github.com/cznic/parser/nquads/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2014 The parser Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the names of the authors nor the names of the -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/cznic/parser/yacc/LICENSE b/vendor/github.com/cznic/parser/yacc/LICENSE deleted file mode 100644 index f007b7fa8ff3a..0000000000000 --- a/vendor/github.com/cznic/parser/yacc/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2014 The parser Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the names of the authors nor the names of the -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/cznic/parser/yacc/api.go b/vendor/github.com/cznic/parser/yacc/api.go deleted file mode 100644 index 798cf477e4958..0000000000000 --- a/vendor/github.com/cznic/parser/yacc/api.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2015 The parser Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:generate go run generate.go -//go:generate golex -o goscanner.go go.l -//go:generate golex -o scanner.go y.l -//go:generate go run generate.go -2 - -// Package parser implements a parser for yacc source files. -// -// Note: Rule.Body element's type -// -// int Eg. 65 represents literal 'A' -// -// string Eg. "Start" represents rule component Start -// -// *Action Mid rule action or rule semantic action -package parser - -import ( - "bytes" - "fmt" - "go/token" - - "github.com/cznic/golex/lex" -) - -const ( - // ActionValueGo is used for a Go code fragment - ActionValueGo = iota - // ActionValueDlrDlr is used for $$. - ActionValueDlrDlr - // ActionValueDlrTagDlr is used for $$. - ActionValueDlrTagDlr - // ActionValueDlrNum is used for $num. - ActionValueDlrNum - // ActionValueDlrTagNum is used for $num. - ActionValueDlrTagNum -) - -// ActionValue is an item of Action.Value -type ActionValue struct { - Num int // The number in $num. - Pos token.Pos // Position of the start of the ActionValue. - Src string // Source for this value. - Tag string // The tag in $$ or $num. - Type int // One of ActionValue{Go,DlrDlr,DlrTagDlr,DlrNum,DlrTagNum} constants. -} - -// Token captures a lexem with position, value and comments, if any. -type Token struct { - Comments []string - Val string - File *token.File - lex.Char -} - -// Pos retruns the token.Pos for t. -func (t *Token) Pos() token.Pos { return t.Char.Pos() } - -// Position returns the token.Position for t -func (t *Token) Position() token.Position { return t.File.Position(t.Pos()) } - -// Strings implements fmt.Stringer. -func (t *Token) String() string { - return fmt.Sprintf("%v: %v %q, Comments: %q", t.File.Position(t.Char.Pos()), yySymName(int(t.Char.Rune)), t.Val, t.Comments) -} - -// Parse parses src as a single yacc source file fname and returns the -// corresponding Specification. If the source couldn't be read, the returned -// Specification is nil and the error indicates all of the specific failures. -func Parse(fset *token.FileSet, fname string, src []byte) (s *Specification, err error) { - r := bytes.NewBuffer(src) - file := fset.AddFile(fname, -1, len(src)) - lx, err := newLexer(file, r) - if err != nil { - return nil, err - } - - y := yyParse(lx) - n := len(lx.errors) - if y != 0 || n != 0 { - if n == 0 { - panic("internal error") - } - - return nil, lx.errors - } - - return lx.spec, nil -} diff --git a/vendor/github.com/cznic/parser/yacc/ast.go b/vendor/github.com/cznic/parser/yacc/ast.go deleted file mode 100644 index dac601f204b28..0000000000000 --- a/vendor/github.com/cznic/parser/yacc/ast.go +++ /dev/null @@ -1,514 +0,0 @@ -// CAUTION: Generated by yy - DO NOT EDIT. - -// Copyright 2015 The parser Authors. All rights reserved. Use -// of this source code is governed by a BSD-style license that can be found in -// the LICENSE file. -// -// This is a derived work base on the original at -// -// http://pubs.opengroup.org/onlinepubs/009695399/utilities/yacc.html -// -// The original work is -// -// Copyright © 2001-2004 The IEEE and The Open Group, All Rights reserved. -// -// Grammar for the input to yacc. - -package parser - -import ( - "go/token" -) - -// Action represents data reduced by production: -// -// Action: -// '{' '}' -type Action struct { - Values []*ActionValue // For backward compatibility. - Token *Token - Token2 *Token -} - -func (n *Action) fragment() interface{} { return n } - -// String implements fmt.Stringer. -func (n *Action) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *Action) Pos() token.Pos { - return n.Token.Pos() -} - -// Definition represents data reduced by productions: -// -// Definition: -// START IDENTIFIER -// | UNION // Case 1 -// | LCURL RCURL // Case 2 -// | ReservedWord Tag NameList // Case 3 -// | ReservedWord Tag // Case 4 -// | ERROR_VERBOSE // Case 5 -type Definition struct { - Nlist []*Name // For backward compatibility. - Value string - Case int - NameList *NameList - ReservedWord *ReservedWord - Tag *Tag - Token *Token - Token2 *Token -} - -func (n *Definition) fragment() interface{} { return n } - -// String implements fmt.Stringer. -func (n *Definition) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *Definition) Pos() token.Pos { - switch n.Case { - case 3, 4: - return n.ReservedWord.Pos() - case 0, 1, 2, 5: - return n.Token.Pos() - default: - panic("internal error") - } -} - -// DefinitionList represents data reduced by productions: -// -// DefinitionList: -// /* empty */ -// | DefinitionList Definition // Case 1 -type DefinitionList struct { - Definition *Definition - DefinitionList *DefinitionList -} - -func (n *DefinitionList) reverse() *DefinitionList { - if n == nil { - return nil - } - - na := n - nb := na.DefinitionList - for nb != nil { - nc := nb.DefinitionList - nb.DefinitionList = na - na = nb - nb = nc - } - n.DefinitionList = nil - return na -} - -func (n *DefinitionList) fragment() interface{} { return n.reverse() } - -// String implements fmt.Stringer. -func (n *DefinitionList) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *DefinitionList) Pos() token.Pos { - if n == nil { - return 0 - } - - if p := n.DefinitionList.Pos(); p != 0 { - return p - } - - return n.Definition.Pos() -} - -// LiteralStringOpt represents data reduced by productions: -// -// LiteralStringOpt: -// /* empty */ -// | STRING_LITERAL // Case 1 -type LiteralStringOpt struct { - Token *Token -} - -func (n *LiteralStringOpt) fragment() interface{} { return n } - -// String implements fmt.Stringer. -func (n *LiteralStringOpt) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *LiteralStringOpt) Pos() token.Pos { - if n == nil { - return 0 - } - - return n.Token.Pos() -} - -// Name represents data reduced by productions: -// -// Name: -// IDENTIFIER LiteralStringOpt -// | IDENTIFIER NUMBER LiteralStringOpt // Case 1 -type Name struct { - Identifier interface{} // For backward compatibility. - Number int // For backward compatibility. - Case int - LiteralStringOpt *LiteralStringOpt - Token *Token - Token2 *Token -} - -func (n *Name) fragment() interface{} { return n } - -// String implements fmt.Stringer. -func (n *Name) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *Name) Pos() token.Pos { - return n.Token.Pos() -} - -// NameList represents data reduced by productions: -// -// NameList: -// Name -// | NameList Name // Case 1 -// | NameList ',' Name // Case 2 -type NameList struct { - Case int - Name *Name - NameList *NameList - Token *Token -} - -func (n *NameList) reverse() *NameList { - if n == nil { - return nil - } - - na := n - nb := na.NameList - for nb != nil { - nc := nb.NameList - nb.NameList = na - na = nb - nb = nc - } - n.NameList = nil - return na -} - -func (n *NameList) fragment() interface{} { return n.reverse() } - -// String implements fmt.Stringer. -func (n *NameList) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *NameList) Pos() token.Pos { - switch n.Case { - case 0: - return n.Name.Pos() - case 1, 2: - return n.NameList.Pos() - default: - panic("internal error") - } -} - -// Precedence represents data reduced by productions: -// -// Precedence: -// /* empty */ -// | PREC IDENTIFIER // Case 1 -// | PREC IDENTIFIER Action // Case 2 -// | Precedence ';' // Case 3 -type Precedence struct { - Identifier interface{} // Name string or literal int. - Action *Action - Case int - Precedence *Precedence - Token *Token - Token2 *Token -} - -func (n *Precedence) fragment() interface{} { return n } - -// String implements fmt.Stringer. -func (n *Precedence) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *Precedence) Pos() token.Pos { - switch n.Case { - case 0: - return 0 - case 3: - if p := n.Precedence.Pos(); p != 0 { - return p - } - - return n.Token.Pos() - case 1, 2: - return n.Token.Pos() - default: - panic("internal error") - } -} - -// ReservedWord represents data reduced by productions: -// -// ReservedWord: -// TOKEN -// | LEFT // Case 1 -// | RIGHT // Case 2 -// | NONASSOC // Case 3 -// | TYPE // Case 4 -// | PRECEDENCE // Case 5 -type ReservedWord struct { - Case int - Token *Token -} - -func (n *ReservedWord) fragment() interface{} { return n } - -// String implements fmt.Stringer. -func (n *ReservedWord) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *ReservedWord) Pos() token.Pos { - return n.Token.Pos() -} - -// Rule represents data reduced by productions: -// -// Rule: -// C_IDENTIFIER RuleItemList Precedence -// | '|' RuleItemList Precedence // Case 1 -type Rule struct { - Body []interface{} // For backward compatibility. - Name *Token - Case int - Precedence *Precedence - RuleItemList *RuleItemList - Token *Token -} - -func (n *Rule) fragment() interface{} { return n } - -// String implements fmt.Stringer. -func (n *Rule) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *Rule) Pos() token.Pos { - return n.Token.Pos() -} - -// RuleItemList represents data reduced by productions: -// -// RuleItemList: -// /* empty */ -// | RuleItemList IDENTIFIER // Case 1 -// | RuleItemList Action // Case 2 -// | RuleItemList STRING_LITERAL // Case 3 -type RuleItemList struct { - Action *Action - Case int - RuleItemList *RuleItemList - Token *Token -} - -func (n *RuleItemList) reverse() *RuleItemList { - if n == nil { - return nil - } - - na := n - nb := na.RuleItemList - for nb != nil { - nc := nb.RuleItemList - nb.RuleItemList = na - na = nb - nb = nc - } - n.RuleItemList = nil - return na -} - -func (n *RuleItemList) fragment() interface{} { return n.reverse() } - -// String implements fmt.Stringer. -func (n *RuleItemList) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *RuleItemList) Pos() token.Pos { - switch n.Case { - case 0: - return 0 - case 2: - if p := n.RuleItemList.Pos(); p != 0 { - return p - } - - return n.Action.Pos() - case 1, 3: - if p := n.RuleItemList.Pos(); p != 0 { - return p - } - - return n.Token.Pos() - default: - panic("internal error") - } -} - -// RuleList represents data reduced by productions: -// -// RuleList: -// C_IDENTIFIER RuleItemList Precedence -// | RuleList Rule // Case 1 -type RuleList struct { - Case int - Precedence *Precedence - Rule *Rule - RuleItemList *RuleItemList - RuleList *RuleList - Token *Token -} - -func (n *RuleList) reverse() *RuleList { - if n == nil { - return nil - } - - na := n - nb := na.RuleList - for nb != nil { - nc := nb.RuleList - nb.RuleList = na - na = nb - nb = nc - } - n.RuleList = nil - return na -} - -func (n *RuleList) fragment() interface{} { return n.reverse() } - -// String implements fmt.Stringer. -func (n *RuleList) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *RuleList) Pos() token.Pos { - switch n.Case { - case 1: - return n.RuleList.Pos() - case 0: - return n.Token.Pos() - default: - panic("internal error") - } -} - -// Specification represents data reduced by production: -// -// Specification: -// DefinitionList "%%" RuleList Tail -type Specification struct { - Defs []*Definition // For backward compatibility. - Rules []*Rule // For backward compatibility. - DefinitionList *DefinitionList - RuleList *RuleList - Tail *Tail - Token *Token -} - -func (n *Specification) fragment() interface{} { return n } - -// String implements fmt.Stringer. -func (n *Specification) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *Specification) Pos() token.Pos { - if p := n.DefinitionList.Pos(); p != 0 { - return p - } - - return n.Token.Pos() -} - -// Tag represents data reduced by productions: -// -// Tag: -// /* empty */ -// | '<' IDENTIFIER '>' // Case 1 -type Tag struct { - Token *Token - Token2 *Token - Token3 *Token -} - -func (n *Tag) fragment() interface{} { return n } - -// String implements fmt.Stringer. -func (n *Tag) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *Tag) Pos() token.Pos { - if n == nil { - return 0 - } - - return n.Token.Pos() -} - -// Tail represents data reduced by productions: -// -// Tail: -// "%%" -// | /* empty */ // Case 1 -type Tail struct { - Value string - Token *Token -} - -func (n *Tail) fragment() interface{} { return n } - -// String implements fmt.Stringer. -func (n *Tail) String() string { - return prettyString(n) -} - -// Pos reports the position of the first component of n or zero if it's empty. -func (n *Tail) Pos() token.Pos { - if n == nil { - return 0 - } - - return n.Token.Pos() -} diff --git a/vendor/github.com/cznic/parser/yacc/generate.go b/vendor/github.com/cznic/parser/yacc/generate.go deleted file mode 100644 index 834c25a090b00..0000000000000 --- a/vendor/github.com/cznic/parser/yacc/generate.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2015 The parser Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build ignore - -package main - -import ( - "bytes" - "flag" - "io/ioutil" - "log" - "os" - "os/exec" - "path/filepath" -) - -func yy() (nm string, err error) { - y, err := os.Create("parser.y") - if err != nil { - return "", err - } - - nm = y.Name() - cmd := exec.Command( - "yy", - "-astImport", "\"go/token\"", - "-kind", "Case", - "-o", nm, - "parser.yy", - ) - if out, err := cmd.CombinedOutput(); err != nil { - os.Remove(nm) - log.Printf("%s", out) - return "", err - } - - return nm, nil -} - -func goyacc(y string) (err error) { - t, err := ioutil.TempFile("", "go-generate-xegen-") - if err != nil { - log.Fatal(err) - } - - defer func() { - if e := os.Remove(t.Name()); e != nil && err == nil { - err = e - } - }() - - cmd := exec.Command("goyacc", "-o", os.DevNull, "-xegen", t.Name(), y) - if out, err := cmd.CombinedOutput(); err != nil { - log.Printf("%s\n", out) - return err - } - - xerrors, err := ioutil.ReadFile("xerrors") - if err != nil { - return err - } - - if _, err := t.Seek(0, 2); err != nil { - return err - } - - if _, err := t.Write(xerrors); err != nil { - return err - } - - cmd = exec.Command("goyacc", "-cr", "-xe", t.Name(), "-o", "parser.go", "-dlvalf", "%v", "-dlval", "prettyString(lval.Token)", y) - if out, err := cmd.CombinedOutput(); err != nil { - log.Printf("%s", out) - return err - } else { - log.Printf("%s", out) - } - - return nil -} - -func main() { - if err := main0(); err != nil { - log.Fatal(err) - } -} - -func main0() (err error) { - log.SetFlags(log.Lshortfile) - p2 := flag.Bool("2", false, "") - flag.Parse() - if *p2 { - return main2() - } - - os.Remove("ast.go") - os.Remove("ast_test.go") - y, err := yy() - if err != nil { - return err - } - - return goyacc(y) -} - -func main2() (err error) { - goCmd := exec.Command("go", "test", "-run", "^Example") - out, err := goCmd.CombinedOutput() // Errors are expected and wanted here. - feCmd := exec.Command("fe") - feCmd.Stdin = bytes.NewBuffer(out) - if out, err = feCmd.CombinedOutput(); err != nil { - log.Printf("%s", out) - return err - } - - matches, err := filepath.Glob("*_test.go") - if err != nil { - return err - } - - cmd := exec.Command("pcregrep", append([]string{"-nM", `failed|panic|\/\/ |// false|// -1|Output:\n}`}, matches...)...) - if out, _ = cmd.CombinedOutput(); len(out) != 0 { // Error != nil when no matches - log.Printf("%s", out) - } - return nil -} diff --git a/vendor/github.com/cznic/parser/yacc/goscanner.go b/vendor/github.com/cznic/parser/yacc/goscanner.go deleted file mode 100644 index 71d385ab8083d..0000000000000 --- a/vendor/github.com/cznic/parser/yacc/goscanner.go +++ /dev/null @@ -1,436 +0,0 @@ -// CAUTION: Generated file - DO NOT EDIT. - -// Copyright 2015 The parser Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// CAUTION: Generated file (unless this is go.l) - DO NOT EDIT! - -package parser - -import ( - "fmt" - - "github.com/cznic/golex/lex" -) - -func (l *lexer) scanGo() lex.Char { - c := l.Enter() - -yystate0: - yyrule := -1 - _ = yyrule - - switch yyt := l.state; yyt { - default: - panic(fmt.Errorf(`invalid start condition %d`, yyt)) - case 0: // start condition: INITIAL - goto yystart1 - case 1: // start condition: DLR - goto yystart20 - } - - goto yystate0 // silence unused label error - goto yyAction // silence unused label error -yyAction: - switch yyrule { - case 1: - goto yyrule1 - case 2: - goto yyrule2 - case 3: - goto yyrule3 - case 4: - goto yyrule4 - case 5: - goto yyrule5 - case 6: - goto yyrule6 - case 7: - goto yyrule7 - case 8: - goto yyrule8 - case 9: - goto yyrule9 - case 10: - goto yyrule10 - case 11: - goto yyrule11 - case 12: - goto yyrule12 - case 13: - goto yyrule13 - case 14: - goto yyrule14 - } - goto yystate1 // silence unused label error -yystate1: - c = l.Next() -yystart1: - switch { - default: - goto yyabort - case c == '!' || c == '#' || c == '%' || c == '&' || c >= '(' && c <= '+' || c == '-' || c == '.' || c >= ':' && c <= '@' || c == '[' || c == '_' || c == '|' || c == '~': - goto yystate3 - case c == '"': - goto yystate4 - case c == '$': - goto yystate7 - case c == '/': - goto yystate11 - case c == '\'': - goto yystate8 - case c == '\t' || c == '\n' || c == '\r' || c == ' ': - goto yystate2 - case c == '\u0081': - goto yystate19 - case c == '{': - goto yystate17 - case c == '}': - goto yystate18 - case c >= '0' && c <= '9': - goto yystate16 - } - -yystate2: - c = l.Next() - yyrule = 8 - l.Mark() - switch { - default: - goto yyrule8 - case c == '\t' || c == '\n' || c == '\r' || c == ' ': - goto yystate2 - } - -yystate3: - c = l.Next() - yyrule = 5 - l.Mark() - goto yyrule5 - -yystate4: - c = l.Next() - switch { - default: - goto yyabort - case c == '"': - goto yystate5 - case c == '\\': - goto yystate6 - case c >= '\x01' && c <= '\t' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '!' || c >= '#' && c <= '[' || c >= ']' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate4 - } - -yystate5: - c = l.Next() - yyrule = 7 - l.Mark() - goto yyrule7 - -yystate6: - c = l.Next() - switch { - default: - goto yyabort - case c >= '\x01' && c <= '\t' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate4 - } - -yystate7: - c = l.Next() - yyrule = 3 - l.Mark() - goto yyrule3 - -yystate8: - c = l.Next() - switch { - default: - goto yyabort - case c == '\'': - goto yystate9 - case c == '\\': - goto yystate10 - case c >= '\x01' && c <= '\t' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '&' || c >= '(' && c <= '[' || c >= ']' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate8 - } - -yystate9: - c = l.Next() - yyrule = 6 - l.Mark() - goto yyrule6 - -yystate10: - c = l.Next() - switch { - default: - goto yyabort - case c >= '\x01' && c <= '\t' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate8 - } - -yystate11: - c = l.Next() - switch { - default: - goto yyabort - case c == '*': - goto yystate12 - case c == '/': - goto yystate15 - case c >= '\x01' && c <= ')' || c >= '+' && c <= '.' || c >= '0' && c <= 'ÿ': - goto yystate3 - } - -yystate12: - c = l.Next() - switch { - default: - goto yyabort - case c == '*': - goto yystate13 - case c >= '\x01' && c <= ')' || c >= '+' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate12 - } - -yystate13: - c = l.Next() - switch { - default: - goto yyabort - case c == '*': - goto yystate13 - case c == '/': - goto yystate14 - case c >= '\x01' && c <= ')' || c >= '+' && c <= '.' || c >= '0' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate12 - } - -yystate14: - c = l.Next() - yyrule = 9 - l.Mark() - goto yyrule9 - -yystate15: - c = l.Next() - yyrule = 9 - l.Mark() - switch { - default: - goto yyrule9 - case c >= '\x01' && c <= '\t' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate15 - } - -yystate16: - c = l.Next() - yyrule = 4 - l.Mark() - switch { - default: - goto yyrule4 - case c >= '0' && c <= '9': - goto yystate16 - } - -yystate17: - c = l.Next() - yyrule = 1 - l.Mark() - goto yyrule1 - -yystate18: - c = l.Next() - yyrule = 2 - l.Mark() - goto yyrule2 - -yystate19: - c = l.Next() - yyrule = 10 - l.Mark() - switch { - default: - goto yyrule10 - case c == '\u0081': - goto yystate19 - } - - goto yystate20 // silence unused label error -yystate20: - c = l.Next() -yystart20: - switch { - default: - goto yyabort - case c == '!' || c == '#' || c == '%' || c == '&' || c >= '(' && c <= '+' || c == '-' || c == '.' || c >= ':' && c <= '@' || c == '[' || c == '_' || c == '|' || c == '~': - goto yystate3 - case c == '"': - goto yystate4 - case c == '$': - goto yystate21 - case c == '/': - goto yystate11 - case c == '\'': - goto yystate8 - case c == '\t' || c == '\n' || c == '\r' || c == ' ': - goto yystate2 - case c == '\u0081': - goto yystate19 - case c == '{': - goto yystate17 - case c == '}': - goto yystate18 - case c >= '0' && c <= '9': - goto yystate16 - } - -yystate21: - c = l.Next() - switch { - default: - goto yyabort - case c == '$': - goto yystate22 - case c == '-': - goto yystate23 - case c == '<': - goto yystate25 - case c >= '0' && c <= '9': - goto yystate24 - } - -yystate22: - c = l.Next() - yyrule = 11 - l.Mark() - goto yyrule11 - -yystate23: - c = l.Next() - switch { - default: - goto yyabort - case c >= '0' && c <= '9': - goto yystate24 - } - -yystate24: - c = l.Next() - yyrule = 13 - l.Mark() - switch { - default: - goto yyrule13 - case c >= '0' && c <= '9': - goto yystate24 - } - -yystate25: - c = l.Next() - switch { - default: - goto yyabort - case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate26 - } - -yystate26: - c = l.Next() - switch { - default: - goto yyabort - case c == '>': - goto yystate27 - case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate26 - } - -yystate27: - c = l.Next() - switch { - default: - goto yyabort - case c == '$': - goto yystate28 - case c == '-': - goto yystate29 - case c >= '0' && c <= '9': - goto yystate30 - } - -yystate28: - c = l.Next() - yyrule = 12 - l.Mark() - goto yyrule12 - -yystate29: - c = l.Next() - switch { - default: - goto yyabort - case c >= '0' && c <= '9': - goto yystate30 - } - -yystate30: - c = l.Next() - yyrule = 14 - l.Mark() - switch { - default: - goto yyrule14 - case c >= '0' && c <= '9': - goto yystate30 - } - -yyrule1: // "{" - { - return l.char('{') - } -yyrule2: // "}" - { - return l.char('}') - } -yyrule3: // "$" -yyrule4: // {intlit} -yyrule5: // {punct} -yyrule6: // {runelit} -yyrule7: // {strlit} -yyrule8: // {white} -yyrule9: // {comment} -yyrule10: // {other}+ - { - return l.char(' ') - } -yyrule11: // "$$" - { - return l.char(' ') - } -yyrule12: // "$"<{tag}>"$" - { - return l.char(' ') - } -yyrule13: // "$"{n} - { - return l.char(' ') - } -yyrule14: // "$"<{tag}>{n} - { - return l.char(' ') - } - panic("unreachable") - - goto yyabort // silence unused label error - -yyabort: // no lexem recognized - if c, ok := l.Abort(); ok { - return l.char(c) - } - - goto yyAction -} diff --git a/vendor/github.com/cznic/parser/yacc/lexer.go b/vendor/github.com/cznic/parser/yacc/lexer.go deleted file mode 100644 index 357ff62ff9696..0000000000000 --- a/vendor/github.com/cznic/parser/yacc/lexer.go +++ /dev/null @@ -1,656 +0,0 @@ -// Copyright 2015 The parser Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package parser - -import ( - "bytes" - "fmt" - "go/scanner" - "go/token" - "io" - "reflect" - "sort" - "strconv" - "strings" - - "github.com/cznic/golex/lex" - "github.com/cznic/strutil" -) - -// Node represents an AST node. -type Node interface { - Pos() token.Pos -} - -const ( - ccEOF = iota + 0x80 - ccOther -) - -type lexer struct { - *lex.Lexer - comments []string - defs []*Definition - errors scanner.ErrorList - example interface{} - exampleRule int - hold *Token - lastCommentLast lex.Char - lastTok *Token - marks int - pos token.Pos - pos2 token.Pos - positions []token.Pos - positions2 []token.Pos - ruleName *Token - rules []*Rule - spec *Specification - state int - value string - value2 string - values []string - values2 []string -} - -func newLexer(file *token.File, src io.RuneReader) (_ *lexer, err error) { - l := &lexer{} - if l.Lexer, err = lex.New( - file, - src, - lex.ErrorFunc(func(pos token.Pos, msg string) { - l.errors.Add(l.File.Position(pos), msg) - }), - lex.RuneClass(runeClass), - ); err != nil { - return nil, err - } - - return l, nil -} - -func (l *lexer) scan0() lex.Char { -again: - switch c := l.scan(); c.Rune { - case COMMENT: - val := string(l.TokenBytes(nil)) - lastCommentLastLine := -1 - if p := l.lastCommentLast.Pos(); p.IsValid() { - lastCommentLastLine = l.File.Position(p).Line - } - firstLine := l.File.Position(l.First.Pos()).Line - switch { - case firstLine-lastCommentLastLine <= 1: // Adjacent - l.comments = append(l.comments, val) - default: // New comment block - l.comments = []string{val} - } - l.lastCommentLast = l.Prev - goto again - default: - lastCommentLastLine := -1 - if p := l.lastCommentLast.Pos(); p.IsValid() { - lastCommentLastLine = l.File.Position(p).Line - } - firstLine := l.File.Position(l.First.Pos()).Line - if firstLine-lastCommentLastLine > 1 { // Non adjacent comment(s) - l.comments = nil - } - return c - } -} - -func (l *lexer) lex() *Token { - var c lex.Char - var t *Token - if t = l.hold; t != nil { - l.hold = nil - c = t.Char - } else { - - c = l.scan0() - t = &Token{File: l.File, Char: c, Val: string(l.TokenBytes(l.tokenBuilder)), Comments: l.comments} - } - l.comments = nil - if r := c.Rune; r != IDENTIFIER { - return t - } - - c2 := l.scan0() - if c2.Rune == ':' { - t.Char.Rune = C_IDENTIFIER - return t - } - - l.hold = &Token{File: l.File, Char: c2, Val: string(l.TokenBytes(l.tokenBuilder)), Comments: l.comments} - l.comments = nil - return t -} - -// yyLexer -func (l *lexer) Lex(lval *yySymType) int { - t := l.lex() - switch t.Char.Rune { - case MARK: - l.marks++ - if l.marks == 2 { - l.Rule0() - for l.Next() != lex.RuneEOF { - } - v := l.TokenBytes(nil) - l.value = string(v[:len(v)-1]) - } - case UNION: - l.state = 0 - l.pos = l.Lookahead().Pos() - var val []byte - loop: - for balance := -1; balance != 0; { - l.Rule0() - c := l.scanGo() - r := c.Rune - if r != lex.RuneEOF { - val = append(val, l.TokenBytes(nil)...) - } - switch r := c.Rune; r { - case lex.RuneEOF: - break loop - case '{': - if balance < 0 { - balance = 1 - break - } - - balance++ - case '}': - balance-- - } - } - l.value = string(val) - case LCURL: - l.state = 0 - l.pos = l.Lookahead().Pos() - var val []byte - var prev lex.Char - loop2: - for { - l.Rule0() - c := l.scanGo() - r := c.Rune - if r != lex.RuneEOF { - val = append(val, l.TokenBytes(nil)...) - } - switch r := c.Rune; r { - case lex.RuneEOF: - break loop2 - case '}': - if prev.Rune == '%' { - l.Unget(c, prev) - break loop2 - } - } - prev = l.Prev - } - l.value = string(val[:len(val)-2]) - case '{': - l.state = 1 - l.pos = l.Prev.Pos() - l.values = []string{string(l.TokenBytes(nil))} - l.positions = []token.Pos{l.First.Pos()} - balance := 1 - loop3: - for { - l.Rule0() - c := l.scanGo() - r := c.Rune - part := string(l.TokenBytes(nil)) - if r != lex.RuneEOF { - switch { - case strings.HasPrefix(part, "$"): - l.values = append(l.values, part) - l.positions = append(l.positions, l.First.Pos()) - default: - n := len(l.values) - 1 - s := l.values[n] - if strings.HasPrefix(s, "$") { - l.values = append(l.values, part) - l.positions = append(l.positions, l.First.Pos()) - break - } - - l.values[n] = s + part - } - } - switch r { - case lex.RuneEOF: - break loop3 - case '{': - balance++ - case '}': - balance-- - if balance == 0 { - l.Unget(l.Lookahead(), c) - break loop3 - } - } - } - } - lval.Token = t - l.lastTok = t - return int(t.Rune) -} - -// yyLexer -func (l *lexer) Error(msg string) { - l.err(l.lastTok.Char.Pos(), "%v", msg) -} - -// yyLexerEx -func (l *lexer) Reduced(rule, state int, lval *yySymType) (stop bool) { - if n := l.exampleRule; n >= 0 && rule != n { - return false - } - - switch x := lval.node.(type) { - case interface { - fragment() interface{} - }: - l.example = x.fragment() - default: - l.example = x - } - return true -} - -func (l *lexer) err(pos token.Pos, msg string, arg ...interface{}) { - l.errors.Add(l.File.Position(pos), fmt.Sprintf(msg, arg...)) -} - -func (l *lexer) char(r int) lex.Char { - return lex.NewChar(l.First.Pos(), rune(r)) -} - -func (l *lexer) errChar(c lex.Char, msg string, arg ...interface{}) { - l.err(c.Pos(), msg, arg...) -} - -func (l *lexer) byteValue(dst *bytes.Buffer, in []lex.Char, report rune) int { - switch r := in[1].Rune; { - case r == '\'': - if r == report { - l.errChar(in[1], "unknown escape sequence: '") - } - dst.WriteString(strconv.QuoteRune('\'')) - return 2 - case r == '"': - if r == report { - l.errChar(in[1], "unknown escape sequence: \"") - } - dst.WriteString(strconv.QuoteRune('"')) - return 2 - case r == '\\': - dst.WriteString(strconv.QuoteRune('\\')) - return 2 - case r == 'a': - dst.WriteString(strconv.QuoteRune('\a')) - return 2 - case r == 'b': - dst.WriteString(strconv.QuoteRune('\b')) - return 2 - case r == 'f': - dst.WriteString(strconv.QuoteRune('\f')) - return 2 - case r == 'n': - dst.WriteString(strconv.QuoteRune('\n')) - return 2 - case r == 'r': - dst.WriteString(strconv.QuoteRune('\r')) - return 2 - case r == 't': - dst.WriteString(strconv.QuoteRune('\t')) - return 2 - case r == 'v': - dst.WriteString(strconv.QuoteRune('\v')) - return 2 - case r >= '0' && r <= '7': - val := r - '0' - n := 2 - for _, v := range in[2:] { - r = v.Rune - if r < '0' || r > '7' { - l.errChar(v, "non-octal character in escape sequence: %c", r) - return n - } - val = val<<3 + r - '0' - - n++ - if n == 4 { - dst.WriteString(strconv.QuoteRune(rune(byte(val)))) - return n - } - } - case r == 'x': - val := 0 - n := 2 - for _, v := range in[2:] { - r = v.Rune - if !isHex(r) { - l.errChar(v, "non-hex character in escape sequence: %c", r) - return n - } - val = val<<4 + hexNibble(r) - - n++ - if n == 4 { - dst.WriteString(strconv.QuoteRune(rune(byte(val)))) - return n - } - } - case r == 'u': - r := rune(hexNibble(in[2].Rune)<<12 | - hexNibble(in[3].Rune)<<8 | - hexNibble(in[4].Rune)<<4 | - hexNibble(in[5].Rune)) - if !isValidRune(r) { - l.errChar(l.First, "escape sequence is invalid Unicode code point") - } - dst.WriteString(strconv.QuoteRune(r)) - return 6 - case r == 'U': - r := rune(hexNibble(in[2].Rune)<<28 | - hexNibble(in[3].Rune)<<24 | - hexNibble(in[4].Rune)<<20 | - hexNibble(in[5].Rune)<<16 | - hexNibble(in[6].Rune)<<12 | - hexNibble(in[7].Rune)<<8 | - hexNibble(in[8].Rune)<<4 | - hexNibble(in[9].Rune)) - if !isValidRune(r) { - l.errChar(l.First, "escape sequence is invalid Unicode code point") - } - dst.WriteString(strconv.QuoteRune(r)) - return 10 - } - panic("internal error") -} - -func (l *lexer) parseActionValue(pos token.Pos, src string) *ActionValue { - src0 := src - if !strings.HasPrefix(src, "$") { - return &ActionValue{Type: ActionValueGo, Src: src0, Pos: pos} - } - - if src == "$$" { - return &ActionValue{Type: ActionValueDlrDlr, Src: src0, Pos: pos} - } - - var tag string - - src = src[1:] // Remove leading $ - if strings.HasPrefix(src, "<") { - i := strings.Index(src, ">") - if i < 0 { - panic("internal error") - } - - tag = src[len("<"):i] - src = src[i+1:] - } - - if src == "$" { - return &ActionValue{Type: ActionValueDlrTagDlr, Tag: tag, Src: src0, Pos: pos} - } - - n, err := strconv.ParseInt(src, 10, 31) - if err != nil { - l.err(pos, "%v: %s", err, src) - return nil - } - - if tag != "" { - return &ActionValue{Type: ActionValueDlrTagNum, Tag: tag, Num: int(n), Src: src0, Pos: pos} - } - - return &ActionValue{Type: ActionValueDlrNum, Num: int(n), Src: src0, Pos: pos} -} - -func (l *lexer) tokenBuilder(buf *bytes.Buffer) { - in := l.Token() - switch r := in[0].Rune; { - case r == '\'': - r := in[1].Rune - if r == '\\' { - l.byteValue(buf, in[1:], '"') - return - } - - if r == '\'' { - l.errChar(in[1], "empty character literal or unescaped ' in character literal") - } - buf.WriteString(strconv.QuoteRune(r)) - default: - for _, c := range in { - buf.WriteRune(c.Rune) - } - } -} - -func (l *lexer) ident(t *Token) interface{} { - s := t.Val - if s[0] == '\'' { - s, err := strconv.Unquote(s) - if err != nil && l != nil { - l.err(t.Pos(), "%v", err) - return 0 - } - - return int([]rune(s)[0]) - } - - return s -} - -func (l *lexer) number(t *Token) int { - n, err := strconv.ParseUint(t.Val, 10, 31) - if err != nil { - l.err(t.Pos(), "%v", err) - } - return int(n) -} - -func isValidRune(r rune) bool { - return !(r >= 0xd800 && r <= 0xdfff || r > 0x10ffff) -} - -func isHex(r rune) bool { - return r >= '0' && r <= '9' || r >= 'a' && r <= 'f' || r >= 'A' && r <= 'F' -} - -func hexNibble(r rune) int { - if r <= '9' { - return int(r) - '0' - } - - if r >= 'a' { - return int(r) - 'a' + 10 - } - - return int(r) - 'A' + 10 -} - -func runeClass(r rune) int { - if r >= 0 && r < 0x80 { - return int(r) - } - - if r == lex.RuneEOF { - return ccEOF - } - - return ccOther -} - -func exampleAST(rule int, src string) interface{} { - r := bytes.NewBufferString(src) - file := token.NewFileSet().AddFile("example.y", -1, len(src)) - lx, err := newLexer(file, r) - if err != nil { - return fmt.Errorf("failed: %v", err) - } - - lx.exampleRule = rule - yyParse(lx) - return lx.example -} - -func prettyString(v interface{}) string { - var b bytes.Buffer - prettyPrint(&b, v) - return b.String() -} - -func prettyPrint(w io.Writer, v interface{}) { - if v == nil { - return - } - - f := strutil.IndentFormatter(w, "· ") - - defer func() { - if e := recover(); e != nil { - f.Format("\npanic: %v", e) - } - }() - - prettyPrint0(nil, f, "", "", v) -} - -func prettyPrint0(protect map[interface{}]struct{}, sf strutil.Formatter, prefix, suffix string, v interface{}) { - if v == nil { - return - } - - switch x := v.(type) { - case *Token: - if x == nil { - return - } - - sf.Format("%s%v"+suffix, prefix, x.String()) - return - } - - rt := reflect.TypeOf(v) - rv := reflect.ValueOf(v) - switch rt.Kind() { - case reflect.Slice: - if rv.Len() == 0 { - return - } - - sf.Format("%s[]%T{ // len %d%i\n", prefix, rv.Index(0).Interface(), rv.Len()) - for i := 0; i < rv.Len(); i++ { - prettyPrint0(protect, sf, fmt.Sprintf("%d: ", i), ",\n", rv.Index(i).Interface()) - } - sf.Format("%u}" + suffix) - case reflect.Struct: - sf.Format("%s%T{%i\n", prefix, v) - for i := 0; i < rt.NumField(); i++ { - f := rv.Field(i) - if !f.CanInterface() { - continue - } - - prettyPrint0(protect, sf, fmt.Sprintf("%s: ", rt.Field(i).Name), ",\n", f.Interface()) - } - sf.Format("%u}" + suffix) - case reflect.Ptr: - if rv.IsNil() { - return - } - - rvi := rv.Interface() - if _, ok := protect[rvi]; ok { - sf.Format("%s&%T{ /* recursive/repetitive pointee not shown */ }"+suffix, prefix, rv.Elem().Interface()) - return - } - - if protect == nil { - protect = map[interface{}]struct{}{} - } - protect[rvi] = struct{}{} - prettyPrint0(protect, sf, prefix+"&", suffix, rv.Elem().Interface()) - case reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int8: - if v := rv.Int(); v != 0 { - sf.Format("%s%v"+suffix, prefix, v) - } - case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint8: - if v := rv.Uint(); v != 0 { - sf.Format("%s%v"+suffix, prefix, rv.Uint()) - } - case reflect.Bool: - if v := rv.Bool(); v { - sf.Format("%s%v"+suffix, prefix, rv.Bool()) - } - case reflect.String: - s := rv.Interface().(string) - if s == "" { - return - } - - sf.Format("%s%q"+suffix, prefix, s) - case reflect.Map: - keys := rv.MapKeys() - if len(keys) == 0 { - return - } - - var buf bytes.Buffer - nf := strutil.IndentFormatter(&buf, "· ") - var skeys []string - for i, k := range keys { - prettyPrint0(protect, nf, "", "", k.Interface()) - skeys = append(skeys, fmt.Sprintf("%s%10d", buf.Bytes(), i)) - } - sort.Strings(skeys) - sf.Format("%s%T{%i\n", prefix, v) - for _, k := range skeys { - si := strings.TrimSpace(k[len(k)-10:]) - k = k[:len(k)-10] - n, _ := strconv.ParseUint(si, 10, 64) - mv := rv.MapIndex(keys[n]) - prettyPrint0(protect, sf, fmt.Sprintf("%s: ", k), ",\n", mv.Interface()) - } - sf.Format("%u}" + suffix) - default: - panic(fmt.Sprintf("prettyPrint: missing support for reflect.Kind == %v", rt.Kind())) - } -} - -func (r *Rule) collect() { - for n := r.RuleItemList; n != nil; n = n.RuleItemList { - switch n.Case { - case 0: // /* empty */ - return - case 1: // RuleItemList IDENTIFIER - r.Body = append(r.Body, (*lexer)(nil).ident(n.Token)) - case 2: // RuleItemList Action - r.Body = append(r.Body, n.Action) - case 3: // RuleItemList STRING_LITERAL - r.Body = append(r.Body, n.Token.Val) - } - } - p := r.Precedence - if p == nil { - return - } - - for p != nil && p.Case == 3 { // Precedence ';' - p = p.Precedence - } - - if p != nil && p.Action != nil { - r.Body = append(r.Body, p.Action) - } -} diff --git a/vendor/github.com/cznic/parser/yacc/parser.go b/vendor/github.com/cznic/parser/yacc/parser.go deleted file mode 100644 index c4f762f895759..0000000000000 --- a/vendor/github.com/cznic/parser/yacc/parser.go +++ /dev/null @@ -1,938 +0,0 @@ -// CAUTION: Generated file - DO NOT EDIT. - -// Copyright 2015 The parser Authors. All rights reserved. Use -// of this source code is governed by a BSD-style license that can be found in -// the LICENSE file. -// -// This is a derived work base on the original at -// -// http://pubs.opengroup.org/onlinepubs/009695399/utilities/yacc.html -// -// The original work is -// -// Copyright © 2001-2004 The IEEE and The Open Group, All Rights reserved. -// -// Grammar for the input to yacc. - -package parser - -import __yyfmt__ "fmt" - -import ( - "go/token" -) - -type yySymType struct { - yys int - node Node - Token *Token -} - -type yyXError struct { - state, xsym int -} - -const ( - yyDefault = 57366 - yyEofCode = 57344 - COMMENT = 57346 - C_IDENTIFIER = 57347 - ERROR_VERBOSE = 57348 - IDENTIFIER = 57349 - LCURL = 57350 - LEFT = 57351 - MARK = 57352 - NONASSOC = 57353 - NUMBER = 57354 - PREC = 57355 - PRECEDENCE = 57356 - RCURL = 57357 - RIGHT = 57358 - START = 57359 - STRING_LITERAL = 57360 - TOKEN = 57361 - TYPE = 57362 - UNION = 57363 - yyErrCode = 57345 - - yyMaxDepth = 200 - yyTabOfs = -42 -) - -var ( - yyXLAT = map[int]int{ - 57352: 0, // MARK (43x) - 57349: 1, // IDENTIFIER (32x) - 57348: 2, // ERROR_VERBOSE (25x) - 57350: 3, // LCURL (25x) - 57351: 4, // LEFT (25x) - 57353: 5, // NONASSOC (25x) - 57356: 6, // PRECEDENCE (25x) - 57358: 7, // RIGHT (25x) - 57359: 8, // START (25x) - 57361: 9, // TOKEN (25x) - 57362: 10, // TYPE (25x) - 57363: 11, // UNION (25x) - 57344: 12, // $end (21x) - 57347: 13, // C_IDENTIFIER (19x) - 124: 14, // '|' (18x) - 59: 15, // ';' (16x) - 57360: 16, // STRING_LITERAL (12x) - 123: 17, // '{' (11x) - 57355: 18, // PREC (10x) - 44: 19, // ',' (9x) - 60: 20, // '<' (7x) - 57367: 21, // Action (4x) - 57371: 22, // Name (3x) - 57373: 23, // Precedence (3x) - 57376: 24, // RuleItemList (3x) - 125: 25, // '}' (2x) - 57370: 26, // LiteralStringOpt (2x) - 57357: 27, // RCURL (2x) - 57364: 28, // $@1 (1x) - 57365: 29, // $@2 (1x) - 62: 30, // '>' (1x) - 57368: 31, // Definition (1x) - 57369: 32, // DefinitionList (1x) - 57372: 33, // NameList (1x) - 57354: 34, // NUMBER (1x) - 57374: 35, // ReservedWord (1x) - 57375: 36, // Rule (1x) - 57377: 37, // RuleList (1x) - 57378: 38, // Specification (1x) - 57379: 39, // Tag (1x) - 57380: 40, // Tail (1x) - 57366: 41, // $default (0x) - 57346: 42, // COMMENT (0x) - 57345: 43, // error (0x) - } - - yySymNames = []string{ - "MARK", - "IDENTIFIER", - "ERROR_VERBOSE", - "LCURL", - "LEFT", - "NONASSOC", - "PRECEDENCE", - "RIGHT", - "START", - "TOKEN", - "TYPE", - "UNION", - "$end", - "C_IDENTIFIER", - "'|'", - "';'", - "STRING_LITERAL", - "'{'", - "PREC", - "','", - "'<'", - "Action", - "Name", - "Precedence", - "RuleItemList", - "'}'", - "LiteralStringOpt", - "RCURL", - "$@1", - "$@2", - "'>'", - "Definition", - "DefinitionList", - "NameList", - "NUMBER", - "ReservedWord", - "Rule", - "RuleList", - "Specification", - "Tag", - "Tail", - "$default", - "COMMENT", - "error", - } - - yyTokenLiteralStrings = map[int]string{ - 57352: "%%", - 57349: "identifier", - 57348: "%error-verbose", - 57350: "%{", - 57351: "%left", - 57353: "%nonassoc", - 57356: "%precedence", - 57358: "%right", - 57359: "%start", - 57361: "%token", - 57362: "%type", - 57363: "%union", - 57347: "rule name", - 57360: "string literal", - 57355: "%prec", - 57357: "%}", - 57354: "number", - } - - yyReductions = map[int]struct{ xsym, components int }{ - 0: {0, 1}, - 1: {28, 0}, - 2: {21, 3}, - 3: {31, 2}, - 4: {31, 1}, - 5: {29, 0}, - 6: {31, 3}, - 7: {31, 3}, - 8: {31, 2}, - 9: {31, 1}, - 10: {32, 0}, - 11: {32, 2}, - 12: {26, 0}, - 13: {26, 1}, - 14: {22, 2}, - 15: {22, 3}, - 16: {33, 1}, - 17: {33, 2}, - 18: {33, 3}, - 19: {23, 0}, - 20: {23, 2}, - 21: {23, 3}, - 22: {23, 2}, - 23: {35, 1}, - 24: {35, 1}, - 25: {35, 1}, - 26: {35, 1}, - 27: {35, 1}, - 28: {35, 1}, - 29: {36, 3}, - 30: {36, 3}, - 31: {24, 0}, - 32: {24, 2}, - 33: {24, 2}, - 34: {24, 2}, - 35: {37, 3}, - 36: {37, 2}, - 37: {38, 4}, - 38: {39, 0}, - 39: {39, 3}, - 40: {40, 1}, - 41: {40, 0}, - } - - yyXErrors = map[yyXError]string{ - yyXError{0, 12}: "invalid empty input", - yyXError{1, -1}: "expected $end", - yyXError{21, -1}: "expected $end", - yyXError{22, -1}: "expected $end", - yyXError{5, -1}: "expected %}", - yyXError{53, -1}: "expected %}", - yyXError{41, -1}: "expected '>'", - yyXError{24, -1}: "expected '}'", - yyXError{33, -1}: "expected '}'", - yyXError{23, -1}: "expected Action or Precedence or one of [$end, %%, %prec, ';', '{', '|', identifier, rule name, string literal]", - yyXError{35, -1}: "expected Action or Precedence or one of [$end, %%, %prec, ';', '{', '|', identifier, rule name, string literal]", - yyXError{37, -1}: "expected Action or Precedence or one of [$end, %%, %prec, ';', '{', '|', identifier, rule name, string literal]", - yyXError{31, -1}: "expected Action or one of [$end, %%, ';', '{', '|', rule name]", - yyXError{2, -1}: "expected Definition or one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{]", - yyXError{44, -1}: "expected LiteralStringOpt or one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, ',', identifier, number, string literal]", - yyXError{48, -1}: "expected LiteralStringOpt or one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, ',', identifier, string literal]", - yyXError{51, -1}: "expected Name or identifier", - yyXError{43, -1}: "expected Name or one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, ',', identifier]", - yyXError{6, -1}: "expected NameList or Tag or one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, '<', identifier]", - yyXError{39, -1}: "expected NameList or one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, identifier]", - yyXError{16, -1}: "expected Precedence or RuleItemList or one of [$end, %%, %prec, ';', '{', '|', identifier, rule name, string literal]", - yyXError{18, -1}: "expected Precedence or RuleItemList or one of [$end, %%, %prec, ';', '{', '|', identifier, rule name, string literal]", - yyXError{19, -1}: "expected Precedence or RuleItemList or one of [$end, %%, %prec, ';', '{', '|', identifier, rule name, string literal]", - yyXError{17, -1}: "expected Rule or Tail or one of [$end, %%, '|', rule name]", - yyXError{15, -1}: "expected RuleList or rule name", - yyXError{0, -1}: "expected Specification or one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{]", - yyXError{3, -1}: "expected identifier", - yyXError{25, -1}: "expected identifier", - yyXError{40, -1}: "expected identifier", - yyXError{27, -1}: "expected one of [$end, %%, %prec, ';', '{', '|', identifier, rule name, string literal]", - yyXError{28, -1}: "expected one of [$end, %%, %prec, ';', '{', '|', identifier, rule name, string literal]", - yyXError{29, -1}: "expected one of [$end, %%, %prec, ';', '{', '|', identifier, rule name, string literal]", - yyXError{34, -1}: "expected one of [$end, %%, %prec, ';', '{', '|', identifier, rule name, string literal]", - yyXError{26, -1}: "expected one of [$end, %%, ';', '|', rule name]", - yyXError{30, -1}: "expected one of [$end, %%, ';', '|', rule name]", - yyXError{32, -1}: "expected one of [$end, %%, ';', '|', rule name]", - yyXError{36, -1}: "expected one of [$end, %%, ';', '|', rule name]", - yyXError{38, -1}: "expected one of [$end, %%, ';', '|', rule name]", - yyXError{20, -1}: "expected one of [$end, %%, '|', rule name]", - yyXError{45, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, ',', identifier]", - yyXError{46, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, ',', identifier]", - yyXError{47, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, ',', identifier]", - yyXError{49, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, ',', identifier]", - yyXError{50, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, ',', identifier]", - yyXError{52, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, ',', identifier]", - yyXError{9, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, '<', identifier]", - yyXError{10, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, '<', identifier]", - yyXError{11, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, '<', identifier]", - yyXError{12, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, '<', identifier]", - yyXError{13, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, '<', identifier]", - yyXError{14, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, '<', identifier]", - yyXError{42, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{, identifier]", - yyXError{4, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{]", - yyXError{7, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{]", - yyXError{8, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{]", - yyXError{54, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{]", - yyXError{55, -1}: "expected one of [%%, %error-verbose, %left, %nonassoc, %precedence, %right, %start, %token, %type, %union, %{]", - } - - yyParseTab = [56][]uint8{ - // 0 - {32, 2: 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32: 44, 38: 43}, - {12: 42}, - {57, 2: 49, 47, 52, 54, 56, 53, 45, 51, 55, 46, 31: 50, 35: 48}, - {1: 97}, - {38, 2: 38, 38, 38, 38, 38, 38, 38, 38, 38, 38}, - // 5 - {27: 37, 29: 95}, - {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 20: 82, 39: 81}, - {33, 2: 33, 33, 33, 33, 33, 33, 33, 33, 33, 33}, - {31, 2: 31, 31, 31, 31, 31, 31, 31, 31, 31, 31}, - {19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20: 19}, - // 10 - {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 20: 18}, - {17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 20: 17}, - {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 20: 16}, - {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 20: 15}, - {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 20: 14}, - // 15 - {13: 58, 37: 59}, - {11, 11, 12: 11, 11, 11, 11, 11, 11, 11, 24: 79}, - {64, 12: 1, 60, 61, 36: 62, 40: 63}, - {11, 11, 12: 11, 11, 11, 11, 11, 11, 11, 24: 77}, - {11, 11, 12: 11, 11, 11, 11, 11, 11, 11, 24: 65}, - // 20 - {6, 12: 6, 6, 6}, - {12: 5}, - {12: 2}, - {23, 69, 12: 23, 23, 23, 23, 71, 66, 67, 21: 70, 23: 68}, - {25: 41, 28: 75}, - // 25 - {1: 73}, - {12, 12: 12, 12, 12, 72}, - {10, 10, 12: 10, 10, 10, 10, 10, 10, 10}, - {9, 9, 12: 9, 9, 9, 9, 9, 9, 9}, - {8, 8, 12: 8, 8, 8, 8, 8, 8, 8}, - // 30 - {20, 12: 20, 20, 20, 20}, - {22, 12: 22, 22, 22, 22, 17: 66, 21: 74}, - {21, 12: 21, 21, 21, 21}, - {25: 76}, - {40, 40, 12: 40, 40, 40, 40, 40, 40, 40}, - // 35 - {23, 69, 12: 23, 23, 23, 23, 71, 66, 67, 21: 70, 23: 78}, - {13, 12: 13, 13, 13, 72}, - {23, 69, 12: 23, 23, 23, 23, 71, 66, 67, 21: 70, 23: 80}, - {7, 12: 7, 7, 7, 72}, - {34, 86, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 22: 87, 33: 85}, - // 40 - {1: 83}, - {30: 84}, - {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - {35, 86, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 19: 93, 22: 92}, - {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 16: 88, 19: 30, 26: 89, 34: 90}, - // 45 - {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 19: 26}, - {29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 19: 29}, - {28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 19: 28}, - {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 16: 88, 19: 30, 26: 91}, - {27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 19: 27}, - // 50 - {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 19: 25}, - {1: 86, 22: 94}, - {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 19: 24}, - {27: 96}, - {36, 2: 36, 36, 36, 36, 36, 36, 36, 36, 36, 36}, - // 55 - {39, 2: 39, 39, 39, 39, 39, 39, 39, 39, 39, 39}, - } -) - -var yyDebug = 0 - -type yyLexer interface { - Lex(lval *yySymType) int - Error(s string) -} - -type yyLexerEx interface { - yyLexer - Reduced(rule, state int, lval *yySymType) bool -} - -func yySymName(c int) (s string) { - x, ok := yyXLAT[c] - if ok { - return yySymNames[x] - } - - if c < 0x7f { - return __yyfmt__.Sprintf("'%c'", c) - } - - return __yyfmt__.Sprintf("%d", c) -} - -func yylex1(yylex yyLexer, lval *yySymType) (n int) { - n = yylex.Lex(lval) - if n <= 0 { - n = yyEofCode - } - if yyDebug >= 3 { - __yyfmt__.Printf("\nlex %s(%#x %d), prettyString(lval.Token): %v\n", yySymName(n), n, n, prettyString(lval.Token)) - } - return n -} - -func yyParse(yylex yyLexer) int { - const yyError = 43 - - yyEx, _ := yylex.(yyLexerEx) - var yyn int - var yylval yySymType - var yyVAL yySymType - yyS := make([]yySymType, 200) - - Nerrs := 0 /* number of errors */ - Errflag := 0 /* error recovery flag */ - yyerrok := func() { - if yyDebug >= 2 { - __yyfmt__.Printf("yyerrok()\n") - } - Errflag = 0 - } - _ = yyerrok - yystate := 0 - yychar := -1 - var yyxchar int - var yyshift int - yyp := -1 - goto yystack - -ret0: - return 0 - -ret1: - return 1 - -yystack: - /* put a state and value onto the stack */ - yyp++ - if yyp >= len(yyS) { - nyys := make([]yySymType, len(yyS)*2) - copy(nyys, yyS) - yyS = nyys - } - yyS[yyp] = yyVAL - yyS[yyp].yys = yystate - -yynewstate: - if yychar < 0 { - yychar = yylex1(yylex, &yylval) - var ok bool - if yyxchar, ok = yyXLAT[yychar]; !ok { - yyxchar = len(yySymNames) // > tab width - } - } - if yyDebug >= 4 { - var a []int - for _, v := range yyS[:yyp+1] { - a = append(a, v.yys) - } - __yyfmt__.Printf("state stack %v\n", a) - } - row := yyParseTab[yystate] - yyn = 0 - if yyxchar < len(row) { - if yyn = int(row[yyxchar]); yyn != 0 { - yyn += yyTabOfs - } - } - switch { - case yyn > 0: // shift - yychar = -1 - yyVAL = yylval - yystate = yyn - yyshift = yyn - if yyDebug >= 2 { - __yyfmt__.Printf("shift, and goto state %d\n", yystate) - } - if Errflag > 0 { - Errflag-- - } - goto yystack - case yyn < 0: // reduce - case yystate == 1: // accept - if yyDebug >= 2 { - __yyfmt__.Println("accept") - } - goto ret0 - } - - if yyn == 0 { - /* error ... attempt to resume parsing */ - switch Errflag { - case 0: /* brand new error */ - if yyDebug >= 1 { - __yyfmt__.Printf("no action for %s in state %d\n", yySymName(yychar), yystate) - } - msg, ok := yyXErrors[yyXError{yystate, yyxchar}] - if !ok { - msg, ok = yyXErrors[yyXError{yystate, -1}] - } - if !ok && yyshift != 0 { - msg, ok = yyXErrors[yyXError{yyshift, yyxchar}] - } - if !ok { - msg, ok = yyXErrors[yyXError{yyshift, -1}] - } - if yychar > 0 { - ls := yyTokenLiteralStrings[yychar] - if ls == "" { - ls = yySymName(yychar) - } - if ls != "" { - switch { - case msg == "": - msg = __yyfmt__.Sprintf("unexpected %s", ls) - default: - msg = __yyfmt__.Sprintf("unexpected %s, %s", ls, msg) - } - } - } - if msg == "" { - msg = "syntax error" - } - yylex.Error(msg) - Nerrs++ - fallthrough - - case 1, 2: /* incompletely recovered error ... try again */ - Errflag = 3 - - /* find a state where "error" is a legal shift action */ - for yyp >= 0 { - row := yyParseTab[yyS[yyp].yys] - if yyError < len(row) { - yyn = int(row[yyError]) + yyTabOfs - if yyn > 0 { // hit - if yyDebug >= 2 { - __yyfmt__.Printf("error recovery found error shift in state %d\n", yyS[yyp].yys) - } - yystate = yyn /* simulate a shift of "error" */ - goto yystack - } - } - - /* the current p has no shift on "error", pop stack */ - if yyDebug >= 2 { - __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys) - } - yyp-- - } - /* there is no state on the stack with an error shift ... abort */ - if yyDebug >= 2 { - __yyfmt__.Printf("error recovery failed\n") - } - goto ret1 - - case 3: /* no shift yet; clobber input char */ - if yyDebug >= 2 { - __yyfmt__.Printf("error recovery discards %s\n", yySymName(yychar)) - } - if yychar == yyEofCode { - goto ret1 - } - - yychar = -1 - goto yynewstate /* try again in the same state */ - } - } - - r := -yyn - x0 := yyReductions[r] - x, n := x0.xsym, x0.components - yypt := yyp - _ = yypt // guard against "declared and not used" - - yyp -= n - if yyp+1 >= len(yyS) { - nyys := make([]yySymType, len(yyS)*2) - copy(nyys, yyS) - yyS = nyys - } - yyVAL = yyS[yyp+1] - - /* consult goto table to find next state */ - exState := yystate - yystate = int(yyParseTab[yyS[yyp].yys][x]) + yyTabOfs - /* reduction by production r */ - if yyDebug >= 2 { - __yyfmt__.Printf("reduce using rule %v (%s), and goto state %d\n", r, yySymNames[x], yystate) - } - - switch r { - case 1: - { - lx := yylex.(*lexer) - lx.values2 = append([]string(nil), lx.values...) - lx.positions2 = append([]token.Pos(nil), lx.positions...) - } - case 2: - { - lx := yylex.(*lexer) - lhs := &Action{ - Token: yyS[yypt-2].Token, - Token2: yyS[yypt-0].Token, - } - yyVAL.node = lhs - for i, v := range lx.values2 { - a := lx.parseActionValue(lx.positions2[i], v) - if a != nil { - lhs.Values = append(lhs.Values, a) - } - } - } - case 3: - { - yyVAL.node = &Definition{ - Token: yyS[yypt-1].Token, - Token2: yyS[yypt-0].Token, - } - } - case 4: - { - lx := yylex.(*lexer) - lhs := &Definition{ - Case: 1, - Token: yyS[yypt-0].Token, - } - yyVAL.node = lhs - lhs.Value = lx.value - } - case 5: - { - lx := yylex.(*lexer) - lx.pos2 = lx.pos - lx.value2 = lx.value - } - case 6: - { - lx := yylex.(*lexer) - lhs := &Definition{ - Case: 2, - Token: yyS[yypt-2].Token, - Token2: yyS[yypt-0].Token, - } - yyVAL.node = lhs - lhs.Value = lx.value2 - } - case 7: - { - lhs := &Definition{ - Case: 3, - ReservedWord: yyS[yypt-2].node.(*ReservedWord), - Tag: yyS[yypt-1].node.(*Tag), - NameList: yyS[yypt-0].node.(*NameList).reverse(), - } - yyVAL.node = lhs - for n := lhs.NameList; n != nil; n = n.NameList { - lhs.Nlist = append(lhs.Nlist, n.Name) - } - } - case 8: - { - yyVAL.node = &Definition{ - Case: 4, - ReservedWord: yyS[yypt-1].node.(*ReservedWord), - Tag: yyS[yypt-0].node.(*Tag), - } - } - case 9: - { - yyVAL.node = &Definition{ - Case: 5, - Token: yyS[yypt-0].Token, - } - } - case 10: - { - yyVAL.node = (*DefinitionList)(nil) - } - case 11: - { - lx := yylex.(*lexer) - lhs := &DefinitionList{ - DefinitionList: yyS[yypt-1].node.(*DefinitionList), - Definition: yyS[yypt-0].node.(*Definition), - } - yyVAL.node = lhs - lx.defs = append(lx.defs, lhs.Definition) - } - case 12: - { - yyVAL.node = (*LiteralStringOpt)(nil) - } - case 13: - { - yyVAL.node = &LiteralStringOpt{ - Token: yyS[yypt-0].Token, - } - } - case 14: - { - lx := yylex.(*lexer) - lhs := &Name{ - Token: yyS[yypt-1].Token, - LiteralStringOpt: yyS[yypt-0].node.(*LiteralStringOpt), - } - yyVAL.node = lhs - lhs.Identifier = lx.ident(lhs.Token) - lhs.Number = -1 - } - case 15: - { - lx := yylex.(*lexer) - lhs := &Name{ - Case: 1, - Token: yyS[yypt-2].Token, - Token2: yyS[yypt-1].Token, - LiteralStringOpt: yyS[yypt-0].node.(*LiteralStringOpt), - } - yyVAL.node = lhs - lhs.Identifier = lx.ident(lhs.Token) - lhs.Number = lx.number(lhs.Token2) - } - case 16: - { - yyVAL.node = &NameList{ - Name: yyS[yypt-0].node.(*Name), - } - } - case 17: - { - yyVAL.node = &NameList{ - Case: 1, - NameList: yyS[yypt-1].node.(*NameList), - Name: yyS[yypt-0].node.(*Name), - } - } - case 18: - { - yyVAL.node = &NameList{ - Case: 2, - NameList: yyS[yypt-2].node.(*NameList), - Token: yyS[yypt-1].Token, - Name: yyS[yypt-0].node.(*Name), - } - } - case 19: - { - yyVAL.node = (*Precedence)(nil) - } - case 20: - { - lx := yylex.(*lexer) - lhs := &Precedence{ - Case: 1, - Token: yyS[yypt-1].Token, - Token2: yyS[yypt-0].Token, - } - yyVAL.node = lhs - lhs.Identifier = lx.ident(lhs.Token2) - } - case 21: - { - lx := yylex.(*lexer) - lhs := &Precedence{ - Case: 2, - Token: yyS[yypt-2].Token, - Token2: yyS[yypt-1].Token, - Action: yyS[yypt-0].node.(*Action), - } - yyVAL.node = lhs - lhs.Identifier = lx.ident(lhs.Token2) - } - case 22: - { - yyVAL.node = &Precedence{ - Case: 3, - Precedence: yyS[yypt-1].node.(*Precedence), - Token: yyS[yypt-0].Token, - } - } - case 23: - { - yyVAL.node = &ReservedWord{ - Token: yyS[yypt-0].Token, - } - } - case 24: - { - yyVAL.node = &ReservedWord{ - Case: 1, - Token: yyS[yypt-0].Token, - } - } - case 25: - { - yyVAL.node = &ReservedWord{ - Case: 2, - Token: yyS[yypt-0].Token, - } - } - case 26: - { - yyVAL.node = &ReservedWord{ - Case: 3, - Token: yyS[yypt-0].Token, - } - } - case 27: - { - yyVAL.node = &ReservedWord{ - Case: 4, - Token: yyS[yypt-0].Token, - } - } - case 28: - { - yyVAL.node = &ReservedWord{ - Case: 5, - Token: yyS[yypt-0].Token, - } - } - case 29: - { - lx := yylex.(*lexer) - lhs := &Rule{ - Token: yyS[yypt-2].Token, - RuleItemList: yyS[yypt-1].node.(*RuleItemList).reverse(), - Precedence: yyS[yypt-0].node.(*Precedence), - } - yyVAL.node = lhs - lx.ruleName = lhs.Token - lhs.Name = lhs.Token - } - case 30: - { - lx := yylex.(*lexer) - lhs := &Rule{ - Case: 1, - Token: yyS[yypt-2].Token, - RuleItemList: yyS[yypt-1].node.(*RuleItemList).reverse(), - Precedence: yyS[yypt-0].node.(*Precedence), - } - yyVAL.node = lhs - lhs.Name = lx.ruleName - } - case 31: - { - yyVAL.node = (*RuleItemList)(nil) - } - case 32: - { - yyVAL.node = &RuleItemList{ - Case: 1, - RuleItemList: yyS[yypt-1].node.(*RuleItemList), - Token: yyS[yypt-0].Token, - } - } - case 33: - { - yyVAL.node = &RuleItemList{ - Case: 2, - RuleItemList: yyS[yypt-1].node.(*RuleItemList), - Action: yyS[yypt-0].node.(*Action), - } - } - case 34: - { - yyVAL.node = &RuleItemList{ - Case: 3, - RuleItemList: yyS[yypt-1].node.(*RuleItemList), - Token: yyS[yypt-0].Token, - } - } - case 35: - { - lx := yylex.(*lexer) - lhs := &RuleList{ - Token: yyS[yypt-2].Token, - RuleItemList: yyS[yypt-1].node.(*RuleItemList).reverse(), - Precedence: yyS[yypt-0].node.(*Precedence), - } - yyVAL.node = lhs - lx.ruleName = lhs.Token - rule := &Rule{ - Token: lhs.Token, - Name: lhs.Token, - RuleItemList: lhs.RuleItemList, - Precedence: lhs.Precedence, - } - rule.collect() - lx.rules = append(lx.rules, rule) - } - case 36: - { - lx := yylex.(*lexer) - lhs := &RuleList{ - Case: 1, - RuleList: yyS[yypt-1].node.(*RuleList), - Rule: yyS[yypt-0].node.(*Rule), - } - yyVAL.node = lhs - rule := lhs.Rule - rule.collect() - lx.rules = append(lx.rules, rule) - } - case 37: - { - lx := yylex.(*lexer) - lhs := &Specification{ - DefinitionList: yyS[yypt-3].node.(*DefinitionList).reverse(), - Token: yyS[yypt-2].Token, - RuleList: yyS[yypt-1].node.(*RuleList).reverse(), - Tail: yyS[yypt-0].node.(*Tail), - } - yyVAL.node = lhs - lhs.Defs = lx.defs - lhs.Rules = lx.rules - lx.spec = lhs - } - case 38: - { - yyVAL.node = (*Tag)(nil) - } - case 39: - { - yyVAL.node = &Tag{ - Token: yyS[yypt-2].Token, - Token2: yyS[yypt-1].Token, - Token3: yyS[yypt-0].Token, - } - } - case 40: - { - lx := yylex.(*lexer) - lhs := &Tail{ - Token: yyS[yypt-0].Token, - } - yyVAL.node = lhs - lhs.Value = lx.value - } - case 41: - { - yyVAL.node = (*Tail)(nil) - } - - } - - if yyEx != nil && yyEx.Reduced(r, exState, &yyVAL) { - return -1 - } - goto yystack /* stack new state and value */ -} diff --git a/vendor/github.com/cznic/parser/yacc/scanner.go b/vendor/github.com/cznic/parser/yacc/scanner.go deleted file mode 100644 index 03c53066f039a..0000000000000 --- a/vendor/github.com/cznic/parser/yacc/scanner.go +++ /dev/null @@ -1,856 +0,0 @@ -// CAUTION: Generated file - DO NOT EDIT. - -// Copyright 2015 The parser Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// CAUTION: Generated file (unless this is y.l) - DO NOT EDIT! - -package parser - -import ( - "github.com/cznic/golex/lex" -) - -func (l *lexer) scan() lex.Char { - c := l.Enter() - -yystate0: - yyrule := -1 - _ = yyrule - c = l.Rule0() - - goto yystart1 - - goto yystate0 // silence unused label error - goto yyAction // silence unused label error -yyAction: - switch yyrule { - case 1: - goto yyrule1 - case 2: - goto yyrule2 - case 3: - goto yyrule3 - case 4: - goto yyrule4 - case 5: - goto yyrule5 - case 6: - goto yyrule6 - case 7: - goto yyrule7 - case 8: - goto yyrule8 - case 9: - goto yyrule9 - case 10: - goto yyrule10 - case 11: - goto yyrule11 - case 12: - goto yyrule12 - case 13: - goto yyrule13 - case 14: - goto yyrule14 - case 15: - goto yyrule15 - case 16: - goto yyrule16 - case 17: - goto yyrule17 - case 18: - goto yyrule18 - case 19: - goto yyrule19 - } - goto yystate1 // silence unused label error -yystate1: - c = l.Next() -yystart1: - switch { - default: - goto yyabort - case c == '"': - goto yystate3 - case c == '%': - goto yystate6 - case c == '/': - goto yystate71 - case c == '\'': - goto yystate68 - case c == '\t' || c == '\n' || c == '\f' || c == '\r' || c == ' ': - goto yystate2 - case c >= '0' && c <= '9': - goto yystate76 - case c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate77 - } - -yystate2: - c = l.Next() - yyrule = 1 - l.Mark() - goto yyrule1 - -yystate3: - c = l.Next() - switch { - default: - goto yyabort - case c == '"': - goto yystate4 - case c == '\\': - goto yystate5 - case c >= '\x01' && c <= '\t' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '!' || c >= '#' && c <= '[' || c >= ']' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate3 - } - -yystate4: - c = l.Next() - yyrule = 19 - l.Mark() - goto yyrule19 - -yystate5: - c = l.Next() - switch { - default: - goto yyabort - case c >= '\x01' && c <= '\t' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate3 - } - -yystate6: - c = l.Next() - switch { - default: - goto yyabort - case c == '%': - goto yystate7 - case c == 'e': - goto yystate8 - case c == 'l': - goto yystate21 - case c == 'n': - goto yystate25 - case c == 'p': - goto yystate33 - case c == 'r': - goto yystate43 - case c == 's': - goto yystate48 - case c == 't': - goto yystate53 - case c == 'u': - goto yystate61 - case c == '{': - goto yystate66 - case c == '}': - goto yystate67 - } - -yystate7: - c = l.Next() - yyrule = 6 - l.Mark() - goto yyrule6 - -yystate8: - c = l.Next() - switch { - default: - goto yyabort - case c == 'r': - goto yystate9 - } - -yystate9: - c = l.Next() - switch { - default: - goto yyabort - case c == 'r': - goto yystate10 - } - -yystate10: - c = l.Next() - switch { - default: - goto yyabort - case c == 'o': - goto yystate11 - } - -yystate11: - c = l.Next() - switch { - default: - goto yyabort - case c == 'r': - goto yystate12 - } - -yystate12: - c = l.Next() - switch { - default: - goto yyabort - case c == '-': - goto yystate13 - } - -yystate13: - c = l.Next() - switch { - default: - goto yyabort - case c == 'v': - goto yystate14 - } - -yystate14: - c = l.Next() - switch { - default: - goto yyabort - case c == 'e': - goto yystate15 - } - -yystate15: - c = l.Next() - switch { - default: - goto yyabort - case c == 'r': - goto yystate16 - } - -yystate16: - c = l.Next() - switch { - default: - goto yyabort - case c == 'b': - goto yystate17 - } - -yystate17: - c = l.Next() - switch { - default: - goto yyabort - case c == 'o': - goto yystate18 - } - -yystate18: - c = l.Next() - switch { - default: - goto yyabort - case c == 's': - goto yystate19 - } - -yystate19: - c = l.Next() - switch { - default: - goto yyabort - case c == 'e': - goto yystate20 - } - -yystate20: - c = l.Next() - yyrule = 16 - l.Mark() - goto yyrule16 - -yystate21: - c = l.Next() - switch { - default: - goto yyabort - case c == 'e': - goto yystate22 - } - -yystate22: - c = l.Next() - switch { - default: - goto yyabort - case c == 'f': - goto yystate23 - } - -yystate23: - c = l.Next() - switch { - default: - goto yyabort - case c == 't': - goto yystate24 - } - -yystate24: - c = l.Next() - yyrule = 7 - l.Mark() - goto yyrule7 - -yystate25: - c = l.Next() - switch { - default: - goto yyabort - case c == 'o': - goto yystate26 - } - -yystate26: - c = l.Next() - switch { - default: - goto yyabort - case c == 'n': - goto yystate27 - } - -yystate27: - c = l.Next() - switch { - default: - goto yyabort - case c == 'a': - goto yystate28 - } - -yystate28: - c = l.Next() - switch { - default: - goto yyabort - case c == 's': - goto yystate29 - } - -yystate29: - c = l.Next() - switch { - default: - goto yyabort - case c == 's': - goto yystate30 - } - -yystate30: - c = l.Next() - switch { - default: - goto yyabort - case c == 'o': - goto yystate31 - } - -yystate31: - c = l.Next() - switch { - default: - goto yyabort - case c == 'c': - goto yystate32 - } - -yystate32: - c = l.Next() - yyrule = 8 - l.Mark() - goto yyrule8 - -yystate33: - c = l.Next() - switch { - default: - goto yyabort - case c == 'r': - goto yystate34 - } - -yystate34: - c = l.Next() - switch { - default: - goto yyabort - case c == 'e': - goto yystate35 - } - -yystate35: - c = l.Next() - switch { - default: - goto yyabort - case c == 'c': - goto yystate36 - } - -yystate36: - c = l.Next() - yyrule = 9 - l.Mark() - switch { - default: - goto yyrule9 - case c == 'e': - goto yystate37 - } - -yystate37: - c = l.Next() - switch { - default: - goto yyabort - case c == 'd': - goto yystate38 - } - -yystate38: - c = l.Next() - switch { - default: - goto yyabort - case c == 'e': - goto yystate39 - } - -yystate39: - c = l.Next() - switch { - default: - goto yyabort - case c == 'n': - goto yystate40 - } - -yystate40: - c = l.Next() - switch { - default: - goto yyabort - case c == 'c': - goto yystate41 - } - -yystate41: - c = l.Next() - switch { - default: - goto yyabort - case c == 'e': - goto yystate42 - } - -yystate42: - c = l.Next() - yyrule = 10 - l.Mark() - goto yyrule10 - -yystate43: - c = l.Next() - switch { - default: - goto yyabort - case c == 'i': - goto yystate44 - } - -yystate44: - c = l.Next() - switch { - default: - goto yyabort - case c == 'g': - goto yystate45 - } - -yystate45: - c = l.Next() - switch { - default: - goto yyabort - case c == 'h': - goto yystate46 - } - -yystate46: - c = l.Next() - switch { - default: - goto yyabort - case c == 't': - goto yystate47 - } - -yystate47: - c = l.Next() - yyrule = 11 - l.Mark() - goto yyrule11 - -yystate48: - c = l.Next() - switch { - default: - goto yyabort - case c == 't': - goto yystate49 - } - -yystate49: - c = l.Next() - switch { - default: - goto yyabort - case c == 'a': - goto yystate50 - } - -yystate50: - c = l.Next() - switch { - default: - goto yyabort - case c == 'r': - goto yystate51 - } - -yystate51: - c = l.Next() - switch { - default: - goto yyabort - case c == 't': - goto yystate52 - } - -yystate52: - c = l.Next() - yyrule = 12 - l.Mark() - goto yyrule12 - -yystate53: - c = l.Next() - switch { - default: - goto yyabort - case c == 'o': - goto yystate54 - case c == 'y': - goto yystate58 - } - -yystate54: - c = l.Next() - switch { - default: - goto yyabort - case c == 'k': - goto yystate55 - } - -yystate55: - c = l.Next() - switch { - default: - goto yyabort - case c == 'e': - goto yystate56 - } - -yystate56: - c = l.Next() - switch { - default: - goto yyabort - case c == 'n': - goto yystate57 - } - -yystate57: - c = l.Next() - yyrule = 13 - l.Mark() - goto yyrule13 - -yystate58: - c = l.Next() - switch { - default: - goto yyabort - case c == 'p': - goto yystate59 - } - -yystate59: - c = l.Next() - switch { - default: - goto yyabort - case c == 'e': - goto yystate60 - } - -yystate60: - c = l.Next() - yyrule = 14 - l.Mark() - goto yyrule14 - -yystate61: - c = l.Next() - switch { - default: - goto yyabort - case c == 'n': - goto yystate62 - } - -yystate62: - c = l.Next() - switch { - default: - goto yyabort - case c == 'i': - goto yystate63 - } - -yystate63: - c = l.Next() - switch { - default: - goto yyabort - case c == 'o': - goto yystate64 - } - -yystate64: - c = l.Next() - switch { - default: - goto yyabort - case c == 'n': - goto yystate65 - } - -yystate65: - c = l.Next() - yyrule = 15 - l.Mark() - goto yyrule15 - -yystate66: - c = l.Next() - yyrule = 4 - l.Mark() - goto yyrule4 - -yystate67: - c = l.Next() - yyrule = 5 - l.Mark() - goto yyrule5 - -yystate68: - c = l.Next() - switch { - default: - goto yyabort - case c == '\'': - goto yystate69 - case c == '\\': - goto yystate70 - case c >= '\x01' && c <= '\t' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '&' || c >= '(' && c <= '[' || c >= ']' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate68 - } - -yystate69: - c = l.Next() - yyrule = 18 - l.Mark() - goto yyrule18 - -yystate70: - c = l.Next() - switch { - default: - goto yyabort - case c >= '\x01' && c <= '\t' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate68 - } - -yystate71: - c = l.Next() - switch { - default: - goto yyabort - case c == '*': - goto yystate72 - case c == '/': - goto yystate75 - } - -yystate72: - c = l.Next() - switch { - default: - goto yyabort - case c == '*': - goto yystate73 - case c >= '\x01' && c <= ')' || c >= '+' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate72 - } - -yystate73: - c = l.Next() - switch { - default: - goto yyabort - case c == '*': - goto yystate73 - case c == '/': - goto yystate74 - case c >= '\x01' && c <= ')' || c >= '+' && c <= '.' || c >= '0' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate72 - } - -yystate74: - c = l.Next() - yyrule = 3 - l.Mark() - goto yyrule3 - -yystate75: - c = l.Next() - yyrule = 2 - l.Mark() - switch { - default: - goto yyrule2 - case c >= '\x01' && c <= '\t' || c == '\v' || c == '\f' || c >= '\x0e' && c <= '\u007f' || c >= '\u0081' && c <= 'ÿ': - goto yystate75 - } - -yystate76: - c = l.Next() - yyrule = 17 - l.Mark() - switch { - default: - goto yyrule17 - case c >= '0' && c <= '9': - goto yystate76 - } - -yystate77: - c = l.Next() - yyrule = 18 - l.Mark() - switch { - default: - goto yyrule18 - case c == '.' || c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': - goto yystate77 - } - -yyrule1: // [ \n\r\t\f] - - goto yystate0 -yyrule2: // "//"[^\x80\n\r]* -yyrule3: // "/*"([^*\x80]|\*+[^*/\x80])*\*+\/ - { - - return l.char(COMMENT) - } -yyrule4: // %"{" - { - return l.char(LCURL) - } -yyrule5: // %"}" - { - return l.char(RCURL) - } -yyrule6: // %% - { - return l.char(MARK) - } -yyrule7: // %left - { - return l.char(LEFT) - } -yyrule8: // %nonassoc - { - return l.char(NONASSOC) - } -yyrule9: // %prec - { - return l.char(PREC) - } -yyrule10: // %precedence - { - return l.char(PRECEDENCE) - } -yyrule11: // %right - { - return l.char(RIGHT) - } -yyrule12: // %start - { - return l.char(START) - } -yyrule13: // %token - { - return l.char(TOKEN) - } -yyrule14: // %type - { - return l.char(TYPE) - } -yyrule15: // %union - { - return l.char(UNION) - } -yyrule16: // %error-verbose - { - return l.char(ERROR_VERBOSE) - } -yyrule17: // [0-9]+ - { - return l.char(NUMBER) - } -yyrule18: // {identifier} - { - return l.char(IDENTIFIER) - } -yyrule19: // {str-literal} - { - return l.char(STRING_LITERAL) - } - panic("unreachable") - - goto yyabort // silence unused label error - -yyabort: // no lexem recognized - if c, ok := l.Abort(); ok { - return l.char(c) - } - - goto yyAction -} diff --git a/vendor/github.com/cznic/strutil/LICENSE b/vendor/github.com/cznic/strutil/LICENSE deleted file mode 100644 index 2fdd92cf71397..0000000000000 --- a/vendor/github.com/cznic/strutil/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2014 The strutil Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the names of the authors nor the names of the -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/cznic/strutil/strutil.go b/vendor/github.com/cznic/strutil/strutil.go deleted file mode 100644 index 9876e1794f8fd..0000000000000 --- a/vendor/github.com/cznic/strutil/strutil.go +++ /dev/null @@ -1,645 +0,0 @@ -// Copyright (c) 2014 The sortutil Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package strutil collects utils supplemental to the standard strings package. -package strutil - -import ( - "bytes" - "encoding/base32" - "encoding/base64" - "fmt" - "io" - "reflect" - "sort" - "strconv" - "strings" - "sync" -) - -// Base32ExtDecode decodes base32 extended (RFC 4648) text to binary data. -func Base32ExtDecode(text []byte) (data []byte, err error) { - n := base32.HexEncoding.DecodedLen(len(text)) - data = make([]byte, n) - decoder := base32.NewDecoder(base32.HexEncoding, bytes.NewBuffer(text)) - if n, err = decoder.Read(data); err != nil { - n = 0 - } - data = data[:n] - return -} - -// Base32ExtEncode encodes binary data to base32 extended (RFC 4648) encoded text. -func Base32ExtEncode(data []byte) (text []byte) { - n := base32.HexEncoding.EncodedLen(len(data)) - buf := bytes.NewBuffer(make([]byte, 0, n)) - encoder := base32.NewEncoder(base32.HexEncoding, buf) - encoder.Write(data) - encoder.Close() - if buf.Len() != n { - panic("internal error") - } - return buf.Bytes() -} - -// Base64Decode decodes base64 text to binary data. -func Base64Decode(text []byte) (data []byte, err error) { - n := base64.StdEncoding.DecodedLen(len(text)) - data = make([]byte, n) - decoder := base64.NewDecoder(base64.StdEncoding, bytes.NewBuffer(text)) - if n, err = decoder.Read(data); err != nil { - n = 0 - } - data = data[:n] - return -} - -// Base64Encode encodes binary data to base64 encoded text. -func Base64Encode(data []byte) (text []byte) { - n := base64.StdEncoding.EncodedLen(len(data)) - buf := bytes.NewBuffer(make([]byte, 0, n)) - encoder := base64.NewEncoder(base64.StdEncoding, buf) - encoder.Write(data) - encoder.Close() - if buf.Len() != n { - panic("internal error") - } - return buf.Bytes() -} - -// Formatter is an io.Writer extended by a fmt.Printf like function Format -type Formatter interface { - io.Writer - Format(format string, args ...interface{}) (n int, errno error) -} - -type indentFormatter struct { - io.Writer - indent []byte - indentLevel int - state int -} - -const ( - st0 = iota - stBOL - stPERC - stBOLPERC -) - -// IndentFormatter returns a new Formatter which interprets %i and %u in the -// Format() format string as indent and undent commands. The commands can -// nest. The Formatter writes to io.Writer 'w' and inserts one 'indent' -// string per current indent level value. -// Behaviour of commands reaching negative indent levels is undefined. -// IndentFormatter(os.Stdout, "\t").Format("abc%d%%e%i\nx\ny\n%uz\n", 3) -// output: -// abc3%e -// x -// y -// z -// The Go quoted string literal form of the above is: -// "abc%%e\n\tx\n\tx\nz\n" -// The commands can be scattered between separate invocations of Format(), -// i.e. the formatter keeps track of the indent level and knows if it is -// positioned on start of a line and should emit indentation(s). -// The same output as above can be produced by e.g.: -// f := IndentFormatter(os.Stdout, " ") -// f.Format("abc%d%%e%i\nx\n", 3) -// f.Format("y\n%uz\n") -func IndentFormatter(w io.Writer, indent string) Formatter { - return &indentFormatter{w, []byte(indent), 0, stBOL} -} - -func (f *indentFormatter) format(flat bool, format string, args ...interface{}) (n int, errno error) { - buf := []byte{} - for i := 0; i < len(format); i++ { - c := format[i] - switch f.state { - case st0: - switch c { - case '\n': - cc := c - if flat && f.indentLevel != 0 { - cc = ' ' - } - buf = append(buf, cc) - f.state = stBOL - case '%': - f.state = stPERC - default: - buf = append(buf, c) - } - case stBOL: - switch c { - case '\n': - cc := c - if flat && f.indentLevel != 0 { - cc = ' ' - } - buf = append(buf, cc) - case '%': - f.state = stBOLPERC - default: - if !flat { - for i := 0; i < f.indentLevel; i++ { - buf = append(buf, f.indent...) - } - } - buf = append(buf, c) - f.state = st0 - } - case stBOLPERC: - switch c { - case 'i': - f.indentLevel++ - f.state = stBOL - case 'u': - f.indentLevel-- - f.state = stBOL - default: - if !flat { - for i := 0; i < f.indentLevel; i++ { - buf = append(buf, f.indent...) - } - } - buf = append(buf, '%', c) - f.state = st0 - } - case stPERC: - switch c { - case 'i': - f.indentLevel++ - f.state = st0 - case 'u': - f.indentLevel-- - f.state = st0 - default: - buf = append(buf, '%', c) - f.state = st0 - } - default: - panic("unexpected state") - } - } - switch f.state { - case stPERC, stBOLPERC: - buf = append(buf, '%') - } - return f.Write([]byte(fmt.Sprintf(string(buf), args...))) -} - -func (f *indentFormatter) Format(format string, args ...interface{}) (n int, errno error) { - return f.format(false, format, args...) -} - -type flatFormatter indentFormatter - -// FlatFormatter returns a newly created Formatter with the same functionality as the one returned -// by IndentFormatter except it allows a newline in the 'format' string argument of Format -// to pass through iff indent level is currently zero. -// -// If indent level is non-zero then such new lines are changed to a space character. -// There is no indent string, the %i and %u format verbs are used solely to determine the indent level. -// -// The FlatFormatter is intended for flattening of normally nested structure textual representation to -// a one top level structure per line form. -// FlatFormatter(os.Stdout, " ").Format("abc%d%%e%i\nx\ny\n%uz\n", 3) -// output in the form of a Go quoted string literal: -// "abc3%%e x y z\n" -func FlatFormatter(w io.Writer) Formatter { - return (*flatFormatter)(IndentFormatter(w, "").(*indentFormatter)) -} - -func (f *flatFormatter) Format(format string, args ...interface{}) (n int, errno error) { - return (*indentFormatter)(f).format(true, format, args...) -} - -// Pool handles aligning of strings having equal values to the same string instance. -// Intended use is to conserve some memory e.g. where a large number of identically valued strings -// with non identical backing arrays may exists in several semantically distinct instances of some structs. -// Pool is *not* concurrent access safe. It doesn't handle common prefix/suffix aligning, -// e.g. having s1 == "abc" and s2 == "bc", s2 is not automatically aligned as s1[1:]. -type Pool struct { - pool map[string]string -} - -// NewPool returns a newly created Pool. -func NewPool() *Pool { - return &Pool{map[string]string{}} -} - -// Align returns a string with the same value as its argument. It guarantees that -// all aligned strings share a single instance in memory. -func (p *Pool) Align(s string) string { - if a, ok := p.pool[s]; ok { - return a - } - - s = StrPack(s) - p.pool[s] = s - return s -} - -// Count returns the number of items in the pool. -func (p *Pool) Count() int { - return len(p.pool) -} - -// GoPool is a concurrent access safe version of Pool. -type GoPool struct { - pool map[string]string - rwm *sync.RWMutex -} - -// NewGoPool returns a newly created GoPool. -func NewGoPool() (p *GoPool) { - return &GoPool{map[string]string{}, &sync.RWMutex{}} -} - -// Align returns a string with the same value as its argument. It guarantees that -// all aligned strings share a single instance in memory. -func (p *GoPool) Align(s string) (y string) { - if s != "" { - p.rwm.RLock() // R++ - if a, ok := p.pool[s]; ok { // found - p.rwm.RUnlock() // R-- - return a - } - - p.rwm.RUnlock() // R-- - // not found but with a race condition, retry within a write lock - p.rwm.Lock() // W++ - defer p.rwm.Unlock() // W-- - if a, ok := p.pool[s]; ok { // done in a race - return a - } - - // we won - s = StrPack(s) - p.pool[s] = s - return s - } - - return -} - -// Count returns the number of items in the pool. -func (p *GoPool) Count() int { - return len(p.pool) -} - -// Dict is a string <-> id bijection. Dict is *not* concurrent access safe for assigning new ids -// to strings not yet contained in the bijection. -// Id for an empty string is guaranteed to be 0, -// thus Id for any non empty string is guaranteed to be non zero. -type Dict struct { - si map[string]int - is []string -} - -// NewDict returns a newly created Dict. -func NewDict() (d *Dict) { - d = &Dict{map[string]int{}, []string{}} - d.Id("") - return -} - -// Count returns the number of items in the dict. -func (d *Dict) Count() int { - return len(d.is) -} - -// Id maps string s to its numeric identificator. -func (d *Dict) Id(s string) (y int) { - if y, ok := d.si[s]; ok { - return y - } - - s = StrPack(s) - y = len(d.is) - d.si[s] = y - d.is = append(d.is, s) - return -} - -// S maps an id to its string value and ok == true. Id values not contained in the bijection -// return "", false. -func (d *Dict) S(id int) (s string, ok bool) { - if id >= len(d.is) { - return "", false - } - return d.is[id], true -} - -// GoDict is a concurrent access safe version of Dict. -type GoDict struct { - si map[string]int - is []string - rwm *sync.RWMutex -} - -// NewGoDict returns a newly created GoDict. -func NewGoDict() (d *GoDict) { - d = &GoDict{map[string]int{}, []string{}, &sync.RWMutex{}} - d.Id("") - return -} - -// Count returns the number of items in the dict. -func (d *GoDict) Count() int { - return len(d.is) -} - -// Id maps string s to its numeric identificator. The implementation honors getting -// an existing id at the cost of assigning a new one. -func (d *GoDict) Id(s string) (y int) { - d.rwm.RLock() // R++ - if y, ok := d.si[s]; ok { // found - d.rwm.RUnlock() // R-- - return y - } - - d.rwm.RUnlock() // R-- - - // not found but with a race condition - d.rwm.Lock() // W++ recheck with write lock - defer d.rwm.Unlock() // W-- - if y, ok := d.si[s]; ok { // some other goroutine won already - return y - } - - // a race free not found state => insert the string - s = StrPack(s) - y = len(d.is) - d.si[s] = y - d.is = append(d.is, s) - return -} - -// S maps an id to its string value and ok == true. Id values not contained in the bijection -// return "", false. -func (d *GoDict) S(id int) (s string, ok bool) { - d.rwm.RLock() // R++ - defer d.rwm.RUnlock() // R-- - if id >= len(d.is) { - return "", false - } - return d.is[id], true -} - -// StrPack returns a new instance of s which is tightly packed in memory. -// It is intended for avoiding the situation where having a live reference -// to a string slice over an unreferenced biger underlying string keeps the biger one -// in memory anyway - it can't be GCed. -func StrPack(s string) string { - return string([]byte(s)) -} - -// JoinFields returns strings in flds joined by sep. Flds may contain arbitrary -// bytes, including the sep as they are safely escaped. JoinFields panics if -// sep is the backslash character or if len(sep) != 1. -func JoinFields(flds []string, sep string) string { - if len(sep) != 1 || sep == "\\" { - panic("invalid separator") - } - - a := make([]string, len(flds)) - for i, v := range flds { - v = strings.Replace(v, "\\", "\\0", -1) - a[i] = strings.Replace(v, sep, "\\1", -1) - } - return strings.Join(a, sep) -} - -// SplitFields splits s, which must be produced by JoinFields using the same -// sep, into flds. SplitFields panics if sep is the backslash character or if -// len(sep) != 1. -func SplitFields(s, sep string) (flds []string) { - if len(sep) != 1 || sep == "\\" { - panic("invalid separator") - } - - a := strings.Split(s, sep) - r := make([]string, len(a)) - for i, v := range a { - v = strings.Replace(v, "\\1", sep, -1) - r[i] = strings.Replace(v, "\\0", "\\", -1) - } - return r -} - -// PrettyPrintHooks allow to customize the result of PrettyPrint for types -// listed in the map value. -type PrettyPrintHooks map[reflect.Type]func(f Formatter, v interface{}, prefix, suffix string) - -// PrettyString returns the output of PrettyPrint as a string. -func PrettyString(v interface{}, prefix, suffix string, hooks PrettyPrintHooks) string { - var b bytes.Buffer - PrettyPrint(&b, v, prefix, suffix, hooks) - return b.String() -} - -// PrettyPrint pretty prints v to w. Zero values and unexported struct fields -// are omitted. -func PrettyPrint(w io.Writer, v interface{}, prefix, suffix string, hooks PrettyPrintHooks) { - if v == nil { - return - } - - f := IndentFormatter(w, "· ") - - defer func() { - if e := recover(); e != nil { - f.Format("\npanic: %v", e) - } - }() - - prettyPrint(nil, f, prefix, suffix, v, hooks) -} - -func prettyPrint(protect map[interface{}]struct{}, sf Formatter, prefix, suffix string, v interface{}, hooks PrettyPrintHooks) { - if v == nil { - return - } - - rt := reflect.TypeOf(v) - if handler := hooks[rt]; handler != nil { - handler(sf, v, prefix, suffix) - return - } - - rv := reflect.ValueOf(v) - switch rt.Kind() { - case reflect.Slice: - if rv.Len() == 0 { - return - } - - sf.Format("%s[]%T{ // len %d%i\n", prefix, rv.Index(0).Interface(), rv.Len()) - for i := 0; i < rv.Len(); i++ { - prettyPrint(protect, sf, fmt.Sprintf("%d: ", i), ",\n", rv.Index(i).Interface(), hooks) - } - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%u}" + suffix) - case reflect.Array: - if reflect.Zero(rt).Interface() == rv.Interface() { - return - } - - sf.Format("%s[%d]%T{%i\n", prefix, rv.Len(), rv.Index(0).Interface()) - for i := 0; i < rv.Len(); i++ { - prettyPrint(protect, sf, fmt.Sprintf("%d: ", i), ",\n", rv.Index(i).Interface(), hooks) - } - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%u}" + suffix) - case reflect.Struct: - if rt.NumField() == 0 { - return - } - - if reflect.DeepEqual(reflect.Zero(rt).Interface(), rv.Interface()) { - return - } - - sf.Format("%s%T{%i\n", prefix, v) - for i := 0; i < rt.NumField(); i++ { - f := rv.Field(i) - if !f.CanInterface() { - continue - } - - prettyPrint(protect, sf, fmt.Sprintf("%s: ", rt.Field(i).Name), ",\n", f.Interface(), hooks) - } - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%u}" + suffix) - case reflect.Ptr: - if rv.IsNil() { - return - } - - rvi := rv.Interface() - if _, ok := protect[rvi]; ok { - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%s&%T{ /* recursive/repetitive pointee not shown */ }"+suffix, prefix, rv.Elem().Interface()) - return - } - - if protect == nil { - protect = map[interface{}]struct{}{} - } - protect[rvi] = struct{}{} - prettyPrint(protect, sf, prefix+"&", suffix, rv.Elem().Interface(), hooks) - case reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int8: - if v := rv.Int(); v != 0 { - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%s%v"+suffix, prefix, v) - } - case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint8: - if v := rv.Uint(); v != 0 { - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%s%v"+suffix, prefix, v) - } - case reflect.Float32, reflect.Float64: - if v := rv.Float(); v != 0 { - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%s%v"+suffix, prefix, v) - } - case reflect.Complex64, reflect.Complex128: - if v := rv.Complex(); v != 0 { - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%s%v"+suffix, prefix, v) - } - case reflect.Uintptr: - if v := rv.Uint(); v != 0 { - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%s%v"+suffix, prefix, v) - } - case reflect.UnsafePointer: - s := fmt.Sprintf("%p", rv.Interface()) - if s == "0x0" { - return - } - - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%s%s"+suffix, prefix, s) - case reflect.Bool: - if v := rv.Bool(); v { - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%s%v"+suffix, prefix, rv.Bool()) - } - case reflect.String: - s := rv.Interface().(string) - if s == "" { - return - } - - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%s%q"+suffix, prefix, s) - case reflect.Chan: - if reflect.Zero(rt).Interface() == rv.Interface() { - return - } - - c := rv.Cap() - s := "" - if c != 0 { - s = fmt.Sprintf("// capacity: %d", c) - } - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%s%s %s%s"+suffix, prefix, rt.ChanDir(), rt.Elem().Name(), s) - case reflect.Func: - if rv.IsNil() { - return - } - - var in, out []string - for i := 0; i < rt.NumIn(); i++ { - x := reflect.Zero(rt.In(i)) - in = append(in, fmt.Sprintf("%T", x.Interface())) - } - if rt.IsVariadic() { - i := len(in) - 1 - in[i] = "..." + in[i][2:] - } - for i := 0; i < rt.NumOut(); i++ { - out = append(out, rt.Out(i).Name()) - } - s := "(" + strings.Join(in, ", ") + ")" - t := strings.Join(out, ", ") - if len(out) > 1 { - t = "(" + t + ")" - } - if t != "" { - t = " " + t - } - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%sfunc%s%s { ... }"+suffix, prefix, s, t) - case reflect.Map: - keys := rv.MapKeys() - if len(keys) == 0 { - return - } - - var buf bytes.Buffer - nf := IndentFormatter(&buf, "· ") - var skeys []string - for i, k := range keys { - prettyPrint(protect, nf, "", "", k.Interface(), hooks) - skeys = append(skeys, fmt.Sprintf("%s%10d", buf.Bytes(), i)) - buf.Reset() - } - sort.Strings(skeys) - sf.Format("%s%T{%i\n", prefix, v) - for _, k := range skeys { - si := strings.TrimSpace(k[len(k)-10:]) - k = k[:len(k)-10] - n, _ := strconv.ParseUint(si, 10, 64) - mv := rv.MapIndex(keys[n]) - prettyPrint(protect, sf, fmt.Sprintf("%s: ", k), ",\n", mv.Interface(), hooks) - } - suffix = strings.Replace(suffix, "%", "%%", -1) - sf.Format("%u}" + suffix) - } -} diff --git a/vendor/github.com/cznic/y/LICENSE b/vendor/github.com/cznic/y/LICENSE deleted file mode 100644 index 0fb99d630fc1d..0000000000000 --- a/vendor/github.com/cznic/y/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2014 The y Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the names of the authors nor the names of the -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/cznic/y/api.go b/vendor/github.com/cznic/y/api.go deleted file mode 100644 index 517bef9a7d1fa..0000000000000 --- a/vendor/github.com/cznic/y/api.go +++ /dev/null @@ -1,966 +0,0 @@ -// Copyright 2014 The y Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//TODO +Engine, and export it. - -// Package y converts .y (yacc[2]) source files to data suitable for a parser -// generator. -// -// Changelog -// -// 2015-02-23: Added methods Parser.{AcceptsEmptyInput,SkeletonXErrors}. -// -// 2015-01-16: Added Parser.Reductions and State.Reduce0 methods. -// -// 2014-12-18: Support %precedence for better bison compatibility[5]. -// -// Links -// -// Referenced from elsewhere: -// -// [0]: http://godoc.org/github.com/cznic/goyacc -// [1]: http://people.via.ecp.fr/~stilgar/doc/compilo/parser/Generating%20LR%20Syntax%20Error%20Messages.pdf -// [2]: http://dinosaur.compilertools.net/yacc/ -// [3]: http://dinosaur.compilertools.net/lex/index.html -// [4]: https://www.gnu.org/software/bison/manual/html_node/Using-Mid_002dRule-Actions.html -// [5]: http://www.gnu.org/software/bison/manual/html_node/Precedence-Only.html#Precedence-Only -// [6]: http://www.gnu.org/software/bison/manual/html_node/Token-Decl.html#Token-Decl -package y - -import ( - "bytes" - "fmt" - "go/ast" - "go/token" - "io" - "io/ioutil" - "sort" - "strconv" - "strings" - - yparser "github.com/cznic/parser/yacc" -) - -// Values of {AssocDef,Rule,Sym}.Associativity -const ( - AssocNotSpecified = iota - AssocLeft // %left - AssocRight // %right - AssocNone // %nonassoc - AssocPrecedence // %precedence -) - -// Action describes one cell of the parser table, ie. the action to be taken when -// the lookahead is Sym. -type Action struct { - Sym *Symbol - arg int -} - -// Kind returns typ: 'a' for accept, 's' for shift, 'r' for reduce and 'g' for goto. -// -// For 'a' arg is not used. -// For 's' arg is the state number to shift to. -// For 'r' arg is the rule number to reduce. -// For 'g' arg is the state number to goto. -func (a Action) Kind() (typ, arg int) { - if !a.Sym.IsTerminal { - return 'g', a.arg - } - - switch arg := a.arg; { - case arg < 0: - return 'r', -arg - case arg > 0: - return 's', arg - } - - return 'a', -1 -} - -// AssocDef describes one association definition of the .y source code. For -// example: -// -// %left '+', '-' -// %left '*', '/' -// -// The above will produce two items in Parser.AssocDefs with the particular -// values of the associativity and precendce recorded in the Associativity and -// Precedence fields of the respective Syms element. -type AssocDef struct { - Associativity int // One of the nonzero Assoc* constant values. - Syms []*Symbol // Symbols present for this association definition in the order of appearance. -} - -// Options amend the behavior of the various Process* functions. -// -// Error Examples -// -// Error examples implement the ideas in "Generating LR Syntax Error Messages -// from Examples"[1]. They extend the capability of a LALR parser to produce -// better error messages. -// -// XErrorSrc is a sequence of Go tokens separated by white space using the same -// rules as valid Go source code except that semicolon injection is not used. -// Comments of both short and long form are equal to white space. An example -// consists of an optional state set prefix followed by zero or more token -// specifiers followed by an error message. A state set is zero or more -// integer literals. Token specifier is a valid Go identifier or a Go -// character literal. The error message is a Go string literal. The EBNF is -// -// ErrorExamples = { { INT_LIT } { IDENTIFIER | CHAR_LIT } STRING_LIT } . -// -// The identifiers used in XErrorsSrc must be those defined as tokens in the -// yacc file. An implicit $end token is inserted at the end of the example -// input if no state set is given for that example. Examples with a state set -// are assumed to always specify the error-triggering lookahead token as the -// last example token, which is usually, but not necessarily the reserved -// error terminal symbol. If an example has a state set but no example tokens, -// a $end is used as an example. For example: -// -// /* -// Reject empty file -// */ -// /* $end inserted here*/ "invalid empty input" -// -// PACKAGE /* $end inserted here */ -// "Unexpected EOF" -// -// PACKAGE ';' /* $end inserted here even though parsing stops at ';' */ -// `Missing package name or newline after "package"` -// -// vs -// -// -// /* -// Reject empty file -// */ -// 0 -// /* $end inserted here */ "invalid empty input" -// -// 2 -// PACKAGE error /* no $end inserted here */ -// `Missing package name or newline after "package"` -// -// Other examples -// -// PACKAGE IDENT ';' -// IMPORT STRING_LIT ',' -// "multiple imports must be separated by semicolons" -// -// // Make the semicolon injection error a bit more user friendly. -// PACKAGE ';' -// `Missing package name or newline after "package"` -// -// // A calculator parser might have error examples like -// NUMBER '+' "operand expected" -// NUMBER '-' error "invalid operand for subtraction" -// -// Use a specific bad token to provide a specific message: -// -// // Coders frequently make this mistake. -// FOO BAR BAZ "baz cannot follow bar, only qux or frob can" -// -// Use the reserved error token to be less specific: -// -// // Catch any invalid token sequences after foo bar. -// FOO BAR error "bar must be followed by qux or frob" -// -// Terminate the token sequence to detect premature end of file: -// -// PACKAGE "missing package name" -// -// Similar to lex[3], examples sharing the same "action" can be joined by -// the | operator: -// -// CONST | -// FUNC | -// IMPORT | -// TYPE | -// VAR "package clause must be first" -// -// It's an error if the example token sequence is accepted by the parser, ie. -// if it does not produce an error. -// -// Note: In the case of example with a state set, the example tokens, except for -// the last one, serve only documentation purposes. Only the combination of a state and a particular -// lookahead is actually considered by the parser. -// -// Examples without a state set are processed differently and all the example -// tokens matter. An attempt is made to find the applicable state set -// automatically, but this computation is not yet completely functional and -// possibly only a subset of the real error states are produced. -type Options struct { - AllowConflicts bool // Do not report unresolved conflicts as errors. - AllowTypeErrors bool // Continue even if type checks fail. - Closures bool // Report non kernel items. - LA bool // Report all lookahead sets. - Report io.Writer // If non nil, write a grammar report to Report. - Resolved bool // Explain how conflicts were resolved. - Reducible bool // Check if all states are reducible. (Expensive) - XErrorsName string // Name used to report errors in XErrorsSrc, defaults to . - XErrorsSrc []byte // Used to produce errors by example[1]. - - debugSyms bool - - // In conflict with xerrors processing. - noDefault bool // Disable collapsing largest reduce lookahead set to $default. -} - -func (o *Options) boot(fset *token.FileSet) (*Options, error) { - if o == nil { - return &Options{}, nil - } - - p := *o - p.noDefault = true - return &p, nil -} - -// Parser describes the resulting parser. The intended client is a parser -// generator (like eg. [0]) producing the final Go source code. -type Parser struct { - AssocDefs []*AssocDef // %left, %right, %nonassoc definitions in the order of appearance in the source code. - ConflictsRR int // Number of reduce/reduce conflicts. - ConflictsSR int // Number of shift/reduce conflicts. - Definitions []*yparser.Definition // All definitions. - ErrorVerbose bool // %error-verbose is present. - LiteralStrings map[string]*Symbol // See Symbol.LiteralString field. - Prologue string // Collected prologue between the %{ and %} marks. - Rules []*Rule // Rules indexed by rule number. - Start string // Name of the start production. - States []*State // Parser states indexed by state number. - Syms map[string]*Symbol // Symbols indexed by name, eg. "IDENT", "Expression" or "';'". - Table [][]Action // Indexed by state number. - Tail string // Everyting after the second %%, if present. - Union *ast.StructType // %union as Go AST. - UnionSrc string // %union as Go source form. - XErrors []XError // Errors by example[1] descriptions. - y *y // -} - -func newParser() *Parser { - return &Parser{} -} - -func (p *Parser) parse(stopState int, lex func() *Symbol) (int, error) { - eof := p.Syms["$end"] - yystate := 0 - var yyS []int - var yychar *Symbol -stack: - for i := 0; i < 100; i++ { - if yystate == stopState { - return yystate, nil - } - - yyS = append(yyS, yystate) - if yychar == nil { - yychar = lex() - if yychar == nil { - yychar = eof - } - } - for _, act := range p.Table[yystate] { - if act.Sym != yychar { - continue - } - - switch typ, arg := act.Kind(); typ { - case 'a': - return yystate, nil - case 's': - yychar = nil - yystate = arg - case 'r': - rule := p.Rules[arg] - n := len(yyS) - m := len(rule.Components) - yyS = yyS[:n-m] - n -= m - tos := yyS[n-1] - yystate = p.States[tos].gotos[rule.Sym].arg - } - continue stack - } - return yystate, fmt.Errorf("no action for %s in state %d", yychar, yystate) - } - return yystate, fmt.Errorf("parser stall in state %d", yystate) -} - -// AcceptsEmptyInput returns whether the token string [$end] is accepted by the -// grammar. -func (p *Parser) AcceptsEmptyInput() bool { - toks, la := p.States[1].Syms0() - return len(toks) == 0 && la == p.y.endSym -} - -func (s *State) skeletonXErrors(y *y) (nonTerminals, terminals map[*Symbol]struct{}) { - for _, item := range s.kernel { - for { - sym := item.next(y) - if sym == nil || sym.IsTerminal { - break - } - - if sym.IsEmpty() { - item = newItem(item.rule(), item.dot()+1) - continue - } - - if nonTerminals == nil { - nonTerminals = map[*Symbol]struct{}{} - } - nonTerminals[sym] = struct{}{} - - if !sym.DerivesEmpty() { - break - } - - item = newItem(item.rule(), item.dot()+1) - } - } - for _, item := range s.xitems { - if sym := item.next(y); sym != nil && !sym.IsTerminal { - if nonTerminals == nil { - nonTerminals = map[*Symbol]struct{}{} - } - nonTerminals[sym] = struct{}{} - } - } - terminals = map[*Symbol]struct{}{} - for k := range s.actions { - if k == y.errSym { - return nil, nil - } - - terminals[k] = struct{}{} - } - return nonTerminals, terminals -} - -// SkeletonXErrors writes an automatically generated errors by example file to -// w. -func (p *Parser) SkeletonXErrors(w io.Writer) error { - if !p.AcceptsEmptyInput() { - if _, err := fmt.Fprintf(w, `/* - Reject empty input -*/ -0 -"invalid empty input" -`); err != nil { - return err - } - } - - type t struct { - states []int - syms []string - } - - errs := map[string]t{} - for _, state := range p.States { - nt, t := state.skeletonXErrors(p.y) - if nt == nil && t == nil { - continue - } - - var nta, ta []string - m := map[string]bool{} - for k := range nt { - nm := k.Name - if s := k.LiteralString; s != "" { - s2, err := strconv.Unquote(s) - if err != nil { - p.y.err(k.Pos, "unquote %s: %v", s, err) - } - nm = s2 - } - nm = strings.TrimSpace(nm) - if m[nm] { - continue - } - - m[nm] = true - nta = append(nta, nm) - } - - sort.Strings(nta) - for k := range t { - nm := k.Name - if s := k.LiteralString; s != "" { - s2, err := strconv.Unquote(s) - if err != nil { - p.y.err(k.Pos, "unquote %s: %v", s, err) - } - nm = s2 - } - nm = strings.TrimSpace(nm) - if m[nm] { - continue - } - - m[nm] = true - ta = append(ta, nm) - } - sort.Strings(ta) - - snt := strings.Join(nta, " or ") - if len(nta) != 0 { - snt += " or " - } - - st := strings.Join(ta, ", ") - if len(ta) > 1 { - st = "one of [" + st + "]" - } - - s := fmt.Sprintf("expected %s%s", snt, st) - v := errs[s] - v.states = append(v.states, state.id) - syms0, _ := state.Syms0() - syms := fmt.Sprintf("%v", syms0) - syms = syms[1 : len(syms)-1] - v.syms = append(v.syms, syms) - errs[s] = v - } - - var a []string - for k := range errs { - a = append(a, k) - } - sort.Strings(a) - - for _, msg := range a { - if _, err := fmt.Fprintln(w); err != nil { - return err - } - - v := errs[msg] - for i, state := range v.states { - syms := v.syms[i] - if syms != "" { - syms = " // " + syms - } - if _, err := fmt.Fprintf(w, "%d%s\n", state, syms); err != nil { - return err - } - } - if _, err := fmt.Fprintf(w, "error %q\n", msg); err != nil { - return err - } - } - return nil -} - -// Reductions returns a mapping rule# -> []state#. The slice is a sorted set of -// states in which the corresponding rule is reduced. -func (p *Parser) Reductions() map[int][]int { - m := map[int][]int{} - for state, actions := range p.Table { - for _, act := range actions { - if typ, arg := act.Kind(); typ == 'r' { - m[arg] = append(m[arg], state) - } - } - } - for k, v := range m { - sort.Ints(v) - m[k] = v - } - return m -} - -// ProcessAST processes yacc source code parsed in ast. It returns a *Parser or -// an error, if any. -func ProcessAST(fset *token.FileSet, ast *yparser.Specification, opts *Options) (*Parser, error) { - y, err := processAST(fset, ast, opts) - if y == nil { - return nil, err - } - - y.Parser.y = y - - for i, row := range y.Parser.Table { - sort.Sort(actions(row)) - y.Parser.Table[i] = row - } - return y.Parser, err -} - -// ProcessFile processes yacc source code in a named file. It returns a *Parser -// or an error, if any. -func ProcessFile(fset *token.FileSet, fname string, opts *Options) (*Parser, error) { - b, err := ioutil.ReadFile(fname) - if err != nil { - return nil, err - } - - return ProcessSource(fset, fname, b, opts) -} - -// ProcessSource processes yacc source code in src. It returns a *Parser or an -// error, if any. -func ProcessSource(fset *token.FileSet, fname string, src []byte, opts *Options) (*Parser, error) { - ast, err := yparser.Parse(fset, fname, src) - if err != nil { - return nil, err - } - - return ProcessAST(fset, ast, opts) -} - -// Rule describes a single yacc rule, for example (in source form) -// -// Start: -// Prologue Body Epilogue -// { -// $$ = &ast{$1, $2, $3} -// } -// -// Inner rule actions -// -// A rule can prescribe semantic actions not only at the end. For example -// -// Foo: -// Bar -// { -// initBar($1) -// } -// Qux -// { -// handleQux($3) -// } -// -// Such constructs are rewritten as -// -// $@1: -// { -// initBar($1) -// } -// -// Foo: -// Bar $@1 Qux -// { -// handleQux($3) -// } -// -// The $@1 and similar is a synthetic rule and such have non nil Parent. -// MaxParentDlr is used to check that the semantic action does not access -// parent values not yet shifted to the parse stack as well as to compute the -// position of the $n thing on the parse stack. See also [4]. -type Rule struct { - Action *yparser.Action // The semantic action associated with the rule, if any. If present then also the last element of Body. - Associativity int // One of the assoc* constants. - Body []interface{} // Rule components - int, string or *yparser.Action - Components []string // Textual forms of the rule components, for example []string{"IDENT", "';'"} - ExplicitPrecSym *Symbol // Symbol used in the optional %prec sym clause, if present. - MaxParentDlr int // See the Rule type docs for details. - Name *yparser.Token // The rule name token, if any (otherwise the rule starts with "|"). - Parent *Rule // Non nil if a synthetic rule. - PrecSym *Symbol // Effective %prec symbol used, if any. - Precedence int // -1 if no precedence assigned. - RuleNum int // Zero based rule number. Rule #0 is synthetic. - Sym *Symbol // LHS of the rule. - Token *yparser.Token // yparser.IDENT or "|" - maxDlr int - pos token.Pos - syms []*Symbol -} - -// Actions returns the textual representation of r.Actions combined. -func (r *Rule) Actions() string { - var buf bytes.Buffer - for _, v := range r.Action.Values { - switch v.Type { - case yparser.ActionValueDlrDlr: - buf.WriteString("$$") - case yparser.ActionValueDlrNum: - buf.WriteString(fmt.Sprintf("$%d", v.Num)) - case yparser.ActionValueDlrTagDlr: - buf.WriteString(fmt.Sprintf("$<%s>$", v.Tag)) - case yparser.ActionValueDlrTagNum: - buf.WriteString(fmt.Sprintf("$<%s>%d", v.Tag, v.Num)) - default: - buf.WriteString(v.Src) - } - } - return buf.String() -} - -// State represents one state of the parser. -type State struct { - actions map[*Symbol][]action // - distance int // On path to state 0. - gotos map[*Symbol]action // - id int // Numeric id of the state. - kernel itemSet // - lookahead []symSet // kernel LA. - parent *State // On path to state 0. - psym *Symbol // Label for the edge parent -> state. - resolved []string //TODO non string data. - sym *Symbol // Sym transfering from parent to state. - trans map[trans]stateItem // sym.i -> stateItem - xitems itemSet // {x ∈ closure(kernel) | x.rule -> ε }. - xla []symSet // xitems LA. - y *y // -} - -func newState(y *y, s itemSet) *State { - return &State{ - actions: map[*Symbol][]action{}, - gotos: map[*Symbol]action{}, - kernel: s, - lookahead: make([]symSet, len(s)), - trans: map[trans]stateItem{}, - y: y, - } -} - -func (s *State) zpath() []int { - if s == nil { - return nil - } - - return append(s.parent.zpath(), s.id) -} - -func (s *State) syms0() []*Symbol { - s.y.zeroPaths() - if s.parent == nil { - return nil - } - - sym := s.psym - if sym.IsTerminal { - return append(s.parent.syms0(), sym) - } - - return append(s.parent.syms0(), sym.MinString()...) -} - -// Syms0 returns an example of a string and a lookahead, if any, required to -// get to state s starting at state 0. If s is shifted into the lookahead is -// nil. -// -// Note: Invalid grammars and grammars with conflicts may have not all states -// reachable. -// -// To construct an example of a string for which the parser enters state s: -// -// syms, la := s.Syms0() -// if la != nil { -// syms = append(syms, la) -// } -// -func (s *State) Syms0() ([]*Symbol, *Symbol) { - str := s.syms0() - if s.parent == nil { - return str, nil - } - - if s.psym.IsTerminal { - return str, nil - } - - str0 := str - var a []string - for sym := range s.actions { - str = append(str0, sym) - if stop, _ := s.y.parse(s.id, func() *Symbol { - if len(str) == 0 { - return nil - } - - r := str[0] - str = str[1:] - return r - }); stop == s.id { - a = append(a, sym.Name) - } - } - if len(a) == 0 { - return str0, nil - } - - sort.Strings(a) - return str0, s.y.Syms[a[0]] -} - -// Reduce0 returns an example of a string required to reduce rule r in state s -// starting at state 0. If states s does not reduce rule r the string is empty. -// -// Note: Invalid grammars and grammars with conflicts may have not all states -// reachable and/or not all productions reducible. -func (s *State) Reduce0(r *Rule) []*Symbol { - rn := r.RuleNum - las := []string{} - for la, acts := range s.actions { - act := acts[0] - if act.kind == 'r' && act.arg == rn { - las = append(las, la.Name) - } - } - if len(las) == 0 { - return nil - } - - syms, _ := s.Syms0() - sort.Strings(las) - return append(syms, s.y.Syms[las[0]]) -} - -// A special default symbol has Name "$default" and represents the default -// action. - -// Symbol represents a terminal or non terminal symbol. A special end symbol -// has Name "$end" and represents the EOF token. -// -// LiteralString field -// -// Some parser generators accept an optional literal string token associated -// with a token definition. From [6]: -// -// You can associate a literal string token with a token type name by -// writing the literal string at the end of a %token declaration which -// declares the name. For example: -// -// %token arrow "=>" -// -// For example, a grammar for the C language might specify these names -// with equivalent literal string tokens: -// -// %token OR "||" -// %token LE 134 "<=" -// %left OR "<=" -// -// Once you equate the literal string and the token name, you can use them -// interchangeably in further declarations or the grammar rules. The yylex -// function can use the token name or the literal string to obtain the -// token type code number (see Calling Convention). Syntax error messages -// passed to yyerror from the parser will reference the literal string -// instead of the token name. -// -// The LiteralString captures the value of other definitions as well, namely -// also for %type definitions. -// -// %type CommaOpt "optional comma" -// -// %% -// -// CommaOpt: -// /* empty */ -// | ',' -type Symbol struct { - Associativity int // One of the assoc* constants. - ExplicitValue int // Explicit numeric value of the symbol or -1 if none. - IsLeftRecursive bool // S: S ... ; - IsRightRecursive bool // S: ... S ; - IsTerminal bool // Whether this is a terminal symbol. - LiteralString string // See the "LiteralString field" part of the Symbol godocs. - Name string // Textual value of the symbol, for example "IDENT" or "';'". - Pos token.Pos // Position where the symbol was firstly introduced. - Precedence int // -1 of no precedence assigned. - Rules []*Rule // Productions associated with this symbol. - Type string // For example "int", "float64" or "foo", but possibly also "". - Value int // Assigned numeric value of the symbol. - derivesE bool // Non terminal sym derives ε. - derivesEValid bool // - first1 symSet // - firstValid bool // - follow symSet // - id int // Index into y.syms - minStr []*Symbol // - minStrOk bool // -} - -// IsEmpty reports whether s derives only ε. -func (s *Symbol) IsEmpty() bool { - return len(s.Rules) == 1 && len(s.Rules[0].Components) == 0 -} - -func (s *Symbol) derivesEmpty(m map[*Symbol]bool) bool { - if m[s] { - return false - } - - m[s] = true - if s.IsTerminal { - return false - } - - if s.derivesEValid { - return s.derivesE - } - -nextRule: - for _, rule := range s.Rules { - if len(rule.Components) == 0 { - s.derivesE = true - s.derivesEValid = true - return true - } - - for _, sym := range rule.syms { - if !sym.derivesEmpty(m) { - continue nextRule - } - } - - s.derivesE = true - s.derivesEValid = true - return true - } - s.derivesE = false - s.derivesEValid = true - return false -} - -// DerivesEmpty returns whether s derives ε. -func (s *Symbol) DerivesEmpty() bool { - return s.derivesEmpty(map[*Symbol]bool{}) -} - -// - dragon 4.4 -// - http://www.cs.virginia.edu/~cs415/reading/FirstFollowLL.pdf -func (s *Symbol) first(y *y) (r symSet) { - if s.firstValid { - return s.first1 - } - - s.firstValid = true - r = y.newSymSet(-1) - for _, rule := range s.Rules { - if len(rule.Components) == 0 { - r.addEmpty() - break - } - } - s.first1 = r - defer func() { - s.first1 = r - }() - - if s.IsTerminal { - return y.newSymSet(s.id) - } - - if s == y.emptySym { - return y.newSymSet(s.id) - } - -nextRule: - for _, rule := range s.Rules { - for _, sym := range rule.syms { - t := sym.first(y) - r.add(t, false) - if !t.hasEmpty() { - continue nextRule - } - } - r.addEmpty() - } - return r -} - -// MinString returns an example of a string of symbols which can be reduced to -// s. If s is a terminal symbol the result is s. If the only way to express -// some non terminal s includes s itself then nil is returned (and the grammar -// is invalid). -func (s *Symbol) MinString() (r []*Symbol) { - r, _ = s.minString(nil) - return r -} - -func (s *Symbol) minString(m map[*Symbol]int) (r []*Symbol, ok bool) { - if str := s.minStr; str != nil { - return str, s.minStrOk - } - - defer func() { - s.minStr = r - s.minStrOk = ok - }() - - if s.IsTerminal { - return []*Symbol{s}, true - } - - if s.DerivesEmpty() { - return []*Symbol{}, true - } - - if m[s] != 0 { - return nil, false - } - - if m == nil { - m = map[*Symbol]int{} - } - m[s]++ - defer func() { m[s]-- }() - var best []*Symbol - var bestHasError bool -nextRule: - for _, rule := range s.Rules { - var current []*Symbol - hasError := false - for _, sym := range rule.syms { - if sym.Name == "error" { - hasError = true - } - str, ok := sym.minString(m) - if !ok { - continue nextRule - } - - current = append(current, str...) - } - ok = true - switch { - case best == nil: - best = current - bestHasError = hasError - case best != nil && bestHasError && !hasError: - best = current - bestHasError = false - case best != nil && !bestHasError && hasError: - // nop - case len(current) < len(best): - best = current - case len(current) == len(best): - for i, a := range current { - b := best[i] - if a.Name > b.Name { - break - } - if a.Name < b.Name { - best = current - break - } - } - } - } - return best, ok -} - -// String implements fmt.Stringer. -func (s *Symbol) String() string { - if s != nil { - return s.Name - } - - return "" -} - -// XError describes the parser state for an error by example. See [1]. -type XError struct { - Stack []int // Parser states stack, potentially partial, of the error event. TOS is Stack[len(Stack)-1]. - Lookahead *Symbol // Error lookahead symbol. Nil if LA is the reserved error symbol. - Msg string // Textual representation of the error condition. -} - -func (x *XError) mapKey() string { - return fmt.Sprintf("%v %v", x.Stack, x.Lookahead) -} diff --git a/vendor/github.com/cznic/y/y.go b/vendor/github.com/cznic/y/y.go deleted file mode 100644 index ab354cbb01b4f..0000000000000 --- a/vendor/github.com/cznic/y/y.go +++ /dev/null @@ -1,2199 +0,0 @@ -// Copyright 2014 The y Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package y - -import ( - "bytes" - "container/heap" - "fmt" - "go/ast" - "go/parser" - "go/scanner" - "go/token" - "io" - "sort" - "strconv" - "strings" - - "github.com/cznic/mathutil" - yparser "github.com/cznic/parser/yacc" - "github.com/cznic/strutil" -) - -const ( - intBits = mathutil.IntBits - bitShift = intBits>>6 + 5 - bitMask = intBits - 1 -) - -var ( - assocStr = map[int]string{ - AssocLeft: "%left", - AssocRight: "%right", - AssocNone: "%nonassoc", - AssocPrecedence: "%precedence", - } - empty = "ε" - isTesting bool -) - -type action struct { - kind int // 'a': accept, 'g': goto, 'r': reduce, 's': shift - arg int // a: N/A, r: rule#, g, s: state# -} - -type actions []Action - -func (a actions) Len() int { return len(a) } - -func (a actions) Less(i, j int) bool { - ni := a[i].Sym.Name - nj := a[j].Sym.Name - if ni < nj { - return true - } - - if ni > nj { - return false - } - - ti, ki := a[i].Kind() - tj, kj := a[i].Kind() - if ti < tj { - return true - } - - if ti > tj { - return false - } - - return ki < kj -} - -func (a actions) Swap(i, j int) { a[i], a[j] = a[j], a[i] } - -func newReduction(arg int) action { - if arg == 0 { - return action{'a', 0} - } - - return action{'r', arg} -} - -func (a action) String() string { - switch a.kind { - case 'a': - return "accept" - case 'g': - return fmt.Sprintf("goto state %d", a.arg) - case 'r': - return fmt.Sprintf("reduce using rule %d", a.arg) - case 's': - return fmt.Sprintf("shift, and goto state %d", a.arg) - default: - panic("y: internal error 008") - } -} - -type item uint64 // LR 0 item - -func newItem(rule, dot int) item { return item(uint64(rule)<<32 | uint64(dot)) } - -func (i item) dot() int { return int(i & (1<<32 - 1)) } - -func (i item) dump(y *y) string { - var buf bytes.Buffer - rule := y.Rules[i.rule()] - buf.WriteString(fmt.Sprintf("%3d %s:", i.rule(), rule.Sym.Name)) - dot := i.dot() - for _, v := range rule.Components[:dot] { - buf.WriteString(" " + v) - } - buf.WriteString(" .") - for _, v := range rule.Components[dot:] { - buf.WriteString(" " + v) - } - return buf.String() -} - -func (i item) next(y *y) *Symbol { return i.sym(y, i.dot()) } -func (i item) rule() int { return int(i >> 32) } - -func (i item) sym(y *y, dot int) *Symbol { - rule := y.Rules[i.rule()] - if dot < 0 { - return rule.Sym - } - - if dot == len(rule.Components) { - return nil - } - - return rule.syms[dot] -} - -func (i item) syms(y *y) (r []*Symbol) { - return y.Rules[i.rule()].syms -} - -type item1 struct { // LR 1 item - item item - sym *Symbol -} - -func (i item1) dump(y *y) string { - return fmt.Sprintf("%s, %s", i.item.dump(y), i.sym.Name) -} - -type itemSet []item - -func (s itemSet) add(i item) (itemSet, bool) { // true: s already has i - l, ok := s.find(i) - if ok { - return s, true - } - - s = append(s, 0) - copy(s[l+1:], s[l:]) - s[l] = i - return s, false -} - -func (s itemSet) clone() itemSet { return append(itemSet(nil), s...) } - -func (s itemSet) closure(y *y) (r itemSet) { // dragon 4.7, Fig. 4.33 - q, r := s.clone(), s.clone() - for len(q) != 0 { - item := q[len(q)-1] - q = q[:len(q)-1] - nx := item.next(y) - if nx == nil || nx.IsTerminal { - continue - } - - for _, rule := range nx.Rules { - s := newItem(rule.RuleNum, 0) - var ok bool - r, ok = r.add(s) - if !ok { - q = append(q, s) - } - } - } - return r -} - -func (s itemSet) find(i item) (m int, _ bool) { - l, h := 0, len(s)-1 - for l <= h { - m = (l + h) >> 1 - switch j := s[m]; { - case i > j: - l = m + 1 - case i == j: - return m, true - default: - h = m - 1 - } - } - return l, false -} - -func (s itemSet) goTo(y *y, x *Symbol) (r itemSet) { // dragon 4.7, Example 4.35. - if n := len(y.isPool); n != 0 { - r = y.isPool[n-1][:0] - y.isPool = y.isPool[:n-1] - } - for _, item := range s { //TODO cache item->nextSym - if item.next(y) != x { - continue - } - - r = append(r, item+1) - } - return r -} - -func (s itemSet) mustFind(i item) int { - if m, ok := s.find(i); ok { - return m - } - - panic("y: internal error 011") -} - -func (s itemSet) state(y *y) (int, bool) { - id := y.id(s) - n, ok := y.itemSets[id] - if !ok { - n = len(y.itemSets) - y.itemSets[id] = n - ns := newState(y, s) - ns.id = n - y.States = append(y.States, ns) - } - return n, ok -} - -type itemSet1 map[item1]bool - -func (s itemSet1) add(i item1) bool { // true: s already has i - if i.sym.id == 0 { - return true - } - - if _, ok := s[i]; ok { - return true - } - - s[i] = true - return false -} - -type stateItem struct { - state int - i int -} - -type symSet []int - -func (s symSet) add(t symSet, withEmpty bool) (r bool) { // true: s already has all items in t - r = true - for x, w := range t { - if x == 0 && !withEmpty { - w &^= 1 - } - if w == 0 { - continue - } - - o := s[x] - if w = o | w; w != o { - s[x] = w - r = false - } - } - return r -} - -func (s symSet) add1(t int) bool { // true: s already has t - x, m := t>>bitShift, 1<>1 { - if w&1 != 0 { - r++ - } - } - } - return r -} - -func (s symSet) dump(y *y) string { - var a []string - for x, w := range s { - for bit := 0; bit < intBits && w != 0; bit, w = bit+1, w>>1 { - if w&1 != 0 { - a = append(a, y.syms[x<>bitShift]&(1<>bitShift] &^= 1 << uint(t&bitMask) -} - -type trans struct { - item - *Symbol -} - -type typeDecl struct { - token.Pos - typeName string -} - -type percTypeLit struct { - pos token.Pos - lit string -} - -type y struct { - *Parser - acceptSym *Symbol // - allocVal int // - allocatedValues map[int]bool // - ast *yparser.Specification // - clsCache map[item]map[item]symSet // - clsQueue []item1 // Non reentrant item1.closure todo list. - clsSyms []*Symbol // Non reentrant item1.closure buffer. - dummySym *Symbol // - emptySym *Symbol // - endSym *Symbol // - entries int // Number of used cells in the parse table. - errSym *Symbol // - errors scanner.ErrorList // - firstRule int // - fset *token.FileSet // - idBuf []byte // Non reentrant id() buffer. - isPool []itemSet // - itemSets map[string]int // - noSym *Symbol // - nonTerminals map[string]token.Pos // - opts *Options // - percTypeLits map[string]*percTypeLit // nm: *percTypeLit - percTypeLitPos map[string]token.Pos // lit: *percTypeLit - precedence int // - ssPool []symSet // - symSetCap int // - symTypes map[string]typeDecl // - syms []*Symbol // - symsUsed map[string]token.Pos // - synthRule int // - types map[string]token.Pos // %union fields - typesUsed map[string]token.Pos // - unionPos token.Pos // - zeroPathsValid bool // States paths to state 0 determined. -} - -func newY(fset *token.FileSet, ast *yparser.Specification, opts *Options) *y { - r := &y{ - Parser: newParser(), - acceptSym: &Symbol{Name: "$accept"}, - allocatedValues: map[int]bool{}, - ast: ast, - clsCache: map[item]map[item]symSet{}, - dummySym: &Symbol{Name: "#", IsTerminal: true}, - emptySym: &Symbol{Name: empty, IsTerminal: true}, - endSym: &Symbol{Name: "$end", IsTerminal: true, Precedence: -1}, - errSym: &Symbol{Name: "error", IsTerminal: true}, - fset: fset, - idBuf: make([]byte, 1024), - itemSets: map[string]int{}, - noSym: &Symbol{Name: "$default", Value: -1}, - nonTerminals: map[string]token.Pos{}, - opts: opts, - percTypeLitPos: map[string]token.Pos{}, - percTypeLits: map[string]*percTypeLit{}, - types: map[string]token.Pos{}, - typesUsed: map[string]token.Pos{}, - } - r.symsUsed = map[string]token.Pos{r.errSym.Name: 0, r.noSym.Name: 0} - r.endSym.Value = r.allocValue() - r.errSym.Value = r.allocValue() - r.LiteralStrings = map[string]*Symbol{} - r.Syms = map[string]*Symbol{ - r.acceptSym.Name: r.acceptSym, - r.dummySym.Name: r.dummySym, - r.emptySym.Name: r.emptySym, - r.endSym.Name: r.endSym, - r.errSym.Name: r.errSym, - r.noSym.Name: r.noSym, - } - return r -} - -func processAST(fset *token.FileSet, ast *yparser.Specification, opts *Options) (*y, error) { - var err error - if opts, err = opts.boot(fset); err != nil { - return nil, err - } - - y := newY(fset, ast, opts) - if err := y.defs(); err != nil { - return nil, err - } - - if t := ast.Tail; t != nil { - y.Tail = t.Value - } - if err := y.rules0(); err != nil { - return nil, err - } - - m := map[int]*Symbol{} - a := make([]string, 0, len(y.Syms)) - for nm := range y.Syms { - a = append(a, nm) - } - sort.Strings(a) - for _, sym := range y.Syms { - nm := sym.Name - if v := sym.Value; v >= 0 { - ex := m[v] - if ex != nil && ex != sym { - y.err(sym.Pos, "symbol %s has the same value (%d) as symbol %s at %s.", sym, v, ex, y.pos(ex.Pos)) - continue - } - - if nm == "#" || nm == "ε" || nm == "$accept" { - continue - } - - m[v] = sym - } - } - for _, nm := range a { - sym := y.Syms[nm] - if nm == "" || nm == "ε" || nm == "#" || nm[0] == '$' && nm[1] != '@' && sym != y.noSym { // internal symbols - continue - } - - if sym.Value < 0 { - sym.Value = y.allocValue() - } - } - if err := y.error(); err != nil { - return nil, y.error() - } - - y.follows() - y.states0() - y.lookaheads() - y.reductions() - y.conflicts() - y.Table = make([][]Action, len(y.States)) - for i, state := range y.States { - a := make([]Action, 0, len(state.actions)+len(state.gotos)) - for sym, acts := range state.actions { - act := acts[0] - switch act.kind { - case 'a': - a = append(a, Action{y.endSym, 0}) - case 's': - a = append(a, Action{sym, act.arg}) - case 'r': - a = append(a, Action{sym, -act.arg}) - default: - panic("y: internal error 005") - } - } - for sym, act := range state.gotos { - a = append(a, Action{sym, act.arg}) - } - y.Table[i] = a - } - if w := opts.Report; w != nil { - y.report(w) - } - if y.opts.Reducible { - y.reducible() - } - return y, y.xerrors() -} - -func (y *y) addRule(r *Rule) *Rule { - r.Sym.Rules = append(r.Sym.Rules, r) - r.RuleNum = len(y.Rules) - y.Rules = append(y.Rules, r) - return r -} - -func (y *y) allocValue() (n int) { - for { - switch n = y.allocVal; { - case n == 0: - n = 0xe000 // Private Use Area. - case n == 0xf8ff: - n = 0xf0000 // Supplemental Private Use Area-A. - case n == 0xffffd: - n = 0x100000 // Supplemental Private Use Area-B. - case n == 0x10fffd: - panic("y: internal error 012") - default: - n++ - } - y.allocVal = n - if !y.allocatedValues[n] { - y.allocatedValues[n] = true - return n - } - } -} - -func (y *y) closure(i item) (r map[item]symSet) { // Result symSets must not be mutated. - if r, ok := y.clsCache[i]; ok { - return r - } - - r = y.closure0(map[item]symSet{i: y.newSymSet(y.dummySym.id)}, append(y.clsQueue[:0], item1{i, y.dummySym})) - y.clsCache[i] = r - return r -} - -func (y *y) closure0(j map[item]symSet, q []item1) map[item]symSet { // dragon 4.7, Fig. 4.38; not reentrant. - ySyms := y.clsSyms - for len(q) != 0 { - i := q[len(q)-1] - q = q[:len(q)-1] - bb := i.item.syms(y)[i.item.dot():] - if len(bb) == 0 { - continue - } - - rules := bb[0].Rules - ySyms = append(ySyms[:0], bb[1:]...) - ySyms = append(ySyms, i.sym) - symSet := y.first(ySyms) - for x, w := range symSet { - for bit := 0; bit < intBits && w != 0; bit, w = bit+1, w>>1 { - if w&1 == 0 { - continue - } - - for _, p := range rules { - nii := newItem(p.RuleNum, 0) - ni := item1{nii, y.syms[x< 1 { - panic("internal error") - } - - var in, out [][2]action - if len(s) != 0 { - s := s[0] - for _, r := range r { - in = append(in, [2]action{s, r}) - } - } - for i, r1 := range r { - for _, r2 := range r[i+1:] { - in = append(in, [2]action{r1, r2}) - } - } - for _, conflict := range in { - switch resolved, asShift := y.resolve(state, si, sym, conflict); { - case !resolved: - out = append(out, conflict) - case asShift: - if conflict[0].kind != 's' { - break - } - - r := conflict[1].arg - dot := len(y.Rules[r].Components) - item := newItem(r, dot) - switch dot { - case 0: - state.xla[state.xitems.mustFind(item)].remove(sym.id) - default: - state.lookahead[state.kernel.mustFind(item)].remove(sym.id) - } - } - } - ret := map[action]bool{} - var sr, rr bool - for _, conflict := range out { - ret[conflict[0]], ret[conflict[1]] = true, true - if conflict[0].kind == 's' { - sr = true - continue - } - - rr = true - } - if sr { - y.ConflictsSR++ - } - if rr { - y.ConflictsRR++ - } - var sa, ra []action - for action := range ret { - if action.kind == 's' { - sa = append(sa, action) - continue - } - - ra = append(ra, action) - } - state.actions[sym] = append(state.actions[sym], sa...) - state.actions[sym] = append(state.actions[sym], ra...) - } - sort.Strings(state.resolved) - } - if !y.opts.AllowConflicts { - if y.ConflictsSR != 0 { - y.err(0, "conflicts: %d shift/reduce", y.ConflictsSR) - } - if y.ConflictsRR != 0 { - y.err(0, "conflicts: %d reduce/reduce", y.ConflictsRR) - } - } - if y.opts.noDefault { - return y.error() - } - - for si, state := range y.States { - var valid bool - var la symSet - max := 0 - for i, item := range state.kernel { - if item.next(y) != nil || si == 1 && item == 1 { - continue - } - - if n := state.lookahead[i].len(); !valid || n < max { - max = n - la = state.lookahead[i] - valid = true - } - } - for i := range state.xitems { - if n := state.xla[i].len(); !valid || n < max { - max = n - la = state.xla[i] - valid = true - } - } - - if !valid { - continue - } - - // Collapse la reductions. - redn := -1 - for sym, actions := range state.actions { - action := actions[0] - if action.kind != 'r' { - continue - } - - if redn < 0 && la.has(sym.id) { - redn = action.arg - } - - switch actions = actions[1:]; len(actions) { - case 0: - delete(state.actions, sym) - default: - state.actions[sym] = actions - } - - } - state.actions[y.noSym] = []action{{'r', redn}} - } - return y.error() -} - -func (y *y) defs() error { - types := map[string]typeDecl{} - var buf bytes.Buffer - defer func() { - y.Prologue = buf.String() - y.symTypes = types - }() - - y.Definitions = y.ast.Defs - for _, def := range y.ast.Defs { - isAssoc := false - switch def.Case { - case 0: // START IDENTIFIER - nm := def.Token2.Val - y.Start = nm - y.nonTerminals[nm] = def.Token2.Pos() - y.useSym(nm, def.Token2.Pos()) - case 1: // UNION - if ex := y.unionPos; ex != 0 { - y.err(def.Token.Pos(), "duplicate %%union: previous at %v", y.pos(ex)) - break - } - - y.unionPos = def.Pos() - src := def.Value - for len(src) != 0 && src[0] != '{' { - src = src[1:] - } - if len(src) != 0 { - src = src[1:] - } - for len(src) != 0 && (src[0] == '\n' || src[0] == '\r') { - src = src[1:] - } - src = fmt.Sprintf("struct {\n\tyys int\n%s{}", src) - expr, err := parser.ParseExpr(src) - if err != nil { - y.err(def.Pos(), "invalid %%union:\n%s\n%v", src, err) - break - } - - y.Union, y.UnionSrc = expr.(*ast.CompositeLit).Type.(*ast.StructType), src[:len(src)-2] - for _, fields := range y.Union.Fields.List[1:] { - for _, nm := range fields.Names { - switch ex, ok := y.types[nm.Name]; { - case !ok: - y.types[nm.Name] = def.Pos() - default: - y.err(def.Pos(), "union field %s already declared: %s", nm, y.pos(ex)) - } - } - } - case 2: // LCURL RCURL - buf.WriteString(def.Value) - case 3: // ReservedWord Tag NameList - switch def.ReservedWord.Case { - case - 1, // LEFT - 2, // RIGHT - 3, // NONASSOC - 5: // PRECEDENCE - y.precedence++ - isAssoc = true - fallthrough - case 0: // TOKEN - var typ string - if tag := def.Tag; tag != nil { - typ = def.Tag.Token2.Val - y.useType(def.Tag.Token2.Pos(), typ) - } - assoc := AssocNotSpecified - switch def.ReservedWord.Token.Char.Rune { - case yparser.LEFT: - assoc = AssocLeft - case yparser.RIGHT: - assoc = AssocRight - case yparser.NONASSOC: - assoc = AssocNone - case yparser.PRECEDENCE: - assoc = AssocPrecedence - } - var assocDef AssocDef - assocDef.Associativity = assoc - for _, nmno := range def.Nlist { - var name string - num := nmno.Number - - switch x := nmno.Identifier.(type) { - case int: - name = fmt.Sprintf("%q", x) - if num < 0 { - num = x - } - case string: - name = x - default: - panic("internal error") - } - - t := &Symbol{ - Associativity: assoc, - ExplicitValue: num, - IsTerminal: true, - Name: name, - Pos: nmno.Token.Pos(), - Precedence: -1, - Type: typ, - Value: num, - } - ls := "" - if n := nmno.LiteralStringOpt; n != nil { - ls = n.Token.Val - if ex, ok := y.LiteralStrings[ls]; ok { - y.err(n.Token.Pos(), "literal strings must be unique, previous association with name at %v: %s", y.fset.Position(ex.Pos), ls) - } else { - y.LiteralStrings[ls] = t - y.percTypeLitPos[ls] = t.Pos - t.LiteralString = ls - } - } - if isAssoc { - assocDef.Syms = append(assocDef.Syms, t) - } - - switch def.ReservedWord.Token.Char.Rune { - case yparser.LEFT, yparser.RIGHT, yparser.NONASSOC, yparser.PRECEDENCE: - t.Precedence = y.precedence - } - - ex, ok := y.Syms[name] - if !ok { - if t.Value < 0 { - t.Value = y.allocValue() - } else { - y.allocatedValues[t.Value] = true - } - y.Syms[name] = t - continue - } - - // Merge the declarations, if possible. - if n := t.Associativity; n != AssocNotSpecified { - switch o := ex.Associativity; { - case o == AssocNotSpecified: - ex.Associativity = n - case n != o: - y.err( - t.Pos, - "%s: conflict with previous associativity declaration at %v", - name, y.pos(ex.Pos), - ) - } - } - - if n := t.Precedence; n >= 0 { - switch o := ex.Precedence; { - case o < 0: - ex.Precedence = n - case n != o: - y.err( - t.Pos, - "%s: conflict with previous precedence declaration at %v", - name, y.pos(ex.Pos), - ) - } - } - - if n := t.Type; n != "" { - switch o := ex.Type; { - case o == "": - ex.Type = n - case n != o: - y.err( - t.Pos, - "%s: conflict with previous type declaration at %v", - name, y.pos(ex.Pos), - ) - } - } - - if n := t.Value; n >= 0 { - switch o := ex.Value; { - case o < 0: - ex.Value = n - case n != o: - y.err( - t.Pos, - "%s: conflict with previous value declaration at %v", - name, y.pos(ex.Pos), - ) - } - } - } - if isAssoc { - y.AssocDefs = append(y.AssocDefs, &assocDef) - } - case 4: // TYPE - typ := "" - if tag := def.Tag; tag != nil { - typ = tag.Token2.Val - y.useType(def.Tag.Token2.Pos(), typ) - } - for _, nmno := range def.Nlist { - if x, ok := nmno.Identifier.(int); ok { - var name string - num := nmno.Number - - name = fmt.Sprintf("%q", x) - if num < 0 { - num = x - } - - t := &Symbol{ - Associativity: AssocNotSpecified, - ExplicitValue: num, - IsTerminal: true, - Name: name, - Pos: nmno.Token.Pos(), - Precedence: -1, - Type: typ, - Value: num, - } - ls := "" - if n := nmno.LiteralStringOpt; n != nil { - ls = n.Token.Val - if ex, ok := y.LiteralStrings[ls]; ok { - y.err(n.Token.Pos(), "literal strings must be unique, previous association with name at %v: %s", y.fset.Position(ex.Pos), ls) - } else { - y.LiteralStrings[ls] = t - y.percTypeLitPos[ls] = t.Pos - t.LiteralString = ls - } - } - ex, ok := y.Syms[name] - if !ok { - if t.Value < 0 { - t.Value = y.allocValue() - } else { - y.allocatedValues[t.Value] = true - } - y.Syms[name] = t - continue - } - - // Merge the declarations, if possible. - if n := t.Associativity; n != AssocNotSpecified { - switch o := ex.Associativity; { - case o == AssocNotSpecified: - ex.Associativity = n - case n != o: - y.err( - t.Pos, - "%s: conflict with previous associativity declaration at %v", - name, y.pos(ex.Pos), - ) - } - } - - if n := t.Precedence; n >= 0 { - switch o := ex.Precedence; { - case o < 0: - ex.Precedence = n - case n != o: - y.err( - t.Pos, - "%s: conflict with previous precedence declaration at %v", - name, y.pos(ex.Pos), - ) - } - } - - if n := t.Type; n != "" { - switch o := ex.Type; { - case o == "": - ex.Type = n - case n != o: - y.err( - t.Pos, - "%s: conflict with previous type declaration at %v", - name, y.pos(ex.Pos), - ) - } - } - - if n := t.Value; n >= 0 { - switch o := ex.Value; { - case o < 0: - ex.Value = n - case n != o: - y.err( - t.Pos, - "%s: conflict with previous value declaration at %v", - name, y.pos(ex.Pos), - ) - } - } - continue - } - - nm := nmno.Identifier.(string) - if ex, ok := types[nm]; ok { - y.err(nmno.Token.Pos(), "%%type: previous declaration at %v", y.pos(ex.Pos)) - continue - } - - types[nm] = typeDecl{nmno.Token.Pos(), typ} - y.useSym(nm, nmno.Token.Pos()) - ls := "" - if n := nmno.LiteralStringOpt; n != nil { - ls = n.Token.Val - y.percTypeLits[nm] = &percTypeLit{nmno.Token.Pos(), ls} - if ex, ok := y.percTypeLitPos[ls]; ok { - y.err(n.Token.Pos(), "literal strings must be unique, previous association with name at %v: %s", y.fset.Position(ex), ls) - } else { - y.percTypeLitPos[ls] = nmno.Token.Pos() - } - } - } - default: - panic("internal error") - } - case 4: // ReservedWord Tag (No NameList) - case 5: // ERROR_VERBOSE - y.ErrorVerbose = true - default: - fmt.Println(def.Case) - panic("internal error") - } - } - return y.error() -} - -func (y *y) err(pos token.Pos, format string, arg ...interface{}) error { - return y.errp(y.pos(pos), format, arg...) -} - -func (y *y) errp(pos token.Position, format string, arg ...interface{}) error { - y.errors.Add(pos, fmt.Sprintf(format, arg...)) - return y.errors[len(y.errors)-1] -} - -func (y *y) error() error { - if len(y.errors) == 0 { - return nil - } - - y.errors.Sort() - return y.errors.Err() -} - -func (y *y) first(x []*Symbol) (r symSet) { // dragon, 4.4 - r = y.newSymSet(-1) - for _, sym := range x { - f1 := sym.first(y) - r.add(f1, false) - if !f1.hasEmpty() { - return r - } - } - - r.addEmpty() - return r -} - -func (y *y) follows() { // dragon, 4.4 - y.acceptSym.follow = y.newSymSet(y.endSym.id) // 1. - for { - changed := false - - for _, sym := range y.Syms { - if sym.IsTerminal { - continue - } - - for _, rule := range sym.Rules { - a := rule.Sym - if len(a.follow) == 0 { - a.follow = y.newSymSet(-1) - } - syms := rule.syms - n := len(syms) - for dot, b := range syms { - if len(b.follow) == 0 { - b.follow = y.newSymSet(-1) - } - f3 := false - if dot < n-1 { // 2. - beta := syms[dot+1] - f := beta.first(y) - if !b.follow.add(f, false) { - changed = true - } - f3 = f.hasEmpty() - } - if dot == n-1 || f3 { // 3. - if !b.follow.add(a.follow, true) { - changed = true - } - } - } - } - } - - if !changed { - break - } - } -} - -func (y *y) id(s itemSet) string { // Not reentrant. - b := y.idBuf[:0] //TODO try compute size in advance using log2 - for _, item := range s { - r, d := item.rule(), item.dot() - if r != 0 && d == 0 { - continue - } - - for r != 0 { - b = append(b, byte(r)&0x7f) - r >>= 7 - } - b = append(b, 0x80) - for d != 0 { - b = append(b, byte(d)&0x7f) - d >>= 7 - } - b = append(b, 0x81) - } - y.idBuf = b - return string(b) -} - -func (y *y) lookaheads() { - di := y.dummySym.id - dx, dm := di>>bitShift, 1<= 0 { - r[sym>>bitShift] = 1 << uint(sym&bitMask) - } - return r -} - -func (y *y) pos(po token.Pos) token.Position { return y.fset.Position(po) } - -func (y *y) reducible() error { - for si, state := range y.States { - for _, actions := range state.actions { - action := actions[0] - if action.kind != 'r' { - continue - } - - rule := y.Rules[action.arg] - if len(state.Reduce0(rule)) == 0 { - y.errp(y.pos(rule.Sym.Pos), "no token string reduces %s in state %d", rule.Sym, si) - } - } - } - return y.error() -} - -func (y *y) reductions() { - defaultLA := y.newSymSet(y.noSym.id) - for _, state := range y.States { - for i, item := range state.kernel { - if item.next(y) != nil { - continue - } - - // Item reduces a rule. - la := state.lookahead[i] - if len(la) == 0 { - la = defaultLA - } - for x, w := range la { - for bit := 0; bit < intBits && w != 0; bit, w = bit+1, w>>1 { - if w&1 == 0 { - continue - } - - sym := y.syms[x<>1 { - if w&1 == 0 { - continue - } - - sym := y.syms[x<") - case !s.IsTerminal: - f.Format(" <%s>", s) - default: - f.Format(" %s", s) - } - } - if la != nil { - f.Format(" [%s]", la) - } - f.Format("%i\n\n") - - switch { - case y.opts.Closures: - for _, item := range state.kernel.closure(y) { - rule := y.Rules[item.rule()] - f.Format("%v", item.dump(y)) - if y.opts.LA || item.next(y) == nil { - switch i, ok := state.kernel.find(item); { - case ok: - f.Format(" [%s]", state.lookahead[i].dump(y)) - default: - if i, ok := state.xitems.find(item); ok { - f.Format(" [%s]", state.xla[i].dump(y)) - } - } - } - if as := assocStr[rule.Associativity]; as != "" || rule.Precedence >= 0 { - f.Format(" // assoc %s, prec %d", as, rule.Precedence) - } - f.Format("\n") - } - default: - for i, item := range state.kernel { - rule := y.Rules[item.rule()] - f.Format("%v", item.dump(y)) - if y.opts.LA || item.dot() == len(rule.Components) { - f.Format(" [%s]", state.lookahead[i].dump(y)) - } - if as := assocStr[rule.Associativity]; as != "" || rule.Precedence >= 0 { - f.Format(" // assoc %s, prec %d", as, rule.Precedence) - } - f.Format("\n") - } - for i, item := range state.xitems { - rule := y.Rules[item.rule()] - f.Format("%v [%s]", item.dump(y), state.xla[i].dump(y)) - if as := assocStr[rule.Associativity]; as != "" || rule.Precedence >= 0 { - f.Format(" // assoc %s, prec %d", as, rule.Precedence) - } - f.Format("\n") - } - } - - f.Format("%i\n") - a := []string{} - var w int - for sym := range state.actions { - w = mathutil.Max(w, len(sym.Name)) - a = append(a, sym.Name) - } - sort.Strings(a) - type conflict struct { - sym *Symbol - acts []action - } - var conflicts []conflict - for _, nm := range a { - sym := y.Syms[nm] - acts := state.actions[sym] - act := acts[0] - f.Format("%-*s %v", w, nm, act) - if act.kind == 'r' { - f.Format(" (%s)", y.Rules[act.arg].Sym.Name) - } - if len(acts) > 1 { - conflicts = append(conflicts, conflict{sym, acts}) - } - f.Format("\n") - } - a = a[:0] - w = 0 - for sym := range state.gotos { - w = mathutil.Max(w, len(sym.Name)) - a = append(a, sym.Name) - } - sort.Strings(a) - for i, nm := range a { - if i == 0 { - f.Format("\n") - } - f.Format("%-*s %v\n", w, nm, state.gotos[y.Syms[nm]]) - } - for i, conflict := range conflicts { - if i == 0 { - if len(state.gotos) != 0 { - f.Format("\n") - } - } - sym := conflict.sym - nm := sym.Name - f.Format("conflict on %v", nm) - for _, act := range conflict.acts { - f.Format(", %s", act.String()) - } - if as := assocStr[sym.Associativity]; as != "" || sym.Precedence >= 0 { - f.Format(" // %v: assoc %s, prec %d", nm, assocStr[sym.Associativity], sym.Precedence) - } - f.Format("\n") - } - if len(state.resolved) != 0 { - f.Format("\n") - } - for _, v := range state.resolved { - f.Format("%s\n", v) - } - f.Format("%u%u\n") - } -} - -func (y *y) resolve(s *State, si int, sym *Symbol, conflict [2]action) (resolved, asShift bool) { - switch conflict[0].kind { - case 's': - rrule := y.Rules[conflict[1].arg] - sprec, rprec := sym.Precedence, rrule.Precedence - if sprec < 0 || rprec < 0 { - break - } - - var explain string - defer func() { - if y.opts.Resolved && resolved { - s.resolved = append(s.resolved, explain) - } - }() - - switch { - case sprec > rprec: - explain = fmt.Sprintf( - "Conflict between rule %d and token %s resolved as shift (%s < %s).", - rrule.RuleNum, sym, rrule.PrecSym, sym, - ) - s.actions[sym] = append(s.actions[sym], conflict[0]) - return true, true - case sprec < rprec: - explain = fmt.Sprintf( - "Conflict between rule %d and token %s resolved as reduce (%s < %s).", - rrule.RuleNum, sym, sym, rrule.PrecSym, - ) - s.actions[sym] = append(s.actions[sym], conflict[1]) - return true, false - case sym.Associativity == AssocLeft: - explain = fmt.Sprintf( - "Conflict between rule %d and token %s resolved as reduce (%%left %s).", - rrule.RuleNum, sym, sym, - ) - s.actions[sym] = append(s.actions[sym], conflict[1]) - return true, false - case sym.Associativity == AssocRight: - explain = fmt.Sprintf( - "Conflict between rule %d and token %s resolved as shift (%%right %s).", - rrule.RuleNum, sym, sym, - ) - s.actions[sym] = append(s.actions[sym], conflict[0]) - return true, true - case sym.Associativity == AssocNone: - y.err(sym.Pos, "%nonassoc symbol %s conflict in state %d", sym, si) - } - case 'r': - // nop - default: - panic("y: internal error 009") - } - return false, false -} - -func (y *y) litSym(s string) string { - if s[0] != '"' { - return s - } - - x := y.LiteralStrings[s] - if x == nil { - return s - } - - return x.Name -} - -func (y *y) rules0() error { - y.addRule(&Rule{ - Components: []string{""}, - Precedence: -1, - Sym: y.acceptSym, - }) - post := map[string]token.Pos{} - - for _, prule := range y.ast.Rules { - nm := prule.Name.Val - if nm == "error" { - y.err(prule.Name.Pos(), "a rule cannot use the reserved name error") - continue - } - - ruleSym := y.Syms[nm] - if ruleSym == nil { - ruleSym = &Symbol{Name: nm, Pos: prule.Name.Pos(), Value: -1} - y.Syms[nm] = ruleSym - } - lit := y.percTypeLits[nm] - if lit != nil { - ls := lit.lit - y.LiteralStrings[ls] = ruleSym - ruleSym.LiteralString = ls - } - ruleSym.Type = y.symTypes[ruleSym.Name].typeName - r := &Rule{ - Body: prule.Body, - MaxParentDlr: -1, - Precedence: -1, - Sym: ruleSym, - Token: prule.Token, - pos: prule.Name.Pos(), - } - if prule.Case == 0 { - r.Name = prule.Name - } - - // Make $n have index n. - pcomponents := append([]interface{}{nil}, prule.Body...) - if pr := prule.Precedence; pr != nil { - for pr != nil && pr.Case == 3 { // Precedence ';' - pr = pr.Precedence - } - - if pr != nil { - var nm string - switch x := pr.Identifier.(type) { - case int: - nm = fmt.Sprintf("%q", x) - case string: - nm = y.litSym(x) - default: - panic("internal error") - } - - s, ok := y.Syms[nm] - if !ok { - y.err(pr.Token2.Pos(), "%%prec: undefined symbol (1) %s", nm) //TODO -(1) - continue - } - - if !s.IsTerminal { - y.err(pr.Token2.Pos(), "must be a terminal: %s", nm) - continue - } - - r.Associativity, r.Precedence = s.Associativity, s.Precedence - r.PrecSym = s - r.ExplicitPrecSym = s - } - } - - var finalAct *yparser.Action - var components []string - for i, item := range pcomponents { - switch x := item.(type) { - case nil: - // no $0 component - case string: - x = y.litSym(x) - y.useSym(x, prule.Name.Pos()) - if len(components) == 0 && x == r.Sym.Name { - r.Sym.IsLeftRecursive = true - } - components = append(components, x) - sym := y.Syms[x] - if sym == nil || sym.Type != "" { - break - } - - sym.Type = y.symTypes[x].typeName - case *yparser.Action: - for _, v := range x.Values { - n := v.Num - tag := v.Tag - if v.Type == yparser.ActionValueDlrDlr && ruleSym.Type == "" && !y.opts.AllowTypeErrors { - y.err(v.Pos, "$$ of %s has no declared type", ruleSym) - } - if v.Type == yparser.ActionValueDlrNum || v.Type == yparser.ActionValueDlrTagNum { - switch { - case n < 1 || n >= len(pcomponents): - y.err(v.Pos, "undefined: $%d", n) - case n >= i: - y.err(v.Pos, "not accessible here: $%d", n) - case v.Type == yparser.ActionValueDlrNum: - csym := components[n-1] - if _, ok := post[csym]; !ok { - post[csym] = v.Pos - } - } - } - if v.Type == yparser.ActionValueDlrTagDlr || v.Type == yparser.ActionValueDlrTagNum { - switch _, ok := y.types[tag]; { - case ok: - y.useType(v.Pos, tag) - default: - y.err(v.Pos, "undefined type %s", tag) - } - } - } - - if i == len(pcomponents)-1 { - finalAct = x - break - } - - y.synthRule++ - s := &Symbol{Name: fmt.Sprintf("$@%d", y.synthRule), Value: -1} - y.Syms[s.Name] = s - y.addRule(&Rule{ - Action: x, - MaxParentDlr: i - 1, - Parent: r, - Sym: s, - maxDlr: -1, - Precedence: -1, - }) - components = append(components, s.Name) - case int: // literal - nm := fmt.Sprintf("%q", x) - components = append(components, nm) - pcomponents[i] = nm - s := y.Syms[nm] - if s != nil { - break - } - - s = &Symbol{Name: nm, IsTerminal: true, Precedence: -1, Value: x} - y.Syms[nm] = s - default: - panic("internal error") - } - } - r.Action = finalAct - r.maxDlr = len(pcomponents) - 1 - r.Components = components - if len(components) != 0 && components[len(components)-1] == r.Sym.Name { - r.Sym.IsRightRecursive = true - } - y.addRule(r) - if r.Sym.Type != "" && r.Action == nil && len(components) == 0 { - y.err(prule.Token.Pos(), "empty rule for typed nonterminal, and no action") - } - - if y.firstRule == 0 { - y.firstRule = r.RuleNum - } - } - - if y.Start == "" { - y.Start = y.Rules[y.firstRule].Sym.Name - } - y.useSym(y.Start, y.ast.Rules[0].Token.Pos()) - y.Rules[0].Components[0] = y.Start - - for _, rule := range y.Rules { - if rule.Precedence >= 0 { - continue - } - - components := rule.Components - if len(components) == 0 { - rule.Sym.derivesE = true - rule.Sym.derivesEValid = true - continue - } - - for i := len(components) - 1; i >= 0; i-- { - if sym := y.Syms[components[i]]; sym != nil && sym.IsTerminal { - rule.Associativity, rule.Precedence = sym.Associativity, sym.Precedence - rule.PrecSym = sym - break - } - } - } - - for nm, pos := range y.typesUsed { - if _, ok := y.types[nm]; !ok { - y.err(pos, "undefined type %s", nm) - } - } - - for nm, pos := range post { - sym := y.Syms[nm] - if (sym == nil || sym.Type == "") && !y.opts.AllowTypeErrors { - y.err(pos, "%s has no declared type", nm) - } - } - - //TODO for nm, pos := range y.types { - //TODO if _, ok := y.typesUsed[nm]; !ok { - //TODO y.err(pos, "type declared and not used: %s", nm) - //TODO } - //TODO } - - for nm, pos := range y.symsUsed { - if _, ok := y.Syms[nm]; !ok { - y.err(pos, "undefined symbol %s", nm) - } - } - - y.syms = make([]*Symbol, len(y.Syms)) - y.syms[0] = y.emptySym - x := 1 - a := make([]string, 0, len(y.Syms)) - for nm := range y.Syms { - a = append(a, nm) - } - sort.Strings(a) - for _, nm := range a { - s := y.Syms[nm] - if s != y.emptySym { - s.id = x - y.syms[x] = s - x++ - } - if nm[0] == '$' || s.IsTerminal { - continue - } - - if _, ok := y.symsUsed[nm]; !ok { - y.err(s.Pos, "non terminal declared and not used: %s", nm) - } - } - y.symSetCap = (len(y.syms) + intBits - 1) / intBits - for nm := range y.nonTerminals { - nt, ok := y.Syms[nm] - if !ok { - continue - } - - if nt.IsTerminal { - y.err(nt.Pos, "expected %s to be a non terminal", nt) - } - - } - - for _, rule := range y.Rules { - rule.syms = make([]*Symbol, len(rule.Components)) - for i, v := range rule.Components { - rule.syms[i] = y.Syms[v] - } - if y.opts.AllowTypeErrors { - continue - } - - if e := rule.Sym.Type; e != "" && rule.Action == nil && len(rule.Components) != 0 { - if g := y.Syms[rule.Components[0]].Type; g != e { - y.err(rule.pos, "type clash on default action: <%s> != <%s>", e, g) - } - } - } - return y.error() -} - -func (y *y) states0() { - itemSet{0}.state(y) - syms := y.newSymSet(-1) - q := []int{0} - for len(q) != 0 { - s := q[len(q)-1] - state := y.States[s] - q = q[:len(q)-1] - cls := state.kernel.closure(y) - syms.clear() - for _, item := range cls { - sym := item.next(y) - if sym == nil { // reduction - if len(item.syms(y)) == 0 { // rule -> ε - state.xitems = append(state.xitems, item) - } - continue - } - - goTo := cls.goTo(y, sym) - n, ok := goTo.state(y) - if !ok { - q = append(q, n) - } else { - y.isPool = append(y.isPool, goTo) - } - - state.trans[trans{item, sym}] = stateItem{n, goTo.mustFind(item + 1)} - if syms.add1(sym.id) { - continue - } - - switch { - case sym.IsTerminal: - state.actions[sym] = append(state.actions[sym], action{'s', n}) - default: - state.gotos[sym] = action{'g', n} - } - } - y.entries += len(state.actions) + len(state.gotos) - state.xla = make([]symSet, len(state.xitems)) - } -} - -func (y *y) useSym(nm string, pos token.Pos) { - if _, ok := y.symsUsed[nm]; ok { - return - } - - y.symsUsed[nm] = pos -} - -func (y *y) useType(pos token.Pos, name string) { - if name == "" { - return - } - - if _, ok := y.typesUsed[name]; ok { - return - } - - y.typesUsed[name] = pos -} - -func (y *y) xerrors() error { - n := len(y.opts.XErrorsSrc) - if n == 0 { - return y.error() - } - - if y.opts.XErrorsName == "" { - y.opts.XErrorsName = "" - } - var s scanner.Scanner - s.Init( - y.fset.AddFile(y.opts.XErrorsName, -1, n), - y.opts.XErrorsSrc, - func(pos token.Position, msg string) { - y.errp(pos, msg) - }, - 0, // Ignore comments - ) - - var stateSet []int - var stateSets [][]int - var example []string - var examples [][]string - m := map[string]string{} - var list []XError - acceptInt := true -examples: - for { - switch pos, tok, lit := s.Scan(); tok { - case token.INT: - if !acceptInt { - y.err(pos, "state number not accepted here") - break - } - - n, err := strconv.ParseUint(lit, 10, 31) - if err != nil { - y.err(pos, "%v", err) - break - } - - stateSet = append(stateSet, int(n)) - case token.IDENT: - acceptInt = false - sym, ok := y.Syms[lit] - if !ok { - y.err(pos, "undefined symbol %s", lit) - break - } - - if !sym.IsTerminal { - y.err(pos, "not a terminal symbol: %s", lit) - break - } - - if lit == "error" { - lit = "" - } - example = append(example, lit) - case token.CHAR: - acceptInt = false - t, err := strconv.Unquote(lit) - if err != nil { - y.err(pos, "%v", err) - break - } - - nm := fmt.Sprintf("%q", []rune(t)[0]) - if _, ok := y.Syms[nm]; !ok { - y.Syms[nm] = &Symbol{Name: nm, IsTerminal: true, Precedence: -1, Value: int([]rune(lit)[0])} - } - example = append(example, nm) - case token.OR: // '|' - stateSets = append(stateSets, stateSet) - stateSet = nil - examples = append(examples, example) - example = nil - case token.STRING: - acceptInt = true - parse := func(toks []string) (stack []int, la *Symbol, ok bool) { - lex := func() *Symbol { - if la != nil { - return la - } - - if len(toks) == 0 { - la = y.endSym - return la - } - - la = y.Syms[toks[0]] - toks = toks[1:] - return la - } - - stack = []int{0} - for { - state := y.States[stack[len(stack)-1]] - tok := lex() - var action action - actions, ok := state.actions[tok] - if !ok { - return stack, la, true - } - - action = actions[0] - switch action.kind { - case 'a': - return stack, la, false - case 's': - la = nil - stack = append(stack, action.arg) - case 'r': - rule := y.Rules[action.arg] - stack = stack[:len(stack)-len(rule.Components)] - stack = append(stack, y.States[stack[len(stack)-1]].gotos[rule.Sym].arg) - default: - panic("y: internal error 010") - } - } - } - lit := lit[1 : len(lit)-1] - stateSets = append(stateSets, stateSet) - for i, example := range append(examples, example) { - stateSet := stateSets[i] - if len(stateSet) != 0 { - if len(example) == 0 { - example = []string{"$end"} - } - - last := example[len(example)-1] - la := y.Syms[last] - for _, state := range stateSet { - xe := XError{[]int{state}, la, lit} - list = append(list, xe) - m[xe.mapKey()] = lit - } - continue - } - - stack, la, ok := parse(example) - if !ok { - y.err(pos, "parser unexpectedly accepts xerror example: %v %s", example, lit) - continue - } - - xe := XError{stack, la, lit} - list = append(list, xe) - m[xe.mapKey()] = lit - } - example = example[:0] - examples = examples[:0] - stateSet = stateSet[:0] - stateSets = stateSets[:0] - case token.EOF: - break examples - case token.ILLEGAL: - y.err(pos, "illegal token %s (%q)", tok, lit) - break examples - case token.SEMICOLON: - if lit == "\n" { - break - } - - fallthrough - default: - y.err(pos, "unexpected token %s (%q)", tok, lit) - break examples - } - } - for _, v := range list { - if m[v.mapKey()] == v.Msg { - y.XErrors = append(y.XErrors, v) - } - } - return y.error() -} - -func (y *y) zeroPaths() { - if y.zeroPathsValid { - return - } - - var h zpHeap - s0 := y.States[0] - m := make([]bool, len(y.States)) - h.add(y, s0) - m[0] = true - for n := len(y.States) - 1; n != 0 && h.Len() != 0; { - e := heap.Pop(&h).(*zpElem) - d := e.dest - if d.psym == nil { - d.parent = e.src - d.psym = e.sym - d.distance = e.distance - n-- - } - if di := d.id; !m[di] { - m[di] = true - h.add(y, d) - } - } - y.zeroPathsValid = true -} - -type zpElem struct { - src, dest *State - sym *Symbol - distance int -} - -func (z *zpElem) less(b *zpElem) bool { - if z.distance < b.distance { - return true - } - - if z.distance > b.distance { - return false - } - - if z.sym.Name < b.sym.Name { - return true - } - - if z.sym.Name > b.sym.Name { - return false - } - - return z.src.id < z.dest.id -} - -type zpHeap []*zpElem - -func (z zpHeap) Len() int { return len(z) } -func (z zpHeap) Less(i, j int) bool { return z[i].less(z[j]) } -func (z zpHeap) Swap(i, j int) { z[i], z[j] = z[j], z[i] } -func (z *zpHeap) Push(x interface{}) { *z = append(*z, x.(*zpElem)) } - -func (z *zpHeap) Pop() interface{} { - s := *z - r := s[len(s)-1] - *z = s[:len(s)-1] - return r -} - -func (z *zpHeap) add(y *y, s *State) { - var a []string - for sym := range s.actions { - a = append(a, sym.Name) - } - sort.Strings(a) - for _, nm := range a { - sym := y.Syms[nm] - actions := s.actions[sym] - action := actions[0] - if action.kind == 's' { - heap.Push(z, &zpElem{s, y.States[action.arg], sym, s.distance + len(sym.MinString())}) - } - } - a = a[:0] - for sym := range s.gotos { - a = append(a, sym.Name) - } - sort.Strings(a) - for _, nm := range a { - sym := y.Syms[nm] - action := s.gotos[sym] - heap.Push(z, &zpElem{s, y.States[action.arg], sym, s.distance + len(sym.MinString())}) - } -} diff --git a/vendor/github.com/pingcap/errors/LICENSE b/vendor/github.com/pingcap/errors/LICENSE new file mode 100644 index 0000000000000..835ba3e755cef --- /dev/null +++ b/vendor/github.com/pingcap/errors/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2015, Dave Cheney +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/pingcap/errors/errors.go b/vendor/github.com/pingcap/errors/errors.go new file mode 100644 index 0000000000000..2e1d3f6289668 --- /dev/null +++ b/vendor/github.com/pingcap/errors/errors.go @@ -0,0 +1,324 @@ +// Package errors provides simple error handling primitives. +// +// The traditional error handling idiom in Go is roughly akin to +// +// if err != nil { +// return err +// } +// +// which applied recursively up the call stack results in error reports +// without context or debugging information. The errors package allows +// programmers to add context to the failure path in their code in a way +// that does not destroy the original value of the error. +// +// Adding context to an error +// +// The errors.Annotate function returns a new error that adds context to the +// original error by recording a stack trace at the point Annotate is called, +// and the supplied message. For example +// +// _, err := ioutil.ReadAll(r) +// if err != nil { +// return errors.Annotate(err, "read failed") +// } +// +// If additional control is required the errors.AddStack and errors.WithMessage +// functions destructure errors.Annotate into its component operations of annotating +// an error with a stack trace and an a message, respectively. +// +// Retrieving the cause of an error +// +// Using errors.Annotate constructs a stack of errors, adding context to the +// preceding error. Depending on the nature of the error it may be necessary +// to reverse the operation of errors.Annotate to retrieve the original error +// for inspection. Any error value which implements this interface +// +// type causer interface { +// Cause() error +// } +// +// can be inspected by errors.Cause. errors.Cause will recursively retrieve +// the topmost error which does not implement causer, which is assumed to be +// the original cause. For example: +// +// switch err := errors.Cause(err).(type) { +// case *MyError: +// // handle specifically +// default: +// // unknown error +// } +// +// causer interface is not exported by this package, but is considered a part +// of stable public API. +// errors.Unwrap is also available: this will retrieve the next error in the chain. +// +// Formatted printing of errors +// +// All error values returned from this package implement fmt.Formatter and can +// be formatted by the fmt package. The following verbs are supported +// +// %s print the error. If the error has a Cause it will be +// printed recursively +// %v see %s +// %+v extended format. Each Frame of the error's StackTrace will +// be printed in detail. +// +// Retrieving the stack trace of an error or wrapper +// +// New, Errorf, Annotate, and Annotatef record a stack trace at the point they are invoked. +// This information can be retrieved with the StackTracer interface that returns +// a StackTrace. Where errors.StackTrace is defined as +// +// type StackTrace []Frame +// +// The Frame type represents a call site in the stack trace. Frame supports +// the fmt.Formatter interface that can be used for printing information about +// the stack trace of this error. For example: +// +// if stacked := errors.GetStackTracer(err); stacked != nil { +// for _, f := range stacked.StackTrace() { +// fmt.Printf("%+s:%d", f) +// } +// } +// +// See the documentation for Frame.Format for more details. +// +// errors.Find can be used to search for an error in the error chain. +package errors + +import ( + "fmt" + "io" +) + +// New returns an error with the supplied message. +// New also records the stack trace at the point it was called. +func New(message string) error { + return &fundamental{ + msg: message, + stack: callers(), + } +} + +// Errorf formats according to a format specifier and returns the string +// as a value that satisfies error. +// Errorf also records the stack trace at the point it was called. +func Errorf(format string, args ...interface{}) error { + return &fundamental{ + msg: fmt.Sprintf(format, args...), + stack: callers(), + } +} + +// StackTraceAware is an optimization to avoid repetitive traversals of an error chain. +// HasStack checks for this marker first. +// Annotate/Wrap and Annotatef/Wrapf will produce this marker. +type StackTraceAware interface { + HasStack() bool +} + +// HasStack tells whether a StackTracer exists in the error chain +func HasStack(err error) bool { + if errWithStack, ok := err.(StackTraceAware); ok { + return errWithStack.HasStack() + } + return GetStackTracer(err) != nil +} + +// fundamental is an error that has a message and a stack, but no caller. +type fundamental struct { + msg string + *stack +} + +func (f *fundamental) Error() string { return f.msg } + +func (f *fundamental) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + io.WriteString(s, f.msg) + f.stack.Format(s, verb) + return + } + fallthrough + case 's': + io.WriteString(s, f.msg) + case 'q': + fmt.Fprintf(s, "%q", f.msg) + } +} + +// WithStack annotates err with a stack trace at the point WithStack was called. +// If err is nil, WithStack returns nil. +// +// For most use cases this is deprecated and AddStack should be used (which will ensure just one stack trace). +// However, one may want to use this in some situations, for example to create a 2nd trace across a goroutine. +func WithStack(err error) error { + if err == nil { + return nil + } + + return &withStack{ + err, + callers(), + } +} + +// AddStack is similar to WithStack. +// However, it will first check with HasStack to see if a stack trace already exists in the causer chain before creating another one. +func AddStack(err error) error { + if HasStack(err) { + return err + } + return WithStack(err) +} + +type withStack struct { + error + *stack +} + +func (w *withStack) Cause() error { return w.error } + +func (w *withStack) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprintf(s, "%+v", w.Cause()) + w.stack.Format(s, verb) + return + } + fallthrough + case 's': + io.WriteString(s, w.Error()) + case 'q': + fmt.Fprintf(s, "%q", w.Error()) + } +} + +// Wrap returns an error annotating err with a stack trace +// at the point Wrap is called, and the supplied message. +// If err is nil, Wrap returns nil. +// +// For most use cases this is deprecated in favor of Annotate. +// Annotate avoids creating duplicate stack traces. +func Wrap(err error, message string) error { + if err == nil { + return nil + } + hasStack := HasStack(err) + err = &withMessage{ + cause: err, + msg: message, + causeHasStack: hasStack, + } + return &withStack{ + err, + callers(), + } +} + +// Wrapf returns an error annotating err with a stack trace +// at the point Wrapf is call, and the format specifier. +// If err is nil, Wrapf returns nil. +// +// For most use cases this is deprecated in favor of Annotatef. +// Annotatef avoids creating duplicate stack traces. +func Wrapf(err error, format string, args ...interface{}) error { + if err == nil { + return nil + } + hasStack := HasStack(err) + err = &withMessage{ + cause: err, + msg: fmt.Sprintf(format, args...), + causeHasStack: hasStack, + } + return &withStack{ + err, + callers(), + } +} + +// WithMessage annotates err with a new message. +// If err is nil, WithMessage returns nil. +func WithMessage(err error, message string) error { + if err == nil { + return nil + } + return &withMessage{ + cause: err, + msg: message, + causeHasStack: HasStack(err), + } +} + +type withMessage struct { + cause error + msg string + causeHasStack bool +} + +func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() } +func (w *withMessage) Cause() error { return w.cause } +func (w *withMessage) HasStack() bool { return w.causeHasStack } + +func (w *withMessage) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprintf(s, "%+v\n", w.Cause()) + io.WriteString(s, w.msg) + return + } + fallthrough + case 's', 'q': + io.WriteString(s, w.Error()) + } +} + +// Cause returns the underlying cause of the error, if possible. +// An error value has a cause if it implements the following +// interface: +// +// type causer interface { +// Cause() error +// } +// +// If the error does not implement Cause, the original error will +// be returned. If the error is nil, nil will be returned without further +// investigation. +func Cause(err error) error { + cause := Unwrap(err) + if cause == nil { + return err + } + return Cause(cause) +} + +// Unwrap uses causer to return the next error in the chain or nil. +// This goes one-level deeper, whereas Cause goes as far as possible +func Unwrap(err error) error { + type causer interface { + Cause() error + } + if unErr, ok := err.(causer); ok { + return unErr.Cause() + } + return nil +} + +// Find an error in the chain that matches a test function. +// returns nil if no error is found. +func Find(origErr error, test func(error) bool) error { + var foundErr error + WalkDeep(origErr, func(err error) bool { + if test(err) { + foundErr = err + return true + } + return false + }) + return foundErr +} diff --git a/vendor/github.com/pingcap/errors/group.go b/vendor/github.com/pingcap/errors/group.go new file mode 100644 index 0000000000000..e5a969ab76f76 --- /dev/null +++ b/vendor/github.com/pingcap/errors/group.go @@ -0,0 +1,42 @@ +package errors + +// ErrorGroup is an interface for multiple errors that are not a chain. +// This happens for example when executing multiple operations in parallel. +type ErrorGroup interface { + Errors() []error +} + +// Errors uses the ErrorGroup interface to return a slice of errors. +// If the ErrorGroup interface is not implemented it returns an array containing just the given error. +func Errors(err error) []error { + if eg, ok := err.(ErrorGroup); ok { + return eg.Errors() + } + return []error{err} +} + +// WalkDeep does a depth-first traversal of all errors. +// Any ErrorGroup is traversed (after going deep). +// The visitor function can return true to end the traversal early +// In that case, WalkDeep will return true, otherwise false. +func WalkDeep(err error, visitor func(err error) bool) bool { + // Go deep + unErr := err + for unErr != nil { + if done := visitor(unErr); done { + return true + } + unErr = Unwrap(unErr) + } + + // Go wide + if group, ok := err.(ErrorGroup); ok { + for _, err := range group.Errors() { + if early := WalkDeep(err, visitor); early { + return true + } + } + } + + return false +} diff --git a/vendor/github.com/pingcap/errors/juju_adaptor.go b/vendor/github.com/pingcap/errors/juju_adaptor.go new file mode 100644 index 0000000000000..0b20f57370c43 --- /dev/null +++ b/vendor/github.com/pingcap/errors/juju_adaptor.go @@ -0,0 +1,79 @@ +package errors + +import ( + "fmt" +) + +// ==================== juju adaptor start ======================== + +// Trace just calls AddStack. +func Trace(err error) error { + return AddStack(err) +} + +// Annotate adds a message and ensures there is a stack trace. +func Annotate(err error, message string) error { + if err == nil { + return nil + } + hasStack := HasStack(err) + err = &withMessage{ + cause: err, + msg: message, + causeHasStack: hasStack, + } + if hasStack { + return err + } + return &withStack{ + err, + callers(), + } +} + +// Annotatef adds a message and ensures there is a stack trace. +func Annotatef(err error, format string, args ...interface{}) error { + if err == nil { + return nil + } + hasStack := HasStack(err) + err = &withMessage{ + cause: err, + msg: fmt.Sprintf(format, args...), + causeHasStack: hasStack, + } + if hasStack { + return err + } + return &withStack{ + err, + callers(), + } +} + +// ErrorStack will format a stack trace if it is available, otherwise it will be Error() +// If the error is nil, the empty string is returned +// Note that this just calls fmt.Sprintf("%+v", err) +func ErrorStack(err error) string { + if err == nil { + return "" + } + return fmt.Sprintf("%+v", err) +} + +// NotFoundf represents an error with not found message. +func NotFoundf(format string, args ...interface{}) error { + return Errorf(format+" not found", args...) +} + +// BadRequestf represents an error with bad request message. +func BadRequestf(format string, args ...interface{}) error { + return Errorf(format+" bad request", args...) +} + +// NotSupportedf represents an error with not supported message. +func NotSupportedf(format string, args ...interface{}) error { + return Errorf(format+" not supported", args...) +} + +// ==================== juju adaptor end ======================== diff --git a/vendor/github.com/pingcap/errors/stack.go b/vendor/github.com/pingcap/errors/stack.go new file mode 100644 index 0000000000000..bb1e6a84f339d --- /dev/null +++ b/vendor/github.com/pingcap/errors/stack.go @@ -0,0 +1,226 @@ +package errors + +import ( + "bytes" + "fmt" + "io" + "path" + "runtime" + "strconv" + "strings" +) + +// StackTracer retrieves the StackTrace +// Generally you would want to use the GetStackTracer function to do that. +type StackTracer interface { + StackTrace() StackTrace +} + +// GetStackTracer will return the first StackTracer in the causer chain. +// This function is used by AddStack to avoid creating redundant stack traces. +// +// You can also use the StackTracer interface on the returned error to get the stack trace. +func GetStackTracer(origErr error) StackTracer { + var stacked StackTracer + WalkDeep(origErr, func(err error) bool { + if stackTracer, ok := err.(StackTracer); ok { + stacked = stackTracer + return true + } + return false + }) + return stacked +} + +// Frame represents a program counter inside a stack frame. +type Frame uintptr + +// pc returns the program counter for this frame; +// multiple frames may have the same PC value. +func (f Frame) pc() uintptr { return uintptr(f) - 1 } + +// file returns the full path to the file that contains the +// function for this Frame's pc. +func (f Frame) file() string { + fn := runtime.FuncForPC(f.pc()) + if fn == nil { + return "unknown" + } + file, _ := fn.FileLine(f.pc()) + return file +} + +// line returns the line number of source code of the +// function for this Frame's pc. +func (f Frame) line() int { + fn := runtime.FuncForPC(f.pc()) + if fn == nil { + return 0 + } + _, line := fn.FileLine(f.pc()) + return line +} + +// Format formats the frame according to the fmt.Formatter interface. +// +// %s source file +// %d source line +// %n function name +// %v equivalent to %s:%d +// +// Format accepts flags that alter the printing of some verbs, as follows: +// +// %+s function name and path of source file relative to the compile time +// GOPATH separated by \n\t (\n\t) +// %+v equivalent to %+s:%d +func (f Frame) Format(s fmt.State, verb rune) { + f.format(s, s, verb) +} + +// format allows stack trace printing calls to be made with a bytes.Buffer. +func (f Frame) format(w io.Writer, s fmt.State, verb rune) { + switch verb { + case 's': + switch { + case s.Flag('+'): + pc := f.pc() + fn := runtime.FuncForPC(pc) + if fn == nil { + io.WriteString(w, "unknown") + } else { + file, _ := fn.FileLine(pc) + io.WriteString(w, fn.Name()) + io.WriteString(w, "\n\t") + io.WriteString(w, file) + } + default: + io.WriteString(w, path.Base(f.file())) + } + case 'd': + io.WriteString(w, strconv.Itoa(f.line())) + case 'n': + name := runtime.FuncForPC(f.pc()).Name() + io.WriteString(w, funcname(name)) + case 'v': + f.format(w, s, 's') + io.WriteString(w, ":") + f.format(w, s, 'd') + } +} + +// StackTrace is stack of Frames from innermost (newest) to outermost (oldest). +type StackTrace []Frame + +// Format formats the stack of Frames according to the fmt.Formatter interface. +// +// %s lists source files for each Frame in the stack +// %v lists the source file and line number for each Frame in the stack +// +// Format accepts flags that alter the printing of some verbs, as follows: +// +// %+v Prints filename, function, and line number for each Frame in the stack. +func (st StackTrace) Format(s fmt.State, verb rune) { + var b bytes.Buffer + switch verb { + case 'v': + switch { + case s.Flag('+'): + b.Grow(len(st) * stackMinLen) + for _, fr := range st { + b.WriteByte('\n') + fr.format(&b, s, verb) + } + case s.Flag('#'): + fmt.Fprintf(&b, "%#v", []Frame(st)) + default: + st.formatSlice(&b, s, verb) + } + case 's': + st.formatSlice(&b, s, verb) + } + io.Copy(s, &b) +} + +// formatSlice will format this StackTrace into the given buffer as a slice of +// Frame, only valid when called with '%s' or '%v'. +func (st StackTrace) formatSlice(b *bytes.Buffer, s fmt.State, verb rune) { + b.WriteByte('[') + if len(st) == 0 { + b.WriteByte(']') + return + } + + b.Grow(len(st) * (stackMinLen / 4)) + st[0].format(b, s, verb) + for _, fr := range st[1:] { + b.WriteByte(' ') + fr.format(b, s, verb) + } + b.WriteByte(']') +} + +// stackMinLen is a best-guess at the minimum length of a stack trace. It +// doesn't need to be exact, just give a good enough head start for the buffer +// to avoid the expensive early growth. +const stackMinLen = 96 + +// stack represents a stack of program counters. +type stack []uintptr + +func (s *stack) Format(st fmt.State, verb rune) { + switch verb { + case 'v': + switch { + case st.Flag('+'): + var b bytes.Buffer + b.Grow(len(*s) * stackMinLen) + for _, pc := range *s { + f := Frame(pc) + b.WriteByte('\n') + f.format(&b, st, 'v') + } + io.Copy(st, &b) + } + } +} + +func (s *stack) StackTrace() StackTrace { + f := make([]Frame, len(*s)) + for i := 0; i < len(f); i++ { + f[i] = Frame((*s)[i]) + } + return f +} + +func callers() *stack { + return callersSkip(4) +} + +func callersSkip(skip int) *stack { + const depth = 32 + var pcs [depth]uintptr + n := runtime.Callers(skip, pcs[:]) + var st stack = pcs[0:n] + return &st +} + +// funcname removes the path prefix component of a function's name reported by func.Name(). +func funcname(name string) string { + i := strings.LastIndex(name, "/") + name = name[i+1:] + i = strings.Index(name, ".") + return name[i+1:] +} + +// NewStack is for library implementers that want to generate a stack trace. +// Normally you should insted use AddStack to get an error with a stack trace. +// +// The result of this function can be turned into a stack trace by calling .StackTrace() +// +// This function takes an argument for the number of stack frames to skip. +// This avoids putting stack generation function calls like this one in the stack trace. +// A value of 0 will give you the line that called NewStack(0) +// A library author wrapping this in their own function will want to use a value of at least 1. +func NewStack(skip int) StackTracer { + return callersSkip(skip + 3) +} diff --git a/vendor/github.com/pingcap/parser/LICENSE b/vendor/github.com/pingcap/parser/LICENSE new file mode 100644 index 0000000000000..261eeb9e9f8b2 --- /dev/null +++ b/vendor/github.com/pingcap/parser/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/ast/ast.go b/vendor/github.com/pingcap/parser/ast/ast.go similarity index 98% rename from ast/ast.go rename to vendor/github.com/pingcap/parser/ast/ast.go index 3a3cf169e7ae9..2f3be0b4b4f5a 100644 --- a/ast/ast.go +++ b/vendor/github.com/pingcap/parser/ast/ast.go @@ -18,8 +18,8 @@ package ast import ( "io" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/parser/types" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/types" ) // Node is the basic element of the AST. diff --git a/ast/base.go b/vendor/github.com/pingcap/parser/ast/base.go similarity index 98% rename from ast/base.go rename to vendor/github.com/pingcap/parser/ast/base.go index d6455dff1ee04..984d8e4d95802 100644 --- a/ast/base.go +++ b/vendor/github.com/pingcap/parser/ast/base.go @@ -13,7 +13,7 @@ package ast -import "github.com/pingcap/tidb/parser/types" +import "github.com/pingcap/parser/types" // node is the struct implements node interface except for Accept method. // Node implementations should embed it in. diff --git a/ast/ddl.go b/vendor/github.com/pingcap/parser/ast/ddl.go similarity index 99% rename from ast/ddl.go rename to vendor/github.com/pingcap/parser/ast/ddl.go index 7db73c4cc2bf9..aefa2eed2dd13 100644 --- a/ast/ddl.go +++ b/vendor/github.com/pingcap/parser/ast/ddl.go @@ -14,8 +14,8 @@ package ast import ( - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/parser/types" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/types" ) var ( diff --git a/ast/dml.go b/vendor/github.com/pingcap/parser/ast/dml.go similarity index 99% rename from ast/dml.go rename to vendor/github.com/pingcap/parser/ast/dml.go index d3f6575dee0fe..2046f3ad24eb9 100644 --- a/ast/dml.go +++ b/vendor/github.com/pingcap/parser/ast/dml.go @@ -14,9 +14,9 @@ package ast import ( - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/util/auth" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" ) var ( diff --git a/ast/expressions.go b/vendor/github.com/pingcap/parser/ast/expressions.go similarity index 99% rename from ast/expressions.go rename to vendor/github.com/pingcap/parser/ast/expressions.go index 56e95b0f963c5..e81f878760b8d 100644 --- a/ast/expressions.go +++ b/vendor/github.com/pingcap/parser/ast/expressions.go @@ -19,8 +19,8 @@ import ( "regexp" "strings" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/parser/opcode" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/opcode" ) var ( diff --git a/ast/flag.go b/vendor/github.com/pingcap/parser/ast/flag.go similarity index 100% rename from ast/flag.go rename to vendor/github.com/pingcap/parser/ast/flag.go diff --git a/ast/functions.go b/vendor/github.com/pingcap/parser/ast/functions.go similarity index 99% rename from ast/functions.go rename to vendor/github.com/pingcap/parser/ast/functions.go index 3f88fbc0c9b50..495c6e54f030b 100644 --- a/ast/functions.go +++ b/vendor/github.com/pingcap/parser/ast/functions.go @@ -17,8 +17,8 @@ import ( "fmt" "io" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/parser/types" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/types" ) var ( diff --git a/ast/misc.go b/vendor/github.com/pingcap/parser/ast/misc.go similarity index 99% rename from ast/misc.go rename to vendor/github.com/pingcap/parser/ast/misc.go index 779771c05dc98..fd179f6c6394d 100644 --- a/ast/misc.go +++ b/vendor/github.com/pingcap/parser/ast/misc.go @@ -18,9 +18,9 @@ import ( "fmt" "strings" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/util/auth" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" ) var ( diff --git a/ast/read_only_checker.go b/vendor/github.com/pingcap/parser/ast/read_only_checker.go similarity index 100% rename from ast/read_only_checker.go rename to vendor/github.com/pingcap/parser/ast/read_only_checker.go diff --git a/ast/stats.go b/vendor/github.com/pingcap/parser/ast/stats.go similarity index 98% rename from ast/stats.go rename to vendor/github.com/pingcap/parser/ast/stats.go index ea13f24d7a2f0..5db8664a511e2 100644 --- a/ast/stats.go +++ b/vendor/github.com/pingcap/parser/ast/stats.go @@ -13,7 +13,7 @@ package ast -import "github.com/pingcap/tidb/model" +import "github.com/pingcap/parser/model" var ( _ StmtNode = &AnalyzeTableStmt{} diff --git a/util/auth/auth.go b/vendor/github.com/pingcap/parser/auth/auth.go similarity index 97% rename from util/auth/auth.go rename to vendor/github.com/pingcap/parser/auth/auth.go index 74187d6e0efdb..1d33fbdc01e37 100644 --- a/util/auth/auth.go +++ b/vendor/github.com/pingcap/parser/auth/auth.go @@ -19,8 +19,8 @@ import ( "encoding/hex" "fmt" - "github.com/pingcap/tidb/terror" - "github.com/pkg/errors" + "github.com/pingcap/errors" + "github.com/pingcap/parser/terror" ) // UserIdentity represents username and hostname. diff --git a/util/charset/charset.go b/vendor/github.com/pingcap/parser/charset/charset.go similarity index 99% rename from util/charset/charset.go rename to vendor/github.com/pingcap/parser/charset/charset.go index 6967b9537a65c..0511f554019e0 100644 --- a/util/charset/charset.go +++ b/vendor/github.com/pingcap/parser/charset/charset.go @@ -16,8 +16,8 @@ package charset import ( "strings" - "github.com/pingcap/tidb/mysql" - "github.com/pkg/errors" + "github.com/pingcap/errors" + "github.com/pingcap/parser/mysql" ) // Charset is a charset. diff --git a/util/charset/encoding_table.go b/vendor/github.com/pingcap/parser/charset/encoding_table.go similarity index 100% rename from util/charset/encoding_table.go rename to vendor/github.com/pingcap/parser/charset/encoding_table.go diff --git a/vendor/github.com/pingcap/parser/format/format.go b/vendor/github.com/pingcap/parser/format/format.go new file mode 100644 index 0000000000000..0a14a6d362650 --- /dev/null +++ b/vendor/github.com/pingcap/parser/format/format.go @@ -0,0 +1,195 @@ +// Copyright (c) 2014 The sortutil Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSES/STRUTIL-LICENSE file. + +// Copyright 2015 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package format + +import ( + "bytes" + "fmt" + "io" +) + +const ( + st0 = iota + stBOL + stPERC + stBOLPERC +) + +// Formatter is an io.Writer extended formatter by a fmt.Printf like function Format. +type Formatter interface { + io.Writer + Format(format string, args ...interface{}) (n int, errno error) +} + +type indentFormatter struct { + io.Writer + indent []byte + indentLevel int + state int +} + +var replace = map[rune]string{ + '\000': "\\0", + '\'': "''", + '\n': "\\n", + '\r': "\\r", +} + +// IndentFormatter returns a new Formatter which interprets %i and %u in the +// Format() formats string as indent and unindent commands. The commands can +// nest. The Formatter writes to io.Writer 'w' and inserts one 'indent' +// string per current indent level value. +// Behaviour of commands reaching negative indent levels is undefined. +// IndentFormatter(os.Stdout, "\t").Format("abc%d%%e%i\nx\ny\n%uz\n", 3) +// output: +// abc3%e +// x +// y +// z +// The Go quoted string literal form of the above is: +// "abc%%e\n\tx\n\tx\nz\n" +// The commands can be scattered between separate invocations of Format(), +// i.e. the formatter keeps track of the indent level and knows if it is +// positioned on start of a line and should emit indentation(s). +// The same output as above can be produced by e.g.: +// f := IndentFormatter(os.Stdout, " ") +// f.Format("abc%d%%e%i\nx\n", 3) +// f.Format("y\n%uz\n") +func IndentFormatter(w io.Writer, indent string) Formatter { + return &indentFormatter{w, []byte(indent), 0, stBOL} +} + +func (f *indentFormatter) format(flat bool, format string, args ...interface{}) (n int, errno error) { + var buf = make([]byte, 0) + for i := 0; i < len(format); i++ { + c := format[i] + switch f.state { + case st0: + switch c { + case '\n': + cc := c + if flat && f.indentLevel != 0 { + cc = ' ' + } + buf = append(buf, cc) + f.state = stBOL + case '%': + f.state = stPERC + default: + buf = append(buf, c) + } + case stBOL: + switch c { + case '\n': + cc := c + if flat && f.indentLevel != 0 { + cc = ' ' + } + buf = append(buf, cc) + case '%': + f.state = stBOLPERC + default: + if !flat { + for i := 0; i < f.indentLevel; i++ { + buf = append(buf, f.indent...) + } + } + buf = append(buf, c) + f.state = st0 + } + case stBOLPERC: + switch c { + case 'i': + f.indentLevel++ + f.state = stBOL + case 'u': + f.indentLevel-- + f.state = stBOL + default: + if !flat { + for i := 0; i < f.indentLevel; i++ { + buf = append(buf, f.indent...) + } + } + buf = append(buf, '%', c) + f.state = st0 + } + case stPERC: + switch c { + case 'i': + f.indentLevel++ + f.state = st0 + case 'u': + f.indentLevel-- + f.state = st0 + default: + buf = append(buf, '%', c) + f.state = st0 + } + default: + panic("unexpected state") + } + } + switch f.state { + case stPERC, stBOLPERC: + buf = append(buf, '%') + } + return f.Write([]byte(fmt.Sprintf(string(buf), args...))) +} + +// Format implements Format interface. +func (f *indentFormatter) Format(format string, args ...interface{}) (n int, errno error) { + return f.format(false, format, args...) +} + +type flatFormatter indentFormatter + +// FlatFormatter returns a newly created Formatter with the same functionality as the one returned +// by IndentFormatter except it allows a newline in the 'format' string argument of Format +// to pass through if the indent level is current zero. +// +// If the indent level is non-zero then such new lines are changed to a space character. +// There is no indent string, the %i and %u format verbs are used solely to determine the indent level. +// +// The FlatFormatter is intended for flattening of normally nested structure textual representation to +// a one top level structure per line form. +// FlatFormatter(os.Stdout, " ").Format("abc%d%%e%i\nx\ny\n%uz\n", 3) +// output in the form of a Go quoted string literal: +// "abc3%%e x y z\n" +func FlatFormatter(w io.Writer) Formatter { + return (*flatFormatter)(IndentFormatter(w, "").(*indentFormatter)) +} + +// Format implements Format interface. +func (f *flatFormatter) Format(format string, args ...interface{}) (n int, errno error) { + return (*indentFormatter)(f).format(true, format, args...) +} + +// OutputFormat output escape character with backslash. +func OutputFormat(s string) string { + var buf bytes.Buffer + for _, old := range s { + if newVal, ok := replace[old]; ok { + buf.WriteString(newVal) + continue + } + buf.WriteRune(old) + } + + return buf.String() +} diff --git a/parser/lexer.go b/vendor/github.com/pingcap/parser/lexer.go similarity index 99% rename from parser/lexer.go rename to vendor/github.com/pingcap/parser/lexer.go index f82708383629c..beabc37c6a83f 100644 --- a/parser/lexer.go +++ b/vendor/github.com/pingcap/parser/lexer.go @@ -20,7 +20,7 @@ import ( "unicode" "unicode/utf8" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" ) var _ = yyLexer(&Scanner{}) diff --git a/parser/misc.go b/vendor/github.com/pingcap/parser/misc.go similarity index 99% rename from parser/misc.go rename to vendor/github.com/pingcap/parser/misc.go index d4d39552e5a30..fbf19262eb839 100644 --- a/parser/misc.go +++ b/vendor/github.com/pingcap/parser/misc.go @@ -16,7 +16,7 @@ package parser import ( "strings" - "github.com/pingcap/tidb/util/charset" + "github.com/pingcap/parser/charset" ) func isLetter(ch rune) bool { diff --git a/model/ddl.go b/vendor/github.com/pingcap/parser/model/ddl.go similarity index 99% rename from model/ddl.go rename to vendor/github.com/pingcap/parser/model/ddl.go index 23db9df3e2d90..fa7e9887ec063 100644 --- a/model/ddl.go +++ b/vendor/github.com/pingcap/parser/model/ddl.go @@ -20,8 +20,8 @@ import ( "sync" "time" - "github.com/pingcap/tidb/terror" - "github.com/pkg/errors" + "github.com/pingcap/errors" + "github.com/pingcap/parser/terror" ) // ActionType is the type for DDL action. diff --git a/model/flags.go b/vendor/github.com/pingcap/parser/model/flags.go similarity index 100% rename from model/flags.go rename to vendor/github.com/pingcap/parser/model/flags.go diff --git a/model/model.go b/vendor/github.com/pingcap/parser/model/model.go similarity index 99% rename from model/model.go rename to vendor/github.com/pingcap/parser/model/model.go index dafa85b752197..22891f9d25ef3 100644 --- a/model/model.go +++ b/vendor/github.com/pingcap/parser/model/model.go @@ -18,10 +18,10 @@ import ( "strings" "time" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/parser/types" + "github.com/pingcap/errors" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/types" "github.com/pingcap/tipb/go-tipb" - "github.com/pkg/errors" ) // SchemaState is the state for schema elements. diff --git a/mysql/charset.go b/vendor/github.com/pingcap/parser/mysql/charset.go similarity index 100% rename from mysql/charset.go rename to vendor/github.com/pingcap/parser/mysql/charset.go diff --git a/mysql/const.go b/vendor/github.com/pingcap/parser/mysql/const.go similarity index 100% rename from mysql/const.go rename to vendor/github.com/pingcap/parser/mysql/const.go diff --git a/mysql/errcode.go b/vendor/github.com/pingcap/parser/mysql/errcode.go similarity index 100% rename from mysql/errcode.go rename to vendor/github.com/pingcap/parser/mysql/errcode.go diff --git a/mysql/errname.go b/vendor/github.com/pingcap/parser/mysql/errname.go similarity index 100% rename from mysql/errname.go rename to vendor/github.com/pingcap/parser/mysql/errname.go diff --git a/mysql/error.go b/vendor/github.com/pingcap/parser/mysql/error.go similarity index 100% rename from mysql/error.go rename to vendor/github.com/pingcap/parser/mysql/error.go diff --git a/mysql/locale_format.go b/vendor/github.com/pingcap/parser/mysql/locale_format.go similarity index 98% rename from mysql/locale_format.go rename to vendor/github.com/pingcap/parser/mysql/locale_format.go index 62037e854e268..b483f94fc189f 100644 --- a/mysql/locale_format.go +++ b/vendor/github.com/pingcap/parser/mysql/locale_format.go @@ -6,7 +6,7 @@ import ( "strings" "unicode" - "github.com/pkg/errors" + "github.com/pingcap/errors" ) func formatENUS(number string, precision string) (string, error) { diff --git a/mysql/state.go b/vendor/github.com/pingcap/parser/mysql/state.go similarity index 100% rename from mysql/state.go rename to vendor/github.com/pingcap/parser/mysql/state.go diff --git a/mysql/type.go b/vendor/github.com/pingcap/parser/mysql/type.go similarity index 100% rename from mysql/type.go rename to vendor/github.com/pingcap/parser/mysql/type.go diff --git a/mysql/util.go b/vendor/github.com/pingcap/parser/mysql/util.go similarity index 100% rename from mysql/util.go rename to vendor/github.com/pingcap/parser/mysql/util.go diff --git a/parser/opcode/opcode.go b/vendor/github.com/pingcap/parser/opcode/opcode.go similarity index 100% rename from parser/opcode/opcode.go rename to vendor/github.com/pingcap/parser/opcode/opcode.go diff --git a/vendor/github.com/pingcap/parser/parser.go b/vendor/github.com/pingcap/parser/parser.go new file mode 100644 index 0000000000000..560f39ccd44e4 --- /dev/null +++ b/vendor/github.com/pingcap/parser/parser.go @@ -0,0 +1,11728 @@ +// Code generated by goyacc +// CAUTION: Generated file - DO NOT EDIT. + +// Copyright 2013 The ql Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSES/QL-LICENSE file. + +// Copyright 2015 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +// Initial yacc source generated by ebnf2y[1] +// at 2013-10-04 23:10:47.861401015 +0200 CEST +// +// $ ebnf2y -o ql.y -oe ql.ebnf -start StatementList -pkg ql -p _ +// +// [1]: http://github.com/cznic/ebnf2y + +package parser + +import __yyfmt__ "fmt" + +import ( + "strings" + + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/auth" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/model" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/opcode" + "github.com/pingcap/parser/types" +) + +type yySymType struct { + yys int + offset int // offset + item interface{} + ident string + expr ast.ExprNode + statement ast.StmtNode +} + +type yyXError struct { + state, xsym int +} + +const ( + yyDefault = 57799 + yyEOFCode = 57344 + action = 57538 + add = 57359 + addDate = 57697 + admin = 57725 + after = 57539 + algorithm = 57541 + all = 57360 + alter = 57361 + always = 57540 + analyze = 57362 + and = 57363 + andand = 57354 + andnot = 57770 + any = 57542 + as = 57364 + asc = 57365 + ascii = 57543 + assignmentEq = 57771 + autoIncrement = 57544 + avg = 57546 + avgRowLength = 57545 + begin = 57547 + between = 57366 + bigIntType = 57367 + binaryType = 57368 + binlog = 57548 + bitAnd = 57698 + bitLit = 57769 + bitOr = 57699 + bitType = 57549 + bitXor = 57700 + blobType = 57369 + boolType = 57551 + booleanType = 57550 + both = 57370 + btree = 57552 + buckets = 57726 + builtinAddDate = 57740 + builtinBitAnd = 57741 + builtinBitOr = 57742 + builtinBitXor = 57743 + builtinCast = 57744 + builtinCount = 57745 + builtinCurDate = 57746 + builtinCurTime = 57747 + builtinDateAdd = 57748 + builtinDateSub = 57749 + builtinExtract = 57750 + builtinGroupConcat = 57751 + builtinMax = 57752 + builtinMin = 57753 + builtinNow = 57754 + builtinPosition = 57755 + builtinStddevPop = 57756 + builtinSubDate = 57757 + builtinSubstring = 57758 + builtinSum = 57759 + builtinSysDate = 57760 + builtinTrim = 57761 + builtinUser = 57762 + builtinVarPop = 57763 + builtinVarSamp = 57764 + by = 57371 + byteType = 57553 + cancel = 57727 + cascade = 57372 + cascaded = 57554 + caseKwd = 57373 + cast = 57701 + change = 57374 + charType = 57376 + character = 57375 + charsetKwd = 57555 + check = 57377 + checksum = 57556 + cleanup = 57557 + client = 57558 + coalesce = 57559 + collate = 57378 + collation = 57560 + column = 57379 + columns = 57561 + comment = 57562 + commit = 57563 + committed = 57564 + compact = 57565 + compressed = 57566 + compression = 57567 + connection = 57568 + consistent = 57569 + constraint = 57380 + convert = 57381 + copyKwd = 57702 + count = 57703 + create = 57382 + createTableSelect = 57791 + cross = 57383 + curTime = 57704 + currentDate = 57384 + currentTime = 57385 + currentTs = 57386 + currentUser = 57387 + data = 57571 + database = 57388 + databases = 57389 + dateAdd = 57705 + dateSub = 57706 + dateType = 57572 + datetimeType = 57573 + day = 57570 + dayHour = 57390 + dayMicrosecond = 57391 + dayMinute = 57392 + daySecond = 57393 + ddl = 57728 + deallocate = 57574 + decLit = 57766 + decimalType = 57394 + defaultKwd = 57395 + definer = 57575 + delayKeyWrite = 57576 + delayed = 57396 + deleteKwd = 57397 + desc = 57398 + describe = 57399 + disable = 57577 + distinct = 57400 + distinctRow = 57401 + div = 57402 + do = 57578 + doubleAtIdentifier = 57350 + doubleType = 57403 + drop = 57404 + dual = 57405 + duplicate = 57579 + dynamic = 57580 + elseKwd = 57406 + empty = 57784 + enable = 57581 + enclosed = 57407 + end = 57582 + engine = 57583 + engines = 57584 + enum = 57585 + eq = 57772 + yyErrCode = 57345 + escape = 57588 + escaped = 57408 + event = 57586 + events = 57587 + exclusive = 57589 + execute = 57590 + exists = 57409 + explain = 57410 + extract = 57707 + falseKwd = 57411 + fields = 57591 + first = 57592 + fixed = 57593 + floatLit = 57765 + floatType = 57412 + flush = 57594 + forKwd = 57413 + force = 57414 + foreign = 57415 + format = 57595 + from = 57416 + full = 57596 + fulltext = 57417 + function = 57597 + ge = 57773 + generated = 57418 + getFormat = 57708 + global = 57673 + grant = 57419 + grants = 57598 + group = 57420 + groupConcat = 57709 + hash = 57599 + having = 57421 + hexLit = 57768 + highPriority = 57422 + higherThanComma = 57798 + hintBegin = 57352 + hintEnd = 57353 + hour = 57600 + hourMicrosecond = 57423 + hourMinute = 57424 + hourSecond = 57425 + identSQLErrors = 57694 + identified = 57601 + identifier = 57346 + ifKwd = 57426 + ignore = 57427 + in = 57428 + index = 57429 + indexes = 57603 + infile = 57430 + inner = 57431 + inplace = 57710 + insert = 57436 + insertValues = 57789 + int1Type = 57438 + int2Type = 57439 + int3Type = 57440 + int4Type = 57441 + int8Type = 57442 + intLit = 57767 + intType = 57437 + integerType = 57432 + internal = 57711 + interval = 57433 + into = 57434 + invalid = 57351 + invoker = 57604 + is = 57435 + isolation = 57602 + job = 57730 + jobs = 57729 + join = 57443 + jsonType = 57605 + jss = 57775 + juss = 57776 + key = 57444 + keyBlockSize = 57606 + keys = 57445 + kill = 57446 + le = 57774 + leading = 57447 + left = 57448 + less = 57608 + level = 57609 + like = 57449 + limit = 57450 + lines = 57451 + load = 57452 + local = 57607 + localTime = 57453 + localTs = 57454 + lock = 57455 + long = 57526 + longblobType = 57456 + longtextType = 57457 + lowPriority = 57458 + lowerThanComma = 57797 + lowerThanCreateTableSelect = 57790 + lowerThanEq = 57795 + lowerThanInsertValues = 57788 + lowerThanIntervalKeyword = 57785 + lowerThanKey = 57792 + lowerThanOn = 57794 + lowerThanSetKeyword = 57787 + lowerThanStringLitToken = 57786 + lsh = 57777 + master = 57610 + max = 57713 + maxConnectionsPerHour = 57617 + maxExecutionTime = 57714 + maxQueriesPerHour = 57618 + maxRows = 57616 + maxUpdatesPerHour = 57619 + maxUserConnections = 57620 + maxValue = 57459 + mediumIntType = 57461 + mediumblobType = 57460 + mediumtextType = 57462 + merge = 57621 + microsecond = 57611 + min = 57712 + minRows = 57622 + minute = 57612 + minuteMicrosecond = 57463 + minuteSecond = 57464 + mod = 57465 + mode = 57613 + modify = 57614 + month = 57615 + names = 57623 + national = 57624 + natural = 57537 + neg = 57796 + neq = 57778 + neqSynonym = 57779 + no = 57625 + noWriteToBinLog = 57467 + none = 57626 + not = 57466 + not2 = 57783 + now = 57715 + null = 57468 + nulleq = 57780 + numericType = 57469 + nvarcharType = 57470 + odbcDateType = 57356 + odbcTimeType = 57357 + odbcTimestampType = 57358 + offset = 57627 + on = 57471 + only = 57628 + option = 57472 + or = 57473 + order = 57474 + outer = 57475 + packKeys = 57476 + paramMarker = 57781 + partition = 57477 + partitions = 57630 + password = 57629 + pipes = 57355 + pipesAsOr = 57631 + plugins = 57632 + position = 57716 + precisionType = 57478 + prepare = 57633 + primary = 57479 + privileges = 57634 + procedure = 57480 + process = 57635 + processlist = 57636 + profiles = 57637 + quarter = 57638 + queries = 57640 + query = 57639 + quick = 57641 + rangeKwd = 57482 + read = 57483 + realType = 57484 + recent = 57717 + recover = 57642 + redundant = 57643 + references = 57485 + regexpKwd = 57486 + reload = 57644 + rename = 57487 + repeat = 57488 + repeatable = 57645 + replace = 57489 + replication = 57646 + restrict = 57490 + reverse = 57647 + revoke = 57491 + right = 57492 + rlike = 57493 + rollback = 57648 + routine = 57649 + row = 57650 + rowCount = 57651 + rowFormat = 57652 + rsh = 57782 + second = 57653 + secondMicrosecond = 57494 + security = 57654 + selectKwd = 57495 + separator = 57655 + serializable = 57656 + session = 57657 + set = 57496 + shardRowIDBits = 57481 + share = 57658 + shared = 57659 + show = 57497 + signed = 57660 + singleAtIdentifier = 57349 + slave = 57661 + slow = 57662 + smallIntType = 57498 + snapshot = 57663 + some = 57672 + sql = 57499 + sqlCache = 57664 + sqlCalcFoundRows = 57500 + sqlNoCache = 57665 + start = 57666 + starting = 57501 + stats = 57731 + statsBuckets = 57734 + statsHealthy = 57735 + statsHistograms = 57733 + statsMeta = 57732 + statsPersistent = 57667 + status = 57668 + stored = 57504 + straightJoin = 57502 + stringLit = 57348 + subDate = 57718 + subpartition = 57669 + subpartitions = 57670 + substring = 57720 + sum = 57719 + super = 57671 + tableKwd = 57503 + tableRefPriority = 57793 + tables = 57674 + tablespace = 57675 + temporary = 57676 + temptable = 57677 + terminated = 57505 + textType = 57678 + than = 57679 + then = 57506 + tidb = 57736 + tidbHJ = 57737 + tidbINLJ = 57739 + tidbSMJ = 57738 + timeType = 57680 + timestampAdd = 57721 + timestampDiff = 57722 + timestampType = 57681 + tinyIntType = 57508 + tinyblobType = 57507 + tinytextType = 57509 + to = 57510 + top = 57723 + trace = 57682 + trailing = 57511 + transaction = 57683 + trigger = 57512 + triggers = 57684 + trim = 57724 + trueKwd = 57513 + truncate = 57685 + uncommitted = 57686 + undefined = 57689 + underscoreCS = 57347 + union = 57515 + unique = 57514 + unknown = 57687 + unlock = 57516 + unsigned = 57517 + update = 57518 + usage = 57519 + use = 57520 + user = 57688 + using = 57521 + utcDate = 57522 + utcTime = 57524 + utcTimestamp = 57523 + value = 57690 + values = 57525 + varbinaryType = 57528 + varcharType = 57527 + variables = 57691 + view = 57692 + virtual = 57529 + warnings = 57693 + week = 57695 + when = 57530 + where = 57531 + with = 57533 + write = 57532 + xor = 57534 + yearMonth = 57535 + yearType = 57696 + zerofill = 57536 + + yyMaxDepth = 200 + yyTabOfs = -1353 +) + +var ( + yyXLAT = map[int]int{ + 57344: 0, // $end (1158x) + 59: 1, // ';' (1157x) + 57562: 2, // comment (1050x) + 57544: 3, // autoIncrement (1024x) + 57539: 4, // after (988x) + 57592: 5, // first (988x) + 44: 6, // ',' (978x) + 57555: 7, // charsetKwd (913x) + 57606: 8, // keyBlockSize (899x) + 57583: 9, // engine (893x) + 57568: 10, // connection (886x) + 57629: 11, // password (886x) + 57660: 12, // signed (885x) + 57556: 13, // checksum (884x) + 57545: 14, // avgRowLength (883x) + 57567: 15, // compression (883x) + 57576: 16, // delayKeyWrite (883x) + 57616: 17, // maxRows (883x) + 57622: 18, // minRows (883x) + 57652: 19, // rowFormat (883x) + 57667: 20, // statsPersistent (883x) + 41: 21, // ')' (869x) + 57692: 22, // view (861x) + 57655: 23, // separator (853x) + 57668: 24, // status (853x) + 57674: 25, // tables (853x) + 57675: 26, // tablespace (851x) + 57561: 27, // columns (850x) + 57575: 28, // definer (849x) + 57591: 29, // fields (849x) + 57601: 30, // identified (849x) + 57714: 31, // maxExecutionTime (849x) + 57737: 32, // tidbHJ (849x) + 57739: 33, // tidbINLJ (849x) + 57738: 34, // tidbSMJ (849x) + 57696: 35, // yearType (849x) + 57570: 36, // day (848x) + 57600: 37, // hour (848x) + 57611: 38, // microsecond (848x) + 57612: 39, // minute (848x) + 57615: 40, // month (848x) + 57638: 41, // quarter (848x) + 57653: 42, // second (848x) + 57695: 43, // week (848x) + 57582: 44, // end (847x) + 57634: 45, // privileges (847x) + 57541: 46, // algorithm (846x) + 57590: 47, // execute (846x) + 57627: 48, // offset (846x) + 57633: 49, // prepare (846x) + 57573: 50, // datetimeType (845x) + 57572: 51, // dateType (845x) + 57602: 52, // isolation (845x) + 57607: 53, // local (845x) + 57630: 54, // partitions (845x) + 57669: 55, // subpartition (845x) + 57680: 56, // timeType (845x) + 57688: 57, // user (845x) + 57691: 58, // variables (845x) + 57586: 59, // event (844x) + 57599: 60, // hash (844x) + 57605: 61, // jsonType (844x) + 57635: 62, // process (844x) + 57636: 63, // processlist (844x) + 57639: 64, // query (844x) + 57644: 65, // reload (844x) + 57646: 66, // replication (844x) + 57671: 67, // super (844x) + 57687: 68, // unknown (844x) + 57690: 69, // value (844x) + 57725: 70, // admin (843x) + 57547: 71, // begin (843x) + 57548: 72, // binlog (843x) + 57726: 73, // buckets (843x) + 57563: 74, // commit (843x) + 57565: 75, // compact (843x) + 57566: 76, // compressed (843x) + 57702: 77, // copyKwd (843x) + 57728: 78, // ddl (843x) + 57574: 79, // deallocate (843x) + 57577: 80, // disable (843x) + 57578: 81, // do (843x) + 57580: 82, // dynamic (843x) + 57581: 83, // enable (843x) + 57593: 84, // fixed (843x) + 57594: 85, // flush (843x) + 57710: 86, // inplace (843x) + 57729: 87, // jobs (843x) + 57614: 88, // modify (843x) + 57625: 89, // no (843x) + 57643: 90, // redundant (843x) + 57648: 91, // rollback (843x) + 57649: 92, // routine (843x) + 57666: 93, // start (843x) + 57731: 94, // stats (843x) + 57670: 95, // subpartitions (843x) + 57681: 96, // timestampType (843x) + 57682: 97, // trace (843x) + 57685: 98, // truncate (843x) + 57538: 99, // action (842x) + 57540: 100, // always (842x) + 57549: 101, // bitType (842x) + 57550: 102, // booleanType (842x) + 57551: 103, // boolType (842x) + 57552: 104, // btree (842x) + 57727: 105, // cancel (842x) + 57554: 106, // cascaded (842x) + 57557: 107, // cleanup (842x) + 57558: 108, // client (842x) + 57560: 109, // collation (842x) + 57564: 110, // committed (842x) + 57569: 111, // consistent (842x) + 57571: 112, // data (842x) + 57579: 113, // duplicate (842x) + 57584: 114, // engines (842x) + 57585: 115, // enum (842x) + 57587: 116, // events (842x) + 57589: 117, // exclusive (842x) + 57596: 118, // full (842x) + 57597: 119, // function (842x) + 57673: 120, // global (842x) + 57598: 121, // grants (842x) + 57694: 122, // identSQLErrors (842x) + 57603: 123, // indexes (842x) + 57711: 124, // internal (842x) + 57604: 125, // invoker (842x) + 57730: 126, // job (842x) + 57608: 127, // less (842x) + 57609: 128, // level (842x) + 57610: 129, // master (842x) + 57617: 130, // maxConnectionsPerHour (842x) + 57618: 131, // maxQueriesPerHour (842x) + 57619: 132, // maxUpdatesPerHour (842x) + 57620: 133, // maxUserConnections (842x) + 57621: 134, // merge (842x) + 57613: 135, // mode (842x) + 57624: 136, // national (842x) + 57626: 137, // none (842x) + 57628: 138, // only (842x) + 57632: 139, // plugins (842x) + 57637: 140, // profiles (842x) + 57640: 141, // queries (842x) + 57717: 142, // recent (842x) + 57642: 143, // recover (842x) + 57645: 144, // repeatable (842x) + 57654: 145, // security (842x) + 57656: 146, // serializable (842x) + 57657: 147, // session (842x) + 57658: 148, // share (842x) + 57659: 149, // shared (842x) + 57661: 150, // slave (842x) + 57662: 151, // slow (842x) + 57663: 152, // snapshot (842x) + 57734: 153, // statsBuckets (842x) + 57735: 154, // statsHealthy (842x) + 57733: 155, // statsHistograms (842x) + 57732: 156, // statsMeta (842x) + 57676: 157, // temporary (842x) + 57677: 158, // temptable (842x) + 57678: 159, // textType (842x) + 57679: 160, // than (842x) + 57736: 161, // tidb (842x) + 57723: 162, // top (842x) + 57683: 163, // transaction (842x) + 57684: 164, // triggers (842x) + 57686: 165, // uncommitted (842x) + 57689: 166, // undefined (842x) + 57693: 167, // warnings (842x) + 57697: 168, // addDate (841x) + 57542: 169, // any (841x) + 57543: 170, // ascii (841x) + 57546: 171, // avg (841x) + 57698: 172, // bitAnd (841x) + 57699: 173, // bitOr (841x) + 57700: 174, // bitXor (841x) + 57553: 175, // byteType (841x) + 57701: 176, // cast (841x) + 57559: 177, // coalesce (841x) + 57703: 178, // count (841x) + 57704: 179, // curTime (841x) + 57705: 180, // dateAdd (841x) + 57706: 181, // dateSub (841x) + 57588: 182, // escape (841x) + 57707: 183, // extract (841x) + 57595: 184, // format (841x) + 57708: 185, // getFormat (841x) + 57709: 186, // groupConcat (841x) + 57346: 187, // identifier (841x) + 57713: 188, // max (841x) + 57712: 189, // min (841x) + 57623: 190, // names (841x) + 57715: 191, // now (841x) + 57716: 192, // position (841x) + 57641: 193, // quick (841x) + 57647: 194, // reverse (841x) + 57650: 195, // row (841x) + 57651: 196, // rowCount (841x) + 57672: 197, // some (841x) + 57664: 198, // sqlCache (841x) + 57665: 199, // sqlNoCache (841x) + 57718: 200, // subDate (841x) + 57720: 201, // substring (841x) + 57719: 202, // sum (841x) + 57721: 203, // timestampAdd (841x) + 57722: 204, // timestampDiff (841x) + 57724: 205, // trim (841x) + 40: 206, // '(' (738x) + 57471: 207, // on (719x) + 57348: 208, // stringLit (674x) + 57466: 209, // not (665x) + 57364: 210, // as (632x) + 57448: 211, // left (614x) + 57492: 212, // right (614x) + 57395: 213, // defaultKwd (598x) + 43: 214, // '+' (571x) + 45: 215, // '-' (571x) + 57465: 216, // mod (569x) + 57468: 217, // null (543x) + 57533: 218, // with (540x) + 57515: 219, // union (530x) + 57455: 220, // lock (518x) + 57413: 221, // forKwd (511x) + 57450: 222, // limit (501x) + 57474: 223, // order (493x) + 57531: 224, // where (488x) + 57363: 225, // and (482x) + 57473: 226, // or (482x) + 57354: 227, // andand (481x) + 57631: 228, // pipesAsOr (481x) + 57534: 229, // xor (481x) + 57416: 230, // from (474x) + 57521: 231, // using (474x) + 57772: 232, // eq (463x) + 57502: 233, // straightJoin (457x) + 57496: 234, // set (454x) + 57421: 235, // having (453x) + 57489: 236, // replace (453x) + 57443: 237, // join (450x) + 57420: 238, // group (445x) + 57378: 239, // collate (443x) + 57767: 240, // intLit (441x) + 57383: 241, // cross (439x) + 57431: 242, // inner (439x) + 57537: 243, // natural (439x) + 125: 244, // '}' (438x) + 57449: 245, // like (432x) + 42: 246, // '*' (427x) + 46: 247, // '.' (423x) + 57368: 248, // binaryType (419x) + 57398: 249, // desc (419x) + 57365: 250, // asc (417x) + 57530: 251, // when (416x) + 57390: 252, // dayHour (414x) + 57391: 253, // dayMicrosecond (414x) + 57392: 254, // dayMinute (414x) + 57393: 255, // daySecond (414x) + 57423: 256, // hourMicrosecond (414x) + 57424: 257, // hourMinute (414x) + 57425: 258, // hourSecond (414x) + 57463: 259, // minuteMicrosecond (414x) + 57464: 260, // minuteSecond (414x) + 57494: 261, // secondMicrosecond (414x) + 57535: 262, // yearMonth (414x) + 57406: 263, // elseKwd (413x) + 57428: 264, // in (410x) + 57506: 265, // then (410x) + 60: 266, // '<' (404x) + 62: 267, // '>' (404x) + 57773: 268, // ge (404x) + 57435: 269, // is (404x) + 57774: 270, // le (404x) + 57778: 271, // neq (404x) + 57779: 272, // neqSynonym (404x) + 57780: 273, // nulleq (404x) + 37: 274, // '%' (395x) + 38: 275, // '&' (395x) + 47: 276, // '/' (395x) + 94: 277, // '^' (395x) + 124: 278, // '|' (395x) + 57402: 279, // div (395x) + 57777: 280, // lsh (395x) + 57782: 281, // rsh (395x) + 57387: 282, // currentUser (394x) + 57366: 283, // between (392x) + 57486: 284, // regexpKwd (392x) + 57493: 285, // rlike (392x) + 57426: 286, // ifKwd (391x) + 57436: 287, // insert (391x) + 123: 288, // '{' (390x) + 57349: 289, // singleAtIdentifier (388x) + 57376: 290, // charType (387x) + 57444: 291, // key (385x) + 57525: 292, // values (385x) + 57409: 293, // exists (384x) + 57411: 294, // falseKwd (384x) + 57513: 295, // trueKwd (384x) + 57381: 296, // convert (383x) + 57766: 297, // decLit (383x) + 57765: 298, // floatLit (383x) + 57781: 299, // paramMarker (383x) + 57388: 300, // database (382x) + 57769: 301, // bitLit (381x) + 57754: 302, // builtinNow (381x) + 57386: 303, // currentTs (381x) + 57350: 304, // doubleAtIdentifier (381x) + 57768: 305, // hexLit (381x) + 57453: 306, // localTime (381x) + 57454: 307, // localTs (381x) + 57347: 308, // underscoreCS (381x) + 57433: 309, // interval (380x) + 33: 310, // '!' (379x) + 126: 311, // '~' (379x) + 57740: 312, // builtinAddDate (379x) + 57741: 313, // builtinBitAnd (379x) + 57742: 314, // builtinBitOr (379x) + 57743: 315, // builtinBitXor (379x) + 57744: 316, // builtinCast (379x) + 57745: 317, // builtinCount (379x) + 57746: 318, // builtinCurDate (379x) + 57747: 319, // builtinCurTime (379x) + 57748: 320, // builtinDateAdd (379x) + 57749: 321, // builtinDateSub (379x) + 57750: 322, // builtinExtract (379x) + 57751: 323, // builtinGroupConcat (379x) + 57752: 324, // builtinMax (379x) + 57753: 325, // builtinMin (379x) + 57755: 326, // builtinPosition (379x) + 57757: 327, // builtinSubDate (379x) + 57758: 328, // builtinSubstring (379x) + 57759: 329, // builtinSum (379x) + 57760: 330, // builtinSysDate (379x) + 57761: 331, // builtinTrim (379x) + 57762: 332, // builtinUser (379x) + 57373: 333, // caseKwd (379x) + 57384: 334, // currentDate (379x) + 57385: 335, // currentTime (379x) + 57783: 336, // not2 (379x) + 57488: 337, // repeat (379x) + 57522: 338, // utcDate (379x) + 57524: 339, // utcTime (379x) + 57523: 340, // utcTimestamp (379x) + 57479: 341, // primary (370x) + 57514: 342, // unique (370x) + 57377: 343, // check (367x) + 57485: 344, // references (366x) + 57418: 345, // generated (362x) + 57355: 346, // pipes (359x) + 57427: 347, // ignore (313x) + 57936: 348, // Identifier (312x) + 57989: 349, // NotKeywordToken (312x) + 58111: 350, // TiDBKeyword (312x) + 58121: 351, // UnReservedKeyword (312x) + 57495: 352, // selectKwd (309x) + 57375: 353, // character (285x) + 57477: 354, // partition (254x) + 57476: 355, // packKeys (251x) + 57481: 356, // shardRowIDBits (251x) + 57775: 357, // jss (242x) + 57776: 358, // juss (242x) + 57429: 359, // index (237x) + 57451: 360, // lines (226x) + 57499: 361, // sql (222x) + 57371: 362, // by (221x) + 57414: 363, // force (219x) + 57520: 364, // use (219x) + 57404: 365, // drop (218x) + 57372: 366, // cascade (217x) + 57490: 367, // restrict (217x) + 57510: 368, // to (217x) + 57483: 369, // read (215x) + 57361: 370, // alter (214x) + 57362: 371, // analyze (214x) + 57415: 372, // foreign (213x) + 57417: 373, // fulltext (212x) + 57394: 374, // decimalType (211x) + 57432: 375, // integerType (211x) + 57437: 376, // intType (211x) + 57487: 377, // rename (211x) + 57527: 378, // varcharType (211x) + 64: 379, // '@' (209x) + 57359: 380, // add (209x) + 57367: 381, // bigIntType (209x) + 57369: 382, // blobType (209x) + 57374: 383, // change (209x) + 57403: 384, // doubleType (209x) + 57412: 385, // floatType (209x) + 57438: 386, // int1Type (209x) + 57439: 387, // int2Type (209x) + 57440: 388, // int3Type (209x) + 57441: 389, // int4Type (209x) + 57442: 390, // int8Type (209x) + 57526: 391, // long (209x) + 57456: 392, // longblobType (209x) + 57457: 393, // longtextType (209x) + 57460: 394, // mediumblobType (209x) + 57461: 395, // mediumIntType (209x) + 57462: 396, // mediumtextType (209x) + 57469: 397, // numericType (209x) + 57470: 398, // nvarcharType (209x) + 57484: 399, // realType (209x) + 57498: 400, // smallIntType (209x) + 57507: 401, // tinyblobType (209x) + 57508: 402, // tinyIntType (209x) + 57509: 403, // tinytextType (209x) + 57528: 404, // varbinaryType (209x) + 57532: 405, // write (209x) + 58083: 406, // SubSelect (129x) + 58131: 407, // UserVariable (126x) + 57975: 408, // Literal (125x) + 58071: 409, // SimpleIdent (125x) + 58078: 410, // StringLiteral (125x) + 57918: 411, // FunctionCallGeneric (123x) + 57919: 412, // FunctionCallKeyword (123x) + 57920: 413, // FunctionCallNonKeyword (123x) + 57921: 414, // FunctionNameConflict (123x) + 57922: 415, // FunctionNameDateArith (123x) + 57923: 416, // FunctionNameDateArithMultiForms (123x) + 57924: 417, // FunctionNameDatetimePrecision (123x) + 57925: 418, // FunctionNameOptionalBraces (123x) + 58070: 419, // SimpleExpr (123x) + 58084: 420, // SumExpr (123x) + 58086: 421, // SystemVariable (123x) + 58140: 422, // Variable (123x) + 57819: 423, // BitExpr (113x) + 58028: 424, // PredicateExpr (97x) + 57822: 425, // BoolPri (94x) + 57894: 426, // Expression (94x) + 58156: 427, // logAnd (74x) + 58157: 428, // logOr (74x) + 58095: 429, // TableName (51x) + 57517: 430, // unsigned (44x) + 57536: 431, // zerofill (42x) + 57986: 432, // NUM (41x) + 57835: 433, // ColumnName (35x) + 58079: 434, // StringName (30x) + 57360: 435, // all (29x) + 57886: 436, // EqOpt (24x) + 58050: 437, // SelectStmt (23x) + 58051: 438, // SelectStmtBasic (23x) + 58054: 439, // SelectStmtFromDual (23x) + 58055: 440, // SelectStmtFromTable (23x) + 57901: 441, // FieldLen (21x) + 57503: 442, // tableKwd (21x) + 57967: 443, // LengthNum (18x) + 58124: 444, // UnionSelect (18x) + 58122: 445, // UnionClauseList (17x) + 58125: 446, // UnionStmt (17x) + 57500: 447, // sqlCalcFoundRows (16x) + 57518: 448, // update (16x) + 57828: 449, // CharsetKw (15x) + 57396: 450, // delayed (15x) + 57422: 451, // highPriority (15x) + 57458: 452, // lowPriority (15x) + 58005: 453, // OptFieldLen (14x) + 57397: 454, // deleteKwd (13x) + 57895: 455, // ExpressionList (13x) + 57961: 456, // JoinTable (13x) + 58092: 457, // TableFactor (13x) + 58104: 458, // TableRef (13x) + 58133: 459, // Username (11x) + 57400: 460, // distinct (10x) + 57401: 461, // distinctRow (10x) + 57914: 462, // FromOrIn (10x) + 57434: 463, // into (10x) + 57953: 464, // IndexType (9x) + 57962: 465, // JoinType (9x) + 58013: 466, // OrderBy (9x) + 58014: 467, // OrderByOptional (9x) + 58096: 468, // TableNameList (9x) + 57829: 469, // CharsetName (8x) + 57836: 470, // ColumnNameList (8x) + 57859: 471, // CrossOpt (8x) + 57869: 472, // DefaultKwdOpt (8x) + 57873: 473, // DistinctKwd (8x) + 57942: 474, // IndexColName (8x) + 57963: 475, // KeyOrIndex (8x) + 58004: 476, // OptCollate (8x) + 57831: 477, // ColumnDef (7x) + 57874: 478, // DistinctOpt (7x) + 57408: 479, // escaped (7x) + 57888: 480, // EscapedTableRef (7x) + 57353: 481, // hintEnd (7x) + 57943: 482, // IndexColNameList (7x) + 58057: 483, // SelectStmtLimit (7x) + 58152: 484, // WhereClause (7x) + 58153: 485, // WhereClauseOptional (7x) + 57382: 486, // create (6x) + 57868: 487, // DefaultFalseDistinctOpt (6x) + 57872: 488, // DeleteFromStmt (6x) + 57893: 489, // ExprOrDefault (6x) + 57419: 490, // grant (6x) + 57955: 491, // InsertIntoStmt (6x) + 57983: 492, // MaxNumBuckets (6x) + 58002: 493, // OptBinary (6x) + 58043: 494, // ReplaceIntoStmt (6x) + 58047: 495, // RowFormat (6x) + 58049: 496, // SelectLockOpt (6x) + 57497: 497, // show (6x) + 58063: 498, // ShowDatabaseNameOpt (6x) + 58101: 499, // TableOption (6x) + 58105: 500, // TableRefs (6x) + 57505: 501, // terminated (6x) + 58127: 502, // UpdateStmt (6x) + 57824: 503, // BuggyDefaultFalseDistinctOpt (5x) + 57379: 504, // column (5x) + 57833: 505, // ColumnKeywordOpt (5x) + 57860: 506, // DBName (5x) + 57407: 507, // enclosed (5x) + 57896: 508, // ExpressionListOpt (5x) + 57903: 509, // FieldOpt (5x) + 57904: 510, // FieldOpts (5x) + 57949: 511, // IndexName (5x) + 57951: 512, // IndexOption (5x) + 57952: 513, // IndexOptionList (5x) + 58022: 514, // PartitionDefinitionListOpt (5x) + 58032: 515, // PriorityOpt (5x) + 58065: 516, // ShowLikeOrWhereOpt (5x) + 58112: 517, // TimeUnit (5x) + 58129: 518, // UserSpec (5x) + 57811: 519, // Assignment (4x) + 57815: 520, // AuthString (4x) + 57940: 521, // IgnoreOptional (4x) + 57950: 522, // IndexNameList (4x) + 57954: 523, // IndexTypeOpt (4x) + 57972: 524, // LimitOption (4x) + 57472: 525, // option (4x) + 57475: 526, // outer (4x) + 58024: 527, // PartitionNumOpt (4x) + 58061: 528, // SetExpr (4x) + 58087: 529, // TableAsName (4x) + 58116: 530, // TransactionChar (4x) + 58130: 531, // UserSpecList (4x) + 57771: 532, // assignmentEq (3x) + 57812: 533, // AssignmentList (3x) + 57825: 534, // ByItem (3x) + 57842: 535, // ColumnPosition (3x) + 57848: 536, // Constraint (3x) + 57380: 537, // constraint (3x) + 57850: 538, // ConstraintKeywordOpt (3x) + 57892: 539, // ExplainableStmt (3x) + 57909: 540, // FloatOpt (3x) + 57352: 541, // hintBegin (3x) + 57935: 542, // HintTableList (3x) + 57937: 543, // IfExists (3x) + 57938: 544, // IfNotExists (3x) + 57944: 545, // IndexHint (3x) + 57948: 546, // IndexHintType (3x) + 57430: 547, // infile (3x) + 57445: 548, // keys (3x) + 57979: 549, // LockClause (3x) + 57459: 550, // maxValue (3x) + 58003: 551, // OptCharset (3x) + 58027: 552, // Precision (3x) + 58033: 553, // PrivElem (3x) + 58036: 554, // PrivType (3x) + 58038: 555, // ReferDef (3x) + 58044: 556, // RestrictOrCascadeOpt (3x) + 58048: 557, // RowValue (3x) + 58100: 558, // TableOptimizerHints (3x) + 58102: 559, // TableOptionList (3x) + 58117: 560, // TransactionChars (3x) + 57512: 561, // trigger (3x) + 57519: 562, // usage (3x) + 58135: 563, // ValueSym (3x) + 57801: 564, // AdminStmt (2x) + 57803: 565, // AlterTableOptionListOpt (2x) + 57804: 566, // AlterTableSpec (2x) + 57806: 567, // AlterTableStmt (2x) + 57807: 568, // AlterUserStmt (2x) + 57808: 569, // AnalyzeTableStmt (2x) + 57816: 570, // BeginTransactionStmt (2x) + 57818: 571, // BinlogStmt (2x) + 57826: 572, // ByList (2x) + 57827: 573, // CastType (2x) + 57837: 574, // ColumnNameListOpt (2x) + 57839: 575, // ColumnOption (2x) + 57843: 576, // ColumnSetValue (2x) + 57846: 577, // CommitStmt (2x) + 57851: 578, // CreateDatabaseStmt (2x) + 57852: 579, // CreateIndexStmt (2x) + 57856: 580, // CreateTableStmt (2x) + 57857: 581, // CreateUserStmt (2x) + 57858: 582, // CreateViewStmt (2x) + 57861: 583, // DatabaseOption (2x) + 57389: 584, // databases (2x) + 57864: 585, // DatabaseSym (2x) + 57866: 586, // DeallocateStmt (2x) + 57867: 587, // DeallocateSym (2x) + 57399: 588, // describe (2x) + 57875: 589, // DoStmt (2x) + 57876: 590, // DropDatabaseStmt (2x) + 57877: 591, // DropIndexStmt (2x) + 57878: 592, // DropStatsStmt (2x) + 57879: 593, // DropTableStmt (2x) + 57880: 594, // DropUserStmt (2x) + 57881: 595, // DropViewStmt (2x) + 57884: 596, // EmptyStmt (2x) + 57889: 597, // ExecuteStmt (2x) + 57410: 598, // explain (2x) + 57890: 599, // ExplainStmt (2x) + 57891: 600, // ExplainSym (2x) + 57898: 601, // Field (2x) + 57899: 602, // FieldAsName (2x) + 57900: 603, // FieldAsNameOpt (2x) + 57912: 604, // FlushStmt (2x) + 57913: 605, // FromDual (2x) + 57916: 606, // FuncDatetimePrecList (2x) + 57917: 607, // FuncDatetimePrecListOpt (2x) + 57926: 608, // GeneratedAlways (2x) + 57929: 609, // GrantStmt (2x) + 57931: 610, // HandleRange (2x) + 57933: 611, // HashString (2x) + 57945: 612, // IndexHintList (2x) + 57946: 613, // IndexHintListOpt (2x) + 57956: 614, // InsertValues (2x) + 57958: 615, // IntoOpt (2x) + 57446: 616, // kill (2x) + 57965: 617, // KillOrKillTiDB (2x) + 57966: 618, // KillStmt (2x) + 57971: 619, // LimitClause (2x) + 57452: 620, // load (2x) + 57976: 621, // LoadDataStmt (2x) + 57977: 622, // LoadStatsStmt (2x) + 57981: 623, // LockTablesStmt (2x) + 57984: 624, // MaxValueOrExpression (2x) + 57990: 625, // NowSym (2x) + 57991: 626, // NowSymFunc (2x) + 57992: 627, // NowSymOptionFraction (2x) + 57993: 628, // NumList (2x) + 57994: 629, // NumLiteral (2x) + 57997: 630, // ObjectType (2x) + 57996: 631, // ODBCDateTimeType (2x) + 57356: 632, // odbcDateType (2x) + 57358: 633, // odbcTimestampType (2x) + 57357: 634, // odbcTimeType (2x) + 58008: 635, // OptInteger (2x) + 58010: 636, // OptionalBraces (2x) + 58012: 637, // Order (2x) + 58015: 638, // OuterOpt (2x) + 58016: 639, // PartDefOption (2x) + 58020: 640, // PartitionDefinition (2x) + 58023: 641, // PartitionNameList (2x) + 58026: 642, // PasswordOpt (2x) + 58030: 643, // PreparedStmt (2x) + 58031: 644, // PrimaryOpt (2x) + 58034: 645, // PrivElemList (2x) + 58035: 646, // PrivLevel (2x) + 58039: 647, // ReferOpt (2x) + 58041: 648, // RegexpSym (2x) + 58042: 649, // RenameTableStmt (2x) + 57491: 650, // revoke (2x) + 58045: 651, // RevokeStmt (2x) + 58046: 652, // RollbackStmt (2x) + 58062: 653, // SetStmt (2x) + 58066: 654, // ShowStmt (2x) + 58067: 655, // ShowTableAliasOpt (2x) + 58069: 656, // SignedLiteral (2x) + 58074: 657, // Statement (2x) + 58076: 658, // StatsPersistentVal (2x) + 58077: 659, // StringList (2x) + 58081: 660, // SubPartitionNumOpt (2x) + 58085: 661, // Symbol (2x) + 58089: 662, // TableElement (2x) + 58093: 663, // TableLock (2x) + 58099: 664, // TableOptimizerHintOpt (2x) + 58103: 665, // TableOrTables (2x) + 58109: 666, // TablesTerminalSym (2x) + 58107: 667, // TableToTable (2x) + 58113: 668, // TimestampUnit (2x) + 58114: 669, // TraceStmt (2x) + 58119: 670, // TruncateTableStmt (2x) + 57516: 671, // unlock (2x) + 58126: 672, // UnlockTablesStmt (2x) + 58134: 673, // UsernameList (2x) + 58128: 674, // UseStmt (2x) + 58137: 675, // ValuesList (2x) + 58141: 676, // VariableAssignment (2x) + 58150: 677, // WhenClause (2x) + 57800: 678, // AdminShowSlow (1x) + 57802: 679, // AlterAlgorithm (1x) + 57805: 680, // AlterTableSpecList (1x) + 57809: 681, // AnyOrAll (1x) + 57810: 682, // AsOpt (1x) + 57814: 683, // AuthOption (1x) + 57817: 684, // BetweenOrNotOp (1x) + 57820: 685, // BitValueType (1x) + 57821: 686, // BlobType (1x) + 57823: 687, // BooleanType (1x) + 57370: 688, // both (1x) + 57830: 689, // CharsetOpt (1x) + 57832: 690, // ColumnDefList (1x) + 57834: 691, // ColumnList (1x) + 57838: 692, // ColumnNameListOptWithBrackets (1x) + 57840: 693, // ColumnOptionList (1x) + 57841: 694, // ColumnOptionListOpt (1x) + 57844: 695, // ColumnSetValueList (1x) + 57847: 696, // CompareOp (1x) + 57849: 697, // ConstraintElem (1x) + 57853: 698, // CreateIndexStmtUnique (1x) + 57854: 699, // CreateTableOptionListOpt (1x) + 57855: 700, // CreateTableSelectOpt (1x) + 57862: 701, // DatabaseOptionList (1x) + 57863: 702, // DatabaseOptionListOpt (1x) + 57865: 703, // DateAndTimeType (1x) + 57870: 704, // DefaultTrueDistinctOpt (1x) + 57871: 705, // DefaultValueExpr (1x) + 57405: 706, // dual (1x) + 57882: 707, // DuplicateOpt (1x) + 57883: 708, // ElseOpt (1x) + 57885: 709, // Enclosed (1x) + 57887: 710, // Escaped (1x) + 57897: 711, // ExpressionOpt (1x) + 57902: 712, // FieldList (1x) + 57905: 713, // Fields (1x) + 57906: 714, // FieldsOrColumns (1x) + 57907: 715, // FieldsTerminated (1x) + 57908: 716, // FixedPointType (1x) + 57910: 717, // FloatingPointType (1x) + 57911: 718, // FlushOption (1x) + 57915: 719, // FuncDatetimePrec (1x) + 57927: 720, // GetFormatSelector (1x) + 57928: 721, // GlobalScope (1x) + 57930: 722, // GroupByClause (1x) + 57932: 723, // HandleRangeList (1x) + 57934: 724, // HavingClause (1x) + 57939: 725, // IgnoreLines (1x) + 57947: 726, // IndexHintScope (1x) + 57941: 727, // InOrNotOp (1x) + 57957: 728, // IntegerType (1x) + 57960: 729, // IsolationLevel (1x) + 57959: 730, // IsOrNotOp (1x) + 57964: 731, // KeyOrIndexOpt (1x) + 57447: 732, // leading (1x) + 57968: 733, // LikeEscapeOpt (1x) + 57969: 734, // LikeOrNotOp (1x) + 57970: 735, // LikeTableWithOrWithoutParen (1x) + 57973: 736, // Lines (1x) + 57974: 737, // LinesTerminated (1x) + 57978: 738, // LocalOpt (1x) + 57980: 739, // LockClauseOpt (1x) + 57982: 740, // LockType (1x) + 57985: 741, // MaxValueOrExpressionList (1x) + 57987: 742, // NationalOpt (1x) + 57467: 743, // noWriteToBinLog (1x) + 57988: 744, // NoWriteToBinLogAliasOpt (1x) + 57995: 745, // NumericType (1x) + 57998: 746, // OnDeleteOpt (1x) + 57999: 747, // OnDuplicateKeyUpdate (1x) + 58000: 748, // OnUpdateOpt (1x) + 58001: 749, // OptBinMod (1x) + 58006: 750, // OptFull (1x) + 58007: 751, // OptGConcatSeparator (1x) + 58009: 752, // OptTable (1x) + 58011: 753, // OrReplace (1x) + 58017: 754, // PartDefOptionList (1x) + 58018: 755, // PartDefOptionsOpt (1x) + 58019: 756, // PartDefValuesOpt (1x) + 58021: 757, // PartitionDefinitionList (1x) + 58025: 758, // PartitionOpt (1x) + 57478: 759, // precisionType (1x) + 58029: 760, // PrepareSQL (1x) + 57480: 761, // procedure (1x) + 58037: 762, // QuickOptional (1x) + 57482: 763, // rangeKwd (1x) + 58040: 764, // RegexpOrNotOp (1x) + 58052: 765, // SelectStmtCalcFoundRows (1x) + 58053: 766, // SelectStmtFieldList (1x) + 58056: 767, // SelectStmtGroup (1x) + 58058: 768, // SelectStmtOpts (1x) + 58059: 769, // SelectStmtSQLCache (1x) + 58060: 770, // SelectStmtStraightJoin (1x) + 58064: 771, // ShowIndexKwd (1x) + 58068: 772, // ShowTargetFilterable (1x) + 58072: 773, // Start (1x) + 58073: 774, // Starting (1x) + 57501: 775, // starting (1x) + 58075: 776, // StatementList (1x) + 57504: 777, // stored (1x) + 58080: 778, // StringType (1x) + 58082: 779, // SubPartitionOpt (1x) + 58088: 780, // TableAsNameOpt (1x) + 58090: 781, // TableElementList (1x) + 58091: 782, // TableElementListOpt (1x) + 58094: 783, // TableLockList (1x) + 58097: 784, // TableNameListOpt (1x) + 58098: 785, // TableOptimizerHintList (1x) + 58106: 786, // TableRefsClause (1x) + 58108: 787, // TableToTableList (1x) + 58110: 788, // TextType (1x) + 58115: 789, // TraceableStmt (1x) + 57511: 790, // trailing (1x) + 58118: 791, // TrimDirection (1x) + 58120: 792, // Type (1x) + 58123: 793, // UnionOpt (1x) + 58132: 794, // UserVariableList (1x) + 58136: 795, // Values (1x) + 58138: 796, // ValuesOpt (1x) + 58139: 797, // Varchar (1x) + 58142: 798, // VariableAssignmentList (1x) + 58143: 799, // ViewAlgorithm (1x) + 58144: 800, // ViewCheckOption (1x) + 58145: 801, // ViewDefiner (1x) + 58146: 802, // ViewFieldList (1x) + 58147: 803, // ViewName (1x) + 58148: 804, // ViewSQLSecurity (1x) + 57529: 805, // virtual (1x) + 58149: 806, // VirtualOrStored (1x) + 58151: 807, // WhenClauseList (1x) + 58154: 808, // WithGrantOptionOpt (1x) + 58155: 809, // WithReadLockOpt (1x) + 57799: 810, // $default (0x) + 57770: 811, // andnot (0x) + 57813: 812, // AssignmentListOpt (0x) + 57756: 813, // builtinStddevPop (0x) + 57763: 814, // builtinVarPop (0x) + 57764: 815, // builtinVarSamp (0x) + 57845: 816, // CommaOpt (0x) + 57791: 817, // createTableSelect (0x) + 57784: 818, // empty (0x) + 57345: 819, // error (0x) + 57798: 820, // higherThanComma (0x) + 57789: 821, // insertValues (0x) + 57351: 822, // invalid (0x) + 57797: 823, // lowerThanComma (0x) + 57790: 824, // lowerThanCreateTableSelect (0x) + 57795: 825, // lowerThanEq (0x) + 57788: 826, // lowerThanInsertValues (0x) + 57785: 827, // lowerThanIntervalKeyword (0x) + 57792: 828, // lowerThanKey (0x) + 57794: 829, // lowerThanOn (0x) + 57787: 830, // lowerThanSetKeyword (0x) + 57786: 831, // lowerThanStringLitToken (0x) + 57796: 832, // neg (0x) + 57793: 833, // tableRefPriority (0x) + } + + yySymNames = []string{ + "$end", + "';'", + "comment", + "autoIncrement", + "after", + "first", + "','", + "charsetKwd", + "keyBlockSize", + "engine", + "connection", + "password", + "signed", + "checksum", + "avgRowLength", + "compression", + "delayKeyWrite", + "maxRows", + "minRows", + "rowFormat", + "statsPersistent", + "')'", + "view", + "separator", + "status", + "tables", + "tablespace", + "columns", + "definer", + "fields", + "identified", + "maxExecutionTime", + "tidbHJ", + "tidbINLJ", + "tidbSMJ", + "yearType", + "day", + "hour", + "microsecond", + "minute", + "month", + "quarter", + "second", + "week", + "end", + "privileges", + "algorithm", + "execute", + "offset", + "prepare", + "datetimeType", + "dateType", + "isolation", + "local", + "partitions", + "subpartition", + "timeType", + "user", + "variables", + "event", + "hash", + "jsonType", + "process", + "processlist", + "query", + "reload", + "replication", + "super", + "unknown", + "value", + "admin", + "begin", + "binlog", + "buckets", + "commit", + "compact", + "compressed", + "copyKwd", + "ddl", + "deallocate", + "disable", + "do", + "dynamic", + "enable", + "fixed", + "flush", + "inplace", + "jobs", + "modify", + "no", + "redundant", + "rollback", + "routine", + "start", + "stats", + "subpartitions", + "timestampType", + "trace", + "truncate", + "action", + "always", + "bitType", + "booleanType", + "boolType", + "btree", + "cancel", + "cascaded", + "cleanup", + "client", + "collation", + "committed", + "consistent", + "data", + "duplicate", + "engines", + "enum", + "events", + "exclusive", + "full", + "function", + "global", + "grants", + "identSQLErrors", + "indexes", + "internal", + "invoker", + "job", + "less", + "level", + "master", + "maxConnectionsPerHour", + "maxQueriesPerHour", + "maxUpdatesPerHour", + "maxUserConnections", + "merge", + "mode", + "national", + "none", + "only", + "plugins", + "profiles", + "queries", + "recent", + "recover", + "repeatable", + "security", + "serializable", + "session", + "share", + "shared", + "slave", + "slow", + "snapshot", + "statsBuckets", + "statsHealthy", + "statsHistograms", + "statsMeta", + "temporary", + "temptable", + "textType", + "than", + "tidb", + "top", + "transaction", + "triggers", + "uncommitted", + "undefined", + "warnings", + "addDate", + "any", + "ascii", + "avg", + "bitAnd", + "bitOr", + "bitXor", + "byteType", + "cast", + "coalesce", + "count", + "curTime", + "dateAdd", + "dateSub", + "escape", + "extract", + "format", + "getFormat", + "groupConcat", + "identifier", + "max", + "min", + "names", + "now", + "position", + "quick", + "reverse", + "row", + "rowCount", + "some", + "sqlCache", + "sqlNoCache", + "subDate", + "substring", + "sum", + "timestampAdd", + "timestampDiff", + "trim", + "'('", + "on", + "stringLit", + "not", + "as", + "left", + "right", + "defaultKwd", + "'+'", + "'-'", + "mod", + "null", + "with", + "union", + "lock", + "forKwd", + "limit", + "order", + "where", + "and", + "or", + "andand", + "pipesAsOr", + "xor", + "from", + "using", + "eq", + "straightJoin", + "set", + "having", + "replace", + "join", + "group", + "collate", + "intLit", + "cross", + "inner", + "natural", + "'}'", + "like", + "'*'", + "'.'", + "binaryType", + "desc", + "asc", + "when", + "dayHour", + "dayMicrosecond", + "dayMinute", + "daySecond", + "hourMicrosecond", + "hourMinute", + "hourSecond", + "minuteMicrosecond", + "minuteSecond", + "secondMicrosecond", + "yearMonth", + "elseKwd", + "in", + "then", + "'<'", + "'>'", + "ge", + "is", + "le", + "neq", + "neqSynonym", + "nulleq", + "'%'", + "'&'", + "'/'", + "'^'", + "'|'", + "div", + "lsh", + "rsh", + "currentUser", + "between", + "regexpKwd", + "rlike", + "ifKwd", + "insert", + "'{'", + "singleAtIdentifier", + "charType", + "key", + "values", + "exists", + "falseKwd", + "trueKwd", + "convert", + "decLit", + "floatLit", + "paramMarker", + "database", + "bitLit", + "builtinNow", + "currentTs", + "doubleAtIdentifier", + "hexLit", + "localTime", + "localTs", + "underscoreCS", + "interval", + "'!'", + "'~'", + "builtinAddDate", + "builtinBitAnd", + "builtinBitOr", + "builtinBitXor", + "builtinCast", + "builtinCount", + "builtinCurDate", + "builtinCurTime", + "builtinDateAdd", + "builtinDateSub", + "builtinExtract", + "builtinGroupConcat", + "builtinMax", + "builtinMin", + "builtinPosition", + "builtinSubDate", + "builtinSubstring", + "builtinSum", + "builtinSysDate", + "builtinTrim", + "builtinUser", + "caseKwd", + "currentDate", + "currentTime", + "not2", + "repeat", + "utcDate", + "utcTime", + "utcTimestamp", + "primary", + "unique", + "check", + "references", + "generated", + "pipes", + "ignore", + "Identifier", + "NotKeywordToken", + "TiDBKeyword", + "UnReservedKeyword", + "selectKwd", + "character", + "partition", + "packKeys", + "shardRowIDBits", + "jss", + "juss", + "index", + "lines", + "sql", + "by", + "force", + "use", + "drop", + "cascade", + "restrict", + "to", + "read", + "alter", + "analyze", + "foreign", + "fulltext", + "decimalType", + "integerType", + "intType", + "rename", + "varcharType", + "'@'", + "add", + "bigIntType", + "blobType", + "change", + "doubleType", + "floatType", + "int1Type", + "int2Type", + "int3Type", + "int4Type", + "int8Type", + "long", + "longblobType", + "longtextType", + "mediumblobType", + "mediumIntType", + "mediumtextType", + "numericType", + "nvarcharType", + "realType", + "smallIntType", + "tinyblobType", + "tinyIntType", + "tinytextType", + "varbinaryType", + "write", + "SubSelect", + "UserVariable", + "Literal", + "SimpleIdent", + "StringLiteral", + "FunctionCallGeneric", + "FunctionCallKeyword", + "FunctionCallNonKeyword", + "FunctionNameConflict", + "FunctionNameDateArith", + "FunctionNameDateArithMultiForms", + "FunctionNameDatetimePrecision", + "FunctionNameOptionalBraces", + "SimpleExpr", + "SumExpr", + "SystemVariable", + "Variable", + "BitExpr", + "PredicateExpr", + "BoolPri", + "Expression", + "logAnd", + "logOr", + "TableName", + "unsigned", + "zerofill", + "NUM", + "ColumnName", + "StringName", + "all", + "EqOpt", + "SelectStmt", + "SelectStmtBasic", + "SelectStmtFromDual", + "SelectStmtFromTable", + "FieldLen", + "tableKwd", + "LengthNum", + "UnionSelect", + "UnionClauseList", + "UnionStmt", + "sqlCalcFoundRows", + "update", + "CharsetKw", + "delayed", + "highPriority", + "lowPriority", + "OptFieldLen", + "deleteKwd", + "ExpressionList", + "JoinTable", + "TableFactor", + "TableRef", + "Username", + "distinct", + "distinctRow", + "FromOrIn", + "into", + "IndexType", + "JoinType", + "OrderBy", + "OrderByOptional", + "TableNameList", + "CharsetName", + "ColumnNameList", + "CrossOpt", + "DefaultKwdOpt", + "DistinctKwd", + "IndexColName", + "KeyOrIndex", + "OptCollate", + "ColumnDef", + "DistinctOpt", + "escaped", + "EscapedTableRef", + "hintEnd", + "IndexColNameList", + "SelectStmtLimit", + "WhereClause", + "WhereClauseOptional", + "create", + "DefaultFalseDistinctOpt", + "DeleteFromStmt", + "ExprOrDefault", + "grant", + "InsertIntoStmt", + "MaxNumBuckets", + "OptBinary", + "ReplaceIntoStmt", + "RowFormat", + "SelectLockOpt", + "show", + "ShowDatabaseNameOpt", + "TableOption", + "TableRefs", + "terminated", + "UpdateStmt", + "BuggyDefaultFalseDistinctOpt", + "column", + "ColumnKeywordOpt", + "DBName", + "enclosed", + "ExpressionListOpt", + "FieldOpt", + "FieldOpts", + "IndexName", + "IndexOption", + "IndexOptionList", + "PartitionDefinitionListOpt", + "PriorityOpt", + "ShowLikeOrWhereOpt", + "TimeUnit", + "UserSpec", + "Assignment", + "AuthString", + "IgnoreOptional", + "IndexNameList", + "IndexTypeOpt", + "LimitOption", + "option", + "outer", + "PartitionNumOpt", + "SetExpr", + "TableAsName", + "TransactionChar", + "UserSpecList", + "assignmentEq", + "AssignmentList", + "ByItem", + "ColumnPosition", + "Constraint", + "constraint", + "ConstraintKeywordOpt", + "ExplainableStmt", + "FloatOpt", + "hintBegin", + "HintTableList", + "IfExists", + "IfNotExists", + "IndexHint", + "IndexHintType", + "infile", + "keys", + "LockClause", + "maxValue", + "OptCharset", + "Precision", + "PrivElem", + "PrivType", + "ReferDef", + "RestrictOrCascadeOpt", + "RowValue", + "TableOptimizerHints", + "TableOptionList", + "TransactionChars", + "trigger", + "usage", + "ValueSym", + "AdminStmt", + "AlterTableOptionListOpt", + "AlterTableSpec", + "AlterTableStmt", + "AlterUserStmt", + "AnalyzeTableStmt", + "BeginTransactionStmt", + "BinlogStmt", + "ByList", + "CastType", + "ColumnNameListOpt", + "ColumnOption", + "ColumnSetValue", + "CommitStmt", + "CreateDatabaseStmt", + "CreateIndexStmt", + "CreateTableStmt", + "CreateUserStmt", + "CreateViewStmt", + "DatabaseOption", + "databases", + "DatabaseSym", + "DeallocateStmt", + "DeallocateSym", + "describe", + "DoStmt", + "DropDatabaseStmt", + "DropIndexStmt", + "DropStatsStmt", + "DropTableStmt", + "DropUserStmt", + "DropViewStmt", + "EmptyStmt", + "ExecuteStmt", + "explain", + "ExplainStmt", + "ExplainSym", + "Field", + "FieldAsName", + "FieldAsNameOpt", + "FlushStmt", + "FromDual", + "FuncDatetimePrecList", + "FuncDatetimePrecListOpt", + "GeneratedAlways", + "GrantStmt", + "HandleRange", + "HashString", + "IndexHintList", + "IndexHintListOpt", + "InsertValues", + "IntoOpt", + "kill", + "KillOrKillTiDB", + "KillStmt", + "LimitClause", + "load", + "LoadDataStmt", + "LoadStatsStmt", + "LockTablesStmt", + "MaxValueOrExpression", + "NowSym", + "NowSymFunc", + "NowSymOptionFraction", + "NumList", + "NumLiteral", + "ObjectType", + "ODBCDateTimeType", + "odbcDateType", + "odbcTimestampType", + "odbcTimeType", + "OptInteger", + "OptionalBraces", + "Order", + "OuterOpt", + "PartDefOption", + "PartitionDefinition", + "PartitionNameList", + "PasswordOpt", + "PreparedStmt", + "PrimaryOpt", + "PrivElemList", + "PrivLevel", + "ReferOpt", + "RegexpSym", + "RenameTableStmt", + "revoke", + "RevokeStmt", + "RollbackStmt", + "SetStmt", + "ShowStmt", + "ShowTableAliasOpt", + "SignedLiteral", + "Statement", + "StatsPersistentVal", + "StringList", + "SubPartitionNumOpt", + "Symbol", + "TableElement", + "TableLock", + "TableOptimizerHintOpt", + "TableOrTables", + "TablesTerminalSym", + "TableToTable", + "TimestampUnit", + "TraceStmt", + "TruncateTableStmt", + "unlock", + "UnlockTablesStmt", + "UsernameList", + "UseStmt", + "ValuesList", + "VariableAssignment", + "WhenClause", + "AdminShowSlow", + "AlterAlgorithm", + "AlterTableSpecList", + "AnyOrAll", + "AsOpt", + "AuthOption", + "BetweenOrNotOp", + "BitValueType", + "BlobType", + "BooleanType", + "both", + "CharsetOpt", + "ColumnDefList", + "ColumnList", + "ColumnNameListOptWithBrackets", + "ColumnOptionList", + "ColumnOptionListOpt", + "ColumnSetValueList", + "CompareOp", + "ConstraintElem", + "CreateIndexStmtUnique", + "CreateTableOptionListOpt", + "CreateTableSelectOpt", + "DatabaseOptionList", + "DatabaseOptionListOpt", + "DateAndTimeType", + "DefaultTrueDistinctOpt", + "DefaultValueExpr", + "dual", + "DuplicateOpt", + "ElseOpt", + "Enclosed", + "Escaped", + "ExpressionOpt", + "FieldList", + "Fields", + "FieldsOrColumns", + "FieldsTerminated", + "FixedPointType", + "FloatingPointType", + "FlushOption", + "FuncDatetimePrec", + "GetFormatSelector", + "GlobalScope", + "GroupByClause", + "HandleRangeList", + "HavingClause", + "IgnoreLines", + "IndexHintScope", + "InOrNotOp", + "IntegerType", + "IsolationLevel", + "IsOrNotOp", + "KeyOrIndexOpt", + "leading", + "LikeEscapeOpt", + "LikeOrNotOp", + "LikeTableWithOrWithoutParen", + "Lines", + "LinesTerminated", + "LocalOpt", + "LockClauseOpt", + "LockType", + "MaxValueOrExpressionList", + "NationalOpt", + "noWriteToBinLog", + "NoWriteToBinLogAliasOpt", + "NumericType", + "OnDeleteOpt", + "OnDuplicateKeyUpdate", + "OnUpdateOpt", + "OptBinMod", + "OptFull", + "OptGConcatSeparator", + "OptTable", + "OrReplace", + "PartDefOptionList", + "PartDefOptionsOpt", + "PartDefValuesOpt", + "PartitionDefinitionList", + "PartitionOpt", + "precisionType", + "PrepareSQL", + "procedure", + "QuickOptional", + "rangeKwd", + "RegexpOrNotOp", + "SelectStmtCalcFoundRows", + "SelectStmtFieldList", + "SelectStmtGroup", + "SelectStmtOpts", + "SelectStmtSQLCache", + "SelectStmtStraightJoin", + "ShowIndexKwd", + "ShowTargetFilterable", + "Start", + "Starting", + "starting", + "StatementList", + "stored", + "StringType", + "SubPartitionOpt", + "TableAsNameOpt", + "TableElementList", + "TableElementListOpt", + "TableLockList", + "TableNameListOpt", + "TableOptimizerHintList", + "TableRefsClause", + "TableToTableList", + "TextType", + "TraceableStmt", + "trailing", + "TrimDirection", + "Type", + "UnionOpt", + "UserVariableList", + "Values", + "ValuesOpt", + "Varchar", + "VariableAssignmentList", + "ViewAlgorithm", + "ViewCheckOption", + "ViewDefiner", + "ViewFieldList", + "ViewName", + "ViewSQLSecurity", + "virtual", + "VirtualOrStored", + "WhenClauseList", + "WithGrantOptionOpt", + "WithReadLockOpt", + "$default", + "andnot", + "AssignmentListOpt", + "builtinStddevPop", + "builtinVarPop", + "builtinVarSamp", + "CommaOpt", + "createTableSelect", + "empty", + "error", + "higherThanComma", + "insertValues", + "invalid", + "lowerThanComma", + "lowerThanCreateTableSelect", + "lowerThanEq", + "lowerThanInsertValues", + "lowerThanIntervalKeyword", + "lowerThanKey", + "lowerThanOn", + "lowerThanSetKeyword", + "lowerThanStringLitToken", + "neg", + "tableRefPriority", + } + + yyReductions = []struct{ xsym, components int }{ + {0, 1}, + {773, 1}, + {567, 5}, + {567, 8}, + {567, 10}, + {566, 1}, + {566, 5}, + {566, 4}, + {566, 5}, + {566, 2}, + {566, 3}, + {566, 4}, + {566, 3}, + {566, 3}, + {566, 3}, + {566, 4}, + {566, 2}, + {566, 2}, + {566, 4}, + {566, 5}, + {566, 6}, + {566, 5}, + {566, 3}, + {566, 2}, + {566, 3}, + {566, 5}, + {566, 1}, + {566, 3}, + {566, 1}, + {679, 1}, + {679, 1}, + {679, 1}, + {739, 0}, + {739, 1}, + {549, 3}, + {549, 3}, + {549, 3}, + {549, 3}, + {475, 1}, + {475, 1}, + {731, 0}, + {731, 1}, + {505, 0}, + {505, 1}, + {535, 0}, + {535, 1}, + {535, 2}, + {680, 1}, + {680, 3}, + {641, 1}, + {641, 3}, + {538, 0}, + {538, 1}, + {538, 2}, + {661, 1}, + {649, 3}, + {787, 1}, + {787, 3}, + {667, 3}, + {569, 4}, + {569, 6}, + {569, 6}, + {569, 8}, + {492, 0}, + {492, 3}, + {519, 3}, + {533, 1}, + {533, 3}, + {812, 0}, + {812, 1}, + {570, 1}, + {570, 2}, + {570, 5}, + {571, 2}, + {690, 1}, + {690, 3}, + {477, 3}, + {433, 1}, + {433, 3}, + {433, 5}, + {470, 1}, + {470, 3}, + {574, 0}, + {574, 1}, + {692, 0}, + {692, 3}, + {577, 1}, + {644, 0}, + {644, 1}, + {575, 2}, + {575, 1}, + {575, 1}, + {575, 2}, + {575, 1}, + {575, 2}, + {575, 2}, + {575, 3}, + {575, 2}, + {575, 4}, + {575, 6}, + {575, 1}, + {608, 0}, + {608, 2}, + {806, 0}, + {806, 1}, + {806, 1}, + {693, 1}, + {693, 2}, + {694, 0}, + {694, 1}, + {697, 8}, + {697, 7}, + {697, 7}, + {697, 8}, + {697, 7}, + {555, 7}, + {746, 0}, + {746, 3}, + {748, 0}, + {748, 3}, + {647, 1}, + {647, 1}, + {647, 2}, + {647, 2}, + {705, 1}, + {705, 1}, + {627, 1}, + {627, 3}, + {627, 4}, + {626, 1}, + {626, 1}, + {626, 1}, + {626, 1}, + {625, 1}, + {625, 1}, + {625, 1}, + {656, 1}, + {656, 2}, + {656, 2}, + {629, 1}, + {629, 1}, + {629, 1}, + {579, 12}, + {698, 0}, + {698, 1}, + {474, 3}, + {482, 1}, + {482, 3}, + {578, 5}, + {506, 1}, + {583, 4}, + {583, 4}, + {702, 0}, + {702, 1}, + {701, 1}, + {701, 2}, + {580, 10}, + {580, 5}, + {472, 0}, + {472, 1}, + {758, 0}, + {758, 8}, + {758, 8}, + {758, 9}, + {758, 9}, + {779, 0}, + {779, 7}, + {779, 7}, + {660, 0}, + {660, 2}, + {527, 0}, + {527, 2}, + {514, 0}, + {514, 3}, + {757, 1}, + {757, 3}, + {640, 4}, + {755, 0}, + {755, 1}, + {754, 1}, + {754, 2}, + {639, 3}, + {639, 3}, + {639, 3}, + {756, 0}, + {756, 4}, + {756, 6}, + {707, 0}, + {707, 1}, + {707, 1}, + {682, 0}, + {682, 1}, + {700, 0}, + {700, 1}, + {700, 1}, + {700, 1}, + {735, 2}, + {735, 4}, + {582, 11}, + {753, 0}, + {753, 2}, + {799, 0}, + {799, 3}, + {799, 3}, + {799, 3}, + {801, 0}, + {801, 3}, + {804, 0}, + {804, 3}, + {804, 3}, + {803, 1}, + {802, 0}, + {802, 3}, + {691, 1}, + {691, 3}, + {800, 0}, + {800, 4}, + {800, 4}, + {589, 2}, + {488, 11}, + {488, 9}, + {488, 10}, + {585, 1}, + {590, 4}, + {591, 6}, + {593, 4}, + {593, 6}, + {595, 5}, + {594, 3}, + {594, 5}, + {592, 3}, + {556, 0}, + {556, 1}, + {556, 1}, + {665, 1}, + {665, 1}, + {436, 0}, + {436, 1}, + {596, 0}, + {669, 2}, + {600, 1}, + {600, 1}, + {600, 1}, + {599, 2}, + {599, 3}, + {599, 2}, + {599, 5}, + {599, 3}, + {443, 1}, + {432, 1}, + {426, 3}, + {426, 3}, + {426, 3}, + {426, 3}, + {426, 2}, + {426, 3}, + {426, 3}, + {426, 3}, + {426, 1}, + {624, 1}, + {624, 1}, + {428, 1}, + {428, 1}, + {427, 1}, + {427, 1}, + {455, 1}, + {455, 3}, + {741, 1}, + {741, 3}, + {508, 0}, + {508, 1}, + {607, 0}, + {607, 1}, + {606, 1}, + {425, 3}, + {425, 3}, + {425, 4}, + {425, 5}, + {425, 1}, + {696, 1}, + {696, 1}, + {696, 1}, + {696, 1}, + {696, 1}, + {696, 1}, + {696, 1}, + {696, 1}, + {684, 1}, + {684, 2}, + {730, 1}, + {730, 2}, + {727, 1}, + {727, 2}, + {734, 1}, + {734, 2}, + {764, 1}, + {764, 2}, + {681, 1}, + {681, 1}, + {681, 1}, + {424, 5}, + {424, 3}, + {424, 5}, + {424, 4}, + {424, 3}, + {424, 1}, + {648, 1}, + {648, 1}, + {733, 0}, + {733, 2}, + {601, 1}, + {601, 3}, + {601, 5}, + {601, 2}, + {601, 5}, + {603, 0}, + {603, 1}, + {602, 1}, + {602, 2}, + {602, 1}, + {602, 2}, + {712, 1}, + {712, 3}, + {722, 3}, + {724, 0}, + {724, 2}, + {543, 0}, + {543, 2}, + {544, 0}, + {544, 3}, + {521, 0}, + {521, 1}, + {511, 0}, + {511, 1}, + {513, 0}, + {513, 2}, + {512, 3}, + {512, 1}, + {512, 2}, + {464, 2}, + {464, 2}, + {523, 0}, + {523, 1}, + {348, 1}, + {348, 1}, + {348, 1}, + {348, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {351, 1}, + {350, 1}, + {350, 1}, + {350, 1}, + {350, 1}, + {350, 1}, + {350, 1}, + {350, 1}, + {350, 1}, + {350, 1}, + {350, 1}, + {350, 1}, + {350, 1}, + {350, 1}, + {350, 1}, + {350, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {349, 1}, + {491, 7}, + {615, 0}, + {615, 1}, + {614, 5}, + {614, 4}, + {614, 6}, + {614, 4}, + {614, 2}, + {614, 3}, + {614, 1}, + {614, 1}, + {614, 2}, + {563, 1}, + {563, 1}, + {675, 1}, + {675, 3}, + {557, 3}, + {796, 0}, + {796, 1}, + {795, 3}, + {795, 1}, + {489, 1}, + {489, 1}, + {576, 3}, + {695, 0}, + {695, 1}, + {695, 3}, + {747, 0}, + {747, 5}, + {494, 5}, + {631, 1}, + {631, 1}, + {631, 1}, + {408, 1}, + {408, 1}, + {408, 1}, + {408, 1}, + {408, 1}, + {408, 1}, + {408, 1}, + {408, 2}, + {408, 1}, + {408, 1}, + {410, 1}, + {410, 2}, + {466, 3}, + {572, 1}, + {572, 3}, + {534, 2}, + {637, 0}, + {637, 1}, + {637, 1}, + {467, 0}, + {467, 1}, + {423, 3}, + {423, 3}, + {423, 3}, + {423, 3}, + {423, 3}, + {423, 3}, + {423, 5}, + {423, 5}, + {423, 3}, + {423, 3}, + {423, 3}, + {423, 3}, + {423, 3}, + {423, 3}, + {423, 1}, + {409, 1}, + {409, 3}, + {409, 4}, + {409, 5}, + {419, 1}, + {419, 1}, + {419, 1}, + {419, 1}, + {419, 3}, + {419, 1}, + {419, 1}, + {419, 1}, + {419, 1}, + {419, 2}, + {419, 2}, + {419, 2}, + {419, 2}, + {419, 3}, + {419, 2}, + {419, 1}, + {419, 3}, + {419, 5}, + {419, 6}, + {419, 2}, + {419, 2}, + {419, 6}, + {419, 5}, + {419, 6}, + {419, 6}, + {419, 4}, + {419, 4}, + {419, 3}, + {419, 3}, + {473, 1}, + {473, 1}, + {478, 1}, + {478, 1}, + {487, 0}, + {487, 1}, + {704, 0}, + {704, 1}, + {503, 1}, + {503, 2}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {414, 1}, + {636, 0}, + {636, 2}, + {418, 1}, + {418, 1}, + {418, 1}, + {417, 1}, + {417, 1}, + {417, 1}, + {417, 1}, + {417, 1}, + {417, 1}, + {412, 4}, + {412, 4}, + {412, 2}, + {412, 3}, + {412, 2}, + {412, 4}, + {412, 6}, + {412, 2}, + {412, 2}, + {412, 2}, + {412, 4}, + {412, 6}, + {412, 4}, + {412, 4}, + {413, 4}, + {413, 4}, + {413, 6}, + {413, 8}, + {413, 8}, + {413, 6}, + {413, 6}, + {413, 6}, + {413, 6}, + {413, 6}, + {413, 8}, + {413, 8}, + {413, 8}, + {413, 8}, + {413, 4}, + {413, 6}, + {413, 6}, + {413, 7}, + {720, 1}, + {720, 1}, + {720, 1}, + {720, 1}, + {415, 1}, + {415, 1}, + {416, 1}, + {416, 1}, + {791, 1}, + {791, 1}, + {791, 1}, + {420, 5}, + {420, 4}, + {420, 5}, + {420, 4}, + {420, 5}, + {420, 4}, + {420, 5}, + {420, 5}, + {420, 5}, + {420, 4}, + {420, 4}, + {420, 7}, + {420, 5}, + {420, 5}, + {420, 5}, + {751, 0}, + {751, 2}, + {411, 4}, + {719, 0}, + {719, 2}, + {719, 3}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {517, 1}, + {668, 1}, + {668, 1}, + {668, 1}, + {668, 1}, + {668, 1}, + {668, 1}, + {668, 1}, + {668, 1}, + {668, 1}, + {711, 0}, + {711, 1}, + {807, 1}, + {807, 2}, + {677, 4}, + {708, 0}, + {708, 2}, + {573, 2}, + {573, 3}, + {573, 1}, + {573, 2}, + {573, 2}, + {573, 2}, + {573, 2}, + {573, 2}, + {573, 1}, + {515, 0}, + {515, 1}, + {515, 1}, + {515, 1}, + {429, 1}, + {429, 3}, + {468, 1}, + {468, 3}, + {762, 0}, + {762, 1}, + {643, 4}, + {760, 1}, + {760, 1}, + {597, 2}, + {597, 4}, + {794, 1}, + {794, 3}, + {586, 3}, + {587, 1}, + {587, 1}, + {652, 1}, + {438, 3}, + {439, 4}, + {440, 6}, + {437, 4}, + {437, 3}, + {437, 4}, + {605, 2}, + {786, 1}, + {500, 1}, + {500, 3}, + {480, 1}, + {480, 4}, + {458, 1}, + {458, 1}, + {457, 3}, + {457, 4}, + {457, 4}, + {457, 3}, + {780, 0}, + {780, 1}, + {529, 1}, + {529, 2}, + {546, 2}, + {546, 2}, + {546, 2}, + {726, 0}, + {726, 2}, + {726, 3}, + {726, 3}, + {545, 5}, + {522, 0}, + {522, 1}, + {522, 3}, + {612, 1}, + {612, 2}, + {613, 0}, + {613, 1}, + {456, 3}, + {456, 5}, + {456, 7}, + {456, 7}, + {456, 9}, + {456, 4}, + {456, 6}, + {456, 3}, + {456, 5}, + {465, 1}, + {465, 1}, + {638, 0}, + {638, 1}, + {471, 1}, + {471, 2}, + {471, 2}, + {619, 0}, + {619, 2}, + {524, 1}, + {524, 1}, + {483, 0}, + {483, 2}, + {483, 4}, + {483, 4}, + {768, 6}, + {558, 0}, + {558, 3}, + {542, 1}, + {542, 3}, + {785, 1}, + {785, 2}, + {664, 4}, + {664, 4}, + {664, 4}, + {664, 4}, + {765, 0}, + {765, 1}, + {769, 0}, + {769, 1}, + {769, 1}, + {770, 0}, + {770, 1}, + {766, 1}, + {767, 0}, + {767, 1}, + {406, 3}, + {406, 3}, + {496, 0}, + {496, 2}, + {496, 4}, + {446, 7}, + {446, 6}, + {446, 7}, + {446, 8}, + {445, 1}, + {445, 4}, + {444, 1}, + {444, 3}, + {793, 1}, + {653, 2}, + {653, 4}, + {653, 6}, + {653, 4}, + {653, 4}, + {653, 3}, + {560, 1}, + {560, 3}, + {530, 3}, + {530, 2}, + {530, 2}, + {729, 2}, + {729, 2}, + {729, 2}, + {729, 1}, + {528, 1}, + {528, 1}, + {676, 3}, + {676, 4}, + {676, 4}, + {676, 4}, + {676, 3}, + {676, 3}, + {676, 3}, + {676, 2}, + {676, 4}, + {676, 4}, + {676, 2}, + {469, 1}, + {469, 1}, + {798, 0}, + {798, 1}, + {798, 3}, + {422, 1}, + {422, 1}, + {421, 1}, + {407, 1}, + {459, 1}, + {459, 3}, + {459, 2}, + {459, 2}, + {673, 1}, + {673, 3}, + {642, 1}, + {642, 4}, + {520, 1}, + {564, 3}, + {564, 4}, + {564, 5}, + {564, 4}, + {564, 5}, + {564, 5}, + {564, 5}, + {564, 6}, + {564, 4}, + {564, 5}, + {564, 6}, + {564, 4}, + {678, 2}, + {678, 2}, + {678, 3}, + {678, 3}, + {723, 1}, + {723, 3}, + {610, 5}, + {628, 1}, + {628, 3}, + {654, 3}, + {654, 4}, + {654, 4}, + {654, 2}, + {654, 4}, + {654, 3}, + {654, 3}, + {654, 3}, + {654, 3}, + {654, 3}, + {654, 3}, + {654, 2}, + {654, 2}, + {771, 1}, + {771, 1}, + {771, 1}, + {462, 1}, + {462, 1}, + {772, 1}, + {772, 1}, + {772, 1}, + {772, 3}, + {772, 3}, + {772, 3}, + {772, 5}, + {772, 4}, + {772, 4}, + {772, 1}, + {772, 1}, + {772, 2}, + {772, 2}, + {772, 1}, + {772, 2}, + {772, 2}, + {772, 2}, + {772, 2}, + {772, 1}, + {516, 0}, + {516, 2}, + {516, 2}, + {721, 0}, + {721, 1}, + {721, 1}, + {750, 0}, + {750, 1}, + {498, 0}, + {498, 2}, + {655, 2}, + {604, 3}, + {718, 1}, + {718, 1}, + {718, 3}, + {744, 0}, + {744, 1}, + {744, 1}, + {784, 0}, + {784, 1}, + {809, 0}, + {809, 3}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {657, 1}, + {789, 1}, + {789, 1}, + {789, 1}, + {789, 1}, + {789, 1}, + {789, 1}, + {539, 1}, + {539, 1}, + {539, 1}, + {539, 1}, + {539, 1}, + {539, 1}, + {776, 1}, + {776, 3}, + {536, 2}, + {662, 1}, + {662, 1}, + {662, 4}, + {781, 1}, + {781, 3}, + {782, 0}, + {782, 3}, + {499, 2}, + {499, 3}, + {499, 4}, + {499, 4}, + {499, 3}, + {499, 3}, + {499, 3}, + {499, 3}, + {499, 3}, + {499, 3}, + {499, 3}, + {499, 3}, + {499, 3}, + {499, 3}, + {499, 3}, + {499, 1}, + {499, 3}, + {499, 3}, + {499, 3}, + {658, 1}, + {658, 1}, + {565, 0}, + {565, 1}, + {699, 0}, + {699, 1}, + {559, 1}, + {559, 2}, + {559, 3}, + {752, 0}, + {752, 1}, + {670, 3}, + {495, 3}, + {495, 3}, + {495, 3}, + {495, 3}, + {495, 3}, + {495, 3}, + {792, 1}, + {792, 1}, + {792, 1}, + {745, 3}, + {745, 2}, + {745, 3}, + {745, 3}, + {745, 2}, + {728, 1}, + {728, 1}, + {728, 1}, + {728, 1}, + {728, 1}, + {728, 1}, + {728, 1}, + {728, 1}, + {728, 1}, + {728, 1}, + {728, 1}, + {687, 1}, + {687, 1}, + {635, 0}, + {635, 1}, + {635, 1}, + {716, 1}, + {716, 1}, + {717, 1}, + {717, 1}, + {717, 1}, + {717, 2}, + {685, 1}, + {778, 5}, + {778, 4}, + {778, 5}, + {778, 4}, + {778, 2}, + {778, 2}, + {778, 1}, + {778, 3}, + {778, 6}, + {778, 6}, + {778, 1}, + {742, 0}, + {742, 1}, + {797, 2}, + {797, 1}, + {797, 1}, + {686, 1}, + {686, 2}, + {686, 1}, + {686, 1}, + {788, 1}, + {788, 2}, + {788, 1}, + {788, 1}, + {788, 2}, + {703, 1}, + {703, 2}, + {703, 2}, + {703, 2}, + {703, 3}, + {441, 3}, + {453, 0}, + {453, 1}, + {509, 1}, + {509, 1}, + {509, 1}, + {510, 0}, + {510, 2}, + {540, 0}, + {540, 1}, + {540, 1}, + {552, 5}, + {749, 0}, + {749, 1}, + {493, 0}, + {493, 2}, + {493, 3}, + {551, 0}, + {551, 2}, + {449, 2}, + {449, 1}, + {476, 0}, + {476, 2}, + {659, 1}, + {659, 3}, + {434, 1}, + {434, 1}, + {502, 10}, + {502, 8}, + {674, 2}, + {484, 2}, + {485, 0}, + {485, 1}, + {816, 0}, + {816, 1}, + {581, 4}, + {568, 4}, + {568, 9}, + {518, 2}, + {531, 1}, + {531, 3}, + {683, 0}, + {683, 3}, + {683, 3}, + {683, 5}, + {683, 5}, + {683, 4}, + {611, 1}, + {609, 8}, + {808, 0}, + {808, 3}, + {808, 3}, + {808, 3}, + {808, 3}, + {808, 3}, + {553, 1}, + {553, 4}, + {645, 1}, + {645, 3}, + {554, 1}, + {554, 2}, + {554, 1}, + {554, 1}, + {554, 2}, + {554, 1}, + {554, 1}, + {554, 1}, + {554, 1}, + {554, 1}, + {554, 1}, + {554, 1}, + {554, 1}, + {554, 1}, + {554, 2}, + {554, 1}, + {554, 2}, + {554, 1}, + {554, 2}, + {554, 2}, + {554, 1}, + {554, 1}, + {554, 3}, + {554, 2}, + {554, 2}, + {554, 2}, + {554, 2}, + {554, 2}, + {554, 1}, + {630, 0}, + {630, 1}, + {646, 1}, + {646, 3}, + {646, 3}, + {646, 3}, + {646, 1}, + {651, 7}, + {621, 13}, + {725, 0}, + {725, 3}, + {689, 0}, + {689, 3}, + {738, 0}, + {738, 1}, + {713, 0}, + {713, 4}, + {714, 1}, + {714, 1}, + {715, 0}, + {715, 3}, + {709, 0}, + {709, 3}, + {710, 0}, + {710, 3}, + {736, 0}, + {736, 3}, + {774, 0}, + {774, 3}, + {737, 0}, + {737, 3}, + {672, 2}, + {623, 3}, + {666, 1}, + {666, 1}, + {663, 2}, + {740, 1}, + {740, 2}, + {740, 1}, + {783, 1}, + {783, 3}, + {618, 2}, + {618, 3}, + {618, 3}, + {617, 1}, + {617, 2}, + {622, 3}, + } + + yyXErrors = map[yyXError]string{} + + yyParseTab = [2289][]uint16{ + // 0 + {1115, 1115, 47: 1375, 49: 1374, 70: 1388, 1359, 1361, 74: 1362, 79: 1377, 81: 1364, 85: 1390, 91: 1378, 93: 1360, 97: 1367, 1437, 206: 1383, 220: 1444, 234: 1387, 236: 1373, 249: 1370, 287: 1372, 352: 1379, 364: 1439, 1366, 370: 1356, 1358, 377: 1357, 406: 1429, 437: 1386, 1380, 1381, 1382, 444: 1385, 1384, 1426, 448: 1438, 454: 1365, 486: 1363, 488: 1400, 490: 1440, 1417, 494: 1424, 497: 1389, 502: 1432, 564: 1392, 567: 1393, 1394, 1395, 1396, 1397, 577: 1398, 1403, 1404, 1405, 1407, 1406, 586: 1399, 1376, 1369, 1408, 1409, 1410, 1414, 1411, 1413, 1412, 1391, 1401, 1368, 1402, 1371, 604: 1415, 609: 1416, 616: 1446, 1445, 1418, 620: 1442, 1419, 1420, 1435, 643: 1421, 649: 1423, 1441, 1425, 1422, 1427, 1428, 657: 1436, 669: 1430, 1431, 1443, 1434, 674: 1433, 773: 1354, 776: 1355}, + {1353}, + {1352, 3640}, + {57: 3542, 347: 1843, 442: 1023, 521: 3541}, + {442: 3533}, + // 5 + {442: 3514}, + {1283, 1283}, + {163: 3510}, + {208: 3509}, + {1267, 1267}, + // 10 + {22: 1154, 28: 1154, 46: 1154, 57: 3013, 226: 3012, 300: 2953, 342: 3008, 359: 1210, 361: 1154, 442: 3010, 585: 3009, 698: 3007, 753: 3011}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2030, 455: 3006}, + {2: 461, 461, 461, 461, 7: 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 22: 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 230: 461, 347: 461, 450: 461, 461, 461, 541: 1837, 558: 2987}, + {22: 2957, 25: 2558, 49: 525, 57: 2958, 94: 2959, 300: 2953, 359: 2955, 442: 2557, 585: 2954, 665: 2956}, + {206: 2313, 236: 1373, 287: 1372, 352: 1379, 437: 2947, 1380, 1381, 1382, 444: 1385, 1384, 2952, 448: 1438, 454: 1365, 488: 2948, 491: 2950, 494: 2951, 502: 2949, 789: 2946}, + // 15 + {2: 1113, 1113, 1113, 1113, 7: 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 22: 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 236: 1113, 287: 1113, 352: 1113, 371: 1113, 448: 1113, 454: 1113}, + {2: 1112, 1112, 1112, 1112, 7: 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 22: 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 236: 1112, 287: 1112, 352: 1112, 371: 1112, 448: 1112, 454: 1112}, + {2: 1111, 1111, 1111, 1111, 7: 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 22: 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 236: 1111, 287: 1111, 352: 1111, 371: 1111, 448: 1111, 454: 1111}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 2933, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 2313, 236: 1373, 287: 1372, 348: 1662, 1459, 1460, 1458, 1379, 371: 2934, 429: 2931, 437: 2935, 1380, 1381, 1382, 444: 1385, 1384, 2940, 448: 1438, 454: 1365, 488: 2936, 491: 2938, 494: 2939, 502: 2937, 539: 2932}, + {2: 544, 544, 544, 544, 7: 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 22: 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 347: 544, 450: 1841, 1840, 1839, 463: 544, 515: 2920}, + // 20 + {2: 544, 544, 544, 544, 7: 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 22: 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 450: 1841, 1840, 1839, 463: 544, 515: 2879}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2874, 1459, 1460, 1458}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2868, 1459, 1460, 1458}, + {49: 2866}, + {49: 526}, + // 25 + {524, 524}, + {2: 461, 461, 461, 461, 7: 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 22: 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 208: 461, 461, 211: 461, 461, 461, 461, 461, 461, 461, 233: 461, 236: 461, 240: 461, 246: 461, 461, 461, 282: 461, 286: 461, 461, 461, 461, 461, 292: 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 435: 461, 447: 461, 450: 461, 461, 461, 460: 461, 461, 541: 1837, 558: 2831, 768: 2830}, + {753, 753, 21: 753, 207: 753, 218: 753, 753, 753, 753, 753, 2033, 230: 2804, 466: 2034, 2827, 605: 2803}, + {466, 466, 21: 466, 207: 466, 218: 466, 466, 466, 466, 2785, 483: 2825}, + {753, 753, 21: 753, 207: 753, 218: 753, 753, 753, 753, 753, 2033, 466: 2034, 2822}, + // 30 + {206: 2313, 352: 1379, 437: 2321, 1380, 1381, 1382, 444: 1385, 1384, 2312}, + {219: 2771}, + {219: 432}, + {266, 266, 219: 430}, + {397, 397, 1540, 1463, 1464, 1496, 397, 2697, 1545, 1489, 1542, 2701, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 2699, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 2698, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 2702, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 2703, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 2700, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 289: 2707, 304: 2706, 348: 2705, 1459, 1460, 1458, 353: 2275, 449: 2708, 676: 2709, 798: 2704}, + // 35 + {13: 2651, 105: 2652, 107: 2650, 143: 2649, 343: 2648, 497: 2647}, + {7: 2276, 24: 320, 317, 27: 317, 29: 317, 45: 2582, 58: 320, 63: 317, 109: 2594, 114: 2586, 116: 2598, 118: 2602, 2597, 2600, 2574, 2592, 2584, 129: 2575, 139: 2599, 2581, 147: 2601, 153: 2579, 2580, 2578, 2577, 164: 2595, 167: 2591, 353: 2275, 359: 2583, 442: 2589, 449: 2588, 486: 2573, 548: 2585, 584: 2587, 721: 2593, 750: 2576, 761: 2596, 771: 2590, 2572}, + {24: 308, 308, 45: 308, 53: 2556, 442: 308, 743: 2555, 2554}, + {301, 301}, + {300, 300}, + // 40 + {299, 299}, + {298, 298}, + {297, 297}, + {296, 296}, + {295, 295}, + // 45 + {294, 294}, + {293, 293}, + {292, 292}, + {291, 291}, + {290, 290}, + // 50 + {289, 289}, + {288, 288}, + {287, 287}, + {286, 286}, + {285, 285}, + // 55 + {284, 284}, + {283, 283}, + {282, 282}, + {281, 281}, + {280, 280}, + // 60 + {279, 279}, + {278, 278}, + {277, 277}, + {276, 276}, + {275, 275}, + // 65 + {274, 274}, + {273, 273}, + {272, 272}, + {271, 271}, + {270, 270}, + // 70 + {269, 269}, + {268, 268}, + {267, 267}, + {265, 265}, + {264, 264}, + // 75 + {263, 263}, + {262, 262}, + {261, 261}, + {260, 260}, + {259, 259}, + // 80 + {258, 258}, + {257, 257}, + {256, 256}, + {243, 243}, + {2: 205, 205, 205, 205, 7: 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 22: 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 442: 2551, 752: 2552}, + // 85 + {2: 461, 461, 461, 461, 7: 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 22: 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 288: 461, 347: 461, 450: 461, 461, 461, 541: 1837, 558: 1838}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1835, 1459, 1460, 1458, 506: 1836}, + {47: 1746, 59: 1759, 62: 1745, 65: 1757, 1755, 1750, 220: 1758, 287: 1748, 344: 1754, 352: 1749, 359: 1747, 365: 1744, 370: 1740, 435: 1739, 448: 1752, 454: 1743, 486: 1741, 490: 1753, 497: 1751, 553: 1737, 1736, 561: 1742, 1756, 645: 1817}, + {47: 1746, 59: 1759, 62: 1745, 65: 1757, 1755, 1750, 220: 1758, 287: 1748, 344: 1754, 352: 1749, 359: 1747, 365: 1744, 370: 1740, 435: 1739, 448: 1752, 454: 1743, 486: 1741, 490: 1753, 497: 1751, 553: 1737, 1736, 561: 1742, 1756, 645: 1738}, + {94: 1676, 112: 1675}, + // 90 + {25: 1455, 442: 1456, 666: 1674}, + {25: 1455, 442: 1456, 666: 1454}, + {10: 1450, 64: 1451, 240: 1448, 432: 1449}, + {10: 3, 64: 3, 161: 1447, 240: 3}, + {10: 2, 64: 2, 240: 2}, + // 95 + {1104, 1104, 1104, 1104, 6: 1104, 1104, 1104, 1104, 1104, 1104, 13: 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 48: 1104, 55: 1104, 73: 1104, 206: 1104, 1104, 210: 1104, 213: 1104, 218: 1104, 1104, 1104, 1104, 231: 1104, 236: 1104, 239: 1104, 347: 1104, 352: 1104, 1104, 1104, 1104, 1104, 360: 1104}, + {6, 6}, + {240: 1448, 432: 1453}, + {240: 1448, 432: 1452}, + {4, 4}, + // 100 + {5, 5}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 1664, 663: 1665, 783: 1663}, + {14, 14, 14, 14, 14, 14, 7: 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 22: 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, + {13, 13, 13, 13, 13, 13, 7: 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 22: 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, + {1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 352: 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010}, + // 105 + {1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 352: 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009}, + {1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 352: 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008}, + {1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 352: 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007}, + {1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 352: 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006}, + {1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 352: 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005}, + // 110 + {1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 352: 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004}, + {1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 352: 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003}, + {1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 352: 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002}, + {1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 352: 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001}, + {1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 352: 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000}, + // 115 + {999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 352: 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999}, + {998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 352: 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998}, + {997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 352: 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997, 997}, + {996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 352: 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, 996}, + {995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 352: 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995}, + // 120 + {994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 352: 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994}, + {993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 352: 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993}, + {992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 352: 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, 992}, + {991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 352: 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991}, + {990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 352: 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990}, + // 125 + {989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 352: 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989, 989}, + {988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 352: 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988, 988}, + {987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 352: 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987, 987}, + {986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 352: 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986}, + {985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 352: 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985}, + // 130 + {984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 352: 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984}, + {983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 352: 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983}, + {982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 352: 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982, 982}, + {981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 352: 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, 981}, + {980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 352: 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980}, + // 135 + {979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 352: 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979}, + {978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 352: 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978, 978}, + {977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 352: 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977}, + {976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 352: 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976, 976}, + {975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 352: 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975}, + // 140 + {974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 352: 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974}, + {973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 352: 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973}, + {972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 352: 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972}, + {971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 352: 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971}, + {970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 352: 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970}, + // 145 + {969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 352: 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969}, + {968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 352: 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968}, + {967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 352: 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967}, + {966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 352: 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966}, + {965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 352: 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965}, + // 150 + {964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 352: 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964}, + {963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 352: 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963}, + {962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 352: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962}, + {961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 352: 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961}, + {960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 352: 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960}, + // 155 + {959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 352: 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959}, + {958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 352: 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958}, + {957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 352: 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, 957}, + {956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 352: 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956, 956}, + {955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 352: 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955}, + // 160 + {954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 352: 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, 954}, + {953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 352: 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953}, + {952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 352: 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952}, + {951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 352: 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951, 951}, + {950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 352: 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950}, + // 165 + {949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 352: 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, 949}, + {948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 352: 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, 948}, + {947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 352: 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, 947}, + {946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 352: 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946}, + {945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 352: 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945, 945}, + // 170 + {944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 352: 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944}, + {943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 352: 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943}, + {942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 352: 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942}, + {941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 352: 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941, 941}, + {940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 352: 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940}, + // 175 + {939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 352: 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939}, + {938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 352: 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938}, + {937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 352: 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, 937}, + {936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 352: 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936}, + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 352: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935}, + // 180 + {934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 352: 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, 934}, + {933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 352: 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933}, + {932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 352: 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932}, + {931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 352: 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931}, + {930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 352: 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930}, + // 185 + {929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 352: 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929, 929}, + {928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 352: 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928}, + {927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 352: 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, 927}, + {926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 352: 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926}, + {925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 352: 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925}, + // 190 + {924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 352: 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924}, + {923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 352: 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923}, + {922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 352: 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, 922}, + {921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 352: 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921}, + {920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 352: 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920}, + // 195 + {919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 352: 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919}, + {918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 352: 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918}, + {917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 352: 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917}, + {916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 352: 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, 916}, + {915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 352: 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915}, + // 200 + {914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 352: 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914, 914}, + {913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 352: 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913}, + {912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 352: 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, 912}, + {911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 352: 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, 911}, + {910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 352: 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910}, + // 205 + {909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 352: 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, 909}, + {908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 352: 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, 908}, + {907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 352: 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907, 907}, + {906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 352: 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906}, + {905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 352: 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905, 905}, + // 210 + {904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 352: 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904}, + {903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 352: 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903}, + {902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 352: 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, 902}, + {901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 352: 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901}, + {900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 352: 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900}, + // 215 + {899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 352: 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, 899}, + {898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 352: 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898}, + {897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 352: 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, 897}, + {896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 352: 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896}, + {895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 352: 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895, 895}, + // 220 + {894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 352: 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, 894}, + {893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 352: 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893}, + {892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 352: 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892}, + {891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 352: 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, 891}, + {890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 352: 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890}, + // 225 + {889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 352: 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889, 889}, + {888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 352: 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888}, + {887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 352: 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 887}, + {886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 352: 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886, 886}, + {885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 352: 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885}, + // 230 + {884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 352: 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884, 884}, + {883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 352: 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883}, + {882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 352: 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882}, + {881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 352: 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881}, + {880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 352: 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880}, + // 235 + {879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 352: 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, 879}, + {878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 352: 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878}, + {877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 352: 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877}, + {876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 352: 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876}, + {875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 352: 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875}, + // 240 + {874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 352: 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, 874}, + {873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 352: 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873}, + {872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 352: 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, 872}, + {871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 352: 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, 871}, + {870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 352: 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870, 870}, + // 245 + {869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 352: 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869}, + {868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 352: 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868}, + {867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 352: 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, 867}, + {866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 352: 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, 866}, + {865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 352: 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, 865}, + // 250 + {864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 352: 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864}, + {863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 352: 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, 863}, + {862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 352: 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, 862}, + {861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 352: 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861}, + {860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 352: 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860, 860}, + // 255 + {859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 352: 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, 859}, + {858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 352: 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858, 858}, + {857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 352: 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857, 857}, + {856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 352: 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, 856}, + {855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 352: 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, 855}, + // 260 + {854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 352: 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, 854}, + {853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 352: 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853}, + {852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 352: 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852}, + {851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 352: 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, 851}, + {850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 352: 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, 850}, + // 265 + {849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 352: 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849}, + {848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 352: 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848}, + {847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 352: 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847, 847}, + {846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 352: 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, 846}, + {845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 352: 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, 845}, + // 270 + {844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 352: 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, 844}, + {843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 352: 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, 843}, + {842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 352: 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, 842}, + {841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 352: 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, 841}, + {840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 352: 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, 840}, + // 275 + {839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 352: 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, 839}, + {838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 352: 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838, 838}, + {837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 352: 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837}, + {836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 352: 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836}, + {835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 352: 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835}, + // 280 + {834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 352: 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, 834}, + {833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 352: 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, 833}, + {832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 352: 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832, 832}, + {831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 352: 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831, 831}, + {830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 352: 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830}, + // 285 + {829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 352: 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, 829}, + {828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 352: 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, 828}, + {827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 352: 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827, 827}, + {826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 352: 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826, 826}, + {825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 352: 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825, 825}, + // 290 + {824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 352: 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, 824}, + {823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 352: 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823}, + {822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 352: 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822}, + {821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 352: 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821}, + {820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 352: 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, 820}, + // 295 + {819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 352: 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, 819}, + {818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 352: 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818, 818}, + {817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 352: 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, 817}, + {816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 352: 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, 816}, + {815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 352: 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, 815}, + // 300 + {814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 352: 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, 814}, + {813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 352: 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, 813}, + {812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 352: 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812, 812}, + {811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 352: 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811, 811}, + {810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 352: 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, 810}, + // 305 + {809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 352: 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809}, + {808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 352: 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808}, + {807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 352: 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, 807}, + {806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 352: 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806}, + {540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 210: 540, 540, 540, 540, 218: 540, 540, 540, 540, 540, 540, 540, 230: 540, 540, 233: 540, 540, 540, 540, 540, 540, 540, 241: 540, 540, 540, 540, 540, 247: 1672, 264: 540, 292: 540, 296: 540, 347: 540, 352: 540, 540, 540, 540, 540, 359: 540, 540, 363: 540, 540, 540, 540, 540, 540, 540, 540, 540, 377: 540, 380: 540, 383: 540, 405: 540}, + // 310 + {15, 15, 6: 1670}, + {369: 1667, 405: 1668, 740: 1666}, + {8, 8, 6: 8}, + {12, 12, 6: 12}, + {11, 11, 6: 11, 53: 1669}, + // 315 + {9, 9, 6: 9}, + {10, 10, 6: 10}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 1664, 663: 1671}, + {7, 7, 6: 7}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1673, 1459, 1460, 1458}, + // 320 + {539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 210: 539, 539, 539, 539, 218: 539, 539, 539, 539, 539, 539, 539, 230: 539, 539, 233: 539, 539, 539, 539, 539, 539, 539, 241: 539, 539, 539, 539, 539, 264: 539, 292: 539, 296: 539, 347: 539, 352: 539, 539, 539, 539, 539, 359: 539, 539, 363: 539, 539, 539, 539, 539, 539, 539, 539, 539, 377: 539, 380: 539, 383: 539, 405: 539}, + {16, 16}, + {53: 1679, 547: 34, 738: 1678}, + {208: 1677}, + {1, 1}, + // 325 + {547: 1680}, + {547: 33}, + {208: 1681}, + {463: 1682}, + {442: 1683}, + // 330 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 1684}, + {36, 36, 27: 36, 29: 36, 206: 36, 347: 36, 353: 1686, 360: 36, 689: 1685}, + {32, 32, 27: 1696, 29: 1695, 206: 32, 347: 32, 360: 32, 713: 1693, 1694}, + {234: 1687}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 248: 1689, 348: 1691, 1459, 1460, 1458, 434: 1688, 469: 1692}, + // 335 + {399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, 13: 399, 399, 399, 399, 399, 399, 399, 399, 399, 27: 399, 29: 399, 206: 399, 399, 209: 399, 399, 213: 399, 217: 399, 236: 399, 239: 399, 248: 399, 291: 399, 341: 399, 399, 399, 399, 399, 347: 399, 352: 399, 399, 399, 399, 399, 360: 399}, + {398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 13: 398, 398, 398, 398, 398, 398, 398, 398, 398, 27: 398, 29: 398, 206: 398, 398, 209: 398, 398, 213: 398, 217: 398, 236: 398, 239: 398, 248: 398, 291: 398, 341: 398, 398, 398, 398, 398, 347: 398, 352: 398, 398, 398, 398, 398, 360: 398}, + {110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 241: 110, 110, 110, 110, 110, 110, 248: 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 283: 110, 110, 110, 289: 110, 291: 110, 341: 110, 110, 110, 110, 110, 110, 110, 352: 110, 110, 110, 110, 110, 360: 110, 110, 110, 379: 110}, + {109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 241: 109, 109, 109, 109, 109, 109, 248: 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 283: 109, 109, 109, 289: 109, 291: 109, 341: 109, 109, 109, 109, 109, 109, 109, 352: 109, 109, 109, 109, 109, 360: 109, 109, 109, 379: 109}, + {35, 35, 27: 35, 29: 35, 206: 35, 347: 35, 360: 35}, + // 340 + {22, 22, 206: 22, 347: 22, 360: 1710, 736: 1709}, + {28, 28, 206: 28, 347: 28, 360: 28, 479: 28, 501: 1698, 507: 28, 715: 1697}, + {30, 30, 206: 30, 347: 30, 360: 30, 479: 30, 501: 30, 507: 30}, + {29, 29, 206: 29, 347: 29, 360: 29, 479: 29, 501: 29, 507: 29}, + {26, 26, 206: 26, 347: 26, 360: 26, 479: 26, 507: 1702, 709: 1701}, + // 345 + {362: 1699}, + {208: 1700}, + {27, 27, 206: 27, 347: 27, 360: 27, 479: 27, 507: 27}, + {24, 24, 206: 24, 347: 24, 360: 24, 479: 1706, 710: 1705}, + {362: 1703}, + // 350 + {208: 1704}, + {25, 25, 206: 25, 347: 25, 360: 25, 479: 25}, + {31, 31, 206: 31, 347: 31, 360: 31}, + {362: 1707}, + {208: 1708}, + // 355 + {23, 23, 206: 23, 347: 23, 360: 23}, + {38, 38, 206: 38, 347: 1720, 725: 1719}, + {20, 20, 206: 20, 347: 20, 501: 20, 774: 1711, 1712}, + {18, 18, 206: 18, 347: 18, 501: 1716, 737: 1715}, + {362: 1713}, + // 360 + {208: 1714}, + {19, 19, 206: 19, 347: 19, 501: 19}, + {21, 21, 206: 21, 347: 21}, + {362: 1717}, + {208: 1718}, + // 365 + {17, 17, 206: 17, 347: 17}, + {1269, 1269, 206: 1723, 692: 1724}, + {240: 1448, 432: 1721}, + {360: 1722}, + {37, 37, 206: 37}, + // 370 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 1271, 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 1726, 470: 1727, 574: 1728}, + {39, 39}, + {1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 232: 1276, 234: 1276, 247: 1732, 1276, 1276, 1276, 290: 1276, 365: 1276, 1276, 1276, 374: 1276, 1276, 1276, 378: 1276, 381: 1276, 1276, 384: 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276}, + {6: 1273, 21: 1273}, + {6: 1730, 21: 1270}, + // 375 + {21: 1729}, + {1268, 1268}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 1731}, + {6: 1272, 21: 1272}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1733, 1459, 1460, 1458}, + // 380 + {1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 232: 1275, 234: 1275, 247: 1734, 1275, 1275, 1275, 290: 1275, 365: 1275, 1275, 1275, 374: 1275, 1275, 1275, 378: 1275, 381: 1275, 1275, 384: 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1735, 1459, 1460, 1458}, + {1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 232: 1274, 234: 1274, 248: 1274, 1274, 1274, 290: 1274, 365: 1274, 1274, 1274, 374: 1274, 1274, 1274, 378: 1274, 381: 1274, 1274, 384: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274}, + {6: 80, 206: 1814, 80}, + {6: 78, 207: 78}, + // 385 + {6: 1773, 207: 1774}, + {6: 76, 45: 1772, 206: 76, 76}, + {6: 74, 92: 1771, 206: 74, 74}, + {6: 73, 22: 1768, 57: 1766, 92: 1769, 157: 1767, 206: 73, 73}, + {6: 71, 206: 71, 71}, + // 390 + {6: 70, 206: 70, 70}, + {6: 69, 206: 69, 69}, + {6: 68, 206: 68, 68}, + {6: 67, 206: 67, 67}, + {6: 66, 206: 66, 66}, + // 395 + {6: 65, 206: 65, 65}, + {6: 64, 206: 64, 64}, + {6: 63, 206: 63, 63}, + {22: 1765, 584: 1764}, + {6: 61, 206: 61, 61}, + // 400 + {525: 1763}, + {6: 59, 206: 59, 59}, + {108: 1762, 150: 1761}, + {6: 56, 206: 56, 56}, + {6: 55, 206: 55, 55}, + // 405 + {25: 1760}, + {6: 48, 206: 48, 48}, + {6: 53, 206: 53, 53}, + {6: 58, 206: 58, 58}, + {6: 57, 206: 57, 57}, + // 410 + {6: 60, 206: 60, 60}, + {6: 62, 206: 62, 62}, + {6: 51, 206: 51, 51}, + {6: 72, 206: 72, 72}, + {25: 1770}, + // 415 + {6: 52, 206: 52, 52}, + {6: 50, 206: 50, 50}, + {6: 54, 206: 54, 54}, + {6: 49, 206: 49, 49}, + {6: 75, 206: 75, 75}, + // 420 + {47: 1746, 59: 1759, 62: 1745, 65: 1757, 1755, 1750, 220: 1758, 287: 1748, 344: 1754, 352: 1749, 359: 1747, 365: 1744, 370: 1740, 435: 1739, 448: 1752, 454: 1743, 486: 1741, 490: 1753, 497: 1751, 553: 1813, 1736, 561: 1742, 1756}, + {2: 47, 47, 47, 47, 7: 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 22: 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 246: 47, 442: 1775, 630: 1776}, + {2: 46, 46, 46, 46, 7: 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 22: 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 246: 46}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 246: 1777, 348: 1778, 1459, 1460, 1458, 646: 1779}, + {230: 45, 247: 1811, 368: 45}, + // 425 + {230: 41, 247: 1808, 368: 41}, + {230: 1780}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 282: 1782, 348: 1691, 1459, 1460, 1458, 434: 1781, 459: 1783, 518: 1784, 531: 1785}, + {390, 390, 6: 390, 22: 390, 30: 390, 218: 390, 232: 390, 289: 1806, 361: 390, 379: 1805}, + {664, 664, 6: 664, 22: 664, 30: 664, 206: 1802, 218: 664, 232: 664, 361: 664, 636: 1803}, + // 430 + {94, 94, 6: 94, 30: 1789, 218: 94, 683: 1788}, + {96, 96, 6: 96, 218: 96}, + {40, 40, 6: 1786}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 282: 1782, 348: 1691, 1459, 1460, 1458, 434: 1781, 459: 1783, 518: 1787}, + {95, 95, 6: 95, 218: 95}, + // 435 + {97, 97, 6: 97, 218: 97}, + {218: 1791, 362: 1790}, + {11: 1800, 208: 1797, 520: 1799}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 348: 1691, 1459, 1460, 1458, 434: 1792}, + {92, 92, 6: 92, 210: 1794, 218: 92, 362: 1793}, + // 440 + {208: 1797, 520: 1798}, + {208: 1796, 611: 1795}, + {90, 90, 6: 90, 218: 90}, + {88, 88, 6: 88, 218: 88}, + {382, 382, 6: 382, 21: 382, 218: 382}, + // 445 + {91, 91, 6: 91, 218: 91}, + {93, 93, 6: 93, 218: 93}, + {208: 1796, 611: 1801}, + {89, 89, 6: 89, 218: 89}, + {21: 1804}, + // 450 + {387, 387, 6: 387, 22: 387, 30: 387, 218: 387, 232: 387, 361: 387}, + {663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 207: 663, 663, 663, 663, 663, 663, 214: 663, 663, 663, 218: 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 237: 663, 663, 663, 241: 663, 663, 663, 663, 663, 663, 249: 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 283: 663, 663, 663, 346: 663, 361: 663}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 348: 1691, 1459, 1460, 1458, 434: 1807}, + {388, 388, 6: 388, 22: 388, 30: 388, 218: 388, 232: 388, 361: 388}, + {389, 389, 6: 389, 22: 389, 30: 389, 218: 389, 232: 389, 361: 389}, + // 455 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 246: 1809, 348: 1810, 1459, 1460, 1458}, + {230: 43, 368: 43}, + {230: 42, 368: 42}, + {246: 1812}, + {230: 44, 368: 44}, + // 460 + {6: 77, 207: 77}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 1726, 470: 1815}, + {6: 1730, 21: 1816}, + {6: 79, 207: 79}, + {6: 1773, 207: 1818}, + // 465 + {2: 47, 47, 47, 47, 7: 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 22: 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 246: 47, 442: 1775, 630: 1819}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 246: 1777, 348: 1778, 1459, 1460, 1458, 646: 1820}, + {368: 1821}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 282: 1782, 348: 1691, 1459, 1460, 1458, 434: 1781, 459: 1783, 518: 1784, 531: 1822}, + {86, 86, 6: 1786, 218: 1824, 808: 1823}, + // 470 + {87, 87}, + {130: 1828, 1826, 1827, 1829, 490: 1825}, + {525: 1834}, + {240: 1448, 432: 1833}, + {240: 1448, 432: 1832}, + // 475 + {240: 1448, 432: 1831}, + {240: 1448, 432: 1830}, + {81, 81}, + {82, 82}, + {83, 83}, + // 480 + {84, 84}, + {85, 85}, + {1204, 1204, 7: 1204, 213: 1204, 224: 1204, 239: 1204, 245: 1204, 353: 1204}, + {106, 106}, + {31: 2533, 2532, 2531, 2530, 664: 2529, 785: 2528}, + // 485 + {2: 544, 544, 544, 544, 7: 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 22: 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 288: 544, 347: 544, 450: 1841, 1840, 1839, 515: 1842}, + {2: 543, 543, 543, 543, 7: 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 22: 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 208: 543, 543, 211: 543, 543, 543, 543, 543, 543, 543, 230: 543, 233: 543, 236: 543, 240: 543, 246: 543, 543, 543, 282: 543, 286: 543, 543, 543, 543, 543, 292: 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 347: 543, 447: 543, 463: 543}, + {2: 542, 542, 542, 542, 7: 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 22: 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 208: 542, 542, 211: 542, 542, 542, 542, 542, 542, 542, 230: 542, 233: 542, 236: 542, 240: 542, 246: 542, 542, 542, 282: 542, 286: 542, 542, 542, 542, 542, 292: 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 347: 542, 447: 542, 463: 542}, + {2: 541, 541, 541, 541, 7: 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 22: 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 208: 541, 541, 211: 541, 541, 541, 541, 541, 541, 541, 230: 541, 233: 541, 236: 541, 240: 541, 246: 541, 541, 541, 282: 541, 286: 541, 541, 541, 541, 541, 292: 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 347: 541, 447: 541, 463: 541}, + {2: 1023, 1023, 1023, 1023, 7: 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 22: 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 288: 1023, 347: 1843, 521: 1844}, + // 490 + {2: 1022, 1022, 1022, 1022, 7: 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 22: 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 230: 1022, 288: 1022, 442: 1022, 463: 1022}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1852, 288: 1848, 348: 1662, 1459, 1460, 1458, 429: 1851, 456: 1850, 1849, 1847, 480: 1845, 500: 1846}, + {515, 515, 6: 515, 21: 515, 207: 515, 218: 515, 515, 515, 515, 515, 515, 515, 234: 515, 515, 238: 515}, + {6: 2473, 234: 2525}, + {6: 513, 211: 1871, 1872, 233: 1870, 2507, 237: 1873, 241: 1874, 1875, 1869, 465: 1868, 471: 1867}, + // 495 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2504, 1459, 1460, 1458}, + {511, 511, 6: 511, 21: 511, 207: 511, 211: 511, 511, 218: 511, 511, 511, 511, 511, 511, 511, 231: 511, 233: 511, 511, 511, 237: 511, 511, 241: 511, 511, 511, 511}, + {510, 510, 6: 510, 21: 510, 207: 510, 211: 510, 510, 218: 510, 510, 510, 510, 510, 510, 510, 231: 510, 233: 510, 510, 510, 237: 510, 510, 241: 510, 510, 510, 510}, + {505, 505, 1540, 1463, 1464, 1496, 505, 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 505, 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 207: 505, 210: 1861, 505, 505, 218: 505, 505, 505, 505, 505, 505, 505, 231: 505, 233: 505, 505, 505, 237: 505, 505, 241: 505, 505, 505, 505, 347: 505, 1860, 1459, 1460, 1458, 363: 505, 505, 529: 2477, 780: 2476}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1855, 288: 1848, 348: 1662, 1459, 1460, 1458, 1379, 429: 1851, 437: 1856, 1380, 1381, 1382, 444: 1385, 1384, 1857, 456: 1850, 1849, 1854, 480: 1845, 500: 1853}, + // 500 + {6: 2473, 21: 2474}, + {513, 513, 6: 513, 21: 513, 207: 513, 211: 1871, 1872, 218: 513, 513, 513, 513, 513, 513, 513, 233: 1870, 513, 513, 237: 1873, 513, 241: 1874, 1875, 1869, 465: 1868, 471: 1867}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1855, 288: 1848, 348: 1662, 1459, 1460, 1458, 1379, 429: 1851, 437: 1865, 1380, 1381, 1382, 444: 1385, 1384, 1857, 456: 1850, 1849, 1854, 480: 1845, 500: 1853}, + {21: 1863, 219: 430}, + {21: 1858}, + // 505 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 210: 1861, 348: 1860, 1459, 1460, 1458, 529: 1859}, + {507, 507, 6: 507, 21: 507, 207: 507, 211: 507, 507, 218: 507, 507, 507, 507, 507, 507, 507, 231: 507, 233: 507, 507, 507, 237: 507, 507, 241: 507, 507, 507, 507}, + {503, 503, 6: 503, 21: 503, 207: 503, 211: 503, 503, 218: 503, 503, 503, 503, 503, 503, 503, 231: 503, 233: 503, 503, 503, 237: 503, 503, 241: 503, 503, 503, 503, 347: 503, 363: 503, 503}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1862, 1459, 1460, 1458}, + {502, 502, 6: 502, 21: 502, 207: 502, 211: 502, 502, 218: 502, 502, 502, 502, 502, 502, 502, 231: 502, 233: 502, 502, 502, 237: 502, 502, 241: 502, 502, 502, 502, 347: 502, 363: 502, 502}, + // 510 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 210: 1861, 348: 1860, 1459, 1460, 1458, 529: 1864}, + {508, 508, 6: 508, 21: 508, 207: 508, 211: 508, 508, 218: 508, 508, 508, 508, 508, 508, 508, 231: 508, 233: 508, 508, 508, 237: 508, 508, 241: 508, 508, 508, 508}, + {21: 1866, 219: 430}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 210: 1861, 219: 429, 348: 1860, 1459, 1460, 1458, 529: 1864}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1852, 348: 1662, 1459, 1460, 1458, 429: 1851, 456: 1850, 1849, 2466}, + // 515 + {237: 475, 526: 2453, 638: 2457}, + {211: 1871, 1872, 237: 2450, 465: 2451}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1852, 348: 1662, 1459, 1460, 1458, 429: 1851, 456: 1850, 1849, 1878}, + {237: 477, 526: 477}, + {237: 476, 526: 476}, + // 520 + {2: 473, 473, 473, 473, 7: 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 22: 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473}, + {237: 1877}, + {237: 1876}, + {2: 471, 471, 471, 471, 7: 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 22: 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471}, + {2: 472, 472, 472, 472, 7: 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 22: 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472}, + // 525 + {479, 479, 6: 479, 21: 479, 207: 1879, 211: 479, 479, 218: 479, 479, 479, 479, 479, 479, 479, 231: 479, 233: 479, 479, 479, 237: 479, 479, 241: 479, 479, 479, 479, 465: 1868, 471: 1867}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 1881}, + {391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 207: 391, 391, 391, 391, 391, 391, 214: 391, 391, 391, 218: 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 237: 391, 391, 391, 241: 391, 391, 391, 391, 391, 391, 249: 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 283: 391, 391, 391, 346: 391, 532: 2448}, + {478, 478, 6: 478, 21: 478, 207: 478, 211: 478, 478, 218: 478, 478, 478, 478, 478, 478, 478, 2014, 2012, 2013, 2011, 2009, 231: 478, 233: 478, 478, 478, 237: 478, 478, 241: 478, 478, 478, 478, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2447}, + // 530 + {1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 207: 1095, 1095, 210: 1095, 1095, 1095, 218: 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 2430, 1095, 1095, 1095, 237: 1095, 1095, 241: 1095, 1095, 1095, 1095, 249: 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 265: 1095, 2427, 2425, 2424, 2432, 2426, 2428, 2429, 2431, 696: 2423, 730: 2422}, + {1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 207: 1075, 1075, 210: 1075, 1075, 1075, 218: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 237: 1075, 1075, 241: 1075, 1075, 1075, 1075, 249: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 265: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075}, + {1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 207: 1048, 1048, 2396, 1048, 1048, 1048, 214: 2117, 2118, 2123, 218: 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 237: 1048, 1048, 241: 1048, 1048, 1048, 1048, 2398, 2119, 249: 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 2397, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 2121, 2114, 2120, 2124, 2113, 2122, 2115, 2116, 283: 2395, 2404, 2405, 648: 2399, 684: 2401, 727: 2400, 734: 2402, 764: 2403}, + {1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 2392, 1010, 1010, 1010, 1010, 1010, 1010, 214: 1010, 1010, 1010, 218: 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 237: 1010, 1010, 1010, 241: 1010, 1010, 1010, 1010, 1010, 1010, 1010, 249: 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 283: 1010, 1010, 1010, 346: 1010, 357: 1010, 1010}, + {1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 693, 1005, 1005, 1005, 1005, 1005, 1005, 214: 1005, 1005, 1005, 218: 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 237: 1005, 1005, 1005, 241: 1005, 1005, 1005, 1005, 1005, 1005, 1005, 249: 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 283: 1005, 1005, 1005, 346: 1005, 357: 1005, 1005}, + // 535 + {1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 2388, 1001, 1001, 1001, 1001, 1001, 1001, 214: 1001, 1001, 1001, 218: 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 237: 1001, 1001, 1001, 241: 1001, 1001, 1001, 1001, 1001, 1001, 1001, 249: 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 283: 1001, 1001, 1001, 346: 1001, 357: 1001, 1001}, + {993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 692, 993, 993, 993, 993, 993, 993, 214: 993, 993, 993, 218: 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 237: 993, 993, 993, 241: 993, 993, 993, 993, 993, 993, 993, 249: 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, 283: 993, 993, 993, 346: 993, 357: 993, 993}, + {986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 689, 986, 2387, 986, 986, 986, 986, 214: 986, 986, 986, 218: 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 237: 986, 986, 986, 241: 986, 986, 986, 986, 986, 986, 986, 249: 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 283: 986, 986, 986, 346: 986, 357: 986, 986}, + {984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 687, 984, 984, 984, 984, 984, 984, 214: 984, 984, 984, 218: 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 237: 984, 984, 984, 241: 984, 984, 984, 984, 984, 984, 984, 249: 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, 283: 984, 984, 984, 346: 984, 357: 984, 984}, + {968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 683, 968, 968, 968, 968, 968, 968, 214: 968, 968, 968, 218: 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 237: 968, 968, 968, 241: 968, 968, 968, 968, 968, 968, 968, 249: 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 283: 968, 968, 968, 346: 968, 357: 968, 968}, + // 540 + {964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 686, 964, 964, 964, 964, 964, 964, 214: 964, 964, 964, 218: 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 237: 964, 964, 964, 241: 964, 964, 964, 964, 964, 964, 964, 249: 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 283: 964, 964, 964, 346: 964, 357: 964, 964}, + {959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 2384, 959, 959, 959, 959, 959, 959, 214: 959, 959, 959, 218: 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 237: 959, 959, 959, 241: 959, 959, 959, 959, 959, 959, 959, 249: 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 283: 959, 959, 959, 346: 959, 357: 959, 959}, + {943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 670, 943, 2383, 943, 943, 943, 943, 214: 943, 943, 943, 218: 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 237: 943, 943, 943, 241: 943, 943, 943, 943, 943, 943, 943, 249: 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, 283: 943, 943, 943, 346: 943, 357: 943, 943}, + {942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 669, 942, 2382, 942, 942, 942, 942, 214: 942, 942, 942, 218: 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 237: 942, 942, 942, 241: 942, 942, 942, 942, 942, 942, 942, 249: 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, 283: 942, 942, 942, 346: 942, 357: 942, 942}, + {939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 668, 939, 939, 939, 939, 939, 939, 214: 939, 939, 939, 218: 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 237: 939, 939, 939, 241: 939, 939, 939, 939, 939, 939, 939, 249: 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 283: 939, 939, 939, 346: 939, 357: 939, 939}, + // 545 + {935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 665, 935, 935, 935, 935, 935, 935, 214: 935, 935, 935, 218: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 237: 935, 935, 935, 241: 935, 935, 935, 935, 935, 935, 935, 249: 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, 283: 935, 935, 935, 346: 935, 357: 935, 935}, + {933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 666, 933, 933, 933, 933, 933, 933, 214: 933, 933, 933, 218: 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 237: 933, 933, 933, 241: 933, 933, 933, 933, 933, 933, 933, 249: 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 283: 933, 933, 933, 346: 933, 357: 933, 933}, + {930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 667, 930, 930, 930, 930, 930, 930, 214: 930, 930, 930, 218: 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 237: 930, 930, 930, 241: 930, 930, 930, 930, 930, 930, 930, 249: 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, 283: 930, 930, 930, 346: 930, 357: 930, 930}, + {928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 690, 928, 928, 928, 928, 928, 928, 214: 928, 928, 928, 218: 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 237: 928, 928, 928, 241: 928, 928, 928, 928, 928, 928, 928, 249: 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 283: 928, 928, 928, 346: 928, 357: 928, 928}, + {917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 2377, 917, 917, 917, 917, 917, 917, 214: 917, 917, 917, 218: 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 237: 917, 917, 917, 241: 917, 917, 917, 917, 917, 917, 917, 249: 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 283: 917, 917, 917, 346: 917, 357: 917, 917}, + // 550 + {915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 677, 915, 915, 915, 915, 915, 915, 214: 915, 915, 915, 218: 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 237: 915, 915, 915, 241: 915, 915, 915, 915, 915, 915, 915, 249: 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 283: 915, 915, 915, 346: 915, 357: 915, 915}, + {896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 674, 896, 896, 896, 896, 896, 896, 214: 896, 896, 896, 218: 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 237: 896, 896, 896, 241: 896, 896, 896, 896, 896, 896, 896, 249: 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 896, 283: 896, 896, 896, 346: 896, 357: 896, 896}, + {883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 672, 883, 883, 883, 883, 883, 883, 214: 883, 883, 883, 218: 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 237: 883, 883, 883, 241: 883, 883, 883, 883, 883, 883, 883, 249: 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, 283: 883, 883, 883, 346: 883, 357: 883, 883}, + {882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 691, 882, 882, 882, 882, 882, 882, 214: 882, 882, 882, 218: 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 237: 882, 882, 882, 241: 882, 882, 882, 882, 882, 882, 882, 249: 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, 283: 882, 882, 882, 346: 882, 357: 882, 882}, + {881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 679, 881, 881, 881, 881, 881, 881, 214: 881, 881, 881, 218: 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 237: 881, 881, 881, 241: 881, 881, 881, 881, 881, 881, 881, 249: 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, 283: 881, 881, 881, 346: 881, 357: 881, 881}, + // 555 + {878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 681, 878, 878, 878, 878, 878, 878, 214: 878, 878, 878, 218: 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 237: 878, 878, 878, 241: 878, 878, 878, 878, 878, 878, 878, 249: 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, 283: 878, 878, 878, 346: 878, 357: 878, 878}, + {877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 680, 877, 877, 877, 877, 877, 877, 214: 877, 877, 877, 218: 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 237: 877, 877, 877, 241: 877, 877, 877, 877, 877, 877, 877, 249: 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, 283: 877, 877, 877, 346: 877, 357: 877, 877}, + {873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 671, 873, 873, 873, 873, 873, 873, 214: 873, 873, 873, 218: 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 237: 873, 873, 873, 241: 873, 873, 873, 873, 873, 873, 873, 249: 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 873, 283: 873, 873, 873, 346: 873, 357: 873, 873}, + {822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 2368, 822, 822, 822, 822, 822, 822, 214: 822, 822, 822, 218: 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 237: 822, 822, 822, 241: 822, 822, 822, 822, 822, 822, 822, 249: 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 822, 283: 822, 822, 822, 346: 822, 357: 822, 822}, + {809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 2361, 809, 809, 809, 809, 809, 809, 214: 809, 809, 809, 218: 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 237: 809, 809, 809, 241: 809, 809, 809, 809, 809, 809, 809, 249: 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 283: 809, 809, 809, 346: 809, 357: 809, 809}, + // 560 + {808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 2345, 808, 808, 808, 808, 808, 808, 214: 808, 808, 808, 218: 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 237: 808, 808, 808, 241: 808, 808, 808, 808, 808, 808, 808, 249: 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 808, 283: 808, 808, 808, 346: 808, 357: 808, 808}, + {772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 207: 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 237: 772, 772, 772, 241: 772, 772, 772, 772, 772, 772, 249: 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 283: 772, 772, 772, 291: 772, 341: 772, 772, 772, 772, 772, 772}, + {771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 207: 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 237: 771, 771, 771, 241: 771, 771, 771, 771, 771, 771, 249: 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 283: 771, 771, 771, 291: 771, 341: 771, 771, 771, 771, 771, 771}, + {770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 207: 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 237: 770, 770, 770, 241: 770, 770, 770, 770, 770, 770, 249: 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 283: 770, 770, 770, 291: 770, 341: 770, 770, 770, 770, 770, 770}, + {769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 207: 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 237: 769, 769, 769, 241: 769, 769, 769, 769, 769, 769, 249: 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 283: 769, 769, 769, 291: 769, 341: 769, 769, 769, 769, 769, 769}, + // 565 + {768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 207: 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 237: 768, 768, 768, 241: 768, 768, 768, 768, 768, 768, 249: 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 283: 768, 768, 768, 291: 768, 341: 768, 768, 768, 768, 768, 768}, + {767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 207: 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 237: 767, 767, 767, 241: 767, 767, 767, 767, 767, 767, 249: 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 283: 767, 767, 767, 291: 767, 341: 767, 767, 767, 767, 767, 767}, + {766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 207: 766, 2344, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 237: 766, 766, 766, 241: 766, 766, 766, 766, 766, 766, 249: 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 766, 283: 766, 766, 766, 291: 766, 341: 766, 766, 766, 766, 766, 766}, + {208: 2343}, + {764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 207: 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 237: 764, 764, 764, 241: 764, 764, 764, 764, 764, 764, 249: 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 283: 764, 764, 764, 291: 764, 341: 764, 764, 764, 764, 764, 764}, + // 570 + {763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 207: 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 237: 763, 763, 763, 241: 763, 763, 763, 763, 763, 763, 249: 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 763, 283: 763, 763, 763, 291: 763, 341: 763, 763, 763, 763, 763, 763}, + {762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 207: 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 237: 762, 762, 762, 241: 762, 762, 762, 762, 762, 762, 249: 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 283: 762, 762, 762, 291: 762, 341: 762, 762, 762, 762, 762, 762}, + {737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 207: 737, 737, 737, 737, 737, 737, 214: 737, 737, 737, 218: 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 237: 737, 737, 2305, 241: 737, 737, 737, 737, 737, 737, 249: 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 283: 737, 737, 737, 346: 2306}, + {736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 207: 736, 736, 736, 736, 736, 736, 214: 736, 736, 736, 218: 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 237: 736, 736, 736, 241: 736, 736, 736, 736, 736, 736, 2339, 249: 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 283: 736, 736, 736, 346: 736, 357: 736, 736}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2336, 1459, 1460, 1458}, + // 575 + {732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 207: 732, 732, 732, 732, 732, 732, 214: 732, 732, 732, 218: 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 237: 732, 732, 732, 241: 732, 732, 732, 732, 732, 732, 249: 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, 283: 732, 732, 732, 346: 732, 357: 2332, 2333}, + {731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 207: 731, 731, 731, 731, 731, 731, 214: 731, 731, 731, 218: 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 237: 731, 731, 731, 241: 731, 731, 731, 731, 731, 731, 249: 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 283: 731, 731, 731, 346: 731}, + {730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 207: 730, 730, 730, 730, 730, 730, 214: 730, 730, 730, 218: 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 237: 730, 730, 730, 241: 730, 730, 730, 730, 730, 730, 249: 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, 283: 730, 730, 730, 346: 730}, + {729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 207: 729, 729, 729, 729, 729, 729, 214: 729, 729, 729, 218: 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 237: 729, 729, 729, 241: 729, 729, 729, 729, 729, 729, 249: 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, 283: 729, 729, 729, 346: 729}, + {727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 207: 727, 727, 727, 727, 727, 727, 214: 727, 727, 727, 218: 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 237: 727, 727, 727, 241: 727, 727, 727, 727, 727, 727, 249: 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 727, 283: 727, 727, 727, 346: 727}, + // 580 + {726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 207: 726, 726, 726, 726, 726, 726, 214: 726, 726, 726, 218: 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 237: 726, 726, 726, 241: 726, 726, 726, 726, 726, 726, 249: 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 283: 726, 726, 726, 346: 726}, + {725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 207: 725, 725, 725, 725, 725, 725, 214: 725, 725, 725, 218: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 237: 725, 725, 725, 241: 725, 725, 725, 725, 725, 725, 249: 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, 283: 725, 725, 725, 346: 725}, + {724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 207: 724, 724, 724, 724, 724, 724, 214: 724, 724, 724, 218: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 237: 724, 724, 724, 241: 724, 724, 724, 724, 724, 724, 249: 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, 283: 724, 724, 724, 346: 724}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 2331, 1935, 1996, 1934}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 2330, 1935, 1996, 1934}, + // 585 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 2329, 1935, 1996, 1934}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 2328, 1935, 1996, 1934}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 2327, 1935, 1996, 1934}, + {717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 207: 717, 717, 717, 717, 717, 717, 214: 717, 717, 717, 218: 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 237: 717, 717, 717, 241: 717, 717, 717, 717, 717, 717, 249: 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 283: 717, 717, 717, 346: 717}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 2320, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 1379, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2318, 437: 2311, 1380, 1381, 1382, 444: 1385, 1384, 2312, 455: 2319}, + // 590 + {206: 2310, 406: 2309}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 2304, 1935, 1996, 1934}, + {206: 2299}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 251: 560, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2286, 711: 2287}, + {206: 2236}, + // 595 + {206: 2233}, + {206: 2230}, + {206: 688}, + {206: 685}, + {206: 684}, + // 600 + {206: 682}, + {206: 678}, + {206: 676}, + {206: 675}, + {206: 673}, + // 605 + {662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 214: 662, 662, 662, 218: 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 237: 662, 662, 662, 241: 662, 662, 662, 662, 662, 662, 249: 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 283: 662, 662, 662, 346: 662}, + {661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 214: 661, 661, 661, 218: 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 237: 661, 661, 661, 241: 661, 661, 661, 661, 661, 661, 249: 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 283: 661, 661, 661, 346: 661}, + {660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 214: 660, 660, 660, 218: 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 237: 660, 660, 660, 241: 660, 660, 660, 660, 660, 660, 249: 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 283: 660, 660, 660, 346: 660}, + {659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 214: 659, 659, 659, 218: 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 237: 659, 659, 659, 241: 659, 659, 659, 659, 659, 659, 249: 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 283: 659, 659, 659, 346: 659}, + {658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 214: 658, 658, 658, 218: 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 237: 658, 658, 658, 241: 658, 658, 658, 658, 658, 658, 249: 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 283: 658, 658, 658, 346: 658}, + // 610 + {657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 214: 657, 657, 657, 218: 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 237: 657, 657, 657, 241: 657, 657, 657, 657, 657, 657, 249: 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 283: 657, 657, 657, 346: 657}, + {656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 214: 656, 656, 656, 218: 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 237: 656, 656, 656, 241: 656, 656, 656, 656, 656, 656, 249: 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 283: 656, 656, 656, 346: 656}, + {655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 214: 655, 655, 655, 218: 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 237: 655, 655, 655, 241: 655, 655, 655, 655, 655, 655, 249: 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 283: 655, 655, 655, 346: 655}, + {654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 214: 654, 654, 654, 218: 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 237: 654, 654, 654, 241: 654, 654, 654, 654, 654, 654, 249: 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 283: 654, 654, 654, 346: 654}, + {206: 2227}, + // 615 + {206: 2224}, + {664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 1802, 664, 664, 664, 664, 664, 664, 214: 664, 664, 664, 218: 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 237: 664, 664, 664, 241: 664, 664, 664, 664, 664, 664, 249: 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 283: 664, 664, 664, 346: 664, 636: 2223}, + {206: 2221}, + {592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 2217, 592, 592, 592, 592, 592, 592, 214: 592, 592, 592, 218: 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 237: 592, 592, 592, 241: 592, 592, 592, 592, 592, 592, 249: 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 283: 592, 592, 592, 346: 592, 719: 2216}, + {206: 2210}, + // 620 + {206: 2206}, + {206: 2201}, + {631: 2198, 2195, 2197, 2196}, + {206: 2192}, + {206: 2187}, + // 625 + {206: 2178}, + {206: 2171}, + {206: 2166}, + {206: 2110}, + {206: 2096}, + // 630 + {206: 2079}, + {206: 617}, + {206: 616}, + {206: 615}, + {206: 614}, + // 635 + {206: 2073}, + {206: 2067}, + {206: 2061}, + {206: 2050}, + {206: 2028}, + // 640 + {206: 2024}, + {206: 2020}, + {206: 1999}, + {394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 207: 394, 394, 394, 394, 394, 394, 214: 394, 394, 394, 218: 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 237: 394, 394, 394, 241: 394, 394, 394, 394, 394, 394, 249: 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 283: 394, 394, 394, 346: 394}, + {393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 207: 393, 393, 393, 393, 393, 393, 214: 393, 393, 393, 218: 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 237: 393, 393, 393, 241: 393, 393, 393, 393, 393, 393, 249: 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, 283: 393, 393, 393, 346: 393}, + // 645 + {392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 207: 392, 392, 392, 392, 392, 392, 214: 392, 392, 392, 218: 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 237: 392, 392, 392, 241: 392, 392, 392, 392, 392, 392, 249: 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 283: 392, 392, 392, 346: 392}, + {2: 699, 699, 699, 699, 7: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 22: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 208: 699, 699, 211: 699, 699, 699, 699, 699, 699, 699, 236: 699, 240: 699, 247: 699, 699, 282: 699, 286: 699, 699, 699, 699, 699, 292: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 435: 2002, 460: 2000, 2001, 473: 2003, 478: 2004, 487: 2005, 503: 2006}, + {2: 703, 703, 703, 703, 7: 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 22: 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 208: 703, 703, 211: 703, 703, 703, 703, 703, 703, 703, 233: 703, 236: 703, 240: 703, 246: 703, 703, 703, 282: 703, 286: 703, 703, 703, 703, 703, 292: 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 352: 703, 435: 703, 447: 703, 450: 703, 703, 703}, + {2: 702, 702, 702, 702, 7: 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 22: 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 208: 702, 702, 211: 702, 702, 702, 702, 702, 702, 702, 233: 702, 236: 702, 240: 702, 246: 702, 702, 702, 282: 702, 286: 702, 702, 702, 702, 702, 292: 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, 352: 702, 435: 702, 447: 702, 450: 702, 702, 702}, + {2: 701, 701, 701, 701, 7: 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 22: 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 208: 701, 701, 211: 701, 701, 701, 701, 701, 701, 701, 233: 701, 236: 701, 240: 701, 246: 701, 701, 701, 282: 701, 286: 701, 701, 701, 701, 701, 292: 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, 352: 701, 447: 701, 450: 701, 701, 701}, + // 650 + {2: 700, 700, 700, 700, 7: 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 22: 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 208: 700, 700, 211: 700, 700, 700, 700, 700, 700, 700, 236: 700, 240: 700, 247: 700, 700, 282: 700, 286: 700, 700, 700, 700, 700, 292: 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 435: 2019}, + {2: 698, 698, 698, 698, 7: 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 22: 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 208: 698, 698, 211: 698, 698, 698, 698, 698, 698, 698, 233: 698, 236: 698, 240: 698, 246: 698, 698, 698, 282: 698, 286: 698, 698, 698, 698, 698, 292: 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, 447: 698, 450: 698, 698, 698}, + {2: 695, 695, 695, 695, 7: 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 22: 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 208: 695, 695, 211: 695, 695, 695, 695, 695, 695, 695, 236: 695, 240: 695, 247: 695, 695, 282: 695, 286: 695, 695, 695, 695, 695, 292: 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2007}, + {21: 2015, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + // 655 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2018}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2017}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2016}, + {2: 1092, 1092, 1092, 1092, 7: 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 22: 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 208: 1092, 1092, 211: 1092, 1092, 1092, 1092, 1092, 1092, 1092, 236: 1092, 240: 1092, 247: 1092, 1092, 282: 1092, 286: 1092, 1092, 1092, 1092, 1092, 292: 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092}, + {2: 1091, 1091, 1091, 1091, 7: 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 22: 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 208: 1091, 1091, 211: 1091, 1091, 1091, 1091, 1091, 1091, 1091, 236: 1091, 240: 1091, 247: 1091, 1091, 282: 1091, 286: 1091, 1091, 1091, 1091, 1091, 292: 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091}, + // 660 + {2: 1090, 1090, 1090, 1090, 7: 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 22: 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 208: 1090, 1090, 211: 1090, 1090, 1090, 1090, 1090, 1090, 1090, 236: 1090, 240: 1090, 247: 1090, 1090, 282: 1090, 286: 1090, 1090, 1090, 1090, 1090, 292: 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090}, + {2: 1089, 1089, 1089, 1089, 7: 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 22: 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 208: 1089, 1089, 211: 1089, 1089, 1089, 1089, 1089, 1089, 1089, 236: 1089, 240: 1089, 247: 1089, 1089, 282: 1089, 286: 1089, 1089, 1089, 1089, 1089, 292: 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089}, + {596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 207: 596, 596, 596, 596, 596, 596, 214: 596, 596, 596, 218: 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 237: 596, 596, 596, 241: 596, 596, 596, 596, 596, 596, 249: 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 283: 596, 596, 596, 346: 596}, + {1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 207: 1100, 1100, 210: 1100, 1100, 1100, 218: 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 233: 1100, 1100, 1100, 237: 1100, 1100, 241: 1100, 1100, 1100, 1100, 249: 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 265: 1100, 427: 2010, 2008}, + {1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 207: 1101, 1101, 210: 1101, 1101, 1101, 218: 1101, 1101, 1101, 1101, 1101, 1101, 1101, 2014, 1101, 2013, 1101, 1101, 1101, 1101, 233: 1101, 1101, 1101, 237: 1101, 1101, 241: 1101, 1101, 1101, 1101, 249: 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 265: 1101, 427: 2010, 2008}, + // 665 + {1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 207: 1102, 1102, 210: 1102, 1102, 1102, 218: 1102, 1102, 1102, 1102, 1102, 1102, 1102, 2014, 1102, 2013, 1102, 2009, 1102, 1102, 233: 1102, 1102, 1102, 237: 1102, 1102, 241: 1102, 1102, 1102, 1102, 249: 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 265: 1102, 427: 2010, 2008}, + {2: 694, 694, 694, 694, 7: 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 22: 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 208: 694, 694, 211: 694, 694, 694, 694, 694, 694, 694, 236: 694, 240: 694, 247: 694, 694, 282: 694, 286: 694, 694, 694, 694, 694, 292: 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694}, + {2: 699, 699, 699, 699, 7: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 22: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 208: 699, 699, 211: 699, 699, 699, 699, 699, 699, 699, 236: 699, 240: 699, 247: 699, 699, 282: 699, 286: 699, 699, 699, 699, 699, 292: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 435: 2002, 460: 2000, 2001, 473: 2003, 478: 2004, 487: 2005, 503: 2021}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2022}, + {21: 2023, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + // 670 + {597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 207: 597, 597, 597, 597, 597, 597, 214: 597, 597, 597, 218: 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 237: 597, 597, 597, 241: 597, 597, 597, 597, 597, 597, 249: 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 283: 597, 597, 597, 346: 597}, + {2: 699, 699, 699, 699, 7: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 22: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 208: 699, 699, 211: 699, 699, 699, 699, 699, 699, 699, 236: 699, 240: 699, 247: 699, 699, 282: 699, 286: 699, 699, 699, 699, 699, 292: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 435: 2002, 460: 2000, 2001, 473: 2003, 478: 2004, 487: 2005, 503: 2025}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2026}, + {21: 2027, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 207: 598, 598, 598, 598, 598, 598, 214: 598, 598, 598, 218: 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 237: 598, 598, 598, 241: 598, 598, 598, 598, 598, 598, 249: 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 283: 598, 598, 598, 346: 598}, + // 675 + {2: 699, 699, 699, 699, 7: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 22: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 208: 699, 699, 211: 699, 699, 699, 699, 699, 699, 699, 236: 699, 240: 699, 247: 699, 699, 282: 699, 286: 699, 699, 699, 699, 699, 292: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 435: 2002, 460: 2000, 2001, 473: 2003, 478: 2004, 487: 2005, 503: 2029}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2030, 455: 2031}, + {1088, 1088, 6: 1088, 21: 1088, 23: 1088, 223: 1088, 225: 2014, 2012, 2013, 2011, 2009, 231: 1088, 427: 2010, 2008}, + {6: 2032, 21: 753, 23: 753, 223: 2033, 466: 2034, 2035}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2049}, + // 680 + {362: 2040}, + {752, 752, 21: 752, 23: 752, 207: 752, 218: 752, 752, 752, 752, 752}, + {21: 595, 23: 2037, 751: 2036}, + {21: 2039}, + {208: 2038}, + // 685 + {21: 594}, + {599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 207: 599, 599, 599, 599, 599, 599, 214: 599, 599, 599, 218: 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 237: 599, 599, 599, 241: 599, 599, 599, 599, 599, 599, 249: 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 283: 599, 599, 599, 346: 599}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2041, 534: 2043, 572: 2042}, + {756, 756, 6: 756, 21: 756, 23: 756, 207: 756, 218: 756, 756, 756, 756, 756, 756, 225: 2014, 2012, 2013, 2011, 2009, 235: 756, 249: 2048, 2047, 427: 2010, 2008, 637: 2046}, + {760, 760, 6: 2044, 21: 760, 23: 760, 207: 760, 218: 760, 760, 760, 760, 760}, + // 690 + {759, 759, 6: 759, 21: 759, 23: 759, 207: 759, 218: 759, 759, 759, 759, 759, 759, 235: 759}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2041, 534: 2045}, + {758, 758, 6: 758, 21: 758, 23: 758, 207: 758, 218: 758, 758, 758, 758, 758, 758, 235: 758}, + {757, 757, 6: 757, 21: 757, 23: 757, 207: 757, 218: 757, 757, 757, 757, 757, 757, 235: 757}, + {755, 755, 6: 755, 21: 755, 23: 755, 207: 755, 218: 755, 755, 755, 755, 755, 755, 235: 755}, + // 695 + {754, 754, 6: 754, 21: 754, 23: 754, 207: 754, 218: 754, 754, 754, 754, 754, 754, 235: 754}, + {1087, 1087, 6: 1087, 21: 1087, 23: 1087, 223: 1087, 225: 2014, 2012, 2013, 2011, 2009, 231: 1087, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 246: 2054, 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2051, 435: 2053, 460: 2000, 2001, 473: 2052}, + {21: 2060, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2030, 455: 2058}, + // 700 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2056}, + {21: 2055}, + {600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 207: 600, 600, 600, 600, 600, 600, 214: 600, 600, 600, 218: 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 237: 600, 600, 600, 241: 600, 600, 600, 600, 600, 600, 249: 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 283: 600, 600, 600, 346: 600}, + {21: 2057, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 207: 602, 602, 602, 602, 602, 602, 214: 602, 602, 602, 218: 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 237: 602, 602, 602, 241: 602, 602, 602, 602, 602, 602, 249: 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 283: 602, 602, 602, 346: 602}, + // 705 + {6: 2032, 21: 2059}, + {603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 207: 603, 603, 603, 603, 603, 603, 214: 603, 603, 603, 218: 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 237: 603, 603, 603, 241: 603, 603, 603, 603, 603, 603, 249: 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 283: 603, 603, 603, 346: 603}, + {601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 207: 601, 601, 601, 601, 601, 601, 214: 601, 601, 601, 218: 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 237: 601, 601, 601, 241: 601, 601, 601, 601, 601, 601, 249: 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 283: 601, 601, 601, 346: 601}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2062, 435: 2063}, + {21: 2066, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + // 710 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2064}, + {21: 2065, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 207: 604, 604, 604, 604, 604, 604, 214: 604, 604, 604, 218: 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 237: 604, 604, 604, 241: 604, 604, 604, 604, 604, 604, 249: 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 283: 604, 604, 604, 346: 604}, + {605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 207: 605, 605, 605, 605, 605, 605, 214: 605, 605, 605, 218: 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 237: 605, 605, 605, 241: 605, 605, 605, 605, 605, 605, 249: 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 283: 605, 605, 605, 346: 605}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2068, 435: 2069}, + // 715 + {21: 2072, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2070}, + {21: 2071, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 207: 606, 606, 606, 606, 606, 606, 214: 606, 606, 606, 218: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 237: 606, 606, 606, 241: 606, 606, 606, 606, 606, 606, 249: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 283: 606, 606, 606, 346: 606}, + {607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 207: 607, 607, 607, 607, 607, 607, 214: 607, 607, 607, 218: 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 237: 607, 607, 607, 241: 607, 607, 607, 607, 607, 607, 249: 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 283: 607, 607, 607, 346: 607}, + // 720 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2074, 435: 2075}, + {21: 2078, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2076}, + {21: 2077, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 207: 608, 608, 608, 608, 608, 608, 214: 608, 608, 608, 218: 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 237: 608, 608, 608, 241: 608, 608, 608, 608, 608, 608, 249: 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 283: 608, 608, 608, 346: 608}, + // 725 + {609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 207: 609, 609, 609, 609, 609, 609, 214: 609, 609, 609, 218: 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 237: 609, 609, 609, 241: 609, 609, 609, 609, 609, 609, 249: 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 283: 609, 609, 609, 346: 609}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2080, 688: 2082, 732: 2083, 790: 2084, 2081}, + {21: 2092, 225: 2014, 2012, 2013, 2011, 2009, 2093, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 230: 2086, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2085}, + {2: 613, 613, 613, 613, 7: 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 22: 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 208: 613, 613, 211: 613, 613, 613, 613, 613, 613, 613, 230: 613, 236: 613, 240: 613, 247: 613, 613, 282: 613, 286: 613, 613, 613, 613, 613, 292: 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613}, + // 730 + {2: 612, 612, 612, 612, 7: 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 22: 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 208: 612, 612, 211: 612, 612, 612, 612, 612, 612, 612, 230: 612, 236: 612, 240: 612, 247: 612, 612, 282: 612, 286: 612, 612, 612, 612, 612, 292: 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612}, + {2: 611, 611, 611, 611, 7: 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 22: 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 208: 611, 611, 211: 611, 611, 611, 611, 611, 611, 611, 230: 611, 236: 611, 240: 611, 247: 611, 611, 282: 611, 286: 611, 611, 611, 611, 611, 292: 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611}, + {225: 2014, 2012, 2013, 2011, 2009, 2089, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2087}, + {21: 2088, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + // 735 + {623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 207: 623, 623, 623, 623, 623, 623, 214: 623, 623, 623, 218: 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 237: 623, 623, 623, 241: 623, 623, 623, 623, 623, 623, 249: 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 283: 623, 623, 623, 346: 623}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2090}, + {21: 2091, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 207: 622, 622, 622, 622, 622, 622, 214: 622, 622, 622, 218: 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 237: 622, 622, 622, 241: 622, 622, 622, 622, 622, 622, 249: 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 283: 622, 622, 622, 346: 622}, + {625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 207: 625, 625, 625, 625, 625, 625, 214: 625, 625, 625, 218: 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 237: 625, 625, 625, 241: 625, 625, 625, 625, 625, 625, 249: 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 283: 625, 625, 625, 346: 625}, + // 740 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2094}, + {21: 2095, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 207: 624, 624, 624, 624, 624, 624, 214: 624, 624, 624, 218: 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 237: 624, 624, 624, 241: 624, 624, 624, 624, 624, 624, 249: 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 283: 624, 624, 624, 346: 624}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2097}, + {6: 2098, 225: 2014, 2012, 2013, 2011, 2009, 2099, 427: 2010, 2008}, + // 745 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2105}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2100}, + {21: 2101, 221: 2102, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 207: 630, 630, 630, 630, 630, 630, 214: 630, 630, 630, 218: 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 237: 630, 630, 630, 241: 630, 630, 630, 630, 630, 630, 249: 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 283: 630, 630, 630, 346: 630}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2103}, + // 750 + {21: 2104, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 207: 628, 628, 628, 628, 628, 628, 214: 628, 628, 628, 218: 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 237: 628, 628, 628, 241: 628, 628, 628, 628, 628, 628, 249: 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 283: 628, 628, 628, 346: 628}, + {6: 2107, 21: 2106, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 207: 631, 631, 631, 631, 631, 631, 214: 631, 631, 631, 218: 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 237: 631, 631, 631, 241: 631, 631, 631, 631, 631, 631, 249: 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 283: 631, 631, 631, 346: 631}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2108}, + // 755 + {21: 2109, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 207: 629, 629, 629, 629, 629, 629, 214: 629, 629, 629, 218: 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 237: 629, 629, 629, 241: 629, 629, 629, 629, 629, 629, 249: 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 283: 629, 629, 629, 346: 629}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2111}, + {214: 2117, 2118, 2123, 246: 2119, 264: 2125, 274: 2121, 2114, 2120, 2124, 2113, 2122, 2115, 2116}, + {391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 207: 391, 391, 391, 391, 391, 391, 214: 391, 391, 391, 218: 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 237: 391, 391, 391, 241: 391, 391, 391, 391, 391, 391, 249: 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 283: 391, 391, 391, 346: 391}, + // 760 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2165}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2164}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2163}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2162}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 2159, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2158}, + // 765 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 2135, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2134}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2133}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2132}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2131}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2130}, + // 770 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2129}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2128}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2126}, + {21: 2127, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 207: 632, 632, 632, 632, 632, 632, 214: 632, 632, 632, 218: 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 237: 632, 632, 632, 241: 632, 632, 632, 632, 632, 632, 249: 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 283: 632, 632, 632, 346: 632}, + // 775 + {738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 207: 738, 738, 738, 738, 738, 738, 214: 738, 738, 738, 218: 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 237: 738, 738, 241: 738, 738, 738, 738, 738, 738, 249: 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, 283: 738, 738, 738}, + {739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 207: 739, 739, 739, 739, 739, 739, 214: 739, 739, 739, 218: 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 237: 739, 739, 241: 739, 739, 739, 739, 739, 739, 249: 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, 2124, 739, 739, 739, 739, 283: 739, 739, 739}, + {740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 207: 740, 740, 740, 740, 740, 740, 214: 740, 740, 740, 218: 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 237: 740, 740, 241: 740, 740, 740, 740, 740, 740, 249: 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, 2124, 740, 740, 740, 740, 283: 740, 740, 740}, + {741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 207: 741, 741, 741, 741, 741, 741, 214: 741, 741, 741, 218: 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 237: 741, 741, 241: 741, 741, 741, 741, 741, 741, 249: 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 2124, 741, 741, 741, 741, 283: 741, 741, 741}, + {742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 207: 742, 742, 742, 742, 742, 742, 214: 742, 742, 742, 218: 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 237: 742, 742, 241: 742, 742, 742, 742, 742, 742, 249: 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, 2124, 742, 742, 742, 742, 283: 742, 742, 742}, + // 780 + {743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 207: 743, 743, 743, 743, 743, 743, 214: 743, 743, 743, 218: 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 237: 743, 743, 241: 743, 743, 743, 743, 743, 743, 249: 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 2124, 743, 743, 743, 743, 283: 743, 743, 743}, + {746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 207: 746, 746, 746, 746, 746, 746, 214: 746, 746, 2123, 218: 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 237: 746, 746, 241: 746, 746, 746, 746, 746, 2119, 249: 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, 2121, 746, 2120, 2124, 746, 2122, 746, 746, 283: 746, 746, 746}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2136}, + {35: 2146, 2142, 2141, 2138, 2140, 2144, 2145, 2139, 2143, 225: 2014, 2012, 2013, 2011, 2009, 252: 2156, 2153, 2155, 2154, 2150, 2152, 2151, 2148, 2149, 2147, 2157, 427: 2010, 2008, 517: 2137}, + {744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 207: 744, 744, 744, 744, 744, 744, 214: 744, 744, 744, 218: 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 237: 744, 744, 241: 744, 744, 744, 744, 744, 744, 249: 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 744, 283: 744, 744, 744}, + // 785 + {589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 207: 589, 589, 589, 589, 589, 589, 214: 589, 589, 589, 218: 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 237: 589, 589, 241: 589, 589, 589, 589, 589, 589, 249: 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 283: 589, 589, 589}, + {588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 207: 588, 588, 588, 588, 588, 588, 214: 588, 588, 588, 218: 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 237: 588, 588, 241: 588, 588, 588, 588, 588, 588, 249: 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 283: 588, 588, 588}, + {587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 207: 587, 587, 587, 587, 587, 587, 214: 587, 587, 587, 218: 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 237: 587, 587, 241: 587, 587, 587, 587, 587, 587, 249: 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 283: 587, 587, 587}, + {586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 207: 586, 586, 586, 586, 586, 586, 214: 586, 586, 586, 218: 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 237: 586, 586, 241: 586, 586, 586, 586, 586, 586, 249: 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 283: 586, 586, 586}, + {585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 207: 585, 585, 585, 585, 585, 585, 214: 585, 585, 585, 218: 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 237: 585, 585, 241: 585, 585, 585, 585, 585, 585, 249: 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 283: 585, 585, 585}, + // 790 + {584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 207: 584, 584, 584, 584, 584, 584, 214: 584, 584, 584, 218: 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 237: 584, 584, 241: 584, 584, 584, 584, 584, 584, 249: 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 283: 584, 584, 584}, + {583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 207: 583, 583, 583, 583, 583, 583, 214: 583, 583, 583, 218: 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 237: 583, 583, 241: 583, 583, 583, 583, 583, 583, 249: 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 283: 583, 583, 583}, + {582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 207: 582, 582, 582, 582, 582, 582, 214: 582, 582, 582, 218: 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 237: 582, 582, 241: 582, 582, 582, 582, 582, 582, 249: 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 283: 582, 582, 582}, + {581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 207: 581, 581, 581, 581, 581, 581, 214: 581, 581, 581, 218: 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 237: 581, 581, 241: 581, 581, 581, 581, 581, 581, 249: 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 283: 581, 581, 581}, + {580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 207: 580, 580, 580, 580, 580, 580, 214: 580, 580, 580, 218: 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 237: 580, 580, 241: 580, 580, 580, 580, 580, 580, 249: 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 283: 580, 580, 580}, + // 795 + {579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 207: 579, 579, 579, 579, 579, 579, 214: 579, 579, 579, 218: 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 237: 579, 579, 241: 579, 579, 579, 579, 579, 579, 249: 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 283: 579, 579, 579}, + {578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 207: 578, 578, 578, 578, 578, 578, 214: 578, 578, 578, 218: 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 237: 578, 578, 241: 578, 578, 578, 578, 578, 578, 249: 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 283: 578, 578, 578}, + {577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 207: 577, 577, 577, 577, 577, 577, 214: 577, 577, 577, 218: 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 237: 577, 577, 241: 577, 577, 577, 577, 577, 577, 249: 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 283: 577, 577, 577}, + {576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 207: 576, 576, 576, 576, 576, 576, 214: 576, 576, 576, 218: 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 237: 576, 576, 241: 576, 576, 576, 576, 576, 576, 249: 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 283: 576, 576, 576}, + {575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 207: 575, 575, 575, 575, 575, 575, 214: 575, 575, 575, 218: 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 237: 575, 575, 241: 575, 575, 575, 575, 575, 575, 249: 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 283: 575, 575, 575}, + // 800 + {574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 207: 574, 574, 574, 574, 574, 574, 214: 574, 574, 574, 218: 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 237: 574, 574, 241: 574, 574, 574, 574, 574, 574, 249: 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 283: 574, 574, 574}, + {573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 207: 573, 573, 573, 573, 573, 573, 214: 573, 573, 573, 218: 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 237: 573, 573, 241: 573, 573, 573, 573, 573, 573, 249: 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 283: 573, 573, 573}, + {572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 207: 572, 572, 572, 572, 572, 572, 214: 572, 572, 572, 218: 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 237: 572, 572, 241: 572, 572, 572, 572, 572, 572, 249: 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 283: 572, 572, 572}, + {571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 207: 571, 571, 571, 571, 571, 571, 214: 571, 571, 571, 218: 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 237: 571, 571, 241: 571, 571, 571, 571, 571, 571, 249: 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 283: 571, 571, 571}, + {570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 207: 570, 570, 570, 570, 570, 570, 214: 570, 570, 570, 218: 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 237: 570, 570, 241: 570, 570, 570, 570, 570, 570, 249: 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 283: 570, 570, 570}, + // 805 + {747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 207: 747, 747, 747, 747, 747, 747, 214: 747, 747, 2123, 218: 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 237: 747, 747, 241: 747, 747, 747, 747, 747, 2119, 249: 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 2121, 747, 2120, 2124, 747, 2122, 747, 747, 283: 747, 747, 747}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2160}, + {35: 2146, 2142, 2141, 2138, 2140, 2144, 2145, 2139, 2143, 225: 2014, 2012, 2013, 2011, 2009, 252: 2156, 2153, 2155, 2154, 2150, 2152, 2151, 2148, 2149, 2147, 2157, 427: 2010, 2008, 517: 2161}, + {745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 207: 745, 745, 745, 745, 745, 745, 214: 745, 745, 745, 218: 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 237: 745, 745, 241: 745, 745, 745, 745, 745, 745, 249: 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 283: 745, 745, 745}, + {748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 207: 748, 748, 748, 748, 748, 748, 214: 2117, 2118, 2123, 218: 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 237: 748, 748, 241: 748, 748, 748, 748, 748, 2119, 249: 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, 2121, 748, 2120, 2124, 748, 2122, 748, 748, 283: 748, 748, 748}, + // 810 + {749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 207: 749, 749, 749, 749, 749, 749, 214: 2117, 2118, 2123, 218: 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 237: 749, 749, 241: 749, 749, 749, 749, 749, 2119, 249: 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, 2121, 749, 2120, 2124, 749, 2122, 749, 749, 283: 749, 749, 749}, + {750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 207: 750, 750, 750, 750, 750, 750, 214: 2117, 2118, 2123, 218: 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 237: 750, 750, 241: 750, 750, 750, 750, 750, 2119, 249: 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 2121, 750, 2120, 2124, 750, 2122, 2115, 2116, 283: 750, 750, 750}, + {751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 207: 751, 751, 751, 751, 751, 751, 214: 2117, 2118, 2123, 218: 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 237: 751, 751, 241: 751, 751, 751, 751, 751, 2119, 249: 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 2121, 2114, 2120, 2124, 751, 2122, 2115, 2116, 283: 751, 751, 751}, + {35: 2146, 2142, 2141, 2138, 2140, 2144, 2145, 2139, 2143, 252: 2156, 2153, 2155, 2154, 2150, 2152, 2151, 2148, 2149, 2147, 2157, 517: 2167}, + {230: 2168}, + // 815 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2169}, + {21: 2170, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 207: 634, 634, 634, 634, 634, 634, 214: 634, 634, 634, 218: 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 237: 634, 634, 634, 241: 634, 634, 634, 634, 634, 634, 249: 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 283: 634, 634, 634, 346: 634}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2172}, + {6: 2173, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + // 820 + {309: 2174}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2175}, + {35: 2146, 2142, 2141, 2138, 2140, 2144, 2145, 2139, 2143, 225: 2014, 2012, 2013, 2011, 2009, 252: 2156, 2153, 2155, 2154, 2150, 2152, 2151, 2148, 2149, 2147, 2157, 427: 2010, 2008, 517: 2176}, + {21: 2177}, + {635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 207: 635, 635, 635, 635, 635, 635, 214: 635, 635, 635, 218: 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 237: 635, 635, 635, 241: 635, 635, 635, 635, 635, 635, 249: 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 283: 635, 635, 635, 346: 635}, + // 825 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2179}, + {6: 2180, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 2182, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2181}, + {21: 2186, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2183}, + // 830 + {35: 2146, 2142, 2141, 2138, 2140, 2144, 2145, 2139, 2143, 225: 2014, 2012, 2013, 2011, 2009, 252: 2156, 2153, 2155, 2154, 2150, 2152, 2151, 2148, 2149, 2147, 2157, 427: 2010, 2008, 517: 2184}, + {21: 2185}, + {636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 207: 636, 636, 636, 636, 636, 636, 214: 636, 636, 636, 218: 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 237: 636, 636, 636, 241: 636, 636, 636, 636, 636, 636, 249: 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 283: 636, 636, 636, 346: 636}, + {637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 207: 637, 637, 637, 637, 637, 637, 214: 637, 637, 637, 218: 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 237: 637, 637, 637, 241: 637, 637, 637, 637, 637, 637, 249: 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 283: 637, 637, 637, 346: 637}, + {21: 1082, 240: 2189, 606: 2188, 2190}, + // 835 + {21: 1081}, + {21: 1080}, + {21: 2191}, + {638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 207: 638, 638, 638, 638, 638, 638, 214: 638, 638, 638, 218: 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 237: 638, 638, 638, 241: 638, 638, 638, 638, 638, 638, 249: 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 283: 638, 638, 638, 346: 638}, + {21: 1082, 240: 2189, 606: 2188, 2193}, + // 840 + {21: 2194}, + {639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 207: 639, 639, 639, 639, 639, 639, 214: 639, 639, 639, 218: 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 237: 639, 639, 639, 241: 639, 639, 639, 639, 639, 639, 249: 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 283: 639, 639, 639, 346: 639}, + {208: 775}, + {208: 774}, + {208: 773}, + // 845 + {208: 2199}, + {244: 2200}, + {640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 207: 640, 640, 640, 640, 640, 640, 214: 640, 640, 640, 218: 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 237: 640, 640, 640, 241: 640, 640, 640, 640, 640, 640, 249: 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 283: 640, 640, 640, 346: 640}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2202}, + {6: 2203, 214: 2117, 2118, 2123, 246: 2119, 274: 2121, 2114, 2120, 2124, 2113, 2122, 2115, 2116}, + // 850 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2204}, + {21: 2205, 214: 2117, 2118, 2123, 246: 2119, 274: 2121, 2114, 2120, 2124, 2113, 2122, 2115, 2116}, + {642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 207: 642, 642, 642, 642, 642, 642, 214: 642, 642, 642, 218: 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 237: 642, 642, 642, 241: 642, 642, 642, 642, 642, 642, 249: 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 283: 642, 642, 642, 346: 642}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 1084, 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2030, 455: 2207, 508: 2208}, + {6: 2032, 21: 1083}, + // 855 + {21: 2209}, + {643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 207: 643, 643, 643, 643, 643, 643, 214: 643, 643, 643, 218: 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 237: 643, 643, 643, 241: 643, 643, 643, 643, 643, 643, 249: 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 283: 643, 643, 643, 346: 643}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2030, 455: 2211}, + {6: 2032, 21: 2212, 231: 2213}, + {648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 207: 648, 648, 648, 648, 648, 648, 214: 648, 648, 648, 218: 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 237: 648, 648, 648, 241: 648, 648, 648, 648, 648, 648, 249: 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 283: 648, 648, 648, 346: 648}, + // 860 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 348: 1691, 1459, 1460, 1458, 434: 2214}, + {21: 2215}, + {647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 207: 647, 647, 647, 647, 647, 647, 214: 647, 647, 647, 218: 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 237: 647, 647, 647, 241: 647, 647, 647, 647, 647, 647, 249: 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 283: 647, 647, 647, 346: 647}, + {649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 207: 649, 649, 649, 649, 649, 649, 214: 649, 649, 649, 218: 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 237: 649, 649, 649, 241: 649, 649, 649, 649, 649, 649, 249: 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 283: 649, 649, 649, 346: 649}, + {21: 2218, 240: 2219}, + // 865 + {591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 207: 591, 591, 591, 591, 591, 591, 214: 591, 591, 591, 218: 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 237: 591, 591, 591, 241: 591, 591, 591, 591, 591, 591, 249: 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, 283: 591, 591, 591, 346: 591}, + {21: 2220}, + {590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 207: 590, 590, 590, 590, 590, 590, 214: 590, 590, 590, 218: 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 237: 590, 590, 590, 241: 590, 590, 590, 590, 590, 590, 249: 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 283: 590, 590, 590, 346: 590}, + {21: 2222}, + {650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 207: 650, 650, 650, 650, 650, 650, 214: 650, 650, 650, 218: 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 237: 650, 650, 650, 241: 650, 650, 650, 650, 650, 650, 249: 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 283: 650, 650, 650, 346: 650}, + // 870 + {651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 207: 651, 651, 651, 651, 651, 651, 214: 651, 651, 651, 218: 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 237: 651, 651, 651, 241: 651, 651, 651, 651, 651, 651, 249: 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 283: 651, 651, 651, 346: 651}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 1084, 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2030, 455: 2207, 508: 2225}, + {21: 2226}, + {652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 207: 652, 652, 652, 652, 652, 652, 214: 652, 652, 652, 218: 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 237: 652, 652, 652, 241: 652, 652, 652, 652, 652, 652, 249: 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 283: 652, 652, 652, 346: 652}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 1084, 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2030, 455: 2207, 508: 2228}, + // 875 + {21: 2229}, + {653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 207: 653, 653, 653, 653, 653, 653, 214: 653, 653, 653, 218: 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 237: 653, 653, 653, 241: 653, 653, 653, 653, 653, 653, 249: 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 283: 653, 653, 653, 346: 653}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 247: 1927, 348: 1926, 1459, 1460, 1458, 409: 2231}, + {21: 2232}, + {706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 207: 706, 706, 706, 706, 706, 706, 214: 706, 706, 706, 218: 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 237: 706, 706, 706, 241: 706, 706, 706, 706, 706, 706, 249: 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, 283: 706, 706, 706, 346: 706}, + // 880 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 247: 1927, 348: 1926, 1459, 1460, 1458, 409: 2234}, + {21: 2235}, + {707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 207: 707, 707, 707, 707, 707, 707, 214: 707, 707, 707, 218: 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 237: 707, 707, 707, 241: 707, 707, 707, 707, 707, 707, 249: 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 707, 283: 707, 707, 707, 346: 707}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2237}, + {6: 2238, 225: 2014, 2012, 2013, 2011, 2009, 231: 2239, 427: 2010, 2008}, + // 885 + {12: 2249, 50: 2246, 2245, 56: 2248, 61: 2251, 248: 2243, 290: 2244, 374: 2247, 430: 2250, 573: 2242}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 348: 1691, 1459, 1460, 1458, 434: 2240}, + {21: 2241}, + {708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 207: 708, 708, 708, 708, 708, 708, 214: 708, 708, 708, 218: 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 237: 708, 708, 708, 241: 708, 708, 708, 708, 708, 708, 249: 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 283: 708, 708, 708, 346: 708}, + {21: 2285}, + // 890 + {21: 134, 206: 2257, 441: 2258, 453: 2284}, + {7: 134, 21: 134, 206: 2257, 248: 134, 353: 134, 441: 2258, 453: 2271}, + {21: 551}, + {21: 134, 206: 2257, 441: 2258, 453: 2270}, + {21: 127, 206: 2263, 441: 2264, 540: 2262, 552: 2265}, + // 895 + {21: 134, 206: 2257, 441: 2258, 453: 2256}, + {21: 175, 375: 2253, 2254, 635: 2255}, + {21: 175, 375: 2253, 2254, 635: 2252}, + {21: 545}, + {21: 546}, + // 900 + {21: 174}, + {21: 173}, + {21: 547}, + {21: 548}, + {240: 1448, 432: 2259, 443: 2260}, + // 905 + {133, 133, 133, 133, 133, 133, 133, 133, 12: 133, 21: 133, 207: 133, 209: 133, 133, 213: 133, 217: 133, 239: 133, 248: 133, 133, 133, 291: 133, 341: 133, 133, 133, 133, 133, 353: 133, 430: 133, 133}, + {1105, 1105, 1105, 1105, 6: 1105, 1105, 1105, 1105, 1105, 1105, 13: 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 48: 1105, 206: 1105, 1105, 210: 1105, 213: 1105, 218: 1105, 1105, 1105, 1105, 231: 1105, 236: 1105, 239: 1105, 347: 1105, 352: 1105, 1105, 1105, 1105, 1105}, + {21: 2261}, + {135, 135, 135, 135, 135, 135, 135, 135, 12: 135, 21: 135, 207: 135, 209: 135, 135, 213: 135, 217: 135, 239: 135, 248: 135, 135, 135, 291: 135, 341: 135, 135, 135, 135, 135, 353: 135, 430: 135, 135}, + {21: 549}, + // 910 + {240: 1448, 432: 2259, 443: 2266}, + {126, 126, 126, 126, 126, 126, 126, 12: 126, 21: 126, 207: 126, 209: 126, 126, 213: 126, 217: 126, 291: 126, 341: 126, 126, 126, 126, 126, 430: 126, 126}, + {125, 125, 125, 125, 125, 125, 125, 12: 125, 21: 125, 207: 125, 209: 125, 125, 213: 125, 217: 125, 291: 125, 341: 125, 125, 125, 125, 125, 430: 125, 125}, + {6: 2267, 21: 2261}, + {240: 1448, 432: 2259, 443: 2268}, + // 915 + {21: 2269}, + {124, 124, 124, 124, 124, 124, 124, 12: 124, 21: 124, 207: 124, 209: 124, 124, 213: 124, 217: 124, 291: 124, 341: 124, 124, 124, 124, 124, 430: 124, 124}, + {21: 550}, + {7: 2276, 21: 121, 248: 2273, 353: 2275, 449: 2274, 493: 2272}, + {21: 552}, + // 920 + {118, 118, 118, 118, 118, 118, 118, 2276, 21: 118, 207: 118, 209: 118, 118, 213: 118, 217: 118, 239: 118, 291: 118, 341: 118, 118, 118, 118, 118, 353: 2275, 449: 2282, 551: 2281}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 248: 1689, 348: 1691, 1459, 1460, 1458, 434: 1688, 469: 2278}, + {234: 2277}, + {115, 115, 115, 115, 115, 115, 7: 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 22: 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 208: 115, 224: 115, 232: 115, 245: 115, 248: 115}, + {116, 116, 116, 116, 116, 116, 7: 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 22: 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 208: 116, 224: 116, 232: 116, 245: 116, 248: 116}, + // 925 + {123, 123, 123, 123, 123, 123, 123, 21: 123, 207: 123, 209: 123, 123, 213: 123, 217: 123, 239: 123, 248: 2279, 291: 123, 341: 123, 123, 123, 123, 123, 749: 2280}, + {122, 122, 122, 122, 122, 122, 122, 21: 122, 207: 122, 209: 122, 122, 213: 122, 217: 122, 239: 122, 291: 122, 341: 122, 122, 122, 122, 122}, + {119, 119, 119, 119, 119, 119, 119, 21: 119, 207: 119, 209: 119, 119, 213: 119, 217: 119, 239: 119, 291: 119, 341: 119, 119, 119, 119, 119}, + {120, 120, 120, 120, 120, 120, 120, 21: 120, 207: 120, 209: 120, 120, 213: 120, 217: 120, 239: 120, 291: 120, 341: 120, 120, 120, 120, 120}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 248: 1689, 348: 1691, 1459, 1460, 1458, 434: 1688, 469: 2283}, + // 930 + {117, 117, 117, 117, 117, 117, 117, 21: 117, 207: 117, 209: 117, 117, 213: 117, 217: 117, 239: 117, 291: 117, 341: 117, 117, 117, 117, 117}, + {21: 553}, + {709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 207: 709, 709, 709, 709, 709, 709, 214: 709, 709, 709, 218: 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 237: 709, 709, 709, 241: 709, 709, 709, 709, 709, 709, 249: 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 283: 709, 709, 709, 346: 709}, + {225: 2014, 2012, 2013, 2011, 2009, 251: 559, 427: 2010, 2008}, + {251: 2290, 677: 2289, 807: 2288}, + // 935 + {44: 555, 251: 2290, 263: 2296, 677: 2295, 708: 2294}, + {44: 558, 251: 558, 263: 558}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2291}, + {225: 2014, 2012, 2013, 2011, 2009, 265: 2292, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2293}, + // 940 + {44: 556, 225: 2014, 2012, 2013, 2011, 2009, 251: 556, 263: 556, 427: 2010, 2008}, + {44: 2298}, + {44: 557, 251: 557, 263: 557}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2297}, + {44: 554, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + // 945 + {710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 207: 710, 710, 710, 710, 710, 710, 214: 710, 710, 710, 218: 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 237: 710, 710, 710, 241: 710, 710, 710, 710, 710, 710, 249: 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, 283: 710, 710, 710, 346: 710}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2300}, + {210: 2301, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {12: 2249, 50: 2246, 2245, 56: 2248, 61: 2251, 248: 2243, 290: 2244, 374: 2247, 430: 2250, 573: 2302}, + {21: 2303}, + // 950 + {711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 207: 711, 711, 711, 711, 711, 711, 214: 711, 711, 711, 218: 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 237: 711, 711, 711, 241: 711, 711, 711, 711, 711, 711, 249: 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 711, 283: 711, 711, 711, 346: 711}, + {712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 207: 712, 712, 712, 712, 712, 712, 214: 712, 712, 712, 218: 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 237: 712, 712, 2305, 241: 712, 712, 712, 712, 712, 712, 249: 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, 283: 712, 712, 712, 346: 712}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 348: 1691, 1459, 1460, 1458, 434: 2308}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 2307, 1935, 1996, 1934}, + {719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 207: 719, 719, 719, 719, 719, 719, 214: 719, 719, 719, 218: 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 237: 719, 719, 2305, 241: 719, 719, 719, 719, 719, 719, 249: 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, 283: 719, 719, 719, 346: 719}, + // 955 + {728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 207: 728, 728, 728, 728, 728, 728, 214: 728, 728, 728, 218: 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 237: 728, 728, 728, 241: 728, 728, 728, 728, 728, 728, 249: 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, 283: 728, 728, 728, 346: 728}, + {713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 207: 713, 713, 713, 713, 713, 713, 214: 713, 713, 713, 218: 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 237: 713, 713, 713, 241: 713, 713, 713, 713, 713, 713, 249: 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, 283: 713, 713, 713, 346: 713}, + {206: 2313, 352: 1379, 437: 2311, 1380, 1381, 1382, 444: 1385, 1384, 2312}, + {21: 2317, 219: 430}, + {21: 2316}, + // 960 + {352: 1379, 437: 2314, 1380, 1381, 1382}, + {21: 2315}, + {219: 429}, + {440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 207: 440, 440, 440, 440, 440, 440, 214: 440, 440, 440, 218: 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 237: 440, 440, 440, 241: 440, 440, 440, 440, 440, 440, 249: 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, 283: 440, 440, 440, 346: 440}, + {441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 207: 441, 441, 441, 441, 441, 441, 214: 441, 441, 441, 218: 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 237: 441, 441, 441, 241: 441, 441, 441, 441, 441, 441, 249: 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 283: 441, 441, 441, 346: 441}, + // 965 + {6: 1088, 21: 2326, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {6: 2323}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 2320, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 1379, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2318, 437: 2321, 1380, 1381, 1382, 444: 1385, 1384, 2312, 455: 2319}, + {21: 2322, 219: 430}, + {441, 441, 6: 441, 21: 441, 209: 441, 214: 441, 441, 441, 219: 429, 225: 441, 441, 441, 441, 441, 232: 441, 239: 441, 245: 441, 441, 264: 441, 266: 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, 283: 441, 441, 441, 346: 441}, + // 970 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2324}, + {6: 1087, 21: 2325, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 207: 715, 715, 715, 715, 715, 715, 214: 715, 715, 715, 218: 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 237: 715, 715, 715, 241: 715, 715, 715, 715, 715, 715, 249: 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, 283: 715, 715, 715, 346: 715}, + {716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 207: 716, 716, 716, 716, 716, 716, 214: 716, 716, 716, 218: 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 237: 716, 716, 716, 241: 716, 716, 716, 716, 716, 716, 249: 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, 283: 716, 716, 716, 346: 716}, + {718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 207: 718, 718, 718, 718, 718, 718, 214: 718, 718, 718, 218: 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 237: 718, 718, 2305, 241: 718, 718, 718, 718, 718, 718, 249: 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, 283: 718, 718, 718, 346: 718}, + // 975 + {720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 207: 720, 720, 720, 720, 720, 720, 214: 720, 720, 720, 218: 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 237: 720, 720, 2305, 241: 720, 720, 720, 720, 720, 720, 249: 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 283: 720, 720, 720, 346: 720}, + {721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 207: 721, 721, 721, 721, 721, 721, 214: 721, 721, 721, 218: 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 237: 721, 721, 2305, 241: 721, 721, 721, 721, 721, 721, 249: 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, 283: 721, 721, 721, 346: 721}, + {722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 207: 722, 722, 722, 722, 722, 722, 214: 722, 722, 722, 218: 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 237: 722, 722, 2305, 241: 722, 722, 722, 722, 722, 722, 249: 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 283: 722, 722, 722, 346: 722}, + {723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 207: 723, 723, 723, 723, 723, 723, 214: 723, 723, 723, 218: 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 237: 723, 723, 2305, 241: 723, 723, 723, 723, 723, 723, 249: 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, 283: 723, 723, 723, 346: 723}, + {208: 2335}, + // 980 + {208: 2334}, + {704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 207: 704, 704, 704, 704, 704, 704, 214: 704, 704, 704, 218: 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 237: 704, 704, 704, 241: 704, 704, 704, 704, 704, 704, 249: 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, 283: 704, 704, 704, 346: 704}, + {705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 207: 705, 705, 705, 705, 705, 705, 214: 705, 705, 705, 218: 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 237: 705, 705, 705, 241: 705, 705, 705, 705, 705, 705, 249: 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 283: 705, 705, 705, 346: 705}, + {247: 2337}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2338, 1459, 1460, 1458}, + // 985 + {734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 207: 734, 734, 734, 734, 734, 734, 214: 734, 734, 734, 218: 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 237: 734, 734, 734, 241: 734, 734, 734, 734, 734, 734, 249: 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 283: 734, 734, 734, 346: 734, 357: 734, 734}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2340, 1459, 1460, 1458}, + {735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 207: 735, 735, 735, 735, 735, 735, 214: 735, 735, 735, 218: 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 237: 735, 735, 735, 241: 735, 735, 735, 735, 735, 735, 2341, 249: 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 283: 735, 735, 735, 346: 735, 357: 735, 735}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2342, 1459, 1460, 1458}, + {733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 207: 733, 733, 733, 733, 733, 733, 214: 733, 733, 733, 218: 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 237: 733, 733, 733, 241: 733, 733, 733, 733, 733, 733, 249: 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 283: 733, 733, 733, 346: 733, 357: 733, 733}, + // 990 + {765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 207: 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 237: 765, 765, 765, 241: 765, 765, 765, 765, 765, 765, 249: 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, 283: 765, 765, 765, 291: 765, 341: 765, 765, 765, 765, 765, 765}, + {761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 207: 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 237: 761, 761, 761, 241: 761, 761, 761, 761, 761, 761, 249: 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 283: 761, 761, 761, 291: 761, 341: 761, 761, 761, 761, 761, 761}, + {35: 2355, 2351, 2350, 2347, 2349, 2353, 2354, 2348, 2352, 668: 2346}, + {6: 2356}, + {6: 569}, + // 995 + {6: 568}, + {6: 567}, + {6: 566}, + {6: 565}, + {6: 564}, + // 1000 + {6: 563}, + {6: 562}, + {6: 561}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2357}, + {6: 2358, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + // 1005 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2359}, + {21: 2360, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 207: 626, 626, 626, 626, 626, 626, 214: 626, 626, 626, 218: 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 237: 626, 626, 626, 241: 626, 626, 626, 626, 626, 626, 249: 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 283: 626, 626, 626, 346: 626}, + {35: 2355, 2351, 2350, 2347, 2349, 2353, 2354, 2348, 2352, 668: 2362}, + {6: 2363}, + // 1010 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2364}, + {6: 2365, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2366}, + {21: 2367, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 207: 627, 627, 627, 627, 627, 627, 214: 627, 627, 627, 218: 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 237: 627, 627, 627, 241: 627, 627, 627, 627, 627, 627, 249: 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 283: 627, 627, 627, 346: 627}, + // 1015 + {50: 2371, 2370, 56: 2372, 96: 2373, 720: 2369}, + {6: 2374}, + {6: 621}, + {6: 620}, + {6: 619}, + // 1020 + {6: 618}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2375}, + {21: 2376, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 207: 633, 633, 633, 633, 633, 633, 214: 633, 633, 633, 218: 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 237: 633, 633, 633, 241: 633, 633, 633, 633, 633, 633, 249: 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 283: 633, 633, 633, 346: 633}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2030, 455: 2378}, + // 1025 + {6: 2379}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2380}, + {6: 1087, 21: 2381, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 207: 714, 714, 714, 714, 714, 714, 214: 714, 714, 714, 218: 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 237: 714, 714, 714, 241: 714, 714, 714, 714, 714, 714, 249: 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, 283: 714, 714, 714, 346: 714}, + {644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 207: 644, 644, 644, 644, 644, 644, 214: 644, 644, 644, 218: 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 237: 644, 644, 644, 241: 644, 644, 644, 644, 644, 644, 249: 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 283: 644, 644, 644, 346: 644}, + // 1030 + {645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 207: 645, 645, 645, 645, 645, 645, 214: 645, 645, 645, 218: 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 237: 645, 645, 645, 241: 645, 645, 645, 645, 645, 645, 249: 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 283: 645, 645, 645, 346: 645}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 1084, 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2030, 455: 2207, 508: 2385}, + {21: 2386}, + {641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 207: 641, 641, 641, 641, 641, 641, 214: 641, 641, 641, 218: 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 237: 641, 641, 641, 241: 641, 641, 641, 641, 641, 641, 249: 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, 283: 641, 641, 641, 346: 641}, + {646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 207: 646, 646, 646, 646, 646, 646, 214: 646, 646, 646, 218: 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 237: 646, 646, 646, 241: 646, 646, 646, 646, 646, 646, 249: 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 283: 646, 646, 646, 346: 646}, + // 1035 + {2: 699, 699, 699, 699, 7: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 22: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 208: 699, 699, 211: 699, 699, 699, 699, 699, 699, 699, 236: 699, 240: 699, 247: 699, 699, 282: 699, 286: 699, 699, 699, 699, 699, 292: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 435: 2002, 460: 2000, 2001, 473: 2003, 478: 2004, 487: 2005, 503: 2389}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2390}, + {21: 2391, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 207: 610, 610, 610, 610, 610, 610, 214: 610, 610, 610, 218: 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 237: 610, 610, 610, 241: 610, 610, 610, 610, 610, 610, 249: 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 283: 610, 610, 610, 346: 610}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 1084, 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2030, 455: 2207, 508: 2393}, + // 1040 + {21: 2394}, + {593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 207: 593, 593, 593, 593, 593, 593, 214: 593, 593, 593, 218: 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 237: 593, 593, 593, 241: 593, 593, 593, 593, 593, 593, 249: 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 283: 593, 593, 593, 346: 593}, + {2: 1066, 1066, 1066, 1066, 7: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 22: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 208: 1066, 211: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 236: 1066, 240: 1066, 247: 1066, 1066, 282: 1066, 286: 1066, 1066, 1066, 1066, 1066, 292: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066}, + {245: 2420, 264: 2419, 283: 2418, 2404, 2405, 648: 2421}, + {206: 1062}, + // 1045 + {2: 1060, 1060, 1060, 1060, 7: 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 22: 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 208: 1060, 211: 1060, 1060, 1060, 1060, 1060, 1060, 1060, 236: 1060, 240: 1060, 247: 1060, 1060, 282: 1060, 286: 1060, 1060, 1060, 1060, 1060, 292: 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060}, + {2: 1058, 1058, 1058, 1058, 7: 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 22: 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 208: 1058, 211: 1058, 1058, 1058, 1058, 1058, 1058, 1058, 236: 1058, 240: 1058, 247: 1058, 1058, 282: 1058, 286: 1058, 1058, 1058, 1058, 1058, 292: 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058}, + {206: 2414, 406: 2415}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 2411}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 2407, 1935, 1996, 1934}, + // 1050 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 2406, 1935, 1996, 1934}, + {2: 1047, 1047, 1047, 1047, 7: 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 22: 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 208: 1047, 211: 1047, 1047, 1047, 1047, 1047, 1047, 1047, 236: 1047, 240: 1047, 247: 1047, 1047, 282: 1047, 286: 1047, 1047, 1047, 1047, 1047, 292: 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047}, + {2: 1046, 1046, 1046, 1046, 7: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 22: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 208: 1046, 211: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 236: 1046, 240: 1046, 247: 1046, 1046, 282: 1046, 286: 1046, 1046, 1046, 1046, 1046, 292: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046}, + {1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 207: 1049, 1049, 210: 1049, 1049, 1049, 218: 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 237: 1049, 1049, 2305, 241: 1049, 1049, 1049, 1049, 249: 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 265: 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 346: 2306}, + {1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 2409, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 207: 1045, 1045, 210: 1045, 1045, 1045, 218: 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 237: 1045, 1045, 2305, 241: 1045, 1045, 1045, 1045, 249: 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 265: 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 346: 2306, 733: 2408}, + // 1055 + {1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 207: 1050, 1050, 210: 1050, 1050, 1050, 218: 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 237: 1050, 1050, 241: 1050, 1050, 1050, 1050, 249: 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 265: 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050}, + {208: 2410}, + {1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 207: 1044, 1044, 210: 1044, 1044, 1044, 218: 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 237: 1044, 1044, 241: 1044, 1044, 1044, 1044, 249: 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 265: 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044}, + {214: 2117, 2118, 2123, 225: 2412, 246: 2119, 274: 2121, 2114, 2120, 2124, 2113, 2122, 2115, 2116}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 2413}, + // 1060 + {1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 207: 1051, 1051, 210: 1051, 1051, 1051, 218: 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 237: 1051, 1051, 241: 1051, 1051, 1051, 1051, 249: 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 265: 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 2320, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 1379, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2030, 437: 2311, 1380, 1381, 1382, 444: 1385, 1384, 2312, 455: 2416}, + {1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 207: 1052, 1052, 210: 1052, 1052, 1052, 218: 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 237: 1052, 1052, 241: 1052, 1052, 1052, 1052, 249: 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 265: 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052}, + {6: 2032, 21: 2417}, + {1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 207: 1053, 1053, 210: 1053, 1053, 1053, 218: 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 237: 1053, 1053, 241: 1053, 1053, 1053, 1053, 249: 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 265: 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053}, + // 1065 + {2: 1065, 1065, 1065, 1065, 7: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 22: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 208: 1065, 211: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 236: 1065, 240: 1065, 247: 1065, 1065, 282: 1065, 286: 1065, 1065, 1065, 1065, 1065, 292: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065}, + {206: 1061}, + {2: 1059, 1059, 1059, 1059, 7: 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 22: 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 208: 1059, 211: 1059, 1059, 1059, 1059, 1059, 1059, 1059, 236: 1059, 240: 1059, 247: 1059, 1059, 282: 1059, 286: 1059, 1059, 1059, 1059, 1059, 292: 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059}, + {2: 1057, 1057, 1057, 1057, 7: 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 22: 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 208: 1057, 211: 1057, 1057, 1057, 1057, 1057, 1057, 1057, 236: 1057, 240: 1057, 247: 1057, 1057, 282: 1057, 286: 1057, 1057, 1057, 1057, 1057, 292: 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057}, + {68: 2445, 217: 2446, 294: 2444, 2443}, + // 1070 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 2437, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 2438, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2436, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 2434, 435: 2439, 681: 2435}, + {2: 1074, 1074, 1074, 1074, 7: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 22: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 208: 1074, 211: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 236: 1074, 240: 1074, 247: 1074, 1074, 282: 1074, 286: 1074, 1074, 1074, 1074, 1074, 292: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 435: 1074}, + {2: 1073, 1073, 1073, 1073, 7: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 22: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 208: 1073, 211: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 236: 1073, 240: 1073, 247: 1073, 1073, 282: 1073, 286: 1073, 1073, 1073, 1073, 1073, 292: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 435: 1073}, + {2: 1072, 1072, 1072, 1072, 7: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 22: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 208: 1072, 211: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 236: 1072, 240: 1072, 247: 1072, 1072, 282: 1072, 286: 1072, 1072, 1072, 1072, 1072, 292: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 435: 1072}, + {2: 1071, 1071, 1071, 1071, 7: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 22: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 208: 1071, 211: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 236: 1071, 240: 1071, 247: 1071, 1071, 282: 1071, 286: 1071, 1071, 1071, 1071, 1071, 292: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 435: 1071}, + // 1075 + {2: 1070, 1070, 1070, 1070, 7: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 22: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 208: 1070, 211: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 236: 1070, 240: 1070, 247: 1070, 1070, 282: 1070, 286: 1070, 1070, 1070, 1070, 1070, 292: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 435: 1070}, + {2: 1069, 1069, 1069, 1069, 7: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 22: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 208: 1069, 211: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 236: 1069, 240: 1069, 247: 1069, 1069, 282: 1069, 286: 1069, 1069, 1069, 1069, 1069, 292: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 435: 1069}, + {2: 1068, 1068, 1068, 1068, 7: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 22: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 208: 1068, 211: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 236: 1068, 240: 1068, 247: 1068, 1068, 282: 1068, 286: 1068, 1068, 1068, 1068, 1068, 292: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 435: 1068}, + {2: 1067, 1067, 1067, 1067, 7: 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 22: 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 208: 1067, 211: 1067, 1067, 1067, 1067, 1067, 1067, 1067, 236: 1067, 240: 1067, 247: 1067, 1067, 282: 1067, 286: 1067, 1067, 1067, 1067, 1067, 292: 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 435: 1067}, + {68: 1064, 209: 2433, 217: 1064, 294: 1064, 1064}, + // 1080 + {68: 1063, 217: 1063, 294: 1063, 1063}, + {1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 207: 1078, 1078, 210: 1078, 1078, 1078, 218: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 237: 1078, 1078, 241: 1078, 1078, 1078, 1078, 249: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 265: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078}, + {206: 2310, 406: 2442}, + {391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 207: 391, 391, 391, 391, 391, 391, 214: 391, 391, 391, 218: 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 237: 391, 391, 391, 241: 391, 391, 391, 391, 391, 391, 249: 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 283: 391, 391, 391, 346: 391, 532: 2440}, + {932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 1056, 932, 932, 932, 932, 932, 932, 214: 932, 932, 932, 218: 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 237: 932, 932, 932, 241: 932, 932, 932, 932, 932, 932, 932, 249: 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, 283: 932, 932, 932, 346: 932, 357: 932, 932}, + // 1085 + {931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 1055, 931, 931, 931, 931, 931, 931, 214: 931, 931, 931, 218: 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 237: 931, 931, 931, 241: 931, 931, 931, 931, 931, 931, 931, 249: 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 283: 931, 931, 931, 346: 931, 357: 931, 931}, + {206: 1054}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 2441}, + {1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 207: 1076, 1076, 210: 1076, 1076, 1076, 218: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 237: 1076, 1076, 241: 1076, 1076, 1076, 1076, 249: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 265: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076}, + {1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 207: 1077, 1077, 210: 1077, 1077, 1077, 218: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 237: 1077, 1077, 241: 1077, 1077, 1077, 1077, 249: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 265: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077}, + // 1090 + {1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 207: 1098, 1098, 210: 1098, 1098, 1098, 218: 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 233: 1098, 1098, 1098, 237: 1098, 1098, 241: 1098, 1098, 1098, 1098, 249: 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 265: 1098}, + {1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 207: 1097, 1097, 210: 1097, 1097, 1097, 218: 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 233: 1097, 1097, 1097, 237: 1097, 1097, 241: 1097, 1097, 1097, 1097, 249: 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 265: 1097}, + {1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 207: 1096, 1096, 210: 1096, 1096, 1096, 218: 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 233: 1096, 1096, 1096, 237: 1096, 1096, 241: 1096, 1096, 1096, 1096, 249: 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 265: 1096}, + {1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 207: 1079, 1079, 210: 1079, 1079, 1079, 218: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 237: 1079, 1079, 241: 1079, 1079, 1079, 1079, 249: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 265: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079}, + {1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 207: 1099, 1099, 210: 1099, 1099, 1099, 218: 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 233: 1099, 1099, 1099, 237: 1099, 1099, 241: 1099, 1099, 1099, 1099, 249: 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 265: 1099, 427: 2010, 2008}, + // 1095 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2449}, + {1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 207: 1103, 1103, 210: 1103, 1103, 1103, 218: 1103, 1103, 1103, 1103, 1103, 1103, 1103, 2014, 2012, 2013, 2011, 2009, 1103, 1103, 233: 1103, 1103, 1103, 237: 1103, 1103, 241: 1103, 1103, 1103, 1103, 249: 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 265: 1103, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1852, 348: 1662, 1459, 1460, 1458, 429: 1851, 456: 1850, 1849, 2456}, + {237: 475, 526: 2453, 638: 2452}, + {237: 2454}, + // 1100 + {237: 474}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1852, 348: 1662, 1459, 1460, 1458, 429: 1851, 456: 1850, 1849, 2455}, + {480, 480, 6: 480, 21: 480, 207: 480, 211: 480, 480, 218: 480, 480, 480, 480, 480, 480, 480, 231: 480, 233: 480, 480, 480, 237: 480, 480, 241: 480, 480, 480, 480, 465: 1868, 471: 1867}, + {481, 481, 6: 481, 21: 481, 207: 481, 211: 481, 481, 218: 481, 481, 481, 481, 481, 481, 481, 231: 481, 233: 481, 481, 481, 237: 481, 481, 241: 481, 481, 481, 481, 465: 1868, 471: 1867}, + {237: 2458}, + // 1105 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1852, 348: 1662, 1459, 1460, 1458, 429: 1851, 456: 1850, 1849, 2459}, + {207: 2460, 211: 1871, 1872, 231: 2461, 233: 1870, 237: 1873, 241: 1874, 1875, 1869, 465: 1868, 471: 1867}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2465}, + {206: 2462}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 1726, 470: 2463}, + // 1110 + {6: 1730, 21: 2464}, + {482, 482, 6: 482, 21: 482, 207: 482, 211: 482, 482, 218: 482, 482, 482, 482, 482, 482, 482, 231: 482, 233: 482, 482, 482, 237: 482, 482, 241: 482, 482, 482, 482}, + {483, 483, 6: 483, 21: 483, 207: 483, 211: 483, 483, 218: 483, 483, 483, 483, 483, 483, 483, 2014, 2012, 2013, 2011, 2009, 231: 483, 233: 483, 483, 483, 237: 483, 483, 241: 483, 483, 483, 483, 427: 2010, 2008}, + {486, 486, 6: 486, 21: 486, 207: 2467, 211: 486, 486, 218: 486, 486, 486, 486, 486, 486, 486, 231: 2468, 233: 486, 486, 486, 237: 486, 486, 241: 486, 486, 486, 486, 465: 1868, 471: 1867}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2472}, + // 1115 + {206: 2469}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 1726, 470: 2470}, + {6: 1730, 21: 2471}, + {484, 484, 6: 484, 21: 484, 207: 484, 211: 484, 484, 218: 484, 484, 484, 484, 484, 484, 484, 231: 484, 233: 484, 484, 484, 237: 484, 484, 241: 484, 484, 484, 484}, + {485, 485, 6: 485, 21: 485, 207: 485, 211: 485, 485, 218: 485, 485, 485, 485, 485, 485, 485, 2014, 2012, 2013, 2011, 2009, 231: 485, 233: 485, 485, 485, 237: 485, 485, 241: 485, 485, 485, 485, 427: 2010, 2008}, + // 1120 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1852, 288: 1848, 348: 1662, 1459, 1460, 1458, 429: 1851, 456: 1850, 1849, 1854, 480: 2475}, + {506, 506, 6: 506, 21: 506, 207: 506, 211: 506, 506, 218: 506, 506, 506, 506, 506, 506, 506, 231: 506, 233: 506, 506, 506, 237: 506, 506, 241: 506, 506, 506, 506}, + {514, 514, 6: 514, 21: 514, 207: 514, 218: 514, 514, 514, 514, 514, 514, 514, 234: 514, 514, 238: 514}, + {488, 488, 6: 488, 21: 488, 207: 488, 211: 488, 488, 218: 488, 488, 488, 488, 488, 488, 488, 231: 488, 233: 488, 488, 488, 237: 488, 488, 241: 488, 488, 488, 488, 347: 2480, 363: 2481, 2479, 545: 2483, 2482, 612: 2484, 2478}, + {504, 504, 6: 504, 21: 504, 207: 504, 211: 504, 504, 218: 504, 504, 504, 504, 504, 504, 504, 231: 504, 233: 504, 504, 504, 237: 504, 504, 241: 504, 504, 504, 504, 347: 504, 363: 504, 504}, + // 1125 + {509, 509, 6: 509, 21: 509, 207: 509, 211: 509, 509, 218: 509, 509, 509, 509, 509, 509, 509, 231: 509, 233: 509, 509, 509, 237: 509, 509, 241: 509, 509, 509, 509}, + {291: 2499, 359: 2500, 475: 2503}, + {291: 2499, 359: 2500, 475: 2502}, + {291: 2499, 359: 2500, 475: 2501}, + {206: 498, 221: 2486, 726: 2487}, + // 1130 + {490, 490, 6: 490, 21: 490, 207: 490, 211: 490, 490, 218: 490, 490, 490, 490, 490, 490, 490, 231: 490, 233: 490, 490, 490, 237: 490, 490, 241: 490, 490, 490, 490, 347: 490, 363: 490, 490}, + {487, 487, 6: 487, 21: 487, 207: 487, 211: 487, 487, 218: 487, 487, 487, 487, 487, 487, 487, 231: 487, 233: 487, 487, 487, 237: 487, 487, 241: 487, 487, 487, 487, 347: 2480, 363: 2481, 2479, 545: 2485, 2482}, + {489, 489, 6: 489, 21: 489, 207: 489, 211: 489, 489, 218: 489, 489, 489, 489, 489, 489, 489, 231: 489, 233: 489, 489, 489, 237: 489, 489, 241: 489, 489, 489, 489, 347: 489, 363: 489, 489}, + {223: 2495, 237: 2494, 2496}, + {206: 2488}, + // 1135 + {2: 1540, 1463, 1464, 1496, 493, 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 493, 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2490, 1459, 1460, 1458, 522: 2489}, + {6: 2492, 21: 2491}, + {492, 492, 6: 492, 21: 492, 218: 492}, + {494, 494, 6: 494, 21: 494, 207: 494, 211: 494, 494, 218: 494, 494, 494, 494, 494, 494, 494, 231: 494, 233: 494, 494, 494, 237: 494, 494, 241: 494, 494, 494, 494, 347: 494, 363: 494, 494}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2493, 1459, 1460, 1458}, + // 1140 + {491, 491, 6: 491, 21: 491, 218: 491}, + {206: 497}, + {362: 2498}, + {362: 2497}, + {206: 495}, + // 1145 + {206: 496}, + {2: 1315, 1315, 1315, 1315, 7: 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 22: 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 221: 1315, 231: 1315}, + {2: 1314, 1314, 1314, 1314, 7: 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 22: 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 221: 1314, 231: 1314}, + {206: 499, 221: 499}, + {206: 500, 221: 500}, + // 1150 + {206: 501, 221: 501}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1852, 348: 1662, 1459, 1460, 1458, 429: 1851, 456: 1850, 1849, 2505}, + {211: 1871, 1872, 233: 1870, 237: 1873, 241: 1874, 1875, 1869, 2506, 465: 1868, 471: 1867}, + {512, 512, 6: 512, 21: 512, 207: 512, 218: 512, 512, 512, 512, 512, 512, 512, 234: 512, 512, 238: 512}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 2508, 519: 2509, 533: 2510}, + // 1155 + {232: 2523}, + {1287, 1287, 6: 1287, 222: 1287, 1287, 1287}, + {104, 104, 6: 2511, 222: 104, 104, 2513, 484: 2514, 2512}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 2508, 519: 2522}, + {753, 753, 222: 753, 2033, 466: 2034, 2516}, + // 1160 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2515}, + {103, 103, 21: 103, 207: 103, 218: 103, 103, 103, 103, 103, 103, 235: 103, 238: 103}, + {105, 105, 21: 105, 207: 105, 218: 105, 105, 105, 105, 105, 105, 225: 2014, 2012, 2013, 2011, 2009, 235: 105, 238: 105, 427: 2010, 2008}, + {470, 470, 222: 2517, 619: 2518}, + {240: 1448, 299: 2521, 432: 2259, 443: 2520, 524: 2519}, + // 1165 + {108, 108}, + {469, 469}, + {468, 468, 6: 468, 21: 468, 48: 468, 207: 468, 218: 468, 468, 468, 468}, + {467, 467, 6: 467, 21: 467, 48: 467, 207: 467, 218: 467, 467, 467, 467}, + {1286, 1286, 6: 1286, 222: 1286, 1286, 1286}, + // 1170 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2524}, + {1288, 1288, 6: 1288, 222: 1288, 1288, 1288, 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 2508, 519: 2509, 533: 2526}, + {104, 104, 6: 2511, 224: 2513, 484: 2514, 2527}, + {107, 107}, + // 1175 + {31: 2533, 2532, 2531, 2530, 481: 2549, 664: 2550}, + {31: 457, 457, 457, 457, 481: 457}, + {206: 2546}, + {206: 2543}, + {206: 2537}, + // 1180 + {206: 2534}, + {240: 1448, 432: 2535}, + {21: 2536}, + {31: 452, 452, 452, 452, 481: 452}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2538, 1459, 1460, 1458, 542: 2539}, + // 1185 + {6: 459, 21: 459}, + {6: 2540, 21: 2541}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2542, 1459, 1460, 1458}, + {31: 453, 453, 453, 453, 481: 453}, + {6: 458, 21: 458}, + // 1190 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2538, 1459, 1460, 1458, 542: 2544}, + {6: 2540, 21: 2545}, + {31: 454, 454, 454, 454, 481: 454}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2538, 1459, 1460, 1458, 542: 2547}, + {6: 2540, 21: 2548}, + // 1195 + {31: 455, 455, 455, 455, 481: 455}, + {2: 460, 460, 460, 460, 7: 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 22: 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 208: 460, 460, 211: 460, 460, 460, 460, 460, 460, 460, 230: 460, 233: 460, 236: 460, 240: 460, 246: 460, 460, 460, 282: 460, 286: 460, 460, 460, 460, 460, 292: 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 347: 460, 435: 460, 447: 460, 450: 460, 460, 460, 460: 460, 460}, + {31: 456, 456, 456, 456, 481: 456}, + {2: 204, 204, 204, 204, 7: 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 22: 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2553}, + // 1200 + {203, 203}, + {24: 2561, 2558, 45: 2560, 442: 2557, 665: 2562, 718: 2559}, + {24: 307, 307, 45: 307, 442: 307}, + {24: 306, 306, 45: 306, 442: 306}, + {1119, 1119, 1119, 1119, 1119, 1119, 7: 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 22: 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 218: 1119, 286: 1119}, + // 1205 + {1118, 1118, 1118, 1118, 1118, 1118, 7: 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 22: 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 218: 1118, 286: 1118}, + {312, 312}, + {311, 311}, + {310, 310}, + {305, 305, 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 218: 305, 348: 1662, 1459, 1460, 1458, 429: 2563, 468: 2564, 784: 2565}, + // 1210 + {538, 538, 6: 538, 218: 538, 230: 538, 366: 538, 538}, + {304, 304, 6: 2570, 218: 304}, + {303, 303, 218: 2567, 809: 2566}, + {309, 309}, + {369: 2568}, + // 1215 + {220: 2569}, + {302, 302}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2571}, + {537, 537, 6: 537, 218: 537, 230: 537, 537, 366: 537, 537}, + {323, 323, 224: 2622, 245: 2621, 516: 2646}, + // 1220 + {300: 2643, 442: 2642}, + {357, 357, 221: 2640}, + {24: 2639}, + {25: 2629, 27: 2630, 29: 2631, 63: 2628}, + {323, 323, 224: 2622, 245: 2621, 516: 2627}, + // 1225 + {323, 323, 224: 2622, 245: 2621, 516: 2626}, + {323, 323, 224: 2622, 245: 2621, 516: 2625}, + {323, 323, 224: 2622, 245: 2621, 516: 2620}, + {349, 349}, + {348, 348}, + // 1230 + {230: 347, 264: 347}, + {230: 346, 264: 346}, + {230: 345, 264: 345}, + {342, 342, 224: 342, 245: 342}, + {341, 341, 224: 341, 245: 341}, + // 1235 + {340, 340, 224: 340, 245: 340}, + {24: 2618}, + {230: 2603, 264: 2604, 462: 2613}, + {333, 333, 224: 333, 245: 333}, + {332, 332, 224: 332, 245: 332}, + // 1240 + {24: 2612, 58: 2611}, + {329, 329, 224: 329, 245: 329}, + {315, 315, 224: 315, 230: 2603, 245: 315, 264: 2604, 462: 2606, 498: 2610}, + {24: 2609}, + {24: 2608}, + // 1245 + {315, 315, 224: 315, 230: 2603, 245: 315, 264: 2604, 462: 2606, 498: 2605}, + {324, 324, 224: 324, 245: 324}, + {24: 319, 58: 319}, + {24: 318, 58: 318}, + {25: 316, 27: 316, 29: 316, 63: 316}, + // 1250 + {2: 344, 344, 344, 344, 7: 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 22: 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344}, + {2: 343, 343, 343, 343, 7: 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 22: 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, 343}, + {325, 325, 224: 325, 245: 325}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1835, 1459, 1460, 1458, 506: 2607}, + {314, 314, 224: 314, 245: 314}, + // 1255 + {326, 326, 224: 326, 245: 326}, + {327, 327, 224: 327, 245: 327}, + {328, 328, 224: 328, 245: 328}, + {331, 331, 224: 331, 245: 331}, + {330, 330, 224: 330, 245: 330}, + // 1260 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2614, 1459, 1460, 1458, 429: 2615}, + {540, 540, 224: 540, 230: 2603, 245: 540, 247: 1672, 264: 2604, 462: 2616}, + {337, 337, 224: 337, 245: 337}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2617, 1459, 1460, 1458}, + {336, 336, 224: 336, 245: 336}, + // 1265 + {315, 315, 224: 315, 230: 2603, 245: 315, 264: 2604, 462: 2606, 498: 2619}, + {338, 338, 224: 338, 245: 338}, + {350, 350}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 2112, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 2624, 1935, 1996, 1934}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2623}, + // 1270 + {321, 321, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {322, 322, 239: 2305, 346: 2306}, + {351, 351}, + {352, 352}, + {353, 353}, + // 1275 + {354, 354}, + {315, 315, 224: 315, 230: 2603, 245: 315, 264: 2604, 462: 2606, 498: 2638}, + {230: 2603, 264: 2604, 462: 2633, 655: 2636}, + {230: 2603, 264: 2604, 462: 2633, 655: 2632}, + {315, 315, 224: 315, 230: 2603, 245: 315, 264: 2604, 462: 2606, 498: 2635}, + // 1280 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2634}, + {313, 313, 224: 313, 230: 313, 245: 313, 264: 313}, + {334, 334, 224: 334, 245: 334}, + {315, 315, 224: 315, 230: 2603, 245: 315, 264: 2604, 462: 2606, 498: 2637}, + {335, 335, 224: 335, 245: 335}, + // 1285 + {339, 339, 224: 339, 245: 339}, + {355, 355}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 282: 1782, 348: 1691, 1459, 1460, 1458, 434: 1781, 459: 2641}, + {356, 356}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2645}, + // 1290 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1835, 1459, 1460, 1458, 506: 2644}, + {358, 358}, + {359, 359}, + {360, 360}, + {78: 2681, 151: 2682}, + // 1295 + {359: 2668, 442: 2667}, + {359: 2664}, + {359: 2661}, + {442: 2659}, + {78: 2653}, + // 1300 + {87: 2654}, + {240: 1448, 432: 2656, 628: 2655}, + {372, 372, 6: 2657}, + {362, 362, 6: 362}, + {240: 1448, 432: 2658}, + // 1305 + {361, 361, 6: 361}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2563, 468: 2660}, + {373, 373, 6: 2570}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2662}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2663, 1459, 1460, 1458}, + // 1310 + {375, 375}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2665}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2666, 1459, 1460, 1458}, + {376, 376}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2563, 468: 2680}, + // 1315 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2669}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2670, 1459, 1460, 1458}, + {377, 377, 206: 2673, 610: 2672, 723: 2671}, + {374, 374, 6: 2678}, + {365, 365, 6: 365}, + // 1320 + {240: 1448, 432: 2674}, + {6: 2675}, + {240: 1448, 432: 2676}, + {21: 2677}, + {363, 363, 6: 363}, + // 1325 + {206: 2673, 610: 2679}, + {364, 364, 6: 364}, + {378, 378, 6: 2570}, + {381, 381, 87: 2692, 126: 2693}, + {142: 2684, 162: 2685, 678: 2683}, + // 1330 + {370, 370}, + {240: 1448, 432: 2691}, + {124: 2687, 240: 1448, 432: 2686, 435: 2688}, + {368, 368}, + {240: 1448, 432: 2690}, + // 1335 + {240: 1448, 432: 2689}, + {366, 366}, + {367, 367}, + {369, 369}, + {380, 380, 240: 1448, 432: 2696}, + // 1340 + {141: 2694}, + {240: 1448, 432: 2656, 628: 2695}, + {371, 371, 6: 2657}, + {379, 379}, + {2: 115, 115, 115, 115, 7: 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 22: 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 208: 115, 232: 993, 248: 115}, + // 1345 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 2769, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 232: 966, 348: 2730, 1459, 1460, 1458}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 232: 962, 348: 2766, 1459, 1460, 1458}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 232: 961, 248: 1689, 348: 1691, 1459, 1460, 1458, 434: 1688, 469: 2762}, + {221: 2752, 232: 2751}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 2749, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 232: 954, 348: 2727, 1459, 1460, 1458}, + // 1350 + {52: 2735, 232: 940, 369: 2736, 530: 2734, 560: 2733}, + {427, 427, 6: 2723}, + {232: 2721}, + {232: 2715}, + {232: 2711, 532: 2712}, + // 1355 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 248: 1689, 348: 1691, 1459, 1460, 1458, 434: 1688, 469: 2710}, + {396, 396, 6: 396}, + {400, 400, 6: 400}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2714}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2713}, + // 1360 + {404, 404, 6: 404, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {405, 405, 6: 405, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 2718, 1924, 1882, 211: 1953, 1957, 2717, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2716, 489: 2719, 528: 2720}, + {784, 784, 6: 784, 21: 784, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {783, 783, 6: 783, 21: 783, 206: 2233}, + // 1365 + {412, 412, 6: 412}, + {411, 411, 6: 411}, + {406, 406, 6: 406}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 2718, 1924, 1882, 211: 1953, 1957, 2717, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2716, 489: 2719, 528: 2722}, + {410, 410, 6: 410}, + // 1370 + {2: 1540, 1463, 1464, 1496, 7: 2697, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 2699, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 2724, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 2725, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 2700, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 289: 2707, 304: 2706, 348: 2705, 1459, 1460, 1458, 353: 2275, 449: 2708, 676: 2726}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 232: 966, 348: 2730, 1459, 1460, 1458}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 232: 954, 348: 2727, 1459, 1460, 1458}, + {395, 395, 6: 395}, + {232: 2728}, + // 1375 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 2718, 1924, 1882, 211: 1953, 1957, 2717, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2716, 489: 2719, 528: 2729}, + {408, 408, 6: 408}, + {232: 2731}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 2718, 1924, 1882, 211: 1953, 1957, 2717, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2716, 489: 2719, 528: 2732}, + {409, 409, 6: 409}, + // 1380 + {422, 422, 6: 2747}, + {421, 421, 6: 421}, + {128: 2739}, + {138: 2738, 405: 2737}, + {418, 418, 6: 418}, + // 1385 + {417, 417, 6: 417}, + {144: 2741, 146: 2743, 369: 2742, 729: 2740}, + {419, 419, 6: 419}, + {369: 2746}, + {110: 2744, 165: 2745}, + // 1390 + {413, 413, 6: 413}, + {415, 415, 6: 415}, + {414, 414, 6: 414}, + {416, 416, 6: 416}, + {52: 2735, 369: 2736, 530: 2748}, + // 1395 + {420, 420, 6: 420}, + {52: 2735, 232: 940, 369: 2736, 530: 2734, 560: 2750}, + {423, 423, 6: 2747}, + {11: 2757, 208: 2756, 642: 2761}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 282: 1782, 348: 1691, 1459, 1460, 1458, 434: 1781, 459: 2753}, + // 1400 + {232: 2754}, + {11: 2757, 208: 2756, 642: 2755}, + {425, 425}, + {384, 384}, + {206: 2758}, + // 1405 + {208: 1797, 520: 2759}, + {21: 2760}, + {383, 383}, + {426, 426}, + {403, 403, 6: 403, 239: 2763}, + // 1410 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 213: 2764, 348: 1691, 1459, 1460, 1458, 434: 2765}, + {402, 402, 6: 402}, + {401, 401, 6: 401}, + {232: 2767}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2768}, + // 1415 + {407, 407, 6: 407, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {52: 2735, 232: 940, 369: 2736, 530: 2734, 560: 2770}, + {424, 424, 6: 2747}, + {206: 697, 352: 697, 435: 2002, 460: 2000, 2001, 473: 2772, 478: 2773, 704: 2775, 793: 2774}, + {2: 700, 700, 700, 700, 7: 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 22: 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 208: 700, 700, 211: 700, 700, 700, 700, 700, 700, 700, 233: 700, 236: 700, 240: 700, 246: 700, 700, 700, 282: 700, 286: 700, 700, 700, 700, 700, 292: 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 352: 700, 447: 700, 450: 700, 700, 700}, + // 1420 + {206: 696, 352: 696}, + {206: 2779, 352: 1379, 437: 2781, 2776, 2777, 2778, 444: 2780}, + {206: 428, 352: 428}, + {753, 753, 21: 753, 207: 753, 219: 753, 753, 753, 753, 2033, 230: 2804, 466: 2034, 2805, 605: 2803}, + {466, 466, 21: 466, 207: 466, 219: 466, 466, 466, 2785, 483: 2801}, + // 1425 + {753, 753, 21: 753, 207: 753, 219: 753, 753, 753, 753, 2033, 466: 2034, 2792}, + {352: 1379, 437: 2782, 1380, 1381, 1382}, + {219: 431}, + {219: 430}, + {21: 2783}, + // 1430 + {753, 753, 21: 753, 207: 753, 219: 429, 222: 753, 2033, 466: 2034, 2784}, + {466, 466, 21: 466, 207: 466, 222: 2785, 483: 2786}, + {240: 1448, 299: 2521, 432: 2259, 443: 2520, 524: 2787}, + {433, 433, 21: 433, 207: 433}, + {465, 465, 6: 2788, 21: 465, 48: 2789, 207: 465, 218: 465, 465, 465, 465}, + // 1435 + {240: 1448, 299: 2521, 432: 2259, 443: 2520, 524: 2791}, + {240: 1448, 299: 2521, 432: 2259, 443: 2520, 524: 2790}, + {463, 463, 21: 463, 207: 463, 218: 463, 463, 463, 463}, + {464, 464, 21: 464, 207: 464, 218: 464, 464, 464, 464}, + {466, 466, 21: 466, 207: 466, 219: 466, 466, 466, 2785, 483: 2793}, + // 1440 + {439, 439, 21: 439, 207: 439, 219: 439, 2796, 2795, 496: 2794}, + {434, 434, 21: 434, 207: 434, 219: 518}, + {448: 2800}, + {264: 2797}, + {148: 2798}, + // 1445 + {135: 2799}, + {437, 437, 21: 437, 207: 437, 218: 437, 437}, + {438, 438, 21: 438, 207: 438, 218: 438, 438}, + {439, 439, 21: 439, 207: 439, 219: 439, 2796, 2795, 496: 2802}, + {435, 435, 21: 435, 207: 435, 219: 519}, + // 1450 + {104, 104, 21: 104, 207: 104, 218: 104, 104, 104, 104, 104, 104, 2513, 484: 2514, 2820}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1852, 288: 1848, 348: 1662, 1459, 1460, 1458, 429: 1851, 456: 1850, 1849, 1854, 480: 1845, 500: 2810, 706: 2809, 786: 2808}, + {466, 466, 21: 466, 207: 466, 219: 466, 466, 466, 2785, 483: 2806}, + {439, 439, 21: 439, 207: 439, 219: 439, 2796, 2795, 496: 2807}, + {436, 436, 21: 436, 207: 436, 219: 520}, + // 1455 + {104, 104, 21: 104, 207: 104, 218: 104, 104, 104, 104, 104, 104, 2513, 235: 104, 238: 104, 484: 2514, 2811}, + {517, 517, 21: 517, 207: 517, 218: 517, 517, 517, 517, 517, 517, 517}, + {516, 516, 6: 2473, 21: 516, 207: 516, 218: 516, 516, 516, 516, 516, 516, 516, 235: 516, 238: 516}, + {443, 443, 21: 443, 207: 443, 218: 443, 443, 443, 443, 443, 443, 235: 443, 238: 2812, 722: 2814, 767: 2813}, + {362: 2818}, + // 1460 + {1029, 1029, 21: 1029, 207: 1029, 218: 1029, 1029, 1029, 1029, 1029, 1029, 235: 2815, 724: 2816}, + {442, 442, 21: 442, 207: 442, 218: 442, 442, 442, 442, 442, 442, 235: 442}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2817}, + {521, 521, 21: 521, 207: 521, 218: 521, 521, 521, 521, 521, 521}, + {1028, 1028, 21: 1028, 207: 1028, 218: 1028, 1028, 1028, 1028, 1028, 1028, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + // 1465 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2041, 534: 2043, 572: 2819}, + {1030, 1030, 6: 2044, 21: 1030, 207: 1030, 218: 1030, 1030, 1030, 1030, 1030, 1030, 235: 1030}, + {753, 753, 21: 753, 207: 753, 218: 753, 753, 753, 753, 753, 2033, 466: 2034, 2821}, + {522, 522, 21: 522, 207: 522, 218: 522, 522, 522, 522, 522}, + {466, 466, 21: 466, 207: 466, 218: 466, 466, 466, 466, 2785, 483: 2823}, + // 1470 + {439, 439, 21: 439, 207: 439, 218: 439, 439, 2796, 2795, 496: 2824}, + {518, 518, 21: 518, 207: 518, 218: 518, 518}, + {439, 439, 21: 439, 207: 439, 218: 439, 439, 2796, 2795, 496: 2826}, + {519, 519, 21: 519, 207: 519, 218: 519, 519}, + {466, 466, 21: 466, 207: 466, 218: 466, 466, 466, 466, 2785, 483: 2828}, + // 1475 + {439, 439, 21: 439, 207: 439, 218: 439, 439, 2796, 2795, 496: 2829}, + {520, 520, 21: 520, 207: 520, 218: 520, 520}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 246: 2842, 1927, 1944, 282: 1958, 286: 1951, 1973, 2844, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 2843, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2841, 601: 2845, 712: 2846, 766: 2847}, + {2: 699, 699, 699, 699, 7: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 22: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 208: 699, 699, 211: 699, 699, 699, 699, 699, 699, 699, 233: 699, 236: 699, 240: 699, 246: 699, 699, 699, 282: 699, 286: 699, 699, 699, 699, 699, 292: 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, 435: 2002, 447: 699, 450: 699, 699, 699, 460: 2000, 2001, 473: 2772, 478: 2004, 487: 2832}, + {2: 544, 544, 544, 544, 7: 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 22: 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 208: 544, 544, 211: 544, 544, 544, 544, 544, 544, 544, 233: 544, 236: 544, 240: 544, 246: 544, 544, 544, 282: 544, 286: 544, 544, 544, 544, 544, 292: 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 447: 544, 450: 1841, 1840, 1839, 515: 2833}, + // 1480 + {2: 449, 449, 449, 449, 7: 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 22: 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 2835, 2836, 449, 449, 449, 449, 449, 449, 449, 208: 449, 449, 211: 449, 449, 449, 449, 449, 449, 449, 233: 449, 236: 449, 240: 449, 246: 449, 449, 449, 282: 449, 286: 449, 449, 449, 449, 449, 292: 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 447: 449, 769: 2834}, + {2: 451, 451, 451, 451, 7: 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 22: 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 208: 451, 451, 211: 451, 451, 451, 451, 451, 451, 451, 233: 451, 236: 451, 240: 451, 246: 451, 451, 451, 282: 451, 286: 451, 451, 451, 451, 451, 292: 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 451, 447: 2838, 765: 2837}, + {2: 448, 448, 448, 448, 7: 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 22: 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 208: 448, 448, 211: 448, 448, 448, 448, 448, 448, 448, 233: 448, 236: 448, 240: 448, 246: 448, 448, 448, 282: 448, 286: 448, 448, 448, 448, 448, 292: 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, 447: 448}, + {2: 447, 447, 447, 447, 7: 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 22: 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 208: 447, 447, 211: 447, 447, 447, 447, 447, 447, 447, 233: 447, 236: 447, 240: 447, 246: 447, 447, 447, 282: 447, 286: 447, 447, 447, 447, 447, 292: 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447: 447}, + {2: 446, 446, 446, 446, 7: 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 22: 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 208: 446, 446, 211: 446, 446, 446, 446, 446, 446, 446, 233: 2840, 236: 446, 240: 446, 246: 446, 446, 446, 282: 446, 286: 446, 446, 446, 446, 446, 292: 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 770: 2839}, + // 1485 + {2: 450, 450, 450, 450, 7: 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 22: 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 208: 450, 450, 211: 450, 450, 450, 450, 450, 450, 450, 233: 450, 236: 450, 240: 450, 246: 450, 450, 450, 282: 450, 286: 450, 450, 450, 450, 450, 292: 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450}, + {2: 462, 462, 462, 462, 7: 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 22: 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 208: 462, 462, 211: 462, 462, 462, 462, 462, 462, 462, 236: 462, 240: 462, 246: 462, 462, 462, 282: 462, 286: 462, 462, 462, 462, 462, 292: 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462}, + {2: 445, 445, 445, 445, 7: 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 22: 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 208: 445, 445, 211: 445, 445, 445, 445, 445, 445, 445, 236: 445, 240: 445, 246: 445, 445, 445, 282: 445, 286: 445, 445, 445, 445, 445, 292: 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445}, + {1038, 1038, 1540, 1463, 1464, 1496, 1038, 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 1038, 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 207: 1038, 2857, 210: 2856, 218: 1038, 1038, 1038, 1038, 1038, 1038, 225: 2014, 2012, 2013, 2011, 2009, 1038, 348: 2855, 1459, 1460, 1458, 427: 2010, 2008, 602: 2854, 2865}, + {1043, 1043, 6: 1043, 21: 1043, 207: 1043, 218: 1043, 1043, 1043, 1043, 1043, 1043, 230: 1043}, + // 1490 + {736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 207: 736, 736, 736, 736, 214: 736, 736, 736, 218: 736, 736, 736, 736, 736, 736, 225: 736, 736, 736, 736, 736, 736, 232: 736, 239: 736, 245: 736, 736, 2860, 264: 736, 266: 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 736, 283: 736, 736, 736, 346: 736, 357: 736, 736}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2850, 1459, 1460, 1458, 631: 2198, 2195, 2197, 2196}, + {1032, 1032, 6: 1032, 21: 1032, 207: 1032, 218: 1032, 1032, 1032, 1032, 1032, 1032, 230: 1032}, + {444, 444, 6: 2848, 21: 444, 207: 444, 218: 444, 444, 444, 444, 444, 444, 230: 444}, + {523, 523, 21: 523, 207: 523, 218: 523, 523, 523, 523, 523, 523, 230: 523}, + // 1495 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 246: 2842, 1927, 1944, 282: 1958, 286: 1951, 1973, 2844, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 2843, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2841, 601: 2849}, + {1031, 1031, 6: 1031, 21: 1031, 207: 1031, 218: 1031, 1031, 1031, 1031, 1031, 1031, 230: 1031}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2851}, + {225: 2014, 2012, 2013, 2011, 2009, 244: 2852, 427: 2010, 2008}, + {1038, 1038, 1540, 1463, 1464, 1496, 1038, 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 1038, 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 207: 1038, 2857, 210: 2856, 218: 1038, 1038, 1038, 1038, 1038, 1038, 230: 1038, 348: 2855, 1459, 1460, 1458, 602: 2854, 2853}, + // 1500 + {1039, 1039, 6: 1039, 21: 1039, 207: 1039, 218: 1039, 1039, 1039, 1039, 1039, 1039, 230: 1039}, + {1037, 1037, 6: 1037, 21: 1037, 207: 1037, 218: 1037, 1037, 1037, 1037, 1037, 1037, 230: 1037}, + {1036, 1036, 6: 1036, 21: 1036, 207: 1036, 218: 1036, 1036, 1036, 1036, 1036, 1036, 230: 1036}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 2859, 348: 2858, 1459, 1460, 1458}, + {1034, 1034, 6: 1034, 21: 1034, 207: 1034, 218: 1034, 1034, 1034, 1034, 1034, 1034, 230: 1034}, + // 1505 + {1035, 1035, 6: 1035, 21: 1035, 207: 1035, 218: 1035, 1035, 1035, 1035, 1035, 1035, 230: 1035}, + {1033, 1033, 6: 1033, 21: 1033, 207: 1033, 218: 1033, 1033, 1033, 1033, 1033, 1033, 230: 1033}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 246: 2861, 348: 2862, 1459, 1460, 1458}, + {1042, 1042, 6: 1042, 21: 1042, 207: 1042, 218: 1042, 1042, 1042, 1042, 1042, 1042, 230: 1042}, + {735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 207: 735, 735, 735, 735, 214: 735, 735, 735, 218: 735, 735, 735, 735, 735, 735, 225: 735, 735, 735, 735, 735, 735, 232: 735, 239: 735, 245: 735, 735, 2863, 264: 735, 266: 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, 283: 735, 735, 735, 346: 735, 357: 735, 735}, + // 1510 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 246: 2864, 348: 2342, 1459, 1460, 1458}, + {1041, 1041, 6: 1041, 21: 1041, 207: 1041, 218: 1041, 1041, 1041, 1041, 1041, 1041, 230: 1041}, + {1040, 1040, 6: 1040, 21: 1040, 207: 1040, 218: 1040, 1040, 1040, 1040, 1040, 1040, 230: 1040}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2867, 1459, 1460, 1458}, + {527, 527}, + // 1515 + {531, 531, 231: 2869}, + {289: 2112, 407: 2871, 794: 2870}, + {530, 530, 6: 2872}, + {529, 529, 6: 529}, + {289: 2112, 407: 2873}, + // 1520 + {528, 528, 6: 528}, + {230: 2875}, + {208: 2877, 289: 2112, 407: 2878, 760: 2876}, + {534, 534}, + {533, 533}, + // 1525 + {532, 532}, + {2: 804, 804, 804, 804, 7: 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 22: 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 463: 2880, 615: 2881}, + {2: 803, 803, 803, 803, 7: 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 22: 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803, 803}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2882}, + {69: 2888, 206: 2883, 234: 2887, 292: 2889, 352: 1379, 437: 2885, 1380, 1381, 1382, 444: 1385, 1384, 2886, 563: 2884, 614: 2890}, + // 1530 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 1271, 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 1379, 433: 1726, 437: 2910, 1380, 1381, 1382, 470: 1727, 574: 2909}, + {206: 2900, 557: 2899, 675: 2898}, + {796, 796, 207: 796, 219: 430}, + {795, 795, 207: 795}, + {781, 781, 1540, 1463, 1464, 1496, 781, 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 207: 781, 348: 1725, 1459, 1460, 1458, 433: 2892, 576: 2893, 695: 2891}, + // 1535 + {206: 793}, + {206: 792}, + {776, 776}, + {794, 794, 6: 2896, 207: 794}, + {232: 2894}, + // 1540 + {780, 780, 6: 780, 207: 780}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2895}, + {782, 782, 6: 782, 207: 782, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 2892, 576: 2897}, + {779, 779, 6: 779, 207: 779}, + // 1545 + {798, 798, 6: 2907, 207: 798}, + {791, 791, 6: 791, 207: 791}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 788, 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 2717, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2716, 489: 2903, 795: 2902, 2901}, + {21: 2906}, + {6: 2904, 21: 787}, + // 1550 + {6: 785, 21: 785}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 2717, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 2716, 489: 2905}, + {6: 786, 21: 786}, + {789, 789, 6: 789, 207: 789}, + {206: 2900, 557: 2908}, + // 1555 + {790, 790, 6: 790, 207: 790}, + {21: 2912}, + {21: 2911}, + {797, 797, 207: 797, 219: 429}, + {69: 2888, 206: 2915, 292: 2889, 352: 1379, 437: 2914, 1380, 1381, 1382, 444: 1385, 1384, 2916, 563: 2913}, + // 1560 + {206: 2900, 557: 2899, 675: 2919}, + {801, 801, 207: 801, 219: 430}, + {352: 1379, 437: 2917, 1380, 1381, 1382}, + {799, 799, 207: 799}, + {21: 2918}, + // 1565 + {800, 800, 207: 800, 219: 429}, + {802, 802, 6: 2907, 207: 802}, + {2: 1023, 1023, 1023, 1023, 7: 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 22: 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 347: 1843, 463: 1023, 521: 2921}, + {2: 804, 804, 804, 804, 7: 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 22: 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, 463: 2880, 615: 2922}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2923}, + // 1570 + {69: 2888, 206: 2883, 234: 2887, 292: 2889, 352: 1379, 437: 2885, 1380, 1381, 1382, 444: 1385, 1384, 2886, 563: 2884, 614: 2924}, + {778, 778, 207: 2926, 747: 2925}, + {805, 805}, + {113: 2927}, + {291: 2928}, + // 1575 + {448: 2929}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 2508, 519: 2509, 533: 2930}, + {777, 777, 6: 2511}, + {1110, 1110, 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 2945}, + {1108, 1108}, + // 1580 + {968, 968, 968, 968, 968, 968, 7: 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 22: 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 232: 2942, 247: 968}, + {206: 2313, 236: 1373, 287: 1372, 352: 1379, 437: 2935, 1380, 1381, 1382, 444: 1385, 1384, 2940, 448: 1438, 454: 1365, 488: 2936, 491: 2938, 494: 2939, 502: 2937, 539: 2941}, + {249, 249, 219: 430}, + {248, 248}, + {247, 247}, + // 1585 + {246, 246}, + {245, 245}, + {244, 244}, + {1106, 1106}, + {208: 2943}, + // 1590 + {206: 2313, 236: 1373, 287: 1372, 352: 1379, 437: 2935, 1380, 1381, 1382, 444: 1385, 1384, 2940, 448: 1438, 454: 1365, 488: 2936, 491: 2938, 494: 2939, 502: 2937, 539: 2944}, + {1107, 1107}, + {1109, 1109}, + {1114, 1114}, + {255, 255, 219: 430}, + // 1595 + {254, 254}, + {253, 253}, + {252, 252}, + {251, 251}, + {250, 250}, + // 1600 + {2: 1131, 1131, 1131, 1131, 7: 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 22: 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 286: 1131}, + {2: 1027, 1027, 1027, 1027, 7: 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 22: 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 286: 2980, 543: 2985}, + {2: 1027, 1027, 1027, 1027, 7: 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 22: 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 286: 2980, 543: 2979}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 286: 2972, 348: 1662, 1459, 1460, 1458, 429: 2563, 468: 2971}, + {286: 2968}, + // 1605 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 282: 1782, 286: 2962, 348: 1691, 1459, 1460, 1458, 434: 1781, 459: 2963, 673: 2961}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2960}, + {1123, 1123}, + {1125, 1125, 6: 2966}, + {293: 2964}, + // 1610 + {386, 386, 6: 386}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 282: 1782, 348: 1691, 1459, 1460, 1458, 434: 1781, 459: 2963, 673: 2965}, + {1124, 1124, 6: 2966}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 282: 1782, 348: 1691, 1459, 1460, 1458, 434: 1781, 459: 2967}, + {385, 385, 6: 385}, + // 1615 + {293: 2969}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2563, 468: 2970}, + {1126, 1126, 6: 2570}, + {1122, 1122, 6: 2570, 366: 2977, 2976, 556: 2978}, + {293: 2973}, + // 1620 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2563, 468: 2974}, + {1122, 1122, 6: 2570, 366: 2977, 2976, 556: 2975}, + {1127, 1127}, + {1121, 1121, 6: 1121}, + {1120, 1120, 6: 1120}, + // 1625 + {1128, 1128}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 2982, 1459, 1460, 1458}, + {293: 2981}, + {2: 1026, 1026, 1026, 1026, 7: 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 22: 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 208: 1026, 282: 1026}, + {207: 2983}, + // 1630 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2984}, + {1129, 1129}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1835, 1459, 1460, 1458, 506: 2986}, + {1130, 1130}, + {2: 544, 544, 544, 544, 7: 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 22: 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 230: 544, 347: 544, 450: 1841, 1840, 1839, 515: 2988}, + // 1635 + {2: 536, 536, 536, 536, 7: 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 22: 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 2990, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 230: 536, 347: 536, 762: 2989}, + {2: 1023, 1023, 1023, 1023, 7: 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 22: 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 230: 1023, 347: 1843, 521: 2991}, + {2: 535, 535, 535, 535, 7: 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 22: 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 230: 535, 347: 535}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 230: 2992, 348: 1662, 1459, 1460, 1458, 429: 2563, 468: 2993}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 2997, 468: 2998}, + // 1640 + {6: 2570, 230: 2994}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1852, 288: 1848, 348: 1662, 1459, 1460, 1458, 429: 1851, 456: 1850, 1849, 1854, 480: 1845, 500: 2995}, + {104, 104, 6: 2473, 224: 2513, 484: 2514, 2996}, + {1133, 1133}, + {488, 488, 6: 538, 222: 488, 488, 488, 231: 538, 347: 2480, 363: 2481, 2479, 545: 2483, 2482, 612: 2484, 3002}, + // 1645 + {6: 2570, 231: 2999}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1852, 288: 1848, 348: 1662, 1459, 1460, 1458, 429: 1851, 456: 1850, 1849, 1854, 480: 1845, 500: 3000}, + {104, 104, 6: 2473, 224: 2513, 484: 2514, 3001}, + {1132, 1132}, + {104, 104, 222: 104, 104, 2513, 484: 2514, 3003}, + // 1650 + {753, 753, 222: 753, 2033, 466: 2034, 3004}, + {470, 470, 222: 2517, 619: 3005}, + {1134, 1134}, + {1135, 1135, 6: 2032}, + {359: 3492}, + // 1655 + {359: 1209}, + {2: 1025, 1025, 1025, 1025, 7: 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 22: 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 286: 3014, 544: 3479}, + {2: 1025, 1025, 1025, 1025, 7: 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 22: 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 286: 3014, 544: 3055}, + {22: 1152, 28: 1152, 46: 3021, 361: 1152, 799: 3020}, + {236: 3019}, + // 1660 + {2: 1025, 1025, 1025, 1025, 7: 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 22: 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 208: 1025, 282: 1025, 286: 3014, 544: 3015}, + {209: 3017}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 282: 1782, 348: 1691, 1459, 1460, 1458, 434: 1781, 459: 1783, 518: 1784, 531: 3016}, + {100, 100, 6: 1786}, + {293: 3018}, + // 1665 + {2: 1024, 1024, 1024, 1024, 7: 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 22: 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 208: 1024, 282: 1024}, + {22: 1153, 28: 1153, 46: 1153, 361: 1153}, + {22: 1148, 28: 3027, 361: 1148, 801: 3026}, + {232: 3022}, + {134: 3024, 158: 3025, 166: 3023}, + // 1670 + {22: 1151, 28: 1151, 361: 1151}, + {22: 1150, 28: 1150, 361: 1150}, + {22: 1149, 28: 1149, 361: 1149}, + {22: 1146, 361: 3031, 804: 3030}, + {232: 3028}, + // 1675 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 282: 1782, 348: 1691, 1459, 1460, 1458, 434: 1781, 459: 3029}, + {22: 1147, 361: 1147}, + {22: 3035}, + {145: 3032}, + {28: 3033, 125: 3034}, + // 1680 + {22: 1145}, + {22: 1144}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 3037, 803: 3036}, + {206: 3039, 210: 1142, 802: 3038}, + {206: 1143, 210: 1143}, + // 1685 + {210: 3045}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3041, 1459, 1460, 1458, 691: 3040}, + {6: 3043, 21: 3042}, + {6: 1140, 21: 1140}, + {210: 1141}, + // 1690 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3044, 1459, 1460, 1458}, + {6: 1139, 21: 1139}, + {352: 1379, 437: 3046, 1380, 1381, 1382}, + {1138, 1138, 218: 3048, 800: 3047}, + {1155, 1155}, + // 1695 + {53: 3050, 106: 3049}, + {343: 3053}, + {343: 3051}, + {525: 3052}, + {1136, 1136}, + // 1700 + {525: 3054}, + {1137, 1137}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 3056}, + {235, 235, 235, 235, 7: 235, 235, 235, 235, 235, 13: 235, 235, 235, 235, 235, 235, 235, 235, 206: 3060, 210: 235, 213: 235, 236: 235, 239: 235, 245: 3059, 347: 235, 352: 235, 235, 235, 235, 235, 735: 3058, 782: 3057}, + {210, 210, 3326, 3325, 7: 1195, 3332, 3323, 3328, 3330, 13: 3329, 3327, 3331, 3335, 3333, 3334, 3342, 3337, 206: 210, 210: 210, 213: 3322, 236: 210, 239: 1195, 347: 210, 352: 210, 1195, 210, 3339, 3338, 472: 3324, 495: 3336, 499: 3341, 559: 3340, 699: 3321}, + // 1705 + {1196, 1196}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 3320}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 245: 3063, 291: 1302, 341: 1302, 1302, 3067, 348: 1725, 1459, 1460, 1458, 359: 1302, 372: 1302, 1302, 433: 3062, 477: 3065, 536: 3066, 3061, 3064, 662: 3068, 781: 3069}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 291: 1301, 341: 1301, 1301, 348: 3319, 1459, 1460, 1458, 359: 1301, 372: 1301, 1301, 661: 3318}, + {35: 3208, 50: 3205, 3204, 56: 3207, 61: 3192, 96: 3206, 101: 3182, 3176, 3175, 115: 3190, 136: 3184, 159: 3200, 234: 3191, 248: 3186, 290: 154, 374: 3177, 3173, 3167, 378: 3193, 381: 3174, 3196, 384: 3181, 3179, 3168, 3169, 3170, 3171, 3172, 3203, 3198, 3202, 3197, 3166, 3201, 3178, 3194, 3180, 3165, 3195, 3164, 3199, 3187, 685: 3163, 3188, 3160, 703: 3158, 716: 3161, 3162, 728: 3159, 742: 3183, 745: 3156, 778: 3157, 788: 3189, 792: 3155, 797: 3185}, + // 1710 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 3153}, + {291: 2499, 341: 3076, 3079, 359: 2500, 372: 3080, 3077, 475: 3078, 697: 3081}, + {6: 240, 21: 240}, + {6: 239, 21: 239}, + {206: 3073}, + // 1715 + {6: 237, 21: 237}, + {6: 3070, 21: 3071}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 291: 1302, 341: 1302, 1302, 3067, 348: 1725, 1459, 1460, 1458, 359: 1302, 372: 1302, 1302, 433: 3062, 477: 3065, 536: 3066, 3061, 3064, 662: 3072}, + {234, 234, 234, 234, 7: 234, 234, 234, 234, 234, 13: 234, 234, 234, 234, 234, 234, 234, 234, 206: 234, 210: 234, 213: 234, 236: 234, 239: 234, 347: 234, 352: 234, 234, 234, 234, 234}, + {6: 236, 21: 236}, + // 1720 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 3074}, + {21: 3075, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {6: 238, 21: 238}, + {291: 3146}, + {291: 2499, 359: 2500, 475: 3140}, + // 1725 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1021, 231: 1021, 348: 3084, 1459, 1460, 1458, 511: 3134}, + {2: 1313, 1313, 1313, 1313, 7: 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 22: 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 231: 1313, 291: 2499, 359: 2500, 475: 3114, 731: 3115}, + {291: 3082}, + {241, 241, 6: 241, 21: 241}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1021, 348: 3084, 1459, 1460, 1458, 511: 3083}, + // 1730 + {206: 3085}, + {206: 1020, 231: 1020}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3087, 474: 3088, 482: 3086}, + {6: 3092, 21: 3091}, + {6: 134, 21: 134, 206: 2257, 249: 134, 134, 441: 2258, 453: 3089}, + // 1735 + {6: 1207, 21: 1207}, + {6: 756, 21: 756, 249: 2048, 2047, 637: 3090}, + {6: 1208, 21: 1208}, + {344: 3095, 555: 3094}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3087, 474: 3093}, + // 1740 + {6: 1206, 21: 1206}, + {1239, 1239, 6: 1239, 21: 1239}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 3096}, + {206: 3097}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3087, 474: 3088, 482: 3098}, + // 1745 + {6: 3092, 21: 3099}, + {1237, 1237, 1237, 1237, 1237, 1237, 1237, 21: 1237, 207: 3101, 209: 1237, 1237, 213: 1237, 217: 1237, 291: 1237, 341: 1237, 1237, 1237, 1237, 1237, 746: 3100}, + {1235, 1235, 1235, 1235, 1235, 1235, 1235, 21: 1235, 207: 3111, 209: 1235, 1235, 213: 1235, 217: 1235, 291: 1235, 341: 1235, 1235, 1235, 1235, 1235, 748: 3110}, + {454: 3102}, + {89: 3107, 234: 3106, 366: 3105, 3104, 647: 3103}, + // 1750 + {1236, 1236, 1236, 1236, 1236, 1236, 1236, 21: 1236, 207: 1236, 209: 1236, 1236, 213: 1236, 217: 1236, 291: 1236, 341: 1236, 1236, 1236, 1236, 1236}, + {1233, 1233, 1233, 1233, 1233, 1233, 1233, 21: 1233, 207: 1233, 209: 1233, 1233, 213: 1233, 217: 1233, 291: 1233, 341: 1233, 1233, 1233, 1233, 1233}, + {1232, 1232, 1232, 1232, 1232, 1232, 1232, 21: 1232, 207: 1232, 209: 1232, 1232, 213: 1232, 217: 1232, 291: 1232, 341: 1232, 1232, 1232, 1232, 1232}, + {217: 3109}, + {99: 3108}, + // 1755 + {1230, 1230, 1230, 1230, 1230, 1230, 1230, 21: 1230, 207: 1230, 209: 1230, 1230, 213: 1230, 217: 1230, 291: 1230, 341: 1230, 1230, 1230, 1230, 1230}, + {1231, 1231, 1231, 1231, 1231, 1231, 1231, 21: 1231, 207: 1231, 209: 1231, 1231, 213: 1231, 217: 1231, 291: 1231, 341: 1231, 1231, 1231, 1231, 1231}, + {1238, 1238, 1238, 1238, 1238, 1238, 1238, 21: 1238, 207: 1238, 209: 1238, 1238, 213: 1238, 217: 1238, 291: 1238, 341: 1238, 1238, 1238, 1238, 1238}, + {448: 3112}, + {89: 3107, 234: 3106, 366: 3105, 3104, 647: 3113}, + // 1760 + {1234, 1234, 1234, 1234, 1234, 1234, 1234, 21: 1234, 207: 1234, 209: 1234, 1234, 213: 1234, 217: 1234, 291: 1234, 341: 1234, 1234, 1234, 1234, 1234}, + {2: 1312, 1312, 1312, 1312, 7: 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 22: 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 231: 1312}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1021, 231: 1021, 348: 3084, 1459, 1460, 1458, 511: 3116}, + {206: 1012, 231: 3118, 464: 3119, 523: 3117}, + {206: 3122}, + // 1765 + {60: 3121, 104: 3120}, + {206: 1011, 1011}, + {1014, 1014, 1014, 6: 1014, 8: 1014, 21: 1014, 206: 1014, 1014, 220: 1014, 231: 1014}, + {1013, 1013, 1013, 6: 1013, 8: 1013, 21: 1013, 206: 1013, 1013, 220: 1013, 231: 1013}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3087, 474: 3088, 482: 3123}, + // 1770 + {6: 3092, 21: 3124}, + {1019, 1019, 1019, 6: 1019, 8: 1019, 21: 1019, 231: 1019, 513: 3125}, + {1240, 1240, 3129, 6: 1240, 8: 3127, 21: 1240, 231: 3118, 464: 3128, 512: 3126}, + {1018, 1018, 1018, 6: 1018, 8: 1018, 21: 1018, 220: 1018, 231: 1018}, + {232: 3131, 240: 1117, 436: 3132}, + // 1775 + {1016, 1016, 1016, 6: 1016, 8: 1016, 21: 1016, 220: 1016, 231: 1016}, + {208: 3130}, + {1015, 1015, 1015, 6: 1015, 8: 1015, 21: 1015, 220: 1015, 231: 1015}, + {2: 1116, 1116, 1116, 1116, 7: 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 22: 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 208: 1116, 213: 1116, 240: 1116, 248: 1116}, + {240: 1448, 432: 2259, 443: 3133}, + // 1780 + {1017, 1017, 1017, 6: 1017, 8: 1017, 21: 1017, 220: 1017, 231: 1017}, + {206: 1012, 231: 3118, 464: 3119, 523: 3135}, + {206: 3136}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3087, 474: 3088, 482: 3137}, + {6: 3092, 21: 3138}, + // 1785 + {1019, 1019, 1019, 6: 1019, 8: 1019, 21: 1019, 231: 1019, 513: 3139}, + {1241, 1241, 3129, 6: 1241, 8: 3127, 21: 1241, 231: 3118, 464: 3128, 512: 3126}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1021, 348: 3084, 1459, 1460, 1458, 511: 3141}, + {206: 3142}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3087, 474: 3088, 482: 3143}, + // 1790 + {6: 3092, 21: 3144}, + {1019, 1019, 1019, 6: 1019, 8: 1019, 21: 1019, 231: 1019, 513: 3145}, + {1242, 1242, 3129, 6: 1242, 8: 3127, 21: 1242, 231: 3118, 464: 3128, 512: 3126}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 1021, 231: 1021, 348: 3084, 1459, 1460, 1458, 511: 3147}, + {206: 1012, 231: 3118, 464: 3119, 523: 3148}, + // 1795 + {206: 3149}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3087, 474: 3088, 482: 3150}, + {6: 3092, 21: 3151}, + {1019, 1019, 1019, 6: 1019, 8: 1019, 21: 1019, 231: 1019, 513: 3152}, + {1243, 1243, 3129, 6: 1243, 8: 3127, 21: 1243, 231: 3118, 464: 3128, 512: 3126}, + // 1800 + {21: 3154}, + {1156, 1156}, + {1245, 1245, 3272, 3267, 1245, 1245, 1245, 21: 1245, 207: 3271, 209: 3265, 1252, 213: 3270, 217: 3266, 291: 1266, 341: 3264, 3269, 3273, 3095, 3276, 555: 3275, 575: 3277, 608: 3274, 644: 3268, 693: 3278, 3263}, + {196, 196, 196, 196, 196, 196, 196, 21: 196, 207: 196, 209: 196, 196, 213: 196, 217: 196, 291: 196, 341: 196, 196, 196, 196, 196}, + {195, 195, 195, 195, 195, 195, 195, 21: 195, 207: 195, 209: 195, 195, 213: 195, 217: 195, 291: 195, 341: 195, 195, 195, 195, 195}, + // 1805 + {194, 194, 194, 194, 194, 194, 194, 21: 194, 207: 194, 209: 194, 194, 213: 194, 217: 194, 291: 194, 341: 194, 194, 194, 194, 194}, + {134, 134, 134, 134, 134, 134, 134, 12: 134, 21: 134, 206: 2257, 134, 209: 134, 134, 213: 134, 217: 134, 291: 134, 341: 134, 134, 134, 134, 134, 430: 134, 134, 441: 2258, 453: 3261}, + {129, 129, 129, 129, 129, 129, 129, 12: 129, 21: 129, 207: 129, 209: 129, 129, 213: 129, 217: 129, 291: 129, 341: 129, 129, 129, 129, 129, 430: 129, 129, 510: 3260}, + {127, 127, 127, 127, 127, 127, 127, 12: 127, 21: 127, 206: 2263, 127, 209: 127, 127, 213: 127, 217: 127, 291: 127, 341: 127, 127, 127, 127, 127, 430: 127, 127, 441: 2264, 540: 3258, 552: 2265}, + {127, 127, 127, 127, 127, 127, 127, 12: 127, 21: 127, 206: 2263, 127, 209: 127, 127, 213: 127, 217: 127, 291: 127, 341: 127, 127, 127, 127, 127, 430: 127, 127, 441: 2264, 540: 3256, 552: 2265}, + // 1810 + {134, 134, 134, 134, 134, 134, 134, 21: 134, 206: 2257, 134, 209: 134, 134, 213: 134, 217: 134, 291: 134, 341: 134, 134, 134, 134, 134, 441: 2258, 453: 3255}, + {188, 188, 188, 188, 188, 188, 188, 12: 188, 21: 188, 206: 188, 188, 209: 188, 188, 213: 188, 217: 188, 291: 188, 341: 188, 188, 188, 188, 188, 430: 188, 188}, + {187, 187, 187, 187, 187, 187, 187, 12: 187, 21: 187, 206: 187, 187, 209: 187, 187, 213: 187, 217: 187, 291: 187, 341: 187, 187, 187, 187, 187, 430: 187, 187}, + {186, 186, 186, 186, 186, 186, 186, 12: 186, 21: 186, 206: 186, 186, 209: 186, 186, 213: 186, 217: 186, 291: 186, 341: 186, 186, 186, 186, 186, 430: 186, 186}, + {185, 185, 185, 185, 185, 185, 185, 12: 185, 21: 185, 206: 185, 185, 209: 185, 185, 213: 185, 217: 185, 291: 185, 341: 185, 185, 185, 185, 185, 430: 185, 185}, + // 1815 + {184, 184, 184, 184, 184, 184, 184, 12: 184, 21: 184, 206: 184, 184, 209: 184, 184, 213: 184, 217: 184, 291: 184, 341: 184, 184, 184, 184, 184, 430: 184, 184}, + {183, 183, 183, 183, 183, 183, 183, 12: 183, 21: 183, 206: 183, 183, 209: 183, 183, 213: 183, 217: 183, 291: 183, 341: 183, 183, 183, 183, 183, 430: 183, 183}, + {182, 182, 182, 182, 182, 182, 182, 12: 182, 21: 182, 206: 182, 182, 209: 182, 182, 213: 182, 217: 182, 291: 182, 341: 182, 182, 182, 182, 182, 430: 182, 182}, + {181, 181, 181, 181, 181, 181, 181, 12: 181, 21: 181, 206: 181, 181, 209: 181, 181, 213: 181, 217: 181, 291: 181, 341: 181, 181, 181, 181, 181, 430: 181, 181}, + {180, 180, 180, 180, 180, 180, 180, 12: 180, 21: 180, 206: 180, 180, 209: 180, 180, 213: 180, 217: 180, 291: 180, 341: 180, 180, 180, 180, 180, 430: 180, 180}, + // 1820 + {179, 179, 179, 179, 179, 179, 179, 12: 179, 21: 179, 206: 179, 179, 209: 179, 179, 213: 179, 217: 179, 291: 179, 341: 179, 179, 179, 179, 179, 430: 179, 179}, + {178, 178, 178, 178, 178, 178, 178, 12: 178, 21: 178, 206: 178, 178, 209: 178, 178, 213: 178, 217: 178, 291: 178, 341: 178, 178, 178, 178, 178, 430: 178, 178}, + {177, 177, 177, 177, 177, 177, 177, 12: 177, 21: 177, 207: 177, 209: 177, 177, 213: 177, 217: 177, 291: 177, 341: 177, 177, 177, 177, 177, 430: 177, 177}, + {176, 176, 176, 176, 176, 176, 176, 12: 176, 21: 176, 207: 176, 209: 176, 176, 213: 176, 217: 176, 291: 176, 341: 176, 176, 176, 176, 176, 430: 176, 176}, + {172, 172, 172, 172, 172, 172, 172, 12: 172, 21: 172, 206: 172, 172, 209: 172, 172, 213: 172, 217: 172, 291: 172, 341: 172, 172, 172, 172, 172, 430: 172, 172}, + // 1825 + {171, 171, 171, 171, 171, 171, 171, 12: 171, 21: 171, 206: 171, 171, 209: 171, 171, 213: 171, 217: 171, 291: 171, 341: 171, 171, 171, 171, 171, 430: 171, 171}, + {170, 170, 170, 170, 170, 170, 170, 12: 170, 21: 170, 206: 170, 170, 209: 170, 170, 213: 170, 217: 170, 291: 170, 341: 170, 170, 170, 170, 170, 430: 170, 170}, + {169, 169, 169, 169, 169, 169, 169, 12: 169, 21: 169, 206: 169, 169, 209: 169, 169, 213: 169, 217: 169, 291: 169, 341: 169, 169, 169, 169, 169, 430: 169, 169}, + {168, 168, 168, 168, 168, 168, 168, 12: 168, 21: 168, 206: 168, 168, 209: 168, 168, 213: 168, 217: 168, 291: 168, 341: 168, 168, 168, 168, 168, 430: 168, 168, 759: 3254}, + {166, 166, 166, 166, 166, 166, 166, 21: 166, 206: 166, 166, 209: 166, 166, 213: 166, 217: 166, 291: 166, 341: 166, 166, 166, 166, 166}, + // 1830 + {290: 3248}, + {290: 153, 353: 3243, 378: 3244}, + {206: 2257, 441: 3240}, + {134, 134, 134, 134, 134, 134, 134, 21: 134, 206: 2257, 134, 209: 134, 134, 213: 134, 217: 134, 291: 134, 341: 134, 134, 134, 134, 134, 441: 2258, 453: 3239}, + {206: 2257, 441: 3238}, + // 1835 + {159, 159, 159, 159, 159, 159, 159, 21: 159, 207: 159, 209: 159, 159, 213: 159, 217: 159, 291: 159, 341: 159, 159, 159, 159, 159}, + {121, 121, 121, 121, 121, 121, 121, 2276, 21: 121, 207: 121, 209: 121, 121, 213: 121, 217: 121, 239: 121, 248: 2273, 291: 121, 341: 121, 121, 121, 121, 121, 353: 2275, 449: 2274, 493: 3236}, + {206: 3231}, + {206: 3221}, + {155, 155, 155, 155, 155, 155, 155, 21: 155, 207: 155, 209: 155, 155, 213: 155, 217: 155, 291: 155, 341: 155, 155, 155, 155, 155}, + // 1840 + {206: 151}, + {206: 150}, + {149, 149, 149, 149, 149, 149, 149, 21: 149, 207: 149, 209: 149, 149, 213: 149, 217: 149, 291: 149, 341: 149, 149, 149, 149, 149}, + {134, 134, 134, 134, 134, 134, 134, 21: 134, 206: 2257, 134, 209: 134, 134, 213: 134, 217: 134, 291: 134, 341: 134, 134, 134, 134, 134, 441: 2258, 453: 3220}, + {147, 147, 147, 147, 147, 147, 147, 21: 147, 207: 147, 209: 147, 147, 213: 147, 217: 147, 291: 147, 341: 147, 147, 147, 147, 147}, + // 1845 + {146, 146, 146, 146, 146, 146, 146, 21: 146, 207: 146, 209: 146, 146, 213: 146, 217: 146, 291: 146, 341: 146, 146, 146, 146, 146}, + {145, 145, 145, 145, 145, 145, 145, 145, 21: 145, 207: 145, 209: 145, 145, 213: 145, 217: 145, 239: 145, 248: 145, 291: 145, 341: 145, 145, 145, 145, 145, 353: 145}, + {134, 134, 134, 134, 134, 134, 134, 134, 21: 134, 206: 2257, 134, 209: 134, 134, 213: 134, 217: 134, 239: 134, 248: 134, 291: 134, 341: 134, 134, 134, 134, 134, 353: 134, 441: 2258, 453: 3219}, + {143, 143, 143, 143, 143, 143, 143, 143, 21: 143, 207: 143, 209: 143, 143, 213: 143, 217: 143, 239: 143, 248: 143, 291: 143, 341: 143, 143, 143, 143, 143, 353: 143}, + {142, 142, 142, 142, 142, 142, 142, 142, 21: 142, 207: 142, 209: 142, 142, 213: 142, 217: 142, 239: 142, 248: 142, 291: 142, 341: 142, 142, 142, 142, 142, 353: 142}, + // 1850 + {378: 3218}, + {140, 140, 140, 140, 140, 140, 140, 21: 140, 207: 140, 209: 140, 140, 213: 140, 217: 140, 291: 140, 341: 140, 140, 140, 140, 140}, + {134, 134, 134, 134, 134, 134, 134, 21: 134, 206: 2257, 134, 209: 134, 134, 213: 134, 217: 134, 291: 134, 341: 134, 134, 134, 134, 134, 441: 2258, 453: 3217}, + {134, 134, 134, 134, 134, 134, 134, 21: 134, 206: 2257, 134, 209: 134, 134, 213: 134, 217: 134, 291: 134, 341: 134, 134, 134, 134, 134, 441: 2258, 453: 3216}, + {134, 134, 134, 134, 134, 134, 134, 21: 134, 206: 2257, 134, 209: 134, 134, 213: 134, 217: 134, 291: 134, 341: 134, 134, 134, 134, 134, 441: 2258, 453: 3215}, + // 1855 + {134, 134, 134, 134, 134, 134, 134, 12: 134, 21: 134, 206: 2257, 134, 209: 134, 134, 213: 134, 217: 134, 291: 134, 341: 134, 134, 134, 134, 134, 430: 134, 134, 441: 2258, 453: 3209}, + {129, 129, 129, 129, 129, 129, 129, 12: 129, 21: 129, 207: 129, 209: 129, 129, 213: 129, 217: 129, 291: 129, 341: 129, 129, 129, 129, 129, 430: 129, 129, 510: 3210}, + {136, 136, 136, 136, 136, 136, 136, 12: 3212, 21: 136, 207: 136, 209: 136, 136, 213: 136, 217: 136, 291: 136, 341: 136, 136, 136, 136, 136, 430: 3211, 3213, 509: 3214}, + {132, 132, 132, 132, 132, 132, 132, 12: 132, 21: 132, 207: 132, 209: 132, 132, 213: 132, 217: 132, 291: 132, 341: 132, 132, 132, 132, 132, 430: 132, 132}, + {131, 131, 131, 131, 131, 131, 131, 12: 131, 21: 131, 207: 131, 209: 131, 131, 213: 131, 217: 131, 291: 131, 341: 131, 131, 131, 131, 131, 430: 131, 131}, + // 1860 + {130, 130, 130, 130, 130, 130, 130, 12: 130, 21: 130, 207: 130, 209: 130, 130, 213: 130, 217: 130, 291: 130, 341: 130, 130, 130, 130, 130, 430: 130, 130}, + {128, 128, 128, 128, 128, 128, 128, 12: 128, 21: 128, 207: 128, 209: 128, 128, 213: 128, 217: 128, 291: 128, 341: 128, 128, 128, 128, 128, 430: 128, 128}, + {137, 137, 137, 137, 137, 137, 137, 21: 137, 207: 137, 209: 137, 137, 213: 137, 217: 137, 291: 137, 341: 137, 137, 137, 137, 137}, + {138, 138, 138, 138, 138, 138, 138, 21: 138, 207: 138, 209: 138, 138, 213: 138, 217: 138, 291: 138, 341: 138, 138, 138, 138, 138}, + {139, 139, 139, 139, 139, 139, 139, 21: 139, 207: 139, 209: 139, 139, 213: 139, 217: 139, 291: 139, 341: 139, 139, 139, 139, 139}, + // 1865 + {141, 141, 141, 141, 141, 141, 141, 141, 21: 141, 207: 141, 209: 141, 141, 213: 141, 217: 141, 239: 141, 248: 141, 291: 141, 341: 141, 141, 141, 141, 141, 353: 141}, + {144, 144, 144, 144, 144, 144, 144, 144, 21: 144, 207: 144, 209: 144, 144, 213: 144, 217: 144, 239: 144, 248: 144, 291: 144, 341: 144, 144, 144, 144, 144, 353: 144}, + {148, 148, 148, 148, 148, 148, 148, 21: 148, 207: 148, 209: 148, 148, 213: 148, 217: 148, 291: 148, 341: 148, 148, 148, 148, 148}, + {208: 3223, 659: 3222}, + {6: 3225, 21: 3224}, + // 1870 + {6: 112, 21: 112}, + {118, 118, 118, 118, 118, 118, 118, 2276, 21: 118, 207: 118, 209: 118, 118, 213: 118, 217: 118, 239: 118, 291: 118, 341: 118, 118, 118, 118, 118, 353: 2275, 449: 2282, 551: 3227}, + {208: 3226}, + {6: 111, 21: 111}, + {114, 114, 114, 114, 114, 114, 114, 21: 114, 207: 114, 209: 114, 114, 213: 114, 217: 114, 239: 3229, 291: 114, 341: 114, 114, 114, 114, 114, 476: 3228}, + // 1875 + {156, 156, 156, 156, 156, 156, 156, 21: 156, 207: 156, 209: 156, 156, 213: 156, 217: 156, 291: 156, 341: 156, 156, 156, 156, 156}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 348: 1691, 1459, 1460, 1458, 434: 3230}, + {113, 113, 113, 113, 113, 113, 113, 21: 113, 207: 113, 209: 113, 113, 213: 113, 217: 113, 291: 113, 341: 113, 113, 113, 113, 113}, + {208: 3223, 659: 3232}, + {6: 3225, 21: 3233}, + // 1880 + {118, 118, 118, 118, 118, 118, 118, 2276, 21: 118, 207: 118, 209: 118, 118, 213: 118, 217: 118, 239: 118, 291: 118, 341: 118, 118, 118, 118, 118, 353: 2275, 449: 2282, 551: 3234}, + {114, 114, 114, 114, 114, 114, 114, 21: 114, 207: 114, 209: 114, 114, 213: 114, 217: 114, 239: 3229, 291: 114, 341: 114, 114, 114, 114, 114, 476: 3235}, + {157, 157, 157, 157, 157, 157, 157, 21: 157, 207: 157, 209: 157, 157, 213: 157, 217: 157, 291: 157, 341: 157, 157, 157, 157, 157}, + {114, 114, 114, 114, 114, 114, 114, 21: 114, 207: 114, 209: 114, 114, 213: 114, 217: 114, 239: 3229, 291: 114, 341: 114, 114, 114, 114, 114, 476: 3237}, + {158, 158, 158, 158, 158, 158, 158, 21: 158, 207: 158, 209: 158, 158, 213: 158, 217: 158, 291: 158, 341: 158, 158, 158, 158, 158}, + // 1885 + {160, 160, 160, 160, 160, 160, 160, 21: 160, 207: 160, 209: 160, 160, 213: 160, 217: 160, 291: 160, 341: 160, 160, 160, 160, 160}, + {161, 161, 161, 161, 161, 161, 161, 21: 161, 207: 161, 209: 161, 161, 213: 161, 217: 161, 291: 161, 341: 161, 161, 161, 161, 161}, + {121, 121, 121, 121, 121, 121, 121, 2276, 21: 121, 207: 121, 209: 121, 121, 213: 121, 217: 121, 239: 121, 248: 2273, 291: 121, 341: 121, 121, 121, 121, 121, 353: 2275, 449: 2274, 493: 3241}, + {114, 114, 114, 114, 114, 114, 114, 21: 114, 207: 114, 209: 114, 114, 213: 114, 217: 114, 239: 3229, 291: 114, 341: 114, 114, 114, 114, 114, 476: 3242}, + {162, 162, 162, 162, 162, 162, 162, 21: 162, 207: 162, 209: 162, 162, 213: 162, 217: 162, 291: 162, 341: 162, 162, 162, 162, 162}, + // 1890 + {206: 2257, 441: 3245}, + {206: 152}, + {121, 121, 121, 121, 121, 121, 121, 2276, 21: 121, 207: 121, 209: 121, 121, 213: 121, 217: 121, 239: 121, 248: 2273, 291: 121, 341: 121, 121, 121, 121, 121, 353: 2275, 449: 2274, 493: 3246}, + {114, 114, 114, 114, 114, 114, 114, 21: 114, 207: 114, 209: 114, 114, 213: 114, 217: 114, 239: 3229, 291: 114, 341: 114, 114, 114, 114, 114, 476: 3247}, + {163, 163, 163, 163, 163, 163, 163, 21: 163, 207: 163, 209: 163, 163, 213: 163, 217: 163, 291: 163, 341: 163, 163, 163, 163, 163}, + // 1895 + {121, 121, 121, 121, 121, 121, 121, 2276, 21: 121, 206: 2257, 121, 209: 121, 121, 213: 121, 217: 121, 239: 121, 248: 2273, 291: 121, 341: 121, 121, 121, 121, 121, 353: 2275, 441: 3249, 449: 2274, 493: 3250}, + {121, 121, 121, 121, 121, 121, 121, 2276, 21: 121, 207: 121, 209: 121, 121, 213: 121, 217: 121, 239: 121, 248: 2273, 291: 121, 341: 121, 121, 121, 121, 121, 353: 2275, 449: 2274, 493: 3252}, + {114, 114, 114, 114, 114, 114, 114, 21: 114, 207: 114, 209: 114, 114, 213: 114, 217: 114, 239: 3229, 291: 114, 341: 114, 114, 114, 114, 114, 476: 3251}, + {164, 164, 164, 164, 164, 164, 164, 21: 164, 207: 164, 209: 164, 164, 213: 164, 217: 164, 291: 164, 341: 164, 164, 164, 164, 164}, + {114, 114, 114, 114, 114, 114, 114, 21: 114, 207: 114, 209: 114, 114, 213: 114, 217: 114, 239: 3229, 291: 114, 341: 114, 114, 114, 114, 114, 476: 3253}, + // 1900 + {165, 165, 165, 165, 165, 165, 165, 21: 165, 207: 165, 209: 165, 165, 213: 165, 217: 165, 291: 165, 341: 165, 165, 165, 165, 165}, + {167, 167, 167, 167, 167, 167, 167, 12: 167, 21: 167, 206: 167, 167, 209: 167, 167, 213: 167, 217: 167, 291: 167, 341: 167, 167, 167, 167, 167, 430: 167, 167}, + {189, 189, 189, 189, 189, 189, 189, 21: 189, 207: 189, 209: 189, 189, 213: 189, 217: 189, 291: 189, 341: 189, 189, 189, 189, 189}, + {129, 129, 129, 129, 129, 129, 129, 12: 129, 21: 129, 207: 129, 209: 129, 129, 213: 129, 217: 129, 291: 129, 341: 129, 129, 129, 129, 129, 430: 129, 129, 510: 3257}, + {190, 190, 190, 190, 190, 190, 190, 12: 3212, 21: 190, 207: 190, 209: 190, 190, 213: 190, 217: 190, 291: 190, 341: 190, 190, 190, 190, 190, 430: 3211, 3213, 509: 3214}, + // 1905 + {129, 129, 129, 129, 129, 129, 129, 12: 129, 21: 129, 207: 129, 209: 129, 129, 213: 129, 217: 129, 291: 129, 341: 129, 129, 129, 129, 129, 430: 129, 129, 510: 3259}, + {191, 191, 191, 191, 191, 191, 191, 12: 3212, 21: 191, 207: 191, 209: 191, 191, 213: 191, 217: 191, 291: 191, 341: 191, 191, 191, 191, 191, 430: 3211, 3213, 509: 3214}, + {192, 192, 192, 192, 192, 192, 192, 12: 3212, 21: 192, 207: 192, 209: 192, 192, 213: 192, 217: 192, 291: 192, 341: 192, 192, 192, 192, 192, 430: 3211, 3213, 509: 3214}, + {129, 129, 129, 129, 129, 129, 129, 12: 129, 21: 129, 207: 129, 209: 129, 129, 213: 129, 217: 129, 291: 129, 341: 129, 129, 129, 129, 129, 430: 129, 129, 510: 3262}, + {193, 193, 193, 193, 193, 193, 193, 12: 3212, 21: 193, 207: 193, 209: 193, 193, 213: 193, 217: 193, 291: 193, 341: 193, 193, 193, 193, 193, 430: 3211, 3213, 509: 3214}, + // 1910 + {1277, 1277, 4: 1277, 1277, 1277, 21: 1277}, + {291: 1265}, + {217: 3317}, + {1263, 1263, 1263, 1263, 1263, 1263, 1263, 21: 1263, 207: 1263, 209: 1263, 1263, 213: 1263, 217: 1263, 291: 1263, 341: 1263, 1263, 1263, 1263, 1263}, + {1262, 1262, 1262, 1262, 1262, 1262, 1262, 21: 1262, 207: 1262, 209: 1262, 1262, 213: 1262, 217: 1262, 291: 1262, 341: 1262, 1262, 1262, 1262, 1262}, + // 1915 + {291: 3316}, + {1260, 1260, 1260, 1260, 1260, 1260, 1260, 21: 1260, 207: 1260, 209: 1260, 1260, 213: 1260, 217: 1260, 291: 3315, 341: 1260, 1260, 1260, 1260, 1260}, + {208: 1924, 214: 3308, 3309, 217: 1915, 240: 1919, 294: 1914, 1916, 297: 1918, 1917, 301: 1923, 3299, 3296, 305: 1922, 3297, 3298, 1921, 408: 3307, 410: 1920, 625: 3294, 3295, 3305, 656: 3306, 705: 3304}, + {448: 3292}, + {208: 3291}, + // 1920 + {206: 3288}, + {210: 3281}, + {1253, 1253, 1253, 1253, 1253, 1253, 1253, 21: 1253, 207: 1253, 209: 1253, 1253, 213: 1253, 217: 1253, 291: 1253, 341: 1253, 1253, 1253, 1253, 1253}, + {100: 3280}, + {1247, 1247, 1247, 1247, 1247, 1247, 1247, 21: 1247, 207: 1247, 209: 1247, 1247, 213: 1247, 217: 1247, 291: 1247, 341: 1247, 1247, 1247, 1247, 1247}, + // 1925 + {1244, 1244, 3272, 3267, 1244, 1244, 1244, 21: 1244, 207: 3271, 209: 3265, 1252, 213: 3270, 217: 3266, 291: 1266, 341: 3264, 3269, 3273, 3095, 3276, 555: 3275, 575: 3279, 608: 3274, 644: 3268}, + {1246, 1246, 1246, 1246, 1246, 1246, 1246, 21: 1246, 207: 1246, 209: 1246, 1246, 213: 1246, 217: 1246, 291: 1246, 341: 1246, 1246, 1246, 1246, 1246}, + {210: 1251}, + {206: 3282}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 3283}, + // 1930 + {21: 3284, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {1250, 1250, 1250, 1250, 1250, 1250, 1250, 21: 1250, 207: 1250, 209: 1250, 1250, 213: 1250, 217: 1250, 291: 1250, 341: 1250, 1250, 1250, 1250, 1250, 777: 3287, 805: 3286, 3285}, + {1254, 1254, 1254, 1254, 1254, 1254, 1254, 21: 1254, 207: 1254, 209: 1254, 1254, 213: 1254, 217: 1254, 291: 1254, 341: 1254, 1254, 1254, 1254, 1254}, + {1249, 1249, 1249, 1249, 1249, 1249, 1249, 21: 1249, 207: 1249, 209: 1249, 1249, 213: 1249, 217: 1249, 291: 1249, 341: 1249, 1249, 1249, 1249, 1249}, + {1248, 1248, 1248, 1248, 1248, 1248, 1248, 21: 1248, 207: 1248, 209: 1248, 1248, 213: 1248, 217: 1248, 291: 1248, 341: 1248, 1248, 1248, 1248, 1248}, + // 1935 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 3289}, + {21: 3290, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {1255, 1255, 1255, 1255, 1255, 1255, 1255, 21: 1255, 207: 1255, 209: 1255, 1255, 213: 1255, 217: 1255, 291: 1255, 341: 1255, 1255, 1255, 1255, 1255}, + {1256, 1256, 1256, 1256, 1256, 1256, 1256, 21: 1256, 207: 1256, 209: 1256, 1256, 213: 1256, 217: 1256, 291: 1256, 341: 1256, 1256, 1256, 1256, 1256}, + {302: 3299, 3296, 306: 3297, 3298, 625: 3294, 3295, 3293}, + // 1940 + {1257, 1257, 1257, 1257, 1257, 1257, 1257, 21: 1257, 207: 1257, 209: 1257, 1257, 213: 1257, 217: 1257, 291: 1257, 341: 1257, 1257, 1257, 1257, 1257}, + {1227, 1227, 1227, 1227, 1227, 1227, 1227, 21: 1227, 207: 1227, 209: 1227, 1227, 213: 1227, 217: 1227, 291: 1227, 341: 1227, 1227, 1227, 1227, 1227}, + {206: 3300}, + {1220, 1220, 1220, 1220, 1220, 1220, 1220, 21: 1220, 206: 1224, 1220, 209: 1220, 1220, 213: 1220, 217: 1220, 291: 1220, 341: 1220, 1220, 1220, 1220, 1220}, + {1219, 1219, 1219, 1219, 1219, 1219, 1219, 21: 1219, 206: 1223, 1219, 209: 1219, 1219, 213: 1219, 217: 1219, 291: 1219, 341: 1219, 1219, 1219, 1219, 1219}, + // 1945 + {1218, 1218, 1218, 1218, 1218, 1218, 1218, 21: 1218, 206: 1222, 1218, 209: 1218, 1218, 213: 1218, 217: 1218, 291: 1218, 341: 1218, 1218, 1218, 1218, 1218}, + {206: 1221}, + {21: 3301, 240: 1448, 432: 3302}, + {1226, 1226, 1226, 1226, 1226, 1226, 1226, 21: 1226, 207: 1226, 209: 1226, 1226, 213: 1226, 217: 1226, 291: 1226, 341: 1226, 1226, 1226, 1226, 1226}, + {21: 3303}, + // 1950 + {1225, 1225, 1225, 1225, 1225, 1225, 1225, 21: 1225, 207: 1225, 209: 1225, 1225, 213: 1225, 217: 1225, 291: 1225, 341: 1225, 1225, 1225, 1225, 1225}, + {1258, 1258, 1258, 1258, 1258, 1258, 1258, 21: 1258, 207: 1258, 209: 1258, 1258, 213: 1258, 217: 1258, 291: 1258, 341: 1258, 1258, 1258, 1258, 1258}, + {1229, 1229, 1229, 1229, 1229, 1229, 1229, 21: 1229, 207: 1229, 209: 1229, 1229, 213: 1229, 217: 1229, 291: 1229, 341: 1229, 1229, 1229, 1229, 1229}, + {1228, 1228, 1228, 1228, 1228, 1228, 1228, 21: 1228, 207: 1228, 209: 1228, 1228, 213: 1228, 217: 1228, 291: 1228, 341: 1228, 1228, 1228, 1228, 1228}, + {1217, 1217, 1217, 1217, 1217, 1217, 1217, 21: 1217, 207: 1217, 209: 1217, 1217, 213: 1217, 217: 1217, 291: 1217, 341: 1217, 1217, 1217, 1217, 1217}, + // 1955 + {240: 3311, 297: 3313, 3312, 629: 3314}, + {240: 3311, 297: 3313, 3312, 629: 3310}, + {1215, 1215, 1215, 1215, 1215, 1215, 1215, 21: 1215, 207: 1215, 209: 1215, 1215, 213: 1215, 217: 1215, 291: 1215, 341: 1215, 1215, 1215, 1215, 1215}, + {1214, 1214, 1214, 1214, 1214, 1214, 1214, 21: 1214, 207: 1214, 209: 1214, 1214, 213: 1214, 217: 1214, 291: 1214, 341: 1214, 1214, 1214, 1214, 1214}, + {1213, 1213, 1213, 1213, 1213, 1213, 1213, 21: 1213, 207: 1213, 209: 1213, 1213, 213: 1213, 217: 1213, 291: 1213, 341: 1213, 1213, 1213, 1213, 1213}, + // 1960 + {1212, 1212, 1212, 1212, 1212, 1212, 1212, 21: 1212, 207: 1212, 209: 1212, 1212, 213: 1212, 217: 1212, 291: 1212, 341: 1212, 1212, 1212, 1212, 1212}, + {1216, 1216, 1216, 1216, 1216, 1216, 1216, 21: 1216, 207: 1216, 209: 1216, 1216, 213: 1216, 217: 1216, 291: 1216, 341: 1216, 1216, 1216, 1216, 1216}, + {1259, 1259, 1259, 1259, 1259, 1259, 1259, 21: 1259, 207: 1259, 209: 1259, 1259, 213: 1259, 217: 1259, 291: 1259, 341: 1259, 1259, 1259, 1259, 1259}, + {1261, 1261, 1261, 1261, 1261, 1261, 1261, 21: 1261, 207: 1261, 209: 1261, 1261, 213: 1261, 217: 1261, 291: 1261, 341: 1261, 1261, 1261, 1261, 1261}, + {1264, 1264, 1264, 1264, 1264, 1264, 1264, 21: 1264, 207: 1264, 209: 1264, 1264, 213: 1264, 217: 1264, 291: 1264, 341: 1264, 1264, 1264, 1264, 1264}, + // 1965 + {291: 1300, 341: 1300, 1300, 359: 1300, 372: 1300, 1300}, + {1299, 1299, 6: 1299, 291: 1299, 341: 1299, 1299, 359: 1299, 372: 1299, 1299}, + {1157, 1157}, + {1193, 1193, 206: 1193, 210: 1193, 236: 1193, 347: 1193, 352: 1193, 354: 3393, 758: 3392}, + {7: 1194, 239: 1194, 353: 1194}, + // 1970 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 232: 3390, 348: 1691, 1459, 1460, 1458, 434: 3389}, + {7: 2276, 239: 3384, 353: 2275, 449: 3383}, + {232: 3131, 240: 1117, 436: 3381}, + {208: 1117, 232: 3131, 436: 3379}, + {232: 3131, 240: 1117, 436: 3377}, + // 1975 + {208: 1117, 232: 3131, 436: 3375}, + {232: 3131, 240: 1117, 436: 3373}, + {208: 1117, 232: 3131, 436: 3371}, + {208: 1117, 232: 3131, 436: 3369}, + {232: 3131, 240: 1117, 436: 3367}, + // 1980 + {232: 3131, 240: 1117, 436: 3365}, + {232: 3131, 240: 1117, 436: 3363}, + {232: 3131, 240: 1117, 436: 3361}, + {218, 218, 218, 218, 6: 218, 218, 218, 218, 218, 218, 13: 218, 218, 218, 218, 218, 218, 218, 218, 206: 218, 210: 218, 213: 218, 236: 218, 239: 218, 347: 218, 352: 218, 218, 218, 218, 218}, + {213: 1117, 232: 3131, 240: 1117, 436: 3359}, + // 1985 + {232: 3131, 240: 1117, 436: 3357}, + {213: 1117, 232: 3131, 240: 1117, 436: 3353}, + {209, 209, 3326, 3325, 6: 3351, 1195, 3332, 3323, 3328, 3330, 13: 3329, 3327, 3331, 3335, 3333, 3334, 3342, 3337, 206: 209, 210: 209, 213: 3322, 236: 209, 239: 1195, 347: 209, 352: 209, 1195, 209, 3339, 3338, 472: 3324, 495: 3336, 499: 3350}, + {208, 208, 208, 208, 6: 208, 208, 208, 208, 208, 208, 13: 208, 208, 208, 208, 208, 208, 208, 208, 206: 208, 210: 208, 213: 208, 236: 208, 239: 208, 347: 208, 352: 208, 208, 208, 208, 208}, + {75: 1117, 1117, 82: 1117, 84: 1117, 90: 1117, 213: 1117, 232: 3131, 436: 3343}, + // 1990 + {75: 3349, 3347, 82: 3345, 84: 3346, 90: 3348, 213: 3344}, + {202, 202, 202, 202, 6: 202, 202, 202, 202, 202, 202, 13: 202, 202, 202, 202, 202, 202, 202, 202, 206: 202, 210: 202, 213: 202, 236: 202, 239: 202, 347: 202, 352: 202, 202, 202, 202, 202}, + {201, 201, 201, 201, 6: 201, 201, 201, 201, 201, 201, 13: 201, 201, 201, 201, 201, 201, 201, 201, 206: 201, 210: 201, 213: 201, 236: 201, 239: 201, 347: 201, 352: 201, 201, 201, 201, 201}, + {200, 200, 200, 200, 6: 200, 200, 200, 200, 200, 200, 13: 200, 200, 200, 200, 200, 200, 200, 200, 206: 200, 210: 200, 213: 200, 236: 200, 239: 200, 347: 200, 352: 200, 200, 200, 200, 200}, + {199, 199, 199, 199, 6: 199, 199, 199, 199, 199, 199, 13: 199, 199, 199, 199, 199, 199, 199, 199, 206: 199, 210: 199, 213: 199, 236: 199, 239: 199, 347: 199, 352: 199, 199, 199, 199, 199}, + // 1995 + {198, 198, 198, 198, 6: 198, 198, 198, 198, 198, 198, 13: 198, 198, 198, 198, 198, 198, 198, 198, 206: 198, 210: 198, 213: 198, 236: 198, 239: 198, 347: 198, 352: 198, 198, 198, 198, 198}, + {197, 197, 197, 197, 6: 197, 197, 197, 197, 197, 197, 13: 197, 197, 197, 197, 197, 197, 197, 197, 206: 197, 210: 197, 213: 197, 236: 197, 239: 197, 347: 197, 352: 197, 197, 197, 197, 197}, + {207, 207, 207, 207, 6: 207, 207, 207, 207, 207, 207, 13: 207, 207, 207, 207, 207, 207, 207, 207, 206: 207, 210: 207, 213: 207, 236: 207, 239: 207, 347: 207, 352: 207, 207, 207, 207, 207}, + {2: 3326, 3325, 7: 1195, 3332, 3323, 3328, 3330, 13: 3329, 3327, 3331, 3335, 3333, 3334, 3342, 3337, 213: 3322, 239: 1195, 353: 1195, 355: 3339, 3338, 472: 3324, 495: 3336, 499: 3352}, + {206, 206, 206, 206, 6: 206, 206, 206, 206, 206, 206, 13: 206, 206, 206, 206, 206, 206, 206, 206, 206: 206, 210: 206, 213: 206, 236: 206, 239: 206, 347: 206, 352: 206, 206, 206, 206, 206}, + // 2000 + {213: 3355, 240: 1448, 432: 2259, 443: 3356, 658: 3354}, + {215, 215, 215, 215, 6: 215, 215, 215, 215, 215, 215, 13: 215, 215, 215, 215, 215, 215, 215, 215, 206: 215, 210: 215, 213: 215, 236: 215, 239: 215, 347: 215, 352: 215, 215, 215, 215, 215}, + {214, 214, 214, 214, 6: 214, 214, 214, 214, 214, 214, 13: 214, 214, 214, 214, 214, 214, 214, 214, 206: 214, 210: 214, 213: 214, 236: 214, 239: 214, 347: 214, 352: 214, 214, 214, 214, 214}, + {213, 213, 213, 213, 6: 213, 213, 213, 213, 213, 213, 13: 213, 213, 213, 213, 213, 213, 213, 213, 206: 213, 210: 213, 213: 213, 236: 213, 239: 213, 347: 213, 352: 213, 213, 213, 213, 213}, + {240: 1448, 432: 2259, 443: 3358}, + // 2005 + {216, 216, 216, 216, 6: 216, 216, 216, 216, 216, 216, 13: 216, 216, 216, 216, 216, 216, 216, 216, 206: 216, 210: 216, 213: 216, 236: 216, 239: 216, 347: 216, 352: 216, 216, 216, 216, 216}, + {213: 3355, 240: 1448, 432: 2259, 443: 3356, 658: 3360}, + {217, 217, 217, 217, 6: 217, 217, 217, 217, 217, 217, 13: 217, 217, 217, 217, 217, 217, 217, 217, 206: 217, 210: 217, 213: 217, 236: 217, 239: 217, 347: 217, 352: 217, 217, 217, 217, 217}, + {240: 1448, 432: 2259, 443: 3362}, + {219, 219, 219, 219, 6: 219, 219, 219, 219, 219, 219, 13: 219, 219, 219, 219, 219, 219, 219, 219, 206: 219, 210: 219, 213: 219, 236: 219, 239: 219, 347: 219, 352: 219, 219, 219, 219, 219}, + // 2010 + {240: 1448, 432: 2259, 443: 3364}, + {220, 220, 220, 220, 6: 220, 220, 220, 220, 220, 220, 13: 220, 220, 220, 220, 220, 220, 220, 220, 206: 220, 210: 220, 213: 220, 236: 220, 239: 220, 347: 220, 352: 220, 220, 220, 220, 220}, + {240: 1448, 432: 2259, 443: 3366}, + {221, 221, 221, 221, 6: 221, 221, 221, 221, 221, 221, 13: 221, 221, 221, 221, 221, 221, 221, 221, 206: 221, 210: 221, 213: 221, 236: 221, 239: 221, 347: 221, 352: 221, 221, 221, 221, 221}, + {240: 1448, 432: 2259, 443: 3368}, + // 2015 + {222, 222, 222, 222, 6: 222, 222, 222, 222, 222, 222, 13: 222, 222, 222, 222, 222, 222, 222, 222, 206: 222, 210: 222, 213: 222, 236: 222, 239: 222, 347: 222, 352: 222, 222, 222, 222, 222}, + {208: 3370}, + {223, 223, 223, 223, 6: 223, 223, 223, 223, 223, 223, 13: 223, 223, 223, 223, 223, 223, 223, 223, 206: 223, 210: 223, 213: 223, 236: 223, 239: 223, 347: 223, 352: 223, 223, 223, 223, 223}, + {208: 3372}, + {224, 224, 224, 224, 6: 224, 224, 224, 224, 224, 224, 13: 224, 224, 224, 224, 224, 224, 224, 224, 206: 224, 210: 224, 213: 224, 236: 224, 239: 224, 347: 224, 352: 224, 224, 224, 224, 224}, + // 2020 + {240: 1448, 432: 2259, 443: 3374}, + {225, 225, 225, 225, 6: 225, 225, 225, 225, 225, 225, 13: 225, 225, 225, 225, 225, 225, 225, 225, 206: 225, 210: 225, 213: 225, 236: 225, 239: 225, 347: 225, 352: 225, 225, 225, 225, 225}, + {208: 3376}, + {226, 226, 226, 226, 6: 226, 226, 226, 226, 226, 226, 13: 226, 226, 226, 226, 226, 226, 226, 226, 206: 226, 210: 226, 213: 226, 236: 226, 239: 226, 347: 226, 352: 226, 226, 226, 226, 226}, + {240: 1448, 432: 2259, 443: 3378}, + // 2025 + {227, 227, 227, 227, 6: 227, 227, 227, 227, 227, 227, 13: 227, 227, 227, 227, 227, 227, 227, 227, 206: 227, 210: 227, 213: 227, 236: 227, 239: 227, 347: 227, 352: 227, 227, 227, 227, 227}, + {208: 3380}, + {228, 228, 228, 228, 6: 228, 228, 228, 228, 228, 228, 13: 228, 228, 228, 228, 228, 228, 228, 228, 206: 228, 210: 228, 213: 228, 236: 228, 239: 228, 347: 228, 352: 228, 228, 228, 228, 228}, + {240: 1448, 432: 2259, 443: 3382}, + {229, 229, 229, 229, 6: 229, 229, 229, 229, 229, 229, 13: 229, 229, 229, 229, 229, 229, 229, 229, 206: 229, 210: 229, 213: 229, 236: 229, 239: 229, 347: 229, 352: 229, 229, 229, 229, 229}, + // 2030 + {2: 1117, 1117, 1117, 1117, 7: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 22: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 208: 1117, 232: 3131, 248: 1117, 436: 3387}, + {2: 1117, 1117, 1117, 1117, 7: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 22: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 208: 1117, 232: 3131, 436: 3385}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 348: 1691, 1459, 1460, 1458, 434: 3386}, + {230, 230, 230, 230, 6: 230, 230, 230, 230, 230, 230, 13: 230, 230, 230, 230, 230, 230, 230, 230, 206: 230, 210: 230, 213: 230, 236: 230, 239: 230, 347: 230, 352: 230, 230, 230, 230, 230}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 248: 1689, 348: 1691, 1459, 1460, 1458, 434: 1688, 469: 3388}, + // 2035 + {231, 231, 231, 231, 6: 231, 231, 231, 231, 231, 231, 13: 231, 231, 231, 231, 231, 231, 231, 231, 206: 231, 210: 231, 213: 231, 236: 231, 239: 231, 347: 231, 352: 231, 231, 231, 231, 231}, + {233, 233, 233, 233, 6: 233, 233, 233, 233, 233, 233, 13: 233, 233, 233, 233, 233, 233, 233, 233, 206: 233, 210: 233, 213: 233, 236: 233, 239: 233, 347: 233, 352: 233, 233, 233, 233, 233}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 348: 1691, 1459, 1460, 1458, 434: 3391}, + {232, 232, 232, 232, 6: 232, 232, 232, 232, 232, 232, 13: 232, 232, 232, 232, 232, 232, 232, 232, 206: 232, 210: 232, 213: 232, 236: 232, 239: 232, 347: 232, 352: 232, 232, 232, 232, 232}, + {1166, 1166, 206: 1166, 210: 1166, 236: 3472, 347: 3471, 352: 1166, 707: 3470}, + // 2040 + {362: 3394}, + {60: 3396, 291: 3395, 763: 3397}, + {206: 3465}, + {206: 3460}, + {27: 3399, 206: 3398}, + // 2045 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 3441}, + {206: 3400}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 1726, 470: 3401}, + {6: 1730, 21: 3402}, + {1183, 1183, 54: 3404, 206: 1183, 210: 1183, 236: 1183, 347: 1183, 352: 1183, 527: 3403}, + // 2050 + {1181, 1181, 206: 3407, 210: 1181, 236: 1181, 347: 1181, 352: 1181, 514: 3406}, + {240: 1448, 432: 3405}, + {1182, 1182, 55: 1182, 206: 1182, 210: 1182, 236: 1182, 347: 1182, 352: 1182}, + {1189, 1189, 206: 1189, 210: 1189, 236: 1189, 347: 1189, 352: 1189}, + {354: 3410, 640: 3409, 757: 3408}, + // 2055 + {6: 3439, 21: 3438}, + {6: 1179, 21: 1179}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3411, 1459, 1460, 1458}, + {2: 1169, 6: 1169, 9: 1169, 21: 1169, 26: 1169, 292: 3413, 756: 3412}, + {2: 3428, 6: 1176, 9: 3429, 21: 1176, 26: 3430, 639: 3427, 754: 3426, 3425}, + // 2060 + {127: 3414}, + {160: 3415}, + {206: 3417, 550: 3416}, + {2: 1168, 6: 1168, 9: 1168, 21: 1168, 26: 1168}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 3419, 550: 3420, 624: 3421, 741: 3418}, + // 2065 + {6: 3423, 21: 3422}, + {6: 1093, 21: 1093, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {6: 1094, 21: 1094}, + {6: 1086, 21: 1086}, + {2: 1167, 6: 1167, 9: 1167, 21: 1167, 26: 1167}, + // 2070 + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 3419, 550: 3420, 624: 3424}, + {6: 1085, 21: 1085}, + {6: 1177, 21: 1177}, + {2: 3428, 6: 1175, 9: 3429, 21: 1175, 26: 3430, 639: 3437}, + {2: 1174, 6: 1174, 9: 1174, 21: 1174, 26: 1174}, + // 2075 + {208: 1117, 232: 3131, 436: 3435}, + {2: 1117, 1117, 1117, 1117, 7: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 22: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 232: 3131, 436: 3433}, + {2: 1117, 1117, 1117, 1117, 7: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 22: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 232: 3131, 436: 3431}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3432, 1459, 1460, 1458}, + {2: 1170, 6: 1170, 9: 1170, 21: 1170, 26: 1170}, + // 2080 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3434, 1459, 1460, 1458}, + {2: 1171, 6: 1171, 9: 1171, 21: 1171, 26: 1171}, + {208: 3436}, + {2: 1172, 6: 1172, 9: 1172, 21: 1172, 26: 1172}, + {2: 1173, 6: 1173, 9: 1173, 21: 1173, 26: 1173}, + // 2085 + {1180, 1180, 6: 1180, 206: 1180, 210: 1180, 236: 1180, 347: 1180, 352: 1180}, + {354: 3410, 640: 3440}, + {6: 1178, 21: 1178}, + {21: 3442, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {1183, 1183, 54: 3404, 1183, 206: 1183, 210: 1183, 236: 1183, 347: 1183, 352: 1183, 527: 3443}, + // 2090 + {1188, 1188, 55: 3445, 206: 1188, 210: 1188, 236: 1188, 347: 1188, 352: 1188, 779: 3444}, + {1181, 1181, 206: 3407, 210: 1181, 236: 1181, 347: 1181, 352: 1181, 514: 3459}, + {362: 3446}, + {60: 3447, 291: 3448}, + {206: 3455}, + // 2095 + {206: 3449}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 1726, 470: 3450}, + {6: 1730, 21: 3451}, + {1185, 1185, 95: 3453, 206: 1185, 210: 1185, 236: 1185, 347: 1185, 352: 1185, 660: 3452}, + {1186, 1186, 206: 1186, 210: 1186, 236: 1186, 347: 1186, 352: 1186}, + // 2100 + {240: 1448, 432: 3454}, + {1184, 1184, 206: 1184, 210: 1184, 236: 1184, 347: 1184, 352: 1184}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 3456}, + {21: 3457, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {1185, 1185, 95: 3453, 206: 1185, 210: 1185, 236: 1185, 347: 1185, 352: 1185, 660: 3458}, + // 2105 + {1187, 1187, 206: 1187, 210: 1187, 236: 1187, 347: 1187, 352: 1187}, + {1190, 1190, 206: 1190, 210: 1190, 236: 1190, 347: 1190, 352: 1190}, + {2: 1540, 1463, 1464, 1496, 7: 1889, 1545, 1489, 1542, 1894, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1898, 1891, 1893, 1908, 1909, 1907, 1903, 1910, 1899, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1890, 1556, 1505, 1579, 1519, 1895, 1900, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1896, 1526, 1897, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1901, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1887, 1888, 1635, 1636, 1637, 1472, 1638, 1906, 1640, 1641, 1642, 1643, 1493, 1644, 1892, 1911, 1646, 1886, 1650, 1649, 1506, 1652, 1654, 1510, 1904, 1902, 1905, 1536, 1565, 1568, 1655, 1656, 1657, 1912, 1913, 1661, 1942, 208: 1924, 1882, 211: 1953, 1957, 1948, 1939, 1938, 1974, 1915, 236: 1956, 240: 1919, 247: 1927, 1944, 282: 1958, 286: 1951, 1973, 1975, 1880, 1972, 292: 1949, 1943, 1914, 1916, 1947, 1918, 1917, 1933, 1950, 1923, 1954, 1962, 1998, 1922, 1963, 1964, 1921, 1952, 1936, 1937, 1986, 1988, 1989, 1990, 1945, 1991, 1970, 1976, 1984, 1985, 1980, 1992, 1993, 1994, 1981, 1987, 1982, 1995, 1977, 1983, 1968, 1946, 1959, 1961, 1940, 1955, 1960, 1965, 1966, 348: 1926, 1459, 1460, 1458, 406: 1941, 1997, 1932, 1928, 1920, 1931, 1929, 1930, 1967, 1979, 1978, 1971, 1969, 1925, 1935, 1996, 1934, 1885, 1884, 1883, 3461}, + {21: 3462, 225: 2014, 2012, 2013, 2011, 2009, 427: 2010, 2008}, + {1183, 1183, 54: 3404, 206: 1183, 210: 1183, 236: 1183, 347: 1183, 352: 1183, 527: 3463}, + // 2110 + {1181, 1181, 206: 3407, 210: 1181, 236: 1181, 347: 1181, 352: 1181, 514: 3464}, + {1191, 1191, 206: 1191, 210: 1191, 236: 1191, 347: 1191, 352: 1191}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 1726, 470: 3466}, + {6: 1730, 21: 3467}, + {1183, 1183, 54: 3404, 206: 1183, 210: 1183, 236: 1183, 347: 1183, 352: 1183, 527: 3468}, + // 2115 + {1181, 1181, 206: 3407, 210: 1181, 236: 1181, 347: 1181, 352: 1181, 514: 3469}, + {1192, 1192, 206: 1192, 210: 1192, 236: 1192, 347: 1192, 352: 1192}, + {1163, 1163, 206: 1163, 210: 3474, 352: 1163, 682: 3473}, + {1165, 1165, 206: 1165, 210: 1165, 352: 1165}, + {1164, 1164, 206: 1164, 210: 1164, 352: 1164}, + // 2120 + {1161, 1161, 206: 1383, 352: 1379, 406: 3478, 437: 3476, 1380, 1381, 1382, 444: 1385, 1384, 3477, 700: 3475}, + {1162, 1162, 206: 1162, 352: 1162}, + {1197, 1197}, + {1160, 1160, 219: 430}, + {1159, 1159}, + // 2125 + {1158, 1158}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1835, 1459, 1460, 1458, 506: 3480}, + {1201, 1201, 7: 1195, 213: 3322, 239: 1195, 353: 1195, 472: 3482, 583: 3484, 701: 3483, 3481}, + {1205, 1205}, + {7: 2276, 239: 3487, 353: 2275, 449: 3486}, + // 2130 + {1200, 1200, 7: 1195, 213: 3322, 239: 1195, 353: 1195, 472: 3482, 583: 3485}, + {1199, 1199, 7: 1199, 213: 1199, 239: 1199, 353: 1199}, + {1198, 1198, 7: 1198, 213: 1198, 239: 1198, 353: 1198}, + {2: 1117, 1117, 1117, 1117, 7: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 22: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 208: 1117, 232: 3131, 248: 1117, 436: 3490}, + {2: 1117, 1117, 1117, 1117, 7: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 22: 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 208: 1117, 232: 3131, 436: 3488}, + // 2135 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 348: 1691, 1459, 1460, 1458, 434: 3489}, + {1202, 1202, 7: 1202, 213: 1202, 239: 1202, 353: 1202}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 248: 1689, 348: 1691, 1459, 1460, 1458, 434: 1688, 469: 3491}, + {1203, 1203, 7: 1203, 213: 1203, 239: 1203, 353: 1203}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3493, 1459, 1460, 1458}, + // 2140 + {207: 1012, 231: 3118, 464: 3119, 523: 3494}, + {207: 3495}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 3496}, + {206: 3497}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3087, 474: 3088, 482: 3498}, + // 2145 + {6: 3092, 21: 3499}, + {1019, 1019, 1019, 8: 1019, 220: 1019, 231: 1019, 513: 3500}, + {1321, 1321, 3129, 8: 3127, 220: 3502, 231: 3118, 464: 3128, 512: 3126, 549: 3501, 739: 3503}, + {1320, 1320}, + {232: 3504}, + // 2150 + {1211, 1211}, + {117: 3508, 137: 3505, 149: 3507, 213: 3506}, + {1319, 1319, 6: 1319}, + {1318, 1318, 6: 1318}, + {1317, 1317, 6: 1317}, + // 2155 + {1316, 1316, 6: 1316}, + {1280, 1280}, + {1282, 1282, 218: 3511}, + {111: 3512}, + {152: 3513}, + // 2160 + {1281, 1281}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 3516, 468: 3515}, + {1290, 1290, 6: 2570, 218: 3524, 492: 3532}, + {538, 538, 6: 538, 218: 538, 354: 3518, 359: 3517}, + {493, 493, 1540, 1463, 1464, 1496, 493, 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 218: 493, 348: 2490, 1459, 1460, 1458, 522: 3530}, + // 2165 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3519, 1459, 1460, 1458, 641: 3520}, + {1304, 1304, 6: 1304, 218: 1304, 359: 1304}, + {1290, 1290, 6: 3521, 218: 3524, 359: 3523, 492: 3522}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3529, 1459, 1460, 1458}, + {1292, 1292}, + // 2170 + {493, 493, 1540, 1463, 1464, 1496, 493, 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 218: 493, 348: 2490, 1459, 1460, 1458, 522: 3527}, + {240: 1448, 432: 3525}, + {73: 3526}, + {1289, 1289}, + {1290, 1290, 6: 2492, 218: 3524, 492: 3528}, + // 2175 + {1291, 1291}, + {1303, 1303, 6: 1303, 218: 1303, 359: 1303}, + {1290, 1290, 6: 2492, 218: 3524, 492: 3531}, + {1293, 1293}, + {1294, 1294}, + // 2180 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 3536, 667: 3535, 787: 3534}, + {1298, 1298, 6: 3539}, + {1297, 1297, 6: 1297}, + {368: 3537}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 3538}, + // 2185 + {1295, 1295, 6: 1295}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 3536, 667: 3540}, + {1296, 1296, 6: 1296}, + {442: 3551}, + {2: 1027, 1027, 1027, 1027, 7: 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 22: 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 208: 1027, 282: 1027, 286: 2980, 543: 3543}, + // 2190 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 3544, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 282: 1782, 348: 1691, 1459, 1460, 1458, 434: 1781, 459: 1783, 518: 1784, 531: 3545}, + {930, 930, 6: 930, 30: 930, 206: 3546, 289: 930, 379: 930}, + {99, 99, 6: 1786}, + {21: 3547}, + {30: 3548}, + // 2195 + {362: 3549}, + {208: 1797, 520: 3550}, + {98, 98}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 3552}, + {212, 212, 3326, 3325, 6: 212, 1195, 3332, 3323, 3328, 3330, 13: 3329, 3327, 3331, 3335, 3333, 3334, 3342, 3337, 46: 3566, 80: 3559, 83: 3560, 88: 3561, 213: 3322, 220: 3502, 239: 1195, 296: 3556, 353: 1195, 355: 3339, 3338, 363: 3567, 365: 3558, 370: 3563, 3554, 377: 3564, 380: 3557, 383: 3562, 472: 3324, 495: 3336, 499: 3341, 549: 3565, 559: 3569, 565: 3555, 3568, 680: 3553}, + // 2200 + {1351, 1351, 6: 3638}, + {354: 3632}, + {1348, 1348, 6: 1348}, + {368: 3628}, + {2: 1311, 1311, 1311, 1311, 7: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 22: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 291: 1302, 341: 1302, 1302, 354: 3618, 359: 1302, 372: 1302, 1302, 504: 3585, 3616, 536: 3617, 3061, 3064}, + // 2205 + {2: 1311, 1311, 1311, 1311, 7: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 22: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 291: 2499, 341: 3605, 354: 3606, 359: 2500, 372: 3608, 475: 3607, 504: 3585, 3604}, + {548: 3603}, + {548: 3602}, + {2: 1311, 1311, 1311, 1311, 7: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 22: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 504: 3585, 3599}, + {2: 1311, 1311, 1311, 1311, 7: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 22: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 504: 3585, 3592}, + // 2210 + {2: 1311, 1311, 1311, 1311, 7: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 22: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 504: 3585, 3584}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 210: 3577, 291: 2499, 348: 1662, 1459, 1460, 1458, 359: 2500, 368: 3575, 429: 3576, 475: 3578}, + {1327, 1327, 6: 1327}, + {77: 1117, 86: 1117, 213: 1117, 232: 3131, 436: 3570}, + {1325, 1325, 6: 1325}, + // 2215 + {1306, 1306, 6: 1306}, + {211, 211, 3326, 3325, 6: 211, 1195, 3332, 3323, 3328, 3330, 13: 3329, 3327, 3331, 3335, 3333, 3334, 3342, 3337, 213: 3322, 239: 1195, 353: 1195, 355: 3339, 3338, 472: 3324, 495: 3336, 499: 3350}, + {77: 3574, 86: 3573, 213: 3572, 679: 3571}, + {1326, 1326, 6: 1326}, + {1324, 1324, 6: 1324}, + // 2220 + {1323, 1323, 6: 1323}, + {1322, 1322, 6: 1322}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 3583}, + {1330, 1330, 6: 1330}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1662, 1459, 1460, 1458, 429: 3582}, + // 2225 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3579, 1459, 1460, 1458}, + {368: 3580}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3581, 1459, 1460, 1458}, + {1328, 1328, 6: 1328}, + {1329, 1329, 6: 1329}, + // 2230 + {1331, 1331, 6: 1331}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3586}, + {2: 1310, 1310, 1310, 1310, 7: 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 22: 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310}, + {234: 3587, 365: 3588}, + {213: 3590}, + // 2235 + {213: 3589}, + {1332, 1332, 6: 1332}, + {208: 1924, 214: 3308, 3309, 217: 1915, 240: 1919, 294: 1914, 1916, 297: 1918, 1917, 301: 1923, 305: 1922, 308: 1921, 408: 3307, 410: 1920, 656: 3591}, + {1333, 1333, 6: 1333}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3593}, + // 2240 + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3062, 477: 3594}, + {1309, 1309, 4: 3597, 3596, 1309, 535: 3595}, + {1334, 1334, 6: 1334}, + {1308, 1308, 6: 1308}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3598}, + // 2245 + {1307, 1307, 6: 1307}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3062, 477: 3600}, + {1309, 1309, 4: 3597, 3596, 1309, 535: 3601}, + {1335, 1335, 6: 1335}, + {1336, 1336, 6: 1336}, + // 2250 + {1337, 1337, 6: 1337}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3614}, + {291: 3613}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3612, 1459, 1460, 1458}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3611, 1459, 1460, 1458}, + // 2255 + {291: 3609}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3319, 1459, 1460, 1458, 661: 3610}, + {1338, 1338, 6: 1338}, + {1339, 1339, 6: 1339}, + {1340, 1340, 6: 1340}, + // 2260 + {1341, 1341, 6: 1341}, + {1122, 1122, 6: 1122, 366: 2977, 2976, 556: 3615}, + {1342, 1342, 6: 1342}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 3621, 348: 1725, 1459, 1460, 1458, 433: 3062, 477: 3620}, + {1344, 1344, 6: 1344}, + // 2265 + {1181, 1181, 6: 1181, 206: 3407, 514: 3619}, + {1343, 1343, 6: 1343}, + {1309, 1309, 4: 3597, 3596, 1309, 535: 3627}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3062, 477: 3623, 690: 3622}, + {6: 3625, 21: 3624}, + // 2270 + {6: 1279, 21: 1279}, + {1345, 1345, 6: 1345}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 1725, 1459, 1460, 1458, 433: 3062, 477: 3626}, + {6: 1278, 21: 1278}, + {1346, 1346, 6: 1346}, + // 2275 + {7: 2276, 353: 2275, 449: 3629}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 208: 1690, 248: 1689, 348: 1691, 1459, 1460, 1458, 434: 1688, 469: 3630}, + {114, 114, 6: 114, 239: 3229, 476: 3631}, + {1347, 1347, 6: 1347}, + {2: 1540, 1463, 1464, 1496, 7: 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 348: 3519, 1459, 1460, 1458, 641: 3633}, + // 2280 + {1290, 1290, 6: 3521, 218: 3524, 359: 3635, 492: 3634}, + {1350, 1350}, + {493, 493, 1540, 1463, 1464, 1496, 493, 1474, 1545, 1489, 1542, 1508, 1514, 1543, 1541, 1544, 1555, 1547, 1548, 1551, 1583, 22: 1576, 1595, 1517, 1520, 1521, 1475, 1611, 1495, 1538, 1651, 1631, 1633, 1632, 1532, 1483, 1503, 1589, 1590, 1586, 1552, 1594, 1534, 1488, 1572, 1610, 1494, 1507, 1509, 1482, 1481, 1556, 1505, 1579, 1519, 1524, 1537, 1564, 1609, 1502, 1557, 1587, 1567, 1592, 1606, 1603, 1581, 1529, 1530, 1619, 1467, 1574, 1620, 1476, 1477, 1478, 1639, 1622, 1484, 1569, 1485, 1487, 1570, 1497, 1498, 1647, 1623, 1577, 1573, 1511, 1512, 1608, 1516, 1625, 1518, 1525, 1526, 1528, 1461, 1465, 1468, 1470, 1469, 1471, 1621, 1617, 1473, 1604, 1539, 1559, 1479, 1480, 1486, 1490, 1491, 1578, 1582, 1500, 1575, 1501, 1553, 1492, 1566, 1648, 1612, 1624, 1504, 1563, 1546, 1599, 1600, 1601, 1602, 1613, 1533, 1549, 1580, 1561, 1591, 1588, 1593, 1653, 1618, 1558, 1616, 1562, 1513, 1596, 1597, 1605, 1598, 1515, 1628, 1629, 1627, 1626, 1607, 1614, 1522, 1523, 1630, 1660, 1527, 1554, 1560, 1615, 1531, 1634, 1535, 1462, 1466, 1635, 1636, 1637, 1472, 1638, 1585, 1640, 1641, 1642, 1643, 1493, 1644, 1499, 1645, 1646, 1457, 1650, 1649, 1506, 1652, 1654, 1510, 1571, 1550, 1584, 1536, 1565, 1568, 1655, 1656, 1657, 1658, 1659, 1661, 218: 493, 348: 2490, 1459, 1460, 1458, 522: 3636}, + {1290, 1290, 6: 2492, 218: 3524, 492: 3637}, + {1349, 1349}, + // 2285 + {212, 212, 3326, 3325, 6: 212, 1195, 3332, 3323, 3328, 3330, 13: 3329, 3327, 3331, 3335, 3333, 3334, 3342, 3337, 46: 3566, 80: 3559, 83: 3560, 88: 3561, 213: 3322, 220: 3502, 239: 1195, 296: 3556, 353: 1195, 355: 3339, 3338, 363: 3567, 365: 3558, 370: 3563, 377: 3564, 380: 3557, 383: 3562, 472: 3324, 495: 3336, 499: 3341, 549: 3565, 559: 3569, 565: 3555, 3639}, + {1305, 1305, 6: 1305}, + {1115, 1115, 47: 1375, 49: 1374, 70: 1388, 1359, 1361, 74: 1362, 79: 1377, 81: 1364, 85: 1390, 91: 1378, 93: 1360, 97: 1367, 1437, 206: 1383, 220: 1444, 234: 1387, 236: 1373, 249: 1370, 287: 1372, 352: 1379, 364: 1439, 1366, 370: 1356, 1358, 377: 1357, 406: 1429, 437: 1386, 1380, 1381, 1382, 444: 1385, 1384, 1426, 448: 1438, 454: 1365, 486: 1363, 488: 1400, 490: 1440, 1417, 494: 1424, 497: 1389, 502: 1432, 564: 1392, 567: 1393, 1394, 1395, 1396, 1397, 577: 1398, 1403, 1404, 1405, 1407, 1406, 586: 1399, 1376, 1369, 1408, 1409, 1410, 1414, 1411, 1413, 1412, 1391, 1401, 1368, 1402, 1371, 604: 1415, 609: 1416, 616: 1446, 1445, 1418, 620: 1442, 1419, 1420, 1435, 643: 1421, 649: 1423, 1441, 1425, 1422, 1427, 1428, 657: 3641, 669: 1430, 1431, 1443, 1434, 674: 1433}, + {242, 242}, + } +) + +var yyDebug = 0 + +type yyLexer interface { + Lex(lval *yySymType) int + Errorf(format string, a ...interface{}) + Errors() []error +} + +type yyLexerEx interface { + yyLexer + Reduced(rule, state int, lval *yySymType) bool +} + +func yySymName(c int) (s string) { + x, ok := yyXLAT[c] + if ok { + return yySymNames[x] + } + + return __yyfmt__.Sprintf("%d", c) +} + +func yylex1(yylex yyLexer, lval *yySymType) (n int) { + n = yylex.Lex(lval) + if n <= 0 { + n = yyEOFCode + } + if yyDebug >= 3 { + __yyfmt__.Printf("\nlex %s(%#x %d), lval: %+v\n", yySymName(n), n, n, lval) + } + return n +} + +func yyParse(yylex yyLexer, parser *Parser) int { + const yyError = 819 + + yyEx, _ := yylex.(yyLexerEx) + var yyn int + parser.yylval = yySymType{} + parser.yyVAL = yySymType{} + yyS := parser.cache + + Nerrs := 0 /* number of errors */ + Errflag := 0 /* error recovery flag */ + yyerrok := func() { + if yyDebug >= 2 { + __yyfmt__.Printf("yyerrok()\n") + } + Errflag = 0 + } + _ = yyerrok + yystate := 0 + yychar := -1 + var yyxchar int + var yyshift int + yyp := -1 + goto yystack + +ret0: + return 0 + +ret1: + return 1 + +yystack: + /* put a state and value onto the stack */ + yyp++ + if yyp >= len(yyS) { + nyys := make([]yySymType, len(yyS)*2) + copy(nyys, yyS) + yyS = nyys + parser.cache = yyS + } + yyS[yyp] = parser.yyVAL + yyS[yyp].yys = yystate + +yynewstate: + if yychar < 0 { + yychar = yylex1(yylex, &parser.yylval) + var ok bool + if yyxchar, ok = yyXLAT[yychar]; !ok { + yyxchar = len(yySymNames) // > tab width + } + } + if yyDebug >= 4 { + var a []int + for _, v := range yyS[:yyp+1] { + a = append(a, v.yys) + } + __yyfmt__.Printf("state stack %v\n", a) + } + row := yyParseTab[yystate] + yyn = 0 + if yyxchar < len(row) { + if yyn = int(row[yyxchar]); yyn != 0 { + yyn += yyTabOfs + } + } + switch { + case yyn > 0: // shift + yychar = -1 + parser.yyVAL = parser.yylval + yystate = yyn + yyshift = yyn + if yyDebug >= 2 { + __yyfmt__.Printf("shift, and goto state %d\n", yystate) + } + if Errflag > 0 { + Errflag-- + } + goto yystack + case yyn < 0: // reduce + case yystate == 1: // accept + if yyDebug >= 2 { + __yyfmt__.Println("accept") + } + goto ret0 + } + + if yyn == 0 { + /* error ... attempt to resume parsing */ + switch Errflag { + case 0: /* brand new error */ + if yyDebug >= 1 { + __yyfmt__.Printf("no action for %s in state %d\n", yySymName(yychar), yystate) + } + msg, ok := yyXErrors[yyXError{yystate, yyxchar}] + if !ok { + msg, ok = yyXErrors[yyXError{yystate, -1}] + } + if !ok && yyshift != 0 { + msg, ok = yyXErrors[yyXError{yyshift, yyxchar}] + } + if !ok { + msg, ok = yyXErrors[yyXError{yyshift, -1}] + } + if !ok || msg == "" { + msg = "syntax error" + } + // ignore goyacc error message + yylex.Errorf("") + Nerrs++ + fallthrough + + case 1, 2: /* incompletely recovered error ... try again */ + Errflag = 3 + + /* find a state where "error" is a legal shift action */ + for yyp >= 0 { + row := yyParseTab[yyS[yyp].yys] + if yyError < len(row) { + yyn = int(row[yyError]) + yyTabOfs + if yyn > 0 { // hit + if yyDebug >= 2 { + __yyfmt__.Printf("error recovery found error shift in state %d\n", yyS[yyp].yys) + } + yystate = yyn /* simulate a shift of "error" */ + goto yystack + } + } + + /* the current p has no shift on "error", pop stack */ + if yyDebug >= 2 { + __yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys) + } + yyp-- + } + /* there is no state on the stack with an error shift ... abort */ + if yyDebug >= 2 { + __yyfmt__.Printf("error recovery failed\n") + } + goto ret1 + + case 3: /* no shift yet; clobber input char */ + if yyDebug >= 2 { + __yyfmt__.Printf("error recovery discards %s\n", yySymName(yychar)) + } + if yychar == yyEOFCode { + goto ret1 + } + + yychar = -1 + goto yynewstate /* try again in the same state */ + } + } + + r := -yyn + x0 := yyReductions[r] + x, n := x0.xsym, x0.components + yypt := yyp + _ = yypt // guard against "declared and not used" + + yyp -= n + if yyp+1 >= len(yyS) { + nyys := make([]yySymType, len(yyS)*2) + copy(nyys, yyS) + yyS = nyys + parser.cache = yyS + } + parser.yyVAL = yyS[yyp+1] + + /* consult goto table to find next state */ + exState := yystate + yystate = int(yyParseTab[yyS[yyp].yys][x]) + yyTabOfs + /* reduction by production r */ + if yyDebug >= 2 { + __yyfmt__.Printf("reduce using rule %v (%s), and goto state %d\n", r, yySymNames[x], yystate) + } + + switch r { + case 2: + { + parser.yyVAL.statement = &ast.AlterTableStmt{ + Table: yyS[yypt-1].item.(*ast.TableName), + Specs: yyS[yypt-0].item.([]*ast.AlterTableSpec), + } + } + case 3: + { + parser.yyVAL.statement = &ast.AnalyzeTableStmt{TableNames: []*ast.TableName{yyS[yypt-4].item.(*ast.TableName)}, PartitionNames: yyS[yypt-1].item.([]model.CIStr), MaxNumBuckets: yyS[yypt-0].item.(uint64)} + } + case 4: + { + parser.yyVAL.statement = &ast.AnalyzeTableStmt{ + TableNames: []*ast.TableName{yyS[yypt-6].item.(*ast.TableName)}, + PartitionNames: yyS[yypt-3].item.([]model.CIStr), + IndexNames: yyS[yypt-1].item.([]model.CIStr), + IndexFlag: true, + MaxNumBuckets: yyS[yypt-0].item.(uint64), + } + } + case 5: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableOption, + Options: yyS[yypt-0].item.([]*ast.TableOption), + } + } + case 6: + { + op := &ast.AlterTableSpec{ + Tp: ast.AlterTableOption, + Options: []*ast.TableOption{{Tp: ast.TableOptionCharset, StrValue: yyS[yypt-1].item.(string)}}, + } + if yyS[yypt-0].item != "" { + op.Options = append(op.Options, &ast.TableOption{Tp: ast.TableOptionCollate, StrValue: yyS[yypt-0].item.(string)}) + } + parser.yyVAL.item = op + } + case 7: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableAddColumns, + NewColumns: []*ast.ColumnDef{yyS[yypt-1].item.(*ast.ColumnDef)}, + Position: yyS[yypt-0].item.(*ast.ColumnPosition), + } + } + case 8: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableAddColumns, + NewColumns: yyS[yypt-1].item.([]*ast.ColumnDef), + } + } + case 9: + { + constraint := yyS[yypt-0].item.(*ast.Constraint) + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableAddConstraint, + Constraint: constraint, + } + } + case 10: + { + var defs []*ast.PartitionDefinition + if yyS[yypt-0].item != nil { + defs = yyS[yypt-0].item.([]*ast.PartitionDefinition) + } + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableAddPartitions, + PartDefinitions: defs, + } + } + case 11: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableDropColumn, + OldColumnName: yyS[yypt-1].item.(*ast.ColumnName), + } + } + case 12: + { + parser.yyVAL.item = &ast.AlterTableSpec{Tp: ast.AlterTableDropPrimaryKey} + } + case 13: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableDropPartition, + Name: yyS[yypt-0].ident, + } + } + case 14: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableDropIndex, + Name: yyS[yypt-0].ident, + } + } + case 15: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableDropForeignKey, + Name: yyS[yypt-0].item.(string), + } + } + case 16: + { + parser.yyVAL.item = &ast.AlterTableSpec{} + } + case 17: + { + parser.yyVAL.item = &ast.AlterTableSpec{} + } + case 18: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableModifyColumn, + NewColumns: []*ast.ColumnDef{yyS[yypt-1].item.(*ast.ColumnDef)}, + Position: yyS[yypt-0].item.(*ast.ColumnPosition), + } + } + case 19: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableChangeColumn, + OldColumnName: yyS[yypt-2].item.(*ast.ColumnName), + NewColumns: []*ast.ColumnDef{yyS[yypt-1].item.(*ast.ColumnDef)}, + Position: yyS[yypt-0].item.(*ast.ColumnPosition), + } + } + case 20: + { + option := &ast.ColumnOption{Expr: yyS[yypt-0].expr} + colDef := &ast.ColumnDef{ + Name: yyS[yypt-3].item.(*ast.ColumnName), + Options: []*ast.ColumnOption{option}, + } + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableAlterColumn, + NewColumns: []*ast.ColumnDef{colDef}, + } + } + case 21: + { + colDef := &ast.ColumnDef{ + Name: yyS[yypt-2].item.(*ast.ColumnName), + } + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableAlterColumn, + NewColumns: []*ast.ColumnDef{colDef}, + } + } + case 22: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableRenameTable, + NewTable: yyS[yypt-0].item.(*ast.TableName), + } + } + case 23: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableRenameTable, + NewTable: yyS[yypt-0].item.(*ast.TableName), + } + } + case 24: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableRenameTable, + NewTable: yyS[yypt-0].item.(*ast.TableName), + } + } + case 25: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableRenameIndex, + FromKey: model.NewCIStr(yyS[yypt-2].ident), + ToKey: model.NewCIStr(yyS[yypt-0].ident), + } + } + case 26: + { + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableLock, + LockType: yyS[yypt-0].item.(ast.LockType), + } + } + case 27: + { + // Parse it and ignore it. Just for compatibility. + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableAlgorithm, + } + } + case 28: + { + // Parse it and ignore it. Just for compatibility. + parser.yyVAL.item = &ast.AlterTableSpec{ + Tp: ast.AlterTableForce, + } + } + case 34: + { + parser.yyVAL.item = ast.LockTypeNone + } + case 35: + { + parser.yyVAL.item = ast.LockTypeDefault + } + case 36: + { + parser.yyVAL.item = ast.LockTypeShared + } + case 37: + { + parser.yyVAL.item = ast.LockTypeExclusive + } + case 44: + { + parser.yyVAL.item = &ast.ColumnPosition{Tp: ast.ColumnPositionNone} + } + case 45: + { + parser.yyVAL.item = &ast.ColumnPosition{Tp: ast.ColumnPositionFirst} + } + case 46: + { + parser.yyVAL.item = &ast.ColumnPosition{ + Tp: ast.ColumnPositionAfter, + RelativeColumn: yyS[yypt-0].item.(*ast.ColumnName), + } + } + case 47: + { + parser.yyVAL.item = []*ast.AlterTableSpec{yyS[yypt-0].item.(*ast.AlterTableSpec)} + } + case 48: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.AlterTableSpec), yyS[yypt-0].item.(*ast.AlterTableSpec)) + } + case 49: + { + parser.yyVAL.item = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)} + } + case 50: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]model.CIStr), model.NewCIStr(yyS[yypt-0].ident)) + } + case 51: + { + parser.yyVAL.item = nil + } + case 52: + { + parser.yyVAL.item = nil + } + case 53: + { + parser.yyVAL.item = yyS[yypt-0].item.(string) + } + case 54: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 55: + { + parser.yyVAL.statement = &ast.RenameTableStmt{ + OldTable: yyS[yypt-0].item.([]*ast.TableToTable)[0].OldTable, + NewTable: yyS[yypt-0].item.([]*ast.TableToTable)[0].NewTable, + TableToTables: yyS[yypt-0].item.([]*ast.TableToTable), + } + } + case 56: + { + parser.yyVAL.item = []*ast.TableToTable{yyS[yypt-0].item.(*ast.TableToTable)} + } + case 57: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableToTable), yyS[yypt-0].item.(*ast.TableToTable)) + } + case 58: + { + parser.yyVAL.item = &ast.TableToTable{ + OldTable: yyS[yypt-2].item.(*ast.TableName), + NewTable: yyS[yypt-0].item.(*ast.TableName), + } + } + case 59: + { + parser.yyVAL.statement = &ast.AnalyzeTableStmt{TableNames: yyS[yypt-1].item.([]*ast.TableName), MaxNumBuckets: yyS[yypt-0].item.(uint64)} + } + case 60: + { + parser.yyVAL.statement = &ast.AnalyzeTableStmt{TableNames: []*ast.TableName{yyS[yypt-3].item.(*ast.TableName)}, IndexNames: yyS[yypt-1].item.([]model.CIStr), IndexFlag: true, MaxNumBuckets: yyS[yypt-0].item.(uint64)} + } + case 61: + { + parser.yyVAL.statement = &ast.AnalyzeTableStmt{TableNames: []*ast.TableName{yyS[yypt-3].item.(*ast.TableName)}, PartitionNames: yyS[yypt-1].item.([]model.CIStr), MaxNumBuckets: yyS[yypt-0].item.(uint64)} + } + case 62: + { + parser.yyVAL.statement = &ast.AnalyzeTableStmt{ + TableNames: []*ast.TableName{yyS[yypt-5].item.(*ast.TableName)}, + PartitionNames: yyS[yypt-3].item.([]model.CIStr), + IndexNames: yyS[yypt-1].item.([]model.CIStr), + IndexFlag: true, + MaxNumBuckets: yyS[yypt-0].item.(uint64), + } + } + case 63: + { + parser.yyVAL.item = uint64(0) + } + case 64: + { + parser.yyVAL.item = getUint64FromNUM(yyS[yypt-1].item) + } + case 65: + { + parser.yyVAL.item = &ast.Assignment{Column: yyS[yypt-2].item.(*ast.ColumnName), Expr: yyS[yypt-0].expr} + } + case 66: + { + parser.yyVAL.item = []*ast.Assignment{yyS[yypt-0].item.(*ast.Assignment)} + } + case 67: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.Assignment), yyS[yypt-0].item.(*ast.Assignment)) + } + case 68: + { + parser.yyVAL.item = []*ast.Assignment{} + } + case 70: + { + parser.yyVAL.statement = &ast.BeginStmt{} + } + case 71: + { + parser.yyVAL.statement = &ast.BeginStmt{} + } + case 72: + { + parser.yyVAL.statement = &ast.BeginStmt{} + } + case 73: + { + parser.yyVAL.statement = &ast.BinlogStmt{Str: yyS[yypt-0].ident} + } + case 74: + { + parser.yyVAL.item = []*ast.ColumnDef{yyS[yypt-0].item.(*ast.ColumnDef)} + } + case 75: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ColumnDef), yyS[yypt-0].item.(*ast.ColumnDef)) + } + case 76: + { + parser.yyVAL.item = &ast.ColumnDef{Name: yyS[yypt-2].item.(*ast.ColumnName), Tp: yyS[yypt-1].item.(*types.FieldType), Options: yyS[yypt-0].item.([]*ast.ColumnOption)} + } + case 77: + { + parser.yyVAL.item = &ast.ColumnName{Name: model.NewCIStr(yyS[yypt-0].ident)} + } + case 78: + { + parser.yyVAL.item = &ast.ColumnName{Table: model.NewCIStr(yyS[yypt-2].ident), Name: model.NewCIStr(yyS[yypt-0].ident)} + } + case 79: + { + parser.yyVAL.item = &ast.ColumnName{Schema: model.NewCIStr(yyS[yypt-4].ident), Table: model.NewCIStr(yyS[yypt-2].ident), Name: model.NewCIStr(yyS[yypt-0].ident)} + } + case 80: + { + parser.yyVAL.item = []*ast.ColumnName{yyS[yypt-0].item.(*ast.ColumnName)} + } + case 81: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ColumnName), yyS[yypt-0].item.(*ast.ColumnName)) + } + case 82: + { + parser.yyVAL.item = []*ast.ColumnName{} + } + case 83: + { + parser.yyVAL.item = yyS[yypt-0].item.([]*ast.ColumnName) + } + case 84: + { + parser.yyVAL.item = []*ast.ColumnName{} + } + case 85: + { + parser.yyVAL.item = yyS[yypt-1].item.([]*ast.ColumnName) + } + case 86: + { + parser.yyVAL.statement = &ast.CommitStmt{} + } + case 89: + { + parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionNotNull} + } + case 90: + { + parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionNull} + } + case 91: + { + parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionAutoIncrement} + } + case 92: + { + // KEY is normally a synonym for INDEX. The key attribute PRIMARY KEY + // can also be specified as just KEY when given in a column definition. + // See http://dev.mysql.com/doc/refman/5.7/en/create-table.html + parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionPrimaryKey} + } + case 93: + { + parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey} + } + case 94: + { + parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey} + } + case 95: + { + parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionDefaultValue, Expr: yyS[yypt-0].expr} + } + case 96: + { + nowFunc := &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP")} + parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionOnUpdate, Expr: nowFunc} + } + case 97: + { + parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionComment, Expr: ast.NewValueExpr(yyS[yypt-0].ident)} + } + case 98: + { + // See https://dev.mysql.com/doc/refman/5.7/en/create-table.html + // The CHECK clause is parsed but ignored by all storage engines. + parser.yyVAL.item = &ast.ColumnOption{} + } + case 99: + { + startOffset := parser.startOffset(&yyS[yypt-2]) + endOffset := parser.endOffset(&yyS[yypt-1]) + expr := yyS[yypt-2].expr + expr.SetText(parser.src[startOffset:endOffset]) + + parser.yyVAL.item = &ast.ColumnOption{ + Tp: ast.ColumnOptionGenerated, + Expr: expr, + Stored: yyS[yypt-0].item.(bool), + } + } + case 100: + { + parser.yyVAL.item = &ast.ColumnOption{ + Tp: ast.ColumnOptionReference, + Refer: yyS[yypt-0].item.(*ast.ReferenceDef), + } + } + case 103: + { + parser.yyVAL.item = false + } + case 104: + { + parser.yyVAL.item = false + } + case 105: + { + parser.yyVAL.item = true + } + case 106: + { + parser.yyVAL.item = []*ast.ColumnOption{yyS[yypt-0].item.(*ast.ColumnOption)} + } + case 107: + { + parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.ColumnOption), yyS[yypt-0].item.(*ast.ColumnOption)) + } + case 108: + { + parser.yyVAL.item = []*ast.ColumnOption{} + } + case 109: + { + parser.yyVAL.item = yyS[yypt-0].item.([]*ast.ColumnOption) + } + case 110: + { + c := &ast.Constraint{ + Tp: ast.ConstraintPrimaryKey, + Keys: yyS[yypt-2].item.([]*ast.IndexColName), + } + if yyS[yypt-0].item != nil { + c.Option = yyS[yypt-0].item.(*ast.IndexOption) + } + if yyS[yypt-4].item != nil { + if c.Option == nil { + c.Option = &ast.IndexOption{} + } + c.Option.Tp = yyS[yypt-4].item.(model.IndexType) + } + parser.yyVAL.item = c + } + case 111: + { + c := &ast.Constraint{ + Tp: ast.ConstraintFulltext, + Keys: yyS[yypt-2].item.([]*ast.IndexColName), + Name: yyS[yypt-4].item.(string), + } + if yyS[yypt-0].item != nil { + c.Option = yyS[yypt-0].item.(*ast.IndexOption) + } + parser.yyVAL.item = c + } + case 112: + { + c := &ast.Constraint{ + Tp: ast.ConstraintIndex, + Keys: yyS[yypt-2].item.([]*ast.IndexColName), + Name: yyS[yypt-5].item.(string), + } + if yyS[yypt-0].item != nil { + c.Option = yyS[yypt-0].item.(*ast.IndexOption) + } + if yyS[yypt-4].item != nil { + if c.Option == nil { + c.Option = &ast.IndexOption{} + } + c.Option.Tp = yyS[yypt-4].item.(model.IndexType) + } + parser.yyVAL.item = c + } + case 113: + { + c := &ast.Constraint{ + Tp: ast.ConstraintUniq, + Keys: yyS[yypt-2].item.([]*ast.IndexColName), + Name: yyS[yypt-5].item.(string), + } + if yyS[yypt-0].item != nil { + c.Option = yyS[yypt-0].item.(*ast.IndexOption) + } + if yyS[yypt-4].item != nil { + if c.Option == nil { + c.Option = &ast.IndexOption{} + } + c.Option.Tp = yyS[yypt-4].item.(model.IndexType) + } + parser.yyVAL.item = c + } + case 114: + { + parser.yyVAL.item = &ast.Constraint{ + Tp: ast.ConstraintForeignKey, + Keys: yyS[yypt-2].item.([]*ast.IndexColName), + Name: yyS[yypt-4].item.(string), + Refer: yyS[yypt-0].item.(*ast.ReferenceDef), + } + } + case 115: + { + var onDeleteOpt *ast.OnDeleteOpt + if yyS[yypt-1].item != nil { + onDeleteOpt = yyS[yypt-1].item.(*ast.OnDeleteOpt) + } + var onUpdateOpt *ast.OnUpdateOpt + if yyS[yypt-0].item != nil { + onUpdateOpt = yyS[yypt-0].item.(*ast.OnUpdateOpt) + } + parser.yyVAL.item = &ast.ReferenceDef{ + Table: yyS[yypt-5].item.(*ast.TableName), + IndexColNames: yyS[yypt-3].item.([]*ast.IndexColName), + OnDelete: onDeleteOpt, + OnUpdate: onUpdateOpt, + } + } + case 116: + { + parser.yyVAL.item = &ast.OnDeleteOpt{} + } + case 117: + { + parser.yyVAL.item = &ast.OnDeleteOpt{ReferOpt: yyS[yypt-0].item.(ast.ReferOptionType)} + } + case 118: + { + parser.yyVAL.item = &ast.OnUpdateOpt{} + } + case 119: + { + parser.yyVAL.item = &ast.OnUpdateOpt{ReferOpt: yyS[yypt-0].item.(ast.ReferOptionType)} + } + case 120: + { + parser.yyVAL.item = ast.ReferOptionRestrict + } + case 121: + { + parser.yyVAL.item = ast.ReferOptionCascade + } + case 122: + { + parser.yyVAL.item = ast.ReferOptionSetNull + } + case 123: + { + parser.yyVAL.item = ast.ReferOptionNoAction + } + case 126: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP")} + } + case 127: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP")} + } + case 128: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP")} + } + case 136: + { + parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].expr) + } + case 137: + { + parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Plus, V: ast.NewValueExpr(yyS[yypt-0].item)} + } + case 138: + { + parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Minus, V: ast.NewValueExpr(yyS[yypt-0].item)} + } + case 142: + { + var indexOption *ast.IndexOption + if yyS[yypt-1].item != nil { + indexOption = yyS[yypt-1].item.(*ast.IndexOption) + if indexOption.Tp == model.IndexTypeInvalid { + if yyS[yypt-7].item != nil { + indexOption.Tp = yyS[yypt-7].item.(model.IndexType) + } + } + } else { + indexOption = &ast.IndexOption{} + if yyS[yypt-7].item != nil { + indexOption.Tp = yyS[yypt-7].item.(model.IndexType) + } + } + parser.yyVAL.statement = &ast.CreateIndexStmt{ + Unique: yyS[yypt-10].item.(bool), + IndexName: yyS[yypt-8].ident, + Table: yyS[yypt-5].item.(*ast.TableName), + IndexColNames: yyS[yypt-3].item.([]*ast.IndexColName), + IndexOption: indexOption, + } + } + case 143: + { + parser.yyVAL.item = false + } + case 144: + { + parser.yyVAL.item = true + } + case 145: + { + //Order is parsed but just ignored as MySQL did + parser.yyVAL.item = &ast.IndexColName{Column: yyS[yypt-2].item.(*ast.ColumnName), Length: yyS[yypt-1].item.(int)} + } + case 146: + { + parser.yyVAL.item = []*ast.IndexColName{yyS[yypt-0].item.(*ast.IndexColName)} + } + case 147: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.IndexColName), yyS[yypt-0].item.(*ast.IndexColName)) + } + case 148: + { + parser.yyVAL.statement = &ast.CreateDatabaseStmt{ + IfNotExists: yyS[yypt-2].item.(bool), + Name: yyS[yypt-1].item.(string), + Options: yyS[yypt-0].item.([]*ast.DatabaseOption), + } + } + case 149: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 150: + { + parser.yyVAL.item = &ast.DatabaseOption{Tp: ast.DatabaseOptionCharset, Value: yyS[yypt-0].item.(string)} + } + case 151: + { + parser.yyVAL.item = &ast.DatabaseOption{Tp: ast.DatabaseOptionCollate, Value: yyS[yypt-0].item.(string)} + } + case 152: + { + parser.yyVAL.item = []*ast.DatabaseOption{} + } + case 154: + { + parser.yyVAL.item = []*ast.DatabaseOption{yyS[yypt-0].item.(*ast.DatabaseOption)} + } + case 155: + { + parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.DatabaseOption), yyS[yypt-0].item.(*ast.DatabaseOption)) + } + case 156: + { + stmt := yyS[yypt-5].item.(*ast.CreateTableStmt) + stmt.Table = yyS[yypt-6].item.(*ast.TableName) + stmt.IfNotExists = yyS[yypt-7].item.(bool) + stmt.Options = yyS[yypt-4].item.([]*ast.TableOption) + if yyS[yypt-3].item != nil { + stmt.Partition = yyS[yypt-3].item.(*ast.PartitionOptions) + } + stmt.OnDuplicate = yyS[yypt-2].item.(ast.OnDuplicateCreateTableSelectType) + stmt.Select = yyS[yypt-0].item.(*ast.CreateTableStmt).Select + parser.yyVAL.statement = stmt + } + case 157: + { + parser.yyVAL.statement = &ast.CreateTableStmt{ + Table: yyS[yypt-1].item.(*ast.TableName), + ReferTable: yyS[yypt-0].item.(*ast.TableName), + IfNotExists: yyS[yypt-2].item.(bool), + } + } + case 160: + { + parser.yyVAL.item = nil + } + case 161: + { + parser.yyVAL.item = nil + } + case 162: + { + parser.yyVAL.item = nil + } + case 163: + { + var defs []*ast.PartitionDefinition + if yyS[yypt-0].item != nil { + defs = yyS[yypt-0].item.([]*ast.PartitionDefinition) + } + parser.yyVAL.item = &ast.PartitionOptions{ + Tp: model.PartitionTypeRange, + Expr: yyS[yypt-4].expr.(ast.ExprNode), + Definitions: defs, + } + } + case 164: + { + var defs []*ast.PartitionDefinition + if yyS[yypt-0].item != nil { + defs = yyS[yypt-0].item.([]*ast.PartitionDefinition) + } + parser.yyVAL.item = &ast.PartitionOptions{ + Tp: model.PartitionTypeRange, + ColumnNames: yyS[yypt-3].item.([]*ast.ColumnName), + Definitions: defs, + } + } + case 172: + { + parser.yyVAL.item = nil + } + case 173: + { + parser.yyVAL.item = yyS[yypt-1].item.([]*ast.PartitionDefinition) + } + case 174: + { + parser.yyVAL.item = []*ast.PartitionDefinition{yyS[yypt-0].item.(*ast.PartitionDefinition)} + } + case 175: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.PartitionDefinition), yyS[yypt-0].item.(*ast.PartitionDefinition)) + } + case 176: + { + partDef := &ast.PartitionDefinition{ + Name: model.NewCIStr(yyS[yypt-2].ident), + } + switch yyS[yypt-1].item.(type) { + case []ast.ExprNode: + partDef.LessThan = yyS[yypt-1].item.([]ast.ExprNode) + case ast.ExprNode: + partDef.LessThan = make([]ast.ExprNode, 1) + partDef.LessThan[0] = yyS[yypt-1].item.(ast.ExprNode) + } + + if comment, ok := yyS[yypt-0].item.(string); ok { + partDef.Comment = comment + } + parser.yyVAL.item = partDef + } + case 177: + { + parser.yyVAL.item = nil + } + case 178: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 179: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 180: + { + if yyS[yypt-1].item != nil { + parser.yyVAL.item = yyS[yypt-1].item + } else { + parser.yyVAL.item = yyS[yypt-0].item + } + } + case 181: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 182: + { + parser.yyVAL.item = nil + } + case 183: + { + parser.yyVAL.item = nil + } + case 184: + { + parser.yyVAL.item = nil + } + case 185: + { + parser.yyVAL.item = &ast.MaxValueExpr{} + } + case 186: + { + parser.yyVAL.item = yyS[yypt-1].item + } + case 187: + { + parser.yyVAL.item = ast.OnDuplicateCreateTableSelectError + } + case 188: + { + parser.yyVAL.item = ast.OnDuplicateCreateTableSelectIgnore + } + case 189: + { + parser.yyVAL.item = ast.OnDuplicateCreateTableSelectReplace + } + case 192: + { + parser.yyVAL.item = &ast.CreateTableStmt{} + } + case 193: + { + parser.yyVAL.item = &ast.CreateTableStmt{Select: yyS[yypt-0].statement} + } + case 194: + { + parser.yyVAL.item = &ast.CreateTableStmt{Select: yyS[yypt-0].statement} + } + case 195: + { + parser.yyVAL.item = &ast.CreateTableStmt{Select: yyS[yypt-0].expr} + } + case 196: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 197: + { + parser.yyVAL.item = yyS[yypt-1].item + } + case 198: + { + startOffset := parser.startOffset(&yyS[yypt-1]) + selStmt := yyS[yypt-1].statement.(*ast.SelectStmt) + selStmt.SetText(string(parser.src[startOffset:])) + x := &ast.CreateViewStmt{ + OrReplace: yyS[yypt-9].item.(bool), + ViewName: yyS[yypt-4].item.(*ast.TableName), + Select: selStmt, + } + if yyS[yypt-3].item != nil { + x.Cols = yyS[yypt-3].item.([]model.CIStr) + } + parser.yyVAL.statement = x + } + case 199: + { + parser.yyVAL.item = false + } + case 200: + { + parser.yyVAL.item = true + } + case 201: + { + parser.yyVAL.item = "UNDEFINED" + } + case 202: + { + parser.yyVAL.item = strings.ToUpper(yyS[yypt-0].ident) + } + case 203: + { + parser.yyVAL.item = strings.ToUpper(yyS[yypt-0].ident) + } + case 204: + { + parser.yyVAL.item = strings.ToUpper(yyS[yypt-0].ident) + } + case 205: + { + parser.yyVAL.item = nil + } + case 206: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 207: + { + parser.yyVAL.item = "DEFINER" + } + case 208: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 209: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 210: + { + parser.yyVAL.item = yyS[yypt-0].item.(*ast.TableName) + } + case 211: + { + parser.yyVAL.item = nil + } + case 212: + { + parser.yyVAL.item = yyS[yypt-1].item.([]model.CIStr) + } + case 213: + { + parser.yyVAL.item = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)} + } + case 214: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]model.CIStr), model.NewCIStr(yyS[yypt-0].ident)) + } + case 215: + { + parser.yyVAL.item = nil + } + case 216: + { + parser.yyVAL.item = yyS[yypt-2].ident + } + case 217: + { + parser.yyVAL.item = yyS[yypt-2].ident + } + case 218: + { + parser.yyVAL.statement = &ast.DoStmt{ + Exprs: yyS[yypt-0].item.([]ast.ExprNode), + } + } + case 219: + { + // Single Table + tn := yyS[yypt-4].item.(*ast.TableName) + tn.IndexHints = yyS[yypt-3].item.([]*ast.IndexHint) + join := &ast.Join{Left: &ast.TableSource{Source: tn}, Right: nil} + x := &ast.DeleteStmt{ + TableRefs: &ast.TableRefsClause{TableRefs: join}, + Priority: yyS[yypt-8].item.(mysql.PriorityEnum), + Quick: yyS[yypt-7].item.(bool), + IgnoreErr: yyS[yypt-6].item.(bool), + } + if yyS[yypt-2].item != nil { + x.Where = yyS[yypt-2].item.(ast.ExprNode) + } + if yyS[yypt-1].item != nil { + x.Order = yyS[yypt-1].item.(*ast.OrderByClause) + } + if yyS[yypt-0].item != nil { + x.Limit = yyS[yypt-0].item.(*ast.Limit) + } + + parser.yyVAL.statement = x + } + case 220: + { + // Multiple Table + x := &ast.DeleteStmt{ + Priority: yyS[yypt-6].item.(mysql.PriorityEnum), + Quick: yyS[yypt-5].item.(bool), + IgnoreErr: yyS[yypt-4].item.(bool), + IsMultiTable: true, + BeforeFrom: true, + Tables: &ast.DeleteTableList{Tables: yyS[yypt-3].item.([]*ast.TableName)}, + TableRefs: &ast.TableRefsClause{TableRefs: yyS[yypt-1].item.(*ast.Join)}, + } + if yyS[yypt-7].item != nil { + x.TableHints = yyS[yypt-7].item.([]*ast.TableOptimizerHint) + } + if yyS[yypt-0].item != nil { + x.Where = yyS[yypt-0].item.(ast.ExprNode) + } + parser.yyVAL.statement = x + } + case 221: + { + // Multiple Table + x := &ast.DeleteStmt{ + Priority: yyS[yypt-7].item.(mysql.PriorityEnum), + Quick: yyS[yypt-6].item.(bool), + IgnoreErr: yyS[yypt-5].item.(bool), + IsMultiTable: true, + Tables: &ast.DeleteTableList{Tables: yyS[yypt-3].item.([]*ast.TableName)}, + TableRefs: &ast.TableRefsClause{TableRefs: yyS[yypt-1].item.(*ast.Join)}, + } + if yyS[yypt-8].item != nil { + x.TableHints = yyS[yypt-8].item.([]*ast.TableOptimizerHint) + } + if yyS[yypt-0].item != nil { + x.Where = yyS[yypt-0].item.(ast.ExprNode) + } + parser.yyVAL.statement = x + } + case 223: + { + parser.yyVAL.statement = &ast.DropDatabaseStmt{IfExists: yyS[yypt-1].item.(bool), Name: yyS[yypt-0].item.(string)} + } + case 224: + { + parser.yyVAL.statement = &ast.DropIndexStmt{IfExists: yyS[yypt-3].item.(bool), IndexName: yyS[yypt-2].ident, Table: yyS[yypt-0].item.(*ast.TableName)} + } + case 225: + { + parser.yyVAL.statement = &ast.DropTableStmt{Tables: yyS[yypt-1].item.([]*ast.TableName)} + } + case 226: + { + parser.yyVAL.statement = &ast.DropTableStmt{IfExists: true, Tables: yyS[yypt-1].item.([]*ast.TableName)} + } + case 227: + { + parser.yyVAL.statement = &ast.DoStmt{} + } + case 228: + { + parser.yyVAL.statement = &ast.DropUserStmt{IfExists: false, UserList: yyS[yypt-0].item.([]*auth.UserIdentity)} + } + case 229: + { + parser.yyVAL.statement = &ast.DropUserStmt{IfExists: true, UserList: yyS[yypt-0].item.([]*auth.UserIdentity)} + } + case 230: + { + parser.yyVAL.statement = &ast.DropStatsStmt{Table: yyS[yypt-0].item.(*ast.TableName)} + } + case 238: + { + parser.yyVAL.statement = nil + } + case 239: + { + parser.yyVAL.statement = &ast.TraceStmt{ + Stmt: yyS[yypt-0].statement, + Format: "row", + } + } + case 243: + { + parser.yyVAL.statement = &ast.ExplainStmt{ + Stmt: &ast.ShowStmt{ + Tp: ast.ShowColumns, + Table: yyS[yypt-0].item.(*ast.TableName), + }, + } + } + case 244: + { + parser.yyVAL.statement = &ast.ExplainStmt{ + Stmt: &ast.ShowStmt{ + Tp: ast.ShowColumns, + Table: yyS[yypt-1].item.(*ast.TableName), + Column: yyS[yypt-0].item.(*ast.ColumnName), + }, + } + } + case 245: + { + parser.yyVAL.statement = &ast.ExplainStmt{ + Stmt: yyS[yypt-0].statement, + Format: "row", + } + } + case 246: + { + parser.yyVAL.statement = &ast.ExplainStmt{ + Stmt: yyS[yypt-0].statement, + Format: yyS[yypt-1].ident, + } + } + case 247: + { + parser.yyVAL.statement = &ast.ExplainStmt{ + Stmt: yyS[yypt-0].statement, + Format: "row", + Analyze: true, + } + } + case 248: + { + parser.yyVAL.item = getUint64FromNUM(yyS[yypt-0].item) + } + case 250: + { + v := yyS[yypt-2].ident + v = strings.TrimPrefix(v, "@") + parser.yyVAL.expr = &ast.VariableExpr{ + Name: v, + IsGlobal: false, + IsSystem: false, + Value: yyS[yypt-0].expr, + } + } + case 251: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.LogicOr, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 252: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.LogicXor, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 253: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.LogicAnd, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 254: + { + expr, ok := yyS[yypt-0].expr.(*ast.ExistsSubqueryExpr) + if ok { + expr.Not = true + parser.yyVAL.expr = yyS[yypt-0].expr + } else { + parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Not, V: yyS[yypt-0].expr} + } + } + case 255: + { + parser.yyVAL.expr = &ast.IsTruthExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool), True: int64(1)} + } + case 256: + { + parser.yyVAL.expr = &ast.IsTruthExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool), True: int64(0)} + } + case 257: + { + /* https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_is */ + parser.yyVAL.expr = &ast.IsNullExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool)} + } + case 259: + { + parser.yyVAL.expr = &ast.MaxValueExpr{} + } + case 260: + { + parser.yyVAL.expr = yyS[yypt-0].expr + } + case 265: + { + parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr} + } + case 266: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr) + } + case 267: + { + parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr} + } + case 268: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr) + } + case 269: + { + parser.yyVAL.item = []ast.ExprNode{} + } + case 271: + { + parser.yyVAL.item = []ast.ExprNode{} + } + case 272: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 273: + { + expr := ast.NewValueExpr(yyS[yypt-0].item) + parser.yyVAL.item = []ast.ExprNode{expr} + } + case 274: + { + parser.yyVAL.expr = &ast.IsNullExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool)} + } + case 275: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: yyS[yypt-1].item.(opcode.Op), L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 276: + { + sq := yyS[yypt-0].expr.(*ast.SubqueryExpr) + sq.MultiRows = true + parser.yyVAL.expr = &ast.CompareSubqueryExpr{Op: yyS[yypt-2].item.(opcode.Op), L: yyS[yypt-3].expr, R: sq, All: yyS[yypt-1].item.(bool)} + } + case 277: + { + v := yyS[yypt-2].ident + v = strings.TrimPrefix(v, "@") + variable := &ast.VariableExpr{ + Name: v, + IsGlobal: false, + IsSystem: false, + Value: yyS[yypt-0].expr, + } + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: yyS[yypt-3].item.(opcode.Op), L: yyS[yypt-4].expr, R: variable} + } + case 279: + { + parser.yyVAL.item = opcode.GE + } + case 280: + { + parser.yyVAL.item = opcode.GT + } + case 281: + { + parser.yyVAL.item = opcode.LE + } + case 282: + { + parser.yyVAL.item = opcode.LT + } + case 283: + { + parser.yyVAL.item = opcode.NE + } + case 284: + { + parser.yyVAL.item = opcode.NE + } + case 285: + { + parser.yyVAL.item = opcode.EQ + } + case 286: + { + parser.yyVAL.item = opcode.NullEQ + } + case 287: + { + parser.yyVAL.item = true + } + case 288: + { + parser.yyVAL.item = false + } + case 289: + { + parser.yyVAL.item = true + } + case 290: + { + parser.yyVAL.item = false + } + case 291: + { + parser.yyVAL.item = true + } + case 292: + { + parser.yyVAL.item = false + } + case 293: + { + parser.yyVAL.item = true + } + case 294: + { + parser.yyVAL.item = false + } + case 295: + { + parser.yyVAL.item = true + } + case 296: + { + parser.yyVAL.item = false + } + case 297: + { + parser.yyVAL.item = false + } + case 298: + { + parser.yyVAL.item = false + } + case 299: + { + parser.yyVAL.item = true + } + case 300: + { + parser.yyVAL.expr = &ast.PatternInExpr{Expr: yyS[yypt-4].expr, Not: !yyS[yypt-3].item.(bool), List: yyS[yypt-1].item.([]ast.ExprNode)} + } + case 301: + { + sq := yyS[yypt-0].expr.(*ast.SubqueryExpr) + sq.MultiRows = true + parser.yyVAL.expr = &ast.PatternInExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool), Sel: sq} + } + case 302: + { + parser.yyVAL.expr = &ast.BetweenExpr{ + Expr: yyS[yypt-4].expr, + Left: yyS[yypt-2].expr, + Right: yyS[yypt-0].expr, + Not: !yyS[yypt-3].item.(bool), + } + } + case 303: + { + escape := yyS[yypt-0].item.(string) + if len(escape) > 1 { + yylex.Errorf("Incorrect arguments %s to ESCAPE", escape) + return 1 + } else if len(escape) == 0 { + escape = "\\" + } + parser.yyVAL.expr = &ast.PatternLikeExpr{ + Expr: yyS[yypt-3].expr, + Pattern: yyS[yypt-1].expr, + Not: !yyS[yypt-2].item.(bool), + Escape: escape[0], + } + } + case 304: + { + parser.yyVAL.expr = &ast.PatternRegexpExpr{Expr: yyS[yypt-2].expr, Pattern: yyS[yypt-0].expr, Not: !yyS[yypt-1].item.(bool)} + } + case 308: + { + parser.yyVAL.item = "\\" + } + case 309: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 310: + { + parser.yyVAL.item = &ast.SelectField{WildCard: &ast.WildCardField{}} + } + case 311: + { + wildCard := &ast.WildCardField{Table: model.NewCIStr(yyS[yypt-2].ident)} + parser.yyVAL.item = &ast.SelectField{WildCard: wildCard} + } + case 312: + { + wildCard := &ast.WildCardField{Schema: model.NewCIStr(yyS[yypt-4].ident), Table: model.NewCIStr(yyS[yypt-2].ident)} + parser.yyVAL.item = &ast.SelectField{WildCard: wildCard} + } + case 313: + { + expr := yyS[yypt-1].expr + asName := yyS[yypt-0].item.(string) + parser.yyVAL.item = &ast.SelectField{Expr: expr, AsName: model.NewCIStr(asName)} + } + case 314: + { + /* + * ODBC escape syntax. + * See https://dev.mysql.com/doc/refman/5.7/en/expressions.html + */ + expr := yyS[yypt-2].expr + asName := yyS[yypt-0].item.(string) + parser.yyVAL.item = &ast.SelectField{Expr: expr, AsName: model.NewCIStr(asName)} + } + case 315: + { + parser.yyVAL.item = "" + } + case 316: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 317: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 318: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 319: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 320: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 321: + { + field := yyS[yypt-0].item.(*ast.SelectField) + field.Offset = parser.startOffset(&yyS[yypt]) + parser.yyVAL.item = []*ast.SelectField{field} + } + case 322: + { + + fl := yyS[yypt-2].item.([]*ast.SelectField) + last := fl[len(fl)-1] + if last.Expr != nil && last.AsName.O == "" { + lastEnd := parser.endOffset(&yyS[yypt-1]) + last.SetText(parser.src[last.Offset:lastEnd]) + } + newField := yyS[yypt-0].item.(*ast.SelectField) + newField.Offset = parser.startOffset(&yyS[yypt]) + parser.yyVAL.item = append(fl, newField) + } + case 323: + { + parser.yyVAL.item = &ast.GroupByClause{Items: yyS[yypt-0].item.([]*ast.ByItem)} + } + case 324: + { + parser.yyVAL.item = nil + } + case 325: + { + parser.yyVAL.item = &ast.HavingClause{Expr: yyS[yypt-0].expr} + } + case 326: + { + parser.yyVAL.item = false + } + case 327: + { + parser.yyVAL.item = true + } + case 328: + { + parser.yyVAL.item = false + } + case 329: + { + parser.yyVAL.item = true + } + case 330: + { + parser.yyVAL.item = false + } + case 331: + { + parser.yyVAL.item = true + } + case 332: + { + parser.yyVAL.item = "" + } + case 333: + { + //"index name" + parser.yyVAL.item = yyS[yypt-0].ident + } + case 334: + { + parser.yyVAL.item = nil + } + case 335: + { + // Merge the options + if yyS[yypt-1].item == nil { + parser.yyVAL.item = yyS[yypt-0].item + } else { + opt1 := yyS[yypt-1].item.(*ast.IndexOption) + opt2 := yyS[yypt-0].item.(*ast.IndexOption) + if len(opt2.Comment) > 0 { + opt1.Comment = opt2.Comment + } else if opt2.Tp != 0 { + opt1.Tp = opt2.Tp + } + parser.yyVAL.item = opt1 + } + } + case 336: + { + parser.yyVAL.item = &ast.IndexOption{ + // TODO bug should be fix here! + // KeyBlockSize: $1.(uint64), + } + } + case 337: + { + parser.yyVAL.item = &ast.IndexOption{ + Tp: yyS[yypt-0].item.(model.IndexType), + } + } + case 338: + { + parser.yyVAL.item = &ast.IndexOption{ + Comment: yyS[yypt-0].ident, + } + } + case 339: + { + parser.yyVAL.item = model.IndexTypeBtree + } + case 340: + { + parser.yyVAL.item = model.IndexTypeHash + } + case 341: + { + parser.yyVAL.item = nil + } + case 342: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 548: + { + x := yyS[yypt-1].item.(*ast.InsertStmt) + x.Priority = yyS[yypt-5].item.(mysql.PriorityEnum) + x.IgnoreErr = yyS[yypt-4].item.(bool) + // Wraps many layers here so that it can be processed the same way as select statement. + ts := &ast.TableSource{Source: yyS[yypt-2].item.(*ast.TableName)} + x.Table = &ast.TableRefsClause{TableRefs: &ast.Join{Left: ts}} + if yyS[yypt-0].item != nil { + x.OnDuplicate = yyS[yypt-0].item.([]*ast.Assignment) + } + parser.yyVAL.statement = x + } + case 551: + { + parser.yyVAL.item = &ast.InsertStmt{ + Columns: yyS[yypt-3].item.([]*ast.ColumnName), + Lists: yyS[yypt-0].item.([][]ast.ExprNode), + } + } + case 552: + { + parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: yyS[yypt-0].statement.(*ast.SelectStmt)} + } + case 553: + { + parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-4].item.([]*ast.ColumnName), Select: yyS[yypt-1].statement.(*ast.SelectStmt)} + } + case 554: + { + parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: yyS[yypt-0].statement.(*ast.UnionStmt)} + } + case 555: + { + parser.yyVAL.item = &ast.InsertStmt{Lists: yyS[yypt-0].item.([][]ast.ExprNode)} + } + case 556: + { + parser.yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-1].statement.(*ast.SelectStmt)} + } + case 557: + { + parser.yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-0].statement.(*ast.SelectStmt)} + } + case 558: + { + parser.yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-0].statement.(*ast.UnionStmt)} + } + case 559: + { + parser.yyVAL.item = &ast.InsertStmt{Setlist: yyS[yypt-0].item.([]*ast.Assignment)} + } + case 562: + { + parser.yyVAL.item = [][]ast.ExprNode{yyS[yypt-0].item.([]ast.ExprNode)} + } + case 563: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([][]ast.ExprNode), yyS[yypt-0].item.([]ast.ExprNode)) + } + case 564: + { + parser.yyVAL.item = yyS[yypt-1].item + } + case 565: + { + parser.yyVAL.item = []ast.ExprNode{} + } + case 567: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr) + } + case 568: + { + parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr} + } + case 570: + { + parser.yyVAL.expr = &ast.DefaultExpr{} + } + case 571: + { + parser.yyVAL.item = &ast.Assignment{ + Column: yyS[yypt-2].item.(*ast.ColumnName), + Expr: yyS[yypt-0].expr, + } + } + case 572: + { + parser.yyVAL.item = []*ast.Assignment{} + } + case 573: + { + parser.yyVAL.item = []*ast.Assignment{yyS[yypt-0].item.(*ast.Assignment)} + } + case 574: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.Assignment), yyS[yypt-0].item.(*ast.Assignment)) + } + case 575: + { + parser.yyVAL.item = nil + } + case 576: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 577: + { + x := yyS[yypt-0].item.(*ast.InsertStmt) + x.IsReplace = true + x.Priority = yyS[yypt-3].item.(mysql.PriorityEnum) + ts := &ast.TableSource{Source: yyS[yypt-1].item.(*ast.TableName)} + x.Table = &ast.TableRefsClause{TableRefs: &ast.Join{Left: ts}} + parser.yyVAL.statement = x + } + case 578: + { + parser.yyVAL.ident = ast.DateLiteral + } + case 579: + { + parser.yyVAL.ident = ast.TimeLiteral + } + case 580: + { + parser.yyVAL.ident = ast.TimestampLiteral + } + case 581: + { + parser.yyVAL.expr = ast.NewValueExpr(false) + } + case 582: + { + parser.yyVAL.expr = ast.NewValueExpr(nil) + } + case 583: + { + parser.yyVAL.expr = ast.NewValueExpr(true) + } + case 584: + { + parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item) + } + case 585: + { + parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item) + } + case 586: + { + parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item) + } + case 587: + { + parser.yyVAL.expr = yyS[yypt-0].expr + } + case 588: + { + // See https://dev.mysql.com/doc/refman/5.7/en/charset-literal.html + co, err := charset.GetDefaultCollation(yyS[yypt-1].ident) + if err != nil { + yylex.Errorf("Get collation error for charset: %s", yyS[yypt-1].ident) + return 1 + } + expr := ast.NewValueExpr(yyS[yypt-0].ident) + tp := expr.GetType() + tp.Charset = yyS[yypt-1].ident + tp.Collate = co + if tp.Collate == charset.CollationBin { + tp.Flag |= mysql.BinaryFlag + } + parser.yyVAL.expr = expr + } + case 589: + { + parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item) + } + case 590: + { + parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item) + } + case 591: + { + expr := ast.NewValueExpr(yyS[yypt-0].ident) + parser.yyVAL.expr = expr + } + case 592: + { + valExpr := yyS[yypt-1].expr.(ast.ValueExpr) + strLit := valExpr.GetString() + expr := ast.NewValueExpr(strLit + yyS[yypt-0].ident) + // Fix #4239, use first string literal as projection name. + if valExpr.GetProjectionOffset() >= 0 { + expr.SetProjectionOffset(valExpr.GetProjectionOffset()) + } else { + expr.SetProjectionOffset(len(strLit)) + } + parser.yyVAL.expr = expr + } + case 593: + { + parser.yyVAL.item = &ast.OrderByClause{Items: yyS[yypt-0].item.([]*ast.ByItem)} + } + case 594: + { + parser.yyVAL.item = []*ast.ByItem{yyS[yypt-0].item.(*ast.ByItem)} + } + case 595: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ByItem), yyS[yypt-0].item.(*ast.ByItem)) + } + case 596: + { + expr := yyS[yypt-1].expr + valueExpr, ok := expr.(ast.ValueExpr) + if ok { + position, isPosition := valueExpr.GetValue().(int64) + if isPosition { + expr = &ast.PositionExpr{N: int(position)} + } + } + parser.yyVAL.item = &ast.ByItem{Expr: expr, Desc: yyS[yypt-0].item.(bool)} + } + case 597: + { + parser.yyVAL.item = false // ASC by default + } + case 598: + { + parser.yyVAL.item = false + } + case 599: + { + parser.yyVAL.item = true + } + case 600: + { + parser.yyVAL.item = nil + } + case 601: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 602: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Or, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 603: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.And, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 604: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.LeftShift, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 605: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.RightShift, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 606: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Plus, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 607: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Minus, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 608: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr("DATE_ADD"), + Args: []ast.ExprNode{ + yyS[yypt-4].expr, + yyS[yypt-1].expr, + ast.NewValueExpr(yyS[yypt-0].ident), + }, + } + } + case 609: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr("DATE_SUB"), + Args: []ast.ExprNode{ + yyS[yypt-4].expr, + yyS[yypt-1].expr, + ast.NewValueExpr(yyS[yypt-0].ident), + }, + } + } + case 610: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mul, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 611: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Div, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 612: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 613: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.IntDiv, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 614: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 615: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Xor, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} + } + case 617: + { + parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{ + Name: model.NewCIStr(yyS[yypt-0].ident), + }} + } + case 618: + { + parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{ + Table: model.NewCIStr(yyS[yypt-2].ident), + Name: model.NewCIStr(yyS[yypt-0].ident), + }} + } + case 619: + { + parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{ + Table: model.NewCIStr(yyS[yypt-2].ident), + Name: model.NewCIStr(yyS[yypt-0].ident), + }} + } + case 620: + { + parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{ + Schema: model.NewCIStr(yyS[yypt-4].ident), + Table: model.NewCIStr(yyS[yypt-2].ident), + Name: model.NewCIStr(yyS[yypt-0].ident), + }} + } + case 625: + { + // TODO: Create a builtin function hold expr and collation. When do evaluation, convert expr result using the collation. + parser.yyVAL.expr = yyS[yypt-2].expr + } + case 627: + { + parser.yyVAL.expr = ast.NewParamMarkerExpr(yyS[yypt].offset) + } + case 630: + { + parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Not, V: yyS[yypt-0].expr} + } + case 631: + { + parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.BitNeg, V: yyS[yypt-0].expr} + } + case 632: + { + parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Minus, V: yyS[yypt-0].expr} + } + case 633: + { + parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Plus, V: yyS[yypt-0].expr} + } + case 634: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.Concat), Args: []ast.ExprNode{yyS[yypt-2].expr, yyS[yypt-0].expr}} + } + case 635: + { + parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Not, V: yyS[yypt-0].expr} + } + case 637: + { + startOffset := parser.startOffset(&yyS[yypt-1]) + endOffset := parser.endOffset(&yyS[yypt]) + expr := yyS[yypt-1].expr + expr.SetText(parser.src[startOffset:endOffset]) + parser.yyVAL.expr = &ast.ParenthesesExpr{Expr: expr} + } + case 638: + { + values := append(yyS[yypt-3].item.([]ast.ExprNode), yyS[yypt-1].expr) + parser.yyVAL.expr = &ast.RowExpr{Values: values} + } + case 639: + { + values := append(yyS[yypt-3].item.([]ast.ExprNode), yyS[yypt-1].expr) + parser.yyVAL.expr = &ast.RowExpr{Values: values} + } + case 640: + { + sq := yyS[yypt-0].expr.(*ast.SubqueryExpr) + sq.Exists = true + parser.yyVAL.expr = &ast.ExistsSubqueryExpr{Sel: sq} + } + case 641: + { + // See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#operator_binary + x := types.NewFieldType(mysql.TypeString) + x.Charset = charset.CharsetBin + x.Collate = charset.CharsetBin + parser.yyVAL.expr = &ast.FuncCastExpr{ + Expr: yyS[yypt-0].expr, + Tp: x, + FunctionType: ast.CastBinaryOperator, + } + } + case 642: + { + /* See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_cast */ + tp := yyS[yypt-1].item.(*types.FieldType) + defaultFlen, defaultDecimal := mysql.GetDefaultFieldLengthAndDecimalForCast(tp.Tp) + if tp.Flen == types.UnspecifiedLength { + tp.Flen = defaultFlen + } + if tp.Decimal == types.UnspecifiedLength { + tp.Decimal = defaultDecimal + } + parser.yyVAL.expr = &ast.FuncCastExpr{ + Expr: yyS[yypt-3].expr, + Tp: tp, + FunctionType: ast.CastFunction, + } + } + case 643: + { + x := &ast.CaseExpr{WhenClauses: yyS[yypt-2].item.([]*ast.WhenClause)} + if yyS[yypt-3].expr != nil { + x.Value = yyS[yypt-3].expr + } + if yyS[yypt-1].item != nil { + x.ElseClause = yyS[yypt-1].item.(ast.ExprNode) + } + parser.yyVAL.expr = x + } + case 644: + { + // See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert + tp := yyS[yypt-1].item.(*types.FieldType) + defaultFlen, defaultDecimal := mysql.GetDefaultFieldLengthAndDecimalForCast(tp.Tp) + if tp.Flen == types.UnspecifiedLength { + tp.Flen = defaultFlen + } + if tp.Decimal == types.UnspecifiedLength { + tp.Decimal = defaultDecimal + } + parser.yyVAL.expr = &ast.FuncCastExpr{ + Expr: yyS[yypt-3].expr, + Tp: tp, + FunctionType: ast.CastConvertFunction, + } + } + case 645: + { + // See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert + charset1 := ast.NewValueExpr(yyS[yypt-1].item) + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-5].ident), + Args: []ast.ExprNode{yyS[yypt-3].expr, charset1}, + } + } + case 646: + { + parser.yyVAL.expr = &ast.DefaultExpr{Name: yyS[yypt-1].expr.(*ast.ColumnNameExpr).Name} + } + case 647: + { + parser.yyVAL.expr = &ast.ValuesExpr{Column: yyS[yypt-1].expr.(*ast.ColumnNameExpr)} + } + case 648: + { + expr := ast.NewValueExpr(yyS[yypt-0].ident) + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.JSONExtract), Args: []ast.ExprNode{yyS[yypt-2].expr, expr}} + } + case 649: + { + expr := ast.NewValueExpr(yyS[yypt-0].ident) + extract := &ast.FuncCallExpr{FnName: model.NewCIStr(ast.JSONExtract), Args: []ast.ExprNode{yyS[yypt-2].expr, expr}} + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.JSONUnquote), Args: []ast.ExprNode{extract}} + } + case 652: + { + parser.yyVAL.item = false + } + case 653: + { + parser.yyVAL.item = true + } + case 654: + { + parser.yyVAL.item = false + } + case 656: + { + parser.yyVAL.item = true + } + case 659: + { + parser.yyVAL.item = true + } + case 700: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)} + } + case 701: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)} + } + case 702: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-1].ident)} + } + case 703: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-2].ident)} + } + case 704: + { + args := []ast.ExprNode{} + if yyS[yypt-0].item != nil { + args = append(args, yyS[yypt-0].item.(ast.ExprNode)) + } + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-1].ident), Args: args} + } + case 705: + { + nilVal := ast.NewValueExpr(nil) + args := yyS[yypt-1].item.([]ast.ExprNode) + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(ast.CharFunc), + Args: append(args, nilVal), + } + } + case 706: + { + charset1 := ast.NewValueExpr(yyS[yypt-1].item) + args := yyS[yypt-3].item.([]ast.ExprNode) + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(ast.CharFunc), + Args: append(args, charset1), + } + } + case 707: + { + expr := ast.NewValueExpr(yyS[yypt-0].ident) + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.DateLiteral), Args: []ast.ExprNode{expr}} + } + case 708: + { + expr := ast.NewValueExpr(yyS[yypt-0].ident) + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.TimeLiteral), Args: []ast.ExprNode{expr}} + } + case 709: + { + expr := ast.NewValueExpr(yyS[yypt-0].ident) + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.TimestampLiteral), Args: []ast.ExprNode{expr}} + } + case 710: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.InsertFunc), Args: yyS[yypt-1].item.([]ast.ExprNode)} + } + case 711: + { + parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-3].expr, R: yyS[yypt-1].expr} + } + case 712: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.PasswordFunc), Args: yyS[yypt-1].item.([]ast.ExprNode)} + } + case 713: + { + // This is ODBC syntax for date and time literals. + // See: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html + expr := ast.NewValueExpr(yyS[yypt-1].ident) + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-2].ident), Args: []ast.ExprNode{expr}} + } + case 714: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)} + } + case 715: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)} + } + case 716: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-5].ident), + Args: []ast.ExprNode{ + yyS[yypt-3].expr, + yyS[yypt-1].expr, + ast.NewValueExpr("DAY"), + }, + } + } + case 717: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-7].ident), + Args: []ast.ExprNode{ + yyS[yypt-5].expr, + yyS[yypt-2].expr, + ast.NewValueExpr(yyS[yypt-1].ident), + }, + } + } + case 718: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-7].ident), + Args: []ast.ExprNode{ + yyS[yypt-5].expr, + yyS[yypt-2].expr, + ast.NewValueExpr(yyS[yypt-1].ident), + }, + } + } + case 719: + { + timeUnit := ast.NewValueExpr(yyS[yypt-3].ident) + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-5].ident), + Args: []ast.ExprNode{timeUnit, yyS[yypt-1].expr}, + } + } + case 720: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-5].ident), + Args: []ast.ExprNode{ast.NewValueExpr(yyS[yypt-3].ident), yyS[yypt-1].expr}, + } + } + case 721: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-5].ident), Args: []ast.ExprNode{yyS[yypt-3].expr, yyS[yypt-1].expr}} + } + case 722: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-5].ident), + Args: []ast.ExprNode{yyS[yypt-3].expr, yyS[yypt-1].expr}, + } + } + case 723: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-5].ident), + Args: []ast.ExprNode{yyS[yypt-3].expr, yyS[yypt-1].expr}, + } + } + case 724: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-7].ident), + Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-3].expr, yyS[yypt-1].expr}, + } + } + case 725: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-7].ident), + Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-3].expr, yyS[yypt-1].expr}, + } + } + case 726: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-7].ident), + Args: []ast.ExprNode{ast.NewValueExpr(yyS[yypt-5].ident), yyS[yypt-3].expr, yyS[yypt-1].expr}, + } + } + case 727: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-7].ident), + Args: []ast.ExprNode{ast.NewValueExpr(yyS[yypt-5].ident), yyS[yypt-3].expr, yyS[yypt-1].expr}, + } + } + case 728: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-3].ident), + Args: []ast.ExprNode{yyS[yypt-1].expr}, + } + } + case 729: + { + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-5].ident), + Args: []ast.ExprNode{yyS[yypt-1].expr, yyS[yypt-3].expr}, + } + } + case 730: + { + nilVal := ast.NewValueExpr(nil) + direction := ast.NewValueExpr(int(yyS[yypt-3].item.(ast.TrimDirectionType))) + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-5].ident), + Args: []ast.ExprNode{yyS[yypt-1].expr, nilVal, direction}, + } + } + case 731: + { + direction := ast.NewValueExpr(int(yyS[yypt-4].item.(ast.TrimDirectionType))) + parser.yyVAL.expr = &ast.FuncCallExpr{ + FnName: model.NewCIStr(yyS[yypt-6].ident), + Args: []ast.ExprNode{yyS[yypt-1].expr, yyS[yypt-3].expr, direction}, + } + } + case 732: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 733: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 734: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 735: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 740: + { + parser.yyVAL.item = ast.TrimBoth + } + case 741: + { + parser.yyVAL.item = ast.TrimLeading + } + case 742: + { + parser.yyVAL.item = ast.TrimTrailing + } + case 743: + { + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-1].expr}, Distinct: yyS[yypt-2].item.(bool)} + } + case 744: + { + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-3].ident, Args: []ast.ExprNode{yyS[yypt-1].expr}} + } + case 745: + { + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-1].expr}} + } + case 746: + { + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-3].ident, Args: []ast.ExprNode{yyS[yypt-1].expr}} + } + case 747: + { + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-1].expr}} + } + case 748: + { + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-3].ident, Args: []ast.ExprNode{yyS[yypt-1].expr}} + } + case 749: + { + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-1].expr}} + } + case 750: + { + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: yyS[yypt-1].item.([]ast.ExprNode), Distinct: true} + } + case 751: + { + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-1].expr}} + } + case 752: + { + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-3].ident, Args: []ast.ExprNode{yyS[yypt-1].expr}} + } + case 753: + { + args := []ast.ExprNode{ast.NewValueExpr(1)} + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-3].ident, Args: args} + } + case 754: + { + args := yyS[yypt-3].item.([]ast.ExprNode) + args = append(args, yyS[yypt-1].item.(ast.ExprNode)) + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-6].ident, Args: args, Distinct: yyS[yypt-4].item.(bool)} + } + case 755: + { + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-1].expr}, Distinct: yyS[yypt-2].item.(bool)} + } + case 756: + { + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-1].expr}, Distinct: yyS[yypt-2].item.(bool)} + } + case 757: + { + parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-1].expr}, Distinct: yyS[yypt-2].item.(bool)} + } + case 758: + { + parser.yyVAL.item = ast.NewValueExpr(",") + } + case 759: + { + parser.yyVAL.item = ast.NewValueExpr(yyS[yypt-0].ident) + } + case 760: + { + parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)} + } + case 761: + { + parser.yyVAL.item = nil + } + case 762: + { + parser.yyVAL.item = nil + } + case 763: + { + expr := ast.NewValueExpr(yyS[yypt-1].item) + parser.yyVAL.item = expr + } + case 764: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 765: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 766: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 767: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 768: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 769: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 770: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 771: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 772: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 773: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 774: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 775: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 776: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 777: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 778: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 779: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 780: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 781: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 782: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 783: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 784: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 785: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 786: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 787: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 788: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 789: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 790: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 791: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 792: + { + parser.yyVAL.ident = strings.ToUpper(yyS[yypt-0].ident) + } + case 793: + { + parser.yyVAL.expr = nil + } + case 794: + { + parser.yyVAL.expr = yyS[yypt-0].expr + } + case 795: + { + parser.yyVAL.item = []*ast.WhenClause{yyS[yypt-0].item.(*ast.WhenClause)} + } + case 796: + { + parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.WhenClause), yyS[yypt-0].item.(*ast.WhenClause)) + } + case 797: + { + parser.yyVAL.item = &ast.WhenClause{ + Expr: yyS[yypt-2].expr, + Result: yyS[yypt-0].expr, + } + } + case 798: + { + parser.yyVAL.item = nil + } + case 799: + { + parser.yyVAL.item = yyS[yypt-0].expr + } + case 800: + { + x := types.NewFieldType(mysql.TypeVarString) + x.Flen = yyS[yypt-0].item.(int) // TODO: Flen should be the flen of expression + if x.Flen != types.UnspecifiedLength { + x.Tp = mysql.TypeString + } + x.Charset = charset.CharsetBin + x.Collate = charset.CollationBin + x.Flag |= mysql.BinaryFlag + parser.yyVAL.item = x + } + case 801: + { + x := types.NewFieldType(mysql.TypeVarString) + x.Flen = yyS[yypt-1].item.(int) // TODO: Flen should be the flen of expression + x.Charset = yyS[yypt-0].item.(*ast.OptBinary).Charset + if yyS[yypt-0].item.(*ast.OptBinary).IsBinary { + x.Flag |= mysql.BinaryFlag + } + if x.Charset == "" { + x.Charset = charset.CharsetUTF8 + x.Collate = charset.CollationUTF8 + } + parser.yyVAL.item = x + } + case 802: + { + x := types.NewFieldType(mysql.TypeDate) + x.Charset = charset.CharsetBin + x.Collate = charset.CollationBin + x.Flag |= mysql.BinaryFlag + parser.yyVAL.item = x + } + case 803: + { + x := types.NewFieldType(mysql.TypeDatetime) + x.Flen, _ = mysql.GetDefaultFieldLengthAndDecimalForCast(mysql.TypeDatetime) + x.Decimal = yyS[yypt-0].item.(int) + if x.Decimal > 0 { + x.Flen = x.Flen + 1 + x.Decimal + } + x.Charset = charset.CharsetBin + x.Collate = charset.CollationBin + x.Flag |= mysql.BinaryFlag + parser.yyVAL.item = x + } + case 804: + { + fopt := yyS[yypt-0].item.(*ast.FloatOpt) + x := types.NewFieldType(mysql.TypeNewDecimal) + x.Flen = fopt.Flen + x.Decimal = fopt.Decimal + x.Charset = charset.CharsetBin + x.Collate = charset.CollationBin + x.Flag |= mysql.BinaryFlag + parser.yyVAL.item = x + } + case 805: + { + x := types.NewFieldType(mysql.TypeDuration) + x.Flen, _ = mysql.GetDefaultFieldLengthAndDecimalForCast(mysql.TypeDuration) + x.Decimal = yyS[yypt-0].item.(int) + if x.Decimal > 0 { + x.Flen = x.Flen + 1 + x.Decimal + } + x.Charset = charset.CharsetBin + x.Collate = charset.CollationBin + x.Flag |= mysql.BinaryFlag + parser.yyVAL.item = x + } + case 806: + { + x := types.NewFieldType(mysql.TypeLonglong) + x.Charset = charset.CharsetBin + x.Collate = charset.CollationBin + x.Flag |= mysql.BinaryFlag + parser.yyVAL.item = x + } + case 807: + { + x := types.NewFieldType(mysql.TypeLonglong) + x.Flag |= mysql.UnsignedFlag | mysql.BinaryFlag + x.Charset = charset.CharsetBin + x.Collate = charset.CollationBin + parser.yyVAL.item = x + } + case 808: + { + x := types.NewFieldType(mysql.TypeJSON) + x.Flag |= mysql.BinaryFlag | (mysql.ParseToJSONFlag) + x.Charset = charset.CharsetUTF8 + x.Collate = charset.CollationUTF8 + parser.yyVAL.item = x + } + case 809: + { + parser.yyVAL.item = mysql.NoPriority + } + case 810: + { + parser.yyVAL.item = mysql.LowPriority + } + case 811: + { + parser.yyVAL.item = mysql.HighPriority + } + case 812: + { + parser.yyVAL.item = mysql.DelayedPriority + } + case 813: + { + parser.yyVAL.item = &ast.TableName{Name: model.NewCIStr(yyS[yypt-0].ident)} + } + case 814: + { + parser.yyVAL.item = &ast.TableName{Schema: model.NewCIStr(yyS[yypt-2].ident), Name: model.NewCIStr(yyS[yypt-0].ident)} + } + case 815: + { + tbl := []*ast.TableName{yyS[yypt-0].item.(*ast.TableName)} + parser.yyVAL.item = tbl + } + case 816: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableName), yyS[yypt-0].item.(*ast.TableName)) + } + case 817: + { + parser.yyVAL.item = false + } + case 818: + { + parser.yyVAL.item = true + } + case 819: + { + var sqlText string + var sqlVar *ast.VariableExpr + switch yyS[yypt-0].item.(type) { + case string: + sqlText = yyS[yypt-0].item.(string) + case *ast.VariableExpr: + sqlVar = yyS[yypt-0].item.(*ast.VariableExpr) + } + parser.yyVAL.statement = &ast.PrepareStmt{ + Name: yyS[yypt-2].ident, + SQLText: sqlText, + SQLVar: sqlVar, + } + } + case 820: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 821: + { + parser.yyVAL.item = yyS[yypt-0].expr.(interface{}) + } + case 822: + { + parser.yyVAL.statement = &ast.ExecuteStmt{Name: yyS[yypt-0].ident} + } + case 823: + { + parser.yyVAL.statement = &ast.ExecuteStmt{ + Name: yyS[yypt-2].ident, + UsingVars: yyS[yypt-0].item.([]ast.ExprNode), + } + } + case 824: + { + parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr} + } + case 825: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr) + } + case 826: + { + parser.yyVAL.statement = &ast.DeallocateStmt{Name: yyS[yypt-0].ident} + } + case 829: + { + parser.yyVAL.statement = &ast.RollbackStmt{} + } + case 830: + { + st := &ast.SelectStmt{ + SelectStmtOpts: yyS[yypt-1].item.(*ast.SelectStmtOpts), + Distinct: yyS[yypt-1].item.(*ast.SelectStmtOpts).Distinct, + Fields: yyS[yypt-0].item.(*ast.FieldList), + } + parser.yyVAL.item = st + } + case 831: + { + st := yyS[yypt-3].item.(*ast.SelectStmt) + lastField := st.Fields.Fields[len(st.Fields.Fields)-1] + if lastField.Expr != nil && lastField.AsName.O == "" { + lastEnd := yyS[yypt-2].offset - 1 + lastField.SetText(parser.src[lastField.Offset:lastEnd]) + } + if yyS[yypt-1].item != nil { + st.Where = yyS[yypt-1].item.(ast.ExprNode) + } + + if yyS[yypt-0].item != nil { + st.OrderBy = yyS[yypt-0].item.(*ast.OrderByClause) + } + } + case 832: + { + st := yyS[yypt-5].item.(*ast.SelectStmt) + st.From = yyS[yypt-3].item.(*ast.TableRefsClause) + if st.SelectStmtOpts.TableHints != nil { + st.TableHints = st.SelectStmtOpts.TableHints + } + lastField := st.Fields.Fields[len(st.Fields.Fields)-1] + if lastField.Expr != nil && lastField.AsName.O == "" { + lastEnd := parser.endOffset(&yyS[yypt-4]) + lastField.SetText(parser.src[lastField.Offset:lastEnd]) + } + if yyS[yypt-2].item != nil { + st.Where = yyS[yypt-2].item.(ast.ExprNode) + } + if yyS[yypt-1].item != nil { + st.GroupBy = yyS[yypt-1].item.(*ast.GroupByClause) + } + if yyS[yypt-0].item != nil { + st.Having = yyS[yypt-0].item.(*ast.HavingClause) + } + parser.yyVAL.item = st + } + case 833: + { + st := yyS[yypt-3].item.(*ast.SelectStmt) + st.LockTp = yyS[yypt-0].item.(ast.SelectLockType) + lastField := st.Fields.Fields[len(st.Fields.Fields)-1] + if lastField.Expr != nil && lastField.AsName.O == "" { + src := parser.src + var lastEnd int + if yyS[yypt-2].item != nil { + lastEnd = yyS[yypt-2].offset - 1 + } else if yyS[yypt-1].item != nil { + lastEnd = yyS[yypt-1].offset - 1 + } else if yyS[yypt-0].item != ast.SelectLockNone { + lastEnd = yyS[yypt].offset - 1 + } else { + lastEnd = len(src) + if src[lastEnd-1] == ';' { + lastEnd-- + } + } + lastField.SetText(src[lastField.Offset:lastEnd]) + } + if yyS[yypt-2].item != nil { + st.OrderBy = yyS[yypt-2].item.(*ast.OrderByClause) + } + if yyS[yypt-1].item != nil { + st.Limit = yyS[yypt-1].item.(*ast.Limit) + } + parser.yyVAL.statement = st + } + case 834: + { + st := yyS[yypt-2].item.(*ast.SelectStmt) + st.LockTp = yyS[yypt-0].item.(ast.SelectLockType) + if yyS[yypt-1].item != nil { + st.Limit = yyS[yypt-1].item.(*ast.Limit) + } + parser.yyVAL.statement = st + } + case 835: + { + st := yyS[yypt-3].item.(*ast.SelectStmt) + st.LockTp = yyS[yypt-0].item.(ast.SelectLockType) + if yyS[yypt-2].item != nil { + st.OrderBy = yyS[yypt-2].item.(*ast.OrderByClause) + } + if yyS[yypt-1].item != nil { + st.Limit = yyS[yypt-1].item.(*ast.Limit) + } + parser.yyVAL.statement = st + } + case 837: + { + parser.yyVAL.item = &ast.TableRefsClause{TableRefs: yyS[yypt-0].item.(*ast.Join)} + } + case 838: + { + if j, ok := yyS[yypt-0].item.(*ast.Join); ok { + // if $1 is Join, use it directly + parser.yyVAL.item = j + } else { + parser.yyVAL.item = &ast.Join{Left: yyS[yypt-0].item.(ast.ResultSetNode), Right: nil} + } + } + case 839: + { + /* from a, b is default cross join */ + parser.yyVAL.item = &ast.Join{Left: yyS[yypt-2].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), Tp: ast.CrossJoin} + } + case 840: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 841: + { + /* + * ODBC escape syntax for outer join is { OJ join_table } + * Use an Identifier for OJ + */ + parser.yyVAL.item = yyS[yypt-1].item + } + case 842: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 843: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 844: + { + tn := yyS[yypt-2].item.(*ast.TableName) + tn.IndexHints = yyS[yypt-0].item.([]*ast.IndexHint) + parser.yyVAL.item = &ast.TableSource{Source: tn, AsName: yyS[yypt-1].item.(model.CIStr)} + } + case 845: + { + st := yyS[yypt-2].statement.(*ast.SelectStmt) + endOffset := parser.endOffset(&yyS[yypt-1]) + parser.setLastSelectFieldText(st, endOffset) + parser.yyVAL.item = &ast.TableSource{Source: yyS[yypt-2].statement.(*ast.SelectStmt), AsName: yyS[yypt-0].item.(model.CIStr)} + } + case 846: + { + parser.yyVAL.item = &ast.TableSource{Source: yyS[yypt-2].statement.(*ast.UnionStmt), AsName: yyS[yypt-0].item.(model.CIStr)} + } + case 847: + { + parser.yyVAL.item = yyS[yypt-1].item + } + case 848: + { + parser.yyVAL.item = model.CIStr{} + } + case 849: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 850: + { + parser.yyVAL.item = model.NewCIStr(yyS[yypt-0].ident) + } + case 851: + { + parser.yyVAL.item = model.NewCIStr(yyS[yypt-0].ident) + } + case 852: + { + parser.yyVAL.item = ast.HintUse + } + case 853: + { + parser.yyVAL.item = ast.HintIgnore + } + case 854: + { + parser.yyVAL.item = ast.HintForce + } + case 855: + { + parser.yyVAL.item = ast.HintForScan + } + case 856: + { + parser.yyVAL.item = ast.HintForJoin + } + case 857: + { + parser.yyVAL.item = ast.HintForOrderBy + } + case 858: + { + parser.yyVAL.item = ast.HintForGroupBy + } + case 859: + { + parser.yyVAL.item = &ast.IndexHint{ + IndexNames: yyS[yypt-1].item.([]model.CIStr), + HintType: yyS[yypt-4].item.(ast.IndexHintType), + HintScope: yyS[yypt-3].item.(ast.IndexHintScope), + } + } + case 860: + { + var nameList []model.CIStr + parser.yyVAL.item = nameList + } + case 861: + { + parser.yyVAL.item = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)} + } + case 862: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]model.CIStr), model.NewCIStr(yyS[yypt-0].ident)) + } + case 863: + { + parser.yyVAL.item = []*ast.IndexHint{yyS[yypt-0].item.(*ast.IndexHint)} + } + case 864: + { + parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.IndexHint), yyS[yypt-0].item.(*ast.IndexHint)) + } + case 865: + { + var hintList []*ast.IndexHint + parser.yyVAL.item = hintList + } + case 866: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 867: + { + parser.yyVAL.item = &ast.Join{Left: yyS[yypt-2].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), Tp: ast.CrossJoin} + } + case 868: + { + on := &ast.OnCondition{Expr: yyS[yypt-0].expr} + parser.yyVAL.item = &ast.Join{Left: yyS[yypt-4].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), Tp: ast.CrossJoin, On: on} + } + case 869: + { + parser.yyVAL.item = &ast.Join{Left: yyS[yypt-6].item.(ast.ResultSetNode), Right: yyS[yypt-4].item.(ast.ResultSetNode), Tp: ast.CrossJoin, Using: yyS[yypt-1].item.([]*ast.ColumnName)} + } + case 870: + { + on := &ast.OnCondition{Expr: yyS[yypt-0].expr} + parser.yyVAL.item = &ast.Join{Left: yyS[yypt-6].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), Tp: yyS[yypt-5].item.(ast.JoinType), On: on} + } + case 871: + { + parser.yyVAL.item = &ast.Join{Left: yyS[yypt-8].item.(ast.ResultSetNode), Right: yyS[yypt-4].item.(ast.ResultSetNode), Tp: yyS[yypt-7].item.(ast.JoinType), Using: yyS[yypt-1].item.([]*ast.ColumnName)} + } + case 872: + { + parser.yyVAL.item = &ast.Join{Left: yyS[yypt-3].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), NaturalJoin: true} + } + case 873: + { + parser.yyVAL.item = &ast.Join{Left: yyS[yypt-5].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), Tp: yyS[yypt-3].item.(ast.JoinType), NaturalJoin: true} + } + case 874: + { + parser.yyVAL.item = &ast.Join{Left: yyS[yypt-2].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), StraightJoin: true} + } + case 875: + { + on := &ast.OnCondition{Expr: yyS[yypt-0].expr} + parser.yyVAL.item = &ast.Join{Left: yyS[yypt-4].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), StraightJoin: true, On: on} + } + case 876: + { + parser.yyVAL.item = ast.LeftJoin + } + case 877: + { + parser.yyVAL.item = ast.RightJoin + } + case 883: + { + parser.yyVAL.item = nil + } + case 884: + { + parser.yyVAL.item = &ast.Limit{Count: yyS[yypt-0].item.(ast.ValueExpr)} + } + case 885: + { + parser.yyVAL.item = ast.NewValueExpr(yyS[yypt-0].item) + } + case 886: + { + parser.yyVAL.item = ast.NewParamMarkerExpr(yyS[yypt].offset) + } + case 887: + { + parser.yyVAL.item = nil + } + case 888: + { + parser.yyVAL.item = &ast.Limit{Count: yyS[yypt-0].item.(ast.ExprNode)} + } + case 889: + { + parser.yyVAL.item = &ast.Limit{Offset: yyS[yypt-2].item.(ast.ExprNode), Count: yyS[yypt-0].item.(ast.ExprNode)} + } + case 890: + { + parser.yyVAL.item = &ast.Limit{Offset: yyS[yypt-0].item.(ast.ExprNode), Count: yyS[yypt-2].item.(ast.ExprNode)} + } + case 891: + { + opt := &ast.SelectStmtOpts{} + if yyS[yypt-5].item != nil { + opt.TableHints = yyS[yypt-5].item.([]*ast.TableOptimizerHint) + } + if yyS[yypt-4].item != nil { + opt.Distinct = yyS[yypt-4].item.(bool) + } + if yyS[yypt-3].item != nil { + opt.Priority = yyS[yypt-3].item.(mysql.PriorityEnum) + } + if yyS[yypt-2].item != nil { + opt.SQLCache = yyS[yypt-2].item.(bool) + } + if yyS[yypt-1].item != nil { + opt.CalcFoundRows = yyS[yypt-1].item.(bool) + } + if yyS[yypt-0].item != nil { + opt.StraightJoin = yyS[yypt-0].item.(bool) + } + + parser.yyVAL.item = opt + } + case 892: + { + parser.yyVAL.item = nil + } + case 893: + { + parser.yyVAL.item = yyS[yypt-1].item + } + case 894: + { + parser.yyVAL.item = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)} + } + case 895: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]model.CIStr), model.NewCIStr(yyS[yypt-0].ident)) + } + case 896: + { + parser.yyVAL.item = []*ast.TableOptimizerHint{yyS[yypt-0].item.(*ast.TableOptimizerHint)} + } + case 897: + { + parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.TableOptimizerHint), yyS[yypt-0].item.(*ast.TableOptimizerHint)) + } + case 898: + { + parser.yyVAL.item = &ast.TableOptimizerHint{HintName: model.NewCIStr(yyS[yypt-3].ident), Tables: yyS[yypt-1].item.([]model.CIStr)} + } + case 899: + { + parser.yyVAL.item = &ast.TableOptimizerHint{HintName: model.NewCIStr(yyS[yypt-3].ident), Tables: yyS[yypt-1].item.([]model.CIStr)} + } + case 900: + { + parser.yyVAL.item = &ast.TableOptimizerHint{HintName: model.NewCIStr(yyS[yypt-3].ident), Tables: yyS[yypt-1].item.([]model.CIStr)} + } + case 901: + { + parser.yyVAL.item = &ast.TableOptimizerHint{HintName: model.NewCIStr(yyS[yypt-3].ident), MaxExecutionTime: getUint64FromNUM(yyS[yypt-1].item)} + } + case 902: + { + parser.yyVAL.item = false + } + case 903: + { + parser.yyVAL.item = true + } + case 904: + { + parser.yyVAL.item = true + } + case 905: + { + parser.yyVAL.item = true + } + case 906: + { + parser.yyVAL.item = false + } + case 907: + { + parser.yyVAL.item = false + } + case 908: + { + parser.yyVAL.item = true + } + case 909: + { + parser.yyVAL.item = &ast.FieldList{Fields: yyS[yypt-0].item.([]*ast.SelectField)} + } + case 910: + { + parser.yyVAL.item = nil + } + case 912: + { + s := yyS[yypt-1].statement.(*ast.SelectStmt) + endOffset := parser.endOffset(&yyS[yypt]) + parser.setLastSelectFieldText(s, endOffset) + src := parser.src + // See the implementation of yyParse function + s.SetText(src[yyS[yypt-1].offset:yyS[yypt].offset]) + parser.yyVAL.expr = &ast.SubqueryExpr{Query: s} + } + case 913: + { + s := yyS[yypt-1].statement.(*ast.UnionStmt) + src := parser.src + // See the implementation of yyParse function + s.SetText(src[yyS[yypt-1].offset:yyS[yypt].offset]) + parser.yyVAL.expr = &ast.SubqueryExpr{Query: s} + } + case 914: + { + parser.yyVAL.item = ast.SelectLockNone + } + case 915: + { + parser.yyVAL.item = ast.SelectLockForUpdate + } + case 916: + { + parser.yyVAL.item = ast.SelectLockInShareMode + } + case 917: + { + st := yyS[yypt-3].item.(*ast.SelectStmt) + union := yyS[yypt-6].item.(*ast.UnionStmt) + st.IsAfterUnionDistinct = yyS[yypt-4].item.(bool) + lastSelect := union.SelectList.Selects[len(union.SelectList.Selects)-1] + endOffset := parser.endOffset(&yyS[yypt-5]) + parser.setLastSelectFieldText(lastSelect, endOffset) + union.SelectList.Selects = append(union.SelectList.Selects, st) + if yyS[yypt-2].item != nil { + union.OrderBy = yyS[yypt-2].item.(*ast.OrderByClause) + } + if yyS[yypt-1].item != nil { + union.Limit = yyS[yypt-1].item.(*ast.Limit) + } + if yyS[yypt-2].item == nil && yyS[yypt-1].item == nil { + st.LockTp = yyS[yypt-0].item.(ast.SelectLockType) + } + parser.yyVAL.statement = union + } + case 918: + { + st := yyS[yypt-2].item.(*ast.SelectStmt) + union := yyS[yypt-5].item.(*ast.UnionStmt) + st.IsAfterUnionDistinct = yyS[yypt-3].item.(bool) + lastSelect := union.SelectList.Selects[len(union.SelectList.Selects)-1] + endOffset := parser.endOffset(&yyS[yypt-4]) + parser.setLastSelectFieldText(lastSelect, endOffset) + union.SelectList.Selects = append(union.SelectList.Selects, st) + if yyS[yypt-1].item != nil { + union.Limit = yyS[yypt-1].item.(*ast.Limit) + } else { + st.LockTp = yyS[yypt-0].item.(ast.SelectLockType) + } + parser.yyVAL.statement = union + } + case 919: + { + st := yyS[yypt-3].item.(*ast.SelectStmt) + union := yyS[yypt-6].item.(*ast.UnionStmt) + st.IsAfterUnionDistinct = yyS[yypt-4].item.(bool) + lastSelect := union.SelectList.Selects[len(union.SelectList.Selects)-1] + endOffset := parser.endOffset(&yyS[yypt-5]) + parser.setLastSelectFieldText(lastSelect, endOffset) + union.SelectList.Selects = append(union.SelectList.Selects, st) + if yyS[yypt-2].item != nil { + union.OrderBy = yyS[yypt-2].item.(*ast.OrderByClause) + } + if yyS[yypt-1].item != nil { + union.Limit = yyS[yypt-1].item.(*ast.Limit) + } + if yyS[yypt-2].item == nil && yyS[yypt-1].item == nil { + st.LockTp = yyS[yypt-0].item.(ast.SelectLockType) + } + parser.yyVAL.statement = union + } + case 920: + { + union := yyS[yypt-7].item.(*ast.UnionStmt) + lastSelect := union.SelectList.Selects[len(union.SelectList.Selects)-1] + endOffset := parser.endOffset(&yyS[yypt-6]) + parser.setLastSelectFieldText(lastSelect, endOffset) + st := yyS[yypt-3].statement.(*ast.SelectStmt) + st.IsInBraces = true + st.IsAfterUnionDistinct = yyS[yypt-5].item.(bool) + endOffset = parser.endOffset(&yyS[yypt-2]) + parser.setLastSelectFieldText(st, endOffset) + union.SelectList.Selects = append(union.SelectList.Selects, st) + if yyS[yypt-1].item != nil { + union.OrderBy = yyS[yypt-1].item.(*ast.OrderByClause) + } + if yyS[yypt-0].item != nil { + union.Limit = yyS[yypt-0].item.(*ast.Limit) + } + parser.yyVAL.statement = union + } + case 921: + { + selectList := &ast.UnionSelectList{Selects: []*ast.SelectStmt{yyS[yypt-0].item.(*ast.SelectStmt)}} + parser.yyVAL.item = &ast.UnionStmt{ + SelectList: selectList, + } + } + case 922: + { + union := yyS[yypt-3].item.(*ast.UnionStmt) + st := yyS[yypt-0].item.(*ast.SelectStmt) + st.IsAfterUnionDistinct = yyS[yypt-1].item.(bool) + lastSelect := union.SelectList.Selects[len(union.SelectList.Selects)-1] + endOffset := parser.endOffset(&yyS[yypt-2]) + parser.setLastSelectFieldText(lastSelect, endOffset) + union.SelectList.Selects = append(union.SelectList.Selects, st) + parser.yyVAL.item = union + } + case 923: + { + parser.yyVAL.item = yyS[yypt-0].statement.(interface{}) + } + case 924: + { + st := yyS[yypt-1].statement.(*ast.SelectStmt) + st.IsInBraces = true + endOffset := parser.endOffset(&yyS[yypt]) + parser.setLastSelectFieldText(st, endOffset) + parser.yyVAL.item = yyS[yypt-1].statement + } + case 926: + { + parser.yyVAL.statement = &ast.SetStmt{Variables: yyS[yypt-0].item.([]*ast.VariableAssignment)} + } + case 927: + { + parser.yyVAL.statement = &ast.SetPwdStmt{Password: yyS[yypt-0].item.(string)} + } + case 928: + { + parser.yyVAL.statement = &ast.SetPwdStmt{User: yyS[yypt-2].item.(*auth.UserIdentity), Password: yyS[yypt-0].item.(string)} + } + case 929: + { + vars := yyS[yypt-0].item.([]*ast.VariableAssignment) + for _, v := range vars { + v.IsGlobal = true + } + parser.yyVAL.statement = &ast.SetStmt{Variables: vars} + } + case 930: + { + parser.yyVAL.statement = &ast.SetStmt{Variables: yyS[yypt-0].item.([]*ast.VariableAssignment)} + } + case 931: + { + assigns := yyS[yypt-0].item.([]*ast.VariableAssignment) + for i := 0; i < len(assigns); i++ { + if assigns[i].Name == "tx_isolation" { + // A special session variable that make setting tx_isolation take effect one time. + assigns[i].Name = "tx_isolation_one_shot" + } + } + parser.yyVAL.statement = &ast.SetStmt{Variables: assigns} + } + case 932: + { + if yyS[yypt-0].item != nil { + parser.yyVAL.item = yyS[yypt-0].item + } else { + parser.yyVAL.item = []*ast.VariableAssignment{} + } + } + case 933: + { + if yyS[yypt-0].item != nil { + varAssigns := yyS[yypt-0].item.([]*ast.VariableAssignment) + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.VariableAssignment), varAssigns...) + } else { + parser.yyVAL.item = yyS[yypt-2].item + } + } + case 934: + { + varAssigns := []*ast.VariableAssignment{} + expr := ast.NewValueExpr(yyS[yypt-0].ident) + varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_isolation", Value: expr, IsSystem: true}) + parser.yyVAL.item = varAssigns + } + case 935: + { + varAssigns := []*ast.VariableAssignment{} + expr := ast.NewValueExpr("0") + varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_read_only", Value: expr, IsSystem: true}) + parser.yyVAL.item = varAssigns + } + case 936: + { + varAssigns := []*ast.VariableAssignment{} + expr := ast.NewValueExpr("1") + varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_read_only", Value: expr, IsSystem: true}) + parser.yyVAL.item = varAssigns + } + case 937: + { + parser.yyVAL.ident = ast.RepeatableRead + } + case 938: + { + parser.yyVAL.ident = ast.ReadCommitted + } + case 939: + { + parser.yyVAL.ident = ast.ReadUncommitted + } + case 940: + { + parser.yyVAL.ident = ast.Serializable + } + case 941: + { + parser.yyVAL.expr = ast.NewValueExpr("ON") + } + case 943: + { + parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsSystem: true} + } + case 944: + { + parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsGlobal: true, IsSystem: true} + } + case 945: + { + parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsSystem: true} + } + case 946: + { + parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsSystem: true} + } + case 947: + { + v := strings.ToLower(yyS[yypt-2].ident) + var isGlobal bool + if strings.HasPrefix(v, "@@global.") { + isGlobal = true + v = strings.TrimPrefix(v, "@@global.") + } else if strings.HasPrefix(v, "@@session.") { + v = strings.TrimPrefix(v, "@@session.") + } else if strings.HasPrefix(v, "@@local.") { + v = strings.TrimPrefix(v, "@@local.") + } else if strings.HasPrefix(v, "@@") { + v = strings.TrimPrefix(v, "@@") + } + parser.yyVAL.item = &ast.VariableAssignment{Name: v, Value: yyS[yypt-0].expr, IsGlobal: isGlobal, IsSystem: true} + } + case 948: + { + v := yyS[yypt-2].ident + v = strings.TrimPrefix(v, "@") + parser.yyVAL.item = &ast.VariableAssignment{Name: v, Value: yyS[yypt-0].expr} + } + case 949: + { + v := yyS[yypt-2].ident + v = strings.TrimPrefix(v, "@") + parser.yyVAL.item = &ast.VariableAssignment{Name: v, Value: yyS[yypt-0].expr} + } + case 950: + { + parser.yyVAL.item = &ast.VariableAssignment{ + Name: ast.SetNames, + Value: ast.NewValueExpr(yyS[yypt-0].item.(string)), + } + } + case 951: + { + parser.yyVAL.item = &ast.VariableAssignment{ + Name: ast.SetNames, + Value: ast.NewValueExpr(yyS[yypt-2].item.(string)), + } + } + case 952: + { + parser.yyVAL.item = &ast.VariableAssignment{ + Name: ast.SetNames, + Value: ast.NewValueExpr(yyS[yypt-2].item.(string)), + ExtendValue: ast.NewValueExpr(yyS[yypt-0].item.(string)), + } + } + case 953: + { + parser.yyVAL.item = &ast.VariableAssignment{ + Name: ast.SetNames, + Value: ast.NewValueExpr(yyS[yypt-0].item.(string)), + } + } + case 954: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 955: + { + parser.yyVAL.item = charset.CharsetBin + } + case 956: + { + parser.yyVAL.item = []*ast.VariableAssignment{} + } + case 957: + { + parser.yyVAL.item = []*ast.VariableAssignment{yyS[yypt-0].item.(*ast.VariableAssignment)} + } + case 958: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.VariableAssignment), yyS[yypt-0].item.(*ast.VariableAssignment)) + } + case 961: + { + v := strings.ToLower(yyS[yypt-0].ident) + var isGlobal bool + explicitScope := true + if strings.HasPrefix(v, "@@global.") { + isGlobal = true + v = strings.TrimPrefix(v, "@@global.") + } else if strings.HasPrefix(v, "@@session.") { + v = strings.TrimPrefix(v, "@@session.") + } else if strings.HasPrefix(v, "@@local.") { + v = strings.TrimPrefix(v, "@@local.") + } else if strings.HasPrefix(v, "@@") { + v, explicitScope = strings.TrimPrefix(v, "@@"), false + } + parser.yyVAL.expr = &ast.VariableExpr{Name: v, IsGlobal: isGlobal, IsSystem: true, ExplicitScope: explicitScope} + } + case 962: + { + v := yyS[yypt-0].ident + v = strings.TrimPrefix(v, "@") + parser.yyVAL.expr = &ast.VariableExpr{Name: v, IsGlobal: false, IsSystem: false} + } + case 963: + { + parser.yyVAL.item = &auth.UserIdentity{Username: yyS[yypt-0].item.(string), Hostname: "%"} + } + case 964: + { + parser.yyVAL.item = &auth.UserIdentity{Username: yyS[yypt-2].item.(string), Hostname: yyS[yypt-0].item.(string)} + } + case 965: + { + parser.yyVAL.item = &auth.UserIdentity{Username: yyS[yypt-1].item.(string), Hostname: strings.TrimPrefix(yyS[yypt-0].ident, "@")} + } + case 966: + { + parser.yyVAL.item = &auth.UserIdentity{CurrentUser: true} + } + case 967: + { + parser.yyVAL.item = []*auth.UserIdentity{yyS[yypt-0].item.(*auth.UserIdentity)} + } + case 968: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*auth.UserIdentity), yyS[yypt-0].item.(*auth.UserIdentity)) + } + case 969: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 970: + { + parser.yyVAL.item = yyS[yypt-1].item.(string) + } + case 971: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 972: + { + parser.yyVAL.statement = &ast.AdminStmt{Tp: ast.AdminShowDDL} + } + case 973: + { + parser.yyVAL.statement = &ast.AdminStmt{Tp: ast.AdminShowDDLJobs} + } + case 974: + { + parser.yyVAL.statement = &ast.AdminStmt{ + Tp: ast.AdminShowDDLJobs, + JobNumber: yyS[yypt-0].item.(int64), + } + } + case 975: + { + parser.yyVAL.statement = &ast.AdminStmt{ + Tp: ast.AdminCheckTable, + Tables: yyS[yypt-0].item.([]*ast.TableName), + } + } + case 976: + { + parser.yyVAL.statement = &ast.AdminStmt{ + Tp: ast.AdminCheckIndex, + Tables: []*ast.TableName{yyS[yypt-1].item.(*ast.TableName)}, + Index: string(yyS[yypt-0].ident), + } + } + case 977: + { + parser.yyVAL.statement = &ast.AdminStmt{ + Tp: ast.AdminRecoverIndex, + Tables: []*ast.TableName{yyS[yypt-1].item.(*ast.TableName)}, + Index: string(yyS[yypt-0].ident), + } + } + case 978: + { + parser.yyVAL.statement = &ast.AdminStmt{ + Tp: ast.AdminCleanupIndex, + Tables: []*ast.TableName{yyS[yypt-1].item.(*ast.TableName)}, + Index: string(yyS[yypt-0].ident), + } + } + case 979: + { + parser.yyVAL.statement = &ast.AdminStmt{ + Tp: ast.AdminCheckIndexRange, + Tables: []*ast.TableName{yyS[yypt-2].item.(*ast.TableName)}, + Index: string(yyS[yypt-1].ident), + HandleRanges: yyS[yypt-0].item.([]ast.HandleRange), + } + } + case 980: + { + parser.yyVAL.statement = &ast.AdminStmt{ + Tp: ast.AdminChecksumTable, + Tables: yyS[yypt-0].item.([]*ast.TableName), + } + } + case 981: + { + parser.yyVAL.statement = &ast.AdminStmt{ + Tp: ast.AdminCancelDDLJobs, + JobIDs: yyS[yypt-0].item.([]int64), + } + } + case 982: + { + parser.yyVAL.statement = &ast.AdminStmt{ + Tp: ast.AdminShowDDLJobQueries, + JobIDs: yyS[yypt-0].item.([]int64), + } + } + case 983: + { + parser.yyVAL.statement = &ast.AdminStmt{ + Tp: ast.AdminShowSlow, + ShowSlow: yyS[yypt-0].item.(*ast.ShowSlow), + } + } + case 984: + { + parser.yyVAL.item = &ast.ShowSlow{ + Tp: ast.ShowSlowRecent, + Count: getUint64FromNUM(yyS[yypt-0].item), + } + } + case 985: + { + parser.yyVAL.item = &ast.ShowSlow{ + Tp: ast.ShowSlowTop, + Kind: ast.ShowSlowKindDefault, + Count: getUint64FromNUM(yyS[yypt-0].item), + } + } + case 986: + { + parser.yyVAL.item = &ast.ShowSlow{ + Tp: ast.ShowSlowTop, + Kind: ast.ShowSlowKindInternal, + Count: getUint64FromNUM(yyS[yypt-0].item), + } + } + case 987: + { + parser.yyVAL.item = &ast.ShowSlow{ + Tp: ast.ShowSlowTop, + Kind: ast.ShowSlowKindAll, + Count: getUint64FromNUM(yyS[yypt-0].item), + } + } + case 988: + { + parser.yyVAL.item = []ast.HandleRange{yyS[yypt-0].item.(ast.HandleRange)} + } + case 989: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.HandleRange), yyS[yypt-0].item.(ast.HandleRange)) + } + case 990: + { + parser.yyVAL.item = ast.HandleRange{Begin: yyS[yypt-3].item.(int64), End: yyS[yypt-1].item.(int64)} + } + case 991: + { + parser.yyVAL.item = []int64{yyS[yypt-0].item.(int64)} + } + case 992: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]int64), yyS[yypt-0].item.(int64)) + } + case 993: + { + stmt := yyS[yypt-1].item.(*ast.ShowStmt) + if yyS[yypt-0].item != nil { + if x, ok := yyS[yypt-0].item.(*ast.PatternLikeExpr); ok { + stmt.Pattern = x + } else { + stmt.Where = yyS[yypt-0].item.(ast.ExprNode) + } + } + parser.yyVAL.statement = stmt + } + case 994: + { + parser.yyVAL.statement = &ast.ShowStmt{ + Tp: ast.ShowCreateTable, + Table: yyS[yypt-0].item.(*ast.TableName), + } + } + case 995: + { + parser.yyVAL.statement = &ast.ShowStmt{ + Tp: ast.ShowCreateDatabase, + DBName: yyS[yypt-0].item.(string), + } + } + case 996: + { + // See https://dev.mysql.com/doc/refman/5.7/en/show-grants.html + parser.yyVAL.statement = &ast.ShowStmt{Tp: ast.ShowGrants} + } + case 997: + { + // See https://dev.mysql.com/doc/refman/5.7/en/show-grants.html + parser.yyVAL.statement = &ast.ShowStmt{ + Tp: ast.ShowGrants, + User: yyS[yypt-0].item.(*auth.UserIdentity), + } + } + case 998: + { + parser.yyVAL.statement = &ast.ShowStmt{ + Tp: ast.ShowMasterStatus, + } + } + case 999: + { + parser.yyVAL.statement = &ast.ShowStmt{ + Tp: ast.ShowProcessList, + Full: yyS[yypt-1].item.(bool), + } + } + case 1000: + { + stmt := &ast.ShowStmt{ + Tp: ast.ShowStatsMeta, + } + if yyS[yypt-0].item != nil { + if x, ok := yyS[yypt-0].item.(*ast.PatternLikeExpr); ok { + stmt.Pattern = x + } else { + stmt.Where = yyS[yypt-0].item.(ast.ExprNode) + } + } + parser.yyVAL.statement = stmt + } + case 1001: + { + stmt := &ast.ShowStmt{ + Tp: ast.ShowStatsHistograms, + } + if yyS[yypt-0].item != nil { + if x, ok := yyS[yypt-0].item.(*ast.PatternLikeExpr); ok { + stmt.Pattern = x + } else { + stmt.Where = yyS[yypt-0].item.(ast.ExprNode) + } + } + parser.yyVAL.statement = stmt + } + case 1002: + { + stmt := &ast.ShowStmt{ + Tp: ast.ShowStatsBuckets, + } + if yyS[yypt-0].item != nil { + if x, ok := yyS[yypt-0].item.(*ast.PatternLikeExpr); ok { + stmt.Pattern = x + } else { + stmt.Where = yyS[yypt-0].item.(ast.ExprNode) + } + } + parser.yyVAL.statement = stmt + } + case 1003: + { + stmt := &ast.ShowStmt{ + Tp: ast.ShowStatsHealthy, + } + if yyS[yypt-0].item != nil { + if x, ok := yyS[yypt-0].item.(*ast.PatternLikeExpr); ok { + stmt.Pattern = x + } else { + stmt.Where = yyS[yypt-0].item.(ast.ExprNode) + } + } + parser.yyVAL.statement = stmt + } + case 1004: + { + parser.yyVAL.statement = &ast.ShowStmt{ + Tp: ast.ShowProfiles, + } + } + case 1005: + { + parser.yyVAL.statement = &ast.ShowStmt{ + Tp: ast.ShowPrivileges, + } + } + case 1011: + { + parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowEngines} + } + case 1012: + { + parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowDatabases} + } + case 1013: + { + parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowCharset} + } + case 1014: + { + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowTables, + DBName: yyS[yypt-0].item.(string), + Full: yyS[yypt-2].item.(bool), + } + } + case 1015: + { + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowTableStatus, + DBName: yyS[yypt-0].item.(string), + } + } + case 1016: + { + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowIndex, + Table: yyS[yypt-0].item.(*ast.TableName), + } + } + case 1017: + { + show := &ast.ShowStmt{ + Tp: ast.ShowIndex, + Table: &ast.TableName{Name: model.NewCIStr(yyS[yypt-2].ident), Schema: model.NewCIStr(yyS[yypt-0].ident)}, + } + parser.yyVAL.item = show + } + case 1018: + { + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowColumns, + Table: yyS[yypt-1].item.(*ast.TableName), + DBName: yyS[yypt-0].item.(string), + Full: yyS[yypt-3].item.(bool), + } + } + case 1019: + { + // SHOW FIELDS is a synonym for SHOW COLUMNS. + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowColumns, + Table: yyS[yypt-1].item.(*ast.TableName), + DBName: yyS[yypt-0].item.(string), + Full: yyS[yypt-3].item.(bool), + } + } + case 1020: + { + parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowWarnings} + } + case 1021: + { + parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowErrors} + } + case 1022: + { + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowVariables, + GlobalScope: yyS[yypt-1].item.(bool), + } + } + case 1023: + { + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowStatus, + GlobalScope: yyS[yypt-1].item.(bool), + } + } + case 1024: + { + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowCollation, + } + } + case 1025: + { + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowTriggers, + DBName: yyS[yypt-0].item.(string), + } + } + case 1026: + { + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowProcedureStatus, + } + } + case 1027: + { + // This statement is similar to SHOW PROCEDURE STATUS but for stored functions. + // See http://dev.mysql.com/doc/refman/5.7/en/show-function-status.html + // We do not support neither stored functions nor stored procedures. + // So we reuse show procedure status process logic. + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowProcedureStatus, + } + } + case 1028: + { + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowEvents, + DBName: yyS[yypt-0].item.(string), + } + } + case 1029: + { + parser.yyVAL.item = &ast.ShowStmt{ + Tp: ast.ShowPlugins, + } + } + case 1030: + { + parser.yyVAL.item = nil + } + case 1031: + { + parser.yyVAL.item = &ast.PatternLikeExpr{ + Pattern: yyS[yypt-0].expr, + Escape: '\\', + } + } + case 1032: + { + parser.yyVAL.item = yyS[yypt-0].expr + } + case 1033: + { + parser.yyVAL.item = false + } + case 1034: + { + parser.yyVAL.item = true + } + case 1035: + { + parser.yyVAL.item = false + } + case 1036: + { + parser.yyVAL.item = false + } + case 1037: + { + parser.yyVAL.item = true + } + case 1038: + { + parser.yyVAL.item = "" + } + case 1039: + { + parser.yyVAL.item = yyS[yypt-0].item.(string) + } + case 1040: + { + parser.yyVAL.item = yyS[yypt-0].item.(*ast.TableName) + } + case 1041: + { + tmp := yyS[yypt-0].item.(*ast.FlushStmt) + tmp.NoWriteToBinLog = yyS[yypt-1].item.(bool) + parser.yyVAL.statement = tmp + } + case 1042: + { + parser.yyVAL.item = &ast.FlushStmt{ + Tp: ast.FlushPrivileges, + } + } + case 1043: + { + parser.yyVAL.item = &ast.FlushStmt{ + Tp: ast.FlushStatus, + } + } + case 1044: + { + parser.yyVAL.item = &ast.FlushStmt{ + Tp: ast.FlushTables, + Tables: yyS[yypt-1].item.([]*ast.TableName), + ReadLock: yyS[yypt-0].item.(bool), + } + } + case 1045: + { + parser.yyVAL.item = false + } + case 1046: + { + parser.yyVAL.item = true + } + case 1047: + { + parser.yyVAL.item = true + } + case 1048: + { + parser.yyVAL.item = []*ast.TableName{} + } + case 1049: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 1050: + { + parser.yyVAL.item = false + } + case 1051: + { + parser.yyVAL.item = true + } + case 1091: + { + // `(select 1)`; is a valid select statement + // TODO: This is used to fix issue #320. There may be a better solution. + parser.yyVAL.statement = yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(ast.StmtNode) + } + case 1110: + { + if yyS[yypt-0].statement != nil { + s := yyS[yypt-0].statement + if lexer, ok := yylex.(stmtTexter); ok { + s.SetText(lexer.stmtText()) + } + parser.result = append(parser.result, s) + } + } + case 1111: + { + if yyS[yypt-0].statement != nil { + s := yyS[yypt-0].statement + if lexer, ok := yylex.(stmtTexter); ok { + s.SetText(lexer.stmtText()) + } + parser.result = append(parser.result, s) + } + } + case 1112: + { + cst := yyS[yypt-0].item.(*ast.Constraint) + if yyS[yypt-1].item != nil { + cst.Name = yyS[yypt-1].item.(string) + } + parser.yyVAL.item = cst + } + case 1113: + { + parser.yyVAL.item = yyS[yypt-0].item.(*ast.ColumnDef) + } + case 1114: + { + parser.yyVAL.item = yyS[yypt-0].item.(*ast.Constraint) + } + case 1115: + { + /* Nothing to do now */ + parser.yyVAL.item = nil + } + case 1116: + { + if yyS[yypt-0].item != nil { + parser.yyVAL.item = []interface{}{yyS[yypt-0].item.(interface{})} + } else { + parser.yyVAL.item = []interface{}{} + } + } + case 1117: + { + if yyS[yypt-0].item != nil { + parser.yyVAL.item = append(yyS[yypt-2].item.([]interface{}), yyS[yypt-0].item) + } else { + parser.yyVAL.item = yyS[yypt-2].item + } + } + case 1118: + { + var columnDefs []*ast.ColumnDef + var constraints []*ast.Constraint + parser.yyVAL.item = &ast.CreateTableStmt{ + Cols: columnDefs, + Constraints: constraints, + } + } + case 1119: + { + tes := yyS[yypt-1].item.([]interface{}) + var columnDefs []*ast.ColumnDef + var constraints []*ast.Constraint + for _, te := range tes { + switch te := te.(type) { + case *ast.ColumnDef: + columnDefs = append(columnDefs, te) + case *ast.Constraint: + constraints = append(constraints, te) + } + } + parser.yyVAL.item = &ast.CreateTableStmt{ + Cols: columnDefs, + Constraints: constraints, + } + } + case 1120: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionEngine, StrValue: yyS[yypt-0].item.(string)} + } + case 1121: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionEngine, StrValue: yyS[yypt-0].item.(string)} + } + case 1122: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCharset, StrValue: yyS[yypt-0].item.(string)} + } + case 1123: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCollate, StrValue: yyS[yypt-0].item.(string)} + } + case 1124: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAutoIncrement, UintValue: yyS[yypt-0].item.(uint64)} + } + case 1125: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionComment, StrValue: yyS[yypt-0].ident} + } + case 1126: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAvgRowLength, UintValue: yyS[yypt-0].item.(uint64)} + } + case 1127: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionConnection, StrValue: yyS[yypt-0].ident} + } + case 1128: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCheckSum, UintValue: yyS[yypt-0].item.(uint64)} + } + case 1129: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionPassword, StrValue: yyS[yypt-0].ident} + } + case 1130: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCompression, StrValue: yyS[yypt-0].ident} + } + case 1131: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionKeyBlockSize, UintValue: yyS[yypt-0].item.(uint64)} + } + case 1132: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionMaxRows, UintValue: yyS[yypt-0].item.(uint64)} + } + case 1133: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionMinRows, UintValue: yyS[yypt-0].item.(uint64)} + } + case 1134: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionDelayKeyWrite, UintValue: yyS[yypt-0].item.(uint64)} + } + case 1135: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionRowFormat, UintValue: yyS[yypt-0].item.(uint64)} + } + case 1136: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsPersistent} + } + case 1137: + { + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionShardRowID, UintValue: yyS[yypt-0].item.(uint64)} + } + case 1138: + { + // Parse it but will ignore it. + parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionPackKeys} + } + case 1141: + { + parser.yyVAL.item = []*ast.TableOption{} + } + case 1143: + { + parser.yyVAL.item = []*ast.TableOption{} + } + case 1145: + { + parser.yyVAL.item = []*ast.TableOption{yyS[yypt-0].item.(*ast.TableOption)} + } + case 1146: + { + parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.TableOption), yyS[yypt-0].item.(*ast.TableOption)) + } + case 1147: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableOption), yyS[yypt-0].item.(*ast.TableOption)) + } + case 1150: + { + parser.yyVAL.statement = &ast.TruncateTableStmt{Table: yyS[yypt-0].item.(*ast.TableName)} + } + case 1151: + { + parser.yyVAL.item = ast.RowFormatDefault + } + case 1152: + { + parser.yyVAL.item = ast.RowFormatDynamic + } + case 1153: + { + parser.yyVAL.item = ast.RowFormatFixed + } + case 1154: + { + parser.yyVAL.item = ast.RowFormatCompressed + } + case 1155: + { + parser.yyVAL.item = ast.RowFormatRedundant + } + case 1156: + { + parser.yyVAL.item = ast.RowFormatCompact + } + case 1157: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 1158: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 1159: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 1160: + { + // TODO: check flen 0 + x := types.NewFieldType(yyS[yypt-2].item.(byte)) + x.Flen = yyS[yypt-1].item.(int) + for _, o := range yyS[yypt-0].item.([]*ast.TypeOpt) { + if o.IsUnsigned { + x.Flag |= mysql.UnsignedFlag + } + if o.IsZerofill { + x.Flag |= mysql.ZerofillFlag + } + } + parser.yyVAL.item = x + } + case 1161: + { + // TODO: check flen 0 + x := types.NewFieldType(yyS[yypt-1].item.(byte)) + x.Flen = 1 + for _, o := range yyS[yypt-0].item.([]*ast.TypeOpt) { + if o.IsUnsigned { + x.Flag |= mysql.UnsignedFlag + } + if o.IsZerofill { + x.Flag |= mysql.ZerofillFlag + } + } + parser.yyVAL.item = x + } + case 1162: + { + fopt := yyS[yypt-1].item.(*ast.FloatOpt) + x := types.NewFieldType(yyS[yypt-2].item.(byte)) + x.Flen = fopt.Flen + x.Decimal = fopt.Decimal + for _, o := range yyS[yypt-0].item.([]*ast.TypeOpt) { + if o.IsUnsigned { + x.Flag |= mysql.UnsignedFlag + } + if o.IsZerofill { + x.Flag |= mysql.ZerofillFlag + } + } + parser.yyVAL.item = x + } + case 1163: + { + fopt := yyS[yypt-1].item.(*ast.FloatOpt) + x := types.NewFieldType(yyS[yypt-2].item.(byte)) + x.Flen = fopt.Flen + if x.Tp == mysql.TypeFloat { + if x.Flen > 24 { + x.Tp = mysql.TypeDouble + } + } + x.Decimal = fopt.Decimal + for _, o := range yyS[yypt-0].item.([]*ast.TypeOpt) { + if o.IsUnsigned { + x.Flag |= mysql.UnsignedFlag + } + if o.IsZerofill { + x.Flag |= mysql.ZerofillFlag + } + } + parser.yyVAL.item = x + } + case 1164: + { + x := types.NewFieldType(yyS[yypt-1].item.(byte)) + x.Flen = yyS[yypt-0].item.(int) + if x.Flen == types.UnspecifiedLength || x.Flen == 0 { + x.Flen = 1 + } else if x.Flen > 64 { + yylex.Errorf("invalid field length %d for bit type, must in [1, 64]", x.Flen) + } + parser.yyVAL.item = x + } + case 1165: + { + parser.yyVAL.item = mysql.TypeTiny + } + case 1166: + { + parser.yyVAL.item = mysql.TypeShort + } + case 1167: + { + parser.yyVAL.item = mysql.TypeInt24 + } + case 1168: + { + parser.yyVAL.item = mysql.TypeLong + } + case 1169: + { + parser.yyVAL.item = mysql.TypeTiny + } + case 1170: + { + parser.yyVAL.item = mysql.TypeShort + } + case 1171: + { + parser.yyVAL.item = mysql.TypeInt24 + } + case 1172: + { + parser.yyVAL.item = mysql.TypeLong + } + case 1173: + { + parser.yyVAL.item = mysql.TypeLonglong + } + case 1174: + { + parser.yyVAL.item = mysql.TypeLong + } + case 1175: + { + parser.yyVAL.item = mysql.TypeLonglong + } + case 1176: + { + parser.yyVAL.item = mysql.TypeTiny + } + case 1177: + { + parser.yyVAL.item = mysql.TypeTiny + } + case 1181: + { + parser.yyVAL.item = mysql.TypeNewDecimal + } + case 1182: + { + parser.yyVAL.item = mysql.TypeNewDecimal + } + case 1183: + { + parser.yyVAL.item = mysql.TypeFloat + } + case 1184: + { + if parser.lexer.GetSQLMode().HasRealAsFloatMode() { + parser.yyVAL.item = mysql.TypeFloat + } else { + parser.yyVAL.item = mysql.TypeDouble + } + } + case 1185: + { + parser.yyVAL.item = mysql.TypeDouble + } + case 1186: + { + parser.yyVAL.item = mysql.TypeDouble + } + case 1187: + { + parser.yyVAL.item = mysql.TypeBit + } + case 1188: + { + x := types.NewFieldType(mysql.TypeString) + x.Flen = yyS[yypt-2].item.(int) + x.Charset = yyS[yypt-1].item.(*ast.OptBinary).Charset + x.Collate = yyS[yypt-0].item.(string) + if yyS[yypt-1].item.(*ast.OptBinary).IsBinary { + x.Flag |= mysql.BinaryFlag + } + parser.yyVAL.item = x + } + case 1189: + { + x := types.NewFieldType(mysql.TypeString) + x.Charset = yyS[yypt-1].item.(*ast.OptBinary).Charset + x.Collate = yyS[yypt-0].item.(string) + if yyS[yypt-1].item.(*ast.OptBinary).IsBinary { + x.Flag |= mysql.BinaryFlag + } + parser.yyVAL.item = x + } + case 1190: + { + x := types.NewFieldType(mysql.TypeString) + x.Flen = yyS[yypt-2].item.(int) + x.Charset = yyS[yypt-1].item.(*ast.OptBinary).Charset + x.Collate = yyS[yypt-0].item.(string) + if yyS[yypt-1].item.(*ast.OptBinary).IsBinary { + x.Flag |= mysql.BinaryFlag + } + parser.yyVAL.item = x + } + case 1191: + { + x := types.NewFieldType(mysql.TypeVarchar) + x.Flen = yyS[yypt-2].item.(int) + x.Charset = yyS[yypt-1].item.(*ast.OptBinary).Charset + x.Collate = yyS[yypt-0].item.(string) + if yyS[yypt-1].item.(*ast.OptBinary).IsBinary { + x.Flag |= mysql.BinaryFlag + } + parser.yyVAL.item = x + } + case 1192: + { + x := types.NewFieldType(mysql.TypeString) + x.Flen = yyS[yypt-0].item.(int) + x.Charset = charset.CharsetBin + x.Collate = charset.CharsetBin + x.Flag |= mysql.BinaryFlag + parser.yyVAL.item = x + } + case 1193: + { + x := types.NewFieldType(mysql.TypeVarchar) + x.Flen = yyS[yypt-0].item.(int) + x.Charset = charset.CharsetBin + x.Collate = charset.CharsetBin + x.Flag |= mysql.BinaryFlag + parser.yyVAL.item = x + } + case 1194: + { + x := yyS[yypt-0].item.(*types.FieldType) + x.Charset = charset.CharsetBin + x.Collate = charset.CharsetBin + x.Flag |= mysql.BinaryFlag + parser.yyVAL.item = yyS[yypt-0].item.(*types.FieldType) + } + case 1195: + { + x := yyS[yypt-2].item.(*types.FieldType) + x.Charset = yyS[yypt-1].item.(*ast.OptBinary).Charset + x.Collate = yyS[yypt-0].item.(string) + if yyS[yypt-1].item.(*ast.OptBinary).IsBinary { + x.Flag |= mysql.BinaryFlag + } + parser.yyVAL.item = x + } + case 1196: + { + x := types.NewFieldType(mysql.TypeEnum) + x.Elems = yyS[yypt-3].item.([]string) + x.Charset = yyS[yypt-1].item.(string) + x.Collate = yyS[yypt-0].item.(string) + parser.yyVAL.item = x + } + case 1197: + { + x := types.NewFieldType(mysql.TypeSet) + x.Elems = yyS[yypt-3].item.([]string) + x.Charset = yyS[yypt-1].item.(string) + x.Collate = yyS[yypt-0].item.(string) + parser.yyVAL.item = x + } + case 1198: + { + x := types.NewFieldType(mysql.TypeJSON) + x.Decimal = 0 + x.Charset = charset.CharsetBin + x.Collate = charset.CollationBin + parser.yyVAL.item = x + } + case 1204: + { + x := types.NewFieldType(mysql.TypeTinyBlob) + parser.yyVAL.item = x + } + case 1205: + { + x := types.NewFieldType(mysql.TypeBlob) + x.Flen = yyS[yypt-0].item.(int) + parser.yyVAL.item = x + } + case 1206: + { + x := types.NewFieldType(mysql.TypeMediumBlob) + parser.yyVAL.item = x + } + case 1207: + { + x := types.NewFieldType(mysql.TypeLongBlob) + parser.yyVAL.item = x + } + case 1208: + { + x := types.NewFieldType(mysql.TypeTinyBlob) + parser.yyVAL.item = x + + } + case 1209: + { + x := types.NewFieldType(mysql.TypeBlob) + x.Flen = yyS[yypt-0].item.(int) + parser.yyVAL.item = x + } + case 1210: + { + x := types.NewFieldType(mysql.TypeMediumBlob) + parser.yyVAL.item = x + } + case 1211: + { + x := types.NewFieldType(mysql.TypeLongBlob) + parser.yyVAL.item = x + } + case 1212: + { + x := types.NewFieldType(mysql.TypeMediumBlob) + parser.yyVAL.item = x + } + case 1213: + { + x := types.NewFieldType(mysql.TypeDate) + parser.yyVAL.item = x + } + case 1214: + { + x := types.NewFieldType(mysql.TypeDatetime) + x.Flen = mysql.MaxDatetimeWidthNoFsp + x.Decimal = yyS[yypt-0].item.(int) + if x.Decimal > 0 { + x.Flen = x.Flen + 1 + x.Decimal + } + parser.yyVAL.item = x + } + case 1215: + { + x := types.NewFieldType(mysql.TypeTimestamp) + x.Flen = mysql.MaxDatetimeWidthNoFsp + x.Decimal = yyS[yypt-0].item.(int) + if x.Decimal > 0 { + x.Flen = x.Flen + 1 + x.Decimal + } + parser.yyVAL.item = x + } + case 1216: + { + x := types.NewFieldType(mysql.TypeDuration) + x.Flen = mysql.MaxDurationWidthNoFsp + x.Decimal = yyS[yypt-0].item.(int) + if x.Decimal > 0 { + x.Flen = x.Flen + 1 + x.Decimal + } + parser.yyVAL.item = x + } + case 1217: + { + x := types.NewFieldType(mysql.TypeYear) + x.Flen = yyS[yypt-1].item.(int) + if x.Flen != types.UnspecifiedLength && x.Flen != 4 { + yylex.Errorf("Supports only YEAR or YEAR(4) column.") + return -1 + } + parser.yyVAL.item = x + } + case 1218: + { + parser.yyVAL.item = int(yyS[yypt-1].item.(uint64)) + } + case 1219: + { + parser.yyVAL.item = types.UnspecifiedLength + } + case 1220: + { + parser.yyVAL.item = yyS[yypt-0].item.(int) + } + case 1221: + { + parser.yyVAL.item = &ast.TypeOpt{IsUnsigned: true} + } + case 1222: + { + parser.yyVAL.item = &ast.TypeOpt{IsUnsigned: false} + } + case 1223: + { + parser.yyVAL.item = &ast.TypeOpt{IsZerofill: true, IsUnsigned: true} + } + case 1224: + { + parser.yyVAL.item = []*ast.TypeOpt{} + } + case 1225: + { + parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.TypeOpt), yyS[yypt-0].item.(*ast.TypeOpt)) + } + case 1226: + { + parser.yyVAL.item = &ast.FloatOpt{Flen: types.UnspecifiedLength, Decimal: types.UnspecifiedLength} + } + case 1227: + { + parser.yyVAL.item = &ast.FloatOpt{Flen: yyS[yypt-0].item.(int), Decimal: types.UnspecifiedLength} + } + case 1228: + { + parser.yyVAL.item = yyS[yypt-0].item.(*ast.FloatOpt) + } + case 1229: + { + parser.yyVAL.item = &ast.FloatOpt{Flen: int(yyS[yypt-3].item.(uint64)), Decimal: int(yyS[yypt-1].item.(uint64))} + } + case 1230: + { + parser.yyVAL.item = false + } + case 1231: + { + parser.yyVAL.item = true + } + case 1232: + { + parser.yyVAL.item = &ast.OptBinary{ + IsBinary: false, + Charset: "", + } + } + case 1233: + { + parser.yyVAL.item = &ast.OptBinary{ + IsBinary: true, + Charset: yyS[yypt-0].item.(string), + } + } + case 1234: + { + parser.yyVAL.item = &ast.OptBinary{ + IsBinary: yyS[yypt-0].item.(bool), + Charset: yyS[yypt-1].item.(string), + } + } + case 1235: + { + parser.yyVAL.item = "" + } + case 1236: + { + parser.yyVAL.item = yyS[yypt-0].item.(string) + } + case 1239: + { + parser.yyVAL.item = "" + } + case 1240: + { + parser.yyVAL.item = yyS[yypt-0].item.(string) + } + case 1241: + { + parser.yyVAL.item = []string{yyS[yypt-0].ident} + } + case 1242: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]string), yyS[yypt-0].ident) + } + case 1243: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 1244: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 1245: + { + var refs *ast.Join + if x, ok := yyS[yypt-5].item.(*ast.Join); ok { + refs = x + } else { + refs = &ast.Join{Left: yyS[yypt-5].item.(ast.ResultSetNode)} + } + st := &ast.UpdateStmt{ + Priority: yyS[yypt-7].item.(mysql.PriorityEnum), + TableRefs: &ast.TableRefsClause{TableRefs: refs}, + List: yyS[yypt-3].item.([]*ast.Assignment), + IgnoreErr: yyS[yypt-6].item.(bool), + } + if yyS[yypt-8].item != nil { + st.TableHints = yyS[yypt-8].item.([]*ast.TableOptimizerHint) + } + if yyS[yypt-2].item != nil { + st.Where = yyS[yypt-2].item.(ast.ExprNode) + } + if yyS[yypt-1].item != nil { + st.Order = yyS[yypt-1].item.(*ast.OrderByClause) + } + if yyS[yypt-0].item != nil { + st.Limit = yyS[yypt-0].item.(*ast.Limit) + } + parser.yyVAL.statement = st + } + case 1246: + { + st := &ast.UpdateStmt{ + Priority: yyS[yypt-5].item.(mysql.PriorityEnum), + TableRefs: &ast.TableRefsClause{TableRefs: yyS[yypt-3].item.(*ast.Join)}, + List: yyS[yypt-1].item.([]*ast.Assignment), + IgnoreErr: yyS[yypt-4].item.(bool), + } + if yyS[yypt-6].item != nil { + st.TableHints = yyS[yypt-6].item.([]*ast.TableOptimizerHint) + } + if yyS[yypt-0].item != nil { + st.Where = yyS[yypt-0].item.(ast.ExprNode) + } + parser.yyVAL.statement = st + } + case 1247: + { + parser.yyVAL.statement = &ast.UseStmt{DBName: yyS[yypt-0].item.(string)} + } + case 1248: + { + parser.yyVAL.item = yyS[yypt-0].expr + } + case 1249: + { + parser.yyVAL.item = nil + } + case 1250: + { + parser.yyVAL.item = yyS[yypt-0].item + } + case 1253: + { + // See https://dev.mysql.com/doc/refman/5.7/en/create-user.html + parser.yyVAL.statement = &ast.CreateUserStmt{ + IfNotExists: yyS[yypt-1].item.(bool), + Specs: yyS[yypt-0].item.([]*ast.UserSpec), + } + } + case 1254: + { + parser.yyVAL.statement = &ast.AlterUserStmt{ + IfExists: yyS[yypt-1].item.(bool), + Specs: yyS[yypt-0].item.([]*ast.UserSpec), + } + } + case 1255: + { + auth := &ast.AuthOption{ + AuthString: yyS[yypt-0].item.(string), + ByAuthString: true, + } + parser.yyVAL.statement = &ast.AlterUserStmt{ + IfExists: yyS[yypt-6].item.(bool), + CurrentAuth: auth, + } + } + case 1256: + { + userSpec := &ast.UserSpec{ + User: yyS[yypt-1].item.(*auth.UserIdentity), + } + if yyS[yypt-0].item != nil { + userSpec.AuthOpt = yyS[yypt-0].item.(*ast.AuthOption) + } + parser.yyVAL.item = userSpec + } + case 1257: + { + parser.yyVAL.item = []*ast.UserSpec{yyS[yypt-0].item.(*ast.UserSpec)} + } + case 1258: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.UserSpec), yyS[yypt-0].item.(*ast.UserSpec)) + } + case 1259: + { + parser.yyVAL.item = nil + } + case 1260: + { + parser.yyVAL.item = &ast.AuthOption{ + AuthString: yyS[yypt-0].item.(string), + ByAuthString: true, + } + } + case 1261: + { + parser.yyVAL.item = nil + } + case 1262: + { + parser.yyVAL.item = &ast.AuthOption{ + AuthString: yyS[yypt-0].item.(string), + ByAuthString: true, + } + } + case 1263: + { + parser.yyVAL.item = &ast.AuthOption{ + HashString: yyS[yypt-0].item.(string), + } + } + case 1264: + { + parser.yyVAL.item = &ast.AuthOption{ + HashString: yyS[yypt-0].item.(string), + } + } + case 1265: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 1266: + { + parser.yyVAL.statement = &ast.GrantStmt{ + Privs: yyS[yypt-6].item.([]*ast.PrivElem), + ObjectType: yyS[yypt-4].item.(ast.ObjectTypeType), + Level: yyS[yypt-3].item.(*ast.GrantLevel), + Users: yyS[yypt-1].item.([]*ast.UserSpec), + WithGrant: yyS[yypt-0].item.(bool), + } + } + case 1267: + { + parser.yyVAL.item = false + } + case 1268: + { + parser.yyVAL.item = true + } + case 1269: + { + parser.yyVAL.item = false + } + case 1270: + { + parser.yyVAL.item = false + } + case 1271: + { + parser.yyVAL.item = false + } + case 1272: + { + parser.yyVAL.item = false + } + case 1273: + { + parser.yyVAL.item = &ast.PrivElem{ + Priv: yyS[yypt-0].item.(mysql.PrivilegeType), + } + } + case 1274: + { + parser.yyVAL.item = &ast.PrivElem{ + Priv: yyS[yypt-3].item.(mysql.PrivilegeType), + Cols: yyS[yypt-1].item.([]*ast.ColumnName), + } + } + case 1275: + { + parser.yyVAL.item = []*ast.PrivElem{yyS[yypt-0].item.(*ast.PrivElem)} + } + case 1276: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.PrivElem), yyS[yypt-0].item.(*ast.PrivElem)) + } + case 1277: + { + parser.yyVAL.item = mysql.AllPriv + } + case 1278: + { + parser.yyVAL.item = mysql.AllPriv + } + case 1279: + { + parser.yyVAL.item = mysql.AlterPriv + } + case 1280: + { + parser.yyVAL.item = mysql.CreatePriv + } + case 1281: + { + parser.yyVAL.item = mysql.CreateUserPriv + } + case 1282: + { + parser.yyVAL.item = mysql.TriggerPriv + } + case 1283: + { + parser.yyVAL.item = mysql.DeletePriv + } + case 1284: + { + parser.yyVAL.item = mysql.DropPriv + } + case 1285: + { + parser.yyVAL.item = mysql.ProcessPriv + } + case 1286: + { + parser.yyVAL.item = mysql.ExecutePriv + } + case 1287: + { + parser.yyVAL.item = mysql.IndexPriv + } + case 1288: + { + parser.yyVAL.item = mysql.InsertPriv + } + case 1289: + { + parser.yyVAL.item = mysql.SelectPriv + } + case 1290: + { + parser.yyVAL.item = mysql.SuperPriv + } + case 1291: + { + parser.yyVAL.item = mysql.ShowDBPriv + } + case 1292: + { + parser.yyVAL.item = mysql.UpdatePriv + } + case 1293: + { + parser.yyVAL.item = mysql.GrantPriv + } + case 1294: + { + parser.yyVAL.item = mysql.ReferencesPriv + } + case 1295: + { + parser.yyVAL.item = mysql.PrivilegeType(0) + } + case 1296: + { + parser.yyVAL.item = mysql.PrivilegeType(0) + } + case 1297: + { + parser.yyVAL.item = mysql.PrivilegeType(0) + } + case 1298: + { + parser.yyVAL.item = mysql.PrivilegeType(0) + } + case 1299: + { + parser.yyVAL.item = mysql.PrivilegeType(0) + } + case 1300: + { + parser.yyVAL.item = mysql.PrivilegeType(0) + } + case 1301: + { + parser.yyVAL.item = mysql.PrivilegeType(0) + } + case 1302: + { + parser.yyVAL.item = mysql.PrivilegeType(0) + } + case 1303: + { + parser.yyVAL.item = mysql.PrivilegeType(0) + } + case 1304: + { + parser.yyVAL.item = mysql.PrivilegeType(0) + } + case 1305: + { + parser.yyVAL.item = mysql.PrivilegeType(0) + } + case 1306: + { + parser.yyVAL.item = ast.ObjectTypeNone + } + case 1307: + { + parser.yyVAL.item = ast.ObjectTypeTable + } + case 1308: + { + parser.yyVAL.item = &ast.GrantLevel{ + Level: ast.GrantLevelDB, + } + } + case 1309: + { + parser.yyVAL.item = &ast.GrantLevel{ + Level: ast.GrantLevelGlobal, + } + } + case 1310: + { + parser.yyVAL.item = &ast.GrantLevel{ + Level: ast.GrantLevelDB, + DBName: yyS[yypt-2].ident, + } + } + case 1311: + { + parser.yyVAL.item = &ast.GrantLevel{ + Level: ast.GrantLevelTable, + DBName: yyS[yypt-2].ident, + TableName: yyS[yypt-0].ident, + } + } + case 1312: + { + parser.yyVAL.item = &ast.GrantLevel{ + Level: ast.GrantLevelTable, + TableName: yyS[yypt-0].ident, + } + } + case 1313: + { + parser.yyVAL.statement = &ast.RevokeStmt{ + Privs: yyS[yypt-5].item.([]*ast.PrivElem), + ObjectType: yyS[yypt-3].item.(ast.ObjectTypeType), + Level: yyS[yypt-2].item.(*ast.GrantLevel), + Users: yyS[yypt-0].item.([]*ast.UserSpec), + } + } + case 1314: + { + x := &ast.LoadDataStmt{ + Path: yyS[yypt-8].ident, + Table: yyS[yypt-5].item.(*ast.TableName), + Columns: yyS[yypt-0].item.([]*ast.ColumnName), + IgnoreLines: yyS[yypt-1].item.(uint64), + } + if yyS[yypt-10].item != nil { + x.IsLocal = true + } + if yyS[yypt-3].item != nil { + x.FieldsInfo = yyS[yypt-3].item.(*ast.FieldsClause) + } + if yyS[yypt-2].item != nil { + x.LinesInfo = yyS[yypt-2].item.(*ast.LinesClause) + } + parser.yyVAL.statement = x + } + case 1315: + { + parser.yyVAL.item = uint64(0) + } + case 1316: + { + parser.yyVAL.item = getUint64FromNUM(yyS[yypt-1].item) + } + case 1319: + { + parser.yyVAL.item = nil + } + case 1320: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 1321: + { + escape := "\\" + parser.yyVAL.item = &ast.FieldsClause{ + Terminated: "\t", + Escaped: escape[0], + } + } + case 1322: + { + escape := yyS[yypt-0].item.(string) + if escape != "\\" && len(escape) > 1 { + yylex.Errorf("Incorrect arguments %s to ESCAPE", escape) + return 1 + } + var enclosed byte + str := yyS[yypt-1].item.(string) + if len(str) > 1 { + yylex.Errorf("Incorrect arguments %s to ENCLOSED", escape) + return 1 + } else if len(str) != 0 { + enclosed = str[0] + } + var escaped byte + if len(escape) > 0 { + escaped = escape[0] + } + parser.yyVAL.item = &ast.FieldsClause{ + Terminated: yyS[yypt-2].item.(string), + Enclosed: enclosed, + Escaped: escaped, + } + } + case 1325: + { + parser.yyVAL.item = "\t" + } + case 1326: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 1327: + { + parser.yyVAL.item = "" + } + case 1328: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 1329: + { + parser.yyVAL.item = "\\" + } + case 1330: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 1331: + { + parser.yyVAL.item = &ast.LinesClause{Terminated: "\n"} + } + case 1332: + { + parser.yyVAL.item = &ast.LinesClause{Starting: yyS[yypt-1].item.(string), Terminated: yyS[yypt-0].item.(string)} + } + case 1333: + { + parser.yyVAL.item = "" + } + case 1334: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 1335: + { + parser.yyVAL.item = "\n" + } + case 1336: + { + parser.yyVAL.item = yyS[yypt-0].ident + } + case 1347: + { + parser.yyVAL.statement = &ast.KillStmt{ + ConnectionID: getUint64FromNUM(yyS[yypt-0].item), + TiDBExtension: yyS[yypt-1].item.(bool), + } + } + case 1348: + { + parser.yyVAL.statement = &ast.KillStmt{ + ConnectionID: getUint64FromNUM(yyS[yypt-0].item), + TiDBExtension: yyS[yypt-2].item.(bool), + } + } + case 1349: + { + parser.yyVAL.statement = &ast.KillStmt{ + ConnectionID: getUint64FromNUM(yyS[yypt-0].item), + Query: true, + TiDBExtension: yyS[yypt-2].item.(bool), + } + } + case 1350: + { + parser.yyVAL.item = false + } + case 1351: + { + parser.yyVAL.item = true + } + case 1352: + { + parser.yyVAL.statement = &ast.LoadStatsStmt{ + Path: yyS[yypt-0].ident, + } + } + + } + + if yyEx != nil && yyEx.Reduced(r, exState, &parser.yyVAL) { + return -1 + } + goto yystack /* stack new state and value */ +} diff --git a/vendor/github.com/pingcap/parser/terror/terror.go b/vendor/github.com/pingcap/parser/terror/terror.go new file mode 100644 index 0000000000000..a5443653d71cd --- /dev/null +++ b/vendor/github.com/pingcap/parser/terror/terror.go @@ -0,0 +1,344 @@ +// Copyright 2015 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package terror + +import ( + "encoding/json" + "fmt" + "strconv" + + "github.com/pingcap/errors" + "github.com/pingcap/parser/mysql" + log "github.com/sirupsen/logrus" +) + +// Global error instances. +var ( + ErrCritical = ClassGlobal.New(CodeExecResultIsEmpty, "critical error %v") + ErrResultUndetermined = ClassGlobal.New(CodeResultUndetermined, "execution result undetermined") +) + +// ErrCode represents a specific error type in a error class. +// Same error code can be used in different error classes. +type ErrCode int + +const ( + // Executor error codes. + + // CodeUnknown is for errors of unknown reason. + CodeUnknown ErrCode = -1 + // CodeExecResultIsEmpty indicates execution result is empty. + CodeExecResultIsEmpty ErrCode = 3 + + // Expression error codes. + + // CodeMissConnectionID indicates connection id is missing. + CodeMissConnectionID ErrCode = 1 + + // Special error codes. + + // CodeResultUndetermined indicates the sql execution result is undetermined. + CodeResultUndetermined ErrCode = 2 +) + +// ErrClass represents a class of errors. +type ErrClass int + +// Error classes. +const ( + ClassAutoid ErrClass = iota + 1 + ClassDDL + ClassDomain + ClassEvaluator + ClassExecutor + ClassExpression + ClassAdmin + ClassKV + ClassMeta + ClassOptimizer + ClassParser + ClassPerfSchema + ClassPrivilege + ClassSchema + ClassServer + ClassStructure + ClassVariable + ClassXEval + ClassTable + ClassTypes + ClassGlobal + ClassMockTikv + ClassJSON + ClassTiKV + ClassSession + // Add more as needed. +) + +var errClz2Str = map[ErrClass]string{ + ClassAutoid: "autoid", + ClassDDL: "ddl", + ClassDomain: "domain", + ClassExecutor: "executor", + ClassExpression: "expression", + ClassAdmin: "admin", + ClassMeta: "meta", + ClassKV: "kv", + ClassOptimizer: "planner", + ClassParser: "parser", + ClassPerfSchema: "perfschema", + ClassPrivilege: "privilege", + ClassSchema: "schema", + ClassServer: "server", + ClassStructure: "structure", + ClassVariable: "variable", + ClassTable: "table", + ClassTypes: "types", + ClassGlobal: "global", + ClassMockTikv: "mocktikv", + ClassJSON: "json", + ClassTiKV: "tikv", + ClassSession: "session", +} + +// String implements fmt.Stringer interface. +func (ec ErrClass) String() string { + if s, exists := errClz2Str[ec]; exists { + return s + } + return strconv.Itoa(int(ec)) +} + +// EqualClass returns true if err is *Error with the same class. +func (ec ErrClass) EqualClass(err error) bool { + e := errors.Cause(err) + if e == nil { + return false + } + if te, ok := e.(*Error); ok { + return te.class == ec + } + return false +} + +// NotEqualClass returns true if err is not *Error with the same class. +func (ec ErrClass) NotEqualClass(err error) bool { + return !ec.EqualClass(err) +} + +// New creates an *Error with an error code and an error message. +// Usually used to create base *Error. +func (ec ErrClass) New(code ErrCode, message string) *Error { + return &Error{ + class: ec, + code: code, + message: message, + } +} + +// Error implements error interface and adds integer Class and Code, so +// errors with different message can be compared. +type Error struct { + class ErrClass + code ErrCode + message string + args []interface{} + file string + line int +} + +// Class returns ErrClass +func (e *Error) Class() ErrClass { + return e.class +} + +// Code returns ErrCode +func (e *Error) Code() ErrCode { + return e.code +} + +// MarshalJSON implements json.Marshaler interface. +func (e *Error) MarshalJSON() ([]byte, error) { + return json.Marshal(&struct { + Class ErrClass `json:"class"` + Code ErrCode `json:"code"` + Msg string `json:"message"` + }{ + Class: e.class, + Code: e.code, + Msg: e.getMsg(), + }) +} + +// UnmarshalJSON implements json.Unmarshaler interface. +func (e *Error) UnmarshalJSON(data []byte) error { + err := &struct { + Class ErrClass `json:"class"` + Code ErrCode `json:"code"` + Msg string `json:"message"` + }{} + + if err := json.Unmarshal(data, &err); err != nil { + return errors.Trace(err) + } + + e.class = err.Class + e.code = err.Code + e.message = err.Msg + return nil +} + +// Location returns the location where the error is created, +// implements juju/errors locationer interface. +func (e *Error) Location() (file string, line int) { + return e.file, e.line +} + +// Error implements error interface. +func (e *Error) Error() string { + return fmt.Sprintf("[%s:%d]%s", e.class, e.code, e.getMsg()) +} + +func (e *Error) getMsg() string { + if len(e.args) > 0 { + return fmt.Sprintf(e.message, e.args...) + } + return e.message +} + +// GenWithStack generates a new *Error with the same class and code, and a new formatted message. +func (e *Error) GenWithStack(format string, args ...interface{}) error { + err := *e + err.message = format + err.args = args + return errors.AddStack(&err) +} + +// GenWithStackByArgs generates a new *Error with the same class and code, and new arguments. +func (e *Error) GenWithStackByArgs(args ...interface{}) error { + err := *e + err.args = args + return errors.AddStack(&err) +} + +// FastGen generates a new *Error with the same class and code, and a new formatted message. +// This will not call runtime.Caller to get file and line. +func (e *Error) FastGen(format string, args ...interface{}) error { + err := *e + err.message = format + err.args = args + return &err +} + +// Equal checks if err is equal to e. +func (e *Error) Equal(err error) bool { + originErr := errors.Cause(err) + if originErr == nil { + return false + } + + if error(e) == originErr { + return true + } + inErr, ok := originErr.(*Error) + return ok && e.class == inErr.class && e.code == inErr.code +} + +// NotEqual checks if err is not equal to e. +func (e *Error) NotEqual(err error) bool { + return !e.Equal(err) +} + +// ToSQLError convert Error to mysql.SQLError. +func (e *Error) ToSQLError() *mysql.SQLError { + code := e.getMySQLErrorCode() + return mysql.NewErrf(code, "%s", e.getMsg()) +} + +var defaultMySQLErrorCode uint16 + +func (e *Error) getMySQLErrorCode() uint16 { + codeMap, ok := ErrClassToMySQLCodes[e.class] + if !ok { + log.Warnf("Unknown error class: %v", e.class) + return defaultMySQLErrorCode + } + code, ok := codeMap[e.code] + if !ok { + log.Debugf("Unknown error class: %v code: %v", e.class, e.code) + return defaultMySQLErrorCode + } + return code +} + +var ( + // ErrClassToMySQLCodes is the map of ErrClass to code-map. + ErrClassToMySQLCodes map[ErrClass]map[ErrCode]uint16 +) + +func init() { + ErrClassToMySQLCodes = make(map[ErrClass]map[ErrCode]uint16) + defaultMySQLErrorCode = mysql.ErrUnknown +} + +// ErrorEqual returns a boolean indicating whether err1 is equal to err2. +func ErrorEqual(err1, err2 error) bool { + e1 := errors.Cause(err1) + e2 := errors.Cause(err2) + + if e1 == e2 { + return true + } + + if e1 == nil || e2 == nil { + return e1 == e2 + } + + te1, ok1 := e1.(*Error) + te2, ok2 := e2.(*Error) + if ok1 && ok2 { + return te1.class == te2.class && te1.code == te2.code + } + + return e1.Error() == e2.Error() +} + +// ErrorNotEqual returns a boolean indicating whether err1 isn't equal to err2. +func ErrorNotEqual(err1, err2 error) bool { + return !ErrorEqual(err1, err2) +} + +// MustNil cleans up and fatals if err is not nil. +func MustNil(err error, closeFuns ...func()) { + if err != nil { + for _, f := range closeFuns { + f() + } + log.Fatalf(errors.ErrorStack(err)) + } +} + +// Call executes a function and checks the returned err. +func Call(fn func() error) { + err := fn() + if err != nil { + log.Error(errors.ErrorStack(err)) + } +} + +// Log logs the error if it is not nil. +func Log(err error) { + if err != nil { + log.Error(errors.ErrorStack(err)) + } +} diff --git a/parser/types/etc.go b/vendor/github.com/pingcap/parser/types/etc.go similarity index 97% rename from parser/types/etc.go rename to vendor/github.com/pingcap/parser/types/etc.go index 983b81503b5d8..84b2966c55e67 100644 --- a/parser/types/etc.go +++ b/vendor/github.com/pingcap/parser/types/etc.go @@ -20,8 +20,8 @@ package types import ( "strings" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" ) // IsTypeBlob returns a boolean indicating whether the tp is a blob type. diff --git a/parser/types/eval_type.go b/vendor/github.com/pingcap/parser/types/eval_type.go similarity index 100% rename from parser/types/eval_type.go rename to vendor/github.com/pingcap/parser/types/eval_type.go diff --git a/parser/types/field_type.go b/vendor/github.com/pingcap/parser/types/field_type.go similarity index 98% rename from parser/types/field_type.go rename to vendor/github.com/pingcap/parser/types/field_type.go index de9907538a5ad..4b299cdb63eda 100644 --- a/parser/types/field_type.go +++ b/vendor/github.com/pingcap/parser/types/field_type.go @@ -18,9 +18,9 @@ import ( "io" "strings" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/format" + "github.com/pingcap/parser/charset" + "github.com/pingcap/parser/format" + "github.com/pingcap/parser/mysql" ) // UnspecifiedLength is unspecified length. diff --git a/parser/yy_parser.go b/vendor/github.com/pingcap/parser/yy_parser.go similarity index 98% rename from parser/yy_parser.go rename to vendor/github.com/pingcap/parser/yy_parser.go index 7eeb113004689..0507d7d71d93d 100644 --- a/parser/yy_parser.go +++ b/vendor/github.com/pingcap/parser/yy_parser.go @@ -19,10 +19,10 @@ import ( "strconv" "unicode" - "github.com/pingcap/tidb/ast" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/terror" - "github.com/pkg/errors" + "github.com/pingcap/errors" + "github.com/pingcap/parser/ast" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" ) const ( diff --git a/x-server/conn.go b/x-server/conn.go index cf17b745733d1..940c6b09cfc8f 100644 --- a/x-server/conn.go +++ b/x-server/conn.go @@ -17,7 +17,7 @@ import ( "io" "net" - "github.com/pingcap/tidb/terror" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/util/arena" "github.com/pkg/errors" log "github.com/sirupsen/logrus" diff --git a/x-server/server.go b/x-server/server.go index 9e460a306ae19..5b1c9f7650ebb 100644 --- a/x-server/server.go +++ b/x-server/server.go @@ -20,9 +20,9 @@ import ( "sync/atomic" "time" - "github.com/pingcap/tidb/mysql" + "github.com/pingcap/parser/mysql" + "github.com/pingcap/parser/terror" "github.com/pingcap/tidb/server" - "github.com/pingcap/tidb/terror" "github.com/pingcap/tidb/util" "github.com/pingcap/tidb/util/arena" "github.com/pkg/errors" From 8f6b467b1b4af107fc52f8ae10a08aa903e4841e Mon Sep 17 00:00:00 2001 From: tiancaiamao Date: Wed, 24 Oct 2018 19:12:02 +0800 Subject: [PATCH 2/2] try to fix CI --- Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7e7f26b4e5dc6..9e9e15ee0077e 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ CHECK_LDFLAGS += $(LDFLAGS) ${TEST_LDFLAGS} TARGET = "" -.PHONY: all build update clean todo test gotest interpreter server dev benchkv benchraw check checklist +.PHONY: all build update clean todo test gotest interpreter server dev benchkv benchraw check checklist parser default: server buildsucc @@ -51,6 +51,9 @@ buildsucc: all: dev server benchkv +parser: + @echo "remove this command later" + dev: checklist test check build: