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