You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by in...@apache.org on 2018/04/19 10:28:38 UTC

[1/3] incubator-hawq git commit: HAWQ-1603. Add new hook API

Repository: incubator-hawq
Updated Branches:
  refs/heads/master f68cac7e8 -> 80eaf448f


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/src/test/feature/vexecutor/sql/projandqual.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/vexecutor/sql/projandqual.sql b/src/test/feature/vexecutor/sql/projandqual.sql
new file mode 100644
index 0000000..1daaa1c
--- /dev/null
+++ b/src/test/feature/vexecutor/sql/projandqual.sql
@@ -0,0 +1,4 @@
+select a + b from test1 where a + b > 1020 and b + c > 1;
+select a - b from test1 where a - b > 1020 and b - c >= 0;
+select a * b from test1 where a * b > 1020 and b * c < 10;
+select a / b from test1 where a / b > 1020 and b * c = 1;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/src/test/feature/vexecutor/sql/scan1.sql
----------------------------------------------------------------------
diff --git a/src/test/feature/vexecutor/sql/scan1.sql b/src/test/feature/vexecutor/sql/scan1.sql
index 338be40..d983dcc 100644
--- a/src/test/feature/vexecutor/sql/scan1.sql
+++ b/src/test/feature/vexecutor/sql/scan1.sql
@@ -1 +1 @@
-select unique1 from test1;
\ No newline at end of file
+select unique1 from test1 order by unique1;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/src/test/feature/vexecutor/test_vexecutor.cpp
----------------------------------------------------------------------
diff --git a/src/test/feature/vexecutor/test_vexecutor.cpp b/src/test/feature/vexecutor/test_vexecutor.cpp
index 088784b..9d98a9f 100644
--- a/src/test/feature/vexecutor/test_vexecutor.cpp
+++ b/src/test/feature/vexecutor/test_vexecutor.cpp
@@ -139,3 +139,22 @@ TEST_F(TestVexecutor, scanAO)
 
   util.execute("drop table test1");
 }
+
+TEST_F(TestVexecutor, ProjAndQual)
+{
+	hawq::test::SQLUtility util;
+
+	util.execute("drop table if exists test1");
+	util.execute("create table test1 (a int, b int, c int, d int);");
+	util.execute("insert into test1 select generate_series(1,1024), 1, 1, 1;");
+
+	util.execSQLFile("vexecutor/sql/projandqual.sql",
+					"vexecutor/ans/projandqual.ans");
+
+	util.execute("SET vectorized_executor_enable to on");
+
+	util.execSQLFile("vexecutor/sql/projandqual.sql",
+					"vexecutor/ans/projandqual.ans");
+
+	util.execute("drop table test1");
+}


[2/3] incubator-hawq git commit: HAWQ-1603. Add new hook API

Posted by in...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/src/test/feature/vexecutor/ans/scan1.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/vexecutor/ans/scan1.ans b/src/test/feature/vexecutor/ans/scan1.ans
index fdba665..5a457b3 100644
--- a/src/test/feature/vexecutor/ans/scan1.ans
+++ b/src/test/feature/vexecutor/ans/scan1.ans
@@ -1,10004 +1,10009 @@
+-- start_ignore
+SET SEARCH_PATH=TestVexecutor_scanAO;
+SET
+-- end_ignore
+select unique1 from test1 order by unique1;
  unique1 
 ---------
-    1891
-    3043
-    5785
-    9605
-    9144
-    8850
-    3162
-    3055
-    6439
-    5832
-     734
-    4212
-    2677
-    2592
-    5032
-    4450
-    8976
-    1311
-    1454
-    9853
-    4391
-    6671
-    3371
-    1078
-    8682
-    9591
-    2399
-    7629
-    3973
-     708
-    6435
-    1683
-    6938
-    7424
-    2912
-    9385
-    7920
-    4267
-    8834
-    2444
-    8499
-    7631
-    2431
-    4054
-    3753
-    8600
-    4452
-    3440
-    7523
-    2404
-    9777
-    7143
-     362
-    2529
-    7793
-    4949
-    2105
-    4699
-    5768
-    7457
-     409
-    5889
-    8778
-    9938
-    3154
-    6831
-    5926
-    7042
-    2084
-    8580
-    1139
-    7216
-    8056
-    3801
-    2275
-     749
-     846
-    5563
-     443
-    4913
-    7866
-    3453
-    7873
-    6392
-    8030
-    4835
-    1864
-    3379
-    6575
-    1391
-    2423
-    2016
-    9205
-    4852
-    7426
-    8661
-     935
-    9822
-    8214
-    9307
-    2405
-    5171
-    7752
-    7247
-    5596
-    4742
-    7483
-    6598
-    7177
-    8766
-    4396
-    3555
-    4466
-    3668
-     623
-    7987
-    7837
-    5044
-    9243
-    7789
-    1832
-    5124
-    4663
-    9156
-    4012
-    3709
-    8875
-    3033
-     434
-    4597
-    8696
-     415
-    2141
-    2657
-    6661
-    4762
-    2826
-    4404
-    1221
-    7303
-    9511
-    2107
-    5413
-    4859
-    4687
-    2221
-    2143
-    6770
-    7392
-     278
-    7641
-     194
-    6201
-    2201
-    1444
-    9893
-    3699
-    1956
-    4263
-    6944
-    6120
-    8366
-    6460
-    7624
-     682
-    4911
-    7434
-    7347
-     185
-    3331
-    4421
-    1467
-    8520
-    4298
-    9038
-     788
-    7285
-    7975
-    7677
-    8069
-    9513
-    4144
-    3834
-    8230
-    3863
-    9503
-    6197
-    7610
-    7559
-    9023
-    7305
-    6346
-    7903
-    7196
-    5199
-    3203
-    8684
-     601
-    8006
-    1076
-    1307
-    8822
-    2370
-    2575
-    5073
-    9635
-    1697
-    3646
-    2477
-    2425
-     130
-    7963
-    2135
-    6334
+       0
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+      10
+      11
+      12
+      13
+      14
       15
-    4700
-    4562
-    3511
-    5881
-    1270
-    5052
-    1863
-    3590
-     572
-    4776
-    5167
-    2819
-    5709
-    3533
-    5781
-    6976
-    5383
-    5010
-    4147
-    1011
-    8847
-    7839
-    1879
-     777
-     470
-    2372
-     163
-    2355
-     651
-    8317
-    4526
-    4259
-    3267
-    1549
-    8846
-    4418
-    9993
-    3855
-    5803
-    6574
-    6100
-    6925
-    5696
-    4226
-    5272
-    5213
-    3966
-    3382
-    5150
-    1098
-    7053
-    8832
-    4856
-    4176
-    6065
-    9527
-    8918
-     555
-    9939
-    1957
-    3634
-    9262
-    5943
-     199
-    3636
-    3475
-    8123
-    2449
-    7371
-    1971
-    3433
-    1493
-    9502
-    7403
-    3237
-    7708
-    4043
-    4849
-     243
-    5945
-    7041
-    3290
-    3522
-    4236
-    4640
-    6873
-    9510
-    4373
-    8221
-    7790
-    4369
-    9318
-    8003
-    3930
-    2250
-    7137
-    7598
-    2017
-    8754
-    5698
-    1814
-    2642
-    4774
-    3850
-    2380
-    7936
-    9724
-    9860
-    9435
-    8149
-    3904
-    3866
-    5607
-    3214
+      16
+      17
+      18
+      19
+      20
+      21
+      22
+      23
+      24
+      25
+      26
+      27
+      28
+      29
+      30
+      31
+      32
+      33
+      34
+      35
+      36
+      37
+      38
+      39
+      40
+      41
+      42
+      43
+      44
+      45
+      46
+      47
+      48
+      49
+      50
+      51
+      52
+      53
+      54
+      55
+      56
+      57
+      58
+      59
+      60
+      61
+      62
+      63
+      64
+      65
+      66
+      67
+      68
+      69
+      70
+      71
+      72
+      73
+      74
+      75
+      76
+      77
+      78
+      79
+      80
+      81
+      82
+      83
+      84
+      85
+      86
+      87
+      88
+      89
+      90
+      91
+      92
+      93
       94
+      95
+      96
+      97
+      98
+      99
+     100
+     101
+     102
+     103
+     104
+     105
+     106
+     107
+     108
+     109
+     110
+     111
+     112
+     113
+     114
+     115
+     116
+     117
+     118
+     119
+     120
+     121
+     122
+     123
+     124
+     125
+     126
+     127
+     128
+     129
+     130
+     131
+     132
+     133
+     134
+     135
+     136
+     137
+     138
+     139
+     140
+     141
+     142
+     143
+     144
+     145
+     146
+     147
+     148
+     149
+     150
+     151
+     152
+     153
+     154
+     155
+     156
+     157
+     158
+     159
+     160
+     161
+     162
+     163
+     164
+     165
+     166
+     167
+     168
+     169
+     170
+     171
+     172
      173
-    9482
-    1422
-    5065
-    5907
-    7134
-    1761
-    5965
-    4922
-    9222
-    9818
-    7306
-    9767
-    3170
-     402
-    5478
-    9580
-    6803
-    5447
-    3506
-    6655
-    2499
-    5203
-     430
-    5958
-    1479
-    6372
-     603
-    4841
-    4635
-    2486
-    2777
-    2076
-     446
-     514
-    9350
-     582
-    7398
-    3049
-    6755
-    9012
-    1905
-    2704
-    8337
-    1406
-    3622
-     636
-    3227
-    9761
-    5806
-     297
-    3678
-    6233
-    1596
-    4503
-    1976
-    7410
-    8591
-    8622
-    7941
-    8653
-    4627
-    1313
-    6705
-    8226
-    4598
-    2174
-    8790
-    5473
-    2975
-    3456
-    2776
-    3473
-    3288
-    2010
-    5465
-     532
-    2118
-    6277
-    2015
-    9191
-    3837
-    4612
-     613
-    9030
-    6849
-    4993
-    2524
-    2517
-    8057
-    8855
-    7498
-    6352
-     996
-    9304
-    3025
-    4707
-    6693
-    2684
-    4157
-    8965
-    8310
-    5018
-    3810
-    7153
-    2555
-     929
-    9210
-    2095
-    7339
-    4154
-    4314
-    9756
-     255
-    2958
-    4048
-     791
-    5519
-     629
-    8947
-    6264
-    8394
-    7814
-    1703
-    6417
-     619
-    3768
-    7770
-    4732
-    8228
-    9547
-    8643
-    2629
-     768
-    1293
-    3679
-     473
-    8761
-    2875
-    1914
-    2126
-    5051
-    1550
-    9476
-    7674
-     424
-    8151
-    8489
-    3975
-    4785
-    2122
-     654
-    1653
-    4378
-      79
-    5521
-    7552
-    7458
-    6354
+     174
+     175
+     176
+     177
+     178
+     179
+     180
+     181
+     182
+     183
+     184
+     185
+     186
+     187
+     188
+     189
+     190
+     191
+     192
+     193
+     194
+     195
+     196
+     197
+     198
+     199
+     200
+     201
+     202
+     203
+     204
+     205
+     206
+     207
+     208
+     209
+     210
+     211
+     212
+     213
+     214
+     215
+     216
+     217
+     218
+     219
+     220
+     221
+     222
+     223
+     224
+     225
+     226
+     227
+     228
+     229
+     230
+     231
+     232
+     233
      234
-    6792
-    3374
-    7803
-    6550
-    5297
-    5084
-    3618
-    1939
-    1997
-    1501
-    4750
-    1802
-    7107
-    7119
-    9292
-    3388
-    5202
-    8370
-     900
-    4156
-    8403
-    7702
-    6684
-    3389
-    9083
-    4661
-    7749
-    2070
-    8340
-    4603
-    9272
-    4587
-    4571
-    9005
-    6708
-    5437
-     384
-    6167
-    6599
-    2807
-    9454
-    2930
-    7691
-    9943
-    4630
-    1569
-    3107
-    3244
-    9273
-    4163
-    1830
-    3360
-    9944
-    8532
-    9729
-    3047
-    6003
-    8573
-     906
-    3499
-    1953
-    5127
-    9964
-     616
-    8608
-     787
-    5113
-    8523
-    9715
-    5188
-    6447
-    9157
-    7607
-    4348
-    8780
-    8793
-    1855
-    8943
-    1081
-    1835
-    6566
-    9998
-    9647
-    2652
-    9570
-    8250
-    4367
-    2476
-    5293
-    4979
-    8326
-    4121
-    1498
-    6794
-    9440
-    7451
-    5462
-    2626
-    8485
-    3044
-     298
-    2164
-     836
-    1374
-    8598
-    3319
-    3106
-    1612
-     161
-    4767
-    3816
-    8828
-    9680
-    2882
-    2246
-    1610
-    8498
-    7876
-    9231
-    3998
-     579
-    2794
-    5009
-    7225
-    2855
-    8078
-    8931
-    5546
-    3014
-    6457
-    7368
-    1715
-    6333
-    3458
-    6402
-    5406
-    4057
-    2708
-    5885
-    1921
-    3691
-     562
-    1073
-    1584
-    8497
-    2818
-    5198
-    8152
-    1903
-    5385
-    2618
-    3697
-    1301
-    1026
-    9566
-    9611
-    5944
-    5348
+     235
+     236
+     237
+     238
+     239
+     240
+     241
+     242
+     243
+     244
+     245
+     246
+     247
+     248
+     249
+     250
      251
-    1489
-    8387
-    5278
-    7984
-    2931
-    2884
-    6569
-    2123
-    5895
-    4400
-    6110
-    4689
-    6004
-    2044
-    1051
-    7298
-     752
-    2518
-    6013
-    5591
-    8658
-    1718
-    8024
-    8625
-    2057
-    5496
-    8459
-    4379
-    7122
-    2933
-    4073
-     192
-    3564
-    9162
-    6974
-    4786
-    4874
-    5712
-    9401
-    4984
-      98
-     391
-    7583
-      93
-    6719
-    3040
-    5987
-    6121
-    3417
-    6604
-    7282
-    2847
-    7719
-    5110
-    2501
-    4292
-    8810
-    6658
-    4506
-    8365
-     459
-    5631
-    2560
-    4479
-     899
-    9021
-    7083
-    2673
-    6536
-    1893
-    7438
-    4844
-    8873
-    3296
-    4563
-    9672
-    1097
-    9805
-    2861
-    4055
-    7832
-       9
-    1600
-    3142
-    4684
-    6177
-     153
-    4408
-    5125
-    2369
-    5978
-    2318
-    5245
-     691
-    6035
-    5679
-    1788
-    2433
-    6653
-     889
-    7415
-    9537
-    5221
-    1966
-    3698
-    2127
-    5898
-     782
-    6773
-    6274
-    1759
-    8930
-    1579
-    6571
-    7928
-    4200
-     450
-    1792
-    9568
-    8293
-    4943
-    1707
-    8986
-    3022
-    6816
-    4646
-    9644
-    5578
-    6436
-    2409
-    5576
-    5574
-    8739
-    6937
-    8630
-    7861
-    1826
-    1298
-     770
-    6994
-    5964
-    1991
-    6659
-    5523
-    8032
-    6187
-    4342
-    1528
-    7054
-     835
-    7960
-    5753
-    3375
-    1217
-    2120
-    3865
-     549
-     233
-    9558
-    8469
-    2326
-    5101
-    8620
-     346
-    4518
-    5989
-    8333
-     670
-    1748
-    9149
-     231
-    3118
-    2636
-    9147
-    3418
-    9576
-    8222
-    3036
-    6843
-    2959
-    9683
-    2591
-    4790
-    6099
-    8551
-    5930
-    2218
-    3811
-    1730
-    3876
-    4691
-    5409
-    4641
-    9179
-    2813
-    1226
-    4633
-    2377
-    6455
-    9516
-     526
-    4885
-    2521
-     595
-    7494
-    3193
-     730
-    9036
-    3953
-    5345
-    7238
-    1841
-     101
-    7078
-    8703
-    4038
-    7758
-    9197
-    4349
-    5951
-    5553
-    6947
-    2482
-    2212
-    7900
-    8064
-    4237
-    2548
-    8061
-    3825
-    8376
-    7675
-    1227
-    8054
-    2466
-    6131
-    2899
-    3967
-     832
-    7704
-     366
-    7720
-    6823
-    2698
-    6824
-    6706
-    2040
+     252
+     253
+     254
+     255
+     256
+     257
+     258
+     259
+     260
+     261
+     262
+     263
+     264
+     265
+     266
+     267
+     268
+     269
+     270
+     271
+     272
+     273
+     274
      275
-     539
-    6397
-    9415
-    8452
-    5369
-    2934
-    6829
-    8787
-    2719
-    4300
-    3430
-     800
-    2579
-    2770
+     276
+     277
+     278
+     279
+     280
+     281
+     282
+     283
+     284
+     285
+     286
+     287
+     288
+     289
+     290
+     291
+     292
+     293
+     294
+     295
+     296
+     297
+     298
+     299
+     300
+     301
+     302
+     303
+     304
+     305
+     306
+     307
+     308
+     309
+     310
+     311
+     312
+     313
+     314
+     315
+     316
+     317
+     318
+     319
+     320
+     321
+     322
+     323
+     324
+     325
      326
-    5917
-    7889
-    1316
-    2810
-    6730
-     643
-    1032
-    1503
-    7449
-    6380
-    2522
-    9396
-    4652
-    3407
-    1239
-    5609
-    8390
-    7537
-    5534
-     533
-    5539
-    3435
-    5182
-    3676
-     217
-    1537
-    7822
-    2062
-    2587
-    1055
-    7359
-     947
-    7516
-    4392
-    5751
-    3829
-     364
-    6430
-    5342
-    5819
-    7951
-    6600
-    4505
-    8380
-    7864
-    7348
-    8757
-     159
-    7179
-    6981
-    5601
-     494
-    5197
-    9925
-    3094
-    3561
-    1312
-    8636
-     816
-    5390
-    4232
-     963
-    5540
-    2502
-    1318
+     327
+     328
+     329
+     330
+     331
+     332
+     333
+     334
+     335
+     336
+     337
+     338
+     339
+     340
+     341
+     342
+     343
+     344
+     345
+     346
+     347
+     348
+     349
+     350
+     351
+     352
+     353
+     354
+     355
+     356
+     357
+     358
+     359
+     360
+     361
+     362
+     363
+     364
+     365
+     366
+     367
+     368
+     369
+     370
+     371
+     372
+     373
+     374
+     375
+     376
+     377
+     378
+     379
+     380
+     381
+     382
+     383
+     384
+     385
+     386
+     387
+     388
+     389
+     390
+     391
+     392
+     393
+     394
+     395
+     396
+     397
      398
