gitlab.com/aquachain/aquachain@v1.17.16-rc3.0.20221018032414-e3ddf1e1c055/consensus/aquahash/algorithm.go (about)

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