newspaint

Documenting Problems That Were Difficult To Find The Answer To

Monthly Archives: August 2011

Replacing HDD With SSD In Asus N10Jc Laptop

I decided to replace the 120GB hard drive in my Asus N10J series laptop (N10Jc) with a 96GB Kingston SSD (available at eBuyer.com). The Kingston SSD drive actually weighs more than the original spinning hard disk drive.

I’d previously replaced the RAM chip (the laptop came with 1GB of RAM) with a 2GB one soon after I’d bought the laptop so I already knew I could open the back of the laptop with ease.

I started by turning the laptop upside down, and removing the battery. Located the 3 screws on the inner panel and loosened them (but they don’t come right out). Then used a flat head screwdriver to lever the panel out.

Loosen the three screws, then lever panel off using a flat screwdriver

Loosen the three screws, then lever panel off using a flat screwdriver

Next undid and removed the 2 screws holding the drive bay down.

Undo and remove the 2 screws holding the drive bay down

Undo and remove the 2 screws holding the drive bay down

I gently lifted up the drive bay a little using a finger around the handle. But it was important not to pull two hard or the SATA connection at the end of the drive might have been broken!

Gently lift the drive bay with your finger, but not too hard

Gently lift the drive bay with your finger, but not too hard

While gently lifting the drive bay I pulled out the raised end sideways.

Pull the drive bay out while one end is slightly raised

Pull the drive bay out while one end is slightly raised

The drive was now free (but attached to the drive bay). I had to unscrew the drive from the drive bay.

Remove the four screws from the drive bay to release the drive

Remove the four screws from the drive bay to release the drive

Then I put the Kingston SSD into the drive bay, inserted and tightened the four screws.

Next I slide the drive bay back into the laptop, and inserted the two screws to keep the drive bay in place.

Finally I pushed the back panel back on – pushing down until the plastic clasps snapped into place, and tightened the three screws keeping it down.

All done!

Update 2011-10-27

I’ve had the SSD in the laptop for 2 months now. I don’t believe the laptop runs any faster than it did (although I’m running Ubuntu on it, not Windows, perhaps Windows does run faster). I believe this is because the processor in this laptop is relatively slow – so the bottle neck is mostly in the processor, not I/O. However I’ve done no detailed analysis so perhaps somebody else out there can shine some more accurate light on the performance differences using a SSD in this laptop.

I’ve put SSDs into other laptops and found them to be much, much quicker. These other laptops were all running Windows; I’ve had no experience in replacing a spinning disk with a SSD on any other Unix/Linux based systems.

Practical Numbers

According to wikipedia a practical number is one where its factors can be summed together to make up each of the smaller numbers. An example it best.

Consider the number 18. It has the factors 1, 2, 3, 6, 9, 18. They can be combined as follows:

  • 1 = 1
  • 2 = 2
  • 3 = 3
  • 3+1 = 4
  • 3+2 = 5
  • 6 = 6
  • 6+1 = 7
  • 6+2 = 8
  • 9 = 9
  • 9+1 = 10
  • 9+2 = 11
  • 9+3 = 12
  • 9+3+1 = 13
  • 9+3+2 = 14
  • 9+6 = 15
  • 9+6+1 = 16
  • 9+6+2 = 17
  • 18 = 18