-    9148
-    4026
-    6839
-    4320
-    8313
-    8145
-    2797
-    7977
-    3648
-    4499
-    3715
-    6519
-    2381
-    2484
-    4161
-    9876
-    6674
-    2921
-    9175
-    1485
-      49
-     930
-    2724
-    5707
-     967
-    9217
-    2720
-     769
-    2030
-    1936
+     399
+     400
+     401
+     402
+     403
+     404
+     405
+     406
+     407
+     408
+     409
+     410
+     411
+     412
+     413
+     414
+     415
+     416
+     417
+     418
+     419
+     420
+     421
+     422
+     423
+     424
+     425
+     426
+     427
+     428
+     429
+     430
+     431
+     432
+     433
+     434
+     435
+     436
+     437
+     438
+     439
+     440
+     441
+     442
+     443
+     444
+     445
+     446
+     447
+     448
+     449
+     450
+     451
+     452
+     453
+     454
+     455
+     456
+     457
+     458
+     459
+     460
+     461
+     462
+     463
+     464
+     465
+     466
+     467
+     468
+     469
+     470
+     471
+     472
+     473
+     474
+     475
+     476
+     477
+     478
+     479
+     480
+     481
+     482
+     483
+     484
+     485
+     486
+     487
+     488
+     489
+     490
+     491
      492
-    9880
-    9261
-    6215
-    6763
-     158
-    8385
-    3661
-    6096
-    2356
-    9452
-    7661
-    9834
-    8487
-    7140
-    3980
-    3743
-    7899
-    9270
-    4738
-     778
-    7430
-    9712
-    4932
-    3990
-     220
-    3662
-    9921
-    1401
-    8308
-    5208
-    6381
-    8697
-    5046
-    3711
-    7870
-    6269
-     896
-    6494
-    3854
-    8735
-    1754
-    4953
-    9810
-    6214
-    9959
-    6646
-    9331
-    2441
-    4693
-    2997
-    3278
-    4239
-    4896
-     918
-      28
-    9145
-    8113
-    1361
-    6146
-    1904
-    6089
-    1673
-    1300
-    8994
-    9624
-    4094
-    9535
-    9354
-    1068
-    1688
-    4493
-    4029
-    3221
-    6990
-    5746
-      12
-    3081
-    5711
-    7087
-    1086
-    5168
-     546
-    4793
-    8807
-    4985
-    5177
-    2004
-    5779
-    9554
-    4792
-    6039
-    8391
-    6623
-    5149
-    3446
-    3940
-     478
-    2731
-    7517
-    8654
-    3365
-    7035
-    3320
-    8325
-    5871
-    2053
-    1865
-    1178
-     537
-    9216
-     143
-    1933
-    2902
-    1431
-    5448
-    7994
-    4777
-    3491
-    2679
-    1867
-    8773
-    5961
-    2748
-    4718
-    2868
-    2006
-    4307
-    5231
-    6155
-    4947
-    5270
-    7625
-    9483
-     296
-    2069
-    5329
-    6520
-     281
-    7956
-    8358
-    6101
-    6139
-    8522
-    4580
-    9184
-    9807
-    5165
-     714
-    8318
-    3942
-    8073
-    9749
-    9731
-    2282
-    8633
-    4682
-    5771
-    2200
-    6071
-    5450
-    4829
-    2743
-    1272
-    2825
-    4230
-     983
-    3911
-    5431
-     681
-    3046
-    6487
-    4004
-    1521
-    5755
-    3121
-      29
-    3847
-    4802
-    9575
-    1527
-    6299
-    9559
-    8710
-    2607
-    5730
-    3250
-    3893
-    7125
-    2056
-    2075
-    8100
-    7032
-    6199
-    3478
-    3335
-    5723
-    1685
-    3773
-    1823
-    1795
-    9344
-    6886
-      87
-    4795
-      69
-    1199
-    3814
-    1986
-    5357
-    6459
-    4692
-    3524
-    8963
-    8090
-    1463
-    2223
-    9738
-    1123
-    7831
-    1215
-    6229
-    6729
-    6717
-    3761
-    6205
-    2312
-    7242
-    9799
-    9473
-    2349
-    8093
-     814
-    9392
-    6564
-    3415
-    7966
-    8524
-    3626
-    8903
-    9293
-     569
-    1193
-    1817
-    9031
-    9003
-    1137
-     374
-    1978
-    2781
-    9092
-    9523
-    3813
-    3535
-    8572
-    7722
-    6591
-    5460
-    8646
-    3287
-    2041
-     695
-    7910
-     249
-    8716
-    4654
-    1099
-    9914
-     874
-    4992
-    2655
+     493
+     494
+     495
+     496
+     497
+     498
+     499
+     500
+     501
+     502
+     503
+     504
+     505
+     506
+     507
+     508
+     509
+     510
+     511
+     512
+     513
+     514
+     515
+     516
      517
-    8879
-    7234
-    9037
-    7374
-    2227
-    6660
-     794
-    8302
-    4007
-    9739
-    6837
-    9146
-    6438
-    4068
-    6222
-    3918
-    9886
-    3466
-    3821
-    8347
-    4820
-    9947
-    2470
-    9581
-    1702
-    3461
-    5220
-    2298
-    9351
-     207
-    9333
-    1328
-    8352
-    5627
-    6416
-    6515
-    8774
-    4755
-    8281
-    9026
-    3213
-    7407
-    1191
-    4982
-    4708
-    4921
-    5913
-    2706
-    1470
-    5116
-    3216
-    7400
-    1110
-    1071
-    4749
-    5510
-    1881
-    3100
-    2811
-    3148
-    6806
-    6504
-     457
-    5725
-     460
-    5981
-     754
-    5794
-    5097
-    9186
-    6746
-    6102
-    3760
-    7411
-    2256
-    5799
-      92
-    7925
-    5418
-     128
-    4537
-    1000
-    2026
-    3297
-    4568
-    3642
-    9621
-    3987
-    3406
-    4756
-    5375
-    1931
-    3779
-    5869
-    7227
-    9135
-    2394
-    5236
-    3246
-    8486
-    3719
-    7222
-    5158
-    2599
-    6597
-    5972
-    1601
-    6612
-    7252
-    9006
+     518
+     519
+     520
+     521
+     522
+     523
+     524
+     525
+     526
+     527
+     528
+     529
+     530
+     531
+     532
+     533
+     534
+     535
+     536
+     537
+     538
+     539
+     540
+     541
+     542
+     543
+     544
+     545
+     546
+     547
+     548
+     549
+     550
+     551
+     552
+     553
+     554
+     555
+     556
+     557
+     558
+     559
+     560
+     561
+     562
+     563
+     564
+     565
+     566
+     567
+     568
+     569
+     570
+     571
+     572
+     573
+     574
+     575
+     576
+     577
+     578
+     579
+     580
+     581
+     582
+     583
+     584
+     585
+     586
+     587
+     588
+     589
+     590
+     591
+     592
+     593
+     594
+     595
+     596
+     597
+     598
+     599
+     600
+     601
+     602
+     603
+     604
+     605
+     606
+     607
+     608
+     609
+     610
+     611
+     612
+     613
+     614
+     615
+     616
+     617
+     618
+     619
+     620
+     621
+     622
+     623
+     624
+     625
+     626
+     627
+     628
+     629
+     630
+     631
+     632
+     633
+     634
+     635
+     636
+     637
+     638
+     639
+     640
+     641
+     642
+     643
+     644
+     645
+     646
+     647
+     648
+     649
+     650
+     651
+     652
      653
-    1828
-    5772
-    9414
-    2843
-    4892
-    7248
-    2754
-    9305
-    3558
-    8150
-    5068
-    3981
-    1067
-    2894
-    1072
-    8170
-    2668
-    4264
-    7353
-    7284
-     435
-     512
-    2940
-    5175
-      97
-     758
-    5289
-    4725
-    4433
-    6340
-    8108
-    6635
+     654
+     655
+     656
+     657
+     658
+     659
+     660
+     661
+     662
+     663
+     664
+     665
+     666
+     667
+     668
+     669
+     670
+     671
+     672
+     673
+     674
+     675
+     676
+     677
+     678
+     679
+     680
+     681
+     682
+     683
+     684
+     685
+     686
+     687
+     688
+     689
+     690
+     691
+     692
+     693
+     694
+     695
+     696
+     697
+     698
+     699
+     700
+     701
+     702
+     703
+     704
+     705
+     706
+     707
+     708
+     709
+     710
+     711
+     712
+     713
+     714
+     715
+     716
+     717
+     718
+     719
+     720
+     721
+     722
+     723
+     724
+     725
+     726
+     727
+     728
      729
-    2854
-    1699
-    1234
-    1632
-    1980
-    2586
-    5896
-    2450
-    8491
-    2491
-    6754
-    2691
-    5722
-    4690
-    4352
-    7432
-    9821
-    4927
-    6899
-    7157
-     388
-    1194
-      81
-    4158
-    7759
-    5262
-    2129
-    3018
-    7211
-    8417
-    4996
-    7838
-    2637
-     797
-    8053
-    5041
-    7851
-    7639
-    2606
-    6986
-    5810
-    6840
-    5528
-    6694
-    6123
-    7431
-    7091
-    3032
-    4763
-    8640
-     372
-    5317
-    8323
-    8283
-    1162
-    8408
-    5843
-    8344
-    2971
-    1861
-    6002
-    5449
-    1898
-    1224
-     746
-    3701
-    1618
-    7074
-    3520
-    6648
-    6919
-    5605
-    4713
-    8898
-    4576
-    1265
-    8802
-    5910
-    2690
-    7532
-    1557
-    2367
-    8971
-    9418
-    9933
-    7981
-    7325
-    6955
-    5777
-    2712
-    5102
-    2920
-    9744
-    4327
-    4085
-     604
-    1793
-    2982
-    8249
-    7464
-    3509
-    9316
-    1558
-    9614
-    8656
-    9387
-    5995
-    3884
-    8479
-    6702
-    5282
-    3160
-    6220
-    7504
-    3327
-    9245
-    1249
-    3556
-    3260
-    9991
-    5218
-    7982
+     730
+     731
+     732
+     733
+     734
+     735
+     736
+     737
+     738
      739
-    2317
-    4333
-    9064
-    5260
-    8702
-    8987
-    8059
-    6443
-    9509
-    8968
-    1486
-    7937
-      25
-    8889
-    6163
-    2294
-    2173
-    6863
-    7811
-    6161
-    5459
-    1613
-    7636
-    7906
-    5633
-     148
-     431
-    6842
-    5991
-    8708
-    3970
-    4326
-    7572
-    7444
-    7615
-    9398
-    1487
-    4064
-    6391
-    6644
-    1736
-    4370
-    2262
-    2732
-    8252
-    3765
-    1381
-    8831
-    3138
-    7018
-    1007
-    5205
-    7272
-    3530
-    7309
-    9518
-    2340
-    6265
-    4487
-    1258
-    7596
-    4429
-    4431
-    1705
-    2144
-    4942
-    1821
-    4207
-    9235
-    6848
-    4041
-    8763
-     134
-    2353
-    8208
-    2078
-    8231
-    5663
-    8477
-    9608
-    8329
-    7080
-    9881
-     644
-    2675
-    8197
-     127
-    5743
-    6975
-    9187
-     160
-    5973
-    2759
-     314
-    4096
-    8135
-    1356
-    9055
-     851
-    2654
-    9117
-    1384
-    4773
-     429
-    3420
-    7164
-    5471
-     263
-     209
-    7912
-    6989
-    5960
-    6066
-    3233
-    5404
-    6133
-    7575
-    9372
-    1769
-    6401
-    4591
-      88
-    8275
-    6129
-    2392
-     726
-    4596
-    4467
-      39
-    2179
-    2564
-    5120
-    3901
-    7484
-    8278
-    2511
-     969
-     998
-    9413
-    4660
-    2767
-    4129
-    8852
-     750
-    7378
-    7155
-    9735
-    3886
-    7604
-    8511
-    5821
-    3581
-    5085
-     574
-    5702
-    1124
-    4989
-    8854
-    8345
-    7264
-    6183
-    6796
-    6275
-    5901
-    6622
-    6313
-    8169
-    4970
-    5733
-    3182
-    3181
-    3083
-    2985
-    7965
-    9730
-    2624
-    6468
-    4971
-    3608
-    7757
-     396
-    7191
-    4636
-    7544
-    7099
-    3391
-    5918
-    7364
-    3313
-    9269
-     486
-    4864
-    8483
-    2055
-    7235
-    7044
-    9679
-    4088
-    8689
-    7195
-    7699
-    8584
-    8502
-    8094
-    4261
-     102
-    3314
-    4909
-    5544
-    2134
-    5666
-    8041
-    6329
-    1360
-    9788
-    9128
-    8132
-    2183
-    7943
-    6241
-    7418
-    8950
-    9957
-    2489
-    4254
-    6739
-    7077
-    9909
-    1059
-    2535
-    9593
-    7734
-    2926
-    6316
-    9650
-    9041
-     611
-    3332
-    4219
-    4242
-    9835
-    6085
-    5690
-    4945
-    3302
-    5583
-    4117
-    7170
-     320
-    6911
-    9965
-    9417
-    2768
-    9252
-    8941
-    4615
-    7002
-     289
-    1396
-    6400
-    5797
-    5773
-    9042
-     857
-    6732
-    5685
-    7208
-    2028
-    4740
-    3205
-    4607
-     960
-    1845
-    7342
-    5795
-    4248
-    9296
-    3528
-    4266
-    9079
-    5516
-    7799
-    9786
-    1744
-      35
-    6618
-    3071
-    7764
-    1961
-    7901
-    4629
+     740
+     741
+     742
+     743
      744
-    6866
-    8995
-    9945
-    3516
-    3242
-    6546
-    1562
-    1061
-     123
-    3909
-     553
-    2344
-    3910
-    6637
-    2865
-    6091
-    5379
-    6262
-    7167
-    2795
-    8430
-    5862
-    7751
-    7632
-     707
-    9277
-    8564
-     368
-    1466
-    4898
-    8672
-    7352
-    7021
-    2432
-    7475
-     250
-    7510
-    8075
-    7161
-    4065
-      55
-    4223
-    9425
-     195
-    3359
-    6523
-    3060
-    1016
-    6727
-    2400
-    6423
-    8080
-    5766
-    9869
-    1651
-    9087
-    7543
-    9977
-     860
-    7558
-    1250
-    3041
-     683
-    2815
-     449
-    1336
-    7820
-    4474
-    7425
-    6579
-    2722
-    6651
-    8245
-    2281
-    4902
-    1430
-    5946
-     448
-    4957
-      21
-    3488
-    5020
-    7207
-    3234
-    9199
-    1890
-    1049
-    4588
-    9543
-    7992
-    7189
-    4928
-    9790
-     313
-    8241
-    7105
-    6162
-    8880
-    8681
-    4368
-    4674
-     444
-    1280
-    6198
-    2610
-    3338
-    7204
-    7718
-    7402
-    5394
-     789
-    1992
-    7725
-    2158
+     745
+     746
+     747
+     748
+     749
+     750
+     751
+     752
+     753
+     754
+     755
+     756
+     757
+     758
+     759
+     760
+     761
+     762
+     763
+     764
+     765
+     766
+     767
+     768
+     769
+     770
+     771
      772
-    7103
-    8574
-    2011
-    8242
-    5899
-    4146
+     773
+     774
+     775
+     776
+     777
+     778
+     779
+     780
+     781
+     782
+     783
+     784
+     785
+     786
+     787
+     788
+     789
+     790
+     791
+     792
+     793
+     794
+     795
+     796
+     797
+     798
+     799
+     800
+     801
+     802
+     803
+     804
+     805
+     806
+     807
+     808
+     809
+     810
+     811
+     812
+     813
+     814
+     815
+     816
+     817
+     818
+     819
+     820
+     821
+     822
+     823
+     824
+     825
+     826
+     827
+     828
+     829
+     830
+     831
+     832
+     833
+     834
+     835
+     836
+     837
+     838
+     839
+     840
+     841
+     842
+     843
+     844
+     845
+     846
+     847
+     848
+     849
+     850
+     851
+     852
      853
-    9825
-    8138
-    4044
-    5301
-    2257
-    8762
-    5916
-    5652
-    5388
-    1578
-    9670
-    4246
-    1701
-    2695
-    6568
-    2761
-    5890
-    1246
-    7174
-    3004
-    5767
-    8816
-    6248
-    5335
-    9291
-    5699
-     608
-    6063
-     432
-     274
-    3749
-    9961
-    4234
-    6166
-    5649
-    2219
-    7262
-    2994
-     556
-    4166
-    1943
-    7180
-    5775
-    6094
-     126
-    6949
-    8515
-    6892
-    2858
-    3799
-     405
-    7959
-    9114
-    5002
-    1420
-    7477
-    4345
-    2391
-    4884
-    6545
-    8206
-    1969
-    5845
-    5179
-    7294
-    7970
-    9722
-    4535
-    7043
+     854
+     855
+     856
+     857
+     858
+     859
+     860
+     861
+     862
+     863
+     864
+     865
+     866
+     867
+     868
+     869
+     870
+     871
+     872
+     873
+     874
+     875
+     876
+     877
      878
-    5079
-    1894
-    8182
-    8210
-    3119
-    9927
-    5210
-    9936
-    6191
-    7232
-    6788
-    8198
-    9164
-    1533
-    9416
-    5610
-    1804
-    5756
-      50
-    4351
-    5162
-    6190
-    5224
-    3059
-    2222
-    6657
-    1200
-    5750
-     408
-    8440
-    7463
-    7905
-    7511
-     575
-    5833
-    1370
-    7735
-    6347
-    9673
-    6868
-    1781
-    4285
-    2150
-    2148
-    6590
-    6818
-    6379
-    3833
-    1002
-    4579
-     383
-    2746
-     913
-    8492
-    4231
-    1069
-    8279
-    6069
-    4703
-    6192
-    7427
-    8103
-    4393
-    9311
-    5983
-    8349
-    6948
-    5371
-    4759
-    9244
-    5024
-    4091
-    7220
-    8274
-    5675
+     879
+     880
+     881
+     882
+     883
+     884
+     885
+     886
+     887
+     888
+     889
+     890
+     891
+     892
+     893
+     894
      895
-     179
-    9809
-    1126
-    7491
-    5091
-    7551
-    8664
-    7324
-    3935
-    6508
-    9498
-    3349
-    2727
-    2448
-    8382
-    8187
-    2180
-    3396
-    2480
-     119
-    9204
-    6539
-    7694
-    6111
-    1847
-    2872
-    5185
-    2440
-    7535
-    7946
-    2623
+     896
+     897
+     898
+     899
+     900
+     901
+     902
+     903
+     904
+     905
+     906
+     907
+     908
+     909
+     910
+     911
+     912
+     913
+     914
+     915
+     916
+     917
+     918
+     919
+     920
+     921
+     922
+     923
+     924
+     925
+     926
+     927
+     928
+     929
+     930
+     931
+     932
+     933
+     934
+     935
+     936
+     937
+     938
+     939
+     940
+     941
      942
