Spaces:
Runtime error
Runtime error
ashutosh1919
commited on
Commit
·
4da8a9d
1
Parent(s):
2b9363f
Added code to generate data and train model
Browse files- .DS_Store +0 -0
- TrainPerceptron.ipynb +348 -0
- data/sample_space_qubits_4_fweight_626.txt +0 -0
- data/train_space_qubits_4_fweight_626.txt +3050 -0
- quantum_perceptron/train/__init__.py +2 -0
- quantum_perceptron/train/data_gen.py +90 -0
- quantum_perceptron/train/training.py +164 -0
- quantum_perceptron/utils/__init__.py +1 -0
- quantum_perceptron/utils/data_utils.py +42 -1
- quantum_perceptron/utils/plot_utils.py +41 -0
- requirements.txt +2 -1
.DS_Store
ADDED
Binary file (6.15 kB). View file
|
|
TrainPerceptron.ipynb
ADDED
@@ -0,0 +1,348 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"id": "9f3fb515-747d-4e93-bf07-de5553a6e958",
|
7 |
+
"metadata": {
|
8 |
+
"tags": []
|
9 |
+
},
|
10 |
+
"outputs": [],
|
11 |
+
"source": [
|
12 |
+
"import numpy as np\n",
|
13 |
+
"from quantum_perceptron.utils import plot_img_from_data, get_vector_from_int, get_int_from_vector\n",
|
14 |
+
"from quantum_perceptron.train import generate_dataset, PerceptronTrainer\n",
|
15 |
+
"from quantum_perceptron import Perceptron"
|
16 |
+
]
|
17 |
+
},
|
18 |
+
{
|
19 |
+
"cell_type": "markdown",
|
20 |
+
"id": "681740ed-ea82-428e-a5c8-9d44cfe92b2e",
|
21 |
+
"metadata": {},
|
22 |
+
"source": [
|
23 |
+
"# Generate Dataset\n",
|
24 |
+
"\n",
|
25 |
+
"Generate dataset to train 4 qubit perceptron."
|
26 |
+
]
|
27 |
+
},
|
28 |
+
{
|
29 |
+
"cell_type": "code",
|
30 |
+
"execution_count": 2,
|
31 |
+
"id": "eba68da3-013e-4501-bdaa-67c82cef393d",
|
32 |
+
"metadata": {
|
33 |
+
"tags": []
|
34 |
+
},
|
35 |
+
"outputs": [
|
36 |
+
{
|
37 |
+
"data": {
|
38 |
+
"image/png": "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\n",
|
39 |
+
"text/plain": [
|
40 |
+
"<Figure size 640x480 with 1 Axes>"
|
41 |
+
]
|
42 |
+
},
|
43 |
+
"metadata": {},
|
44 |
+
"output_type": "display_data"
|
45 |
+
}
|
46 |
+
],
|
47 |
+
"source": [
|
48 |
+
"fixed_weight = 626\n",
|
49 |
+
"num_qubits = 4\n",
|
50 |
+
"plot_img_from_data(fixed_weight, num_qubits)"
|
51 |
+
]
|
52 |
+
},
|
53 |
+
{
|
54 |
+
"cell_type": "code",
|
55 |
+
"execution_count": 3,
|
56 |
+
"id": "18e6cc2b-51be-4d83-8e3a-4bbd4078bcf7",
|
57 |
+
"metadata": {
|
58 |
+
"tags": []
|
59 |
+
},
|
60 |
+
"outputs": [
|
61 |
+
{
|
62 |
+
"name": "stderr",
|
63 |
+
"output_type": "stream",
|
64 |
+
"text": [
|
65 |
+
"100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 65536/65536 [19:38<00:00, 55.59it/s]"
|
66 |
+
]
|
67 |
+
},
|
68 |
+
{
|
69 |
+
"name": "stdout",
|
70 |
+
"output_type": "stream",
|
71 |
+
"text": [
|
72 |
+
"Number of positive samples: 274\n",
|
73 |
+
"Number of negative samples: 65262\n",
|
74 |
+
"Saved data to ./data/sample_space_qubits_4_fweight_626.txt\n",
|
75 |
+
"Saved training data to ./data/train_space_qubits_4_fweight_626.txt\n"
|
76 |
+
]
|
77 |
+
},
|
78 |
+
{
|
79 |
+
"name": "stderr",
|
80 |
+
"output_type": "stream",
|
81 |
+
"text": [
|
82 |
+
"\n"
|
83 |
+
]
|
84 |
+
}
|
85 |
+
],
|
86 |
+
"source": [
|
87 |
+
"generate_dataset(num_qubits=num_qubits, fixed_weight=fixed_weight)"
|
88 |
+
]
|
89 |
+
},
|
90 |
+
{
|
91 |
+
"cell_type": "markdown",
|
92 |
+
"id": "ecd46307-eb53-46b4-809a-4493b1661d62",
|
93 |
+
"metadata": {},
|
94 |
+
"source": [
|
95 |
+
"# Perceptron Training\n",
|
96 |
+
"\n",
|
97 |
+
"Train generated dataset with 4 qubit perceptron. We will initialize random weight and will train perceptron so that it gradually updates the weight to the `fixed_weight` with which the dataset is generated."
|
98 |
+
]
|
99 |
+
},
|
100 |
+
{
|
101 |
+
"cell_type": "code",
|
102 |
+
"execution_count": 4,
|
103 |
+
"id": "b6081742-8913-4d46-a6bc-d62bc2eb715b",
|
104 |
+
"metadata": {
|
105 |
+
"tags": []
|
106 |
+
},
|
107 |
+
"outputs": [
|
108 |
+
{
|
109 |
+
"name": "stderr",
|
110 |
+
"output_type": "stream",
|
111 |
+
"text": [
|
112 |
+
"\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33mashutosh1919\u001b[0m. Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n"
|
113 |
+
]
|
114 |
+
},
|
115 |
+
{
|
116 |
+
"data": {
|
117 |
+
"text/html": [
|
118 |
+
"Tracking run with wandb version 0.14.2"
|
119 |
+
],
|
120 |
+
"text/plain": [
|
121 |
+
"<IPython.core.display.HTML object>"
|
122 |
+
]
|
123 |
+
},
|
124 |
+
"metadata": {},
|
125 |
+
"output_type": "display_data"
|
126 |
+
},
|
127 |
+
{
|
128 |
+
"data": {
|
129 |
+
"text/html": [
|
130 |
+
"Run data is saved locally in <code>/Users/ashutosh1919/Documents/IUB/QuantumProgramming/quantum-perceptron/wandb/run-20230415_181130-p665sffu</code>"
|
131 |
+
],
|
132 |
+
"text/plain": [
|
133 |
+
"<IPython.core.display.HTML object>"
|
134 |
+
]
|
135 |
+
},
|
136 |
+
"metadata": {},
|
137 |
+
"output_type": "display_data"
|
138 |
+
},
|
139 |
+
{
|
140 |
+
"data": {
|
141 |
+
"text/html": [
|
142 |
+
"Syncing run <strong><a href='https://wandb.ai/ashutosh1919/quantum-perceptron/runs/p665sffu' target=\"_blank\">vivid-lake-5</a></strong> to <a href='https://wandb.ai/ashutosh1919/quantum-perceptron' target=\"_blank\">Weights & Biases</a> (<a href='https://wandb.me/run' target=\"_blank\">docs</a>)<br/>"
|
143 |
+
],
|
144 |
+
"text/plain": [
|
145 |
+
"<IPython.core.display.HTML object>"
|
146 |
+
]
|
147 |
+
},
|
148 |
+
"metadata": {},
|
149 |
+
"output_type": "display_data"
|
150 |
+
},
|
151 |
+
{
|
152 |
+
"data": {
|
153 |
+
"text/html": [
|
154 |
+
" View project at <a href='https://wandb.ai/ashutosh1919/quantum-perceptron' target=\"_blank\">https://wandb.ai/ashutosh1919/quantum-perceptron</a>"
|
155 |
+
],
|
156 |
+
"text/plain": [
|
157 |
+
"<IPython.core.display.HTML object>"
|
158 |
+
]
|
159 |
+
},
|
160 |
+
"metadata": {},
|
161 |
+
"output_type": "display_data"
|
162 |
+
},
|
163 |
+
{
|
164 |
+
"data": {
|
165 |
+
"text/html": [
|
166 |
+
" View run at <a href='https://wandb.ai/ashutosh1919/quantum-perceptron/runs/p665sffu' target=\"_blank\">https://wandb.ai/ashutosh1919/quantum-perceptron/runs/p665sffu</a>"
|
167 |
+
],
|
168 |
+
"text/plain": [
|
169 |
+
"<IPython.core.display.HTML object>"
|
170 |
+
]
|
171 |
+
},
|
172 |
+
"metadata": {},
|
173 |
+
"output_type": "display_data"
|
174 |
+
}
|
175 |
+
],
|
176 |
+
"source": [
|
177 |
+
"trainer = PerceptronTrainer(\n",
|
178 |
+
" num_qubits=num_qubits,\n",
|
179 |
+
" fixed_weight=fixed_weight,\n",
|
180 |
+
" dataset_path=\"./data/train_space_qubits_4_fweight_626.txt\"\n",
|
181 |
+
")"
|
182 |
+
]
|
183 |
+
},
|
184 |
+
{
|
185 |
+
"cell_type": "code",
|
186 |
+
"execution_count": 5,
|
187 |
+
"id": "c07e3adf-43e8-4f70-9f53-4b7367d7df8f",
|
188 |
+
"metadata": {
|
189 |
+
"tags": []
|
190 |
+
},
|
191 |
+
"outputs": [
|
192 |
+
{
|
193 |
+
"name": "stdout",
|
194 |
+
"output_type": "stream",
|
195 |
+
"text": [
|
196 |
+
"Randomly initialized weight before training:\n"
|
197 |
+
]
|
198 |
+
},
|
199 |
+
{
|
200 |
+
"data": {
|
201 |
+
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAGFCAYAAAASI+9IAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAFx0lEQVR4nO3ZsWobSwCG0VnhVlIvrPd/MIN6a3vNre5XhDjZgMSG+JzWi/mr+RjNMuecAwDGGIe9BwDw9xAFACIKAEQUAIgoABBRACCiAEDetnz0eDzG7XYbx+NxLMvy6k0APNmcc6zrOi6Xyzgcvr4PbIrC7XYb1+v1aeMA2MfHx8d4f3//8u+bonA8Hvtnp9PpOcv4pfP5vPcEeKnPz8+9J3wr9/t9XK/XzvOvbIrC/z8ZnU4nUQCewlmyj989AXhoBiCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoA5G3vAfzcnHPvCfBSy7LsPYGfcFMAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAvP3Jx+fz+VU7+MGcc+8J386yLHtPgN25KQAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEDetnw053z1Dn5wv9/3ngD8g353nm+KwrquTxnDdufzee8JwD9oXddfni/L3HANeDwe43a7jePxOJZleepAAF5vzjnWdR2Xy2UcDl+/HGyKAgDfg4dmACIKAEQUAIgoABBRACCiAEBEAYD8B/mjS+1sJXdtAAAAAElFTkSuQmCC\n",
|
202 |
+
"text/plain": [
|
203 |
+
"<Figure size 640x480 with 1 Axes>"
|
204 |
+
]
|
205 |
+
},
|
206 |
+
"metadata": {},
|
207 |
+
"output_type": "display_data"
|
208 |
+
}
|
209 |
+
],
|
210 |
+
"source": [
|
211 |
+
"print(\"Randomly initialized weight before training:\")\n",
|
212 |
+
"plot_img_from_data(trainer.weight_variable, num_qubits)"
|
213 |
+
]
|
214 |
+
},
|
215 |
+
{
|
216 |
+
"cell_type": "code",
|
217 |
+
"execution_count": 6,
|
218 |
+
"id": "92be5fcf-e82a-45a6-8e26-3b5bb89101c7",
|
219 |
+
"metadata": {
|
220 |
+
"tags": []
|
221 |
+
},
|
222 |
+
"outputs": [
|
223 |
+
{
|
224 |
+
"name": "stderr",
|
225 |
+
"output_type": "stream",
|
226 |
+
"text": [
|
227 |
+
"100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:56<00:00, 26.25it/s]\n",
|
228 |
+
"100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:57<00:00, 26.03it/s]\n",
|
229 |
+
"100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:55<00:00, 26.41it/s]\n",
|
230 |
+
"100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:52<00:00, 27.15it/s]\n",
|
231 |
+
"100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:49<00:00, 27.81it/s]\n",
|
232 |
+
"100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:56<00:00, 26.14it/s]\n",
|
233 |
+
"100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:58<00:00, 25.78it/s]\n",
|
234 |
+
"100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:48<00:00, 27.99it/s]\n",
|
235 |
+
"100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3050/3050 [01:54<00:00, 26.72it/s]\n",
|
236 |
+
" 32%|████████████████████████████████████▋ | 963/3050 [00:35<01:17, 26.77it/s]"
|
237 |
+
]
|
238 |
+
},
|
239 |
+
{
|
240 |
+
"name": "stdout",
|
241 |
+
"output_type": "stream",
|
242 |
+
"text": [
|
243 |
+
"Training converged at step: 28414\n"
|
244 |
+
]
|
245 |
+
},
|
246 |
+
{
|
247 |
+
"name": "stderr",
|
248 |
+
"output_type": "stream",
|
249 |
+
"text": [
|
250 |
+
"\n"
|
251 |
+
]
|
252 |
+
}
|
253 |
+
],
|
254 |
+
"source": [
|
255 |
+
"trainer.train(num_epochs=10)"
|
256 |
+
]
|
257 |
+
},
|
258 |
+
{
|
259 |
+
"cell_type": "code",
|
260 |
+
"execution_count": 7,
|
261 |
+
"id": "84c72b42-e18c-456f-b5a4-f41b577cb50b",
|
262 |
+
"metadata": {
|
263 |
+
"tags": []
|
264 |
+
},
|
265 |
+
"outputs": [
|
266 |
+
{
|
267 |
+
"name": "stdout",
|
268 |
+
"output_type": "stream",
|
269 |
+
"text": [
|
270 |
+
"Final weight after training:\n"
|
271 |
+
]
|
272 |
+
},
|
273 |
+
{
|
274 |
+
"data": {
|
275 |
+
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAGFCAYAAAASI+9IAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAF2UlEQVR4nO3ZwWrqWgCG0Z3iVJ1Lff8HK/gAZu6+g0u/UT0VTtv04FpTg/wEyUfcy5xzDgAYY7xsPQCA30MUAIgoABBRACCiAEBEAYCIAgDZPXLR7XYbl8tl7Pf7sSzLd28C4IvNOce6ruN0Oo2Xl/vvAw9F4XK5jPP5/GXjANjG29vbeH19vfv5Q1HY7/d92eFw+JplAPyY6/U6zudzz/N7HorC+19Gh8NBFAD+YZ8dAThoBiCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAILutB8BvsSzL1hOeypxz6wl8wJsCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAyG7rAXxsWZatJ8C38hv/nbwpABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQHZbD+Bjc86tJzydZVm2nvBU/MZ/1vV6Hcfj8dPrvCkAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBARAGAiAIAEQUAIgoARBQAiCgAEFEAIKIAQEQBgIgCABEFACIKAEQUAIgoABBRACCiAEBEAYCIAgARBQAiCgBEFACIKAAQUQAgogBAdo9cNOccY4xxvV6/dQzwPDxPftb7/X5/nt/zUBTWdR1jjHE+n/9yFsD/jsfj1hOe0rquf7z3y/wsG2OM2+02LpfL2O/3Y1mWLx0IwPebc451XcfpdBovL/dPDh6KAgDPwUEzABEFACIKAEQUAIgoABBRACCiAED+A+lCVKELRqQ6AAAAAElFTkSuQmCC\n",
|
276 |
+
"text/plain": [
|
277 |
+
"<Figure size 640x480 with 1 Axes>"
|
278 |
+
]
|
279 |
+
},
|
280 |
+
"metadata": {},
|
281 |
+
"output_type": "display_data"
|
282 |
+
}
|
283 |
+
],
|
284 |
+
"source": [
|
285 |
+
"print(\"Final weight after training:\")\n",
|
286 |
+
"plot_img_from_data(trainer.weight_variable, num_qubits)"
|
287 |
+
]
|
288 |
+
},
|
289 |
+
{
|
290 |
+
"cell_type": "code",
|
291 |
+
"execution_count": 11,
|
292 |
+
"id": "fbecdf4f-68c8-4d4d-9a6f-9ef66bd182f0",
|
293 |
+
"metadata": {
|
294 |
+
"tags": []
|
295 |
+
},
|
296 |
+
"outputs": [
|
297 |
+
{
|
298 |
+
"data": {
|
299 |
+
"text/plain": [
|
300 |
+
"Text(0, 0.5, 'Fidelity Similarity with Actual Weight')"
|
301 |
+
]
|
302 |
+
},
|
303 |
+
"execution_count": 11,
|
304 |
+
"metadata": {},
|
305 |
+
"output_type": "execute_result"
|
306 |
+
},
|
307 |
+
{
|
308 |
+
"data": {
|
309 |
+
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGwCAYAAABVdURTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABPzklEQVR4nO3deVxU5f4H8M/swzqA7IjgiuW+ImYuSaKVS9rNW91c6trV8lph3qRUyq6iXrcWyza17i0tu2pW5u96UW6aprngkoobhgugiDCssz6/P5DRiaUZmGFg+LxfL14y5zznzPecgPn0PM85RyKEECAiIiJyE1JXF0BERETkSAw3RERE5FYYboiIiMitMNwQERGRW2G4ISIiIrfCcENERERuheGGiIiI3Irc1QU0NLPZjKtXr8LHxwcSicTV5RAREZENhBAoKipCeHg4pNLa+2aaXbi5evUqIiMjXV0GERER1cGlS5fQsmXLWts0u3Dj4+MDoOLk+Pr6urgaIiIisoVWq0VkZKTlc7w2zS7cVA5F+fr6MtwQERE1MbZMKeGEYiIiInIrDDdERETkVhhuiIiIyK0w3BAREZFbYbghIiIit8JwQ0RERG6F4YaIiIjcCsMNERERuRWGGyIiInIrDDdERETkVlwabn744QeMHDkS4eHhkEgk2LJly+9uk5aWhp49e0KlUqFdu3ZYt26d0+skIiKipsOl4aakpATdunXDqlWrbGqfmZmJBx98EEOGDEF6ejpeeOEF/PnPf8b//d//OblSIiIiaipc+uDMESNGYMSIETa3X716NVq3bo1ly5YBAO666y7s2bMHK1asQEJCgrPKJCIiIhuU6U24UaKDUi5FsI/aZXU0qTk3+/btQ3x8vNWyhIQE7Nu3r8ZtdDodtFqt1RcRERE53g9nr2PA4l2Y9q/DLq2jSYWbnJwchISEWC0LCQmBVqtFWVlZtdukpKRAo9FYviIjIxuiVCIiInKRJhVu6iIpKQmFhYWWr0uXLrm6JCIiInIil865sVdoaChyc3OtluXm5sLX1xceHh7VbqNSqaBSqRqiPCIiImoEmlTPTVxcHFJTU62W7dixA3FxcS6qiIiIiBobl4ab4uJipKenIz09HUDFpd7p6enIysoCUDGkNGHCBEv7qVOn4sKFC/jb3/6G06dP491338WXX36JF1980RXlExERUSPk0nBz8OBB9OjRAz169AAAJCYmokePHpg3bx4AIDs72xJ0AKB169b47rvvsGPHDnTr1g3Lli3DRx99xMvAiYiIyMKlc24GDx4MIUSN66u7+/DgwYNx5MgRJ1ZFRERETVmTmnNDRERE9HsYboiIiMitMNwQERGRW2G4ISIiIrfCcENERERuheGGiIiI3ArDDREREbkVhhsiIiJyKww3RERE5FYYboiIiMitMNwQERGRQ9TyRKUGxXBDREREDiVx8fsz3BAREZFbYbghIiIit8JwQ0RERG6F4YaIiIjcCsMNERERuRWGGyIiInIrDDdERETkVhhuiIiIyK0w3BAREZFbYbghIiIit8JwQ0RERG6F4YaIiIjcCsMNERERuRWGGyIiInIrDDdERETkVhhuiIiIyK0w3BAREZFbYbghIiIiBxGuLgAAww0RERE5mETi2vdnuCEiIiK3wnBDREREboXhhoiIiNwKww0RERG5FbvDzaeffgqdTldluV6vx6effuqQooiIiIjqyu5wM3nyZBQWFlZZXlRUhMmTJzukKCIiIqK6sjvcCCEgqeYar8uXL0Oj0TikKCIiIqK6ktvasEePHpBIJJBIJBg6dCjk8tubmkwmZGZmYvjw4U4pkoiIiMhWNoebMWPGAADS09ORkJAAb29vyzqlUono6GiMGzfO4QUSERER2cPmcJOcnAwAiI6Oxvjx46FWq51WFBEREVFd2RxuKk2cOBFAxdVR165dg9lstlrfqlUrx1RGREREVAd2h5uzZ8/iqaeewt69e62WV040NplMDiuOiIiIyF52h5tJkyZBLpfj22+/RVhYWLVXThERERG5it3hJj09HYcOHULHjh2dUQ8RERFRvdh9n5u7774beXl5zqiFiIiIqN5sCjdardbytXjxYvztb39DWloabty4YbVOq9U6u14iIiKiWtk0LOXn52c1t0YIgaFDh1q14YRiIiKi5k0IV1dQwaZws2vXLmfXQURERG5CAtdebGRTuBk0aJCz6yAiIiJyCLuvljp27Fi1yyUSCdRqNVq1agWVSlXvwoiIiIjqwu5w071791rvbaNQKDB+/Hi8//77fEQDERERNTi7LwXfvHkz2rdvjw8++ADp6elIT0/HBx98gJiYGHz++ef4+OOPsXPnTsyZM8cZ9RIRERHVyu6emwULFuDNN99EQkKCZVmXLl3Q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/fs7vkIiIiJqMMINJt3YHG40Gg2AioP28fGBh4eHZZ1SqUS/fv0wZcoUx1dIREREDaYy2jThjhvbw83atWsBVDxbatasWfD09HRaUURERORaTflScLvn3EyYMAFXrlypsvzs2bO4ePGiI2oiIiIiV2n6o1L2h5tJkyZh7969VZbv378fkyZNckRNRERE5GJNt9+mDuHmyJEjuOeee6os79evH9LT0x1RExEREbmIOzxbyu5wI5FIUFRUVGV5YWEhTCaTQ4oiIiIi12rCU27sDzcDBw5ESkqKVZAxmUxISUnBgAEDHFocERERNSw3uBLc/scvLF68GAMHDkRMTAzuvfdeAMDu3buh1Wqxc+dOhxdIREREDed2tmm6XTd299zcfffdOHbsGB599FFcu3YNRUVFmDBhAk6fPo3OnTs7o0YiIiIim9XpMd7h4eFYuHCh1bKCggK88847mD59ukMKIyIiooZXOSzVrObc/FZqaioef/xxhIWFITk52RE1ERERkYs14WxTt3Bz6dIlzJ8/H61bt8awYcMAAJs3b0ZOTo7d+1q1ahWio6OhVqsRGxuLAwcO1Nq+oKAAzz33HMLCwqBSqdChQwds27atLodBREREv9GsLgU3GAzYuHEjEhISEBMTg/T0dPzjH/+AVCrFnDlzMHz4cCgUCrve/IsvvkBiYiKSk5Nx+PBhdOvWDQkJCbh27Vq17fV6Pe6//35cvHgRX331FTIyMvDhhx8iIiLCrvclIiKi2jXlYSmb59xERESgY8eO+NOf/oQNGzbA398fAPDYY4/V+c2XL1+OKVOmYPLkyQCA1atX47vvvsOaNWswe/bsKu3XrFmD/Px87N271xKkoqOja30PnU4HnU5nea3VautcLxERkbtzh0vBbe65MRqNkEgkkEgkkMlk9X5jvV6PQ4cOIT4+/nYxUini4+Oxb9++arfZunUr4uLi8NxzzyEkJASdO3fGwoULa715YEpKCjQajeUrMjKy3rUTERG5O0kTnnVjc7i5evUqnnnmGaxfvx6hoaEYN24cNm/eXOenhubl5cFkMiEkJMRqeUhISI1zdy5cuICvvvoKJpMJ27Ztw9y5c7Fs2TL8/e9/r/F9kpKSUFhYaPm6dOlSneolIiJqDtyg48b2cKNWq/HEE09g586dOH78OO666y7MmDEDRqMRCxYswI4dO5z++AWz2Yzg4GB88MEH6NWrF8aPH49XX30Vq1evrnEblUoFX19fqy8iIiKqwa1xqaY856ZOV0u1bdsWf//73/Hrr7/iu+++g06nw0MPPVSlF6Y2gYGBkMlkyM3NtVqem5uL0NDQarcJCwtDhw4drIbF7rrrLuTk5ECv19flUIiIiKgazS7cWDaWSjFixAh89dVXuHz5Ml555RWbt1UqlejVqxdSU1Mty8xmM1JTUxEXF1ftNvfccw/OnTsHs9lsWXbmzBmEhYVBqVTW/UCIiIgIQDMblvo9QUFBSExMtGubxMREfPjhh/jkk09w6tQpTJs2DSUlJZarpyZMmICkpCRL+2nTpiE/Px/PP/88zpw5g++++w4LFy7Ec88956jDICIiIjTtCcV1evyCo4wfPx7Xr1/HvHnzkJOTg+7du2P79u2W4a2srCxIpbfzV2RkJP7v//4PL774Irp27YqIiAg8//zzePnll111CERERG7FYKrou5FKm264kQjhDle0206r1UKj0aCwsJCTi4mIiH5j2X8y8PbOc3g8thUWPtzF1eVY2PP57bBhKSIiImrabhTrsPHgZQBAx1AfF1dTdy4dliIiIiLXMprMOJmtReqpa9jwcxZytToEeisxulvTfbSR3eHGZDJh3bp1SE1NxbVr16yuXAKAnTt3Oqw4IiIichyjyYxLN8twMa8Ex68U4kBmPo5eKkCRzmhpE+qrxvtP9oLG077nRTYmdoeb559/HuvWrcODDz6Izp071/kOxUREROQcxTojLlwvxpncYpzO1uJCXgnO5BbhakEZzNXMtPVSyhDXNhDDOoVgZNdweCjr/5glV7I73GzYsAFffvklHnjgAWfUQ0RERDYoN5iQlV+KC9dLkJFThLPXinCloAyX8kuRV1zzjW1VcimiW3ihXYg3erbyR59of9wd5gu5zH2m4dodbpRKJdq1a+eMWoiIiKgaBpMZxy4X4ODFm/jlqhanc7Q4d6242l6YSoHeSrQN8sZdYb5oF+yNtkHeaBPkhSBvVZO+zNsWdoebmTNn4s0338Q777zDISkiIiInEUIg9dQ1fHHwEvaey0OJvurzG31UckQHeqFdsDc6hvogMsATkf6eaNXCExqPpjtnpr5sCjdjx461er1z5058//336NSpExQK65O3adMmx1VHRETUDBlMZry08Si+Tr9qWearliO2TQt0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IOTk5FgFHEfem+ann36yfG80GnHo0CHcddddACo+zH/55RdER0ejXbt2Vl/2BBpfX1+Eh4dbXa4NAD/++CPuvvvueh/D3XffjZKSEstrhUIBk8lk1aZnz57IyMiochzt2rWz6vG683xUvq48H5XHMn78eHz44Yf44osv8O9//xv5+fn1PgYid8WeG6JmrEuXLnjiiSfw1ltvWS0fPHgwrl+/jiVLluCRRx7B9u3b8f3338PX19ch77tq1Sq0b98ed911F1asWIGbN2/iqaeeAgA899xz+PDDD/HYY4/hb3/7GwICAnDu3Dls2LABH330EWQymc3vM2vWLCQnJ6Nt27bo3r071q5di/T0dHz22Wc27+PGjRv4wx/+gKeeegpdu3aFj48PDh48iCVLlmD06NGWdtHR0UhNTcU999wDlUoFf39/zJs3Dw899BBatWqFRx55BFKpFEePHsWJEyfw97//3bLtxo0b0bt3bwwYMACfffYZDhw4gI8//hgAsHz5coSFhaFHjx6QSqXYuHEjQkND4efnZ/MxEDU37Lkhaubmz59fZdjorrvuwrvvvotVq1ahW7duOHDgQLVXEtXVokWLsGjRInTr1g179uzB1q1bERgYCACW3haTyYRhw4ahS5cueOGFF+Dn52fV22GLGTNmIDExETNnzkSXLl2wfft2bN26Fe3bt7d5H97e3oiNjcWKFSswcOBAdO7cGXPnzsWUKVPwzjvvWNotW7YMO3bsQGRkJHr06AEASEhIwLfffov//Oc/6NOnD/r164cVK1YgKirK6j1ef/11bNiwAV27dsWnn36K9evXW3qXfHx8sGTJEvTu3Rt9+vTBxYsXsW3bNrvPBVFzIhG/HVgnIqIGI5FIsHnzZowZM8bVpRC5DUZ/IiIicisMN0RERORWOKGYiMiFODOAyPHYc0NERERuheGGiIiI3ArDDREREbkVhhsiIiJyKww3RERE5FYYboiIiMitMNwQERGRW2G4ISIiIrfy/yibqvQU92b9AAAAAElFTkSuQmCC\n",
|
310 |
+
"text/plain": [
|
311 |
+
"<Figure size 640x480 with 1 Axes>"
|
312 |
+
]
|
313 |
+
},
|
314 |
+
"metadata": {},
|
315 |
+
"output_type": "display_data"
|
316 |
+
}
|
317 |
+
],
|
318 |
+
"source": [
|
319 |
+
"import matplotlib.pyplot as plt\n",
|
320 |
+
"\n",
|
321 |
+
"plt.plot(list(range(trainer.num_steps)), sorted(trainer.accumulate_loss))\n",
|
322 |
+
"plt.xlabel(\"Number of Steps\")\n",
|
323 |
+
"plt.ylabel(\"Fidelity Similarity with Actual Weight\")"
|
324 |
+
]
|
325 |
+
}
|
326 |
+
],
|
327 |
+
"metadata": {
|
328 |
+
"kernelspec": {
|
329 |
+
"display_name": "quantum",
|
330 |
+
"language": "python",
|
331 |
+
"name": "quantum"
|
332 |
+
},
|
333 |
+
"language_info": {
|
334 |
+
"codemirror_mode": {
|
335 |
+
"name": "ipython",
|
336 |
+
"version": 3
|
337 |
+
},
|
338 |
+
"file_extension": ".py",
|
339 |
+
"mimetype": "text/x-python",
|
340 |
+
"name": "python",
|
341 |
+
"nbconvert_exporter": "python",
|
342 |
+
"pygments_lexer": "ipython3",
|
343 |
+
"version": "3.8.16"
|
344 |
+
}
|
345 |
+
},
|
346 |
+
"nbformat": 4,
|
347 |
+
"nbformat_minor": 5
|
348 |
+
}
|
data/sample_space_qubits_4_fweight_626.txt
ADDED
The diff for this file is too large to render.
See raw diff
|
|
data/train_space_qubits_4_fweight_626.txt
ADDED
@@ -0,0 +1,3050 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
16510,0
|
2 |
+
25308,0
|
3 |
+
45953,0
|
4 |
+
55467,0
|
5 |
+
21450,0
|
6 |
+
35992,0
|
7 |
+
62900,0
|
8 |
+
61310,0
|
9 |
+
49398,0
|
10 |
+
18979,0
|
11 |
+
26701,0
|
12 |
+
20136,0
|
13 |
+
56331,0
|
14 |
+
37822,0
|
15 |
+
15238,0
|
16 |
+
2152,0
|
17 |
+
63244,0
|
18 |
+
5432,0
|
19 |
+
414,0
|
20 |
+
45749,0
|
21 |
+
3544,0
|
22 |
+
44728,0
|
23 |
+
21722,0
|
24 |
+
9115,0
|
25 |
+
3807,0
|
26 |
+
53311,0
|
27 |
+
3787,0
|
28 |
+
61967,0
|
29 |
+
4452,0
|
30 |
+
18964,0
|
31 |
+
59893,0
|
32 |
+
2811,0
|
33 |
+
29521,0
|
34 |
+
13007,0
|
35 |
+
29106,0
|
36 |
+
23412,0
|
37 |
+
27383,0
|
38 |
+
1983,0
|
39 |
+
165,0
|
40 |
+
40881,0
|
41 |
+
45338,0
|
42 |
+
22596,0
|
43 |
+
40586,0
|
44 |
+
19972,0
|
45 |
+
32613,0
|
46 |
+
4480,0
|
47 |
+
32157,1
|
48 |
+
36179,0
|
49 |
+
25427,0
|
50 |
+
22474,0
|
51 |
+
32506,0
|
52 |
+
8218,0
|
53 |
+
24510,0
|
54 |
+
4788,0
|
55 |
+
29550,0
|
56 |
+
11340,0
|
57 |
+
53316,0
|
58 |
+
13535,0
|
59 |
+
49919,0
|
60 |
+
32083,0
|
61 |
+
34868,0
|
62 |
+
1282,0
|
63 |
+
11218,0
|
64 |
+
40575,0
|
65 |
+
25965,0
|
66 |
+
17983,0
|
67 |
+
2715,0
|
68 |
+
57126,0
|
69 |
+
57445,0
|
70 |
+
45625,0
|
71 |
+
24164,0
|
72 |
+
51804,0
|
73 |
+
49918,0
|
74 |
+
4279,0
|
75 |
+
36585,0
|
76 |
+
42160,0
|
77 |
+
43284,0
|
78 |
+
19469,0
|
79 |
+
51251,0
|
80 |
+
51532,0
|
81 |
+
17484,0
|
82 |
+
37128,0
|
83 |
+
50201,0
|
84 |
+
60642,0
|
85 |
+
35273,0
|
86 |
+
58605,0
|
87 |
+
17795,0
|
88 |
+
56139,0
|
89 |
+
15794,0
|
90 |
+
52954,0
|
91 |
+
38035,0
|
92 |
+
37477,0
|
93 |
+
34246,0
|
94 |
+
64976,0
|
95 |
+
35765,0
|
96 |
+
57960,0
|
97 |
+
21443,0
|
98 |
+
31474,0
|
99 |
+
18717,0
|
100 |
+
54265,0
|
101 |
+
1736,0
|
102 |
+
30864,0
|
103 |
+
64128,0
|
104 |
+
880,1
|
105 |
+
44013,0
|
106 |
+
39883,0
|
107 |
+
24324,0
|
108 |
+
42620,0
|
109 |
+
23920,0
|
110 |
+
32829,0
|
111 |
+
57315,0
|
112 |
+
45024,0
|
113 |
+
30414,0
|
114 |
+
33029,0
|
115 |
+
31875,0
|
116 |
+
46026,0
|
117 |
+
9429,0
|
118 |
+
47739,0
|
119 |
+
13833,0
|
120 |
+
9974,0
|
121 |
+
41709,0
|
122 |
+
15136,0
|
123 |
+
63614,0
|
124 |
+
50054,0
|
125 |
+
1626,0
|
126 |
+
35713,0
|
127 |
+
44095,0
|
128 |
+
11994,0
|
129 |
+
33886,0
|
130 |
+
44770,0
|
131 |
+
10772,0
|
132 |
+
54569,0
|
133 |
+
24835,0
|
134 |
+
13961,0
|
135 |
+
55835,0
|
136 |
+
28015,0
|
137 |
+
58129,0
|
138 |
+
17213,0
|
139 |
+
55715,0
|
140 |
+
53067,0
|
141 |
+
42952,0
|
142 |
+
43528,0
|
143 |
+
45700,0
|
144 |
+
23626,0
|
145 |
+
21897,0
|
146 |
+
41051,0
|
147 |
+
11544,0
|
148 |
+
53766,0
|
149 |
+
48282,0
|
150 |
+
5175,0
|
151 |
+
30933,0
|
152 |
+
59537,0
|
153 |
+
2900,0
|
154 |
+
42353,0
|
155 |
+
98,1
|
156 |
+
33867,0
|
157 |
+
20365,0
|
158 |
+
23360,0
|
159 |
+
11315,0
|
160 |
+
4118,0
|
161 |
+
56267,0
|
162 |
+
14294,0
|
163 |
+
19621,0
|
164 |
+
1118,0
|
165 |
+
37389,0
|
166 |
+
33704,0
|
167 |
+
36049,0
|
168 |
+
17246,0
|
169 |
+
44603,0
|
170 |
+
33138,0
|
171 |
+
638,1
|
172 |
+
44092,0
|
173 |
+
14210,0
|
174 |
+
64895,0
|
175 |
+
49563,0
|
176 |
+
50963,0
|
177 |
+
4629,0
|
178 |
+
22156,0
|
179 |
+
26848,0
|
180 |
+
48255,0
|
181 |
+
1499,0
|
182 |
+
29132,0
|
183 |
+
40092,0
|
184 |
+
16573,0
|
185 |
+
62720,0
|
186 |
+
52657,0
|
187 |
+
62647,0
|
188 |
+
1779,0
|
189 |
+
55821,0
|
190 |
+
53784,0
|
191 |
+
56653,0
|
192 |
+
24126,0
|
193 |
+
56329,0
|
194 |
+
29820,0
|
195 |
+
51293,0
|
196 |
+
39659,0
|
197 |
+
40564,0
|
198 |
+
24198,0
|
199 |
+
36954,0
|
200 |
+
41059,0
|
201 |
+
26816,0
|
202 |
+
13292,0
|
203 |
+
64897,1
|
204 |
+
35736,0
|
205 |
+
51583,0
|
206 |
+
13226,0
|
207 |
+
54430,0
|
208 |
+
14199,0
|
209 |
+
57418,0
|
210 |
+
50372,0
|
211 |
+
37410,0
|
212 |
+
48606,0
|
213 |
+
21486,0
|
214 |
+
29042,0
|
215 |
+
58557,0
|
216 |
+
41101,0
|
217 |
+
36968,0
|
218 |
+
32025,0
|
219 |
+
18832,0
|
220 |
+
36991,0
|
221 |
+
42059,0
|
222 |
+
9590,0
|
223 |
+
8294,0
|
224 |
+
51460,0
|
225 |
+
58315,0
|
226 |
+
24547,0
|
227 |
+
51543,0
|
228 |
+
54181,0
|
229 |
+
45311,0
|
230 |
+
40415,0
|
231 |
+
30941,0
|
232 |
+
64679,0
|
233 |
+
54814,0
|
234 |
+
50421,0
|
235 |
+
1911,0
|
236 |
+
10063,0
|
237 |
+
3845,0
|
238 |
+
22911,0
|
239 |
+
24561,0
|
240 |
+
11491,0
|
241 |
+
39579,0
|
242 |
+
18445,0
|
243 |
+
9446,0
|
244 |
+
36472,0
|
245 |
+
36884,0
|
246 |
+
35529,0
|
247 |
+
11901,0
|
248 |
+
61777,0
|
249 |
+
48365,0
|
250 |
+
2737,0
|
251 |
+
52371,0
|
252 |
+
40292,0
|
253 |
+
2098,0
|
254 |
+
560,1
|
255 |
+
49264,0
|
256 |
+
30848,0
|
257 |
+
64336,0
|
258 |
+
37868,0
|
259 |
+
10586,0
|
260 |
+
40745,0
|
261 |
+
61606,0
|
262 |
+
31712,0
|
263 |
+
61350,0
|
264 |
+
56301,0
|
265 |
+
39778,0
|
266 |
+
21033,0
|
267 |
+
12156,0
|
268 |
+
58466,0
|
269 |
+
40560,0
|
270 |
+
176,0
|
271 |
+
18924,0
|
272 |
+
61657,0
|
273 |
+
36745,0
|
274 |
+
26186,0
|
275 |
+
18097,0
|
276 |
+
13761,0
|
277 |
+
8249,0
|
278 |
+
12545,0
|
279 |
+
52075,0
|
280 |
+
25068,0
|
281 |
+
40407,0
|
282 |
+
9330,0
|
283 |
+
22128,0
|
284 |
+
41922,0
|
285 |
+
63136,0
|
286 |
+
43585,0
|
287 |
+
23109,0
|
288 |
+
19425,0
|
289 |
+
31012,0
|
290 |
+
729,0
|
291 |
+
26901,0
|
292 |
+
50161,0
|
293 |
+
25803,0
|
294 |
+
47501,1
|
295 |
+
19259,0
|
296 |
+
2337,0
|
297 |
+
169,0
|
298 |
+
32043,0
|
299 |
+
575,0
|
300 |
+
7535,0
|
301 |
+
37289,0
|
302 |
+
25250,0
|
303 |
+
35402,0
|
304 |
+
7544,0
|
305 |
+
27554,0
|
306 |
+
6784,0
|
307 |
+
24490,0
|
308 |
+
26397,0
|
309 |
+
16908,0
|
310 |
+
26956,0
|
311 |
+
45525,0
|
312 |
+
49498,0
|
313 |
+
60148,0
|
314 |
+
24483,0
|
315 |
+
62396,0
|
316 |
+
19306,0
|
317 |
+
56985,0
|
318 |
+
16089,0
|
319 |
+
26874,0
|
320 |
+
54777,0
|
321 |
+
21981,0
|
322 |
+
56576,0
|
323 |
+
642,0
|
324 |
+
14868,0
|
325 |
+
30913,0
|
326 |
+
41584,0
|
327 |
+
40537,0
|
328 |
+
48377,0
|
329 |
+
45414,0
|
330 |
+
16446,0
|
331 |
+
61840,0
|
332 |
+
2084,0
|
333 |
+
3980,0
|
334 |
+
7753,0
|
335 |
+
18594,0
|
336 |
+
46280,0
|
337 |
+
62317,0
|
338 |
+
25220,0
|
339 |
+
12354,0
|
340 |
+
18557,0
|
341 |
+
52631,0
|
342 |
+
42830,0
|
343 |
+
41278,0
|
344 |
+
12388,0
|
345 |
+
33017,0
|
346 |
+
29077,0
|
347 |
+
44985,0
|
348 |
+
47759,0
|
349 |
+
15103,0
|
350 |
+
32900,0
|
351 |
+
33144,0
|
352 |
+
39094,0
|
353 |
+
9821,0
|
354 |
+
38946,0
|
355 |
+
59688,0
|
356 |
+
38534,0
|
357 |
+
33248,0
|
358 |
+
12743,0
|
359 |
+
7292,0
|
360 |
+
42399,0
|
361 |
+
11323,0
|
362 |
+
38984,0
|
363 |
+
2696,0
|
364 |
+
9233,0
|
365 |
+
19959,0
|
366 |
+
17502,0
|
367 |
+
17702,0
|
368 |
+
27282,0
|
369 |
+
20030,0
|
370 |
+
61575,0
|
371 |
+
62882,0
|
372 |
+
4873,0
|
373 |
+
59248,0
|
374 |
+
9580,0
|
375 |
+
32805,0
|
376 |
+
56417,0
|
377 |
+
54452,0
|
378 |
+
49888,0
|
379 |
+
64518,0
|
380 |
+
63956,0
|
381 |
+
29315,0
|
382 |
+
55998,0
|
383 |
+
20727,0
|
384 |
+
59384,0
|
385 |
+
5923,0
|
386 |
+
10741,0
|
387 |
+
64519,0
|
388 |
+
38954,0
|
389 |
+
55044,0
|
390 |
+
49691,0
|
391 |
+
43016,0
|
392 |
+
23664,0
|
393 |
+
35565,0
|
394 |
+
49143,0
|
395 |
+
64543,0
|
396 |
+
8629,0
|
397 |
+
13646,0
|
398 |
+
16080,0
|
399 |
+
646,0
|
400 |
+
64752,0
|
401 |
+
45120,0
|
402 |
+
6009,0
|
403 |
+
7600,0
|
404 |
+
46682,0
|
405 |
+
24030,0
|
406 |
+
53455,0
|
407 |
+
47880,0
|
408 |
+
23914,0
|
409 |
+
60850,0
|
410 |
+
26799,0
|
411 |
+
28146,0
|
412 |
+
65284,0
|
413 |
+
21128,0
|
414 |
+
31573,0
|
415 |
+
39499,0
|
416 |
+
3696,0
|
417 |
+
15393,0
|
418 |
+
52166,0
|
419 |
+
19507,0
|
420 |
+
35136,0
|
421 |
+
49062,0
|
422 |
+
60557,1
|
423 |
+
52933,0
|
424 |
+
14325,0
|
425 |
+
19336,0
|
426 |
+
36559,0
|
427 |
+
37265,0
|
428 |
+
63349,0
|
429 |
+
12108,0
|
430 |
+
34852,0
|
431 |
+
46491,0
|
432 |
+
12607,0
|
433 |
+
22107,0
|
434 |
+
50735,0
|
435 |
+
44512,0
|
436 |
+
24384,0
|
437 |
+
3798,0
|
438 |
+
18199,0
|
439 |
+
51535,0
|
440 |
+
34451,0
|
441 |
+
5872,0
|
442 |
+
46746,0
|
443 |
+
6579,0
|
444 |
+
65421,1
|
445 |
+
43970,0
|
446 |
+
41456,0
|
447 |
+
61432,0
|
448 |
+
46102,0
|
449 |
+
27905,0
|
450 |
+
22040,0
|
451 |
+
18275,0
|
452 |
+
18896,0
|
453 |
+
33560,0
|
454 |
+
2088,0
|
455 |
+
44472,0
|
456 |
+
41671,0
|
457 |
+
31028,0
|
458 |
+
8678,0
|
459 |
+
65371,0
|
460 |
+
56834,0
|
461 |
+
53839,0
|
462 |
+
19058,1
|
463 |
+
47223,0
|
464 |
+
44589,0
|
465 |
+
38093,0
|
466 |
+
52431,0
|
467 |
+
64278,0
|
468 |
+
50097,0
|
469 |
+
30360,0
|
470 |
+
18845,0
|
471 |
+
65496,0
|
472 |
+
46846,0
|
473 |
+
34207,0
|
474 |
+
25090,0
|
475 |
+
38197,0
|
476 |
+
12558,0
|
477 |
+
28991,0
|
478 |
+
16335,0
|
479 |
+
43681,0
|
480 |
+
20007,0
|
481 |
+
61020,0
|
482 |
+
60362,0
|
483 |
+
41958,0
|
484 |
+
30475,0
|
485 |
+
13951,0
|
486 |
+
29898,0
|
487 |
+
58146,0
|
488 |
+
57522,0
|
489 |
+
20853,0
|
490 |
+
30458,0
|
491 |
+
17010,1
|
492 |
+
16252,0
|
493 |
+
21581,0
|
494 |
+
14581,0
|
495 |
+
62855,0
|
496 |
+
10828,0
|
497 |
+
9147,0
|
498 |
+
9050,0
|
499 |
+
50287,0
|
500 |
+
43337,0
|
501 |
+
27268,0
|
502 |
+
34469,0
|
503 |
+
24337,0
|
504 |
+
10214,0
|
505 |
+
53797,0
|
506 |
+
54778,0
|
507 |
+
39452,0
|
508 |
+
57177,0
|
509 |
+
5766,0
|
510 |
+
54256,0
|
511 |
+
36770,0
|
512 |
+
27828,0
|
513 |
+
58786,0
|
514 |
+
31427,0
|
515 |
+
45017,0
|
516 |
+
47050,0
|
517 |
+
21910,0
|
518 |
+
37411,0
|
519 |
+
18629,0
|
520 |
+
50989,0
|
521 |
+
53071,0
|
522 |
+
38361,0
|
523 |
+
44559,0
|
524 |
+
9438,0
|
525 |
+
25133,0
|
526 |
+
6280,0
|
527 |
+
16818,0
|
528 |
+
33587,0
|
529 |
+
60330,0
|
530 |
+
2743,0
|
531 |
+
20885,0
|
532 |
+
56052,0
|
533 |
+
15202,0
|
534 |
+
8020,0
|
535 |
+
47122,0
|
536 |
+
50204,0
|
537 |
+
63406,0
|
538 |
+
40748,0
|
539 |
+
1457,0
|
540 |
+
65348,0
|
541 |
+
14776,0
|
542 |
+
27997,0
|
543 |
+
49368,0
|
544 |
+
49424,0
|
545 |
+
59446,0
|
546 |
+
45806,0
|
547 |
+
34221,0
|
548 |
+
55383,0
|
549 |
+
15722,0
|
550 |
+
55792,0
|
551 |
+
7677,0
|
552 |
+
59381,0
|
553 |
+
17057,0
|
554 |
+
52503,0
|
555 |
+
6735,0
|
556 |
+
7692,0
|
557 |
+
26594,0
|
558 |
+
25284,0
|
559 |
+
14932,0
|
560 |
+
44283,0
|
561 |
+
49349,0
|
562 |
+
56245,0
|
563 |
+
50442,0
|
564 |
+
52483,0
|
565 |
+
19932,0
|
566 |
+
10630,0
|
567 |
+
8976,0
|
568 |
+
56963,0
|
569 |
+
22134,0
|
570 |
+
4980,0
|
571 |
+
16180,0
|
572 |
+
30965,0
|
573 |
+
7782,0
|
574 |
+
34437,0
|
575 |
+
44267,0
|
576 |
+
27535,0
|
577 |
+
10024,0
|
578 |
+
35831,0
|
579 |
+
22462,0
|
580 |
+
31414,0
|
581 |
+
31650,0
|
582 |
+
11234,0
|
583 |
+
48409,0
|
584 |
+
30516,0
|
585 |
+
16758,0
|
586 |
+
15767,0
|
587 |
+
39031,0
|
588 |
+
62012,0
|
589 |
+
38019,0
|
590 |
+
16463,0
|
591 |
+
50225,0
|
592 |
+
11718,0
|
593 |
+
46347,0
|
594 |
+
44445,0
|
595 |
+
64099,0
|
596 |
+
22147,0
|
597 |
+
65222,0
|
598 |
+
17864,0
|
599 |
+
58027,0
|
600 |
+
42323,0
|
601 |
+
14576,0
|
602 |
+
42885,0
|
603 |
+
2435,0
|
604 |
+
25656,0
|
605 |
+
17900,0
|
606 |
+
26138,0
|
607 |
+
62548,0
|
608 |
+
7109,0
|
609 |
+
31420,0
|
610 |
+
41698,0
|
611 |
+
37854,0
|
612 |
+
16406,0
|
613 |
+
23870,0
|
614 |
+
40938,0
|
615 |
+
5238,0
|
616 |
+
64586,0
|
617 |
+
112,1
|
618 |
+
59371,0
|
619 |
+
53940,0
|
620 |
+
21332,0
|
621 |
+
56854,0
|
622 |
+
53658,0
|
623 |
+
37840,0
|
624 |
+
33563,0
|
625 |
+
65299,0
|
626 |
+
62776,0
|
627 |
+
27810,0
|
628 |
+
24318,0
|
629 |
+
40199,0
|
630 |
+
14280,0
|
631 |
+
11966,0
|
632 |
+
41190,0
|
633 |
+
6511,0
|
634 |
+
49051,0
|
635 |
+
63940,0
|
636 |
+
21750,0
|
637 |
+
40491,0
|
638 |
+
29149,0
|
639 |
+
38712,0
|
640 |
+
55090,0
|
641 |
+
60030,0
|
642 |
+
19120,0
|
643 |
+
1,0
|
644 |
+
4022,0
|
645 |
+
21891,0
|
646 |
+
8233,0
|
647 |
+
54641,0
|
648 |
+
39130,0
|
649 |
+
65102,0
|
650 |
+
58867,0
|
651 |
+
26012,0
|
652 |
+
27235,0
|
653 |
+
2641,0
|
654 |
+
9604,0
|
655 |
+
39084,0
|
656 |
+
14658,0
|
657 |
+
26831,0
|
658 |
+
12017,0
|
659 |
+
54367,0
|
660 |
+
57513,0
|
661 |
+
43275,0
|
662 |
+
27658,0
|
663 |
+
24783,0
|
664 |
+
17225,0
|
665 |
+
279,0
|
666 |
+
45249,0
|
667 |
+
32061,0
|
668 |
+
4526,0
|
669 |
+
1797,0
|
670 |
+
46606,0
|
671 |
+
42656,0
|
672 |
+
51324,0
|
673 |
+
64017,0
|
674 |
+
54190,0
|
675 |
+
58904,0
|
676 |
+
13609,0
|
677 |
+
43821,0
|
678 |
+
23884,0
|
679 |
+
48443,0
|
680 |
+
32670,0
|
681 |
+
5233,0
|
682 |
+
57505,0
|
683 |
+
49767,0
|
684 |
+
35841,0
|
685 |
+
19721,0
|
686 |
+
32981,0
|
687 |
+
58297,0
|
688 |
+
51156,0
|
689 |
+
37676,0
|
690 |
+
58663,0
|
691 |
+
16437,0
|
692 |
+
13203,0
|
693 |
+
32813,0
|
694 |
+
42068,0
|
695 |
+
53416,0
|
696 |
+
3532,0
|
697 |
+
59870,0
|
698 |
+
30509,0
|
699 |
+
3769,0
|
700 |
+
12627,0
|
701 |
+
32842,0
|
702 |
+
40080,0
|
703 |
+
61136,0
|
704 |
+
21087,0
|
705 |
+
40532,0
|
706 |
+
46262,0
|
707 |
+
32160,0
|
708 |
+
23216,0
|
709 |
+
14165,0
|
710 |
+
55915,0
|
711 |
+
44214,0
|
712 |
+
57434,0
|
713 |
+
46391,0
|
714 |
+
22424,0
|
715 |
+
46198,0
|
716 |
+
39376,0
|
717 |
+
55385,0
|
718 |
+
8479,0
|
719 |
+
23797,0
|
720 |
+
64353,0
|
721 |
+
60974,0
|
722 |
+
15216,0
|
723 |
+
26570,0
|
724 |
+
25493,0
|
725 |
+
23949,1
|
726 |
+
23946,0
|
727 |
+
34866,0
|
728 |
+
62066,0
|
729 |
+
20535,0
|
730 |
+
11798,0
|
731 |
+
19289,0
|
732 |
+
23703,0
|
733 |
+
22370,0
|
734 |
+
16862,0
|
735 |
+
48451,0
|
736 |
+
54654,0
|
737 |
+
22096,0
|
738 |
+
30032,0
|
739 |
+
27064,0
|
740 |
+
46266,0
|
741 |
+
54749,0
|
742 |
+
48570,0
|
743 |
+
42607,0
|
744 |
+
8633,0
|
745 |
+
20320,0
|
746 |
+
49144,0
|
747 |
+
45677,0
|
748 |
+
37817,0
|
749 |
+
62194,0
|
750 |
+
63642,0
|
751 |
+
57066,0
|
752 |
+
28543,0
|
753 |
+
45566,0
|
754 |
+
9715,0
|
755 |
+
44723,0
|
756 |
+
62849,0
|
757 |
+
35425,0
|
758 |
+
64082,0
|
759 |
+
22111,0
|
760 |
+
23822,0
|
761 |
+
23645,0
|
762 |
+
5861,0
|
763 |
+
9940,0
|
764 |
+
11852,0
|
765 |
+
26474,0
|
766 |
+
14624,0
|
767 |
+
14386,0
|
768 |
+
23159,0
|
769 |
+
3507,0
|
770 |
+
59187,0
|
771 |
+
43419,0
|
772 |
+
20117,0
|
773 |
+
34588,0
|
774 |
+
6286,0
|
775 |
+
63908,0
|
776 |
+
31317,0
|
777 |
+
65280,0
|
778 |
+
28373,0
|
779 |
+
59957,0
|
780 |
+
30060,0
|
781 |
+
59362,0
|
782 |
+
65412,0
|
783 |
+
38684,0
|
784 |
+
26170,0
|
785 |
+
19797,0
|
786 |
+
49259,0
|
787 |
+
30311,0
|
788 |
+
29530,0
|
789 |
+
61200,0
|
790 |
+
38827,0
|
791 |
+
51664,0
|
792 |
+
40217,0
|
793 |
+
2964,0
|
794 |
+
58623,0
|
795 |
+
37216,0
|
796 |
+
58244,0
|
797 |
+
52364,0
|
798 |
+
10660,0
|
799 |
+
60991,0
|
800 |
+
51276,0
|
801 |
+
44057,0
|
802 |
+
57851,0
|
803 |
+
29101,0
|
804 |
+
3039,0
|
805 |
+
8120,0
|
806 |
+
62155,0
|
807 |
+
49965,0
|
808 |
+
31072,0
|
809 |
+
4547,0
|
810 |
+
34732,0
|
811 |
+
18020,0
|
812 |
+
58457,0
|
813 |
+
2417,0
|
814 |
+
49001,0
|
815 |
+
53748,0
|
816 |
+
1009,0
|
817 |
+
2678,1
|
818 |
+
14826,0
|
819 |
+
47140,0
|
820 |
+
758,1
|
821 |
+
37968,0
|
822 |
+
48196,0
|
823 |
+
5403,0
|
824 |
+
40816,0
|
825 |
+
10707,0
|
826 |
+
49089,0
|
827 |
+
20734,0
|
828 |
+
43549,0
|
829 |
+
23009,0
|
830 |
+
54860,0
|
831 |
+
7467,0
|
832 |
+
52947,0
|
833 |
+
6811,0
|
834 |
+
22329,0
|
835 |
+
5123,0
|
836 |
+
22182,0
|
837 |
+
21801,0
|
838 |
+
30229,0
|
839 |
+
11770,0
|
840 |
+
53463,0
|
841 |
+
50513,0
|
842 |
+
54577,0
|
843 |
+
51329,0
|
844 |
+
18932,0
|
845 |
+
18981,0
|
846 |
+
58375,0
|
847 |
+
39468,0
|
848 |
+
64740,0
|
849 |
+
44650,0
|
850 |
+
39086,0
|
851 |
+
47115,0
|
852 |
+
2539,0
|
853 |
+
57325,0
|
854 |
+
48389,0
|
855 |
+
39044,0
|
856 |
+
57693,0
|
857 |
+
13176,0
|
858 |
+
44434,0
|
859 |
+
11092,0
|
860 |
+
53575,0
|
861 |
+
47529,0
|
862 |
+
14881,0
|
863 |
+
28503,0
|
864 |
+
16528,0
|
865 |
+
42587,0
|
866 |
+
42336,0
|
867 |
+
63770,0
|
868 |
+
34884,0
|
869 |
+
34141,0
|
870 |
+
31052,0
|
871 |
+
60960,0
|
872 |
+
42584,0
|
873 |
+
34470,0
|
874 |
+
12479,0
|
875 |
+
861,0
|
876 |
+
65138,0
|
877 |
+
30255,0
|
878 |
+
7846,0
|
879 |
+
6171,0
|
880 |
+
26350,0
|
881 |
+
28957,0
|
882 |
+
45290,0
|
883 |
+
31733,0
|
884 |
+
49609,0
|
885 |
+
30468,0
|
886 |
+
45568,0
|
887 |
+
10566,0
|
888 |
+
23279,0
|
889 |
+
45769,0
|
890 |
+
10767,0
|
891 |
+
18313,0
|
892 |
+
11860,0
|
893 |
+
3488,0
|
894 |
+
59967,0
|
895 |
+
42444,0
|
896 |
+
39945,0
|
897 |
+
14060,0
|
898 |
+
26205,0
|
899 |
+
13912,0
|
900 |
+
13123,0
|
901 |
+
30552,0
|
902 |
+
3277,0
|
903 |
+
30439,0
|
904 |
+
4605,0
|
905 |
+
44948,0
|
906 |
+
32405,0
|
907 |
+
31559,0
|
908 |
+
20298,0
|
909 |
+
5767,0
|
910 |
+
37987,0
|
911 |
+
24604,0
|
912 |
+
10895,0
|
913 |
+
55995,0
|
914 |
+
57902,0
|
915 |
+
32948,0
|
916 |
+
60869,0
|
917 |
+
15124,0
|
918 |
+
22670,0
|
919 |
+
33232,0
|
920 |
+
38991,0
|
921 |
+
8463,0
|
922 |
+
55319,0
|
923 |
+
9533,0
|
924 |
+
39314,0
|
925 |
+
19112,0
|
926 |
+
43287,0
|
927 |
+
9074,1
|
928 |
+
24834,0
|
929 |
+
33040,0
|
930 |
+
48070,0
|
931 |
+
39175,0
|
932 |
+
32131,0
|
933 |
+
5211,0
|
934 |
+
64693,0
|
935 |
+
4052,0
|
936 |
+
3182,0
|
937 |
+
32609,0
|
938 |
+
63790,0
|
939 |
+
17061,0
|
940 |
+
45209,0
|
941 |
+
14568,0
|
942 |
+
33581,0
|
943 |
+
22859,0
|
944 |
+
43271,0
|
945 |
+
16050,0
|
946 |
+
3611,0
|
947 |
+
49711,0
|
948 |
+
58430,0
|
949 |
+
61665,0
|
950 |
+
19351,0
|
951 |
+
53862,0
|
952 |
+
55423,0
|
953 |
+
8157,0
|
954 |
+
3763,0
|
955 |
+
50744,0
|
956 |
+
57273,0
|
957 |
+
52320,0
|
958 |
+
7095,0
|
959 |
+
21191,0
|
960 |
+
42650,0
|
961 |
+
41173,0
|
962 |
+
54405,0
|
963 |
+
35442,1
|
964 |
+
46912,0
|
965 |
+
20101,0
|
966 |
+
54445,0
|
967 |
+
44158,0
|
968 |
+
59680,0
|
969 |
+
28309,0
|
970 |
+
3585,0
|
971 |
+
44330,0
|
972 |
+
11625,0
|
973 |
+
54843,0
|
974 |
+
46723,0
|
975 |
+
50545,0
|
976 |
+
31014,0
|
977 |
+
14865,0
|
978 |
+
41873,0
|
979 |
+
30752,0
|
980 |
+
9299,0
|
981 |
+
37309,0
|
982 |
+
46673,0
|
983 |
+
41220,0
|
984 |
+
18257,0
|
985 |
+
36465,0
|
986 |
+
54869,0
|
987 |
+
18581,0
|
988 |
+
10082,0
|
989 |
+
37929,0
|
990 |
+
28296,0
|
991 |
+
2340,0
|
992 |
+
43461,0
|
993 |
+
57166,0
|
994 |
+
24031,0
|
995 |
+
21976,0
|
996 |
+
35195,0
|
997 |
+
36801,0
|
998 |
+
2916,0
|
999 |
+
44439,0
|
1000 |
+
63310,0
|
1001 |
+
9856,0
|
1002 |
+
16555,0
|
1003 |
+
29571,0
|
1004 |
+
40851,0
|
1005 |
+
59883,0
|
1006 |
+
20042,0
|
1007 |
+
4003,0
|
1008 |
+
58932,0
|
1009 |
+
6659,0
|
1010 |
+
34988,0
|
1011 |
+
59518,0
|
1012 |
+
18253,0
|
1013 |
+
20758,0
|
1014 |
+
41967,0
|
1015 |
+
19356,0
|
1016 |
+
57626,0
|
1017 |
+
26801,0
|
1018 |
+
55563,0
|
1019 |
+
14428,0
|
1020 |
+
60228,0
|
1021 |
+
49680,0
|
1022 |
+
32313,0
|
1023 |
+
48549,0
|
1024 |
+
60820,0
|
1025 |
+
41447,0
|
1026 |
+
57644,0
|
1027 |
+
62114,0
|
1028 |
+
27935,0
|
1029 |
+
12502,0
|
1030 |
+
3218,0
|
1031 |
+
43558,0
|
1032 |
+
49845,0
|
1033 |
+
9216,0
|
1034 |
+
54295,0
|
1035 |
+
25687,0
|
1036 |
+
58701,0
|
1037 |
+
20657,0
|
1038 |
+
55814,0
|
1039 |
+
11202,0
|
1040 |
+
43165,0
|
1041 |
+
53548,0
|
1042 |
+
44333,0
|
1043 |
+
40473,0
|
1044 |
+
4574,0
|
1045 |
+
60889,0
|
1046 |
+
45940,0
|
1047 |
+
58181,0
|
1048 |
+
12296,0
|
1049 |
+
54851,0
|
1050 |
+
56290,0
|
1051 |
+
64315,0
|
1052 |
+
54022,0
|
1053 |
+
58242,0
|
1054 |
+
46989,0
|
1055 |
+
46808,0
|
1056 |
+
818,1
|
1057 |
+
63140,0
|
1058 |
+
46462,0
|
1059 |
+
18542,0
|
1060 |
+
46791,0
|
1061 |
+
64780,1
|
1062 |
+
40289,0
|
1063 |
+
51604,0
|
1064 |
+
14234,0
|
1065 |
+
8320,0
|
1066 |
+
49679,0
|
1067 |
+
14659,0
|
1068 |
+
53090,0
|
1069 |
+
58564,0
|
1070 |
+
35032,0
|
1071 |
+
20203,0
|
1072 |
+
49503,0
|
1073 |
+
48240,0
|
1074 |
+
34476,0
|
1075 |
+
41143,0
|
1076 |
+
6479,0
|
1077 |
+
46879,0
|
1078 |
+
33239,0
|
1079 |
+
29431,0
|
1080 |
+
9956,0
|
1081 |
+
64972,1
|
1082 |
+
25162,0
|
1083 |
+
44325,0
|
1084 |
+
57109,0
|
1085 |
+
9088,0
|
1086 |
+
23646,0
|
1087 |
+
30409,0
|
1088 |
+
37850,0
|
1089 |
+
1784,0
|
1090 |
+
1848,0
|
1091 |
+
38972,0
|
1092 |
+
10509,0
|
1093 |
+
16684,0
|
1094 |
+
64,0
|
1095 |
+
61154,0
|
1096 |
+
16795,0
|
1097 |
+
722,1
|
1098 |
+
34832,0
|
1099 |
+
46652,0
|
1100 |
+
35211,0
|
1101 |
+
19448,0
|
1102 |
+
53123,0
|
1103 |
+
26893,0
|
1104 |
+
62793,0
|
1105 |
+
7002,0
|
1106 |
+
32571,0
|
1107 |
+
50844,0
|
1108 |
+
10135,0
|
1109 |
+
26552,0
|
1110 |
+
33235,0
|
1111 |
+
52810,0
|
1112 |
+
57234,0
|
1113 |
+
27687,0
|
1114 |
+
48956,0
|
1115 |
+
54144,0
|
1116 |
+
12588,0
|
1117 |
+
1360,0
|
1118 |
+
55224,0
|
1119 |
+
42320,0
|
1120 |
+
25983,0
|
1121 |
+
24118,0
|
1122 |
+
46770,0
|
1123 |
+
56518,0
|
1124 |
+
19433,0
|
1125 |
+
4793,0
|
1126 |
+
54364,0
|
1127 |
+
25901,0
|
1128 |
+
41997,0
|
1129 |
+
13338,0
|
1130 |
+
22541,0
|
1131 |
+
48257,0
|
1132 |
+
56860,0
|
1133 |
+
62433,0
|
1134 |
+
38791,0
|
1135 |
+
63721,0
|
1136 |
+
51419,0
|
1137 |
+
2593,0
|
1138 |
+
54164,0
|
1139 |
+
48026,0
|
1140 |
+
58848,0
|
1141 |
+
30438,0
|
1142 |
+
48676,0
|
1143 |
+
10504,0
|
1144 |
+
29473,0
|
1145 |
+
11756,0
|
1146 |
+
26918,0
|
1147 |
+
47789,0
|
1148 |
+
61571,0
|
1149 |
+
11864,0
|
1150 |
+
24280,0
|
1151 |
+
51211,0
|
1152 |
+
2692,0
|
1153 |
+
50898,0
|
1154 |
+
45847,0
|
1155 |
+
18737,0
|
1156 |
+
62030,0
|
1157 |
+
52616,0
|
1158 |
+
3363,0
|
1159 |
+
39350,0
|
1160 |
+
37646,0
|
1161 |
+
30441,0
|
1162 |
+
36207,0
|
1163 |
+
47590,0
|
1164 |
+
34834,0
|
1165 |
+
55672,0
|
1166 |
+
14540,0
|
1167 |
+
5258,0
|
1168 |
+
37001,0
|
1169 |
+
23113,0
|
1170 |
+
59188,0
|
1171 |
+
3632,0
|
1172 |
+
11935,0
|
1173 |
+
23927,0
|
1174 |
+
47042,0
|
1175 |
+
5330,0
|
1176 |
+
59703,0
|
1177 |
+
34916,0
|
1178 |
+
21453,0
|
1179 |
+
41875,0
|
1180 |
+
60474,0
|
1181 |
+
65161,0
|
1182 |
+
63119,0
|
1183 |
+
680,0
|
1184 |
+
3627,0
|
1185 |
+
53119,0
|
1186 |
+
61839,0
|
1187 |
+
36771,0
|
1188 |
+
51088,0
|
1189 |
+
58065,0
|
1190 |
+
35878,0
|
1191 |
+
13107,0
|
1192 |
+
50156,0
|
1193 |
+
24437,0
|
1194 |
+
4165,0
|
1195 |
+
28798,0
|
1196 |
+
6813,0
|
1197 |
+
49694,0
|
1198 |
+
52705,0
|
1199 |
+
42475,0
|
1200 |
+
55535,0
|
1201 |
+
21105,0
|
1202 |
+
6621,0
|
1203 |
+
15512,0
|
1204 |
+
64387,0
|
1205 |
+
7678,0
|
1206 |
+
1543,0
|
1207 |
+
9024,0
|
1208 |
+
9076,0
|
1209 |
+
16683,0
|
1210 |
+
47872,0
|
1211 |
+
22532,0
|
1212 |
+
51865,0
|
1213 |
+
10277,0
|
1214 |
+
52469,0
|
1215 |
+
61633,0
|
1216 |
+
62917,0
|
1217 |
+
59244,0
|
1218 |
+
54853,0
|
1219 |
+
7139,0
|
1220 |
+
60383,0
|
1221 |
+
3847,0
|
1222 |
+
37595,0
|
1223 |
+
55197,0
|
1224 |
+
494,0
|
1225 |
+
31424,0
|
1226 |
+
27286,0
|
1227 |
+
17535,0
|
1228 |
+
16331,0
|
1229 |
+
54645,0
|
1230 |
+
14711,0
|
1231 |
+
25553,0
|
1232 |
+
32344,0
|
1233 |
+
56817,0
|
1234 |
+
23937,0
|
1235 |
+
28414,0
|
1236 |
+
26925,0
|
1237 |
+
59527,0
|
1238 |
+
25257,0
|
1239 |
+
25719,0
|
1240 |
+
15053,0
|
1241 |
+
43596,0
|
1242 |
+
63506,0
|
1243 |
+
14736,0
|
1244 |
+
5814,0
|
1245 |
+
3328,0
|
1246 |
+
23322,0
|
1247 |
+
27029,0
|
1248 |
+
55173,0
|
1249 |
+
18359,0
|
1250 |
+
14692,0
|
1251 |
+
9309,0
|
1252 |
+
23976,0
|
1253 |
+
1956,0
|
1254 |
+
29514,0
|
1255 |
+
28963,0
|
1256 |
+
48992,0
|
1257 |
+
7850,0
|
1258 |
+
20128,0
|
1259 |
+
5068,0
|
1260 |
+
26625,0
|
1261 |
+
60373,0
|
1262 |
+
51737,0
|
1263 |
+
20579,0
|
1264 |
+
2214,0
|
1265 |
+
39239,0
|
1266 |
+
40736,0
|
1267 |
+
23162,0
|
1268 |
+
62872,0
|
1269 |
+
26405,0
|
1270 |
+
7645,0
|
1271 |
+
10735,0
|
1272 |
+
52563,0
|
1273 |
+
7766,0
|
1274 |
+
56731,0
|
1275 |
+
14751,0
|
1276 |
+
47959,0
|
1277 |
+
41947,0
|
1278 |
+
31821,0
|
1279 |
+
29754,0
|
1280 |
+
2929,0
|
1281 |
+
44717,0
|
1282 |
+
860,0
|
1283 |
+
55588,0
|
1284 |
+
55166,0
|
1285 |
+
47780,0
|
1286 |
+
60596,0
|
1287 |
+
20305,0
|
1288 |
+
12365,0
|
1289 |
+
49757,0
|
1290 |
+
56556,0
|
1291 |
+
46358,0
|
1292 |
+
56062,0
|
1293 |
+
3154,0
|
1294 |
+
56030,0
|
1295 |
+
47826,0
|
1296 |
+
60325,0
|
1297 |
+
60804,0
|
1298 |
+
15960,0
|
1299 |
+
43760,0
|
1300 |
+
15738,0
|
1301 |
+
45716,0
|
1302 |
+
44997,0
|
1303 |
+
26693,0
|
1304 |
+
10764,0
|
1305 |
+
23972,0
|
1306 |
+
34273,0
|
1307 |
+
36007,0
|
1308 |
+
26578,0
|
1309 |
+
46058,0
|
1310 |
+
53822,0
|
1311 |
+
46161,0
|
1312 |
+
58556,0
|
1313 |
+
45289,0
|
1314 |
+
45181,0
|
1315 |
+
5956,0
|
1316 |
+
14008,0
|
1317 |
+
65474,0
|
1318 |
+
36042,0
|
1319 |
+
7464,0
|
1320 |
+
31616,0
|
1321 |
+
56665,0
|
1322 |
+
14216,0
|
1323 |
+
55033,0
|
1324 |
+
22316,0
|
1325 |
+
3394,0
|
1326 |
+
17827,0
|
1327 |
+
31850,0
|
1328 |
+
23842,0
|
1329 |
+
63390,0
|
1330 |
+
17001,0
|
1331 |
+
59818,0
|
1332 |
+
33680,0
|
1333 |
+
20661,0
|
1334 |
+
61704,0
|
1335 |
+
11489,0
|
1336 |
+
64051,0
|
1337 |
+
40724,0
|
1338 |
+
27920,0
|
1339 |
+
44542,0
|
1340 |
+
30099,0
|
1341 |
+
1598,0
|
1342 |
+
18647,0
|
1343 |
+
4076,0
|
1344 |
+
25611,0
|
1345 |
+
62099,0
|
1346 |
+
37293,0
|
1347 |
+
55978,0
|
1348 |
+
10873,0
|
1349 |
+
48176,0
|
1350 |
+
3378,0
|
1351 |
+
60048,0
|
1352 |
+
49037,1
|
1353 |
+
24121,0
|
1354 |
+
7791,0
|
1355 |
+
18407,0
|
1356 |
+
2504,0
|
1357 |
+
6660,0
|
1358 |
+
47843,0
|
1359 |
+
47150,0
|
1360 |
+
41050,0
|
1361 |
+
4774,0
|
1362 |
+
12679,0
|
1363 |
+
10490,0
|
1364 |
+
52784,0
|
1365 |
+
59707,0
|
1366 |
+
172,0
|
1367 |
+
38831,0
|
1368 |
+
63812,0
|
1369 |
+
57181,0
|
1370 |
+
42922,0
|
1371 |
+
41127,0
|
1372 |
+
21808,0
|
1373 |
+
32662,0
|
1374 |
+
12660,0
|
1375 |
+
12116,0
|
1376 |
+
33844,0
|
1377 |
+
58651,0
|
1378 |
+
9379,0
|
1379 |
+
36306,0
|
1380 |
+
17978,0
|
1381 |
+
64520,0
|
1382 |
+
44047,0
|
1383 |
+
51892,0
|
1384 |
+
62677,0
|
1385 |
+
36979,0
|
1386 |
+
6044,0
|
1387 |
+
19980,0
|
1388 |
+
50646,0
|
1389 |
+
8414,0
|
1390 |
+
3687,0
|
1391 |
+
42701,0
|
1392 |
+
3112,0
|
1393 |
+
35382,0
|
1394 |
+
17002,0
|
1395 |
+
1437,0
|
1396 |
+
59791,0
|
1397 |
+
22297,0
|
1398 |
+
25881,0
|
1399 |
+
2787,0
|
1400 |
+
56134,0
|
1401 |
+
52202,0
|
1402 |
+
56339,0
|
1403 |
+
37382,0
|
1404 |
+
24868,0
|
1405 |
+
4752,0
|
1406 |
+
48300,0
|
1407 |
+
50974,0
|
1408 |
+
15651,0
|
1409 |
+
34468,0
|
1410 |
+
55449,0
|
1411 |
+
30525,0
|
1412 |
+
13816,0
|
1413 |
+
8993,0
|
1414 |
+
10219,0
|
1415 |
+
28537,0
|
1416 |
+
39244,0
|
1417 |
+
60296,0
|
1418 |
+
39632,0
|
1419 |
+
60983,0
|
1420 |
+
29114,0
|
1421 |
+
26104,0
|
1422 |
+
10610,0
|
1423 |
+
17349,0
|
1424 |
+
52534,0
|
1425 |
+
58566,0
|
1426 |
+
20272,0
|
1427 |
+
21097,0
|
1428 |
+
2763,0
|
1429 |
+
11709,0
|
1430 |
+
24008,0
|
1431 |
+
53935,0
|
1432 |
+
4222,0
|
1433 |
+
43329,0
|
1434 |
+
5166,0
|
1435 |
+
57808,0
|
1436 |
+
3964,0
|
1437 |
+
4849,0
|
1438 |
+
22991,0
|
1439 |
+
29572,0
|
1440 |
+
19443,0
|
1441 |
+
29509,0
|
1442 |
+
36258,0
|
1443 |
+
38284,0
|
1444 |
+
56443,0
|
1445 |
+
16222,0
|
1446 |
+
46467,0
|
1447 |
+
54508,0
|
1448 |
+
20499,0
|
1449 |
+
52310,0
|
1450 |
+
33290,0
|
1451 |
+
64757,0
|
1452 |
+
2955,0
|
1453 |
+
11587,0
|
1454 |
+
49366,0
|
1455 |
+
47928,0
|
1456 |
+
37680,0
|
1457 |
+
52114,0
|
1458 |
+
37601,0
|
1459 |
+
17323,0
|
1460 |
+
26582,0
|
1461 |
+
58023,0
|
1462 |
+
45628,0
|
1463 |
+
61960,0
|
1464 |
+
18389,0
|
1465 |
+
3135,0
|
1466 |
+
65172,0
|
1467 |
+
35354,0
|
1468 |
+
51053,0
|
1469 |
+
42302,0
|
1470 |
+
32325,0
|
1471 |
+
55908,0
|
1472 |
+
22002,0
|
1473 |
+
47065,0
|
1474 |
+
27047,0
|
1475 |
+
51233,0
|
1476 |
+
38151,0
|
1477 |
+
23095,0
|
1478 |
+
595,1
|
1479 |
+
26778,0
|
1480 |
+
28846,0
|
1481 |
+
2353,0
|
1482 |
+
55144,0
|
1483 |
+
7814,0
|
1484 |
+
39524,0
|
1485 |
+
51834,0
|
1486 |
+
39489,0
|
1487 |
+
61580,0
|
1488 |
+
3168,0
|
1489 |
+
19961,0
|
1490 |
+
46878,0
|
1491 |
+
58286,0
|
1492 |
+
55145,0
|
1493 |
+
659,0
|
1494 |
+
2577,0
|
1495 |
+
13135,0
|
1496 |
+
45522,0
|
1497 |
+
59,0
|
1498 |
+
24996,0
|
1499 |
+
54518,0
|
1500 |
+
14525,0
|
1501 |
+
49520,0
|
1502 |
+
16689,0
|
1503 |
+
57679,0
|
1504 |
+
54686,0
|
1505 |
+
22944,0
|
1506 |
+
17121,0
|
1507 |
+
41313,0
|
1508 |
+
29284,0
|
1509 |
+
39847,0
|
1510 |
+
17132,0
|
1511 |
+
48770,0
|
1512 |
+
40964,0
|
1513 |
+
6046,0
|
1514 |
+
1379,0
|
1515 |
+
41766,0
|
1516 |
+
14337,0
|
1517 |
+
60211,0
|
1518 |
+
10352,0
|
1519 |
+
56413,0
|
1520 |
+
16168,0
|
1521 |
+
40357,0
|
1522 |
+
1918,0
|
1523 |
+
8686,0
|
1524 |
+
46924,0
|
1525 |
+
12408,0
|
1526 |
+
44160,0
|
1527 |
+
44579,0
|
1528 |
+
5389,0
|
1529 |
+
53702,0
|
1530 |
+
2352,0
|
1531 |
+
29009,0
|
1532 |
+
62190,0
|
1533 |
+
58679,0
|
1534 |
+
349,0
|
1535 |
+
17881,0
|
1536 |
+
8054,0
|
1537 |
+
22030,0
|
1538 |
+
61352,0
|
1539 |
+
299,0
|
1540 |
+
34785,0
|
1541 |
+
43828,0
|
1542 |
+
3344,0
|
1543 |
+
21513,0
|
1544 |
+
26399,0
|
1545 |
+
4591,0
|
1546 |
+
9633,0
|
1547 |
+
37802,0
|
1548 |
+
28690,0
|
1549 |
+
63958,0
|
1550 |
+
43762,0
|
1551 |
+
7391,0
|
1552 |
+
22252,0
|
1553 |
+
51146,0
|
1554 |
+
27610,0
|
1555 |
+
63213,0
|
1556 |
+
14780,0
|
1557 |
+
37370,0
|
1558 |
+
17846,0
|
1559 |
+
22726,0
|
1560 |
+
28170,0
|
1561 |
+
2054,0
|
1562 |
+
29762,0
|
1563 |
+
5605,0
|
1564 |
+
48099,0
|
1565 |
+
24096,0
|
1566 |
+
13158,0
|
1567 |
+
36592,0
|
1568 |
+
13965,0
|
1569 |
+
53537,0
|
1570 |
+
64847,0
|
1571 |
+
32247,0
|
1572 |
+
58688,0
|
1573 |
+
15534,0
|
1574 |
+
17788,0
|
1575 |
+
10711,0
|
1576 |
+
9598,0
|
1577 |
+
9973,0
|
1578 |
+
12466,0
|
1579 |
+
6758,0
|
1580 |
+
28559,0
|
1581 |
+
26130,0
|
1582 |
+
65208,0
|
1583 |
+
62975,0
|
1584 |
+
423,0
|
1585 |
+
36220,0
|
1586 |
+
11002,0
|
1587 |
+
6422,0
|
1588 |
+
152,0
|
1589 |
+
41582,0
|
1590 |
+
20283,0
|
1591 |
+
18244,0
|
1592 |
+
11997,0
|
1593 |
+
7033,0
|
1594 |
+
26204,0
|
1595 |
+
37668,0
|
1596 |
+
33390,0
|
1597 |
+
42853,0
|
1598 |
+
45226,0
|
1599 |
+
15234,0
|
1600 |
+
8731,0
|
1601 |
+
598,1
|
1602 |
+
6091,0
|
1603 |
+
64669,1
|
1604 |
+
65329,0
|
1605 |
+
60646,0
|
1606 |
+
610,1
|
1607 |
+
56847,0
|
1608 |
+
825,0
|
1609 |
+
58003,0
|
1610 |
+
49172,0
|
1611 |
+
34703,0
|
1612 |
+
16919,0
|
1613 |
+
19612,0
|
1614 |
+
50852,0
|
1615 |
+
49065,0
|
1616 |
+
5427,0
|
1617 |
+
40535,0
|
1618 |
+
48563,0
|
1619 |
+
34055,0
|
1620 |
+
51464,0
|
1621 |
+
38319,0
|
1622 |
+
5290,0
|
1623 |
+
10348,0
|
1624 |
+
18838,0
|
1625 |
+
5229,0
|
1626 |
+
6928,0
|
1627 |
+
23772,0
|
1628 |
+
6245,0
|
1629 |
+
65004,0
|
1630 |
+
20187,0
|
1631 |
+
10385,0
|
1632 |
+
17936,0
|
1633 |
+
58090,0
|
1634 |
+
49054,0
|
1635 |
+
34845,0
|
1636 |
+
19719,0
|
1637 |
+
8999,0
|
1638 |
+
41153,0
|
1639 |
+
330,0
|
1640 |
+
17006,0
|
1641 |
+
54389,0
|
1642 |
+
40641,0
|
1643 |
+
54557,0
|
1644 |
+
62344,0
|
1645 |
+
8758,0
|
1646 |
+
2046,0
|
1647 |
+
20069,0
|
1648 |
+
4762,0
|
1649 |
+
24842,0
|
1650 |
+
25565,0
|
1651 |
+
8336,0
|
1652 |
+
20141,0
|
1653 |
+
16744,0
|
1654 |
+
50386,0
|
1655 |
+
22234,0
|
1656 |
+
28908,0
|
1657 |
+
6602,0
|
1658 |
+
4138,0
|
1659 |
+
38372,0
|
1660 |
+
52335,0
|
1661 |
+
36988,0
|
1662 |
+
9181,0
|
1663 |
+
16806,0
|
1664 |
+
33366,0
|
1665 |
+
33748,0
|
1666 |
+
527,0
|
1667 |
+
42628,0
|
1668 |
+
59523,0
|
1669 |
+
56701,0
|
1670 |
+
64196,0
|
1671 |
+
59650,0
|
1672 |
+
6066,0
|
1673 |
+
49180,0
|
1674 |
+
43513,0
|
1675 |
+
21958,0
|
1676 |
+
28735,0
|
1677 |
+
54170,0
|
1678 |
+
40423,0
|
1679 |
+
22636,0
|
1680 |
+
64761,0
|
1681 |
+
59529,0
|
1682 |
+
13694,0
|
1683 |
+
31822,0
|
1684 |
+
23451,0
|
1685 |
+
55549,0
|
1686 |
+
30108,0
|
1687 |
+
24320,0
|
1688 |
+
2700,0
|
1689 |
+
64644,0
|
1690 |
+
18254,0
|
1691 |
+
38559,0
|
1692 |
+
49271,0
|
1693 |
+
18875,0
|
1694 |
+
43181,0
|
1695 |
+
23824,0
|
1696 |
+
23729,0
|
1697 |
+
50671,0
|
1698 |
+
16655,0
|
1699 |
+
26300,0
|
1700 |
+
24910,0
|
1701 |
+
5420,0
|
1702 |
+
29150,0
|
1703 |
+
12966,0
|
1704 |
+
60749,0
|
1705 |
+
61378,0
|
1706 |
+
49014,0
|
1707 |
+
64536,0
|
1708 |
+
62411,0
|
1709 |
+
61315,0
|
1710 |
+
50350,0
|
1711 |
+
9928,0
|
1712 |
+
1633,0
|
1713 |
+
433,0
|
1714 |
+
46362,0
|
1715 |
+
63629,1
|
1716 |
+
23500,0
|
1717 |
+
25467,0
|
1718 |
+
24811,0
|
1719 |
+
39046,0
|
1720 |
+
51344,0
|
1721 |
+
3647,0
|
1722 |
+
1008,0
|
1723 |
+
51579,0
|
1724 |
+
42457,0
|
1725 |
+
11507,0
|
1726 |
+
44665,0
|
1727 |
+
63261,0
|
1728 |
+
1936,0
|
1729 |
+
44941,0
|
1730 |
+
4690,1
|
1731 |
+
18966,0
|
1732 |
+
19909,0
|
1733 |
+
52172,0
|
1734 |
+
38059,0
|
1735 |
+
39267,0
|
1736 |
+
42368,0
|
1737 |
+
40439,0
|
1738 |
+
31945,0
|
1739 |
+
3818,0
|
1740 |
+
55227,0
|
1741 |
+
56867,0
|
1742 |
+
61083,0
|
1743 |
+
17470,0
|
1744 |
+
38564,0
|
1745 |
+
4742,0
|
1746 |
+
31586,0
|
1747 |
+
61687,0
|
1748 |
+
11858,0
|
1749 |
+
40524,0
|
1750 |
+
5208,0
|
1751 |
+
35537,0
|
1752 |
+
6572,0
|
1753 |
+
53516,0
|
1754 |
+
12649,0
|
1755 |
+
24045,0
|
1756 |
+
15208,0
|
1757 |
+
44945,0
|
1758 |
+
54679,0
|
1759 |
+
52121,0
|
1760 |
+
15443,0
|
1761 |
+
42001,0
|
1762 |
+
46895,0
|
1763 |
+
60834,0
|
1764 |
+
7054,0
|
1765 |
+
28428,0
|
1766 |
+
6752,0
|
1767 |
+
916,0
|
1768 |
+
48937,0
|
1769 |
+
55440,0
|
1770 |
+
8110,0
|
1771 |
+
19522,0
|
1772 |
+
17217,0
|
1773 |
+
54017,0
|
1774 |
+
28940,0
|
1775 |
+
27940,0
|
1776 |
+
5664,0
|
1777 |
+
57376,0
|
1778 |
+
8754,1
|
1779 |
+
42029,0
|
1780 |
+
10406,0
|
1781 |
+
38105,0
|
1782 |
+
4419,0
|
1783 |
+
39806,0
|
1784 |
+
23683,0
|
1785 |
+
50818,0
|
1786 |
+
14713,0
|
1787 |
+
13865,0
|
1788 |
+
4149,0
|
1789 |
+
3048,0
|
1790 |
+
17855,0
|
1791 |
+
50838,0
|
1792 |
+
35434,0
|
1793 |
+
35330,0
|
1794 |
+
64649,1
|
1795 |
+
54618,0
|
1796 |
+
38744,0
|
1797 |
+
781,0
|
1798 |
+
65052,0
|
1799 |
+
25077,0
|
1800 |
+
10871,0
|
1801 |
+
49740,0
|
1802 |
+
41151,0
|
1803 |
+
39073,0
|
1804 |
+
36643,0
|
1805 |
+
12814,0
|
1806 |
+
52347,0
|
1807 |
+
16552,0
|
1808 |
+
20847,0
|
1809 |
+
3518,0
|
1810 |
+
58890,0
|
1811 |
+
34467,0
|
1812 |
+
33500,0
|
1813 |
+
10416,0
|
1814 |
+
10425,0
|
1815 |
+
53651,0
|
1816 |
+
17594,0
|
1817 |
+
32605,0
|
1818 |
+
20974,0
|
1819 |
+
60293,0
|
1820 |
+
40254,0
|
1821 |
+
53580,0
|
1822 |
+
35548,0
|
1823 |
+
18992,0
|
1824 |
+
39962,0
|
1825 |
+
60587,0
|
1826 |
+
33658,0
|
1827 |
+
53250,0
|
1828 |
+
20251,0
|
1829 |
+
6592,0
|
1830 |
+
10657,0
|
1831 |
+
24734,0
|
1832 |
+
48220,0
|
1833 |
+
44554,0
|
1834 |
+
29942,0
|
1835 |
+
48144,0
|
1836 |
+
17728,0
|
1837 |
+
50333,0
|
1838 |
+
42505,0
|
1839 |
+
8946,1
|
1840 |
+
27542,0
|
1841 |
+
5174,0
|
1842 |
+
16129,0
|
1843 |
+
6456,0
|
1844 |
+
29096,0
|
1845 |
+
48880,0
|
1846 |
+
32540,0
|
1847 |
+
43735,0
|
1848 |
+
36482,0
|
1849 |
+
32283,0
|
1850 |
+
17707,0
|
1851 |
+
10708,0
|
1852 |
+
1264,0
|
1853 |
+
25189,0
|
1854 |
+
7059,0
|
1855 |
+
53553,0
|
1856 |
+
3511,0
|
1857 |
+
49633,0
|
1858 |
+
16733,0
|
1859 |
+
25163,0
|
1860 |
+
58521,0
|
1861 |
+
30800,0
|
1862 |
+
44204,0
|
1863 |
+
37658,0
|
1864 |
+
34082,0
|
1865 |
+
32521,0
|
1866 |
+
19085,0
|
1867 |
+
7165,0
|
1868 |
+
30554,0
|
1869 |
+
13258,0
|
1870 |
+
61291,0
|
1871 |
+
48427,0
|
1872 |
+
51828,0
|
1873 |
+
2018,0
|
1874 |
+
14642,0
|
1875 |
+
38449,0
|
1876 |
+
12572,0
|
1877 |
+
30366,0
|
1878 |
+
6575,0
|
1879 |
+
61503,0
|
1880 |
+
34210,0
|
1881 |
+
58305,0
|
1882 |
+
7805,0
|
1883 |
+
20628,0
|
1884 |
+
11019,0
|
1885 |
+
36855,0
|
1886 |
+
62778,0
|
1887 |
+
39712,0
|
1888 |
+
19624,0
|
1889 |
+
38601,0
|
1890 |
+
51162,0
|
1891 |
+
16594,0
|
1892 |
+
56598,0
|
1893 |
+
35237,0
|
1894 |
+
61110,0
|
1895 |
+
21862,0
|
1896 |
+
32524,0
|
1897 |
+
31346,0
|
1898 |
+
13651,0
|
1899 |
+
34521,0
|
1900 |
+
1398,0
|
1901 |
+
11339,0
|
1902 |
+
42543,0
|
1903 |
+
6108,0
|
1904 |
+
45221,0
|
1905 |
+
48774,0
|
1906 |
+
25514,0
|
1907 |
+
47295,0
|
1908 |
+
50232,0
|
1909 |
+
64324,0
|
1910 |
+
17420,0
|
1911 |
+
57323,0
|
1912 |
+
25474,0
|
1913 |
+
43960,0
|
1914 |
+
1015,0
|
1915 |
+
27862,0
|
1916 |
+
2988,0
|
1917 |
+
25816,0
|
1918 |
+
33591,0
|
1919 |
+
3633,0
|
1920 |
+
26846,0
|
1921 |
+
61567,0
|
1922 |
+
36628,0
|
1923 |
+
24936,0
|
1924 |
+
13821,0
|
1925 |
+
17435,0
|
1926 |
+
7338,0
|
1927 |
+
29078,0
|
1928 |
+
54681,0
|
1929 |
+
38532,0
|
1930 |
+
48041,0
|
1931 |
+
21901,0
|
1932 |
+
22869,0
|
1933 |
+
44800,0
|
1934 |
+
21979,0
|
1935 |
+
52453,0
|
1936 |
+
17925,0
|
1937 |
+
60321,0
|
1938 |
+
37573,0
|
1939 |
+
18712,0
|
1940 |
+
3463,0
|
1941 |
+
53533,0
|
1942 |
+
25837,0
|
1943 |
+
9017,0
|
1944 |
+
61165,0
|
1945 |
+
44438,0
|
1946 |
+
29448,0
|
1947 |
+
59772,0
|
1948 |
+
63477,0
|
1949 |
+
33882,0
|
1950 |
+
5840,0
|
1951 |
+
57360,0
|
1952 |
+
23876,0
|
1953 |
+
24836,0
|
1954 |
+
50678,0
|
1955 |
+
34531,0
|
1956 |
+
37724,0
|
1957 |
+
12407,0
|
1958 |
+
1436,0
|
1959 |
+
59390,0
|
1960 |
+
35597,0
|
1961 |
+
34295,0
|
1962 |
+
1045,0
|
1963 |
+
367,0
|
1964 |
+
44869,0
|
1965 |
+
39026,0
|
1966 |
+
25801,0
|
1967 |
+
59737,0
|
1968 |
+
55019,0
|
1969 |
+
39460,0
|
1970 |
+
56935,0
|
1971 |
+
51319,0
|
1972 |
+
3937,0
|
1973 |
+
63482,0
|
1974 |
+
39011,0
|
1975 |
+
6837,0
|
1976 |
+
38293,0
|
1977 |
+
41751,0
|
1978 |
+
1138,1
|
1979 |
+
10115,0
|
1980 |
+
61533,0
|
1981 |
+
49901,0
|
1982 |
+
29015,0
|
1983 |
+
9071,0
|
1984 |
+
26619,0
|
1985 |
+
717,0
|
1986 |
+
6684,0
|
1987 |
+
4224,0
|
1988 |
+
6428,0
|
1989 |
+
22642,0
|
1990 |
+
20728,0
|
1991 |
+
2713,0
|
1992 |
+
5851,0
|
1993 |
+
20294,0
|
1994 |
+
11796,0
|
1995 |
+
55008,0
|
1996 |
+
22564,0
|
1997 |
+
15323,0
|
1998 |
+
30846,0
|
1999 |
+
54496,0
|
2000 |
+
50063,0
|
2001 |
+
46449,0
|
2002 |
+
9547,0
|
2003 |
+
62559,0
|
2004 |
+
53138,0
|
2005 |
+
57868,0
|
2006 |
+
53370,0
|
2007 |
+
10044,0
|
2008 |
+
17422,0
|
2009 |
+
4312,0
|
2010 |
+
21436,0
|
2011 |
+
37247,0
|
2012 |
+
40520,0
|
2013 |
+
17877,0
|
2014 |
+
17130,0
|
2015 |
+
24577,0
|
2016 |
+
43530,0
|
2017 |
+
52963,0
|
2018 |
+
45559,0
|
2019 |
+
3972,0
|
2020 |
+
55068,0
|
2021 |
+
8252,0
|
2022 |
+
34516,0
|
2023 |
+
15671,0
|
2024 |
+
2758,0
|
2025 |
+
35074,0
|
2026 |
+
49091,0
|
2027 |
+
36281,0
|
2028 |
+
46022,0
|
2029 |
+
6848,0
|
2030 |
+
44300,0
|
2031 |
+
34155,0
|
2032 |
+
37205,0
|
2033 |
+
63317,0
|
2034 |
+
8882,0
|
2035 |
+
9567,0
|
2036 |
+
53202,0
|
2037 |
+
29663,0
|
2038 |
+
25700,0
|
2039 |
+
23169,0
|
2040 |
+
26955,0
|
2041 |
+
60685,1
|
2042 |
+
35491,0
|
2043 |
+
22979,0
|
2044 |
+
17434,0
|
2045 |
+
11657,0
|
2046 |
+
21256,0
|
2047 |
+
40932,0
|
2048 |
+
33304,0
|
2049 |
+
27292,0
|
2050 |
+
22600,0
|
2051 |
+
7317,0
|
2052 |
+
7245,0
|
2053 |
+
49594,0
|
2054 |
+
12840,0
|
2055 |
+
40977,0
|
2056 |
+
60028,0
|
2057 |
+
20526,0
|
2058 |
+
56749,1
|
2059 |
+
25738,0
|
2060 |
+
63343,0
|
2061 |
+
52966,0
|
2062 |
+
30058,0
|
2063 |
+
35089,0
|
2064 |
+
1842,0
|
2065 |
+
19529,0
|
2066 |
+
54068,0
|
2067 |
+
65058,0
|
2068 |
+
11676,0
|
2069 |
+
41430,0
|
2070 |
+
53177,0
|
2071 |
+
40392,0
|
2072 |
+
18998,0
|
2073 |
+
25535,0
|
2074 |
+
24624,0
|
2075 |
+
54092,0
|
2076 |
+
26064,0
|
2077 |
+
10101,0
|
2078 |
+
24432,0
|
2079 |
+
47992,0
|
2080 |
+
883,1
|
2081 |
+
28127,0
|
2082 |
+
47936,0
|
2083 |
+
60210,0
|
2084 |
+
17370,0
|
2085 |
+
17773,0
|
2086 |
+
2338,0
|
2087 |
+
59762,0
|
2088 |
+
16891,0
|
2089 |
+
58561,0
|
2090 |
+
64839,0
|
2091 |
+
12882,0
|
2092 |
+
43042,0
|
2093 |
+
36310,0
|
2094 |
+
45537,0
|
2095 |
+
52227,0
|
2096 |
+
47846,0
|
2097 |
+
22467,0
|
2098 |
+
6027,0
|
2099 |
+
55960,0
|
2100 |
+
7180,0
|
2101 |
+
48620,0
|
2102 |
+
34011,0
|
2103 |
+
57427,0
|
2104 |
+
41319,0
|
2105 |
+
25033,0
|
2106 |
+
10433,0
|
2107 |
+
54220,0
|
2108 |
+
3924,0
|
2109 |
+
27963,0
|
2110 |
+
51637,0
|
2111 |
+
23209,0
|
2112 |
+
50983,0
|
2113 |
+
536,0
|
2114 |
+
44594,0
|
2115 |
+
48280,0
|
2116 |
+
15152,0
|
2117 |
+
31368,0
|
2118 |
+
16544,0
|
2119 |
+
20400,0
|
2120 |
+
35343,0
|
2121 |
+
28727,0
|
2122 |
+
41628,0
|
2123 |
+
30834,0
|
2124 |
+
31140,0
|
2125 |
+
61638,0
|
2126 |
+
65506,0
|
2127 |
+
6,0
|
2128 |
+
20947,0
|
2129 |
+
43884,0
|
2130 |
+
36321,0
|
2131 |
+
18161,0
|
2132 |
+
29029,0
|
2133 |
+
3538,0
|
2134 |
+
37272,0
|
2135 |
+
41084,0
|
2136 |
+
18644,0
|
2137 |
+
64235,0
|
2138 |
+
53242,0
|
2139 |
+
48572,0
|
2140 |
+
55372,0
|
2141 |
+
27250,0
|
2142 |
+
30744,0
|
2143 |
+
23618,0
|
2144 |
+
16650,0
|
2145 |
+
39513,0
|
2146 |
+
3329,0
|
2147 |
+
43458,0
|
2148 |
+
48357,0
|
2149 |
+
28225,0
|
2150 |
+
35868,0
|
2151 |
+
65044,0
|
2152 |
+
2610,1
|
2153 |
+
53754,0
|
2154 |
+
31273,0
|
2155 |
+
52285,0
|
2156 |
+
6301,0
|
2157 |
+
30776,0
|
2158 |
+
26539,0
|
2159 |
+
54396,0
|
2160 |
+
64908,1
|
2161 |
+
38421,0
|
2162 |
+
17991,0
|
2163 |
+
57357,0
|
2164 |
+
11213,0
|
2165 |
+
16898,0
|
2166 |
+
43547,0
|
2167 |
+
36356,0
|
2168 |
+
6937,0
|
2169 |
+
62746,0
|
2170 |
+
27805,0
|
2171 |
+
813,0
|
2172 |
+
52536,0
|
2173 |
+
45999,0
|
2174 |
+
26152,0
|
2175 |
+
43759,0
|
2176 |
+
32804,0
|
2177 |
+
45376,0
|
2178 |
+
14426,0
|
2179 |
+
51911,0
|
2180 |
+
42552,0
|
2181 |
+
11631,0
|
2182 |
+
29875,0
|
2183 |
+
37163,0
|
2184 |
+
21708,0
|
2185 |
+
32560,0
|
2186 |
+
50755,0
|
2187 |
+
33437,0
|
2188 |
+
64397,1
|
2189 |
+
64191,0
|
2190 |
+
35371,0
|
2191 |
+
61196,0
|
2192 |
+
64091,0
|
2193 |
+
60407,0
|
2194 |
+
8255,0
|
2195 |
+
30487,0
|
2196 |
+
1804,0
|
2197 |
+
7008,0
|
2198 |
+
4170,0
|
2199 |
+
24245,0
|
2200 |
+
62228,0
|
2201 |
+
59543,0
|
2202 |
+
53104,0
|
2203 |
+
32697,0
|
2204 |
+
52337,0
|
2205 |
+
13408,0
|
2206 |
+
25986,0
|
2207 |
+
12652,0
|
2208 |
+
65211,0
|
2209 |
+
43008,0
|
2210 |
+
62669,0
|
2211 |
+
29069,0
|
2212 |
+
42985,0
|
2213 |
+
10313,0
|
2214 |
+
59849,0
|
2215 |
+
51118,0
|
2216 |
+
43520,0
|
2217 |
+
21525,0
|
2218 |
+
39725,0
|
2219 |
+
36273,0
|
2220 |
+
26569,0
|
2221 |
+
20236,0
|
2222 |
+
11621,0
|
2223 |
+
3384,0
|
2224 |
+
48378,0
|
2225 |
+
5660,0
|
2226 |
+
25788,0
|
2227 |
+
63371,0
|
2228 |
+
16336,0
|
2229 |
+
56154,0
|
2230 |
+
39382,0
|
2231 |
+
44862,0
|
2232 |
+
17107,0
|
2233 |
+
19596,0
|
2234 |
+
34863,0
|
2235 |
+
55171,0
|
2236 |
+
42266,0
|
2237 |
+
58365,0
|
2238 |
+
31192,0
|
2239 |
+
54531,0
|
2240 |
+
55781,0
|
2241 |
+
39676,0
|
2242 |
+
50510,0
|
2243 |
+
6289,0
|
2244 |
+
28594,0
|
2245 |
+
27547,0
|
2246 |
+
64817,0
|
2247 |
+
25138,0
|
2248 |
+
29729,0
|
2249 |
+
10326,0
|
2250 |
+
19388,0
|
2251 |
+
62261,0
|
2252 |
+
8947,0
|
2253 |
+
35958,0
|
2254 |
+
9329,0
|
2255 |
+
11371,0
|
2256 |
+
6052,0
|
2257 |
+
4904,0
|
2258 |
+
1649,0
|
2259 |
+
17479,0
|
2260 |
+
12345,0
|
2261 |
+
21770,0
|
2262 |
+
9295,0
|
2263 |
+
33830,0
|
2264 |
+
1421,0
|
2265 |
+
20125,0
|
2266 |
+
40412,0
|
2267 |
+
58669,0
|
2268 |
+
51856,0
|
2269 |
+
30686,0
|
2270 |
+
44978,0
|
2271 |
+
30619,0
|
2272 |
+
57687,0
|
2273 |
+
36257,0
|
2274 |
+
20004,0
|
2275 |
+
53508,0
|
2276 |
+
53860,0
|
2277 |
+
51672,0
|
2278 |
+
487,0
|
2279 |
+
9199,0
|
2280 |
+
12779,0
|
2281 |
+
7716,0
|
2282 |
+
40536,0
|
2283 |
+
3275,0
|
2284 |
+
50856,0
|
2285 |
+
44659,0
|
2286 |
+
35407,0
|
2287 |
+
8082,0
|
2288 |
+
33198,0
|
2289 |
+
19478,0
|
2290 |
+
21120,0
|
2291 |
+
41404,0
|
2292 |
+
12975,0
|
2293 |
+
58270,0
|
2294 |
+
7539,0
|
2295 |
+
60854,0
|
2296 |
+
32306,0
|
2297 |
+
59475,0
|
2298 |
+
43375,0
|
2299 |
+
36994,0
|
2300 |
+
40116,0
|
2301 |
+
15311,0
|
2302 |
+
3415,0
|
2303 |
+
2976,0
|
2304 |
+
62514,0
|
2305 |
+
44884,0
|
2306 |
+
37322,0
|
2307 |
+
63438,0
|
2308 |
+
17768,0
|
2309 |
+
51206,0
|
2310 |
+
31780,0
|
2311 |
+
50701,0
|
2312 |
+
48697,0
|
2313 |
+
36941,0
|
2314 |
+
61934,0
|
2315 |
+
43293,0
|
2316 |
+
16035,0
|
2317 |
+
11533,0
|
2318 |
+
41753,0
|
2319 |
+
35399,0
|
2320 |
+
27394,0
|
2321 |
+
52116,0
|
2322 |
+
60298,0
|
2323 |
+
62520,0
|
2324 |
+
39536,0
|
2325 |
+
64873,0
|
2326 |
+
25887,0
|
2327 |
+
61202,0
|
2328 |
+
36403,0
|
2329 |
+
51587,0
|
2330 |
+
15026,0
|
2331 |
+
54450,0
|
2332 |
+
18567,0
|
2333 |
+
17314,0
|
2334 |
+
14079,0
|
2335 |
+
31118,0
|
2336 |
+
60690,0
|
2337 |
+
46477,1
|
2338 |
+
53864,0
|
2339 |
+
32400,0
|
2340 |
+
37777,0
|
2341 |
+
64566,0
|
2342 |
+
46301,0
|
2343 |
+
35930,0
|
2344 |
+
18940,0
|
2345 |
+
34720,0
|
2346 |
+
3768,0
|
2347 |
+
18267,0
|
2348 |
+
44910,0
|
2349 |
+
72,0
|
2350 |
+
14356,0
|
2351 |
+
57252,0
|
2352 |
+
25366,0
|
2353 |
+
3456,0
|
2354 |
+
61886,0
|
2355 |
+
5633,0
|
2356 |
+
11563,0
|
2357 |
+
2217,0
|
2358 |
+
18283,0
|
2359 |
+
39459,0
|
2360 |
+
33105,0
|
2361 |
+
24640,0
|
2362 |
+
6651,0
|
2363 |
+
3936,0
|
2364 |
+
58908,0
|
2365 |
+
19617,0
|
2366 |
+
29175,0
|
2367 |
+
54156,0
|
2368 |
+
21163,0
|
2369 |
+
59268,0
|
2370 |
+
37463,0
|
2371 |
+
53116,0
|
2372 |
+
56321,0
|
2373 |
+
6612,0
|
2374 |
+
11912,0
|
2375 |
+
9451,0
|
2376 |
+
39674,0
|
2377 |
+
55552,0
|
2378 |
+
40740,0
|
2379 |
+
1155,0
|
2380 |
+
38659,0
|
2381 |
+
12499,0
|
2382 |
+
12733,0
|
2383 |
+
2382,0
|
2384 |
+
16484,0
|
2385 |
+
41040,0
|
2386 |
+
20367,0
|
2387 |
+
33291,0
|
2388 |
+
36188,0
|
2389 |
+
41689,0
|
2390 |
+
12741,0
|
2391 |
+
33613,0
|
2392 |
+
63733,0
|
2393 |
+
62903,0
|
2394 |
+
33905,0
|
2395 |
+
24724,0
|
2396 |
+
27904,0
|
2397 |
+
21596,0
|
2398 |
+
8901,0
|
2399 |
+
4410,0
|
2400 |
+
55186,0
|
2401 |
+
63578,0
|
2402 |
+
23782,0
|
2403 |
+
4807,0
|
2404 |
+
33809,0
|
2405 |
+
64973,1
|
2406 |
+
40918,0
|
2407 |
+
51514,0
|
2408 |
+
47793,0
|
2409 |
+
40555,0
|
2410 |
+
10184,0
|
2411 |
+
14066,0
|
2412 |
+
55228,0
|
2413 |
+
33501,0
|
2414 |
+
31117,1
|
2415 |
+
53142,0
|
2416 |
+
43334,0
|
2417 |
+
40728,0
|
2418 |
+
36787,0
|
2419 |
+
50762,0
|
2420 |
+
63887,1
|
2421 |
+
54705,0
|
2422 |
+
43622,0
|
2423 |
+
13827,0
|
2424 |
+
33821,0
|
2425 |
+
22319,0
|
2426 |
+
60935,0
|
2427 |
+
48274,0
|
2428 |
+
5323,0
|
2429 |
+
18014,0
|
2430 |
+
41726,0
|
2431 |
+
58239,0
|
2432 |
+
40527,0
|
2433 |
+
25665,0
|
2434 |
+
53050,0
|
2435 |
+
61705,0
|
2436 |
+
2216,0
|
2437 |
+
29782,0
|
2438 |
+
64589,0
|
2439 |
+
9569,0
|
2440 |
+
6343,0
|
2441 |
+
45234,0
|
2442 |
+
45964,0
|
2443 |
+
59234,0
|
2444 |
+
23699,0
|
2445 |
+
60037,0
|
2446 |
+
41846,0
|
2447 |
+
1372,0
|
2448 |
+
46919,0
|
2449 |
+
33951,0
|
2450 |
+
44967,0
|
2451 |
+
56601,0
|
2452 |
+
25971,0
|
2453 |
+
31601,0
|
2454 |
+
22476,0
|
2455 |
+
53163,0
|
2456 |
+
46521,0
|
2457 |
+
62562,0
|
2458 |
+
46672,0
|
2459 |
+
49652,0
|
2460 |
+
58108,0
|
2461 |
+
24086,0
|
2462 |
+
17252,0
|
2463 |
+
55183,0
|
2464 |
+
62836,0
|
2465 |
+
5512,0
|
2466 |
+
46184,0
|
2467 |
+
35838,0
|
2468 |
+
6539,0
|
2469 |
+
32456,0
|
2470 |
+
19371,0
|
2471 |
+
18095,0
|
2472 |
+
64193,0
|
2473 |
+
15997,0
|
2474 |
+
6085,0
|
2475 |
+
57692,0
|
2476 |
+
29553,0
|
2477 |
+
15327,0
|
2478 |
+
51945,0
|
2479 |
+
29925,0
|
2480 |
+
46448,0
|
2481 |
+
39184,0
|
2482 |
+
37778,0
|
2483 |
+
15286,0
|
2484 |
+
31556,0
|
2485 |
+
3697,0
|
2486 |
+
10864,0
|
2487 |
+
62246,0
|
2488 |
+
15353,0
|
2489 |
+
45632,0
|
2490 |
+
45350,0
|
2491 |
+
38398,0
|
2492 |
+
29255,0
|
2493 |
+
1057,0
|
2494 |
+
42946,0
|
2495 |
+
434,0
|
2496 |
+
21237,0
|
2497 |
+
18650,0
|
2498 |
+
3459,0
|
2499 |
+
34974,0
|
2500 |
+
21177,0
|
2501 |
+
35830,0
|
2502 |
+
62267,0
|
2503 |
+
4511,0
|
2504 |
+
12367,0
|
2505 |
+
44676,0
|
2506 |
+
63083,0
|
2507 |
+
46472,0
|
2508 |
+
35030,0
|
2509 |
+
23361,0
|
2510 |
+
50854,0
|
2511 |
+
295,0
|
2512 |
+
26868,0
|
2513 |
+
41175,0
|
2514 |
+
64334,0
|
2515 |
+
37080,0
|
2516 |
+
36182,0
|
2517 |
+
7927,0
|
2518 |
+
24815,0
|
2519 |
+
12670,0
|
2520 |
+
10042,0
|
2521 |
+
31993,0
|
2522 |
+
55363,0
|
2523 |
+
25629,0
|
2524 |
+
26922,0
|
2525 |
+
2808,0
|
2526 |
+
61696,0
|
2527 |
+
52499,0
|
2528 |
+
8716,0
|
2529 |
+
3913,0
|
2530 |
+
34493,0
|
2531 |
+
17856,0
|
2532 |
+
61119,0
|
2533 |
+
18028,0
|
2534 |
+
14317,0
|
2535 |
+
44583,0
|
2536 |
+
34200,0
|
2537 |
+
26942,0
|
2538 |
+
34944,0
|
2539 |
+
9603,0
|
2540 |
+
1900,0
|
2541 |
+
47579,0
|
2542 |
+
51418,0
|
2543 |
+
19183,0
|
2544 |
+
44865,0
|
2545 |
+
39211,0
|
2546 |
+
13229,0
|
2547 |
+
37258,0
|
2548 |
+
31486,0
|
2549 |
+
59778,0
|
2550 |
+
7658,0
|
2551 |
+
45460,0
|
2552 |
+
18824,0
|
2553 |
+
34752,0
|
2554 |
+
56855,0
|
2555 |
+
35950,0
|
2556 |
+
22738,0
|
2557 |
+
20429,0
|
2558 |
+
10308,0
|
2559 |
+
37473,0
|
2560 |
+
5041,0
|
2561 |
+
47568,0
|
2562 |
+
30241,0
|
2563 |
+
46000,0
|
2564 |
+
45085,0
|
2565 |
+
62407,0
|
2566 |
+
31421,0
|
2567 |
+
45384,0
|
2568 |
+
7774,0
|
2569 |
+
42583,0
|
2570 |
+
48898,0
|
2571 |
+
32214,0
|
2572 |
+
34584,0
|
2573 |
+
37004,0
|
2574 |
+
11969,0
|
2575 |
+
49599,0
|
2576 |
+
43685,0
|
2577 |
+
64624,0
|
2578 |
+
28718,0
|
2579 |
+
30684,0
|
2580 |
+
61714,0
|
2581 |
+
37464,0
|
2582 |
+
59935,0
|
2583 |
+
55042,0
|
2584 |
+
64244,0
|
2585 |
+
42915,0
|
2586 |
+
9244,0
|
2587 |
+
14411,0
|
2588 |
+
28677,0
|
2589 |
+
9787,0
|
2590 |
+
2400,0
|
2591 |
+
10935,0
|
2592 |
+
55005,0
|
2593 |
+
11904,0
|
2594 |
+
10669,0
|
2595 |
+
40190,0
|
2596 |
+
26725,0
|
2597 |
+
23789,0
|
2598 |
+
13329,0
|
2599 |
+
35508,0
|
2600 |
+
13914,0
|
2601 |
+
55078,0
|
2602 |
+
46886,0
|
2603 |
+
15627,0
|
2604 |
+
624,1
|
2605 |
+
852,0
|
2606 |
+
35230,0
|
2607 |
+
11337,0
|
2608 |
+
28348,0
|
2609 |
+
5299,0
|
2610 |
+
64850,0
|
2611 |
+
56990,0
|
2612 |
+
4600,0
|
2613 |
+
28774,0
|
2614 |
+
45794,0
|
2615 |
+
25370,0
|
2616 |
+
55945,0
|
2617 |
+
26370,0
|
2618 |
+
60669,0
|
2619 |
+
36365,0
|
2620 |
+
34523,0
|
2621 |
+
52312,0
|
2622 |
+
12181,0
|
2623 |
+
2660,0
|
2624 |
+
20699,0
|
2625 |
+
64840,0
|
2626 |
+
55388,0
|
2627 |
+
21236,0
|
2628 |
+
40782,0
|
2629 |
+
546,1
|
2630 |
+
16572,0
|
2631 |
+
27975,0
|
2632 |
+
8517,0
|
2633 |
+
55618,0
|
2634 |
+
54590,0
|
2635 |
+
30457,0
|
2636 |
+
47806,0
|
2637 |
+
63022,0
|
2638 |
+
61668,0
|
2639 |
+
33312,0
|
2640 |
+
61546,0
|
2641 |
+
65460,0
|
2642 |
+
58788,0
|
2643 |
+
10202,0
|
2644 |
+
248,0
|
2645 |
+
53833,0
|
2646 |
+
21345,0
|
2647 |
+
13814,0
|
2648 |
+
18211,0
|
2649 |
+
37047,0
|
2650 |
+
14855,0
|
2651 |
+
38081,0
|
2652 |
+
24270,0
|
2653 |
+
50505,0
|
2654 |
+
42173,0
|
2655 |
+
58203,0
|
2656 |
+
7682,0
|
2657 |
+
24219,0
|
2658 |
+
51055,0
|
2659 |
+
16421,0
|
2660 |
+
40387,0
|
2661 |
+
41629,0
|
2662 |
+
17798,0
|
2663 |
+
43333,0
|
2664 |
+
6465,0
|
2665 |
+
26912,0
|
2666 |
+
54884,0
|
2667 |
+
14508,0
|
2668 |
+
44759,0
|
2669 |
+
59626,0
|
2670 |
+
63082,0
|
2671 |
+
61280,0
|
2672 |
+
22507,0
|
2673 |
+
20174,0
|
2674 |
+
34582,0
|
2675 |
+
4074,0
|
2676 |
+
7910,0
|
2677 |
+
46029,0
|
2678 |
+
19750,0
|
2679 |
+
33735,0
|
2680 |
+
25856,0
|
2681 |
+
46127,0
|
2682 |
+
38194,0
|
2683 |
+
57496,0
|
2684 |
+
38129,0
|
2685 |
+
29527,0
|
2686 |
+
42724,0
|
2687 |
+
630,1
|
2688 |
+
53149,0
|
2689 |
+
64786,0
|
2690 |
+
59353,0
|
2691 |
+
48074,0
|
2692 |
+
18741,0
|
2693 |
+
54664,0
|
2694 |
+
47947,0
|
2695 |
+
6591,0
|
2696 |
+
12060,0
|
2697 |
+
46373,0
|
2698 |
+
54283,0
|
2699 |
+
13767,0
|
2700 |
+
31509,0
|
2701 |
+
40403,0
|
2702 |
+
41224,0
|
2703 |
+
48369,0
|
2704 |
+
13235,0
|
2705 |
+
40076,0
|
2706 |
+
64922,0
|
2707 |
+
46243,0
|
2708 |
+
58114,0
|
2709 |
+
48474,0
|
2710 |
+
4878,0
|
2711 |
+
34243,0
|
2712 |
+
10522,0
|
2713 |
+
64317,0
|
2714 |
+
51301,0
|
2715 |
+
40993,0
|
2716 |
+
63232,0
|
2717 |
+
16814,0
|
2718 |
+
28369,0
|
2719 |
+
15643,0
|
2720 |
+
39033,0
|
2721 |
+
14451,0
|
2722 |
+
49085,0
|
2723 |
+
10136,0
|
2724 |
+
8114,0
|
2725 |
+
61234,0
|
2726 |
+
60314,0
|
2727 |
+
2521,0
|
2728 |
+
31791,0
|
2729 |
+
25321,0
|
2730 |
+
6346,0
|
2731 |
+
8917,0
|
2732 |
+
24571,0
|
2733 |
+
37277,0
|
2734 |
+
63347,0
|
2735 |
+
3978,0
|
2736 |
+
1238,0
|
2737 |
+
11649,0
|
2738 |
+
20880,0
|
2739 |
+
22122,0
|
2740 |
+
33518,0
|
2741 |
+
2722,0
|
2742 |
+
55123,0
|
2743 |
+
13852,0
|
2744 |
+
5192,0
|
2745 |
+
17816,0
|
2746 |
+
30419,0
|
2747 |
+
12096,0
|
2748 |
+
38298,0
|
2749 |
+
21122,0
|
2750 |
+
16365,0
|
2751 |
+
60798,0
|
2752 |
+
41734,0
|
2753 |
+
49823,0
|
2754 |
+
41047,0
|
2755 |
+
25363,0
|
2756 |
+
36245,0
|
2757 |
+
30253,0
|
2758 |
+
37726,0
|
2759 |
+
37158,0
|
2760 |
+
15686,0
|
2761 |
+
39351,0
|
2762 |
+
19221,0
|
2763 |
+
45947,0
|
2764 |
+
42593,0
|
2765 |
+
13952,0
|
2766 |
+
32555,0
|
2767 |
+
14679,0
|
2768 |
+
53305,0
|
2769 |
+
43032,0
|
2770 |
+
58229,0
|
2771 |
+
51062,0
|
2772 |
+
54651,0
|
2773 |
+
46421,0
|
2774 |
+
5496,0
|
2775 |
+
30446,0
|
2776 |
+
35723,0
|
2777 |
+
11095,0
|
2778 |
+
8013,0
|
2779 |
+
65234,0
|
2780 |
+
59311,0
|
2781 |
+
58165,0
|
2782 |
+
13520,0
|
2783 |
+
49579,0
|
2784 |
+
64773,1
|
2785 |
+
17477,0
|
2786 |
+
710,0
|
2787 |
+
57863,0
|
2788 |
+
36051,0
|
2789 |
+
48541,1
|
2790 |
+
23717,0
|
2791 |
+
20033,0
|
2792 |
+
48967,0
|
2793 |
+
1366,0
|
2794 |
+
20192,0
|
2795 |
+
20044,0
|
2796 |
+
56089,0
|
2797 |
+
38233,0
|
2798 |
+
52832,0
|
2799 |
+
52501,0
|
2800 |
+
42589,0
|
2801 |
+
8900,0
|
2802 |
+
2288,0
|
2803 |
+
17457,0
|
2804 |
+
46880,0
|
2805 |
+
48072,0
|
2806 |
+
8159,0
|
2807 |
+
55853,0
|
2808 |
+
36516,0
|
2809 |
+
15308,0
|
2810 |
+
18617,0
|
2811 |
+
47067,0
|
2812 |
+
27460,0
|
2813 |
+
11767,0
|
2814 |
+
43071,0
|
2815 |
+
28163,0
|
2816 |
+
56605,0
|
2817 |
+
50103,0
|
2818 |
+
51897,0
|
2819 |
+
47125,0
|
2820 |
+
35189,0
|
2821 |
+
27740,0
|
2822 |
+
64881,0
|
2823 |
+
110,0
|
2824 |
+
41235,0
|
2825 |
+
48170,0
|
2826 |
+
32577,0
|
2827 |
+
63635,0
|
2828 |
+
11043,0
|
2829 |
+
47059,0
|
2830 |
+
33265,0
|
2831 |
+
39018,0
|
2832 |
+
60434,0
|
2833 |
+
63203,0
|
2834 |
+
63176,0
|
2835 |
+
11269,0
|
2836 |
+
29000,0
|
2837 |
+
40904,0
|
2838 |
+
52866,0
|
2839 |
+
61593,0
|
2840 |
+
61856,0
|
2841 |
+
50175,0
|
2842 |
+
44463,0
|
2843 |
+
4291,0
|
2844 |
+
8182,0
|
2845 |
+
4503,0
|
2846 |
+
47914,0
|
2847 |
+
9895,0
|
2848 |
+
10641,0
|
2849 |
+
54745,0
|
2850 |
+
59633,0
|
2851 |
+
40927,0
|
2852 |
+
55477,0
|
2853 |
+
38156,0
|
2854 |
+
591,0
|
2855 |
+
53500,0
|
2856 |
+
57213,0
|
2857 |
+
49584,0
|
2858 |
+
37136,0
|
2859 |
+
29178,0
|
2860 |
+
1536,0
|
2861 |
+
16464,0
|
2862 |
+
13220,0
|
2863 |
+
5018,0
|
2864 |
+
53621,0
|
2865 |
+
41401,0
|
2866 |
+
48014,0
|
2867 |
+
19050,0
|
2868 |
+
58127,0
|
2869 |
+
48102,0
|
2870 |
+
5182,0
|
2871 |
+
9947,0
|
2872 |
+
23686,0
|
2873 |
+
59385,0
|
2874 |
+
26505,0
|
2875 |
+
11871,0
|
2876 |
+
13246,0
|
2877 |
+
14463,0
|
2878 |
+
43869,0
|
2879 |
+
45367,0
|
2880 |
+
47300,0
|
2881 |
+
14208,0
|
2882 |
+
7495,0
|
2883 |
+
27458,0
|
2884 |
+
46724,0
|
2885 |
+
26307,0
|
2886 |
+
31222,0
|
2887 |
+
12321,0
|
2888 |
+
17569,0
|
2889 |
+
44897,0
|
2890 |
+
22169,0
|
2891 |
+
50654,0
|
2892 |
+
45054,0
|
2893 |
+
39247,0
|
2894 |
+
16874,0
|
2895 |
+
63979,0
|
2896 |
+
31167,0
|
2897 |
+
40659,0
|
2898 |
+
59494,0
|
2899 |
+
62742,0
|
2900 |
+
51347,0
|
2901 |
+
33338,0
|
2902 |
+
17335,0
|
2903 |
+
62424,0
|
2904 |
+
61708,0
|
2905 |
+
43063,0
|
2906 |
+
37098,0
|
2907 |
+
631,1
|
2908 |
+
16977,0
|
2909 |
+
19975,0
|
2910 |
+
48039,0
|
2911 |
+
31987,0
|
2912 |
+
53744,0
|
2913 |
+
17325,0
|
2914 |
+
8229,0
|
2915 |
+
36349,0
|
2916 |
+
60050,0
|
2917 |
+
35553,0
|
2918 |
+
38045,0
|
2919 |
+
21696,0
|
2920 |
+
32838,0
|
2921 |
+
28955,0
|
2922 |
+
26308,0
|
2923 |
+
33446,0
|
2924 |
+
8300,0
|
2925 |
+
4985,0
|
2926 |
+
63815,0
|
2927 |
+
47707,0
|
2928 |
+
59126,0
|
2929 |
+
35592,0
|
2930 |
+
53998,0
|
2931 |
+
32178,0
|
2932 |
+
20988,0
|
2933 |
+
60481,0
|
2934 |
+
57449,0
|
2935 |
+
45751,0
|
2936 |
+
8086,0
|
2937 |
+
15223,0
|
2938 |
+
11485,0
|
2939 |
+
8522,0
|
2940 |
+
1212,0
|
2941 |
+
60937,0
|
2942 |
+
19237,0
|
2943 |
+
30808,0
|
2944 |
+
33214,0
|
2945 |
+
43705,0
|
2946 |
+
64861,0
|
2947 |
+
56058,0
|
2948 |
+
37645,0
|
2949 |
+
40354,0
|
2950 |
+
58047,0
|
2951 |
+
58183,0
|
2952 |
+
7189,0
|
2953 |
+
26224,0
|
2954 |
+
8998,0
|
2955 |
+
45244,0
|
2956 |
+
35409,0
|
2957 |
+
39040,0
|
2958 |
+
65126,0
|
2959 |
+
50520,0
|
2960 |
+
20701,0
|
2961 |
+
62120,0
|
2962 |
+
60492,0
|
2963 |
+
50316,0
|
2964 |
+
2239,0
|
2965 |
+
10867,0
|
2966 |
+
63002,0
|
2967 |
+
17729,0
|
2968 |
+
19245,0
|
2969 |
+
57916,0
|
2970 |
+
29311,0
|
2971 |
+
22091,0
|
2972 |
+
26895,0
|
2973 |
+
12214,0
|
2974 |
+
61966,0
|
2975 |
+
48182,0
|
2976 |
+
44822,0
|
2977 |
+
45898,0
|
2978 |
+
32542,0
|
2979 |
+
20834,0
|
2980 |
+
59255,0
|
2981 |
+
45212,0
|
2982 |
+
7389,0
|
2983 |
+
57476,0
|
2984 |
+
20420,0
|
2985 |
+
32474,0
|
2986 |
+
1945,0
|
2987 |
+
7969,0
|
2988 |
+
49207,0
|
2989 |
+
5622,0
|
2990 |
+
24064,0
|
2991 |
+
37734,0
|
2992 |
+
46756,0
|
2993 |
+
48938,0
|
2994 |
+
28760,0
|
2995 |
+
526,0
|
2996 |
+
1648,1
|
2997 |
+
19688,0
|
2998 |
+
40128,0
|
2999 |
+
23652,0
|
3000 |
+
47871,0
|
3001 |
+
34379,0
|
3002 |
+
63513,0
|
3003 |
+
59052,0
|
3004 |
+
4763,0
|
3005 |
+
30469,0
|
3006 |
+
41288,0
|
3007 |
+
51886,0
|
3008 |
+
25864,0
|
3009 |
+
22650,0
|
3010 |
+
54931,0
|
3011 |
+
1349,0
|
3012 |
+
17631,0
|
3013 |
+
16294,0
|
3014 |
+
61390,0
|
3015 |
+
409,0
|
3016 |
+
41980,0
|
3017 |
+
33324,0
|
3018 |
+
23767,0
|
3019 |
+
3506,0
|
3020 |
+
17316,0
|
3021 |
+
51638,0
|
3022 |
+
59392,0
|
3023 |
+
30093,1
|
3024 |
+
20738,0
|
3025 |
+
31130,0
|
3026 |
+
56902,0
|
3027 |
+
14834,0
|
3028 |
+
45587,0
|
3029 |
+
17078,0
|
3030 |
+
43072,0
|
3031 |
+
52623,0
|
3032 |
+
52675,0
|
3033 |
+
40726,0
|
3034 |
+
28784,0
|
3035 |
+
31563,0
|
3036 |
+
37832,0
|
3037 |
+
35374,0
|
3038 |
+
52327,0
|
3039 |
+
35485,0
|
3040 |
+
8638,0
|
3041 |
+
9502,0
|
3042 |
+
61049,0
|
3043 |
+
64495,0
|
3044 |
+
21488,0
|
3045 |
+
24282,0
|
3046 |
+
46829,0
|
3047 |
+
8915,0
|
3048 |
+
9991,0
|
3049 |
+
48407,0
|
3050 |
+
56475,0
|
quantum_perceptron/train/__init__.py
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
from quantum_perceptron.train.data_gen import *
|
2 |
+
from quantum_perceptron.train.training import *
|
quantum_perceptron/train/data_gen.py
ADDED
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
from tqdm import tqdm
|
3 |
+
from quantum_perceptron.utils import (
|
4 |
+
calculate_succ_probability
|
5 |
+
)
|
6 |
+
from quantum_perceptron.perceptron import Perceptron
|
7 |
+
|
8 |
+
|
9 |
+
def generate_training_samples(data: np.ndarray,
|
10 |
+
num_positive_samples: int,
|
11 |
+
num_negative_samples: int) -> np.ndarray:
|
12 |
+
"""
|
13 |
+
From the entire dataset, generate training samples.
|
14 |
+
"""
|
15 |
+
pos_inds = np.where(data[:, 1] == 1)[0]
|
16 |
+
neg_inds = np.where(data[:, 1] == 0)[0]
|
17 |
+
|
18 |
+
if len(pos_inds) < num_positive_samples:
|
19 |
+
num_positive_samples = len(pos_inds)
|
20 |
+
if len(neg_inds) < num_negative_samples:
|
21 |
+
num_negative_samples = len(neg_inds)
|
22 |
+
|
23 |
+
sampled_neg_inds = np.random.choice(neg_inds,
|
24 |
+
num_negative_samples,
|
25 |
+
replace=False)
|
26 |
+
sampled_pos_inds = np.random.choice(pos_inds,
|
27 |
+
num_positive_samples,
|
28 |
+
replace=False)
|
29 |
+
|
30 |
+
new_data = np.vstack((data[sampled_pos_inds], data[sampled_neg_inds]))
|
31 |
+
np.random.shuffle(new_data)
|
32 |
+
return new_data
|
33 |
+
|
34 |
+
|
35 |
+
def generate_dataset(num_qubits: int = 4,
|
36 |
+
fixed_weight: int = 626,
|
37 |
+
dir_path: str = './data/',
|
38 |
+
threshold: float = 0.5,
|
39 |
+
num_runs: int = 8192,
|
40 |
+
create_training_samples: bool = True,
|
41 |
+
num_pos_train_samples: int = 50,
|
42 |
+
num_neg_train_samples: int = 3000):
|
43 |
+
"""
|
44 |
+
Generate training dataset with fixed weight.
|
45 |
+
|
46 |
+
Args:
|
47 |
+
num_qubits: `int` representing number of qubits.
|
48 |
+
fixed_weight: `int` representing the fixed weight value.
|
49 |
+
dir_path: `str` representing the directory path.
|
50 |
+
"""
|
51 |
+
num_samples = np.power(2, np.power(2, num_qubits))
|
52 |
+
data = np.empty([num_samples, 2], dtype=np.int64)
|
53 |
+
p = Perceptron(num_qubits, fixed_weight, 0)
|
54 |
+
|
55 |
+
for i in tqdm(range(num_samples)):
|
56 |
+
p.input = i
|
57 |
+
p.build_circuit()
|
58 |
+
prob = calculate_succ_probability(p.measure_circuit(num_runs))
|
59 |
+
if prob > threshold:
|
60 |
+
label = 1
|
61 |
+
else:
|
62 |
+
label = 0
|
63 |
+
data[i][0] = i
|
64 |
+
data[i][1] = label
|
65 |
+
|
66 |
+
print("Number of positive samples: {}".format(
|
67 |
+
np.sum(data[:, 1] == 1)
|
68 |
+
))
|
69 |
+
print("Number of negative samples: {}".format(
|
70 |
+
np.sum(data[:, 1] == 0)
|
71 |
+
))
|
72 |
+
|
73 |
+
filename = 'sample_space_qubits_{}_fweight_{}.txt'.format(
|
74 |
+
num_qubits, fixed_weight
|
75 |
+
)
|
76 |
+
np.savetxt(dir_path + filename, data, fmt='%i,%i', delimiter=',')
|
77 |
+
print('Saved data to {}'.format(dir_path + filename))
|
78 |
+
|
79 |
+
if create_training_samples:
|
80 |
+
train_data = generate_training_samples(
|
81 |
+
data, num_pos_train_samples, num_neg_train_samples
|
82 |
+
)
|
83 |
+
train_filename = 'train_space_qubits_{}_fweight_{}.txt'.format(
|
84 |
+
num_qubits, fixed_weight
|
85 |
+
)
|
86 |
+
np.savetxt(dir_path + train_filename,
|
87 |
+
train_data,
|
88 |
+
fmt='%i,%i',
|
89 |
+
delimiter=',')
|
90 |
+
print('Saved training data to {}'.format(dir_path + train_filename))
|
quantum_perceptron/train/training.py
ADDED
@@ -0,0 +1,164 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
from typing import List
|
3 |
+
import numpy as np
|
4 |
+
from tqdm import tqdm
|
5 |
+
import wandb
|
6 |
+
from quantum_perceptron.utils import (
|
7 |
+
get_vector_from_int,
|
8 |
+
get_int_from_vector,
|
9 |
+
calculate_succ_probability
|
10 |
+
)
|
11 |
+
from quantum_perceptron import Perceptron
|
12 |
+
|
13 |
+
|
14 |
+
class PerceptronTrainer:
|
15 |
+
def __init__(self,
|
16 |
+
num_qubits: int,
|
17 |
+
fixed_weight: int,
|
18 |
+
dataset_path: str,
|
19 |
+
threshold: float = 0.5,
|
20 |
+
num_runs: int = 8192,
|
21 |
+
learning_rate_pos: float = 0.5,
|
22 |
+
learning_rate_neg: float = 0.5):
|
23 |
+
"""
|
24 |
+
This class is used to train the perceptron.
|
25 |
+
|
26 |
+
Args:
|
27 |
+
num_qubits: `int` representing number of qubits.
|
28 |
+
fixed_weight: `int` representing the fixed weight value.
|
29 |
+
dataset_path: `str` representing the path to the dataset.
|
30 |
+
threshold: `float` representing the threshold value.
|
31 |
+
num_runs: `int` representing number of runs.
|
32 |
+
learning_rate_pos: `float` representing the learning rate for positve
|
33 |
+
samples.
|
34 |
+
learning_rate_neg: `float` representing the learning rate for
|
35 |
+
negativesamples.
|
36 |
+
"""
|
37 |
+
self.num_qubits = num_qubits
|
38 |
+
self.fixed_weight = fixed_weight
|
39 |
+
assert os.path.exists(dataset_path), "Dataset path does not exist"
|
40 |
+
self.data = self.read_dataset(dataset_path)
|
41 |
+
self.threshold = threshold
|
42 |
+
self.num_runs = num_runs
|
43 |
+
self.learning_rate_pos = learning_rate_pos
|
44 |
+
self.learning_rate_neg = learning_rate_neg
|
45 |
+
self.perceptron = Perceptron(num_qubits)
|
46 |
+
self.accumulate_loss: List[float] = []
|
47 |
+
self.num_steps = 0
|
48 |
+
|
49 |
+
# Initializing random weight for the training
|
50 |
+
self.weight_variable = np.random.randint(
|
51 |
+
np.power(2, np.power(2, num_qubits)))
|
52 |
+
|
53 |
+
wandb.init(
|
54 |
+
project="quantum-perceptron",
|
55 |
+
config={
|
56 |
+
"learning_rate_pos": learning_rate_pos,
|
57 |
+
"learning_rate_neg": learning_rate_neg,
|
58 |
+
"fixed_weight": fixed_weight,
|
59 |
+
"num_qubits": num_qubits,
|
60 |
+
"dataset": dataset_path,
|
61 |
+
"num_runs": num_runs,
|
62 |
+
"threshold": threshold
|
63 |
+
}
|
64 |
+
)
|
65 |
+
|
66 |
+
def read_dataset(self, filepath: str) -> np.ndarray:
|
67 |
+
"""
|
68 |
+
Read dataset from file.
|
69 |
+
"""
|
70 |
+
return np.loadtxt(filepath, dtype=np.int64, delimiter=',')
|
71 |
+
|
72 |
+
def invert_non_matching_bits(self, input: int):
|
73 |
+
"""
|
74 |
+
Invert non-matching positions in vector.
|
75 |
+
"""
|
76 |
+
input_vector = get_vector_from_int(input, self.num_qubits)
|
77 |
+
weight_vector = get_vector_from_int(self.weight_variable,
|
78 |
+
self.num_qubits)
|
79 |
+
non_match_ids = np.where(input_vector != weight_vector)[0]
|
80 |
+
num_select = int(np.ceil(len(non_match_ids) * self.learning_rate_pos))
|
81 |
+
selected_ids = np.random.choice(non_match_ids,
|
82 |
+
num_select,
|
83 |
+
replace=False)
|
84 |
+
for id in selected_ids:
|
85 |
+
weight_vector[id] *= -1
|
86 |
+
self.weight_variable = get_int_from_vector(weight_vector,
|
87 |
+
self.num_qubits)
|
88 |
+
|
89 |
+
def invert_matching_bits(self, input: int):
|
90 |
+
"""
|
91 |
+
Invert matching positions in vector.
|
92 |
+
"""
|
93 |
+
input_vector = get_vector_from_int(input, self.num_qubits)
|
94 |
+
weight_vector = get_vector_from_int(self.weight_variable,
|
95 |
+
self.num_qubits)
|
96 |
+
match_ids = np.where(input_vector == weight_vector)[0]
|
97 |
+
num_select = int(np.ceil(len(match_ids) * self.learning_rate_neg))
|
98 |
+
selected_ids = np.random.choice(match_ids,
|
99 |
+
num_select,
|
100 |
+
replace=False)
|
101 |
+
for id in selected_ids:
|
102 |
+
weight_vector[id] *= -1
|
103 |
+
self.weight_variable = get_int_from_vector(weight_vector,
|
104 |
+
self.num_qubits)
|
105 |
+
|
106 |
+
def calc_loss(self):
|
107 |
+
"""
|
108 |
+
Note that we will only use this loss to generate the plot
|
109 |
+
and not for training the perceptron.
|
110 |
+
"""
|
111 |
+
self.perceptron.input = self.weight_variable
|
112 |
+
self.perceptron.weight = self.fixed_weight
|
113 |
+
self.perceptron.build_circuit()
|
114 |
+
loss = calculate_succ_probability(
|
115 |
+
self.perceptron.measure_circuit(self.num_runs))
|
116 |
+
return loss
|
117 |
+
|
118 |
+
def train_step(self, input: int, label: int):
|
119 |
+
"""
|
120 |
+
Training step for a single sample.
|
121 |
+
"""
|
122 |
+
self.perceptron.input = input
|
123 |
+
self.perceptron.weight = self.weight_variable
|
124 |
+
self.perceptron.build_circuit()
|
125 |
+
prob = calculate_succ_probability(
|
126 |
+
self.perceptron.measure_circuit(self.num_runs))
|
127 |
+
loss = self.calc_loss()
|
128 |
+
self.accumulate_loss.append(loss)
|
129 |
+
self.num_steps += 1
|
130 |
+
if int(loss) == 1:
|
131 |
+
print("Training converged at step: {}".format(self.num_steps))
|
132 |
+
return True
|
133 |
+
if prob > self.threshold:
|
134 |
+
pred = 1
|
135 |
+
else:
|
136 |
+
pred = 0
|
137 |
+
if label == 1 and pred == 0:
|
138 |
+
self.invert_non_matching_bits(input)
|
139 |
+
wandb.log({"probability": loss, "weight": self.weight_variable})
|
140 |
+
elif label == 0 and pred == 1:
|
141 |
+
self.invert_matching_bits(input)
|
142 |
+
wandb.log({"probability": loss, "weight": self.weight_variable})
|
143 |
+
return False
|
144 |
+
|
145 |
+
def train_epoch(self, epoch: int):
|
146 |
+
"""
|
147 |
+
Train the epoch.
|
148 |
+
"""
|
149 |
+
for i in tqdm(range(self.data.shape[0])):
|
150 |
+
input = self.data[i, 0]
|
151 |
+
label = self.data[i, 1]
|
152 |
+
converged = self.train_step(input, label)
|
153 |
+
if converged:
|
154 |
+
return True
|
155 |
+
return False
|
156 |
+
|
157 |
+
def train(self, num_epochs: int):
|
158 |
+
"""
|
159 |
+
Train the perceptron.
|
160 |
+
"""
|
161 |
+
for i in range(num_epochs):
|
162 |
+
converged = self.train_epoch(i)
|
163 |
+
if converged:
|
164 |
+
break
|
quantum_perceptron/utils/__init__.py
CHANGED
@@ -1,2 +1,3 @@
|
|
1 |
from quantum_perceptron.utils.data_utils import *
|
2 |
from quantum_perceptron.utils.quantum_utils import *
|
|
|
|
1 |
from quantum_perceptron.utils.data_utils import *
|
2 |
from quantum_perceptron.utils.quantum_utils import *
|
3 |
+
from quantum_perceptron.utils.plot_utils import *
|
quantum_perceptron/utils/data_utils.py
CHANGED
@@ -35,7 +35,7 @@ def get_vector_from_int(data: int, num_qubits: int) -> np.ndarray:
|
|
35 |
|
36 |
Args:
|
37 |
data: `int` representing data value
|
38 |
-
(correspponding
|
39 |
num_qubits: `int` representing number of qubits.
|
40 |
|
41 |
Returns: Vector in form of `np.ndarray`.
|
@@ -52,6 +52,30 @@ def get_vector_from_int(data: int, num_qubits: int) -> np.ndarray:
|
|
52 |
return data_vector
|
53 |
|
54 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
def get_possible_state_strings(num_bits: int) -> np.ndarray:
|
56 |
"""
|
57 |
Get all the state bit strings corresponding to given number of bits.
|
@@ -100,3 +124,20 @@ def get_ones_counts_to_states(states: np.ndarray) -> Dict[int, List[int]]:
|
|
100 |
ones_count[ct].append(i)
|
101 |
|
102 |
return ones_count
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
|
36 |
Args:
|
37 |
data: `int` representing data value
|
38 |
+
(correspponding to input or weight vector)
|
39 |
num_qubits: `int` representing number of qubits.
|
40 |
|
41 |
Returns: Vector in form of `np.ndarray`.
|
|
|
52 |
return data_vector
|
53 |
|
54 |
|
55 |
+
def get_int_from_vector(data_vector: np.ndarray, num_qubits: int) -> int:
|
56 |
+
"""
|
57 |
+
Get the integer data value from the vector.
|
58 |
+
|
59 |
+
Args:
|
60 |
+
data_vector: `np.ndarray` representing the vector.
|
61 |
+
num_qubits: `int` representing number of qubits.
|
62 |
+
|
63 |
+
Returns: `int` representing the data value.
|
64 |
+
"""
|
65 |
+
if len(data_vector) != np.power(2, num_qubits):
|
66 |
+
raise ValueError("The vector length is not equal to 2^num_qubits")
|
67 |
+
|
68 |
+
data_bin_vec = []
|
69 |
+
for i, val in enumerate(data_vector):
|
70 |
+
if val == -1:
|
71 |
+
data_bin_vec.append('1')
|
72 |
+
elif val == 1:
|
73 |
+
data_bin_vec.append('0')
|
74 |
+
|
75 |
+
data_bin = ''.join(data_bin_vec)
|
76 |
+
return int(data_bin, 2)
|
77 |
+
|
78 |
+
|
79 |
def get_possible_state_strings(num_bits: int) -> np.ndarray:
|
80 |
"""
|
81 |
Get all the state bit strings corresponding to given number of bits.
|
|
|
124 |
ones_count[ct].append(i)
|
125 |
|
126 |
return ones_count
|
127 |
+
|
128 |
+
|
129 |
+
def calculate_succ_probability(counts: Dict[str, int]) -> float:
|
130 |
+
"""
|
131 |
+
Calculate the success probability from the counts of the states.
|
132 |
+
|
133 |
+
Args:
|
134 |
+
counts: `dict` containing the counts of the states.
|
135 |
+
|
136 |
+
Returns: `float` representing the success probability.
|
137 |
+
"""
|
138 |
+
if len(counts) == 0:
|
139 |
+
raise ValueError("The counts dict is empty")
|
140 |
+
|
141 |
+
total_count = sum(counts.values())
|
142 |
+
succ_count = counts.get('1', 0)
|
143 |
+
return succ_count / total_count
|
quantum_perceptron/utils/plot_utils.py
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import numpy as np
|
2 |
+
import matplotlib.pyplot as plt
|
3 |
+
from quantum_perceptron.utils.data_utils import (
|
4 |
+
get_bin_int,
|
5 |
+
assert_bits,
|
6 |
+
assert_negative
|
7 |
+
)
|
8 |
+
|
9 |
+
|
10 |
+
def get_img_from_data(data: int, num_qubits: int) -> np.ndarray:
|
11 |
+
"""
|
12 |
+
Get n x n matrix representing the image of the data where n is
|
13 |
+
num_qubits.
|
14 |
+
|
15 |
+
Args:
|
16 |
+
data: `int` representing data value
|
17 |
+
(correspponding to input or weight vector)
|
18 |
+
num_qubits: `int` representing number of qubits.
|
19 |
+
|
20 |
+
Returns: Image in form of `np.ndarray`.
|
21 |
+
"""
|
22 |
+
assert_negative(data)
|
23 |
+
assert_bits(data, num_qubits)
|
24 |
+
bin_str = get_bin_int(data, num_qubits)
|
25 |
+
img = np.zeros((np.power(2, num_qubits)))
|
26 |
+
|
27 |
+
for i, bit in enumerate(bin_str):
|
28 |
+
if bit == '0':
|
29 |
+
img[i] = 255
|
30 |
+
|
31 |
+
return img.reshape((num_qubits, num_qubits))
|
32 |
+
|
33 |
+
|
34 |
+
def plot_img_from_data(data: int, num_qubits: int):
|
35 |
+
"""
|
36 |
+
Plot image from data.
|
37 |
+
"""
|
38 |
+
img = get_img_from_data(data, num_qubits)
|
39 |
+
ax = plt.imshow(img, cmap='gray')
|
40 |
+
ax.axes.xaxis.set_visible(False)
|
41 |
+
ax.axes.yaxis.set_visible(False)
|
requirements.txt
CHANGED
@@ -3,4 +3,5 @@ qiskit
|
|
3 |
pycodestyle
|
4 |
pytest
|
5 |
mypy
|
6 |
-
gradio
|
|
|
|
3 |
pycodestyle
|
4 |
pytest
|
5 |
mypy
|
6 |
+
gradio
|
7 |
+
wandb
|