The first 10,000 practical numbers are listed here.

 1 2 4 6 8 12 16 18 20 24 28 30
 32 36 40 42 48 54 56 60 64 66 72 78
 80 84 88 90 96 100 104 108 112 120 126 128
 132 140 144 150 156 160 162 168 176 180 192 196
 198 200 204 208 210 216 220 224 228 234 240 252
 256 260 264 270 272 276 280 288 294 300 304 306
 308 312 320 324 330 336 340 342 348 352 360 364
 368 378 380 384 390 392 396 400 408 414 416 420
 432 440 448 450 456 460 462 464 468 476 480 486
 496 500 504 510 512 520 522 528 532 540 544 546
 552 558 560 570 576 580 588 594 600 608 612 616
 620 624 630 640 644 648 660 666 672 680 684 690
 696 700 702 704 714 720 726 728 736 740 744 750
 756 760 768 780 784 792 798 800 810 812 816 820
 828 832 840 858 860 864 868 870 880 882 888 896
 900 912 918 920 924 928 930 936 952 960 966 968
 972 980 984 990 992 1000 1008 1014 1020 1024 1026 1032
 1036 1040 1044 1050 1056 1064 1080 1088 1092 1100 1104 1110
 1116 1120 1122 1128 1134 1140 1144 1148 1152 1160 1170 1176
 1184 1188 1200 1204 1216 1218 1224 1230 1232 1240 1242 1248
 1254 1260 1272 1280 1288 1290 1296 1300 1302 1312 1316 1320
 1326 1332 1344 1350 1352 1360 1368 1372 1376 1380 1386 1392
 1400 1404 1408 1410 1416 1428 1440 1452 1456 1458 1464 1470
 1472 1476 1480 1482 1484 1488 1496 1500 1504 1512 1518 1520
 1530 1536 1540 1548 1554 1560 1566 1568 1584 1590 1596 1600
 1620 1624 1632 1638 1640 1650 1656 1664 1672 1674 1680 1692
 1696 1700 1710 1716 1720 1722 1728 1736 1740 1760 1764 1768
 1770 1776 1782 1792 1794 1800 1806 1820 1824 1830 1836 1840
 1848 1856 1860 1872 1880 1888 1890 1900 1904 1908 1914 1920
 1932 1936 1944 1950 1952 1960 1968 1974 1976 1980 1984 1998
 2000 2010 2016 2024 2028 2040 2046 2048 2052 2058 2064 2070
 2072 2080 2088 2100 2106 2112 2120 2124 2128 2130 2142 2156
 2160 2176 2178 2184 2190 2196 2200 2208 2214 2220 2226 2232
 2240 2244 2250 2256 2262 2268 2280 2288 2296 2300 2304 2310
 2320 2322 2340 2352 2360 2368 2376 2380 2392 2394 2400 2408
 2412 2418 2420 2430 2432 2436 2440 2442 2448 2460 2464 2478
 2480 2484 2496 2500 2508 2520 2538 2544 2548 2550 2552 2556
 2560 2562 2574 2576 2580 2592 2600 2604 2610 2624 2628 2632
 2640 2646 2652 2660 2664 2680 2688 2700 2704 2706 2720 2728
 2730 2736 2744 2752 2754 2760 2772 2784 2790 2800 2808 2814
 2816 2820 2832 2838 2840 2844 2850 2856 2860 2862 2880 2886
 2898 2900 2904 2912 2916 2920 2928 2940 2944 2952 2960 2964
 2968 2970 2976 2982 2988 2992 3000 3008 3016 3024 3036 3040
 3042 3060 3066 3072 3078 3080 3096 3100 3102 3108 3120 3132
 3136 3150 3160 3168 3180 3186 3192 3198 3200 3204 3216 3220
 3224 3234 3240 3248 3256 3264 3276 3280 3294 3300 3304 3312
 3318 3320 3328 3330 3332 3344 3348 3354 3360 3366 3380 3384
 3388 3392 3400 3402 3408 3416 3420 3432 3440 3444 3450 3456
 3468 3472 3480 3486 3498 3500 3504 3510 3520 3528 3536 3540
 3552 3560 3564 3570 3584 3588 3600 3608 3612 3618 3630 3640
 3648 3654 3660 3666 3672 3680 3690 3696 3700 3712 3720 3724
 3726 3738 3740 3744 3750 3752 3760 3762 3776 3780 3784 3792
 3800 3808 3816 3822 3828 3834 3840 3848 3864 3870 3872 3876
 3888 3894 3900 3904 3906 3920 3936 3942 3948 3952 3960 3968
 3976 3978 3984 3990 3996 4000 4004 4020 4026 4032 4048 4050
 4056 4060 4074 4080 4088 4092 4096 4100 4104 4116 4128 4134
 4136 4140 4144 4158 4160 4176 4180 4200 4212 4224 4230 4240
 4248 4256 4260 4264 4266 4272 4284 4288 4290 4300 4312 4320
 4332 4340 4350 4352 4356 4368 4374 4380 4392 4400 4410 4416
 4420 4422 4424 4428 4440 4446 4452 4464 4472 4480 4482 4488
 4500 4508 4512 4524 4536 4544 4554 4560 4576 4590 4592 4600
 4602 4608 4620 4624 4640 4644 4648 4650 4656 4662 4664 4672
 4680 4686 4692 4698 4700 4704 4720 4732 4736 4740 4752 4758
 4760 4770 4784 4788 4800 4806 4816 4818 4824 4830 4836 4840
 4848 4860 4864 4872 4880 4884 4888 4896 4900 4914 4920 4928
 4940 4944 4950 4956 4960 4968 4980 4984 4992 4998 5000 5016
 5022 5040 5056 5060 5070 5076 5082 5088 5096 5100 5104 5112
 5120 5124 5130 5136 5148 5152 5160 5166 5168 5180 5184 5192
 5200 5202 5208 5214 5220 5226 5232 5236 5238 5244 5248 5250
 5256 5264 5280 5292 5300 5304 5310 5312 5320 5328 5340 5346
 5360 5368 5376 5382 5400 5408 5412 5418 5424 5432 5440 5454
 5456 5460 5472 5478 5488 5490 5500 5504 5508 5512 5520 5538
 5544 5550 5562 5568 5580 5586 5600 5610 5616 5628 5632 5640
 5656 5664 5670 5676 5680 5684 5688 5694 5696 5700 5712 5720
 5724 5740 5742 5760 5768 5772 5776 5778 5780 5796 5800 5808
 5814 5820 5824 5832 5840 5850 5852 5856 5874 5880 5886 5888
 5896 5900 5904 5916 5920 5922 5928 5936 5940 5952 5964 5976
 5980 5984 5992 5994 6000 6006 6016 6020 6030 6032 6048 6060
 6072 6076 6080 6084 6090 6100 6102 6104 6120 6132 6136 6138
 6144 6150 6156 6160 6162 6174 6180 6188 6192 6200 6204 6208
 6210 6216 6240 6248 6256 6264 6270 6272 6300 6318 6320 6324
 6328 6336 6344 6348 6360 6372 6380 6384 6390 6396 6400 6402
 6408 6420 6424 6426 6432 6440 6448 6450 6460 6464 6468 6474
 6480 6496 6498 6500 6510 6512 6528 6534 6540 6552 6560 6570
 6580 6588 6592 6600 6608 6612 6624 6630 6636 6640 6642 6656
 6660 6664 6666 6678 6688 6696 6700 6708 6720 6732 6750 6760
 6762 6768 6776 6780 6784 6786 6798 6800 6804 6816 6820 6832
 6840 6848 6860 6864 6880 6888 6900 6912 6916 6930 6936 6942
 6944 6952 6960 6966 6968 6972 6976 6984 6992 6996 7000 7008
 7020 7038 7040 7050 7056 7062 7068 7072 7080 7084 7098 7100
 7104 7110 7120 7128 7140 7168 7176 7182 7194 7200 7216 7220
 7224 7232 7236 7252 7254 7260 7272 7280 7290 7296 7300 7304
 7308 7320 7326 7332 7344 7350 7360 7380 7384 7392 7400 7410
 7416 7420 7424 7434 7440 7448 7452 7458 7470 7476 7480 7488
 7500 7504 7520 7524 7540 7548 7552 7560 7566 7568 7584 7590
 7592 7600 7614 7616 7620 7632 7644 7650 7656 7668 7680 7686
 7696 7700 7704 7722 7728 7740 7744 7752 7760 7770 7776 7788
 7800 7808 7812 7820 7830 7832 7840 7848 7854 7860 7866 7872
 7878 7884 7888 7896 7900 7904 7920 7936 7938 7950 7952 7956
 7968 7980 7986 7992 8000 8004 8008 8010 8034 8036 8040 8052
 8060 8064 8080 8092 8096 8100 8112 8118 8120 8128 8136 8140
 8148 8160 8176 8184 8190 8192 8200 8208 8216 8220 8232 8240
 8250 8256 8260 8262 8268 8272 8280 8288 8300 8316 8320 8340
 8346 8352 8360 8364 8370 8372 8382 8400 8424 8428 8432 8436
 8442 8448 8460 8464 8480 8484 8496 8500 8502 8512 8514 8520
 8526 8528 8532 8536 8540 8544 8550 8556 8560 8568 8576 8580
 8586 8600 8610 8624 8632 8640 8646 8652 8658 8664 8670 8680
 8694 8700 8704 8712 8720 8730 8736 8740 8748 8760 8772 8778
 8784 8800 8814 8816 8820 8832 8840 8844 8848 8850 8856 8874
 8880 8888 8892 8900 8904 8910 8928 8932 8940 8944 8946 8960
 8964 8970 8976 8988 9000 9016 9020 9024 9030 9040 9042 9044
 9048 9060 9064 9072 9088 9090 9100 9108 9114 9120 9126 9144
 9150 9152 9156 9174 9180 9184 9198 9200 9204 9212 9216 9234
 9240 9248 9256 9270 9280 9282 9288 9296 9300 9306 9312 9324
 9328 9344 9348 9360 9372 9380 9384 9396 9400 9408 9416 9420
 9424 9432 9438 9440 9450 9460 9464 9472 9480 9486 9492 9500
 9504 9516 9520 9522 9540 9548 9558 9568 9570 9576 9588 9592
 9594 9600 9604 9612 9620 9630 9632 9636 9648 9660 9672 9680
 9690 9696 9700 9702 9720 9728 9744 9750 9760 9768 9776 9780
 9792 9800 9804 9810 9828 9840 9856 9860 9864 9870 9880 9882
 9888 9900 9906 9912 9918 9920 9936 9940 9944 9954 9960 9968
 9984 9990 9996 10000 10008 10020 10032 10044 10050 10062 10064 10080
 10088 10092 10098 10100 10108 10112 10120 10140 10152 10160 10164 10170
 10176 10192 10200 10206 10208 10212 10218 10220 10224 10230 10240 10248
 10260 10272 10290 10296 10300 10304 10320 10332 10336 10340 10350 10360
 10368 10374 10384 10388 10400 10404 10416 10428 10440 10452 10458 10464
 10472 10476 10480 10488 10494 10496 10500 10504 10512 10528 10530 10540
 10556 10560 10580 10584 10600 10602 10608 10620 10624 10626 10640 10648
 10650 10656 10660 10668 10672 10680 10686 10692 10700 10710 10712 10716
 10720 10728 10736 10752 10764 10780 10788 10800 10812 10816 10824 10830
 10836 10842 10848 10854 10864 10872 10878 10880 10890 10900 10908 10912
 10920 10944 10948 10950 10956 10960 10962 10976 10980 10998 11000 11004
 11008 11016 11020 11024 11040 11060 11070 11076 11088 11100 11120 11124
 11128 11130 11136 11152 11154 11160 11172 11176 11178 11180 11200 11214
 11220 11232 11248 11250 11256 11264 11280 11284 11286 11300 11304 11310
 11312 11316 11322 11328 11336 11340 11352 11360 11368 11376 11388 11392
 11396 11400 11408 11424 11430 11440 11448 11466 11480 11484 11500 11502
 11508 11520 11528 11536 11544 11550 11552 11556 11560 11564 11592 11600
 11610 11616 11620 11622 11628 11640 11648 11660 11664 11676 11680 11682
 11696 11700 11704 11712 11718 11730 11736 11748 11752 11760 11772 11776
 11778 11780 11790 11792 11800 11808 11826 11832 11840 11844 11850 11856
 11868 11872 11880 11900 11904 11920 11928 11934 11952 11956 11960 11968
 11970 11984 11988 12000 12006 12012 12024 12032 12036 12040 12054 12056
 12060 12064 12078 12080 12084 12090 12096 12100 12120 12138 12144 12150
 12152 12160 12168 12180 12192 12200 12204 12208 12210 12220 12222 12232
 12236 12240 12246 12264 12272 12276 12288 12300 12312 12320 12324 12330
 12342 12348 12360 12376 12384 12390 12400 12402 12408 12416 12420 12432
 12444 12450 12456 12460 12464 12474 12480 12496 12500 12510 12512 12516
 12528 12540 12544 12546 12558 12560 12576 12580 12584 12600 12628 12636
 12640 12642 12648 12654 12656 12672 12684 12688 12690 12696 12700 12714
 12720 12726 12740 12744 12750 12760 12768 12780 12784 12792 12798 12800
 12804 12810 12816 12834 12840 12848 12852 12864 12870 12876 12880 12888
 12896 12900 12920 12928 12936 12948 12960 12972 12978 12980 12992 12996
 13000 13020 13024 13026 13032 13040 13050 13056 13068 13072 13080 13100
 13104 13110 13112 13120 13122 13132 13140 13152 13158 13160 13176 13182
 13184 13188 13200 13208 13216 13224 13230 13244 13248 13260 13266 13272
 13280 13284 13288 13300 13312 13320 13328 13332 13338 13340 13344 13350
 13356 13360 13376 13392 13398 13400 13410 13416 13420 13440 13446 13452
 13456 13464 13468 13482 13500 13520 13524 13530 13536 13552 13560 13566
 13568 13572 13580 13590 13596 13600 13608 13616 13624 13632 13640 13650
 13662 13664 13668 13680 13692 13696 13700 13716 13720 13728 13734 13752
 13760 13770 13776 13780 13794 13800 13804 13806 13816 13818 13824 13832
 13840 13860 13872 13884 13888 13896 13900 13904 13908 13916 13920 13932
 13936 13940 13944 13950 13952 13968 13984 13986 13992 14000 14016 14022
 14028 14040 14058 14060 14070 14076 14080 14094 14100 14112 14124 14130
 14136 14140 14144 14148 14160 14168 14190 14196 14200 14208 14220 14224
 14238 14240 14248 14250 14256 14260 14268 14274 14280 14288 14300 14304
 14308 14310 14320 14322 14336 14344 14352 14364 14382 14384 14388 14400
 14406 14416 14418 14420 14430 14432 14440 14448 14454 14456 14464 14472
 14476 14480 14484 14490 14496 14500 14504 14508 14520 14532 14544 14550
 14560 14580 14586 14592 14600 14608 14616 14620 14628 14640 14652 14664
 14670 14672 14688 14696 14700 14706 14720 14740 14742 14756 14760 14768
 14784 14790 14796 14800 14812 14820 14832 14840 14848 14850 14868 14872
 14880 14892 14896 14900 14904 14910 14916 14924 14940 14952 14960 14964
 14976 14980 14994 15000 15008 15012 15030 15036 15040 15048 15066 15072
 15080 15088 15092 15096 15100 15104 15120 15132 15136 15138 15150 15162
 15168 15180 15184 15200 15204 15210 15224 15228 15232 15240 15246 15260
 15264 15276 15288 15300 15312 15318 15330 15336 15340 15344 15360 15372
 15376 15390 15392 15400 15408 15428 15444 15450 15456 15480 15484 15488
 15496 15498 15500 15504 15510 15520 15540 15552 15568 15570 15576 15580
 15582 15600 15606 15616 15620 15624 15640 15642 15648 15652 15660 15664
 15678 15680 15696 15700 15704 15708 15714 15720 15732 15744 15750 15752
 15756 15768 15776 15792 15800 15808 15810 15820 15824 15834 15840 15860
 15870 15872 15876 15900 15904 15912 15928 15930 15936 15960 15972 15980
 15984 15990 16000 16002 16008 16016 16020 16032 16038 16044 16048 16050
 16060 16068 16072 16074 16080 16092 16100 16104 16110 16112 16116 16120
 16128 16146 16160 16170 16182 16184 16188 16192 16200 16212 16218 16224
 16236 16240 16254 16256 16268 16272 16280 16284 16290 16296 16300 16302
 16308 16320 16324 16328 16340 16350 16352 16356 16362 16368 16380 16384
 16400 16416 16422 16432 16434 16440 16456 16464 16470 16480 16492 16500
 16506 16512 16520 16524 16530 16536 16544 16548 16560 16576 16590 16592
 16600 16608 16614 16632 16640 16644 16650 16660 16680 16686 16688 16692
 16698 16700 16704 16716 16720 16728 16740 16744 16758 16764 16768 16770
 16800 16820 16830 16836 16848 16856 16864 16872 16884 16896 16900 16912
 16920 16926 16928 16932 16940 16950 16952 16956 16960 16968 16974 16992
 17000 17004 17010 17020 17024 17028 17040 17052 17056 17064 17072 17080
 17082 17088 17094 17100 17108 17112 17120 17136 17152 17160 17168 17172
 17184 17190 17200 17220 17226 17238 17248 17250 17262 17264 17280 17292
 17296 17298 17300 17304 17316 17328 17334 17340 17346 17360 17368 17370
 17376 17380 17388 17400 17408 17420 17424 17430 17440 17442 17444 17460
 17472 17480 17490 17496 17500 17514 17520 17536 17544 17550 17556 17568
 17576 17584 17600 17604 17612 17622 17628 17632 17640 17658 17664 17670
 17680 17688 17696 17700 17712 17724 17730 17748 17760 17766 17776 17780
 17784 17792 17800 17802 17808 17820 17836 17850 17856 17860 17864 17880
 17888 17892 17900 17910 17920 17928 17934 17936 17940 17952 17976 17980
 17982 17992 18000 18012 18018 18020 18032 18036 18040 18048 18054 18060
 18080 18084 18088 18090 18096 18100 18120 18126 18128 18144 18150 18156
 18172 18176 18180 18200 18216 18224 18228 18240 18252 18256 18260 18270
 18288 18300 18304 18306 18312 18330 18336 18340 18348 18352 18354 18360
 18368 18392 18396 18400 18408 18414 18424 18432 18444 18450 18460 18468
 18480 18486 18492 18496 18500 18512 18522 18528 18540 18544 18560 18564
 18576 18592 18600 18612 18616 18620 18624 18630 18648 18656 18666 18676
 18684 18688 18690 18696 18700 18704 18720 18732 18744 18750 18760 18768
 18774 18788 18792 18800 18810 18816 18824 18832 18840 18848 18860 18864
 18870 18876 18880 18900 18912 18920 18924 18928 18942 18944 18954 18960
 18972 18980 18984 18990 19000 19008 19012 19024 19026 19032 19040 19044
 19050 19072 19074 19080 19096 19100 19104 19110 19116 19136 19140 19152
 19170 19176 19180 19184 19188 19200 19206 19208 19220 19224 19240 19260
 19264 19266 19272 19278 19292 19296 19300 19312 19314 19320 19328 19332
 19344 19350 19360 19376 19380 19392 19400 19404 19422 19440 19448 19456
 19458 19460 19470 19488 19494 19500 19504 19516 19520 19530 19536 19548
 19552 19560 19580 19584 19596 19600 19602 19608 19620 19650 19656 19668
 19680 19684 19698 19700 19710 19712 19720 19728 19734 19740 19760 19764
 19776 19780 19782 19788 19796 19800 19812 19824 19836 19840 19856 19864
 19866 19872 19880 19888 19890 19900 19908 19920 19926 19932 19936 19950
 19952 19964 19968 19980 19992 19998 20000 20010 20016 20020 20034 20040
 20048 20060 20064 20070 20072 20088 20096 20100 20124 20128 20130 20140
 20148 20160 20176 20178 20184 20188 20196 20200 20202 20216 20224 20240
 20250 20256 20272 20280 20286 20292 20300 20304 20320 20328 20336 20340
 20352 20358 20368 20370 20384 20394 20400 20412 20416 20424 20430 20436
 20440 20448 20460 20468 20480 20488 20496 20500 20502 20520 20532 20538
 20540 20544 20550 20574 20580 20592 20600 20604 20608 20610 20628 20636
 20640 20646 20664 20670 20672 20680 20696 20700 20706 20720 20724 20736
 20740 20748 20760 20768 20776 20790 20800 20808 20826 20832 20844 20850
 20856 20860 20862 20864 20874 20880 20898 20900 20904 20910 20916 20928
 20944 20952 20960 20970 20972 20976 20988 20992 21000 21008 21012 21024
 21042 21054 21056 21060 21080 21090 21100 21112 21114 21120 21140 21150
 21160 21168 21186 21200 21204 21210 21216 21222 21228 21240 21248 21252
 21276 21280 21294 21296 21300 21312 21318 21320 21328 21330 21336 21340
 21344 21360 21364 21372 21376 21384 21390 21392 21400 21402 21408 21420
 21424 21432 21440 21450 21456 21460 21462 21472 21476 21480 21488 21492
 21500 21504 21516 21528 21546 21560 21576 21580 21582 21584 21600 21616
 21620 21624 21630 21632 21648 21660 21672 21684 21696 21700 21708 21712
 21714 21720 21726 21728 21736 21744 21750 21756 21760 21762 21780 21792
 21798 21800 21804 21808 21812 21816 21824 21828 21840 21868 21870 21888
 21896 21900 21912 21920 21924 21930 21942 21944 21952 21960 21978 21980
 21984 21996 22000 22008 22016 22032 22040 22044 22048 22050 22064 22080
 22100 22110 22116 22120 22134 22140 22144 22148 22152 22176 22192 22194
 22200 22204 22218 22220 22230 22236 22240 22248 22256 22260 22264 22272
 22288 22302 22304 22308 22320 22338 22344 22350 22352 22356 22360 22368
 22372 22374 22386 22400 22410 22420 22428 22440 22446 22448 22464 22470
 22484 22496 22500 22506 22512 22518 22528 22540 22542 22554 22560 22568
 22572 22576 22600 22608 22620 22624 22632 22638 22644 22650 22656 22660
 22672 22680 22698 22704 22720 22736 22752 22770 22776 22780 22784 22788
 22792 22800 22806 22816 22820 22836 22842 22848 22860 22876 22878 22880
 22890 22896 22908 22912 22914 22920 22932 22940 22944 22950 22960 22968
 22984 23000 23004 23010 23016 23028 23040 23052 23056 23058 23064 23072
 23088 23100 23104 23112 23120 23128 23136 23140 23142 23160 23166 23168
 23180 23184 23200 23220 23226 23232 23240 23244 23250 23256 23280 23296
 23310 23312 23316 23320 23322 23324 23328 23352 23360 23364 23370 23380
 23392 23400 23408 23424 23430 23436 23460 23472 23478 23484 23490 23496
 23500 23504 23520 23540 23544 23548 23550 23552 23556 23560 23562 23580
 23584 23598 23600 23616 23628 23632 23634 23640 23652 23660 23664 23680
 23688 23700 23712 23716 23730 23736 23744 23760 23780 23790 23800 23808
 23814 23826 23828 23840 23850 23856 23868 23880 23892 23904 23912 23920
 23936 23940 23958 23968 23970 23976 23980 23994 24000 24012 24016 24024
 24030 24048 24064 24066 24072 24080 24084 24090 24096 24102 24108 24112
 24120 24128 24138 24140 24150 24156 24160 24168 24174 24180 24192 24200
 24208 24220 24240 24276 24282 24288 24300 24304 24318 24320 24332 24336
 24354 24360 24380 24384 24388 24396 24400 24402 24408 24416 24420 24426
 24440 24444 24448 24450 24462 24464 24472 24480 24486 24492 24500 24510
 24516 24528 24534 24544 24552 24564 24570 24576 24592 24600 24624 24640
 24642 24648 24656 24660 24684 24696 24700 24704 24708 24720 24732 24738
 24750 24752 24768 24780 24786 24800 24804 24816 24820 24822 24832 24840
 24852 24860 24864 24882 24888 24892 24900 24912 24920 24928 24940 24948
 24960 24966 24976 24990 24992 25000 25004 25020 25024 25032 25038 25050
 25056 25060 25074 25080 25088 25092 25110 25116 25120 25146 25152 25160
 25164 25168 25172 25194 25200 25212 25216 25220 25228 25230 25232 25254
 25256 25272 25280 25284 25296 25300 25308 25312 25320 25326 25340 25344
 25350 25368 25376 25380 25392 25398 25400 25404 25410 25420 25424 25428
 25432 25434 25440 25452 25460 25472 25476 25480 25488 25500 25506 25520
 25530 25536 25542 25560 25564 25568 25578 25584 25596 25600 25608 25620
 25632 25648 25650 25662 25668 25676 25680 25688 25696 25704 25728 25740
 25752 25758 25760 25764 25776 25792 25800 25806 25812 25830 25840 25844
 25856 25872 25896 25900 25908 25920 25938 25944 25950 25956 25960 25974
 25984 25992 26000 26004 26010 26028 26040 26048 26052 26064 26068 26070
 26080 26082 26096 26100 26112 26128 26130 26136 26144 26160 26166 26180
 26190 26200 26208 26220 26224 26226 26240 26244 26250 26260 26264 26268
 26280 26288 26304 26312 26316 26320 26334 26352 26364 26368 26376 26384
 26400 26404 26406 26416 26418 26432 26442 26448 26460 26488 26496 26500
 26520 26532 26544 26550 26560 26568 26572 26576 26586 26598 26600 26620
 26622 26624 26640 26656 26660 26664 26670 26676 26680 26688 26700 26712
 26720 26724 26730 26740 26752 26754 26760 26768 26772 26780 26784 26790
 26796 26800 26820 26832 26838 26840 26850 26852 26860 26862 26864 26880
 26892 26904 26908 26910 26912 26928 26936 26964 26970 26980 26988 26992
 27000 27008 27018 27020 27030 27040 27048 27054 27056 27060 27072 27090
 27104 27108 27120 27126 27132 27136 27140 27144 27150 27160 27180 27192
 27200 27216 27232 27234 27240 27244 27248 27258 27260 27264 27270 27280
 27300 27306 27324 27328 27336 27342 27360 27376 27378 27380 27384 27390
 27392 27400 27412 27432 27440 27450 27456 27468 27472 27480 27492 27500
 27504 27510 27520 27522 27528 27540 27552 27560 27580 27588 27594 27600
 27608 27612 27632 27636 27648 27664 27666 27680 27690 27692 27702 27720
 27738 27740 27744 27750 27756 27768 27776 27792 27800 27808 27810 27816
 27820 27832 27840 27846 27852 27860 27864 27872 27876 27880 27888 27900
 27904 27918 27924 27930 27936 27940 27948 27960 27968 27972 27984 28000
 28014 28016 28026 28028 28032 28044 28050 28056 28060 28072 28080 28084
 28098 28116 28120 28140 28152 28158 28160 28182 28188 28196 28200 28220
 28224 28236 28248 28260 28272 28280 28288 28290 28296 28304 28314 28320
 28336 28340 28350 28356 28368 28380 28386 28392 28400 28404 28416 28420
 28424 28428 28440 28448 28458 28470 28476 28480 28496 28500 28512 28518
 28520 28536 28544 28548 28560 28566 28576 28600 28602 28608 28616 28620
 28638 28640 28644 28650 28656 28672 28674 28680 28688 28700 28704 28710
 28728 28756 28764 28768 28770 28776 28782 28800 28812 28820 28830 28832
 28836 28840 28842 28854 28860 28864 28880 28884 28890 28896 28900 28908
 28912 28920 28928 28938 28944 28950 28952 28956 28960 28968 28980 28992
 28998 29000 29008 29016 29036 29040 29052 29056 29064 29070 29072 29088
 29100 29104 29106 29120 29140 29160 29172 29184 29190 29200 29204 29216
 29232 29240 29250 29256 29260 29264 29268 29274 29280 29304 29312 29322
 29328 29340 29344 29358 29370 29376 29380 29392 29394 29400 29406 29412
 29430 29436 29440 29480 29484 29488 29500 29502 29512 29520 29526 29532
 29536 29540 29550 29568 29574 29580 29592 29596 29600 29610 29624 29640
 29646 29648 29664 29670 29680 29682 29694 29696 29700 29718 29736 29744
 29754 29760 29766 29784 29792 29796 29800 29808 29820 29824 29832 29848
 29850 29862 29868 29876 29880 29898 29900 29904 29916 29920 29928 29946
 29952 29960 29964 29970 29988 30000 30008 30016 30020 30024 30030 30044
 30056 30060 30072 30080 30084 30090 30096 30100 30108 30114 30120 30132
 30140 30144 30150 30160 30176 30184 30186 30192 30200 30208 30210 30212
 30222 30228 30240 30256 30260 30264 30268 30272 30276 30282 30294 30300
 30324 30336 30340 30348 30360 30366 30368 30380 30384 30396 30400 30408
 30420 30438 30448 30450 30456 30464 30480 30492 30498 30500 30504 30510
 30520 30528 30544 30552 30560 30576 30580 30592 30600 30618 30624 30636
 30654 30660 30672 30680 30688 30690 30702 30704 30720 30732 30736 30740
 30744 30750 30752 30756 30772 30780 30784 30798 30800 30804 30810 30816
 30820 30840 30848 30856 30870 30880 30888 30900 30906 30912 30940 30942
 30954 30960 30968 30972 30976 30992 30996 31000 31008 31020 31040 31044
 31050 31080 31086 31088 31096 31104 31108 31110 31122 31136 31140 31152
 31160 31164 31188 31200 31212 31218 31220 31232 31236 31240 31248 31266
 31280 31284 31290 31296 31302 31304 31312 31320 31328 31350 31356 31360
 31374 31388 31392 31400 31408 31416 31428 31434 31440 31458 31460 31464
 31482 31488 31500 31504 31512 31518 31520 31536 31540 31548 31552 31556
 31560 31584 31590 31600 31616 31620 31626 31640 31648 31650 31668 31680
 31692 31710 31720 31724 31740 31744 31746 31752 31768 31780 31800 31806
 31808 31812 31820 31824 31840 31842 31856 31860 31872 31878 31892 31900
 31914 31920 31944 31948 31950 31960 31968 31980 31992 32000 32004 32010
 32016 32028 32032 32040 32046 32058 32060 32064 32076 32088 32096 32100
 32112 32116 32120 32128 32130 32136 32144 32148 32160 32184 32190 32200
 32208 32214 32220 32224 32232 32238 32240 32250 32256 32274 32280 32292
 32300 32320 32340 32364 32368 32370 32376 32382 32384 32396 32400 32424
 32430 32436 32448 32452 32472 32480 32490 32500 32508 32512 32520 32526
 32528 32536 32538 32544 32550 32560 32562 32568 32580 32592 32600 32604
 32616 32620 32634 32640 32648 32656 32660 32670 32680 32688 32700 32704
 32706 32712 32718 32724 32732 32736 32742 32752 32760 32768 32780 32800
 32802 32832 32844 32850 32856 32860 32864 32868 32880 32886 32900 32912
 32916 32922 32928 32940 32944 32956 32960 32970 32976 32980 32984 32994
 33000 33012 33020 33024 33040 33048 33060 33066 33072 33088 33096 33120
 33124 33132 33136 33138 33150 33152 33174 33176 33180 33184 33200 33210
 33216 33220 33222 33228 33232 33240 33252 33264 33280 33288 33292 33300
 33306 33320 33330 33354 33360 33372 33376 33384 33390 33396 33400 33408
 33432 33440 33450 33456 33460 33462 33480 33488 33500 33516 33528 33534
 33536 33540 33552 33558 33572 33580 33592 33600 33616 33620 33630 33640
 33642 33660 33672 33696 33712 33720 33726 33728 33740 33744 33750 33756
 33760 33768 33792 33796 33800 33810 33820 33824 33840 33852 33856 33858
 33864 33872 33880 33894 33900 33904 33908 33912 33920 33924 33930 33936
 33948 33960 33966 33968 33972 33984 33990 34000 34008 34020 34038 34040
 34048 34050 34056 34060 34068 34080 34086 34100 34104 34112 34122 34128
 34132 34144 34146 34160 34164 34170 34176 34182 34188 34200 34216 34220
 34224 34230 34240 34254 34272 34290 34300 34304 34314 34320 34336 34340
 34344 34350 34352 34362 34368 34380 34398 34400 34408 34410 34416 34428
 34440 34452 34476 34496 34500 34506 34524 34528 34540 34542 34544 34560
 34578 34580 34584 34592 34596 34600 34608 34632 34650 34656 34668 34672
 34680 34692 34704 34710 34716 34720 34736 34740 34748 34752 34760 34770
 34776 34780 34782 34788 34800 34804 34816 34830 34840 34848 34860 34866
 34880 34884 34888 34902 34914 34916 34920 34944 34950 34960 34968 34974
 34980 34986 34992 35000 35020 35024 35028 35040 35046 35052 35070 35072
 35084 35088 35100 35112 35136 35140 35148 35152 35154 35160 35168 35178
 35190 35200 35208 35216 35224 35226 35244 35250 35256 35260 35264 35280
 35292 35298 35308 35310 35316 35322 35328 35334 35340 35360 35370 35376
 35380 35392 35400 35406 35412 35420 35424 35442 35448 35460 35464 35476
 35478 35490 35496 35500 35508 35520 35532 35550 35552 35560 35568 35574
 35584 35588 35600 35604 35616 35620 35632 35640 35644 35658 35670 35672
 35680 35696 35700 35712 35720 35724 35728 35742 35760 35772 35776 35784
 35796 35800 35802 35816 35820 35838 35840 35844 35850 35856 35860 35868
 35872 35880 35904 35910 35952 35960 35964 35970 35980 35984 36000 36018
 36024 36036 36040 36064 36072 36080 36096 36100 36108 36120 36126 36140
 36144 36150 36156 36160 36162 36168 36176 36180 36192 36200 36208 36210
 36234 36240 36252 36256 36260 36270 36288 36300 36312 36320 36330 36340
 36344 36348 36352 36360 36366 36380 36400 36408 36414 36432 36448 36450
 36456 36480 36498 36500 36504 36512 36516 36520 36540 36564 36570 36576
 36580 36582 36594 36600 36608 36612 36624 36630 36640 36652 36656 36660
 36666 36672 36680 36696 36704 36708 36720 36736 36738 36740 36750 36764
 36774 36784 36792 36800 36816 36820 36828 36840 36846 36848 36860 36864
 36888 36894 36900 36918 36920 36924 36936 36960 36972 36980 36984 36990
 36992 37000 37008 37024 37026 37044 37050 37056 37060 37062 37080 37088
 37092 37098 37100 37120 37128 37136 37152 37164 37168 37170 37180 37184
 37200 37206 37224 37230 37232 37236 37240 37248 37260 37264 37268 37278
 37280 37284 37290 37296 37312 37320 37324 37332 37338 37350 37352 37356
 37368 37376 37380 37386 37392 37400 37408 37410 37422 37436 37440 37464
 37488 37492 37500 37506 37518 37520 37530 37536 37544 37548 37560 37576
 37584 37590 37596 37600 37604 37620 37632 37638 37648 37650 37660 37664
 37674 37680 37696 37700 37720 37728 37740 37746 37752 37758 37760 37772
 37800 37808 37812 37818 37820 37824 37828 37830 37840 37842 37848 37856
 37872 37884 37888 37904 37908 37920 37926 37932 37940 37944 37950 37960
 37962 37968 37980 37996 38000 38010 38016 38024 38040 38048 38052 38060
 38064 38070 38076 38080 38088 38100 38106 38130 38136 38142 38144 38148
 38160 38164 38178 38180 38184 38190 38192 38200 38208 38214 38220 38232
 38240 38250 38272 38280 38304 38332 38340 38346 38352 38360 38364 38368
 38376 38380 38394 38400 38412 38416 38420 38430 38440 38448 38454 38456
 38472 38478 38480 38500 38502 38512 38514 38520 38528 38532 38540 38544
 38550 38556 38560 38584 38592 38600 38608 38610 38612 38624 38628 38640
 38646 38656 38664 38676 38682 38688 38700 38718 38720 38736 38740 38752
 38760 38766 38780 38784 38800 38808 38836 38844 38850 38860 38862 38874
 38880 38896 38912 38916 38920 38934 38940 38948 38964 38976 38988 39000
 39004 39006 39008 39024 39032 39040 39042 39060 39072 39078 39096 39100
 39102 39104 39116 39120 39140 39144 39150 39156 39160 39168 39184 39186
 39192 39200 39204 39208 39216 39220 39240 39248 39260 39270 39284 39294
 39300 39312 39324 39330 39336 39340 39360 39366 39368 39372 39376 39380
 39390 39396 39400 39402 39420 39424 39432 39438 39440 39444 39450 39456
 39468 39474 39480 39500 39508 39520 39528 39546 39552 39560 39564 39576
 39592 39600 39606 39618 39620 39624 39648 39672 39676 39680 39688 39690
 39712 39720 39728 39732 39744 39750 39760 39776 39780 39788 39798 39800
 39816 39820 39824 39840 39852 39858 39864 39872 39888 39900 39904 39928
 39930 39936 39952 39960 39984 39990 39996 40000 40014 40020 40032 40040
 40050 40068 40080 40086 40092 40096 40110 40112 40120 40128 40140 40144
 40152 40158 40160 40170 40176 40180 40188 40192 40194 40200 40230 40248
 40256 40260 40278 40280 40290 40296 40300 40304 40320 40326 40338 40344
 40348 40350 40352 40356 40362 40368 40376 40392 40400 40404 40420 40432
 40440 40446 40448 40460 40464 40470 40480 40482 40488 40500 40512 40524
 40528 40530 40544 40560 40572 40584 40590 40596 40600 40608 40626 40640
 40650 40656 40660 40662 40664 40672 40680 40698 40700 40704 40710 40716
 40734 40736 40740 40752 40768 40770 40788 40796 40800 40812 40820 40824
 40832 40848 40860 40866 40872 40880 40890 40896 40920 40936 40940 40950
 40960 40964 40976 40986 40992 41000 41004 41008 41020 41028 41040 41052
 41064 41070 41072 41076 41080 41088 41100 41106 41118 41120 41124 41132
 41140 41148 41160 41168 41180 41184 41200 41202 41208 41216 41220 41238
 41250 41256 41262 41268 41272 41280 41292 41296 41300 41310 41316 41328
 41340 41344 41356 41360 41370 41382 41392 41400 41412 41418 41420 41440
 41448 41454 41472 41480 41496 41500 41514 41520 41536 41538 41540 41550
 41552 41574 41580 41584 41600 41610 41616 41624 41634 41640 41648 41652
 41664 41676 41688 41700 41712 41720 41724 41728 41730 41736 41748 41760
 41778 41790 41796 41800 41808 41814 41820 41832 41844 41850 41856 41860
 41880 41886 41888 41904 41910 41912 41920 41922 41940 41944 41952 41958
 41964 41976 41984 42000 42016 42020 42024 42028 42042 42048 42064 42066
 42080 42084 42090 42108 42112 42120 42126 42140 42150 42160 42168 42174
 42180 42192 42196 42200 42210 42224 42228 42240 42256 42276 42280 42282
 42294 42300 42312 42320 42328 42330 42336 42340 42354 42360 42364 42372
 42380 42390 42400 42408 42416 42420 42432 42444 42450 42456 42460 42476
 42480 42496 42500 42504 42510 42532 42534 42552 42560 42570 42588 42592
 42600 42606 42624 42630 42636 42640 42642 42656 42660 42672 42680 42688
 42700 42704 42714 42720 42728 42744 42750 42752 42768 42780 42784 42800
 42804 42812 42816 42822 42834 42840 42848 42864 42880 42900 42912 42920
 42924 42930 42940 42944 42952 42960 42966 42976 42978 42980 42984 43000
 43008 43020 43032 43036 43040 43044 43050 43056 43080 43092 43120 43134
 43146 43148 43152 43160 43164 43168 43176 43180 43200 43212 43218 43230
 43232 43240 43248 43254 43260 43264 43290 43296 43316 43320 43326 43332
 43340 43344 43350 43360 43362 43368 43380 43384 43392 43400 43416 43420
 43424 43428 43434 43440 43452 43456 43460 43470 43472 43488 43500 43512
 43520 43524 43540 43548 43554 43560 43578 43584 43596 43600 43602 43608
 43616 43624 43632 43648 43650 43656 43660 43680 43692 43700 43708 43710
 43736 43740 43758 43776 43780 43792 43800 43806 43808 43820 43824 43836
 43840 43848 43860 43884 43888 43890 43896 43902 43904 43920 43940 43950
 43956 43960 43968 43992 44000 44004 44010 44016 44020 44022 44032 44044
 44064 44070 44080 44082 44088 44096 44100 44118 44128 44144 44148 44154
 44156 44160 44176 44184 44196 44200 44208 44220 44226 44232 44240 44250
 44268 44280 44286 44288 44296 44298 44304 44310 44320 44336 44352 44370
 44376 44380 44384 44388 44394 44400 44408 44436 44440 44460 44472 44480
 44484 44492 44496 44500 44512 44520 44528 44540 44544 44548 44550 44576
 44600 44604 44608 44616 44620 44622 44640 44660 44676 44688 44694 44700
 44704 44712 44720 44730 44736 44744 44748 44772 44784 44800 44802 44814
 44820 44840 44850 44856 44874 44880 44884 44892 44896 44916 44928 44940
 44946 44960 44968 44980 44982 44988 44992 45000 45008 45012 45024 45030
 45036 45056 45066 45072 45080 45084 45090 45100 45108 45120 45126 45136
 45140 45144 45150 45152 45162 45180 45192 45198 45200 45210 45216 45220
 45232 45240 45248 45260 45264 45276 45280 45288 45296 45300 45312 45318
 45320 45342 45344 45360 45372 45384 45390 45396 45400 45402 45408 45414
 45424 45440 45448 45450 45472 45474 45486 45492 45496 45500 45504 45510
 45522 45528 45540 45552 45560 45568 45570 45576 45580 45584 45588 45594
 45600 45612 45630 45632 45640 45648 45668 45672 45684 45696 45708 45720
 45724 45738 45750 45752 45756 45760 45780 45792 45800 45816 45820 45824
 45828 45840 45846 45864 45870 45880 45888 45892 45900 45904 45920 45936
 45942 45954 45968 45980 45990 46000 46002 46004 46008 46020 46032 46050
 46056 46060 46080 46092 46098 46104 46110 46112 46116 46128 46134 46144
 46158 46170 46172 46176 46200 46206 46208 46224 46228 46230 46240 46248
 46256 46260 46272 46280 46284 46288 46308 46314 46320 46332 46336 46340
 46350 46360 46368 46376 46384 46398 46400 46410 46420 46440 46452 46458
 46460 46464 46480 46488 46494 46500 46508 46512 46530 46536 46540 46552
 46560 46566 46580 46592 46600 46620 46624 46632 46640 46644 46648 46650
 46656 46662 46704 46710 46716 46720 46728 46736 46740 46746 46760 46782
 46784 46800 46816 46818 46830 46844 46848 46854 46860 46864 46872 46880
 46900 46904 46920 46926 46944 46950 46956 46968 46980 46992 47000 47008
 47012 47034 47040 47056 47058 47060 47064 47068 47080 47082 47088 47096
 47100 47104 47112 47120 47124 47142 47160 47168 47180 47190 47196 47200
 47208 47216 47232 47236 47250 47256 47260 47264 47268 47280 47286 47300
 47304 47310 47320 47322 47328 47334 47340 47344 47348 47360 47376 47380
 47400 47424 47430 47432 47460 47466 47472 47488 47500 47502 47520 47532
 47538 47544 47550 47560 47580 47586 47600 47610 47616 47628 47632 47652
 47656 47658 47664 47670 47676 47680 47684 47696 47700 47712 47718 47728
 47730 47736 47740 47748 47760 47784 47790 47792 47800 47808 47824 47838
 47840 47850 47872 47880 47892 47908 47916 47922 47936 47940 47952 47960
 47970 47988 48000 48006 48020 48024 48032 48042 48048 48060 48076 48090
 48096 48100 48108 48112 48114 48128 48132 48140 48144 48150 48160 48168
 48174 48180 48192 48200 48204 48208 48216 48222 48224 48240 48246 48256
 48260 48276 48280 48300 48312 48320 48330 48336 48348 48356 48360 48372
 48380 48384 48400 48412 48416 48420 48438 48440 48450 48464 48480 48488
 48500 48504 48510 48516 48528 48544 48546 48552 48564 48576 48594 48600
 48608 48618 48620 48636 48640 48642 48654 48664 48672 48678 48688 48692
 48708 48720 48750 48752 48756 48760 48762 48768 48776 48780 48792 48800
 48804 48816 48828 48832 48840 48852 48870 48880 48888 48896 48900 48906
 48924 48928 48930 48944 48960 48972 48980 48984 48990 49000 49020 49028
 49032 49050 49056 49060 49062 49068 49086 49088 49098 49104 49120 49128
 49140 49152 49164 49170 49184 49192 49196 49200 49220 49224 49232 49248
 49266 49280 49284 49290 49296 49300 49302 49312 49320 49344 49350 49364
 49368 49374 49392 49400 49404 49408 49410 49416 49434 49440 49452 49456
 49464 49470 49476 49500 49504 49518 49530 49532 49536 49552 49560 49572
 49580 49588 49590 49600 49608 49632 49640 49644 49648 49650 49660 49662
 49664 49680 49686 49698 49700 49704 49712 49720 49728 49734 49760 49764
 49770 49776 49780 49784 49800 49808 49824 49830 49840 49842 49848 49856
 49860 49868 49878 49880 49896 49920 49932 49938 49940 49950 49952 49956
 49968 49980 49984 50000 50008 50020 50024 50040 50048 50058 50064 50076
 50080 50094 50096 50100 50112 50120 50128 50140 50148 50160 50176 50180
 50184 50190 50200 50204 50220 50232 50240 50250 50256 50274 50292 50304
 50310 50320 50328 50336 50344 50358 50370 50372 50380 50382 50388 50400
 50416 50424 50430 50432 50440 50456 50460 50464 50490 50496 50500 50508
 50512 50540 50544 50550 50560 50568 50576 50580 50592 50596 50600 50610
 50616 50622 50624 50634 50640 50652 50660 50680 50688 50694 50700 50706
 50720 50730 50736 50740 50752 50760 50764 50768 50778 50784 50796 50800
 50808 50820 50832 50840 50844 50848 50850 50856 50862 50864 50868 50876
 50880 50886 50904 50912 50920 50922 50932 50940 50944 50952 50958 50960
 50976 51000 51012 51030 51040 51060 51072 51084 51088 51090 51100 51102
 51120 51128 51136 51150 51152 51156 51168 51192 51198 51200 51204 51212
 51216 51220 51240 51246 51260 51264 51272 51282 51296 51300 51304 51324
 51330 51336 51340 51352 51354 51360 51376 51392 51400 51408 51414 51436
 51450 51456 51460 51480 51500 51504 51510 51516 51520 51528 51546 51548
 51552 51568 51570 51576 51584 51600 51604 51612 51620 51624 51636 51642
 51648 51660 51678 51680 51688 51696 51700 51712 51714 51740 51744 51750
 51756 51772 51786 51792 51800 51810 51816 51832 51840 51852 51870 51876
 51884 51888 51894 51900 51912 51920 51940 51948 51952 51968 51980 51984
 52000 52002 52008 52020 52026 52032 52038 52050 52052 52056 52060 52074
 52080 52096 52104 52110 52122 52128 52136 52140 52152 52160 52164 52170
 52182 52192 52200 52206 52208 52212 52224 52248 52256 52260 52272 52288
 52290 52320 52326 52332 52338 52350 52360 52374 52380 52392 52400 52416
 52428 52432 52440 52448 52452 52460 52470 52480 52488 52496 52500 52520
 52528 52530 52536 52540 52542 52548 52560 52572 52576 52578 52580 52584
 52592 52600 52608 52614 52624 52626 52632 52640 52650 52668 52700 52704
 52710 52716 52722 52724 52728 52734 52736 52740 52752 52768 52780 52800
 52808 52812 52820 52824 52832 52836 52848 52864 52866 52884 52890 52896
 52900 52920 52938 52948 52950 52960 52962 52974 52976 52992 52998 53000
 53010 53016 53020 53040 53064 53070 53072 53088 53100 53116 53118 53120
 53124 53130 53136 53144 53152 53172 53184 53190 53196 53200 53214 53240
 53244 53248 53250 53256 53262 53268 53280 53284 53298 53300 53312 53320
 53328 53340 53352 53360 53376 53380 53382 53400 53406 53424 53430 53440
 53448 53452 53456 53460 53466 53480 53500 53504 53508 53520 53536 53544
 53550 53560 53568 53580 53584 53586 53592 53600 53622 53640 53652 53658
 53664 53676 53680 53694 53700 53704 53712 53720 53724 53728 53730 53732
 53742 53760 53766 53768 53784 53788 53790 53792 53800 53802 53808 53816
 53820 53824 53850 53856 53872 53900 53920 53922 53928 53940 53946 53952
 53956 53960 53970 53976 53984 54000 54016 54020 54032 54036 54040 54054
 54060 54064 54080 54096 54108 54112 54120 54126 54128 54132 54144 54150
 54162 54168 54180 54200 54208 54210 54216 54234 54236 54240 54252 54264
 54270 54272 54280 54288 54292 54300 54312 54320 54336 54340 54360 54366
 54372 54378 54384 54390 54400 54404 54416 54432 54444 54450 54464 54468
 54480 54488 54492 54496 54500 54510 54516 54520 54522 54528 54540 54560
 54570 54576 54594 54600 54612 54636 54648 54656 54672 54684 54696 54704
 54720 54736 54740 54750 54752 54756 54760 54768 54774 54780 54784 54796
 54800 54808 54810 54824 54832 54834 54846 54860 54864 54870 54876 54880
 54900 54908 54912 54918 54924 54936 54940 54944 54948 54960 54964 54978
 54984 54990 55000 55008 55016 55020 55024 55040 55044 55050 55056 55062
 55068 55076 55080 55088 55100 55104 55110 55120 55132 55146 55152 55160
 55176 55180 55188 55200 55216 55220 55224 55230 55242 55260 55264 55272
 55278 55284 55290 55296 55300 55328 55332 55350 55352 55360 55380 55384
 55386 55400 55404 55420 55432 55440 55458 55468 55470 55476 55480 55488
 55500 55506 55512 55520 55536 55552 55566 55568 55584 55590 55600 55608
 55614 55616 55620 55632 55638 55640 55648 55650 55660 55664 55680 55692
 55704 55720 55728 55744 55746 55748 55752 55760 55770 55776 55792 55800
 55808 55836 55840 55848 55854 55860 55872 55880 55890 55896 55900 55902
 55920 55926 55936 55944 55950 55952 55968 55980 55986 55998 56000 56004
 56016 56028 56032 56034 56048 56052 56056 56064 56070 56088 56100 56112
 56120 56144 56154 56160 56166 56168 56196 56200 56214 56224 56232 56238
 56240 56250 56252 56256 56260 56280 56304 56316 56320 56322 56340 56358
 56364 56368 56376 56392 56394 56400 56406 56416 56420 56430 56440 56448
 56472 56480 56490 56496 56500 56508 56520 56538 56540 56544 56550 56560
 56576 56580 56588 56592 56600 56608 56610 56616 56620 56628 56640 56644
 56658 56672 56680 56700 56712 56718 56724 56730 56736 56742 56760 56772
 56780 56784 56800 56808 56826 56832 56840 56848 56856 56862 56880 56896
 56898 56910 56916 56924 56940 56952 56960 56970 56980 56992 56994 57000
 57018 57024 57036 57040 57060 57072 57078 57088 57090 57096 57112 57114
 57120 57132 57148 57150 57152 57168 57186 57200 57204 57216 57222 57228
 57232 57240 57246 57252 57270 57276 57280 57288 57300 57304 57312 57316
 57324 57330 57344 57348 57354 57360 57376 57380 57392 57400 57408 57420
 57428 57440 57456 57460 57474 57486 57498 57500 57510 57512 57528 57536
 57540 57546 57552 57564 57568 57570 57596 57600 57616 57618 57620 57624
 57630 57640 57652 57660 57664 57672 57680 57684 57708 57720 57728 57732
 57744 57750 57760 57768 57776 57780 57792 57798 57800 57810 57816 57820
 57824 57834 57840 57856 57860 57876 57888 57900 57904 57912 57918 57920
 57936 57942 57960 57980 57984 57988 57996 58000 58014 58016 58032 58050
 58056 58064 58072 58080 58100 58104 58110 58112 58116 58128 58136 58140
 58144 58156 58158 58170 58176 58188 58200 58208 58212 58220 58236 58240
 58254 58256 58266 58280 58290 58296 58300 58320 58344 58368 58374 58380
 58400 58408 58410 58420 58422 58432 58446 58448 58460 58464 58480 58482
 58500 58506 58512 58520 58528 58536 58548 58560 58580 58590 58596 58600
 58604 58608 58624 58632 58644 58650 58656 58672 58674 58680 58688 58696
 58710 58716 58720 58734 58740 58752 58760 58776 58784 58788 58800 58806
 58812 58820 58824 58828 58830 58860 58864 58872 58880 58890 58900 58912
 58926 58928 58938 58944 58950 58956 58960 58968 58976 58986 58996 59000
 59004 59010 59020 59024 59040 59048 59052 59058 59064 59070 59072 59080
 59094 59100 59124 59130 59136 59148 59160 59166 59168 59180 59184 59192
 59200 59202 59220 59248 59250 59262 59274 59276 59280 59292 59296 59304
 59312 59328 59332 59334 59340 59346 59360 59364 59388 59392 59400 59430
 59436 59444 59466 59472 59488 59496 59500 59508 59514 59520 59532 59540
 59568 59580 59584 59592 59598 59600 59616 59620 59640 59648 59660 59664
 59670 59680 59682 59696 59700 59706 59712 59724 59730 59736 59740 59748
 59752 59760 59772 59778 59780 59784 59796 59800 59808 59826 59832 59840
 59850 59856 59860 59888 59892 59904 59920 59928 59940 59964 59976 59984
 59994 60000 60016 60024 60030 60032 60040 60048 60060 60088 60096 60102
 60112 60116 60120 60138 60140 60144 60160 60168 60172 60180 60192 60200
 60204 60210 60216 60228 60240 60256 60258 60260 60264 60270 60280 60282
 60288 60300 60312 60320 60352 60368 60372 60384 60390 60400 60416 60420
 60424 60444 60450 60452 60456 60480 60496 60500 60512 60516 60520 60522
 60528 60534 60536 60544 60552 60564 60580 60588 60600 60606 60630 60632
 60640 60648 60656 60660 60672 60676 60680 60684 60690 60696 60704 60720
 60732 60736 60750 60760 60762 60768 60784 60786 60788 60792 60800 60816
 60822 60840 60844 60858 60860 60864 60876 60888 60894 60896 60900 60912
 60918 60928 60940 60944 60956 60960 60984 60990 60996 61000 61008 61020
 61040 61050 61056 61060 61072 61074 61088 61100 61104 61110 61120 61124
 61128 61152 61160 61180 61182 61184 61194 61200 61218 61230 61236 61248
 61256 61272 61290 61292 61308 61320 61332 61336 61344 61348 61360 61376
 61380 61400 61404 61408 61410 61420 61424 61440 61446 61456 61464 61472
 61480 61488 61500 61504 61506 61512 61516 61530 61540 61542 61544 61548
 61560 61568 61578 61596 61600 61608 61614 61620 61628 61632 61640 61650
 61656 61664 61680 61686 61696 61698 61710 61712 61722 61740 61744 61752
 61760 61770 61776 61788 61800 61812 61820 61824 61830 61852 61854 61864
 61880 61884 61902 61908 61920 61936 61938 61940 61944 61950 61952 61974
 61984 61992 62000 62010 62016 62034 62040 62048 62060 62080 62088 62100
 62118 62128 62130 62132 62140 62160 62172 62176 62192 62200 62208 62216
 62220 62238 62244 62250 62260 62272 62280 62288 62292 62300 62304 62310
 62320 62322 62328 62356 62370 62376 62400 62424 62436 62440 62460 62464
 62468 62472 62478 62480 62496 62500 62514 62524 62532 62550 62560 62568
 62580 62586 62592 62600 62604 62608 62620 62622 62624 62628 62634 62640
 62652 62656 62660 62664 62694 62700 62712 62720 62730 62744 62748 62752
 62766 62776 62780 62784 62790 62800 62816 62820 62832 62856 62868 62880
 62900 62910 62916 62920 62928 62944 62946 62952 62964 62972 62976 62988
 62992 63000 63008 63020 63024 63030 63036 63040 63042 63048 63054 63072
 63080 63096 63104 63112 63120 63126 63140 63156 63162 63168 63180 63184
 63196 63200 63204 63210 63220 63232 63240 63252 63270 63280 63288 63294
 63296 63300 63308 63336 63342 63360 63364 63376 63384 63392 63400 63414
 63420 63426 63440 63444 63448 63450 63460 63468 63480 63488 63492 63500
 63504 63510 63536 63540 63544 63546 63552 63558 63560 63568 63570 63580
 63600 63612 63616 63624 63630 63640 63648 63664 63666 63672 63680 63684
 63690 63700 63712 63714 63720 63726 63744 63750 63756 63784 63798 63800
 63812 63828 63840 63852 63856 63860 63882 63888 63896 63900 63920 63936
 63940 63954 63960 63984 63990 64000 64008 64020 64032 64050 64056 64064
 64068 64080 64092 64116 64120 64128 64144 64148 64152 64170 64176 64192
 64200 64206 64218 64220 64224 64232 64240 64256 64260 64272 64288 64296
 64308 64320 64328 64344 64350 64368 64372 64380 64386 64400 64410 64416
 64428 64440 64448 64460 64464 64470 64476 64480 64484 64496 64500 64512
 64524 64530 64548 64554 64560 64566 64584 64592 64600 64602 64614 64620
 64638 64640 64668 64672 64680 64688 64704 64722 64728 64736 64740 64746
 64752 64764 64768 64770 64780 64792 64800 64818 64824 64848 64856 64860
 64872 64876 64890 64896 64900 64904 64940 64944 64960 64974 64976 64980
 64988 64998 65000 65008 65010 65016 65024 65040 65044 65052 65056 65070
 65072 65076 65088 65100 65104 65120 65124 65130 65136 65142 65156 65160
 65178 65184 65190 65200 65208 65212 65232 65240 65250 65260 65268 65274
 65280 65286 65296 65310 65312 65320 65322 65340 65352 65360 65376 65394
 65400 65408 65412 65416 65424 65436 65448 65464 65472 65484 65490 65500
 65504 65520 65536 65538 65540 65550 65552 65560 65562 65598 65600 65604
 65610 65620 65632 65648 65660 65664 65670 65688 65700 65712 65720 65728
 65730 65736 65740 65754 65760 65772 65780 65790 65792 65800 65824 65826
 65832 65844 65856 65860 65872 65880 65884 65888 65892 65910 65912 65920
 65928 65934 65936 65940 65952 65960 65964 65968 65988 66000 66006 66024
 66030 66040 66048 66052 66060 66066 66080 66096 66120 66132 66144 66150
 66164 66176 66192 66198 66200 66216 66220 66222 66234 66240 66248 66264
 66270 66272 66276 66294 66300 66304 66312 66330 66332 66340 66348 66352
 66360 66368 66378 66400 66402 66420 66432 66440 66444 66456 66462 66464
 66468 66480 66500 66504 66516 66528 66552 66560 66564 66570 66576 66582
 66584 66600 66608 66612 66624 66640 66654 66660 66690 66696 66700 66708
 66720 66726 66738 66744 66750 66752 66768 66780 66792 66800 66804 66810
 66816 66820 66822 66836 66864 66880 66900 66906 66912 66920 66924 66930
 66960 66976 66980 66990 67000 67008 67014 67032 67050 67056 67068 67072
 67080 67100 67104 67116 67122 67140 67144 67158 67160 67164 67176 67184
 67200 67228 67230 67232 67240 67260 67266 67280 67284 67320 67326 67328
 67338 67340 67344 67368 67374 67392 67396 67400 67410 67416 67424 67440
 67452 67456 67470 67480 67482 67488 67496 67500 67512 67518 67520 67524
 67536 67540 67554 67564 67580 67584 67592 67600 67608 67620 67626 67640
 67648 67650 67660 67662 67680 67704 67710 67712 67716 67728 67732 67744
 67760 67770 67776 67782 67788 67792 67800 67808 67816 67824 67830 67840
 67848 67860 67872 67890 67896 67900 67914 67920 67932 67936 67938 67940
 67944 67950 67952 67968 67980 68000 68012 68016 68020 68040 68058 68060
 68068 68076 68080 68094 68096 68100 68112 68120 68136 68160 68172 68200
 68208 68220 68224 68238 68244 68250 68256 68264 68272 68288 68292 68310
 68320 68328 68340 68352 68364 68370 68376 68380 68382 68400 68404 68418
 68420 68432 68440 68442 68448 68460 68472 68480 68500 68502 68508 68526
 68540 68544 68552 68556 68562 68572 68580 68586 68598 68600 68608 68628
 68634 68640 68670 68672 68680 68684 68688 68700 68704 68706 68712 68724
 68728 68730 68736 68742 68748 68760 68768 68780 68796 68800 68808 68816
 68820 68832 68838 68848 68850 68856 68860 68864 68880 68900 68904 68908
 68928 68940 68944 68952 68970 68992 69000 69006 69008 69012 69020 69030
 69048 69056 69080 69084 69088 69090 69102 69120 69136 69138 69144 69156
 69160 69168 69174 69184 69188 69192 69200 69216 69252 69258 69264 69276
 69300 69312 69336 69342 69344 69360 69368 69372 69376 69384 69390 69400
 69408 69412 69420 69426 69432 69440 69460 69462 69472 69480 69496 69498
 69500 69504 69510 69520 69524 69536 69540 69552 69560 69564 69576 69580
 69600 69608 69616 69630 69632 69654 69660 69664 69678 69680 69690 69692
 69696 69700 69720 69732 69740 69748 69750 69760 69762 69768 69776 69784
 69800 69804 69810 69828 69832 69840 69856 69864 69870 69888 69894 69900
 69904 69916 69920 69930 69936 69940 69948 69960 69966 69972 69984 69996
 70000 70020 70028 70040 70048 70056 70060 70064 70074 70080 70092 70096
 70104 70110 70112 70122 70140 70144 70152 70168 70176 70180 70196 70200
 70224 70252 70266 70272 70278 70280 70288 70290 70296 70300 70304 70308
 70312 70320 70336 70350 70356 70364 70380 70392 70400 70416 70422 70432
 70434 70448 70452 70460 70464 70470 70488 70500 70512 70518 70520 70528
 70532 70560 70584 70590 70596 70600 70602 70616 70620 70632 70644 70650
 70656 70664 70668 70680 70686 70688 70700 70720 70728 70740 70752 70756
 70760 70770 70784 70788 70794 70800 70812 70818 70824 70832 70840 70848
 70854 70866 70884 70890 70896 70902 70908 70912 70920 70924 70928 70932
 70950 70952 70956 70980 70992 71000 71008 71010 71016 71022 71024 71036
 71040 71060 71064 71070 71082 71100 71104 71120 71136 71148 71168 71176
 71190 71196 71200 71208 71214 71232 71240 71250 71262 71264 71280 71288
 71298 71300 71316 71340 71344 71346 71360 71364 71370 71380 71392 71400
 71424 71440 71442 71448 71456 71460 71478 71484 71496 71500 71514 71520
 71526 71536 71540 71544 71550 71552 71568 71592 71600 71604 71610 71616
 71622 71632 71640 71656 71676 71680 71688 71700 71708 71712 71720 71736
 71740 71744 71760 71764 71780 71800 71808 71820 71832 71838 71862 71874
 71876 71896 71904 71910 71920 71928 71932 71936 71940 71960 71968 71982
 71994 72000 72012 72020 72030 72036 72044 72048 72072 72080 72090 72100
 72114 72128 72144 72150 72160 72162 72168 72176 72180 72192 72198 72200
 72210 72216 72220 72224 72240 72252 72268 72270 72276 72280 72288 72300
 72306 72312 72320 72324 72336 72352 72360 72380 72384 72390 72400 72408
 72414 72416 72420 72436 72448 72450 72468 72480 72488 72496 72500 72504
 72512 72520 72522 72534 72540 72558 72570 72576 72580 72588 72592 72594
 72600 72618 72624 72630 72640 72656 72660 72666 72680 72688 72696 72704
 72716 72720 72732 72744 72750 72756 72760 72768 72772 72774 72792 72800
 72816 72820 72828 72846 72848 72864 72870 72884 72896 72900 72912 72928
 72930 72954 72960 72980 72996 73000 73008 73024 73032 73038 73040 73060
 73062 73080 73098 73100 73108 73112 73128 73134 73140 73152 73160 73164
 73168 73170 73188 73200 73206 73216 73224 73232 73236 73242 73248 73260
 73264 73272 73278 73280 73290 73304 73312 73320 73326 73332 73340 73344
 73350 73360 73386 73392 73400 73408 73416 73424 73428 73440 73444 73458
 73470 73472 73476 73480 73500 73528 73530 73536 73542 73548 73554 73556
 73568 73580 73584 73590 73600 73602 73612 73620 73632 73640 73644 73656
 73660 73680 73692 73696 73700 73704 73710 73712 73720 73728 73746 73752
 73776 73780 73788 73794 73800 73830 73836 73840 73848 73854 73872 73892
 73904 73920 73926 73944 73948 73950 73960 73968 73980 73984 73986 74000
 74008 74016 74022 74046 74048 74052 74060 74088 74100 74106 74112 74120
 74124 74130 74140 74144 74152 74160 74176 74178 74184 74196 74200 74214
 74228 74240 74244 74250 74256 74272 74284 74298 74304 74328 74336 74340
 74358 74360 74368 74370 74382 74400 74412 74424 74448 74460 74464 74466
 74472 74480 74490 74496 74500 74520 74528 74536 74550 74556 74560 74568
 74580 74592 74600 74620 74624 74640 74646 74648 74664 74670 74672 74676
 74688 74700 74704 74712 74730 74732 74736 74740 74752 74760 74772 74778
 74784 74790 74796 74800 74802 74816 74820 74844 74860 74868 74872 74880
 74888 74896 74898 74900 74910 74928 74934 74952 74958 74970 74976 74980
 74984 75000 75008 75012 75020 75030 75036 75040 75042 75048 75060 75068
 75072 75088 75096 75114 75120 75140 75144 75150 75152 75168 75174 75180
 75192 75200 75208 75210 75222 75240 75258 75264 75270 75276 75296 75300
 75306 75320 75328 75330 75336 75344 75348 75360 75384 75390 75392 75400
 75420 75432 75438 75440 75456 75460 75468 75480 75488 75492 75500 75504
 75516 75520 75544 75558 75570 75576 75582 75600 75616 75620 75624 75628
 75632 75636 75640 75648 75656 75660 75680 75684 75690 75696 75702 75712
 75744 75750 75762 75768 75776 75780 75800 75808 75810 75816 75820 75834
 75840 75852 75864 75870 75880 75888 75894 75900 75920 75924 75936 75960
 75978 75980 75990 75992 76000 76020 76024 76032 76048 76050 76076 76080
 76092 76096 76104 76110 76120 76128 76140 76146 76152 76160 76176 76180
 76194 76200 76212 76220 76224 76230 76244 76248 76260 76266 76272 76284
 76288 76296 76300 76302 76304 76314 76320 76328 76336 76340 76356 76360
 76362 76368 76380 76384 76398 76400 76410 76416 76428 76432 76440 76446
 76452 76464 76472 76480 76494 76500 76518 76540 76544 76560 76590 76600
 76608 76626 76632 76636 76648 76650 76664 76680 76692 76700 76704 76720
 76728 76734 76736 76752 76760 76776 76780 76788 76800 76804 76806 76818
 76820 76824 76830 76832 76836 76840 76860 76880 76890 76896 76908 76912
 76916 76944 76950 76956 76960 76976 76986 76992 77000 77004 77010 77022
 77024 77028 77040 77056 77064 77070 77080 77088 77100 77112 77120 77140
 77142 77154 77168 77180 77184 77190 77200 77216 77220 77224 77248 77250
 77252 77256 77274 77280 77292 77308 77312 77316 77322 77328 77352 77364
 77376 77400 77406 77408 77418 77420 77430 77436 77440 77448 77454 77472
 77480 77488 77490 77500 77504 77520 77532 77544 77550 77556 77560 77562
 77568 77580 77584 77588 77592 77600 77604 77610 77616 77634 77644 77648
 77658 77660 77672 77682 77688 77700 77720 77724 77728 77736 77740 77748
 77760 77778 77784 77792 77800 77812 77814 77824 77826 77832 77840 77850
 77860 77868 77872 77880 77896 77900 77910 77922 77924 77928 77940 77952
 77970 77976 78000 78008 78012 78016 78030 78048 78064 78078 78080 78084
 78090 78100 78108 78120 78128 78132 78144 78156 78176 78192 78200 78204
 78208 78210 78228 78232 78234 78240 78246 78260 78280 78288 78300 78312
 78318 78320 78330 78336 78368 78372 78384 78390 78400 78408 78416 78432
 78440 78456 78474 78480 78496 78498 78500 78520 78528 78540 78546 78568
 78570 78584 78588 78592 78600 78606 78608 78624 78642 78648 78652 78660
 78672 78678 78680 78690 78720 78732 78736 78740 78744 78750 78752 78760
 78764 78780 78792 78800 78804 78810 78822 78832 78840 78848 78858 78864
 78870 78876 78880 78888 78900 78912 78936 78948 78960 78980 78988 78996
 79000 79002 79016 79020 79032 79040 79050 79056 79072 79074 79086 79092
 79100 79104 79110 79112 79116 79120 79128 79134 79152 79156 79170 79180
 79184 79200 79212 79218 79220 79230 79236 79240 79248 79254 79268 79272
 79288 79296 79300 79326 79328 79344 79350 79352 79356 79360 79376 79380
 79398 79400 79420 79422 79424 79440 79456 79460 79464 79488 79492 79500
 79520 79524 79530 79540 79552 79560 79572 79576 79580 79590 79596 79600
 79608 79616 79632 79640 79648 79650 79662 79664 79674 79680 79686 79692
 79696 79704 79712 79716 79728 79740 79744 79758 79764 79768 79772 79776
 79794 79800 79808 79820 79856 79860 79866 79872 79884 79900 79902 79904
 79920 79926 79950 79952 79968 79980 79992 80000 80010 80028 80032 80040
 80064 80070 80080 80088 80100 80106 80128 80136 80160 80172 80178 80180
 80184 80190 80192 80200 80220 80224 80240 80250 80256 80262 80272 80276
 80280 80288 80300 80304 80316 80320 80332 80340 80344 80352 80360 80370
 80376 80384 80388 80400 80416 80430 80444 80448 80454 80460 80472 80478
 80484 80496 80500 80512 80514 80520 80550 80556 80560 80568 80580 80586
 80592 80598 80600 80608 80620 80640 80652 80660 80668 80676 80682 80688
 80696 80700 80704 80712 80724 80730 80736 80740 80752 80784 80800 80808
 80820 80832 80840 80848 80850 80860 80864 80868 80880 80886 80892 80896
 80910 80912 80920 80928 80934 80940 80948 80960 80964 80976 80982 80988
 81000 81004 81016 81024 81030 81048 81054 81056 81060 81084 81088 81090
 81096 81120 81144 81152 81162 81168 81172 81180 81184 81192 81198 81200
 81216 81220 81224 81252 81260 81270 81280 81300 81312 81320 81324 81328
 81340 81344 81354 81360 81378 81380 81396 81400 81408 81420 81432 81438
 81450 81468 81472 81480 81500 81504 81508 81510 81528 81536 81540 81558
 81576 81592 81600 81606 81620 81624 81640 81648 81664 81666 81672 81690
 81696 81700 81702 81720 81732 81738 81744 81750 81760 81774 81776 81780
 81788 81792 81800 81804 81810 81840 81844 81852 81864 81872 81880 81900
 81906 81918 81920 81928 81940 81952 81954 81972 81984 82000 82008 82012
 82016 82026 82038 82040 82044 82056 82060 82064 82080 82104 82110 82128
 82134 82140 82144 82152 82160 82170 82176 82194 82200 82208 82212 82236
 82240 82248 82260 82264 82280 82290 82296 82302 82308 82314 82320 82336
 82340 82344 82348 82350 82360 82362 82368 82384 82386 82400 82404 82410
 82416 82420 82422 82432 82440 82446 82460 82472 82476 82500 82512 82524
 82530 82536 82544 82560 82566 82576 82584 82592 82600 82602 82614 82620
 82628 82632 82650 82656 82680 82688 82698 82712 82720 82728 82740 82752
 82764 82770 82782 82784 82800 82820 82824 82830 82832 82836 82840 82852
 82880 82890 82896 82908 82926 82940 82944 82950 82960 82962 82980 82984
 82992 82998 83000 83028 83040 83056 83070 83072 83076 83080 83096 83100
 83104 83106 83130 83136 83142 83148 83160 83168 83172 83190 83200 83202
 83214 83220 83226 83232 83248 83250 83260 83268 83280 83296 83300 83304
 83328 83340 83352 83356 83358 83370 83376 83380 83400 83408 83412 83420
 83424 83430 83436 83440 83448 83456 83460 83468 83472 83490 83496 83500
 83504 83512 83520 83524 83536 83538 83544 83552 83556 83580 83592 83600
 83616 83620 83622 83628 83636 83640 83664 83676 83688 83692 83694 83700
 83712 83720 83754 83760 83772 83776 83790 83800 83804 83808 83820 83824
 83840 83844 83850 83868 83880 83886 83888 83904 83916 83928 83936 83952
 83968 83970 83980 83984 

