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