-    4480
-    9049
-    3336
-    8398
-    7358
-    9319
-    7231
-    4311
-    1033
-    8764
-    7299
-    2359
-    7576
-    2786
-    1229
-    6992
-    2342
-    9802
-    2605
-    8934
-    1928
-    5256
-      56
-    1306
-    8124
-    4905
-    6905
-    3199
-    8156
-    9545
-    8957
-    7874
-    4908
-    3889
-    3586
-    2544
-    3238
-    1201
-    1402
-    6309
-    5466
-    1410
-    2744
-    4078
-    5594
-    7110
-    4175
-    5090
-    4130
-    1499
-    9988
-    1693
-    8470
-    9025
-    6350
-     887
-    5726
-    8074
-    8367
-    5254
-    1197
-    6226
-    7670
-    4136
-     308
-    2437
-    1829
-    9671
-    3729
-    1404
-    6759
-    3144
-    3408
-    1622
+     943
+     944
+     945
+     946
+     947
+     948
+     949
+     950
+     951
+     952
+     953
+     954
+     955
+     956
+     957
+     958
+     959
+     960
+     961
+     962
+     963
+     964
+     965
+     966
+     967
+     968
+     969
+     970
+     971
+     972
+     973
+     974
+     975
+     976
+     977
+     978
+     979
+     980
+     981
+     982
+     983
+     984
+     985
+     986
+     987
+     988
+     989
+     990
+     991
+     992
+     993
+     994
+     995
+     996
+     997
+     998
      999
-    9994
-    8177
-    3817
-    8718
-    2242
-    7940
-    2071
-    5498
-    2775
-      52
-    1186
-    9485
-    9652
-    9819
-    5367
-    2352
-    3984
-    7456
-    2031
-    1122
-     210
-    1326
-      82
-    9978
-    3746
-    4281
-    3207
-    3860
-    9247
-    5280
-    2614
-    8521
-    3370
-    7422
-    4126
-    6323
-    9276
-    9770
-     721
-    9883
-    8306
-    8771
-    8025
-    7419
-    6067
-    7115
-    4109
-     474
-    3840
-    4283
-    7114
-    3390
-    9525
-    9686
-    9500
-    9815
-    2443
-    8235
-    4529
-    4748
-     820
-     566
-    9719
-    5883
-     815
-    4287
-    9778
-     557
-     389
-    9995
-    4403
-    2492
-    5548
-    9856
-    6005
-    7399
-    3913
-    3019
-     427
-    4195
-    3165
-    8527
-    2427
-    3882
-     377
-    4453
-    6479
-     586
-    2914
-    3758
-    4397
-    5036
-    4688
-    9027
-    3517
-    9906
-    8144
-    8070
-    3489
-      71
-    5522
-    4616
-    3710
-    7669
-    9000
-     881
-    7056
-    8040
-    6522
-     254
-    8893
-    4386
-    2980
-    3926
-    7355
-    4872
-    8877
-    3877
-    7362
-    1203
-    5575
-    3077
-     528
-    2473
-    4741
-     587
-      72
-    2024
-    5288
+    1000
+    1001
+    1002
+    1003
+    1004
+    1005
+    1006
+    1007
+    1008
+    1009
+    1010
+    1011
     1012
-    9182
-    3050
-    3069
-    5126
-    1163
-    5322
-    4851
-    4251
-    5678
-    4291
-    3752
-    4569
-    8896
-    2414
-    9553
-    5939
-    1371
-     943
-    7169
-    9034
-    7118
-    7067
-    4939
-    7923
-    9047
-    3573
-    6026
-    3249
-     472
-    7005
-    6449
-    2023
-    9266
-    3959
-    8617
-    3964
-    4745
-     327
-    1303
-    8481
-    6628
-    3562
-    9053
-    6535
-    8833
+    1013
+    1014
+    1015
+    1016
+    1017
+    1018
+    1019
+    1020
+    1021
+    1022
+    1023
+    1024
+    1025
+    1026
+    1027
+    1028
+    1029
+    1030
+    1031
+    1032
+    1033
+    1034
+    1035
+    1036
+    1037
+    1038
+    1039
+    1040
+    1041
+    1042
+    1043
+    1044
+    1045
+    1046
+    1047
+    1048
+    1049
+    1050
+    1051
+    1052
+    1053
+    1054
+    1055
+    1056
+    1057
+    1058
+    1059
+    1060
+    1061
+    1062
+    1063
+    1064
+    1065
+    1066
+    1067
+    1068
+    1069
+    1070
+    1071
+    1072
+    1073
+    1074
+    1075
+    1076
+    1077
+    1078
+    1079
+    1080
+    1081
+    1082
+    1083
+    1084
+    1085
+    1086
+    1087
+    1088
+    1089
+    1090
+    1091
+    1092
+    1093
+    1094
+    1095
+    1096
+    1097
+    1098
+    1099
+    1100
+    1101
+    1102
+    1103
+    1104
+    1105
+    1106
+    1107
+    1108
+    1109
+    1110
+    1111
+    1112
+    1113
+    1114
+    1115
     1116
-    8589
-    2397
-      34
-    9657
-    8453
-     538
-     420
-    7933
-    7349
-    2101
-    6765
-    4481
-    4100
-    8353
-    2421
-    9872
-    1491
-    1907
-    3915
-    8518
-    3274
-    3361
-    3358
-     399
-    7447
-    1785
-    7595
-    7743
-    3694
-    6240
-    5529
-    4899
-    3943
-    2733
-    9699
-    7665
-    8473
-    7509
-    1510
-    8747
-    7296
-    6270
-    4305
-    4388
-    4268
-    4035
-    5992
-    7502
-    7716
-    5285
-     756
-    6231
-    9471
-    9412
-    9353
-    4530
-    9442
-    1906
-    5954
-    3295
-    7733
-    9512
-    1208
-    2967
-    9681
-    6336
-    2925
-    2845
-     124
-    9361
-    7330
-    9878
-    4262
-    3030
-    1924
-      73
-    9610
-    6235
-    4647
-    8438
-    9691
-    3140
-    6068
-    5909
-    5532
-     950
-    6797
-    8642
-    3835
-    5717
-    1413
-    5912
-    3912
-    4225
-    7013
-    2841
-    4783
-    3384
-     545
-    1985
-    8166
-    2093
-    6406
-    3016
-    3939
-    9317
-    6772
-    7480
-     264
-    7401
-    3128
-    9071
-    1335
-    2762
-    5614
-     803
-    6414
-    8927
-    6239
-    9830
-    9848
-    8727
-    5346
-    9297
-    4458
-    3570
-    2581
-    8291
-    1598
-    6356
-    8826
-    2085
-    3609
-    5876
-    7300
-    1153
-    9255
-    5075
-    2850
-    3127
-     270
-    3404
-    6446
-    2138
-    2171
-    2401
-    5217
-    4184
-    6424
-    6874
-    2924
-    2966
-    5804
+    1117
+    1118
+    1119
+    1120
+    1121
+    1122
+    1123
+    1124
+    1125
+    1126
+    1127
+    1128
+    1129
+    1130
+    1131
+    1132
+    1133
+    1134
+    1135
+    1136
+    1137
+    1138
+    1139
+    1140
+    1141
+    1142
+    1143
+    1144
+    1145
+    1146
+    1147
+    1148
+    1149
+    1150
     1151
-    8240
-    3822
-    2688
-    9340
-    4104
-    1751
-    9405
-    5420
-    2269
-    4297
-    3630
-    1425
-    1447
-    8866
-    7618
-    7918
-    2937
-    9256
-    3869
-       8
-    9159
-    6978
-    9562
-    5092
-    2139
-    6552
+    1152
+    1153
+    1154
+    1155
+    1156
+    1157
+    1158
+    1159
+    1160
+    1161
+    1162
+    1163
+    1164
+    1165
+    1166
     1167
-    8315
-    7924
-    2906
-    4087
-      30
-    1960
-    3890
-    1800
-    6915
-    7884
-    5719
-    5134
-    4549
-    7950
-    7806
-    8031
-     183
-    8256
-      20
-    6147
-    5543
-    2758
-    6060
-    6691
-    5096
-    4461
-    3427
-    7148
-    6758
-    1868
-    7567
-    2018
-    3129
-     465
-    8402
-    2362
-    8173
-    5745
-    2939
-    2755
-    8594
-    2928
-      96
-    1605
-    4521
-    8946
-    7470
-     412
-    2271
-    1885
-    5593
-    2974
-     355
-    9394
-    7560
-    8092
-    6673
-    4584
-    4710
-     703
-    6703
-    5115
-    6735
-    1644
-    8185
-    1662
-    3978
-    2638
-    7862
-    3857
-     506
-     113
-    9727
-    2364
-    3804
-    3756
-    3708
-    3819
-    7063
-    9045
-    4721
-    9257
-    9469
-    4210
-    7215
-    3593
-    8673
-    2403
-    9054
-    5489
-    3693
-    9001
-     265
-    4868
-    2094
-    5824
-    6934
-    4519
-    3147
-    6142
-    6728
-    3808
-     982
-    5334
-    5557
-     617
-    5216
-    4875
-    3659
-    9133
-    5559
-    6328
-    2566
-    5567
-    4806
-    6817
-    8067
-    9404
-    1999
-    9693
-    6999
-     248
-    2838
-    7210
-     673
-    7729
-    4143
-    5835
-    8977
-    1441
-    4705
-    8539
-    5107
-    2245
-    8196
-     421
-    2984
-    2146
-    2530
-    9755
-    7493
-    6415
-    8488
-    1138
-    7331
-    7036
-    8253
-    2640
-    6421
-    9028
-    7536
-    6740
-    8219
-    5104
-    1739
-    3029
-    6503
-    4622
-    4222
-    6633
-    4995
+    1168
     1169
-    9776
-    7478
-    7766
-    9556
-    1627
-    8010
-    2185
-    5531
-    3076
-    2580
-    1133
-    1760
-    8744
-     907
-    4097
-    1631
-    8887
-    4581
-    7978
-    5048
-    4730
-    3905
-    7443
-    8956
-    5417
-    2013
-    9692
-    8424
-    1125
-    2147
-    7166
-    5331
-    4108
-     390
-    6298
-    3807
-    5237
-    2801
-    2287
-    6369
-    9129
-    1882
-    4415
-    8034
-    8512
-    2297
-    5962
-    3654
-    5011
-    6715
-    6173
-    9370
-    3132
-    5632
-    2213
-    2215
-     687
-    6075
-    4353
-    2750
-    7131
-    4827
-    1505
-    2020
-    5759
-    3437
-    3172
-    6042
-    7244
-    9582
-    6912
-    2831
-    7090
-    1342
+    1170
+    1171
+    1172
+    1173
+    1174
+    1175
+    1176
+    1177
+    1178
+    1179
+    1180
+    1181
+    1182
+    1183
+    1184
+    1185
+    1186
+    1187
+    1188
     1189
-    3757
-    7129
-    1834
-    3145
-    8583
-    5325
-    2871
-    1379
-    6888
-     783
-     187
-    3432
-    1968
-    2236
-    7428
-    6835
-    5681
-    3053
-     425
-    6607
-    3202
-    9890
-    9004
-    5695
-    5432
-    6713
-    9733
-     131
-     104
-    3460
-    4160
-    2711
-    3787
-    4870
-    9689
-    6305
-    3200
-    2962
-    9127
-    6374
-    4926
-    8035
-    1668
-    3201
-    4389
-    7689
-    2348
-    9093
-    8817
-    2932
-    5279
-    8745
-    9142
-    3772
-    4637
-    1414
-    5378
-    1776
-    8442
-    1779
-    4824
-    9068
-    3933
-    9597
-    1565
-    7854
-    3498
-    2799
-    2100
-    7971
-    2494
-    3136
-    9430
-    4172
-     882
-    2270
-     332
-    3137
-    8224
-    2950
-    3585
-    8314
-    5720
-    2543
-    4084
-    6940
-    5012
-    1030
-    1948
-    1150
-    2866
-    4819
-    1146
-    7690
-    3868
-    5716
-     120
-    4178
-    3653
-    9009
-    1649
-    1492
-    3982
-    9868
-    6315
-    1922
-    3878
-    7321
-    3549
-    3341
-    8685
-    1656
-    1671
-    1329
-    7146
-    7731
-    9750
-    7047
-    3597
-    5957
-    4486
-    6281
-    1812
-    1058
-    3741
-    2454
-    1341
-    7775
-    6070
-    7785
-    1428
-    5192
-    1623
-    7825
-    2411
-    3164
-    9897
-    1362
-    9069
-    9478
-    4978
-    9532
-    6169
-    6033
-    8091
-    3369
-    9165
-    7745
-    4796
-    8870
-    9063
-    6257
-    3644
-    3515
-    4520
-    1488
-    6669
-    1607
-    7124
-    4917
-    2822
-    8751
-     829
-     686
-    8588
-    6135
-    6576
-    3688
-    4180
+    1190
+    1191
+    1192
+    1193
+    1194
+    1195
+    1196
+    1197
+    1198
+    1199
+    1200
+    1201
+    1202
+    1203
+    1204
+    1205
+    1206
+    1207
+    1208
+    1209
+    1210
+    1211
+    1212
+    1213
+    1214
+    1215
+    1216
+    1217
+    1218
+    1219
+    1220
+    1221
+    1222
+    1223
+    1224
+    1225
+    1226
+    1227
+    1228
+    1229
+    1230
+    1231
+    1232
+    1233
+    1234
+    1235
+    1236
+    1237
+    1238
+    1239
+    1240
     1241
-    8225
-    8066
-    9629
-    4470
-    2307
-    6255
-     885
-    3751
-    6617
-    4803
-    6586
-    1635
-    3742
-    9105
-    5849
-    5933
-    7373
-    8813
-      26
-    7465
-    2303
-    3321
-    6474
-    6616
-    8674
-    2897
-    7127
-    9651
-    6398
-    8804
-    8603
-    3696
-     475
-    5927
-    5505
-    2895
-    7761
-    5579
-    2734
-    5875
-    8506
-    2090
-    8432
-    1079
-    8436
-    2788
-    4497
-    4972
-    5813
-    8175
-     530
-    9032
-    6958
-    5762
-    3078
-    9329
-    2689
-    8134
-    8052
-    2288
-    1397
-    9218
-    9669
-    7088
-    4507
-    5517
-    9953
-    3875
-    1094
-    4638
-    5736
-    6021
-    2549
-     904
-    9339
-    3841
-    4290
-    9248
-    3510
-    2730
-    4337
-     479
-    1525
-    3110
-    1895
-    5340
-    3261
-    5884
-    5511
-    5857
-    6203
-    3211
-    4152
-    7479
-    7379
-    7916
-    5628
-    6178
-    3340
-    1566
-    7841
-    9421
-    3141
-    3400
+    1242
+    1243
+    1244
+    1245
+    1246
+    1247
+    1248
+    1249
+    1250
+    1251
+    1252
+    1253
+    1254
+    1255
+    1256
+    1257
+    1258
+    1259
+    1260
+    1261
+    1262
     1263
-    6686
-    9192
-    7258
-    4355
-     338
-    9364
-    5038
-    6364
-     286
-    4122
-    5277
-    9190
-    5718
-    7715
-    6471
-    5227
-    2478
-    2418
-    4729
-    6747
-    7609
-    8765
-    5602
-    7417
-     149
-    9232
-     659
-    6284
-    5595
-     524
-    4771
-    4120
-    3552
-    6314
-    9443
-    4340
-    1419
-    8683
-    2948
-    4807
-    5225
-    5643
-    4620
-     972
-    6672
-    2365
-    8605
-    8429
-    7700
-    9096
-    9737
-    4189
-    3965
-    6775
-    6082
-    2336
-    2949
-     662
-    7076
-    1235
-    7319
-    4205
-    1112
-    4912
-    2650
-    5133
-    2728
-    1128
-    9613
-    3628
-    8954
-    7592
-    8534
-    3992
-    5677
-    3151
-    1347
-    1664
-    1096
-     211
-    4747
-    7922
-    1546
-    6505
-    2883
-    9268
-    2596
-     208
-    4491
-    4645
-     843
-    3031
-    5219
-    9089
-    4293
-    9894
-    4980
-    2824
-    5436
-    1109
-    2277
-    7591
-     452
-    4066
-    3476
-    9062
-    2887
-    3474
-    4257
-    8449
-    6432
-    3979
-    5713
-    3347
-    5139
-    6409
-    3272
-    5526
-    4643
-    6014
-     984
-    2922
-    1056
-    6153
-    8112
-    8988
-    8858
-    5442
-     333
-    7482
-    2539
-     200
-    7768
-    4132
-    9094
-    2231
-    1559
-    3028
-    7608
-    9971
-    2181
-    9406
-    8841
-    4009
-    9102
-    9585
-    5648
-    6776
-    3240
-    9711
-    7808
-    6893
-    8894
-    8098
-    9444
-    8748
-    4784
-    3328
-    5603
-    5207
-    4107
-    3232
-    2357
-    4149
-    3434
-    2916
-    5688
-    2863
-    8437
-     890
-    2142
-    1712
-    5570
-    6077
-    5062
-    8412
-    5554
-     361
-    1916
-    9409
-    9097
-    5504
-    5617
-    9437
-    5737
-    4013
-    2503
-    2289
-    8615
-    6376
-    9249
-     534
-     593
-    2351
-     563
-     291
-    8238
-    2196
-    7038
-    2379
-    9341
-    1429
-    8788
-    7885
-    3667
-    2837
-      45
-    4565
-    7679
-    2136
-    5487
-    6105
+    1264
+    1265
+    1266
+    1267
+    1268
+    1269
+    1270
+    1271
+    1272
+    1273
+    1274
+    1275
+    1276
+    1277
+    1278
+    1279
+    1280
+    1281
+    1282
+    1283
+    1284
+    1285
+    1286
+    1287
+    1288
+    1289
+    1290
+    1291
+    1292
+    1293
+    1294
+    1295
+    1296
+    1297
+    1298
+    1299
+    1300
+    1301
+    1302
+    1303
+    1304
+    1305
+    1306
+    1307
+    1308
+    1309
+    1310
+    1311
+    1312
+    1313
+    1314
     1315
-    8892
-    2545
-    8665
-    5651
+    1316
+    1317
+    1318
+    1319
+    1320
+    1321
+    1322
+    1323
+    1324
+    1325
+    1326
+    1327
+    1328
+    1329
+    1330
+    1331
+    1332
+    1333
+    1334
+    1335
+    1336
+    1337
+    1338
+    1339
+    1340
+    1341
+    1342
+    1343
+    1344
+    1345
+    1346
+    1347
+    1348
+    1349
+    1350
+    1351
+    1352
+    1353
+    1354
+    1355
+    1356
+    1357
+    1358
+    1359
+    1360
+    1361
+    1362
     1363
-    6170
-    2981
-    6227
-    4093
-    9850
-    8009
-    5006
-    6969
-    5119
-    7046
-    6223
-    9112
-    3767
-    3906
-    4075
-    7787
-    4113
-    6194
-    4258
-    4524
-    9202
-    8951
-    1440
-    6216
-    7547
-    3481
-    3647
-    3591
-    5630
-    3766
-     175
-    7897
-    1675
-     157
-    8610
-    4659
-    1179
-     614
-    3394
-    8164
-    2927
-    9687
-    9470
-    5967
-    2247
-    5031
-    5656
-    9065
-    3092
-    2452
-    5846
-    3058
-    3428
-    1599
-     954
-    9081
-    4772
-    7015
-    4625
-    9592
-    8940
-    1944
-     928
-    5598
-    1951
-    7539
-    4585
-    7736
-    6375
-    7253
-    7800
-    8558
-    9863
-    2387
-    2087
-    3635
-    8028
-    6136
-    3957
-    9997
-    9238
-    1129
-    8178
-    1542
-    9040
-    4183
-    8116
-    8838
-    7071
-    7138
-     914
+    1364
+    1365
+    1366
+    1367
+    1368
+    1369
+    1370
+    1371
+    1372
+    1373
+    1374
+    1375
+    1376
+    1377
+    1378
+    1379
+    1380
+    1381
+    1382
+    1383
+    1384
+    1385
+    1386
+    1387
+    1388
     1389