SSH Traffic Accounting on Linux

Apparently this is a very hard thing to do. So I’ve written some scripts that take advantage of iptables to track, on a per-minute basis, the traffic used per user.

This is implemented on a Debian virtual-server through which SSH accounts and SSH tunnels are used.

A Brief Overview

This technique involves tailing the /var/log/auth.log file to see when a user logs in via SSH and when they disconnect. In this log is the IP address, port, and user name of the remote connecting user.

By grabbing this information we can insert a rule into iptables to merely monitor all packets going to, and another rule to monitor all packets coming from, that remote IP address and port.

On a regular basis, thereafter, we show the iptables rules along with the statistics Linux keeps for each rule – and the statistic we are interested in is the byte count (not the packet count) that has matched (flowed through) that rule.

Thus we split this goal into two tasks: one to tail the auth.log and create/remove iptables rules; the other task involves listing the iptables rules and writing the results to a database (the accounting side).

Getting iptables to Track Usage

A Perl script was written to tail the auth.log authentication log for messages about when (and from where) a user was connecting (and disconnecting).

When a user connects the auth.log contains a line that looks as follows:

Oct 14 15:17:42 myserver sshd[19897]: Accepted password for jsmith from 192.168.17.3 port 53014 ssh2

A corresponding disconnect line looks like the following:

