github.com/marconiprotocol/go-methereum-lite@v0.0.0-20190918214227-3cd8b06fcf99/consensus/ethash/algorithm.go (about) 1 // Copyright 2017 The go-ethereum Authors 2 // This file is part of the go-ethereum library. 3 // 4 // The go-ethereum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The go-ethereum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package ethash 18 19 import ( 20 "crypto/sha256" 21 "encoding/binary" 22 "hash" 23 "math/big" 24 "reflect" 25 "runtime" 26 "sync" 27 "sync/atomic" 28 "time" 29 "unsafe" 30 31 "github.com/MarconiProtocol/go-methereum-lite/common" 32 "github.com/MarconiProtocol/go-methereum-lite/common/bitutil" 33 "github.com/MarconiProtocol/go-methereum-lite/crypto" 34 "github.com/MarconiProtocol/go-methereum-lite/log" 35 "golang.org/x/crypto/sha3" 36 ) 37 38 const ( 39 datasetInitBytes = 1 << 30 // Bytes in dataset at genesis 40 datasetGrowthBytes = 1 << 23 // Dataset growth per epoch 41 cacheInitBytes = 1 << 24 // Bytes in cache at genesis 42 cacheGrowthBytes = 1 << 17 // Cache growth per epoch 43 epochLength = 30000 // Blocks per epoch 44 mixBytes = 128 // Width of mix 45 hashBytes = 64 // Hash length in bytes 46 hashWords = 16 // Number of 32 bit ints in a hash 47 datasetParents = 256 // Number of parents of each dataset element 48 cacheRounds = 3 // Number of rounds in cache production 49 loopAccesses = 64 // Number of accesses in hashimoto loop 50 ) 51 52 // cacheSize returns the size of the ethash verification cache that belongs to a certain 53 // block number. 54 func cacheSize(block uint64) uint64 { 55 epoch := int(block / epochLength) 56 if epoch < maxEpoch { 57 return cacheSizes[epoch] 58 } 59 return calcCacheSize(epoch) 60 } 61 62 // calcCacheSize calculates the cache size for epoch. The cache size grows linearly, 63 // however, we always take the highest prime below the linearly growing threshold in order 64 // to reduce the risk of accidental regularities leading to cyclic behavior. 65 func calcCacheSize(epoch int) uint64 { 66 size := cacheInitBytes + cacheGrowthBytes*uint64(epoch) - hashBytes 67 for !new(big.Int).SetUint64(size / hashBytes).ProbablyPrime(1) { // Always accurate for n < 2^64 68 size -= 2 * hashBytes 69 } 70 return size 71 } 72 73 // datasetSize returns the size of the ethash mining dataset that belongs to a certain 74 // block number. 75 func datasetSize(block uint64) uint64 { 76 epoch := int(block / epochLength) 77 if epoch < maxEpoch { 78 return datasetSizes[epoch] 79 } 80 return calcDatasetSize(epoch) 81 } 82 83 // calcDatasetSize calculates the dataset size for epoch. The dataset size grows linearly, 84 // however, we always take the highest prime below the linearly growing threshold in order 85 // to reduce the risk of accidental regularities leading to cyclic behavior. 86 func calcDatasetSize(epoch int) uint64 { 87 size := datasetInitBytes + datasetGrowthBytes*uint64(epoch) - mixBytes 88 for !new(big.Int).SetUint64(size / mixBytes).ProbablyPrime(1) { // Always accurate for n < 2^64 89 size -= 2 * mixBytes 90 } 91 return size 92 } 93 94 // hasher is a repetitive hasher allowing the same hash data structures to be 95 // reused between hash runs instead of requiring new ones to be created. 96 type hasher func(dest []byte, data []byte) 97 98 // makeHasher creates a repetitive hasher, allowing the same hash data structures to 99 // be reused between hash runs instead of requiring new ones to be created. The returned 100 // function is not thread safe! 101 func makeHasher(h hash.Hash) hasher { 102 // sha3.state supports Read to get the sum, use it to avoid the overhead of Sum. 103 // Read alters the state but we reset the hash before every operation. 104 type readerHash interface { 105 hash.Hash 106 Read([]byte) (int, error) 107 } 108 rh, ok := h.(readerHash) 109 if !ok { 110 panic("can't find Read method on hash") 111 } 112 outputLen := rh.Size() 113 return func(dest []byte, data []byte) { 114 rh.Reset() 115 rh.Write(data) 116 rh.Read(dest[:outputLen]) 117 } 118 } 119 120 // seedHash is the seed to use for generating a verification cache and the mining 121 // dataset. 122 func seedHash(block uint64) []byte { 123 seed := make([]byte, 32) 124 if block < epochLength { 125 return seed 126 } 127 keccak256 := makeHasher(sha3.NewLegacyKeccak256()) 128 for i := 0; i < int(block/epochLength); i++ { 129 keccak256(seed, seed) 130 } 131 return seed 132 } 133 134 // generateCache creates a verification cache of a given size for an input seed. 135 // The cache production process involves first sequentially filling up 32 MB of 136 // memory, then performing two passes of Sergio Demian Lerner's RandMemoHash 137 // algorithm from Strict Memory Hard Hashing Functions (2014). The output is a 138 // set of 524288 64-byte values. 139 // This method places the result into dest in machine byte order. 140 func generateCache(dest []uint32, epoch uint64, seed []byte) { 141 // Print some debug logs to allow analysis on low end devices 142 logger := log.New("epoch", epoch) 143 144 start := time.Now() 145 defer func() { 146 elapsed := time.Since(start) 147 148 logFn := logger.Debug 149 if elapsed > 3*time.Second { 150 logFn = logger.Info 151 } 152 logFn("Generated ethash verification cache", "elapsed", common.PrettyDuration(elapsed)) 153 }() 154 // Convert our destination slice to a byte buffer 155 header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest)) 156 header.Len *= 4 157 header.Cap *= 4 158 cache := *(*[]byte)(unsafe.Pointer(&header)) 159 160 // Calculate the number of theoretical rows (we'll store in one buffer nonetheless) 161 size := uint64(len(cache)) 162 rows := int(size) / hashBytes 163 164 // Start a monitoring goroutine to report progress on low end devices 165 var progress uint32 166 167 done := make(chan struct{}) 168 defer close(done) 169 170 go func() { 171 for { 172 select { 173 case <-done: 174 return 175 case <-time.After(3 * time.Second): 176 logger.Info("Generating ethash verification cache", "percentage", atomic.LoadUint32(&progress)*100/uint32(rows)/4, "elapsed", common.PrettyDuration(time.Since(start))) 177 } 178 } 179 }() 180 // Create a hasher to reuse between invocations 181 keccak512 := makeHasher(sha3.NewLegacyKeccak512()) 182 183 // Sequentially produce the initial dataset 184 keccak512(cache, seed) 185 for offset := uint64(hashBytes); offset < size; offset += hashBytes { 186 keccak512(cache[offset:], cache[offset-hashBytes:offset]) 187 atomic.AddUint32(&progress, 1) 188 } 189 // Use a low-round version of randmemohash 190 temp := make([]byte, hashBytes) 191 192 for i := 0; i < cacheRounds; i++ { 193 for j := 0; j < rows; j++ { 194 var ( 195 srcOff = ((j - 1 + rows) % rows) * hashBytes 196 dstOff = j * hashBytes 197 xorOff = (binary.LittleEndian.Uint32(cache[dstOff:]) % uint32(rows)) * hashBytes 198 ) 199 bitutil.XORBytes(temp, cache[srcOff:srcOff+hashBytes], cache[xorOff:xorOff+hashBytes]) 200 keccak512(cache[dstOff:], temp) 201 202 atomic.AddUint32(&progress, 1) 203 } 204 } 205 // Swap the byte order on big endian systems and return 206 if !isLittleEndian() { 207 swap(cache) 208 } 209 } 210 211 // swap changes the byte order of the buffer assuming a uint32 representation. 212 func swap(buffer []byte) { 213 for i := 0; i < len(buffer); i += 4 { 214 binary.BigEndian.PutUint32(buffer[i:], binary.LittleEndian.Uint32(buffer[i:])) 215 } 216 } 217 218 // fnv is an algorithm inspired by the FNV hash, which in some cases is used as 219 // a non-associative substitute for XOR. Note that we multiply the prime with 220 // the full 32-bit input, in contrast with the FNV-1 spec which multiplies the 221 // prime with one byte (octet) in turn. 222 func fnv(a, b uint32) uint32 { 223 return a*0x01000193 ^ b 224 } 225 226 // fnvHash mixes in data into mix using the ethash fnv method. 227 func fnvHash(mix []uint32, data []uint32) { 228 for i := 0; i < len(mix); i++ { 229 mix[i] = mix[i]*0x01000193 ^ data[i] 230 } 231 } 232 233 // generateDatasetItem combines data from 256 pseudorandomly selected cache nodes, 234 // and hashes that to compute a single dataset node. 235 func generateDatasetItem(cache []uint32, index uint32, keccak512 hasher) []byte { 236 // Calculate the number of theoretical rows (we use one buffer nonetheless) 237 rows := uint32(len(cache) / hashWords) 238 239 // Initialize the mix 240 mix := make([]byte, hashBytes) 241 242 binary.LittleEndian.PutUint32(mix, cache[(index%rows)*hashWords]^index) 243 for i := 1; i < hashWords; i++ { 244 binary.LittleEndian.PutUint32(mix[i*4:], cache[(index%rows)*hashWords+uint32(i)]) 245 } 246 keccak512(mix, mix) 247 248 // Convert the mix to uint32s to avoid constant bit shifting 249 intMix := make([]uint32, hashWords) 250 for i := 0; i < len(intMix); i++ { 251 intMix[i] = binary.LittleEndian.Uint32(mix[i*4:]) 252 } 253 // fnv it with a lot of random cache nodes based on index 254 for i := uint32(0); i < datasetParents; i++ { 255 parent := fnv(index^i, intMix[i%16]) % rows 256 fnvHash(intMix, cache[parent*hashWords:]) 257 } 258 // Flatten the uint32 mix into a binary one and return 259 for i, val := range intMix { 260 binary.LittleEndian.PutUint32(mix[i*4:], val) 261 } 262 keccak512(mix, mix) 263 return mix 264 } 265 266 // generateDataset generates the entire ethash dataset for mining. 267 // This method places the result into dest in machine byte order. 268 func generateDataset(dest []uint32, epoch uint64, cache []uint32) { 269 // Print some debug logs to allow analysis on low end devices 270 logger := log.New("epoch", epoch) 271 272 start := time.Now() 273 defer func() { 274 elapsed := time.Since(start) 275 276 logFn := logger.Debug 277 if elapsed > 3*time.Second { 278 logFn = logger.Info 279 } 280 logFn("Generated ethash verification cache", "elapsed", common.PrettyDuration(elapsed)) 281 }() 282 283 // Figure out whether the bytes need to be swapped for the machine 284 swapped := !isLittleEndian() 285 286 // Convert our destination slice to a byte buffer 287 header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest)) 288 header.Len *= 4 289 header.Cap *= 4 290 dataset := *(*[]byte)(unsafe.Pointer(&header)) 291 292 // Generate the dataset on many goroutines since it takes a while 293 threads := runtime.NumCPU() 294 size := uint64(len(dataset)) 295 296 var pend sync.WaitGroup 297 pend.Add(threads) 298 299 var progress uint32 300 for i := 0; i < threads; i++ { 301 go func(id int) { 302 defer pend.Done() 303 304 // Create a hasher to reuse between invocations 305 keccak512 := makeHasher(sha3.NewLegacyKeccak512()) 306 307 // Calculate the data segment this thread should generate 308 batch := uint32((size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads))) 309 first := uint32(id) * batch 310 limit := first + batch 311 if limit > uint32(size/hashBytes) { 312 limit = uint32(size / hashBytes) 313 } 314 // Calculate the dataset segment 315 percent := uint32(size / hashBytes / 100) 316 for index := first; index < limit; index++ { 317 item := generateDatasetItem(cache, index, keccak512) 318 if swapped { 319 swap(item) 320 } 321 copy(dataset[index*hashBytes:], item) 322 323 if status := atomic.AddUint32(&progress, 1); status%percent == 0 { 324 logger.Info("Generating DAG in progress", "percentage", uint64(status*100)/(size/hashBytes), "elapsed", common.PrettyDuration(time.Since(start))) 325 } 326 } 327 }(i) 328 } 329 // Wait for all the generators to finish and return 330 pend.Wait() 331 } 332 333 334 // Similar to hashimoto, quickHash accepts 32 byte block header 335 // hash and 8 byte nonce, then returns 32 byte digest and 32 byte result. 336 func quickHash(block_header_hash []byte, nonce uint64) ([]byte, []byte) { 337 header_concat_nonce := make([]byte, 40) 338 copy(header_concat_nonce, block_header_hash) 339 binary.LittleEndian.PutUint64(header_concat_nonce[32:], nonce) 340 result := sha256.Sum256(header_concat_nonce) 341 // The digest is always equal to the result, since unlike 342 // hashimoto, there's no need for separate full and light versions 343 // of quick hashing. 344 return result[:], result[:] 345 } 346 347 // hashimoto aggregates data from the full dataset in order to produce our final 348 // value for a particular header hash and nonce. 349 func hashimoto(hash []byte, nonce uint64, size uint64, lookup func(index uint32) []uint32) ([]byte, []byte) { 350 // Calculate the number of theoretical rows (we use one buffer nonetheless) 351 rows := uint32(size / mixBytes) 352 353 // Combine header+nonce into a 64 byte seed 354 seed := make([]byte, 40) 355 copy(seed, hash) 356 binary.LittleEndian.PutUint64(seed[32:], nonce) 357 358 seed = crypto.Keccak512(seed) 359 seedHead := binary.LittleEndian.Uint32(seed) 360 361 // Start the mix with replicated seed 362 mix := make([]uint32, mixBytes/4) 363 for i := 0; i < len(mix); i++ { 364 mix[i] = binary.LittleEndian.Uint32(seed[i%16*4:]) 365 } 366 // Mix in random dataset nodes 367 temp := make([]uint32, len(mix)) 368 369 for i := 0; i < loopAccesses; i++ { 370 parent := fnv(uint32(i)^seedHead, mix[i%len(mix)]) % rows 371 for j := uint32(0); j < mixBytes/hashBytes; j++ { 372 copy(temp[j*hashWords:], lookup(2*parent+j)) 373 } 374 fnvHash(mix, temp) 375 } 376 // Compress mix 377 for i := 0; i < len(mix); i += 4 { 378 mix[i/4] = fnv(fnv(fnv(mix[i], mix[i+1]), mix[i+2]), mix[i+3]) 379 } 380 mix = mix[:len(mix)/4] 381 382 digest := make([]byte, common.HashLength) 383 for i, val := range mix { 384 binary.LittleEndian.PutUint32(digest[i*4:], val) 385 } 386 return digest, crypto.Keccak256(append(seed, digest...)) 387 } 388 389 // hashimotoLight aggregates data from the full dataset (using only a small 390 // in-memory cache) in order to produce our final value for a particular header 391 // hash and nonce. 392 func hashimotoLight(size uint64, cache []uint32, hash []byte, nonce uint64) ([]byte, []byte) { 393 keccak512 := makeHasher(sha3.NewLegacyKeccak512()) 394 395 lookup := func(index uint32) []uint32 { 396 rawData := generateDatasetItem(cache, index, keccak512) 397 398 data := make([]uint32, len(rawData)/4) 399 for i := 0; i < len(data); i++ { 400 data[i] = binary.LittleEndian.Uint32(rawData[i*4:]) 401 } 402 return data 403 } 404 return hashimoto(hash, nonce, size, lookup) 405 } 406 407 // hashimotoFull aggregates data from the full dataset (using the full in-memory 408 // dataset) in order to produce our final value for a particular header hash and 409 // nonce. 410 func hashimotoFull(dataset []uint32, hash []byte, nonce uint64) ([]byte, []byte) { 411 lookup := func(index uint32) []uint32 { 412 offset := index * hashWords 413 return dataset[offset : offset+hashWords] 414 } 415 return hashimoto(hash, nonce, uint64(len(dataset))*4, lookup) 416 } 417 418 const maxEpoch = 2048 419 420 // datasetSizes is a lookup table for the ethash dataset size for the first 2048 421 // epochs (i.e. 61440000 blocks). 422 var datasetSizes = [maxEpoch]uint64{ 423 1073739904, 1082130304, 1090514816, 1098906752, 1107293056, 424 1115684224, 1124070016, 1132461952, 1140849536, 1149232768, 425 1157627776, 1166013824, 1174404736, 1182786944, 1191180416, 426 1199568512, 1207958912, 1216345216, 1224732032, 1233124736, 427 1241513344, 1249902464, 1258290304, 1266673792, 1275067264, 428 1283453312, 1291844992, 1300234112, 1308619904, 1317010048, 429 1325397376, 1333787776, 1342176128, 1350561664, 1358954368, 430 1367339392, 1375731584, 1384118144, 1392507008, 1400897408, 431 1409284736, 1417673344, 1426062464, 1434451072, 1442839168, 432 1451229056, 1459615616, 1468006016, 1476394112, 1484782976, 433 1493171584, 1501559168, 1509948032, 1518337664, 1526726528, 434 1535114624, 1543503488, 1551892096, 1560278656, 1568669056, 435 1577056384, 1585446272, 1593831296, 1602219392, 1610610304, 436 1619000192, 1627386752, 1635773824, 1644164224, 1652555648, 437 1660943488, 1669332608, 1677721216, 1686109312, 1694497664, 438 1702886272, 1711274624, 1719661184, 1728047744, 1736434816, 439 1744829056, 1753218944, 1761606272, 1769995904, 1778382464, 440 1786772864, 1795157888, 1803550592, 1811937664, 1820327552, 441 1828711552, 1837102976, 1845488768, 1853879936, 1862269312, 442 1870656896, 1879048064, 1887431552, 1895825024, 1904212096, 443 1912601216, 1920988544, 1929379456, 1937765504, 1946156672, 444 1954543232, 1962932096, 1971321728, 1979707264, 1988093056, 445 1996487552, 2004874624, 2013262208, 2021653888, 2030039936, 446 2038430848, 2046819968, 2055208576, 2063596672, 2071981952, 447 2080373632, 2088762752, 2097149056, 2105539712, 2113928576, 448 2122315136, 2130700672, 2139092608, 2147483264, 2155872128, 449 2164257664, 2172642176, 2181035392, 2189426048, 2197814912, 450 2206203008, 2214587264, 2222979712, 2231367808, 2239758208, 451 2248145024, 2256527744, 2264922752, 2273312128, 2281701248, 452 2290086272, 2298476672, 2306867072, 2315251072, 2323639168, 453 2332032128, 2340420224, 2348808064, 2357196416, 2365580416, 454 2373966976, 2382363008, 2390748544, 2399139968, 2407530368, 455 2415918976, 2424307328, 2432695424, 2441084288, 2449472384, 456 2457861248, 2466247808, 2474637184, 2483026816, 2491414144, 457 2499803776, 2508191872, 2516582272, 2524970368, 2533359232, 458 2541743488, 2550134144, 2558525056, 2566913408, 2575301504, 459 2583686528, 2592073856, 2600467328, 2608856192, 2617240448, 460 2625631616, 2634022016, 2642407552, 2650796416, 2659188352, 461 2667574912, 2675965312, 2684352896, 2692738688, 2701130624, 462 2709518464, 2717907328, 2726293376, 2734685056, 2743073152, 463 2751462016, 2759851648, 2768232832, 2776625536, 2785017728, 464 2793401984, 2801794432, 2810182016, 2818571648, 2826959488, 465 2835349376, 2843734144, 2852121472, 2860514432, 2868900992, 466 2877286784, 2885676928, 2894069632, 2902451584, 2910843008, 467 2919234688, 2927622784, 2936011648, 2944400768, 2952789376, 468 2961177728, 2969565568, 2977951616, 2986338944, 2994731392, 469 3003120256, 3011508352, 3019895936, 3028287104, 3036675968, 470 3045063808, 3053452928, 3061837696, 3070228352, 3078615424, 471 3087003776, 3095394944, 3103782272, 3112173184, 3120562048, 472 3128944768, 3137339264, 3145725056, 3154109312, 3162505088, 473 3170893184, 3179280256, 3187669376, 3196056704, 3204445568, 474 3212836736, 3221224064, 3229612928, 3238002304, 3246391168, 475 3254778496, 3263165824, 3271556224, 3279944576, 3288332416, 476 3296719232, 3305110912, 3313500032, 3321887104, 3330273152, 477 3338658944, 3347053184, 3355440512, 3363827072, 3372220288, 478 3380608384, 3388997504, 3397384576, 3405774208, 3414163072, 479 3422551936, 3430937984, 3439328384, 3447714176, 3456104576, 480 3464493952, 3472883584, 3481268864, 3489655168, 3498048896, 481 3506434432, 3514826368, 3523213952, 3531603584, 3539987072, 482 3548380288, 3556763264, 3565157248, 3573545344, 3581934464, 483 3590324096, 3598712704, 3607098752, 3615488384, 3623877248, 484 3632265856, 3640646528, 3649043584, 3657430144, 3665821568, 485 3674207872, 3682597504, 3690984832, 3699367808, 3707764352, 486 3716152448, 3724541056, 3732925568, 3741318016, 3749706368, 487 3758091136, 3766481536, 3774872704, 3783260032, 3791650432, 488 3800036224, 3808427648, 3816815488, 3825204608, 3833592704, 489 3841981568, 3850370432, 3858755968, 3867147904, 3875536256, 490 3883920512, 3892313728, 3900702592, 3909087872, 3917478784, 491 3925868416, 3934256512, 3942645376, 3951032192, 3959422336, 492 3967809152, 3976200064, 3984588416, 3992974976, 4001363584, 493 4009751168, 4018141312, 4026530432, 4034911616, 4043308928, 494 4051695488, 4060084352, 4068472448, 4076862848, 4085249408, 495 4093640576, 4102028416, 4110413696, 4118805632, 4127194496, 496 4135583104, 4143971968, 4152360832, 4160746112, 4169135744, 497 4177525888, 4185912704, 4194303616, 4202691968, 4211076736, 498 4219463552, 4227855488, 4236246656, 4244633728, 4253022848, 499 4261412224, 4269799808, 4278184832, 4286578048, 4294962304, 500 4303349632, 4311743104, 4320130432, 4328521088, 4336909184, 501 4345295488, 4353687424, 4362073472, 4370458496, 4378852736, 502 4387238528, 4395630208, 4404019072, 4412407424, 4420790656, 503 4429182848, 4437571456, 4445962112, 4454344064, 4462738048, 504 4471119232, 4479516544, 4487904128, 4496289664, 4504682368, 505 4513068416, 4521459584, 4529846144, 4538232704, 4546619776, 506 4555010176, 4563402112, 4571790208, 4580174464, 4588567936, 507 4596957056, 4605344896, 4613734016, 4622119808, 4630511488, 508 4638898816, 4647287936, 4655675264, 4664065664, 4672451968, 509 4680842624, 4689231488, 4697620352, 4706007424, 4714397056, 510 4722786176, 4731173248, 4739562368, 4747951744, 4756340608, 511 4764727936, 4773114496, 4781504384, 4789894784, 4798283648, 512 4806667648, 4815059584, 4823449472, 4831835776, 4840226176, 513 4848612224, 4857003392, 4865391488, 4873780096, 4882169728, 514 4890557312, 4898946944, 4907333248, 4915722368, 4924110976, 515 4932499328, 4940889728, 4949276032, 4957666432, 4966054784, 516 4974438016, 4982831488, 4991221376, 4999607168, 5007998848, 517 5016386432, 5024763776, 5033164672, 5041544576, 5049941888, 518 5058329728, 5066717056, 5075107456, 5083494272, 5091883904, 519 5100273536, 5108662144, 5117048192, 5125436032, 5133827456, 520 5142215296, 5150605184, 5158993024, 5167382144, 5175769472, 521 5184157568, 5192543872, 5200936064, 5209324928, 5217711232, 522 5226102656, 5234490496, 5242877312, 5251263872, 5259654016, 523 5268040832, 5276434304, 5284819328, 5293209728, 5301598592, 524 5309986688, 5318374784, 5326764416, 5335151488, 5343542144, 525 5351929472, 5360319872, 5368706944, 5377096576, 5385484928, 526 5393871232, 5402263424, 5410650496, 5419040384, 5427426944, 527 5435816576, 5444205952, 5452594816, 5460981376, 5469367936, 528 5477760896, 5486148736, 5494536832, 5502925952, 5511315328, 529 5519703424, 5528089984, 5536481152, 5544869504, 5553256064, 530 5561645696, 5570032768, 5578423936, 5586811264, 5595193216, 531 5603585408, 5611972736, 5620366208, 5628750464, 5637143936, 532 5645528192, 5653921408, 5662310272, 5670694784, 5679082624, 533 5687474048, 5695864448, 5704251008, 5712641408, 5721030272, 534 5729416832, 5737806208, 5746194304, 5754583936, 5762969984, 535 5771358592, 5779748224, 5788137856, 5796527488, 5804911232, 536 5813300608, 5821692544, 5830082176, 5838468992, 5846855552, 537 5855247488, 5863636096, 5872024448, 5880411008, 5888799872, 538 5897186432, 5905576832, 5913966976, 5922352768, 5930744704, 539 5939132288, 5947522432, 5955911296, 5964299392, 5972688256, 540 5981074304, 5989465472, 5997851008, 6006241408, 6014627968, 541 6023015552, 6031408256, 6039796096, 6048185216, 6056574848, 542 6064963456, 6073351808, 6081736064, 6090128768, 6098517632, 543 6106906496, 6115289216, 6123680896, 6132070016, 6140459648, 544 6148849024, 6157237376, 6165624704, 6174009728, 6182403712, 545 6190792064, 6199176064, 6207569792, 6215952256, 6224345216, 546 6232732544, 6241124224, 6249510272, 6257899136, 6266287744, 547 6274676864, 6283065728, 6291454336, 6299843456, 6308232064, 548 6316620928, 6325006208, 6333395584, 6341784704, 6350174848, 549 6358562176, 6366951296, 6375337856, 6383729536, 6392119168, 550 6400504192, 6408895616, 6417283456, 6425673344, 6434059136, 551 6442444672, 6450837376, 6459223424, 6467613056, 6476004224, 552 6484393088, 6492781952, 6501170048, 6509555072, 6517947008, 553 6526336384, 6534725504, 6543112832, 6551500672, 6559888768, 554 6568278656, 6576662912, 6585055616, 6593443456, 6601834112, 555 6610219648, 6618610304, 6626999168, 6635385472, 6643777408, 556 6652164224, 6660552832, 6668941952, 6677330048, 6685719424, 557 6694107776, 6702493568, 6710882176, 6719274112, 6727662976, 558 6736052096, 6744437632, 6752825984, 6761213824, 6769604224, 559 6777993856, 6786383488, 6794770816, 6803158144, 6811549312, 560 6819937664, 6828326528, 6836706176, 6845101696, 6853491328, 561 6861880448, 6870269312, 6878655104, 6887046272, 6895433344, 562 6903822208, 6912212864, 6920596864, 6928988288, 6937377152, 563 6945764992, 6954149248, 6962544256, 6970928768, 6979317376, 564 6987709312, 6996093824, 7004487296, 7012875392, 7021258624, 565 7029652352, 7038038912, 7046427776, 7054818944, 7063207808, 566 7071595136, 7079980928, 7088372608, 7096759424, 7105149824, 567 7113536896, 7121928064, 7130315392, 7138699648, 7147092352, 568 7155479168, 7163865728, 7172249984, 7180648064, 7189036672, 569 7197424768, 7205810816, 7214196608, 7222589824, 7230975104, 570 7239367552, 7247755904, 7256145536, 7264533376, 7272921472, 571 7281308032, 7289694848, 7298088832, 7306471808, 7314864512, 572 7323253888, 7331643008, 7340029568, 7348419712, 7356808832, 573 7365196672, 7373585792, 7381973888, 7390362752, 7398750592, 574 7407138944, 7415528576, 7423915648, 7432302208, 7440690304, 575 7449080192, 7457472128, 7465860992, 7474249088, 7482635648, 576 7491023744, 7499412608, 7507803008, 7516192384, 7524579968, 577 7532967296, 7541358464, 7549745792, 7558134656, 7566524032, 578 7574912896, 7583300992, 7591690112, 7600075136, 7608466816, 579 7616854912, 7625244544, 7633629824, 7642020992, 7650410368, 580 7658794112, 7667187328, 7675574912, 7683961984, 7692349568, 581 7700739712, 7709130368, 7717519232, 7725905536, 7734295424, 582 7742683264, 7751069056, 7759457408, 7767849088, 7776238208, 583 7784626816, 7793014912, 7801405312, 7809792128, 7818179968, 584 7826571136, 7834957184, 7843347328, 7851732352, 7860124544, 585 7868512384, 7876902016, 7885287808, 7893679744, 7902067072, 586 7910455936, 7918844288, 7927230848, 7935622784, 7944009344, 587 7952400256, 7960786048, 7969176704, 7977565312, 7985953408, 588 7994339968, 8002730368, 8011119488, 8019508096, 8027896192, 589 8036285056, 8044674688, 8053062272, 8061448832, 8069838464, 590 8078227328, 8086616704, 8095006592, 8103393664, 8111783552, 591 8120171392, 8128560256, 8136949376, 8145336704, 8153726848, 592 8162114944, 8170503296, 8178891904, 8187280768, 8195669632, 593 8204058496, 8212444544, 8220834176, 8229222272, 8237612672, 594 8246000768, 8254389376, 8262775168, 8271167104, 8279553664, 595 8287944064, 8296333184, 8304715136, 8313108352, 8321497984, 596 8329885568, 8338274432, 8346663296, 8355052928, 8363441536, 597 8371828352, 8380217984, 8388606592, 8396996224, 8405384576, 598 8413772672, 8422161536, 8430549376, 8438939008, 8447326592, 599 8455715456, 8464104832, 8472492928, 8480882048, 8489270656, 600 8497659776, 8506045312, 8514434944, 8522823808, 8531208832, 601 8539602304, 8547990656, 8556378752, 8564768384, 8573154176, 602 8581542784, 8589933952, 8598322816, 8606705024, 8615099264, 603 8623487872, 8631876992, 8640264064, 8648653952, 8657040256, 604 8665430656, 8673820544, 8682209152, 8690592128, 8698977152, 605 8707374464, 8715763328, 8724151424, 8732540032, 8740928384, 606 8749315712, 8757704576, 8766089344, 8774480768, 8782871936, 607 8791260032, 8799645824, 8808034432, 8816426368, 8824812928, 608 8833199488, 8841591424, 8849976448, 8858366336, 8866757248, 609 8875147136, 8883532928, 8891923328, 8900306816, 8908700288, 610 8917088384, 8925478784, 8933867392, 8942250368, 8950644608, 611 8959032704, 8967420544, 8975809664, 8984197504, 8992584064, 612 9000976256, 9009362048, 9017752448, 9026141312, 9034530688, 613 9042917504, 9051307904, 9059694208, 9068084864, 9076471424, 614 9084861824, 9093250688, 9101638528, 9110027648, 9118416512, 615 9126803584, 9135188096, 9143581312, 9151969664, 9160356224, 616 9168747136, 9177134464, 9185525632, 9193910144, 9202302848, 617 9210690688, 9219079552, 9227465344, 9235854464, 9244244864, 618 9252633472, 9261021824, 9269411456, 9277799296, 9286188928, 619 9294574208, 9302965888, 9311351936, 9319740032, 9328131968, 620 9336516736, 9344907392, 9353296768, 9361685888, 9370074752, 621 9378463616, 9386849408, 9395239808, 9403629184, 9412016512, 622 9420405376, 9428795008, 9437181568, 9445570688, 9453960832, 623 9462346624, 9470738048, 9479121536, 9487515008, 9495903616, 624 9504289664, 9512678528, 9521067904, 9529456256, 9537843584, 625 9546233728, 9554621312, 9563011456, 9571398784, 9579788672, 626 9588178304, 9596567168, 9604954496, 9613343104, 9621732992, 627 9630121856, 9638508416, 9646898816, 9655283584, 9663675776, 628 9672061312, 9680449664, 9688840064, 9697230464, 9705617536, 629 9714003584, 9722393984, 9730772608, 9739172224, 9747561088, 630 9755945344, 9764338816, 9772726144, 9781116544, 9789503872, 631 9797892992, 9806282624, 9814670464, 9823056512, 9831439232, 632 9839833984, 9848224384, 9856613504, 9865000576, 9873391232, 633 9881772416, 9890162816, 9898556288, 9906940544, 9915333248, 634 9923721088, 9932108672, 9940496512, 9948888448, 9957276544, 635 9965666176, 9974048384, 9982441088, 9990830464, 9999219584, 636 10007602816, 10015996544, 10024385152, 10032774016, 10041163648, 637 10049548928, 10057940096, 10066329472, 10074717824, 10083105152, 638 10091495296, 10099878784, 10108272256, 10116660608, 10125049216, 639 10133437312, 10141825664, 10150213504, 10158601088, 10166991232, 640 10175378816, 10183766144, 10192157312, 10200545408, 10208935552, 641 10217322112, 10225712768, 10234099328, 10242489472, 10250876032, 642 10259264896, 10267656064, 10276042624, 10284429184, 10292820352, 643 10301209472, 10309598848, 10317987712, 10326375296, 10334763392, 644 10343153536, 10351541632, 10359930752, 10368318592, 10376707456, 645 10385096576, 10393484672, 10401867136, 10410262144, 10418647424, 646 10427039104, 10435425664, 10443810176, 10452203648, 10460589952, 647 10468982144, 10477369472, 10485759104, 10494147712, 10502533504, 648 10510923392, 10519313536, 10527702656, 10536091264, 10544478592, 649 10552867712, 10561255808, 10569642368, 10578032768, 10586423168, 650 10594805632, 10603200128, 10611588992, 10619976064, 10628361344, 651 10636754048, 10645143424, 10653531776, 10661920384, 10670307968, 652 10678696832, 10687086464, 10695475072, 10703863168, 10712246144, 653 10720639616, 10729026688, 10737414784, 10745806208, 10754190976, 654 10762581376, 10770971264, 10779356288, 10787747456, 10796135552, 655 10804525184, 10812915584, 10821301888, 10829692288, 10838078336, 656 10846469248, 10854858368, 10863247232, 10871631488, 10880023424, 657 10888412032, 10896799616, 10905188992, 10913574016, 10921964672, 658 10930352768, 10938742912, 10947132544, 10955518592, 10963909504, 659 10972298368, 10980687488, 10989074816, 10997462912, 11005851776, 660 11014241152, 11022627712, 11031017344, 11039403904, 11047793024, 661 11056184704, 11064570752, 11072960896, 11081343872, 11089737856, 662 11098128256, 11106514816, 11114904448, 11123293568, 11131680128, 663 11140065152, 11148458368, 11156845696, 11165236864, 11173624192, 664 11182013824, 11190402688, 11198790784, 11207179136, 11215568768, 665 11223957376, 11232345728, 11240734592, 11249122688, 11257511296, 666 11265899648, 11274285952, 11282675584, 11291065472, 11299452544, 667 11307842432, 11316231296, 11324616832, 11333009024, 11341395584, 668 11349782656, 11358172288, 11366560384, 11374950016, 11383339648, 669 11391721856, 11400117376, 11408504192, 11416893568, 11425283456, 670 11433671552, 11442061184, 11450444672, 11458837888, 11467226752, 671 11475611776, 11484003968, 11492392064, 11500780672, 11509169024, 672 11517550976, 11525944448, 11534335616, 11542724224, 11551111808, 673 11559500672, 11567890304, 11576277376, 11584667008, 11593056128, 674 11601443456, 11609830016, 11618221952, 11626607488, 11634995072, 675 11643387776, 11651775104, 11660161664, 11668552576, 11676940928, 676 11685330304, 11693718656, 11702106496, 11710496128, 11718882688, 677 11727273088, 11735660416, 11744050048, 11752437376, 11760824704, 678 11769216128, 11777604736, 11785991296, 11794381952, 11802770048, 679 11811157888, 11819548544, 11827932544, 11836324736, 11844713344, 680 11853100928, 11861486464, 11869879936, 11878268032, 11886656896, 681 11895044992, 11903433088, 11911822976, 11920210816, 11928600448, 682 11936987264, 11945375872, 11953761152, 11962151296, 11970543488, 683 11978928512, 11987320448, 11995708288, 12004095104, 12012486272, 684 12020875136, 12029255552, 12037652096, 12046039168, 12054429568, 685 12062813824, 12071206528, 12079594624, 12087983744, 12096371072, 686 12104759936, 12113147264, 12121534592, 12129924992, 12138314624, 687 12146703232, 12155091584, 12163481216, 12171864704, 12180255872, 688 12188643968, 12197034112, 12205424512, 12213811328, 12222199424, 689 12230590336, 12238977664, 12247365248, 12255755392, 12264143488, 690 12272531584, 12280920448, 12289309568, 12297694592, 12306086528, 691 12314475392, 12322865024, 12331253632, 12339640448, 12348029312, 692 12356418944, 12364805248, 12373196672, 12381580928, 12389969024, 693 12398357632, 12406750592, 12415138432, 12423527552, 12431916416, 694 12440304512, 12448692352, 12457081216, 12465467776, 12473859968, 695 12482245504, 12490636672, 12499025536, 12507411584, 12515801728, 696 12524190592, 12532577152, 12540966272, 12549354368, 12557743232, 697 12566129536, 12574523264, 12582911872, 12591299456, 12599688064, 698 12608074624, 12616463488, 12624845696, 12633239936, 12641631616, 699 12650019968, 12658407296, 12666795136, 12675183232, 12683574656, 700 12691960192, 12700350592, 12708740224, 12717128576, 12725515904, 701 12733906816, 12742295168, 12750680192, 12759071872, 12767460736, 702 12775848832, 12784236928, 12792626816, 12801014656, 12809404288, 703 12817789312, 12826181504, 12834568832, 12842954624, 12851345792, 704 12859732352, 12868122496, 12876512128, 12884901248, 12893289088, 705 12901672832, 12910067584, 12918455168, 12926842496, 12935232896, 706 12943620736, 12952009856, 12960396928, 12968786816, 12977176192, 707 12985563776, 12993951104, 13002341504, 13010730368, 13019115392, 708 13027506304, 13035895168, 13044272512, 13052673152, 13061062528, 709 13069446272, 13077838976, 13086227072, 13094613632, 13103000192, 710 13111393664, 13119782528, 13128157568, 13136559232, 13144945024, 711 13153329536, 13161724288, 13170111872, 13178502784, 13186884736, 712 13195279744, 13203667072, 13212057472, 13220445824, 13228832128, 713 13237221248, 13245610624, 13254000512, 13262388352, 13270777472, 714 13279166336, 13287553408, 13295943296, 13304331904, 13312719488, 715 13321108096, 13329494656, 13337885824, 13346274944, 13354663808, 716 13363051136, 13371439232, 13379825024, 13388210816, 13396605056, 717 13404995456, 13413380224, 13421771392, 13430159744, 13438546048, 718 13446937216, 13455326848, 13463708288, 13472103808, 13480492672, 719 13488875648, 13497269888, 13505657728, 13514045312, 13522435712, 720 13530824576, 13539210112, 13547599232, 13555989376, 13564379008, 721 13572766336, 13581154432, 13589544832, 13597932928, 13606320512, 722 13614710656, 13623097472, 13631477632, 13639874944, 13648264064, 723 13656652928, 13665041792, 13673430656, 13681818496, 13690207616, 724 13698595712, 13706982272, 13715373184, 13723762048, 13732150144, 725 13740536704, 13748926592, 13757316224, 13765700992, 13774090112, 726 13782477952, 13790869376, 13799259008, 13807647872, 13816036736, 727 13824425344, 13832814208, 13841202304, 13849591424, 13857978752, 728 13866368896, 13874754688, 13883145344, 13891533184, 13899919232, 729 13908311168, 13916692096, 13925085056, 13933473152, 13941866368, 730 13950253696, 13958643584, 13967032192, 13975417216, 13983807616, 731 13992197504, 14000582272, 14008973696, 14017363072, 14025752192, 732 14034137984, 14042528384, 14050918016, 14059301504, 14067691648, 733 14076083584, 14084470144, 14092852352, 14101249664, 14109635968, 734 14118024832, 14126407552, 14134804352, 14143188608, 14151577984, 735 14159968384, 14168357248, 14176741504, 14185127296, 14193521024, 736 14201911424, 14210301824, 14218685056, 14227067264, 14235467392, 737 14243855488, 14252243072, 14260630144, 14269021568, 14277409408, 738 14285799296, 14294187904, 14302571392, 14310961792, 14319353728, 739 14327738752, 14336130944, 14344518784, 14352906368, 14361296512, 740 14369685376, 14378071424, 14386462592, 14394848128, 14403230848, 741 14411627392, 14420013952, 14428402304, 14436793472, 14445181568, 742 14453569664, 14461959808, 14470347904, 14478737024, 14487122816, 743 14495511424, 14503901824, 14512291712, 14520677504, 14529064832, 744 14537456768, 14545845632, 14554234496, 14562618496, 14571011456, 745 14579398784, 14587789184, 14596172672, 14604564608, 14612953984, 746 14621341312, 14629724288, 14638120832, 14646503296, 14654897536, 747 14663284864, 14671675264, 14680061056, 14688447616, 14696835968, 748 14705228416, 14713616768, 14722003328, 14730392192, 14738784128, 749 14747172736, 14755561088, 14763947648, 14772336512, 14780725376, 750 14789110144, 14797499776, 14805892736, 14814276992, 14822670208, 751 14831056256, 14839444352, 14847836032, 14856222848, 14864612992, 752 14872997504, 14881388672, 14889775744, 14898165376, 14906553472, 753 14914944896, 14923329664, 14931721856, 14940109696, 14948497024, 754 14956887424, 14965276544, 14973663616, 14982053248, 14990439808, 755 14998830976, 15007216768, 15015605888, 15023995264, 15032385152, 756 15040768384, 15049154944, 15057549184, 15065939072, 15074328448, 757 15082715008, 15091104128, 15099493504, 15107879296, 15116269184, 758 15124659584, 15133042304, 15141431936, 15149824384, 15158214272, 759 15166602368, 15174991232, 15183378304, 15191760512, 15200154496, 760 15208542592, 15216931712, 15225323392, 15233708416, 15242098048, 761 15250489216, 15258875264, 15267265408, 15275654528, 15284043136, 762 15292431488, 15300819584, 15309208192, 15317596544, 15325986176, 763 15334374784, 15342763648, 15351151744, 15359540608, 15367929728, 764 15376318336, 15384706432, 15393092992, 15401481856, 15409869952, 765 15418258816, 15426649984, 15435037568, 15443425664, 15451815296, 766 15460203392, 15468589184, 15476979328, 15485369216, 15493755776, 767 15502146944, 15510534272, 15518924416, 15527311232, 15535699072, 768 15544089472, 15552478336, 15560866688, 15569254528, 15577642624, 769 15586031488, 15594419072, 15602809472, 15611199104, 15619586432, 770 15627975296, 15636364928, 15644753792, 15653141888, 15661529216, 771 15669918848, 15678305152, 15686696576, 15695083136, 15703474048, 772 15711861632, 15720251264, 15728636288, 15737027456, 15745417088, 773 15753804928, 15762194048, 15770582656, 15778971008, 15787358336, 774 15795747712, 15804132224, 15812523392, 15820909696, 15829300096, 775 15837691264, 15846071936, 15854466944, 15862855808, 15871244672, 776 15879634816, 15888020608, 15896409728, 15904799104, 15913185152, 777 15921577088, 15929966464, 15938354816, 15946743424, 15955129472, 778 15963519872, 15971907968, 15980296064, 15988684928, 15997073024, 779 16005460864, 16013851264, 16022241152, 16030629248, 16039012736, 780 16047406976, 16055794816, 16064181376, 16072571264, 16080957824, 781 16089346688, 16097737856, 16106125184, 16114514816, 16122904192, 782 16131292544, 16139678848, 16148066944, 16156453504, 16164839552, 783 16173236096, 16181623424, 16190012032, 16198401152, 16206790528, 784 16215177344, 16223567744, 16231956352, 16240344704, 16248731008, 785 16257117824, 16265504384, 16273898624, 16282281856, 16290668672, 786 16299064192, 16307449216, 16315842176, 16324230016, 16332613504, 787 16341006464, 16349394304, 16357783168, 16366172288, 16374561664, 788 16382951296, 16391337856, 16399726208, 16408116352, 16416505472, 789 16424892032, 16433282176, 16441668224, 16450058624, 16458448768, 790 16466836864, 16475224448, 16483613056, 16492001408, 16500391808, 791 16508779648, 16517166976, 16525555328, 16533944192, 16542330752, 792 16550719616, 16559110528, 16567497088, 16575888512, 16584274816, 793 16592665472, 16601051008, 16609442944, 16617832064, 16626218624, 794 16634607488, 16642996096, 16651385728, 16659773824, 16668163712, 795 16676552576, 16684938112, 16693328768, 16701718144, 16710095488, 796 16718492288, 16726883968, 16735272832, 16743661184, 16752049792, 797 16760436608, 16768827008, 16777214336, 16785599104, 16793992832, 798 16802381696, 16810768768, 16819151744, 16827542656, 16835934848, 799 16844323712, 16852711552, 16861101952, 16869489536, 16877876864, 800 16886265728, 16894653056, 16903044736, 16911431296, 16919821696, 801 16928207488, 16936592768, 16944987776, 16953375616, 16961763968, 802 16970152832, 16978540928, 16986929536, 16995319168, 17003704448, 803 17012096896, 17020481152, 17028870784, 17037262208, 17045649536, 804 17054039936, 17062426496, 17070814336, 17079205504, 17087592064, 805 17095978112, 17104369024, 17112759424, 17121147776, 17129536384, 806 17137926016, 17146314368, 17154700928, 17163089792, 17171480192, 807 17179864192, 17188256896, 17196644992, 17205033856, 17213423488, 808 17221811072, 17230198912, 17238588032, 17246976896, 17255360384, 809 17263754624, 17272143232, 17280530048, 17288918912, 17297309312, 810 17305696384, 17314085504, 17322475136, 17330863744, 17339252096, 811 17347640192, 17356026496, 17364413824, 17372796544, 17381190016, 812 17389583488, 17397972608, 17406360704, 17414748544, 17423135872, 813 17431527296, 17439915904, 17448303232, 17456691584, 17465081728, 814 17473468288, 17481857408, 17490247552, 17498635904, 17507022464, 815 17515409024, 17523801728, 17532189824, 17540577664, 17548966016, 816 17557353344, 17565741184, 17574131584, 17582519168, 17590907008, 817 17599296128, 17607687808, 17616076672, 17624455808, 17632852352, 818 17641238656, 17649630848, 17658018944, 17666403968, 17674794112, 819 17683178368, 17691573376, 17699962496, 17708350592, 17716739968, 820 17725126528, 17733517184, 17741898112, 17750293888, 17758673024, 821 17767070336, 17775458432, 17783848832, 17792236928, 17800625536, 822 17809012352, 17817402752, 17825785984, 17834178944, 17842563968, 823 17850955648, 17859344512, 17867732864, 17876119424, 17884511872, 824 17892900224, 17901287296, 17909677696, 17918058112, 17926451072, 825 17934843776, 17943230848, 17951609216, 17960008576, 17968397696, 826 17976784256, 17985175424, 17993564032, 18001952128, 18010339712, 827 18018728576, 18027116672, 18035503232, 18043894144, 18052283264, 828 18060672128, 18069056384, 18077449856, 18085837184, 18094225792, 829 18102613376, 18111004544, 18119388544, 18127781248, 18136170368, 830 18144558976, 18152947328, 18161336192, 18169724288, 18178108544, 831 18186498944, 18194886784, 18203275648, 18211666048, 18220048768, 832 18228444544, 18236833408, 18245220736} 833 834 // cacheSizes is a lookup table for the ethash verification cache size for the 835 // first 2048 epochs (i.e. 61440000 blocks). 836 var cacheSizes = [maxEpoch]uint64{ 837 16776896, 16907456, 17039296, 17170112, 17301056, 17432512, 17563072, 838 17693888, 17824192, 17955904, 18087488, 18218176, 18349504, 18481088, 839 18611392, 18742336, 18874304, 19004224, 19135936, 19267264, 19398208, 840 19529408, 19660096, 19791424, 19922752, 20053952, 20184896, 20315968, 841 20446912, 20576576, 20709184, 20840384, 20971072, 21102272, 21233216, 842 21364544, 21494848, 21626816, 21757376, 21887552, 22019392, 22151104, 843 22281536, 22412224, 22543936, 22675264, 22806464, 22935872, 23068096, 844 23198272, 23330752, 23459008, 23592512, 23723968, 23854912, 23986112, 845 24116672, 24247616, 24378688, 24509504, 24640832, 24772544, 24903488, 846 25034432, 25165376, 25296704, 25427392, 25558592, 25690048, 25820096, 847 25951936, 26081728, 26214208, 26345024, 26476096, 26606656, 26737472, 848 26869184, 26998208, 27131584, 27262528, 27393728, 27523904, 27655744, 849 27786688, 27917888, 28049344, 28179904, 28311488, 28441792, 28573504, 850 28700864, 28835648, 28966208, 29096768, 29228608, 29359808, 29490752, 851 29621824, 29752256, 29882816, 30014912, 30144448, 30273728, 30406976, 852 30538432, 30670784, 30799936, 30932672, 31063744, 31195072, 31325248, 853 31456192, 31588288, 31719232, 31850432, 31981504, 32110784, 32243392, 854 32372672, 32505664, 32636608, 32767808, 32897344, 33029824, 33160768, 855 33289664, 33423296, 33554368, 33683648, 33816512, 33947456, 34076992, 856 34208704, 34340032, 34471744, 34600256, 34734016, 34864576, 34993984, 857 35127104, 35258176, 35386688, 35518528, 35650624, 35782336, 35910976, 858 36044608, 36175808, 36305728, 36436672, 36568384, 36699968, 36830656, 859 36961984, 37093312, 37223488, 37355072, 37486528, 37617472, 37747904, 860 37879232, 38009792, 38141888, 38272448, 38403392, 38535104, 38660672, 861 38795584, 38925632, 39059264, 39190336, 39320768, 39452096, 39581632, 862 39713984, 39844928, 39974848, 40107968, 40238144, 40367168, 40500032, 863 40631744, 40762816, 40894144, 41023552, 41155904, 41286208, 41418304, 864 41547712, 41680448, 41811904, 41942848, 42073792, 42204992, 42334912, 865 42467008, 42597824, 42729152, 42860096, 42991552, 43122368, 43253696, 866 43382848, 43515712, 43646912, 43777088, 43907648, 44039104, 44170432, 867 44302144, 44433344, 44564288, 44694976, 44825152, 44956864, 45088448, 868 45219008, 45350464, 45481024, 45612608, 45744064, 45874496, 46006208, 869 46136768, 46267712, 46399424, 46529344, 46660672, 46791488, 46923328, 870 47053504, 47185856, 47316928, 47447872, 47579072, 47710144, 47839936, 871 47971648, 48103232, 48234176, 48365248, 48496192, 48627136, 48757312, 872 48889664, 49020736, 49149248, 49283008, 49413824, 49545152, 49675712, 873 49807168, 49938368, 50069056, 50200256, 50331584, 50462656, 50593472, 874 50724032, 50853952, 50986048, 51117632, 51248576, 51379904, 51510848, 875 51641792, 51773248, 51903296, 52035136, 52164032, 52297664, 52427968, 876 52557376, 52690112, 52821952, 52952896, 53081536, 53213504, 53344576, 877 53475776, 53608384, 53738816, 53870528, 54000832, 54131776, 54263744, 878 54394688, 54525248, 54655936, 54787904, 54918592, 55049152, 55181248, 879 55312064, 55442752, 55574336, 55705024, 55836224, 55967168, 56097856, 880 56228672, 56358592, 56490176, 56621888, 56753728, 56884928, 57015488, 881 57146816, 57278272, 57409216, 57540416, 57671104, 57802432, 57933632, 882 58064576, 58195264, 58326976, 58457408, 58588864, 58720192, 58849984, 883 58981696, 59113024, 59243456, 59375552, 59506624, 59637568, 59768512, 884 59897792, 60030016, 60161984, 60293056, 60423872, 60554432, 60683968, 885 60817216, 60948032, 61079488, 61209664, 61341376, 61471936, 61602752, 886 61733696, 61865792, 61996736, 62127808, 62259136, 62389568, 62520512, 887 62651584, 62781632, 62910784, 63045056, 63176128, 63307072, 63438656, 888 63569216, 63700928, 63831616, 63960896, 64093888, 64225088, 64355392, 889 64486976, 64617664, 64748608, 64879424, 65009216, 65142464, 65273792, 890 65402816, 65535424, 65666752, 65797696, 65927744, 66060224, 66191296, 891 66321344, 66453056, 66584384, 66715328, 66846656, 66977728, 67108672, 892 67239104, 67370432, 67501888, 67631296, 67763776, 67895104, 68026304, 893 68157248, 68287936, 68419264, 68548288, 68681408, 68811968, 68942912, 894 69074624, 69205568, 69337024, 69467584, 69599168, 69729472, 69861184, 895 69989824, 70122944, 70253888, 70385344, 70515904, 70647232, 70778816, 896 70907968, 71040832, 71171648, 71303104, 71432512, 71564992, 71695168, 897 71826368, 71958464, 72089536, 72219712, 72350144, 72482624, 72613568, 898 72744512, 72875584, 73006144, 73138112, 73268672, 73400128, 73530944, 899 73662272, 73793344, 73924544, 74055104, 74185792, 74316992, 74448832, 900 74579392, 74710976, 74841664, 74972864, 75102784, 75233344, 75364544, 901 75497024, 75627584, 75759296, 75890624, 76021696, 76152256, 76283072, 902 76414144, 76545856, 76676672, 76806976, 76937792, 77070016, 77200832, 903 77331392, 77462464, 77593664, 77725376, 77856448, 77987776, 78118336, 904 78249664, 78380992, 78511424, 78642496, 78773056, 78905152, 79033664, 905 79166656, 79297472, 79429568, 79560512, 79690816, 79822784, 79953472, 906 80084672, 80214208, 80346944, 80477632, 80608576, 80740288, 80870848, 907 81002048, 81133504, 81264448, 81395648, 81525952, 81657536, 81786304, 908 81919808, 82050112, 82181312, 82311616, 82443968, 82573376, 82705984, 909 82835776, 82967744, 83096768, 83230528, 83359552, 83491264, 83622464, 910 83753536, 83886016, 84015296, 84147776, 84277184, 84409792, 84540608, 911 84672064, 84803008, 84934336, 85065152, 85193792, 85326784, 85458496, 912 85589312, 85721024, 85851968, 85982656, 86112448, 86244416, 86370112, 913 86506688, 86637632, 86769344, 86900672, 87031744, 87162304, 87293632, 914 87424576, 87555392, 87687104, 87816896, 87947968, 88079168, 88211264, 915 88341824, 88473152, 88603712, 88735424, 88862912, 88996672, 89128384, 916 89259712, 89390272, 89521984, 89652544, 89783872, 89914816, 90045376, 917 90177088, 90307904, 90438848, 90569152, 90700096, 90832832, 90963776, 918 91093696, 91223744, 91356992, 91486784, 91618496, 91749824, 91880384, 919 92012224, 92143552, 92273344, 92405696, 92536768, 92666432, 92798912, 920 92926016, 93060544, 93192128, 93322816, 93453632, 93583936, 93715136, 921 93845056, 93977792, 94109504, 94240448, 94371776, 94501184, 94632896, 922 94764224, 94895552, 95023424, 95158208, 95287744, 95420224, 95550016, 923 95681216, 95811904, 95943872, 96075328, 96203584, 96337856, 96468544, 924 96599744, 96731072, 96860992, 96992576, 97124288, 97254848, 97385536, 925 97517248, 97647808, 97779392, 97910464, 98041408, 98172608, 98303168, 926 98434496, 98565568, 98696768, 98827328, 98958784, 99089728, 99220928, 927 99352384, 99482816, 99614272, 99745472, 99876416, 100007104, 928 100138048, 100267072, 100401088, 100529984, 100662592, 100791872, 929 100925248, 101056064, 101187392, 101317952, 101449408, 101580608, 930 101711296, 101841728, 101973824, 102104896, 102235712, 102366016, 931 102498112, 102628672, 102760384, 102890432, 103021888, 103153472, 932 103284032, 103415744, 103545152, 103677248, 103808576, 103939648, 933 104070976, 104201792, 104332736, 104462528, 104594752, 104725952, 934 104854592, 104988608, 105118912, 105247808, 105381184, 105511232, 935 105643072, 105774784, 105903296, 106037056, 106167872, 106298944, 936 106429504, 106561472, 106691392, 106822592, 106954304, 107085376, 937 107216576, 107346368, 107478464, 107609792, 107739712, 107872192, 938 108003136, 108131392, 108265408, 108396224, 108527168, 108657344, 939 108789568, 108920384, 109049792, 109182272, 109312576, 109444928, 940 109572928, 109706944, 109837888, 109969088, 110099648, 110230976, 941 110362432, 110492992, 110624704, 110755264, 110886208, 111017408, 942 111148864, 111279296, 111410752, 111541952, 111673024, 111803456, 943 111933632, 112066496, 112196416, 112328512, 112457792, 112590784, 944 112715968, 112852672, 112983616, 113114944, 113244224, 113376448, 945 113505472, 113639104, 113770304, 113901376, 114031552, 114163264, 946 114294592, 114425536, 114556864, 114687424, 114818624, 114948544, 947 115080512, 115212224, 115343296, 115473472, 115605184, 115736128, 948 115867072, 115997248, 116128576, 116260288, 116391488, 116522944, 949 116652992, 116784704, 116915648, 117046208, 117178304, 117308608, 950 117440192, 117569728, 117701824, 117833024, 117964096, 118094656, 951 118225984, 118357312, 118489024, 118617536, 118749632, 118882112, 952 119012416, 119144384, 119275328, 119406016, 119537344, 119668672, 953 119798464, 119928896, 120061376, 120192832, 120321728, 120454336, 954 120584512, 120716608, 120848192, 120979136, 121109056, 121241408, 955 121372352, 121502912, 121634752, 121764416, 121895744, 122027072, 956 122157632, 122289088, 122421184, 122550592, 122682944, 122813888, 957 122945344, 123075776, 123207488, 123338048, 123468736, 123600704, 958 123731264, 123861952, 123993664, 124124608, 124256192, 124386368, 959 124518208, 124649024, 124778048, 124911296, 125041088, 125173696, 960 125303744, 125432896, 125566912, 125696576, 125829056, 125958592, 961 126090304, 126221248, 126352832, 126483776, 126615232, 126746432, 962 126876608, 127008704, 127139392, 127270336, 127401152, 127532224, 963 127663552, 127794752, 127925696, 128055232, 128188096, 128319424, 964 128449856, 128581312, 128712256, 128843584, 128973632, 129103808, 965 129236288, 129365696, 129498944, 129629888, 129760832, 129892288, 966 130023104, 130154048, 130283968, 130416448, 130547008, 130678336, 967 130807616, 130939456, 131071552, 131202112, 131331776, 131464384, 968 131594048, 131727296, 131858368, 131987392, 132120256, 132250816, 969 132382528, 132513728, 132644672, 132774976, 132905792, 133038016, 970 133168832, 133299392, 133429312, 133562048, 133692992, 133823296, 971 133954624, 134086336, 134217152, 134348608, 134479808, 134607296, 972 134741056, 134872384, 135002944, 135134144, 135265472, 135396544, 973 135527872, 135659072, 135787712, 135921472, 136052416, 136182848, 974 136313792, 136444864, 136576448, 136707904, 136837952, 136970048, 975 137099584, 137232064, 137363392, 137494208, 137625536, 137755712, 976 137887424, 138018368, 138149824, 138280256, 138411584, 138539584, 977 138672832, 138804928, 138936128, 139066688, 139196864, 139328704, 978 139460032, 139590208, 139721024, 139852864, 139984576, 140115776, 979 140245696, 140376512, 140508352, 140640064, 140769856, 140902336, 980 141032768, 141162688, 141294016, 141426496, 141556544, 141687488, 981 141819584, 141949888, 142080448, 142212544, 142342336, 142474432, 982 142606144, 142736192, 142868288, 142997824, 143129408, 143258944, 983 143392448, 143523136, 143653696, 143785024, 143916992, 144045632, 984 144177856, 144309184, 144440768, 144570688, 144701888, 144832448, 985 144965056, 145096384, 145227584, 145358656, 145489856, 145620928, 986 145751488, 145883072, 146011456, 146144704, 146275264, 146407232, 987 146538176, 146668736, 146800448, 146931392, 147062336, 147193664, 988 147324224, 147455936, 147586624, 147717056, 147848768, 147979456, 989 148110784, 148242368, 148373312, 148503232, 148635584, 148766144, 990 148897088, 149028416, 149159488, 149290688, 149420224, 149551552, 991 149683136, 149814976, 149943616, 150076352, 150208064, 150338624, 992 150470464, 150600256, 150732224, 150862784, 150993088, 151125952, 993 151254976, 151388096, 151519168, 151649728, 151778752, 151911104, 994 152042944, 152174144, 152304704, 152435648, 152567488, 152698816, 995 152828992, 152960576, 153091648, 153222976, 153353792, 153484096, 996 153616192, 153747008, 153878336, 154008256, 154139968, 154270912, 997 154402624, 154533824, 154663616, 154795712, 154926272, 155057984, 998 155188928, 155319872, 155450816, 155580608, 155712064, 155843392, 999 155971136, 156106688, 156237376, 156367424, 156499264, 156630976, 1000 156761536, 156892352, 157024064, 157155008, 157284416, 157415872, 1001 157545536, 157677248, 157810496, 157938112, 158071744, 158203328, 1002 158334656, 158464832, 158596288, 158727616, 158858048, 158988992, 1003 159121216, 159252416, 159381568, 159513152, 159645632, 159776192, 1004 159906496, 160038464, 160169536, 160300352, 160430656, 160563008, 1005 160693952, 160822208, 160956352, 161086784, 161217344, 161349184, 1006 161480512, 161611456, 161742272, 161873216, 162002752, 162135872, 1007 162266432, 162397888, 162529216, 162660032, 162790976, 162922048, 1008 163052096, 163184576, 163314752, 163446592, 163577408, 163707968, 1009 163839296, 163969984, 164100928, 164233024, 164364224, 164494912, 1010 164625856, 164756672, 164887616, 165019072, 165150016, 165280064, 1011 165412672, 165543104, 165674944, 165805888, 165936832, 166067648, 1012 166198336, 166330048, 166461248, 166591552, 166722496, 166854208, 1013 166985408, 167116736, 167246656, 167378368, 167508416, 167641024, 1014 167771584, 167903168, 168034112, 168164032, 168295744, 168427456, 1015 168557632, 168688448, 168819136, 168951616, 169082176, 169213504, 1016 169344832, 169475648, 169605952, 169738048, 169866304, 169999552, 1017 170131264, 170262464, 170393536, 170524352, 170655424, 170782016, 1018 170917696, 171048896, 171179072, 171310784, 171439936, 171573184, 1019 171702976, 171835072, 171966272, 172097216, 172228288, 172359232, 1020 172489664, 172621376, 172747712, 172883264, 173014208, 173144512, 1021 173275072, 173407424, 173539136, 173669696, 173800768, 173931712, 1022 174063424, 174193472, 174325696, 174455744, 174586816, 174718912, 1023 174849728, 174977728, 175109696, 175242688, 175374272, 175504832, 1024 175636288, 175765696, 175898432, 176028992, 176159936, 176291264, 1025 176422592, 176552512, 176684864, 176815424, 176946496, 177076544, 1026 177209152, 177340096, 177470528, 177600704, 177731648, 177864256, 1027 177994816, 178126528, 178257472, 178387648, 178518464, 178650176, 1028 178781888, 178912064, 179044288, 179174848, 179305024, 179436736, 1029 179568448, 179698496, 179830208, 179960512, 180092608, 180223808, 1030 180354752, 180485696, 180617152, 180748096, 180877504, 181009984, 1031 181139264, 181272512, 181402688, 181532608, 181663168, 181795136, 1032 181926592, 182057536, 182190016, 182320192, 182451904, 182582336, 1033 182713792, 182843072, 182976064, 183107264, 183237056, 183368384, 1034 183494848, 183631424, 183762752, 183893824, 184024768, 184154816, 1035 184286656, 184417984, 184548928, 184680128, 184810816, 184941248, 1036 185072704, 185203904, 185335616, 185465408, 185596352, 185727296, 1037 185859904, 185989696, 186121664, 186252992, 186383552, 186514112, 1038 186645952, 186777152, 186907328, 187037504, 187170112, 187301824, 1039 187429184, 187562048, 187693504, 187825472, 187957184, 188087104, 1040 188218304, 188349376, 188481344, 188609728, 188743616, 188874304, 1041 189005248, 189136448, 189265088, 189396544, 189528128, 189660992, 1042 189791936, 189923264, 190054208, 190182848, 190315072, 190447424, 1043 190577984, 190709312, 190840768, 190971328, 191102656, 191233472, 1044 191364032, 191495872, 191626816, 191758016, 191888192, 192020288, 1045 192148928, 192282176, 192413504, 192542528, 192674752, 192805952, 1046 192937792, 193068608, 193198912, 193330496, 193462208, 193592384, 1047 193723456, 193854272, 193985984, 194116672, 194247232, 194379712, 1048 194508352, 194641856, 194772544, 194900672, 195035072, 195166016, 1049 195296704, 195428032, 195558592, 195690304, 195818176, 195952576, 1050 196083392, 196214336, 196345792, 196476736, 196607552, 196739008, 1051 196869952, 197000768, 197130688, 197262784, 197394368, 197523904, 1052 197656384, 197787584, 197916608, 198049472, 198180544, 198310208, 1053 198442432, 198573632, 198705088, 198834368, 198967232, 199097792, 1054 199228352, 199360192, 199491392, 199621696, 199751744, 199883968, 1055 200014016, 200146624, 200276672, 200408128, 200540096, 200671168, 1056 200801984, 200933312, 201062464, 201194944, 201326144, 201457472, 1057 201588544, 201719744, 201850816, 201981632, 202111552, 202244032, 1058 202374464, 202505152, 202636352, 202767808, 202898368, 203030336, 1059 203159872, 203292608, 203423296, 203553472, 203685824, 203816896, 1060 203947712, 204078272, 204208192, 204341056, 204472256, 204603328, 1061 204733888, 204864448, 204996544, 205125568, 205258304, 205388864, 1062 205517632, 205650112, 205782208, 205913536, 206044736, 206176192, 1063 206307008, 206434496, 206569024, 206700224, 206831168, 206961856, 1064 207093056, 207223616, 207355328, 207486784, 207616832, 207749056, 1065 207879104, 208010048, 208141888, 208273216, 208404032, 208534336, 1066 208666048, 208796864, 208927424, 209059264, 209189824, 209321792, 1067 209451584, 209582656, 209715136, 209845568, 209976896, 210106432, 1068 210239296, 210370112, 210501568, 210630976, 210763712, 210894272, 1069 211024832, 211156672, 211287616, 211418176, 211549376, 211679296, 1070 211812032, 211942592, 212074432, 212204864, 212334016, 212467648, 1071 212597824, 212727616, 212860352, 212991424, 213120832, 213253952, 1072 213385024, 213515584, 213645632, 213777728, 213909184, 214040128, 1073 214170688, 214302656, 214433728, 214564544, 214695232, 214826048, 1074 214956992, 215089088, 215219776, 215350592, 215482304, 215613248, 1075 215743552, 215874752, 216005312, 216137024, 216267328, 216399296, 1076 216530752, 216661696, 216790592, 216923968, 217054528, 217183168, 1077 217316672, 217448128, 217579072, 217709504, 217838912, 217972672, 1078 218102848, 218233024, 218364736, 218496832, 218627776, 218759104, 1079 218888896, 219021248, 219151936, 219281728, 219413056, 219545024, 1080 219675968, 219807296, 219938624, 220069312, 220200128, 220331456, 1081 220461632, 220592704, 220725184, 220855744, 220987072, 221117888, 1082 221249216, 221378368, 221510336, 221642048, 221772736, 221904832, 1083 222031808, 222166976, 222297536, 222428992, 222559936, 222690368, 1084 222820672, 222953152, 223083968, 223213376, 223345984, 223476928, 1085 223608512, 223738688, 223869376, 224001472, 224132672, 224262848, 1086 224394944, 224524864, 224657344, 224788288, 224919488, 225050432, 1087 225181504, 225312704, 225443776, 225574592, 225704768, 225834176, 1088 225966784, 226097216, 226229824, 226360384, 226491712, 226623424, 1089 226754368, 226885312, 227015104, 227147456, 227278528, 227409472, 1090 227539904, 227669696, 227802944, 227932352, 228065216, 228196288, 1091 228326464, 228457792, 228588736, 228720064, 228850112, 228981056, 1092 229113152, 229243328, 229375936, 229505344, 229636928, 229769152, 1093 229894976, 230030272, 230162368, 230292416, 230424512, 230553152, 1094 230684864, 230816704, 230948416, 231079616, 231210944, 231342016, 1095 231472448, 231603776, 231733952, 231866176, 231996736, 232127296, 1096 232259392, 232388672, 232521664, 232652608, 232782272, 232914496, 1097 233043904, 233175616, 233306816, 233438528, 233569984, 233699776, 1098 233830592, 233962688, 234092224, 234221888, 234353984, 234485312, 1099 234618304, 234749888, 234880832, 235011776, 235142464, 235274048, 1100 235403456, 235535936, 235667392, 235797568, 235928768, 236057152, 1101 236190272, 236322752, 236453312, 236583616, 236715712, 236846528, 1102 236976448, 237108544, 237239104, 237371072, 237501632, 237630784, 1103 237764416, 237895232, 238026688, 238157632, 238286912, 238419392, 1104 238548032, 238681024, 238812608, 238941632, 239075008, 239206336, 1105 239335232, 239466944, 239599168, 239730496, 239861312, 239992384, 1106 240122816, 240254656, 240385856, 240516928, 240647872, 240779072, 1107 240909632, 241040704, 241171904, 241302848, 241433408, 241565248, 1108 241696192, 241825984, 241958848, 242088256, 242220224, 242352064, 1109 242481856, 242611648, 242744896, 242876224, 243005632, 243138496, 1110 243268672, 243400384, 243531712, 243662656, 243793856, 243924544, 1111 244054592, 244187072, 244316608, 244448704, 244580032, 244710976, 1112 244841536, 244972864, 245104448, 245233984, 245365312, 245497792, 1113 245628736, 245759936, 245889856, 246021056, 246152512, 246284224, 1114 246415168, 246545344, 246675904, 246808384, 246939584, 247070144, 1115 247199552, 247331648, 247463872, 247593536, 247726016, 247857088, 1116 247987648, 248116928, 248249536, 248380736, 248512064, 248643008, 1117 248773312, 248901056, 249036608, 249167552, 249298624, 249429184, 1118 249560512, 249692096, 249822784, 249954112, 250085312, 250215488, 1119 250345792, 250478528, 250608704, 250739264, 250870976, 251002816, 1120 251133632, 251263552, 251395136, 251523904, 251657792, 251789248, 1121 251919424, 252051392, 252182464, 252313408, 252444224, 252575552, 1122 252706624, 252836032, 252968512, 253099712, 253227584, 253361728, 1123 253493056, 253623488, 253754432, 253885504, 254017216, 254148032, 1124 254279488, 254410432, 254541376, 254672576, 254803264, 254933824, 1125 255065792, 255196736, 255326528, 255458752, 255589952, 255721408, 1126 255851072, 255983296, 256114624, 256244416, 256374208, 256507712, 1127 256636096, 256768832, 256900544, 257031616, 257162176, 257294272, 1128 257424448, 257555776, 257686976, 257818432, 257949632, 258079552, 1129 258211136, 258342464, 258473408, 258603712, 258734656, 258867008, 1130 258996544, 259127744, 259260224, 259391296, 259522112, 259651904, 1131 259784384, 259915328, 260045888, 260175424, 260308544, 260438336, 1132 260570944, 260700992, 260832448, 260963776, 261092672, 261226304, 1133 261356864, 261487936, 261619648, 261750592, 261879872, 262011968, 1134 262143424, 262274752, 262404416, 262537024, 262667968, 262799296, 1135 262928704, 263061184, 263191744, 263322944, 263454656, 263585216, 1136 263716672, 263847872, 263978944, 264108608, 264241088, 264371648, 1137 264501184, 264632768, 264764096, 264895936, 265024576, 265158464, 1138 265287488, 265418432, 265550528, 265681216, 265813312, 265943488, 1139 266075968, 266206144, 266337728, 266468032, 266600384, 266731072, 1140 266862272, 266993344, 267124288, 267255616, 267386432, 267516992, 1141 267648704, 267777728, 267910592, 268040512, 268172096, 268302784, 1142 268435264, 268566208, 268696256, 268828096, 268959296, 269090368, 1143 269221312, 269352256, 269482688, 269614784, 269745856, 269876416, 1144 270007616, 270139328, 270270272, 270401216, 270531904, 270663616, 1145 270791744, 270924736, 271056832, 271186112, 271317184, 271449536, 1146 271580992, 271711936, 271843136, 271973056, 272105408, 272236352, 1147 272367296, 272498368, 272629568, 272759488, 272891456, 273022784, 1148 273153856, 273284672, 273415616, 273547072, 273677632, 273808448, 1149 273937088, 274071488, 274200896, 274332992, 274463296, 274595392, 1150 274726208, 274857536, 274988992, 275118656, 275250496, 275382208, 1151 275513024, 275643968, 275775296, 275906368, 276037184, 276167872, 1152 276297664, 276429376, 276560576, 276692672, 276822976, 276955072, 1153 277085632, 277216832, 277347008, 277478848, 277609664, 277740992, 1154 277868608, 278002624, 278134336, 278265536, 278395328, 278526784, 1155 278657728, 278789824, 278921152, 279052096, 279182912, 279313088, 1156 279443776, 279576256, 279706048, 279838528, 279969728, 280099648, 1157 280230976, 280361408, 280493632, 280622528, 280755392, 280887104, 1158 281018176, 281147968, 281278912, 281411392, 281542592, 281673152, 1159 281803712, 281935552, 282066496, 282197312, 282329024, 282458816, 1160 282590272, 282720832, 282853184, 282983744, 283115072, 283246144, 1161 283377344, 283508416, 283639744, 283770304, 283901504, 284032576, 1162 284163136, 284294848, 284426176, 284556992, 284687296, 284819264, 1163 284950208, 285081536}