github.com/needkane/go-ethereum@v1.7.4-0.20180131070256-c212876ea2b7/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  	"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/common/bitutil"
    31  	"github.com/ethereum/go-ethereum/crypto"
    32  	"github.com/ethereum/go-ethereum/crypto/sha3"
    33  	"github.com/ethereum/go-ethereum/log"
    34  )
    35  
    36  const (
    37  	datasetInitBytes   = 1 << 30 // Bytes in dataset at genesis
    38  	datasetGrowthBytes = 1 << 23 // Dataset growth per epoch
    39  	cacheInitBytes     = 1 << 24 // Bytes in cache at genesis
    40  	cacheGrowthBytes   = 1 << 17 // Cache growth per epoch
    41  	epochLength        = 30000   // Blocks per epoch
    42  	mixBytes           = 128     // Width of mix
    43  	hashBytes          = 64      // Hash length in bytes
    44  	hashWords          = 16      // Number of 32 bit ints in a hash
    45  	datasetParents     = 256     // Number of parents of each dataset element
    46  	cacheRounds        = 3       // Number of rounds in cache production
    47  	loopAccesses       = 64      // Number of accesses in hashimoto loop
    48  )
    49  
    50  // hasher is a repetitive hasher allowing the same hash data structures to be
    51  // reused between hash runs instead of requiring new ones to be created.
    52  type hasher func(dest []byte, data []byte)
    53  
    54  // makeHasher creates a repetitive hasher, allowing the same hash data structures
    55  // to be reused between hash runs instead of requiring new ones to be created.
    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  // This method places the result into dest in machine byte order.
    85  func generateCache(dest []uint32, epoch uint64, seed []byte) {
    86  	// Print some debug logs to allow analysis on low end devices
    87  	logger := log.New("epoch", epoch)
    88  
    89  	start := time.Now()
    90  	defer func() {
    91  		elapsed := time.Since(start)
    92  
    93  		logFn := logger.Debug
    94  		if elapsed > 3*time.Second {
    95  			logFn = logger.Info
    96  		}
    97  		logFn("Generated ethash verification cache", "elapsed", common.PrettyDuration(elapsed))
    98  	}()
    99  	// Convert our destination slice to a byte buffer
   100  	header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest))
   101  	header.Len *= 4
   102  	header.Cap *= 4
   103  	cache := *(*[]byte)(unsafe.Pointer(&header))
   104  
   105  	// Calculate the number of theoretical rows (we'll store in one buffer nonetheless)
   106  	size := uint64(len(cache))
   107  	rows := int(size) / hashBytes
   108  
   109  	// Start a monitoring goroutine to report progress on low end devices
   110  	var progress uint32
   111  
   112  	done := make(chan struct{})
   113  	defer close(done)
   114  
   115  	go func() {
   116  		for {
   117  			select {
   118  			case <-done:
   119  				return
   120  			case <-time.After(3 * time.Second):
   121  				logger.Info("Generating ethash verification cache", "percentage", atomic.LoadUint32(&progress)*100/uint32(rows)/4, "elapsed", common.PrettyDuration(time.Since(start)))
   122  			}
   123  		}
   124  	}()
   125  	// Create a hasher to reuse between invocations
   126  	keccak512 := makeHasher(sha3.NewKeccak512())
   127  
   128  	// Sequentially produce the initial dataset
   129  	keccak512(cache, seed)
   130  	for offset := uint64(hashBytes); offset < size; offset += hashBytes {
   131  		keccak512(cache[offset:], cache[offset-hashBytes:offset])
   132  		atomic.AddUint32(&progress, 1)
   133  	}
   134  	// Use a low-round version of randmemohash
   135  	temp := make([]byte, hashBytes)
   136  
   137  	for i := 0; i < cacheRounds; i++ {
   138  		for j := 0; j < rows; j++ {
   139  			var (
   140  				srcOff = ((j - 1 + rows) % rows) * hashBytes
   141  				dstOff = j * hashBytes
   142  				xorOff = (binary.LittleEndian.Uint32(cache[dstOff:]) % uint32(rows)) * hashBytes
   143  			)
   144  			bitutil.XORBytes(temp, cache[srcOff:srcOff+hashBytes], cache[xorOff:xorOff+hashBytes])
   145  			keccak512(cache[dstOff:], temp)
   146  
   147  			atomic.AddUint32(&progress, 1)
   148  		}
   149  	}
   150  	// Swap the byte order on big endian systems and return
   151  	if !isLittleEndian() {
   152  		swap(cache)
   153  	}
   154  }
   155  
   156  // swap changes the byte order of the buffer assuming a uint32 representation.
   157  func swap(buffer []byte) {
   158  	for i := 0; i < len(buffer); i += 4 {
   159  		binary.BigEndian.PutUint32(buffer[i:], binary.LittleEndian.Uint32(buffer[i:]))
   160  	}
   161  }
   162  
   163  // prepare converts an ethash cache or dataset from a byte stream into the internal
   164  // int representation. All ethash methods work with ints to avoid constant byte to
   165  // int conversions as well as to handle both little and big endian systems.
   166  func prepare(dest []uint32, src []byte) {
   167  	for i := 0; i < len(dest); i++ {
   168  		dest[i] = binary.LittleEndian.Uint32(src[i*4:])
   169  	}
   170  }
   171  
   172  // fnv is an algorithm inspired by the FNV hash, which in some cases is used as
   173  // a non-associative substitute for XOR. Note that we multiply the prime with
   174  // the full 32-bit input, in contrast with the FNV-1 spec which multiplies the
   175  // prime with one byte (octet) in turn.
   176  func fnv(a, b uint32) uint32 {
   177  	return a*0x01000193 ^ b
   178  }
   179  
   180  // fnvHash mixes in data into mix using the ethash fnv method.
   181  func fnvHash(mix []uint32, data []uint32) {
   182  	for i := 0; i < len(mix); i++ {
   183  		mix[i] = mix[i]*0x01000193 ^ data[i]
   184  	}
   185  }
   186  
   187  // generateDatasetItem combines data from 256 pseudorandomly selected cache nodes,
   188  // and hashes that to compute a single dataset node.
   189  func generateDatasetItem(cache []uint32, index uint32, keccak512 hasher) []byte {
   190  	// Calculate the number of theoretical rows (we use one buffer nonetheless)
   191  	rows := uint32(len(cache) / hashWords)
   192  
   193  	// Initialize the mix
   194  	mix := make([]byte, hashBytes)
   195  
   196  	binary.LittleEndian.PutUint32(mix, cache[(index%rows)*hashWords]^index)
   197  	for i := 1; i < hashWords; i++ {
   198  		binary.LittleEndian.PutUint32(mix[i*4:], cache[(index%rows)*hashWords+uint32(i)])
   199  	}
   200  	keccak512(mix, mix)
   201  
   202  	// Convert the mix to uint32s to avoid constant bit shifting
   203  	intMix := make([]uint32, hashWords)
   204  	for i := 0; i < len(intMix); i++ {
   205  		intMix[i] = binary.LittleEndian.Uint32(mix[i*4:])
   206  	}
   207  	// fnv it with a lot of random cache nodes based on index
   208  	for i := uint32(0); i < datasetParents; i++ {
   209  		parent := fnv(index^i, intMix[i%16]) % rows
   210  		fnvHash(intMix, cache[parent*hashWords:])
   211  	}
   212  	// Flatten the uint32 mix into a binary one and return
   213  	for i, val := range intMix {
   214  		binary.LittleEndian.PutUint32(mix[i*4:], val)
   215  	}
   216  	keccak512(mix, mix)
   217  	return mix
   218  }
   219  
   220  // generateDataset generates the entire ethash dataset for mining.
   221  // This method places the result into dest in machine byte order.
   222  func generateDataset(dest []uint32, epoch uint64, cache []uint32) {
   223  	// Print some debug logs to allow analysis on low end devices
   224  	logger := log.New("epoch", epoch)
   225  
   226  	start := time.Now()
   227  	defer func() {
   228  		elapsed := time.Since(start)
   229  
   230  		logFn := logger.Debug
   231  		if elapsed > 3*time.Second {
   232  			logFn = logger.Info
   233  		}
   234  		logFn("Generated ethash verification cache", "elapsed", common.PrettyDuration(elapsed))
   235  	}()
   236  
   237  	// Figure out whether the bytes need to be swapped for the machine
   238  	swapped := !isLittleEndian()
   239  
   240  	// Convert our destination slice to a byte buffer
   241  	header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest))
   242  	header.Len *= 4
   243  	header.Cap *= 4
   244  	dataset := *(*[]byte)(unsafe.Pointer(&header))
   245  
   246  	// Generate the dataset on many goroutines since it takes a while
   247  	threads := runtime.NumCPU()
   248  	size := uint64(len(dataset))
   249  
   250  	var pend sync.WaitGroup
   251  	pend.Add(threads)
   252  
   253  	var progress uint32
   254  	for i := 0; i < threads; i++ {
   255  		go func(id int) {
   256  			defer pend.Done()
   257  
   258  			// Create a hasher to reuse between invocations
   259  			keccak512 := makeHasher(sha3.NewKeccak512())
   260  
   261  			// Calculate the data segment this thread should generate
   262  			batch := uint32((size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads)))
   263  			first := uint32(id) * batch
   264  			limit := first + batch
   265  			if limit > uint32(size/hashBytes) {
   266  				limit = uint32(size / hashBytes)
   267  			}
   268  			// Calculate the dataset segment
   269  			percent := uint32(size / hashBytes / 100)
   270  			for index := first; index < limit; index++ {
   271  				item := generateDatasetItem(cache, index, keccak512)
   272  				if swapped {
   273  					swap(item)
   274  				}
   275  				copy(dataset[index*hashBytes:], item)
   276  
   277  				if status := atomic.AddUint32(&progress, 1); status%percent == 0 {
   278  					logger.Info("Generating DAG in progress", "percentage", uint64(status*100)/(size/hashBytes), "elapsed", common.PrettyDuration(time.Since(start)))
   279  				}
   280  			}
   281  		}(i)
   282  	}
   283  	// Wait for all the generators to finish and return
   284  	pend.Wait()
   285  }
   286  
   287  // hashimoto aggregates data from the full dataset in order to produce our final
   288  // value for a particular header hash and nonce.
   289  func hashimoto(hash []byte, nonce uint64, size uint64, lookup func(index uint32) []uint32) ([]byte, []byte) {
   290  	// Calculate the number of theoretical rows (we use one buffer nonetheless)
   291  	rows := uint32(size / mixBytes)
   292  
   293  	// Combine header+nonce into a 64 byte seed
   294  	seed := make([]byte, 40)
   295  	copy(seed, hash)
   296  	binary.LittleEndian.PutUint64(seed[32:], nonce)
   297  
   298  	seed = crypto.Keccak512(seed)
   299  	seedHead := binary.LittleEndian.Uint32(seed)
   300  
   301  	// Start the mix with replicated seed
   302  	mix := make([]uint32, mixBytes/4)
   303  	for i := 0; i < len(mix); i++ {
   304  		mix[i] = binary.LittleEndian.Uint32(seed[i%16*4:])
   305  	}
   306  	// Mix in random dataset nodes
   307  	temp := make([]uint32, len(mix))
   308  
   309  	for i := 0; i < loopAccesses; i++ {
   310  		parent := fnv(uint32(i)^seedHead, mix[i%len(mix)]) % rows
   311  		for j := uint32(0); j < mixBytes/hashBytes; j++ {
   312  			copy(temp[j*hashWords:], lookup(2*parent+j))
   313  		}
   314  		fnvHash(mix, temp)
   315  	}
   316  	// Compress mix
   317  	for i := 0; i < len(mix); i += 4 {
   318  		mix[i/4] = fnv(fnv(fnv(mix[i], mix[i+1]), mix[i+2]), mix[i+3])
   319  	}
   320  	mix = mix[:len(mix)/4]
   321  
   322  	digest := make([]byte, common.HashLength)
   323  	for i, val := range mix {
   324  		binary.LittleEndian.PutUint32(digest[i*4:], val)
   325  	}
   326  	return digest, crypto.Keccak256(append(seed, digest...))
   327  }
   328  
   329  // hashimotoLight aggregates data from the full dataset (using only a small
   330  // in-memory cache) in order to produce our final value for a particular header
   331  // hash and nonce.
   332  func hashimotoLight(size uint64, cache []uint32, hash []byte, nonce uint64) ([]byte, []byte) {
   333  	keccak512 := makeHasher(sha3.NewKeccak512())
   334  
   335  	lookup := func(index uint32) []uint32 {
   336  		rawData := generateDatasetItem(cache, index, keccak512)
   337  
   338  		data := make([]uint32, len(rawData)/4)
   339  		for i := 0; i < len(data); i++ {
   340  			data[i] = binary.LittleEndian.Uint32(rawData[i*4:])
   341  		}
   342  		return data
   343  	}
   344  	return hashimoto(hash, nonce, size, lookup)
   345  }
   346  
   347  // hashimotoFull aggregates data from the full dataset (using the full in-memory
   348  // dataset) in order to produce our final value for a particular header hash and
   349  // nonce.
   350  func hashimotoFull(dataset []uint32, hash []byte, nonce uint64) ([]byte, []byte) {
   351  	lookup := func(index uint32) []uint32 {
   352  		offset := index * hashWords
   353  		return dataset[offset : offset+hashWords]
   354  	}
   355  	return hashimoto(hash, nonce, uint64(len(dataset))*4, lookup)
   356  }
   357  
   358  const maxEpoch = 2048
   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 = [maxEpoch]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 = [maxEpoch]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}