Oct 15 00:29:12 knuth sshd[19897]: pam_unix(sshd:session): session closed for user jsmith

Note that the process ID (PID) enclosed in square brackets is the only way of matching a closing session to a connection. Thus a running script must keep, in memory, the process IDs of sessions that are being tracked. Comments can be added to iptables rules and this feature could be used to read back existing tracking rules if the tailing script must be restarted.

The following script is executed using the following command:

setsid /usr/bin/tail -n 0 -F /var/log/auth.log |/root/ssh_account.pl 2>/dev/null &
#!/usr/bin/perl

use IO::Select;
use Getopt::Std;

use strict;

my %opts = ();
Getopt::Std::getopts( 'd', \%opts );

select( (select(STDERR),$|=1)[0] ); # autoflush

my %pidlist = ();
my $iptables = "/sbin/iptables";

sub process_log_line {
    my ( $line ) = @_;

    my $pid = undef;
    my $msg = undef;
    if (
        $line =~ m{
            sshd\[(\d+)\]:
            \s+
            (.+)
            $
        }x
    ) {
        ( $pid, $msg ) = ( $1, $2 );
    } else {
        next;
    }

    my $piduser = "";
    if ( exists( $pidlist{$pid} ) ) {
        $piduser = $pidlist{$pid}->{'user'};
    }

    if ( $msg =~ m/Accepted \S+ for (\S+(?:.+\S)?) from (\d+\.\d+\.\d+\.\d+) port (\d+)/ ) {
        my ( $user, $ip, $port ) = ( $1, $2, $3 );

        $pidlist{$pid} = +{
            user => $user,
            ip => $ip,
            port => $port,
            pid => $pid,
        };

        add_entry( $pidlist{$pid} );
    } elsif ( exists( $pidlist{$pid} ) && ( $msg =~ m/session closed for user \Q$piduser\E/ ) ) {
        # delete rules
        my $ip = $pidlist{$pid}->{'ip'};
        my $port = $pidlist{$pid}->{'port'};

        my $comment = "pid:$pid user:$piduser";
        my $cmd = "$iptables -t filter -D useraccount -s $ip -p tcp --sport $port -m comment --comment \"$comment\"";
        `$cmd`;
        $cmd = "$iptables -t filter -D useraccount -d $ip -p tcp --dport $port -m comment --comment \"$comment\"";
        `$cmd`;

        delete $pidlist{$pid};
    }
}