-    5705
-    4894
-     759
-    4083
-    8706
-    6707
-    5814
-    5333
-    1696
-     499
-    9309
-    2199
-    1974
-    1749
-     976
-    2563
-    9646
-     393
-    1035
+    1390
+    1391
+    1392
+    1393
+    1394
+    1395
+    1396
+    1397
+    1398
+    1399
+    1400
+    1401
+    1402
+    1403
+    1404
+    1405
+    1406
+    1407
+    1408
+    1409
+    1410
+    1411
+    1412
+    1413
+    1414
+    1415
+    1416
+    1417
+    1418
+    1419
+    1420
+    1421
+    1422
+    1423
+    1424
+    1425
+    1426
+    1427
+    1428
+    1429
+    1430
+    1431
+    1432
+    1433
+    1434
+    1435
+    1436
+    1437
+    1438
+    1439
+    1440
+    1441
+    1442
+    1443
+    1444
+    1445
+    1446
+    1447
+    1448
+    1449
+    1450
+    1451
+    1452
+    1453
+    1454
+    1455
+    1456
+    1457
     1458
-    4462
-    1387
-    5029
-     609
-    4857
-    4578
-    1589
-    4383
-    9393
-     927
-    1615
-    4471
-    6570
-    8286
-    2438
-    3986
-    2140
-    1603
-    6933
-    7361
-     948
-    4260
-    4831
-    6688
-    8714
-    3161
-    9641
-    2209
-    6608
-    3575
-    4758
-    4186
-    3777
-    5500
-    1625
-    6698
-    1248
-    9753
-    4907
-    8528
-    6556
-    5809
-    8046
-    6427
-    3256
-    4405
-      80
-    3146
-    7377
-    8361
-    6395
-    5286
-    8343
-    2941
-    7546
-     226
-    6433
-    5320
-    7367
-    4794
-    1275
-    6148
-    1014
-    9892
-    3793
-    4997
-    6632
-    5623
-    6249
-    6297
-    3606
-     915
-    8554
-     921
-    1582
-    2238
-    1213
-     188
-    6290
-     271
-    9867
-    4816
-    4764
-    1592
-    7084
-    9956
-    9075
-    7281
-    4053
-    9137
-    9236
-    6813
-    4390
-    1103
-    8559
-    3277
-    8531
-    4671
-    1732
+    1459
+    1460
+    1461
+    1462
+    1463
     1464
-    8264
-    9388
-    4789
-    2546
-    6493
-     433
-    3677
-    7439
-    4438
-    1938
-    3218
-     312
-    2047
+    1465
+    1466
+    1467
+    1468
+    1469
+    1470
+    1471
+    1472
+    1473
+    1474
+    1475
+    1476
+    1477
+    1478
+    1479
+    1480
+    1481
+    1482
+    1483
+    1484
+    1485
+    1486
+    1487
+    1488
+    1489
+    1490
+    1491
+    1492
+    1493
+    1494
+    1495
+    1496
+    1497
+    1498
+    1499
+    1500
+    1501
+    1502
+    1503
+    1504
+    1505
+    1506
+    1507
+    1508
+    1509
+    1510
+    1511
+    1512
+    1513
+    1514
+    1515
+    1516
+    1517
+    1518
+    1519
+    1520
+    1521
+    1522
+    1523
+    1524
+    1525
+    1526
+    1527
+    1528
+    1529
+    1530
+    1531
+    1532
+    1533
+    1534
+    1535
+    1536
+    1537
     1538
-    1236
-    9227
-    4131
-     293
-    6015
-    6343
-    5509
-    9594
-      84
-     581
-    1308
-    4959
-    6294
-    3542
-    2125
-    3736
-    6879
-     717
-    9109
-    1025
-    7495
-    6151
-    9451
-    8867
-    2674
-    6210
-    2969
-     685
-    3264
-     471
-    1166
-    3584
-    9520
-    8562
-    3399
-    3265
-    3961
-    4523
-    8016
-    8266
-    5239
-    4983
-    9381
-     961
-    7913
-     381
-    5911
-    5118
-     804
-    1979
-    3792
-    9682
-    5512
-    3015
-    5251
-    6037
-    4416
-    5561
-    6924
-    8919
-       4
-    7345
-     299
-    8458
-    5585
-    8001
-    6342
-    5807
-    4619
-    2178
-    9150
-    3674
-    1050
-    2957
-    2240
-    5536
-    6559
-     365
-    1210
-     745
-     953
-    1351
-     303
-    6640
-    6685
-    2325
-    6682
-    8974
-    2817
-    6850
-    2764
-    7747
-    5590
-    2552
-    6351
-    4994
-    3832
-    9427
-     626
-    3468
-    9153
-    5287
-    9910
-    5381
-    5058
-    4735
-     522
-    9709
-    4676
-    7268
-    5956
-    1647
-    9666
-    9759
-    7678
-    5425
-    5513
-    4770
-     302
-    8655
-    8171
-    6860
-    8668
-    3587
-    5902
-      36
-    7019
-    8626
-    3117
-    2323
-    4845
-    6573
-    8037
-    1984
-    3108
-    6952
-    3398
-    3675
-    9851
-     115
-    6321
-    2434
-    6001
-    8484
-    7113
-    6158
-    7446
-    8371
-    3421
-    8478
-    9544
-    2086
-    2896
-    8667
-    8122
-    4275
-    6112
-    2880
-    7949
-    7930
-    5868
-    6941
-    3806
-    1970
-    7336
-    2833
-    9986
-    4105
-    8916
-    3720
-    5616
-    7657
-     912
-    4726
-    5266
-    2442
-    1851
-     863
-    7059
-     576
-    2537
-    8229
-    8882
-    3776
-    8129
-     702
-    3282
-    6244
-    9206
-    4127
-    4821
-    4525
-    2616
-    7531
-    8953
-    9035
-     206
-    7656
-    4030
-     404
-    1912
-    4538
-    2203
-      33
-    3441
-    5921
-    3065
-    1449
-    5419
-    7139
-    2315
-    8863
-    6137
-    3411
-    8011
-    4289
-    3643
-    7408
-    8513
-     137
-    3690
-    1768
-    8083
-    1343
-    3198
-    6127
-    9229
-    3744
-    4570
-    1230
-    7637
-    1320
-    8316
-    7964
-    8794
-    6652
-    1289
-       2
-    5661
-    6408
-    6156
-     321
-    1940
-     710
-     792
-    4313
-     955
-    7875
-    8193
-    7577
-    6207
-    9211
-    5309
-    9542
-     266
-     859
-    3567
-    7594
-     438
-    3236
-    8914
-    6885
-    5027
-    5818
-    6636
-    9300
-     840
-    5144
-    8738
-    5209
-    6544
-     622
-    9193
-     672
-    8935
-    2621
-    3589
-    3490
-    2800
-     738
-    9395
-    5250
-    1724
-    1105
-    8952
-    4962
-    5023
-    8544
-    2098
-     376
-    5659
-    8820
-    9861
-    3196
-    9120
-    7773
-    6254
-    1747
-    5728
-    5662
-    9577
-    3419
-    1636
-    6263
-     164
-    4072
-    1398
-    2632
-    1192
-    2249
-    2540
-    4522
-    2360
-    1331
-    1857
-     819
-    1772
-    9870
-    6245
-    2594
-    2620
-     168
-    4206
-    9913
-    1460
-     742
-    9877
-    5468
-    6365
-    2853
-    5971
-    5924
-    5249
-    8926
-    7217
-    1181
-    3381
-    1729
-    4192
-    6783
-    4221
-    9475
-    4722
-    8051
-    2224
-    6404
-    3830
-    9920
-    3645
-    4243
-    6993
-    9743
-    6960
-    6927
-    6422
-    7717
-    4811
-    3864
-    7162
-    2757
-    4235
-     700
-    8767
-    3190
-    7526
-    3231
-    6024
-    8933
-    9493
-    6930
-    7065
-    4665
-    6744
-    8509
-    4494
-    2823
-    6642
-    4148
-    9812
-     962
-    5853
-    5017
-    2526
-    4572
-    8825
-    3291
-    8076
-    4891
-    4377
-    9664
-     584
-    4986
-    6605
-    1160
-    9016
-    5582
-    8811
-    2014
-    7380
-    4743
-    2739
-    6987
-    8372
-    1588
-    7104
-    1952
-    3385
-    9346
-    3721
-    4410
-    9481
-    6411
-    2538
-    9849
-    9215
-    5665
-    9833
-    8586
-    1322
-    5581
-    2665
-    4008
-    8533
-    4780
-    4362
-    9033
-    3333
-    2009
-    7640
-    1400
-    1143
-     886
-     268
-    9656
-    1577
-    8268
-    4564
-    8466
-    6320
-    2207
-    8289
-    6304
-    7581
-    7033
-     247
-    3508
-    1106
-    5292
-    1107
-     343
-    5429
-    8740
-    5731
-    2176
-    6378
-    2308
-    3565
-    2413
-    4213
-    2190
-    9508
-    7538
-    2879
-     765
-    6589
-    8909
-    9794
-    2083
-     737
-    9797
-    5514
-    3619
-    7338
-    5360
-    7156
-    4698
-    4036
-     916
-    1435
-    1743
-    7023
-    1756
-    6496
-    8447
-    1349
-    3525
-     618
-    4010
-    8717
-    6154
-    9732
-    3303
-    5080
-    9948
-    1721
-    4723
-    9505
-    3785
-    4701
-    6083
-    7833
-    1367
-    1346
-      65
-    5362
-    6750
-    5811
-    5634
-    8949
-    3852
-     141
-    7738
-    6603
-    2523
-    8569
-    1810
-    6742
-    3632
-    1667
-     911
-    7953
-     544
-    3844
-    8392
-    2099
-    4372
-    9857
-     627
-    6476
-    4014
-    5710
-    7356
-    3666
-    4714
-    3977
-    9224
-    2561
-    2390
-    6677
-    4798
-    6366
-    3985
-    4317
-    6832
-    5169
-    9347
-    1568
-    3796
-    4023
-    9160
-    7863
-    3927
-    6149
-    4435
-    3928
-    1593
-    9265
-    4451
-    1253
-    8300
-    7092
-    5798
-     350
-    9937
-    1242
-    9334
-    9871
-    3403
-    7652
-    2600
-    1797
-    3130
-    3660
-    7927
-    1774
-    8984
-    2493
-    6009
-    5831
-    7320
-    9234
-     380
-    5533
-     865
-    6338
-     513
-    2745
-     640
-    7499
-    9916
-    1733
-     258
-    7869
-    5422
-    1811
-    6260
-    1113
-    7460
-    1340
-    3887
-    1544
-    8038
-    2182
-     253
-    1117
-    8621
-    8114
-    1996
-    6962
-    4999
-    4220
-    9946
-    2310
-    4886
-    6736
-    1910
-    6950
-    9082
-    1207
-    7328
-    4973
-    5555
-    4153
-     893
-    6238
-    8694
-    8018
-    5947
-    3941
-    9279
-    4666
-    5667
-    6668
-    3602
-    7826
-    7245
-    9390
-    4140
-    9453
-    1606
-    3703
-    1727
-    7357
-    4112
-    9007
-    4814
-     592
-    6611
-    3831
-    2374
-     940
-    7553
-    6252
-    4159
-    6553
-    6577
-    7601
-     228
-    2862
-    9643
-    7476
-     924
-    5380
-    5056
-    5527
-     413
-    5306
-     809
-    9077
-    9596
-    4116
-    4407
-    9225
-    3692
-    3962
-    5035
-    7712
-    9764
-    4810
-    1993
-    6922
-    7020
-    8602
-    7381
-    6160
-    2038
-    2687
-    2248
-    9609
-    2378
-    2867
-    3613
-    4567
-    4848
-    6200
-    9091
-    8616
-    5170
-    8141
-    7621
-    6626
-    5111
-    5922
-    8414
-    7582
-    1299
-    3298
-    7989
-    4672
-    8629
-       5
-    2306
-    8097
-    3881
-    1421
-    1259
-    5744
-    4133
-    2408
-    5622
-    2828
-    9465
-    6450
-    9088
-    7135
-       3
-    8645
-     877
-    1873
-    3764
-    7673
-    6844
-     704
-     117
-    7796
-    3397
-    9645
-    5886
-    5247
-    5620
-    6296
-    1130
-    6448
-    9571
-    4245
-    2907
-    1309
-    1245
-    9590
-    1345
-    3344
-    5243
-    1477
-    8784
-    2463
-     469
-    3578
-      40
-    7082
-    4197
-    7634
-    6512
-    3003
-    9716
-    9501
-    8609
-    3605
-    7501
-    6393
-    8234
-    6777
-    1450
-    2520
-    1801
-     329
-    6800
-    8496
-    7908
-    8423
-    7767
-    5742
-    8792
-    3061
-    9817
-    7779
-    3885
-    6766
-    3123
-     138
-    5189
-    9820
-    5584
-    8538
-    9143
-    9748
-    8004
-    1842
-    5861
-    5376
-    1850
-    7846
-    3139
-    4428
-    2363
-    1010
-    8753
-    6489
-    3459
-    8443
-    6721
-    9882
-    9445
-    7058
-    2802
-    1947
-    7291
-    2000
-     632
-    9480
-    3914
-    1353
-    8799
-    8769
-    3096
-    7635
-    3670
-    4496
-     411
-    3477
-    8471
-    2439
-     370
-    6359
-    6463
-    9875
-    7880
-    2042
-    1476
-    9134
-    8980
-    2510
-    5782
-    8243
-    6945
-    8989
-    8297
-    7605
-    3582
-    1925
-    8874
-     136
-    8354
-    2462
-    1700
-    5053
-    7644
-    6583
-    5253
-    8582
-    2447
-    7655
-    2856
-    2749
-    9366
-    7612
-    5147
-    8026
-    6213
-    1158
-    8431
-    8126
-    5697
-    3020
-    7616
-     323
-    7650
-    9487
-    6738
-    3177
-    4335
-    6150
-    2481
-    9706
-    3663
-    4309
-    4733
-    5386
-    4855
-     755
-    8907
-    4469
-    2952
-    1173
-    1087
-    8795
-    9450
-      66
-    9725
-    9377
-    6371
-     743
-    3445
-     519
-    7680
-    3195
-    4611
-    1819
-    6619
-    9126
-    6979
-    6720
-    6461
-    2280
-    1038
-    4218
-     422
-    6074
-    8042
-    7788
-    3038
-    9209
-    1594
-    7780
-     180
-    9745
-    2808
-    7988
-    1251
-      95
-    8191
-    7363
-    1057
-     145
-    4049
-    9122
-    5361
-     570
-    1856
-    2025
-     339
-     246
-    2327
-    4398
-    8457
-     638
-    9911
-    5235
-    9832
-     523
-    4670
-    9397
-    9573
-    1833
-    1418
-    9889
-      22
-    6256
-      44
-    7455
-    4873
-    2291
-     692
-    9100
-    1872
-    3052
-    5839
-    1887
-    4667
-    4332
-    8062
-    4128
-    9879
-    5840
-    7147
-    5545
-    6206
-    9600
-    7893
-    6499
-     945
-    9928
-    8526
-    3633
-    3219
-    7919
-    5164
-    5370
-    7519
-    7228
-     655
-    6956
-    2037
-     993
-    2195
-    7265
-    9604
-    4475
-    8111
-    3948
-    5642
-    9308
-    2773
-    6900
-    3217
-    1077
-     841
-    5261
-    8715
-    5860
-    6582
-    4203
-    4395
-    2133
-    9420
-    6225
-    9955
-    5654
-    3815
-    5407
-    2515
-    7030
-    7926
-    6723
-     799
-    1264
-    5480
-    3896
-    3507
-     970
-    5975
-    9601
-    5467
-    5393
-    9972
-     975
-    3769
-    8153
-    3156
-    5324
-    7857
-    9887
-    3187
-    9282
-    6172
-    5030
-    9017
-    1900
-    8777
-    8537
-    8071
-     564
-    5774
-     221
-    2091
-    5302
-    9061
-    8199
-    2578
-    5612
-     694
-    2417
-    6195
-    2852
-     379
-     795
-    1211
-    3353
-    6011
-    2666
-    5851
-    7429
-    4330
-    1281
-    9110
-    9826
-    3467
-    5732
-     838
-     693
-    3623
-    2514
-    7801
-    4914
-    1611
-    3588
-    4696
-    9386
-    7201
-    6237
-    2235
-    5273
-    1777
-    7236
-    3993
-    6996
-    7525
-    9999
-    4621
-     801
-    1723
-    3680
-    3894
-    5919
-    5477
-    7133
-    2415
-    9360
-    8536
-    1580
-    8307
-    7565
-    2059
-    7382
-    7009
-    4437
-    1778
-    7753
-    8552
-     812
-    1070
-    3330
-    7205
-    5646
-    4484
-    2453
-     610
-    3651
-    6631
-    5043
-    3197
-    7646
-    4171
-    2088
-    2429
-    3013
-    3683
-     203
-    4150
-     637
-    8388
-    8699
-    1896
-    2498
-    8319
-    1100
-    3888
-    4965
-    5196
-    8043
-    9280
-    4946
-     827
-    8475
-    8815
-    5344
-    2455
-     135
-    8720
-    3673
-    9968
-    5882
-      64
-    1665
-     733
-    9981
-    3640
-    7152
-    7198
-      62
-    4751
-    5223
-    4265
-    8808
-    5735
-    9697
-    3652
-    8176
-    5439
-    3951
-     334
-    8601
-    6861
-     216
-    1838
-    6822
-    8383
-     300
-    1023
-    5923
-    2633
-    5621
-    6188
-    1287
-    7763
-    2065
-     146
-    2536
-    2519
-    3823
-    8267
-    5770
-    5045
-    8786
-    2398
-    8835
-    1238
-    5657
-    1212
-    6774
-    1062
-    8924
-    4554
-    1755
-    7529
-    3682
-    1409
-    5586
-    6795
-    9284
-     122
-    1766
-     488
-     678
-    3938
-    2890
-    3194
-    9011
-    9136
-     810
-    2619
-    9174
-    2891
-     480
-     319
-    3956
-    1196
-    2073
-     505
-     190
-    2955
-    3919
-    5790
-     939
-    1177
-     325
-    4468
-    7991
-    1507
-    2625
-    1633
-    9426
-    8996
-    2780
-    7150
-    6991
-    2901
-    3672
-    3462
-    8641
-    3603
-    2903
-     225
-    6092
-    9628
-    5552
-    7771
-    3526
-    9462
-     277
-    4969
-     476
-     151
-    9634
-    6488
-    9746
-    3342
-    7070
-    8280
-    9490
-    1408
-    1539
-    4061
-    4657
-    6385
-    3873
-    7798
-     985
-    1716
-    9754
-    6279
-    2021
-    3175
-    7500
-    7121
-    3436
-    2186
-    6497
-    4110
-    3895
-    9662
-    4001
-    6968
-    4274
-    4547
-    4430
-    6324
-    6928
-    9477
-    1742
-    9865
-     441
-    1024
-    4074
-    8993
-    9836
-    4879
-    8842
-    2803
-    4683
-    5050
-    5154
-    5754
-    5734
-    2532
-    7343
-    9337
-    2953
-    8570
-     880
-    8262
-    7954
-    5021
-    9907
-    1161
-    3286
-    6557
-    6588
-    9230
-    5204
-    7742
-     273
-    9793
-    4925
-     100
-     500
-    2286
-    3809
-    4895
-    9560
-    3000
-    8445
-    8082
-    8726
-    2601
-    8189
-    8396
-    2420
-    6246
-    1388
-    6041
-    8450
-     647
-    3470
-    2319
-    1172
-    6355
-    1416
-    5706
-    2052
-    5817
-    9461
-    5321
-    3828
-    4880
-    6224
-    4027
-    3116
-    3529
-    5801
-    7687
-    4760
-    2251
-    9314
-    2313
-    8217
-    4114
-    3352
-    9116
-    2590
-    1529
-    6891
-    1039
-    5354
-    6647
-    6903
-    2063
-    8220
-    6311
-    3054
-    3846
-    4595
-    1101
-    1918
-     306
-      16
-    1720
-    5929
-    3424
-    2960
-     724
-    8495
-     991
-    2709
-    1157
-    8752
-    4005
-    2913
-    8179
-    8707
-    5501
-    4256
-    9655
-    3011
-      68
-    5887
-    8014
-     671
-    6875
-    6345
-    4482
-    1021
-    3818
-    7512
-    2991
-    4174
-    8362
-    1277
-     464
-    1047
-    2701
-    3669
-    7160
-    5004
-    7586
-    8207
-    8081
-    7027
-    1567
-    5399
-    2156
-     477
-    6036
-    3788
-    3664
-    3103
-     309
-    6405
-    9774
-    8888
-    8002
-    5136
-     858
-    6587
-    1783
-       0
-    5057
-    4321
-    5387
-    3442
-     646
-    1839
-    2513
-    3599
-    1437
-    8321
-     688
-    9653
-    5423
-    2525
-    5778
-    2604
-    3180
-    5330
-    4338
-    3337
-    1310
-    1794
-    2760
-    8732
-    4697
-    8180
-    3550
-     489
-    8399
-    6690
-    6302
-    2648
-    7545
-    5893
-    5904
-    6878
-    6601
-    3559
-    9563
-     873
-    7834
-    4788
-    1709
-    5453
-    7039
-    3413
-    5599
-    4201
-    6273
-    1694
-    4541
-    7317
-    8557
-    5180
-    6088
-    1803
-    7171
-    3122
-    6300
-     642
-    5087
-    7106
-    6043
-    6038
-    9639
-    5015
-    4502
-    1426
-     241
-    5195
-    8012
-    3299
-    3845
-    7967
-    7318
-    9466
-     784
-     590
-    1553
-    6683
-    6115
-    3090
-    1523
-    3343
-    3001
-    2121
-    2659
-    4286
-    3496
-    4871
-    9494
-    2116
-     295
-    3275
-    1908
-    9362
-    6124
-    8422
-    8973
-    4929
-    3734
-    8746
-    2556
-    5872
-    3945
-    9829
-    2683
-    8731
-    6578
-    1015
-    3306
-    4550
-    5108
-     378
-    3247
-    3637
-    5644
-    8468
-    3532
-    2646
-    9166
-    2332
-    8400
-    5484
-    9723
-    2508
-    6266
-    1645
-    7031
-    5343
-    2188
-    1913
-    3215
-    6525
-    5421
-    1455
-    5295
-    7496
-    9302
-    8435
-    1659
-    4890
-    9507
-    5549
-    7938
-    9843
-    2923
-    6126
-    5808
-    8693
-     504
-    3612
-    4465
-    7776
-    6510
-    3228
-    8555
-    9607
-    5979
-    1692
-    9676
-    1860
-    6357
-    6272
-      53
-    6643
-    5284
-     536
-    2832
-    4916
-    2790
-    7007
-    7602
-    7200
-    2692
-    1848
-    1004
-     571
-     650
-    4805
-    9831
-    7006
-    7311
-     125
-    8155
-    2159
-    8418
-    3790
-    1465
-    1678
-    9847
-    6344
-    5556
-    7203
-    8058
-     171
-    2714
-    1518
-    9373
-    7732
-     525
-    6157
-    8652
-    1782
-    1206
-    2106
-    3006
-    6098
-    9757
-      83
-    4577
-     382
-    9332
-    4170
-    3294
-    6753
-    7840
-    2036
-    5099
-    3704
-    5942
-    7683
-    8490
-    5461
-    7859
-    8675
-    2512
-    1442
-     344
-    3791
-      46
-    7564
-    1762
-    5312
-     387
-    1131
-    8305
-    4952
-    2361
-    8644
-    1423
-    8101
-    5826
-    7149
-    3133
-    3916
-    5676
-    8332
-    7436
-    7256
-    4182
-    8836
-      32
-    6283
-    2527
-    3366
-    2239
-    7684
-    3541
-     677
-    6929
-    8271
-    4436
-    8364
-    8872
-    3301
-     573
-    9098
-    8736
-     548
-     833
-     455
-    9459
-    7524
-    8915
-    2562
-    3444
-     648
-    7858
-     345
-    3017
-    7360
-    8849
-    5897
-    1988
-    9615
-    3326
-    1945
-    4731
-    6852
-    1063
-    8232
-    7952
-    3386
-    8140
-    8379
-    3026
-    8128
-    3544
-    4557
-    5228
-    9787
-    3931
-    1325
-    3074
-    4632
-    2225
-    5145
-    8270
-    2152
-    5457
-    7257
-    2531
-    7902
-    5415
-    5178
-    8500
-    8474
-    6833
-    3963
-    1358
-    2193
-     423
-    9019
-    5838
-    3093
-    8510
-    2915
-    8663
-    4138
-    1858
-    5193
-     417
-    1687
-    1932
-     256
-    8587
-    7723
-    1372
-     663
-    9782
-    5132
-    7714
-    6953
-    9348
-    5338
-    9022
-    5877
-    6413
-    4165
-    9324
-    4460
-     706
-     602
-    7845
-    7312
-     272
-    4679
-    9874
-    9086
-    9901
-    9287
-    6511
-    2022
-    4658
-    6939
-    6218
-     316
-    3700
-    9121
-    6567
-    6805
-    3631
-    6384
-    7810
-    5530
-    4282
-    8320
-    4463
-    9168
-    4363
-     697
-    8806
-    8019
-    3105
-    8928
-    1290
-    4145
-    3546
-    5313
-    8181
-    1042
-    7872
-    3780
-    8542
-    5181
-    4882
-    6072
-    2608
-    7095
-    7279
-    6465
-    4715
-    6507
-    4440
-    2034
-    9123
-    6914
-    1317
-    1604
-    5727
-    2412
-    1958
-    9104
-    6420
-    4702
-    7713
-    3425
-    2039
-    1102
-    5074
-    8962
-    8188
-    4975
-    3143
-    1228
-    5007
-    9441
-    7549
-     482
-    7914
-    1187
-     944
-    6470
-    1806
-    2283
-    3414
-    1359
-    7993
-    5903
-    3457
-    2570
-    8505
-    3254
-    7570
-    5764
-    7335
-    8978
-    8906
-    4015
-      91
-    9131
-    4514
-    7350
-    3073
-    5352
-    7420
-    6538
-    4273
-    9167
-    1789
-    2771
-    7778
-    1296
-    5640
-    1713
-    2220
-    2169
-    1554
-    3783
-    9694
-    6087
-    5384
-    6325
-    6184
-    4086
-    4528
-    7590
-    1469
-      58
-    8218
-    3539
-    3748
-    6361
-    2796
-    9183
-    6490
-    8517
-    9700
-    8783
-    3908
-    2426
-    7295
-    2157
-    9278
-    1254
-     279
-    2557
-    7214
-    5252
-    3870
-    6317
-    5825
-    6808
-    7917
-    8535
-    7662
-    6789
-    5855
-    9368
-    8895
-    4863
-    8109
-    6185
-    7507
-    1686
-    7194
-    6881
-    6857
-    3501
-    1962
-    4280
-     725
-    5580
-    4024
-    9899
-    4211
-    9399
-    1942
-    8386
-     354
-    1796
-    6502
-    2869
-    3656
-    7154
-    4677
-    2244
-    7437
-    6050
-    1120
-    2259
-    6055
-    1573
-    9827
-    5494
-    4270
-    2778
-    7611
-    6054
-    4769
-    9789
-    8167
-    6286
-    3183
-    2783
-    4847
-    7406
-    3393
-    9705
-    2753
-    4846
-    8612
-    4464
-    8982
-    4233
-    7372
-    4384
-    5392
-     591
-    6551
-    6838
-    2917
-    3355
-    8925
-    6130
-    7891
-    1082
-    2553
-    6613
-    9101
-     666
-     757
-    1304
-    6425
-    9074
-    6895
-    3665
-    1897
-    9663
-    7151
-    9517
-    7744
-     869
-    1514
-    4190
-    7386
-     831
-    5315
-    2497
-    5653
-    6049
-    8809
-    2573
-    7932
-     184
-    7050
-    4600
-    5078
-    9008
-    2747
-    4334
-    5650
-    6541
-    5870
-    2784
-     453
-     634
-    4443
-    2290
-    3534
-    3258
-    1240
-    2588
-     773
-    7213
-    1831
-    2889
-    9780
-    2366
-    6726
-    5242
-    9728
-    9330
-    3185
-    1722
-    8843
-    4162
-    2935
-    7034
-     515
-    4003
-    4556
-    8107
-    8597
-    3184
-    4006
-    3230
-    3923
-     966
-     715
-    7727
-    6555
-    9024
-    3465
-    2686
-    5800
-    1339
-     933
-     867
-    6437
-    6006
-     625
-    2153
-    4095
-    3681
-    2615
-    1034
-    8263
-    1368
-    9564
-    8981
-    5931
-    7202
-    3395
-    9595
-    4955
-    2617
-    9919
-    2582
-    2662
-      31
-    4944
-    5014
-     111
-    5025
-    2885
-    1919
-    3727
-    5349
-    6529
-    5639
-    2919
-    2333
-    1412
-    1955
-    6531
-    1556
-    8106
-    6526
-    3946
-    3243
-    6678
-    1560
-    6745
-      14
-    7404
-    5820
-    4787
-     763
-    1816
-     230
-    1609
-    7585
-    7688
-    3149
-    4779
-     941
-    4711
-    6031
-    1037
-    2068
-    4017
-    7686
-    5966
-    3650
-    3842
-    7774
-    9915
-    8446
-      43
-     418
-    5042
-    1164
-    5996
-    2678
-    1386
+    1539
+    1540
+    1541
+    1542
+    1543
+    1544
+    1545
+    1546
+    1547
+    1548
+    1549
+    1550
+    1551
+    1552
+    1553
+    1554
+    1555
+    1556
+    1557
+    1558
+    1559
+    1560
+    1561
+    1562
+    1563
+    1564
+    1565
+    1566
+    1567
+    1568
+    1569
+    1570
+    1571
+    1572
+    1573
+    1574
+    1575
+    1576
+    1577
+    1578
+    1579
+    1580
+    1581
+    1582
+    1583
+    1584
+    1585
+    1586
+    1587
+    1588
+    1589
+    1590
+    1591
+    1592
+    1593
+    1594
+    1595
+    1596
+    1597
+    1598
+    1599
+    1600
+    1601
+    1602
+    1603
+    1604
+    1605
+    1606
+    1607
     1608
