github.com/aquanetwork/aquachain@v1.7.8/consensus/aquahash/algorithm.go (about)

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