sub add_entry {
    my ( $ref_pid ) = @_;

    my $ip = $ref_pid->{ip};
    my $user = $ref_pid->{user};
    my $port = $ref_pid->{port};
    my $pid = $ref_pid->{pid};

    my $comment = "pid:$pid user:$user";

    # create IP tables rule
    my $cmd = "$iptables -t filter -I useraccount -s $ip -p tcp --sport $port -m comment --comment \"$comment\"";
    `$cmd`;
    $cmd = "$iptables -t filter -I useraccount -d $ip -p tcp --dport $port -m comment --comment \"$comment\"";
    `$cmd`;
}

sub setup_iptables {
    print( STDERR "- setting up iptables\n" ) if ( $opts{d} );
    my $cmd = "$iptables -F useraccount";
    `$cmd`;
    $cmd = "$iptables -N useraccount";
    `$cmd`;
    $cmd = "$iptables -D INPUT -p tcp -j useraccount";
    `$cmd`;
    $cmd = "$iptables -I INPUT -p tcp -j useraccount";
    `$cmd`;
    $cmd = "$iptables -D OUTPUT -p tcp -j useraccount";
    `$cmd`;
    $cmd = "$iptables -I OUTPUT -p tcp -j useraccount";
    `$cmd`;
}

sub check_iptables {
    my $cmd = "$iptables -L useraccount -n -v -x";
    my $data = `$cmd 2>&1`;
    if ( $data =~ m{\QNo chain/target/match by that name\E} ) {
        # must rebuild table
        setup_iptables();
    }

    # go through pid list and add any entries that appear to be missing
    foreach my $pid ( sort keys %pidlist ) {
        my $ip = $pidlist{$pid}->{ip};
        my $port = $pidlist{$pid}->{port};
        my $pid = $pidlist{$pid}->{pid};
        if ( $data !~ m{\s+\Q$ip\E\s+.*?:\Q$port\E\s+.*?:\Q$pid\E\s+} ) {
            add_entry( $pidlist{$pid} );
        }
    }
}

