You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2022/06/29 12:38:57 UTC

[doris] branch master updated: [bugfix]fix core dump on outfile with expr (#10491)

This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 2c35abe940 [bugfix]fix core dump on outfile with expr (#10491)
2c35abe940 is described below

commit 2c35abe940ff709f254182312146736a6926ee56
Author: Pxl <95...@qq.com>
AuthorDate: Wed Jun 29 20:38:49 2022 +0800

    [bugfix]fix core dump on outfile with expr (#10491)
    
    remove log
---
 be/src/vec/runtime/vfile_result_writer.cpp         |   40 +-
 be/src/vec/runtime/vfile_result_writer.h           |   14 +-
 be/src/vec/sink/vresult_file_sink.cpp              |   13 +-
 be/src/vec/sink/vresult_file_sink.h                |   18 +-
 regression-test/data/export/test_outfile_expr.out  | 1003 ++++++++++++++++++++
 regression-test/suites/export/test_outfile.groovy  |    2 +-
 ...est_outfile.groovy => test_outfile_expr.groovy} |   12 +-
 7 files changed, 1058 insertions(+), 44 deletions(-)

diff --git a/be/src/vec/runtime/vfile_result_writer.cpp b/be/src/vec/runtime/vfile_result_writer.cpp
index 30e32d8e7c..912275c974 100644
--- a/be/src/vec/runtime/vfile_result_writer.cpp
+++ b/be/src/vec/runtime/vfile_result_writer.cpp
@@ -18,6 +18,7 @@
 #include "vec/runtime/vfile_result_writer.h"
 
 #include "common/consts.h"
+#include "common/status.h"
 #include "exprs/expr_context.h"
 #include "gutil/strings/numbers.h"
 #include "gutil/strings/substitute.h"
@@ -33,22 +34,23 @@
 #include "util/mysql_global.h"
 #include "util/mysql_row_buffer.h"
 #include "vec/core/block.h"
+#include "vec/exprs/vexpr.h"
+#include "vec/exprs/vexpr_context.h"
 
 namespace doris::vectorized {
 const size_t VFileResultWriter::OUTSTREAM_BUFFER_SIZE_BYTES = 1024 * 1024;
 using doris::operator<<;
 
-VFileResultWriter::VFileResultWriter(const ResultFileOptions* file_opts,
-                                     const TStorageBackendType::type storage_type,
-                                     const TUniqueId fragment_instance_id,
-                                     const std::vector<ExprContext*>& output_expr_ctxs,
-                                     RuntimeProfile* parent_profile, BufferControlBlock* sinker,
-                                     Block* output_block, bool output_object_data,
-                                     const RowDescriptor& output_row_descriptor)
+VFileResultWriter::VFileResultWriter(
+        const ResultFileOptions* file_opts, const TStorageBackendType::type storage_type,
+        const TUniqueId fragment_instance_id,
+        const std::vector<vectorized::VExprContext*>& output_vexpr_ctxs,
+        RuntimeProfile* parent_profile, BufferControlBlock* sinker, Block* output_block,
+        bool output_object_data, const RowDescriptor& output_row_descriptor)
         : _file_opts(file_opts),
           _storage_type(storage_type),
           _fragment_instance_id(fragment_instance_id),
-          _output_expr_ctxs(output_expr_ctxs),
+          _output_vexpr_ctxs(output_vexpr_ctxs),
           _parent_profile(parent_profile),
           _sinker(sinker),
           _output_block(output_block),
@@ -185,7 +187,16 @@ Status VFileResultWriter::append_block(Block& block) {
     if (_parquet_writer != nullptr) {
         return Status::NotSupported("Parquet Writer is not supported yet!");
     } else {
-        RETURN_IF_ERROR(_write_csv_file(block));
+        Status status = Status::OK();
+        // Exec vectorized expr here to speed up, block.rows() == 0 means expr exec
+        // failed, just return the error status
+        auto output_block = VExprContext::get_output_block_after_execute_exprs(_output_vexpr_ctxs,
+                                                                               block, status);
+        auto num_rows = output_block.rows();
+        if (UNLIKELY(num_rows == 0)) {
+            return status;
+        }
+        RETURN_IF_ERROR(_write_csv_file(output_block));
     }
 
     _written_rows += block.rows();
@@ -199,7 +210,7 @@ Status VFileResultWriter::_write_csv_file(const Block& block) {
             if (col.column->is_null_at(i)) {
                 _plain_text_outstream << NULL_IN_CSV;
             } else {
-                switch (_output_expr_ctxs[col_id]->root()->type().type) {
+                switch (_output_vexpr_ctxs[col_id]->root()->type().type) {
                 case TYPE_BOOLEAN:
                 case TYPE_TINYINT:
                     _plain_text_outstream << (int)*reinterpret_cast<const int8_t*>(
@@ -277,8 +288,7 @@ Status VFileResultWriter::_write_csv_file(const Block& block) {
                             reinterpret_cast<const PackedInt128*>(col.column->get_data_at(i).data)
                                     ->value);
                     std::string decimal_str;
-                    int output_scale = _output_expr_ctxs[col_id]->root()->output_scale();
-                    decimal_str = decimal_val.to_string(output_scale);
+                    decimal_str = decimal_val.to_string();
                     _plain_text_outstream << decimal_str;
                     break;
                 }
@@ -299,10 +309,10 @@ Status VFileResultWriter::_write_csv_file(const Block& block) {
 }
 
 std::string VFileResultWriter::gen_types() {
-    std::string types = "";
-    int num_columns = _output_expr_ctxs.size();
+    std::string types;
+    int num_columns = _output_vexpr_ctxs.size();
     for (int i = 0; i < num_columns; ++i) {
-        types += type_to_string(_output_expr_ctxs[i]->root()->type().type);
+        types += type_to_string(_output_vexpr_ctxs[i]->root()->type().type);
         if (i < num_columns - 1) {
             types += _file_opts->column_separator;
         }
diff --git a/be/src/vec/runtime/vfile_result_writer.h b/be/src/vec/runtime/vfile_result_writer.h
index abfac874c1..c4066c75a5 100644
--- a/be/src/vec/runtime/vfile_result_writer.h
+++ b/be/src/vec/runtime/vfile_result_writer.h
@@ -30,22 +30,22 @@ public:
     VFileResultWriter(const ResultFileOptions* file_option,
                       const TStorageBackendType::type storage_type,
                       const TUniqueId fragment_instance_id,
-                      const std::vector<ExprContext*>& output_expr_ctxs,
+                      const std::vector<VExprContext*>& _output_vexpr_ctxs,
                       RuntimeProfile* parent_profile, BufferControlBlock* sinker,
                       Block* output_block, bool output_object_data,
                       const RowDescriptor& output_row_descriptor);
     virtual ~VFileResultWriter() = default;
 
-    virtual Status append_block(Block& block) override;
-    virtual Status append_row_batch(const RowBatch* batch) override {
+    Status append_block(Block& block) override;
+    Status append_row_batch(const RowBatch* batch) override {
         return Status::NotSupported("append_row_batch is not supported in VFileResultWriter!");
     };
 
-    virtual Status init(RuntimeState* state) override;
-    virtual Status close() override;
+    Status init(RuntimeState* state) override;
+    Status close() override;
 
     // file result writer always return statistic result in one row
-    virtual int64_t get_written_rows() const override { return 1; }
+    int64_t get_written_rows() const override { return 1; }
 
     std::string gen_types();
     Status write_csv_header();
@@ -80,7 +80,7 @@ private:
     const ResultFileOptions* _file_opts;
     TStorageBackendType::type _storage_type;
     TUniqueId _fragment_instance_id;
-    const std::vector<ExprContext*>& _output_expr_ctxs;
+    const std::vector<VExprContext*>& _output_vexpr_ctxs;
 
     // If the result file format is plain text, like CSV, this _file_writer is owned by this FileResultWriter.
     // If the result file format is Parquet, this _file_writer is owned by _parquet_writer.
diff --git a/be/src/vec/sink/vresult_file_sink.cpp b/be/src/vec/sink/vresult_file_sink.cpp
index b69226bd7e..bc1b987d45 100644
--- a/be/src/vec/sink/vresult_file_sink.cpp
+++ b/be/src/vec/sink/vresult_file_sink.cpp
@@ -83,9 +83,10 @@ Status VResultFileSink::init(const TDataSink& tsink) {
 
 Status VResultFileSink::prepare_exprs(RuntimeState* state) {
     // From the thrift expressions create the real exprs.
-    RETURN_IF_ERROR(Expr::create_expr_trees(state->obj_pool(), _t_output_expr, &_output_expr_ctxs));
+    RETURN_IF_ERROR(
+            VExpr::create_expr_trees(state->obj_pool(), _t_output_expr, &_output_vexpr_ctxs));
     // Prepare the exprs to run.
-    RETURN_IF_ERROR(Expr::prepare(_output_expr_ctxs, state, _row_desc, _expr_mem_tracker));
+    RETURN_IF_ERROR(VExpr::prepare(_output_vexpr_ctxs, state, _row_desc, _expr_mem_tracker));
     return Status::OK();
 }
 
@@ -106,7 +107,7 @@ Status VResultFileSink::prepare(RuntimeState* state) {
                 state->fragment_instance_id(), _buf_size, &_sender));
         // create writer
         _writer.reset(new (std::nothrow) VFileResultWriter(
-                _file_opts.get(), _storage_type, state->fragment_instance_id(), _output_expr_ctxs,
+                _file_opts.get(), _storage_type, state->fragment_instance_id(), _output_vexpr_ctxs,
                 _profile, _sender.get(), nullptr, state->return_object_data_as_binary(),
                 _output_row_descriptor));
     } else {
@@ -121,7 +122,7 @@ Status VResultFileSink::prepare(RuntimeState* state) {
         // create writer
         _output_block.reset(new Block(_output_row_descriptor.tuple_descriptors()[0]->slots(), 1));
         _writer.reset(new (std::nothrow) VFileResultWriter(
-                _file_opts.get(), _storage_type, state->fragment_instance_id(), _output_expr_ctxs,
+                _file_opts.get(), _storage_type, state->fragment_instance_id(), _output_vexpr_ctxs,
                 _profile, nullptr, _output_block.get(), state->return_object_data_as_binary(),
                 _output_row_descriptor));
     }
@@ -134,7 +135,7 @@ Status VResultFileSink::prepare(RuntimeState* state) {
 }
 
 Status VResultFileSink::open(RuntimeState* state) {
-    return Expr::open(_output_expr_ctxs, state);
+    return VExpr::open(_output_vexpr_ctxs, state);
 }
 
 Status VResultFileSink::send(RuntimeState* state, RowBatch* batch) {
@@ -193,7 +194,7 @@ Status VResultFileSink::close(RuntimeState* state, Status exec_status) {
         _output_block->clear();
     }
 
-    Expr::close(_output_expr_ctxs, state);
+    VExpr::close(_output_vexpr_ctxs, state);
 
     _closed = true;
     return Status::OK();
diff --git a/be/src/vec/sink/vresult_file_sink.h b/be/src/vec/sink/vresult_file_sink.h
index 89085a71e3..c5c509caf7 100644
--- a/be/src/vec/sink/vresult_file_sink.h
+++ b/be/src/vec/sink/vresult_file_sink.h
@@ -34,18 +34,18 @@ public:
                     const std::vector<TPlanFragmentDestination>& destinations,
                     int per_channel_buffer_size, bool send_query_statistics_with_every_batch,
                     const std::vector<TExpr>& t_output_expr, DescriptorTbl& descs);
-    virtual ~VResultFileSink() = default;
-    virtual Status init(const TDataSink& thrift_sink) override;
-    virtual Status prepare(RuntimeState* state) override;
-    virtual Status open(RuntimeState* state) override;
+    ~VResultFileSink() override = default;
+    Status init(const TDataSink& thrift_sink) override;
+    Status prepare(RuntimeState* state) override;
+    Status open(RuntimeState* state) override;
     // send data in 'batch' to this backend stream mgr
     // Blocks until all rows in batch are placed in the buffer
-    virtual Status send(RuntimeState* state, RowBatch* batch) override;
-    virtual Status send(RuntimeState* state, Block* block) override;
+    Status send(RuntimeState* state, RowBatch* batch) override;
+    Status send(RuntimeState* state, Block* block) override;
     // Flush all buffered data and close all existing channels to destination
     // hosts. Further send() calls are illegal after calling close().
-    virtual Status close(RuntimeState* state, Status exec_status) override;
-    virtual RuntimeProfile* profile() override { return _profile; }
+    Status close(RuntimeState* state, Status exec_status) override;
+    RuntimeProfile* profile() override { return _profile; }
 
     void set_query_statistics(std::shared_ptr<QueryStatistics> statistics) override;
 
@@ -57,7 +57,7 @@ private:
 
     // Owned by the RuntimeState.
     const std::vector<TExpr>& _t_output_expr;
-    std::vector<ExprContext*> _output_expr_ctxs;
+    std::vector<vectorized::VExprContext*> _output_vexpr_ctxs;
     RowDescriptor _output_row_descriptor;
 
     std::unique_ptr<Block> _output_block = nullptr;
diff --git a/regression-test/data/export/test_outfile_expr.out b/regression-test/data/export/test_outfile_expr.out
new file mode 100644
index 0000000000..1d92f44ee6
--- /dev/null
+++ b/regression-test/data/export/test_outfile_expr.out
@@ -0,0 +1,1003 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !select_default --
+2	2	char1char1char1char1char1char1char1char1char1char1
+3	4	char2char2char2char2char2char2char2char2char2char2
+4	6	char3char3char3char3char3char3char3char3char3char3
+5	8	char4char4char4char4char4char4char4char4char4char4
+6	10	char5char5char5char5char5char5char5char5char5char5
+7	12	char6char6char6char6char6char6char6char6char6char6
+8	14	char7char7char7char7char7char7char7char7char7char7
+9	16	char8char8char8char8char8char8char8char8char8char8
+10	18	char9char9char9char9char9char9char9char9char9char9
+11	20	char10char10char10char10char10char10char10char10char10char10
+12	22	char11char11char11char11char11char11char11char11char11char11
+13	24	char12char12char12char12char12char12char12char12char12char12
+14	26	char13char13char13char13char13char13char13char13char13char13
+15	28	char14char14char14char14char14char14char14char14char14char14
+16	30	char15char15char15char15char15char15char15char15char15char15
+17	32	char16char16char16char16char16char16char16char16char16char16
+18	34	char17char17char17char17char17char17char17char17char17char17
+19	36	char18char18char18char18char18char18char18char18char18char18
+20	38	char19char19char19char19char19char19char19char19char19char19
+21	40	char20char20char20char20char20char20char20char20char20char20
+22	42	char21char21char21char21char21char21char21char21char21char21
+23	44	char22char22char22char22char22char22char22char22char22char22
+24	46	char23char23char23char23char23char23char23char23char23char23
+25	48	char24char24char24char24char24char24char24char24char24char24
+26	50	char25char25char25char25char25char25char25char25char25char25
+27	52	char26char26char26char26char26char26char26char26char26char26
+28	54	char27char27char27char27char27char27char27char27char27char27
+29	56	char28char28char28char28char28char28char28char28char28char28
+30	58	char29char29char29char29char29char29char29char29char29char29
+31	60	char30char30char30char30char30char30char30char30char30char30
+32	62	char31char31char31char31char31char31char31char31char31char31
+33	64	char32char32char32char32char32char32char32char32char32char32
+34	66	char33char33char33char33char33char33char33char33char33char33
+35	68	char34char34char34char34char34char34char34char34char34char34
+36	70	char35char35char35char35char35char35char35char35char35char35
+37	72	char36char36char36char36char36char36char36char36char36char36
+38	74	char37char37char37char37char37char37char37char37char37char37
+39	76	char38char38char38char38char38char38char38char38char38char38
+40	78	char39char39char39char39char39char39char39char39char39char39
+41	80	char40char40char40char40char40char40char40char40char40char40
+42	82	char41char41char41char41char41char41char41char41char41char41
+43	84	char42char42char42char42char42char42char42char42char42char42
+44	86	char43char43char43char43char43char43char43char43char43char43
+45	88	char44char44char44char44char44char44char44char44char44char44
+46	90	char45char45char45char45char45char45char45char45char45char45
+47	92	char46char46char46char46char46char46char46char46char46char46
+48	94	char47char47char47char47char47char47char47char47char47char47
+49	96	char48char48char48char48char48char48char48char48char48char48
+50	98	char49char49char49char49char49char49char49char49char49char49
+51	100	char50char50char50char50char50char50char50char50char50char50
+52	102	char51char51char51char51char51char51char51char51char51char51
+53	104	char52char52char52char52char52char52char52char52char52char52
+54	106	char53char53char53char53char53char53char53char53char53char53
+55	108	char54char54char54char54char54char54char54char54char54char54
+56	110	char55char55char55char55char55char55char55char55char55char55
+57	112	char56char56char56char56char56char56char56char56char56char56
+58	114	char57char57char57char57char57char57char57char57char57char57
+59	116	char58char58char58char58char58char58char58char58char58char58
+60	118	char59char59char59char59char59char59char59char59char59char59
+61	120	char60char60char60char60char60char60char60char60char60char60
+62	122	char61char61char61char61char61char61char61char61char61char61
+63	124	char62char62char62char62char62char62char62char62char62char62
+64	126	char63char63char63char63char63char63char63char63char63char63
+65	128	char64char64char64char64char64char64char64char64char64char64
+66	130	char65char65char65char65char65char65char65char65char65char65
+67	132	char66char66char66char66char66char66char66char66char66char66
+68	134	char67char67char67char67char67char67char67char67char67char67
+69	136	char68char68char68char68char68char68char68char68char68char68
+70	138	char69char69char69char69char69char69char69char69char69char69
+71	140	char70char70char70char70char70char70char70char70char70char70
+72	142	char71char71char71char71char71char71char71char71char71char71
+73	144	char72char72char72char72char72char72char72char72char72char72
+74	146	char73char73char73char73char73char73char73char73char73char73
+75	148	char74char74char74char74char74char74char74char74char74char74
+76	150	char75char75char75char75char75char75char75char75char75char75
+77	152	char76char76char76char76char76char76char76char76char76char76
+78	154	char77char77char77char77char77char77char77char77char77char77
+79	156	char78char78char78char78char78char78char78char78char78char78
+80	158	char79char79char79char79char79char79char79char79char79char79
+81	160	char80char80char80char80char80char80char80char80char80char80
+82	162	char81char81char81char81char81char81char81char81char81char81
+83	164	char82char82char82char82char82char82char82char82char82char82
+84	166	char83char83char83char83char83char83char83char83char83char83
+85	168	char84char84char84char84char84char84char84char84char84char84
+86	170	char85char85char85char85char85char85char85char85char85char85
+87	172	char86char86char86char86char86char86char86char86char86char86
+88	174	char87char87char87char87char87char87char87char87char87char87
+89	176	char88char88char88char88char88char88char88char88char88char88
+90	178	char89char89char89char89char89char89char89char89char89char89
+91	180	char90char90char90char90char90char90char90char90char90char90
+92	182	char91char91char91char91char91char91char91char91char91char91
+93	184	char92char92char92char92char92char92char92char92char92char92
+94	186	char93char93char93char93char93char93char93char93char93char93
+95	188	char94char94char94char94char94char94char94char94char94char94
+96	190	char95char95char95char95char95char95char95char95char95char95
+97	192	char96char96char96char96char96char96char96char96char96char96
+98	194	char97char97char97char97char97char97char97char97char97char97
+99	196	char98char98char98char98char98char98char98char98char98char98
+100	198	char99char99char99char99char99char99char99char99char99char99
+101	200	char100char100char100char100char100char100char100char100char100char100
+102	202	char101char101char101char101char101char101char101char101char101char101
+103	204	char102char102char102char102char102char102char102char102char102char102
+104	206	char103char103char103char103char103char103char103char103char103char103
+105	208	char104char104char104char104char104char104char104char104char104char104
+106	210	char105char105char105char105char105char105char105char105char105char105
+107	212	char106char106char106char106char106char106char106char106char106char106
+108	214	char107char107char107char107char107char107char107char107char107char107
+109	216	char108char108char108char108char108char108char108char108char108char108
+110	218	char109char109char109char109char109char109char109char109char109char109
+111	220	char110char110char110char110char110char110char110char110char110char110
+112	222	char111char111char111char111char111char111char111char111char111char111
+113	224	char112char112char112char112char112char112char112char112char112char112
+114	226	char113char113char113char113char113char113char113char113char113char113
+115	228	char114char114char114char114char114char114char114char114char114char114
+116	230	char115char115char115char115char115char115char115char115char115char115
+117	232	char116char116char116char116char116char116char116char116char116char116
+118	234	char117char117char117char117char117char117char117char117char117char117
+119	236	char118char118char118char118char118char118char118char118char118char118
+120	238	char119char119char119char119char119char119char119char119char119char119
+121	240	char120char120char120char120char120char120char120char120char120char120
+122	242	char121char121char121char121char121char121char121char121char121char121
+123	244	char122char122char122char122char122char122char122char122char122char122
+124	246	char123char123char123char123char123char123char123char123char123char123
+125	248	char124char124char124char124char124char124char124char124char124char124
+126	250	char125char125char125char125char125char125char125char125char125char125
+127	252	char126char126char126char126char126char126char126char126char126char126
+128	254	char127char127char127char127char127char127char127char127char127char127
+129	128	char128char128char128char128char128char128char128char128char128char128
+130	130	char129char129char129char129char129char129char129char129char129char129
+131	132	char130char130char130char130char130char130char130char130char130char130
+132	134	char131char131char131char131char131char131char131char131char131char131
+133	136	char132char132char132char132char132char132char132char132char132char132
+134	138	char133char133char133char133char133char133char133char133char133char133
+135	140	char134char134char134char134char134char134char134char134char134char134
+136	142	char135char135char135char135char135char135char135char135char135char135
+137	144	char136char136char136char136char136char136char136char136char136char136
+138	146	char137char137char137char137char137char137char137char137char137char137
+139	148	char138char138char138char138char138char138char138char138char138char138
+140	150	char139char139char139char139char139char139char139char139char139char139
+141	152	char140char140char140char140char140char140char140char140char140char140
+142	154	char141char141char141char141char141char141char141char141char141char141
+143	156	char142char142char142char142char142char142char142char142char142char142
+144	158	char143char143char143char143char143char143char143char143char143char143
+145	160	char144char144char144char144char144char144char144char144char144char144
+146	162	char145char145char145char145char145char145char145char145char145char145
+147	164	char146char146char146char146char146char146char146char146char146char146
+148	166	char147char147char147char147char147char147char147char147char147char147
+149	168	char148char148char148char148char148char148char148char148char148char148
+150	170	char149char149char149char149char149char149char149char149char149char149
+151	172	char150char150char150char150char150char150char150char150char150char150
+152	174	char151char151char151char151char151char151char151char151char151char151
+153	176	char152char152char152char152char152char152char152char152char152char152
+154	178	char153char153char153char153char153char153char153char153char153char153
+155	180	char154char154char154char154char154char154char154char154char154char154
+156	182	char155char155char155char155char155char155char155char155char155char155
+157	184	char156char156char156char156char156char156char156char156char156char156
+158	186	char157char157char157char157char157char157char157char157char157char157
+159	188	char158char158char158char158char158char158char158char158char158char158
+160	190	char159char159char159char159char159char159char159char159char159char159
+161	192	char160char160char160char160char160char160char160char160char160char160
+162	194	char161char161char161char161char161char161char161char161char161char161
+163	196	char162char162char162char162char162char162char162char162char162char162
+164	198	char163char163char163char163char163char163char163char163char163char163
+165	200	char164char164char164char164char164char164char164char164char164char164
+166	202	char165char165char165char165char165char165char165char165char165char165
+167	204	char166char166char166char166char166char166char166char166char166char166
+168	206	char167char167char167char167char167char167char167char167char167char167
+169	208	char168char168char168char168char168char168char168char168char168char168
+170	210	char169char169char169char169char169char169char169char169char169char169
+171	212	char170char170char170char170char170char170char170char170char170char170
+172	214	char171char171char171char171char171char171char171char171char171char171
+173	216	char172char172char172char172char172char172char172char172char172char172
+174	218	char173char173char173char173char173char173char173char173char173char173
+175	220	char174char174char174char174char174char174char174char174char174char174
+176	222	char175char175char175char175char175char175char175char175char175char175
+177	224	char176char176char176char176char176char176char176char176char176char176
+178	226	char177char177char177char177char177char177char177char177char177char177
+179	228	char178char178char178char178char178char178char178char178char178char178
+180	230	char179char179char179char179char179char179char179char179char179char179
+181	232	char180char180char180char180char180char180char180char180char180char180
+182	234	char181char181char181char181char181char181char181char181char181char181
+183	236	char182char182char182char182char182char182char182char182char182char182
+184	238	char183char183char183char183char183char183char183char183char183char183
+185	240	char184char184char184char184char184char184char184char184char184char184
+186	242	char185char185char185char185char185char185char185char185char185char185
+187	244	char186char186char186char186char186char186char186char186char186char186
+188	246	char187char187char187char187char187char187char187char187char187char187
+189	248	char188char188char188char188char188char188char188char188char188char188
+190	250	char189char189char189char189char189char189char189char189char189char189
+191	252	char190char190char190char190char190char190char190char190char190char190
+192	254	char191char191char191char191char191char191char191char191char191char191
+193	256	char192char192char192char192char192char192char192char192char192char192
+194	258	char193char193char193char193char193char193char193char193char193char193
+195	260	char194char194char194char194char194char194char194char194char194char194
+196	262	char195char195char195char195char195char195char195char195char195char195
+197	264	char196char196char196char196char196char196char196char196char196char196
+198	266	char197char197char197char197char197char197char197char197char197char197
+199	268	char198char198char198char198char198char198char198char198char198char198
+200	270	char199char199char199char199char199char199char199char199char199char199
+201	272	char200char200char200char200char200char200char200char200char200char200
+202	274	char201char201char201char201char201char201char201char201char201char201
+203	276	char202char202char202char202char202char202char202char202char202char202
+204	278	char203char203char203char203char203char203char203char203char203char203
+205	280	char204char204char204char204char204char204char204char204char204char204
+206	282	char205char205char205char205char205char205char205char205char205char205
+207	284	char206char206char206char206char206char206char206char206char206char206
+208	286	char207char207char207char207char207char207char207char207char207char207
+209	288	char208char208char208char208char208char208char208char208char208char208
+210	290	char209char209char209char209char209char209char209char209char209char209
+211	292	char210char210char210char210char210char210char210char210char210char210
+212	294	char211char211char211char211char211char211char211char211char211char211
+213	296	char212char212char212char212char212char212char212char212char212char212
+214	298	char213char213char213char213char213char213char213char213char213char213
+215	300	char214char214char214char214char214char214char214char214char214char214
+216	302	char215char215char215char215char215char215char215char215char215char215
+217	304	char216char216char216char216char216char216char216char216char216char216
+218	306	char217char217char217char217char217char217char217char217char217char217
+219	308	char218char218char218char218char218char218char218char218char218char218
+220	310	char219char219char219char219char219char219char219char219char219char219
+221	312	char220char220char220char220char220char220char220char220char220char220
+222	314	char221char221char221char221char221char221char221char221char221char221
+223	316	char222char222char222char222char222char222char222char222char222char222
+224	318	char223char223char223char223char223char223char223char223char223char223
+225	320	char224char224char224char224char224char224char224char224char224char224
+226	322	char225char225char225char225char225char225char225char225char225char225
+227	324	char226char226char226char226char226char226char226char226char226char226
+228	326	char227char227char227char227char227char227char227char227char227char227
+229	328	char228char228char228char228char228char228char228char228char228char228
+230	330	char229char229char229char229char229char229char229char229char229char229
+231	332	char230char230char230char230char230char230char230char230char230char230
+232	334	char231char231char231char231char231char231char231char231char231char231
+233	336	char232char232char232char232char232char232char232char232char232char232
+234	338	char233char233char233char233char233char233char233char233char233char233
+235	340	char234char234char234char234char234char234char234char234char234char234
+236	342	char235char235char235char235char235char235char235char235char235char235
+237	344	char236char236char236char236char236char236char236char236char236char236
+238	346	char237char237char237char237char237char237char237char237char237char237
+239	348	char238char238char238char238char238char238char238char238char238char238
+240	350	char239char239char239char239char239char239char239char239char239char239
+241	352	char240char240char240char240char240char240char240char240char240char240
+242	354	char241char241char241char241char241char241char241char241char241char241
+243	356	char242char242char242char242char242char242char242char242char242char242
+244	358	char243char243char243char243char243char243char243char243char243char243
+245	360	char244char244char244char244char244char244char244char244char244char244
+246	362	char245char245char245char245char245char245char245char245char245char245
+247	364	char246char246char246char246char246char246char246char246char246char246
+248	366	char247char247char247char247char247char247char247char247char247char247
+249	368	char248char248char248char248char248char248char248char248char248char248
+250	370	char249char249char249char249char249char249char249char249char249char249
+251	372	char250char250char250char250char250char250char250char250char250char250
+252	374	char251char251char251char251char251char251char251char251char251char251
+253	376	char252char252char252char252char252char252char252char252char252char252
+254	378	char253char253char253char253char253char253char253char253char253char253
+255	380	char254char254char254char254char254char254char254char254char254char254
+256	382	char255char255char255char255char255char255char255char255char255char255
+257	256	char256char256char256char256char256char256char256char256char256char256
+258	258	char257char257char257char257char257char257char257char257char257char257
+259	260	char258char258char258char258char258char258char258char258char258char258
+260	262	char259char259char259char259char259char259char259char259char259char259
+261	264	char260char260char260char260char260char260char260char260char260char260
+262	266	char261char261char261char261char261char261char261char261char261char261
+263	268	char262char262char262char262char262char262char262char262char262char262
+264	270	char263char263char263char263char263char263char263char263char263char263
+265	272	char264char264char264char264char264char264char264char264char264char264
+266	274	char265char265char265char265char265char265char265char265char265char265
+267	276	char266char266char266char266char266char266char266char266char266char266
+268	278	char267char267char267char267char267char267char267char267char267char267
+269	280	char268char268char268char268char268char268char268char268char268char268
+270	282	char269char269char269char269char269char269char269char269char269char269
+271	284	char270char270char270char270char270char270char270char270char270char270
+272	286	char271char271char271char271char271char271char271char271char271char271
+273	288	char272char272char272char272char272char272char272char272char272char272
+274	290	char273char273char273char273char273char273char273char273char273char273
+275	292	char274char274char274char274char274char274char274char274char274char274
+276	294	char275char275char275char275char275char275char275char275char275char275
+277	296	char276char276char276char276char276char276char276char276char276char276
+278	298	char277char277char277char277char277char277char277char277char277char277
+279	300	char278char278char278char278char278char278char278char278char278char278
+280	302	char279char279char279char279char279char279char279char279char279char279
+281	304	char280char280char280char280char280char280char280char280char280char280
+282	306	char281char281char281char281char281char281char281char281char281char281
+283	308	char282char282char282char282char282char282char282char282char282char282
+284	310	char283char283char283char283char283char283char283char283char283char283
+285	312	char284char284char284char284char284char284char284char284char284char284
+286	314	char285char285char285char285char285char285char285char285char285char285
+287	316	char286char286char286char286char286char286char286char286char286char286
+288	318	char287char287char287char287char287char287char287char287char287char287
+289	320	char288char288char288char288char288char288char288char288char288char288
+290	322	char289char289char289char289char289char289char289char289char289char289
+291	324	char290char290char290char290char290char290char290char290char290char290
+292	326	char291char291char291char291char291char291char291char291char291char291
+293	328	char292char292char292char292char292char292char292char292char292char292
+294	330	char293char293char293char293char293char293char293char293char293char293
+295	332	char294char294char294char294char294char294char294char294char294char294
+296	334	char295char295char295char295char295char295char295char295char295char295
+297	336	char296char296char296char296char296char296char296char296char296char296
+298	338	char297char297char297char297char297char297char297char297char297char297
+299	340	char298char298char298char298char298char298char298char298char298char298
+300	342	char299char299char299char299char299char299char299char299char299char299
+301	344	char300char300char300char300char300char300char300char300char300char300
+302	346	char301char301char301char301char301char301char301char301char301char301
+303	348	char302char302char302char302char302char302char302char302char302char302
+304	350	char303char303char303char303char303char303char303char303char303char303
+305	352	char304char304char304char304char304char304char304char304char304char304
+306	354	char305char305char305char305char305char305char305char305char305char305
+307	356	char306char306char306char306char306char306char306char306char306char306
+308	358	char307char307char307char307char307char307char307char307char307char307
+309	360	char308char308char308char308char308char308char308char308char308char308
+310	362	char309char309char309char309char309char309char309char309char309char309
+311	364	char310char310char310char310char310char310char310char310char310char310
+312	366	char311char311char311char311char311char311char311char311char311char311
+313	368	char312char312char312char312char312char312char312char312char312char312
+314	370	char313char313char313char313char313char313char313char313char313char313
+315	372	char314char314char314char314char314char314char314char314char314char314
+316	374	char315char315char315char315char315char315char315char315char315char315
+317	376	char316char316char316char316char316char316char316char316char316char316
+318	378	char317char317char317char317char317char317char317char317char317char317
+319	380	char318char318char318char318char318char318char318char318char318char318
+320	382	char319char319char319char319char319char319char319char319char319char319
+321	384	char320char320char320char320char320char320char320char320char320char320
+322	386	char321char321char321char321char321char321char321char321char321char321
+323	388	char322char322char322char322char322char322char322char322char322char322
+324	390	char323char323char323char323char323char323char323char323char323char323
+325	392	char324char324char324char324char324char324char324char324char324char324
+326	394	char325char325char325char325char325char325char325char325char325char325
+327	396	char326char326char326char326char326char326char326char326char326char326
+328	398	char327char327char327char327char327char327char327char327char327char327
+329	400	char328char328char328char328char328char328char328char328char328char328
+330	402	char329char329char329char329char329char329char329char329char329char329
+331	404	char330char330char330char330char330char330char330char330char330char330
+332	406	char331char331char331char331char331char331char331char331char331char331
+333	408	char332char332char332char332char332char332char332char332char332char332
+334	410	char333char333char333char333char333char333char333char333char333char333
+335	412	char334char334char334char334char334char334char334char334char334char334
+336	414	char335char335char335char335char335char335char335char335char335char335
+337	416	char336char336char336char336char336char336char336char336char336char336
+338	418	char337char337char337char337char337char337char337char337char337char337
+339	420	char338char338char338char338char338char338char338char338char338char338
+340	422	char339char339char339char339char339char339char339char339char339char339
+341	424	char340char340char340char340char340char340char340char340char340char340
+342	426	char341char341char341char341char341char341char341char341char341char341
+343	428	char342char342char342char342char342char342char342char342char342char342
+344	430	char343char343char343char343char343char343char343char343char343char343
+345	432	char344char344char344char344char344char344char344char344char344char344
+346	434	char345char345char345char345char345char345char345char345char345char345
+347	436	char346char346char346char346char346char346char346char346char346char346
+348	438	char347char347char347char347char347char347char347char347char347char347
+349	440	char348char348char348char348char348char348char348char348char348char348
+350	442	char349char349char349char349char349char349char349char349char349char349
+351	444	char350char350char350char350char350char350char350char350char350char350
+352	446	char351char351char351char351char351char351char351char351char351char351
+353	448	char352char352char352char352char352char352char352char352char352char352
+354	450	char353char353char353char353char353char353char353char353char353char353
+355	452	char354char354char354char354char354char354char354char354char354char354
+356	454	char355char355char355char355char355char355char355char355char355char355
+357	456	char356char356char356char356char356char356char356char356char356char356
+358	458	char357char357char357char357char357char357char357char357char357char357
+359	460	char358char358char358char358char358char358char358char358char358char358
+360	462	char359char359char359char359char359char359char359char359char359char359
+361	464	char360char360char360char360char360char360char360char360char360char360
+362	466	char361char361char361char361char361char361char361char361char361char361
+363	468	char362char362char362char362char362char362char362char362char362char362
+364	470	char363char363char363char363char363char363char363char363char363char363
+365	472	char364char364char364char364char364char364char364char364char364char364
+366	474	char365char365char365char365char365char365char365char365char365char365
+367	476	char366char366char366char366char366char366char366char366char366char366
+368	478	char367char367char367char367char367char367char367char367char367char367
+369	480	char368char368char368char368char368char368char368char368char368char368
+370	482	char369char369char369char369char369char369char369char369char369char369
+371	484	char370char370char370char370char370char370char370char370char370char370
+372	486	char371char371char371char371char371char371char371char371char371char371
+373	488	char372char372char372char372char372char372char372char372char372char372
+374	490	char373char373char373char373char373char373char373char373char373char373
+375	492	char374char374char374char374char374char374char374char374char374char374
+376	494	char375char375char375char375char375char375char375char375char375char375
+377	496	char376char376char376char376char376char376char376char376char376char376
+378	498	char377char377char377char377char377char377char377char377char377char377
+379	500	char378char378char378char378char378char378char378char378char378char378
+380	502	char379char379char379char379char379char379char379char379char379char379
+381	504	char380char380char380char380char380char380char380char380char380char380
+382	506	char381char381char381char381char381char381char381char381char381char381
+383	508	char382char382char382char382char382char382char382char382char382char382
+384	510	char383char383char383char383char383char383char383char383char383char383
+385	384	char384char384char384char384char384char384char384char384char384char384
+386	386	char385char385char385char385char385char385char385char385char385char385
+387	388	char386char386char386char386char386char386char386char386char386char386
+388	390	char387char387char387char387char387char387char387char387char387char387
+389	392	char388char388char388char388char388char388char388char388char388char388
+390	394	char389char389char389char389char389char389char389char389char389char389
+391	396	char390char390char390char390char390char390char390char390char390char390
+392	398	char391char391char391char391char391char391char391char391char391char391
+393	400	char392char392char392char392char392char392char392char392char392char392
+394	402	char393char393char393char393char393char393char393char393char393char393
+395	404	char394char394char394char394char394char394char394char394char394char394
+396	406	char395char395char395char395char395char395char395char395char395char395
+397	408	char396char396char396char396char396char396char396char396char396char396
+398	410	char397char397char397char397char397char397char397char397char397char397
+399	412	char398char398char398char398char398char398char398char398char398char398
+400	414	char399char399char399char399char399char399char399char399char399char399
+401	416	char400char400char400char400char400char400char400char400char400char400
+402	418	char401char401char401char401char401char401char401char401char401char401
+403	420	char402char402char402char402char402char402char402char402char402char402
+404	422	char403char403char403char403char403char403char403char403char403char403
+405	424	char404char404char404char404char404char404char404char404char404char404
+406	426	char405char405char405char405char405char405char405char405char405char405
+407	428	char406char406char406char406char406char406char406char406char406char406
+408	430	char407char407char407char407char407char407char407char407char407char407
+409	432	char408char408char408char408char408char408char408char408char408char408
+410	434	char409char409char409char409char409char409char409char409char409char409
+411	436	char410char410char410char410char410char410char410char410char410char410
+412	438	char411char411char411char411char411char411char411char411char411char411
+413	440	char412char412char412char412char412char412char412char412char412char412
+414	442	char413char413char413char413char413char413char413char413char413char413
+415	444	char414char414char414char414char414char414char414char414char414char414
+416	446	char415char415char415char415char415char415char415char415char415char415
+417	448	char416char416char416char416char416char416char416char416char416char416
+418	450	char417char417char417char417char417char417char417char417char417char417
+419	452	char418char418char418char418char418char418char418char418char418char418
+420	454	char419char419char419char419char419char419char419char419char419char419
+421	456	char420char420char420char420char420char420char420char420char420char420
+422	458	char421char421char421char421char421char421char421char421char421char421
+423	460	char422char422char422char422char422char422char422char422char422char422
+424	462	char423char423char423char423char423char423char423char423char423char423
+425	464	char424char424char424char424char424char424char424char424char424char424
+426	466	char425char425char425char425char425char425char425char425char425char425
+427	468	char426char426char426char426char426char426char426char426char426char426
+428	470	char427char427char427char427char427char427char427char427char427char427
+429	472	char428char428char428char428char428char428char428char428char428char428
+430	474	char429char429char429char429char429char429char429char429char429char429
+431	476	char430char430char430char430char430char430char430char430char430char430
+432	478	char431char431char431char431char431char431char431char431char431char431
+433	480	char432char432char432char432char432char432char432char432char432char432
+434	482	char433char433char433char433char433char433char433char433char433char433
+435	484	char434char434char434char434char434char434char434char434char434char434
+436	486	char435char435char435char435char435char435char435char435char435char435
+437	488	char436char436char436char436char436char436char436char436char436char436
+438	490	char437char437char437char437char437char437char437char437char437char437
+439	492	char438char438char438char438char438char438char438char438char438char438
+440	494	char439char439char439char439char439char439char439char439char439char439
+441	496	char440char440char440char440char440char440char440char440char440char440
+442	498	char441char441char441char441char441char441char441char441char441char441
+443	500	char442char442char442char442char442char442char442char442char442char442
+444	502	char443char443char443char443char443char443char443char443char443char443
+445	504	char444char444char444char444char444char444char444char444char444char444
+446	506	char445char445char445char445char445char445char445char445char445char445
+447	508	char446char446char446char446char446char446char446char446char446char446
+448	510	char447char447char447char447char447char447char447char447char447char447
+449	512	char448char448char448char448char448char448char448char448char448char448
+450	514	char449char449char449char449char449char449char449char449char449char449
+451	516	char450char450char450char450char450char450char450char450char450char450
+452	518	char451char451char451char451char451char451char451char451char451char451
+453	520	char452char452char452char452char452char452char452char452char452char452
+454	522	char453char453char453char453char453char453char453char453char453char453
+455	524	char454char454char454char454char454char454char454char454char454char454
+456	526	char455char455char455char455char455char455char455char455char455char455
+457	528	char456char456char456char456char456char456char456char456char456char456
+458	530	char457char457char457char457char457char457char457char457char457char457
+459	532	char458char458char458char458char458char458char458char458char458char458
+460	534	char459char459char459char459char459char459char459char459char459char459
+461	536	char460char460char460char460char460char460char460char460char460char460
+462	538	char461char461char461char461char461char461char461char461char461char461
+463	540	char462char462char462char462char462char462char462char462char462char462
+464	542	char463char463char463char463char463char463char463char463char463char463
+465	544	char464char464char464char464char464char464char464char464char464char464
+466	546	char465char465char465char465char465char465char465char465char465char465
+467	548	char466char466char466char466char466char466char466char466char466char466
+468	550	char467char467char467char467char467char467char467char467char467char467
+469	552	char468char468char468char468char468char468char468char468char468char468
+470	554	char469char469char469char469char469char469char469char469char469char469
+471	556	char470char470char470char470char470char470char470char470char470char470
+472	558	char471char471char471char471char471char471char471char471char471char471
+473	560	char472char472char472char472char472char472char472char472char472char472
+474	562	char473char473char473char473char473char473char473char473char473char473
+475	564	char474char474char474char474char474char474char474char474char474char474
+476	566	char475char475char475char475char475char475char475char475char475char475
+477	568	char476char476char476char476char476char476char476char476char476char476
+478	570	char477char477char477char477char477char477char477char477char477char477
+479	572	char478char478char478char478char478char478char478char478char478char478
+480	574	char479char479char479char479char479char479char479char479char479char479
+481	576	char480char480char480char480char480char480char480char480char480char480
+482	578	char481char481char481char481char481char481char481char481char481char481
+483	580	char482char482char482char482char482char482char482char482char482char482
+484	582	char483char483char483char483char483char483char483char483char483char483
+485	584	char484char484char484char484char484char484char484char484char484char484
+486	586	char485char485char485char485char485char485char485char485char485char485
+487	588	char486char486char486char486char486char486char486char486char486char486
+488	590	char487char487char487char487char487char487char487char487char487char487
+489	592	char488char488char488char488char488char488char488char488char488char488
+490	594	char489char489char489char489char489char489char489char489char489char489
+491	596	char490char490char490char490char490char490char490char490char490char490
+492	598	char491char491char491char491char491char491char491char491char491char491
+493	600	char492char492char492char492char492char492char492char492char492char492
+494	602	char493char493char493char493char493char493char493char493char493char493
+495	604	char494char494char494char494char494char494char494char494char494char494
+496	606	char495char495char495char495char495char495char495char495char495char495
+497	608	char496char496char496char496char496char496char496char496char496char496
+498	610	char497char497char497char497char497char497char497char497char497char497
+499	612	char498char498char498char498char498char498char498char498char498char498
+500	614	char499char499char499char499char499char499char499char499char499char499
+501	616	char500char500char500char500char500char500char500char500char500char500
+502	618	char501char501char501char501char501char501char501char501char501char501
+503	620	char502char502char502char502char502char502char502char502char502char502
+504	622	char503char503char503char503char503char503char503char503char503char503
+505	624	char504char504char504char504char504char504char504char504char504char504
+506	626	char505char505char505char505char505char505char505char505char505char505
+507	628	char506char506char506char506char506char506char506char506char506char506
+508	630	char507char507char507char507char507char507char507char507char507char507
+509	632	char508char508char508char508char508char508char508char508char508char508
+510	634	char509char509char509char509char509char509char509char509char509char509
+511	636	char510char510char510char510char510char510char510char510char510char510
+512	638	char511char511char511char511char511char511char511char511char511char511
+513	512	char512char512char512char512char512char512char512char512char512char512
+514	514	char513char513char513char513char513char513char513char513char513char513
+515	516	char514char514char514char514char514char514char514char514char514char514
+516	518	char515char515char515char515char515char515char515char515char515char515
+517	520	char516char516char516char516char516char516char516char516char516char516
+518	522	char517char517char517char517char517char517char517char517char517char517
+519	524	char518char518char518char518char518char518char518char518char518char518
+520	526	char519char519char519char519char519char519char519char519char519char519
+521	528	char520char520char520char520char520char520char520char520char520char520
+522	530	char521char521char521char521char521char521char521char521char521char521
+523	532	char522char522char522char522char522char522char522char522char522char522
+524	534	char523char523char523char523char523char523char523char523char523char523
+525	536	char524char524char524char524char524char524char524char524char524char524
+526	538	char525char525char525char525char525char525char525char525char525char525
+527	540	char526char526char526char526char526char526char526char526char526char526
+528	542	char527char527char527char527char527char527char527char527char527char527
+529	544	char528char528char528char528char528char528char528char528char528char528
+530	546	char529char529char529char529char529char529char529char529char529char529
+531	548	char530char530char530char530char530char530char530char530char530char530
+532	550	char531char531char531char531char531char531char531char531char531char531
+533	552	char532char532char532char532char532char532char532char532char532char532
+534	554	char533char533char533char533char533char533char533char533char533char533
+535	556	char534char534char534char534char534char534char534char534char534char534
+536	558	char535char535char535char535char535char535char535char535char535char535
+537	560	char536char536char536char536char536char536char536char536char536char536
+538	562	char537char537char537char537char537char537char537char537char537char537
+539	564	char538char538char538char538char538char538char538char538char538char538
+540	566	char539char539char539char539char539char539char539char539char539char539
+541	568	char540char540char540char540char540char540char540char540char540char540
+542	570	char541char541char541char541char541char541char541char541char541char541
+543	572	char542char542char542char542char542char542char542char542char542char542
+544	574	char543char543char543char543char543char543char543char543char543char543
+545	576	char544char544char544char544char544char544char544char544char544char544
+546	578	char545char545char545char545char545char545char545char545char545char545
+547	580	char546char546char546char546char546char546char546char546char546char546
+548	582	char547char547char547char547char547char547char547char547char547char547
+549	584	char548char548char548char548char548char548char548char548char548char548
+550	586	char549char549char549char549char549char549char549char549char549char549
+551	588	char550char550char550char550char550char550char550char550char550char550
+552	590	char551char551char551char551char551char551char551char551char551char551
+553	592	char552char552char552char552char552char552char552char552char552char552
+554	594	char553char553char553char553char553char553char553char553char553char553
+555	596	char554char554char554char554char554char554char554char554char554char554
+556	598	char555char555char555char555char555char555char555char555char555char555
+557	600	char556char556char556char556char556char556char556char556char556char556
+558	602	char557char557char557char557char557char557char557char557char557char557
+559	604	char558char558char558char558char558char558char558char558char558char558
+560	606	char559char559char559char559char559char559char559char559char559char559
+561	608	char560char560char560char560char560char560char560char560char560char560
+562	610	char561char561char561char561char561char561char561char561char561char561
+563	612	char562char562char562char562char562char562char562char562char562char562
+564	614	char563char563char563char563char563char563char563char563char563char563
+565	616	char564char564char564char564char564char564char564char564char564char564
+566	618	char565char565char565char565char565char565char565char565char565char565
+567	620	char566char566char566char566char566char566char566char566char566char566
+568	622	char567char567char567char567char567char567char567char567char567char567
+569	624	char568char568char568char568char568char568char568char568char568char568
+570	626	char569char569char569char569char569char569char569char569char569char569
+571	628	char570char570char570char570char570char570char570char570char570char570
+572	630	char571char571char571char571char571char571char571char571char571char571
+573	632	char572char572char572char572char572char572char572char572char572char572
+574	634	char573char573char573char573char573char573char573char573char573char573
+575	636	char574char574char574char574char574char574char574char574char574char574
+576	638	char575char575char575char575char575char575char575char575char575char575
+577	640	char576char576char576char576char576char576char576char576char576char576
+578	642	char577char577char577char577char577char577char577char577char577char577
+579	644	char578char578char578char578char578char578char578char578char578char578
+580	646	char579char579char579char579char579char579char579char579char579char579
+581	648	char580char580char580char580char580char580char580char580char580char580
+582	650	char581char581char581char581char581char581char581char581char581char581
+583	652	char582char582char582char582char582char582char582char582char582char582
+584	654	char583char583char583char583char583char583char583char583char583char583
+585	656	char584char584char584char584char584char584char584char584char584char584
+586	658	char585char585char585char585char585char585char585char585char585char585
+587	660	char586char586char586char586char586char586char586char586char586char586
+588	662	char587char587char587char587char587char587char587char587char587char587
+589	664	char588char588char588char588char588char588char588char588char588char588
+590	666	char589char589char589char589char589char589char589char589char589char589
+591	668	char590char590char590char590char590char590char590char590char590char590
+592	670	char591char591char591char591char591char591char591char591char591char591
+593	672	char592char592char592char592char592char592char592char592char592char592
+594	674	char593char593char593char593char593char593char593char593char593char593
+595	676	char594char594char594char594char594char594char594char594char594char594
+596	678	char595char595char595char595char595char595char595char595char595char595
+597	680	char596char596char596char596char596char596char596char596char596char596
+598	682	char597char597char597char597char597char597char597char597char597char597
+599	684	char598char598char598char598char598char598char598char598char598char598
+600	686	char599char599char599char599char599char599char599char599char599char599
+601	688	char600char600char600char600char600char600char600char600char600char600
+602	690	char601char601char601char601char601char601char601char601char601char601
+603	692	char602char602char602char602char602char602char602char602char602char602
+604	694	char603char603char603char603char603char603char603char603char603char603
+605	696	char604char604char604char604char604char604char604char604char604char604
+606	698	char605char605char605char605char605char605char605char605char605char605
+607	700	char606char606char606char606char606char606char606char606char606char606
+608	702	char607char607char607char607char607char607char607char607char607char607
+609	704	char608char608char608char608char608char608char608char608char608char608
+610	706	char609char609char609char609char609char609char609char609char609char609
+611	708	char610char610char610char610char610char610char610char610char610char610
+612	710	char611char611char611char611char611char611char611char611char611char611
+613	712	char612char612char612char612char612char612char612char612char612char612
+614	714	char613char613char613char613char613char613char613char613char613char613
+615	716	char614char614char614char614char614char614char614char614char614char614
+616	718	char615char615char615char615char615char615char615char615char615char615
+617	720	char616char616char616char616char616char616char616char616char616char616
+618	722	char617char617char617char617char617char617char617char617char617char617
+619	724	char618char618char618char618char618char618char618char618char618char618
+620	726	char619char619char619char619char619char619char619char619char619char619
+621	728	char620char620char620char620char620char620char620char620char620char620
+622	730	char621char621char621char621char621char621char621char621char621char621
+623	732	char622char622char622char622char622char622char622char622char622char622
+624	734	char623char623char623char623char623char623char623char623char623char623
+625	736	char624char624char624char624char624char624char624char624char624char624
+626	738	char625char625char625char625char625char625char625char625char625char625
+627	740	char626char626char626char626char626char626char626char626char626char626
+628	742	char627char627char627char627char627char627char627char627char627char627
+629	744	char628char628char628char628char628char628char628char628char628char628
+630	746	char629char629char629char629char629char629char629char629char629char629
+631	748	char630char630char630char630char630char630char630char630char630char630
+632	750	char631char631char631char631char631char631char631char631char631char631
+633	752	char632char632char632char632char632char632char632char632char632char632
+634	754	char633char633char633char633char633char633char633char633char633char633
+635	756	char634char634char634char634char634char634char634char634char634char634
+636	758	char635char635char635char635char635char635char635char635char635char635
+637	760	char636char636char636char636char636char636char636char636char636char636
+638	762	char637char637char637char637char637char637char637char637char637char637
+639	764	char638char638char638char638char638char638char638char638char638char638
+640	766	char639char639char639char639char639char639char639char639char639char639
+641	640	char640char640char640char640char640char640char640char640char640char640
+642	642	char641char641char641char641char641char641char641char641char641char641
+643	644	char642char642char642char642char642char642char642char642char642char642
+644	646	char643char643char643char643char643char643char643char643char643char643
+645	648	char644char644char644char644char644char644char644char644char644char644
+646	650	char645char645char645char645char645char645char645char645char645char645
+647	652	char646char646char646char646char646char646char646char646char646char646
+648	654	char647char647char647char647char647char647char647char647char647char647
+649	656	char648char648char648char648char648char648char648char648char648char648
+650	658	char649char649char649char649char649char649char649char649char649char649
+651	660	char650char650char650char650char650char650char650char650char650char650
+652	662	char651char651char651char651char651char651char651char651char651char651
+653	664	char652char652char652char652char652char652char652char652char652char652
+654	666	char653char653char653char653char653char653char653char653char653char653
+655	668	char654char654char654char654char654char654char654char654char654char654
+656	670	char655char655char655char655char655char655char655char655char655char655
+657	672	char656char656char656char656char656char656char656char656char656char656
+658	674	char657char657char657char657char657char657char657char657char657char657
+659	676	char658char658char658char658char658char658char658char658char658char658
+660	678	char659char659char659char659char659char659char659char659char659char659
+661	680	char660char660char660char660char660char660char660char660char660char660
+662	682	char661char661char661char661char661char661char661char661char661char661
+663	684	char662char662char662char662char662char662char662char662char662char662
+664	686	char663char663char663char663char663char663char663char663char663char663
+665	688	char664char664char664char664char664char664char664char664char664char664
+666	690	char665char665char665char665char665char665char665char665char665char665
+667	692	char666char666char666char666char666char666char666char666char666char666
+668	694	char667char667char667char667char667char667char667char667char667char667
+669	696	char668char668char668char668char668char668char668char668char668char668
+670	698	char669char669char669char669char669char669char669char669char669char669
+671	700	char670char670char670char670char670char670char670char670char670char670
+672	702	char671char671char671char671char671char671char671char671char671char671
+673	704	char672char672char672char672char672char672char672char672char672char672
+674	706	char673char673char673char673char673char673char673char673char673char673
+675	708	char674char674char674char674char674char674char674char674char674char674
+676	710	char675char675char675char675char675char675char675char675char675char675
+677	712	char676char676char676char676char676char676char676char676char676char676
+678	714	char677char677char677char677char677char677char677char677char677char677
+679	716	char678char678char678char678char678char678char678char678char678char678
+680	718	char679char679char679char679char679char679char679char679char679char679
+681	720	char680char680char680char680char680char680char680char680char680char680
+682	722	char681char681char681char681char681char681char681char681char681char681
+683	724	char682char682char682char682char682char682char682char682char682char682
+684	726	char683char683char683char683char683char683char683char683char683char683
+685	728	char684char684char684char684char684char684char684char684char684char684
+686	730	char685char685char685char685char685char685char685char685char685char685
+687	732	char686char686char686char686char686char686char686char686char686char686
+688	734	char687char687char687char687char687char687char687char687char687char687
+689	736	char688char688char688char688char688char688char688char688char688char688
+690	738	char689char689char689char689char689char689char689char689char689char689
+691	740	char690char690char690char690char690char690char690char690char690char690
+692	742	char691char691char691char691char691char691char691char691char691char691
+693	744	char692char692char692char692char692char692char692char692char692char692
+694	746	char693char693char693char693char693char693char693char693char693char693
+695	748	char694char694char694char694char694char694char694char694char694char694
+696	750	char695char695char695char695char695char695char695char695char695char695
+697	752	char696char696char696char696char696char696char696char696char696char696
+698	754	char697char697char697char697char697char697char697char697char697char697
+699	756	char698char698char698char698char698char698char698char698char698char698
+700	758	char699char699char699char699char699char699char699char699char699char699
+701	760	char700char700char700char700char700char700char700char700char700char700
+702	762	char701char701char701char701char701char701char701char701char701char701
+703	764	char702char702char702char702char702char702char702char702char702char702
+704	766	char703char703char703char703char703char703char703char703char703char703
+705	768	char704char704char704char704char704char704char704char704char704char704
+706	770	char705char705char705char705char705char705char705char705char705char705
+707	772	char706char706char706char706char706char706char706char706char706char706
+708	774	char707char707char707char707char707char707char707char707char707char707
+709	776	char708char708char708char708char708char708char708char708char708char708
+710	778	char709char709char709char709char709char709char709char709char709char709
+711	780	char710char710char710char710char710char710char710char710char710char710
+712	782	char711char711char711char711char711char711char711char711char711char711
+713	784	char712char712char712char712char712char712char712char712char712char712
+714	786	char713char713char713char713char713char713char713char713char713char713
+715	788	char714char714char714char714char714char714char714char714char714char714
+716	790	char715char715char715char715char715char715char715char715char715char715
+717	792	char716char716char716char716char716char716char716char716char716char716
+718	794	char717char717char717char717char717char717char717char717char717char717
+719	796	char718char718char718char718char718char718char718char718char718char718
+720	798	char719char719char719char719char719char719char719char719char719char719
+721	800	char720char720char720char720char720char720char720char720char720char720
+722	802	char721char721char721char721char721char721char721char721char721char721
+723	804	char722char722char722char722char722char722char722char722char722char722
+724	806	char723char723char723char723char723char723char723char723char723char723
+725	808	char724char724char724char724char724char724char724char724char724char724
+726	810	char725char725char725char725char725char725char725char725char725char725
+727	812	char726char726char726char726char726char726char726char726char726char726
+728	814	char727char727char727char727char727char727char727char727char727char727
+729	816	char728char728char728char728char728char728char728char728char728char728
+730	818	char729char729char729char729char729char729char729char729char729char729
+731	820	char730char730char730char730char730char730char730char730char730char730
+732	822	char731char731char731char731char731char731char731char731char731char731
+733	824	char732char732char732char732char732char732char732char732char732char732
+734	826	char733char733char733char733char733char733char733char733char733char733
+735	828	char734char734char734char734char734char734char734char734char734char734
+736	830	char735char735char735char735char735char735char735char735char735char735
+737	832	char736char736char736char736char736char736char736char736char736char736
+738	834	char737char737char737char737char737char737char737char737char737char737
+739	836	char738char738char738char738char738char738char738char738char738char738
+740	838	char739char739char739char739char739char739char739char739char739char739
+741	840	char740char740char740char740char740char740char740char740char740char740
+742	842	char741char741char741char741char741char741char741char741char741char741
+743	844	char742char742char742char742char742char742char742char742char742char742
+744	846	char743char743char743char743char743char743char743char743char743char743
+745	848	char744char744char744char744char744char744char744char744char744char744
+746	850	char745char745char745char745char745char745char745char745char745char745
+747	852	char746char746char746char746char746char746char746char746char746char746
+748	854	char747char747char747char747char747char747char747char747char747char747
+749	856	char748char748char748char748char748char748char748char748char748char748
+750	858	char749char749char749char749char749char749char749char749char749char749
+751	860	char750char750char750char750char750char750char750char750char750char750
+752	862	char751char751char751char751char751char751char751char751char751char751
+753	864	char752char752char752char752char752char752char752char752char752char752
+754	866	char753char753char753char753char753char753char753char753char753char753
+755	868	char754char754char754char754char754char754char754char754char754char754
+756	870	char755char755char755char755char755char755char755char755char755char755
+757	872	char756char756char756char756char756char756char756char756char756char756
+758	874	char757char757char757char757char757char757char757char757char757char757
+759	876	char758char758char758char758char758char758char758char758char758char758
+760	878	char759char759char759char759char759char759char759char759char759char759
+761	880	char760char760char760char760char760char760char760char760char760char760
+762	882	char761char761char761char761char761char761char761char761char761char761
+763	884	char762char762char762char762char762char762char762char762char762char762
+764	886	char763char763char763char763char763char763char763char763char763char763
+765	888	char764char764char764char764char764char764char764char764char764char764
+766	890	char765char765char765char765char765char765char765char765char765char765
+767	892	char766char766char766char766char766char766char766char766char766char766
+768	894	char767char767char767char767char767char767char767char767char767char767
+769	768	char768char768char768char768char768char768char768char768char768char768
+770	770	char769char769char769char769char769char769char769char769char769char769
+771	772	char770char770char770char770char770char770char770char770char770char770
+772	774	char771char771char771char771char771char771char771char771char771char771
+773	776	char772char772char772char772char772char772char772char772char772char772
+774	778	char773char773char773char773char773char773char773char773char773char773
+775	780	char774char774char774char774char774char774char774char774char774char774
+776	782	char775char775char775char775char775char775char775char775char775char775
+777	784	char776char776char776char776char776char776char776char776char776char776
+778	786	char777char777char777char777char777char777char777char777char777char777
+779	788	char778char778char778char778char778char778char778char778char778char778
+780	790	char779char779char779char779char779char779char779char779char779char779
+781	792	char780char780char780char780char780char780char780char780char780char780
+782	794	char781char781char781char781char781char781char781char781char781char781
+783	796	char782char782char782char782char782char782char782char782char782char782
+784	798	char783char783char783char783char783char783char783char783char783char783
+785	800	char784char784char784char784char784char784char784char784char784char784
+786	802	char785char785char785char785char785char785char785char785char785char785
+787	804	char786char786char786char786char786char786char786char786char786char786
+788	806	char787char787char787char787char787char787char787char787char787char787
+789	808	char788char788char788char788char788char788char788char788char788char788
+790	810	char789char789char789char789char789char789char789char789char789char789
+791	812	char790char790char790char790char790char790char790char790char790char790
+792	814	char791char791char791char791char791char791char791char791char791char791
+793	816	char792char792char792char792char792char792char792char792char792char792
+794	818	char793char793char793char793char793char793char793char793char793char793
+795	820	char794char794char794char794char794char794char794char794char794char794
+796	822	char795char795char795char795char795char795char795char795char795char795
+797	824	char796char796char796char796char796char796char796char796char796char796
+798	826	char797char797char797char797char797char797char797char797char797char797
+799	828	char798char798char798char798char798char798char798char798char798char798
+800	830	char799char799char799char799char799char799char799char799char799char799
+801	832	char800char800char800char800char800char800char800char800char800char800
+802	834	char801char801char801char801char801char801char801char801char801char801
+803	836	char802char802char802char802char802char802char802char802char802char802
+804	838	char803char803char803char803char803char803char803char803char803char803
+805	840	char804char804char804char804char804char804char804char804char804char804
+806	842	char805char805char805char805char805char805char805char805char805char805
+807	844	char806char806char806char806char806char806char806char806char806char806
+808	846	char807char807char807char807char807char807char807char807char807char807
+809	848	char808char808char808char808char808char808char808char808char808char808
+810	850	char809char809char809char809char809char809char809char809char809char809
+811	852	char810char810char810char810char810char810char810char810char810char810
+812	854	char811char811char811char811char811char811char811char811char811char811
+813	856	char812char812char812char812char812char812char812char812char812char812
+814	858	char813char813char813char813char813char813char813char813char813char813
+815	860	char814char814char814char814char814char814char814char814char814char814
+816	862	char815char815char815char815char815char815char815char815char815char815
+817	864	char816char816char816char816char816char816char816char816char816char816
+818	866	char817char817char817char817char817char817char817char817char817char817
+819	868	char818char818char818char818char818char818char818char818char818char818
+820	870	char819char819char819char819char819char819char819char819char819char819
+821	872	char820char820char820char820char820char820char820char820char820char820
+822	874	char821char821char821char821char821char821char821char821char821char821
+823	876	char822char822char822char822char822char822char822char822char822char822
+824	878	char823char823char823char823char823char823char823char823char823char823
+825	880	char824char824char824char824char824char824char824char824char824char824
+826	882	char825char825char825char825char825char825char825char825char825char825
+827	884	char826char826char826char826char826char826char826char826char826char826
+828	886	char827char827char827char827char827char827char827char827char827char827
+829	888	char828char828char828char828char828char828char828char828char828char828
+830	890	char829char829char829char829char829char829char829char829char829char829
+831	892	char830char830char830char830char830char830char830char830char830char830
+832	894	char831char831char831char831char831char831char831char831char831char831
+833	896	char832char832char832char832char832char832char832char832char832char832
+834	898	char833char833char833char833char833char833char833char833char833char833
+835	900	char834char834char834char834char834char834char834char834char834char834
+836	902	char835char835char835char835char835char835char835char835char835char835
+837	904	char836char836char836char836char836char836char836char836char836char836
+838	906	char837char837char837char837char837char837char837char837char837char837
+839	908	char838char838char838char838char838char838char838char838char838char838
+840	910	char839char839char839char839char839char839char839char839char839char839
+841	912	char840char840char840char840char840char840char840char840char840char840
+842	914	char841char841char841char841char841char841char841char841char841char841
+843	916	char842char842char842char842char842char842char842char842char842char842
+844	918	char843char843char843char843char843char843char843char843char843char843
+845	920	char844char844char844char844char844char844char844char844char844char844
+846	922	char845char845char845char845char845char845char845char845char845char845
+847	924	char846char846char846char846char846char846char846char846char846char846
+848	926	char847char847char847char847char847char847char847char847char847char847
+849	928	char848char848char848char848char848char848char848char848char848char848
+850	930	char849char849char849char849char849char849char849char849char849char849
+851	932	char850char850char850char850char850char850char850char850char850char850
+852	934	char851char851char851char851char851char851char851char851char851char851
+853	936	char852char852char852char852char852char852char852char852char852char852
+854	938	char853char853char853char853char853char853char853char853char853char853
+855	940	char854char854char854char854char854char854char854char854char854char854
+856	942	char855char855char855char855char855char855char855char855char855char855
+857	944	char856char856char856char856char856char856char856char856char856char856
+858	946	char857char857char857char857char857char857char857char857char857char857
+859	948	char858char858char858char858char858char858char858char858char858char858
+860	950	char859char859char859char859char859char859char859char859char859char859
+861	952	char860char860char860char860char860char860char860char860char860char860
+862	954	char861char861char861char861char861char861char861char861char861char861
+863	956	char862char862char862char862char862char862char862char862char862char862
+864	958	char863char863char863char863char863char863char863char863char863char863
+865	960	char864char864char864char864char864char864char864char864char864char864
+866	962	char865char865char865char865char865char865char865char865char865char865
+867	964	char866char866char866char866char866char866char866char866char866char866
+868	966	char867char867char867char867char867char867char867char867char867char867
+869	968	char868char868char868char868char868char868char868char868char868char868
+870	970	char869char869char869char869char869char869char869char869char869char869
+871	972	char870char870char870char870char870char870char870char870char870char870
+872	974	char871char871char871char871char871char871char871char871char871char871
+873	976	char872char872char872char872char872char872char872char872char872char872
+874	978	char873char873char873char873char873char873char873char873char873char873
+875	980	char874char874char874char874char874char874char874char874char874char874
+876	982	char875char875char875char875char875char875char875char875char875char875
+877	984	char876char876char876char876char876char876char876char876char876char876
+878	986	char877char877char877char877char877char877char877char877char877char877
+879	988	char878char878char878char878char878char878char878char878char878char878
+880	990	char879char879char879char879char879char879char879char879char879char879
+881	992	char880char880char880char880char880char880char880char880char880char880
+882	994	char881char881char881char881char881char881char881char881char881char881
+883	996	char882char882char882char882char882char882char882char882char882char882
+884	998	char883char883char883char883char883char883char883char883char883char883
+885	1000	char884char884char884char884char884char884char884char884char884char884
+886	1002	char885char885char885char885char885char885char885char885char885char885
+887	1004	char886char886char886char886char886char886char886char886char886char886
+888	1006	char887char887char887char887char887char887char887char887char887char887
+889	1008	char888char888char888char888char888char888char888char888char888char888
+890	1010	char889char889char889char889char889char889char889char889char889char889
+891	1012	char890char890char890char890char890char890char890char890char890char890
+892	1014	char891char891char891char891char891char891char891char891char891char891
+893	1016	char892char892char892char892char892char892char892char892char892char892
+894	1018	char893char893char893char893char893char893char893char893char893char893
+895	1020	char894char894char894char894char894char894char894char894char894char894
+896	1022	char895char895char895char895char895char895char895char895char895char895
+897	896	char896char896char896char896char896char896char896char896char896char896
+898	898	char897char897char897char897char897char897char897char897char897char897
+899	900	char898char898char898char898char898char898char898char898char898char898
+900	902	char899char899char899char899char899char899char899char899char899char899
+901	904	char900char900char900char900char900char900char900char900char900char900
+902	906	char901char901char901char901char901char901char901char901char901char901
+903	908	char902char902char902char902char902char902char902char902char902char902
+904	910	char903char903char903char903char903char903char903char903char903char903
+905	912	char904char904char904char904char904char904char904char904char904char904
+906	914	char905char905char905char905char905char905char905char905char905char905
+907	916	char906char906char906char906char906char906char906char906char906char906
+908	918	char907char907char907char907char907char907char907char907char907char907
+909	920	char908char908char908char908char908char908char908char908char908char908
+910	922	char909char909char909char909char909char909char909char909char909char909
+911	924	char910char910char910char910char910char910char910char910char910char910
+912	926	char911char911char911char911char911char911char911char911char911char911
+913	928	char912char912char912char912char912char912char912char912char912char912
+914	930	char913char913char913char913char913char913char913char913char913char913
+915	932	char914char914char914char914char914char914char914char914char914char914
+916	934	char915char915char915char915char915char915char915char915char915char915
+917	936	char916char916char916char916char916char916char916char916char916char916
+918	938	char917char917char917char917char917char917char917char917char917char917
+919	940	char918char918char918char918char918char918char918char918char918char918
+920	942	char919char919char919char919char919char919char919char919char919char919
+921	944	char920char920char920char920char920char920char920char920char920char920
+922	946	char921char921char921char921char921char921char921char921char921char921
+923	948	char922char922char922char922char922char922char922char922char922char922
+924	950	char923char923char923char923char923char923char923char923char923char923
+925	952	char924char924char924char924char924char924char924char924char924char924
+926	954	char925char925char925char925char925char925char925char925char925char925
+927	956	char926char926char926char926char926char926char926char926char926char926
+928	958	char927char927char927char927char927char927char927char927char927char927
+929	960	char928char928char928char928char928char928char928char928char928char928
+930	962	char929char929char929char929char929char929char929char929char929char929
+931	964	char930char930char930char930char930char930char930char930char930char930
+932	966	char931char931char931char931char931char931char931char931char931char931
+933	968	char932char932char932char932char932char932char932char932char932char932
+934	970	char933char933char933char933char933char933char933char933char933char933
+935	972	char934char934char934char934char934char934char934char934char934char934
+936	974	char935char935char935char935char935char935char935char935char935char935
+937	976	char936char936char936char936char936char936char936char936char936char936
+938	978	char937char937char937char937char937char937char937char937char937char937
+939	980	char938char938char938char938char938char938char938char938char938char938
+940	982	char939char939char939char939char939char939char939char939char939char939
+941	984	char940char940char940char940char940char940char940char940char940char940
+942	986	char941char941char941char941char941char941char941char941char941char941
+943	988	char942char942char942char942char942char942char942char942char942char942
+944	990	char943char943char943char943char943char943char943char943char943char943
+945	992	char944char944char944char944char944char944char944char944char944char944
+946	994	char945char945char945char945char945char945char945char945char945char945
+947	996	char946char946char946char946char946char946char946char946char946char946
+948	998	char947char947char947char947char947char947char947char947char947char947
+949	1000	char948char948char948char948char948char948char948char948char948char948
+950	1002	char949char949char949char949char949char949char949char949char949char949
+951	1004	char950char950char950char950char950char950char950char950char950char950
+952	1006	char951char951char951char951char951char951char951char951char951char951
+953	1008	char952char952char952char952char952char952char952char952char952char952
+954	1010	char953char953char953char953char953char953char953char953char953char953
+955	1012	char954char954char954char954char954char954char954char954char954char954
+956	1014	char955char955char955char955char955char955char955char955char955char955
+957	1016	char956char956char956char956char956char956char956char956char956char956
+958	1018	char957char957char957char957char957char957char957char957char957char957
+959	1020	char958char958char958char958char958char958char958char958char958char958
+960	1022	char959char959char959char959char959char959char959char959char959char959
+961	1024	char960char960char960char960char960char960char960char960char960char960
+962	1026	char961char961char961char961char961char961char961char961char961char961
+963	1028	char962char962char962char962char962char962char962char962char962char962
+964	1030	char963char963char963char963char963char963char963char963char963char963
+965	1032	char964char964char964char964char964char964char964char964char964char964
+966	1034	char965char965char965char965char965char965char965char965char965char965
+967	1036	char966char966char966char966char966char966char966char966char966char966
+968	1038	char967char967char967char967char967char967char967char967char967char967
+969	1040	char968char968char968char968char968char968char968char968char968char968
+970	1042	char969char969char969char969char969char969char969char969char969char969
+971	1044	char970char970char970char970char970char970char970char970char970char970
+972	1046	char971char971char971char971char971char971char971char971char971char971
+973	1048	char972char972char972char972char972char972char972char972char972char972
+974	1050	char973char973char973char973char973char973char973char973char973char973
+975	1052	char974char974char974char974char974char974char974char974char974char974
+976	1054	char975char975char975char975char975char975char975char975char975char975
+977	1056	char976char976char976char976char976char976char976char976char976char976
+978	1058	char977char977char977char977char977char977char977char977char977char977
+979	1060	char978char978char978char978char978char978char978char978char978char978
+980	1062	char979char979char979char979char979char979char979char979char979char979
+981	1064	char980char980char980char980char980char980char980char980char980char980
+982	1066	char981char981char981char981char981char981char981char981char981char981
+983	1068	char982char982char982char982char982char982char982char982char982char982
+984	1070	char983char983char983char983char983char983char983char983char983char983
+985	1072	char984char984char984char984char984char984char984char984char984char984
+986	1074	char985char985char985char985char985char985char985char985char985char985
+987	1076	char986char986char986char986char986char986char986char986char986char986
+988	1078	char987char987char987char987char987char987char987char987char987char987
+989	1080	char988char988char988char988char988char988char988char988char988char988
+990	1082	char989char989char989char989char989char989char989char989char989char989
+991	1084	char990char990char990char990char990char990char990char990char990char990
+992	1086	char991char991char991char991char991char991char991char991char991char991
+993	1088	char992char992char992char992char992char992char992char992char992char992
+994	1090	char993char993char993char993char993char993char993char993char993char993
+995	1092	char994char994char994char994char994char994char994char994char994char994
+996	1094	char995char995char995char995char995char995char995char995char995char995
+997	1096	char996char996char996char996char996char996char996char996char996char996
+998	1098	char997char997char997char997char997char997char997char997char997char997
+999	1100	char998char998char998char998char998char998char998char998char998char998
+1000	1102	char999char999char999char999char999char999char999char999char999char999
+1001	\N	\N
+
diff --git a/regression-test/suites/export/test_outfile.groovy b/regression-test/suites/export/test_outfile.groovy
index d04c5bb5e7..84b0ada7cb 100644
--- a/regression-test/suites/export/test_outfile.groovy
+++ b/regression-test/suites/export/test_outfile.groovy
@@ -21,7 +21,7 @@ import java.nio.charset.StandardCharsets
 import java.nio.file.Files
 import java.nio.file.Paths
 
-suite("test_outfile", "export") {
+suite("test_outfile", "basic") {
     StringBuilder strBuilder = new StringBuilder()
     strBuilder.append("curl --location-trusted -u " + context.config.jdbcUser + ":" + context.config.jdbcPassword)
     strBuilder.append(" http://" + context.config.feHttpAddress + "/rest/v1/config/fe")
diff --git a/regression-test/suites/export/test_outfile.groovy b/regression-test/suites/export/test_outfile_expr.groovy
similarity index 91%
copy from regression-test/suites/export/test_outfile.groovy
copy to regression-test/suites/export/test_outfile_expr.groovy
index d04c5bb5e7..9d8600434d 100644
--- a/regression-test/suites/export/test_outfile.groovy
+++ b/regression-test/suites/export/test_outfile_expr.groovy
@@ -21,7 +21,7 @@ import java.nio.charset.StandardCharsets
 import java.nio.file.Files
 import java.nio.file.Paths
 
-suite("test_outfile", "export") {
+suite("test_outfile", "expr") {
     StringBuilder strBuilder = new StringBuilder()
     strBuilder.append("curl --location-trusted -u " + context.config.jdbcUser + ":" + context.config.jdbcPassword)
     strBuilder.append(" http://" + context.config.feHttpAddress + "/rest/v1/config/fe")
@@ -48,8 +48,8 @@ suite("test_outfile", "export") {
         logger.warn("Please set enable_outfile_to_local to true to run test_outfile")
         return
     }
-    def tableName = "outfile_test"
-    def outFilePath = """${context.file.parent}/tmp"""
+    def tableName = "outfile_test_expr"
+    def outFilePath = """${context.file.parent}/tmp_expr"""
     try {
         sql """ DROP TABLE IF EXISTS ${tableName} """
         sql """
@@ -84,7 +84,7 @@ suite("test_outfile", "export") {
         sql """ INSERT INTO ${tableName} VALUES
              ${sb.toString()}
             """
-        qt_select_default """ SELECT * FROM ${tableName} t ORDER BY user_id; """
+        qt_select_default """ SELECT user_id+1, age+sex, repeat(char_col, 10) FROM ${tableName} t ORDER BY user_id; """
 
         // check outfile
         File path = new File(outFilePath)
@@ -94,12 +94,12 @@ suite("test_outfile", "export") {
             throw new IllegalStateException("""${outFilePath} already exists! """)
         }
         sql """
-            SELECT * FROM ${tableName} t ORDER BY user_id INTO OUTFILE "file://${outFilePath}/";
+            SELECT user_id+1, age+sex, repeat(char_col, 10) FROM ${tableName} t ORDER BY user_id INTO OUTFILE "file://${outFilePath}/";
         """
         File[] files = path.listFiles()
         assert files.length == 1
         List<String> outLines = Files.readAllLines(Paths.get(files[0].getAbsolutePath()), StandardCharsets.UTF_8);
-        List<String> baseLines = Files.readAllLines(Paths.get("""${context.config.dataPath}/export/test_outfile.out"""), StandardCharsets.UTF_8)
+        List<String> baseLines = Files.readAllLines(Paths.get("""${context.config.dataPath}/export/test_outfile_expr.out"""), StandardCharsets.UTF_8)
         for (int j = 0; j < outLines.size(); j ++) {
             String[] outLine = outLines.get(j).split("\t")
             String[] baseLine = baseLines.get(j + 2).split("\t")


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org