-    2630
-    9239
-    8294
-    3229
-    2197
-    1066
-    9713
-    7830
-     607
-    7269
-    3114
-    5941
-    8966
-    3364
-    8269
-    1880
-    5635
-    7273
-    1753
-    6159
-    8624
-    1174
-    6867
-    8998
-    4046
-    5105
-    6475
-    9989
-     487
-    9281
-    3740
-    9014
-    5518
-    5977
-    2465
-     284
-    6534
-     521
-    8434
-    4508
-     568
-    9814
-    1390
-    7701
-     110
-    4761
-    7654
-    9289
-    7809
-    9326
-    3097
-    6429
-     844
+    1609
+    1610
+    1611
+    1612
+    1613
+    1614
+    1615
+    1616
+    1617
+    1618
+    1619
+    1620
+    1621
+    1622
+    1623
+    1624
+    1625
+    1626
+    1627
+    1628
+    1629
+    1630
+    1631
+    1632
+    1633
+    1634
+    1635
+    1636
+    1637
+    1638
+    1639
+    1640
+    1641
+    1642
     1643
-    1020
-    9541
-     397
-     347
-     605
-    1676
-    8958
-    5001
-    1808
-    2419
-    3523
-    1798
-    9845
-    4032
-    7246
-    4606
-    7530
-    6902
-     805
-    5400
-    9154
-    7351
-    3892
-    7024
-    8921
-    7599
-    1205
-    4948
-    5684
-    8691
-    4534
-    4618
-    7492
-    9769
-    5625
-    9796
-    8568
-     352
-    4227
-    4601
-    2430
-    5934
-    9438
-    4531
-    6825
-    9917
-    7263
-    5747
-    3048
-    5481
-    3334
-    1054
-    8565
-    6634
-    3789
-    1323
-    2108
-    8330
-    1395
-    7606
-    2376
-    8322
-    9489
-    6847
-     620
-    2956
-    6047
-    9391
-    2627
-    6452
-     356
-    4445
-    1875
-    9132
-    3308
-    8296
-    4920
-    3008
-    3686
-    8881
-    4069
+    1644
+    1645
+    1646
+    1647
+    1648
+    1649
+    1650
+    1651
+    1652
+    1653
+    1654
+    1655
+    1656
+    1657
+    1658
+    1659
     1660
-    8311
-    2741
-    3209
-    3563
-    3917
-    4301
-    4079
-    2963
-    2752
-    4936
-    3880
-    6370
-    1977
-    2457
-    8876
-    1827
-    9219
-    8463
-     965
-    2375
-    2132
-    1889
-    6614
-    2641
-    5980
-    6692
-     736
-    9519
-    3087
-    8183
-    7346
-    9070
-    7442
-    1791
-     359
-     698
-    7600
-    4834
-    3070
-    8547
-    8328
-    2253
-    8618
-    4976
-    5263
-    5550
-    7322
-    4642
-    2593
-    3826
-    7871
-    6699
-    4897
-    9627
-    1964
-    7865
-    5382
-    2216
-    3695
-    1291
+    1661
+    1662
+    1663
+    1664
+    1665
+    1666
+    1667
+    1668
+    1669
+    1670
+    1671
+    1672
+    1673
+    1674
+    1675
+    1676
+    1677
+    1678
+    1679
+    1680
     1681
-     282
-    6280
-    7079
-    3739
-    2716
-    8360
-    3689
-     964
-    6790
-    5786
-    5763
-    4853
-     170
-    3920
-    4360
-    4315
-    8550
-    5060
-    1570
-    8346
-     559
-     498
-    5888
-    2835
-    2177
-    5172
-    5729
-    6859
-    2628
-    7522
-    4719
-    5146
-    5573
-    2459
-    3572
-    9598
-    5211
-    8730
-    3235
-    6212
-    9811
-    5008
-    3373
-    4382
-    2228
-    6399
-    9090
-    3925
-     112
-    8049
-    5081
-    5398
-    8160
-    7173
-    5089
-     709
-    4341
-    5739
-    8336
-    2821
-    8339
-    1182
-    4214
-    9355
-    4559
-    8853
-    9551
-     219
-    5200
-    9103
-    8261
-    2999
-    4533
-    9970
-    3387
-    8044
-    1446
-     502
-    1474
-    2395
-     490
-    8541
-    1741
-    2700
-    2809
-    3512
-    6289
-    1321
-    6787
-    5507
-    7218
-    9982
-    6348
-    3907
-    9922
-    1233
-    9623
-    1575
-    7844
-    5551
-    2254
-    2373
-    5776
-    7816
-    9298
-    3252
-    2165
-    7969
-    4063
-    2653
-    1515
-    4544
-    2565
-    7573
-    2495
+    1682
+    1683
+    1684
+    1685
+    1686
+    1687
+    1688
+    1689
+    1690
+    1691
+    1692
+    1693
+    1694
+    1695
+    1696
+    1697
+    1698
+    1699
+    1700
+    1701
+    1702
+    1703
+    1704
+    1705
+    1706
+    1707
+    1708
+    1709
+    1710
+    1711
+    1712
+    1713
+    1714
+    1715
+    1716
+    1717
+    1718
+    1719
+    1720
+    1721
+    1722
+    1723
+    1724
+    1725
+    1726
+    1727
+    1728
+    1729
+    1730
+    1731
+    1732
+    1733
+    1734
+    1735
+    1736
+    1737
+    1738
+    1739
+    1740
+    1741
+    1742
+    1743
+    1744
+    1745
+    1746
+    1747
+    1748
+    1749
+    1750
+    1751
+    1752
+    1753
+    1754
+    1755
+    1756
+    1757
+    1758
+    1759
+    1760
+    1761
+    1762
+    1763
+    1764
+    1765
+    1766
+    1767
+    1768
+    1769
+    1770
+    1771
+    1772
+    1773
+    1774
+    1775
+    1776
+    1777
+    1778
+    1779
+    1780
+    1781
+    1782
+    1783
+    1784
+    1785
+    1786
+    1787
+    1788
+    1789
+    1790
+    1791
+    1792
+    1793
+    1794
+    1795
+    1796
+    1797
+    1798
+    1799
+    1800
+    1801
+    1802
+    1803
+    1804
+    1805
+    1806
+    1807
+    1808
+    1809
+    1810
+    1811
+    1812
+    1813
+    1814
+    1815
+    1816
+    1817
+    1818
+    1819
+    1820
+    1821
+    1822
+    1823
+    1824
+    1825
+    1826
+    1827
+    1828
+    1829
+    1830
+    1831
+    1832
+    1833
+    1834
+    1835
+    1836
+    1837
+    1838
+    1839
+    1840
+    1841
+    1842
+    1843
+    1844
+    1845
+    1846
+    1847
+    1848
+    1849
+    1850
+    1851
+    1852
+    1853
+    1854
+    1855
+    1856
+    1857
+    1858
+    1859
+    1860
+    1861
+    1862
+    1863
+    1864
+    1865
+    1866
+    1867
+    1868
+    1869
+    1870
+    1871
+    1872
+    1873
+    1874
+    1875
+    1876
+    1877
+    1878
+    1879
+    1880
+    1881
+    1882
+    1883
+    1884
+    1885
+    1886
+    1887
+    1888
+    1889
+    1890
+    1891
+    1892
+    1893
+    1894
+    1895
+    1896
+    1897
+    1898
+    1899
+    1900
+    1901
+    1902
+    1903
+    1904
+    1905
+    1906
+    1907
+    1908
+    1909
+    1910
+    1911
+    1912
+    1913
+    1914
+    1915
+    1916
+    1917
+    1918
+    1919
+    1920
+    1921
+    1922
+    1923
+    1924
+    1925
+    1926
+    1927
+    1928
+    1929
     1930