sub main {
    setup_iptables(); # force flush

    my $sel = IO::Select->new( \*STDIN );
    my $readbuf = "";

    while ( 1 ) {
        print( STDERR "Entering select...\n" ) if ( $opts{d} );
        my ( $rh, $wr, $er ) = IO::Select::select( $sel, undef, undef, 10 );

        if ( ( ! $rh ) || ( ! @{$rh} ) ) {
            print( STDERR "- check iptables\n" ) if ( $opts{d} );
            check_iptables();
            next;
        }

        print( STDERR "- read from STDIN\n" ) if ( $opts{d} );
        sysread( \*STDIN, $readbuf, 1024, length($readbuf) );
        while ( $readbuf =~ s{[\r\n]*([^\r\n]+)[\r\n]+}{}s ) {
            print( STDERR "  - process line from STDIN\n" ) if ( $opts{d} );
            process_log_line( $1 );
        }
    }
}

main();

With the above running you will see output similar to the following when you run the command:


vhost01:~# iptables -L useraccount -v -n -x
Chain useraccount (2 references)
    pkts      bytes target     prot opt in     out     source               destination         
     164    39440            tcp  --  *      *       0.0.0.0/0            8.8.8.8      tcp dpt:52615 /* pid:30449 user:jsmith */ 
     266    18128            tcp  --  *      *       8.8.8.8       0.0.0.0/0           tcp spt:52615 /* pid:30449 user:jsmith */ 
   15669 11663476            tcp  --  *      *       0.0.0.0/0            8.8.4.4      tcp dpt:43697 /* pid:28821 user:ajones */ 
   10965  2717224            tcp  --  *      *       8.8.4.4       0.0.0.0/0           tcp spt:43697 /* pid:28821 user:ajones */ 

