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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to