diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..e48b7a6 --- /dev/null +++ b/.flake8 @@ -0,0 +1,5 @@ +[flake8] +max-line-length = 100 +select = C,E,F,W,B,B950 +ignore = E203, E501, W503 +max-complexity = 13 \ No newline at end of file diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml new file mode 100644 index 0000000..0fdb52f --- /dev/null +++ b/.github/workflows/pythonapp.yml @@ -0,0 +1,51 @@ +name: recon-pipeline build + +on: [push] + +jobs: + lint: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - name: Set up Python 3.7 + uses: actions/setup-python@v1 + with: + python-version: 3.7 + - name: Set up pipenv + run: | + python -m pip install --upgrade pip + pip install pipenv + pipenv install -d + - name: Lint with flake8 + run: | + pipenv install flake8 + # stop the build if there are Python syntax errors or undefined names + pipenv run flake8 . --count + - name: Check code formatting with black + uses: lgeiger/black-action@master + with: + args: ". --check" + + test: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - name: Set up Golang + uses: actions/setup-go@v1 + - name: Set up Python 3.7 + uses: actions/setup-python@v1 + with: + python-version: 3.7 + - name: Set up pipenv + run: | + python -m pip install --upgrade pip + pip install pipenv + pipenv install -d + - name: Test with pytest + run: | + pipenv install pytest + pipenv run python -m pytest tests/ diff --git a/.gitignore b/.gitignore index 0052f14..486f201 100644 --- a/.gitignore +++ b/.gitignore @@ -103,7 +103,4 @@ venv.bak/ # mypy .mypy_cache/ -.idea -.flake8 -.pre-commit-config.yaml -pyproject.toml \ No newline at end of file +.idea \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..be20d39 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,12 @@ +repos: +- repo: https://github.com/ambv/black + rev: stable + hooks: + - id: black + language_version: python3.7 + args: ['.'] +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v1.2.3 + hooks: + - id: flake8 + diff --git a/Pipfile b/Pipfile index 1d92da0..3552eb0 100644 --- a/Pipfile +++ b/Pipfile @@ -6,8 +6,8 @@ verify_ssl = true [dev-packages] [packages] -luigi = "*" cmd2 = "*" +luigi = "*" [requires] python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock index 91a7a78..64a7ff2 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -25,11 +25,11 @@ }, "cmd2": { "hashes": [ - "sha256:208812035933cdb5c1c254cf266ffd7f560ca3a075569f3a39fc4e4a4427c2a0", - "sha256:8ad12ef3cc46d03073c545b6e80a3f84a5921f6653073a60e7d9a7ff3b352c9e" + "sha256:a07b165603e6cdf6730c95007160036f13b83415f9074dcb475e91f897ec324d", + "sha256:bdb4d7a56023c800c4428abf8e198e28d6a566f23fa172208763c30e298be4ee" ], "index": "pypi", - "version": "==0.9.23" + "version": "==0.9.24" }, "colorama": { "hashes": [ diff --git a/README.md b/README.md index c70bc5c..1f2b144 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@ # Automated Reconnaissance Pipeline -![version](https://img.shields.io/badge/version-0.7.3-informational?style=for-the-badge) +![version](https://img.shields.io/github/v/release/epi052/recon-pipeline?style=for-the-badge) +![Python application](https://img.shields.io/github/workflow/status/epi052/recon-pipeline/recon-pipeline%20build?style=for-the-badge) ![python](https://img.shields.io/badge/python-3.7-informational?style=for-the-badge) -![luigi](https://img.shields.io/badge/luigi-2.8.11-yellowgreen?style=for-the-badge) -![cmd2](https://img.shields.io/badge/cmd2-0.9.23-yellowgreen?style=for-the-badge) +![luigi](https://img.shields.io/github/pipenv/locked/dependency-version/epi052/recon-pipeline/luigi?style=for-the-badge) +![cmd2](https://img.shields.io/github/pipenv/locked/dependency-version/epi052/recon-pipeline/cmd2?style=for-the-badge) ![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg?style=for-the-badge) There are an [accompanying set of blog posts](https://epi052.gitlab.io/notes-to-self/blog/2019-09-01-how-to-build-an-automated-recon-pipeline-with-python-and-luigi/) detailing the development process and underpinnings of the pipeline. Feel free to check them out if you're so inclined, but they're in no way required reading to use the tool. diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..b9a2926 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,4 @@ +[tool.black] +line-length = 100 +include = '\.pyi?$' +exclude = '.*config.*py$|\.git' \ No newline at end of file diff --git a/recon-pipeline.py b/recon-pipeline.py index 35c740d..5c67f7d 100755 --- a/recon-pipeline.py +++ b/recon-pipeline.py @@ -251,7 +251,7 @@ class ReconShell(cmd2.Cmd): out, err = proc.communicate() if err: - self.async_alert(style(f"[!] {err.decode().strip()}", fg="bright_red")) + self.poutput(style(f"[!] {err.decode().strip()}", fg="bright_red")) retvals.append(proc.returncode) diff --git a/recon/__init__.py b/recon/__init__.py index 85528ea..6b3fc0c 100644 --- a/recon/__init__.py +++ b/recon/__init__.py @@ -18,11 +18,11 @@ tools = { "installed": False, "dependencies": ["luigi"], "commands": [ - f"cp {str(Path(__file__).parent.parent / 'luigid.service')} /lib/systemd/system/luigid.service", - f"cp $(which luigid) /usr/local/bin", - "systemctl daemon-reload", - "systemctl start luigid.service", - "systemctl enable luigid.service", + f"sudo cp {str(Path(__file__).parent.parent / 'luigid.service')} /lib/systemd/system/luigid.service", + f"sudo cp $(which luigid) /usr/local/bin", + "sudo systemctl daemon-reload", + "sudo systemctl start luigid.service", + "sudo systemctl enable luigid.service", ], "shell": True, }, @@ -30,7 +30,7 @@ tools = { "pipenv": { "installed": False, "dependencies": None, - "commands": ["apt-get install -y -q pipenv"], + "commands": ["sudo apt-get install -y -q pipenv"], }, "masscan": { "installed": False, @@ -38,14 +38,14 @@ tools = { "commands": [ "git clone https://github.com/robertdavidgraham/masscan /tmp/masscan", "make -s -j -C /tmp/masscan", - f"mv /tmp/masscan/bin/masscan {tool_paths.get('masscan')}", + f"sudo mv /tmp/masscan/bin/masscan {tool_paths.get('masscan')}", "rm -rf /tmp/masscan", ], }, "amass": { "installed": False, "dependencies": None, - "commands": ["apt-get install -y -q amass"], + "commands": ["sudo apt-get install -y -q amass"], }, "aquatone": { "installed": False, @@ -55,7 +55,7 @@ tools = { "mkdir /tmp/aquatone", "wget -q https://github.com/michenriksen/aquatone/releases/download/v1.7.0/aquatone_linux_amd64_1.7.0.zip -O /tmp/aquatone/aquatone.zip", "unzip /tmp/aquatone/aquatone.zip -d /tmp/aquatone", - f"mv /tmp/aquatone/aquatone {tool_paths.get('aquatone')}", + f"sudo mv /tmp/aquatone/aquatone {tool_paths.get('aquatone')}", "rm -rf /tmp/aquatone", ], }, @@ -64,7 +64,7 @@ tools = { "dependencies": None, "shell": True, "commands": [ - f"bash -c 'if [[ -d {Path(tool_paths.get('CORScanner')).parent} ]] ; then cd {Path(tool_paths.get('CORScanner')).parent} && git pull; else git clone https://github.com/chenjj/CORScanner.git {Path(tool_paths.get('CORScanner')).parent}; fi'", + f"sudo bash -c 'if [[ -d {Path(tool_paths.get('CORScanner')).parent} ]] ; then cd {Path(tool_paths.get('CORScanner')).parent} && git pull; else git clone https://github.com/chenjj/CORScanner.git {Path(tool_paths.get('CORScanner')).parent}; fi'", f"pip install -q -r {Path(tool_paths.get('CORScanner')).parent / 'requirements.txt'}", "pip install -q future", ], @@ -110,11 +110,14 @@ tools = { "dependencies": None, "shell": True, "commands": [ - f"bash -c 'if [[ -d /opt/recursive-gobuster ]] ; then cd /opt/recursive-gobuster && git pull; else git clone https://github.com/epi052/recursive-gobuster.git /opt/recursive-gobuster; fi'", - f"ln -fs /opt/recursive-gobuster/recursive-gobuster.pyz {tool_paths.get('recursive-gobuster')}", + f"sudo bash -c 'if [[ -d {Path(tool_paths.get('recursive-gobuster')).parent} ]] ; then cd {Path(tool_paths.get('recursive-gobuster')).parent} && git pull; else git clone https://github.com/epi052/recursive-gobuster.git {Path(tool_paths.get('recursive-gobuster')).parent}; fi'", ], }, - "go": {"installed": False, "dependencies": None, "commands": ["apt-get install -y -q golang"]}, + "go": { + "installed": False, + "dependencies": None, + "commands": ["sudo apt-get install -y -q golang"], + }, } diff --git a/recon/config.py b/recon/config.py index 722e8be..fe040f5 100644 --- a/recon/config.py +++ b/recon/config.py @@ -1,30 +1,10033 @@ +# flake8: noqa E231 from pathlib import Path -top_tcp_ports = [80,23,443,21,22,25,3389,110,445,139,143,53,135,3306,8080,1723,111,995,993,5900,1025,587,8888,199,1720,465,548,113,81,6001,10000,514,5060,179,1026,2000,8443,8000,32768,554,26,1433,49152,2001,515,8008,49154,1027,5666,646,5000,5631,631,49153,8081,2049,88,79,5800,106,2121,1110,49155,6000,513,990,5357,427,49156,543,544,5101,144,7,389,8009,3128,444,9999,5009,7070,5190,3000,5432,1900,3986,13,1029,9,6646,5051,49157,1028,873,1755,2717,4899,9100,119,37,1000,3001,5001,82,10010,1030,9090,2107,1024,2103,6004,1801,5050,19,8031,1041,255,1056,1049,1065,2967,1053,1048,1064,1054,3703,17,808,3689,1031,1044,1071,5901,100,9102,8010,1039,4001,2869,9000,5120,2105,636,1038,2601,1,7000,1066,1069,625,311,280,254,4000,1761,5003,2002,1998,2005,1032,1050,6112,3690,1521,2161,6002,1080,2401,4045,902,787,7937,1058,2383,32771,1059,1040,1033,50000,5555,10001,1494,593,3,2301,7938,3268,1234,1022,1074,9001,8002,1036,1035,1037,464,1935,497,6666,2003,6543,24,1352,3269,1111,407,500,20,2006,1034,3260,15000,1218,4444,264,2004,33,42510,1042,3052,999,1023,222,1068,7100,888,563,1717,992,32770,2008,32772,7001,2007,8082,5550,5801,2009,512,1043,163,50001,2701,1700,7019,4662,2065,2010,42,161,2602,9535,3333,5100,5002,2604,4002,6059,1062,9415,8701,8652,8651,8089,65389,65000,64680,64623,55600,55555,52869,35500,33354,23502,20828,8194,8193,8192,2702,1311,1060,4443,9595,1051,3283,1047,9594,6789,5226,5225,32769,1052,9593,1055,16993,16992,730,731,709,13782,1067,5902,366,9050,1002,85,5500,8085,51103,49999,45100,10243,5431,1864,1863,49,6667,90,1503,27000,6881,1500,340,8021,164,5566,9071,8088,8899,2222,6005,32773,32774,9876,1501,9101,5102,163,5679,648,1666,146,901,83,9207,8001,8083,8084,5214,14238,3476,5004,30,12345,912,2030,2605,6,541,4,1248,3005,8007,880,306,2500,4242,8291,52822,1097,9009,2525,1086,1088,900,6101,7200,2809,987,32775,800,12000,1083,211,705,711,20005,13783,6969,1104,5269,5222,1046,1085,5987,5989,5988,9968,9503,9502,9485,9290,9220,9011,8994,8649,8222,7911,7625,7106,65129,63331,6156,6129,60020,5962,5961,5960,5959,5925,5877,5825,5810,58080,57294,50800,50006,50003,49160,49159,49158,48080,40193,34573,34572,34571,3404,33899,3301,32782,32781,31038,30718,28201,27715,25734,24800,22939,21571,20221,20031,19842,19801,19101,17988,1783,16018,16016,15003,14442,13456,10629,10628,10626,10621,10617,10616,10566,10025,10024,10012,1169,2190,11967,5030,5414,1057,7627,6788,3766,8087,11110,1947,9010,7741,14000,3367,1094,1099,1098,1075,1108,4003,1081,1093,4449,2718,6580,15002,4129,1687,1840,3827,30000,3580,1100,2144,1063,1061,6901,9900,1107,1106,9500,20222,7778,8181,1077,3801,1310,1718,2119,2811,2492,2135,1070,9080,1045,16001,2399,3017,3031,1148,9002,8873,2875,8086,5718,10002,3998,20000,4126,8400,1272,3071,5911,2607,9618,2381,1096,5910,6389,3300,7777,1072,3351,1073,8333,3784,15660,5633,6123,3211,1078,8600,1079,3659,3551,2260,2160,1082,2100,3325,3323,8402,89,691,2020,1001,1999,32776,212,6003,2998,50002,7002,32,898,5510,3372,2033,5903,99,749,425,43,5405,6502,13722,6106,458,7007,9666,8100,3737,5280,9091,4111,1334,3261,1152,2522,5859,2179,1247,9944,9943,9877,9110,8654,8254,8180,8011,7512,7435,7103,61900,61532,5922,5915,5904,5822,56738,55055,51493,50636,50389,49175,49165,49163,3546,32784,27355,27353,27352,24444,19780,18988,16012,15742,10778,2191,3011,1580,5200,3851,3371,3370,3369,7402,5054,4006,5298,3918,2126,3077,7443,8090,3493,3828,4446,1186,1183,19283,19315,3995,62078,5963,3880,1124,1782,8500,1089,10004,1296,9998,2251,1087,3871,3030,9040,32779,32777,1021,32778,2021,616,700,666,5802,4321,1112,38292,2040,1524,545,84,49400,32780,2111,1600,2048,3006,1084,2638,6547,16080,6699,9111,6007,1533,720,2034,5560,1443,2106,555,667,801,3221,6025,3826,9200,2608,4279,7025,11111,4445,9917,9575,9099,9003,8290,8099,8093,8045,7921,7920,7496,6839,6792,6779,6692,6565,60443,5952,5950,5907,5906,5862,5850,5815,5811,57797,56737,5544,55056,5440,54328,54045,52848,52673,50500,50300,49176,49167,49161,44501,44176,41511,40911,32785,32783,30951,27356,26214,25735,19350,18101,18040,17877,16113,15004,14441,12265,12174,10215,10180,1151,5730,6689,8200,4567,8300,6100,10009,8800,5061,6566,5678,4004,4005,3800,3168,3869,5080,8022,1201,3814,1862,3905,2725,2394,2393,9898,1114,6510,8383,3914,3971,9878,5033,7999,7676,4900,9418,4550,2909,8042,3878,16000,1091,1090,1271,3920,6567,1138,3945,3390,1175,10003,1199,3889,9081,3003,1131,1119,8292,5087,3527,1122,7800,1117,4848,3809,3324,3322,3517,5221,2323,4224,981,722,1009,617,417,777,4998,714,70,6346,2022,765,301,1076,524,5999,668,2041,10082,6009,1007,4343,1417,416,2038,1434,259,44443,1984,2068,7004,911,6006,726,1010,2046,4125,109,9103,2035,1461,7201,687,1011,2013,125,903,2043,6669,6668,1455,481,2047,683,843,783,9929,5998,2042,406,256,31337,44442,2045,4040,1145,6060,6051,3916,9444,1875,7272,4147,4252,4200,13724,7024,1556,9941,9914,9815,9673,9643,9621,9501,9409,9198,9197,9098,8996,8987,8877,8676,8648,8540,8481,8385,8189,8098,8095,8050,8016,8015,7929,7770,7749,7438,7241,7123,7051,7050,6896,6732,6711,65310,6520,6504,6247,6203,61613,60642,60146,60123,5981,5940,59202,59201,59200,5918,5914,59110,5909,5905,5899,58838,5869,58632,58630,5823,5818,5812,5807,58002,58001,57665,55576,55020,53535,5339,53314,53313,53211,52853,52851,52850,52849,52847,5279,52735,52710,52660,5242,5212,51413,51191,5040,50050,49401,49236,49195,49186,49171,49168,49164,4875,47544,46996,46200,44709,41523,41064,40811,3994,39659,39376,39136,38188,38185,37839,35513,33554,33453,32835,32822,32816,32803,32792,32791,30704,30005,29831,29672,28211,27357,26470,23796,23052,2196,21792,19900,18264,18018,17595,16851,16800,16705,15402,15001,12452,12380,12262,12215,12059,12021,10873,10058,10034,10022,10011,1233,8765,9443,1137,3963,5938,2910,9191,8686,3808,3981,2710,3852,3853,3849,3944,3929,3731,1594,1658,3792,1583,4164,3162,6481,5081,1163,3820,40000,8097,4430,4555,1287,2920,1121,1154,7744,1812,26000,1166,1164,1165,7913,2366,10160,8019,4658,4600,7878,3870,3304,3307,1259,7278,4143,3872,10008,1092,3697,1688,9988,1322,7725,2557,1095,3410,1971,1839,2288,3859,1141,3514,1123,4949,3931,2382,8675,6600,3957,5968,1213,1277,9600,7900,5353,1113,3700,3007,4080,3969,1132,1309,3848,7281,1244,1641,1972,3907,3972,2200,3968,1126,5223,1217,3941,8293,1300,1719,2099,6068,3013,3050,1105,1174,6550,5501,3684,2170,1328,1216,5151,2968,1805,7080,1914,22222,1974,5868,31727,8889,12006,3119,5063,3400,20002,3888,1301,4009,10023,3376,1185,1130,1147,1198,1192,1721,1149,3990,1236,3993,4096,6500,8294,3863,3846,8766,1187,5074,1102,3824,2800,1103,780,930,803,725,2012,10005,2501,6222,1220,623,639,502,701,1109,2232,2241,4559,710,5680,1347,913,540,931,874,856,250,5010,475,1270,953,2044,8118,123,27,1222,86,1158,9992,102,441,447,442,18000,419,210,6008,5803,980,251,1013,1008,3025,5520,3299,6103,556,87,57,829,9152,1212,55,713,709,2628,2433,223,10083,7003,1550,1516,7010,943,904,840,825,792,732,1020,1006,333,657,748,2011,77,1526,557,610,1241,4333,127,1547,157,220,523,1351,1350,2067,684,674,996,602,3456,971,969,905,846,839,823,822,795,790,778,757,659,225,1015,1014,1012,862,655,3399,1522,1353,6662,1357,731,730,729,660,600,782,257,2903,2025,3632,786,998,2201,6050,2600,6017,1337,690,606,928,924,922,921,918,878,864,859,806,805,728,252,1005,1004,388,44334,5011,1127,411,641,3999,59,1525,758,740,12346,669,802,98,38037,754,2112,715,6670,1413,1414,621,2104,1229,7628,5021,5020,3220,9667,1558,1924,6115,3940,6063,6062,6055,6052,6030,6021,6015,6010,3806,5986,5985,2340,8006,2371,4545,3810,2991,3414,6065,1290,1565,3511,1559,2723,9202,4036,4035,2312,3652,5070,3280,1317,4298,4297,4294,4262,4243,4234,4220,4206,9300,4433,22555,9979,5423,7121,1927,2148,1707,1168,7998,4414,5055,9975,9971,9919,9915,9912,9910,9908,9901,9844,9830,9826,9825,9823,9814,9812,9777,9745,9683,9680,9679,9674,9665,9661,9654,9648,9620,9619,9613,9583,9527,9513,9493,9478,9464,9454,9364,9351,9183,9170,9133,9130,9128,9125,9065,9061,9044,9037,9013,9004,8925,8898,8887,8882,8879,8878,8865,8843,8801,8798,8790,8772,8756,8752,8736,8680,8673,8658,8655,8644,8640,8621,8601,8562,8539,8531,8530,8515,8484,8479,8477,8455,8454,8453,8452,8451,8409,8339,8308,8295,8273,8268,8255,8248,8245,8144,8133,8110,8092,8064,8037,8029,8023,8018,8014,7975,7895,7854,7853,7852,7830,7813,7788,7780,7772,7771,7688,7685,7654,7637,7600,7555,7553,7456,7451,7231,7218,7184,7119,7104,7102,7092,7072,7068,7067,7043,7033,6973,6972,6956,6942,6922,6920,6897,6877,6780,6734,6725,6710,6709,6650,6647,6644,6606,65514,65488,6535,65311,65048,64890,64727,64726,64551,64507,64438,64320,6412,64127,64080,63803,63675,6349,63423,6323,63156,6310,63105,6309,62866,6274,6273,62674,6259,62570,62519,6250,62312,62188,62080,62042,62006,61942,61851,61827,61734,61722,61669,61617,61616,61516,61473,61402,6126,6120,61170,61169,61159,60989,6091,6090,60794,60789,60783,60782,60753,60743,60728,60713,6067,60628,60621,60612,60579,60544,60504,60492,60485,60403,60401,60377,60279,60243,60227,60177,60111,60086,60055,60003,60002,60000,59987,59841,59829,59810,59778,5975,5974,5971,59684,5966,5958,59565,5954,5953,59525,59510,59509,59504,5949,59499,5948,5945,5939,5936,5934,59340,5931,5927,5926,5924,5923,59239,5921,5920,59191,5917,59160,59149,59122,59107,5908,59087,58991,58970,58908,5888,5887,5881,5878,5875,5874,58721,5871,58699,58634,58622,58610,5860,5858,58570,58562,5854,5853,5852,5849,58498,5848,58468,5845,58456,58446,58430,5840,5839,5838,58374,5836,5834,5831,58310,58305,5827,5826,58252,5824,5821,5820,5817,58164,58109,58107,5808,58072,5806,5804,57999,57988,57928,57923,57896,57891,57733,57730,57702,57681,57678,57576,57479,57398,57387,5737,57352,57350,5734,57347,57335,5732,57325,57123,5711,57103,57020,56975,56973,56827,56822,56810,56725,56723,56681,5667,56668,5665,56591,56535,56507,56293,56259,5622,5621,5620,5612,5611,56055,56016,55948,55910,55907,55901,55781,55773,55758,55721,55684,55652,55635,55579,55569,55568,55556,5552,55527,55479,55426,55400,55382,55350,55312,55227,55187,55183,55000,54991,54987,54907,54873,54741,54722,54688,54658,54605,5458,5457,54551,54514,5444,5442,5441,54323,54321,54276,54263,54235,54127,54101,54075,53958,53910,53852,53827,53782,5377,53742,5370,53690,53656,53639,53633,53491,5347,53469,53460,53370,53361,53319,53240,53212,53189,53178,53085,52948,5291,52893,52675,52665,5261,5259,52573,52506,52477,52391,52262,52237,52230,52226,52225,5219,52173,52071,52046,52025,52003,52002,52001,52000,51965,51961,51909,51906,51809,51800,51772,51771,51658,51582,51515,51488,51485,51484,5147,51460,51423,51366,51351,51343,51300,5125,51240,51235,51234,51233,5122,5121,51139,51118,51067,51037,51020,51011,50997,5098,5096,5095,50945,5090,50903,5088,50887,50854,50849,50836,50835,50834,50833,50831,50815,50809,50787,50733,50692,50585,50577,50576,50545,50529,50513,50356,50277,50258,50246,50224,50205,50202,50198,50189,5017,5016,50101,50040,50019,50016,49927,49803,49765,49762,49751,49678,49603,49597,49522,49521,49520,49519,49500,49498,49452,49398,49372,49352,4931,49302,49275,49241,49235,49232,49228,49216,49213,49211,49204,49203,49202,49201,49197,49196,49191,49190,49189,49179,49173,49172,49170,49169,49166,49132,49048,4903,49002,48973,48967,48966,48925,48813,48783,48682,48648,48631,4860,4859,48434,48356,4819,48167,48153,48127,48083,48067,48009,47969,47966,4793,47860,47858,47850,4778,47777,4771,4770,47700,4767,47634,4760,47595,47581,47567,47448,47372,47348,47267,47197,4712,47119,47029,47012,46992,46813,46593,4649,4644,46436,46418,46372,46310,46182,46171,46115,4609,4606,46069,46034,45960,45864,45777,45697,45624,45602,45463,45438,45413,4530,45226,45220,4517,4516,45164,45136,45050,45038,44981,44965,4476,4471,44711,44704,4464,44628,44616,44541,44505,44479,44431,44410,44380,44200,44119,44101,44004,4388,43868,4384,43823,43734,43690,43654,43425,43242,43231,43212,43143,43139,43103,43027,43018,43002,42990,42906,42735,42685,42679,42675,42632,42590,42575,42560,42559,42452,42449,42322,42276,42251,42158,42127,42035,42001,41808,41773,41632,41551,41442,41398,41348,41345,41342,41318,41281,41250,41142,41123,40951,40834,40812,40754,40732,40712,40628,40614,40513,40489,40457,40400,40393,40306,40011,40005,40003,40002,40001,39917,39895,39883,39869,39795,39774,39763,39732,39630,39489,39482,39433,39380,39293,39265,39117,39067,38936,38805,38780,38764,38761,38570,38561,38546,38481,38446,38358,38331,38313,38270,38224,38205,38194,38029,37855,37789,37777,37674,37647,37614,37607,37522,37393,37218,37185,37174,37151,37121,36983,36962,36950,36914,36824,36823,36748,36710,36694,36677,36659,36552,36530,36508,36436,36368,36275,36256,36105,36104,36046,35986,35929,35906,35901,35900,35879,35731,35593,35553,35506,35401,35393,35392,35349,35272,35217,35131,35116,35050,35033,34875,34833,34783,34765,34728,34683,34510,34507,34401,34381,34341,34317,34189,34096,34036,34021,33895,33889,33882,33879,33841,33605,33604,33550,33523,33522,33444,33395,33367,33337,33335,33327,33277,33203,33200,33192,33175,33124,33087,33070,33017,33011,33000,32976,32961,32960,32944,32932,32911,32910,32908,32905,32904,32898,32897,32888,32871,32869,32868,32858,32842,32837,32820,32815,32814,32807,32799,32798,32797,32790,32789,32788,32765,32764,32261,32260,32219,32200,32102,32088,32031,32022,32006,31728,31657,31522,31438,31386,31339,31072,31058,31033,30896,30705,30659,30644,30599,30519,30299,30195,30087,29810,29507,29243,29152,29045,28967,28924,28851,28850,28717,28567,28374,28142,28114,27770,27537,27521,27372,27351,27350,27316,27204,27087,27075,27074,27055,27016,27015,26972,26669,26417,26340,26007,26001,25847,25717,25703,25486,25473,25445,25327,25288,25262,25260,25174,24999,24616,24552,24416,24392,24218,23953,23887,23723,23451,23430,23382,23342,23296,23270,23228,23219,23040,23017,22969,22959,22882,22769,22727,22719,22711,22563,22341,22290,22223,22200,22177,22100,22063,22022,21915,21891,21728,21634,21631,21473,21078,21011,20990,20940,20934,20883,20734,20473,20280,20228,20227,20226,20225,20224,20223,20180,20179,20147,20127,20125,20118,20111,20106,20102,20089,20085,20080,20076,20052,20039,20032,20021,20017,20011,19996,19995,19852,19715,19634,19612,19501,19464,19403,19353,19201,19200,19130,19010,18962,18910,18887,18874,18669,18569,18517,18505,18439,18380,18337,18336,18231,18148,18080,18015,18012,17997,17985,17969,17867,17860,17802,17801,17715,17702,17701,17700,17413,17409,17255,17251,17129,17089,17070,17017,17016,16901,16845,16797,16725,16724,16723,16464,16372,16349,16297,16286,16283,16273,16270,16048,15915,15758,15730,15722,15677,15670,15646,15645,15631,15550,15448,15344,15317,15275,15191,15190,15145,15050,15005,14916,14891,14827,14733,14693,14545,14534,14444,14443,14418,14254,14237,14218,14147,13899,13846,13784,13766,13730,13723,13695,13580,13502,13359,13340,13318,13306,13265,13264,13261,13250,13229,13194,13193,13192,13188,13167,13149,13142,13140,13132,13130,13093,13017,12962,12955,12892,12891,12766,12702,12699,12414,12340,12296,12275,12271,12251,12243,12240,12225,12192,12171,12156,12146,12137,12132,12097,12096,12090,12080,12077,12034,12031,12019,11940,11863,11862,11813,11735,11697,11552,11401,11296,11288,11250,11224,11200,11180,11100,11089,11033,11032,11031,11026,11019,11007,11003,10900,10878,10852,10842,10754,10699,10602,10601,10567,10565,10556,10555,10554,10553,10552,10551,10550,10535,10529,10509,10494,10443,10414,10387,10357,10347,10338,10280,10255,10246,10245,10238,10093,10064,10045,10042,10035,10019,10018,1823,1327,3479,3653,2330,8201,4876,3240,2580,2644,3600,4020,2700,2436,3906,4375,1584,4024,5581,5580,6251,3943,3200,1223,2142,1976,1975,5202,5201,3817,9020,4016,5111,3281,9911,3923,2439,3930,7345,7325,7320,7300,1250,1221,2973,3909,16161,14001,1607,1736,1330,3080,4158,2270,3526,5066,1204,2711,2187,1750,3430,2728,3796,5814,2888,3922,3803,3419,4881,5250,3979,3670,4174,3102,1605,3483,2631,7500,1645,4190,5553,5554,1303,3636,1251,1243,3712,8052,8883,9400,1291,1208,3319,1297,3935,3897,5152,3637,1200,1811,1215,3962,3368,3860,3964,4442,9875,1128,4010,3291,1118,8401,3765,7400,2101,1699,2889,1195,1694,1730,5053,1912,1745,2250,1712,6379,43000,1306,2997,3532,2449,3813,2083,3799,3790,3599,3850,4355,4358,4357,4356,1262,5433,4007,4713,3089,1101,4374,3658,1268,3961,3911,1735,1858,3396,1753,1264,1711,3967,2505,3118,4601,1321,8471,1598,1305,1314,3121,2558,6161,4025,9022,9021,1632,9995,30001,1307,1981,2532,3443,7501,8472,9990,1808,1159,2435,1194,1622,5014,4161,1135,3904,5723,4090,9211,9210,4141,7789,1308,6619,9628,3519,12121,4687,4454,5012,3680,3167,8474,8980,1239,3901,3902,3842,16900,4700,4118,1799,12865,3812,2606,1196,10115,3928,1615,2902,10006,2882,3890,1683,2706,3063,3062,2095,2096,5133,3363,4407,1340,4447,3795,8005,10007,3515,1806,6888,4602,1911,4558,2438,3847,3882,5722,1883,1261,5969,9343,5252,28017,27019,27018,27017,2583,2031,2197,2271,3837,4120,3798,25565,2269,20001,2292,2622,11001,1207,2850,1249,21201,8003,3311,1180,2908,3936,3023,4912,3503,2463,1752,2280,4056,2623,4877,1184,9333,19333,3913,3672,4342,8282,1861,9592,7099,2372,1701,1318,6085,2081,1339,4058,2115,8900,2958,2957,4328,7071,1276,3899,2531,2691,5052,3788,1638,2551,1336,11000,48619,4029,3497,1209,3603,1331,1240,2082,3856,3602,1176,1143,4800,4100,3486,2987,2326,6077,25001,25000,2062,1792,1156,1157,2313,3952,3919,5023,3439,6324,1188,1125,1299,3908,2984,1715,8232,1722,2988,10500,1136,4999,1162,1703,3956,22128,1677,1211,1191,9005,3057,2086,12009,3530,4325,1708,3520,5235,1144,5015,5013,4745,1228,3210,2425,1901,5912,3787,32767,1807,3825,3622,5502,4039,1620,5557,10101,3002,1316,3728,5114,2069,1569,9616,3621,4369,1210,12001,12002,5233,3586,1691,1282,1315,2087,7101,2124,3983,3982,2224,5234,1635,3263,4121,2291,1791,2150,3310,1958,2804,3937,3831,2253,5721,3663,4401,3949,9909,2376,2375,4022,1973,3876,3362,3334,47624,1825,3868,4570,1324,1279,9131,4302,3793,1173,22125,17500,12005,6113,2584,2300,8954,9287,5137,3190,3742,2806,41795,41794,8116,1566,4300,8445,3365,4665,3577,1713,2261,2262,1592,1190,22350,3374,2567,9694,4135,2598,1167,8470,3749,1302,3830,1709,3485,8880,2734,3505,3388,3669,2418,1871,1918,8025,2472,1153,3991,3989,3992,3681,3014,4101,4415,6503,9700,3683,1150,18333,4376,24554,2302,3146,8999,3415,3946,2203,1179,4192,4418,5005,2134,4065,2080,3103,9084,2304,2812,4119,1560,4534,1835,1116,3513,2265,5473,5475,3879,4087,2898,4112,1134,3948,9950,3506,9161,9160,47806,2712,1800,2325,2930,3839,1319,5672,3811,4689,2456,2901,3975,4113,2847,2070,3425,3997,3915,6579,6628,8202,8060,2550,8403,6350,3823,3980,2335,1182,1954,3996,10020,3656,4599,2391,400,22273,769,983,979,973,967,965,961,942,935,926,925,914,863,858,844,834,817,815,811,809,789,779,743,1019,1989,11,1507,1492,66,32787,32786,509,706,635,762,5632,47,830,4008,5977,1444,3985,6105,578,591,678,27001,642,446,1495,5308,1441,31416,54320,7005,52,1652,682,577,985,984,974,958,952,949,946,923,916,899,897,894,889,835,824,814,807,804,798,733,727,237,12,10,219,525,1420,665,501,6110,122,3045,440,664,620,615,3398,771,653,75,158,716,861,1366,1663,833,1364,603,91,750,828,9991,860,695,101,634,538,1359,989,27010,810,510,4199,3064,847,68,76,1358,3049,1139,1680,649,707,449,104,629,2024,1517,2430,1370,988,962,948,945,941,938,936,929,927,919,906,883,881,875,872,870,866,855,851,850,841,836,826,820,819,816,813,791,745,736,735,724,719,343,334,300,28,249,230,16,1018,1016,3900,450,1988,2014,492,2018,658,1474,268,27374,1991,605,8076,1178,3086,1651,5232,1349,696,5145,50,630,7597,663,1445,1402,1465,2307,1552,5400,627,1384,7273,950,1388,92,609,741,831,353,5978,45,4660,638,112,456,760,761,2120,9104,702,6665,1404,651,1389,1551,661,5300,491,6347,221,4557,1214,640,647,448,1356,6401,507,1484,673,1523,1400,1399,632,1385,5191,1346,6143,676,214,3141,670,970,968,964,963,960,959,951,947,944,939,933,909,895,891,879,869,868,867,837,821,812,797,796,794,788,756,734,721,718,708,703,60,40,253,231,14,1017,1003,1996,27665,1527,69,1475,97,656,633,8892,975,5530,2026,3397,4500,560,180,1354,1497,628,4480,1403,35,8123,11371,553,1995,511,18182,18184,723,1466,611,1486,689,1650,1668,1664,15,832,137,13720,991,561,3292,685,997,505,1496,637,1762,51,751,9107,9106,9105,994,194,213,1539,1412,1515,886,1405,1435,692,694,1369,103,1401,402,1997,1372,681,680,704,644,2064,854,675,1379,47557,2015,1467,624,799,454,622,1476,1373,3264,6701,1387,770,14141,1348,182,201,262,1381,654,6588,1535,7009,58,2023,177,776,26208,4144,2627,1498,1519,672,677,1545,1398,2431,3457,697,401,982,978,972,966,957,956,934,920,915,908,907,892,890,885,884,882,877,876,865,857,852,849,842,838,827,818,793,785,784,755,746,738,737,717,34,336,325,303,276,273,236,235,233,181,604,9051,1362,493,712,1437,601,412,1529,871,95,1994,1992,1990,133,6145,486,362,193,200,118,6111,608,1549,2027,115,1537,1368,1436,1426,774,688,1531,38,129,645,136,3531,1827,65301,16444,1446,18183,18181,260,536,764,698,94,4132,261,607,308,1667,1662,1661,74,73,71,1493,138,13713,404,5997,6544,1510,568,29,31,397,44,6147,1528,350,224,6146,1986,1763,2053,399,1355,1454,1390,1393,1394,887,1376,418,1424,1410,1409,7634,686,5301,5302,176,848,1513,747,1499,1439,1438,315,853,196,466,410,403,93,1456,1479,355,462,763,1472,6400,453,759,437,619,2432,1386,120,6700,1442,415,1432,1548,1422,114,1397,206,202,204,6142,1544,422,8770,626,7008,7006,1483,1365,699,1511,1538,346,173,54,56,1462,2019,1518,516,1457,117,986,977,976,955,954,937,932,8,896,893,845,768,766,739,337,329,326,305,295,294,293,289,288,277,238,234,229,228,226,571,522,1470,1987,1430,1419,1418,526,267,209,65,391,392,2028,773,614,150,1408,572,162,1993,108,413,596,420,460,1543,358,1502,451,452,361,470,598,360,457,582,643,487,322,168,753,369,1509,2108,4672,185,43188,1541,1540,752,189,7464,271,191,5714,5717,5713,1459,408,6548,485,496,767,583,662,1449,1480,192,18187,1473,423,184,428,1448,4133,518,1458,1416,1429,533,1672,1671,1670,72,742,13721,13718,13715,13714,13701,1363,569,1464,1374,435,434,1427,1482,1532,1360,570,6141,4987,265,351,3984,174,480,472,2766,1361,373,17300,910,17007,380,414,1451,535,1395,1391,7326,432,479,473,781,383,2564,613,612,151,652,5303,1383,128,1542,19150,270,1453,190,258,1505,27009,744,27007,27005,27003,27002,1371,1423,775,141,1440,1396,352,438,1488,96,1508,67,552,618,316,1367,1407,217,439,528,148,530,284,5490,2,542,370,132,130,2016,15151,3421,142,248,364,48,216,205,5193,1491,124,116,1411,149,599,1469,564,2133,44123,41230,4123,7173,3925,7088,1425,17756,17755,4072,3774,3841,2102,17754,2989,317,10051,10050,31029,9978,9925,3832,36462,508,3424,3423,5793,6116,4095,3721,3646,3510,1619,6936,3722,3651,5634,14500,3865,15345,3763,11876,16619,165,2157,38422,1716,2279,7430,3877,5270,9092,3953,3412,4788,1933,5344,2341,2327,3088,6558,2130,7629,3074,2165,3639,4389,1934,5757,11877,6061,6058,6057,6056,6054,6053,6049,6048,6047,6046,6045,6044,6043,6042,6041,6040,6039,6038,6037,6036,6035,6034,6033,6032,6031,6029,6028,6027,6026,6024,6023,6022,6020,6019,6018,6016,6014,6013,6012,6011,3741,4368,1760,2784,5413,3717,3716,3590,2396,2923,2805,3111,6602,4537,4431,5007,5006,3378,4879,3702,5358,6114,2596,2595,4417,3466,22321,22305,22289,3219,4883,1338,36411,2504,2720,4871,3861,1512,47001,7395,3926,5166,3674,1785,1727,1326,2980,2231,2518,1890,11208,4390,22347,2781,565,3233,3359,4057,4847,4177,4984,3342,3427,21845,2907,1963,2054,2851,3748,1739,11095,48050,4845,4185,8912,5990,1269,3563,5743,5744,12321,12322,9203,9201,9206,9204,9205,2949,2948,6626,2455,4049,3633,5787,2547,2548,2546,4790,4789,3207,8199,4145,13882,3482,2216,3509,5780,3122,16666,7779,2695,3375,312,2996,7566,2539,2893,9598,1880,2387,3317,1885,14149,2410,4032,2821,2255,2074,1956,4991,3883,4299,4296,4295,4293,4292,4291,4290,4289,4288,4287,4286,4285,4284,4283,4282,4281,4280,4278,4277,4276,4275,4274,4273,4272,4271,4270,4269,4268,4267,4266,4265,4264,4263,4261,4260,4259,4258,4257,4256,4255,4254,4253,4251,4250,4249,4248,4247,4246,4245,4244,4241,4240,4239,4238,4237,4236,4235,4233,4232,4231,4230,4229,4228,4227,4226,4225,4223,4222,4221,4219,4218,4217,4216,4215,4214,4213,4212,4211,4210,4209,4208,4207,4205,4204,4203,4202,4201,2530,1589,2649,1224,5046,1345,5164,8473,28200,3845,3625,3541,21590,25793,1796,8699,2538,7802,3321,8182,175,1868,2474,24249,1631,6672,6673,3601,4307,9284,1852,2386,3752,12013,12012,4344,3245,1853,3231,3058,63,3802,5646,6678,78,17184,2610,3738,2770,2994,2993,2802,3270,2771,4621,575,18668,1775,14150,3073,2554,2426,1771,4188,4839,4838,4837,3654,3676,8034,14154,671,5675,15118,2529,430,431,519,1506,3272,3534,2745,3786,2648,3664,3356,2537,3313,3314,1957,2820,4184,3217,126,37654,1979,1978,9629,2927,4127,2357,4867,2696,1889,2499,2437,2655,1189,5281,2138,2110,2248,3098,1797,1910,1737,483,372,390,6306,3720,8778,1382,1867,2542,1624,1833,3584,8070,13894,2879,4034,7887,8953,19194,2767,2768,145,3012,8937,3428,27999,21800,3791,2670,3492,34249,39681,1846,5197,9762,5747,5748,3474,2943,5462,5463,2862,2484,3468,2977,2978,2675,2483,3579,1568,2077,2489,4422,1237,2741,2742,12753,2573,8804,4725,2156,3346,9555,10200,1588,4070,6069,21212,4711,4323,4322,7727,3608,3959,17224,17225,2405,4678,3858,3857,5282,1869,9277,2642,3462,20670,33434,1906,594,2078,2158,5153,3885,2885,24465,3040,20167,8066,2669,474,476,2739,3308,590,3309,8320,8321,7901,7903,7902,3686,377,20046,5583,2798,4176,3083,6252,3082,3081,2361,2915,1965,6118,3160,5104,3754,3243,10261,4124,5450,7548,1832,4139,4423,2296,6201,4146,3713,1758,5048,31457,7631,3544,41121,359,11600,7491,3696,3549,1728,1380,2060,5428,1946,559,9668,9222,1814,3805,1977,2576,2729,24680,1610,25900,2403,2402,2470,3552,6442,5203,3144,2306,1922,2726,6149,7015,7012,7011,1838,517,22763,2493,4019,4018,4017,4015,4014,3573,5073,2392,11173,7932,7933,3175,32249,1274,1627,2609,5406,3251,4094,3241,6514,6418,3734,45045,2679,2647,4106,6102,4548,7707,5008,8243,8280,2880,3547,5629,3723,4950,3895,3894,19540,3273,4538,5043,7359,7358,7357,7356,7355,7354,7353,7352,7351,7350,7349,7348,7347,7346,7344,7343,7342,7341,7340,7339,7338,7337,7336,7335,7334,7333,7332,7331,7330,7329,7328,7327,7324,7323,7322,7321,7319,7318,7317,7316,7315,7314,7313,7312,7311,7310,7309,7308,7307,7306,7305,7304,7303,7302,7301,9282,9281,3491,1866,17777,6965,6966,6964,6963,1751] -top_udp_ports = [631,161,137,123,138,1434,445,135,67,53,139,500,68,520,1900,4500,514,49152,162,69,5353,111,49154,1701,998,996,997,999,3283,49153,1812,136,2222,2049,32768,5060,1025,1433,3456,80,20031,1026,7,1646,1645,593,518,2048,626,1027,177,1719,427,497,4444,1023,65024,19,9,49193,1029,49,88,1028,17185,1718,49186,2000,31337,49201,49192,515,2223,443,49181,1813,120,158,49200,3703,32815,17,5000,32771,33281,1030,1022,623,32769,5632,10000,49194,49191,49182,49156,9200,30718,49211,49190,49188,49185,5001,5355,32770,37444,34861,34555,1032,3130,4045,1031,49196,49158,37,2967,4000,989,3659,4672,34862,23,49195,49189,49187,49162,2148,41524,10080,32772,407,42,33354,1034,49199,49180,1001,3389,6346,21,13,517,1068,6001,1782,990,1045,1041,19283,49210,49209,49208,49205,49202,49184,49179,49171,9876,39213,800,389,464,1039,1036,1038,1419,192,199,44968,1008,49166,49159,1024,1033,22986,19682,22,2002,11487,664,1021,58002,49172,49168,49165,49163,1043,6000,1885,7938,1019,1049,5093,5351,1044,683,3052,5500,27892,16680,32773,41058,35777,113,52225,49174,49169,49160,6004,1056,8193,1047,685,1886,686,38293,782,786,38037,32774,780,1080,32775,682,983,6971,6970,1014,1066,2051,1054,9950,5050,781,31891,31681,31073,30365,30303,29823,28547,27195,25375,22996,22846,21383,20389,20126,20019,19616,19503,19120,18449,16947,16832,42172,33355,32779,53571,52503,49215,49213,49212,49204,49198,49175,49167,5002,27015,5003,7000,513,1485,1065,1048,1090,684,1761,9103,1037,32777,539,767,434,54321,3401,112,1000,6347,512,363,45441,41370,41081,40915,40732,40708,40441,40116,39888,36206,35438,34892,34125,33744,32931,32818,47624,42508,776,38,32776,64513,63555,62287,61370,58640,58631,56141,54281,51717,50612,49503,49207,49197,49176,49173,49170,49161,49157,1012,217,775,3702,8001,959,9199,8181,9020,643,688,829,1040,1035,1064,902,1901,1069,687,2160,1042,32528,32385,32345,31731,31625,31365,31195,31189,31109,31059,30975,30704,30697,30656,30544,30263,29977,29810,29256,29243,29078,28973,28840,28641,28543,28493,28465,28369,28122,27899,27707,27482,27473,26966,26872,26720,26415,26407,25931,25709,25546,25541,25462,25337,25280,25240,25157,24910,24854,24644,24606,24594,24511,24279,24007,23980,23965,23781,23679,23608,23557,23531,23354,23176,23040,22914,22799,22739,22695,22692,22341,22055,21902,21803,21621,21354,21298,21261,21212,21131,20359,20004,19933,19687,19600,19489,19332,19322,19294,19197,19165,19130,19039,19017,18980,18835,18582,18360,18331,18234,18004,17989,17939,17888,17616,17615,17573,17459,17455,17091,16918,16430,16402,25003,1346,20,2,32780,1214,772,1993,402,773,31335,774,6050,6002,1046,3664,9877,965,838,814,8010,1007,1057,1234,1053,1081,1060,2343,1100,8000,903,1124,1105,9001,1804,9000,1050,1055,1059,1524,5555,5010,32778,48761,48489,48455,48255,48189,48078,47981,47915,47772,47765,46836,46532,46093,45928,45818,45722,45685,45380,45247,44946,44923,44508,44334,44253,44190,44185,44179,44160,44101,43967,43824,43686,43514,43370,43195,43094,42639,42627,42577,42557,42434,42431,42313,42056,41971,41967,41896,41774,41702,41638,41446,41308,40866,40847,40805,40724,40711,40622,40539,40019,39723,39714,39683,39632,39217,38615,38498,38412,38063,37843,37813,37783,37761,37602,37393,37212,37144,36945,36893,36778,36669,36489,36458,36384,36108,35794,35702,34855,34796,34758,34580,34579,34578,34577,34570,34433,34422,34358,34079,34038,33872,33866,33717,33459,33249,33030,32798,27444,47808,1484,3,1067,64727,64590,64481,64080,63420,62958,62699,62677,62575,62154,61961,61685,61550,61481,61412,61322,61319,61142,61024,60423,60381,60172,59846,59765,59207,59193,58797,58419,58178,58075,57977,57958,57843,57813,57410,57409,57172,55587,55544,55043,54925,54807,54711,54114,54094,53838,53589,53037,53006,52144,51972,51905,51690,51586,51554,51456,51255,50919,50708,50497,50164,50099,49968,49640,49396,49393,49360,49350,49306,49262,49259,49226,49222,49220,49216,49214,49178,49177,49155,1058,4666,3457,559,1455,4008,764,207,1457,944,9370,826,789,16086,1020,1013,1200,657,3296,1101,1051,689,639,3343,8900,1070,2362,2345,1087,1088,1072,2161,502,17754,32760,32750,32727,32611,32607,32546,32506,32499,32495,32479,32469,32446,32430,32425,32422,32415,32404,32382,32368,32359,32352,32326,32273,32262,32219,32216,32185,32132,32129,32124,32066,32053,32044,31999,31963,31918,31887,31882,31852,31803,31794,31792,31783,31750,31743,31735,31732,31720,31692,31673,31609,31602,31599,31584,31569,31560,31521,31520,31481,31428,31412,31404,31361,31352,31350,31343,31334,31284,31267,31266,31261,31202,31199,31180,31162,31155,31137,31134,31133,31115,31112,31084,31082,31051,31049,31036,31034,30996,30943,30932,30930,30909,30880,30875,30869,30856,30824,30803,30789,30785,30757,30698,30669,30661,30622,30612,30583,30578,30533,30526,30512,30477,30474,30473,30465,30461,30348,30299,30256,30214,30209,30154,30134,30093,30085,30067,30055,30034,29981,29964,29961,29894,29886,29843,29834,29794,29709,29613,29595,29581,29564,29554,29541,29534,29522,29503,29461,29453,29449,29444,29426,29410,29401,29400,29357,29333,29319,29276,29230,29200,29180,29168,29162,29153,29150,29142,29135,29129,29082,29054,29048,29030,28995,28965,28944,28933,28931,28892,28815,28808,28803,28746,28745,28725,28719,28707,28706,28692,28674,28664,28663,28645,28640,28630,28609,28584,28525,28485,28476,28445,28440,28438,28387,28349,28344,28295,28263,28247,28222,28220,28211,28190,28172,28129,28107,28105,28098,28091,28080,28071,28070,28034,28011,27973,27969,27949,27919,27895,27861,27853,27750,27722,27718,27711,27708,27696,27682,27678,27673,27666,27606,27600,27579,27573,27561,27547,27538,27487,27466,27437,27416,27414,27287,27272,27271,27263,27209,27200,27182,27180,27179,27150,27133,27110,27095,27085,27079,27078,27072,27064,27058,27027,27025,27017,27010,26998,26996,26994,26982,26973,26949,26888,26878,26868,26866,26845,26843,26823,26819,26796,26795,26771,26765,26742,26705,26698,26645,26549,26531,26512,26507,26493,26452,26434,26431,26423,26420,26401,26388,26381,26340,26337,26289,26286,26284,26254,26243,26239,26219,26204,26196,26191,26171,26123,26103,26079,26052,26031,26026,25992,25956,25925,25913,25909,25875,25868,25851,25826,25778,25756,25733,25715,25670,25652,25628,25627,25624,25600,25586,25579,25560,25544,25538,25521,25514,25498,25488,25466,25402,25385,25366,25332,25331,25290,25271,25266,25249,25248,25212,25170,25169,25135,25040,25036,24950,24945,24941,24916,24911,24875,24837,24818,24800,24756,24741,24731,24725,24706,24693,24689,24665,24658,24655,24639,24539,24528,24496,24444,24419,24418,24388,24306,24271,24265,24212,24172,24158,24155,24113,24107,24104,24098,24093,24063,24032,24021,24013,24008,23951,23946,23940,23865,23758,23755,23745,23714,23704,23698,23638,23633,23586,23585,23547,23522,23504,23495,23430,23428,23426,23421,23399,23374,23363,23341,23337,23327,23322,23256,23230,23202,23184,23170,23162,23161,23152,23108,23073,23059,23027,22991,22945,22902,22862,22853,22852,22843,22776,22762,22736,22732,22677,22626,22611,22597,22593,22585,22571,22547,22526,22522,22505,22495,22494,22481,22438,22417,22381,22377,22376,22356,22324,22292,22288,22252,22215,22146,22124,22123,22109,22105,22053,22045,22043,22029,21967,21948,21923,21898,21868,21842,21834,21784,21780,21742,21710,21702,21698,21674,21663,21655,21649,21644,21625,21609,21576,21568,21566,21556,21525,21524,21514,21476,21468,21454,21405,21366,21364,21360,21358,21344,21333,21320,21318,21303,21282,21247,21207,21206,21186,21167,21111,21104,21083,21060,21016,20919,20884,20876,20872,20865,20851,20848,20842,20817,20791,20762,20752,20742,20717,20710,20679,20678,20665,20560,20540,20525,20522,20518,20465,20464,20449,20445,20425,20424,20423,20411,20409,20380,20366,20360,20326,20313,20309,20288,20279,20262,20249,20217,20206,20164,20154,20146,20129,20120,20117,20082,19998,19995,19956,19936,19935,19792,19789,19728,19722,19719,19718,19717,19707,19695,19683,19663,19662,19660,19650,19647,19639,19632,19625,19624,19605,19504,19500,19482,19415,19374,19273,19227,19222,19193,19181,19161,19154,19141,19140,19096,19075,19047,19022,18996,18994,18991,18987,18985,18958,18883,18869,18832,18830,18821,18818,18807,18683,18676,18669,18666,18617,18605,18543,18485,18373,18319,18258,18255,18250,18228,18156,18134,18113,18081,17946,17845,17836,17824,17823,17814,17787,17762,17726,17683,17674,17673,17663,17638,17629,17605,17592,17585,17580,17549,17533,17505,17494,17490,17487,17468,17424,17423,17417,17359,17338,17332,17331,17321,17302,17282,17237,17236,17207,17205,17184,17146,17101,17077,17018,17006,16974,16972,16970,16948,16939,16938,16919,16912,16896,16862,16839,16838,16829,16816,16786,16779,16766,16739,16711,16708,16700,16697,16674,16573,16548,16545,16503,16498,16449,16433,16420,21800,21847,30260,19315,19541,21000,27007,27002,24242,20003,17219,18888,617,393,56,25,387,750,770,769,198,1,1083,771,1400,6111,83,134,32786,2001,501,1666,484,550,7100,26900,47557,145,496,760,5011,748,376,1514,426,110,6969,170,47,6146,370,49136,49127,49114,49052,49042,48954,48906,48901,48898,48887,48860,48854,48790,48780,48733,48712,48631,48626,48605,48558,48555,48548,48496,48411,48342,48329,48324,48321,48315,48314,48282,48263,48222,48156,48126,48105,47971,47936,47926,47917,47851,47847,47842,47821,47817,47802,47751,47706,47656,47586,47577,47572,47457,47432,47406,47371,47337,47279,47270,47198,47185,47169,47160,47134,47132,47083,47030,46837,46808,46793,46758,46698,46652,46643,46641,46630,46603,46594,46584,46483,46464,46462,46457,46440,46387,46294,46270,46265,46249,46207,46201,46195,46114,46066,46055,46040,45971,45906,45891,45883,45769,45719,45596,45538,45503,45449,45345,45338,45193,45148,45061,45037,45006,44943,44917,44856,44819,44748,44733,44661,44611,44598,44577,44539,44518,44503,44454,44420,44408,44371,44364,44312,44310,44275,44135,44117,44116,44100,44099,44093,44079,44054,44037,44034,44026,44009,43983,43942,43941,43842,43802,43740,43715,43640,43525,43510,43455,43423,43361,43336,43334,43288,43284,43268,43260,43248,43175,43173,43170,43092,43080,43072,43039,42941,42916,42882,42868,42857,42827,42825,42812,42807,42803,42773,42716,42708,42702,42648,42638,42612,42585,42558,42533,42498,42373,42341,42340,42294,42285,42284,42279,42251,42220,42215,42148,42139,42051,42005,41875,41851,41837,41816,41779,41771,41731,41717,41619,41499,41496,41406,41380,41360,41348,41343,41335,41334,41327,41265,41161,41156,41149,41148,41139,41073,41014,41011,40993,40982,40972,40958,40940,40914,40904,40893,40882,40877,40830,40736,40722,40667,40653,40642,40625,40591,40580,40551,40512,40491,40487,40480,40453,40436,40423,40399,40351,40322,40303,40266,40111,40102,40101,40074,40071,40043,39982,39919,39863,39812,39811,39753,39745,39743,39733,39709,39697,39659,39649,39641,39630,39600,39596,39590,39548,39507,39457,39453,39440,39430,39401,39383,39377,39332,39313,39297,39243,39220,39163,39146,39135,39116,39086,39056,39042,39035,39028,38972,38864,38812,38742,38734,38732,38727,38714,38648,38644,38609,38608,38571,38526,38510,38499,38370,38325,38312,38304,38294,38274,38218,38190,38183,38172,38153,38142,38125,38064,38053,38041,38014,37964,37933,37922,37823,37686,37682,37670,37664,37663,37592,37589,37574,37563,37561,37478,37464,37456,37441,37423,37401,37400,37385,37377,37348,37343,37327,37316,37255,37221,37216,37198,37182,37163,37156,37152,37139,37136,37093,37046,37025,37018,36990,36931,36910,36887,36862,36854,36817,36719,36695,36694,36666,36641,36576,36522,36519,36500,36471,36462,36380,36293,36237,36214,36178,36136,36126,36099,36096,36065,36041,36019,35991,35985,35948,35940,35904,35896,35810,35776,35775,35773,35746,35656,35636,35516,35493,35490,35474,35390,35283,35280,35240,35222,35188,35176,35108,35051,35044,35026,34979,34893,34847,34822,34780,34771,34770,34757,34705,34692,34653,34586,34425,34421,34417,34374,34253,34250,34243,34231,34227,34214,34157,34153,34133,34119,34082,34075,33986,33975,33882,33878,33873,33858,33849,33826,33795,33724,33710,33700,33693,33687,33652,33591,33584,33575,33556,33465,33448,33422,33414,33394,33377,33302,33290,33285,33264,33208,33207,33162,33156,33149,33144,33080,33043,33028,32955,32897,32847,32843,32820,32812,37654,48556,4321,403,5308,7009,584,81,2067,7001,65520,65460,65420,65396,65380,65347,65286,65232,65105,64944,64890,64884,64874,64829,64798,64795,64772,64693,64682,64640,64630,64616,64615,64589,64566,64544,64492,64469,64456,64406,64365,64345,64340,64313,64312,64284,64259,64258,64202,63962,63917,63820,63786,63710,63700,63673,63534,63508,63499,63447,63346,63344,63337,63331,63281,63247,63173,63146,63136,63129,63106,63101,63079,63006,62975,62955,62880,62866,62845,62827,62778,62701,62697,62690,62562,62522,62493,62458,62449,62436,62420,62412,62404,62325,62281,62216,62188,62164,62133,62114,62101,62100,62038,61983,61973,61967,61937,61921,61902,61867,61828,61781,61709,61678,61653,61587,61539,61532,61523,61512,61485,61480,61438,61431,61422,61400,61395,61381,61226,61193,61192,61167,61127,61095,61081,61055,61050,61047,61046,61027,60988,60966,60950,60707,60705,60701,60679,60650,60438,60435,60431,60430,60384,60363,60347,60341,60255,60227,60145,60097,60069,60035,60028,59998,59971,59943,59860,59805,59791,59758,59669,59632,59603,59593,59581,59577,59555,59506,59483,59434,59415,59388,59327,59301,59296,59254,59216,59214,59189,59186,59132,59093,59037,59035,59002,58975,58938,58929,58914,58893,58817,58782,58777,58747,58705,58700,58674,58646,58455,58432,58369,58308,58205,58141,58114,58102,58091,58089,58026,57946,57942,57868,57858,57848,57836,57827,57756,57679,57662,57629,57461,57421,57386,57156,57133,57114,57063,57005,56980,56954,56929,56897,56895,56892,56876,56869,56848,56825,56765,56668,56637,56622,56555,56554,56491,56468,56366,56359,56337,56326,56288,56284,56273,56225,56209,56168,56153,56105,56103,55954,55941,55870,55795,55784,55766,55745,55650,55618,55593,55581,55579,55553,55541,55488,55352,55316,55267,55205,55156,55124,55034,54993,54952,54946,54939,54848,54812,54758,54747,54722,54676,54653,54627,54607,54531,54521,54513,54398,54375,54349,54324,54298,54296,54267,54264,54259,54126,54055,54045,54040,54027,54023,53996,53987,53940,53880,53830,53651,53554,53460,53433,53403,53396,53367,53286,53279,53249,53228,53212,53182,53161,53126,53084,53023,52945,52861,52813,52792,52772,52762,52713,52706,52674,52649,52582,52571,52516,52412,52364,52333,52254,52227,52224,52220,52155,52138,52130,52089,52006,51903,51894,51847,51843,51781,51710,51649,51589,51581,51544,51477,51471,51427,51407,51400,51383,51323,51280,51267,51225,51211,51193,51172,51167,51143,51120,51020,51014,51013,50990,50913,50904,50900,50896,50756,50722,50649,50622,50620,50579,50574,50573,50523,50474,50447,50427,50420,50409,50376,50349,50345,50300,50296,50273,50239,50163,50149,50143,50127,50122,50085,50049,50041,50024,50009,49998,49990,49986,49984,49945,49939,49926,49839,49801,49754,49746,49669,49639,49620,49600,49589,49579,49562,49557,49525,49513,49506,49478,49443,49440,49384,49375,49348,49337,49334,49324,49319,49317,49295,49273,49268,49266,49264,49255,49252,49249,49237,49236,49231,49227,49223,49219,49218,49217,49206,49203,49183,49164,1334,672,1345,1062,9890,984,982,979,977,9740,973,961,953,949,947,940,934,931,917,9053,898,893,889,876,8435,841,819,818,812,7516,745,734,732,727,720,6905,6784,6430,5347,5018,4778,3403,3301,304,3001,15138,15053,14499,14181,13557,13429,12208,11618,11287,11271,10825,10583,10484,10302,1018,1015,1237,2973,7677,2863,1163,620,2101,1287,1098,995,9595,1622,1286,1862,4691,3569,1113,2053,8207,1061,603,887,4039,10081,681,12003,644,3574,1052,2164,4047,619,6503,3527,7846,391,1414,2004,7651,152,1348,201,27500,577,2018,99,2106,759,1491,7005,32787,761,742,79,666,206,1483,1110,1664,31,749,96,801,573,1999,6144,4827,1366,751,1389,510,704,7648,132,888,1422,525,3531,640,1155,146,1412,3333,205,594,444,1349,2012,740,1521,524,1467,530,1469,1531,191,729,3246,2045,1441,2431,1507,150,314,259,546,552,163,1432,2032,45000,6110,160,2026,1672,1364,568,86,1359,531,516,541,6145,440,1537,1662,505,1600,1513,547,1512,2948,540,118,747,2019,1398,451,222,57,417,537,1650,6147,1435,93,355,551,442,130,548,27910,2103,1498,1518,1527,133,586,607,730,532,569,3985,472,1515,1438,455,504,1481,1420,65,77,1465,1388,610,731,6502,45,600,709,763,437,386,27960,16444,22370,1370,377,1501,369,752,485,2040,1393,1440,438,458,521,1353,35,1357,758,1482,1532,503,1372,347,1548,48,7008,2627,571,450,587,469,256,1445,4132,4133,385,5304,634,1453,1371,140,1476,1347,5190,1987,563,416,753,1530,2006,1670,1503,1395,479,1551,1505,121,76,447,542,3049,449,6033,5357,3233,1085,2054,1074,12321,9206,4049,2387,2821,4262,4232,9921,9897,988,986,9869,985,981,9716,966,9638,9620,960,9589,952,951,950,946,941,9416,937,9310,927,922,9229,921,9170,9156,9154,9110,908,9079,8998,897,8979,8934,8924,8820,881,8793,8742,8719,869,8684,8661,8591,857,8556,845,839,8343,8336,8284,823,821,815,809,805,7963,7946,7867,784,7804,7613,7536,7524,7298,728,7267,722,719,7074,7051,6984,6976,6972,6925,6811,6625,659,6520,6468,6463,6451,6395,6372,6353,6250,6237,6212,6119,5873,5817,5749,5704,5648,5589,5552,5509,5444,5439,5366,5320,5318,5279,5210,5139,5119,5110,5077,5048,5034,4934,4836,4695,4565,4408,4362,4198,4175,1753,16334,16312,16263,16226,16159,16155,16108,16066,15969,15966,15831,15814,15803,15754,15733,15648,15621,15514,15449,15381,15361,15360,15290,15267,15186,15149,15124,15123,15086,15067,15055,15041,14991,14946,14922,14889,14808,14771,14679,14487,14388,14356,14341,14290,14286,14281,14241,14220,14202,14195,14169,13925,13914,13905,13876,13865,13856,13799,13747,13701,13699,13686,13663,13627,13571,13570,13552,13543,13539,13476,13474,13419,13402,13378,13312,13299,13291,13266,13164,13155,13002,12991,12986,12933,12873,12854,12650,12602,12578,12525,12472,12469,12447,12306,12304,12268,12195,12173,12034,11970,11878,11872,11785,11723,11567,11449,11425,11364,11182,11157,11156,11138,11137,11063,10862,10845,10827,10666,10653,10628,10525,10517,10490,10445,10409,10369,10343,10268,1011,10076,10066,1004,1003,10011,8201,2078,2158,3372,3544,2060,7012,5629,7354,7303,1010,1203,605,1257,3162,1251,3978,3495,5168,2121,5435,1215,873,1695,9599,1099,5900,653,641,3094,2083,628,5082,3453,3910,3396,6105,3048,2398,3304,2368,900,7274,1921,1095,6627,2058,2061,833,831,2528,4361,1685,4447,10007,777,1755,2382,1337,5354,3235,2908,1861,636,1063,6961,1106,4593,2215,2055,1585,1143,1077,993,1884,2062,4061,1792,2140,1803,14937,694,11720,2123,1191,1909,1738,3519,1089,810,2819,1620,3002,1139,621,680,12000,12001,12004,12002,1148,4536,3477,2168,9002,4401,4404,1175,2496,1256,1076,3631,2129,3364,4378,4692,1302,3947,9695,3505,2517,9750,632,2302,3784,1078,1122,1079,3451,1834,1116,1206,3054,8040,705,1103,1102,4046,674,8402,54,82,765,2013,1402,2307,261,1671,155,44,1427,398,2241,1428,143,1391,1392,1383,744,197,1415,17756,17755,22347,25793,32748,32744,32743,32742,32736,32734,32731,32723,32714,32706,32693,32687,32685,32682,32676,32675,32674,32669,32664,32656,32652,32644,32642,32641,32639,32637,32634,32632,32631,32629,32618,32617,32612,32598,32597,32595,32592,32583,32578,32577,32576,32575,32574,32571,32566,32564,32560,32558,32553,32550,32532,32524,32523,32518,32512,32511,32508,32503,32496,32488,32487,32484,32482,32478,32474,32473,32468,32466,32465,32454,32449,32447,32444,32440,32439,32436,32435,32433,32429,32428,32426,32423,32412,32409,32406,32398,32391,32389,32379,32378,32377,32369,32364,32360,32355,32349,32342,32339,32338,32329,32323,32319,32317,32316,32313,32309,32306,32305,32297,32295,32291,32289,32282,32281,32277,32276,32274,32272,32270,32268,32264,32259,32251,32248,32245,32231,32228,32225,32223,32222,32221,32217,32210,32204,32202,32201,32198,32195,32190,32188,32187,32186,32180,32178,32176,32174,32172,32167,32163,32162,32161,32127,32117,32109,32107,32106,32105,32094,32092,32091,32090,32084,32081,32079,32072,32068,32065,32064,32059,32048,32046,32040,32039,32035,32033,32025,32024,32018,32011,32010,32007,32006,32005,31997,31992,31981,31979,31974,31972,31968,31967,31966,31950,31940,31939,31934,31929,31928,31922,31921,31920,31906,31901,31899,31898,31894,31892,31878,31877,31872,31870,31869,31861,31854,31853,31847,31844,31842,31834,31833,31827,31825,31822,31821,31819,31818,31817,31813,31798,31782,31779,31778,31776,31763,31759,31757,31752,31749,31739,31737,31736,31733,31729,31727,31723,31712,31709,31705,31703,31683,31679,31678,31671,31670,31669,31668,31663,31660,31657,31655,31653,31651,31648,31643,31626,31624,31617,31615,31606,31601,31600,31598,31597,31596,31595,31594,31593,31579,31577,31566,31565,31564,31563,31558,31557,31548,31545,31544,31543,31532,31527,31518,31510,31509,31506,31495,31493,31487,31470,31460,31459,31454,31453,31451,31439,31432,31429,31424,31423,31422,31421,31415,31414,31398,31392,31391,31386,31371,31366,31362,31358,31354,31347,31340,31336,31333,31326,31325,31324,31318,31314,31309,31301,31299,31293,31292,31288,31279,31275,31273,31271,31268,31258,31257,31254,31252,31249,31248,31247,31242,31240,31238,31237,31234,31230,31218,31217,31215,31212,31211,31209,31204,31198,31192,31187,31176,31150,31146,31141,31129,31127,31119,31105,31100,31089,31088,31085,31083,31080,31078,31076,31072,31069,31068,31058,31054,31052,31048,31030,31028,31022,31020,31015,31005,31001,30990,30986,30984,30982,30972,30967,30965,30959,30958,30955,30951,30945,30942,30931,30926,30924,30919,30918,30912,30910,30908,30906,30897,30894,30893,30892,30886,30881,30876,30867,30851,30849,30841,30838,30837,30833,30828,30827,30826,30825,30823,30820,30819,30808,30805,30796,30795,30784,30783,30782,30780,30772,30765,30762,30755,30754,30746,30741,30738,30737,30734,30729,30725,30723,30719,30713,30712,30710,30702,30701,30689,30688,30687,30682,30672,30670,30665,30664,30662,30660,30658,30657,30651,30650,30648,30646,30644,30637,30627,30624,30623,30619,30609,30601,30592,30588,30587,30575,30568,30566,30564,30555,30550,30539,30536,30529,30522,30521,30518,30516,30514,30511,30501,30500,30496,30495,30493,30492,30491,30483,30481,30478,30475,30472,30470,30468,30467,30464,30463,30462,30457,30454,30453,30434,30433,30430,30428,30424,30423,30420,30419,30418,30416,30411,30400,30398,30394,30383,30381,30378,30359,30350,30341,30338,30335,30331,30330,30318,30310,30309,30306,30305,30300,30298,30295,30293,30286,30267,30258,30254,30252,30246,30245,30244,30241,30239,30236,30235,30234,30230,30212,30211,30194,30193,30188,30184,30182,30181,30179,30175,30172,30170,30168,30150,30148,30144,30139,30135,30132,30131,30130,30126,30123,30113,30108,30086,30066,30063,30059,30048,30046,30041,30036,30031,30027,30020,30018,30015,30008,30006,30000,29988,29987,29980,29978,29970,29967,29956,29949,29932,29930,29927,29926,29915,29914,29911,29907,29905,29903,29901,29883,29878,29876,29869,29867,29864,29863,29860,29858,29854,29852,29846,29842,29840,29833,29829,29816,29812,29811,29809,29802,29796,29788,29787,29785,29782,29780,29773,29771,29761,29759,29756,29754,29753,29752,29749,29747,29742,29737,29733,29731,29729,29715,29712,29701,29700,29694,29682,29681,29680,29677,29673,29667,29665,29659,29652,29647,29642,29639,29632,29630,29618,29616,29615,29607,29604,29600,29589,29588,29587,29585,29583,29582,29577,29572,29570,29562,29559,29533,29525,29523,29520,29518,29514,29512,29508,29506,29499,29494,29488,29486,29480,29476,29474,29471,29467,29465,29457,29448,29447,29442,29435,29432,29427,29420,29415,29414,29408,29407,29406,29403,29398,29397,29396,29393,29390,29380,29376,29375,29368,29366,29364,29355,29352,29342,29335,29331,29329,29327,29324,29323,29317,29315,29312,29308,29305,29298,29286,29284,29283,29281,29280,29278,29277,29273,29272,29268,29259,29257,29249,29248,29239,29238,29224,29220,29218,29211,29207,29203,29201,29199,29196,29195,29186,29185,29183,29177,29172,29163,29149,29137,29134,29126,29121,29115,29114,29112,29105,29095,29087,29084,29070,29069,29061,29058,29056,29053,29052,29046,29045,29039,29036,29032,29026,29022,29014,29013,29010,29008,29007,29000,28997,28992,28979,28976,28969,28967,28966,28958,28954,28953,28952,28946,28945,28943,28940,28938,28934,28932,28927,28924,28920,28919,28917,28906,28905,28902,28900,28898,28896,28895,28893,28888,28887,28885,28883,28880,28879,28877,28876,28875,28865,28858,28856,28855,28854,28851,28847,28845,28839,28837,28836,28830,28827,28826,28822,28816,28813,28811,28810,28800,28797,28785,28780,28779,28778,28776,28775,28772,28769,28765,28755,28754,28752,28750,28748,28744,28741,28737,28736,28734,28730,28729,28728,28723,28708,28705,28700,28697,28696,28689,28685,28682,28675,28673,28661,28660,28654,28649,28644,28643,28642,28638,28633,28625,28620,28618,28617,28610,28607,28597,28587,28586,28575,28561,28556,28545,28544,28537,28534,28530,28529,28521,28513,28506,28488,28484,28483,28477,28472,28471,28469,28466,28464,28455,28441,28437,28434,28433,28428,28427,28425,28422,28421,28419,28417,28411,28401,28396,28393,28392,28391,28386,28380,28378,28377,28367,28366,28356,28353,28348,28345,28335,28334,28327,28322,28317,28315,28311,28309,28307,28303,28301,28298,28292,28283,28271,28265,28257,28251,28248,28246,28243,28242,28239,28237,28230,28221,28219,28218,28215,28213,28212,28203,28200,28197,28195,28183,28182,28178,28155,28154,28148,28145,28144,28142,28141,28124,28121,28120,28116,28112,28109,28108,28097,28096,28094,28089,28078,28077,28074,28072,28064,28059,28058,28054,28051,28045,28043,28036,28029,28028,28021,28020,28019,28005,27996,27994,27992,27984,27983,27979,27974,27972,27970,27967,27959,27958,27954,27952,27951,27944,27940,27939,27931,27918,27916,27912,27905,27902,27900,27887,27884,27876,27872,27869,27867,27863,27860,27859,27856,27850,27849,27838,27836,27833,27832,27830,27829,27828,27826,27822,27818,27817,27815,27803,27801,27792,27788,27786,27785,27783,27781,27775,27769,27767,27760,27756,27755,27745,27742,27741,27735,27733,27729,27721,27720,27715,27714,27713,27712,27705,27703,27702,27700,27698,27694,27693,27690,27689,27688,27687,27680,27677,27672,27669,27663,27662,27637,27636,27631,27630,27626,27624,27622,27621,27617,27608,27602,27599,27597,27593,27588,27587,27586,27584,27581,27575,27566,27564,27563,27556,27548,27537,27533,27532,27525,27512,27510,27507,27501,27493,27476,27475,27471,27470,27465,27464,27455,27454,27449,27445,27438,27436,27433,27424,27410,27408,27398,27397,27395,27391,27381,27373,27368,27366,27364,27358,27355,27340,27331,27330,27323,27313,27310,27300,27298,27291,27290,27289,27286,27285,27280,27274,27270,27268,27259,27258,27249,27237,27232,27230,27228,27227,27223,27221,27212,27202,27196,27192,27175,27174,27172,27169,27157,27148,27147,27144,27139,27118,27104,27101,27100,27098,27094,27089,27088,27087,27076,27075,27062,27061,27057,27049,27048,27046,27042,27038,27036,27032,27029,27020,27018,27014,26988,26983,26979,26977,26970,26963,26960,26958,26955,26953,26951,26944,26941,26937,26934,26932,26926,26919,26916,26914,26906,26903,26899,26896,26891,26884,26882,26881,26876,26875,26861,26860,26859,26857,26847,26842,26841,26839,26830,26829,26814,26810,26806,26805,26803,26801,26794,26792,26786,26776,26775,26761,26760,26754,26753,26747,26746,26725,26724,26718,26714,26708,26706,26702,26699,26695,26692,26691,26690,26689,26685,26683,26681,26679,26678,26674,26673,26668,26666,26665,26664,26655,26654,26651,26649,26641,26639,26631,26628,26622,26621,26618,26596,26594,26587,26585,26579,26578,26575,26573,26563,26556,26541,26538,26536,26532,26529,26523,26522,26509,26508,26497,26491,26484,26482,26481,26477,26473,26466,26451,26448,26442,26439,26436,26432,26418,26417,26416,26413,26411,26409,26397,26395,26384,26376,26372,26369,26367,26364,26362,26356,26339,26338,26325,26318,26311,26304,26299,26296,26291,26283,26279,26275,26273,26270,26225,26211,26207,26205,26203,26201,26198,26189,26187,26183,26181,26179,26175,26172,26164,26163,26158,26157,26147,26141,26137,26134,26131,26130,26127,26121,26119,26116,26110,26107,26100,26095,26090,26089,26080,26078,26073,26067,26066,26062,26058,26057,26055,26050,26048,26040,26039,26036,26035,26033,26030,26021,26020,26013,26005,26002,25993,25989,25988,25987,25985,25980,25975,25969,25968,25958,25951,25950,25949,25944,25940,25929,25928,25921,25910,25896,25894,25887,25881,25879,25857,25853,25849,25841,25833,25832,25827,25823,25815,25799,25798,25794,25790,25768,25767,25763,25751,25744,25735,25731,25730,25724,25723,25716,25712,25710,25706,25687,25677,25667,25666,25659,25658,25644,25643,25642,25641,25636,25630,25618,25617,25611,25603,25594,25592,25591,25590,25588,25574,25573,25572,25569,25568,25567,25564,25542,25540,25537,25534,25533,25524,25523,25522,25515,25509,25502,25499,25493,25492,25483,25480,25474,25460,25455,25453,25451,25446,25443,25442,25439,25432,25428,25421,25418,25416,25399,25398,25397,25396,25395,25394,25390,25378,25374,25369,25364,25353,25348,25343,25338,25321,25314,25309,25304,25302,25301,25288,25286,25274,25268,25267,25258,25251,25244,25243,25241,25237,25235,25230,25228,25217,25215,25214,25211,25205,25204,25202,25197,25192,25191,25185,25184,25183,25180,25173,25168,25163,25160,25159,25158,25155,25153,25150,25147,25137,25129,25127,25115,25107,25104,25103,25102,25093,25091,25086,25082,25081,25080,25078,25074,25069,25067,25052,25043,25030,25029,25028,25025,25020,25019,25018,25017,25011,24995,24993,24983,24982,24980,24973,24963,24958,24957,24956,24946,24943,24939,24936,24932,24926,24905,24899,24893] - defaults = { - 'proxy': '', - 'threads': '10', - 'masscan-rate': '1000', - 'masscan-iface': 'tun0', - 'results-dir': 'recon-results', - 'aquatone-scan-timeout': '900', - 'gobuster-extensions': "", - 'gobuster-wordlist': '/usr/share/seclists/Discovery/Web-Content/common.txt', + "proxy": "", + "threads": "10", + "masscan-rate": "1000", + "masscan-iface": "tun0", + "results-dir": "recon-results", + "aquatone-scan-timeout": "900", + "gobuster-extensions": "", + "gobuster-wordlist": "/usr/share/seclists/Discovery/Web-Content/common.txt", } -web_ports = {'80', '443', '8080', '8000', '8443'} +web_ports = {"80", "443", "8080", "8000", "8443"} tool_paths = { - 'aquatone': '/usr/local/bin/aquatone', - 'tko-subs': f'{Path.home()}/go/bin/tko-subs', - 'tko-subs-dir': f'{Path.home()}/go/src/github.com/anshumanbh/tko-subs', - 'subjack': f'{Path.home()}/go/bin/subjack', - 'subjack-fingerprints': f'{Path.home()}/go/src/github.com/haccer/subjack/fingerprints.json', - 'CORScanner': '/opt/CORScanner/cors_scan.py', - 'gobuster': f'{Path.home()}/go/bin/gobuster', - 'recursive-gobuster': '/usr/local/bin/recursive-gobuster.pyz', - 'webanalyze': f'{Path.home()}/go/bin/webanalyze', - 'masscan': '/usr/local/bin/masscan', + "aquatone": "/usr/local/bin/aquatone", + "tko-subs": f"{Path.home()}/go/bin/tko-subs", + "tko-subs-dir": f"{Path.home()}/go/src/github.com/anshumanbh/tko-subs", + "subjack": f"{Path.home()}/go/bin/subjack", + "subjack-fingerprints": f"{Path.home()}/go/src/github.com/haccer/subjack/fingerprints.json", + "CORScanner": "/opt/CORScanner/cors_scan.py", + "gobuster": f"{Path.home()}/go/bin/gobuster", + "recursive-gobuster": "/opt/recursive-gobuster/recursive-gobuster.pyz", + "webanalyze": f"{Path.home()}/go/bin/webanalyze", + "masscan": "/usr/local/bin/masscan", } + +top_tcp_ports = [ + 80, + 23, + 443, + 21, + 22, + 25, + 3389, + 110, + 445, + 139, + 143, + 53, + 135, + 3306, + 8080, + 1723, + 111, + 995, + 993, + 5900, + 1025, + 587, + 8888, + 199, + 1720, + 465, + 548, + 113, + 81, + 6001, + 10000, + 514, + 5060, + 179, + 1026, + 2000, + 8443, + 8000, + 32768, + 554, + 26, + 1433, + 49152, + 2001, + 515, + 8008, + 49154, + 1027, + 5666, + 646, + 5000, + 5631, + 631, + 49153, + 8081, + 2049, + 88, + 79, + 5800, + 106, + 2121, + 1110, + 49155, + 6000, + 513, + 990, + 5357, + 427, + 49156, + 543, + 544, + 5101, + 144, + 7, + 389, + 8009, + 3128, + 444, + 9999, + 5009, + 7070, + 5190, + 3000, + 5432, + 1900, + 3986, + 13, + 1029, + 9, + 6646, + 5051, + 49157, + 1028, + 873, + 1755, + 2717, + 4899, + 9100, + 119, + 37, + 1000, + 3001, + 5001, + 82, + 10010, + 1030, + 9090, + 2107, + 1024, + 2103, + 6004, + 1801, + 5050, + 19, + 8031, + 1041, + 255, + 1056, + 1049, + 1065, + 2967, + 1053, + 1048, + 1064, + 1054, + 3703, + 17, + 808, + 3689, + 1031, + 1044, + 1071, + 5901, + 100, + 9102, + 8010, + 1039, + 4001, + 2869, + 9000, + 5120, + 2105, + 636, + 1038, + 2601, + 1, + 7000, + 1066, + 1069, + 625, + 311, + 280, + 254, + 4000, + 1761, + 5003, + 2002, + 1998, + 2005, + 1032, + 1050, + 6112, + 3690, + 1521, + 2161, + 6002, + 1080, + 2401, + 4045, + 902, + 787, + 7937, + 1058, + 2383, + 32771, + 1059, + 1040, + 1033, + 50000, + 5555, + 10001, + 1494, + 593, + 3, + 2301, + 7938, + 3268, + 1234, + 1022, + 1074, + 9001, + 8002, + 1036, + 1035, + 1037, + 464, + 1935, + 497, + 6666, + 2003, + 6543, + 24, + 1352, + 3269, + 1111, + 407, + 500, + 20, + 2006, + 1034, + 3260, + 15000, + 1218, + 4444, + 264, + 2004, + 33, + 42510, + 1042, + 3052, + 999, + 1023, + 222, + 1068, + 7100, + 888, + 563, + 1717, + 992, + 32770, + 2008, + 32772, + 7001, + 2007, + 8082, + 5550, + 5801, + 2009, + 512, + 1043, + 163, + 50001, + 2701, + 1700, + 7019, + 4662, + 2065, + 2010, + 42, + 161, + 2602, + 9535, + 3333, + 5100, + 5002, + 2604, + 4002, + 6059, + 1062, + 9415, + 8701, + 8652, + 8651, + 8089, + 65389, + 65000, + 64680, + 64623, + 55600, + 55555, + 52869, + 35500, + 33354, + 23502, + 20828, + 8194, + 8193, + 8192, + 2702, + 1311, + 1060, + 4443, + 9595, + 1051, + 3283, + 1047, + 9594, + 6789, + 5226, + 5225, + 32769, + 1052, + 9593, + 1055, + 16993, + 16992, + 730, + 731, + 709, + 13782, + 1067, + 5902, + 366, + 9050, + 1002, + 85, + 5500, + 8085, + 51103, + 49999, + 45100, + 10243, + 5431, + 1864, + 1863, + 49, + 6667, + 90, + 1503, + 27000, + 6881, + 1500, + 340, + 8021, + 164, + 5566, + 9071, + 8088, + 8899, + 2222, + 6005, + 32773, + 32774, + 9876, + 1501, + 9101, + 5102, + 163, + 5679, + 648, + 1666, + 146, + 901, + 83, + 9207, + 8001, + 8083, + 8084, + 5214, + 14238, + 3476, + 5004, + 30, + 12345, + 912, + 2030, + 2605, + 6, + 541, + 4, + 1248, + 3005, + 8007, + 880, + 306, + 2500, + 4242, + 8291, + 52822, + 1097, + 9009, + 2525, + 1086, + 1088, + 900, + 6101, + 7200, + 2809, + 987, + 32775, + 800, + 12000, + 1083, + 211, + 705, + 711, + 20005, + 13783, + 6969, + 1104, + 5269, + 5222, + 1046, + 1085, + 5987, + 5989, + 5988, + 9968, + 9503, + 9502, + 9485, + 9290, + 9220, + 9011, + 8994, + 8649, + 8222, + 7911, + 7625, + 7106, + 65129, + 63331, + 6156, + 6129, + 60020, + 5962, + 5961, + 5960, + 5959, + 5925, + 5877, + 5825, + 5810, + 58080, + 57294, + 50800, + 50006, + 50003, + 49160, + 49159, + 49158, + 48080, + 40193, + 34573, + 34572, + 34571, + 3404, + 33899, + 3301, + 32782, + 32781, + 31038, + 30718, + 28201, + 27715, + 25734, + 24800, + 22939, + 21571, + 20221, + 20031, + 19842, + 19801, + 19101, + 17988, + 1783, + 16018, + 16016, + 15003, + 14442, + 13456, + 10629, + 10628, + 10626, + 10621, + 10617, + 10616, + 10566, + 10025, + 10024, + 10012, + 1169, + 2190, + 11967, + 5030, + 5414, + 1057, + 7627, + 6788, + 3766, + 8087, + 11110, + 1947, + 9010, + 7741, + 14000, + 3367, + 1094, + 1099, + 1098, + 1075, + 1108, + 4003, + 1081, + 1093, + 4449, + 2718, + 6580, + 15002, + 4129, + 1687, + 1840, + 3827, + 30000, + 3580, + 1100, + 2144, + 1063, + 1061, + 6901, + 9900, + 1107, + 1106, + 9500, + 20222, + 7778, + 8181, + 1077, + 3801, + 1310, + 1718, + 2119, + 2811, + 2492, + 2135, + 1070, + 9080, + 1045, + 16001, + 2399, + 3017, + 3031, + 1148, + 9002, + 8873, + 2875, + 8086, + 5718, + 10002, + 3998, + 20000, + 4126, + 8400, + 1272, + 3071, + 5911, + 2607, + 9618, + 2381, + 1096, + 5910, + 6389, + 3300, + 7777, + 1072, + 3351, + 1073, + 8333, + 3784, + 15660, + 5633, + 6123, + 3211, + 1078, + 8600, + 1079, + 3659, + 3551, + 2260, + 2160, + 1082, + 2100, + 3325, + 3323, + 8402, + 89, + 691, + 2020, + 1001, + 1999, + 32776, + 212, + 6003, + 2998, + 50002, + 7002, + 32, + 898, + 5510, + 3372, + 2033, + 5903, + 99, + 749, + 425, + 43, + 5405, + 6502, + 13722, + 6106, + 458, + 7007, + 9666, + 8100, + 3737, + 5280, + 9091, + 4111, + 1334, + 3261, + 1152, + 2522, + 5859, + 2179, + 1247, + 9944, + 9943, + 9877, + 9110, + 8654, + 8254, + 8180, + 8011, + 7512, + 7435, + 7103, + 61900, + 61532, + 5922, + 5915, + 5904, + 5822, + 56738, + 55055, + 51493, + 50636, + 50389, + 49175, + 49165, + 49163, + 3546, + 32784, + 27355, + 27353, + 27352, + 24444, + 19780, + 18988, + 16012, + 15742, + 10778, + 2191, + 3011, + 1580, + 5200, + 3851, + 3371, + 3370, + 3369, + 7402, + 5054, + 4006, + 5298, + 3918, + 2126, + 3077, + 7443, + 8090, + 3493, + 3828, + 4446, + 1186, + 1183, + 19283, + 19315, + 3995, + 62078, + 5963, + 3880, + 1124, + 1782, + 8500, + 1089, + 10004, + 1296, + 9998, + 2251, + 1087, + 3871, + 3030, + 9040, + 32779, + 32777, + 1021, + 32778, + 2021, + 616, + 700, + 666, + 5802, + 4321, + 1112, + 38292, + 2040, + 1524, + 545, + 84, + 49400, + 32780, + 2111, + 1600, + 2048, + 3006, + 1084, + 2638, + 6547, + 16080, + 6699, + 9111, + 6007, + 1533, + 720, + 2034, + 5560, + 1443, + 2106, + 555, + 667, + 801, + 3221, + 6025, + 3826, + 9200, + 2608, + 4279, + 7025, + 11111, + 4445, + 9917, + 9575, + 9099, + 9003, + 8290, + 8099, + 8093, + 8045, + 7921, + 7920, + 7496, + 6839, + 6792, + 6779, + 6692, + 6565, + 60443, + 5952, + 5950, + 5907, + 5906, + 5862, + 5850, + 5815, + 5811, + 57797, + 56737, + 5544, + 55056, + 5440, + 54328, + 54045, + 52848, + 52673, + 50500, + 50300, + 49176, + 49167, + 49161, + 44501, + 44176, + 41511, + 40911, + 32785, + 32783, + 30951, + 27356, + 26214, + 25735, + 19350, + 18101, + 18040, + 17877, + 16113, + 15004, + 14441, + 12265, + 12174, + 10215, + 10180, + 1151, + 5730, + 6689, + 8200, + 4567, + 8300, + 6100, + 10009, + 8800, + 5061, + 6566, + 5678, + 4004, + 4005, + 3800, + 3168, + 3869, + 5080, + 8022, + 1201, + 3814, + 1862, + 3905, + 2725, + 2394, + 2393, + 9898, + 1114, + 6510, + 8383, + 3914, + 3971, + 9878, + 5033, + 7999, + 7676, + 4900, + 9418, + 4550, + 2909, + 8042, + 3878, + 16000, + 1091, + 1090, + 1271, + 3920, + 6567, + 1138, + 3945, + 3390, + 1175, + 10003, + 1199, + 3889, + 9081, + 3003, + 1131, + 1119, + 8292, + 5087, + 3527, + 1122, + 7800, + 1117, + 4848, + 3809, + 3324, + 3322, + 3517, + 5221, + 2323, + 4224, + 981, + 722, + 1009, + 617, + 417, + 777, + 4998, + 714, + 70, + 6346, + 2022, + 765, + 301, + 1076, + 524, + 5999, + 668, + 2041, + 10082, + 6009, + 1007, + 4343, + 1417, + 416, + 2038, + 1434, + 259, + 44443, + 1984, + 2068, + 7004, + 911, + 6006, + 726, + 1010, + 2046, + 4125, + 109, + 9103, + 2035, + 1461, + 7201, + 687, + 1011, + 2013, + 125, + 903, + 2043, + 6669, + 6668, + 1455, + 481, + 2047, + 683, + 843, + 783, + 9929, + 5998, + 2042, + 406, + 256, + 31337, + 44442, + 2045, + 4040, + 1145, + 6060, + 6051, + 3916, + 9444, + 1875, + 7272, + 4147, + 4252, + 4200, + 13724, + 7024, + 1556, + 9941, + 9914, + 9815, + 9673, + 9643, + 9621, + 9501, + 9409, + 9198, + 9197, + 9098, + 8996, + 8987, + 8877, + 8676, + 8648, + 8540, + 8481, + 8385, + 8189, + 8098, + 8095, + 8050, + 8016, + 8015, + 7929, + 7770, + 7749, + 7438, + 7241, + 7123, + 7051, + 7050, + 6896, + 6732, + 6711, + 65310, + 6520, + 6504, + 6247, + 6203, + 61613, + 60642, + 60146, + 60123, + 5981, + 5940, + 59202, + 59201, + 59200, + 5918, + 5914, + 59110, + 5909, + 5905, + 5899, + 58838, + 5869, + 58632, + 58630, + 5823, + 5818, + 5812, + 5807, + 58002, + 58001, + 57665, + 55576, + 55020, + 53535, + 5339, + 53314, + 53313, + 53211, + 52853, + 52851, + 52850, + 52849, + 52847, + 5279, + 52735, + 52710, + 52660, + 5242, + 5212, + 51413, + 51191, + 5040, + 50050, + 49401, + 49236, + 49195, + 49186, + 49171, + 49168, + 49164, + 4875, + 47544, + 46996, + 46200, + 44709, + 41523, + 41064, + 40811, + 3994, + 39659, + 39376, + 39136, + 38188, + 38185, + 37839, + 35513, + 33554, + 33453, + 32835, + 32822, + 32816, + 32803, + 32792, + 32791, + 30704, + 30005, + 29831, + 29672, + 28211, + 27357, + 26470, + 23796, + 23052, + 2196, + 21792, + 19900, + 18264, + 18018, + 17595, + 16851, + 16800, + 16705, + 15402, + 15001, + 12452, + 12380, + 12262, + 12215, + 12059, + 12021, + 10873, + 10058, + 10034, + 10022, + 10011, + 1233, + 8765, + 9443, + 1137, + 3963, + 5938, + 2910, + 9191, + 8686, + 3808, + 3981, + 2710, + 3852, + 3853, + 3849, + 3944, + 3929, + 3731, + 1594, + 1658, + 3792, + 1583, + 4164, + 3162, + 6481, + 5081, + 1163, + 3820, + 40000, + 8097, + 4430, + 4555, + 1287, + 2920, + 1121, + 1154, + 7744, + 1812, + 26000, + 1166, + 1164, + 1165, + 7913, + 2366, + 10160, + 8019, + 4658, + 4600, + 7878, + 3870, + 3304, + 3307, + 1259, + 7278, + 4143, + 3872, + 10008, + 1092, + 3697, + 1688, + 9988, + 1322, + 7725, + 2557, + 1095, + 3410, + 1971, + 1839, + 2288, + 3859, + 1141, + 3514, + 1123, + 4949, + 3931, + 2382, + 8675, + 6600, + 3957, + 5968, + 1213, + 1277, + 9600, + 7900, + 5353, + 1113, + 3700, + 3007, + 4080, + 3969, + 1132, + 1309, + 3848, + 7281, + 1244, + 1641, + 1972, + 3907, + 3972, + 2200, + 3968, + 1126, + 5223, + 1217, + 3941, + 8293, + 1300, + 1719, + 2099, + 6068, + 3013, + 3050, + 1105, + 1174, + 6550, + 5501, + 3684, + 2170, + 1328, + 1216, + 5151, + 2968, + 1805, + 7080, + 1914, + 22222, + 1974, + 5868, + 31727, + 8889, + 12006, + 3119, + 5063, + 3400, + 20002, + 3888, + 1301, + 4009, + 10023, + 3376, + 1185, + 1130, + 1147, + 1198, + 1192, + 1721, + 1149, + 3990, + 1236, + 3993, + 4096, + 6500, + 8294, + 3863, + 3846, + 8766, + 1187, + 5074, + 1102, + 3824, + 2800, + 1103, + 780, + 930, + 803, + 725, + 2012, + 10005, + 2501, + 6222, + 1220, + 623, + 639, + 502, + 701, + 1109, + 2232, + 2241, + 4559, + 710, + 5680, + 1347, + 913, + 540, + 931, + 874, + 856, + 250, + 5010, + 475, + 1270, + 953, + 2044, + 8118, + 123, + 27, + 1222, + 86, + 1158, + 9992, + 102, + 441, + 447, + 442, + 18000, + 419, + 210, + 6008, + 5803, + 980, + 251, + 1013, + 1008, + 3025, + 5520, + 3299, + 6103, + 556, + 87, + 57, + 829, + 9152, + 1212, + 55, + 713, + 709, + 2628, + 2433, + 223, + 10083, + 7003, + 1550, + 1516, + 7010, + 943, + 904, + 840, + 825, + 792, + 732, + 1020, + 1006, + 333, + 657, + 748, + 2011, + 77, + 1526, + 557, + 610, + 1241, + 4333, + 127, + 1547, + 157, + 220, + 523, + 1351, + 1350, + 2067, + 684, + 674, + 996, + 602, + 3456, + 971, + 969, + 905, + 846, + 839, + 823, + 822, + 795, + 790, + 778, + 757, + 659, + 225, + 1015, + 1014, + 1012, + 862, + 655, + 3399, + 1522, + 1353, + 6662, + 1357, + 731, + 730, + 729, + 660, + 600, + 782, + 257, + 2903, + 2025, + 3632, + 786, + 998, + 2201, + 6050, + 2600, + 6017, + 1337, + 690, + 606, + 928, + 924, + 922, + 921, + 918, + 878, + 864, + 859, + 806, + 805, + 728, + 252, + 1005, + 1004, + 388, + 44334, + 5011, + 1127, + 411, + 641, + 3999, + 59, + 1525, + 758, + 740, + 12346, + 669, + 802, + 98, + 38037, + 754, + 2112, + 715, + 6670, + 1413, + 1414, + 621, + 2104, + 1229, + 7628, + 5021, + 5020, + 3220, + 9667, + 1558, + 1924, + 6115, + 3940, + 6063, + 6062, + 6055, + 6052, + 6030, + 6021, + 6015, + 6010, + 3806, + 5986, + 5985, + 2340, + 8006, + 2371, + 4545, + 3810, + 2991, + 3414, + 6065, + 1290, + 1565, + 3511, + 1559, + 2723, + 9202, + 4036, + 4035, + 2312, + 3652, + 5070, + 3280, + 1317, + 4298, + 4297, + 4294, + 4262, + 4243, + 4234, + 4220, + 4206, + 9300, + 4433, + 22555, + 9979, + 5423, + 7121, + 1927, + 2148, + 1707, + 1168, + 7998, + 4414, + 5055, + 9975, + 9971, + 9919, + 9915, + 9912, + 9910, + 9908, + 9901, + 9844, + 9830, + 9826, + 9825, + 9823, + 9814, + 9812, + 9777, + 9745, + 9683, + 9680, + 9679, + 9674, + 9665, + 9661, + 9654, + 9648, + 9620, + 9619, + 9613, + 9583, + 9527, + 9513, + 9493, + 9478, + 9464, + 9454, + 9364, + 9351, + 9183, + 9170, + 9133, + 9130, + 9128, + 9125, + 9065, + 9061, + 9044, + 9037, + 9013, + 9004, + 8925, + 8898, + 8887, + 8882, + 8879, + 8878, + 8865, + 8843, + 8801, + 8798, + 8790, + 8772, + 8756, + 8752, + 8736, + 8680, + 8673, + 8658, + 8655, + 8644, + 8640, + 8621, + 8601, + 8562, + 8539, + 8531, + 8530, + 8515, + 8484, + 8479, + 8477, + 8455, + 8454, + 8453, + 8452, + 8451, + 8409, + 8339, + 8308, + 8295, + 8273, + 8268, + 8255, + 8248, + 8245, + 8144, + 8133, + 8110, + 8092, + 8064, + 8037, + 8029, + 8023, + 8018, + 8014, + 7975, + 7895, + 7854, + 7853, + 7852, + 7830, + 7813, + 7788, + 7780, + 7772, + 7771, + 7688, + 7685, + 7654, + 7637, + 7600, + 7555, + 7553, + 7456, + 7451, + 7231, + 7218, + 7184, + 7119, + 7104, + 7102, + 7092, + 7072, + 7068, + 7067, + 7043, + 7033, + 6973, + 6972, + 6956, + 6942, + 6922, + 6920, + 6897, + 6877, + 6780, + 6734, + 6725, + 6710, + 6709, + 6650, + 6647, + 6644, + 6606, + 65514, + 65488, + 6535, + 65311, + 65048, + 64890, + 64727, + 64726, + 64551, + 64507, + 64438, + 64320, + 6412, + 64127, + 64080, + 63803, + 63675, + 6349, + 63423, + 6323, + 63156, + 6310, + 63105, + 6309, + 62866, + 6274, + 6273, + 62674, + 6259, + 62570, + 62519, + 6250, + 62312, + 62188, + 62080, + 62042, + 62006, + 61942, + 61851, + 61827, + 61734, + 61722, + 61669, + 61617, + 61616, + 61516, + 61473, + 61402, + 6126, + 6120, + 61170, + 61169, + 61159, + 60989, + 6091, + 6090, + 60794, + 60789, + 60783, + 60782, + 60753, + 60743, + 60728, + 60713, + 6067, + 60628, + 60621, + 60612, + 60579, + 60544, + 60504, + 60492, + 60485, + 60403, + 60401, + 60377, + 60279, + 60243, + 60227, + 60177, + 60111, + 60086, + 60055, + 60003, + 60002, + 60000, + 59987, + 59841, + 59829, + 59810, + 59778, + 5975, + 5974, + 5971, + 59684, + 5966, + 5958, + 59565, + 5954, + 5953, + 59525, + 59510, + 59509, + 59504, + 5949, + 59499, + 5948, + 5945, + 5939, + 5936, + 5934, + 59340, + 5931, + 5927, + 5926, + 5924, + 5923, + 59239, + 5921, + 5920, + 59191, + 5917, + 59160, + 59149, + 59122, + 59107, + 5908, + 59087, + 58991, + 58970, + 58908, + 5888, + 5887, + 5881, + 5878, + 5875, + 5874, + 58721, + 5871, + 58699, + 58634, + 58622, + 58610, + 5860, + 5858, + 58570, + 58562, + 5854, + 5853, + 5852, + 5849, + 58498, + 5848, + 58468, + 5845, + 58456, + 58446, + 58430, + 5840, + 5839, + 5838, + 58374, + 5836, + 5834, + 5831, + 58310, + 58305, + 5827, + 5826, + 58252, + 5824, + 5821, + 5820, + 5817, + 58164, + 58109, + 58107, + 5808, + 58072, + 5806, + 5804, + 57999, + 57988, + 57928, + 57923, + 57896, + 57891, + 57733, + 57730, + 57702, + 57681, + 57678, + 57576, + 57479, + 57398, + 57387, + 5737, + 57352, + 57350, + 5734, + 57347, + 57335, + 5732, + 57325, + 57123, + 5711, + 57103, + 57020, + 56975, + 56973, + 56827, + 56822, + 56810, + 56725, + 56723, + 56681, + 5667, + 56668, + 5665, + 56591, + 56535, + 56507, + 56293, + 56259, + 5622, + 5621, + 5620, + 5612, + 5611, + 56055, + 56016, + 55948, + 55910, + 55907, + 55901, + 55781, + 55773, + 55758, + 55721, + 55684, + 55652, + 55635, + 55579, + 55569, + 55568, + 55556, + 5552, + 55527, + 55479, + 55426, + 55400, + 55382, + 55350, + 55312, + 55227, + 55187, + 55183, + 55000, + 54991, + 54987, + 54907, + 54873, + 54741, + 54722, + 54688, + 54658, + 54605, + 5458, + 5457, + 54551, + 54514, + 5444, + 5442, + 5441, + 54323, + 54321, + 54276, + 54263, + 54235, + 54127, + 54101, + 54075, + 53958, + 53910, + 53852, + 53827, + 53782, + 5377, + 53742, + 5370, + 53690, + 53656, + 53639, + 53633, + 53491, + 5347, + 53469, + 53460, + 53370, + 53361, + 53319, + 53240, + 53212, + 53189, + 53178, + 53085, + 52948, + 5291, + 52893, + 52675, + 52665, + 5261, + 5259, + 52573, + 52506, + 52477, + 52391, + 52262, + 52237, + 52230, + 52226, + 52225, + 5219, + 52173, + 52071, + 52046, + 52025, + 52003, + 52002, + 52001, + 52000, + 51965, + 51961, + 51909, + 51906, + 51809, + 51800, + 51772, + 51771, + 51658, + 51582, + 51515, + 51488, + 51485, + 51484, + 5147, + 51460, + 51423, + 51366, + 51351, + 51343, + 51300, + 5125, + 51240, + 51235, + 51234, + 51233, + 5122, + 5121, + 51139, + 51118, + 51067, + 51037, + 51020, + 51011, + 50997, + 5098, + 5096, + 5095, + 50945, + 5090, + 50903, + 5088, + 50887, + 50854, + 50849, + 50836, + 50835, + 50834, + 50833, + 50831, + 50815, + 50809, + 50787, + 50733, + 50692, + 50585, + 50577, + 50576, + 50545, + 50529, + 50513, + 50356, + 50277, + 50258, + 50246, + 50224, + 50205, + 50202, + 50198, + 50189, + 5017, + 5016, + 50101, + 50040, + 50019, + 50016, + 49927, + 49803, + 49765, + 49762, + 49751, + 49678, + 49603, + 49597, + 49522, + 49521, + 49520, + 49519, + 49500, + 49498, + 49452, + 49398, + 49372, + 49352, + 4931, + 49302, + 49275, + 49241, + 49235, + 49232, + 49228, + 49216, + 49213, + 49211, + 49204, + 49203, + 49202, + 49201, + 49197, + 49196, + 49191, + 49190, + 49189, + 49179, + 49173, + 49172, + 49170, + 49169, + 49166, + 49132, + 49048, + 4903, + 49002, + 48973, + 48967, + 48966, + 48925, + 48813, + 48783, + 48682, + 48648, + 48631, + 4860, + 4859, + 48434, + 48356, + 4819, + 48167, + 48153, + 48127, + 48083, + 48067, + 48009, + 47969, + 47966, + 4793, + 47860, + 47858, + 47850, + 4778, + 47777, + 4771, + 4770, + 47700, + 4767, + 47634, + 4760, + 47595, + 47581, + 47567, + 47448, + 47372, + 47348, + 47267, + 47197, + 4712, + 47119, + 47029, + 47012, + 46992, + 46813, + 46593, + 4649, + 4644, + 46436, + 46418, + 46372, + 46310, + 46182, + 46171, + 46115, + 4609, + 4606, + 46069, + 46034, + 45960, + 45864, + 45777, + 45697, + 45624, + 45602, + 45463, + 45438, + 45413, + 4530, + 45226, + 45220, + 4517, + 4516, + 45164, + 45136, + 45050, + 45038, + 44981, + 44965, + 4476, + 4471, + 44711, + 44704, + 4464, + 44628, + 44616, + 44541, + 44505, + 44479, + 44431, + 44410, + 44380, + 44200, + 44119, + 44101, + 44004, + 4388, + 43868, + 4384, + 43823, + 43734, + 43690, + 43654, + 43425, + 43242, + 43231, + 43212, + 43143, + 43139, + 43103, + 43027, + 43018, + 43002, + 42990, + 42906, + 42735, + 42685, + 42679, + 42675, + 42632, + 42590, + 42575, + 42560, + 42559, + 42452, + 42449, + 42322, + 42276, + 42251, + 42158, + 42127, + 42035, + 42001, + 41808, + 41773, + 41632, + 41551, + 41442, + 41398, + 41348, + 41345, + 41342, + 41318, + 41281, + 41250, + 41142, + 41123, + 40951, + 40834, + 40812, + 40754, + 40732, + 40712, + 40628, + 40614, + 40513, + 40489, + 40457, + 40400, + 40393, + 40306, + 40011, + 40005, + 40003, + 40002, + 40001, + 39917, + 39895, + 39883, + 39869, + 39795, + 39774, + 39763, + 39732, + 39630, + 39489, + 39482, + 39433, + 39380, + 39293, + 39265, + 39117, + 39067, + 38936, + 38805, + 38780, + 38764, + 38761, + 38570, + 38561, + 38546, + 38481, + 38446, + 38358, + 38331, + 38313, + 38270, + 38224, + 38205, + 38194, + 38029, + 37855, + 37789, + 37777, + 37674, + 37647, + 37614, + 37607, + 37522, + 37393, + 37218, + 37185, + 37174, + 37151, + 37121, + 36983, + 36962, + 36950, + 36914, + 36824, + 36823, + 36748, + 36710, + 36694, + 36677, + 36659, + 36552, + 36530, + 36508, + 36436, + 36368, + 36275, + 36256, + 36105, + 36104, + 36046, + 35986, + 35929, + 35906, + 35901, + 35900, + 35879, + 35731, + 35593, + 35553, + 35506, + 35401, + 35393, + 35392, + 35349, + 35272, + 35217, + 35131, + 35116, + 35050, + 35033, + 34875, + 34833, + 34783, + 34765, + 34728, + 34683, + 34510, + 34507, + 34401, + 34381, + 34341, + 34317, + 34189, + 34096, + 34036, + 34021, + 33895, + 33889, + 33882, + 33879, + 33841, + 33605, + 33604, + 33550, + 33523, + 33522, + 33444, + 33395, + 33367, + 33337, + 33335, + 33327, + 33277, + 33203, + 33200, + 33192, + 33175, + 33124, + 33087, + 33070, + 33017, + 33011, + 33000, + 32976, + 32961, + 32960, + 32944, + 32932, + 32911, + 32910, + 32908, + 32905, + 32904, + 32898, + 32897, + 32888, + 32871, + 32869, + 32868, + 32858, + 32842, + 32837, + 32820, + 32815, + 32814, + 32807, + 32799, + 32798, + 32797, + 32790, + 32789, + 32788, + 32765, + 32764, + 32261, + 32260, + 32219, + 32200, + 32102, + 32088, + 32031, + 32022, + 32006, + 31728, + 31657, + 31522, + 31438, + 31386, + 31339, + 31072, + 31058, + 31033, + 30896, + 30705, + 30659, + 30644, + 30599, + 30519, + 30299, + 30195, + 30087, + 29810, + 29507, + 29243, + 29152, + 29045, + 28967, + 28924, + 28851, + 28850, + 28717, + 28567, + 28374, + 28142, + 28114, + 27770, + 27537, + 27521, + 27372, + 27351, + 27350, + 27316, + 27204, + 27087, + 27075, + 27074, + 27055, + 27016, + 27015, + 26972, + 26669, + 26417, + 26340, + 26007, + 26001, + 25847, + 25717, + 25703, + 25486, + 25473, + 25445, + 25327, + 25288, + 25262, + 25260, + 25174, + 24999, + 24616, + 24552, + 24416, + 24392, + 24218, + 23953, + 23887, + 23723, + 23451, + 23430, + 23382, + 23342, + 23296, + 23270, + 23228, + 23219, + 23040, + 23017, + 22969, + 22959, + 22882, + 22769, + 22727, + 22719, + 22711, + 22563, + 22341, + 22290, + 22223, + 22200, + 22177, + 22100, + 22063, + 22022, + 21915, + 21891, + 21728, + 21634, + 21631, + 21473, + 21078, + 21011, + 20990, + 20940, + 20934, + 20883, + 20734, + 20473, + 20280, + 20228, + 20227, + 20226, + 20225, + 20224, + 20223, + 20180, + 20179, + 20147, + 20127, + 20125, + 20118, + 20111, + 20106, + 20102, + 20089, + 20085, + 20080, + 20076, + 20052, + 20039, + 20032, + 20021, + 20017, + 20011, + 19996, + 19995, + 19852, + 19715, + 19634, + 19612, + 19501, + 19464, + 19403, + 19353, + 19201, + 19200, + 19130, + 19010, + 18962, + 18910, + 18887, + 18874, + 18669, + 18569, + 18517, + 18505, + 18439, + 18380, + 18337, + 18336, + 18231, + 18148, + 18080, + 18015, + 18012, + 17997, + 17985, + 17969, + 17867, + 17860, + 17802, + 17801, + 17715, + 17702, + 17701, + 17700, + 17413, + 17409, + 17255, + 17251, + 17129, + 17089, + 17070, + 17017, + 17016, + 16901, + 16845, + 16797, + 16725, + 16724, + 16723, + 16464, + 16372, + 16349, + 16297, + 16286, + 16283, + 16273, + 16270, + 16048, + 15915, + 15758, + 15730, + 15722, + 15677, + 15670, + 15646, + 15645, + 15631, + 15550, + 15448, + 15344, + 15317, + 15275, + 15191, + 15190, + 15145, + 15050, + 15005, + 14916, + 14891, + 14827, + 14733, + 14693, + 14545, + 14534, + 14444, + 14443, + 14418, + 14254, + 14237, + 14218, + 14147, + 13899, + 13846, + 13784, + 13766, + 13730, + 13723, + 13695, + 13580, + 13502, + 13359, + 13340, + 13318, + 13306, + 13265, + 13264, + 13261, + 13250, + 13229, + 13194, + 13193, + 13192, + 13188, + 13167, + 13149, + 13142, + 13140, + 13132, + 13130, + 13093, + 13017, + 12962, + 12955, + 12892, + 12891, + 12766, + 12702, + 12699, + 12414, + 12340, + 12296, + 12275, + 12271, + 12251, + 12243, + 12240, + 12225, + 12192, + 12171, + 12156, + 12146, + 12137, + 12132, + 12097, + 12096, + 12090, + 12080, + 12077, + 12034, + 12031, + 12019, + 11940, + 11863, + 11862, + 11813, + 11735, + 11697, + 11552, + 11401, + 11296, + 11288, + 11250, + 11224, + 11200, + 11180, + 11100, + 11089, + 11033, + 11032, + 11031, + 11026, + 11019, + 11007, + 11003, + 10900, + 10878, + 10852, + 10842, + 10754, + 10699, + 10602, + 10601, + 10567, + 10565, + 10556, + 10555, + 10554, + 10553, + 10552, + 10551, + 10550, + 10535, + 10529, + 10509, + 10494, + 10443, + 10414, + 10387, + 10357, + 10347, + 10338, + 10280, + 10255, + 10246, + 10245, + 10238, + 10093, + 10064, + 10045, + 10042, + 10035, + 10019, + 10018, + 1823, + 1327, + 3479, + 3653, + 2330, + 8201, + 4876, + 3240, + 2580, + 2644, + 3600, + 4020, + 2700, + 2436, + 3906, + 4375, + 1584, + 4024, + 5581, + 5580, + 6251, + 3943, + 3200, + 1223, + 2142, + 1976, + 1975, + 5202, + 5201, + 3817, + 9020, + 4016, + 5111, + 3281, + 9911, + 3923, + 2439, + 3930, + 7345, + 7325, + 7320, + 7300, + 1250, + 1221, + 2973, + 3909, + 16161, + 14001, + 1607, + 1736, + 1330, + 3080, + 4158, + 2270, + 3526, + 5066, + 1204, + 2711, + 2187, + 1750, + 3430, + 2728, + 3796, + 5814, + 2888, + 3922, + 3803, + 3419, + 4881, + 5250, + 3979, + 3670, + 4174, + 3102, + 1605, + 3483, + 2631, + 7500, + 1645, + 4190, + 5553, + 5554, + 1303, + 3636, + 1251, + 1243, + 3712, + 8052, + 8883, + 9400, + 1291, + 1208, + 3319, + 1297, + 3935, + 3897, + 5152, + 3637, + 1200, + 1811, + 1215, + 3962, + 3368, + 3860, + 3964, + 4442, + 9875, + 1128, + 4010, + 3291, + 1118, + 8401, + 3765, + 7400, + 2101, + 1699, + 2889, + 1195, + 1694, + 1730, + 5053, + 1912, + 1745, + 2250, + 1712, + 6379, + 43000, + 1306, + 2997, + 3532, + 2449, + 3813, + 2083, + 3799, + 3790, + 3599, + 3850, + 4355, + 4358, + 4357, + 4356, + 1262, + 5433, + 4007, + 4713, + 3089, + 1101, + 4374, + 3658, + 1268, + 3961, + 3911, + 1735, + 1858, + 3396, + 1753, + 1264, + 1711, + 3967, + 2505, + 3118, + 4601, + 1321, + 8471, + 1598, + 1305, + 1314, + 3121, + 2558, + 6161, + 4025, + 9022, + 9021, + 1632, + 9995, + 30001, + 1307, + 1981, + 2532, + 3443, + 7501, + 8472, + 9990, + 1808, + 1159, + 2435, + 1194, + 1622, + 5014, + 4161, + 1135, + 3904, + 5723, + 4090, + 9211, + 9210, + 4141, + 7789, + 1308, + 6619, + 9628, + 3519, + 12121, + 4687, + 4454, + 5012, + 3680, + 3167, + 8474, + 8980, + 1239, + 3901, + 3902, + 3842, + 16900, + 4700, + 4118, + 1799, + 12865, + 3812, + 2606, + 1196, + 10115, + 3928, + 1615, + 2902, + 10006, + 2882, + 3890, + 1683, + 2706, + 3063, + 3062, + 2095, + 2096, + 5133, + 3363, + 4407, + 1340, + 4447, + 3795, + 8005, + 10007, + 3515, + 1806, + 6888, + 4602, + 1911, + 4558, + 2438, + 3847, + 3882, + 5722, + 1883, + 1261, + 5969, + 9343, + 5252, + 28017, + 27019, + 27018, + 27017, + 2583, + 2031, + 2197, + 2271, + 3837, + 4120, + 3798, + 25565, + 2269, + 20001, + 2292, + 2622, + 11001, + 1207, + 2850, + 1249, + 21201, + 8003, + 3311, + 1180, + 2908, + 3936, + 3023, + 4912, + 3503, + 2463, + 1752, + 2280, + 4056, + 2623, + 4877, + 1184, + 9333, + 19333, + 3913, + 3672, + 4342, + 8282, + 1861, + 9592, + 7099, + 2372, + 1701, + 1318, + 6085, + 2081, + 1339, + 4058, + 2115, + 8900, + 2958, + 2957, + 4328, + 7071, + 1276, + 3899, + 2531, + 2691, + 5052, + 3788, + 1638, + 2551, + 1336, + 11000, + 48619, + 4029, + 3497, + 1209, + 3603, + 1331, + 1240, + 2082, + 3856, + 3602, + 1176, + 1143, + 4800, + 4100, + 3486, + 2987, + 2326, + 6077, + 25001, + 25000, + 2062, + 1792, + 1156, + 1157, + 2313, + 3952, + 3919, + 5023, + 3439, + 6324, + 1188, + 1125, + 1299, + 3908, + 2984, + 1715, + 8232, + 1722, + 2988, + 10500, + 1136, + 4999, + 1162, + 1703, + 3956, + 22128, + 1677, + 1211, + 1191, + 9005, + 3057, + 2086, + 12009, + 3530, + 4325, + 1708, + 3520, + 5235, + 1144, + 5015, + 5013, + 4745, + 1228, + 3210, + 2425, + 1901, + 5912, + 3787, + 32767, + 1807, + 3825, + 3622, + 5502, + 4039, + 1620, + 5557, + 10101, + 3002, + 1316, + 3728, + 5114, + 2069, + 1569, + 9616, + 3621, + 4369, + 1210, + 12001, + 12002, + 5233, + 3586, + 1691, + 1282, + 1315, + 2087, + 7101, + 2124, + 3983, + 3982, + 2224, + 5234, + 1635, + 3263, + 4121, + 2291, + 1791, + 2150, + 3310, + 1958, + 2804, + 3937, + 3831, + 2253, + 5721, + 3663, + 4401, + 3949, + 9909, + 2376, + 2375, + 4022, + 1973, + 3876, + 3362, + 3334, + 47624, + 1825, + 3868, + 4570, + 1324, + 1279, + 9131, + 4302, + 3793, + 1173, + 22125, + 17500, + 12005, + 6113, + 2584, + 2300, + 8954, + 9287, + 5137, + 3190, + 3742, + 2806, + 41795, + 41794, + 8116, + 1566, + 4300, + 8445, + 3365, + 4665, + 3577, + 1713, + 2261, + 2262, + 1592, + 1190, + 22350, + 3374, + 2567, + 9694, + 4135, + 2598, + 1167, + 8470, + 3749, + 1302, + 3830, + 1709, + 3485, + 8880, + 2734, + 3505, + 3388, + 3669, + 2418, + 1871, + 1918, + 8025, + 2472, + 1153, + 3991, + 3989, + 3992, + 3681, + 3014, + 4101, + 4415, + 6503, + 9700, + 3683, + 1150, + 18333, + 4376, + 24554, + 2302, + 3146, + 8999, + 3415, + 3946, + 2203, + 1179, + 4192, + 4418, + 5005, + 2134, + 4065, + 2080, + 3103, + 9084, + 2304, + 2812, + 4119, + 1560, + 4534, + 1835, + 1116, + 3513, + 2265, + 5473, + 5475, + 3879, + 4087, + 2898, + 4112, + 1134, + 3948, + 9950, + 3506, + 9161, + 9160, + 47806, + 2712, + 1800, + 2325, + 2930, + 3839, + 1319, + 5672, + 3811, + 4689, + 2456, + 2901, + 3975, + 4113, + 2847, + 2070, + 3425, + 3997, + 3915, + 6579, + 6628, + 8202, + 8060, + 2550, + 8403, + 6350, + 3823, + 3980, + 2335, + 1182, + 1954, + 3996, + 10020, + 3656, + 4599, + 2391, + 400, + 22273, + 769, + 983, + 979, + 973, + 967, + 965, + 961, + 942, + 935, + 926, + 925, + 914, + 863, + 858, + 844, + 834, + 817, + 815, + 811, + 809, + 789, + 779, + 743, + 1019, + 1989, + 11, + 1507, + 1492, + 66, + 32787, + 32786, + 509, + 706, + 635, + 762, + 5632, + 47, + 830, + 4008, + 5977, + 1444, + 3985, + 6105, + 578, + 591, + 678, + 27001, + 642, + 446, + 1495, + 5308, + 1441, + 31416, + 54320, + 7005, + 52, + 1652, + 682, + 577, + 985, + 984, + 974, + 958, + 952, + 949, + 946, + 923, + 916, + 899, + 897, + 894, + 889, + 835, + 824, + 814, + 807, + 804, + 798, + 733, + 727, + 237, + 12, + 10, + 219, + 525, + 1420, + 665, + 501, + 6110, + 122, + 3045, + 440, + 664, + 620, + 615, + 3398, + 771, + 653, + 75, + 158, + 716, + 861, + 1366, + 1663, + 833, + 1364, + 603, + 91, + 750, + 828, + 9991, + 860, + 695, + 101, + 634, + 538, + 1359, + 989, + 27010, + 810, + 510, + 4199, + 3064, + 847, + 68, + 76, + 1358, + 3049, + 1139, + 1680, + 649, + 707, + 449, + 104, + 629, + 2024, + 1517, + 2430, + 1370, + 988, + 962, + 948, + 945, + 941, + 938, + 936, + 929, + 927, + 919, + 906, + 883, + 881, + 875, + 872, + 870, + 866, + 855, + 851, + 850, + 841, + 836, + 826, + 820, + 819, + 816, + 813, + 791, + 745, + 736, + 735, + 724, + 719, + 343, + 334, + 300, + 28, + 249, + 230, + 16, + 1018, + 1016, + 3900, + 450, + 1988, + 2014, + 492, + 2018, + 658, + 1474, + 268, + 27374, + 1991, + 605, + 8076, + 1178, + 3086, + 1651, + 5232, + 1349, + 696, + 5145, + 50, + 630, + 7597, + 663, + 1445, + 1402, + 1465, + 2307, + 1552, + 5400, + 627, + 1384, + 7273, + 950, + 1388, + 92, + 609, + 741, + 831, + 353, + 5978, + 45, + 4660, + 638, + 112, + 456, + 760, + 761, + 2120, + 9104, + 702, + 6665, + 1404, + 651, + 1389, + 1551, + 661, + 5300, + 491, + 6347, + 221, + 4557, + 1214, + 640, + 647, + 448, + 1356, + 6401, + 507, + 1484, + 673, + 1523, + 1400, + 1399, + 632, + 1385, + 5191, + 1346, + 6143, + 676, + 214, + 3141, + 670, + 970, + 968, + 964, + 963, + 960, + 959, + 951, + 947, + 944, + 939, + 933, + 909, + 895, + 891, + 879, + 869, + 868, + 867, + 837, + 821, + 812, + 797, + 796, + 794, + 788, + 756, + 734, + 721, + 718, + 708, + 703, + 60, + 40, + 253, + 231, + 14, + 1017, + 1003, + 1996, + 27665, + 1527, + 69, + 1475, + 97, + 656, + 633, + 8892, + 975, + 5530, + 2026, + 3397, + 4500, + 560, + 180, + 1354, + 1497, + 628, + 4480, + 1403, + 35, + 8123, + 11371, + 553, + 1995, + 511, + 18182, + 18184, + 723, + 1466, + 611, + 1486, + 689, + 1650, + 1668, + 1664, + 15, + 832, + 137, + 13720, + 991, + 561, + 3292, + 685, + 997, + 505, + 1496, + 637, + 1762, + 51, + 751, + 9107, + 9106, + 9105, + 994, + 194, + 213, + 1539, + 1412, + 1515, + 886, + 1405, + 1435, + 692, + 694, + 1369, + 103, + 1401, + 402, + 1997, + 1372, + 681, + 680, + 704, + 644, + 2064, + 854, + 675, + 1379, + 47557, + 2015, + 1467, + 624, + 799, + 454, + 622, + 1476, + 1373, + 3264, + 6701, + 1387, + 770, + 14141, + 1348, + 182, + 201, + 262, + 1381, + 654, + 6588, + 1535, + 7009, + 58, + 2023, + 177, + 776, + 26208, + 4144, + 2627, + 1498, + 1519, + 672, + 677, + 1545, + 1398, + 2431, + 3457, + 697, + 401, + 982, + 978, + 972, + 966, + 957, + 956, + 934, + 920, + 915, + 908, + 907, + 892, + 890, + 885, + 884, + 882, + 877, + 876, + 865, + 857, + 852, + 849, + 842, + 838, + 827, + 818, + 793, + 785, + 784, + 755, + 746, + 738, + 737, + 717, + 34, + 336, + 325, + 303, + 276, + 273, + 236, + 235, + 233, + 181, + 604, + 9051, + 1362, + 493, + 712, + 1437, + 601, + 412, + 1529, + 871, + 95, + 1994, + 1992, + 1990, + 133, + 6145, + 486, + 362, + 193, + 200, + 118, + 6111, + 608, + 1549, + 2027, + 115, + 1537, + 1368, + 1436, + 1426, + 774, + 688, + 1531, + 38, + 129, + 645, + 136, + 3531, + 1827, + 65301, + 16444, + 1446, + 18183, + 18181, + 260, + 536, + 764, + 698, + 94, + 4132, + 261, + 607, + 308, + 1667, + 1662, + 1661, + 74, + 73, + 71, + 1493, + 138, + 13713, + 404, + 5997, + 6544, + 1510, + 568, + 29, + 31, + 397, + 44, + 6147, + 1528, + 350, + 224, + 6146, + 1986, + 1763, + 2053, + 399, + 1355, + 1454, + 1390, + 1393, + 1394, + 887, + 1376, + 418, + 1424, + 1410, + 1409, + 7634, + 686, + 5301, + 5302, + 176, + 848, + 1513, + 747, + 1499, + 1439, + 1438, + 315, + 853, + 196, + 466, + 410, + 403, + 93, + 1456, + 1479, + 355, + 462, + 763, + 1472, + 6400, + 453, + 759, + 437, + 619, + 2432, + 1386, + 120, + 6700, + 1442, + 415, + 1432, + 1548, + 1422, + 114, + 1397, + 206, + 202, + 204, + 6142, + 1544, + 422, + 8770, + 626, + 7008, + 7006, + 1483, + 1365, + 699, + 1511, + 1538, + 346, + 173, + 54, + 56, + 1462, + 2019, + 1518, + 516, + 1457, + 117, + 986, + 977, + 976, + 955, + 954, + 937, + 932, + 8, + 896, + 893, + 845, + 768, + 766, + 739, + 337, + 329, + 326, + 305, + 295, + 294, + 293, + 289, + 288, + 277, + 238, + 234, + 229, + 228, + 226, + 571, + 522, + 1470, + 1987, + 1430, + 1419, + 1418, + 526, + 267, + 209, + 65, + 391, + 392, + 2028, + 773, + 614, + 150, + 1408, + 572, + 162, + 1993, + 108, + 413, + 596, + 420, + 460, + 1543, + 358, + 1502, + 451, + 452, + 361, + 470, + 598, + 360, + 457, + 582, + 643, + 487, + 322, + 168, + 753, + 369, + 1509, + 2108, + 4672, + 185, + 43188, + 1541, + 1540, + 752, + 189, + 7464, + 271, + 191, + 5714, + 5717, + 5713, + 1459, + 408, + 6548, + 485, + 496, + 767, + 583, + 662, + 1449, + 1480, + 192, + 18187, + 1473, + 423, + 184, + 428, + 1448, + 4133, + 518, + 1458, + 1416, + 1429, + 533, + 1672, + 1671, + 1670, + 72, + 742, + 13721, + 13718, + 13715, + 13714, + 13701, + 1363, + 569, + 1464, + 1374, + 435, + 434, + 1427, + 1482, + 1532, + 1360, + 570, + 6141, + 4987, + 265, + 351, + 3984, + 174, + 480, + 472, + 2766, + 1361, + 373, + 17300, + 910, + 17007, + 380, + 414, + 1451, + 535, + 1395, + 1391, + 7326, + 432, + 479, + 473, + 781, + 383, + 2564, + 613, + 612, + 151, + 652, + 5303, + 1383, + 128, + 1542, + 19150, + 270, + 1453, + 190, + 258, + 1505, + 27009, + 744, + 27007, + 27005, + 27003, + 27002, + 1371, + 1423, + 775, + 141, + 1440, + 1396, + 352, + 438, + 1488, + 96, + 1508, + 67, + 552, + 618, + 316, + 1367, + 1407, + 217, + 439, + 528, + 148, + 530, + 284, + 5490, + 2, + 542, + 370, + 132, + 130, + 2016, + 15151, + 3421, + 142, + 248, + 364, + 48, + 216, + 205, + 5193, + 1491, + 124, + 116, + 1411, + 149, + 599, + 1469, + 564, + 2133, + 44123, + 41230, + 4123, + 7173, + 3925, + 7088, + 1425, + 17756, + 17755, + 4072, + 3774, + 3841, + 2102, + 17754, + 2989, + 317, + 10051, + 10050, + 31029, + 9978, + 9925, + 3832, + 36462, + 508, + 3424, + 3423, + 5793, + 6116, + 4095, + 3721, + 3646, + 3510, + 1619, + 6936, + 3722, + 3651, + 5634, + 14500, + 3865, + 15345, + 3763, + 11876, + 16619, + 165, + 2157, + 38422, + 1716, + 2279, + 7430, + 3877, + 5270, + 9092, + 3953, + 3412, + 4788, + 1933, + 5344, + 2341, + 2327, + 3088, + 6558, + 2130, + 7629, + 3074, + 2165, + 3639, + 4389, + 1934, + 5757, + 11877, + 6061, + 6058, + 6057, + 6056, + 6054, + 6053, + 6049, + 6048, + 6047, + 6046, + 6045, + 6044, + 6043, + 6042, + 6041, + 6040, + 6039, + 6038, + 6037, + 6036, + 6035, + 6034, + 6033, + 6032, + 6031, + 6029, + 6028, + 6027, + 6026, + 6024, + 6023, + 6022, + 6020, + 6019, + 6018, + 6016, + 6014, + 6013, + 6012, + 6011, + 3741, + 4368, + 1760, + 2784, + 5413, + 3717, + 3716, + 3590, + 2396, + 2923, + 2805, + 3111, + 6602, + 4537, + 4431, + 5007, + 5006, + 3378, + 4879, + 3702, + 5358, + 6114, + 2596, + 2595, + 4417, + 3466, + 22321, + 22305, + 22289, + 3219, + 4883, + 1338, + 36411, + 2504, + 2720, + 4871, + 3861, + 1512, + 47001, + 7395, + 3926, + 5166, + 3674, + 1785, + 1727, + 1326, + 2980, + 2231, + 2518, + 1890, + 11208, + 4390, + 22347, + 2781, + 565, + 3233, + 3359, + 4057, + 4847, + 4177, + 4984, + 3342, + 3427, + 21845, + 2907, + 1963, + 2054, + 2851, + 3748, + 1739, + 11095, + 48050, + 4845, + 4185, + 8912, + 5990, + 1269, + 3563, + 5743, + 5744, + 12321, + 12322, + 9203, + 9201, + 9206, + 9204, + 9205, + 2949, + 2948, + 6626, + 2455, + 4049, + 3633, + 5787, + 2547, + 2548, + 2546, + 4790, + 4789, + 3207, + 8199, + 4145, + 13882, + 3482, + 2216, + 3509, + 5780, + 3122, + 16666, + 7779, + 2695, + 3375, + 312, + 2996, + 7566, + 2539, + 2893, + 9598, + 1880, + 2387, + 3317, + 1885, + 14149, + 2410, + 4032, + 2821, + 2255, + 2074, + 1956, + 4991, + 3883, + 4299, + 4296, + 4295, + 4293, + 4292, + 4291, + 4290, + 4289, + 4288, + 4287, + 4286, + 4285, + 4284, + 4283, + 4282, + 4281, + 4280, + 4278, + 4277, + 4276, + 4275, + 4274, + 4273, + 4272, + 4271, + 4270, + 4269, + 4268, + 4267, + 4266, + 4265, + 4264, + 4263, + 4261, + 4260, + 4259, + 4258, + 4257, + 4256, + 4255, + 4254, + 4253, + 4251, + 4250, + 4249, + 4248, + 4247, + 4246, + 4245, + 4244, + 4241, + 4240, + 4239, + 4238, + 4237, + 4236, + 4235, + 4233, + 4232, + 4231, + 4230, + 4229, + 4228, + 4227, + 4226, + 4225, + 4223, + 4222, + 4221, + 4219, + 4218, + 4217, + 4216, + 4215, + 4214, + 4213, + 4212, + 4211, + 4210, + 4209, + 4208, + 4207, + 4205, + 4204, + 4203, + 4202, + 4201, + 2530, + 1589, + 2649, + 1224, + 5046, + 1345, + 5164, + 8473, + 28200, + 3845, + 3625, + 3541, + 21590, + 25793, + 1796, + 8699, + 2538, + 7802, + 3321, + 8182, + 175, + 1868, + 2474, + 24249, + 1631, + 6672, + 6673, + 3601, + 4307, + 9284, + 1852, + 2386, + 3752, + 12013, + 12012, + 4344, + 3245, + 1853, + 3231, + 3058, + 63, + 3802, + 5646, + 6678, + 78, + 17184, + 2610, + 3738, + 2770, + 2994, + 2993, + 2802, + 3270, + 2771, + 4621, + 575, + 18668, + 1775, + 14150, + 3073, + 2554, + 2426, + 1771, + 4188, + 4839, + 4838, + 4837, + 3654, + 3676, + 8034, + 14154, + 671, + 5675, + 15118, + 2529, + 430, + 431, + 519, + 1506, + 3272, + 3534, + 2745, + 3786, + 2648, + 3664, + 3356, + 2537, + 3313, + 3314, + 1957, + 2820, + 4184, + 3217, + 126, + 37654, + 1979, + 1978, + 9629, + 2927, + 4127, + 2357, + 4867, + 2696, + 1889, + 2499, + 2437, + 2655, + 1189, + 5281, + 2138, + 2110, + 2248, + 3098, + 1797, + 1910, + 1737, + 483, + 372, + 390, + 6306, + 3720, + 8778, + 1382, + 1867, + 2542, + 1624, + 1833, + 3584, + 8070, + 13894, + 2879, + 4034, + 7887, + 8953, + 19194, + 2767, + 2768, + 145, + 3012, + 8937, + 3428, + 27999, + 21800, + 3791, + 2670, + 3492, + 34249, + 39681, + 1846, + 5197, + 9762, + 5747, + 5748, + 3474, + 2943, + 5462, + 5463, + 2862, + 2484, + 3468, + 2977, + 2978, + 2675, + 2483, + 3579, + 1568, + 2077, + 2489, + 4422, + 1237, + 2741, + 2742, + 12753, + 2573, + 8804, + 4725, + 2156, + 3346, + 9555, + 10200, + 1588, + 4070, + 6069, + 21212, + 4711, + 4323, + 4322, + 7727, + 3608, + 3959, + 17224, + 17225, + 2405, + 4678, + 3858, + 3857, + 5282, + 1869, + 9277, + 2642, + 3462, + 20670, + 33434, + 1906, + 594, + 2078, + 2158, + 5153, + 3885, + 2885, + 24465, + 3040, + 20167, + 8066, + 2669, + 474, + 476, + 2739, + 3308, + 590, + 3309, + 8320, + 8321, + 7901, + 7903, + 7902, + 3686, + 377, + 20046, + 5583, + 2798, + 4176, + 3083, + 6252, + 3082, + 3081, + 2361, + 2915, + 1965, + 6118, + 3160, + 5104, + 3754, + 3243, + 10261, + 4124, + 5450, + 7548, + 1832, + 4139, + 4423, + 2296, + 6201, + 4146, + 3713, + 1758, + 5048, + 31457, + 7631, + 3544, + 41121, + 359, + 11600, + 7491, + 3696, + 3549, + 1728, + 1380, + 2060, + 5428, + 1946, + 559, + 9668, + 9222, + 1814, + 3805, + 1977, + 2576, + 2729, + 24680, + 1610, + 25900, + 2403, + 2402, + 2470, + 3552, + 6442, + 5203, + 3144, + 2306, + 1922, + 2726, + 6149, + 7015, + 7012, + 7011, + 1838, + 517, + 22763, + 2493, + 4019, + 4018, + 4017, + 4015, + 4014, + 3573, + 5073, + 2392, + 11173, + 7932, + 7933, + 3175, + 32249, + 1274, + 1627, + 2609, + 5406, + 3251, + 4094, + 3241, + 6514, + 6418, + 3734, + 45045, + 2679, + 2647, + 4106, + 6102, + 4548, + 7707, + 5008, + 8243, + 8280, + 2880, + 3547, + 5629, + 3723, + 4950, + 3895, + 3894, + 19540, + 3273, + 4538, + 5043, + 7359, + 7358, + 7357, + 7356, + 7355, + 7354, + 7353, + 7352, + 7351, + 7350, + 7349, + 7348, + 7347, + 7346, + 7344, + 7343, + 7342, + 7341, + 7340, + 7339, + 7338, + 7337, + 7336, + 7335, + 7334, + 7333, + 7332, + 7331, + 7330, + 7329, + 7328, + 7327, + 7324, + 7323, + 7322, + 7321, + 7319, + 7318, + 7317, + 7316, + 7315, + 7314, + 7313, + 7312, + 7311, + 7310, + 7309, + 7308, + 7307, + 7306, + 7305, + 7304, + 7303, + 7302, + 7301, + 9282, + 9281, + 3491, + 1866, + 17777, + 6965, + 6966, + 6964, + 6963, + 1751, +] +top_udp_ports = [ + 631, + 161, + 137, + 123, + 138, + 1434, + 445, + 135, + 67, + 53, + 139, + 500, + 68, + 520, + 1900, + 4500, + 514, + 49152, + 162, + 69, + 5353, + 111, + 49154, + 1701, + 998, + 996, + 997, + 999, + 3283, + 49153, + 1812, + 136, + 2222, + 2049, + 32768, + 5060, + 1025, + 1433, + 3456, + 80, + 20031, + 1026, + 7, + 1646, + 1645, + 593, + 518, + 2048, + 626, + 1027, + 177, + 1719, + 427, + 497, + 4444, + 1023, + 65024, + 19, + 9, + 49193, + 1029, + 49, + 88, + 1028, + 17185, + 1718, + 49186, + 2000, + 31337, + 49201, + 49192, + 515, + 2223, + 443, + 49181, + 1813, + 120, + 158, + 49200, + 3703, + 32815, + 17, + 5000, + 32771, + 33281, + 1030, + 1022, + 623, + 32769, + 5632, + 10000, + 49194, + 49191, + 49182, + 49156, + 9200, + 30718, + 49211, + 49190, + 49188, + 49185, + 5001, + 5355, + 32770, + 37444, + 34861, + 34555, + 1032, + 3130, + 4045, + 1031, + 49196, + 49158, + 37, + 2967, + 4000, + 989, + 3659, + 4672, + 34862, + 23, + 49195, + 49189, + 49187, + 49162, + 2148, + 41524, + 10080, + 32772, + 407, + 42, + 33354, + 1034, + 49199, + 49180, + 1001, + 3389, + 6346, + 21, + 13, + 517, + 1068, + 6001, + 1782, + 990, + 1045, + 1041, + 19283, + 49210, + 49209, + 49208, + 49205, + 49202, + 49184, + 49179, + 49171, + 9876, + 39213, + 800, + 389, + 464, + 1039, + 1036, + 1038, + 1419, + 192, + 199, + 44968, + 1008, + 49166, + 49159, + 1024, + 1033, + 22986, + 19682, + 22, + 2002, + 11487, + 664, + 1021, + 58002, + 49172, + 49168, + 49165, + 49163, + 1043, + 6000, + 1885, + 7938, + 1019, + 1049, + 5093, + 5351, + 1044, + 683, + 3052, + 5500, + 27892, + 16680, + 32773, + 41058, + 35777, + 113, + 52225, + 49174, + 49169, + 49160, + 6004, + 1056, + 8193, + 1047, + 685, + 1886, + 686, + 38293, + 782, + 786, + 38037, + 32774, + 780, + 1080, + 32775, + 682, + 983, + 6971, + 6970, + 1014, + 1066, + 2051, + 1054, + 9950, + 5050, + 781, + 31891, + 31681, + 31073, + 30365, + 30303, + 29823, + 28547, + 27195, + 25375, + 22996, + 22846, + 21383, + 20389, + 20126, + 20019, + 19616, + 19503, + 19120, + 18449, + 16947, + 16832, + 42172, + 33355, + 32779, + 53571, + 52503, + 49215, + 49213, + 49212, + 49204, + 49198, + 49175, + 49167, + 5002, + 27015, + 5003, + 7000, + 513, + 1485, + 1065, + 1048, + 1090, + 684, + 1761, + 9103, + 1037, + 32777, + 539, + 767, + 434, + 54321, + 3401, + 112, + 1000, + 6347, + 512, + 363, + 45441, + 41370, + 41081, + 40915, + 40732, + 40708, + 40441, + 40116, + 39888, + 36206, + 35438, + 34892, + 34125, + 33744, + 32931, + 32818, + 47624, + 42508, + 776, + 38, + 32776, + 64513, + 63555, + 62287, + 61370, + 58640, + 58631, + 56141, + 54281, + 51717, + 50612, + 49503, + 49207, + 49197, + 49176, + 49173, + 49170, + 49161, + 49157, + 1012, + 217, + 775, + 3702, + 8001, + 959, + 9199, + 8181, + 9020, + 643, + 688, + 829, + 1040, + 1035, + 1064, + 902, + 1901, + 1069, + 687, + 2160, + 1042, + 32528, + 32385, + 32345, + 31731, + 31625, + 31365, + 31195, + 31189, + 31109, + 31059, + 30975, + 30704, + 30697, + 30656, + 30544, + 30263, + 29977, + 29810, + 29256, + 29243, + 29078, + 28973, + 28840, + 28641, + 28543, + 28493, + 28465, + 28369, + 28122, + 27899, + 27707, + 27482, + 27473, + 26966, + 26872, + 26720, + 26415, + 26407, + 25931, + 25709, + 25546, + 25541, + 25462, + 25337, + 25280, + 25240, + 25157, + 24910, + 24854, + 24644, + 24606, + 24594, + 24511, + 24279, + 24007, + 23980, + 23965, + 23781, + 23679, + 23608, + 23557, + 23531, + 23354, + 23176, + 23040, + 22914, + 22799, + 22739, + 22695, + 22692, + 22341, + 22055, + 21902, + 21803, + 21621, + 21354, + 21298, + 21261, + 21212, + 21131, + 20359, + 20004, + 19933, + 19687, + 19600, + 19489, + 19332, + 19322, + 19294, + 19197, + 19165, + 19130, + 19039, + 19017, + 18980, + 18835, + 18582, + 18360, + 18331, + 18234, + 18004, + 17989, + 17939, + 17888, + 17616, + 17615, + 17573, + 17459, + 17455, + 17091, + 16918, + 16430, + 16402, + 25003, + 1346, + 20, + 2, + 32780, + 1214, + 772, + 1993, + 402, + 773, + 31335, + 774, + 6050, + 6002, + 1046, + 3664, + 9877, + 965, + 838, + 814, + 8010, + 1007, + 1057, + 1234, + 1053, + 1081, + 1060, + 2343, + 1100, + 8000, + 903, + 1124, + 1105, + 9001, + 1804, + 9000, + 1050, + 1055, + 1059, + 1524, + 5555, + 5010, + 32778, + 48761, + 48489, + 48455, + 48255, + 48189, + 48078, + 47981, + 47915, + 47772, + 47765, + 46836, + 46532, + 46093, + 45928, + 45818, + 45722, + 45685, + 45380, + 45247, + 44946, + 44923, + 44508, + 44334, + 44253, + 44190, + 44185, + 44179, + 44160, + 44101, + 43967, + 43824, + 43686, + 43514, + 43370, + 43195, + 43094, + 42639, + 42627, + 42577, + 42557, + 42434, + 42431, + 42313, + 42056, + 41971, + 41967, + 41896, + 41774, + 41702, + 41638, + 41446, + 41308, + 40866, + 40847, + 40805, + 40724, + 40711, + 40622, + 40539, + 40019, + 39723, + 39714, + 39683, + 39632, + 39217, + 38615, + 38498, + 38412, + 38063, + 37843, + 37813, + 37783, + 37761, + 37602, + 37393, + 37212, + 37144, + 36945, + 36893, + 36778, + 36669, + 36489, + 36458, + 36384, + 36108, + 35794, + 35702, + 34855, + 34796, + 34758, + 34580, + 34579, + 34578, + 34577, + 34570, + 34433, + 34422, + 34358, + 34079, + 34038, + 33872, + 33866, + 33717, + 33459, + 33249, + 33030, + 32798, + 27444, + 47808, + 1484, + 3, + 1067, + 64727, + 64590, + 64481, + 64080, + 63420, + 62958, + 62699, + 62677, + 62575, + 62154, + 61961, + 61685, + 61550, + 61481, + 61412, + 61322, + 61319, + 61142, + 61024, + 60423, + 60381, + 60172, + 59846, + 59765, + 59207, + 59193, + 58797, + 58419, + 58178, + 58075, + 57977, + 57958, + 57843, + 57813, + 57410, + 57409, + 57172, + 55587, + 55544, + 55043, + 54925, + 54807, + 54711, + 54114, + 54094, + 53838, + 53589, + 53037, + 53006, + 52144, + 51972, + 51905, + 51690, + 51586, + 51554, + 51456, + 51255, + 50919, + 50708, + 50497, + 50164, + 50099, + 49968, + 49640, + 49396, + 49393, + 49360, + 49350, + 49306, + 49262, + 49259, + 49226, + 49222, + 49220, + 49216, + 49214, + 49178, + 49177, + 49155, + 1058, + 4666, + 3457, + 559, + 1455, + 4008, + 764, + 207, + 1457, + 944, + 9370, + 826, + 789, + 16086, + 1020, + 1013, + 1200, + 657, + 3296, + 1101, + 1051, + 689, + 639, + 3343, + 8900, + 1070, + 2362, + 2345, + 1087, + 1088, + 1072, + 2161, + 502, + 17754, + 32760, + 32750, + 32727, + 32611, + 32607, + 32546, + 32506, + 32499, + 32495, + 32479, + 32469, + 32446, + 32430, + 32425, + 32422, + 32415, + 32404, + 32382, + 32368, + 32359, + 32352, + 32326, + 32273, + 32262, + 32219, + 32216, + 32185, + 32132, + 32129, + 32124, + 32066, + 32053, + 32044, + 31999, + 31963, + 31918, + 31887, + 31882, + 31852, + 31803, + 31794, + 31792, + 31783, + 31750, + 31743, + 31735, + 31732, + 31720, + 31692, + 31673, + 31609, + 31602, + 31599, + 31584, + 31569, + 31560, + 31521, + 31520, + 31481, + 31428, + 31412, + 31404, + 31361, + 31352, + 31350, + 31343, + 31334, + 31284, + 31267, + 31266, + 31261, + 31202, + 31199, + 31180, + 31162, + 31155, + 31137, + 31134, + 31133, + 31115, + 31112, + 31084, + 31082, + 31051, + 31049, + 31036, + 31034, + 30996, + 30943, + 30932, + 30930, + 30909, + 30880, + 30875, + 30869, + 30856, + 30824, + 30803, + 30789, + 30785, + 30757, + 30698, + 30669, + 30661, + 30622, + 30612, + 30583, + 30578, + 30533, + 30526, + 30512, + 30477, + 30474, + 30473, + 30465, + 30461, + 30348, + 30299, + 30256, + 30214, + 30209, + 30154, + 30134, + 30093, + 30085, + 30067, + 30055, + 30034, + 29981, + 29964, + 29961, + 29894, + 29886, + 29843, + 29834, + 29794, + 29709, + 29613, + 29595, + 29581, + 29564, + 29554, + 29541, + 29534, + 29522, + 29503, + 29461, + 29453, + 29449, + 29444, + 29426, + 29410, + 29401, + 29400, + 29357, + 29333, + 29319, + 29276, + 29230, + 29200, + 29180, + 29168, + 29162, + 29153, + 29150, + 29142, + 29135, + 29129, + 29082, + 29054, + 29048, + 29030, + 28995, + 28965, + 28944, + 28933, + 28931, + 28892, + 28815, + 28808, + 28803, + 28746, + 28745, + 28725, + 28719, + 28707, + 28706, + 28692, + 28674, + 28664, + 28663, + 28645, + 28640, + 28630, + 28609, + 28584, + 28525, + 28485, + 28476, + 28445, + 28440, + 28438, + 28387, + 28349, + 28344, + 28295, + 28263, + 28247, + 28222, + 28220, + 28211, + 28190, + 28172, + 28129, + 28107, + 28105, + 28098, + 28091, + 28080, + 28071, + 28070, + 28034, + 28011, + 27973, + 27969, + 27949, + 27919, + 27895, + 27861, + 27853, + 27750, + 27722, + 27718, + 27711, + 27708, + 27696, + 27682, + 27678, + 27673, + 27666, + 27606, + 27600, + 27579, + 27573, + 27561, + 27547, + 27538, + 27487, + 27466, + 27437, + 27416, + 27414, + 27287, + 27272, + 27271, + 27263, + 27209, + 27200, + 27182, + 27180, + 27179, + 27150, + 27133, + 27110, + 27095, + 27085, + 27079, + 27078, + 27072, + 27064, + 27058, + 27027, + 27025, + 27017, + 27010, + 26998, + 26996, + 26994, + 26982, + 26973, + 26949, + 26888, + 26878, + 26868, + 26866, + 26845, + 26843, + 26823, + 26819, + 26796, + 26795, + 26771, + 26765, + 26742, + 26705, + 26698, + 26645, + 26549, + 26531, + 26512, + 26507, + 26493, + 26452, + 26434, + 26431, + 26423, + 26420, + 26401, + 26388, + 26381, + 26340, + 26337, + 26289, + 26286, + 26284, + 26254, + 26243, + 26239, + 26219, + 26204, + 26196, + 26191, + 26171, + 26123, + 26103, + 26079, + 26052, + 26031, + 26026, + 25992, + 25956, + 25925, + 25913, + 25909, + 25875, + 25868, + 25851, + 25826, + 25778, + 25756, + 25733, + 25715, + 25670, + 25652, + 25628, + 25627, + 25624, + 25600, + 25586, + 25579, + 25560, + 25544, + 25538, + 25521, + 25514, + 25498, + 25488, + 25466, + 25402, + 25385, + 25366, + 25332, + 25331, + 25290, + 25271, + 25266, + 25249, + 25248, + 25212, + 25170, + 25169, + 25135, + 25040, + 25036, + 24950, + 24945, + 24941, + 24916, + 24911, + 24875, + 24837, + 24818, + 24800, + 24756, + 24741, + 24731, + 24725, + 24706, + 24693, + 24689, + 24665, + 24658, + 24655, + 24639, + 24539, + 24528, + 24496, + 24444, + 24419, + 24418, + 24388, + 24306, + 24271, + 24265, + 24212, + 24172, + 24158, + 24155, + 24113, + 24107, + 24104, + 24098, + 24093, + 24063, + 24032, + 24021, + 24013, + 24008, + 23951, + 23946, + 23940, + 23865, + 23758, + 23755, + 23745, + 23714, + 23704, + 23698, + 23638, + 23633, + 23586, + 23585, + 23547, + 23522, + 23504, + 23495, + 23430, + 23428, + 23426, + 23421, + 23399, + 23374, + 23363, + 23341, + 23337, + 23327, + 23322, + 23256, + 23230, + 23202, + 23184, + 23170, + 23162, + 23161, + 23152, + 23108, + 23073, + 23059, + 23027, + 22991, + 22945, + 22902, + 22862, + 22853, + 22852, + 22843, + 22776, + 22762, + 22736, + 22732, + 22677, + 22626, + 22611, + 22597, + 22593, + 22585, + 22571, + 22547, + 22526, + 22522, + 22505, + 22495, + 22494, + 22481, + 22438, + 22417, + 22381, + 22377, + 22376, + 22356, + 22324, + 22292, + 22288, + 22252, + 22215, + 22146, + 22124, + 22123, + 22109, + 22105, + 22053, + 22045, + 22043, + 22029, + 21967, + 21948, + 21923, + 21898, + 21868, + 21842, + 21834, + 21784, + 21780, + 21742, + 21710, + 21702, + 21698, + 21674, + 21663, + 21655, + 21649, + 21644, + 21625, + 21609, + 21576, + 21568, + 21566, + 21556, + 21525, + 21524, + 21514, + 21476, + 21468, + 21454, + 21405, + 21366, + 21364, + 21360, + 21358, + 21344, + 21333, + 21320, + 21318, + 21303, + 21282, + 21247, + 21207, + 21206, + 21186, + 21167, + 21111, + 21104, + 21083, + 21060, + 21016, + 20919, + 20884, + 20876, + 20872, + 20865, + 20851, + 20848, + 20842, + 20817, + 20791, + 20762, + 20752, + 20742, + 20717, + 20710, + 20679, + 20678, + 20665, + 20560, + 20540, + 20525, + 20522, + 20518, + 20465, + 20464, + 20449, + 20445, + 20425, + 20424, + 20423, + 20411, + 20409, + 20380, + 20366, + 20360, + 20326, + 20313, + 20309, + 20288, + 20279, + 20262, + 20249, + 20217, + 20206, + 20164, + 20154, + 20146, + 20129, + 20120, + 20117, + 20082, + 19998, + 19995, + 19956, + 19936, + 19935, + 19792, + 19789, + 19728, + 19722, + 19719, + 19718, + 19717, + 19707, + 19695, + 19683, + 19663, + 19662, + 19660, + 19650, + 19647, + 19639, + 19632, + 19625, + 19624, + 19605, + 19504, + 19500, + 19482, + 19415, + 19374, + 19273, + 19227, + 19222, + 19193, + 19181, + 19161, + 19154, + 19141, + 19140, + 19096, + 19075, + 19047, + 19022, + 18996, + 18994, + 18991, + 18987, + 18985, + 18958, + 18883, + 18869, + 18832, + 18830, + 18821, + 18818, + 18807, + 18683, + 18676, + 18669, + 18666, + 18617, + 18605, + 18543, + 18485, + 18373, + 18319, + 18258, + 18255, + 18250, + 18228, + 18156, + 18134, + 18113, + 18081, + 17946, + 17845, + 17836, + 17824, + 17823, + 17814, + 17787, + 17762, + 17726, + 17683, + 17674, + 17673, + 17663, + 17638, + 17629, + 17605, + 17592, + 17585, + 17580, + 17549, + 17533, + 17505, + 17494, + 17490, + 17487, + 17468, + 17424, + 17423, + 17417, + 17359, + 17338, + 17332, + 17331, + 17321, + 17302, + 17282, + 17237, + 17236, + 17207, + 17205, + 17184, + 17146, + 17101, + 17077, + 17018, + 17006, + 16974, + 16972, + 16970, + 16948, + 16939, + 16938, + 16919, + 16912, + 16896, + 16862, + 16839, + 16838, + 16829, + 16816, + 16786, + 16779, + 16766, + 16739, + 16711, + 16708, + 16700, + 16697, + 16674, + 16573, + 16548, + 16545, + 16503, + 16498, + 16449, + 16433, + 16420, + 21800, + 21847, + 30260, + 19315, + 19541, + 21000, + 27007, + 27002, + 24242, + 20003, + 17219, + 18888, + 617, + 393, + 56, + 25, + 387, + 750, + 770, + 769, + 198, + 1, + 1083, + 771, + 1400, + 6111, + 83, + 134, + 32786, + 2001, + 501, + 1666, + 484, + 550, + 7100, + 26900, + 47557, + 145, + 496, + 760, + 5011, + 748, + 376, + 1514, + 426, + 110, + 6969, + 170, + 47, + 6146, + 370, + 49136, + 49127, + 49114, + 49052, + 49042, + 48954, + 48906, + 48901, + 48898, + 48887, + 48860, + 48854, + 48790, + 48780, + 48733, + 48712, + 48631, + 48626, + 48605, + 48558, + 48555, + 48548, + 48496, + 48411, + 48342, + 48329, + 48324, + 48321, + 48315, + 48314, + 48282, + 48263, + 48222, + 48156, + 48126, + 48105, + 47971, + 47936, + 47926, + 47917, + 47851, + 47847, + 47842, + 47821, + 47817, + 47802, + 47751, + 47706, + 47656, + 47586, + 47577, + 47572, + 47457, + 47432, + 47406, + 47371, + 47337, + 47279, + 47270, + 47198, + 47185, + 47169, + 47160, + 47134, + 47132, + 47083, + 47030, + 46837, + 46808, + 46793, + 46758, + 46698, + 46652, + 46643, + 46641, + 46630, + 46603, + 46594, + 46584, + 46483, + 46464, + 46462, + 46457, + 46440, + 46387, + 46294, + 46270, + 46265, + 46249, + 46207, + 46201, + 46195, + 46114, + 46066, + 46055, + 46040, + 45971, + 45906, + 45891, + 45883, + 45769, + 45719, + 45596, + 45538, + 45503, + 45449, + 45345, + 45338, + 45193, + 45148, + 45061, + 45037, + 45006, + 44943, + 44917, + 44856, + 44819, + 44748, + 44733, + 44661, + 44611, + 44598, + 44577, + 44539, + 44518, + 44503, + 44454, + 44420, + 44408, + 44371, + 44364, + 44312, + 44310, + 44275, + 44135, + 44117, + 44116, + 44100, + 44099, + 44093, + 44079, + 44054, + 44037, + 44034, + 44026, + 44009, + 43983, + 43942, + 43941, + 43842, + 43802, + 43740, + 43715, + 43640, + 43525, + 43510, + 43455, + 43423, + 43361, + 43336, + 43334, + 43288, + 43284, + 43268, + 43260, + 43248, + 43175, + 43173, + 43170, + 43092, + 43080, + 43072, + 43039, + 42941, + 42916, + 42882, + 42868, + 42857, + 42827, + 42825, + 42812, + 42807, + 42803, + 42773, + 42716, + 42708, + 42702, + 42648, + 42638, + 42612, + 42585, + 42558, + 42533, + 42498, + 42373, + 42341, + 42340, + 42294, + 42285, + 42284, + 42279, + 42251, + 42220, + 42215, + 42148, + 42139, + 42051, + 42005, + 41875, + 41851, + 41837, + 41816, + 41779, + 41771, + 41731, + 41717, + 41619, + 41499, + 41496, + 41406, + 41380, + 41360, + 41348, + 41343, + 41335, + 41334, + 41327, + 41265, + 41161, + 41156, + 41149, + 41148, + 41139, + 41073, + 41014, + 41011, + 40993, + 40982, + 40972, + 40958, + 40940, + 40914, + 40904, + 40893, + 40882, + 40877, + 40830, + 40736, + 40722, + 40667, + 40653, + 40642, + 40625, + 40591, + 40580, + 40551, + 40512, + 40491, + 40487, + 40480, + 40453, + 40436, + 40423, + 40399, + 40351, + 40322, + 40303, + 40266, + 40111, + 40102, + 40101, + 40074, + 40071, + 40043, + 39982, + 39919, + 39863, + 39812, + 39811, + 39753, + 39745, + 39743, + 39733, + 39709, + 39697, + 39659, + 39649, + 39641, + 39630, + 39600, + 39596, + 39590, + 39548, + 39507, + 39457, + 39453, + 39440, + 39430, + 39401, + 39383, + 39377, + 39332, + 39313, + 39297, + 39243, + 39220, + 39163, + 39146, + 39135, + 39116, + 39086, + 39056, + 39042, + 39035, + 39028, + 38972, + 38864, + 38812, + 38742, + 38734, + 38732, + 38727, + 38714, + 38648, + 38644, + 38609, + 38608, + 38571, + 38526, + 38510, + 38499, + 38370, + 38325, + 38312, + 38304, + 38294, + 38274, + 38218, + 38190, + 38183, + 38172, + 38153, + 38142, + 38125, + 38064, + 38053, + 38041, + 38014, + 37964, + 37933, + 37922, + 37823, + 37686, + 37682, + 37670, + 37664, + 37663, + 37592, + 37589, + 37574, + 37563, + 37561, + 37478, + 37464, + 37456, + 37441, + 37423, + 37401, + 37400, + 37385, + 37377, + 37348, + 37343, + 37327, + 37316, + 37255, + 37221, + 37216, + 37198, + 37182, + 37163, + 37156, + 37152, + 37139, + 37136, + 37093, + 37046, + 37025, + 37018, + 36990, + 36931, + 36910, + 36887, + 36862, + 36854, + 36817, + 36719, + 36695, + 36694, + 36666, + 36641, + 36576, + 36522, + 36519, + 36500, + 36471, + 36462, + 36380, + 36293, + 36237, + 36214, + 36178, + 36136, + 36126, + 36099, + 36096, + 36065, + 36041, + 36019, + 35991, + 35985, + 35948, + 35940, + 35904, + 35896, + 35810, + 35776, + 35775, + 35773, + 35746, + 35656, + 35636, + 35516, + 35493, + 35490, + 35474, + 35390, + 35283, + 35280, + 35240, + 35222, + 35188, + 35176, + 35108, + 35051, + 35044, + 35026, + 34979, + 34893, + 34847, + 34822, + 34780, + 34771, + 34770, + 34757, + 34705, + 34692, + 34653, + 34586, + 34425, + 34421, + 34417, + 34374, + 34253, + 34250, + 34243, + 34231, + 34227, + 34214, + 34157, + 34153, + 34133, + 34119, + 34082, + 34075, + 33986, + 33975, + 33882, + 33878, + 33873, + 33858, + 33849, + 33826, + 33795, + 33724, + 33710, + 33700, + 33693, + 33687, + 33652, + 33591, + 33584, + 33575, + 33556, + 33465, + 33448, + 33422, + 33414, + 33394, + 33377, + 33302, + 33290, + 33285, + 33264, + 33208, + 33207, + 33162, + 33156, + 33149, + 33144, + 33080, + 33043, + 33028, + 32955, + 32897, + 32847, + 32843, + 32820, + 32812, + 37654, + 48556, + 4321, + 403, + 5308, + 7009, + 584, + 81, + 2067, + 7001, + 65520, + 65460, + 65420, + 65396, + 65380, + 65347, + 65286, + 65232, + 65105, + 64944, + 64890, + 64884, + 64874, + 64829, + 64798, + 64795, + 64772, + 64693, + 64682, + 64640, + 64630, + 64616, + 64615, + 64589, + 64566, + 64544, + 64492, + 64469, + 64456, + 64406, + 64365, + 64345, + 64340, + 64313, + 64312, + 64284, + 64259, + 64258, + 64202, + 63962, + 63917, + 63820, + 63786, + 63710, + 63700, + 63673, + 63534, + 63508, + 63499, + 63447, + 63346, + 63344, + 63337, + 63331, + 63281, + 63247, + 63173, + 63146, + 63136, + 63129, + 63106, + 63101, + 63079, + 63006, + 62975, + 62955, + 62880, + 62866, + 62845, + 62827, + 62778, + 62701, + 62697, + 62690, + 62562, + 62522, + 62493, + 62458, + 62449, + 62436, + 62420, + 62412, + 62404, + 62325, + 62281, + 62216, + 62188, + 62164, + 62133, + 62114, + 62101, + 62100, + 62038, + 61983, + 61973, + 61967, + 61937, + 61921, + 61902, + 61867, + 61828, + 61781, + 61709, + 61678, + 61653, + 61587, + 61539, + 61532, + 61523, + 61512, + 61485, + 61480, + 61438, + 61431, + 61422, + 61400, + 61395, + 61381, + 61226, + 61193, + 61192, + 61167, + 61127, + 61095, + 61081, + 61055, + 61050, + 61047, + 61046, + 61027, + 60988, + 60966, + 60950, + 60707, + 60705, + 60701, + 60679, + 60650, + 60438, + 60435, + 60431, + 60430, + 60384, + 60363, + 60347, + 60341, + 60255, + 60227, + 60145, + 60097, + 60069, + 60035, + 60028, + 59998, + 59971, + 59943, + 59860, + 59805, + 59791, + 59758, + 59669, + 59632, + 59603, + 59593, + 59581, + 59577, + 59555, + 59506, + 59483, + 59434, + 59415, + 59388, + 59327, + 59301, + 59296, + 59254, + 59216, + 59214, + 59189, + 59186, + 59132, + 59093, + 59037, + 59035, + 59002, + 58975, + 58938, + 58929, + 58914, + 58893, + 58817, + 58782, + 58777, + 58747, + 58705, + 58700, + 58674, + 58646, + 58455, + 58432, + 58369, + 58308, + 58205, + 58141, + 58114, + 58102, + 58091, + 58089, + 58026, + 57946, + 57942, + 57868, + 57858, + 57848, + 57836, + 57827, + 57756, + 57679, + 57662, + 57629, + 57461, + 57421, + 57386, + 57156, + 57133, + 57114, + 57063, + 57005, + 56980, + 56954, + 56929, + 56897, + 56895, + 56892, + 56876, + 56869, + 56848, + 56825, + 56765, + 56668, + 56637, + 56622, + 56555, + 56554, + 56491, + 56468, + 56366, + 56359, + 56337, + 56326, + 56288, + 56284, + 56273, + 56225, + 56209, + 56168, + 56153, + 56105, + 56103, + 55954, + 55941, + 55870, + 55795, + 55784, + 55766, + 55745, + 55650, + 55618, + 55593, + 55581, + 55579, + 55553, + 55541, + 55488, + 55352, + 55316, + 55267, + 55205, + 55156, + 55124, + 55034, + 54993, + 54952, + 54946, + 54939, + 54848, + 54812, + 54758, + 54747, + 54722, + 54676, + 54653, + 54627, + 54607, + 54531, + 54521, + 54513, + 54398, + 54375, + 54349, + 54324, + 54298, + 54296, + 54267, + 54264, + 54259, + 54126, + 54055, + 54045, + 54040, + 54027, + 54023, + 53996, + 53987, + 53940, + 53880, + 53830, + 53651, + 53554, + 53460, + 53433, + 53403, + 53396, + 53367, + 53286, + 53279, + 53249, + 53228, + 53212, + 53182, + 53161, + 53126, + 53084, + 53023, + 52945, + 52861, + 52813, + 52792, + 52772, + 52762, + 52713, + 52706, + 52674, + 52649, + 52582, + 52571, + 52516, + 52412, + 52364, + 52333, + 52254, + 52227, + 52224, + 52220, + 52155, + 52138, + 52130, + 52089, + 52006, + 51903, + 51894, + 51847, + 51843, + 51781, + 51710, + 51649, + 51589, + 51581, + 51544, + 51477, + 51471, + 51427, + 51407, + 51400, + 51383, + 51323, + 51280, + 51267, + 51225, + 51211, + 51193, + 51172, + 51167, + 51143, + 51120, + 51020, + 51014, + 51013, + 50990, + 50913, + 50904, + 50900, + 50896, + 50756, + 50722, + 50649, + 50622, + 50620, + 50579, + 50574, + 50573, + 50523, + 50474, + 50447, + 50427, + 50420, + 50409, + 50376, + 50349, + 50345, + 50300, + 50296, + 50273, + 50239, + 50163, + 50149, + 50143, + 50127, + 50122, + 50085, + 50049, + 50041, + 50024, + 50009, + 49998, + 49990, + 49986, + 49984, + 49945, + 49939, + 49926, + 49839, + 49801, + 49754, + 49746, + 49669, + 49639, + 49620, + 49600, + 49589, + 49579, + 49562, + 49557, + 49525, + 49513, + 49506, + 49478, + 49443, + 49440, + 49384, + 49375, + 49348, + 49337, + 49334, + 49324, + 49319, + 49317, + 49295, + 49273, + 49268, + 49266, + 49264, + 49255, + 49252, + 49249, + 49237, + 49236, + 49231, + 49227, + 49223, + 49219, + 49218, + 49217, + 49206, + 49203, + 49183, + 49164, + 1334, + 672, + 1345, + 1062, + 9890, + 984, + 982, + 979, + 977, + 9740, + 973, + 961, + 953, + 949, + 947, + 940, + 934, + 931, + 917, + 9053, + 898, + 893, + 889, + 876, + 8435, + 841, + 819, + 818, + 812, + 7516, + 745, + 734, + 732, + 727, + 720, + 6905, + 6784, + 6430, + 5347, + 5018, + 4778, + 3403, + 3301, + 304, + 3001, + 15138, + 15053, + 14499, + 14181, + 13557, + 13429, + 12208, + 11618, + 11287, + 11271, + 10825, + 10583, + 10484, + 10302, + 1018, + 1015, + 1237, + 2973, + 7677, + 2863, + 1163, + 620, + 2101, + 1287, + 1098, + 995, + 9595, + 1622, + 1286, + 1862, + 4691, + 3569, + 1113, + 2053, + 8207, + 1061, + 603, + 887, + 4039, + 10081, + 681, + 12003, + 644, + 3574, + 1052, + 2164, + 4047, + 619, + 6503, + 3527, + 7846, + 391, + 1414, + 2004, + 7651, + 152, + 1348, + 201, + 27500, + 577, + 2018, + 99, + 2106, + 759, + 1491, + 7005, + 32787, + 761, + 742, + 79, + 666, + 206, + 1483, + 1110, + 1664, + 31, + 749, + 96, + 801, + 573, + 1999, + 6144, + 4827, + 1366, + 751, + 1389, + 510, + 704, + 7648, + 132, + 888, + 1422, + 525, + 3531, + 640, + 1155, + 146, + 1412, + 3333, + 205, + 594, + 444, + 1349, + 2012, + 740, + 1521, + 524, + 1467, + 530, + 1469, + 1531, + 191, + 729, + 3246, + 2045, + 1441, + 2431, + 1507, + 150, + 314, + 259, + 546, + 552, + 163, + 1432, + 2032, + 45000, + 6110, + 160, + 2026, + 1672, + 1364, + 568, + 86, + 1359, + 531, + 516, + 541, + 6145, + 440, + 1537, + 1662, + 505, + 1600, + 1513, + 547, + 1512, + 2948, + 540, + 118, + 747, + 2019, + 1398, + 451, + 222, + 57, + 417, + 537, + 1650, + 6147, + 1435, + 93, + 355, + 551, + 442, + 130, + 548, + 27910, + 2103, + 1498, + 1518, + 1527, + 133, + 586, + 607, + 730, + 532, + 569, + 3985, + 472, + 1515, + 1438, + 455, + 504, + 1481, + 1420, + 65, + 77, + 1465, + 1388, + 610, + 731, + 6502, + 45, + 600, + 709, + 763, + 437, + 386, + 27960, + 16444, + 22370, + 1370, + 377, + 1501, + 369, + 752, + 485, + 2040, + 1393, + 1440, + 438, + 458, + 521, + 1353, + 35, + 1357, + 758, + 1482, + 1532, + 503, + 1372, + 347, + 1548, + 48, + 7008, + 2627, + 571, + 450, + 587, + 469, + 256, + 1445, + 4132, + 4133, + 385, + 5304, + 634, + 1453, + 1371, + 140, + 1476, + 1347, + 5190, + 1987, + 563, + 416, + 753, + 1530, + 2006, + 1670, + 1503, + 1395, + 479, + 1551, + 1505, + 121, + 76, + 447, + 542, + 3049, + 449, + 6033, + 5357, + 3233, + 1085, + 2054, + 1074, + 12321, + 9206, + 4049, + 2387, + 2821, + 4262, + 4232, + 9921, + 9897, + 988, + 986, + 9869, + 985, + 981, + 9716, + 966, + 9638, + 9620, + 960, + 9589, + 952, + 951, + 950, + 946, + 941, + 9416, + 937, + 9310, + 927, + 922, + 9229, + 921, + 9170, + 9156, + 9154, + 9110, + 908, + 9079, + 8998, + 897, + 8979, + 8934, + 8924, + 8820, + 881, + 8793, + 8742, + 8719, + 869, + 8684, + 8661, + 8591, + 857, + 8556, + 845, + 839, + 8343, + 8336, + 8284, + 823, + 821, + 815, + 809, + 805, + 7963, + 7946, + 7867, + 784, + 7804, + 7613, + 7536, + 7524, + 7298, + 728, + 7267, + 722, + 719, + 7074, + 7051, + 6984, + 6976, + 6972, + 6925, + 6811, + 6625, + 659, + 6520, + 6468, + 6463, + 6451, + 6395, + 6372, + 6353, + 6250, + 6237, + 6212, + 6119, + 5873, + 5817, + 5749, + 5704, + 5648, + 5589, + 5552, + 5509, + 5444, + 5439, + 5366, + 5320, + 5318, + 5279, + 5210, + 5139, + 5119, + 5110, + 5077, + 5048, + 5034, + 4934, + 4836, + 4695, + 4565, + 4408, + 4362, + 4198, + 4175, + 1753, + 16334, + 16312, + 16263, + 16226, + 16159, + 16155, + 16108, + 16066, + 15969, + 15966, + 15831, + 15814, + 15803, + 15754, + 15733, + 15648, + 15621, + 15514, + 15449, + 15381, + 15361, + 15360, + 15290, + 15267, + 15186, + 15149, + 15124, + 15123, + 15086, + 15067, + 15055, + 15041, + 14991, + 14946, + 14922, + 14889, + 14808, + 14771, + 14679, + 14487, + 14388, + 14356, + 14341, + 14290, + 14286, + 14281, + 14241, + 14220, + 14202, + 14195, + 14169, + 13925, + 13914, + 13905, + 13876, + 13865, + 13856, + 13799, + 13747, + 13701, + 13699, + 13686, + 13663, + 13627, + 13571, + 13570, + 13552, + 13543, + 13539, + 13476, + 13474, + 13419, + 13402, + 13378, + 13312, + 13299, + 13291, + 13266, + 13164, + 13155, + 13002, + 12991, + 12986, + 12933, + 12873, + 12854, + 12650, + 12602, + 12578, + 12525, + 12472, + 12469, + 12447, + 12306, + 12304, + 12268, + 12195, + 12173, + 12034, + 11970, + 11878, + 11872, + 11785, + 11723, + 11567, + 11449, + 11425, + 11364, + 11182, + 11157, + 11156, + 11138, + 11137, + 11063, + 10862, + 10845, + 10827, + 10666, + 10653, + 10628, + 10525, + 10517, + 10490, + 10445, + 10409, + 10369, + 10343, + 10268, + 1011, + 10076, + 10066, + 1004, + 1003, + 10011, + 8201, + 2078, + 2158, + 3372, + 3544, + 2060, + 7012, + 5629, + 7354, + 7303, + 1010, + 1203, + 605, + 1257, + 3162, + 1251, + 3978, + 3495, + 5168, + 2121, + 5435, + 1215, + 873, + 1695, + 9599, + 1099, + 5900, + 653, + 641, + 3094, + 2083, + 628, + 5082, + 3453, + 3910, + 3396, + 6105, + 3048, + 2398, + 3304, + 2368, + 900, + 7274, + 1921, + 1095, + 6627, + 2058, + 2061, + 833, + 831, + 2528, + 4361, + 1685, + 4447, + 10007, + 777, + 1755, + 2382, + 1337, + 5354, + 3235, + 2908, + 1861, + 636, + 1063, + 6961, + 1106, + 4593, + 2215, + 2055, + 1585, + 1143, + 1077, + 993, + 1884, + 2062, + 4061, + 1792, + 2140, + 1803, + 14937, + 694, + 11720, + 2123, + 1191, + 1909, + 1738, + 3519, + 1089, + 810, + 2819, + 1620, + 3002, + 1139, + 621, + 680, + 12000, + 12001, + 12004, + 12002, + 1148, + 4536, + 3477, + 2168, + 9002, + 4401, + 4404, + 1175, + 2496, + 1256, + 1076, + 3631, + 2129, + 3364, + 4378, + 4692, + 1302, + 3947, + 9695, + 3505, + 2517, + 9750, + 632, + 2302, + 3784, + 1078, + 1122, + 1079, + 3451, + 1834, + 1116, + 1206, + 3054, + 8040, + 705, + 1103, + 1102, + 4046, + 674, + 8402, + 54, + 82, + 765, + 2013, + 1402, + 2307, + 261, + 1671, + 155, + 44, + 1427, + 398, + 2241, + 1428, + 143, + 1391, + 1392, + 1383, + 744, + 197, + 1415, + 17756, + 17755, + 22347, + 25793, + 32748, + 32744, + 32743, + 32742, + 32736, + 32734, + 32731, + 32723, + 32714, + 32706, + 32693, + 32687, + 32685, + 32682, + 32676, + 32675, + 32674, + 32669, + 32664, + 32656, + 32652, + 32644, + 32642, + 32641, + 32639, + 32637, + 32634, + 32632, + 32631, + 32629, + 32618, + 32617, + 32612, + 32598, + 32597, + 32595, + 32592, + 32583, + 32578, + 32577, + 32576, + 32575, + 32574, + 32571, + 32566, + 32564, + 32560, + 32558, + 32553, + 32550, + 32532, + 32524, + 32523, + 32518, + 32512, + 32511, + 32508, + 32503, + 32496, + 32488, + 32487, + 32484, + 32482, + 32478, + 32474, + 32473, + 32468, + 32466, + 32465, + 32454, + 32449, + 32447, + 32444, + 32440, + 32439, + 32436, + 32435, + 32433, + 32429, + 32428, + 32426, + 32423, + 32412, + 32409, + 32406, + 32398, + 32391, + 32389, + 32379, + 32378, + 32377, + 32369, + 32364, + 32360, + 32355, + 32349, + 32342, + 32339, + 32338, + 32329, + 32323, + 32319, + 32317, + 32316, + 32313, + 32309, + 32306, + 32305, + 32297, + 32295, + 32291, + 32289, + 32282, + 32281, + 32277, + 32276, + 32274, + 32272, + 32270, + 32268, + 32264, + 32259, + 32251, + 32248, + 32245, + 32231, + 32228, + 32225, + 32223, + 32222, + 32221, + 32217, + 32210, + 32204, + 32202, + 32201, + 32198, + 32195, + 32190, + 32188, + 32187, + 32186, + 32180, + 32178, + 32176, + 32174, + 32172, + 32167, + 32163, + 32162, + 32161, + 32127, + 32117, + 32109, + 32107, + 32106, + 32105, + 32094, + 32092, + 32091, + 32090, + 32084, + 32081, + 32079, + 32072, + 32068, + 32065, + 32064, + 32059, + 32048, + 32046, + 32040, + 32039, + 32035, + 32033, + 32025, + 32024, + 32018, + 32011, + 32010, + 32007, + 32006, + 32005, + 31997, + 31992, + 31981, + 31979, + 31974, + 31972, + 31968, + 31967, + 31966, + 31950, + 31940, + 31939, + 31934, + 31929, + 31928, + 31922, + 31921, + 31920, + 31906, + 31901, + 31899, + 31898, + 31894, + 31892, + 31878, + 31877, + 31872, + 31870, + 31869, + 31861, + 31854, + 31853, + 31847, + 31844, + 31842, + 31834, + 31833, + 31827, + 31825, + 31822, + 31821, + 31819, + 31818, + 31817, + 31813, + 31798, + 31782, + 31779, + 31778, + 31776, + 31763, + 31759, + 31757, + 31752, + 31749, + 31739, + 31737, + 31736, + 31733, + 31729, + 31727, + 31723, + 31712, + 31709, + 31705, + 31703, + 31683, + 31679, + 31678, + 31671, + 31670, + 31669, + 31668, + 31663, + 31660, + 31657, + 31655, + 31653, + 31651, + 31648, + 31643, + 31626, + 31624, + 31617, + 31615, + 31606, + 31601, + 31600, + 31598, + 31597, + 31596, + 31595, + 31594, + 31593, + 31579, + 31577, + 31566, + 31565, + 31564, + 31563, + 31558, + 31557, + 31548, + 31545, + 31544, + 31543, + 31532, + 31527, + 31518, + 31510, + 31509, + 31506, + 31495, + 31493, + 31487, + 31470, + 31460, + 31459, + 31454, + 31453, + 31451, + 31439, + 31432, + 31429, + 31424, + 31423, + 31422, + 31421, + 31415, + 31414, + 31398, + 31392, + 31391, + 31386, + 31371, + 31366, + 31362, + 31358, + 31354, + 31347, + 31340, + 31336, + 31333, + 31326, + 31325, + 31324, + 31318, + 31314, + 31309, + 31301, + 31299, + 31293, + 31292, + 31288, + 31279, + 31275, + 31273, + 31271, + 31268, + 31258, + 31257, + 31254, + 31252, + 31249, + 31248, + 31247, + 31242, + 31240, + 31238, + 31237, + 31234, + 31230, + 31218, + 31217, + 31215, + 31212, + 31211, + 31209, + 31204, + 31198, + 31192, + 31187, + 31176, + 31150, + 31146, + 31141, + 31129, + 31127, + 31119, + 31105, + 31100, + 31089, + 31088, + 31085, + 31083, + 31080, + 31078, + 31076, + 31072, + 31069, + 31068, + 31058, + 31054, + 31052, + 31048, + 31030, + 31028, + 31022, + 31020, + 31015, + 31005, + 31001, + 30990, + 30986, + 30984, + 30982, + 30972, + 30967, + 30965, + 30959, + 30958, + 30955, + 30951, + 30945, + 30942, + 30931, + 30926, + 30924, + 30919, + 30918, + 30912, + 30910, + 30908, + 30906, + 30897, + 30894, + 30893, + 30892, + 30886, + 30881, + 30876, + 30867, + 30851, + 30849, + 30841, + 30838, + 30837, + 30833, + 30828, + 30827, + 30826, + 30825, + 30823, + 30820, + 30819, + 30808, + 30805, + 30796, + 30795, + 30784, + 30783, + 30782, + 30780, + 30772, + 30765, + 30762, + 30755, + 30754, + 30746, + 30741, + 30738, + 30737, + 30734, + 30729, + 30725, + 30723, + 30719, + 30713, + 30712, + 30710, + 30702, + 30701, + 30689, + 30688, + 30687, + 30682, + 30672, + 30670, + 30665, + 30664, + 30662, + 30660, + 30658, + 30657, + 30651, + 30650, + 30648, + 30646, + 30644, + 30637, + 30627, + 30624, + 30623, + 30619, + 30609, + 30601, + 30592, + 30588, + 30587, + 30575, + 30568, + 30566, + 30564, + 30555, + 30550, + 30539, + 30536, + 30529, + 30522, + 30521, + 30518, + 30516, + 30514, + 30511, + 30501, + 30500, + 30496, + 30495, + 30493, + 30492, + 30491, + 30483, + 30481, + 30478, + 30475, + 30472, + 30470, + 30468, + 30467, + 30464, + 30463, + 30462, + 30457, + 30454, + 30453, + 30434, + 30433, + 30430, + 30428, + 30424, + 30423, + 30420, + 30419, + 30418, + 30416, + 30411, + 30400, + 30398, + 30394, + 30383, + 30381, + 30378, + 30359, + 30350, + 30341, + 30338, + 30335, + 30331, + 30330, + 30318, + 30310, + 30309, + 30306, + 30305, + 30300, + 30298, + 30295, + 30293, + 30286, + 30267, + 30258, + 30254, + 30252, + 30246, + 30245, + 30244, + 30241, + 30239, + 30236, + 30235, + 30234, + 30230, + 30212, + 30211, + 30194, + 30193, + 30188, + 30184, + 30182, + 30181, + 30179, + 30175, + 30172, + 30170, + 30168, + 30150, + 30148, + 30144, + 30139, + 30135, + 30132, + 30131, + 30130, + 30126, + 30123, + 30113, + 30108, + 30086, + 30066, + 30063, + 30059, + 30048, + 30046, + 30041, + 30036, + 30031, + 30027, + 30020, + 30018, + 30015, + 30008, + 30006, + 30000, + 29988, + 29987, + 29980, + 29978, + 29970, + 29967, + 29956, + 29949, + 29932, + 29930, + 29927, + 29926, + 29915, + 29914, + 29911, + 29907, + 29905, + 29903, + 29901, + 29883, + 29878, + 29876, + 29869, + 29867, + 29864, + 29863, + 29860, + 29858, + 29854, + 29852, + 29846, + 29842, + 29840, + 29833, + 29829, + 29816, + 29812, + 29811, + 29809, + 29802, + 29796, + 29788, + 29787, + 29785, + 29782, + 29780, + 29773, + 29771, + 29761, + 29759, + 29756, + 29754, + 29753, + 29752, + 29749, + 29747, + 29742, + 29737, + 29733, + 29731, + 29729, + 29715, + 29712, + 29701, + 29700, + 29694, + 29682, + 29681, + 29680, + 29677, + 29673, + 29667, + 29665, + 29659, + 29652, + 29647, + 29642, + 29639, + 29632, + 29630, + 29618, + 29616, + 29615, + 29607, + 29604, + 29600, + 29589, + 29588, + 29587, + 29585, + 29583, + 29582, + 29577, + 29572, + 29570, + 29562, + 29559, + 29533, + 29525, + 29523, + 29520, + 29518, + 29514, + 29512, + 29508, + 29506, + 29499, + 29494, + 29488, + 29486, + 29480, + 29476, + 29474, + 29471, + 29467, + 29465, + 29457, + 29448, + 29447, + 29442, + 29435, + 29432, + 29427, + 29420, + 29415, + 29414, + 29408, + 29407, + 29406, + 29403, + 29398, + 29397, + 29396, + 29393, + 29390, + 29380, + 29376, + 29375, + 29368, + 29366, + 29364, + 29355, + 29352, + 29342, + 29335, + 29331, + 29329, + 29327, + 29324, + 29323, + 29317, + 29315, + 29312, + 29308, + 29305, + 29298, + 29286, + 29284, + 29283, + 29281, + 29280, + 29278, + 29277, + 29273, + 29272, + 29268, + 29259, + 29257, + 29249, + 29248, + 29239, + 29238, + 29224, + 29220, + 29218, + 29211, + 29207, + 29203, + 29201, + 29199, + 29196, + 29195, + 29186, + 29185, + 29183, + 29177, + 29172, + 29163, + 29149, + 29137, + 29134, + 29126, + 29121, + 29115, + 29114, + 29112, + 29105, + 29095, + 29087, + 29084, + 29070, + 29069, + 29061, + 29058, + 29056, + 29053, + 29052, + 29046, + 29045, + 29039, + 29036, + 29032, + 29026, + 29022, + 29014, + 29013, + 29010, + 29008, + 29007, + 29000, + 28997, + 28992, + 28979, + 28976, + 28969, + 28967, + 28966, + 28958, + 28954, + 28953, + 28952, + 28946, + 28945, + 28943, + 28940, + 28938, + 28934, + 28932, + 28927, + 28924, + 28920, + 28919, + 28917, + 28906, + 28905, + 28902, + 28900, + 28898, + 28896, + 28895, + 28893, + 28888, + 28887, + 28885, + 28883, + 28880, + 28879, + 28877, + 28876, + 28875, + 28865, + 28858, + 28856, + 28855, + 28854, + 28851, + 28847, + 28845, + 28839, + 28837, + 28836, + 28830, + 28827, + 28826, + 28822, + 28816, + 28813, + 28811, + 28810, + 28800, + 28797, + 28785, + 28780, + 28779, + 28778, + 28776, + 28775, + 28772, + 28769, + 28765, + 28755, + 28754, + 28752, + 28750, + 28748, + 28744, + 28741, + 28737, + 28736, + 28734, + 28730, + 28729, + 28728, + 28723, + 28708, + 28705, + 28700, + 28697, + 28696, + 28689, + 28685, + 28682, + 28675, + 28673, + 28661, + 28660, + 28654, + 28649, + 28644, + 28643, + 28642, + 28638, + 28633, + 28625, + 28620, + 28618, + 28617, + 28610, + 28607, + 28597, + 28587, + 28586, + 28575, + 28561, + 28556, + 28545, + 28544, + 28537, + 28534, + 28530, + 28529, + 28521, + 28513, + 28506, + 28488, + 28484, + 28483, + 28477, + 28472, + 28471, + 28469, + 28466, + 28464, + 28455, + 28441, + 28437, + 28434, + 28433, + 28428, + 28427, + 28425, + 28422, + 28421, + 28419, + 28417, + 28411, + 28401, + 28396, + 28393, + 28392, + 28391, + 28386, + 28380, + 28378, + 28377, + 28367, + 28366, + 28356, + 28353, + 28348, + 28345, + 28335, + 28334, + 28327, + 28322, + 28317, + 28315, + 28311, + 28309, + 28307, + 28303, + 28301, + 28298, + 28292, + 28283, + 28271, + 28265, + 28257, + 28251, + 28248, + 28246, + 28243, + 28242, + 28239, + 28237, + 28230, + 28221, + 28219, + 28218, + 28215, + 28213, + 28212, + 28203, + 28200, + 28197, + 28195, + 28183, + 28182, + 28178, + 28155, + 28154, + 28148, + 28145, + 28144, + 28142, + 28141, + 28124, + 28121, + 28120, + 28116, + 28112, + 28109, + 28108, + 28097, + 28096, + 28094, + 28089, + 28078, + 28077, + 28074, + 28072, + 28064, + 28059, + 28058, + 28054, + 28051, + 28045, + 28043, + 28036, + 28029, + 28028, + 28021, + 28020, + 28019, + 28005, + 27996, + 27994, + 27992, + 27984, + 27983, + 27979, + 27974, + 27972, + 27970, + 27967, + 27959, + 27958, + 27954, + 27952, + 27951, + 27944, + 27940, + 27939, + 27931, + 27918, + 27916, + 27912, + 27905, + 27902, + 27900, + 27887, + 27884, + 27876, + 27872, + 27869, + 27867, + 27863, + 27860, + 27859, + 27856, + 27850, + 27849, + 27838, + 27836, + 27833, + 27832, + 27830, + 27829, + 27828, + 27826, + 27822, + 27818, + 27817, + 27815, + 27803, + 27801, + 27792, + 27788, + 27786, + 27785, + 27783, + 27781, + 27775, + 27769, + 27767, + 27760, + 27756, + 27755, + 27745, + 27742, + 27741, + 27735, + 27733, + 27729, + 27721, + 27720, + 27715, + 27714, + 27713, + 27712, + 27705, + 27703, + 27702, + 27700, + 27698, + 27694, + 27693, + 27690, + 27689, + 27688, + 27687, + 27680, + 27677, + 27672, + 27669, + 27663, + 27662, + 27637, + 27636, + 27631, + 27630, + 27626, + 27624, + 27622, + 27621, + 27617, + 27608, + 27602, + 27599, + 27597, + 27593, + 27588, + 27587, + 27586, + 27584, + 27581, + 27575, + 27566, + 27564, + 27563, + 27556, + 27548, + 27537, + 27533, + 27532, + 27525, + 27512, + 27510, + 27507, + 27501, + 27493, + 27476, + 27475, + 27471, + 27470, + 27465, + 27464, + 27455, + 27454, + 27449, + 27445, + 27438, + 27436, + 27433, + 27424, + 27410, + 27408, + 27398, + 27397, + 27395, + 27391, + 27381, + 27373, + 27368, + 27366, + 27364, + 27358, + 27355, + 27340, + 27331, + 27330, + 27323, + 27313, + 27310, + 27300, + 27298, + 27291, + 27290, + 27289, + 27286, + 27285, + 27280, + 27274, + 27270, + 27268, + 27259, + 27258, + 27249, + 27237, + 27232, + 27230, + 27228, + 27227, + 27223, + 27221, + 27212, + 27202, + 27196, + 27192, + 27175, + 27174, + 27172, + 27169, + 27157, + 27148, + 27147, + 27144, + 27139, + 27118, + 27104, + 27101, + 27100, + 27098, + 27094, + 27089, + 27088, + 27087, + 27076, + 27075, + 27062, + 27061, + 27057, + 27049, + 27048, + 27046, + 27042, + 27038, + 27036, + 27032, + 27029, + 27020, + 27018, + 27014, + 26988, + 26983, + 26979, + 26977, + 26970, + 26963, + 26960, + 26958, + 26955, + 26953, + 26951, + 26944, + 26941, + 26937, + 26934, + 26932, + 26926, + 26919, + 26916, + 26914, + 26906, + 26903, + 26899, + 26896, + 26891, + 26884, + 26882, + 26881, + 26876, + 26875, + 26861, + 26860, + 26859, + 26857, + 26847, + 26842, + 26841, + 26839, + 26830, + 26829, + 26814, + 26810, + 26806, + 26805, + 26803, + 26801, + 26794, + 26792, + 26786, + 26776, + 26775, + 26761, + 26760, + 26754, + 26753, + 26747, + 26746, + 26725, + 26724, + 26718, + 26714, + 26708, + 26706, + 26702, + 26699, + 26695, + 26692, + 26691, + 26690, + 26689, + 26685, + 26683, + 26681, + 26679, + 26678, + 26674, + 26673, + 26668, + 26666, + 26665, + 26664, + 26655, + 26654, + 26651, + 26649, + 26641, + 26639, + 26631, + 26628, + 26622, + 26621, + 26618, + 26596, + 26594, + 26587, + 26585, + 26579, + 26578, + 26575, + 26573, + 26563, + 26556, + 26541, + 26538, + 26536, + 26532, + 26529, + 26523, + 26522, + 26509, + 26508, + 26497, + 26491, + 26484, + 26482, + 26481, + 26477, + 26473, + 26466, + 26451, + 26448, + 26442, + 26439, + 26436, + 26432, + 26418, + 26417, + 26416, + 26413, + 26411, + 26409, + 26397, + 26395, + 26384, + 26376, + 26372, + 26369, + 26367, + 26364, + 26362, + 26356, + 26339, + 26338, + 26325, + 26318, + 26311, + 26304, + 26299, + 26296, + 26291, + 26283, + 26279, + 26275, + 26273, + 26270, + 26225, + 26211, + 26207, + 26205, + 26203, + 26201, + 26198, + 26189, + 26187, + 26183, + 26181, + 26179, + 26175, + 26172, + 26164, + 26163, + 26158, + 26157, + 26147, + 26141, + 26137, + 26134, + 26131, + 26130, + 26127, + 26121, + 26119, + 26116, + 26110, + 26107, + 26100, + 26095, + 26090, + 26089, + 26080, + 26078, + 26073, + 26067, + 26066, + 26062, + 26058, + 26057, + 26055, + 26050, + 26048, + 26040, + 26039, + 26036, + 26035, + 26033, + 26030, + 26021, + 26020, + 26013, + 26005, + 26002, + 25993, + 25989, + 25988, + 25987, + 25985, + 25980, + 25975, + 25969, + 25968, + 25958, + 25951, + 25950, + 25949, + 25944, + 25940, + 25929, + 25928, + 25921, + 25910, + 25896, + 25894, + 25887, + 25881, + 25879, + 25857, + 25853, + 25849, + 25841, + 25833, + 25832, + 25827, + 25823, + 25815, + 25799, + 25798, + 25794, + 25790, + 25768, + 25767, + 25763, + 25751, + 25744, + 25735, + 25731, + 25730, + 25724, + 25723, + 25716, + 25712, + 25710, + 25706, + 25687, + 25677, + 25667, + 25666, + 25659, + 25658, + 25644, + 25643, + 25642, + 25641, + 25636, + 25630, + 25618, + 25617, + 25611, + 25603, + 25594, + 25592, + 25591, + 25590, + 25588, + 25574, + 25573, + 25572, + 25569, + 25568, + 25567, + 25564, + 25542, + 25540, + 25537, + 25534, + 25533, + 25524, + 25523, + 25522, + 25515, + 25509, + 25502, + 25499, + 25493, + 25492, + 25483, + 25480, + 25474, + 25460, + 25455, + 25453, + 25451, + 25446, + 25443, + 25442, + 25439, + 25432, + 25428, + 25421, + 25418, + 25416, + 25399, + 25398, + 25397, + 25396, + 25395, + 25394, + 25390, + 25378, + 25374, + 25369, + 25364, + 25353, + 25348, + 25343, + 25338, + 25321, + 25314, + 25309, + 25304, + 25302, + 25301, + 25288, + 25286, + 25274, + 25268, + 25267, + 25258, + 25251, + 25244, + 25243, + 25241, + 25237, + 25235, + 25230, + 25228, + 25217, + 25215, + 25214, + 25211, + 25205, + 25204, + 25202, + 25197, + 25192, + 25191, + 25185, + 25184, + 25183, + 25180, + 25173, + 25168, + 25163, + 25160, + 25159, + 25158, + 25155, + 25153, + 25150, + 25147, + 25137, + 25129, + 25127, + 25115, + 25107, + 25104, + 25103, + 25102, + 25093, + 25091, + 25086, + 25082, + 25081, + 25080, + 25078, + 25074, + 25069, + 25067, + 25052, + 25043, + 25030, + 25029, + 25028, + 25025, + 25020, + 25019, + 25018, + 25017, + 25011, + 24995, + 24993, + 24983, + 24982, + 24980, + 24973, + 24963, + 24958, + 24957, + 24956, + 24946, + 24943, + 24939, + 24936, + 24932, + 24926, + 24905, + 24899, + 24893, +] diff --git a/tests/test_install_command.py b/tests/test_install_command.py new file mode 100644 index 0000000..90b1c88 --- /dev/null +++ b/tests/test_install_command.py @@ -0,0 +1,231 @@ +import shutil +import importlib +import subprocess +from pathlib import Path + +import utils +from recon.config import tool_paths + +recon_pipeline = importlib.import_module("recon-pipeline") + + +def test_install_masscan(): + masscan = Path(tool_paths.get("masscan")) + + utils.setup_install_test(masscan) + + rs = recon_pipeline.ReconShell() + + script_out, script_err = utils.run_cmd(rs, "install masscan") + + assert masscan.exists() is True + + +def test_install_amass(): + utils.setup_install_test() + + if not utils.is_kali(): + return True + + if shutil.which("amass") is not None: + subprocess.run("sudo apt remove amass -y".split()) + + rs = recon_pipeline.ReconShell() + + script_out, script_err = utils.run_cmd(rs, "install amass") + + assert shutil.which("amass") is not None + + +def test_install_pipenv(): + utils.setup_install_test() + + if not utils.is_kali(): + return True + + if shutil.which("pipenv") is not None: + subprocess.run("sudo apt remove pipenv -y".split()) + + rs = recon_pipeline.ReconShell() + + script_out, script_err = utils.run_cmd(rs, "install pipenv") + + assert shutil.which("pipenv") is not None + + +def test_install_luigi(): + utils.setup_install_test() + + if shutil.which("luigi") is not None: + subprocess.run("pipenv uninstall luigi".split()) + + rs = recon_pipeline.ReconShell() + + script_out, script_err = utils.run_cmd(rs, "install luigi") + + assert shutil.which("luigi") is not None + + +def test_install_aquatone(): + aquatone = Path(tool_paths.get("aquatone")) + + utils.setup_install_test(aquatone) + + rs = recon_pipeline.ReconShell() + + script_out, script_err = utils.run_cmd(rs, "install aquatone") + + assert aquatone.exists() is True + + +def test_install_gobuster(): + gobuster = Path(tool_paths.get("gobuster")) + + utils.setup_install_test(gobuster) + + assert shutil.which("go") is not None + + rs = recon_pipeline.ReconShell() + + script_out, script_err = utils.run_cmd(rs, "install gobuster") + + assert gobuster.exists() is True + + +def test_install_tkosubs(): + tkosubs = Path(tool_paths.get("tko-subs")) + + utils.setup_install_test(tkosubs) + + assert shutil.which("go") is not None + + rs = recon_pipeline.ReconShell() + + script_out, script_err = utils.run_cmd(rs, "install tko-subs") + + assert tkosubs.exists() is True + + +def test_install_subjack(): + subjack = Path(tool_paths.get("subjack")) + + utils.setup_install_test(subjack) + + assert shutil.which("go") is not None + + rs = recon_pipeline.ReconShell() + + script_out, script_err = utils.run_cmd(rs, "install subjack") + + assert subjack.exists() is True + + +def test_install_webanalyze(): + webanalyze = Path(tool_paths.get("webanalyze")) + + utils.setup_install_test(webanalyze) + + assert shutil.which("go") is not None + + rs = recon_pipeline.ReconShell() + + script_out, script_err = utils.run_cmd(rs, "install webanalyze") + + assert webanalyze.exists() is True + + +def test_install_corscanner(): + corscanner = Path(tool_paths.get("CORScanner")) + + utils.setup_install_test(corscanner) + + if corscanner.parent.exists(): + shutil.rmtree(corscanner.parent) + + rs = recon_pipeline.ReconShell() + + script_out, script_err = utils.run_cmd(rs, "install corscanner") + + assert corscanner.exists() is True + + +def test_update_corscanner(): + corscanner = Path(tool_paths.get("CORScanner")) + + utils.setup_install_test() + + if not corscanner.parent.exists(): + subprocess.run( + f"sudo git clone https://github.com/chenjj/CORScanner.git {corscanner.parent}".split() + ) + + rs = recon_pipeline.ReconShell() + + utils.run_cmd(rs, "install corscanner") + + assert corscanner.exists() is True + + +def test_install_recursive_gobuster(): + recursive_gobuster = Path(tool_paths.get("recursive-gobuster")) + + utils.setup_install_test(recursive_gobuster) + + if recursive_gobuster.parent.exists(): + shutil.rmtree(recursive_gobuster.parent) + + rs = recon_pipeline.ReconShell() + + utils.run_cmd(rs, "install recursive-gobuster") + + assert recursive_gobuster.exists() is True + + +def test_update_recursive_gobuster(): + recursive_gobuster = Path(tool_paths.get("recursive-gobuster")) + + utils.setup_install_test() + + if not recursive_gobuster.parent.exists(): + subprocess.run( + f"sudo git clone https://github.com/epi052/recursive-gobuster.git {recursive_gobuster.parent}".split() + ) + + rs = recon_pipeline.ReconShell() + + utils.run_cmd(rs, "install recursive-gobuster") + + assert recursive_gobuster.exists() is True + + +def test_install_luigi_service(): + luigi_service = Path("/lib/systemd/system/luigid.service") + + utils.setup_install_test(luigi_service) + + proc = subprocess.run("systemctl is-enabled luigid.service".split(), stdout=subprocess.PIPE) + + if proc.stdout.decode().strip() == "enabled": + subprocess.run("systemctl disable luigid.service".split()) + + proc = subprocess.run("systemctl is-active luigid.service".split(), stdout=subprocess.PIPE) + + if proc.stdout.decode().strip() == "active": + subprocess.run("systemctl stop luigid.service".split()) + + if Path("/usr/local/bin/luigid").exists(): + Path("/usr/local/bin/luigid").unlink() + + rs = recon_pipeline.ReconShell() + + utils.run_cmd(rs, "install luigi-service") + + assert Path("/lib/systemd/system/luigid.service").exists() + + proc = subprocess.run("systemctl is-enabled luigid.service".split(), stdout=subprocess.PIPE) + assert proc.stdout.decode().strip() == "enabled" + + proc = subprocess.run("systemctl is-active luigid.service".split(), stdout=subprocess.PIPE) + assert proc.stdout.decode().strip() == "active" + + assert Path("/usr/local/bin/luigid").exists() diff --git a/tests/utils.py b/tests/utils.py new file mode 100644 index 0000000..c004ef9 --- /dev/null +++ b/tests/utils.py @@ -0,0 +1,67 @@ +import sys +import subprocess +from pathlib import Path +from contextlib import redirect_stdout, redirect_stderr + +from cmd2.utils import StdSim + + +def is_kali(): + return any( + [ + "kali" in x + for x in subprocess.run("cat /etc/lsb-release".split(), stdout=subprocess.PIPE) + .stdout.decode() + .split() + ] + ) + + +def normalize(block): + """ Normalize a block of text to perform comparison. + Strip newlines from the very beginning and very end Then split into separate lines and strip trailing whitespace + from each line. + """ + assert isinstance(block, str) + block = block.strip("\n") + return [line.rstrip() for line in block.splitlines()] + + +def run_cmd(app, cmd): + """ Clear out and err StdSim buffers, run the command, and return out and err """ + saved_sysout = sys.stdout + sys.stdout = app.stdout + + # This will be used to capture app.stdout and sys.stdout + copy_cmd_stdout = StdSim(app.stdout) + + # This will be used to capture sys.stderr + copy_stderr = StdSim(sys.stderr) + + try: + app.stdout = copy_cmd_stdout + with redirect_stdout(copy_cmd_stdout): + with redirect_stderr(copy_stderr): + app.onecmd_plus_hooks(cmd) + finally: + app.stdout = copy_cmd_stdout.inner_stream + sys.stdout = saved_sysout + + out = copy_cmd_stdout.getvalue() + err = copy_stderr.getvalue() + return normalize(out), normalize(err) + + +def setup_install_test(tool=None): + tools = Path.home() / ".cache" / ".tool-dict.pkl" + + try: + tools.unlink() + except FileNotFoundError: + pass + + if tool is not None: + try: + tool.unlink() + except FileNotFoundError: + pass