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)
+