Исследование статистической вероятности значения бита в нонсе bitcoin



    Считается, что функция sha256( sha256( BlockHeader ) ), которая используется в алгоритме хэширования bitcoin весьма надежна. Надежна настолько, что существует только один единственный способ подобрать голден нонсе для очередного блока в блокчейне — путем перебора в процессе майнинга.

    В настоящее время в блокчейне биткоина уже более 530 тысяч блоков. Этого вполне достаточно, чтобы провести статистический анализ и ответить на вопрос: «действительно ли значения битов в ранее найденных нонсе равновероятно?».

    Самый простой статистический анализ можно сделать не на всем блокчейне, а только на последних нескольких тысячах блоков. Для этого потребуется взять эту информацию, например, с сайта btc.com. Этот блокчейн эксплорер имеет достаточно развитое апи, которым и воспользуемся. Напишем вот такой простой скрипт, который с помощью библиотеки requests скачает информацию о последних 2000 блоков. Меня интересует только одно значение — nonce, его я и буду записывать в текстовый файл вместе с номером блока.

    import requests
    
    target_blk_num=538800
    num_block_for_study=2000
    
    txt=open("bitcoin/nonces.txt","w")
    
    blk_num=target_blk_num-num_block_for_study
    print("Fetching blocks from "+str(blk_num) +" to "+str(target_blk_num) )
    while blk_num<target_blk_num:
        blk_num_=format(blk_num,'d')
        url_hash="https://chain.api.btc.com/v3/block/"+blk_num_
        block=requests.get(url_hash)
        j=block.json()
        data=j['data']
        nonce=data['nonce']
        print(blk_num,format(nonce,'x'))
        txt.write("%d " % blk_num)
        txt.write("0x%08X " % nonce)
        txt.write("%d" % nonce)
        txt.write("\n")
        blk_num=blk_num+1
    
    txt.close()
    

    Нужно запустить скрипт и подождать окончания его работы. Получим вот такой файл с 2-мя тысячами строк:

    Значения нонсе последних блоков:
    536800 0x0A75F108 175501576
    536801 0x64046EE3 1678012131
    536802 0x43842181 1132732801
    536803 0x69D1FE65 1775369829
    536804 0x5F3A5706 1597658886
    536805 0x77E7FC5A 2011692122
    536806 0x29FC3572 704394610
    536807 0x6FA83F41 1873297217
    536808 0xB498D106 3029913862
    536809 0xCFCADF12 3486179090
    536810 0x3217C81D 840419357
    536811 0x0A4DD1A5 172872101
    536812 0xC422E8B4 3290622132
    536813 0x9512DA88 2501040776
    536814 0x5606B5C9 1443280329
    536815 0x4EAD3CC6 1319976134
    536816 0x421482FF 1108640511
    536817 0x15311B34 355539764
    536818 0xE2879E05 3800538629
    536819 0x41EB3E73 1105935987
    536820 0x29ED08CD 703400141
    536821 0x8B4FB3F7 2337256439
    536822 0x0FF2B634 267564596
    536823 0x32E51D55 853876053
    536824 0xE09DBAE1 3768433377
    536825 0xD97F44E5 3648996581
    536826 0x90A4EC5E 2426727518
    536827 0xCBF74735 3421980469
    536828 0x6D2F10F0 1831801072
    536829 0xE595A073 3851788403
    536830 0xC8765E94 3363200660
    536831 0x09DC9851 165451857
    536832 0xC2EFEA16 3270502934
    536833 0x7897622F 2023186991
    536834 0x706949F8 1885948408
    536835 0x1B619051 459378769
    536836 0xE707A346 3876037446
    536837 0xB3B0D216 3014709782
    536838 0x51B8F9E8 1371077096
    536839 0xE2207F9D 3793780637
    536840 0xD0D15245 3503379013
    536841 0x904FE5C5 2421155269
    536842 0xFF326B4B 4281494347
    536843 0x312BAA45 824945221
    536844 0x88702768 2289051496
    536845 0xD8924803 3633465347
    536846 0xEFAB5E6B 4020985451
    536847 0x76779ACB 1987549899
    536848 0x81436738 2168678200
    536849 0x02896E6A 42561130
    536850 0x76D3ED09 1993600265
    536851 0x8F2052C7 2401260231
    536852 0x6A9984CA 1788445898
    536853 0xD541C515 3577857301
    536854 0x6AC2384F 1791113295
    536855 0x214031F1 557855217
    536856 0xF028BB76 4029201270
    536857 0xF821479C 4162930588
    536858 0xEF9C2E42 4019990082
    536859 0x9E02734E 2650960718
    536860 0x20C786E9 549947113
    536861 0xEB84DD18 3951353112
    536862 0x422720B2 1109860530
    536863 0xA59EC71A 2778646298
    536864 0x2FFF3B42 805256002
    536865 0x5D606431 1566598193
    536866 0xF4FB4B01 4110109441
    536867 0x68AC0CD5 1756105941
    536868 0x6C35C2A6 1815462566
    536869 0xF38F0409 4086236169
    536870 0xABE37AC2 2883812034
    536871 0xF60096CA 4127233738
    536872 0x8E3B0BA3 2386234275
    536873 0x2904FF1A 688193306
    536874 0xCE6A1E32 3463061042
    536875 0xB110BD24 2970664228
    536876 0xF28289CC 4068641228
    536877 0x2719E083 656007299
    536878 0xD14BF4E7 3511416039
    536879 0x046C418A 74203530
    536880 0xF239BEC6 4063870662
    536881 0x619CDB26 1637669670
    536882 0x0FAB9F09 262905609
    536883 0xC8A14FC1 3366014913
    536884 0x2BDC9BF0 735878128
    536885 0x551D0A18 1427966488
    536886 0x43BDC8E5 1136511205
    536887 0x93236DB3 2468572595
    536888 0xA6DF3DD6 2799648214
    536889 0xD956E81A 3646351386
    536890 0xA292405D 2727493725
    536891 0x4ECF97EA 1322227690
    536892 0x6C289307 1814598407
    536893 0x0FE7B408 266843144
    536894 0xD7A54779 3617933177
    536895 0x49A575B6 1235580342
    536896 0x660B7018 1712025624
    536897 0x5A90DE66 1519443558
    536898 0x24602343 610280259
    536899 0xEA91EE92 3935432338
    536900 0x2A7DEBC9 712895433
    536901 0x7F8919BF 2139691455
    536902 0x85DD793B 2245884219
    536903 0x508B343F 1351300159
    536904 0xA7541C57 2807307351
    536905 0x902EAF9E 2418978718
    536906 0x2932BE12 691191314
    536907 0x304C8808 810321928
    536908 0xB0DC682A 2967234602
    536909 0x4F53EFD7 1330900951
    536910 0xF042D46A 4030911594
    536911 0x84726E0D 2222091789
    536912 0xC8667200 3362157056
    536913 0x4CCEAD50 1288613200
    536914 0x60D8E12E 1624826158
    536915 0x40BC2101 1086071041
    536916 0x5758F201 1465446913
    536917 0x45BD335F 1170027359
    536918 0x56E151A9 1457607081
    536919 0x11DE7F25 299794213
    536920 0x361D50CE 907890894
    536921 0xFBC73CE0 4224138464
    536922 0x57232881 1461921921
    536923 0x83AB7ACF 2209053391
    536924 0x8F7E47AF 2407417775
    536925 0x6425150A 1680151818
    536926 0x596C4C78 1500269688
    536927 0xA2B5D934 2729826612
    536928 0xBC673E6A 3160882794
    536929 0xE8116AB6 3893455542
    536930 0x92661734 2456164148
    536931 0x65904416 1703953430
    536932 0xD2DC8C64 3537669220
    536933 0xAC14A926 2887035174
    536934 0x98B9F2D6 2562323158
    536935 0xB85796F5 3092748021
    536936 0x08D3AC55 148089941
    536937 0x08532D08 139668744
    536938 0x58022FF2 1476538354
    536939 0x2C1D0FA9 740102057
    536940 0x83668A2B 2204535339
    536941 0x938CBC67 2475474023
    536942 0x49A14B37 1235307319
    536943 0x8FA2492A 2409777450
    536944 0x822227E8 2183276520
    536945 0xB6AE2123 3064865059
    536946 0xE83D8756 3896346454
    536947 0xD6437316 3594744598
    536948 0x731E7A99 1931377305
    536949 0x9F63EDE8 2674126312
    536950 0xA9B67DCD 2847309261
    536951 0x2B77E7F6 729278454
    536952 0x6F3E3B5F 1866349407
    536953 0xF1FF973E 4060059454
    536954 0x28AC9397 682398615
    536955 0x5920CE0A 1495322122
    536956 0x916C0AA2 2439776930
    536957 0x5CDF71F2 1558147570
    536958 0x9A41B702 2587997954
    536959 0xB16D4B56 2976729942
    536960 0x0C88EE3E 210300478
    536961 0x6A6D7474 1785558132
    536962 0x7544CFAE 1967443886
    536963 0xD14824C2 3511166146
    536964 0xA1FF9FFA 2717884410
    536965 0xA1CABEE0 2714418912
    536966 0xED5BD1E0 3982217696
    536967 0x3095185B 815077467
    536968 0x87A71339 2275873593
    536969 0x877DB48E 2273162382
    536970 0x4ABD04F2 1253901554
    536971 0xC29C3B16 3265018646
    536972 0xF0C21FF7 4039254007
    536973 0x4B60F69E 1264645790
    536974 0x1297C086 311935110
    536975 0xB2DF972E 3000997678
    536976 0xA3746A7F 2742315647
    536977 0x5690FA49 1452341833
    536978 0xDD69D9F1 3714701809
    536979 0x16C9F432 382334002
    536980 0x776F7186 2003792262
    536981 0xE5DC34D6 3856413910
    536982 0x07B9F683 129627779
    536983 0x37ADFF70 934150000
    536984 0x020655F6 33969654
    536985 0x828F3054 2190422100
    536986 0x6830DB63 1748032355
    536987 0xC8BDAD1D 3367873821
    536988 0x456172DD 1164014301
    536989 0x4EEF786C 1324316780
    536990 0x047313AB 74650539
    536991 0x4A9C6F2E 1251766062
    536992 0x16AE3E21 380517921
    536993 0x75E6BBE9 1978055657
    536994 0x4DB86F32 1303932722
    536995 0x537A470F 1400522511
    536996 0x09D57784 164984708
    536997 0x225542F8 576013048
    536998 0x9285CB22 2458241826
    536999 0x8A5D251C 2321360156
    537000 0x4EF17C51 1324448849
    537001 0xF2EE1FD0 4075691984
    537002 0x21F69ED9 569810649
    537003 0xA3D38623 2748548643
    537004 0x437747C6 1131890630
    537005 0x2DAE22B4 766386868
    537006 0xA564238C 2774803340
    537007 0x9B0DA8F5 2601363701
    537008 0x9BF14D85 2616282501
    537009 0xEF7EFDCD 4018077133
    537010 0x1D3654BE 490099902
    537011 0x284DA6AE 676177582
    537012 0xCCACDD6D 3433880941
    537013 0x85DC2096 2245795990
    537014 0x23720223 594674211
    537015 0xBD5A6697 3176818327
    537016 0x02ABD9F2 44816882
    537017 0xCD810703 3447785219
    537018 0x2594C210 630506000
    537019 0x04D87CA6 81296550
    537020 0x21BF189D 566171805
    537021 0x0B3E23E2 188621794
    537022 0x7852C9A1 2018691489
    537023 0xE55F03D2 3848209362
    537024 0xE0DE42DC 3772662492
    537025 0xDDE9DF00 3723091712
    537026 0x9A857C48 2592439368
    537027 0x6506143F 1694897215
    537028 0x8A1E2D28 2317233448
    537029 0x9D56D3A8 2639713192
    537030 0xE65D60AE 3864879278
    537031 0xCC66C1EE 3429286382
    537032 0x21A20619 564266521
    537033 0x007C5EA1 8150689
    537034 0x726CE93C 1919740220
    537035 0x707D5E32 1887264306
    537036 0x7AE9C992 2062141842
    537037 0x161EA8C2 371108034
    537038 0x5DD540CB 1574256843
    537039 0x42DA383D 1121597501
    537040 0x6A852D47 1787112775
    537041 0xE003B830 3758340144
    537042 0xA9CE3085 2848862341
    537043 0xEFBD3268 4022153832
    537044 0xF54E55A9 4115551657
    537045 0x7149A940 1900652864
    537046 0x701E3E47 1881030215
    537047 0x758F5F80 1972330368
    537048 0xFA3F88E0 4198467808
    537049 0xA0C77A3A 2697427514
    537050 0x97D20967 2547124583
    537051 0x44CDB6A6 1154332326
    537052 0x53281BD2 1395137490
    537053 0x49305D48 1227906376
    537054 0x843D2581 2218599809
    537055 0x9440B117 2487267607
    537056 0xC38E9622 3280901666
    537057 0x82869D41 2189860161
    537058 0x2DD924D9 769205465
    537059 0xCE8C480A 3465299978
    537060 0xECD53611 3973395985
    537061 0xAD78CFBC 2910375868
    537062 0xFFE73547 4293342535
    537063 0x833FDB8A 2202000266
    537064 0x60BB4400 1622885376
    537065 0xDE2D780E 3727521806
    537066 0x7373797F 1936947583
    537067 0xAE525433 2924631091
    537068 0x8A91E5AA 2324817322
    537069 0x8CC62047 2361794631
    537070 0x6092E498 1620239512
    537071 0x83370EB6 2201423542
    537072 0x19C2F477 432206967
    537073 0x3536E714 892790548
    537074 0x68FC8978 1761380728
    537075 0xB146C1B2 2974204338
    537076 0x86A5FF39 2259025721
    537077 0xC7006B6A 3338693482
    537078 0xA9B14363 2846966627
    537079 0x43DA311B 1138372891
    537080 0xEEC44C12 4005841938
    537081 0x3CB1A0AC 1018273964
    537082 0x9E875D82 2659671426
    537083 0x5734A4B3 1463067827
    537084 0x50449436 1346671670
    537085 0x74A2CF44 1956826948
    537086 0x161DDBE8 371055592
    537087 0x85D01F7A 2245009274
    537088 0x6DA2C81C 1839384604
    537089 0x6A4E9C84 1783536772
    537090 0x898D87F9 2307753977
    537091 0xBE49168C 3192460940
    537092 0x77CCF6DF 2009921247
    537093 0x8BAB207C 2343247996
    537094 0xD1C8CDCB 3519598027
    537095 0xF85BEAEE 4166773486
    537096 0xD3B6A308 3551961864
    537097 0x1F830312 528679698
    537098 0x6230DB94 1647369108
    537099 0x5F9BC800 1604044800
    537100 0x77AF542B 2007979051
    537101 0x599B39D0 1503345104
    537102 0x97121813 2534545427
    537103 0x2FE9C1B5 803848629
    537104 0xA58C9DC2 2777456066
    537105 0xA650952E 2790298926
    537106 0xA6DE4F97 2799587223
    537107 0xDFF1F9B9 3757177273
    537108 0x5980E9F1 1501620721
    537109 0x94B2003D 2494693437
    537110 0xB6FA8716 3069871894
    537111 0x7532A699 1966253721
    537112 0x717D6C2E 1904045102
    537113 0x10B523B8 280306616
    537114 0x25E93A02 636041730
    537115 0x78600DE3 2019560931
    537116 0xD0A4DFB9 3500466105
    537117 0x1965022E 426050094
    537118 0x8C2B3EFA 2351644410
    537119 0xAF7FD1E9 2944389609
    537120 0x420A3B31 1107966769
    537121 0xABE37683 2883810947
    537122 0x7832BBEB 2016590827
    537123 0xC83E2CEB 3359517931
    537124 0x8EA76ED7 2393337559
    537125 0xE4655C3C 3831847996
    537126 0x91DA6CBB 2447011003
    537127 0x69A5ABC4 1772465092
    537128 0x9879C300 2558116608
    537129 0x02A7C845 44550213
    537130 0x4622E285 1176691333
    537131 0x352397C3 891525059
    537132 0x9E2D2803 2653759491
    537133 0xACB24867 2897365095
    537134 0xCC4D68A9 3427625129
    537135 0x005CD031 6082609
    537136 0x228665C3 579233219
    537137 0xB8C5D596 3099973014
    537138 0x1B1599A4 454400420
    537139 0xC33197EC 3274807276
    537140 0x028C60A4 42754212
    537141 0x0ADF69A2 182413730
    537142 0xEE31513C 3996209468
    537143 0x711A3D10 1897544976
    537144 0x190F447D 420430973
    537145 0x4A34F6CE 1244985038
    537146 0xB8CF8EC1 3100610241
    537147 0x096E8D7B 158240123
    537148 0x4A41FA12 1245837842
    537149 0x6F94338A 1871983498
    537150 0x49582F6E 1230516078
    537151 0x181CCB1C 404540188
    537152 0x69991C6B 1771641963
    537153 0x44C5E9AA 1153821098
    537154 0x264DB929 642627881
    537155 0xDF328C43 3744631875
    537156 0xE62FF280 3861901952
    537157 0x90FFD450 2432685136
    537158 0xDF8FAC57 3750734935
    537159 0xA1D156DF 2714851039
    537160 0x71894209 1904820745
    537161 0x9E8C4A0E 2659994126
    537162 0x4EEAE41E 1324016670
    537163 0xB39E40D2 3013492946
    537164 0x83A1CB40 2208418624
    537165 0xC5990BB2 3315141554
    537166 0x62C16D29 1656843561
    537167 0xDFBA4DD4 3753528788
    537168 0xF27FF0AC 4068470956
    537169 0x4D297BEF 1294564335
    537170 0xD3CDC811 3553478673
    537171 0xEB5BB554 3948655956
    537172 0x1F035838 520312888
    537173 0x0F8008F0 260049136
    537174 0x1D0D54EB 487412971
    537175 0x0AD7DAA8 181918376
    537176 0xDB4243B5 3678553013
    537177 0xEB87623B 3951518267
    537178 0xA6E29A9D 2799868573
    537179 0x657DEC41 1702751297
    537180 0xDEBF78A9 3737090217
    537181 0x9A0E3E42 2584624706
    537182 0x4D81B479 1300345977
    537183 0xEE237F29 3995303721
    537184 0x64483418 1682453528
    537185 0x70CE3A54 1892563540
    537186 0x0407E621 67626529
    537187 0xE87F58A8 3900659880
    537188 0x8A572922 2320967970
    537189 0xA1DA472C 2715436844
    537190 0x1DB85112 498618642
    537191 0xA5B332E0 2779984608
    537192 0x8C6EB381 2356065153
    537193 0x011D856C 18711916
    537194 0x4FFB15C5 1341855173
    537195 0x8BB55113 2343915795
    537196 0x1F88FDBC 529071548
    537197 0x71E8295D 1911040349
    537198 0xDD326D1C 3711069468
    537199 0x4997E7A1 1234692001
    537200 0x0C25B238 203797048
    537201 0xDC02F821 3691182113
    537202 0x7E0272FA 2114089722
    537203 0x7428DA05 1948834309
    537204 0x5375694E 1400203598
    537205 0xE4895B26 3834207014
    537206 0xF2E27798 4074928024
    537207 0x2750C3E9 659604457
    537208 0xC491CE90 3297889936
    537209 0xB27D5F42 2994560834
    537210 0x48DEEAE7 1222568679
    537211 0xD52B16F8 3576370936
    537212 0x109162BA 277963450
    537213 0x06F78C0D 116886541
    537214 0xC3364C98 3275115672
    537215 0x6BC8BF8E 1808318350
    537216 0xDFB8B924 3753425188
    537217 0x74FCDF85 1962729349
    537218 0x89B3E526 2310268198
    537219 0xB2B2756B 2998039915
    537220 0x0BF45620 200562208
    537221 0xF73D1ACF 4147976911
    537222 0xC0C860CC 3234357452
    537223 0xDE29DC19 3727285273
    537224 0xB20C3EDC 2987146972
    537225 0xE676C194 3866542484
    537226 0x845B30F8 2220568824
    537227 0x8B71E0B3 2339496115
    537228 0xE8DB2A11 3906677265
    537229 0x229AB7E1 580564961
    537230 0x51D93418 1373189144
    537231 0x74E81286 1961366150
    537232 0x683E8338 1748927288
    537233 0x94CAB9B2 2496313778
    537234 0xA8A33C31 2829270065
    537235 0x43B4A14E 1135911246
    537236 0xA93CD929 2839337257
    537237 0x5350FBDC 1397816284
    537238 0xD261E675 3529631349
    537239 0xC9E11D00 3386973440
    537240 0x62D26A99 1657957017
    537241 0x92A069C1 2459986369
    537242 0x2517A475 622306421
    537243 0xCE77FA34 3463969332
    537244 0x0CCCB54F 214742351
    537245 0x4CDF0B6B 1289685867
    537246 0x23481E45 591928901
    537247 0x9F02003A 2667708474
    537248 0xD3BDA440 3552420928
    537249 0x2DED0928 770509096
    537250 0x2EA05107 782258439
    537251 0x9A2B9830 2586548272
    537252 0x098813F0 159912944
    537253 0x245C53F8 610030584
    537254 0xD29B8F24 3533410084
    537255 0x890D4C28 2299350056
    537256 0x685F61BA 1751081402
    537257 0x12B43DA1 313802145
    537258 0xD6882535 3599246645
    537259 0x251D0329 622658345
    537260 0x0E98327A 244855418
    537261 0x5A2DA66F 1512941167
    537262 0x00E45870 14964848
    537263 0x91E53ADF 2447719135
    537264 0xE501A114 3842089236
    537265 0xB3119D1A 3004275994
    537266 0x1FF020F0 535830768
    537267 0xC748BF35 3343433525
    537268 0xC876BF7D 3363225469
    537269 0x450606F9 1158022905
    537270 0x013786E5 20416229
    537271 0xA964BC95 2841951381
    537272 0x2CECAD8B 753708427
    537273 0xB39E4070 3013492848
    537274 0x421E0126 1109262630
    537275 0x1261BDBD 308395453
    537276 0xE17D1F46 3783073606
    537277 0x8CAD3133 2360160563
    537278 0xD8AE2C86 3635293318
    537279 0x22E2EB8E 585296782
    537280 0x7018748D 1880650893
    537281 0x02DDDD7A 48094586
    537282 0x2AFFB5E8 721401320
    537283 0xD57FA399 3581911961
    537284 0x6EBFE3CC 1858069452
    537285 0xE904210B 3909361931
    537286 0xAF9BB2FA 2946216698
    537287 0x288BFA14 680262164
    537288 0x198960CD 428433613
    537289 0xB52FCD0C 3039808780
    537290 0xE1DDEC5A 3789417562
    537291 0xF77C1B79 4152105849
    537292 0x26357FE8 641040360
    537293 0x63CA013D 1674182973
    537294 0x1F1CB1DD 521974237
    537295 0x1CFC7888 486307976
    537296 0xE4AF4949 3836692809
    537297 0x61710110 1634795792
    537298 0x2522A199 623026585
    537299 0x59796058 1501126744
    537300 0x66B2E409 1722999817
    537301 0x5AA6FC89 1520893065
    537302 0xE70C260C 3876333068
    537303 0x6980A1E6 1770037734
    537304 0x80EF0C40 2163149888
    537305 0xEB17683E 3944179774
    537306 0x59F6ED00 1509354752
    537307 0x8E7B6317 2390450967
    537308 0x2C342577 741614967
    537309 0x8A4822E4 2319983332
    537310 0xB514D895 3038042261
    537311 0x16316609 372336137
    537312 0xC6C5CB48 3334851400
    537313 0xF606AC0D 4127632397
    537314 0xC7A79DB2 3349650866
    537315 0xED15680C 3977603084
    537316 0x68DA694A 1759144266
    537317 0xAE2B5567 2922075495
    537318 0x99A13507 2577478919
    537319 0x4F68D961 1332271457
    537320 0xA7DF0912 2816411922
    537321 0x73D25942 1943165250
    537322 0x4693E970 1184098672
    537323 0x8EEE9172 2397999474
    537324 0x5C5175DD 1548842461
    537325 0xF7233610 4146279952
    537326 0x40904115 1083195669
    537327 0x4696DBE2 1184291810
    537328 0xD2D71E97 3537313431
    537329 0xD1E9CEC6 3521760966
    537330 0x08F6D070 150392944
    537331 0x954C231E 2504794910
    537332 0x1B6FB595 460305813
    537333 0x1AAC7101 447508737
    537334 0xF3935CEB 4086521067
    537335 0x631B5036 1662734390
    537336 0x8C584907 2354596103
    537337 0x50F4E6B6 1358227126
    537338 0xF14F428D 4048503437
    537339 0x5432977E 1412601726
    537340 0x80F72536 2163680566
    537341 0x63610C16 1667304470
    537342 0xFF190210 4279829008
    537343 0xD5FD1332 3590132530
    537344 0x917EAC51 2440997969
    537345 0x7FE33964 2145597796
    537346 0x2EB699AD 783718829
    537347 0x998A4D0B 2575977739
    537348 0x2AEFE836 720365622
    537349 0x1AB19BAF 447847343
    537350 0xD584663B 3582223931
    537351 0xC2212570 3256952176
    537352 0x12A51041 312807489
    537353 0xE51C118B 3843821963
    537354 0xA9D9B7B5 2849617845
    537355 0x2C112415 739320853
    537356 0xD8CAB9CA 3637164490
    537357 0x574F7CDB 1464827099
    537358 0x0498AB3C 77114172
    537359 0x78280912 2015889682
    537360 0x8C080B65 2349337445
    537361 0xE9B7C959 3921135961
    537362 0x88FAC0D2 2298134738
    537363 0x1B84FBB2 461700018
    537364 0x88DED6DC 2296305372
    537365 0x74509A42 1951439426
    537366 0x5DB67A25 1572239909
    537367 0x9982443C 2575451196
    537368 0xF4A14C04 4104211460
    537369 0x2C00C85F 738248799
    537370 0x6E2DAD30 1848487216
    537371 0x0096BD01 9878785
    537372 0x72817C37 1921088567
    537373 0x2B8B15B5 730535349
    537374 0x1A4C337F 441201535
    537375 0xA30C9626 2735511078
    537376 0x244EACB4 609135796
    537377 0x15F711C3 368513475
    537378 0xCD9D1179 3449622905
    537379 0x8A1FA63D 2317329981
    537380 0xDB65EF71 3680890737
    537381 0xC9A7D7C2 3383220162
    537382 0x50FDEE8E 1358818958
    537383 0x55F03E7D 1441807997
    537384 0xAA60A31D 2858459933
    537385 0x1818F718 404289304
    537386 0x2FEE289C 804137116
    537387 0xAE3E25B9 2923308473
    537388 0x68285A72 1747475058
    537389 0xAC8C1AFA 2894863098
    537390 0xEAD43E1C 3939778076
    537391 0xB5454FDD 3041218525
    537392 0x53688628 1399359016
    537393 0x3A5FFCC6 979369158
    537394 0x76C885C5 1992852933
    537395 0xAC178BDB 2887224283
    537396 0x89AF2341 2309956417
    537397 0x48F05571 1223710065
    537398 0x2FA3CE69 799264361
    537399 0x90FF32DA 2432643802
    537400 0x6084B39C 1619309468
    537401 0x527E7477 1384019063
    537402 0x45AC408F 1168916623
    537403 0x84120018 2215772184
    537404 0xA85D9BD3 2824707027
    537405 0x98A6BEDE 2561064670
    537406 0x300D1E34 806166068
    537407 0x9F4F1FA0 2672762784
    537408 0x99FAAA87 2583341703
    537409 0x24FE9D34 620666164
    537410 0x006DAE68 7188072
    537411 0x2A7C18D9 712775897
    537412 0x2DA11303 765530883
    537413 0x161ABA65 370850405
    537414 0x9F2C6A11 2670488081
    537415 0xDD66CA50 3714501200
    537416 0x340F675D 873424733
    537417 0x70824C18 1887587352
    537418 0x6895473D 1754613565
    537419 0x44E3C012 1155776530
    537420 0xF40FD641 4094678593
    537421 0xAD495417 2907264023
    537422 0x77E30777 2011367287
    537423 0x0D00D251 218157649
    537424 0x20D094CD 550540493
    537425 0x5B908668 1536198248
    537426 0x0F231E63 253959779
    537427 0x8E2AF912 2385180946
    537428 0x8F82CAC9 2407713481
    537429 0x62D97FAC 1658421164
    537430 0xC3BB7D4F 3283844431
    537431 0x04287CDA 69762266
    537432 0xC8A3B241 3366171201
    537433 0xBAAEE71D 3132024605
    537434 0xCBB9465B 3417917019
    537435 0xF04D6B08 4031605512
    537436 0x729AF77C 1922758524
    537437 0x71AA0878 1906968696
    537438 0x504996B9 1346999993
    537439 0x6EB91373 1857622899
    537440 0x345DC414 878560276
    537441 0x85534F77 2236829559
    537442 0xAAD8A6EC 2866325228
    537443 0x784EC2E4 2018427620
    537444 0x7961F78C 2036463500
    537445 0xDFA8C73D 3752380221
    537446 0x5B5DB436 1532867638
    537447 0x91130C60 2433944672
    537448 0xB28965D5 2995348949
    537449 0x1C5BBDE6 475774438
    537450 0x7912489E 2031241374
    537451 0x722535C6 1915041222
    537452 0x43EBFD62 1139539298
    537453 0xB2FA9B18 3002768152
    537454 0xA14A5B57 2706004823
    537455 0x5E630B16 1583549206
    537456 0x544531E8 1413820904
    537457 0x9E17463A 2652325434
    537458 0x823F1643 2185172547
    537459 0x433B0C7E 1127943294
    537460 0x0CA97011 212430865
    537461 0xD2188E39 3524824633
    537462 0x5188C481 1367917697
    537463 0x6DA7CB9B 1839713179
    537464 0x2485EB12 612756242
    537465 0x56D5BE7C 1456848508
    537466 0xE260F794 3798005652
    537467 0x317A31C7 830091719
    537468 0xEEEC1D41 4008451393
    537469 0x24DDDC36 618519606
    537470 0x16586219 374891033
    537471 0x72CFAA01 1926212097
    537472 0x5A663B0B 1516649227
    537473 0xC8DD4753 3369944915
    537474 0xAAF475BC 2868147644
    537475 0x9E94661B 2660525595
    537476 0x23193323 588854051
    537477 0xAD2E0966 2905475430
    537478 0xD32288AC 3542255788
    537479 0x74D5141D 1960121373
    537480 0xEC74794C 3967056204
    537481 0xA0707D0C 2691726604
    537482 0x3CA6B844 1017559108
    537483 0x90C64299 2428912281
    537484 0x7FE03E1B 2145402395
    537485 0x8C066C1D 2349231133
    537486 0x5EDDF33D 1591604029
    537487 0x2C2C6D48 741109064
    537488 0x2C786179 746086777
    537489 0xACE45A1E 2900646430
    537490 0x9A6F5375 2590987125
    537491 0xB65D20E2 3059556578
    537492 0xAEC9FDAE 2932473262
    537493 0xA7E516BF 2816808639
    537494 0x538E31C1 1401827777
    537495 0x2112E4F6 554886390
    537496 0x104BEDF7 273411575
    537497 0x6996F547 1771500871
    537498 0xA10C000A 2701918218
    537499 0x417FD5D6 1098896854
    537500 0xEE97837A 4002907002
    537501 0x0A84F1A2 176484770
    537502 0xE9392F29 3912838953
    537503 0x6137EEAE 1631055534
    537504 0x38D2F60C 953349644
    537505 0x41340FF5 1093930997
    537506 0x5AED2547 1525491015
    537507 0xB68EB80E 3062806542
    537508 0x8CE6ADFD 2363928061
    537509 0xA992A81A 2844960794
    537510 0xAF0DB4E2 2936911074
    537511 0xA0DC7749 2698803017
    537512 0x80C01571 2160072049
    537513 0x35FA90B8 905613496
    537514 0xCAD13267 3402707559
    537515 0x1069865F 275351135
    537516 0xF3E9A33C 4092175164
    537517 0xECFD3AD9 3976018649
    537518 0x20AA73FA 548041722
    537519 0xD9AE787F 3652089983
    537520 0x8B29102D 2334724141
    537521 0x7B064A04 2064009732
    537522 0x1834092B 406063403
    537523 0x88A2D924 2292373796
    537524 0xC0D73885 3235330181
    537525 0x67B5920F 1739952655
    537526 0x60AE3F33 1622032179
    537527 0x68667815 1751545877
    537528 0xFB660D47 4217769287
    537529 0x86274A67 2250721895
    537530 0x8B00D858 2332088408
    537531 0x90CAD4CE 2429211854
    537532 0xA8BF88D1 2831124689
    537533 0x8237E24D 2184700493
    537534 0xB37C815F 3011281247
    537535 0x281B3059 672870489
    537536 0x141F238C 337585036
    537537 0x24654CC8 610618568
    537538 0x60C529D5 1623534037
    537539 0x8F611B7B 2405505915
    537540 0x07C46238 130310712
    537541 0x72405D1E 1916820766
    537542 0x88ED2F21 2297245473
    537543 0x61B15F9B 1639014299
    537544 0xDF455896 3745863830
    537545 0x4A84D515 1250219285
    537546 0x5C1FCCFA 1545587962
    537547 0x36DE4DB2 920538546
    537548 0x4E0B817E 1309376894
    537549 0xCA4703DC 3393651676
    537550 0xDBC60454 3687187540
    537551 0x1CBE239E 482223006
    537552 0x5532B8F9 1429387513
    537553 0xA1A62416 2712019990
    537554 0x7331E619 1932650009
    537555 0x81E9F308 2179592968
    537556 0xA3D95E25 2748931621
    537557 0x29A720EA 698818794
    537558 0xCD88E274 3448300148
    537559 0xD5FFC110 3590308112
    537560 0x6684D849 1719982153
    537561 0x9C8942F1 2626241265
    537562 0x64985CBC 1687706812
    537563 0x584054BA 1480611002
    537564 0x5EC78DAD 1590136237
    537565 0x3D503339 1028666169
    537566 0xA4D6376F 2765502319
    537567 0x73EA1DA4 1944722852
    537568 0xE25B1715 3797620501
    537569 0xC7843F10 3347332880
    537570 0x14DF0921 350161185
    537571 0x18EAFE10 418053648
    537572 0xAFE60417 2951087127
    537573 0xAD772A7F 2910268031
    537574 0xA07C558A 2692502922
    537575 0x2F9845FA 798508538
    537576 0x070CCB49 118278985
    537577 0xADA80541 2913469761
    537578 0xF1873458 4052169816
    537579 0xB89AF85C 3097163868
    537580 0xE4C1E746 3837912902
    537581 0x978DAAC0 2542643904
    537582 0xA2AE4311 2729329425
    537583 0x84D22483 2228364419
    537584 0x75BD1BBF 1975327679
    537585 0xB81E3357 3088986967
    537586 0xBFF0CB3A 3220228922
    537587 0x465E9530 1180603696
    537588 0x10F13079 284242041
    537589 0x721497F2 1913952242
    537590 0x6880AD65 1753263461
    537591 0x939A1AAE 2476350126
    537592 0x6389452C 1669940524
    537593 0x05B774B4 95909044
    537594 0x51255433 1361400883
    537595 0x7D7164AD 2104583341
    537596 0x45A19F0D 1168219917
    537597 0x15D2294B 366094667
    537598 0x171E0934 387844404
    537599 0x1B83C07C 461619324
    537600 0x25DD982B 635279403
    537601 0xCEED1B6F 3471645551
    537602 0xB8475809 3091683337
    537603 0x41324033 1093812275
    537604 0x486F8B1A 1215269658
    537605 0x37A787F5 933726197
    537606 0x1E15530E 504713998
    537607 0x01E6A1F1 31891953
    537608 0x3758AB65 928557925
    537609 0x194803A6 424149926
    537610 0x433B50CA 1127960778
    537611 0x29FA465C 704267868
    537612 0x1B106AB2 454060722
    537613 0x0C9A502B 211439659
    537614 0x72CDEB5A 1926097754
    537615 0x0783E6EC 126084844
    537616 0xC1915326 3247526694
    537617 0x0A335671 171136625
    537618 0xBAF88D35 3136851253
    537619 0xC95274DF 3377624287
    537620 0x6AAE3048 1789800520
    537621 0xF0205FF1 4028653553
    537622 0xC1CDCBE0 3251489760
    537623 0x115202AF 290587311
    537624 0xB538BD12 3040394514
    537625 0x65538B47 1699973959
    537626 0xDFF753CA 3757528010
    537627 0x1A4F8171 441418097
    537628 0xA8E539E1 2833594849
    537629 0xEC785B3B 3967310651
    537630 0x60092C0B 1611213835
    537631 0xF68138D3 4135663827
    537632 0xF27A2833 4068091955
    537633 0x3408B381 872985473
    537634 0x3613E2DA 907272922
    537635 0xACD580B2 2899673266
    537636 0xF0018917 4026632471
    537637 0x348CD99C 881645980
    537638 0x043A4F7F 70930303
    537639 0xE00A1113 3758756115
    537640 0x9A5330C1 2589143233
    537641 0xB480A4A9 3028329641
    537642 0x28A9B8B1 682211505
    537643 0x0C5EBBAE 207535022
    537644 0x82F73AE1 2197240545
    537645 0x918312EB 2441286379
    537646 0xA5F5E818 2784356376
    537647 0xCDE272BB 3454169787
    537648 0x257049A7 628115879
    537649 0x8061FF12 2153905938
    537650 0xC4DE6E40 3302911552
    537651 0x247B6C9B 612068507
    537652 0xF70C45F3 4144776691
    537653 0x617BAE95 1635495573
    537654 0xDBE70E32 3689352754
    537655 0xD1ECB9A2 3521952162
    537656 0x014984AD 21595309
    537657 0xF6CEB109 4140740873
    537658 0x400E82E8 1074692840
    537659 0x097DFA66 159251046
    537660 0x5A93A688 1519625864
    537661 0xC1BC49D9 3250342361
    537662 0x09235E1C 153312796
    537663 0xE54AA6E1 3846874849
    537664 0x907F7F45 2424274757
    537665 0x34D9D8F1 886692081
    537666 0x932C4EE2 2469154530
    537667 0xE0138DA3 3759377827
    537668 0xED250F86 3978628998
    537669 0xCDAE4B5E 3450751838
    537670 0x5CDE3E7F 1558068863
    537671 0x170527CC 386213836
    537672 0xA9989280 2845348480
    537673 0x8DB5FD3C 2377514300
    537674 0x8CC53818 2361735192
    537675 0x1898D8BC 412670140
    537676 0xA828C00A 2821242890
    537677 0x617F6FF7 1635741687
    537678 0x56813F60 1451310944
    537679 0xC6C5D965 3334855013
    537680 0x17FE5CC2 402545858
    537681 0x9B576678 2606196344
    537682 0x6B89FCA6 1804205222
    537683 0xA39EB50C 2745087244
    537684 0x80D4C028 2161426472
    537685 0x2BEEF85A 737081434
    537686 0xCB3B6754 3409667924
    537687 0xB7AF9112 3081736466
    537688 0x3F81CEFD 1065471741
    537689 0xAF65B8B8 2942679224
    537690 0x63990716 1670973206
    537691 0xF2AC6119 4071383321
    537692 0xAE7D649C 2927453340
    537693 0x5DB6B551 1572255057
    537694 0x41D21A16 1104288278
    537695 0x88B842D9 2293777113
    537696 0xF6B70079 4139188345
    537697 0x42973866 1117206630
    537698 0x870EE7CC 2265901004
    537699 0x04FA0DF4 83496436
    537700 0xCE6B6DF2 3463146994
    537701 0x681355B8 1746097592
    537702 0x2FDDE377 803070839
    537703 0x5DA95A5F 1571379807
    537704 0x6F4182FB 1866564347
    537705 0x71EE93B1 1911460785
    537706 0x9C37EC7F 2620910719
    537707 0x07C15A05 130112005
    537708 0xC515051F 3306489119
    537709 0x04DAE94A 81455434
    537710 0xC2BC1F34 3267108660
    537711 0xA0D400E0 2698248416
    537712 0x4FB7A21F 1337434655
    537713 0x8B0DCB50 2332937040
    537714 0x34315C3A 875650106
    537715 0x22D16F0E 584150798
    537716 0x47594B80 1197034368
    537717 0xA50FD538 2769278264
    537718 0x2D37598A 758602122
    537719 0xDC9F8A8A 3701443210
    537720 0xEC4E29F5 3964545525
    537721 0x9D56908C 2639696012
    537722 0x2F139C10 789814288
    537723 0xA9B02137 2846892343
    537724 0x4551430F 1162953487
    537725 0xA082238E 2692883342
    537726 0x844E0F9E 2219708318
    537727 0xA5C2BF4C 2781003596
    537728 0x1BB25368 464671592
    537729 0xC30AF9F6 3272276470
    537730 0x85D3B380 2245243776
    537731 0xDF662346 3748012870
    537732 0x87082DDF 2265460191
    537733 0xDB00DAD2 3674266322
    537734 0xEF099DE4 4010384868
    537735 0x80143C67 2148809831
    537736 0x1BA1B8DC 463583452
    537737 0x2DF90E33 771296819
    537738 0x0626432C 103170860
    537739 0x86C83186 2261266822
    537740 0x04BAF589 79361417
    537741 0x8A158301 2316665601
    537742 0xB873EBD0 3094604752
    537743 0xF56A5FC8 4117389256
    537744 0xEDEEC64E 3991848526
    537745 0xA53DC6E9 2772289257
    537746 0xAA11023B 2853241403
    537747 0x40C2A2B8 1086497464
    537748 0xD6B13E2F 3601940015
    537749 0xA3ABB5B4 2745939380
    537750 0x59239B59 1495505753
    537751 0xF7219E7D 4146175613
    537752 0x8FDA493D 2413447485
    537753 0xF194CFC0 4053061568
    537754 0xCBD952D4 3420017364
    537755 0xC984A0DE 3380912350
    537756 0x19B6AFA7 431402919
    537757 0xA80FA67A 2819597946
    537758 0x8D64F1E8 2372202984
    537759 0xCCFAA318 3438977816
    537760 0x7371574F 1936807759
    537761 0x2C880F65 747114341
    537762 0x2156FBBE 559348670
    537763 0x14A382FA 346260218
    537764 0x195FD58D 425710989
    537765 0xA604B5E8 2785326568
    537766 0xC47D9127 3296563495
    537767 0x453CC35E 1161610078
    537768 0xF009C402 4027171842
    537769 0x53B34E41 1404259905
    537770 0xCC063625 3422959141
    537771 0x6EF0B18C 1861267852
    537772 0x147B48C9 343623881
    537773 0xD41046CB 3557836491
    537774 0xAC145BD8 2887015384
    537775 0xD2C86E83 3536350851
    537776 0xA13BAA01 2705041921
    537777 0xAC549D9E 2891226526
    537778 0x4F1764D8 1326933208
    537779 0x315429D3 827599315
    537780 0x27170202 655819266
    537781 0x538F3C01 1401895937
    537782 0x162B0859 371918937
    537783 0xF73AE189 4147831177
    537784 0xEFDA29B2 4024052146
    537785 0x53F0977E 1408276350
    537786 0xE27FF144 3800035652
    537787 0x31C6FD8B 835124619
    537788 0xAA1BB2C5 2853941957
    537789 0x14DE57CB 350115787
    537790 0x507C8359 1350337369
    537791 0x00B259F1 11688433
    537792 0xD58B11F4 3582661108
    537793 0x70771A9B 1886853787
    537794 0xB82B50D1 3089846481
    537795 0x756007DF 1969227743
    537796 0x961FDC70 2518670448
    537797 0x9389526C 2475250284
    537798 0x0428B43D 69776445
    537799 0xE41919FB 3826850299
    537800 0x82D87863 2195224675
    537801 0x3822EA18 941812248
    537802 0xEB01C7C9 3942762441
    537803 0xD57E5073 3581825139
    537804 0x644E96FC 1682872060
    537805 0xF0F7ED62 4042780002
    537806 0x9499C241 2493104705
    537807 0x33E2569B 870471323
    537808 0x98FA6672 2566547058
    537809 0x5B9B97D0 1536923600
    537810 0xB4B74AB5 3031911093
    537811 0xD2467962 3527833954
    537812 0x437D7715 1132295957
    537813 0xB6206B6B 3055577963
    537814 0xF720F39B 4146131867
    537815 0xD8E34492 3638772882
    537816 0x0EB868F2 246966514
    537817 0xDE5A3443 3730453571
    537818 0x81D23F12 2178039570
    537819 0x2FE4D007 803524615
    537820 0xA622F025 2787307557
    537821 0xA829D0AF 2821312687
    537822 0xDED93D8D 3738779021
    537823 0x5799C4A8 1469695144
    537824 0x758DBA29 1972222505
    537825 0x709155E1 1888572897
    537826 0xED672736 3982960438
    537827 0xA2479D66 2722602342
    537828 0x281E6685 673080965
    537829 0x1E2E25F5 506340853
    537830 0xBF1D5EFE 3206373118
    537831 0x74D9CA17 1960430103
    537832 0x169D1872 379394162
    537833 0xB6953E0C 3063234060
    537834 0xD6609A86 3596655238
    537835 0xBF622105 3210879237
    537836 0xE106BA1C 3775314460
    537837 0x370A04C6 923403462
    537838 0x0EB2D532 246601010
    537839 0xC78754EB 3347535083
    537840 0xBB12EBC1 3138579393
    537841 0xFE2D83BC 4264395708
    537842 0xC9196E37 3373887031
    537843 0x5474450C 1416905996
    537844 0x776294E9 2002949353
    537845 0xA6DD7F3C 2799533884
    537846 0x8C394E7C 2352565884
    537847 0x43FEDBC4 1140775876
    537848 0x781C8F30 2015137584
    537849 0x92B54189 2461352329
    537850 0xD0B1D306 3501314822
    537851 0x14436A6B 339962475
    537852 0x20ACEFA0 548204448
    537853 0x56E7CDA3 1458032035
    537854 0xB3E9FF40 3018456896
    537855 0x11B4D6F0 297064176
    537856 0x20F23827 552744999
    537857 0x8F9A7B61 2409266017
    537858 0xAABD1EAF 2864520879
    537859 0x0FFBBFE0 268156896
    537860 0x819F6D32 2174709042
    537861 0xF36A49E2 4083829218
    537862 0xD1082B87 3506973575
    537863 0x4983DE3C 1233378876
    537864 0x4A94F798 1251276696
    537865 0x1CB43637 481572407
    537866 0x9FDBE2F3 2681987827
    537867 0x192FB4DD 422556893
    537868 0x94A7C1A9 2494022057
    537869 0xA7D0B111 2815471889
    537870 0x543F79AE 1413446062
    537871 0xC2FF1917 3271498007
    537872 0xD1C7DF94 3519537044
    537873 0x23E21DCB 602021323
    537874 0x30B9D721 817485601
    537875 0xE1786615 3782764053
    537876 0xD4D45F32 3570687794
    537877 0xC072FC95 3228761237
    537878 0x6C952839 1821714489
    537879 0xD73AD161 3610956129
    537880 0x5C9B5234 1553682996
    537881 0x522E81D1 1378779601
    537882 0x1BA35ECD 463691469
    537883 0xA4DE4A8E 2766031502
    537884 0xD58CC441 3582772289
    537885 0x4515C2CE 1159054030
    537886 0x356FFBAA 896531370
    537887 0x73620F48 1935806280
    537888 0x1231651B 305227035
    537889 0x6CE42E06 1826893318
    537890 0xA7E8C834 2817050676
    537891 0x72033223 1912812067
    537892 0x7B392353 2067342163
    537893 0x027FDD98 41934232
    537894 0x37FFC098 939507864
    537895 0x60D1CBA4 1624361892
    537896 0x481B7B99 1209760665
    537897 0x508C4E92 1351372434
    537898 0x1A6F4B14 443501332
    537899 0x1A5FD807 442488839
    537900 0xE91E3D57 3911073111
    537901 0x3D1F2CA6 1025453222
    537902 0x81AD649D 2175624349
    537903 0x5C214FD0 1545686992
    537904 0x448367ED 1149462509
    537905 0x76E41D99 1994661273
    537906 0x0DA88AAF 229149359
    537907 0x4D3B7091 1295741073
    537908 0x99232210 2569216528
    537909 0xDB8D5123 3683471651
    537910 0x6E851FF5 1854218229
    537911 0xA17D3165 2709336421
    537912 0x870F2B93 2265918355
    537913 0x3EC395A4 1053005220
    537914 0x8A77AD6C 2323098988
    537915 0x1FF8EB4A 536406858
    537916 0x6ECC13A2 1858868130
    537917 0x44979136 1150783798
    537918 0x6CE685AA 1827046826
    537919 0xA1DB8A50 2715519568
    537920 0xD8FFE63C 3640649276
    537921 0x12750E31 309661233
    537922 0x751747C3 1964459971
    537923 0x682695B5 1747359157
    537924 0x1ED43C28 517225512
    537925 0x94C849C0 2496154048
    537926 0x208A8DE1 545951201
    537927 0xF73C61EF 4147929583
    537928 0xEF73339D 4017304477
    537929 0x2E8210E1 780275937
    537930 0xE87755A6 3900134822
    537931 0xF0A6C5FC 4037461500
    537932 0xA45CF030 2757554224
    537933 0x1A8B9D46 445357382
    537934 0xE3ECCC5C 3823946844
    537935 0x4AF9EF01 1257893633
    537936 0x94C60433 2496005171
    537937 0xCF898432 3481895986
    537938 0x1F2310DA 522391770
    537939 0x6D1223A5 1829905317
    537940 0x2953126F 693310063
    537941 0x1B6FDA20 460315168
    537942 0x648484D0 1686406352
    537943 0x42260C80 1109789824
    537944 0xF374FF1A 4084530970
    537945 0x50BF0D57 1354698071
    537946 0xED64FB06 3982818054
    537947 0xE03A6151 3761922385
    537948 0x5972A3E8 1500685288
    537949 0x4AE74289 1256669833
    537950 0x8A2AC2BF 2318058175
    537951 0x139834BF 328742079
    537952 0x5FD3A9F1 1607707121
    537953 0xAD9D920E 2912784910
    537954 0xD798800B 3617095691
    537955 0x2B2CF604 724366852
    537956 0xF390B148 4086346056
    537957 0x2AB48E9A 716476058
    537958 0x2F257480 790983808
    537959 0x939CFDAD 2476539309
    537960 0xA513911C 2769522972
    537961 0xF0897469 4035540073
    537962 0xA524C5EA 2770650602
    537963 0xCF9D021B 3483173403
    537964 0x6A9DC536 1788724534
    537965 0xE08655B3 3766900147
    537966 0xF7764717 4151723799
    537967 0xC85711BA 3361149370
    537968 0x9640E96C 2520836460
    537969 0xC3B5FDF6 3283484150
    537970 0xD3F12C87 3555798151
    537971 0x2AB2B3E2 716354530
    537972 0xC88ECBF9 3364801529
    537973 0x2FE6D7C5 803657669
    537974 0x5C8D5F8C 1552768908
    537975 0x60635379 1617122169
    537976 0xC53917BE 3308853182
    537977 0x5649D0B2 1447678130
    537978 0xA34BFE97 2739666583
    537979 0x3943AC99 960736409
    537980 0xFB586724 4216874788
    537981 0xA24E8B28 2723056424
    537982 0x384D23D8 944579544
    537983 0x5304FBBE 1392835518
    537984 0xDEA1010F 3735093519
    537985 0xCF17C086 3474440326
    537986 0x9F548B04 2673117956
    537987 0x127EF1A2 310309282
    537988 0x5910BEC9 1494269641
    537989 0x461A744B 1176138827
    537990 0xCE39B461 3459888225
    537991 0xD6DFF244 3605000772
    537992 0x4ACC9D1E 1254923550
    537993 0xEEDCC95E 4007446878
    537994 0xA138BE04 2704850436
    537995 0x43C56352 1137009490
    537996 0x51AE9AFC 1370397436
    537997 0xED6BD961 3983268193
    537998 0x7E0BAF22 2114694946
    537999 0x304BA889 810264713
    538000 0x4F7AA322 1333437218
    538001 0x8C123383 2350003075
    538002 0xB5F2A332 3052577586
    538003 0xB7AB0878 3081439352
    538004 0x29808EBC 696291004
    538005 0xE8690AF6 3899198198
    538006 0x11888100 294158592
    538007 0x56D5F709 1456862985
    538008 0x978C2A2D 2542545453
    538009 0x250B750E 621507854
    538010 0xECEB1E38 3974831672
    538011 0x40E28981 1088588161
    538012 0xA02B0A4A 2687175242
    538013 0x71FBE529 1912333609
    538014 0x88A0D045 2292240453
    538015 0x37796890 930703504
    538016 0x6D103E33 1829781043
    538017 0x2E6DC2B4 778945204
    538018 0xC3E9E00C 3286884364
    538019 0x6EC8264A 1858610762
    538020 0x131533D1 320156625
    538021 0x0DB17275 229732981
    538022 0x5682198A 1451366794
    538023 0xE3B27EA7 3820125863
    538024 0x06EF590C 116349196
    538025 0x889A77D3 2291824595
    538026 0x6D34B4CC 1832170700
    538027 0x0B073F31 185024305
    538028 0x1A28A849 438872137
    538029 0x79432D6D 2034445677
    538030 0x15F6B679 368490105
    538031 0x0C04367C 201602684
    538032 0x10D959BA 282679738
    538033 0x0ED30B44 248712004
    538034 0xE8A7616E 3903283566
    538035 0x259F25A0 631186848
    538036 0x5EDFF112 1591734546
    538037 0xAFFBA16E 2952503662
    538038 0x63BB768C 1673229964
    538039 0x23CFCF0E 600821518
    538040 0x187E9BEA 410950634
    538041 0xCDAB6DA9 3450564009
    538042 0x62926AE6 1653762790
    538043 0xEF2252CB 4012004043
    538044 0x909B53AD 2426098605
    538045 0xE3EB2AD5 3823839957
    538046 0x2E3CC9BE 775735742
    538047 0x5622D624 1445123620
    538048 0xCE7CF2E1 3464295137
    538049 0x4DD9FEDA 1306132186
    538050 0x1771E1FB 393339387
    538051 0x6CAD2172 1823285618
    538052 0x528E6F53 1385066323
    538053 0x017B4A66 24857190
    538054 0xC13F7DB6 3242163638
    538055 0x88545F85 2287230853
    538056 0xE8CE7B72 3905846130
    538057 0x6AB9064A 1790510666
    538058 0x2CE84571 753419633
    538059 0x82A2AC20 2191698976
    538060 0x1E6FE20E 510648846
    538061 0x622D40BC 1647132860
    538062 0x9491D32D 2492584749
    538063 0x6A481316 1783108374
    538064 0x0C4559E7 205871591
    538065 0xD98681F0 3649470960
    538066 0xA72C66E6 2804704998
    538067 0x924EC521 2454635809
    538068 0x89CB6A04 2311809540
    538069 0xD158C5C7 3512255943
    538070 0x933BF94C 2470181196
    538071 0xC3EB7B16 3286989590
    538072 0xB0642377 2959352695
    538073 0xDA9048F4 3666888948
    538074 0x18BAE6D0 414901968
    538075 0x617FB6E1 1635759841
    538076 0x1D311A80 489757312
    538077 0x2EE2F77A 786626426
    538078 0x3580F7B5 897644469
    538079 0xF4BCEB67 4106021735
    538080 0x59974B84 1503087492
    538081 0xD1367914 3510008084
    538082 0x5F59C905 1599719685
    538083 0x1C2E8928 472811816
    538084 0xE502D304 3842167556
    538085 0x129C84A6 312247462
    538086 0x1D3B50DF 490426591
    538087 0xD6765CC7 3598081223
    538088 0xDE14E2F2 3725910770
    538089 0x9E0BA738 2651563832
    538090 0xECA8D2AC 3970486956
    538091 0x191ED03A 421449786
    538092 0xE097A846 3768035398
    538093 0x5AF30AD5 1525877461
    538094 0x1EE3F68C 518256268
    538095 0x3AEA604B 988438603
    538096 0xE412E5C2 3826443714
    538097 0x5F873185 1602695557
    538098 0x0C025A71 201480817
    538099 0x8479D87E 2222577790
    538100 0x15408C76 356551798
    538101 0x707B561F 1887131167
    538102 0x7FCF7693 2144302739
    538103 0x60C5A8C7 1623566535
    538104 0x30DFBC4C 819969100
    538105 0x0B642F3C 191115068
    538106 0x1B0CA095 453812373
    538107 0x5954A2F8 1498718968
    538108 0xCB76E411 3413566481
    538109 0x1A6CEFD3 443346899
    538110 0x9E3B0CA1 2654669985
    538111 0xE1939E09 3784547849
    538112 0x75D5DACE 1976949454
    538113 0xAB129A91 2870123153
    538114 0x31F3A743 838051651
    538115 0x517A3FA3 1366966179
    538116 0x8CCDC092 2362294418
    538117 0x22D73D01 584531201
    538118 0x399DFD60 966655328
    538119 0x22D4D071 584372337
    538120 0x03814777 58804087
    538121 0x508FA982 1351592322
    538122 0x1B0DA597 453879191
    538123 0x627C55D1 1652315601
    538124 0x894061A0 2302697888
    538125 0x19F5A8FB 435529979
    538126 0x47EE3C1C 1206795292
    538127 0x5B68B0E6 1533587686
    538128 0x9AA4EC5A 2594499674
    538129 0x1052D495 273863829
    538130 0x8AA1D82E 2325862446
    538131 0xEFCE487E 4023273598
    538132 0xF5CF47A6 4124002214
    538133 0x219DFE4D 564002381
    538134 0x72E1ABA2 1927392162
    538135 0xCF0B0FD9 3473608665
    538136 0xAF32F01A 2939351066
    538137 0x3D72EBDB 1030941659
    538138 0x2F67B681 795326081
    538139 0x380B3D5E 940260702
    538140 0xF5D4862E 4124345902
    538141 0xE1E19048 3789656136
    538142 0x6BBECB2F 1807665967
    538143 0xEF64509C 4016328860
    538144 0x961F7206 2518643206
    538145 0x43ABF730 1135343408
    538146 0xAF11CD1A 2937179418
    538147 0xC62E2E5D 3324915293
    538148 0x24A3BB61 614710113
    538149 0x05C830A2 97005730
    538150 0xE31BB251 3810243153
    538151 0x54C7BB09 1422375689
    538152 0xB1F0E404 2985354244
    538153 0x59E0C239 1507902009
    538154 0x84573368 2220307304
    538155 0x4B13EAA4 1259596452
    538156 0x2C247A25 740588069
    538157 0x48EDB641 1223538241
    538158 0x77A992C3 2007601859
    538159 0x7CE0A1FD 2095096317
    538160 0xB37D5CDA 3011337434
    538161 0xA216D679 2719405689
    538162 0x8496A983 2224466307
    538163 0xEC4BB89B 3964385435
    538164 0xE7BF68BD 3888081085
    538165 0x108C0114 277610772
    538166 0x7799036C 2006516588
    538167 0xD88D369B 3633133211
    538168 0xCF772CE4 3480693988
    538169 0x9A55522A 2589282858
    538170 0x42F9310A 1123627274
    538171 0xDA87A79C 3666323356
    538172 0xAFC9FCE6 2949250278
    538173 0x49EEBEB8 1240383160
    538174 0xAFF96C04 2952358916
    538175 0x03FA7B1E 66747166
    538176 0xF5247F56 4112809814
    538177 0x984F3419 2555327513
    538178 0x7357651E 1935107358
    538179 0x701E96EC 1881052908
    538180 0x80700378 2154824568
    538181 0xB81136D4 3088135892
    538182 0x66864306 1720075014
    538183 0xC3572F3A 3277270842
    538184 0x92E94EC1 2464763585
    538185 0x930679BD 2466675133
    538186 0xD8DB3165 3638243685
    538187 0x56E217A4 1457657764
    538188 0x09F37B46 166951750
    538189 0xC6FD076F 3338471279
    538190 0x12743396 309605270
    538191 0xB4E60E94 3034975892
    538192 0x25198985 622430597
    538193 0xA27E35B3 2726180275
    538194 0x96698E72 2523500146
    538195 0x24864205 612778501
    538196 0xEE5C0D4A 3999010122
    538197 0x8356DC11 2203507729
    538198 0x9EA1A0B1 2661392561
    538199 0xAC7F3C65 2894019685
    538200 0xD617F1D8 3591893464
    538201 0xA4607BA7 2757786535
    538202 0xDC77CE8F 3698839183
    538203 0xFB88AEAB 4220038827
    538204 0xD8361519 3627423001
    538205 0xE5B9F001 3854168065
    538206 0x5A9390BF 1519620287
    538207 0x06B01781 112203649
    538208 0x6A3F799E 1782544798
    538209 0xB1DC7085 2984013957
    538210 0xC4FB3B7D 3304799101
    538211 0xC4E82C38 3303550008
    538212 0x22B4B206 582267398
    538213 0x083A6C95 138046613
    538214 0x7AA2131D 2057442077
    538215 0xBB6F331F 3144626975
    538216 0x934341B0 2470658480
    538217 0x0C289AB3 203987635
    538218 0x64CB0E8B 1691029131
    538219 0x4AD48949 1255442761
    538220 0xB6A7B6A2 3064444578
    538221 0x2356CA0D 592890381
    538222 0x69894E57 1770606167
    538223 0xC63F76A8 3326047912
    538224 0x66BEB1AA 1723773354
    538225 0x16509587 374379911
    538226 0xAD93359E 2912105886
    538227 0x96DC1769 2531006313
    538228 0x12BA9D50 314219856
    538229 0x55E1103E 1440813118
    538230 0xC8A65C06 3366345734
    538231 0x5FCACB86 1607125894
    538232 0xA01D019B 2686255515
    538233 0xAAA5D322 2862994210
    538234 0x462EC0BD 1177469117
    538235 0x950EA02C 2500763692
    538236 0x3B9A82A1 999981729
    538237 0x8400BA11 2214640145
    538238 0x4DFE8B83 1308527491
    538239 0x6AA1624E 1788961358
    538240 0xDBB52C0F 3686083599
    538241 0x2E35A7E0 775268320
    538242 0xD304CD52 3540307282
    538243 0x2A8CFDF5 713883125
    538244 0x00A31BB6 10689462
    538245 0x9D2CE08C 2636963980
    538246 0x4A4EB5C8 1246672328
    538247 0x614E3D1C 1632517404
    538248 0x78E87C45 2028502085
    538249 0x3AC2E3B1 985850801
    538250 0xA66816DD 2791839453
    538251 0xDA5A3210 3663344144
    538252 0x782C7DCF 2016181711
    538253 0xE3DBBC5B 3822828635
    538254 0x31D163B4 835806132
    538255 0x140840DB 336085211
    538256 0xB0309B46 2955975494
    538257 0x25750583 628426115
    538258 0x120C9831 302815281
    538259 0x30ED5290 820859536
    538260 0xCE6DC246 3463299654
    538261 0xBC2689A8 3156642216
    538262 0x85922CEB 2240949483
    538263 0x8A72F9B0 2322790832
    538264 0x0E71BDF6 242335222
    538265 0x0B9426DC 194258652
    538266 0xD0E83681 3504879233
    538267 0x2EF577A0 787838880
    538268 0x56151207 1444221447
    538269 0x88D7260F 2295801359
    538270 0xCABBA987 3401296263
    538271 0x038D4AF9 59591417
    538272 0x8D241F97 2367954839
    538273 0xE63050A2 3861926050
    538274 0x80BA0403 2159674371
    538275 0x2FA52E2D 799354413
    538276 0x5530FD1D 1429273885
    538277 0x5A1A7BE4 1511685092
    538278 0x86687E69 2254995049
    538279 0xD0ED5643 3505215043
    538280 0xA7C1C8CB 2814494923
    538281 0x96A931CD 2527670733
    538282 0xE5E1A6B4 3856770740
    538283 0x11BF4348 297747272
    538284 0xE997830E 3919020814
    538285 0x4684B469 1183102057
    538286 0xD4E8BA0E 3572021774
    538287 0xE37DB1D0 3816665552
    538288 0x98170780 2551646080
    538289 0xC13FDDE5 3242188261
    538290 0xCE8382E0 3464725216
    538291 0xE2E96539 3806946617
    538292 0x5E8893B9 1586009017
    538293 0xE5A30D24 3852668196
    538294 0x43A65805 1134974981
    538295 0x73BC9D96 1941740950
    538296 0x194E8346 424575814
    538297 0x66DB4BA3 1725647779
    538298 0xF199C1D4 4053385684
    538299 0x07DB018B 131793291
    538300 0x4D765AA2 1299602082
    538301 0x5442B512 1413657874
    538302 0x40768401 1081508865
    538303 0x487D5C36 1216175158
    538304 0x1E06E3C8 503768008
    538305 0x14A6D99C 346479004
    538306 0x778F59DF 2005883359
    538307 0xCCE3D794 3437483924
    538308 0x16F30115 385024277
    538309 0x28CDD9E6 684579302
    538310 0x55AD4517 1437418775
    538311 0xF373898A 4084435338
    538312 0x429704DE 1117193438
    538313 0x6E90DAD2 1854986962
    538314 0x831F074B 2199848779
    538315 0x2EAD39D0 783104464
    538316 0x2C3E4FED 742281197
    538317 0xA833C4B2 2821964978
    538318 0xB1A173BB 2980148155
    538319 0x75F13F85 1978744709
    538320 0x83CDB776 2211297142
    538321 0x818041AA 2172666282
    538322 0x5C48301D 1548234781
    538323 0x6D112501 1829840129
    538324 0xE783CCA4 3884174500
    538325 0x075175EB 122779115
    538326 0x1F16ED66 521596262
    538327 0x08BFC0E4 146784484
    538328 0xE9B5966E 3920991854
    538329 0x48D26E2A 1221750314
    538330 0x3502F523 889386275
    538331 0x90B10E55 2427522645
    538332 0x30DA2AA8 819604136
    538333 0x4520190A 1159731466
    538334 0xB88AD006 3096104966
    538335 0xADB52593 2914330003
    538336 0xC197F22C 3247960620
    538337 0x62BDA668 1656596072
    538338 0x01FA3F3D 33177405
    538339 0xE59F0284 3852403332
    538340 0x6D94114F 1838420303
    538341 0x42D992A1 1121555105
    538342 0x2F92831F 798130975
    538343 0x89A73E36 2309439030
    538344 0x4087675E 1082615646
    538345 0x0410412C 68174124
    538346 0x8C4EB755 2353968981
    538347 0xF15B9DD0 4049313232
    538348 0x5203F035 1375989813
    538349 0x2F814AAE 797002414
    538350 0x27F043D1 670057425
    538351 0xB0F3A282 2968756866
    538352 0x28E0A40E 685810702
    538353 0x1784D9C4 394582468
    538354 0x5D68EC4C 1567157324
    538355 0x61F4829D 1643414173
    538356 0x73C7D9CC 1942477260
    538357 0xCB3826E0 3409454816
    538358 0x9F05F298 2667967128
    538359 0x01C464D1 29648081
    538360 0xA8F42823 2834573347
    538361 0x9BA22CFF 2611096831
    538362 0xE92508B1 3911518385
    538363 0xA628FB2A 2787703594
    538364 0x30AE2A46 816720454
    538365 0xE3955C70 3818216560
    538366 0x65C45A2D 1707366957
    538367 0x1B686FA8 459829160
    538368 0x58980B43 1486359363
    538369 0x5871C363 1483850595
    538370 0x9B405CF4 2604686580
    538371 0x2E39B65E 775534174
    538372 0xB32F5DAE 3006225838
    538373 0x9D500B7E 2639268734
    538374 0x25DFCEC5 635424453
    538375 0x52EB94C3 1391170755
    538376 0x803070DD 2150658269
    538377 0x3148D92E 826857774
    538378 0x417D02EC 1098711788
    538379 0x78C40241 2026111553
    538380 0xB61C8302 3055321858
    538381 0x51EFF088 1374679176
    538382 0xE5F964B7 3858326711
    538383 0x69F9AE05 1777970693
    538384 0xB0B04A3A 2964343354
    538385 0x9EFCA524 2667357476
    538386 0xD0723031 3497144369
    538387 0x9C8EF62C 2626614828
    538388 0x9E4D98B8 2655885496
    538389 0x4E1762BA 1310155450
    538390 0x8FAB5617 2410370583
    538391 0x702B7E3D 1881898557
    538392 0x04F7C684 83347076
    538393 0xC4515E26 3293666854
    538394 0xC8AE6994 3366873492
    538395 0x1CB10092 481362066
    538396 0x2DD59379 768971641
    538397 0x8A5DD376 2321404790
    538398 0x5CE0AFE0 1558228960
    538399 0x460AF466 1175123046
    538400 0xB2E6F225 3001479717
    538401 0xA1FB610F 2717606159
    538402 0xA6DD551C 2799523100
    538403 0x2AB003BC 716178364
    538404 0x8F8F7B11 2408545041
    538405 0xF4A3ACF0 4104367344
    538406 0xE2969947 3801520455
    538407 0x077D19BD 125639101
    538408 0x94BDDC89 2495470729
    538409 0x76C3F6B2 1992554162
    538410 0x205A1515 542774549
    538411 0xE66F4F4B 3866054475
    538412 0x0E0C001C 235667484
    538413 0xC010B7F6 3222321142
    538414 0x1DFD2484 503129220
    538415 0x783DD400 2017317888
    538416 0xD9546D6E 3646188910
    538417 0x25002E49 620768841
    538418 0x82E08EAE 2195754670
    538419 0xD9B7049F 3652650143
    538420 0x3FF2FA1C 1072888348
    538421 0xAF6E46B3 2943239859
    538422 0x75440849 1967392841
    538423 0x11561456 290853974
    538424 0x497968D9 1232693465
    538425 0xF3B33D65 4088610149
    538426 0x10061DB0 268836272
    538427 0x55F2DB76 1441979254
    538428 0x709BD39A 1889260442
    538429 0x6E48C578 1850262904
    538430 0xB267A1D5 2993136085
    538431 0x1E3FD591 507499921
    538432 0xF47C6F7D 4101795709
    538433 0xA058904A 2690158666
    538434 0xB435D102 3023425794
    538435 0x1381E645 327280197
    538436 0x3097C575 815252853
    538437 0xAB17F8B8 2870474936
    538438 0x1A14E45A 437576794
    538439 0xE649A8FA 3863587066
    538440 0x40CA4FD5 1087000533
    538441 0x586E7F72 1483636594
    538442 0x33718AC1 863079105
    538443 0x136CC99C 325896604
    538444 0xE44D3C15 3830266901
    538445 0x1F1C81D1 521961937
    538446 0x8753BB5A 2270411610
    538447 0x22854DF0 579161584
    538448 0xCB8F83E8 3415180264
    538449 0x8B378106 2335670534
    538450 0xD66EEAFA 3597593338
    538451 0xA8E81799 2833782681
    538452 0xD99541B6 3650437558
    538453 0x9395A608 2476058120
    538454 0x8E570624 2388067876
    538455 0x63A84714 1671972628
    538456 0x638CABA0 1670163360
    538457 0x363DFC74 910031988
    538458 0x4FC41B83 1338252163
    538459 0x79A447B4 2040809396
    538460 0x94BB5C58 2495306840
    538461 0x9BE68725 2615576357
    538462 0x84445C05 2219072517
    538463 0x6A867A49 1787198025
    538464 0xCFB56396 3484771222
    538465 0x29CC5E15 701259285
    538466 0xAB776859 2876729433
    538467 0x686C6059 1751933017
    538468 0x79F09216 2045809174
    538469 0x0B5D830C 190677772
    538470 0x0DB1C235 229753397
    538471 0xDDAF1CD2 3719240914
    538472 0x531267A6 1393715110
    538473 0x2B168F9E 722898846
    538474 0x9972432D 2574402349
    538475 0x88DBFC5E 2296118366
    538476 0xEC077F54 3959914324
    538477 0x0BCE3304 198062852
    538478 0xDCFD8BCD 3707603917
    538479 0x69097656 1762227798
    538480 0x6AE9545E 1793676382
    538481 0x8178FC65 2172189797
    538482 0x6F232471 1864574065
    538483 0xED8F0580 3985573248
    538484 0xD31EF44E 3542021198
    538485 0xF95A27D4 4183435220
    538486 0xD6DC92E2 3604779746
    538487 0x89D4852C 2312406316
    538488 0xD58A0152 3582591314
    538489 0x92C839B1 2462595505
    538490 0xA959A7F5 2841225205
    538491 0xF0112197 4027654551
    538492 0x634010BC 1665142972
    538493 0xC36C12EA 3278639850
    538494 0x565FA66E 1449109102
    538495 0x5E7B9425 1585157157
    538496 0x54595AAB 1415142059
    538497 0xD2475BD9 3527891929
    538498 0x57938630 1469285936
    538499 0x04E0EDDE 81849822
    538500 0x7278E330 1920525104
    538501 0xCBB669BF 3417729471
    538502 0x4705CE19 1191562777
    538503 0xA6E62859 2800101465
    538504 0x263F978C 641701772
    538505 0xCAC848D1 3402123473
    538506 0xE5A64E21 3852881441
    538507 0xA4BD7CEA 2763881706
    538508 0xD0365F29 3493224233
    538509 0x0214956F 34903407
    538510 0x693F8981 1765771649
    538511 0xA526071C 2770732828
    538512 0x6534F939 1697970489
    538513 0xC4563E30 3293986352
    538514 0x8E0D2952 2383227218
    538515 0x77A81FBC 2007506876
    538516 0x325FF260 845148768
    538517 0x2A53B03C 710127676
    538518 0x153FAE4D 356494925
    538519 0x90D34748 2429765448
    538520 0x97D0F292 2547053202
    538521 0x488DC5AD 1217250733
    538522 0x5FB4DE45 1605688901
    538523 0x904E315E 2421043550
    538524 0x09638813 157517843
    538525 0x5CBC7A44 1555855940
    538526 0xACE27790 2900522896
    538527 0x29D87A83 702052995
    538528 0xEE00E772 3993036658
    538529 0xF0236255 4028850773
    538530 0x81204A71 2166377073
    538531 0xF65E0145 4133355845
    538532 0xB225F558 2988832088
    538533 0x522B406F 1378566255
    538534 0x49C7690C 1237805324
    538535 0xBB5C1959 3143375193
    538536 0x3112232F 823272239
    538537 0x1E22BA9A 505592474
    538538 0x70FE33A7 1895707559
    538539 0x5EE9587B 1592350843
    538540 0xB5DE05B5 3051226549
    538541 0xFED8C197 4275618199
    538542 0x494828ED 1229465837
    538543 0x62ADB076 1655550070
    538544 0x56498A4A 1447660106
    538545 0x34CBD790 885774224
    538546 0xA7BC470F 2814134031
    538547 0x319F2F1B 832515867
    538548 0x74C75047 1959219271
    538549 0xA4DD1C26 2765954086
    538550 0xD459DA95 3562658453
    538551 0xA5EB1964 2783648100
    538552 0xE61A1A3E 3860470334
    538553 0x6FF92EB7 1878601399
    538554 0xE9850DA1 3917811105
    538555 0xEC0D4E00 3960294912
    538556 0xCECF7576 3469702518
    538557 0x5435748D 1412789389
    538558 0xA5DB8D1B 2782629147
    538559 0xC3661513 3278247187
    538560 0xC6DD80EA 3336405226
    538561 0xB2ADB34E 2997728078
    538562 0xAA7F696D 2860476781
    538563 0x323BC5E0 842778080
    538564 0x44222D2A 1143090474
    538565 0x99A5C3CA 2577777610
    538566 0xE42324BB 3827508411
    538567 0xA324A7BB 2737088443
    538568 0x7C0C5BEF 2081184751
    538569 0xF6036407 4127417351
    538570 0x51A04427 1369457703
    538571 0x73008983 1929415043
    538572 0x8582851A 2239923482
    538573 0x1B183A6B 454572651
    538574 0x4AEA6070 1256874096
    538575 0xC522B97A 3307387258
    538576 0x35830EB8 897781432
    538577 0x8EDD03BE 2396849086
    538578 0x5EE2A61D 1591911965
    538579 0x286E3E54 678313556
    538580 0xDC4B1CB5 3695910069
    538581 0x8A1E422C 2317238828
    538582 0x1E549937 508860727
    538583 0x48C29568 1220711784
    538584 0xF1FA8C88 4059729032
    538585 0x4015A5C3 1075160515
    538586 0x6D05725C 1829073500
    538587 0x085AC6CA 140166858
    538588 0xA2982514 2727879956
    538589 0x0745EFE2 122023906
    538590 0xB09DD71C 2963134236
    538591 0x0881A64A 142714442
    538592 0x36430C1E 910363678
    538593 0xA60718BE 2785482942
    538594 0x62C14E9D 1656835741
    538595 0x4CCCAB6B 1288481643
    538596 0x222578DC 572881116
    538597 0x6363FC39 1667497017
    538598 0x85A2890A 2242021642
    538599 0xC337B2C4 3275207364
    538600 0x2D15D83D 756406333
    538601 0x86B36A10 2259905040
    538602 0x537B28B9 1400580281
    538603 0x544477CD 1413773261
    538604 0x718ECF58 1905184600
    538605 0x49D2A585 1238541701
    538606 0x33A2BB90 866302864
    538607 0x17A26262 396517986
    538608 0xEABD201E 3938263070
    538609 0xAC81481F 2894153759
    538610 0x0FF54012 267730962
    538611 0x473A964A 1195021898
    538612 0xDC0690EF 3691417839
    538613 0x417BB508 1098626312
    538614 0x5EF7FCFA 1593310458
    538615 0x80ED84AC 2163049644
    538616 0x6A897CD7 1787395287
    538617 0x253C2515 624698645
    538618 0x8AC88177 2328396151
    538619 0x757D117C 1971130748
    538620 0x9F9FE1F2 2678055410
    538621 0xB3E39402 3018036226
    538622 0x276D7009 661483529
    538623 0x6C38A410 1815651344
    538624 0x24717272 611414642
    538625 0xC7FCAB00 3355224832
    538626 0x50BB09F2 1354435058
    538627 0xA1CB2F6D 2714447725
    538628 0xD290D449 3532706889
    538629 0xC6CFA492 3335496850
    538630 0xCD570D03 3445034243
    538631 0xB8588D69 3092811113
    538632 0x185264B3 408052915
    538633 0xD86464DC 3630458076
    538634 0xD9D0361C 3654301212
    538635 0x46A1DD51 1185013073
    538636 0x8BF82CC7 2348297415
    538637 0x2BA91030 732500016
    538638 0xE2FACD36 3808087350
    538639 0x459CF017 1167912983
    538640 0xB0DC4AD5 2967227093
    538641 0x547ED29E 1417597598
    538642 0x4722623A 1193435706
    538643 0x33C830E7 868757735
    538644 0x27A1FF85 664928133
    538645 0xF47FE2E0 4102021856
    538646 0x677C1648 1736185416
    538647 0x808CEB56 2156718934
    538648 0x8A6B5BCE 2322291662
    538649 0xCD7F3911 3447666961
    538650 0x29485F64 692608868
    538651 0xD0A22937 3500288311
    538652 0x01C8507A 29905018
    538653 0xCA826CB3 3397545139
    538654 0xDB341C03 3677625347
    538655 0x6E2A4B18 1848265496
    538656 0x01B7CB4D 28822349
    538657 0xEBB1E9ED 3954305517
    538658 0xF31E60A4 4078854308
    538659 0x16A2430C 379732748
    538660 0x9CC86C0C 2630380556
    538661 0x19BB8061 431718497
    538662 0xCD1932DF 3440980703
    538663 0x54EB7420 1424716832
    538664 0x958FB719 2509223705
    538665 0x9AA13365 2594255717
    538666 0xCDAE1367 3450737511
    538667 0x9C29AB39 2619976505
    538668 0x058593E8 92640232
    538669 0x32567EF9 844529401
    538670 0x5C94EAEB 1553263339
    538671 0x1DF2B2FA 502444794
    538672 0x47DD2ED2 1205677778
    538673 0xB56853F0 3043513328
    538674 0xA42D2B8A 2754423690
    538675 0x83C1F3E6 2210526182
    538676 0x8C821C4B 2357337163
    538677 0xE3715EA3 3815857827
    538678 0x98A6100A 2561019914
    538679 0x82D1D5D8 2194789848
    538680 0xE4447C38 3829693496
    538681 0xA9A1F334 2845963060
    538682 0x1A9B3B39 446380857
    538683 0x761FF139 1981804857
    538684 0x86031DE3 2248351203
    538685 0xB097501A 2962706458
    538686 0xCAEF11DC 3404665308
    538687 0x9AC9952C 2596902188
    538688 0x5574B1F9 1433711097
    538689 0xE104A8C0 3775178944
    538690 0xF71D53C9 4145894345
    538691 0x42953B35 1117076277
    538692 0x6A19498B 1780042123
    538693 0xA39B8DB5 2744880565
    538694 0x03AADB55 61528917
    538695 0x27A1B52D 664909101
    538696 0xFEF8001E 4277665822
    538697 0x3424079C 874776476
    538698 0x655F2BE0 1700735968
    538699 0xB5285225 3039318565
    538700 0xD4BB1D06 3569032454
    538701 0x5F717081 1601269889
    538702 0xBDA099A6 3181418918
    538703 0x764DBAC5 1984805573
    538704 0x5D77A070 1568120944
    538705 0xF8C5D039 4173713465
    538706 0xC4BA0C80 3300527232
    538707 0xAA7EAE14 2860428820
    538708 0x4F226E98 1327656600
    538709 0x495E5CA5 1230920869
    538710 0xE3ECCE49 3823947337
    538711 0x15700867 359663719
    538712 0x29D12C8A 701574282
    538713 0xC7134F2A 3339931434
    538714 0xEEB66B9F 4004932511
    538715 0x4455B1D6 1146466774
    538716 0xF27C58AA 4068235434
    538717 0x80C2A8B2 2160240818
    538718 0xAD76D91A 2910247194
    538719 0x292ECBBC 690932668
    538720 0xEB0CEB7A 3943492474
    538721 0x0B39C986 188336518
    538722 0xCBEAC47A 3421160570
    538723 0xF520CF94 4112568212
    538724 0x0E22DE71 237166193
    538725 0xAACA82AD 2865398445
    538726 0xC08E3613 3230545427
    538727 0xE1AEB71C 3786323740
    538728 0xF6A86355 4138230613
    538729 0xE6409A01 3862993409
    538730 0xF1470A28 4047964712
    538731 0xDF9E739C 3751703452
    538732 0x9F242F10 2669948688
    538733 0xCA7A9E3E 3397033534
    538734 0x9A762790 2591434640
    538735 0xD3091FC1 3540590529
    538736 0xF5D96F23 4124667683
    538737 0x5B5F8BF8 1532988408
    538738 0xCE69BC19 3463035929
    538739 0xFA1B9BA8 4196113320
    538740 0x9C8CB970 2626468208
    538741 0xDC71095C 3698395484
    538742 0x071F7BEC 119503852
    538743 0x7400ED3A 1946217786
    538744 0x1F0D3CAE 520961198
    538745 0x6BC607AF 1808140207
    538746 0x6B8D31AF 1804415407
    538747 0x8629F8AE 2250897582
    538748 0x14FF7400 352285696
    538749 0xC3B5BC9D 3283467421
    538750 0x29CB2575 701179253
    538751 0x861AED3D 2249911613
    538752 0x42AAA3CD 1118479309
    538753 0x44C0B0B6 1153478838
    538754 0x87AD78C1 2276292801
    538755 0x5CE6831E 1558610718
    538756 0xAD4B0CF7 2907376887
    538757 0x958065C0 2508219840
    538758 0x4179B5A0 1098495392
    538759 0xA6766FBE 2792779710
    538760 0xA945A40D 2839913485
    538761 0x5F8801E3 1602748899
    538762 0x5C18DED4 1545133780
    538763 0x8D3B4284 2369471108
    538764 0x60BA61CA 1622827466
    538765 0x5C5DDEBC 1549655740
    538766 0x4A307A20 1244690976
    538767 0x4399D940 1134156096
    538768 0x97E2F94F 2548234575
    538769 0x1F48A827 524855335
    538770 0x88C31D10 2294488336
    538771 0xF44D4700 4098705152
    538772 0xE464DA81 3831814785
    538773 0x6E7A6187 1853514119
    538774 0x448F6E9A 1150250650
    538775 0xED003AA2 3976215202
    538776 0x1AF65C81 452353153
    538777 0x36DA69E0 920283616
    538778 0x417C436A 1098662762
    538779 0x8B5DEA00 2338187776
    538780 0x97ECE049 2548883529
    538781 0x52F85F9B 1392009115
    538782 0x80370F89 2151092105
    538783 0x2796E165 664199525
    538784 0x8D019EE9 2365693673
    538785 0xE1E18CCD 3789655245
    538786 0x86B198AB 2259785899
    538787 0x6BEBF3F0 1810625520
    538788 0x3D4B8620 1028359712
    538789 0x6F8F030C 1871643404
    538790 0xC6798969 3329853801
    538791 0xEB9FFD16 3953130774
    538792 0xDD760436 3715499062
    538793 0x2030335F 540029791
    538794 0xC7E80160 3353870688
    538795 0x0894B200 143962624
    538796 0x326EE03C 846127164
    538797 0x43C4DD73 1136975219
    538798 0xE58D6273 3851248243
    538799 0x1B71803F 460423231


    Теперь разобьем эту выборку на группы по сто значений и произведем статистический анализ по каждой группе. Нонсе — это 32х битное число. По здравому рассуждению каждый бит нонсе равновероятно принимает значение единица или ноль. Как раз это я и собираюсь проверить. напишу вот такой скрипт, который считает количество единиц в каждой позиции бита по группе из 100 нонсе.

    import sys
    import os
    
    folder=""
    stat_N=0
    stat=[]
    def init_stat():
        global stat
        global stat_N
        stat_N=0
        i=0
        while i<64:
           stat.append(0.0)
           i=i+1
    
    def clear_stat():
        global stat
        global stat_N
        stat_N=0
        i=0
        while i<64:
           stat[i]=0.0
           i=i+1
    
    def add_stat(nonce):
        global stat
        global stat_N
        stat_N=stat_N+1
        i=0
        while i<64:
            if nonce & (1<<i):
                stat[i]=stat[i]+1
            i=i+1
    
    def nonce_num_bits():
        i=32
        while i<64:
            if stat[i]:
                return 64
            i=i+1
        return 32
    
    def print_stat():
        global stat
        global stat_N
        i=0
        sz = nonce_num_bits()
        while i<sz:
            print(i," ",stat[i]/stat_N)
            i=i+1
    
    def init_stat_file():
        global folder
        txt=open(folder+"/stat.txt","w")
        txt.close()
    
    def write_stat():
        global folder
        global stat
        global stat_N
        txt=open(folder+"/stat.txt","a")
        i=0
        sz = nonce_num_bits()
        while i<sz:
            s=stat[i]/stat_N
            txt.write("%.2f " % s )
            i=i+1
        txt.write("\n")
        txt.close()
    
    #--------------------------------
    args = sys.argv
    if len(args)<2:
        print("Error: need argument name of folder with list of nonces")
        exit()
    
    folder=args[1]
    print( "Working on \"" + folder +"\"" )
    if os.path.isdir(folder)==False:
        print("Error: folder \""+folder+"\" does not exist")
        exit()
    
    init_stat()
    init_stat_file()
    
    f = open(folder+"/nonces.txt","r")
    content = f.read().split("\n")
    for line in content:
        word = line.split(" ")
        if len(word)<2:
            break
        nonce=int(word[1],16)
        add_stat(nonce)
        if stat_N==100:
            write_stat()
            clear_stat()
    
    f.close
    

    Этот скрипт читает файл bitcoin/nonces.txt и создает новый файл bitcoin/stst.txt примерно вот такого вида:

    0.49 0.50 0.45 0.39 0.44 0.40 0.54 0.43 0.47 0.55 0.50 0.54 0.53 0.50 0.54 0.51 0.56 0.47 0.48 0.44 0.44 0.51 0.41 0.52 0.50 0.54 0.42 0.47 0.39 0.52 0.61 0.48
    0.40 0.61 0.52 0.48 0.49 0.55 0.45 0.43 0.55 0.56 0.54 0.55 0.56 0.60 0.52 0.42 0.52 0.46 0.61 0.54 0.52 0.52 0.55 0.49 0.46 0.48 0.41 0.42 0.45 0.42 0.47 0.47
    0.39 0.50 0.43 0.45 0.46 0.47 0.40 0.51 0.48 0.44 0.52 0.51 0.46 0.45 0.51 0.45 0.45 0.53 0.59 0.51 0.53 0.44 0.52 0.55 0.53 0.47 0.49 0.47 0.41 0.51 0.52 0.52
    0.51 0.43 0.39 0.49 0.46 0.53 0.40 0.50 0.49 0.42 0.47 0.56 0.49 0.51 0.57 0.44 0.58 0.52 0.50 0.54 0.48 0.50 0.43 0.53 0.52 0.49 0.48 0.56 0.43 0.42 0.49 0.49
    0.44 0.33 0.43 0.57 0.52 0.52 0.44 0.45 0.53 0.45 0.43 0.50 0.52 0.59 0.44 0.47 0.49 0.40 0.50 0.58 0.55 0.55 0.47 0.51 0.45 0.48 0.44 0.42 0.41 0.47 0.50 0.48
    0.49 0.46 0.51 0.42 0.57 0.45 0.45 0.35 0.53 0.42 0.51 0.52 0.47 0.51 0.47 0.45 0.48 0.49 0.54 0.48 0.50 0.49 0.46 0.56 0.44 0.48 0.47 0.55 0.46 0.45 0.51 0.50
    0.51 0.45 0.52 0.50 0.59 0.41 0.50 0.34 0.47 0.54 0.56 0.48 0.54 0.49 0.54 0.44 0.49 0.48 0.50 0.58 0.44 0.48 0.51 0.47 0.37 0.45 0.47 0.47 0.50 0.52 0.46 0.43
    0.51 0.43 0.52 0.57 0.58 0.51 0.47 0.36 0.51 0.44 0.47 0.47 0.49 0.47 0.43 0.39 0.47 0.50 0.56 0.46 0.47 0.47 0.46 0.63 0.48 0.43 0.44 0.46 0.43 0.51 0.45 0.49
    0.49 0.49 0.40 0.49 0.53 0.53 0.49 0.50 0.47 0.50 0.41 0.55 0.48 0.48 0.49 0.46 0.54 0.51 0.49 0.55 0.53 0.48 0.50 0.53 0.50 0.41 0.45 0.42 0.41 0.47 0.44 0.51
    0.47 0.47 0.47 0.58 0.52 0.42 0.53 0.53 0.59 0.55 0.43 0.48 0.50 0.42 0.46 0.50 0.52 0.53 0.43 0.48 0.58 0.44 0.43 0.42 0.54 0.42 0.58 0.42 0.39 0.45 0.46 0.56
    0.51 0.47 0.45 0.38 0.48 0.51 0.39 0.48 0.50 0.57 0.52 0.54 0.54 0.46 0.67 0.47 0.53 0.54 0.48 0.53 0.57 0.55 0.46 0.54 0.43 0.53 0.49 0.37 0.60 0.46 0.50 0.49
    0.45 0.46 0.47 0.46 0.47 0.51 0.41 0.53 0.59 0.45 0.51 0.43 0.49 0.46 0.46 0.55 0.52 0.51 0.56 0.51 0.49 0.46 0.45 0.49 0.50 0.55 0.48 0.54 0.44 0.49 0.59 0.49
    0.39 0.46 0.53 0.43 0.42 0.54 0.49 0.46 0.52 0.56 0.38 0.46 0.47 0.56 0.60 0.46 0.50 0.59 0.39 0.57 0.50 0.55 0.44 0.54 0.45 0.47 0.52 0.53 0.45 0.41 0.47 0.42
    0.48 0.46 0.49 0.45 0.52 0.43 0.43 0.46 0.43 0.52 0.53 0.50 0.52 0.61 0.43 0.51 0.56 0.51 0.57 0.48 0.51 0.48 0.61 0.52 0.52 0.54 0.42 0.45 0.48 0.49 0.46 0.48
    0.55 0.46 0.50 0.47 0.42 0.40 0.34 0.58 0.52 0.50 0.45 0.45 0.55 0.48 0.41 0.47 0.47 0.46 0.49 0.53 0.50 0.57 0.41 0.58 0.38 0.55 0.47 0.43 0.43 0.43 0.51 0.51
    0.39 0.49 0.56 0.45 0.45 0.51 0.42 0.49 0.45 0.51 0.48 0.44 0.48 0.45 0.53 0.47 0.53 0.45 0.48 0.42 0.54 0.51 0.47 0.59 0.49 0.37 0.48 0.47 0.43 0.44 0.47 0.40
    0.42 0.38 0.56 0.45 0.61 0.42 0.49 0.45 0.52 0.49 0.55 0.44 0.46 0.43 0.50 0.47 0.51 0.47 0.58 0.51 0.55 0.45 0.56 0.47 0.52 0.53 0.42 0.47 0.49 0.47 0.50 0.51
    0.49 0.49 0.49 0.57 0.52 0.48 0.44 0.38 0.50 0.48 0.50 0.52 0.44 0.48 0.46 0.43 0.51 0.52 0.53 0.50 0.44 0.46 0.46 0.46 0.39 0.49 0.52 0.38 0.42 0.53 0.52 0.49
    0.48 0.42 0.44 0.51 0.54 0.49 0.48 0.43 0.50 0.44 0.41 0.45 0.54 0.54 0.49 0.42 0.52 0.45 0.44 0.55 0.51 0.54 0.46 0.59 0.51 0.49 0.51 0.41 0.44 0.42 0.49 0.52
    0.42 0.41 0.45 0.48 0.45 0.50 0.36 0.50 0.51 0.48 0.45 0.61 0.45 0.52 0.49 0.52 0.45 0.47 0.47 0.57 0.48 0.52 0.54 0.46 0.54 0.54 0.56 0.51 0.39 0.41 0.59 0.55

    Здесь каждая колонка — это вероятность появления единицы в соответствующей позиции бита нонсе.

    Например, обратите внимание на колонку, представляющую бит1, бит6 и бит7 нонсе:


    Математическое ожидание 0.459, 0.446 и 0.458.

    Теперь остается как-то отобразить получившуюся статистику в виде графиков. Для этого у меня есть другой скрипт plot.py

    import sys
    import os
    import numpy as np
    import matplotlib.mlab as mlab
    import matplotlib.pyplot as plt
    
    folder=""
    
    #--------------------------------
    args = sys.argv
    if len(args)<2:
        print("Error: need argument name of folder with list of nonces")
        exit()
    
    folder=args[1]
    print( "Working on \"" + folder +"\"" )
    if os.path.isdir(folder)==False:
        print("Error: folder \""+folder+"\" does not exist")
        exit()
    
    
    stat_N=0
    stat=[]
    def init_stat():
        global stat
        global stat_N
        stat_N=0
        i=0
        while i<64:
           stat.append([])
           i=i+1
    
    def draw_stat(start_bit,ax=None):
        print("draw_stat ",start_bit)
        save_single=0
        if ax is None:
            fig = plt.figure( figsize=(16,9))
            ax = fig.gca()
            save_single=1
        ax.set_yticks( np.arange( 0.0, 1.0, 0.1 ) )
        plt.title("Probability of specific bit in nonce")
        plt.ylabel("Probability")
        plt.xlabel("Every X-point presents group nonces averaged")
        plt.ylim(0.0,1.0)
        plt.grid()
        i=0
        while i<8:
            color="#"
            if i&1:
                color=color+"FF"
            else:
                color=color+"00"
            if i&2:
                color=color+"FF"
            else:
                color=color+"00"
            if i&4:
                color=color+"FF"
            else:
                color=color+"00"
            if i==7:
                color="#A0A0A0"
            ax.plot(stat[start_bit+i],color,label="bit"+str(start_bit+i) )
            i=i+1
        ax.legend(loc="upper left",ncol=2)
        #plt.show()
        if save_single :
            plt.savefig(folder+"/bit"+str(start_bit)+"-"+str(start_bit+7)+".png",dpi=300)
    
    def draw_hist(start_bit,ax=None):
        print("draw_hist ",start_bit)
        save_single=0
        if ax is None:
            fig = plt.figure( figsize=(16,9))
            ax = fig.gca()
            save_single=1
        ax.set_xticks( np.arange( 0.0, 1.0, 0.1 ) )
        x=np.arange( 0.0, 1.0, 0.05 )
        plt.title("Probability Density of specific bit in nonce")
        plt.ylabel("Density")
        plt.xlabel("Probability")
        plt.grid()
        i=0
        max_val=0
        while i<8:
            histogram=[0]*20
            k=0
            stat_column=stat[start_bit+i]
            n=len(stat_column)
            while k<n:
                val=stat_column[k]
                idx=int(round(val*20))
                histogram[idx]=histogram[idx]+1
                if max_val<histogram[idx]:
                    max_val=histogram[idx];
                k=k+1
            color="#"
            if i&1:
                color=color+"FF"
            else:
                color=color+"00"
            if i&2:
                color=color+"FF"
            else:
                color=color+"00"
            if i&4:
                color=color+"FF"
            else:
                color=color+"00"
            if i==7:
                color="#A0A0A0"
            ax.plot(x,histogram,color,label="bit"+str(start_bit+i) )
            i=i+1
        plt.ylim(0.0,max_val*1.2)
        ax.set_yticks( np.arange( 0.0, max_val*1.2, 1.0 ) )
        ax.legend(loc="upper right")
        #plt.show()
        if save_single :
            plt.savefig(folder+"/density"+str(start_bit)+"-"+str(start_bit+7)+".png",dpi=300)
    
    num_bits=32
    init_stat()
    f = open(folder+"/stat.txt","r")
    content = f.read().split("\n")
    for line in content:
        word = line.split(" ")
        nb=len(word)-1
        if nb==32 or nb==64:
            num_bits=nb
        else:
            break
        i=0
        while i<num_bits:
            stat[i].append( float(word[i]) )
            i=i+1
    f.close
    
    print("Num Bits in Nonce:",num_bits)
    draw_hist(0)
    draw_hist(8)
    draw_hist(16)
    draw_hist(24)
    add_subplots = 0
    
    fig = plt.figure( figsize=(16,9*num_bits/32))
    ax1 = plt.subplot(221+add_subplots)
    draw_hist(0,ax1)
    ax2 = plt.subplot(222+add_subplots)
    draw_hist(8,ax2)
    ax3 = plt.subplot(223+add_subplots)
    draw_hist(16,ax3)
    ax4 = plt.subplot(224+add_subplots)
    draw_hist(24,ax4)
    plt.savefig(folder+"/density_all.png",dpi=300)
    
    draw_stat(0)
    draw_stat(8)
    draw_stat(16)
    draw_stat(24)
    fig = plt.figure( figsize=(16,9*num_bits/32))
    ax1 = plt.subplot(221+add_subplots)
    draw_stat(0,ax1)
    ax2 = plt.subplot(222+add_subplots)
    draw_stat(8,ax2)
    ax3 = plt.subplot(223+add_subplots)
    draw_stat(16,ax3)
    ax4 = plt.subplot(224+add_subplots)
    draw_stat(24,ax4)
    plt.savefig(folder+"/bits_all.png",dpi=300)
    

    Теперь настало время рассмотреть эти графики. Если отобразить их все 32 на одной странице получится малопонятная каша. Поэтому скрипт строит 4 графика и каждый отображает статистику 8 бит. Так будет удобнее рассмотреть.

    Приведу здесь всё:






    Видно, что некоторые биты в нонсе биткоина не равновероятны в своем значении и графики смещены вниз. Значит значение бита все же немного более вероятно ноль, чем единица. Ниже графики распределения вероятности.






    Здесь видно все то же — в среднем вероятность значения некоторых битов в найденых голден нонсе биткоина не равно 0.5, как я ожидал, но скорее смещено в сторону нуля. Особенно выделяются биты 1, 15, 22. С чем это связано, к сожалению не могу сказать. Тем не менее этот факт позволяет задуматься о перераспределении мощности майнеров по диапазонам значений более вероятных. Например, вот так: есть сто аппаратных майнеров (видеокарт или асиков), 65 майнеров отправляем на поиск нонсе со значениями бита 22 равному нулю и 35 майнеров майнят в диапазонах со значением бита 22 равным единице. Далее каждый выделенный диапазон можно разбить на более мелкие поддиапазоны согласно вероятности бита 15… и так далее. Идея в том, чтобы искать голден нонсе в более вероятных диапазонах сообразно последней накопленной статистике.

    Далее возникла идея посмотреть статистику глубже, не только по 2000 последним блокам, но по всей истории блокчейна биткоина. Весь блокчейн уже почти 200Гигабайт, так что тут уже присутствуют все набившие оскомину термины «биткоин, блокчейн, бигдата».

    Установил кошелек биткоина и выкачал весь блокчейн.

    Далее использовал такой проект.
    Этот проект позволяет скрипту на питоне пройтись по всему блокчейну и извлечь интересующие нас данные.

    Немного изменил скрипт из примера, чтобы он писал статистику в текстовый файл. Теперь весь диапазон блоков около 530 тысяч разбит на группы по 1000 блоков. В каждом блоке смотрю среднюю вероятность значения бита нонсе.

    import sys
    sys.path.append('..')
    from blockchain_parser.blockchain import Blockchain
    
    stat_N=0
    stat=[]
    def init_stat():
        global stat
        global stat_N
        stat_N=0
        i=0
        while i<32:
           stat.append(0)
           i=i+1
    
    def clear_stat():
        global stat
        global stat_N
        stat_N=0
        i=0
        while i<32:
           stat[i]=0
           i=i+1
    
    def add_stat(nonce):
        global stat
        global stat_N
        stat_N=stat_N+1
        i=0
        while i<32:
            if nonce & (1<<i):
                stat[i]=stat[i]+1
            i=i+1
    
    def print_stat():
        global stat
        global stat_N
        i=0
        while i<32:
            print(i," ",stat[i]/stat_N)
            i=i+1
    
    def init_stat_file():
        txt=open("stat.txt","w")
        txt.close()
    
    def write_stat():
        global stat
        global stat_N
        txt=open("stat.txt","a")
        i=0
        while i<32:
            s=stat[i]/stat_N
            txt.write("%.4f " % s )
            i=i+1
        txt.write("\n")
        txt.close()
    
    init_stat()
    init_stat_file()
    
    # Instantiate the Blockchain by giving the path to the directory 
    # containing the .blk files created by bitcoind
    blockchain = Blockchain(sys.argv[1])
    
    height=0
    # To get the blocks ordered by height, you need to provide the path of the
    # `index` directory (LevelDB index) being maintained by bitcoind. It contains
    # .ldb files and is present inside the `blocks` directory
    for block in blockchain.get_ordered_blocks(sys.argv[1] + '/index', end=538000):
        print("")
        height=block.height
        print("height=%d" % (block.height) )
        print("header=",end='')
        arr=block.hex[:80]
        for a in arr:
            print(format(a,'02X'),end='')
        print("")
        print("hash  =%s" %  (block.hash) )
        hdr=block.header
        nonce=hdr.nonce
        print("nonce =", format(nonce,'08X'))
        add_stat(nonce)
        if stat_N==1000:
            write_stat()
            clear_stat()
        print("")
    

    Этот скрипт так же генерирует файл статистики вероятности бита нонсе по всей истории блокчейна биткоин. Получается довольно интересная картина.

    Вот как менялась со временем вероятность битов нонсе с нулевого по пятнадцатый:



    А вот с шестнадцатого по тридцать первый бит нонсе:



    Здесь каждая точка по горизонтали — это одна тысяча блоков в блокчейне и по этой тысяче считается средняя вероятность появления единицы в битовой позиции нонсе.

    Честно говоря даже не знаю, как это можно прокомментировать. Временами биты в нонсе ой как не равновероятны. А если это так, то почему майнеры до сих пор просто перебирают нонсе? Возможно ли распределять мощности майнеров согласно найденой закономерности?

    Если Вам интересны подобные изыскания, то можно еще почитать другие мои статьи:

    1. Вероятностный метод майнинга Bitcoin
    2. Можно ли вычислять биткоины быстрее, проще или легче?
    3. Майнер Bitcoin на плате Марсоход3


    UPDATE:
    Я сделал дополнительное исследование по Ethereum. Картина еще интересней.
    Если посмотреть ранее найденые нонсе, то невооруженным глазом видно неравномерное распределение:

    5844149 0xb431dfa8061eedc5
    5844150 0xac0badf80082e518
    5844151 0x64404b000042af4f
    5844152 0x96d84c7bd66ae434
    5844153 0xa6dd55a000364353
    5844154 0x516a29f005a56197
    5844155 0x4c0a1000006d50aa
    5844156 0x9e61733806e46e10
    5844157 0x8191b4d80925a334
    5844158 0x53a42df800b24a72
    5844159 0x9eb85a3c0031e03b
    5844160 0xb707255405787b53
    5844161 0xbf6bd50011069dc9
    5844162 0x83171430153262b1
    5844163 0x2e1c8a302ad94fc2
    5844164 0x84c971180db7252e
    5844165 0x47d606ф00110d3bb
    5844166 0x7b1f78bc127bb7cb


    Хэш алгоритм эфира сложнее, чем у биткоина.
    Нонсе эфире 64х разрядное. Середина нонсе (биты 28-36) почти пустая. При этом в исходниках майнера что для Nvidia Cuda, что для AMD OpenCL вроде бы нет никаких указаний, чтобы нонсе подбиралось сходясь в середине — идет равномерное наращивание от нуля и далее до 0xFFFFFFFFFFFFFFFF.

    Вот распределение вероятности битов нонсе эфира:
    Поделиться публикацией

    Комментарии 15

      0
      А вы пробовали провести аналогичный эксперимент со случайно последовательностью нулей и единиц?
        +1
        Конечно да. И там нет такого явного безобразия.
        Например, вот стат вероятность по случайно сгенерированным числам:
          +1
          Не вижу особой разницы)
        0
        Еще можно проверить корреляции между парами битов (например, с какой вероятность пара битов 15 и 22 принимает значения 00, 01, 10 и 11), всего пар 32*31/2=496, и вроде бы общего количества блоков достаточно для сбора такой статистики.
          0
          Теперь весь диапазон блоков около 530 тысяч разбит на группы по 1000 блоков. В каждом блоке смотрю среднюю вероятность значения бита нонсе.

          А если не по тысяче смотреть, а по десять? И сделать скользящее окно, чтобы блоки выбрались с перекрытиями? Данные подобного рода могут быть чувствительны к способу группировки. Вообще, большая часть подсчётов чего-либо по «случайным» последовательностям ведёт себя довольно контринтуитивно из-за зависимости от способа подсчёта, а не только генерации.

            +2
            А чем больше кто-то будет искать биты в определённых пределах, тем больше будет найдено бит в этих пределах, и тем больше будет перекашиваться статистика в пользу этих пределов.
              0
              Скорее всего Вы правы…
                0

                Тонко подмечено...

                  0
                  Я вот думал над этим. Может и не так. Найти голден нонсе — это ведь большая удача, настолько они редкие. При этом я не предлагаю абсолютно сужать область поиска. Я только предлагаю в некоторую область направлять больше майнинговой мощности, так как там немного выше вероятность. Если в этой области не найдено, то конечно нужно продолжать считать в остальных диапазонах. Возможно перераспределение майнинговой мощности поможет на 1-2%, кто знает. Физически проверить не просто.
                0
                Существует большое количество golden nonce, выигрышная комбинация не единственная возможная. При переборе возможных nonce в определенном порядке выигрышную nonce расположенную в начале перебираемого диапазона найдут скорее всего раньше чем выигрышную nonce в конце диапазона. Отсюда и неравномерность, как уже заметил Barafu_Albino_Cheetah. Разная популярность майнеров с разным порядком обхода — разные варианты неравномерности.

                Но здесь есть одно большое «но». Скорость перебора nonce давным-давно уже достаточно велика чтобы перебирать весь возможный диапазон nonce по крайней мере тысячи раз в секунду. По идее при более-менее тупом переборе закономерность давным-давно должна была бы сойти на нет.
                  0
                  Так вот в том то и дело… Что выявленной закономерности кажется не должно быть, но она есть…
                  0
                  Надежна настолько, что существует только один единственный способ подобрать голден нонсе для очередного блока в блокчейне — путем перебора в процессе майнинга.
                  Где такое сказано? Неправда же ж.
                  По здравому рассуждению каждый бит нонсе равновероятно принимает значение единица или ноль.
                  С чего это? Может не нонсе, а уже сам хеш? Именно про него говорят, что он случаен.

                  Известно ведь, что нонсе подбирается. Соответственно, найденные нонсы зависят от метода подбора.
                  Если метод подбора — берём случайный нонсе, тогда бы распределение было бы равномерным. Но сильно сомневаюсь, что кто либо из майнеров такой метода использует из-за парадокса дней рождений.

                  К примеру, сложность майнинга «минимальна» (подходящий хеш — любой). Метод подбора — подряд с 0. Тогда ВСЕ нонсе будут равны нулю.
                    0
                    А вообще, полученные данные похоже соответствуют закону Бенфорда для Н-ой значащей цифры. Именно то, что вероятность нуля выше, чем единицы. Так что можно предположить, что нонсе подбирается инкрементированием, начиная с нуля.
                      0
                      Я в статью добавил исследования по эфиру. Там тоже интересно.
                      0
                      Статистический анализ очень удобно делать с помощью языка R — там есть масса готовых инструментов для этого
                      Сейчас как раз прохожу курс stepik.org/course/129/syllabus с аналогичной целью — найти аномалии.

                      Пример анализа www.kaggle.com/kardesh/bitcoin-blockchain-analysis

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое