-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathblocks_test.go
375 lines (314 loc) · 79.9 KB
/
blocks_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
package whatsonchain
import (
"bytes"
"context"
"fmt"
"io/ioutil"
"net/http"
"strings"
"testing"
)
// mockHTTPBlocks for mocking requests
type mockHTTPBlocks struct{}
// Do is a mock http request
func (m *mockHTTPBlocks) Do(req *http.Request) (*http.Response, error) {
resp := new(http.Response)
resp.StatusCode = http.StatusBadRequest
// No req found
if req == nil {
return resp, fmt.Errorf("missing request")
}
//
// Block by Hash
//
// Valid (by hash)
if strings.Contains(req.URL.String(), "hash/0000000000000000025b8506c83450afe84f0318775a52c7b91ee64aad0d5a23") {
resp.StatusCode = http.StatusOK
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(`{"hash":"0000000000000000025b8506c83450afe84f0318775a52c7b91ee64aad0d5a23","confirmations":35855,"size":1266283,"height":604648,"version":536870912,"versionHex":"20000000","merkleroot":"0a0a8b69e912b666bf0fc6229fe6d9940641b3cbca11080a421a9b3c910a432b","txcount":2417,"tx":["02fd92760631a863be3d20f320d094839980542ec24181208d453cd6972be60b","c96dc063a8fa5a7395d406104ea54f58a043d1f647b698183f0b2cd2777f3a70","cec2c13c7e2dec870a5d23941f61b531f4c5f45a9fc071476bfd2d88962faf02","f943938e0f522dcdb6af831d86442d52bb460fc809e4036074bcb7fd8a481529","57f30f123b56c5802e8ac618f57712a5d89aab4567cf1d8e632da168aa0fb59c","04a97fbeadaec1b55c8bd87522756cbdff22cbea6ebe2b1a8dba967f8566602c","7fe24fdaf549ceb0a1e1d4bed9d3849e0fb06dff4c7a8d88da854718af1e4686","938789dd4907d55697f5504b8e67d773f5e8adb160c82d8ab94a777ad2d73d03","7628a62c621832ab6c5489a1cd11eb2a101f51eae16183a1ffddba3ddaa36f55","69a3cd27cbe2426252fa400f764044282ac85a1f2257d2d7494f6b5b2caa667c","ff6214b537e21d7fd8e7ce355974e65480506f3c4082bf9769e142e54c9a1a0d","56ccd5419feaff844156ce37158a37f6929370b24b24e35eafd30b866e324bf5","b461dfeb8426b4070e6932a2526196292d38462f6ec02cbfa567af656186de64","584d9a31527cbb11687fb7b56315a02f88a76e99239d136887af1fb3ea00b3a6","badfbaed360b4c789272ce8af795f6bbd8bd747fb3808875a790489b224ce3fc","8e329e8643899a73b13c4d4dfc90c4c57a45bec2ff292cd396beedd2ff040f04","bedde5e8161723997b6d0892fce2771e64950e84249e46ece33c18acb5747663","8637435caa16418539e9cd336d2cf6d930af974cfe4fa9d9829933169e916912","f970d88b18d5a43f6a4f1a4860eeab5c9ad25381c9db2d0c40e22c28b6a64e2d","b6ed73f7a1b751f0ba8266944ef226ca5deac5e0175cffdf52ecaa54203b345f","3fa4be6d83eeae42b736cf7000c6735f860ca72aa24668e6d4a8574938ccee97","7f35ed6b3a99f431567be9d6ecbd980aec41dfdaf15aa5fbc616f1306816f53b","ffdf9dbb24748b19f1c51d26d2a6867ce61513526facc1afddd828be76483b1c","6484bd94eb84b927231c52e53c97171c9b8e7878973dee07cb7592941bf42e24","12083307398037105e5205ecbc0c75a70911ab3ccb531c7da814cf9fd7c8522b","3add6518033f98da5798f38de199ecfe4f41f86cdaf5e4f701911a130de05232","398ef4a9d285670c177025eae8fadc18b089b1f513635a22ae6f64d398f3d88c","5d44eb253696c7191def0e8ead2c6a105e93795559a2f6b1f50ba0cdc8d5ccb2","a2645ff7d5ffff1b1dd3974b79bb31a49d105f938fc1936b9cca7f3d06dc981f","908e0deb783201c3c1ff9c5daabfce079275caf3aa17bd0db1368b4acf807d4a","f5868eb59e394eeea74c4ef03e8d08cef60d9e9e9c8e0e3dbf407b44ea7af63c","ed919e334e6a69dfc59ae072f9a8346b06f7d1e3c6ca846acf9b20a78fb79f13","74916a3dfec5deebaf85d0f1968e3172199c6e5e4e83ff72e249aa75c18bce2a","883c111d183ede3eda5c89e6f707433ca6ce95e471dbac398f0d90ce647a87be","17a2e2a911e55343c6114c218c0a614406c2397f44e25d351ec638241056c5b5","7bc300e1ef914eaaf37a225de928de81776fc6f01c34618289eb3390de1a1700","77b6380cdd2e8734100f8f8d10bfceca5f04b7b28569aeb9440794bdf909b70e","818081a91fde1f66332931f24d256ab73267eeaa52571295b98839507dc55960","6d9f6c8849eb625578f380c5c6b7f61f80fae760f80c85f9a0b89105d0ac1334","61f54ebc0b566b3c66c7d420a848b6c8bf1d1eb50bf237571581d72dcd79fb89","104674f2441885fa7f6e2c5ca36a69455a644468abe525bd5c93a8d2e6f4bb9f","c8bc4d69fe403fef8f9ac416676d1789953b0856248fe07e4d6624196607cc83","d6e193fbf52b94b8e0785335569e2ebb206b6a048eda5359673d752c65ceac3d","828ffeea34d4b1dbc82470e07bcf68ec7e5eb0c8cff9f87a44f929c4ad3af91e","e97ab5ecbbf4aac37e3fced978f464116902b50d1aad4f573a8d70bd1ad2e870","70b686a8d1fb354aa20df6cfae88c617e44e51139407521564777d5c6fe2968d","845c647bfa35558a40f09c8539720431b30c27cd47569d2aefb764c721d14355","bb81aa9fc897cf4b1a2310d0c06a488cc95bf7af1991b946fdd8d716fa7bc025","31eff7f5570abfd8377817b4c898be26becd48a28eb2fdd7fc3b03938e1c8b3b","a4050679749ca7e7707216ff2f193fcd1a1f0d396976560565c23ff3794dad0b","8b590892a32bce65481f27549dc61d6b5ce36122cc1ca5b5afb0dd36d8e04e10","7503d4d9a5abbfd094228bd01f2e9166547353cdd57efa9be0d649d6e0350071","9fe49a525c6305782afd83bbd86af6ff6876ddee2d6858b3b6b0b93206d46ab1","de0d2d9d06181c7a90a455c4912a8386c9449927ead5874326355692934d6174","bb9b723222accb70427d1af3ce625660f4c5e27afb95f01dd9393c314c849392","15c0445cf0dba26745d6a96d89336b3839af996629a7d2f363fbeb3235d9a893","168c5697644292c3318dd1cba5bd427cabe766d4e9a9ef2e8491c2572cb17997","3db12765997258ffb2fc47963321c6b32138b11ff888baff45e7651ee3face9c","fa2e9ba0624f63d3c9894a62ca2fa7afd5c16241450a4b65a92798a98a2471a0","f6b7e038e5d4619cd94fe88dbf6bb5dc33b5e33970e0133302997ab86d9cb6ff","c0e41803b9e27744b636a5f00085373512b636b3ff14cd4587adb1fd28a20e10","eddc6f4373e40c7b70e18e57e2841ea913d663ad7a41a60e285943ab898d991b","1f54475fa935769a28ee81e21b3ab75fcf0a0612c360da4a0353f70ec0b31427","bd4bb0ede863cddbb2c577ba58cb8bc06b906a6b8072e4c8842af77e1f1c4565","b52243c3b0a7867ccbe818f99c3364bf3e80cd84c9e60c806df948946b206cb0","538bfc2800b35ab6551033e6a18f5918a8b6e3aac815f198471a2274bb0eb6bb","703f2777d5a6ec8d9058d4b5235059a1455b6533c37c31ed6e633c94c7bcc7e6","16d75bf26de48f8ba691ae5281a91484dbb79d0adfaac358ed34bb50f4c81954","1da7fa06c44e482254a34427642923bff3506af2ba6aa7cc11a2309713a8d520","ed9a7c6b9beb99812cbae790233d926538e0b6bddd78add7fd69173cfcfcba20","6405dd557682b20bae60ef72eb628366446517bc4058d44adb977b034e2dbfc5","ea1571530230773517e9420050149747a87ec5899077bd41819219323f5eff25","083dac32ffae0953a680026e690898e2cac57d861f133c6baf4f7f508185a825","c3e01a32689abc731f44c83f277876013108eb2e3676b031dcd73b1b65ee1b44","d613bf31b07561ae938eef26b36c53035de8f5a1c306679c18d801a86b139e45","4a762de11e54e8cafb9632874b314a0464ad4c52631fab957ace5d6c641ae64d","fe8920ffc48b07a8c05ee0d2728844eceb54f1cf4c6c188685b884ed286ddd7b","f3ceda5959f8847710c5a421edad7bc7cb1d790ff0f5bb74616d7e7e993745a8","89e8651738ad47f144843e320b130ab012a5b0953f193ae3c36a5c159ab078ce","97c48bfc6bd095108aae8e698f73df53067ad944b0b63b940b82230005c9e5d8","fba3c9e4b9a11fdc8dd7075fc15b4f30234918db35b62d80ebe21979cfd39fdb","e338d5ed029fef3f47a9cb7267c9d635ea1e7215d00be94689d4f1fabd6156de","19949014c1e32101ddbae61c0c4b6df19d5b7fceefc15ca5ecd19b846717b0fe","5258f19f60e48da7aff0d89c1540cb80ed3db5fb4748be0b7ff6d738c01d958f","b4468364e00447ce9ec07bbddd9488403ebb5af3d2600f575c036f4cf933e3cb","5adfe8b1a6f71474fa67aae5f87d1dab114ce4a7ece54f974d94a32f94782bd6","5ae036e667183b65f60af3fa0c5b5de3d453d9f831c1fc0462addcbfb42b1b67","a6ae87ad2885ee2cd25407a2c5ba0d33a112915adfd95748ee52a81053972b7a","dd6780dda1bdfac4534661d2f0ff8127cf525c8ea39ea636478db204273b22fe","c4f3721e71dba2ae2f3ac67a3852b4294095815c98f743f70898d5af5c56acbb","0cf5c537b46b72fb1bbb6ce73ca129e8f5ff99a76cde281eed390e43ed69e14c","7a6d52d6d41328f0819e585da780d6c139482f1b2f71e221cd87ec79ee28c9ec","70eb970d900c74e3fa330457a3b053888a597c6499e19a673039198c377aab13","3d948e5681bf591b127f6e8cd0af909f1ee9282b160bd0bb2b310d164c7d0009","cbbf42e4585c16bd2779b6b3d234015f9e42458c00100aaff0bc0d3c198ae785","ca0918d29187a0189280fbf9b0ff51640c3b1d62804d3310ad7997bf54fe72ed","c613adbe061969b7ce780307f49bb76208c433e9d694fcb28ef7a59232878b60","5ca9764ebec0ba045b7bef08f82777f9cc3496ed6c1e8448f3848042aeb37bfe","9e2edb517a5b51134c35b7049644649a96b838f42a02d496eea67fa5b22f7845","fbefdc48eb7daec1a1c9bc2e312580e458aca7c8cbdf33f10a616ce949797fb5"],"time":1571273258,"mediantime":1571270127,"nonce":182330015,"bits":"1807bb0e","difficulty":142224812442.6122,"chainwork":"000000000000000000000000000000000000000000eb1270ba0f212cfead8c87","previousblockhash":"00000000000000000673f98b1d0e3859e292cacbbae6cdea70d9d95b290beecd","nextblockhash":"0000000000000000009f8d986a5ff7900f079ad0120f16b84798438e2476a2b1","coinbaseTx":{"hex":"","txid":"02fd92760631a863be3d20f320d094839980542ec24181208d453cd6972be60b","hash":"02fd92760631a863be3d20f320d094839980542ec24181208d453cd6972be60b","version":1,"size":118,"locktime":0,"vin":[{"coinbase":"03e839092f636f696e6765656b2e636f6d2f775931de48967bf353ab2280ac0000","txid":"","vout":0,"scriptSig":{"asm":"","hex":""},"sequence":4294967295}],"vout":[{"value":12.51310548,"n":0,"scriptPubKey":{"asm":"OP_DUP OP_HASH160 8460e9a972a8600766a1b38fac4a2cfb8692d3ad OP_EQUALVERIFY OP_CHECKSIG","hex":"76a9148460e9a972a8600766a1b38fac4a2cfb8692d3ad88ac","reqSigs":1,"type":"pubkeyhash","addresses":["1D4xHwLxA8E9vU87N1ELHtPEZdKeLhywY1"],"opReturn":null,"isTruncated":false}}],"blockhash":"0000000000000000025b8506c83450afe84f0318775a52c7b91ee64aad0d5a23","confirmations":35855,"time":1571273258,"blocktime":1571273258},"totalFees":0.013105480000000114,"miner":"Coingeek","pages":{"uri":["/block/hash/0000000000000000025b8506c83450afe84f0318775a52c7b91ee64aad0d5a23/page/1"],"size":50000}}`)))
}
// Invalid (by hash) return an error
if strings.Contains(req.URL.String(), "hash/invalidBlockHash") {
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(``)))
return resp, fmt.Errorf("bad request")
}
// Not found
if strings.Contains(req.URL.String(), "hash/notFound") {
resp.StatusCode = http.StatusNotFound
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(``)))
return resp, nil
}
//
// Get header by hash
//
// Valid (by hash header)
if strings.Contains(req.URL.String(), "000000000000000004a288072ebb35e37233f419918f9783d499979cb6ac33eb/header") {
resp.StatusCode = http.StatusOK
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(`{"hash":"000000000000000004a288072ebb35e37233f419918f9783d499979cb6ac33eb","confirmations":74834,"height":575045,"version":536928256,"versionHex":"2000e000","merkleroot":"4ebcba09addd720991d03473f39dce4b9a72cc164e505cd446687a54df9b1585","time":1553416668,"mediantime":1553414858,"nonce":87914848,"bits":"180997ee","difficulty":114608607557.4425,"chainwork":"000000000000000000000000000000000000000000ddf5d385546872bab7dc01","previousblockhash":"00000000000000000988156c7075dc9147a5b62922f1310862e8b9000d46dd9b","nextblockhash":"00000000000000000112b36a37c10235fa0c991f680bc5482ba9692e0ae697db"}`)))
}
// Invalid (by hash) return an error
if strings.Contains(req.URL.String(), "invalidBlockHeaderHash/header") {
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(``)))
return resp, fmt.Errorf("bad request")
}
// Not found
if strings.Contains(req.URL.String(), "notFound/header") {
resp.StatusCode = http.StatusNotFound
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(``)))
return resp, nil
}
//
// Block by Height
//
// Valid (by height)
if strings.Contains(req.URL.String(), "height/609930") {
resp.StatusCode = http.StatusOK
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(`{"hash":"000000000000000005def20c31590796ce9b8d808248c46b7b352873919c7112","confirmations":30573,"size":305778,"height":609930,"version":536870912,"versionHex":"20000000","merkleroot":"1aea7d106dab44f8f634385fd5417ec1e6d53c43d5e10e82ac0ebf80ad20a93e","txcount":793,"tx":["fe26309c88e67c04ffdf3675609419d4ea4caed70903281ddbca3defa269ab6a","c55af95caaa8b9f4ba6b149a2b53666555221a1cb5e3b04a3c7532cd06b7210b","7f550d94386fa4fd7065c1f53ffb899c96ef23e34993b34aa4eb59aca4f7c986","9a03e98b98114b09088f5fcff931e1be218c412f558ff86d50455e2d4421d86a","62b06022d4f224e8ff76173498c5b88168ff17f0e39cb08ed61adec52019ddcf","707e408f63341285f29ff542e4bc9b8e6600f7957680ff4c6a9d8fb139e6142d","c3856712d0673daaecea0fa1b8bad2a251cf758379628a5b926598dec83713bb","39e718561f9b288fa9af58ddbc33ce90e60bf9c20f248dd4c5493733eb5649f4","efe7f6c60143ec70c660089fd7ea531277727fd27f76f8d19950ec790815cb4c","e8b5ea76e922d1c8f260895331351dca274ef1901b267e6e37f54af368d155b3","9659bf0723db127db90063ef4b17ce53cf5f4c0a6315ccb84f128b9451479ed1","52a70cff85d30115b63d2d1eb9542a1c5245dfca014ac9475eb96a1885f3d6f1","f27672d73ef603fcb9570a3b40d93c76a86fe0020de42fd98ff6bdc43d1c0100","d183359e19eeaf61786fc4a7a3eb10912ca3d2e56a1957dd0a63e3323bd31c02","723c2ef2f3bc0704412d0d3f4b4803893fe98014e78d8ba6b0902c10df3e8403","94b04a240cdab6ded7554023aee63db569dcc62e69d46ac866567b678c94ae03","a68d5a4847fdbe244eefdf79426a706e06b33c16057eb78a1dd1cb8151e3d404","c34fff3468722a1cf0f1a0f4f70c682df0c6f942dfbc413970b7a656f0ba0105","06e30d0ec335dba29ab794c605561621dbf4e55d96bf450f139931000540af06","dcd9ac7ecb98c5ca8bbedb83ec2c655853bc90f79d2c0b6a286433a2632cf306","ac7817b9f0de6e5469c38a47c5db2764db711ce1b5bc529bd84753c470ff0f07","0787dbd24b331650bfd016ae60e149ae0a46460c170620e321151cad3f60f00b","ed792df324f5ae7005890baa673bc220f0d09c8bae10b27fbfde2711e73a090c","d8503df4833a063d57cc07284ef914f92d66369776a8a0673c2867584620960f","47326ad365daa0c110f850b0a72acabc5371f95ef556d05cc913f7c4a2a5bc0f","18d9be8ebcc841bf9c4df8958613d88f0c0d7e8aea31fe6941a30a7a7707ec10","628f6a324bd57c1c0c66b3f8fcf24e242bf666a2973ec581589556c3db944511","72e3b4f79da4b70954b757bb194cae37ce1c2926672d3452b71d6e9a405aff11","bbe887937bb2548d1ad008950c6eb664146ea49eeb591d019cb9959dff2fe712","b34e8edfdc79904c60fde3749cf68d834de2a48e2ae516190ae798ce982bdc13","f348686e6baf645df5d3ad6459b8f43aea827ba17d850458c912352a4dfe7315","020c62fe4b132cc1f7b612db387cbd409206ef5d0d47fde3916069dcd26f9c16","ba7b4912d51d2eaa76b350149eada8e9cd9788458dbb1a049d3baca7d74e8d17","adc1072207d216f41016f305d6f059f939b2040e9f95c1bcfe17a2fb28d5f518","d91be220f3217153e0ea700670ff95de4eb220c7a46d2050b0bd95e77845761b","c6b21bcb7df98a20787433a0bda1051d56f533f60a8153b64f04abb7021d0b1d","1af0888bef94c9724e046924ecd966d54c92e64eb9f6d38445d8a1fcb759ef1e","2bb325be7086608a01fb9011346d4be1cb8868d4c597fb5d07f1794a0f29211f","3c05f882a55bd54fd7909f4d8c46bc1f6dfe0fac71b0a045b99078eb10223f21","335bcc8b7cd40912534373412830f1387afa77a87c9934a075fb877893c4b221","d0d1413522478c3be9651b7bf5681e39e5994ed3ddda41898d5611e1b1367425","7ccef74fd58772a282442ad7228edc99a4123a372a14059cd856cacf9a3ba327","b091bf97fa03b005825e60164effca581391d8002c7d4510ff7ed9610ebf1f2b","9d031a5136e1255a482b9ec06e2971c4d2e96ebf94bbc2e4905a0852a8fc712d","8ccda40b0b6141641cdd2740b525058c3d447e5ba28baf5dfc90e711c948ee30","1282e87b9f10666adce5037f4898366c0dd1fea9b6c40a5166344ce8853b5b31","d46083cf75215ee5d9181bdb685827ea50712a087fd7c1ee795852a4eb379d38","03a75e339402f558396bdf0e5e5f58cec56804e2601ea2ade6b74bbbb59f1139","a9e68f8626c41415e9fcbc8a692be5ed7264f44ad5a01b3f1cd544449daa1f3c","b5d793c8f8ce2f8cae161e1e8f0a6152222ed5a2933af6a0d168128e67426b3e","bb4facdc2c0e40bd87ef82912570869a084987d7ff3172a7bed9115e48314c3f","02569a7750c9ece7258c7052fd64844dea326e38bec29b7e81a2d7bd44b5853f","7292a315bb9a366c473e1852c1f7540d57d2abbb559b0328d468f5f64db15340","11ea4d68182452fd2c8bbc6d0eaf29ac1ab1eb640bf3fdb3bfa16dd7b2b6b841","41c6ec77def51dd5681e0cfd33b5644ad22b0456e9e78c706551ed969f026b42","f34c6c439c50177b09c771f728e4e26e8cd149c85ea0cff34d6a4b32abd2f544","7091cbc861c58059cb8acd5b0cb24721b9de709bdde4ae49cab6f986ff6be348","83973436ccc255cc0b353c127e8444a1f29b96076d0a8f7a98cff28c15dfef48","2a60e50db270eac52eb670af16d95b471925ea346263cbea9b14ece8ac4b0b4a","5dbfc094aef6c70094ec5daa0792b6de50ac5a7767d08f43d7403d560945864b","fd92f0d1b395c06ba1de02f6cbe05910ed2e1dcae9ff0822a75e85bd015d3b4c","4a5294be5451d30078e7013afec9c7157a171e137c7f046b4ede9950e792674d","86469d3be8b4f06dd41725d5ac980ec593598d7018cc3eb6b5c73f18ee80b44f","c70c1f72385aab99091957980844ca49d5d708d5b9b380b6c5ddec40649be051","06e0b5c492add858afb33b6037abc115b4ba00602b29df14a820ed082bd5475a","327cf25bd6cb12686b1ddc777856513b18663220c0b4f23c94d4607c9e33755a","ceaca4ffa9f8961a78e6178cbd273b8900de1113f8fe762f7ce41fa27b64c05c","b05d097515a04302131495859a4b05dbf579a043ee4f92512bd3dd37598fe05f","4c1d985f9e8c8490b2943b35b141e5c951a553b16d95ebb648874c85262f0560","3edbed4b19b4b05ec2f6881f08805be9bbfcbeb44c26bfd68d0cf5d7db2b7c60","267848908419b19aa3baeef6d03ed4bb9f57a1b44e5213ef62cd4ee2b28eee61","94bb37b947e9dd1cae74531b45124f666397606c4d198c6f2fa1b98b8a9c5c63","ff0621229ec5a8da5876922d7da205085f8ed9ff31cc2b952ce85ab189fe7563","2d8c53a9ad2c3afbd7bc4b17bf34853ececf72eb0cc6a762f92e0aa439762964","b59fd866bf22e7e74c5e1b4b98928f56e490d20c8b5a564d6c7b379f00883365","a0607866abfc32ff7666d7f14d1330acc8facf6c9ec38d723558fac5a3a8c766","36688be9aa1be2e7a1a302c31a9b4527d2839c0b1d4cf24bd451a341d8c14067","10a38b81a362400c2b5764ce640eadb589660a52648d41fe7799f2d5846c9568","ba8c1ee2c7e11f99d12805683648ca6bb6de4da046933ae7390034ddaf126e6b","2d10d07186f113e79cc9e8fbddb744cea0eb5f629a75bcdc09e5691f75f40d6c","88dd81709490371fce3317f9bdf2274070b7507752a45a73da5ba86f2ee7ee6d","b0df55f0029a1be9a4acfc87299e6322d3ccb8ad821720b9240e9d6577b06b6e","3398b9275658818e61409a617e42ca04521b41232cf862349b1ad93e37099571","3b1c998553744879ebfa4dcd9657897dc2cd5e1af9465ef838c5bd83d5377174","79a2436755cfc572e8fecb81578681eaf83dffeb97efdf8f273574265f398b75","7914f18e75bd5c9cb7d366241fcf2553db015fd74c74c8b0c62f873bcc3ca275","8d5c35edb0491b5338102b393718288ed43b8f1c1be9ce04b654a2fe0dbee775","bc0255a58e7e373a8272b588e477ec2ed424dac58680d6c344c1eda18f833d76","f25f4414460e70934e3aafad1c64c1bdbe36e3aa83ce75989cd7c619e8586476","dc42dd977dc35ed52ca32d0057574a90a2ba9734003046b5f53af9eb7e730879","3824f555a6b8262d14b842bd0f4d698926c39db3fd0fd2195aaa44d20e33307a","347847a1065ae86c9845360b16ab9862fe6d33241578ec75dc01c400dc0df17a","c4faae1e3a95863d0cfd8caa83e8b9dedcabccb26b6175c711feaebe1299c97c","7116c01bfa551a14bcf32ffbebb898fe41deb3b7054784d1d2f81b0786b58a80","02a6b3b1a62bbbe89df47ae8474f11625acd0baa8c48f94c8adb9558420ab780","5067acb469bc2de6ca57e21a7fc709383f2c14f387b0905bd0a901a0a625f880","74f14c4a0d23afb35590b08fdf9898d203a32174b530ba1babf380d01b0b2083","af6a8bb5bab729175ee987f8da630f87bf78a6cd91d0954540e91d8753ae4c83","b72714ea3013e4d01c98517a98523ae82e1cd4ce272b3b0f1b1d12ad2df34c86","3f37671893c2ac43ccd91afc167c47ea7b80baeb6145b87e104a3a7b7b597987","7441165f0aeceff60fbbb6e2ea7106adf05337591ef834b21ae532a5c5ec9988","f999bc84c42a567e155c009f4efa967812abfe3bec0462daaaa0ba35696a8b8a","8ecd0adc8434f5fc6854c4c842ba4ca8624a53a62b02c5409ae5958636d5dc8c","a2e35bbfb82fc19a240a3c73f59aa19e86783f8b2cc42a9013c7352cafdd548e","1b9829fc17798632078d96d9267e0d44d06fc0cee7d393fdba5c6f641695808e","f1c2348bb989d709c0d55357697c80d50b20991bc0648b3525b1be367a21eb92","94d0824fdbfb5a6f167a3cca316bf662e7d46757fb0bb30fa63546afd84f6895","3582432a28d24480a7ce851da1ad144e2346932ba1f82ec79ec89de3ef307b96","be88b898b97f62b3eea77592fb9464877ffd0fb557282ae73a1c7cb9645f9e97","e5f0e5bbcd12ebce899ab7cbb269c0ea927ff1f7f370004700df52583566e297","3cdd1520d6a4beca4d8fa125292354e1c8aa58cd16d646ef2bafa5ffb4cad499","727bf6062601ba09303d8f8617256e1f92acee865ddf23266f0e11fbdd05529a","0035256cd6a3c2b22ac4c0354c143ab0355c31308557b034a443d1dd5d173a9c","88b94e5f112ff4b709213824141d258dcf007367b0a4c1121b02042c09d9fe9f","54ba0f644cdcf985459d9b40e46a01f6af0a9a83f2c5ef568e4d7699e67e39a2","d4ffda2c4b050fa419d161456547048d56fefb01b63c10d00dda55b1991a49a2","6abaac9ff0e570056a1fb54f979503761d00d4d730afda175c34d670ae49bca2","b95d41da05550cff1c443ea760c392ba14c5f05c0041eb3c2f9eab27f9b805a4","3a1a688a6ee799688570bd9a346f5c5617a2a59d8595060a688da9201bb32da4","292238439fd2a96a3a7cb34e3e118de693e8cd4a5e5507ea96c4e51bd4887ba4","fa048f3598b0994195924ff19884798a850683fb27e095e4ae76455d5ab0c5a5","50b9f69cb8cb13384b5d449d3ac13e61167e8ca0f1a7e9ea1eb6646e54c259aa","92e5c6af2247142aacda0dc47ea6a850b105042ce4bdccce4644cbc4d1b3d7ac","6f0c9019b9f0a6d72bb4a3a79e29e17349c38417b7a7900739465d7c0bed41ad","cc1bdbe6b01a277dfa0b83f46a933354b0dc3838e2cf6070840461a8b072dbad","0f94d18496c6da41b0e2afb167a49af9d37a936c1c5fab9ea73287f9af5e6baf","9d857e496282a865084e5067d89804cf5ff36acb31e16fc588b68b200dc449b0","d1be39fca72f258af3573c14ea9db232d091ea8cf5be7ff0928bd2c2423cd7b1","27c3ec240b907103b5df79bfcf84916440618808ccc557ff28652b1a5257f2b2","bda1fbc27c09e78b9a51cfc927e9592839e14eaecd9391f671d747f0f93004b4","afc9bc86de0eb251c82aa888074774808163e3129d21e9f4ba1019c2373723b4","25d6f911eb53fb78ee3f08d4d9b7dbd135e26c84e90d304d8a49c4d2fc8965b4","0970290e4abd08c3913b8845cc771f0fff0425c8134151ca84db8a9660fec3b5","c64a8aaf9e4ac30fa87a81e00e33855483981d151a64904c2d960084275997b6","79424dbf7fd16d88bab5001a62e55516a7f5807d81f23375ed16f0321a8724b7","c08abdc579fa803c72f11cbc45fe613f768928832e9cfe2ee195cd2d938301b8","e7315ca1609eef04798fe02a4375b602f0cc93f7e6844d8d60d218152d5ba3b9","2bd70aaa2d253fdbfe78c3a3bbedaece063674271eadadc23efb2b0ffc9e21be","e14b5cd9f319bc7c626f64381a87360cca645be4f4b8083a45e3c0d152094abf","e34439be745f96433ff7f4a3c304889ab2ac0dfe00180ebc5cd7a3a31f18a3c2","439da82d636006c86e1247a516cd45f3b6030d232e14198a16e46175f9326dc4","b0a322b3a3a3ae4fcaf74d2481f7eb57f57b1eeb09859297528f61e2db46a7c4","19a385cc52efdc9b142530dc91724b2d175314288a38f2df6e8dabbce6a098c6","00bede430490e73e844eb2864462e452e484514e34a0fb62944bbc4ea6bc6ac9","b7204e6b97bd9a92f727f6c5a412e41519af0901840d48e5daa13e13813d9eca","347af70a60a97bbc6f867ee3ef8a8cbc578db589229ba6be9c400671f5655bcf","639d55f105a07e3f6a371a4b194cb70b08b80b99a690cc8de216ced0ca7c63d0","ce9d4dd1e3504f8f142930c737bf4711ea26ee14991dde8e26e9e8b69b3afad2","7a4c542b97234a770986c9cc7507decb1f369701bc7aaa4948a8309d3810a9d6","fbffc13c0445281a263006bcfab1180646efcb614dae63907b9e5e9113e137dd","c8c93cef24e0089e9269971a6492eb5ed6dd20edd6b4e751c926125d73dea7de","29ab6ec275cfab6e941b1d140fafdf5a51e66f8af6e12f44889d3076c84100e0","0ae0d757e7136c7f708a70b2c8701b9f6fe0fbf80c3b337af02bef2338f160e0","b7f349ac571d54163d0780ec43f1c6f062291f59eac4c5766abdf1956ad47ee3","9a0a63424e92c8d68fdf80dff3bc14278d394869601ee51444793b9b2db14ae6","8af424975685f4751ae3f1f6a7b2f7eb1894450f3db32f73b1496ab097525ae7","617ae98b6cae34a098eda4bd992c2c7cf4727046be226bbfee757e8dee9da8e7","9a4cf70766b596ea0a2b5e54d5066cdf5bfba19de4ceb642b357d476bacc84ea","88d3e77acf3ff14b5a69f5fb6012e6849237aeafc4a0d4c462287d275458c7eb","c6e0a8a24d4d28ed61831a7509b03631ab3854174aa4beecea355d2878e025ed","9c4965b82fba7bd4b51a7de406fbb10fa0969346fdaaff9af9ff62de5a599af0","7c3dba10436cc2bf57ab0b8fe53f16cbb41bd0d3d9cb6e9065f0cd1fe95aaef3","4bf882db7650bce9d2cc80843bc28cfd35f7f77e7b8c66f6a7cd8db51024b9f3","05c9933276aba3cc7617c329679dd1000c2bc9efefd0d9fd265cac11ae2b7ff7","9a4cfa7c4281a7e635be8fc57d593053905a58db8e73f44ade9e7b7a4701fbfb","ac9997e604e2a4b946644e62f33b27fa0904ed99809c5a48aee1799a6221c5fc","3292d4a730406284664a37885083cd50c86e325b1bc6aab77c880929098df3fd","ea8aa841a409a4f9145aaa6eb24738a8020a91de7860c9eb311388a287eab501","e950af4a5eb22f875a3c4fd6ea5d8bcdc51d798e80ffb112dbda0eb985684b02","50e5b994a9eade1d615cb5ab56ff946ad74feb88add35987f9d31dc635287902","b55018162e2e6430205b8346860b034828090570a1a80a799bd8866e23561603","c9fb64d3592cb95aed6654e2a584e1165e231f3fc41f64eeb01a08abf1b95905","5d295e45bb1651f45ddbe7ff45f0fa51dd309ff69e5bae77c1fc0fd01c777305","6fcda6544b4bf95f0a96691cdd94f87ff86bfaf4e6723175ca3e32838d12c805","c9dd89fddeb0d9bcb8ddb53cd292a9072705182dd48e3e82e686d7d5f5abff05","e0bb8be0bcbacceada81478b4088ae40bdea76d4ec08a666a3d6afb3e065b206","f745203fc4f4ea3515af3d89a2159f99dd5b0b03f148418aac9934f004e9e106","098a857c57f23c1e1a0a0f059182e5cdf80340b96a0cafa241f44c402f002309","d6f6530e52555e1ebd8b8fb526bb229413331a1ecaf0e923c1daf0cdc1e6170b","5d2fe5c8ce3de049164bdbf8a7c50a42a2060dddda9d6ce67df5f390a2a0950c","fba71f0a83f65457a4f3aff4b177a6d09a4e23c5fc91f4c91b4e19b7b914e30c","4bfe658a9629931397cc96ea24478d6bc09eb149232a524a093a1dac0df0c50e","5701b53fe52479ffd203bd986ac62b7e02b4e5fccce993b543e3abe579edb311","e9750a144a3b70f9562bf0ad1b6b3fcd8b77679e294262fb87215eca9f0f5e13","dc0e2f16b91506204b441af84d90d5b63255644936e507ed12cb76557e896715","fbd360aed899787df494f6f84972a0c0b4641ce685cdd1a77012682ce5148d17","00da2ad497670b64eb35495a5d98c92965c5f910532733257b417f82256c281c","2c7486c0740f7e2a439796f7bbee927d2e86252a27976114b47f621793aab91d","dbb8fe5dd80b50b4db99b0903c2a7211619330d369e65c2de32b2607f67cf41d","05de0f232651ef8d4568820b99485977b379ab48f94715a3ca18e6d9de39a81e","bf99f996f3ad7098e2a11d978cdb4b30e9a3849d776d2e100e3b71a49f8f1720","88f942d0cb8f283edefadffd9bdba6f034aa2c60b5f474d56d03e9c0711b8621","15b3484fa3e198dafb1868c4b0423e5c767d6cbe0d0ac679a6a7071b9c4f3e22","57c9fe15f1e91561b882ec033c1880acebc04a9f16063824438e368c205ee723","e83071d4f1d7f51e447a2b876cb72db13f52b3fd8ac30b7e58e2b0206257a125","eff27b3b34c79edf7b5e9fabacd8366b5b3149e68121b3fca60687f048041829","ab86909473810050e718fd83783d93c139bd5f056d32c6ba933ed3b06e01fd2a","ecbc99798054b07f903acd5c35d02678c4d8e7ba333303ee6ce4875ff924432c","609958935857bb0ce542d7ecd91691c9a3acdfa555189248f8247c5ceb511b32","ea366a9b1606144571abdb5f584bcd410b1701d987826b0aa7d775e193c25936","74d76538c2db8c257415737c426186ae29c0ece550917a4b2b4c1d35fd58b136","b48d4760ecd64c500af66cc418bab733cf0cb62804962fb6ea45a94f250fcb37","6aa970dd039ed169178fef658676c51f9aa3c7634b7d02f81b53cb004b61523a","b80449a7b99419dafd2bdf528b448e55e171e427879caf4312944f4c5fac733b","69b286ec4bcbf85fa26e568b75afd4e2b073aab3ae48e62fa790c713ccaebc3e","07d79c7a9459f018c445e13434cc1b33ec386f3a5f302d785db7811e7cb5e93f","882a163dfc5ee5f1bea44dc00594fc5736aa819881357851027360966bf17f40","a2cf3fbe3bfb191d3620c42f0668018c3419d83334223c37e48c849039b93941","d7381ff537b80d64b3cfee7499b86c11477be6386901585bf58a15e19ab05e45","7fdc4b306d84cb4d2836e6864dfc55746cb0fd622b183a12a4038c5db2a7e046","bc017a6fa25507fdb7a38548fd675154084e42a9f469f5abedb0a49cc9141047","5a076ae8d19a6e9a6ae8b27fe1889694b604df72b313e0bbbcb78e02761edd47","0277c14c64f029d5bc228f8e7938106d03dd62b9139d70ec3586134db57e6248","23934c937b904b86000d2a37d627ac2d1da113c5f6ea1482add5544736a55249","6a4cd879b775c6fb96380399af12784cb7c9717be9c94fc8dd31582e1902874a","14801e3f6452c91f2771a004f39143490e701abfe3ad37d7c142e3b31a4cb94a","e4e1287369fb5d68887b8caeab2f00482f4990f1e005767de895c2c3cf96d44a","f2f7a3cd674f380b783d7325a6e811f7eb9cd1215f5f74b8fdeeecf499e4cd4d","97cec0747d1895c17495d0738a13495c916497dfac672086126132416a5aba52","10c1e667fd8e35b1dfe8a8a52f345d6cd2a1de54568660c82773bf3267f5fa52","b02227b4b7c3726831f02c88ac7b4e0e5ced3e37cf24e36c15756ae9cdf88053","fbf5e09e6f4af39fec494b33a653f873aae7da51f0049a4a014b5406d9694c55","8da13bdd7d924c0200e9057cf98025c0cb528efa1b9de53b2f0549a1129b9058","ca5ddc604b12d632095ad01853fb0a5b73cabe09556e2b190bdd76b18f5d9c5a","db8b03c11132bcee841b4787cd6d24eed35f7af2390692052554c3d32d543a5b","2b79ef0461f59b4f065b8d065a76bef9a45f832ce26165b2af52ab1fa30ad25b","2e778d4385d90ba42369cb8cf2dbb21a0224fb481eeb10a8cea0cebc5aae1d5e","96a30ac373b00e26d45b7883d9e0f34dab68afbf6c10cb08b2c892506df28061","ddb354e30000ba416623dbe4c06c2e9877d9f1671db793aec997e23e26804a63","88dc0ae9c0cf3bb44a1cbb69f63bab0e6527c32ae246033575bcbb9672d22266","cb644c96de4e0469c9e1b41bdf85bfbcb31df15b3819aa714cb14b60cbbdb767","ee9d83ba598513092ee08eb5f9aeca01d2a2e56ed77749d0aa7cd0994df2b169","f10102c902c75f0b13b98f88c4dc8bda8fc63f21fb964fd33d963318d9d5666a","36facfe65d5f3554ef1e5516881c809bdef35ea2476dbd7f350202538144d76b","ceaf86a101b12ed125c6a02d583ad3b6c3bc75a3a18e43bd2acab9b74c33da6b","3110ae3cfd7f6ab48d251755bfccd36adf967c74942edfc200905c234350b86c","b771367bb00fb2fcfc16d8e480c7226fc4f4a9b69011d0fe2ebad2a5bd44da6c","3a222cbaff45262ffee8e5bff38bc966f60182ebb09f6e4d97892ae59e948c6e","37c3e140881d3308556651c87da1e7d80882a303be7b75e5fe687a796d889d6e","095eb4a6c1af5d649b761618d87d0fe6fec3f9fe9f8d7c10daa8c0169da7986f","723a084136b608af6ccaa0f0fe8b6e857427d1e9ffa7c5ed4c5ea36d9df51b70","71a75a7c9998d00d3942bb06ab922b742b29538ecb270e8e6fed365431fcff71","db99faf958a7ba3abad7ee58febeffd068f92272e478d5d4bdd405147e848172","173b6c7c18aea00f6397f393ebda3bb17a21281c20dcc0dedb51de4b9c1e6874","1628127c0543f77e1f13c636ae1457db3fce945b63a3f56846a2cfe825572277","2c70b626bf7385283c62537c7626fa9663adbbe0366b0cebc8dc9f3751052a78","8069f4e19a7d53eb255aebce6ebca5ae986d2d29bd5bb714d224fdbb1d001679","e3c5b042bb8dd50d7a61f500ead453f9c22b104465b3f448583a52b30d1a7e7b","0fa99b5834e4c9ba712349a6c3ec5fb5e3d38efa9b6f9241664b2eaba3ec4e7e","205e43641ed665a72d5f582c340ed9b2704c8662fdb768c500ccd888556ec27f","b118f38bcfc3db370ea3fd0bbe2b5074e3a814975b57cfb4cd3ecc77431a7b80","6a4d33a34bee365589273c20fd6ea290610930d7069f76ad33cfdd0e8c551982","ed05aca2691e3809984a4136091bc20583864d3d6d639cf665749123157d6186","0f49a4ee3661d8cd4b57ca7e3ef52512e7cb10d25a86f05f254df78a7646518a","d42c45466cd8e6bb093af9da10f4a9887d6ed9561e6b58e267e6cd2c24b7f88a","ae504b0266eaac2ef6a6c913d022dc794259791ae7c05d8d2d5e05fdf7c51d8c","5eebb0bb7fd6634c216f7802ca807d9a25bed8b0ada55786e9cf3075ca745c8c","2a91ab1fb30d43519f96d45d864abe2884b7158b8b2b5f5847425ae157935e8c","a9d56ef5e13f577089216fbb760430992ec54c056861fb578b4a5eccf70af78c","de3f603bddb4706c1c8b192388bf34151f1bb8ad17e8dcf2359606f82d3a268d","fec5f2ef25ea7a9372eb08617a8d1b2cfe54d3a40c40b9c8ed9ffff8b9e0fa8e","f7a7623289bc742276495d90f55102e4fbbbfd6e5a83b678bc6aafd2c2c7158f","c35b2f683554e75814be3507f0fe387513d85551ec16b0154cb35ab47fea1690","f729a7fa6b1e40b98a418e632b97493b079d83e2816df1e25b3a39131df27093","9c263956c2d667026ff789167424a4485319db07b119119d59c2745cb1ff3f94","151b4a6b4eb01eaa226a105b07c04acbd44f3e0b7db65426241234e03da7f999","c8140974740fafd09455c843d3fcf91ca1633aae28b1f311037f08046043fb9c","fb522970f5de0355044ce2287d61ae9815e4a8622cc45a3f32da8a66884e549f","488025e6fdafee82bd4122061b64025fab16ff5fb5588dd15dfdba288af094a3","86213f332c9aef60d196bd498f5eaff4c6686d540baee93ba3fc1397088b70a4","002f72351592f796c74c15c678dc34c340ee40df8ad404b5ae39eac295486da6","837bff3a7a3ba3bc8f7147a535603467b4c8a81fcf1c5edd367688273dbc31aa","51d36a521326597b002740233b8f5c95fc004728a86b21975760eab48f254eab","4955ef2f59788f6dee83616df5700106b069e02567a1384a547f3b93f5d233ac","1c6004aea3016e1d7fa4d7c2c5d916ba5ed087917beb9188139231d2e5f891b0","04a41083d0e2226044afbabe18cf6f57431671a00aea8bac160bf36e7a06d1b0","585e5224d2ec66bfd2e9d363f4a871fd329f66b1594cfb745fbe0654ded676b5","ced79d425f46fe651fec47bf1989126607fcfec30517400be4baf46d5f812ebd","a9263e56a2071f38ba27327334a5aacc9f30ebdb5d3f8ba23a3b4e287188dfbe","df72ce6cc81d97128562c644401c7addcf7d32287ea5171e3f4717e2400d22bf","6a454db466387223f9800fad0b03e77afb945160eaa37472561dc8f6903ba0c1","99cfaf902b5804579b8bb460cf6ae7983621b61f81051788fe01ef84602c05c7","e0a708a40d8f5b8e2927afc650c1763b8547c1ec4dcf5df97193634c59a0c3c9","baae4f1ab0eea6e88d75fb7b7936f0298cc8fc8828c27d4357628069638326ca","e281e9ba71d8fc5cd1c441563d1970ae860541c5ce8fe171c575d3da75bf0dd0","aed885656f04837b65eaa3160b0b2e266e670473edf7c171fe43ea9640d280d0","3ecdd67253711339f61d003ec2d0d6bc45b38d18f425c3034a1055062fe8a0d7","c2f151113b1d229c383cdae39b6ee839a13c6a9dd49d87b66ae0dc61a8e660d9","bee09b9ed22e45b5a50ba3b9ecf82ece5c65fa39b81ab95db62337b328ff15da","2dc23d1900a00cbb6c43282e61f789ffacae0e33f266f1a5d48d7f4ff6dc86da","9012ddde16bea4a05ac8d7b3e106f4d756e5eea5bd212febdeec9f2431a100dd","56ff45122a1cbd82d856ed78a0520214705aded215d9a4d6cc865f20c5c13cdd","819a42cd8183f711839268ad07f38fe74796c0430d1de8231cf0976de1dc3ade","3e00fa0bd46583a3f4d39f53f209cf742087d48f5aafd1c15c70666da25159de","9f0067754c2f3a023ab2dacfead30d229004a5048c1a21c1b38d59e6bac871df","3e72620395d424216f404a0da95015937c1bd499f18e270bfa46c54b52afc1e4","36636e6f4a43a45c567942d5df2b69bf0fb8ac0d5056e26d35257898f646ede6","07a557e808453c76f72de3e9145d9ee5a83b252263cd04e848e314789a2237e7","28bd1b038b08257f9d42688056ab988103b375e7df03cf147c8158d59fc627e8","716261f7dd8f7c434a394ab6c04a8f07b4e647d1f78dcf4ee32dec099c6754e8","3cfbc3703bedbc1a347b92bbe7597d6f6249611d971fd7f5d3df9491dae198e8","783d183f4f3c5d21ccc9fe587ea99708d4b7b7cc23b65d103ed3049dc241e7e9","69c07a3c9e66e7f1a99bcd1b587dce2fb1d7316cba91bdcbdd557db5e707a6ea","1694c3246d6652c7ba937d09a29d11c969fbd2a8e22234094bd4b6c525b5b6eb","299cffb63aa4af71fadcd57e333cc2970485c7eedabdda56a691073b5c1319ee","5ad5368b819e680b8215a85e9b45f0ac41d6fe1a2020efea04c3097938c7d8ee","86f86382ccb3792740c153a1ae64c233c45255ad3392739c1b0a7716808d1ff7","20c9347d2c8114f47f3471ebf0c56aaa814b4296e4e51399ce9d6684ae3b33f9","044834c047fd53ad6f34f1611bf0f528c59b1b0d6af2fdd197e4ff91175d3af9","415ebd4de4dce2059827f34b51d99afe7871470e1b1be16ba79a783351b81cfb","8bf4fd2f316023de320f12f7142b230bd55e98f01b288c41be9f0f6edc6b84fb","56667686ff76a910a7b0861b985a8d5afd336bd05109bca50fae85d7e95ccbfd","d1d430aedef298873f4a2cffcfb3d375dacd63e2cc194bf4cfb6af93b99adb40","02851fc9660f3ab9e515b169e1535d6d9ade11c06a05fca7e535fe51fc9705f5","6c4fd0084e280db1a3d9142308edaeb2773ef4eb8a242c76ef93af95fe778c6b","e88bed710eab92e725589b8b31ec738fe007336fc5601af6976f82e10095f4a3","9c127c51a34cd4fef077f9cd5f2b88c87d7d17b18a878ac40bb31913342f8871","b6728cd0df5e6e53a157ee41236ac987e3e961789080dc06fb4fe8d93c9f4df1","16b3c6b4fd6862ea14a47e2c0b25260b695d8914b66098c746d6b9e0e57215b3","c92f4796338317952d580543d3c93a2ef57c5d1335cc19fd56d1d6cd2bb85cae","064798d1b44c01cc33f443430de4203ede3e6909e5fa7875f1fb9dcae43eccfc","aaa4ae3c86265fa2d75f1f89b16e618c8623e5f7fda79a8a09061b1cdb81994e","447423c9cebc5164d8768e6e31266676d4a59fa17bc4124825ad68cc336732b4","3fb9fbc8c6eb0a0adfda4c42d3e6d030bfc89d9b055372568bee0add49fd2d6d","5281bd05dd1bbffdab4f7f9f6d2e094952202198268880549985a18db28952c7","233a2b31582a033baf9ff5d72dab7121a4c7b5666d5f6d259af1039b9bbee804","1ee45f875693c7bec99ba1a11972413b324a009216f3c65083b622d6ab401908","e6d33c8d01709e65801198c595151434e0b7ed1ca281d2ecced02f69ac45db53","831f4ac460a1b2ea8d36f4eb9fdab7c2f750957a21f38359ae464985869aad86","8e7a3b15f6798ee6e230e7a318a4402448eb98af8ed1d3b38156ad7d86d56cb4","e46bc50b73f41cb457b6a1f347490c6d7cd15c271dc07e8cd439d51a7b6c55bd","95359146e48d491d2a18ea00fe4cd1c26cb8a1f508d1f7c0809e3326bcb5e831","14e9c5f9e181583d7ee0370c41dc540ab6e8f39fa68881cb888507d2daa0b691","d46a2bb9f9acdec45118209573a79dc178cbb760fd37524cb5d1eac58b02a99e","d123db728e267788e5c574e49f10572860813977209570540c11c400729200b2","cef1cbecb0e02ec00bb62074116b27ee34d7f57b9f199ec1aa6816cf806e4bc2","c93952b1f0f5088c0c7c34f8c9858ebc59c8a1e7b2a18a6dc2a8905d6c1099c6","953c27e84a4c048e3f065749a9cec581ab24d4a0811c6389632b500606dc013b","24c7830cd1f9e08e26e04933845055665c2a48124bdadfc55e4118d7b91ef757","d04c4b811132fbdd377c3bc88bc0d7883a5f44def62ce7accb7906265536f65e","bbcfcf86332f6949574ea86d3751f742629cd0ad510b7a873b8c6c199e39785f","f2efdd7d30c9cc7c66791e5745b5ca805e14180d6114b2722c90e9b48a0b3465","f348674edcb4744e5c7fb609bb4079f06f1ca074950bf7d04372640097a3188d","041ebe53c95ade1724898db582fc9c5e05438c5ed4ee47433dee8becd5af51d2","88314584b5363696648737bbed8d9717bbbfdb9a25b225d797fd5b79467f7ce0","798cc8e83d3d3e4961cfba1ff177167899746ebc201393dd98700465962abf12","477a5d473fb2734e28770146ff7bca71bcd0b4953ef567c4b030e34cb0081285","eaaaadb9bea393ca7b4072ab6605265953963726ad0e087dd5ecef53a33eb57a","0c34c7612997426f54f86e3b658c7387b7342a7e7f5942d83346d7e1d484e39f","a2643076e04d5268b355a8b5dfb570634719c5a897dcc118eb07a9eef95314d0","8b3f3bd436dd76b525f93ed9f0cafd208aa088220671dc66d9b9b239ee24eaff","15ad3411e2229f3d82b19dac0b78a5770b1c089113548cd7e84b13f8cb428f89","0d76a28dac6299053407cbde4ab6e18afe63d48507b2d0643b2caefabec02467","9eb5661776d526165ae21659062cb99947a91e9bbaa1fe2c69281b291a70473f","09b3ee133049fc0cc58ac977867ba09b0b88b7d3b21109bdc8d1fc3baa43f4ab","2ac2adff06ecef83bc070a926d25c74665b0b6684dc218441110b45f23f415c9","0aa07e765233187ce13b7b89ca278743558870d5bb9f91d3a9ad95183fe048e6","703c43ab57b0723931265304ab35ac43fac2886b958352b7f239117b8fdbaff1","8330f2b23bb2045a0527c70f387dc46c21204e2b965f68bb6a09b2d055fda0f4","83741d7321aae9c67c633f3eb31cb0f6ed486b40a4c0795f22adf82a5d27d318","de3a1cccdb3f80d6e207cedc12a31280fbd255c1abda81c2f10819b234384a0b","b0b35bc7b671760d7cb097097015dc408b4bf1bdcf7abb6b0ad62ab9b857d256","6001120410679d38e33fe5d799d619e37d54a3c2ffe266cefd3c166dca18b94f","6c939bd253e02a9b3dca9a2ee9d6e99606be5e3425895411dfcddf61a4db586f","c8ff60b41c98fb7d1d0b8a09aae4c8409f7d54973ffd4087061f67b14c11889d","c779fab7cc909c5e3d28e2baf459baecf68dbb7d9774ab334d2bb88ee37b0cb9","d57494707a4984055871a92f2a3678bad3003946cf6584bd0285f3a4a41effc0","5ad2a0a9451742737226d9b77058001774424000c93ceabe737e60a906b37818","084c088b3e5e33ea1de1c428336793914faf128e24638f7681e61c499705a518","44b38f37d1c601921fb8f5b9575cfc97d9c25330e05661b8a5b6f5a333bdd132","f40a561a8576c8a8f80b73d5046650be8034a47c0462dc4c09b44aa7aa0c1f43","c2ac7b97ad5cd740e8ffb3a6f352c7f9a8fd07c620b0491069bed0130a3c3d4b","d47e5195305846dad6de7ce4922a06290f9d60b3197da0815b45c32fd85ee368","cfed2e5ad1a37f4dadf25c33c3dd84a812f568b28394079275c6c83c6278c979","0be0519d7883b9affb12cca2e76b8e5dc411095b738a90f99dc36e2c91358c20","b264d4dc33ebbd91ebbaa212bcefd17a5139f0dc32ef25e027ad45ec7dd96f26","73fab6df294f972b9785d9e346a299382e7e781b4594efd0fbc7131649543487","b79a770ddef23d4747468f6deb2f91421379a1ebe14eaaf6e4a355cdc0e27894","faf0c582c1aa71dfdf170ef130dbfd9929532d5e63410f82350c97debace7ca5","98b13cf90c682de2697e18c98ee993ff9a29741abb3c47864386a1cfc537d0ad","9dd3a512cdc5685a84ff75c8b0a311087611199a792526196392fc9d45f72cc8","fc320db18db04a8145a2a2d98090dedbc39fb1416d747d456235d1524ac530c9","dde24deeee8940dfc494185cbf0163dcf866e342a5220172acb6302a14a91ef1","43b6827c794f85c73656e441f5206135147b7702d5a057a14b494aedf0788ff1","3e73f2e79c79a95ddfaaba8cdab1a248e8a2dbc8e55d4c2f1450ffb9363c2606","e633a6f4b07aeeb2ad00cff347af164b0311c88f6be75233a5bb14b759875560","b4f681e1fe4e9e1f08afae5dcc2ff651a07b3341aa06ddabcab4d1f5a9afde81","57872a2ced405a3eb26588002743a4b8597ea5612aa821e22c3273b9c65d89cf","e5620a43063b6b56ce1a09205d0e4eb0d11c0306ca9fc7cc1a216861f596bdd3","9aab1d96b89e679c24181cadffe7ee669cd57b31fec1d30decdb07e8bb9725dd","b87471ddd7f1e23cd7831e467fe7b4e75d0bf5acf0dfd8513eb469e9f771ea34","3d251c056c9d0f0b3d0d427d919e32556b44e68e170bbb12896d4ba35de3ca3b","f0bc720bd19a8d4b0bb45f2129d8f752159e703855f3c478e6bdd683b3c5104b","311e5198a85c2b05814ac9b353db2702c8b8ead7b973b75019201d983b528970","2cd073aeed486c3c177e7833754d2d3b7627e86c718dc5194985b7ae87208cda","05c9e97feb19ed53a9b4e08697ed4e1fe151590df98fd8a7338de2c8ba1c3997","44a7b904efbc9dc6846a48fbbe0ce92953fac465447bc2f98af225eedf36ad07","4f0b8da9b36be190faf60360c175f548873949702b64a25e3c4c6a92608637e2","8973f776155dc5638b23e9f1fdbccad41e72e5939406c508da589e1479b5b2f1","b5bd9c23b4afd75b9404992fc7aed52f5535d73e4a53815175d9553bf666e0af","6ba7b262647ca0e7d96ff39d53b7e4f637996e997bcacbe728f67ff8a83659d0","94ad6ce50733ec2d12b18ecd978a3f5d3db12c37981b347a53db74ca5346e546","814b437d959a0961541f96cb278bffcd0bf26db9ce53153c2f5babc84e5afaca","e662d5f52da8372286ee6babc19cdd67d18e830e2fbfe2f51c1fd5470294629e","62ee095689eef1552bf5b1beed33ecf417744b6e341227c38a9eadf45c1c3e2b","7a345d26af6a43b6a17ab06eda7cf0c95fc1ebbd1f95e3d0c3d2fb5150524afc","fa6d08d0aea4fa1cd4501351fe529b53696baa0d196b5a0b11e5d867630428e3","a14a5a4950d59f8cd4293a69ca753f148bb67abc84f59674027ed7cd1c09e766","84004d8a0489eddf34f12955697ed52d9e184b2f00f0bfb4743ee0b6b3918f7d","47ab196bafa8415fd4ae2ee47adb1ff4be5f9314b503edb3ee334090f20181c6","ecb701d11bfdaae8aa06d3062db30e754e2b5bbf63f7aaae89a7309aeb2cf9e8","70f2356bbdafba4861e11441f9511ad2b830b50820cc08a23fce72ba5c4ac63e","b071b15266bde55b35c91284c3f6eaf0fd655f2db5c726b862b43e531f530f75","e27de14798614876e89bbd68404deb79b60c54c7ea8b3465188af3af27be9ddc","5b6d618e053d77a0f7a3e8087101a9b2a954f1cef561847f73b4e50f0db296fc","9e6475f689a82c74f19449ff5f2e5074ada30a51848c36c17f987702b945c068","d44721c52977151a862347009bc66f0f7f46f06abaea7baf68114522e411103f","0d3051838e33d22dc94f515c1b2390e42e7f1b1e12c046140194ec50cc150a02","2101ae0f5427002a7b714cc81065ee8591bcc9a8cbc503cb6980dcb36d6bca44","c8f2284c843ce552ec48e37d5bf147ce73ba24e0281d0d0c8fb0303884ec2869","5e3e526f70f4788f4fac2b7b2ae1d40de9f0c49a377c9ac5759b569d1034d410","64c27ab4edae1fb0ea3acc1a0ef26dfad3b6999cc80c0547aa9e805df9711746","33459123eba8b5d75ebb3800d78c50a0c6e5587b0954ec8bd36cdccd20e78a6b","fc58bc7cec39be5682059d8bf074924e831dbebe42d354706fca7173a7968486","64f4f615449f8db6490f873f07ae2ad63668342c50cfc1c4a888e6c59e08d478","240484dedc0054ed6f560db8eccd265bb1c23cd86ad91badf2cf79c6f6bc8191","71f4b58e26bcd5326ed6961e2481b9c36e7aa8924fe305f68098b91fe4ec43d0","23094b4ec537ebf99d706165540e797dc34c83e2c4679a579ea38ddd55972b6a","9f033b153c9f22b4dc41848bdf766dd32fcc7096f38f31f567f91b4b6cd7f01a","2ba1475375f1955940274239693260735a00cc4f46816d4b7e639ff6a7de4593","03eee5269d1ce4867f60d510454d6f7287ab53719c4ab7ea56dff7a77d1b8497","f283c10d19c8a7a651f34d09775bc3a922f3f63b109c202b8acbda789b4f7cd7","a508dbb03638459171994c3fb32f9b189b718f4856fad247de0730f1649936df","e0f545e02330bf5127652126846d5a87c059488bc205f5b6f39b886ef4b14b07","c90a6bad75edd7ebec73292bbc9b47a55d12329afa9b166f9459e7301187742c","88661c1f77adf22d50ea9d58e95bc78394119a30ea46600902540e93e85d9e50","db033df905ec206b870080e360702293f88d814702205aeb962ee7c86a98ec67","0134d933a0d04c357650353bb37191b2501d5abb6190713b4612127cee48859e","86695df08559bda6cb95ad6fa6399c33a70c6efdf15ab357a4edb5d70cd7edf9","b2220c9c630a021f6d7cf99480749b9726fa12fcd3634c978944a870b9a39133","4368ba014b43054a602faec13eae4d0e9959005b4dd375dbb02d192cb69c11b3","eccb9972c32e035a5c0ec2a0dc29549e0171b7ec2a3723d30e15dcb440a70e01","076bc1f538f2806d5957688c04537e87fdad85d6ebee2c63558f1d1ee3a8b003","e550c4d96362e9cd51a43d17cec1adc69d789d2a28385fb04048915a5fdead0a","ca7b3a736cee5698308daf3f8740096ccf3057d15f703e1cedcd15f818fc3528","60d9b6d298ffa4ded5e4b087945a6b44d1b0b650f0bc108305dc3a8a0cfa7b86","69c257f5ec0f5f79f3e59a85088490c233a2e4a341e9b3b29258ceb64877afaa","5f776eaf780c2a124533c4e030ed390603822ddfb01a783136db7560997772c3","bd75677f94353b55ba1dcaaaf0c2418439a39a4c852d7a0450d0734ccc6f50cc","cb3254c600542d7947cedb1dc9b6dfc193e45168b26b3f84106f505e04ee310a","2bc61b2eac91daafa280f817471b4caf8626ea5cd96452ac31af2e775c08be31","5ad7551d5857712e0447554f83ba851878403b8e8a54f9550adb28427f79b947","4bfdc08954bbe8c60fcf9a6c31d5f4c581531ca7aa3256f7f6b748fb4b081d6f","ec367f62a8c473013d674a49698785fbb21cb8e1a9043076458ec73e6a6d04e3","71b4f5eabe4891d4763ab1814672e968857e12b912fbac4fc81414c893e0fcaa","c06c785f8cfdcb423812801a14b2e02b9dc66aed878e4eb1bba3fd9f3f0a752e","ee5ed1a0f8735a4e36f64a151184ea55a14d516961de0fe35a0df37b1571f86a","fb7b36d7754277a7b1d0f53e7842dee7cab9fd817e02622779529ae7c6e60cf6","c4f2b8f1660385d51647bd71a6e98ae5ab2788333d8a7a567032d95aef3af22e","8e23d446c95bfc411a5d71d32fb3ca30dc80ba680cc42f62c6d42ca251a7c680","492cfe152fb7592b32fbe6dfa81cd74e08706849b77b28540121f15ef553ec81","0c80c098cf100d2c55020a0f2a923521513721df0509e90b54c48f96501c0c82","0fcad07e3a3255fd96aec3ad208d24b3d86afa05fee27fd76488823f31e32083","41653c9c5cd38680e99134d0d91ecc4ceae71b79434a15b4b733e0864d8715b9","0636de801013775df91baa00f795a172c03e2a38ad4ce659d53acd59638c2cb9","d9f6c7583371c9083667ac389c9c4dc5df0779c86e60c63c7ceb3d1f5d5690d5","6bdb2e03ec7cfe072c62bb0ace87e7228b145402af3d63317101e07d811d07ff","13f2b07139972cc9731520ea3dcf6d4d4d8a721602a6e4f48e3fa6f740b7941a","5eb378138fba04e1d08f9f57eac1ec0a4281040ce20df2614a0a4f3113bab822","cc72b1a2bb343603d725473df5e950ed582e1e191c38346bdc23dae1583e74e7","22f5612a2f44e8445e7160fb20db3d2960e6e91b4263719854805c205baf00f1","e191590a4a5daf835e2b4a7c2f6f5e4c7b874742ec95e1231dec2317f690f8f6","7f20da510caebf586cf86080d66f290100701389a76f4263be049396d669893e","6ba226ed5ffc3100fb20277170a86aab0ea137f911a095a88074c912c4246f58","fd28ab9026c0fd01c582150d2ed6b467e74495252c3be8ddb3a371edac5dc661","620974c87cf2cc30ca418d4dda540030f33fc420a0b094f749f2faa9651d64ad","7a14d2b311793dc7ea95724b73b1afdc5bcc76172162d2b6b48c995089de39fc","639ca0aafb786b3e8d437abd776a4677949a35e9ce16c406833b552d5be6dffd","0a0baf61a381c98e3f2ca9608dd7a3f6995345b31732525ad6be4e21916dcbfe","c0f40dd30a50dbea240a31ccb9ea839619aceffb32460f0758e5a627a5951622","2511b37795570332ed97677a02befc9900580e894164c4191dba0725f37b3595","e1113c554c1ab13dbb8b521913bfaf24cd0f868c9b6e44af86cfdd0b485fe496","60de4e639f51c5f1a284966a12d0644b92d06d325bba94ef819acfb1557ba99d","c09b22d6413e2b69b0b2315aa69f9233fd5b2cd1af24ac3b4fcf88be066d9ab0","6d6c27fe5b65648984ec16b1bd7fc3b166c785f405902ab91bf49ea070a60bc3","8ad6d8019fe8c7c76baf55d6c8a004b849228aa222615728c39c193ee673ccca","04dd899d5e942a29772aaf524cbdc80ae59b2988dfe4cf538c1fca128ac33acd","0e1b6f374ec0d0dacd525435a6a3dc11925187c30823b0973dafafb1bb630987","0562cb76f251026db156d13cf4f1e1fd5335b7bb5cba9504b99786467f28d9ad","c5c0af9e63afaf8e6de3464e675e2d7086ab4447d28814084ac8fc063fecaad7","4b15f5bf66c20d37c8182eaf7db9fad241552937046dcc63b7d821f9738b7eea","4c7ae60ab4cdd2cc25f153f9e7d28ccbb7de6efcca0c916a97ea767ab4d33c29","5875504d89cc3065b0c622bcf0595a8ca0ba2d89e637dcafd47c620a530b7e8c","44703433eb520f04347a1d98c3c3e56f0cf0757adf225bc4a572f562917c29a0","41a88f97abe95333eb0a80dbe36dc93e2938e081e5b9c0da3b9f11d0a2ff7db7","d21f6bdaf4a1fcaf005011f65a0c487a458b4aa8330292e080413e2e10db2886","6dd05e3ab0aeb4104a237a79c7e763d700cba078c10d24ef65b69e9c71276490","6d09fbf2e51d9426b811e674094c592996131f8a70cb4231a3becf328731deca","f0fec33c381cc47bba536e9b262a9f23a20d96bef48ec8b3ae0f909bb68da927","808ea48193df2c62f92b9fcebbcd4b5544793894972cfe9e2e3337103993c95b","4572874a370e3c9fb2615c2c383d711c6cef34b61409c7d12d43b38518d3d75b","3bbae6816800ed8dbc9daec5d09c02f759a61fcf63577820a32200bd4aee5365","30c3962b165b26a4744aedee0cf657dcef8e8e566bd97cff740f60c595f8476f","24057ed46843c6379c22f5516e42602fd2f85161a2d4fdd3ba07ee1dd249d8aa","652fe8faff3de8a83529db4364404b3b7ab2c1f285152d5303aa16c9974cfcc2","6ec1b8cac090c5dbd914030749002a712a305a976e893c4aaaae626b757059c7","4753cdd888c283c9dc567ededa8fa76d627efa30e3d7dcfbe448d7be225154d7","06129405baf4c595aa560b7bbbb443671d6009120caf2b232891b9bfd85dcc0a","f578c0f991254b840a5199d4c899199d291f69137b3c36d89f2ead1a989b1c20","d1732ea8972e3fb94e1a318ba3e644ff3dbb15d4407ea48014e99d26979f432f","9cecb0972b36826256bfd03d570a9ad76e24e5e7abbadd4cfbaf65612a1c9b3d","8151935710fd477efbf4672eae46ea96dc5064f9d5314b13b5c0542173aac94b","7b852302da6d42f3914d7ace9f97345b4b30425f3322626db7f89776ca13025a","fa7b510cca92a53fd6d3f1d020c6c23c4d0d5a771ce1876b47f7898670422976","dc13898c1ff9cce8c47840863f9ad492639068755e54cbed5717473fa12cab79","f4c9f5d0c38c13f0a348b029503c19eaa017b5e95756b48069893fe48828e486","715ed04a24b6eca26bf073c5870b211740fba926600abc12cc5e1860df40ae89","9d6cf716e806c5c4c17f981d80f3f1602a27f697a17bcbfab5057ccfd67bfaac","63c397186cc56f025e162e85a8b319b7bf42382adb58d48a2ae13d01d83b63af","db8f090a0b2b194a70bb9c2b486200c8180d7df5347e5a51b396ac9142655bdb","2dc0d6c63fb384c182364db927c7b9df1ecd55595bbe95a56b28f29d71e09edf","009755bcaf71b7a646c4165faecbe0e694cc2f70735d1720a05c1b2cf9888346","5d4c63d88a964fbd28df659305f8c6a30b67ecd982a9470dd974bbf1a6580873","aa2cdfec054da886a6681ee4fbc4e3ff4e062c17a4f24975b34d0e6b2428767d","db93970a1c51aecc7148c4b59dec25c1877858c2f923180157e4d295065f92d2","4ddd7e97c5cd69e998dabaa448df2b24a96eacc73ea844390669a2dfe593f5d4","fa648d03f317fd4ac46efb1b00a16f8c025c9d630be31e65c02f12f4e1f5d2f5","19d320b0546290e2e78d0b8e45897a4c92ff9aa8808a0985fa8b2d37f5d1c1f7","00f65d896f285d36ae6817b3d5949a9fa30844c7bdb59536f13baae9e0597b14","552f76eb12bec22a59f4a1e801b688d6c8c73069f0add6d9e76835e7c047a931","fbcf2e0043e9f5c15e827292ebf47aa6ee7d3c6b0aca95c5b83ee1031d61fcf1","76f3c11afab4d2f46652a084aa07f0660e320139d9fe9470c7d05cc37a8e8304","616342d05be605bbd7e1d4ec2e6f1e087f5380d85c89f4ee9fdf219278b1369c","28ea55b27ce1682b39a4dd9249320c0e5d985003f9f56b3ba378d0857dc7f6cf","3ba0615bfb4054c95fed2f14849799043bcd7771136ef6928c568cda7d3d10e9","bd7358c51ddd3c69de2ff66e61eee3bfee85882a8472c95c6cffdbb632f5c2eb","aef8376233ad42f6364ec5cc54d41b2d3e745a18bf34944638259667f0925cd2","8f1d5af2c26d6a7195dab0d48dfae650bbdcd0e5c5034826f47fcee9b3fad911","1541012591e45f9057bfb28007e2dbb914fa67cf03cf18d75dfa90f49f78e339","791504d155de25154916fd02aa7768705c58b7045aa3f003f8b0c918bac9454b","0405858e8c7953b39087dc9c134d358be48e2f48c12c266a583b3e6fde35a95d","78f7a2c606dd20fade5b84e184ada650950b0fc6d7a6932f1b5d77c639fa4b70","2a845340d9142721adb5f17a1b2feb1185004193301d6afe3746430380b6c6f6","c831c76527c0a3f1655ebd8773a88f95b404d6bfb6cdd53ae41689e666990fb8","915308416e092addbc74f714573cf19388eed02fcab8c8dcf0ad9676ae7f97e8","4b1db5f2626b7145cf70f0c9046ab9544b09ec4f51f47980906bab9b213ee739","9368945270ef99a83b28137e3d3039c36b298ad4de8a9c9a92c1aa3f73951a5c","94b8c1da875219a40b02bc552818182c5f4bc82b3daeb7a3938ca2b0a261499d","a77e5ad3e5509fad3a9d6c746eb790a4ab2a49b7aee3c1e1f3d6f1c88f64c3bc","123eeb2770f652a538e7a97ff0ab5bf717dfaa7e3ef617b2c3a64833e39f7ef1","de7abd07b0ba3f028d3534176c3bb9899fab8fac0944643ff301f3dedd113fa0","83f1fb5d5b437757188ca3c0fc737401c4b399344df33aa40542dad40d7346e4","28e995da1ae7a3b9153ce42ac65af7d1bfc027fd60ad57994d184fef42f94f1c","e9465c88bef7d4a5e87ee4fb34939342e2b7eb085e2b029d3526cca4760da48d","7cdcd4ad5e74f9ce70926a6a765a35defbc189d6f0fdb3480772b3e3361809a4","f21e212d52699bb4738f414a5b8d3abc060697cabb3264e48fb07806a145fdc6","1ba305a77c73a919016360c25eaebb4a29d85d69ef3dbc7008af9c329e35da1c","edc6e9c61f4283279ac59ff9a74e0195110cde6df7b9efd1624ff558ec68d94c","e7129bed8fce1363ba45cc1a134f60af91c92ace6285ba96f7a8af9e57ebd872","df6adec00d5e72ed4f20bd6a96124c688126ccfd8cbcb7e33548d7b1aec8629d","b761a45411cadc348a09c931a7998c22de50a4cadb2efe9509ea6b326169a9e2","2245f6d8d6034472cf017f460742ab8dfae2746a53f06ea22943251becd651ff","4cddfe212ea175ca9a0eba8b358cdb6f64854224a8bed812fd3e7fc896832f41","49d7cc48669e5b52676452ab837c6b0d5b96ccba19377e18af09182b60edc97d","24ca58e4d55c6b24ac84af3d53ff0f1bafd50efa09f3688b97c75f1aa0f7cfb6","5f222c956a72e2d2058bfd4df06a076d5c25e08330693f91264b5827ef9a3bc0","c0496b64199c8888b0d3e74cc23a4410e8d9d20df8de05544dc37c063d64182b","d459d8a9bab234a25a4be11e406c046f82e232e415f4b8569f090018ac8c8585","4a3b201de6d1840d6a64c7741c482dcdd926fddc87027801e53ddb724e820755","3322447af79199a6cc531a72a2d9bcbeb3a6c64b588f83d381825a99d8590b5f","643eae48f2526e4fb6d94b25ac99ba24502629c2f82a0b9a39fd2f476b17da8c","1691076b5dc0c9878d7ae19c19cee2747d6f16adebe2b8a98d42007d36b6faa0","d4915b59cb2d763184dc7a55e6af8043218fb22ba9144973389e5660600879aa","b227fddc77bd8572fbe001a70dd76cc2492901f1acd78ccdef94d993999fbbf2","1870d324ed7a361bbe5075cfb62c0bd7b6a604cf05f39e19a154a49f2d529441","69e45ee597a1e6e6c082714872e9f4ab5b4394ec38c4cf38f94042b74f8183f3","bd5ba17719d2b3f17d2cb70430423abe2725905e1b15b2c4d9b49e9977500c38","6d7f3115be391ff40d8c280bf477b6f28cc231c78e06bb79fbde163a7600054d","ec32ec0ca486fcdef7b21a9b69177bfbe828f2db5849ce35c1889e9150ccf255","443180071fe0b570074414f6458ecdb3974006f4b7c2d13d5e6dfc1755987f75","7b04f2932f1b68cb0aa5817b5900e9ecc42684bfe05993882fc73c0e49266b7b","a71acf13376869e9919146c0ed6fc74df6b531ee2764c2d01b36e4dbb7a78eac","37d16968e61851e55f6761d88891b14366cc9332116ecb032d8365b2461a96d7","4c0421795c4cc074f2d32d2047c17336385560ad1fb5334a9248bc55522773e4","ec5987dc9696b80f269e17df35cbead5efbd14ec1c9659ba690e4f63a48592ea","3f8d44684c2831c1b3b4bbb5c61c921bde2f6ad9c45cde6f905d309a39bc94a7","474ed572e76c3a8aa21d0b76ea11a08c7fdca7a9907c81b538aaf044fc7d08fd","9d7f93ca5ad840299ee0ce23f6220823f216eac0bda4adf6416dd6b78297af91","2ac29eb0345387af82c23d8a2d4b7fc5b3a741d5fac326235f6b290f1953cfce","01ed43668f2e7fc9de76aea605714200dcfdd1e4568fe40605b518fe0ef2a859","59b2ddd9aff1ac926620532f22f172d78919d98ce6d85c9350ada306625f7b49","6832deee93893244b4b6dd105c784cc77d231a7d99f373c3d7d2aeb548c746db","967694abae471203dd138db48d0dfd8ab73389ee9c14fd294731d14abbd7df60","6e38d2c153a61a60f4ee5a2e3112b39a72b458122b4dac04411f87f4ea732e00","c0401a44e0fd2d4f2a1e8d6d9b908f506f2bb26c97ac0be9c6d9f871b8b7890e","b6a937f1854338b34e4e3fdb41ab1d4b7b7bd1f87a2891c7f5c7f7bdef0c6bcd","b728600c686f336b1d01d0c455d35fbd1bc8aeea94802999ee203bf99df9f7f1","cc8be61e346dcae123a1e802f572c4488b0be38d4d53856351e06cef9a514341","1f93673ed6fb4dfb045b388019b5bda9bab61ab711c3039a7dd214095be12453","d02636c0f9efefbc4d134d8ac6d774f05f54dc1f77eb9cc2cea9dfbf452b5b6a","9be308a947882b91221ebd305515dbf76845cdea390d478ad364841f0be95d4c","3400beb4cb47a6e1eeec4219fd284569dd2fda2ef3a1d510f5a62d078c63ac54","8c5ca64592ff0da6831ab5f65702884b597e609a91873e07c9d1f6bb40a435a1","0c5c1602995979b8dff72ed82816f2b1220c176415915ce798c3ba3fedc925cf","cb951eea66a6091cc63ba326ab7dd578eb9a35024733a08a2fd215530eda1af2","369fe2d7f854576ce39500325ad526f80ea2c6a708e2777239d035a2eb623707","491f3a5394b3fa52f54cb3637ff61c13b59e6f8eddfbc8982ff5326e31a9ea27","fbada5fdbe1cd7630d3345ec189c8ef4f130f42a10737f7c9b29d1a5cb469e4c","fffe0c8ccce382eb328588dc9c5271d35b03072e0683955183b4fba4338b965b","9e7d3dac1f789c0efa5b04c6bbc729b5f6ae44c25cf98eaa4b56ee9b151ebf64","a896ac6f3eb3074a79a5eedd6fca45d874593b12eaa94af2cdf980182ef25cc0","7ab2f11b8f13eb29d10fd7a0d0f29912794a246ffd2bbb1e22c95084bc370ad9","30940be58e1bb66ec9e57f100f07bf65a0513d38114cf1120a0e043f9c5d92fd","203436cd07092c478892d0ee6a2079cac1103cd74d6d78eb4fe6764b3d877322","5dc1c38a5d25806be592270aeb26364f40e926766a2996b9af5e9aa063cb1a3e","deab9650aca017bead1064af178e6e03179d26a73c3706776383623723639a52","03d05441d8198bb254ea9bdf078506b6a501d33b8463844f0eb39d9474db655b","330c91d0ef7e2898078407e6450d35a3db272339684d40d67fc493795d098075","b5d1f1dd2c56cc327e28278ca92c7d628e2c9ec0d221a45fddf6226087d3c877","bd206e711483ef4256b2b2e6556cbcec43867764f23e5729e18d41fb706def87","080a0a6b25fe21e7383cf9184dab696b446979e8e64aca9a10d6329538107c53","f027b18acb1ebdc645c0dc46007906686665c40e7e05bca34085b90344e60785","2b97260253815e7f911c2239f78ffb4b48dd200cd12c25ce22848d744e32ae90","46b20c24f1c57c06788842bd1d07130f46446a8e6c13cb59720a0c20a28eabfd","feaa2e6fe0f5c7d70469aa242e8731a254c8f7759840c679905286c05802461c","98bde477ccca51b1ae3384635227790b6ade84272476fd10f97905d5fd740c38","51371701fe0da232acf973ab4cbbc8d412f6c98c9a97d45e426d750aea220f44","f7592fe1170ce8eb318c2d5833211bfbc7da7d5ec013536c8cd1027ed2f18c47","be67d2649a19b26ecfe73f9f78b9221fce46227ec3d80cc61b53096de0e2d458","221e4affa32d8b16334e5ab009092090c2464c7ef51621167273e6c973a3566e","f9f404332d43127c8e3b5eb5f8bb30c3b9964586ea5c36d9dab52451e525b9cf","2f58f878004e1a57109de1281be733b2fda99b67fcbd52289d873060934910f6","490f6edb747d387d05e16797b9a99ea9c5b06b9fd877b4c7106597e0c3b78108","8299629ed718ecf7d17fb1353a3b185c725599c276f37987341fd13e25d3bc26","72bb6506665a110f6691769a19d08d4463284c2b14bdd1a4ea9bd9b4735f2a43","24e199d40963752f91c1773b335a64cc55061166370ba3f7e36ce94dbbc73e70","85c2fa9ffd4dd0485e09f52c4ed0837ef68d4735b12da36349897fc34f13d88a","2930fee884820caf5996c03a1729cadc24d59d7238957f675870a08fd9c1e8aa","282addd7dbe86a0846e58308bb28dcb2a53918e79869b72b415d965f3bb5cfc5","2e49c2468edc9c74ab17d895cd75c8bc2c7a3e51c015e4c025d407d1487720fa","f85de1f7c0a160a263e02329daf3e878f62f62fa861e5d190e7240d913ff1ef5","d80b501be14cc26fb7b70589de39bb81c92124c0668399cd4f2e27b31d3bfc07","2be98ec3e12e97620988017672731751682d9b12b4b80cbde6e354d4e44c0c27","32a406306f40ba2a17166471aa00f7d2410b928ee43de24874520f31d98db35e","a4ec75c8e312abe69a0e771f882293dec68caeb39d2075d860e2dbe1c70c038d","3d09e73be2356405ee53dbaf3c71fc5f37ab0c57351e0873edcc849a829d798d","3b48fd0478a8f26c77892628fc8085f35b4bf6d59648a2fc5ca86ad5f34a29aa","c2c335f19239e9e676e4bf4a20d27b473f8c6b84592c09523e6325b93d4539cf","e4a48d3afbe41f83147fc65ec3420917369223bf2af91f21566bb4dacfefe9d5","0dd84d486c4c9437f420d70ca27d35ea5e8e8f1896ad8696359b180c87a7b3db","b6b8ae73d5cfc4961d2f01fb23c93c8a704718769d1c1ea99b820aed5be008df","cfa20e6a09bf70329476b1f4f5443fa05ddd2f39d7af5a162cc3278bb37ddbf3","773d0f8144f7d24af7191f5bcb2d1114fb4c1e5d6977af8532739d5746ce17f9","e2ab681c1961075f462044919e4bf34c111fcb71b8a94578ffe4d99e1fb4b704","b24966cb81ce3e9fd4dc25e32cacbfc6a7907c61054a7729766d4cba19489336","3170432c09f62890f1d26249d39de7dc63add33669caa672991a3ea58711b93a","a498296142366a8320cbe3e8be89f43dceb1422c44dea1dd3f82810996a7b15e","690f46041b5b0bc37828993e622192159d82a27412897a68beaa9e8f3be1c86c","8fba31be22910b3c62657bb91793a665b43901d1a8ce07dd85180e6659169d89","db4b1d7781b4ec4fed7dc67966e770cca4a1a06a823bec78c37f1a1ef8db0ecd","aa1b27889cae168cd8b2f0058f5d04eae1b06cff719b98b1ed7bc27b0190c3e6","55bb0684c0894deda95a025f39cac6e8b20ff5371a295525900c6817b668fe50","1b696991d9c008ce8b3cadcc4cf2727cc82777541f82874a7150afe5583e0567","919babd298f375952c84405d085eceb247ff0f86e3b85be641e98d090516b67f","3d49b11c82bd745b058af216d4732f8c93ff52cf48495bdf31d77303043c752a","cfef1398f4ef2efc05a3a67859ddb2b841a44c5bc36d2cca3fca94af52079d3b","9e1ce6efbb66c96893b50a48525ec3b9fd4165a75fdd86621f33d93431490041","214fb05f06dbca4d2737dfaabfffdb94b79fd863401acfc4082820eafd263d57","a14e11269268732915f9fcde2645b0e7d27e3fdcbb84afa6756b404b7243f7ab","d60718c727b62bcdebd5f450ffbc961eb158cca1ecaaff8e9e52a76e2425bef1","1f965ae72989704d7a9337c4a360717b4a39ec7db4d7d6ef17993e38e2dc44f2","8016470a6c46f09031c1d5c6ccfdc116329b795c0f69ae8af3ad6997e2e62692","9ddbfd6d595fbd54f8ff74f7908ffe45732d061ef1eb6b9cdc1f2af6859e8cab","559f36e09a538246fc547b8b824992b4b386be2f3a7dc04307e0469870e261e5","67e85b4a31f503820daf30e565e756267254451c2ca12ca1d3fd8bc852a73929","caa37da881a5b17bbaaf5f8bc3ddfd378e572541a4041449409167f91e0bdfeb","c871ea674ed13a5456100584b2c946a2a82924490379e31860ffa5f9f7fecf43","0398b078e65d721f1f51d66f6e0ed62bacb2f1f7f3bfaa1caab4e168a5cad3bc","8e76bad20e5d425744a4b61a05bb2f4700087949f1863b45dd0d5a59e82b5378","cc5972b72b11434b5d81769d322dc71bb051296384cd39a105413818529eab63","4752be40f9ca1489abb8e84a0b280ef77b58d35bc4ff6bc1b73a32d3026adc6b","c8af7fe81bded0a1e48a6491a479bbbc7dd571ba600ed137011d1bc44e232ec3","a6af9bb92208824f89f4f083ec14792804fe48d931ed7e5d34e2e6edc4985309","6a13acb62691c1d78bbe219fa525fd6e42e9bdee4a48774de713a45f944662ca","61935bf4c261ee5732157a1bba45103387ecd439536ec680f2907f88a1527de8","25e0594c3c7b35d711363a21a11c5899cdca7c577bc5d26c028076bc08664137","e93aba5640a84c5f0e7840bb888e1f03122d7025f9570779861bd305547c033e","fb16d9f263e05f49691165a55344c2198e0b0efa2895080b955d70f9657fd903","84fadcc72f414923cb80cc53e28c105cb4279281acd41a6091492a5233a29826","2789fca198578c3b361d01346fad7d464ab5e7fbc26d1d29dcfb47d4ef3eed32","31033340d24bdd02a2843ee5ba5c0a5d6f30daf89b73d6e589c9e529f5b04a4b","e5f53b8244032a297b493a92495b74f72680162842f2cc06ad9c92bef0dfb8a5","c140752471415c58a8daaa05b2533d3b77eb3a159e5199e25269dd818c9da1c4","c2ffd19c431f3236852ec5f6585c9c8cdb42cd5965d7d1e97050356fec5603e6","cd587c543e2d3acc2a6abb405609abb245e73e6e435447783f575d4fa20b4df1","f6ba03b59ef5ffa350e0ea99089fe6ac2aa0bf1531ca94680df2b8925f7f6102","e1cf9532f3d058126c9d53b4b39e03a95e1dfdb5f34c4f9c8d89141d7fa47805","867638c83529d5de90a28d0f3a97d1c1b91a58252d0369d4f4d3dfa7675fa150","07ce687ee5e65d5c22e8eb22ebf70f12e0317f3d74768b58310728cb0fce4762","4480d418eedd72b70c86d9c2fd86c4957e3993c7e7cb1db87dcb6f45ca9fa27b","ae7a5e87da10144e4885245cc5e20c5708ba859cac46acecc5d8b608706ad5d7","112fb2d47423038a02d805c65e5e1406e43a171c6ead34b6c63b5e8aaeb7eedb","ebb08f22da76ad6ec06d759c02b459f09288cf97357fac988fef2ac644ca81eb","b921adda86d379bfde52e0230a68e19864c09d7e81ab3a72762c4e263e09011f","404106f56ae9800d9b67902d4a666e0b8c1678e1f331524e2ddb6206c37ef54a","49e313b9baba05cb2a60aa86553c6190619acac7351ae8a9571325d8740a7194","6803fc2f79729718038590a907d08512570c780405456b90ffad4e2a2a13a007","0e0a869438ca81b41d4ce28b355d75169565eeb46a8e675647b94ea0adfffa0c","b757ae15cdf16895ddb17c4d61b5a2eea500d57e5f37211ac2dee99edaf0220f","d5da74c99d71b85d2cf4e4c5c188efae98abf7205ad22fe392c8d846d6e90e12","05f4be0b5281bcd237aebdeb4d3663a65f524a8cbbe46ab9d6e264ffd55ef312","7ce8d5147c7279755c7c95b90c7d44ce0232e23dcece69567b19712d3df3d018","ff1d6e7e613b6cdc0806c014650f3c6d0cfff275461801e3275caded5cfeda1a","7745e6f6f17d74d9c7ef4cbecd87092b1b47be366ab4a2d635d611981e14df1a","07db7235aa25abb10d26b1e68be7368fe5c9102e0e53a7a812e13e1b17226d1b","c805d0aa003d226bca2a4041f616e1777ae7bc374aab40356f98d6dd01591820","63f7050379682db7447973890f0cc1cf36a0a6ff48ff731e81b9d80e3bf6ad21","ea021747a1903bdfef3f2ef5990f3ad7a9923f813dcfac96e758e33b9f5acc25","625cd0ef7e28ea36e64d9cc38eac82ab7ccf31de1066efffbdf307a73acca127","a696122d2c82980784f254ba825e78e0cf5236ca7f9b7fc480709121bd9eff28","ff5cf3e044e1d0ad5bd5198f658632acaf902c50e0729706047504158c14a82d","c5b845295fe0bc051ab7b62576640b2187d9accfd44e34d4484dbec3848dd32d","db115bbcb90986857a2b9faf8802627b19775bf30c52d6efe2b1c52489ffa633","2be1bb86489fcaa533723e890f8422a0a5a105d2b3cfa4040f25c9a0b8ddea34","aab916552374d22966ab83f6d3d8fb7166319bc0873c086d750f9b7671fe5537","b154ceaa378f20ee83fb29d0d81eb8e59611471978c08fdf1f979f19853f5d39","b314e12f1e0a110dbf532bcad8dce44ce751d13b13c5946ec025ae353889743d","d0d0c5d4c6032a6542a710426d6ba02e1caaa989fcc095ac059dff9e27d3b446","09a12bf4d53522c5f1502b55e6192244695fd6e4264b6ae940a02ebcdb052a48","4520ffdcdbb9d297620352880fd551f9151a0094bb09ea4ad17fe87d7885ad4a","ee22ea9b281f99d17582eebb1d8a72650cc804a5fbf3c3491fc0a41465bffb4c","fd098d05f9e5988c1c20a7a4575d62af0f491321d3b6b3a4fb6f652e6304274d","ec6434ec6f85dc00d10de782a59bc7d20bb8cefe7802ca05b220d48227c2964e","d97098c37812816de36a3a37bf99bbfc8dc71814fea60090781e023706c23652","e80c2e7f391cf28cf70a65cb3153847b849b1c96451dd83e3d6654e96bde7e59","d1f7e5ab068e6f363c59edcd9b129d57ed9414c8f1b35759977b43a3e4e2925c","7b7e63d4d363524016244e5706355960a2049e891143876cb0f749675bb5d35c","362dbf407093f96f18269f0f54e0f81248e37a745dab619fbc3d7476e4b78061","351c5476fe5419f0660348bb0eeb4863bee58a635d8d05a088f4c93c6ac2f867","ca42580fa7dd16bfeb942e83a01276cf0140759b0140565c63def8aa3276b468","de9ca24fb78ccd899188b1f28477658afe39624bf93850ef68acc621a14bd36c","d58acd9ff35fbd19847731148b17553efd280f22c0084b451d33615c8bf17a6d","42bea6fe4a53e25b8dd93b76d0e243a2a5d5ec23cdc8ece32f9ec22644e86b6f","c85957b8e8d647134d219b55d65cb6ca62e117f6ebab0828dbb2a56228730772","3a26878ff16d330bb437fa4f9f66079b7807329b5b38ee14420ef1a079f3b174","018053aa416e842f2e77aeb06d4259e7248579fe96736897aae7062f36109b76","da8d5bb67a63650857bf8299a898b06e3e7b1ac9023e46d9d04e960eb3a84f78","3a13b454fdebfe3a03eac9d442d5590ce182b9f6b7414b03cedda6039006ef7a","fea00fd6b1d1d96b01695cf98a9853fc4f37ab5656d301d54cce0f94dc41597d","8fddcffb6f64fc1c79e1410290c3ad7b416e6dc9a981eecdc29130332803907f","1b0c563395db37adc79c03c561cf60dffad5f8167c50b5daaca0794de4ea6781","2b940afe9b947daa4afbfca10b22899df2e34d29a2a92b1829f71ffcc98e3d83","ecd330f656d56f4a5be7d7c909227d51ae5d5ee42bba11da2191f4c1915cb187","583b1a8e3a09b4b5ece16e8ff5a169f119a6c7ed631a656ae17d2c02ed053289","44c01407110b6b2a6cda669442ccaa56b4eb0e674bcbc3168bcc24eeab2f7789","85cec4d4738afd2c9b2acef131dab898f94d6c925c16b378a074c85f56dafa90","b6dfbbaf387c650e50ba18244edf539be050424b49f166702b66197ccfb2a891","f8d71234fdaa319657d2fe79bb16414e5cdea0bdd35525816deed093e8e34897","81c1c109396509b8456bab9c054f56765c260508ee7b95616d9d321532656798","3c320659becd207d708ebe54a75c972ae4862f0a3bd772afc7cd2a80174c5d9c","a8b92566e20c60e8783e723c98e5a160f3b7df86aec33662f4201238a1d0319f","a35aa3509c251d3415233cea9302c8fd7bb14e3c9d791c41f3125fdc08d2a9a1","ec667f8edede7de826fdb6902d103f72e38e808ad6c5cdd16a10473e79c3c1aa","fe717a9d9a211592a99a8a8531d5d96df2b39a304774c6bd144ffee7271229ab","5352c479dc68cfbab504a7e257c27f99a5c8f42a012b111299a1dca780fc7fac","e28ac59f24cec2c5c84d08a60cbcd27575ffd128ef87cb3b08b414330338d4b0","716d114333f44a55e3abd92039d927651dbc4d1bf6ea91f05611ad1999560eb6","eb67b836590d969deab0902f669c77a4fd18445c4c58639595d1291ff082adb6","28b7f1f21efd0b5f2aa356880251def6d464e2936ba1ffa82ea5fd2bc91920b7","7e1ffbc57bec7b18e4a3a6fa98e69047b6a2a6ee6457b9f596b5d721a67c7eb9","8b0655a01198f77345ee82f5cd5d006598e716851dcbe951e4da973646aeb1b9","9610aa5c64c62c0a650ee80fe09df540cf13a3211c91a1a777ecccc20c4b99bb","c4f7dec55d70547be79ebc34d157762191dc544519f6ccd3447776285ac6d1bb","31aa8c448d782400acf6961211e739a15115a0caa8b5f750086839638efa98bf","91aaccd1dc819f8c35a3a496ffc1364fb56ce6fe78c0e558d220ce4602495ac5","afc5234d7e391e13f3ff7ed28083d3484167a0e9b8e911e236dfb55eb026fac7","93ed35cdda2af52d2ccd392003d709355741970fd7959dc8196efd5206a33fd0","56a3e2541e0d88e0c97afadcdfa6b00727e9efa653bb191727291a546fd146d9","47f9bdd84f76870ac3de8e51a2b82a9ebbf6403e4869cd6a4d3f9c64ec68bcdc","bf1e2ee954e8a285422f85018c84168206265778750ccf66b7a15e8bc9b49cde","471c8dc32007f2b63cafde9bbb1ab3f55d8dbca7955a6c9ef73da4083e5361e1","a481c5f573537363feda93ad3117ae771a4a32068050e84180811d00574ccbe3","e19e8a460bb058be7a68661f91676e8f4436e52578c965e4ec2713bf0d80c6e4","3ba052dc087ae6c49abf0ca02e9f0f014da87fe28894c1eb41a963652d5f17e6","551c422d695fc7b95cc2e79c4e50aaced0580909ddf16149c6563bd2abb4b0e6","cd8de9ce259537b72bb4b0245754f06dbbc5dee35a52813a71a542ab107d6df1","acd39423bb6a66ccaddc4be2a761c602c5508e3a0e383819aeaf2f2c8cd19ef1","4ea266230827ad831b068b7d2595c0f9c0b975b3edebd6ba494212861b7b26f5","743c79e1eb1cc9ea0eccd2cb1bce352c6da30adbfa0099afd6641dc0df479af8","7661a9235879a68cf57f384bd093adaee088f8770ead0f1158aa98bb831790fa","16fd575e37e05624ccc697b86c811f9490818efba7c8d3e92b58d21cb87aebfa","dabf079685821fe29256d5f9816939849fb786efc64f150851fedbfa4bdecafe","a9db40cdab45e11ef93998d8dd21ff56343dfa8db554e2c886af1592880a8aff"],"time":1574441275,"mediantime":1574439185,"nonce":3452712277,"bits":"18071aac","difficulty":154767160372.6538,"chainwork":"000000000000000000000000000000000000000000ee4ea523c4e2d9d3918f70","previousblockhash":"000000000000000005a09abd0197b0bc3b6e3e9fb270641d5a23614c5d585570","nextblockhash":"000000000000000006c83f8c43276173a36530f71e0d31694e31237bd2de58f5","coinbaseTx":{"hex":"","txid":"fe26309c88e67c04ffdf3675609419d4ea4caed70903281ddbca3defa269ab6a","hash":"fe26309c88e67c04ffdf3675609419d4ea4caed70903281ddbca3defa269ab6a","version":2,"size":123,"locktime":0,"vin":[{"coinbase":"038a4e09043b11d85d2f6273766d696e696e672e696f2f627376021e98502348030000000000","txid":"","vout":0,"scriptSig":{"asm":"","hex":""},"sequence":4294967295}],"vout":[{"value":12.50448114,"n":0,"scriptPubKey":{"asm":"OP_DUP OP_HASH160 47aba586720d99662028a5b150ebeca0f38c1b15 OP_EQUALVERIFY OP_CHECKSIG","hex":"76a91447aba586720d99662028a5b150ebeca0f38c1b1588ac","reqSigs":1,"type":"pubkeyhash","addresses":["17XxbqMFxMH13Tz7WFHSgtxfC6wppFJzx5"],"opReturn":null,"isTruncated":false}}],"blockhash":"000000000000000005def20c31590796ce9b8d808248c46b7b352873919c7112","confirmations":30573,"time":1574441275,"blocktime":1574441275},"totalFees":0.0044811399999993284,"miner":"bsvmining.io","pages":null}`)))
}
// Invalid (by height) return an error
if strings.Contains(req.URL.String(), "height/99999999999") {
resp.StatusCode = http.StatusOK
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(``)))
}
// Invalid (by height) return an error
if strings.Contains(req.URL.String(), "height/1234567") {
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(``)))
return resp, fmt.Errorf("bad request")
}
// Not found
if strings.Contains(req.URL.String(), "height/5555") {
resp.StatusCode = http.StatusNotFound
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(``)))
return resp, nil
}
//
// Block by Hash/Pages
//
// Valid (by page)
if strings.Contains(req.URL.String(), "hash/000000000000000000885a4d8e9912f085b42288adc58b3ee5830a7da9f4fef4/page") {
resp.StatusCode = http.StatusOK
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(`["51c4933d986da4c0de51ea8446b7db4aa1753f205c594591a09998b1d05d7cfe","c0f5ee6bbe498d5b8ab4a07dafbbbabeeb8f1ad9de187db0881d4b8cbf3675fe","5f0f1d5f5cc1885544239d3aaf95d2d19b9d18c69c7f39c1929a8ebe3e746ffe"]`)))
}
// Invalid (by page) return null
if strings.Contains(req.URL.String(), "hash/invalidBlockPage/page") {
resp.StatusCode = http.StatusOK
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(`null`)))
}
// Invalid (by page) return an error
if strings.Contains(req.URL.String(), "hash/error/page") {
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(``)))
return resp, fmt.Errorf("bad request")
}
// Not found (by page) return an error
if strings.Contains(req.URL.String(), "hash/notFound/page") {
resp.StatusCode = http.StatusNotFound
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(``)))
return resp, nil
}
//
// Block headers
//
// Valid (by headers)
if strings.Contains(req.URL.String(), "block/headers") {
resp.StatusCode = http.StatusOK
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(`[{"hash":"0000000000000000008605a63392a85ebc7e055af19334b2a2f3952e1fdeb3b2","confirmations":1,"height":649878,"version":545259520,"versionHex":"20800000","merkleroot":"4a15fc52ee2ebf9685e9025e1e52e96221f0eee12977befcbde54781588ba7db","time":1598479741,"mediantime":1598477040,"nonce":640093571,"bits":"1803ef5b","difficulty":279415450131.6495,"chainwork":"00000000000000000000000000000000000000000117de0c9389224f32148db4","previousblockhash":"000000000000000003320fe7920e176751ce1b1962fdef262da57b93a60243c0","nextblockhash":""},{"hash":"000000000000000003320fe7920e176751ce1b1962fdef262da57b93a60243c0","confirmations":2,"height":649877,"version":541065216,"versionHex":"20400000","merkleroot":"322e0848cb2100fc77020538fa2ef011f2bbf5b5705a2aa9c4377bb33cd6d7f8","time":1598478943,"mediantime":1598477000,"nonce":2995059344,"bits":"1803ef67","difficulty":279402448772.9509,"chainwork":"00000000000000000000000000000000000000000117ddcb84d2a9851306d5df","previousblockhash":"000000000000000002025ab704105bb6834f725ef8f8ca5e638b503f7ac07984","nextblockhash":"0000000000000000008605a63392a85ebc7e055af19334b2a2f3952e1fdeb3b2"},{"hash":"000000000000000002025ab704105bb6834f725ef8f8ca5e638b503f7ac07984","confirmations":3,"height":649876,"version":536870912,"versionHex":"20000000","merkleroot":"bfcb37442066aaac9567e3e90886bd76e244a862b3b8071397dadd03e3f3937b","time":1598477341,"mediantime":1598476911,"nonce":2215091378,"bits":"1803f0f7","difficulty":278969761421.2438,"chainwork":"00000000000000000000000000000000000000000117dd8a76e294100a26c215","previousblockhash":"0000000000000000001f3f632cd81bfa1a62b3f5b7385b2f20b93870a224cba6","nextblockhash":"000000000000000003320fe7920e176751ce1b1962fdef262da57b93a60243c0"},{"hash":"0000000000000000001f3f632cd81bfa1a62b3f5b7385b2f20b93870a224cba6","confirmations":4,"height":649875,"version":648306688,"versionHex":"26a46000","merkleroot":"1e7c00a491cdcc7128a18980a585abeaae75b56f3ad1fcda706c6c24908a50de","time":1598477113,"mediantime":1598476841,"nonce":3076864763,"bits":"1803f32c","difficulty":278360868910.995,"chainwork":"00000000000000000000000000000000000000000117dd4982bce15d190bff3f","previousblockhash":"00000000000000000112db120b70edfa8841f309c9eb4c0caa9f8ac049d8a48e","nextblockhash":"000000000000000002025ab704105bb6834f725ef8f8ca5e638b503f7ac07984"},{"hash":"00000000000000000112db120b70edfa8841f309c9eb4c0caa9f8ac049d8a48e","confirmations":5,"height":649874,"version":939515904,"versionHex":"37ffe000","merkleroot":"c5ed8d950ce413b245ceac513e6d4e5d67a867417fc29813a2f4b38907928c96","time":1598477072,"mediantime":1598476636,"nonce":3789963966,"bits":"1803f8ce","difficulty":276818827847.2703,"chainwork":"00000000000000000000000000000000000000000117dd08b2e24953824b8801","previousblockhash":"000000000000000003462ecb2453e69fac4924f6ea95292e8ba7bade08f99780","nextblockhash":"0000000000000000001f3f632cd81bfa1a62b3f5b7385b2f20b93870a224cba6"},{"hash":"000000000000000003462ecb2453e69fac4924f6ea95292e8ba7bade08f99780","confirmations":6,"height":649873,"version":939515904,"versionHex":"37ffe000","merkleroot":"3c050ff6be57f8a16283037545bef3ba6f51a445dac2d688aba0093bb605004d","time":1598477040,"mediantime":1598476525,"nonce":1944381551,"bits":"180444d5","difficulty":257560790400.1578,"chainwork":"00000000000000000000000000000000000000000117dcc83ef1bb1baedfb893","previousblockhash":"0000000000000000004a1e546d5351962454c2069daf0224f948439a21a05c69","nextblockhash":"00000000000000000112db120b70edfa8841f309c9eb4c0caa9f8ac049d8a48e"},{"hash":"0000000000000000004a1e546d5351962454c2069daf0224f948439a21a05c69","confirmations":7,"height":649872,"version":541065216,"versionHex":"20400000","merkleroot":"6ec1b1532a2f2e47956779aeb2faf0bb4b0a3dadf88fc23e486510d7f8b07c4f","time":1598477000,"mediantime":1598476132,"nonce":2938861584,"bits":"1804445d","difficulty":257671313723.829,"chainwork":"00000000000000000000000000000000000000000117dc8c46e3fd8dc8e92d5b","previousblockhash":"000000000000000002c8bc418f1a77bd4e489dd3e35f3654007cedcd71a4bb7a","nextblockhash":"000000000000000003462ecb2453e69fac4924f6ea95292e8ba7bade08f99780"},{"hash":"000000000000000002c8bc418f1a77bd4e489dd3e35f3654007cedcd71a4bb7a","confirmations":8,"height":649871,"version":545259520,"versionHex":"20800000","merkleroot":"aa60503d810f85a6f46fb38dc9b1f136ae731058c35c412c00f811b29d082b46","time":1598476911,"mediantime":1598475907,"nonce":3227578245,"bits":"180443b9","difficulty":257822515757.0645,"chainwork":"00000000000000000000000000000000000000000117dc50483fc5adbccff37e","previousblockhash":"0000000000000000034343ddebb66772ff79654462f254c76f33435ee31fe3a5","nextblockhash":"0000000000000000004a1e546d5351962454c2069daf0224f948439a21a05c69"},{"hash":"0000000000000000034343ddebb66772ff79654462f254c76f33435ee31fe3a5","confirmations":9,"height":649870,"version":536870912,"versionHex":"20000000","merkleroot":"67bfa15a591d451bad588c93b509f0398a3ddd11d995500303e47c6295642bfb","time":1598476841,"mediantime":1598475778,"nonce":571747829,"bits":"1804446a","difficulty":257659335782.6351,"chainwork":"00000000000000000000000000000000000000000117dc1440985bd9427489af","previousblockhash":"00000000000000000332cfba27b8ecb05bbf38cb5cbf71619deaab2f622ad443","nextblockhash":"000000000000000002c8bc418f1a77bd4e489dd3e35f3654007cedcd71a4bb7a"},{"hash":"00000000000000000332cfba27b8ecb05bbf38cb5cbf71619deaab2f622ad443","confirmations":10,"height":649869,"version":536870912,"versionHex":"20000000","merkleroot":"5a4bb20818123ca54ab725332f5f810981bcd94c7c4c5464cb81e2788f898318","time":1598476636,"mediantime":1598475677,"nonce":309962292,"bits":"18043fd4","difficulty":258745545619.4976,"chainwork":"00000000000000000000000000000000000000000117dbd842aae9852d8c2297","previousblockhash":"000000000000000003d70e22a79928ba7e1501a1bdeabc25489689cf4fdb2138","nextblockhash":"0000000000000000034343ddebb66772ff79654462f254c76f33435ee31fe3a5"}]`)))
}
// Default is valid
return resp, nil
}
// mockHTTPHeadersNotFound for mocking requests
type mockHTTPHeadersNotFound struct{}
// Do is a mock http request
func (m *mockHTTPHeadersNotFound) Do(req *http.Request) (*http.Response, error) {
resp := new(http.Response)
resp.StatusCode = http.StatusNotFound
// No req found
if req == nil {
return resp, fmt.Errorf("missing request")
}
// Not found
if strings.Contains(req.URL.String(), "block/headers") {
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(``)))
}
// Default is valid
return resp, nil
}
// mockHTTPHeadersError for mocking requests
type mockHTTPHeadersError struct{}
// Do is a mock http request
func (m *mockHTTPHeadersError) Do(req *http.Request) (*http.Response, error) {
resp := new(http.Response)
resp.StatusCode = http.StatusBadRequest
// No req found
if req == nil {
return resp, fmt.Errorf("bad request")
}
// Invalid
if strings.Contains(req.URL.String(), "block/headers") {
resp.Body = ioutil.NopCloser(bytes.NewBuffer([]byte(``)))
}
return resp, fmt.Errorf("bad request")
}
// TestClient_GetBlockByHash tests the GetBlockByHash()
func TestClient_GetBlockByHash(t *testing.T) {
t.Parallel()
// New mock client
client := newMockClient(&mockHTTPBlocks{})
ctx := context.Background()
// Create the list of tests
var tests = []struct {
input string
expected string
expectedError bool
statusCode int
}{
{"0000000000000000025b8506c83450afe84f0318775a52c7b91ee64aad0d5a23", "0000000000000000025b8506c83450afe84f0318775a52c7b91ee64aad0d5a23", false, http.StatusOK},
{"invalidBlockHash", "", true, http.StatusBadRequest},
{"notFound", "", true, http.StatusNotFound},
}
// Test all
for _, test := range tests {
if output, err := client.GetBlockByHash(ctx, test.input); err == nil && test.expectedError {
t.Errorf("%s Failed: expected to throw an error, no error [%s] inputted", t.Name(), test.input)
} else if err != nil && !test.expectedError {
t.Errorf("%s Failed: [%s] inputted, received: [%v] error [%s]", t.Name(), test.input, output, err.Error())
} else if output != nil && output.Hash != test.expected && !test.expectedError {
t.Errorf("%s Failed: [%s] inputted and [%s] expected, received: [%s]", t.Name(), test.input, test.expected, output.Hash)
} else if client.LastRequest().StatusCode != test.statusCode {
t.Errorf("%s Expected status code to be %d, got %d, [%s] inputted", t.Name(), test.statusCode, client.LastRequest().StatusCode, test.input)
}
}
}
// TestClient_GetBlockByHeight tests the GetBlockByHeight()
func TestClient_GetBlockByHeight(t *testing.T) {
t.Parallel()
// New mock client
client := newMockClient(&mockHTTPBlocks{})
ctx := context.Background()
// Create the list of tests
var tests = []struct {
input int64
expected int64
expectedError bool
statusCode int
}{
{609930, 609930, false, http.StatusOK},
{99999999999, 0, true, http.StatusOK},
{1234567, 0, true, http.StatusBadRequest},
{5555, 0, true, http.StatusNotFound},
}
// Test all
for _, test := range tests {
if output, err := client.GetBlockByHeight(ctx, test.input); err == nil && test.expectedError {
t.Errorf("%s Failed: expected to throw an error, no error [%d] inputted", t.Name(), test.input)
} else if err != nil && !test.expectedError {
t.Errorf("%s Failed: [%d] inputted, received: [%v] error [%s]", t.Name(), test.input, output, err.Error())
} else if output != nil && output.Height != test.expected && !test.expectedError {
t.Errorf("%s Failed: [%d] inputted and [%d] expected, received: [%s]", t.Name(), test.input, test.expected, output.Hash)
} else if client.LastRequest().StatusCode != test.statusCode {
t.Errorf("%s Expected status code to be %d, got %d, [%d] inputted", t.Name(), test.statusCode, client.LastRequest().StatusCode, test.input)
}
}
}
// TestClient_GetBlockPages tests the GetBlockPages()
func TestClient_GetBlockPages(t *testing.T) {
t.Parallel()
// New mock client
client := newMockClient(&mockHTTPBlocks{})
ctx := context.Background()
// Create the list of tests
var tests = []struct {
input string
expected string
expectedError bool
statusCode int
}{
{"000000000000000000885a4d8e9912f085b42288adc58b3ee5830a7da9f4fef4", "51c4933d986da4c0de51ea8446b7db4aa1753f205c594591a09998b1d05d7cfe", false, http.StatusOK},
{"invalidBlockPage", "null", false, http.StatusOK},
{"error", "", true, http.StatusBadRequest},
{"notFound", "", true, http.StatusNotFound},
}
// Test all
for _, test := range tests {
if output, err := client.GetBlockPages(ctx, test.input, 1); err == nil && test.expectedError {
t.Errorf("%s Failed: expected to throw an error, no error [%s] inputted", t.Name(), test.input)
} else if err != nil && !test.expectedError {
t.Errorf("%s Failed: [%s] inputted, received: [%v] error [%s]", t.Name(), test.input, output, err.Error())
} else if output != nil && output[0] != test.expected && !test.expectedError {
t.Errorf("%s Failed: [%s] inputted and [%s] expected, received: [%s]", t.Name(), test.input, test.expected, output[0])
} else if client.LastRequest().StatusCode != test.statusCode {
t.Errorf("%s Expected status code to be %d, got %d, [%s] inputted", t.Name(), test.statusCode, client.LastRequest().StatusCode, test.input)
}
}
}
// TestClient_GetHeaderByHash tests the GetHeaderByHash()
func TestClient_GetHeaderByHash(t *testing.T) {
t.Parallel()
// New mock client
client := newMockClient(&mockHTTPBlocks{})
ctx := context.Background()
// Create the list of tests
var tests = []struct {
input string
expected string
expectedError bool
statusCode int
}{
{"000000000000000004a288072ebb35e37233f419918f9783d499979cb6ac33eb", "000000000000000004a288072ebb35e37233f419918f9783d499979cb6ac33eb", false, http.StatusOK},
{"invalidBlockHeaderHash", "", true, http.StatusBadRequest},
{"notFound", "", true, http.StatusNotFound},
}
// Test all
for _, test := range tests {
if output, err := client.GetHeaderByHash(ctx, test.input); err == nil && test.expectedError {
t.Errorf("%s Failed: expected to throw an error, no error [%s] inputted", t.Name(), test.input)
} else if err != nil && !test.expectedError {
t.Errorf("%s Failed: [%s] inputted, received: [%v] error [%s]", t.Name(), test.input, output, err.Error())
} else if output != nil && output.Hash != test.expected && !test.expectedError {
t.Errorf("%s Failed: [%s] inputted and [%s] expected, received: [%s]", t.Name(), test.input, test.expected, output.Hash)
} else if client.LastRequest().StatusCode != test.statusCode {
t.Errorf("%s Expected status code to be %d, got %d, [%s] inputted", t.Name(), test.statusCode, client.LastRequest().StatusCode, test.input)
}
}
}
// TestClient_GetHeaders tests the GetHeaders()
func TestClient_GetHeaders(t *testing.T) {
t.Parallel()
// New mock client
client := newMockClient(&mockHTTPBlocks{})
ctx := context.Background()
// Create the list of tests
var tests = []struct {
expected string
expectedError bool
statusCode int
}{
{"0000000000000000008605a63392a85ebc7e055af19334b2a2f3952e1fdeb3b2", false, http.StatusOK},
}
// todo: add failure test cases
// Test all
for _, test := range tests {
if output, err := client.GetHeaders(ctx); err == nil && test.expectedError {
t.Errorf("%s Failed: expected to throw an error, no error", t.Name())
} else if err != nil && !test.expectedError {
t.Errorf("%s Failed: received: [%v] error [%s]", t.Name(), output, err.Error())
} else if output != nil && output[0].Hash != test.expected && !test.expectedError {
t.Errorf("%s Failed: [%s] expected, received: [%s]", t.Name(), test.expected, output[0].Hash)
} else if client.LastRequest().StatusCode != test.statusCode {
t.Errorf("%s Expected status code to be %d, got %d", t.Name(), test.statusCode, client.LastRequest().StatusCode)
}
}
// New not found mock client
client = newMockClient(&mockHTTPHeadersNotFound{})
// Test response
_, err := client.GetHeaders(ctx)
if err == nil {
t.Errorf("%s Failed: error should have occurred", t.Name())
}
// New invalid mock client
client = newMockClient(&mockHTTPHeadersError{})
// Test response
_, err = client.GetHeaders(ctx)
if err == nil {
t.Errorf("%s Failed: error should have occurred", t.Name())
}
}