As you can see the byte count uploaded and downloaded for each session active is given. To keep track of the data used by a user, however, you will need to poll this table frequently and store the incremental changes over time.

Storing Usage Data

I created two tables in MySQL to track usage by minute per user per session, and to summarise this on an hourly basis by user.

I launch a script to do this with the following command:

setsid /root/ssh_store.pl >/dev/null 2>/dev/null &

The script to do this is as follows:

#!/usr/bin/perl -w

use DBI;

use strict;

my $iptables = "/sbin/iptables";
my $debug = 1;

my %pids = ();

sub summarise_minutes {
    print( "+summarise_minutes()\n" ) if ( $debug );
    my $dbh = DBI->connect('dbi:mysql:sshaccount','sshuser','sshpassword')
        or die "Connection Error: $DBI::errstr\n";

   my $sql_1 = q!
INSERT INTO hour
  ( `time`, `user`, `in`, `out` )
SELECT
  TIMESTAMP( date(`time`), MAKETIME( hour(`time`), 0, 0 ) ) AS `time`
  ,user AS `user`
  ,SUM(`in`) AS `in`
  ,SUM(`out`) AS `out`
FROM
  `minute`
WHERE
  (
    date( `time` ) = date( NOW() ) AND
    hour( `time` ) < hour( NOW() )
  ) OR (
    date( `time` ) < date( NOW() )
  )
GROUP BY
  TIMESTAMP( date(`time`), MAKETIME( hour(`time`), 0, 0 ) )
  ,user
!;

    my $sth_1 = $dbh->prepare($sql_1);
    my $ste_1 = $sth_1->execute() or die( "Error: " . $dbh->errstr );

    my $sql_2 = q!
DELETE FROM
  `minute`
WHERE
  (
    date( `time` ) = date( NOW() ) AND
    hour( `time` ) < hour( NOW() )
  ) OR (
    date( `time` ) < date( NOW() )
  )
!;

    my $sth_2 = $dbh->prepare($sql_2);
    my $ste_2 = $sth_2->execute() or die( "Error: " . $dbh->errstr );
}

