github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/consensus/ethash/algorithm.go (about)

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