-    5940
-    8563
-    9046
-    8142
-    7721
-    3795
-    5229
-    6741
-    4838
-    7186
-    9534
-    1443
-    6606
-    6044
-    2128
-    4224
-     949
-    7681
+    1931
+    1932
+    1933
+    1934
+    1935
+    1936
+    1937
+    1938
+    1939
+    1940
+    1941
+    1942
+    1943
+    1944
+    1945
+    1946
+    1947
+    1948
+    1949
+    1950
+    1951
+    1952
+    1953
+    1954
+    1955
+    1956
+    1957
+    1958
+    1959
+    1960
+    1961
+    1962
+    1963
+    1964
+    1965
+    1966
+    1967
+    1968
+    1969
+    1970
+    1971
+    1972
+    1973
+    1974
+    1975
+    1976
+    1977
+    1978
+    1979
+    1980
+    1981
+    1982
+    1983
+    1984
+    1985
+    1986
+    1987
+    1988
     1989
-    5022
-    8567
-    6781
-    9044
-    9973
-    3204
-    6639
-    6464
-    1294
-    9328
-    7100
-    1734
-    9497
-    9935
-    5569
-    3354
-    9432
-    5721
-    1269
-    3186
-    9557
-    6029
-    8410
-    3080
-    6917
-    9929
-     462
-    2816
-    6561
-    1764
-    2900
-    2995
-    9660
-    2645
-    8017
-    7060
-    8789
-    9561
-    8725
-    8060
-    6667
-    4019
-    3153
-    8942
-    2603
-    3323
-    9806
-    6282
-    6208
-    7188
-    6134
-    3155
-    6926
-     690
-    2258
-    2634
-    6572
-     503
-    2602
-    2979
-    8639
-    6768
-     550
-    9762
-    4060
-    6483
-    5769
-    4247
-     495
+    1990
+    1991
+    1992
+    1993
+    1994
+    1995
+    1996
+    1997
+    1998
+    1999
+    2000
+    2001
+    2002
+    2003
+    2004
+    2005
+    2006
+    2007
+    2008
+    2009
+    2010
+    2011
+    2012
+    2013
+    2014
+    2015
+    2016
+    2017
+    2018
+    2019
+    2020
+    2021
+    2022
+    2023
+    2024
+    2025
+    2026
+    2027
+    2028
+    2029
+    2030
+    2031
+    2032
+    2033
+    2034
+    2035
+    2036
+    2037
+    2038
+    2039
+    2040
+    2041
+    2042
+    2043
+    2044
+    2045
+    2046
+    2047
+    2048
+    2049
+    2050
+    2051
+    2052
+    2053
+    2054
+    2055
+    2056
+    2057
+    2058
+    2059
+    2060
+    2061
+    2062
+    2063
+    2064
+    2065
+    2066
+    2067
+    2068
+    2069
+    2070
+    2071
+    2072
+    2073
+    2074
+    2075
+    2076
+    2077
+    2078
+    2079
+    2080
+    2081
+    2082
+    2083
+    2084
+    2085
+    2086
+    2087
+    2088
+    2089
+    2090
+    2091
+    2092
+    2093
+    2094
+    2095
+    2096
+    2097
+    2098
+    2099
+    2100
+    2101
+    2102
+    2103
+    2104
+    2105
+    2106
+    2107
+    2108
+    2109
+    2110
+    2111
+    2112
+    2113
+    2114
+    2115
+    2116
+    2117
+    2118
+    2119
+    2120
+    2121
+    2122
+    2123
+    2124
+    2125
+    2126
+    2127
+    2128
+    2129
+    2130
+    2131
+    2132
+    2133
+    2134
+    2135
+    2136
+    2137
+    2138
+    2139
+    2140
+    2141
+    2142
+    2143
+    2144
+    2145
+    2146
+    2147
+    2148
+    2149
+    2150
+    2151
+    2152
+    2153
+    2154
+    2155
+    2156
+    2157
+    2158
+    2159
+    2160
+    2161
+    2162
+    2163
+    2164
+    2165
+    2166
+    2167
+    2168
+    2169
+    2170
+    2171
+    2172
+    2173
+    2174
+    2175
+    2176
+    2177
+    2178
+    2179
+    2180
+    2181
+    2182
+    2183
+    2184
+    2185
+    2186
+    2187
+    2188
+    2189
+    2190
+    2191
+    2192
+    2193
+    2194
+    2195
+    2196
+    2197
+    2198
+    2199
+    2200
+    2201
+    2202
+    2203
+    2204
+    2205
+    2206
+    2207
+    2208
+    2209
+    2210
+    2211
+    2212
+    2213
+    2214
+    2215
+    2216
+    2217
+    2218
+    2219
+    2220
+    2221
+    2222
+    2223
+    2224
+    2225
+    2226
+    2227
+    2228
+    2229
+    2230
+    2231
+    2232
+    2233
+    2234
+    2235
+    2236
+    2237
+    2238
+    2239
+    2240
+    2241
+    2242
     2243
-    1354
-    1784
-    8801
-    9379
-    6537
-     852
-    1456
-    4089
-    4617
-    5037
-    8427
-    9010
-     335
-    1176
-    1531
-    6676
-     986
-     510
-    8759
-    7001
-    1475
-    8147
-     385
-    7239
-    8503
-    7505
-    4098
-    8796
-    8244
-    6418
-    4103
-    4040
-    9969
-    4593
-    3513
-     197
-    7682
-    2699
-    7051
-    1237
-    8021
-    4067
-    9603
+    2244
+    2245
+    2246
+    2247
+    2248
+    2249
+    2250
+    2251
+    2252
+    2253
+    2254
+    2255
+    2256
+    2257
+    2258
+    2259
+    2260
+    2261
+    2262
+    2263
+    2264
+    2265
+    2266
+    2267
+    2268
+    2269
+    2270
+    2271
+    2272
+    2273
+    2274
+    2275
+    2276
+    2277
+    2278
+    2279
+    2280
+    2281
+    2282
+    2283
+    2284
+    2285
+    2286
+    2287
+    2288
+    2289
+    2290
+    2291
+    2292
+    2293
+    2294
+    2295
+    2296
+    2297
+    2298
+    2299
+    2300
+    2301
     2302
-    9804
-    3443
-    7571
-    4558
-    3293
-     891
-    5003
-    9403
-    8585
+    2303
+    2304
+    2305
+    2306
+    2307
+    2308
+    2309
+    2310
+    2311
+    2312
+    2313
+    2314
+    2315
+    2316
+    2317
+    2318
+    2319
+    2320
+    2321
+    2322
+    2323
+    2324
+    2325
+    2326
+    2327
+    2328
+    2329
+    2330
+    2331
+    2332
+    2333
+    2334
+    2335
+    2336
+    2337
+    2338
+    2339
+    2340
+    2341
+    2342
+    2343
+    2344
+    2345
+    2346
+    2347
+    2348
+    2349
+    2350
+    2351
+    2352
+    2353
+    2354
+    2355
+    2356
+    2357
+    2358
+    2359
+    2360
+    2361
+    2362
+    2363
+    2364
+    2365
+    2366
+    2367
+    2368
+    2369
+    2370
+    2371
+    2372
+    2373
+    2374
+    2375
+    2376
+    2377
+    2378
+    2379
+    2380
+    2381
+    2382
+    2383
+    2384
+    2385
+    2386
+    2387
+    2388
+    2389
+    2390
+    2391
+    2392
+    2393
+    2394
+    2395
+    2396
+    2397
+    2398
+    2399
+    2400
+    2401
+    2402
+    2403
+    2404
+    2405
+    2406
+    2407
+    2408
+    2409
+    2410
+    2411
+    2412
+    2413
+    2414
+    2415
+    2416
+    2417
+    2418
+    2419
+    2420
+    2421
+    2422
+    2423
+    2424
+    2425
+    2426
+    2427
+    2428
+    2429
+    2430
+    2431
+    2432
+    2433
+    2434
+    2435
+    2436
+    2437
+    2438
+    2439
+    2440
+    2441
+    2442
+    2443
+    2444
+    2445
+    2446
+    2447
+    2448
+    2449
+    2450
+    2451
+    2452
+    2453
+    2454
+    2455
+    2456
+    2457
+    2458
+    2459
+    2460
+    2461
+    2462
+    2463
+    2464
+    2465
+    2466
+    2467
+    2468
+    2469
+    2470
+    2471
+    2472
+    2473
+    2474
+    2475
+    2476
+    2477
+    2478
+    2479
+    2480
+    2481
+    2482
+    2483
+    2484
+    2485
+    2486
+    2487
+    2488
+    2489
+    2490
+    2491
+    2492
+    2493
+    2494
+    2495
+    2496
+    2497
+    2498
+    2499
+    2500
+    2501
+    2502
+    2503
+    2504
+    2505
+    2506
+    2507
+    2508
+    2509
+    2510
+    2511
+    2512
+    2513
+    2514
+    2515
+    2516
+    2517
+    2518
+    2519
+    2520
+    2521
+    2522
+    2523
+    2524
+    2525
+    2526
+    2527
     2528
-    2160
-    7614
-    5326
-     919
-    7193
-    8959
-    3494
-    8036
-    4826
-    7892
-    7740
-     884
-    2295
-    9338
-    7132
-    5366
-    1926
-    7668
-    7301
-    2233
-    8599
-    5658
-      19
-    5900
-    8377
-    6285
-    9369
-    6778
-    4739
-    4199
-    8154
-    1950
-    1255
-    6327
-     484
-    5502
+    2529
+    2530
+    2531
+    2532
+    2533
+    2534
+    2535
+    2536
+    2537
+    2538
+    2539
+    2540
+    2541
+    2542
+    2543
+    2544
+    2545
+    2546
+    2547
+    2548
+    2549
+    2550
+    2551
+    2552
+    2553
+    2554
+    2555
+    2556
+    2557
+    2558
+    2559
+    2560
+    2561
+    2562
+    2563
+    2564
+    2565
+    2566
+    2567
+    2568
+    2569
+    2570
+    2571
+    2572
+    2573
+    2574
+    2575
+    2576
+    2577
+    2578
+    2579
+    2580
+    2581
+    2582
+    2583
+    2584
+    2585
+    2586
+    2587
+    2588
+    2589
+    2590
+    2591
+    2592
+    2593
+    2594
     2595
-    7333
-    1383
-    1352
-    9429
-    7468
-    8692
-    4867
-    3300
-    5123
-    4781
-    6946
-    8920
-    7397
-     854
-    2910
-    2542
-    3519
-    3159
-    5850
-    8635
-    3091
-    7593
-    8047
-    9130
-    7855
-    6580
-    8556
-    7481
-    8022
-    4586
-    1142
-    7254
-    1994
-    1590
+    2596
     2597
-    8237
-    2485
-    3983
-    8662
-    9736
-    5395
-    5298
-     776
-    1040
-    1695
-    6058
-    7962
-    2368
-    4987
-    4022
-    4634
-    4102
-    6548
-    7435
-    8462
-     761
-    6751
-    2435
-    4241
-    1731
+    2598
+    2599
+    2600
+    2601
+    2602
+    2603
+    2604
+    2605
+    2606
+    2607
+    2608
+    2609
+    2610
+    2611
+    2612
+    2613
+    2614
+    2615
+    2616
+    2617
+    2618
+    2619
+    2620
+    2621
+    2622
+    2623
+    2624
+    2625
+    2626
+    2627
+    2628
+    2629
+    2630
+    2631
+    2632
+    2633
+    2634
+    2635
+    2636
+    2637
+    2638
+    2639
+    2640
+    2641
+    2642
+    2643
+    2644
+    2645
+    2646
+    2647
+    2648
+    2649
+    2650
+    2651
+    2652
+    2653


<TRUNCATED>


[3/3] incubator-hawq git commit: HAWQ-1603. Add new hook API

Posted by in...@apache.org.
HAWQ-1603. Add new hook API


Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/80eaf448
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/80eaf448
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/80eaf448

Branch: refs/heads/master
Commit: 80eaf448f01c9422f1d7631527026804f954b252
Parents: f68cac7
Author: Shujie Zhang <sh...@Shujie-Zhangs-MacBook-Pro.local>
Authored: Wed Apr 4 16:10:07 2018 +0800
Committer: interma <in...@outlook.com>
Committed: Thu Apr 19 18:27:54 2018 +0800

----------------------------------------------------------------------
 contrib/vexecutor/execVQual.c                  |   574 +-
 contrib/vexecutor/execVQual.h                  |     7 +-
 contrib/vexecutor/execVScan.c                  |    43 +-
 contrib/vexecutor/vadt.c                       |    66 +-
 contrib/vexecutor/vexecutor.c                  |    83 +-
 contrib/vexecutor/vexecutor.h                  |     1 +
 src/backend/executor/execMain.c                |     5 +
 src/backend/executor/execProcnode.c            |    20 +-
 src/backend/executor/execQual.c                |    10 +
 src/include/executor/executor.h                |     4 +-
 src/test/feature/vexecutor/ans/.DS_Store       |   Bin 0 -> 6148 bytes
 src/test/feature/vexecutor/ans/projandqual.ans |    40 +
 src/test/feature/vexecutor/ans/scan1.ans       | 19743 +++++++++---------
 src/test/feature/vexecutor/sql/projandqual.sql |     4 +
 src/test/feature/vexecutor/sql/scan1.sql       |     2 +-
 src/test/feature/vexecutor/test_vexecutor.cpp  |    19 +
 16 files changed, 10657 insertions(+), 9964 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/contrib/vexecutor/execVQual.c
----------------------------------------------------------------------
diff --git a/contrib/vexecutor/execVQual.c b/contrib/vexecutor/execVQual.c
index c4ccf9e..83e298a 100644
--- a/contrib/vexecutor/execVQual.c
+++ b/contrib/vexecutor/execVQual.c
@@ -16,8 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+#include "postgres.h"
+#include "utils/builtins.h"
 #include "execVQual.h"
-
+static bool
+ExecVTargetList(List *targetlist,
+			   ExprContext *econtext,
+			   TupleTableSlot *slot,
+			   ExprDoneCond *itemIsDone,
+			   ExprDoneCond *isDone);
 /*
  * ExecVariableList
  *		Evaluates a simple-Variable-list projection.
@@ -26,12 +33,12 @@
  */
 static void
 ExecVecVariableList(ProjectionInfo *projInfo,
-                 Datum *values)
+                 Datum values)
 {
     ExprContext *econtext = projInfo->pi_exprContext;
     int		   *varSlotOffsets = projInfo->pi_varSlotOffsets;
     int		   *varNumbers = projInfo->pi_varNumbers;
-    TupleBatch  tb = (TupleBatch) values;
+    TupleBatch  tb = (TupleBatch) DatumGetPointer(values);
     int			i;
     tb->ncols = list_length(projInfo->pi_targetlist);
 
@@ -81,14 +88,12 @@ ExecVProject(ProjectionInfo *projInfo, ExprDoneCond *isDone)
     }
     else
     {
-        elog(FATAL,"does not support expression in projection stmt");
-       // if (ExecTargetList(projInfo->pi_targetlist,
-       //                    projInfo->pi_exprContext,
-       //                    slot_get_values(slot),
-       //                    slot_get_isnull(slot),
-       //                    (ExprDoneCond *) projInfo->pi_itemIsDone,
-       //                    isDone))
-       //     ExecStoreVirtualTuple(slot);
+       if (ExecVTargetList(projInfo->pi_targetlist,
+                           projInfo->pi_exprContext,
+                           slot,
+                           (ExprDoneCond *) projInfo->pi_itemIsDone,
+                           isDone))
+            ExecStoreVirtualTuple(slot);
     }
 
     return slot;