sub do_store {
    my ( $first_invocation ) = @_;

    my %seen = ();

    print( "+do_store()\n" ) if ( $debug );

    my $dbh = DBI->connect('dbi:mysql:sshaccount','sshuser','sshpassword')
        or die "Connection Error: $DBI::errstr\n";

    # fetch iptables output
    #    14086  9534592            tcp  --  *      *       0.0.0.0/0            132.185.144.15      tcp dpt:39292 /* pid:30126 user:auser */
    my $data = `$iptables -L useraccount -n -v -x`;
    if ( $? ) {
        `$iptables -N useraccount`;
        $data = `$iptables -L useraccount -n -v -x`;
    }
    while (
        $data =~ m{
            [\r\n]+\s*
            \d+\s+
            (\d+)\s+
            \s*tcp
            [^\r\n]*
            tcp\s+(d|s)pt:
            [^\r\n]*
            /\*\s*
            pid:(\d+)
            \s+
            user:(.+?)
            \s*\*/
        }sgx
    ) {
        my ( $bytes, $dir, $pid, $user ) = ( $1, $2, $3, $4 );

        print( "  iptables:$bytes,$dir,$pid,$user\n" ) if ( $debug );

        if ( ! exists( $seen{$pid} ) ) {
            $seen{$pid} = +{ 's' => 0, 'd' => 0, user => $user };
        }
        if ( ! exists( $pids{$pid} ) ) {
            $pids{$pid} = +{ 's' => undef, 'd' => undef };
        }

        if ( ! defined( $pids{$pid}->{$dir} ) ) {
            if ( $first_invocation ) {
                $pids{$pid}->{$dir} = $bytes; # entry might already exist
            } else {
                $pids{$pid}->{$dir} = 0; # new entry created
            }
        }

        my $periodbytes = int( $bytes - $pids{$pid}->{$dir} );
        $periodbytes = 0 if ( $periodbytes < 0 ); # deal with restart
        $seen{$pid}->{$dir} = $periodbytes;
        $pids{$pid}->{$dir} = $bytes; # update to current byte count
    }

    foreach my $pid ( keys %seen ) {
        # skip zero records (no need)
        next if ( ( ! $seen{$pid}->{'s'} ) && ( ! $seen{$pid}->{'d'} ) );
        my $sql = "INSERT INTO minute (`user`, `pid`, `in`, `out`) VALUES (?,?,?,?)";
        my $sth = $dbh->prepare($sql);
        my $ste = $sth->execute( $seen{$pid}->{'user'}, $pid, $seen{$pid}->{'s'}, $seen{$pid}->{'d'} );

        print( "  sql:$sql\n" ) if ( $debug );
    }

    # clean up pids
    my @knownpids = keys %pids;
    foreach ( @knownpids ) {
        delete $pids{$_} if ( ! exists( $seen{$_} ) );
    }
}

sub main {
    my $first_time = 1;
    my $last_time = 0;

    my $this_hour = 0;
    my $this_hour_done = 0;

    while ( 1 ) {
       sleep( 1 );
       my $this_time = time();
       next if ( $last_time == $this_time );
       next if ( ( $this_time - $last_time ) < 30 );
       if ( ( ( $this_time % 60 ) < 9 ) || ( $this_time - $last_time > 120 ) ) {
           do_store( $first_time );
           $first_time = 0;
           $last_time = $this_time;

           if ( $this_hour != int( $this_time / 3600 ) ) {
               $this_hour = int( $this_time / 3600 );
               summarise_minutes();
           }
       }
    }
}

main();

The tables are created using the following SQL:

CREATE TABLE IF NOT EXISTS `hour` (
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `user` varchar(32) NOT NULL,
  `in` bigint(20) NOT NULL DEFAULT '0',
  `out` bigint(20) NOT NULL DEFAULT '0',
  UNIQUE KEY `user_time` (`user`,`time`),
  KEY `user` (`user`),
  KEY `time` (`time`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `minute` (
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `user` varchar(32) NOT NULL,
  `pid` int(11) DEFAULT NULL,
  `in` bigint(20) NOT NULL DEFAULT '0',
  `out` bigint(20) NOT NULL DEFAULT '0',
  KEY `user` (`user`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

UPDATE 2012-05-11 – noticed a link from serverfault.com so replaced code with the current version I use (which is more stable).