@@ -104,7 +109,7 @@ VirtualNodeProc(ScanState* state,TupleTableSlot *slot){
     if(TupIsNull(slot) )
         return false;
 
-    TupleBatch tb = slot->PRIVATE_tb;
+    TupleBatch tb = (TupleBatch)DatumGetPointer(slot->PRIVATE_tb);
     ExecClearTuple(slot);
 
     while (tb->skip[tb->iter] && tb->iter < tb->nrows)
@@ -123,3 +128,548 @@ VirtualNodeProc(ScanState* state,TupleTableSlot *slot){
     ExecStoreVirtualTuple(slot);
     return true;
 }
+
+/*
+ * get values from vectorized tuple slot
+ * copy from src/backend/executor/execQual.c
+ */
+static Datum
+VExecEvalScalarVar(ExprState *exprstate, ExprContext *econtext,
+			bool *isNull, ExprDoneCond *isDone)
+{
+	Var		   *variable = (Var *) exprstate->expr;
+	TupleTableSlot *slot;
+	AttrNumber	attnum;
+	TupleBatch tb;
+
+	if (isDone)
+		*isDone = ExprSingleResult;
+
+	Assert(econtext->ecxt_scantuple != NULL || econtext->ecxt_innertuple != NULL || econtext->ecxt_outertuple != NULL);
+	/*
+	 * Get the input slot and attribute number we want
+	 *
+	 * The asserts check that references to system attributes only appear at
+	 * the level of a relation scan; at higher levels, system attributes must
+	 * be treated as ordinary variables (since we no longer have access to the
+	 * original tuple).
+	 */
+	attnum = variable->varattno;
+
+	switch (variable->varno)
+	{
+		case INNER:				/* get the tuple from the inner node */
+			slot = econtext->ecxt_innertuple;
+			Assert(attnum > 0);
+			break;
+
+		case OUTER:				/* get the tuple from the outer node */
+			slot = econtext->ecxt_outertuple;
+			Assert(attnum > 0);
+			break;
+
+		default:				/* get the tuple from the relation being
+								 * scanned */
+			slot = econtext->ecxt_scantuple;
+			break;
+	}
+
+	/* isNull is a single value, it can not be used when data is vectorized */
+	*isNull = false;
+
+	/* Fetch the value from the slot */
+	Assert(NULL != slot);
+	tb = (TupleBatch )slot->PRIVATE_tb;
+
+	Assert(NULL != tb);
+
+	return PointerGetDatum(tb->datagroup[attnum - 1]);
+}
+
+
+/*
+ * get values from vectorized tuple slot
+ * copy from src/backend/executor/execQual.c
+ */
+static Datum
+VExecEvalVar(ExprState *exprstate, ExprContext *econtext,
+			bool *isNull, ExprDoneCond *isDone)
+{
+	Var		   *variable = (Var *) exprstate->expr;
+	TupleTableSlot *slot;
+	AttrNumber	attnum;
+
+	if (isDone)
+		*isDone = ExprSingleResult;
+
+	Assert(econtext->ecxt_scantuple != NULL || econtext->ecxt_innertuple != NULL || econtext->ecxt_outertuple != NULL);
+	/*
+	 * Get the input slot and attribute number we want
+	 *
+	 * The asserts check that references to system attributes only appear at
+	 * the level of a relation scan; at higher levels, system attributes must
+	 * be treated as ordinary variables (since we no longer have access to the
+	 * original tuple).
+	 */
+	attnum = variable->varattno;
+
+	switch (variable->varno)
+	{
+		case INNER:				/* get the tuple from the inner node */
+			slot = econtext->ecxt_innertuple;
+			Assert(attnum > 0);
+			break;
+
+		case OUTER:				/* get the tuple from the outer node */
+			slot = econtext->ecxt_outertuple;
+			Assert(attnum > 0);
+			break;
+
+		default:				/* get the tuple from the relation being
+								 * scanned */
+			slot = econtext->ecxt_scantuple;
+			break;
+	}
+
+	Assert(NULL != slot);
+
+	if (attnum != InvalidAttrNumber)
+	{
+		TupleBatch tb;
+		/*
+		 * Scalar variable case.
+		 *
+		 * If it's a user attribute, check validity (bogus system attnums will
+		 * be caught inside slot_getattr).  What we have to check for here
+		 * is the possibility of an attribute having been changed in type
+		 * since the plan tree was created.  Ideally the plan would get
+		 * invalidated and not re-used, but until that day arrives, we need
+		 * defenses.  Fortunately it's sufficient to check once on the first
+		 * time through.
+		 *
+		 * Note: we allow a reference to a dropped attribute.  slot_getattr
+		 * will force a NULL result in such cases.
+		 *
+		 * Note: ideally we'd check typmod as well as typid, but that seems
+		 * impractical at the moment: in many cases the tupdesc will have
+		 * been generated by ExecTypeFromTL(), and that can't guarantee to
+		 * generate an accurate typmod in all cases, because some expression
+		 * node types don't carry typmod.
+		 */
+		if (attnum > 0)
+		{
+			TupleDesc	slot_tupdesc = slot->tts_tupleDescriptor;
+			Form_pg_attribute attr;
+
+			if (attnum > slot_tupdesc->natts)	/* should never happen */
+				elog(ERROR, "attribute number %d exceeds number of columns %d",
+					 attnum, slot_tupdesc->natts);
+
+			attr = slot_tupdesc->attrs[attnum - 1];
+
+			/* can't check type if dropped, since atttypid is probably 0 */
+			if (!attr->attisdropped)
+			{
+				if (variable->vartype != attr->atttypid &&
+					GetNType(variable->vartype) != attr->atttypid)
+					ereport(ERROR,
+							(errmsg("attribute %d has wrong type", attnum),
+							 errdetail("Table has type %s, but query expects %s.",
+									   format_type_be(attr->atttypid),
+									   format_type_be(variable->vartype))));
+			}
+		}
+
+		/* Skip the checking on future executions of node */
+		exprstate->evalfunc = VExecEvalScalarVar;
+
+		/* isNull is a single value, it can not be used when data is vectorized */
+		*isNull = false;
+
+		/* Fetch the value from the slot */
+		tb = (TupleBatch )slot->PRIVATE_tb;
+
+		Assert(NULL != tb);
+		return PointerGetDatum(tb->datagroup[attnum - 1]);
+	}
+	else
+	{
+		/* NOT support so far */
+		Assert(false);
+	}
+
+	return PointerGetDatum(NULL);
+}
+
+
+/* ----------------------------------------------------------------
+ *		VExecEvalNot
+ *		VExecEvalOr
+ *		VExecEvalAnd
+ *
+ * copy from src/backend/executor/execQual.c
+ *
+ *		Evaluate boolean expressions, with appropriate short-circuiting.
+ *
+ *		The query planner reformulates clause expressions in the
+ *		qualification to conjunctive normal form.  If we ever get
+ *		an AND to evaluate, we can be sure that it's not a top-level
+ *		clause in the qualification, but appears lower (as a function
+ *		argument, for example), or in the target list.	Not that you
+ *		need to know this, mind you...
+ * ----------------------------------------------------------------
+ */
+static Datum
+VExecEvalNot(BoolExprState *notclause, ExprContext *econtext,
+			bool *isNull, ExprDoneCond *isDone)
+{
+	ExprState  *clause = linitial(notclause->args);
+	Datum		expr_value;
+	vbool		*ret;
+	int			i;
+
+	if (isDone)
+		*isDone = ExprSingleResult;
+
+	expr_value = ExecEvalExpr(clause, econtext, isNull, NULL);
+
+	ret = (vbool*)DatumGetPointer(expr_value);
+	for(i = 0; i < ret->header.dim; i++)
+	{
+		if(!ret->header.isnull[i])
+			ret->values[i] = !ret->values[i];
+	}
+
+	/*
+	 * evaluation of 'not' is simple.. expr is false, then return 'true' and
+	 * vice versa.
+	 */
+	return PointerGetDatum(ret);
+}
+
+/* ----------------------------------------------------------------
+ *		ExecEvalOr
+ * ----------------------------------------------------------------
+ */
+static Datum
+VExecEvalOr(BoolExprState *orExpr, ExprContext *econtext,
+		   bool *isNull, ExprDoneCond *isDone)
+{
+	List	   *clauses = orExpr->args;
+	ListCell   *clause;
+	vbool	*res = NULL;
+	vbool	*next = 	NULL;
+	bool		skip = true;
+	int 		i = 0;
+
+	if (isDone)
+		*isDone = ExprSingleResult;
+
+	/*
+	 * If any of the clauses is TRUE, the OR result is TRUE regardless of the
+	 * states of the rest of the clauses, so we can stop evaluating and return
+	 * TRUE immediately.  If none are TRUE and one or more is NULL, we return
+	 * NULL; otherwise we return FALSE.  This makes sense when you interpret
+	 * NULL as "don't know": if we have a TRUE then the OR is TRUE even if we
+	 * aren't sure about some of the other inputs. If all the known inputs are
+	 * FALSE, but we have one or more "don't knows", then we have to report
+	 * that we "don't know" what the OR's result should be --- perhaps one of
+	 * the "don't knows" would have been TRUE if we'd known its value.  Only
+	 * when all the inputs are known to be FALSE can we state confidently that
+	 * the OR's result is FALSE.
+	 */
+	foreach(clause, clauses)
+	{
+		ExprState  *clausestate = (ExprState *) lfirst(clause);
+		Datum		clause_value;
+
+		/*
+		 * to check if all the values is true, then skip to evaluate some
+		 * expressions
+		 */
+		skip = true;
+
+		clause_value = ExecEvalExpr(clausestate, econtext, isNull, NULL);
+
+		if(NULL == res)
+		{
+			res = DatumGetPointer(clause_value);
+			Assert(NULL != res->header.isnull);
+			for(i = 0; i < res->header.dim; i++)
+			{
+				if(res->header.isnull[i] ||
+					!res->values[i])
+				{
+					skip = false;
+					break;
+				}
+			}
+		}
+		else
+		{
+			next = DatumGetPointer(clause_value);
+			Assert(NULL != res->header.isnull && NULL != next->header.isnull);
+			for(i = 0; i < res->header.dim; i++)
+			{
+				res->header.isnull[i] =
+						(res->header.isnull[i] || next->header.isnull[i]);
+				res->values[i] = (res->values[i] || next->values[i]);
+				if(skip && (res->header.isnull[i] || !res->values[i]))
+					skip = false;
+			}
+		}
+
+		if(skip)
+		{
+			*isNull = false;
+			return PointerGetDatum(res);
+		}
+	}
+
+	*isNull = false;
+	return PointerGetDatum(res);
+}
+
+static Datum
+VExecEvalAndInternal(List* clauses, ExprContext *econtext,
+			bool *isNull, ExprDoneCond *isDone)
+{
+	ListCell   *clause;
+	vbool	*res = NULL;
+	vbool	*next = 	NULL;
+	bool		skip = true;
+	int 		i = 0;
+
+	if (isDone)
+		*isDone = ExprSingleResult;
+
+	/*
+	 * If any of the clauses is FALSE, the AND result is FALSE regardless of
+	 * the states of the rest of the clauses, so we can stop evaluating and
+	 * return FALSE immediately.  If none are FALSE and one or more is NULL,
+	 * we return NULL; otherwise we return TRUE.  This makes sense when you
+	 * interpret NULL as "don't know", using the same sort of reasoning as for
+	 * OR, above.
+	 */
+
+	foreach(clause, clauses)
+	{
+		ExprState  *clausestate = (ExprState *) lfirst(clause);
+		Datum		clause_value;
+
+		/*
+		 * to check if all the values is false, then skip to evaluate some
+		 * expressions
+		 */
+		skip = true;
+
+		clause_value = ExecEvalExpr(clausestate, econtext, isNull, NULL);
+
+		if(NULL == res)
+		{
+			res = DatumGetPointer(clause_value);
+			Assert(NULL != res->header.isnull);
+			for(i = 0; i < res->header.dim; i++)
+			{
+				if(res->header.isnull[i] || res->values[i])
+				{
+					skip = false;
+					break;
+				}
+			}
+		}
+		else
+		{
+			next = DatumGetPointer(clause_value);
+			Assert(NULL != res->header.isnull && NULL != next->header.isnull);
+			for(i = 0; i < res->header.dim; i++)
+			{
+				res->header.isnull[i] =
+						(res->header.isnull[i] || next->header.isnull[i]);
+				res->values[i] = (res->values[i] && next->values[i]);
+				if(skip && (res->header.isnull[i] || res->values[i]))
+					skip = false;
+			}
+		}
+
+		if(skip)
+		{
+			*isNull = false;
+			return PointerGetDatum(res);
+		}
+	}
+
+	*isNull = false;
+	return PointerGetDatum(res);
+}
+
+/* ----------------------------------------------------------------
+ *		ExecEvalAnd
+ * ----------------------------------------------------------------
+ */
+static Datum
+VExecEvalAnd(BoolExprState *andExpr, ExprContext *econtext,
+			bool *isNull, ExprDoneCond *isDone)
+{
+	return VExecEvalAndInternal(andExpr->args, econtext, isNull, isDone);
+}
+
+/*
+ * Init the vectorized expressions
+ */
+ExprState *
+VExecInitExpr(Expr *node, PlanState *parent)
+{
+	ExprState *state = NULL;
+
+	/*
+	 * Because Var is the leaf node of the expression tree, it have to be
+	 * refactored first, otherwise the all call stack should be refactored.
+	 */
+	switch (nodeTag(node))
+	{
+		case T_Var:
+			state = (ExprState *) makeNode(ExprState);
+			state->evalfunc = VExecEvalVar;
+			break;
+		case T_BoolExpr:
+			{
+				BoolExpr   *boolexpr = (BoolExpr *) node;
+				BoolExprState *bstate = makeNode(BoolExprState);
+
+				switch (boolexpr->boolop)
+				{
+					case AND_EXPR:
+						bstate->xprstate.evalfunc = (ExprStateEvalFunc) VExecEvalAnd;
+						break;
+					case OR_EXPR:
+						bstate->xprstate.evalfunc = (ExprStateEvalFunc) VExecEvalOr;
+						break;
+					case NOT_EXPR:
+						bstate->xprstate.evalfunc = (ExprStateEvalFunc) VExecEvalNot;
+						break;
+					default:
+						elog(ERROR, "unrecognized boolop: %d",
+							 (int) boolexpr->boolop);
+						break;
+				}
+				bstate->args = (List *)
+					ExecInitExpr((Expr *) boolexpr->args, parent);
+				state = (ExprState *) bstate;
+			}
+			break;
+
+		/*TODO: More and more expressions should be vectorized */
+		default:
+			break;
+	}
+
+	/* Common code for all state-node types */
+	if(NULL != state)
+		state->expr = node;
+
+	return state;
+}
+
+/* ----------------------------------------------------------------
+ *	copy from src/backend/executor/execQual.c
+ *
+ * NOTE:resultForNull do not used now, we can process it when call the
+ * ExecVQual.
+ * ----------------------------------------------------------------
+ */
+vbool*
+ExecVQual(List *qual, ExprContext *econtext, bool resultForNull)
+{
+	vbool *result;
+	MemoryContext oldContext;
+	bool	 isNull;
+
+	/*
+	 * debugging stuff
+	 */
+	EV_printf("ExecQual: qual is ");
+	EV_nodeDisplay(qual);
+	EV_printf("\n");
+
+	/*
+	 * Run in short-lived per-tuple context while computing expressions.
+	 */
+	oldContext = MemoryContextSwitchTo(econtext->ecxt_per_tuple_memory);
+
+	result = (vbool*)DatumGetPointer(VExecEvalAndInternal(qual, econtext, &isNull, NULL));
+
+	MemoryContextSwitchTo(oldContext);
+
+	return result;
+}
+
+/*
+ * copy from src/backend/executor/ExecQual.c
+ * ExecTargetList
+ *		Evaluates a targetlist with respect to the given
+ *		expression context.  Returns TRUE if we were able to create
+ *		a result, FALSE if we have exhausted a set-valued expression.
+ *
+ * Results are stored into the passed values and isnull arrays.
+ * The caller must provide an itemIsDone array that persists across calls.
+ *
+ * As with ExecEvalExpr, the caller should pass isDone = NULL if not
+ * prepared to deal with sets of result tuples.  Otherwise, a return
+ * of *isDone = ExprMultipleResult signifies a set element, and a return
+ * of *isDone = ExprEndResult signifies end of the set of tuple.
+ */
+static bool
+ExecVTargetList(List *targetlist,
+			   ExprContext *econtext,
+			   TupleTableSlot *slot,
+			   ExprDoneCond *itemIsDone,
+			   ExprDoneCond *isDone)
+{
+	MemoryContext oldContext;
+	ListCell   *tl;
+	TupleBatch tb;
+	bool isnull;
+
+	Assert(NULL != slot);
+
+	tb = (TupleBatch)DatumGetPointer(slot->PRIVATE_tb);
+
+	Assert(NULL != tb);
+
+	tb->ncols = list_length(targetlist);
+
+	/*
+	 * Run in short-lived per-tuple context while computing expressions.
+	 */
+	oldContext = MemoryContextSwitchTo(econtext->ecxt_per_tuple_memory);
+
+	/*
+	 * evaluate all the expressions in the target list
+	 */
+	if (isDone)
+		*isDone = ExprSingleResult;		/* until proven otherwise */
+
+	foreach(tl, targetlist)
+	{
+		GenericExprState *gstate = (GenericExprState *) lfirst(tl);
+		TargetEntry *tle = (TargetEntry *) gstate->xprstate.expr;
+		AttrNumber	resind = tle->resno - 1;
+
+		tb->datagroup[resind] = ExecEvalExpr(gstate->arg,
+									  econtext,
+									  &isnull,
+									  &itemIsDone[resind]);
+
+		if (itemIsDone[resind] != ExprSingleResult)
+		{
+			/*TODO: DO NOT SUPPORT SO FAR*/
+			elog(ERROR, "Only support single result so far.");
+		}
+	}
+
+	/* Report success */
+	MemoryContextSwitchTo(oldContext);
+
+	return true;
+}

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/contrib/vexecutor/execVQual.h
----------------------------------------------------------------------
diff --git a/contrib/vexecutor/execVQual.h b/contrib/vexecutor/execVQual.h
index fb35789..01113dc 100644
--- a/contrib/vexecutor/execVQual.h
+++ b/contrib/vexecutor/execVQual.h
@@ -31,10 +31,13 @@
 extern TupleTableSlot *
 ExecVProject(ProjectionInfo *projInfo, ExprDoneCond *isDone);
 
-extern bool
-ExecVQual(List *qual, ExprContext *econtext);
+extern vbool*
+ExecVQual(List *qual, ExprContext *econtext, bool resultForNull);
 
 extern bool
 VirtualNodeProc(ScanState* state,TupleTableSlot *slot);
 
+extern ExprState *
+VExecInitExpr(Expr *node, PlanState *parent);
+
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/contrib/vexecutor/execVScan.c
----------------------------------------------------------------------
diff --git a/contrib/vexecutor/execVScan.c b/contrib/vexecutor/execVScan.c
index 8779e14..deb2724 100644
--- a/contrib/vexecutor/execVScan.c
+++ b/contrib/vexecutor/execVScan.c
@@ -69,16 +69,24 @@ TupleTableSlot *ExecTableVScanVirtualLayer(ScanState *scanState)
     VectorizedState* pvs = vs->parent->vectorized;
 
     if(pvs->vectorized)
-        return ExecVScan(scanState,getVScanMethod(scanState->tableType)->accessMethod);
+        return ExecTableVScan(scanState);
     else
     {
         TupleTableSlot* slot = scanState->ps.ps_ProjInfo ? scanState->ps.ps_ResultTupleSlot : scanState->ss_ScanTupleSlot;
-        bool succ = VirtualNodeProc(scanState,slot);
-
-        if(!succ)
+        while(1)
         {
-            slot = ExecTableVScan(scanState);
-            VirtualNodeProc(scanState,slot);
+            bool succ = VirtualNodeProc(scanState,slot);
+
+            if(!succ)
+            {
+                slot = ExecTableVScan(scanState);
+                if(TupIsNull(slot))
+                    break;
+                else
+                    continue;
+            }
+
+            break;
         }
 
         return slot;
@@ -112,6 +120,7 @@ ExecVScan(ScanState *node, ExecScanAccessMtd accessMtd)
     ExprContext *econtext;
     List	   *qual;
     ProjectionInfo *projInfo;
+    vbool *skip = NULL;
 
     /*
      * Fetch data from node
@@ -172,19 +181,35 @@ ExecVScan(ScanState *node, ExecScanAccessMtd accessMtd)
          * when the qual is nil ... saves only a few cycles, but they add up
          * ...
          */
-        if (!qual || ExecQual(qual, econtext, false))
+        if (!qual || (NULL != (skip = ExecVQual(qual, econtext, false))))
         {
             /*
              * Found a satisfactory scan tuple.
              */
             if (projInfo)
             {
+                int i;
+
+                /* first construct the skip array */
+                if(NULL != skip)
+                {
+                    for(i = 0; i < skip->header.dim; i++)
+                    {
+                        skip->values[i] = ((!(skip->values[i])) ||
+                                          (skip->header.isnull[i]) ||
+                                          ((TupleBatch)slot->PRIVATE_tb)->skip[i]);
+                    }
+                }
+
                 /*
                  * Form a projection tuple, store it in the result tuple slot
                  * and return it.
                  */
                 ((TupleBatch)projInfo->pi_slot->PRIVATE_tb)->nrows = ((TupleBatch)slot->PRIVATE_tb)->nrows;
-                ((TupleBatch)projInfo->pi_slot->PRIVATE_tb)->skip = ((TupleBatch)slot->PRIVATE_tb)->skip;
+                if(NULL != skip)
+                    ((TupleBatch)projInfo->pi_slot->PRIVATE_tb)->skip = skip->values;
+                else
+                    ((TupleBatch)projInfo->pi_slot->PRIVATE_tb)->skip = ((TupleBatch)slot->PRIVATE_tb)->skip;
                 return ExecVProject(projInfo, NULL);
             }
             else
@@ -203,4 +228,4 @@ ExecVScan(ScanState *node, ExecScanAccessMtd accessMtd)
         tbReset(node->ss_ScanTupleSlot->PRIVATE_tb);
         tbReset(node->ps.ps_ResultTupleSlot->PRIVATE_tb);
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/contrib/vexecutor/vadt.c
----------------------------------------------------------------------
diff --git a/contrib/vexecutor/vadt.c b/contrib/vexecutor/vadt.c
index 4e5b766..1aa486e 100644
--- a/contrib/vexecutor/vadt.c
+++ b/contrib/vexecutor/vadt.c
@@ -138,6 +138,7 @@ v##type##in(PG_FUNCTION_ARGS) \
     SET_VARSIZE(res, (offsetof(v##type, values) + n * sizeof(type))); \
     res->header.elemtype = typeoid; \
     res->header.dim = n; \
+    res->header.isnull = palloc0(sizeof(bool) * n); \
     PG_RETURN_POINTER(res); \
 }
 
@@ -181,29 +182,36 @@ v##type1##v##type2##opstr(PG_FUNCTION_ARGS) \
     int i = 0; \
     v##type1 *arg1 = PG_GETARG_POINTER(0); \
     v##type2 *arg2 = PG_GETARG_POINTER(1); \
-    v##type1 *res = NULL; \
     Assert((arg1)->header.dim == (arg2)->header.dim); \
     size = (arg1)->header.dim; \
     if(sizeof(type1) > sizeof(type2)) \
     { \
-        res = palloc0(offsetof(v##type1, values) + (size) * sizeof(type1)); \
-        SET_VARSIZE(res, (offsetof(v##type1, values) + (size) * sizeof(type1))); \
-        res->header.dim = size;  \
-        res->header.elemtype = arg1->header.elemtype; \
+        v##type1 *res = NULL; \
+        res = (v##type1 *)buildv##type1(size); \
+        while(i < size) \
+        { \
+            res->header.isnull[i] = \
+                arg1->header.isnull[i] || arg2->header.isnull[i]; \
+            if(!res->header.isnull[i]) \
+                res->values[i] = arg1->values[i] opsym arg2->values[i]; \
+            i++; \
+        } \
+        PG_RETURN_POINTER(res); \
     } \
     else \
     { \
-        res = palloc0(offsetof(v##type2, values) + (size) * sizeof(type2)); \
-        SET_VARSIZE(res, (offsetof(v##type2, values) + (size) * sizeof(type2))); \
-        res->header.dim = size;  \
-        res->header.elemtype = arg2->header.elemtype; \
+        v##type2 *res = NULL; \
+        res = (v##type2 *)buildv##type2(size); \
+        while(i < size) \
+        { \
+            res->header.isnull[i] = \
+                arg1->header.isnull[i] || arg2->header.isnull[i]; \
+            if(!res->header.isnull[i]) \
+                res->values[i] = arg1->values[i] opsym arg2->values[i]; \
+            i++; \
+        } \
+        PG_RETURN_POINTER(res); \
     } \
-    while(i < size) \
-    { \
-        res->values[i] = arg1->values[i] opsym arg2->values[i]; \
-        i++; \
-    } \
-    PG_RETURN_POINTER(res); \
 }
 
 /*
@@ -222,13 +230,12 @@ v##type##const_type##opstr(PG_FUNCTION_ARGS) \
     const_type arg2 = CONST_ARG_MACRO(1); \
     v##type *res = NULL; \
     size = (arg1)->header.dim; \
-    res = palloc0(offsetof(v##type, values) + (size) * sizeof(type)); \
-    SET_VARSIZE(res, (offsetof(v##type, values) + (size) * sizeof(type)));  \
-    res->header.elemtype = arg1->header.elemtype; \
-    res->header.dim = arg1->header.dim; \
+    res = (v##type *)buildv##type(size); \
     while(i < size) \
     { \
-        res->values[i] = arg1->values[i] opsym arg2; \
+        res->header.isnull[i] = (arg1)->header.isnull[i]; \
+        if(!res->header.isnull[i]) \
+            res->values[i] = arg1->values[i] opsym arg2; \
         i ++ ;\
     } \
     PG_RETURN_POINTER(res); \
@@ -250,13 +257,13 @@ v##type1##v##type2##cmpstr(PG_FUNCTION_ARGS) \
     v##type2 *arg2 = PG_GETARG_POINTER(1); \
     vbool *res = NULL; \
     size = (arg1)->header.dim; \
-    res = palloc0(offsetof(vbool, values) + (size) * sizeof(bool)); \
-    SET_VARSIZE(res, (offsetof(vbool, values) + (size) * sizeof(bool)));  \
-    res->header.elemtype = BOOLOID; \
-    res->header.dim = arg1->header.dim; \
+    res = (vbool*)buildvbool(size); \
     while(i < size) \
     { \
-        res->values[i] = arg1->values[i] cmpsym arg2->values[i]; \
+         res->header.isnull[i] =  \
+            arg1->header.isnull[i] || arg2->header.isnull[i]; \
+        if(!res->header.isnull[i]) \
+            res->values[i] = arg1->values[i] cmpsym arg2->values[i]; \
         i++; \
     } \
     PG_RETURN_POINTER(res); \
@@ -278,13 +285,12 @@ v##type##const_type##cmpstr(PG_FUNCTION_ARGS) \
     const_type arg2 = CONST_ARG_MACRO(1); \
     vbool *res = NULL; \
     size = (arg1)->header.dim; \
-    res = palloc0(offsetof(vbool, values) + (size) * sizeof(bool)); \
-    SET_VARSIZE(res, (offsetof(vbool, values) + (size) * sizeof(bool)));  \
-    res->header.elemtype = BOOLOID; \
-    res->header.dim = size; \
+    res = (vbool*)buildvbool(size); \
     while(i < size) \
     { \
-        res->values[i] = arg1->values[i] cmpsym arg2; \
+        res->header.isnull[i] = (arg1)->header.isnull[i]; \
+        if(!res->header.isnull[i]) \
+            res->values[i] = arg1->values[i] cmpsym arg2; \
         i++; \
     } \
     PG_RETURN_POINTER(res); \

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/contrib/vexecutor/vexecutor.c
----------------------------------------------------------------------
diff --git a/contrib/vexecutor/vexecutor.c b/contrib/vexecutor/vexecutor.c
index 4533fdd..9f5506f 100644
--- a/contrib/vexecutor/vexecutor.c
+++ b/contrib/vexecutor/vexecutor.c
@@ -26,7 +26,10 @@
 #include "executor/nodeTableScan.h"
 #include "catalog/catquery.h"
 #include "cdb/cdbvars.h"
+#include "utils/memaccounting.h"
 #include "execVScan.h"
+#include "execVQual.h"
+#include "vexecutor.h"
 
 PG_MODULE_MAGIC;
 int BATCHSIZE = 1024;
@@ -35,10 +38,10 @@ static int MAXBATCHSIZE = 4096;
 /*
  * hook function
  */
-static PlanState* VExecInitNode(PlanState *node,EState *eState,int eflags,MemoryAccount* ptr);
+static PlanState* VExecInitNode(Plan *node,EState *eState,int eflags);
+static PlanState* VExecVecNode(PlanState *Node, PlanState *parentNode, EState *eState,int eflags);
 static TupleTableSlot* VExecProcNode(PlanState *node);
 static bool VExecEndNode(PlanState *node);
-static Oid GetNType(Oid vtype);
 extern int currentSliceId;
 
 /*
@@ -51,7 +54,9 @@ _PG_init(void)
 {
 	elog(DEBUG3, "PG INIT VEXECTOR");
 	vmthd.CheckPlanVectorized_Hook = CheckAndReplacePlanVectorized;
+	vmthd.ExecInitExpr_Hook = VExecInitExpr;
 	vmthd.ExecInitNode_Hook = VExecInitNode;
+	vmthd.ExecVecNode_Hook = VExecVecNode;
 	vmthd.ExecProcNode_Hook = VExecProcNode;
 	vmthd.ExecEndNode_Hook = VExecEndNode;
 	vmthd.GetNType = GetNType;
@@ -80,7 +85,9 @@ _PG_fini(void)
 {
 	elog(DEBUG3, "PG FINI VEXECTOR");
 	vmthd.CheckPlanVectorized_Hook = NULL;
+	vmthd.ExecInitExpr_Hook = NULL;
 	vmthd.ExecInitNode_Hook = NULL;
+	vmthd.ExecVecNode_Hook = NULL;
 	vmthd.ExecProcNode_Hook = NULL;
 	vmthd.ExecEndNode_Hook = NULL;
 }
@@ -124,10 +131,24 @@ static void backportTupleDescriptor(PlanState* ps,TupleDesc td)
 	ExecAssignResultType(ps,td);
 }
 
-static PlanState* VExecInitNode(PlanState *node,EState *eState,int eflags,MemoryAccount* curMemoryAccount)
+static PlanState* VExecInitNode(Plan *node,EState *eState,int eflags)
+{
+	elog(DEBUG3, "PG VEXECINIT NODE");
+
+	return NULL;
+}
+
+#define HAS_EXECUTOR_MEMORY_ACCOUNT(planNode, NodeType) \
+	(NULL != planNode->memoryAccount && \
+	MEMORY_OWNER_TYPE_Exec_##NodeType == planNode->memoryAccount->ownerType)
+
+/*
+ * when vectorized_executor_enable is ON, we have to process the plan.
+ */
+static PlanState*
+VExecVecNode(PlanState *node, PlanState *parentNode, EState *eState,int eflags)
 {
 	Plan *plan = node->plan;
-	PlanState *subState = NULL;
 	VectorizedState *vstate = (VectorizedState*)palloc0(sizeof(VectorizedState));
 
 	elog(DEBUG3, "PG VEXECINIT NODE");
@@ -139,22 +160,7 @@ static PlanState* VExecInitNode(PlanState *node,EState *eState,int eflags,Memory
 	node->vectorized = (void*)vstate;
 
 	vstate->vectorized = plan->vectorized;
-
-	/* set the parent state of son */
-	if(innerPlanState(node))
-	{
-		subState = innerPlanState(node);
-		Assert(NULL != subState);
-
-		((VectorizedState*)(subState->vectorized))->parent = node;
-	}
-	if(outerPlanState(node))
-	{
-		subState = outerPlanState(node);
-		Assert(NULL != subState);
-
-		((VectorizedState*)(subState->vectorized))->parent = node;
-	}
+	vstate->parent = parentNode;
 
 	if(Gp_role != GP_ROLE_DISPATCH)
 	{
@@ -163,15 +169,21 @@ static PlanState* VExecInitNode(PlanState *node,EState *eState,int eflags,Memory
 			case T_AppendOnlyScan:
 			case T_ParquetScan:
 			case T_TableScanState:
-				START_MEMORY_ACCOUNT(curMemoryAccount);
-					{
-						TupleDesc td = ((TableScanState *)node)->ss.ss_ScanTupleSlot->tts_tupleDescriptor;
-						((TableScanState *)node)->ss.ss_ScanTupleSlot->PRIVATE_tb = PointerGetDatum(tbGenerate(td->natts,BATCHSIZE));
-						node->ps_ResultTupleSlot->PRIVATE_tb = PointerGetDatum(tbGenerate(td->natts,BATCHSIZE));
-						/* if V->N */
-						backportTupleDescriptor(node,node->ps_ResultTupleSlot->tts_tupleDescriptor);
-					}
-						END_MEMORY_ACCOUNT();
+				if(HAS_EXECUTOR_MEMORY_ACCOUNT(plan, TableScan))
+					START_MEMORY_ACCOUNT(plan->memoryAccount);
+
+				TupleDesc td = ((TableScanState *)node)->ss.ss_ScanTupleSlot->tts_tupleDescriptor;
+				((TableScanState *)node)->ss.ss_ScanTupleSlot->PRIVATE_tb = PointerGetDatum(tbGenerate(td->natts,BATCHSIZE));
+				node->ps_ResultTupleSlot->PRIVATE_tb = PointerGetDatum(tbGenerate(td->natts,BATCHSIZE));
+
+				/* if V->N */
+				if( NULL == parentNode ||
+					NULL == parentNode->vectorized ||
+					!((VectorizedState *)parentNode->vectorized)->vectorized)
+					backportTupleDescriptor(node,node->ps_ResultTupleSlot->tts_tupleDescriptor);
+
+				if(HAS_EXECUTOR_MEMORY_ACCOUNT(plan, TableScan))
+					END_MEMORY_ACCOUNT();
 				break;
 			default:
 				((VectorizedState *)node->vectorized)->vectorized = false;
@@ -179,8 +191,15 @@ static PlanState* VExecInitNode(PlanState *node,EState *eState,int eflags,Memory
 		}
 	}
 
+	/* recursively */
+	if(NULL != node->lefttree)
+		VExecVecNode(node->lefttree, node, eState, eflags);
+	if(NULL != node->righttree)
+		VExecVecNode(node->righttree, node, eState, eflags);
+
 	return node;
 }
+
 static TupleTableSlot* VExecProcNode(PlanState *node)
 {
     TupleTableSlot* result = NULL;
@@ -189,7 +208,7 @@ static TupleTableSlot* VExecProcNode(PlanState *node)
         case T_ParquetScanState:
         case T_AppendOnlyScanState:
         case T_TableScanState:
-			result = ExecTableVScanVirtualLayer((TableScanState*)node);
+            result = ExecTableVScanVirtualLayer((TableScanState*)node);
             break;
         default:
             break;
@@ -238,8 +257,8 @@ HasVecExecOprator(NodeTag tag)
 	return result;
 }
 
-static Oid GetNType(Oid vtype)
+Oid GetNType(Oid vtype)
 {
 	const vFuncMap* vf = GetVFunc(vtype);
 	return vf == NULL ? InvalidOid : vf->ntype;
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/contrib/vexecutor/vexecutor.h
----------------------------------------------------------------------
diff --git a/contrib/vexecutor/vexecutor.h b/contrib/vexecutor/vexecutor.h
index 490f784..fdc3219 100644
--- a/contrib/vexecutor/vexecutor.h
+++ b/contrib/vexecutor/vexecutor.h
@@ -30,5 +30,6 @@ extern void _PG_init(void);
 extern void _PG_fini(void);
 
 extern bool HasVecExecOprator(NodeTag tag);
+Oid GetNType(Oid vtype);
 
 #endif

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/src/backend/executor/execMain.c
----------------------------------------------------------------------
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index 6b692a7..81f68f2 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -2047,6 +2047,11 @@ InitPlan(QueryDesc *queryDesc, int eflags)
 	 */
 	planstate = ExecInitNode(plannedstmt->planTree, estate, eflags);
 
+	/* to process the planstate */
+	if(vmthd.vectorized_executor_enable &&
+		NULL != vmthd.ExecVecNode_Hook)
+		planstate = vmthd.ExecVecNode_Hook(planstate, NULL, estate, eflags);
+
 	queryDesc->planstate = planstate;
 
 	Assert(queryDesc->planstate);

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/src/backend/executor/execProcnode.c
----------------------------------------------------------------------
diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c
index 7ee99c6..fa6f657 100644
--- a/src/backend/executor/execProcnode.c
+++ b/src/backend/executor/execProcnode.c
@@ -271,6 +271,18 @@ ExecInitNode(Plan *node, EState *estate, int eflags)
 		}
 	}
 
+
+	/*
+    * If the plan node can be vectorized and vectorized is enable, enter the
+    * vectorized execution operators.
+    */
+	if(vmthd.vectorized_executor_enable
+	   && vmthd.ExecInitNode_Hook
+	   && node->vectorized
+	   && (result = vmthd.ExecInitNode_Hook(node,estate,eflags)))
+		return result;
+
+
 	switch (nodeTag(node))
 	{
 			/*
@@ -753,14 +765,6 @@ ExecInitNode(Plan *node, EState *estate, int eflags)
 
 	if (result != NULL)
 	{
-		/*
-        * If the plan node can be vectorized and vectorized is enable, enter the
-        * vectorized execution operators.
-        */
-		if(vmthd.vectorized_executor_enable
-		   && vmthd.ExecInitNode_Hook)
-			result = vmthd.ExecInitNode_Hook(result,estate,eflags,curMemoryAccount);
-
 		SAVE_EXECUTOR_MEMORY_ACCOUNT(result, curMemoryAccount);
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/src/backend/executor/execQual.c
----------------------------------------------------------------------
diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c
index b49b7ec..451e498 100644
--- a/src/backend/executor/execQual.c
+++ b/src/backend/executor/execQual.c
@@ -4516,6 +4516,16 @@ ExecInitExpr(Expr *node, PlanState *parent)
 	/* Guard against stack overflow due to overly complex expressions */
 	check_stack_depth();
 
+	/* Initialize the vectorzied expressions */
+	if( vmthd.vectorized_executor_enable
+		&& vmthd.ExecInitExpr_Hook
+		&& parent->plan->vectorized)
+	{
+		state = vmthd.ExecInitExpr_Hook(node, parent);
+		if(NULL != state)
+			return state;
+	}
+
 	switch (nodeTag(node))
 	{
 		case T_Var:

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/src/include/executor/executor.h
----------------------------------------------------------------------
diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h
index 8484d66..b71904f 100644
--- a/src/include/executor/executor.h
+++ b/src/include/executor/executor.h
@@ -44,7 +44,9 @@
 typedef struct vectorexe_t {
 	bool vectorized_executor_enable;
 	Plan* (*CheckPlanVectorized_Hook)(PlannerInfo *node, Plan *plan);
-	PlanState* (*ExecInitNode_Hook)(PlanState *node,EState *eState,int eflags,MemoryAccount* ptr);
+	ExprState* (*ExecInitExpr_Hook)(Expr *node, PlanState *parent);
+	PlanState* (*ExecInitNode_Hook)(Plan *node, EState *eState,int eflags);
+	PlanState* (*ExecVecNode_Hook)(PlanState *Node, PlanState *parentNode, EState *eState,int eflags);
 	TupleTableSlot* (*ExecProcNode_Hook)(PlanState *node);
 	bool (*ExecEndNode_Hook)(PlanState *node);
 	Oid (*GetNType)(Oid vtype);

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/src/test/feature/vexecutor/ans/.DS_Store
----------------------------------------------------------------------
diff --git a/src/test/feature/vexecutor/ans/.DS_Store b/src/test/feature/vexecutor/ans/.DS_Store
new file mode 100644
index 0000000..2d9613b
Binary files /dev/null and b/src/test/feature/vexecutor/ans/.DS_Store differ

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/80eaf448/src/test/feature/vexecutor/ans/projandqual.ans
----------------------------------------------------------------------
diff --git a/src/test/feature/vexecutor/ans/projandqual.ans b/src/test/feature/vexecutor/ans/projandqual.ans
new file mode 100644
index 0000000..52084d5
--- /dev/null
+++ b/src/test/feature/vexecutor/ans/projandqual.ans
@@ -0,0 +1,40 @@
+-- start_ignore
+SET SEARCH_PATH=TestVexecutor_ProjAndQual;
+SET
+-- end_ignore
+select a + b from test1 where a + b > 1020 and b + c > 1;
+ ?column? 
+----------
+     1021
+     1022
+     1023
+     1024
+     1025
+(5 rows)
+
+select a - b from test1 where a - b > 1020 and b - c >= 0;
+ ?column? 
+----------
+     1021
+     1022
+     1023
+(3 rows)
+
+select a * b from test1 where a * b > 1020 and b * c < 10;
+ ?column? 
+----------
+     1021
+     1022
+     1023
+     1024
+(4 rows)
+
+select a / b from test1 where a / b > 1020 and b * c = 1;
+ ?column? 
+----------
+     1021
+     1022
+     1023
+     1024
+(4 rows)
+