pic_random_dist Module

Distributions whose output is an integer or a logical, and which are therefore bit-identical on every supported compiler.

Why a separate module from the real-valued one

A textbook exponential deviate is -mean * log(u). That calls libm, and libm is not the same function on every platform: GNU, Intel and NVIDIA do not agree to the last bit, and they are not obliged to. Any value derived that way is unusable in state that has to be compared across runs or across compilers.

Everything in this module is computed with integer arithmetic only – no real type appears in any expression that reaches a result – so a given generator and seed produce the same sequence everywhere. The tests pin the first outputs of every routine for a fixed seed, and those pins are the contract.

The real-valued distributions live in pic_random_dist_real. Keeping them in a different module means a translation unit that only uses this one cannot reach a non-reproducible deviate by accident.

Quick start

use pic_rng, only: splitmix64_t
use pic_random_dist, only: next_range, next_bernoulli_ppm, &
                           next_exponential_int

type(splitmix64_t) :: gen
call gen%seed(20250914_int64)

die = next_range(gen, 1, 6)                  ! inclusive
stolen = next_bernoulli_ppm(gen, 2500)       ! 0.25% chance
gap_ms = next_exponential_int(gen, 4000_int64)   ! mean 4 seconds

Uses

  • module~~pic_random_dist~~UsesGraph module~pic_random_dist pic_random_dist module~pic_error pic_error module~pic_random_dist->module~pic_error module~pic_rng pic_rng module~pic_random_dist->module~pic_rng module~pic_types pic_types module~pic_random_dist->module~pic_types module~pic_uint64 pic_uint64 module~pic_random_dist->module~pic_uint64 module~pic_error->module~pic_types module~pic_global_definitions pic_global_definitions module~pic_error->module~pic_global_definitions module~pic_rng->module~pic_error module~pic_rng->module~pic_types module~pic_rng->module~pic_uint64 iso_c_binding iso_c_binding module~pic_types->iso_c_binding iso_fortran_env iso_fortran_env module~pic_types->iso_fortran_env module~pic_uint64->module~pic_types module~pic_global_definitions->module~pic_types

Variables

Type Visibility Attributes Name Initial
integer(kind=int64), public, parameter :: EXPONENTIAL_MAX_MEAN = 2147483647_int64

Largest mean next_exponential_int accepts, huge(int32) as an int64. The bound is what makes the final fixed-point multiply provably free of signed overflow; see scale_by_mean.

integer(kind=default_int), public, parameter :: POISSON_MAX_MEAN_MILLI = 1000000_default_int

Largest mean_milli next_poisson_int accepts, that is a mean of 1000 events. The sampler is O(mean), so this is a guard against silently getting slow rather than an arithmetic limit.

integer(kind=default_int), public, parameter :: PPM_ONE = 1000000_default_int

Parts per million corresponding to certainty, for next_bernoulli_ppm.

integer(kind=default_int), private, parameter :: EXP_CELLS = 4096_default_int

Number of cells in EXP_TABLE, and so 2**EXP_CELL_BITS.

integer(kind=default_int), private, parameter :: EXP_CELL_BITS = 12_default_int

Number of random bits that select a table cell; 2**12 == 4096.

integer(kind=int64), private, parameter :: EXP_LN_CELLS = EXP_TABLE(EXP_TOP_CELL)

ln(4096) in Q32.32. Taken from the table rather than written out again, because -ln(1 - 4095/4096) is exactly ln(4096) and a second copy of it could drift. Added once per turn around the tail loop.

integer(kind=default_int), private, parameter :: EXP_MAX_TAIL = 8_default_int

Most times the tail loop may go round. Each turn needs the 12-bit draw to hit exactly one value, so reaching the cap has probability 4096*-8, about 3e-29, and bounds the result at 9ln(4096) means.

integer(kind=int64), private, parameter :: EXP_TABLE(0:EXP_TOP_CELL) = [0_int64, 1048704_int64, 2097664_int64, 3146881_int64, 4196353_int64, 5246083_int64, 6296069_int64, 7346311_int64, 8396811_int64, 9447567_int64, 10498581_int64, 11549852_int64, 12601380_int64, 13653166_int64, 14705209_int64, 15757511_int64, 16810070_int64, 17862887_int64, 18915962_int64, 19969295_int64, 21022887_int64, 22076738_int64, 23130847_int64, 24185215_int64, 25239841_int64, 26294727_int64, 27349872_int64, 28405276_int64, 29460940_int64, 30516863_int64, 31573046_int64, 32629488_int64, 33686191_int64, 34743153_int64, 35800376_int64, 36857859_int64, 37915602_int64, 38973606_int64, 40031871_int64, 41090397_int64, 42149183_int64, 43208231_int64, 44267539_int64, 45327110_int64, 46386941_int64, 47447034_int64, 48507389_int64, 49568006_int64, 50628884_int64, 51690025_int64, 52751428_int64, 53813094_int64, 54875022_int64, 55937212_int64, 56999665_int64, 58062381_int64, 59125361_int64, 60188603_int64, 61252108_int64, 62315877_int64, 63379910_int64, 64444206_int64, 65508766_int64, 66573590_int64, 67638678_int64, 68704030_int64, 69769647_int64, 70835528_int64, 71901673_int64, 72968084_int64, 74034759_int64, 75101699_int64, 76168904_int64, 77236374_int64, 78304110_int64, 79372112_int64, 80440379_int64, 81508911_int64, 82577710_int64, 83646775_int64, 84716105_int64, 85785703_int64, 86855566_int64, 87925696_int64, 88996093_int64, 90066757_int64, 91137687_int64, 92208885_int64, 93280350_int64, 94352082_int64, 95424082_int64, 96496350_int64, 97568885_int64, 98641688_int64, 99714759_int64, 100788099_int64, 101861706_int64, 102935582_int64, 104009727_int64, 105084140_int64, 106158822_int64, 107233774_int64, 108308994_int64, 109384483_int64, 110460242_int64, 111536271_int64, 112612569_int64, 113689136_int64, 114765974_int64, 115843082_int64, 116920460_int64, 117998108_int64, 119076027_int64, 120154216_int64, 121232676_int64, 122311407_int64, 123390409_int64, 124469683_int64, 125549227_int64, 126629043_int64, 127709130_int64, 128789489_int64, 129870120_int64, 130951023_int64, 132032198_int64, 133113645_int64, 134195364_int64, 135277356_int64, 136359621_int64, 137442158_int64, 138524969_int64, 139608052_int64, 140691409_int64, 141775039_int64, 142858942_int64, 143943119_int64, 145027570_int64, 146112295_int64, 147197293_int64, 148282566_int64, 149368113_int64, 150453935_int64, 151540031_int64, 152626402_int64, 153713048_int64, 154799969_int64, 155887164_int64, 156974636_int64, 158062382_int64, 159150404_int64, 160238702_int64, 161327276_int64, 162416125_int64, 163505251_int64, 164594653_int64, 165684331_int64, 166774286_int64, 167864518_int64, 168955026_int64, 170045812_int64, 171136874_int64, 172228214_int64, 173319831_int64, 174411725_int64, 175503898_int64, 176596348_int64, 177689076_int64, 178782082_int64, 179875366_int64, 180968929_int64, 182062770_int64, 183156890_int64, 184251288_int64, 185345966_int64, 186440922_int64, 187536158_int64, 188631673_int64, 189727468_int64, 190823542_int64, 191919897_int64, 193016531_int64, 194113445_int64, 195210639_int64, 196308114_int64, 197405869_int64, 198503905_int64, 199602222_int64, 200700819_int64, 201799698_int64, 202898858_int64, 203998299_int64, 205098022_int64, 206198026_int64, 207298313_int64, 208398881_int64, 209499731_int64, 210600863_int64, 211702278_int64, 212803976_int64, 213905956_int64, 215008219_int64, 216110765_int64, 217213594_int64, 218316706_int64, 219420101_int64, 220523780_int64, 221627743_int64, 222731990_int64, 223836520_int64, 224941335_int64, 226046434_int64, 227151818_int64, 228257486_int64, 229363438_int64, 230469676_int64, 231576198_int64, 232683006_int64, 233790099_int64, 234897478_int64, 236005142_int64, 237113091_int64, 238221327_int64, 239329849_int64, 240438657_int64, 241547751_int64, 242657132_int64, 243766799_int64, 244876753_int64, 245986994_int64, 247097522_int64, 248208337_int64, 249319440_int64, 250430830_int64, 251542508_int64, 252654474_int64, 253766727_int64, 254879269_int64, 255992099_int64, 257105217_int64, 258218624_int64, 259332320_int64, 260446305_int64, 261560578_int64, 262675141_int64, 263789993_int64, 264905134_int64, 266020565_int64, 267136286_int64, 268252297_int64, 269368598_int64, 270485189_int64, 271602070_int64, 272719242_int64, 273836704_int64, 274954458_int64, 276072502_int64, 277190838_int64, 278309464_int64, 279428382_int64, 280547592_int64, 281667094_int64, 282786887_int64, 283906972_int64, 285027350_int64, 286148020_int64, 287268982_int64, 288390237_int64, 289511785_int64, 290633626_int64, 291755760_int64, 292878187_int64, 294000907_int64, 295123921_int64, 296247229_int64, 297370831_int64, 298494726_int64, 299618916_int64, 300743400_int64, 301868179_int64, 302993252_int64, 304118620_int64, 305244284_int64, 306370242_int64, 307496495_int64, 308623044_int64, 309749888_int64, 310877028_int64, 312004464_int64, 313132196_int64, 314260224_int64, 315388549_int64, 316517170_int64, 317646088_int64, 318775302_int64, 319904814_int64, 321034622_int64, 322164728_int64, 323295131_int64, 324425832_int64, 325556831_int64, 326688127_int64, 327819722_int64, 328951615_int64, 330083806_int64, 331216296_int64, 332349084_int64, 333482172_int64, 334615558_int64, 335749243_int64, 336883228_int64, 338017512_int64, 339152096_int64, 340286980_int64, 341422164_int64, 342557647_int64, 343693431_int64, 344829516_int64, 345965901_int64, 347102587_int64, 348239573_int64, 349376861_int64, 350514450_int64, 351652341_int64, 352790532_int64, 353929026_int64, 355067822_int64, 356206919_int64, 357346319_int64, 358486021_int64, 359626026_int64, 360766333_int64, 361906943_int64, 363047856_int64, 364189072_int64, 365330592_int64, 366472415_int64, 367614542_int64, 368756972_int64, 369899706_int64, 371042745_int64, 372186088_int64, 373329735_int64, 374473687_int64, 375617944_int64, 376762505_int64, 377907372_int64, 379052544_int64, 380198021_int64, 381343804_int64, 382489893_int64, 383636287_int64, 384782988_int64, 385929995_int64, 387077308_int64, 388224928_int64, 389372855_int64, 390521088_int64, 391669629_int64, 392818476_int64, 393967632_int64, 395117094_int64, 396266865_int64, 397416943_int64, 398567329_int64, 399718024_int64, 400869027_int64, 402020338_int64, 403171958_int64, 404323887_int64, 405476125_int64, 406628673_int64, 407781529_int64, 408934695_int64, 410088171_int64, 411241957_int64, 412396053_int64, 413550459_int64, 414705175_int64, 415860202_int64, 417015539_int64, 418171188_int64, 419327147_int64, 420483418_int64, 421640000_int64, 422796893_int64, 423954099_int64, 425111616_int64, 426269445_int64, 427427586_int64, 428586040_int64, 429744806_int64, 430903885_int64, 432063277_int64, 433222982_int64, 434383000_int64, 435543332_int64, 436703977_int64, 437864936_int64, 439026209_int64, 440187796_int64, 441349697_int64, 442511912_int64, 443674442_int64, 444837287_int64, 446000447_int64, 447163922_int64, 448327712_int64, 449491817_int64, 450656238_int64, 451820975_int64, 452986028_int64, 454151397_int64, 455317082_int64, 456483084_int64, 457649402_int64, 458816038_int64, 459982990_int64, 461150259_int64, 462317846_int64, 463485750_int64, 464653971_int64, 465822511_int64, 466991369_int64, 468160544_int64, 469330039_int64, 470499851_int64, 471669983_int64, 472840433_int64, 474011202_int64, 475182291_int64, 476353699_int64, 477525426_int64, 478697474_int64, 479869841_int64, 481042528_int64, 482215536_int64, 483388864_int64, 484562513_int64, 485736482_int64, 486910773_int64, 488085384_int64, 489260317_int64, 490435571_int64, 491611148_int64, 492787046_int64, 493963266_int64, 495139808_int64, 496316672_int64, 497493860_int64, 498671369_int64, 499849202_int64, 501027358_int64, 502205837_int64, 503384640_int64, 504563766_int64, 505743216_int64, 506922990_int64, 508103088_int64, 509283511_int64, 510464258_int64, 511645330_int64, 512826726_int64, 514008448_int64, 515190495_int64, 516372867_int64, 517555565_int64, 518738589_int64, 519921938_int64, 521105614_int64, 522289616_int64, 523473944_int64, 524658600_int64, 525843582_int64, 527028891_int64, 528214527_int64, 529400490_int64, 530586782_int64, 531773401_int64, 532960348_int64, 534147623_int64, 535335226_int64, 536523158_int64, 537711418_int64, 538900007_int64, 540088926_int64, 541278173_int64, 542467750_int64, 543657656_int64, 544847893_int64, 546038459_int64, 547229355_int64, 548420582_int64, 549612139_int64, 550804026_int64, 551996245_int64, 553188794_int64, 554381675_int64, 555574887_int64, 556768431_int64, 557962307_int64, 559156514_int64, 560351054_int64, 561545926_int64, 562741130_int64, 563936668_int64, 565132538_int64, 566328741_int64, 567525277_int64, 568722147_int64, 569919350_int64, 571116888_int64, 572314759_int64, 573512964_int64, 574711504_int64, 575910378_int64, 577109588_int64, 578309132_int64, 579509011_int64, 580709225_int64, 581909775_int64, 583110661_int64, 584311882_int64, 585513440_int64, 586715333_int64, 587917563_int64, 589120130_int64, 590323034_int64, 591526274_int64, 592729852_int64, 593933767_int64, 595138020_int64, 596342611_int64, 597547539_int64, 598752806_int64, 599958410_int64, 601164354_int64, 602370636_int64, 603577257_int64, 604784217_int64, 605991516_int64, 607199155_int64, 608407133_int64, 609615452_int64, 610824110_int64, 612033109_int64, 613242448_int64, 614452127_int64, 615662147_int64, 616872509_int64, 618083211_int64, 619294255_int64, 620505641_int64, 621717368_int64, 622929437_int64, 624141849_int64, 625354602_int64, 626567699_int64, 627781138_int64, 628994920_int64, 630209045_int64, 631423513_int64, 632638325_int64, 633853480_int64, 635068980_int64, 636284823_int64, 637501011_int64, 638717544_int64, 639934421_int64, 641151642_int64, 642369209_int64, 643587122_int64, 644805379_int64, 646023983_int64, 647242932_int64, 648462227_int64, 649681868_int64, 650901856_int64, 652122191_int64, 653342872_int64, 654563900_int64, 655785276_int64, 657006999_int64, 658229070_int64, 659451488_int64, 660674255_int64, 661897369_int64, 663120833_int64, 664344644_int64, 665568805_int64, 666793314_int64, 668018173_int64, 669243381_int64, 670468939_int64, 671694847_int64, 672921104_int64, 674147712_int64, 675374671_int64, 676601979_int64, 677829639_int64, 679057650_int64, 680286012_int64, 681514725_int64, 682743790_int64, 683973207_int64, 685202975_int64, 686433096_int64, 687663570_int64, 688894396_int64, 690125574_int64, 691357106_int64, 692588991_int64, 693821230_int64, 695053822_int64, 696286768_int64, 697520068_int64, 698753722_int64, 699987731_int64, 701222094_int64, 702456813_int64, 703691886_int64, 704927314_int64, 706163098_int64, 707399238_int64, 708635734_int64, 709872585_int64, 711109793_int64, 712347358_int64, 713585279_int64, 714823557_int64, 716062192_int64, 717301184_int64, 718540534_int64, 719780242_int64, 721020308_int64, 722260731_int64, 723501514_int64, 724742654_int64, 725984154_int64, 727226012_int64, 728468230_int64, 729710807_int64, 730953743_int64, 732197040_int64, 733440696_int64, 734684713_int64, 735929090_int64, 737173827_int64, 738418926_int64, 739664385_int64, 740910206_int64, 742156389_int64, 743402933_int64, 744649838_int64, 745897106_int64, 747144737_int64, 748392730_int64, 749641085_int64, 750889804_int64, 752138885_int64, 753388330_int64, 754638139_int64, 755888311_int64, 757138848_int64, 758389748_int64, 759641013_int64, 760892643_int64, 762144638_int64, 763396997_int64, 764649722_int64, 765902813_int64, 767156269_int64, 768410091_int64, 769664279_int64, 770918833_int64, 772173754_int64, 773429042_int64, 774684697_int64, 775940719_int64, 777197109_int64, 778453866_int64, 779710991_int64, 780968484_int64, 782226345_int64, 783484575_int64, 784743173_int64, 786002141_int64, 787261477_int64, 788521183_int64, 789781259_int64, 791041704_int64, 792302519_int64, 793563705_int64, 794825261_int64, 796087187_int64, 797349485_int64, 798612153_int64, 799875193_int64, 801138605_int64, 802402388_int64, 803666543_int64, 804931071_int64, 806195971_int64, 807461243_int64, 808726888_int64, 809992907_int64, 811259298_int64, 812526063_int64, 813793202_int64, 815060715_int64, 816328602_int64, 817596864_int64, 818865500_int64, 820134511_int64, 821403897_int64, 822673658_int64, 823943795_int64, 825214307_int64, 826485195_int64, 827756460_int64, 829028101_int64, 830300118_int64, 831572513_int64, 832845284_int64, 834118433_int64, 835391959_int64, 836665863_int64, 837940145_int64, 839214805_int64, 840489844_int64, 841765261_int64, 843041057_int64, 844317232_int64, 845593787_int64, 846870721_int64, 848148034_int64, 849425728_int64, 850703802_int64, 851982256_int64, 853261091_int64, 854540307_int64, 855819904_int64, 857099882_int64, 858380242_int64, 859660984_int64, 860942108_int64, 862223614_int64, 863505502_int64, 864787773_int64, 866070428_int64, 867353465_int64, 868636886_int64, 869920690_int64, 871204878_int64, 872489450_int64, 873774407_int64, 875059748_int64, 876345474_int64, 877631585_int64, 878918081_int64, 880204963_int64, 881492230_int64, 882779883_int64, 884067922_int64, 885356348_int64, 886645161_int64, 887934360_int64, 889223946_int64, 890513920_int64, 891804281_int64, 893095030_int64, 894386167_int64, 895677692_int64, 896969606_int64, 898261909_int64, 899554600_int64, 900847681_int64, 902141151_int64, 903435011_int64, 904729260_int64, 906023900_int64, 907318930_int64, 908614351_int64, 909910162_int64, 911206365_int64, 912502959_int64, 913799944_int64, 915097321_int64, 916395091_int64, 917693252_int64, 918991806_int64, 920290753_int64, 921590093_int64, 922889825_int64, 924189952_int64, 925490472_int64, 926791386_int64, 928092694_int64, 929394396_int64, 930696493_int64, 931998985_int64, 933301872_int64, 934605155_int64, 935908833_int64, 937212907_int64, 938517377_int64, 939822243_int64, 941127506_int64, 942433166_int64, 943739222_int64, 945045676_int64, 946352528_int64, 947659777_int64, 948967424_int64, 950275470_int64, 951583913_int64, 952892756_int64, 954201998_int64, 955511639_int64, 956821679_int64, 958132119_int64, 959442959_int64, 960754199_int64, 962065840_int64, 963377881_int64, 964690324_int64, 966003167_int64, 967316412_int64, 968630059_int64, 969944107_int64, 971258558_int64, 972573411_int64, 973888666_int64, 975204325_int64, 976520386_int64, 977836852_int64, 979153720_int64, 980470993_int64, 981788670_int64, 983106751_int64, 984425236_int64, 985744127_int64, 987063423_int64, 988383124_int64, 989703231_int64, 991023743_int64, 992344662_int64, 993665987_int64, 994987719_int64, 996309858_int64, 997632403_int64, 998955357_int64, 1000278717_int64, 1001602486_int64, 1002926663_int64, 1004251248_int64, 1005576242_int64, 1006901644_int64, 1008227456_int64, 1009553677_int64, 1010880308_int64, 1012207349_int64, 1013534800_int64, 1014862661_int64, 1016190933_int64, 1017519616_int64, 1018848710_int64, 1020178215_int64, 1021508132_int64, 1022838461_int64, 1024169203_int64, 1025500356_int64, 1026831923_int64, 1028163902_int64, 1029496295_int64, 1030829101_int64, 1032162320_int64, 1033495954_int64, 1034830002_int64, 1036164464_int64, 1037499342_int64, 1038834634_int64, 1040170341_int64, 1041506464_int64, 1042843003_int64, 1044179958_int64, 1045517329_int64, 1046855117_int64, 1048193321_int64, 1049531943_int64, 1050870982_int64, 1052210438_int64, 1053550312_int64, 1054890605_int64, 1056231316_int64, 1057572445_int64, 1058913994_int64, 1060255961_int64, 1061598348_int64, 1062941155_int64, 1064284382_int64, 1065628029_int64, 1066972096_int64, 1068316584_int64, 1069661493_int64, 1071006824_int64, 1072352576_int64, 1073698750_int64, 1075045345_int64, 1076392363_int64, 1077739804_int64, 1079087668_int64, 1080435955_int64, 1081784665_int64, 1083133798_int64, 1084483356_int64, 1085833338_int64, 1087183744_int64, 1088534575_int64, 1089885831_int64, 1091237513_int64, 1092589619_int64, 1093942152_int64, 1095295111_int64, 1096648496_int64, 1098002307_int64, 1099356546_int64, 1100711211_int64, 1102066305_int64, 1103421825_int64, 1104777774_int64, 1106134151_int64, 1107490956_int64, 1108848190_int64, 1110205853_int64, 1111563946_int64, 1112922468_int64, 1114281420_int64, 1115640802_int64, 1117000614_int64, 1118360857_int64, 1119721531_int64, 1121082636_int64, 1122444173_int64, 1123806141_int64, 1125168542_int64, 1126531374_int64, 1127894640_int64, 1129258338_int64, 1130622469_int64, 1131987034_int64, 1133352032_int64, 1134717464_int64, 1136083331_int64, 1137449632_int64, 1138816368_int64, 1140183539_int64, 1141551145_int64, 1142919187_int64, 1144287664_int64, 1145656578_int64, 1147025929_int64, 1148395716_int64, 1149765940_int64, 1151136601_int64, 1152507700_int64, 1153879237_int64, 1155251212_int64, 1156623625_int64, 1157996477_int64, 1159369768_int64, 1160743498_int64, 1162117668_int64, 1163492277_int64, 1164867327_int64, 1166242817_int64, 1167618747_int64, 1168995119_int64, 1170371931_int64, 1171749186_int64, 1173126882_int64, 1174505020_int64, 1175883600_int64, 1177262623_int64, 1178642089_int64, 1180021998_int64, 1181402351_int64, 1182783148_int64, 1184164388_int64, 1185546073_int64, 1186928202_int64, 1188310777_int64, 1189693796_int64, 1191077261_int64, 1192461172_int64, 1193845529_int64, 1195230332_int64, 1196615582_int64, 1198001279_int64, 1199387423_int64, 1200774015_int64, 1202161054_int64, 1203548542_int64, 1204936477_int64, 1206324862_int64, 1207713695_int64, 1209102978_int64, 1210492710_int64, 1211882892_int64, 1213273524_int64, 1214664607_int64, 1216056140_int64, 1217448124_int64, 1218840560_int64, 1220233447_int64, 1221626786_int64, 1223020577_int64, 1224414820_int64, 1225809517_int64, 1227204666_int64, 1228600269_int64, 1229996325_int64, 1231392835_int64, 1232789800_int64, 1234187219_int64, 1235585093_int64, 1236983422_int64, 1238382206_int64, 1239781446_int64, 1241181142_int64, 1242581295_int64, 1243981904_int64, 1245382969_int64, 1246784492_int64, 1248186473_int64, 1249588911_int64, 1250991808_int64, 1252395162_int64, 1253798976_int64, 1255203248_int64, 1256607980_int64, 1258013171_int64, 1259418823_int64, 1260824934_int64, 1262231506_int64, 1263638539_int64, 1265046033_int64, 1266453988_int64, 1267862405_int64, 1269271284_int64, 1270680625_int64, 1272090429_int64, 1273500695_int64, 1274911425_int64, 1276322619_int64, 1277734276_int64, 1279146397_int64, 1280558983_int64, 1281972034_int64, 1283385550_int64, 1284799531_int64, 1286213977_int64, 1287628890_int64, 1289044269_int64, 1290460114_int64, 1291876427_int64, 1293293206_int64, 1294710453_int64, 1296128168_int64, 1297546351_int64, 1298965003_int64, 1300384123_int64, 1301803712_int64, 1303223771_int64, 1304644299_int64, 1306065298_int64, 1307486766_int64, 1308908705_int64, 1310331115_int64, 1311753997_int64, 1313177350_int64, 1314601174_int64, 1316025471_int64, 1317450241_int64, 1318875483_int64, 1320301198_int64, 1321727387_int64, 1323154049_int64, 1324581186_int64, 1326008797_int64, 1327436882_int64, 1328865443_int64, 1330294479_int64, 1331723990_int64, 1333153978_int64, 1334584442_int64, 1336015382_int64, 1337446799_int64, 1338878693_int64, 1340311065_int64, 1341743915_int64, 1343177243_int64, 1344611050_int64, 1346045335_int64, 1347480099_int64, 1348915343_int64, 1350351067_int64, 1351787271_int64, 1353223955_int64, 1354661120_int64, 1356098766_int64, 1357536893_int64, 1358975502_int64, 1360414593_int64, 1361854167_int64, 1363294223_int64, 1364734762_int64, 1366175784_int64, 1367617290_int64, 1369059280_int64, 1370501755_int64, 1371944714_int64, 1373388158_int64, 1374832087_int64, 1376276502_int64, 1377721402_int64, 1379166789_int64, 1380612663_int64, 1382059023_int64, 1383505871_int64, 1384953206_int64, 1386401029_int64, 1387849341_int64, 1389298141_int64, 1390747429_int64, 1392197207_int64, 1393647475_int64, 1395098232_int64, 1396549480_int64, 1398001218_int64, 1399453447_int64, 1400906167_int64, 1402359379_int64, 1403813083_int64, 1405267279_int64, 1406721967_int64, 1408177148_int64, 1409632823_int64, 1411088990_int64, 1412545652_int64, 1414002808_int64, 1415460459_int64, 1416918604_int64, 1418377245_int64, 1419836381_int64, 1421296013_int64, 1422756141_int64, 1424216766_int64, 1425677888_int64, 1427139507_int64, 1428601623_int64, 1430064238_int64, 1431527351_int64, 1432990962_int64, 1434455072_int64, 1435919682_int64, 1437384791_int64, 1438850400_int64, 1440316509_int64, 1441783119_int64, 1443250230_int64, 1444717842_int64, 1446185956_int64, 1447654572_int64, 1449123691_int64, 1450593312_int64, 1452063436_int64, 1453534063_int64, 1455005194_int64, 1456476829_int64, 1457948969_int64, 1459421613_int64, 1460894763_int64, 1462368418_int64, 1463842578_int64, 1465317245_int64, 1466792419_int64, 1468268099_int64, 1469744286_int64, 1471220981_int64, 1472698184_int64, 1474175895_int64, 1475654115_int64, 1477132844_int64, 1478612082_int64, 1480091829_int64, 1481572087_int64, 1483052855_int64, 1484534133_int64, 1486015923_int64, 1487498224_int64, 1488981037_int64, 1490464362_int64, 1491948199_int64, 1493432549_int64, 1494917413_int64, 1496402790_int64, 1497888681_int64, 1499375086_int64, 1500862005_int64, 1502349440_int64, 1503837390_int64, 1505325855_int64, 1506814837_int64, 1508304335_int64, 1509794349_int64, 1511284881_int64, 1512775930_int64, 1514267498_int64, 1515759583_int64, 1517252186_int64, 1518745309_int64, 1520238951_int64, 1521733113_int64, 1523227794_int64, 1524722996_int64, 1526218719_int64, 1527714962_int64, 1529211727_int64, 1530709014_int64, 1532206823_int64, 1533705155_int64, 1535204009_int64, 1536703387_int64, 1538203288_int64, 1539703713_int64, 1541204663_int64, 1542706137_int64, 1544208137_int64, 1545710662_int64, 1547213712_int64, 1548717289_int64, 1550221393_int64, 1551726023_int64, 1553231181_int64, 1554736866_int64, 1556243079_int64, 1557749821_int64, 1559257091_int64, 1560764891_int64, 1562273220_int64, 1563782079_int64, 1565291469_int64, 1566801389_int64, 1568311840_int64, 1569822822_int64, 1571334336_int64, 1572846382_int64, 1574358961_int64, 1575872073_int64, 1577385718_int64, 1578899896_int64, 1580414609_int64, 1581929855_int64, 1583445637_int64, 1584961954_int64, 1586478806_int64, 1587996194_int64, 1589514119_int64, 1591032580_int64, 1592551578_int64, 1594071114_int64, 1595591187_int64, 1597111799_int64, 1598632949_int64, 1600154638_int64, 1601676866_int64, 1603199634_int64, 1604722943_int64, 1606246791_int64, 1607771181_int64, 1609296111_int64, 1610821584_int64, 1612347598_int64, 1613874155_int64, 1615401254_int64, 1616928897_int64, 1618457083_int64, 1619985813_int64, 1621515088_int64, 1623044907_int64, 1624575271_int64, 1626106181_int64, 1627637637_int64, 1629169639_int64, 1630702187_int64, 1632235283_int64, 1633768926_int64, 1635303117_int64, 1636837856_int64, 1638373143_int64, 1639908980_int64, 1641445366_int64, 1642982302_int64, 1644519788_int64, 1646057825_int64, 1647596412_int64, 1649135551_int64, 1650675242_int64, 1652215485_int64, 1653756281_int64, 1655297629_int64, 1656839531_int64, 1658381986_int64, 1659924996_int64, 1661468560_int64, 1663012679_int64, 1664557354_int64, 1666102584_int64, 1667648370_int64, 1669194713_int64, 1670741613_int64, 1672289070_int64, 1673837085_int64, 1675385658_int64, 1676934790_int64, 1678484480_int64, 1680034730_int64, 1681585540_int64, 1683136909_int64, 1684688840_int64, 1686241331_int64, 1687794384_int64, 1689347998_int64, 1690902175_int64, 1692456914_int64, 1694012217_int64, 1695568083_int64, 1697124512_int64, 1698681506_int64, 1700239064_int64, 1701797188_int64, 1703355877_int64, 1704915131_int64, 1706474953_int64, 1708035340_int64, 1709596295_int64, 1711157818_int64, 1712719908_int64, 1714282567_int64, 1715845794_int64, 1717409591_int64, 1718973957_int64, 1720538893_int64, 1722104400_int64, 1723670477_int64, 1725237126_int64, 1726804346_int64, 1728372138_int64, 1729940503_int64, 1731509441_int64, 1733078952_int64, 1734649037_int64, 1736219696_int64, 1737790930_int64, 1739362739_int64, 1740935123_int64, 1742508083_int64, 1744081619_int64, 1745655732_int64, 1747230422_int64, 1748805690_int64, 1750381536_int64, 1751957960_int64, 1753534963_int64, 1755112545_int64, 1756690707_int64, 1758269449_int64, 1759848771_int64, 1761428674_int64, 1763009159_int64, 1764590226_int64, 1766171875_int64, 1767754106_int64, 1769336921_int64, 1770920319_int64, 1772504301_int64, 1774088867_int64, 1775674018_int64, 1777259755_int64, 1778846077_int64, 1780432985_int64, 1782020480_int64, 1783608562_int64, 1785197231_int64, 1786786489_int64, 1788376334_int64, 1789966768_int64, 1791557791_int64, 1793149404_int64, 1794741607_int64, 1796334401_int64, 1797927785_int64, 1799521760_int64, 1801116328_int64, 1802711487_int64, 1804307240_int64, 1805903585_int64, 1807500524_int64, 1809098057_int64, 1810696185_int64, 1812294907_int64, 1813894224_int64, 1815494138_int64, 1817094647_int64, 1818695753_int64, 1820297457_int64, 1821899758_int64, 1823502656_int64, 1825106154_int64, 1826710250_int64, 1828314945_int64, 1829920240_int64, 1831526136_int64, 1833132632_int64, 1834739729_int64, 1836347428_int64, 1837955729_int64, 1839564632_int64, 1841174138_int64, 1842784248_int64, 1844394961_int64, 1846006279_int64, 1847618201_int64, 1849230729_int64, 1850843862_int64, 1852457602_int64, 1854071948_int64, 1855686901_int64, 1857302461_int64, 1858918629_int64, 1860535406_int64, 1862152792_int64, 1863770786_int64, 1865389391_int64, 1867008606_int64, 1868628431_int64, 1870248868_int64, 1871869916_int64, 1873491577_int64, 1875113849_int64, 1876736735_int64, 1878360235_int64, 1879984348_int64, 1881609075_int64, 1883234418_int64, 1884860375_int64, 1886486949_int64, 1888114139_int64, 1889741945_int64, 1891370369_int64, 1892999410_int64, 1894629070_int64, 1896259348_int64, 1897890245_int64, 1899521761_int64, 1901153898_int64, 1902786655_int64, 1904420033_int64, 1906054032_int64, 1907688653_int64, 1909323897_int64, 1910959763_int64, 1912596253_int64, 1914233367_int64, 1915871104_int64, 1917509467_int64, 1919148455_int64, 1920788068_int64, 1922428308_int64, 1924069174_int64, 1925710667_int64, 1927352788_int64, 1928995537_int64, 1930638915_int64, 1932282921_int64, 1933927558_int64, 1935572824_int64, 1937218720_int64, 1938865248_int64, 1940512407_int64, 1942160198_int64, 1943808622_int64, 1945457678_int64, 1947107368_int64, 1948757692_int64, 1950408650_int64, 1952060242_int64, 1953712471_int64, 1955365335_int64, 1957018835_int64, 1958672973_int64, 1960327747_int64, 1961983159_int64, 1963639210_int64, 1965295899_int64, 1966953228_int64, 1968611197_int64, 1970269805_int64, 1971929055_int64, 1973588946_int64, 1975249478_int64, 1976910653_int64, 1978572470_int64, 1980234931_int64, 1981898036_int64, 1983561784_int64, 1985226178_int64, 1986891217_int64, 1988556901_int64, 1990223232_int64, 1991890209_int64, 1993557834_int64, 1995226106_int64, 1996895027_int64, 1998564596_int64, 2000234815_int64, 2001905684_int64, 2003577202_int64, 2005249372_int64, 2006922193_int64, 2008595665_int64, 2010269790_int64, 2011944568_int64, 2013619999_int64, 2015296083_int64, 2016972823_int64, 2018650217_int64, 2020328266_int64, 2022006971_int64, 2023686333_int64, 2025366351_int64, 2027047027_int64, 2028728361_int64, 2030410353_int64, 2032093005_int64, 2033776315_int64, 2035460286_int64, 2037144917_int64, 2038830210_int64, 2040516164_int64, 2042202779_int64, 2043890058_int64, 2045577999_int64, 2047266605_int64, 2048955874_int64, 2050645808_int64, 2052336407_int64, 2054027672_int64, 2055719603_int64, 2057412201_int64, 2059105467_int64, 2060799400_int64, 2062494001_int64, 2064189272_int64, 2065885211_int64, 2067581821_int64, 2069279101_int64, 2070977052_int64, 2072675675_int64, 2074374970_int64, 2076074937_int64, 2077775577_int64, 2079476891_int64, 2081178880_int64, 2082881542_int64, 2084584881_int64, 2086288895_int64, 2087993585_int64, 2089698952_int64, 2091404997_int64, 2093111720_int64, 2094819121_int64, 2096527201_int64, 2098235960_int64, 2099945400_int64, 2101655520_int64, 2103366322_int64, 2105077805_int64, 2106789971_int64, 2108502819_int64, 2110216351_int64, 2111930567_int64, 2113645467_int64, 2115361052_int64, 2117077323_int64, 2118794279_int64, 2120511923_int64, 2122230253_int64, 2123949272_int64, 2125668978_int64, 2127389374_int64, 2129110459_int64, 2130832234_int64, 2132554699_int64, 2134277855_int64, 2136001703_int64, 2137726244_int64, 2139451477_int64, 2141177403_int64, 2142904023_int64, 2144631337_int64, 2146359347_int64, 2148088052_int64, 2149817453_int64, 2151547550_int64, 2153278345_int64, 2155009838_int64, 2156742028_int64, 2158474918_int64, 2160208508_int64, 2161942797_int64, 2163677787_int64, 2165413478_int64, 2167149870_int64, 2168886965_int64, 2170624763_int64, 2172363264_int64, 2174102470_int64, 2175842379_int64, 2177582994_int64, 2179324315_int64, 2181066342_int64, 2182809076_int64, 2184552517_int64, 2186296666_int64, 2188041524_int64, 2189787091_int64, 2191533367_int64, 2193280354_int64, 2195028052_int64, 2196776461_int64, 2198525583_int64, 2200275417_int64, 2202025964_int64, 2203777225_int64, 2205529200_int64, 2207281890_int64, 2209035296_int64, 2210789418_int64, 2212544256_int64, 2214299812_int64, 2216056086_int64, 2217813078_int64, 2219570789_int64, 2221329220_int64, 2223088371_int64, 2224848243_int64, 2226608836_int64, 2228370152_int64, 2230132189_int64, 2231894950_int64, 2233658435_int64, 2235422645_int64, 2237187579_int64, 2238953239_int64, 2240719624_int64, 2242486737_int64, 2244254577_int64, 2246023145_int64, 2247792442_int64, 2249562467_int64, 2251333223_int64, 2253104709_int64, 2254876925_int64, 2256649874_int64, 2258423554_int64, 2260197968_int64, 2261973114_int64, 2263748995_int64, 2265525610_int64, 2267302961_int64, 2269081047_int64, 2270859869_int64, 2272639429_int64, 2274419727_int64, 2276200762_int64, 2277982537_int64, 2279765051_int64, 2281548305_int64, 2283332299_int64, 2285117035_int64, 2286902513_int64, 2288688734_int64, 2290475698_int64, 2292263405_int64, 2294051857_int64, 2295841054_int64, 2297630997_int64, 2299421686_int64, 2301213122_int64, 2303005305_int64, 2304798236_int64, 2306591917_int64, 2308386346_int64, 2310181526_int64, 2311977456_int64, 2313774138_int64, 2315571571_int64, 2317369757_int64, 2319168697_int64, 2320968390_int64, 2322768837_int64, 2324570040_int64, 2326371998_int64, 2328174712_int64, 2329978184_int64, 2331782413_int64, 2333587400_int64, 2335393146_int64, 2337199652_int64, 2339006918_int64, 2340814945_int64, 2342623733_int64, 2344433283_int64, 2346243596_int64, 2348054672_int64, 2349866512_int64, 2351679117_int64, 2353492488_int64, 2355306624_int64, 2357121526_int64, 2358937196_int64, 2360753634_int64, 2362570841_int64, 2364388816_int64, 2366207562_int64, 2368027078_int64, 2369847365_int64, 2371668424_int64, 2373490255_int64, 2375312859_int64, 2377136238_int64, 2378960390_int64, 2380785318_int64, 2382611021_int64, 2384437501_int64, 2386264758_int64, 2388092793_int64, 2389921606_int64, 2391751198_int64, 2393581570_int64, 2395412722_int64, 2397244655_int64, 2399077370_int64, 2400910867_int64, 2402745147_int64, 2404580212_int64, 2406416060_int64, 2408252693_int64, 2410090113_int64, 2411928318_int64, 2413767311_int64, 2415607091_int64, 2417447660_int64, 2419289018_int64, 2421131166_int64, 2422974104_int64, 2424817833_int64, 2426662354_int64, 2428507668_int64, 2430353775_int64, 2432200675_int64, 2434048370_int64, 2435896861_int64, 2437746147_int64, 2439596230_int64, 2441447110_int64, 2443298788_int64, 2445151265_int64, 2447004541_int64, 2448858617_int64, 2450713494_int64, 2452569172_int64, 2454425653_int64, 2456282936_int64, 2458141022_int64, 2459999913_int64, 2461859609_int64, 2463720110_int64, 2465581418_int64, 2467443533_int64, 2469306455_int64, 2471170186_int64, 2473034725_int64, 2474900075_int64, 2476766235_int64, 2478633206_int64, 2480500989_int64, 2482369585_int64, 2484238994_int64, 2486109217_int64, 2487980255_int64, 2489852109_int64, 2491724778_int64, 2493598264_int64, 2495472568_int64, 2497347690_int64, 2499223632_int64, 2501100392_int64, 2502977974_int64, 2504856376_int64, 2506735601_int64, 2508615648_int64, 2510496518_int64, 2512378212_int64, 2514260732_int64, 2516144076_int64, 2518028247_int64, 2519913245_int64, 2521799070_int64, 2523685724_int64, 2525573207_int64, 2527461520_int64, 2529350663_int64, 2531240638_int64, 2533131444_int64, 2535023084_int64, 2536915557_int64, 2538808864_int64, 2540703006_int64, 2542597984_int64, 2544493798_int64, 2546390450_int64, 2548287939_int64, 2550186267_int64, 2552085435_int64, 2553985442_int64, 2555886291_int64, 2557787981_int64, 2559690514_int64, 2561593890_int64, 2563498109_int64, 2565403174_int64, 2567309083_int64, 2569215839_int64, 2571123442_int64, 2573031892_int64, 2574941191_int64, 2576851338_int64, 2578762336_int64, 2580674184_int64, 2582586884_int64, 2584500436_int64, 2586414841_int64, 2588330100_int64, 2590246213_int64, 2592163181_int64, 2594081005_int64, 2595999686_int64, 2597919225_int64, 2599839621_int64, 2601760877_int64, 2603682993_int64, 2605605969_int64, 2607529807_int64, 2609454506_int64, 2611380069_int64, 2613306495_int64, 2615233786_int64, 2617161942_int64, 2619090964_int64, 2621020853_int64, 2622951609_int64, 2624883233_int64, 2626815727_int64, 2628749091_int64, 2630683325_int64, 2632618431_int64, 2634554409_int64, 2636491260_int64, 2638428985_int64, 2640367585_int64, 2642307060_int64, 2644247411_int64, 2646188639_int64, 2648130745_int64, 2650073730_int64, 2652017594_int64, 2653962338_int64, 2655907963_int64, 2657854470_int64, 2659801859_int64, 2661750132_int64, 2663699289_int64, 2665649331_int64, 2667600258_int64, 2669552073_int64, 2671504774_int64, 2673458364_int64, 2675412843_int64, 2677368212_int64, 2679324471_int64, 2681281622_int64, 2683239665_int64, 2685198601_int64, 2687158431_int64, 2689119156_int64, 2691080776_int64, 2693043292_int64, 2695006706_int64, 2696971018_int64, 2698936228_int64, 2700902338_int64, 2702869349_int64, 2704837260_int64, 2706806074_int64, 2708775791_int64, 2710746412_int64, 2712717937_int64, 2714690367_int64, 2716663704_int64, 2718637948_int64, 2720613099_int64, 2722589160_int64, 2724566130_int64, 2726544010_int64, 2728522802_int64, 2730502506_int64, 2732483122_int64, 2734464653_int64, 2736447098_int64, 2738430459_int64, 2740414736_int64, 2742399930_int64, 2744386042_int64, 2746373073_int64, 2748361023_int64, 2750349894_int64, 2752339687_int64, 2754330402_int64, 2756322040_int64, 2758314602_int64, 2760308089_int64, 2762302501_int64, 2764297840_int64, 2766294107_int64, 2768291302_int64, 2770289426_int64, 2772288480_int64, 2774288464_int64, 2776289381_int64, 2778291230_int64, 2780294013_int64, 2782297730_int64, 2784302382_int64, 2786307970_int64, 2788314496_int64, 2790321959_int64, 2792330361_int64, 2794339702_int64, 2796349984_int64, 2798361207_int64, 2800373373_int64, 2802386481_int64, 2804400534_int64, 2806415532_int64, 2808431475_int64, 2810448365_int64, 2812466203_int64, 2814484989_int64, 2816504724_int64, 2818525410_int64, 2820547047_int64, 2822569636_int64, 2824593177_int64, 2826617673_int64, 2828643123_int64, 2830669529_int64, 2832696892_int64, 2834725212_int64, 2836754490_int64, 2838784727_int64, 2840815925_int64, 2842848084_int64, 2844881204_int64, 2846915288_int64, 2848950335_int64, 2850986347_int64, 2853023325_int64, 2855061269_int64, 2857100181_int64, 2859140061_int64, 2861180910_int64, 2863222729_int64, 2865265520_int64, 2867309283_int64, 2869354019_int64, 2871399728_int64, 2873446413_int64, 2875494073_int64, 2877542710_int64, 2879592324_int64, 2881642918_int64, 2883694490_int64, 2885747043_int64, 2887800578_int64, 2889855095_int64, 2891910595_int64, 2893967079_int64, 2896024548_int64, 2898083004_int64, 2900142446_int64, 2902202877_int64, 2904264296_int64, 2906326706_int64, 2908390106_int64, 2910454498_int64, 2912519882_int64, 2914586261_int64, 2916653634_int64, 2918722002_int64, 2920791367_int64, 2922861730_int64, 2924933091_int64, 2927005452_int64, 2929078813_int64, 2931153175_int64, 2933228540_int64, 2935304908_int64, 2937382281_int64, 2939460658_int64, 2941540042_int64, 2943620433_int64, 2945701832_int64, 2947784241_int64, 2949867659_int64, 2951952089_int64, 2954037531_int64, 2956123986_int64, 2958211455_int64, 2960299939_int64, 2962389439_int64, 2964479956_int64, 2966571491_int64, 2968664045_int64, 2970757619_int64, 2972852214_int64, 2974947832_int64, 2977044472_int64, 2979142136_int64, 2981240825_int64, 2983340540_int64, 2985441283_int64, 2987543053_int64, 2989645852_int64, 2991749681_int64, 2993854541_int64, 2995960434_int64, 2998067359_int64, 3000175319_int64, 3002284313_int64, 3004394344_int64, 3006505412_int64, 3008617517_int64, 3010730663_int64, 3012844848_int64, 3014960074_int64, 3017076343_int64, 3019193655_int64, 3021312011_int64, 3023431413_int64, 3025551861_int64, 3027673356_int64, 3029795900_int64, 3031919493_int64, 3034044137_int64, 3036169832_int64, 3038296580_int64, 3040424382_int64, 3042553238_int64, 3044683150_int64, 3046814119_int64, 3048946145_int64, 3051079231_int64, 3053213376_int64, 3055348582_int64, 3057484850_int64, 3059622182_int64, 3061760577_int64, 3063900038_int64, 3066040565_int64, 3068182159_int64, 3070324822_int64, 3072468554_int64, 3074613357_int64, 3076759231_int64, 3078906178_int64, 3081054199_int64, 3083203294_int64, 3085353466_int64, 3087504714_int64, 3089657040_int64, 3091810446_int64, 3093964932_int64, 3096120499_int64, 3098277148_int64, 3100434881_int64, 3102593699_int64, 3104753602_int64, 3106914592_int64, 3109076669_int64, 3111239836_int64, 3113404093_int64, 3115569441_int64, 3117735881_int64, 3119903414_int64, 3122072042_int64, 3124241765_int64, 3126412585_int64, 3128584503_int64, 3130757520_int64, 3132931636_int64, 3135106854_int64, 3137283174_int64, 3139460597_int64, 3141639125_int64, 3143818758_int64, 3145999498_int64, 3148181346_int64, 3150364303_int64, 3152548369_int64, 3154733547_int64, 3156919838_int64, 3159107242_int64, 3161295760_int64, 3163485394_int64, 3165676145_int64, 3167868014_int64, 3170061002_int64, 3172255111_int64, 3174450341_int64, 3176646693_int64, 3178844170_int64, 3181042771_int64, 3183242498_int64, 3185443353_int64, 3187645335_int64, 3189848448_int64, 3192052691_int64, 3194258065_int64, 3196464573_int64, 3198672215_int64, 3200880992_int64, 3203090906_int64, 3205301957_int64, 3207514148_int64, 3209727478_int64, 3211941949_int64, 3214157563_int64, 3216374321_int64, 3218592223_int64, 3220811271_int64, 3223031466_int64, 3225252809_int64, 3227475302_int64, 3229698946_int64, 3231923741_int64, 3234149689_int64, 3236376792_int64, 3238605050_int64, 3240834465_int64, 3243065037_int64, 3245296769_int64, 3247529660_int64, 3249763714_int64, 3251998930_int64, 3254235309_int64, 3256472854_int64, 3258711565_int64, 3260951444_int64, 3263192492_int64, 3265434709_int64, 3267678098_int64, 3269922659_int64, 3272168393_int64, 3274415303_int64, 3276663388_int64, 3278912651_int64, 3281163092_int64, 3283414713_int64, 3285667516_int64, 3287921500_int64, 3290176668_int64, 3292433021_int64, 3294690560_int64, 3296949285_int64, 3299209200_int64, 3301470304_int64, 3303732599_int64, 3305996087_int64, 3308260768_int64, 3310526643_int64, 3312793715_int64, 3315061984_int64, 3317331452_int64, 3319602119_int64, 3321873988_int64, 3324147058_int64, 3326421333_int64, 3328696812_int64, 3330973498_int64, 3333251391_int64, 3335530493_int64, 3337810805_int64, 3340092328_int64, 3342375064_int64, 3344659013_int64, 3346944178_int64, 3349230560_int64, 3351518159_int64, 3353806977_int64, 3356097016_int64, 3358388276_int64, 3360680759_int64, 3362974467_int64, 3365269400_int64, 3367565560_int64, 3369862948_int64, 3372161566_int64, 3374461415_int64, 3376762496_int64, 3379064810_int64, 3381368359_int64, 3383673144_int64, 3385979167_int64, 3388286429_int64, 3390594930_int64, 3392904674_int64, 3395215660_int64, 3397527890_int64, 3399841365_int64, 3402156088_int64, 3404472058_int64, 3406789278_int64, 3409107749_int64, 3411427472_int64, 3413748449_int64, 3416070681_int64, 3418394169_int64, 3420718914_int64, 3423044919_int64, 3425372184_int64, 3427700710_int64, 3430030500_int64, 3432361554_int64, 3434693874_int64, 3437027461_int64, 3439362317_int64, 3441698443_int64, 3444035840_int64, 3446374510_int64, 3448714455_int64, 3451055674_int64, 3453398171_int64, 3455741946_int64, 3458087000_int64, 3460433336_int64, 3462780954_int64, 3465129856_int64, 3467480043_int64, 3469831517_int64, 3472184280_int64, 3474538331_int64, 3476893674_int64, 3479250309_int64, 3481608238_int64, 3483967462_int64, 3486327983_int64, 3488689801_int64, 3491052920_int64, 3493417339_int64, 3495783060_int64, 3498150086_int64, 3500518416_int64, 3502888053_int64, 3505258999_int64, 3507631254_int64, 3510004819_int64, 3512379698_int64, 3514755890_int64, 3517133397_int64, 3519512222_int64, 3521892364_int64, 3524273827_int64, 3526656610_int64, 3529040717_int64, 3531426147_int64, 3533812903_int64, 3536200986_int64, 3538590398_int64, 3540981139_int64, 3543373213_int64, 3545766619_int64, 3548161359_int64, 3550557436_int64, 3552954850_int64, 3555353603_int64, 3557753697_int64, 3560155132_int64, 3562557911_int64, 3564962035_int64, 3567367506_int64, 3569774324_int64, 3572182492_int64, 3574592011_int64, 3577002882_int64, 3579415108_int64, 3581828689_int64, 3584243627_int64, 3586659924_int64, 3589077580_int64, 3591496599_int64, 3593916981_int64, 3596338727_int64, 3598761840_int64, 3601186321_int64, 3603612171_int64, 3606039391_int64, 3608467985_int64, 3610897952_int64, 3613329295_int64, 3615762015_int64, 3618196114_int64, 3620631593_int64, 3623068454_int64, 3625506699_int64, 3627946328_int64, 3630387344_int64, 3632829748_int64, 3635273542_int64, 3637718727_int64, 3640165304_int64, 3642613277_int64, 3645062645_int64, 3647513411_int64, 3649965576_int64, 3652419142_int64, 3654874111_int64, 3657330483_int64, 3659788262_int64, 3662247447_int64, 3664708041_int64, 3667170046_int64, 3669633463_int64, 3672098294_int64, 3674564540_int64, 3677032203_int64, 3679501284_int64, 3681971786_int64, 3684443710_int64, 3686917057_int64, 3689391829_int64, 3691868029_int64, 3694345656_int64, 3696824714_int64, 3699305203_int64, 3701787126_int64, 3704270484_int64, 3706755278_int64, 3709241511_int64, 3711729184_int64, 3714218299_int64, 3716708857_int64, 3719200860_int64, 3721694310_int64, 3724189209_int64, 3726685557_int64, 3729183357_int64, 3731682611_int64, 3734183320_int64, 3736685485_int64, 3739189110_int64, 3741694194_int64, 3744200741_int64, 3746708751_int64, 3749218226_int64, 3751729169_int64, 3754241580_int64, 3756755462_int64, 3759270817_int64, 3761787645_int64, 3764305949_int64, 3766825730_int64, 3769346991_int64, 3771869732_int64, 3774393957_int64, 3776919665_int64, 3779446860_int64, 3781975543_int64, 3784505715_int64, 3787037378_int64, 3789570535_int64, 3792105187_int64, 3794641336_int64, 3797178982_int64, 3799718130_int64, 3802258779_int64, 3804800932_int64, 3807344590_int64, 3809889756_int64, 3812436431_int64, 3814984617_int64, 3817534316_int64, 3820085529_int64, 3822638259_int64, 3825192506_int64, 3827748274_int64, 3830305563_int64, 3832864376_int64, 3835424714_int64, 3837986580_int64, 3840549974_int64, 3843114899_int64, 3845681357_int64, 3848249350_int64, 3850818879_int64, 3853389946_int64, 3855962553_int64, 3858536702_int64, 3861112394_int64, 3863689632_int64, 3866268418_int64, 3868848753_int64, 3871430639_int64, 3874014078_int64, 3876599072_int64, 3879185623_int64, 3881773732_int64, 3884363402_int64, 3886954634_int64, 3889547431_int64, 3892141793_int64, 3894737724_int64, 3897335225_int64, 3899934297_int64, 3902534944_int64, 3905137166_int64, 3907740965_int64, 3910346344_int64, 3912953305_int64, 3915561849_int64, 3918171978_int64, 3920783694_int64, 3923396999_int64, 3926011896_int64, 3928628385_int64, 3931246470_int64, 3933866151_int64, 3936487431_int64, 3939110312_int64, 3941734796_int64, 3944360884_int64, 3946988579_int64, 3949617882_int64, 3952248797_int64, 3954881323_int64, 3957515465_int64, 3960151223_int64, 3962788599_int64, 3965427596_int64, 3968068215_int64, 3970710459_int64, 3973354329_int64, 3975999828_int64, 3978646958_int64, 3981295720_int64, 3983946116_int64, 3986598149_int64, 3989251821_int64, 3991907133_int64, 3994564088_int64, 3997222687_int64, 3999882933_int64, 4002544828_int64, 4005208374_int64, 4007873572_int64, 4010540426_int64, 4013208936_int64, 4015879106_int64, 4018550936_int64, 4021224430_int64, 4023899588_int64, 4026576414_int64, 4029254910_int64, 4031935077_int64, 4034616917_int64, 4037300433_int64, 4039985627_int64, 4042672501_int64, 4045361056_int64, 4048051296_int64, 4050743221_int64, 4053436835_int64, 4056132140_int64, 4058829136_int64, 4061527828_int64, 4064228216_int64, 4066930303_int64, 4069634091_int64, 4072339583_int64, 4075046779_int64, 4077755683_int64, 4080466297_int64, 4083178623_int64, 4085892662_int64, 4088608418_int64, 4091325891_int64, 4094045086_int64, 4096766003_int64, 4099488645_int64, 4102213013_int64, 4104939111_int64, 4107666941_int64, 4110396504_int64, 4113127803_int64, 4115860840_int64, 4118595617_int64, 4121332136_int64, 4124070400_int64, 4126810412_int64, 4129552172_int64, 4132295683_int64, 4135040949_int64, 4137787970_int64, 4140536749_int64, 4143287288_int64, 4146039591_int64, 4148793657_int64, 4151549492_int64, 4154307095_int64, 4157066470_int64, 4159827619_int64, 4162590545_int64, 4165355249_int64, 4168121733_int64, 4170890001_int64, 4173660054_int64, 4176431895_int64, 4179205526_int64, 4181980949_int64, 4184758167_int64, 4187537182_int64, 4190317996_int64, 4193100612_int64, 4195885032_int64, 4198671258_int64, 4201459292_int64, 4204249138_int64, 4207040797_int64, 4209834272_int64, 4212629565_int64, 4215426678_int64, 4218225614_int64, 4221026375_int64, 4223828964_int64, 4226633383_int64, 4229439634_int64, 4232247720_int64, 4235057643_int64, 4237869406_int64, 4240683011_int64, 4243498460_int64, 4246315755_int64, 4249134900_int64, 4251955897_int64, 4254778748_int64, 4257603455_int64, 4260430021_int64, 4263258449_int64, 4266088741_int64, 4268920899_int64, 4271754925_int64, 4274590823_int64, 4277428595_int64, 4280268243_int64, 4283109769_int64, 4285953177_int64, 4288798469_int64, 4291645646_int64, 4294494713_int64, 4297345670_int64, 4300198521_int64, 4303053269_int64, 4305909915_int64, 4308768462_int64, 4311628913_int64, 4314491271_int64, 4317355537_int64, 4320221715_int64, 4323089807_int64, 4325959815_int64, 4328831743_int64, 4331705592_int64, 4334581365_int64, 4337459065_int64, 4340338695_int64, 4343220256_int64, 4346103752_int64, 4348989186_int64, 4351876559_int64, 4354765874_int64, 4357657135_int64, 4360550343_int64, 4363445501_int64, 4366342612_int64, 4369241679_int64, 4372142704_int64, 4375045690_int64, 4377950639_int64, 4380857555_int64, 4383766439_int64, 4386677294_int64, 4389590124_int64, 4392504931_int64, 4395421717_int64, 4398340485_int64, 4401261238_int64, 4404183979_int64, 4407108710_int64, 4410035434_int64, 4412964153_int64, 4415894872_int64, 4418827591_int64, 4421762314_int64, 4424699044_int64, 4427637783_int64, 4430578535_int64, 4433521301_int64, 4436466085_int64, 4439412890_int64, 4442361717_int64, 4445312571_int64, 4448265453_int64, 4451220367_int64, 4454177316_int64, 4457136301_int64, 4460097327_int64, 4463060395_int64, 4466025509_int64, 4468992671_int64, 4471961885_int64, 4474933152_int64, 4477906477_int64, 4480881861_int64, 4483859309_int64, 4486838821_int64, 4489820402_int64, 4492804055_int64, 4495789781_int64, 4498777584_int64, 4501767468_int64, 4504759434_int64, 4507753486_int64, 4510749626_int64, 4513747859_int64, 4516748185_int64, 4519750609_int64, 4522755133_int64, 4525761761_int64, 4528770495_int64, 4531781338_int64, 4534794293_int64, 4537809363_int64, 4540826551_int64, 4543845860_int64, 4546867294_int64, 4549890854_int64, 4552916545_int64, 4555944368_int64, 4558974327_int64, 4562006426_int64, 4565040666_int64, 4568077052_int64, 4571115586_int64, 4574156271_int64, 4577199110_int64, 4580244106_int64, 4583291263_int64, 4586340583_int64, 4589392070_int64, 4592445726_int64, 4595501555_int64, 4598559560_int64, 4601619743_int64, 4604682108_int64, 4607746659_int64, 4610813398_int64, 4613882327_int64, 4616953452_int64, 4620026774_int64, 4623102297_int64, 4626180023_int64, 4629259957_int64, 4632342101_int64, 4635426458_int64, 4638513032_int64, 4641601825_int64, 4644692842_int64, 4647786085_int64, 4650881557_int64, 4653979261_int64, 4657079202_int64, 4660181381_int64, 4663285803_int64, 4666392470_int64, 4669501386_int64, 4672612554_int64, 4675725978_int64, 4678841660_int64, 4681959603_int64, 4685079812_int64, 4688202289_int64, 4691327038_int64, 4694454062_int64, 4697583365_int64, 4700714949_int64, 4703848818_int64, 4706984975_int64, 4710123424_int64, 4713264168_int64, 4716407211_int64, 4719552555_int64, 4722700204_int64, 4725850162_int64, 4729002432_int64, 4732157017_int64, 4735313920_int64, 4738473146_int64, 4741634698_int64, 4744798578_int64, 4747964791_int64, 4751133339_int64, 4754304227_int64, 4757477457_int64, 4760653034_int64, 4763830960_int64, 4767011240_int64, 4770193876_int64, 4773378872_int64, 4776566232_int64, 4779755959_int64, 4782948057_int64, 4786142529_int64, 4789339379_int64, 4792538610_int64, 4795740225_int64, 4798944229_int64, 4802150625_int64, 4805359417_int64, 4808570608_int64, 4811784201_int64, 4815000201_int64, 4818218610_int64, 4821439433_int64, 4824662673_int64, 4827888334_int64, 4831116419_int64, 4834346933_int64, 4837579878_int64, 4840815258_int64, 4844053078_int64, 4847293340_int64, 4850536048_int64, 4853781207_int64, 4857028820_int64, 4860278890_int64, 4863531421_int64, 4866786417_int64, 4870043882_int64, 4873303819_int64, 4876566233_int64, 4879831127_int64, 4883098504_int64, 4886368369_int64, 4889640725_int64, 4892915576_int64, 4896192926_int64, 4899472779_int64, 4902755139_int64, 4906040009_int64, 4909327393_int64, 4912617296_int64, 4915909720_int64, 4919204670_int64, 4922502150_int64, 4925802163_int64, 4929104714_int64, 4932409807_int64, 4935717444_int64, 4939027631_int64, 4942340371_int64, 4945655668_int64, 4948973527_int64, 4952293950_int64, 4955616942_int64, 4958942508_int64, 4962270650_int64, 4965601373_int64, 4968934681_int64, 4972270578_int64, 4975609068_int64, 4978950155_int64, 4982293844_int64, 4985640137_int64, 4988989039_int64, 4992340555_int64, 4995694688_int64, 4999051443_int64, 5002410823_int64, 5005772833_int64, 5009137477_int64, 5012504758_int64, 5015874682_int64, 5019247251_int64, 5022622471_int64, 5026000346_int64, 5029380879_int64, 5032764075_int64, 5036149939_int64, 5039538473_int64, 5042929683_int64, 5046323573_int64, 5049720147_int64, 5053119409_int64, 5056521363_int64, 5059926014_int64, 5063333367_int64, 5066743424_int64, 5070156191_int64, 5073571672_int64, 5076989872_int64, 5080410794_int64, 5083834443_int64, 5087260823_int64, 5090689939_int64, 5094121794_int64, 5097556395_int64, 5100993744_int64, 5104433846_int64, 5107876705_int64, 5111322327_int64, 5114770715_int64, 5118221875_int64, 5121675809_int64, 5125132523_int64, 5128592022_int64, 5132054309_int64, 5135519390_int64, 5138987269_int64, 5142457949_int64, 5145931437_int64, 5149407736_int64, 5152886851_int64, 5156368787_int64, 5159853548_int64, 5163341138_int64, 5166831563_int64, 5170324826_int64, 5173820933_int64, 5177319888_int64, 5180821696_int64, 5184326362_int64, 5187833889_int64, 5191344284_int64, 5194857550_int64, 5198373692_int64, 5201892715_int64, 5205414623_int64, 5208939422_int64, 5212467116_int64, 5215997710_int64, 5219531209_int64, 5223067617_int64, 5226606939_int64, 5230149180_int64, 5233694346_int64, 5237242439_int64, 5240793467_int64, 5244347432_int64, 5247904341_int64, 5251464198_int64, 5255027008_int64, 5258592776_int64, 5262161507_int64, 5265733206_int64, 5269307877_int64, 5272885526_int64, 5276466158_int64, 5280049777_int64, 5283636388_int64, 5287225998_int64, 5290818610_int64, 5294414229_int64, 5298012861_int64, 5301614511_int64, 5305219184_int64, 5308826885_int64, 5312437618_int64, 5316051390_int64, 5319668205_int64, 5323288068_int64, 5326910984_int64, 5330536959_int64, 5334165998_int64, 5337798106_int64, 5341433288_int64, 5345071550_int64, 5348712896_int64, 5352357331_int64, 5356004862_int64, 5359655493_int64, 5363309230_int64, 5366966078_int64, 5370626041_int64, 5374289127_int64, 5377955339_int64, 5381624683_int64, 5385297165_int64, 5388972790_int64, 5392651563_int64, 5396333490_int64, 5400018576_int64, 5403706826_int64, 5407398246_int64, 5411092842_int64, 5414790619_int64, 5418491582_int64, 5422195737_int64, 5425903089_int64, 5429613644_int64, 5433327408_int64, 5437044385_int64, 5440764582_int64, 5444488004_int64, 5448214657_int64, 5451944547_int64, 5455677678_int64, 5459414057_int64, 5463153689_int64, 5466896580_int64, 5470642736_int64, 5474392162_int64, 5478144864_int64, 5481900848_int64, 5485660120_int64, 5489422684_int64, 5493188548_int64, 5496957717_int64, 5500730196_int64, 5504505991_int64, 5508285109_int64, 5512067555_int64, 5515853336_int64, 5519642456_int64, 5523434922_int64, 5527230739_int64, 5531029914_int64, 5534832453_int64, 5538638361_int64, 5542447645_int64, 5546260311_int64, 5550076364_int64, 5553895810_int64, 5557718656_int64, 5561544908_int64, 5565374571_int64, 5569207653_int64, 5573044158_int64, 5576884093_int64, 5580727465_int64, 5584574278_int64, 5588424541_int64, 5592278258_int64, 5596135436_int64, 5599996081_int64, 5603860199_int64, 5607727797_int64, 5611598881_int64, 5615473457_int64, 5619351532_int64, 5623233111_int64, 5627118201_int64, 5631006810_int64, 5634898941_int64, 5638794604_int64, 5642693803_int64, 5646596545_int64, 5650502836_int64, 5654412684_int64, 5658326094_int64, 5662243073_int64, 5666163628_int64, 5670087764_int64, 5674015490_int64, 5677946810_int64, 5681881732_int64, 5685820263_int64, 5689762408_int64, 5693708176_int64, 5697657571_int64, 5701610602_int64, 5705567274_int64, 5709527594_int64, 5713491570_int64, 5717459207_int64, 5721430514_int64, 5725405495_int64, 5729384159_int64, 5733366512_int64, 5737352561_int64, 5741342312_int64, 5745335774_int64, 5749332951_int64, 5753333853_int64, 5757338485_int64, 5761346854_int64, 5765358967_int64, 5769374832_int64, 5773394456_int64, 5777417845_int64, 5781445006_int64, 5785475947_int64, 5789510675_int64, 5793549196_int64, 5797591519_int64, 5801637649_int64, 5805687595_int64, 5809741363_int64, 5813798962_int64, 5817860397_int64, 5821925676_int64, 5825994807_int64, 5830067797_int64, 5834144652_int64, 5838225382_int64, 5842309992_int64, 5846398490_int64, 5850490884_int64, 5854587182_int64, 5858687389_int64, 5862791515_int64, 5866899566_int64, 5871011551_int64, 5875127476_int64, 5879247349_int64, 5883371177_int64, 5887498970_int64, 5891630733_int64, 5895766474_int64, 5899906202_int64, 5904049924_int64, 5908197647_int64, 5912349380_int64, 5916505130_int64, 5920664905_int64, 5924828713_int64, 5928996561_int64, 5933168458_int64, 5937344411_int64, 5941524428_int64, 5945708517_int64, 5949896686_int64, 5954088944_int64, 5958285297_int64, 5962485754_int64, 5966690324_int64, 5970899013_int64, 5975111831_int64, 5979328785_int64, 5983549883_int64, 5987775134_int64, 5992004546_int64, 5996238127_int64, 6000475885_int64, 6004717828_int64, 6008963965_int64, 6013214304_int64, 6017468854_int64, 6021727622_int64, 6025990617_int64, 6030257848_int64, 6034529322_int64, 6038805049_int64, 6043085037_int64, 6047369294_int64, 6051657829_int64, 6055950650_int64, 6060247766_int64, 6064549186_int64, 6068854918_int64, 6073164971_int64, 6077479353_int64, 6081798074_int64, 6086121141_int64, 6090448565_int64, 6094780352_int64, 6099116514_int64, 6103457057_int64, 6107801991_int64, 6112151326_int64, 6116505069_int64, 6120863230_int64, 6125225818_int64, 6129592841_int64, 6133964310_int64, 6138340232_int64, 6142720617_int64, 6147105474_int64, 6151494813_int64, 6155888642_int64, 6160286970_int64, 6164689807_int64, 6169097162_int64, 6173509045_int64, 6177925464_int64, 6182346429_int64, 6186771950_int64, 6191202035_int64, 6195636695_int64, 6200075938_int64, 6204519774_int64, 6208968213_int64, 6213421264_int64, 6217878936_int64, 6222341240_int64, 6226808186_int64, 6231279781_int64, 6235756037_int64, 6240236963_int64, 6244722569_int64, 6249212865_int64, 6253707860_int64, 6258207564_int64, 6262711987_int64, 6267221140_int64, 6271735031_int64, 6276253672_int64, 6280777071_int64, 6285305239_int64, 6289838187_int64, 6294375923_int64, 6298918459_int64, 6303465805_int64, 6308017970_int64, 6312574965_int64, 6317136800_int64, 6321703485_int64, 6326275031_int64, 6330851449_int64, 6335432748_int64, 6340018939_int64, 6344610032_int64, 6349206038_int64, 6353806967_int64, 6358412831_int64, 6363023639_int64, 6367639402_int64, 6372260131_int64, 6376885837_int64, 6381516530_int64, 6386152221_int64, 6390792921_int64, 6395438640_int64, 6400089390_int64, 6404745182_int64, 6409406026_int64, 6414071933_int64, 6418742915_int64, 6423418982_int64, 6428100146_int64, 6432786417_int64, 6437477808_int64, 6442174328_int64, 6446875989_int64, 6451582803_int64, 6456294781_int64, 6461011934_int64, 6465734273_int64, 6470461811_int64, 6475194557_int64, 6479932525_int64, 6484675725_int64, 6489424169_int64, 6494177869_int64, 6498936836_int64, 6503701082_int64, 6508470619_int64, 6513245458_int64, 6518025611_int64, 6522811091_int64, 6527601908_int64, 6532398075_int64, 6537199604_int64, 6542006507_int64, 6546818796_int64, 6551636483_int64, 6556459580_int64, 6561288099_int64, 6566122052_int64, 6570961452_int64, 6575806312_int64, 6580656642_int64, 6585512457_int64, 6590373767_int64, 6595240586_int64, 6600112926_int64, 6604990800_int64, 6609874220_int64, 6614763198_int64, 6619657748_int64, 6624557883_int64, 6629463614_int64, 6634374955_int64, 6639291919_int64, 6644214518_int64, 6649142766_int64, 6654076675_int64, 6659016258_int64, 6663961529_int64, 6668912500_int64, 6673869186_int64, 6678831598_int64, 6683799750_int64, 6688773656_int64, 6693753329_int64, 6698738782_int64, 6703730029_int64, 6708727083_int64, 6713729957_int64, 6718738666_int64, 6723753223_int64, 6728773641_int64, 6733799934_int64, 6738832117_int64, 6743870202_int64, 6748914204_int64, 6753964137_int64, 6759020014_int64, 6764081850_int64, 6769149659_int64, 6774223454_int64, 6779303251_int64, 6784389062_int64, 6789480903_int64, 6794578788_int64, 6799682730_int64, 6804792746_int64, 6809908848_int64, 6815031051_int64, 6820159371_int64, 6825293822_int64, 6830434418_int64, 6835581173_int64, 6840734104_int64, 6845893225_int64, 6851058550_int64, 6856230094_int64, 6861407874_int64, 6866591902_int64, 6871782196_int64, 6876978769_int64, 6882181637_int64, 6887390816_int64, 6892606320_int64, 6897828166_int64, 6903056368_int64, 6908290942_int64, 6913531903_int64, 6918779267_int64, 6924033051_int64, 6929293268_int64, 6934559937_int64, 6939833071_int64, 6945112687_int64, 6950398801_int64, 6955691430_int64, 6960990588_int64, 6966296292_int64, 6971608559_int64, 6976927405_int64, 6982252846_int64, 6987584898_int64, 6992923577_int64, 6998268901_int64, 7003620886_int64, 7008979549_int64, 7014344905_int64, 7019716972_int64, 7025095767_int64, 7030481307_int64, 7035873608_int64, 7041272688_int64, 7046678563_int64, 7052091251_int64, 7057510769_int64, 7062937134_int64, 7068370363_int64, 7073810475_int64, 7079257485_int64, 7084711413_int64, 7090172275_int64, 7095640088_int64, 7101114872_int64, 7106596644_int64, 7112085420_int64, 7117581221_int64, 7123084062_int64, 7128593963_int64, 7134110942_int64, 7139635017_int64, 7145166205_int64, 7150704526_int64, 7156249998_int64, 7161802639_int64, 7167362468_int64, 7172929503_int64, 7178503764_int64, 7184085269_int64, 7189674036_int64, 7195270086_int64, 7200873436_int64, 7206484106_int64, 7212102115_int64, 7217727482_int64, 7223360227_int64, 7229000369_int64, 7234647927_int64, 7240302921_int64, 7245965370_int64, 7251635295_int64, 7257312715_int64, 7262997649_int64, 7268690118_int64, 7274390142_int64, 7280097740_int64, 7285812934_int64, 7291535743_int64, 7297266187_int64, 7303004287_int64, 7308750063_int64, 7314503537_int64, 7320264728_int64, 7326033657_int64, 7331810346_int64, 7337594815_int64, 7343387084_int64, 7349187176_int64, 7354995111_int64, 7360810911_int64, 7366634596_int64, 7372466189_int64, 7378305710_int64, 7384153182_int64, 7390008625_int64, 7395872063_int64, 7401743516_int64, 7407623007_int64, 7413510557_int64, 7419406189_int64, 7425309925_int64, 7431221787_int64, 7437141798_int64, 7443069981_int64, 7449006356_int64, 7454950949_int64, 7460903780_int64, 7466864874_int64, 7472834253_int64, 7478811940_int64, 7484797958_int64, 7490792330_int64, 7496795081_int64, 7502806233_int64, 7508825809_int64, 7514853835_int64, 7520890332_int64, 7526935326_int64, 7532988840_int64, 7539050898_int64, 7545121524_int64, 7551200742_int64, 7557288578_int64, 7563385055_int64, 7569490198_int64, 7575604031_int64, 7581726580_int64, 7587857869_int64, 7593997924_int64, 7600146768_int64, 7606304429_int64, 7612470930_int64, 7618646297_int64, 7624830556_int64, 7631023733_int64, 7637225853_int64, 7643436942_int64, 7649657026_int64, 7655886131_int64, 7662124284_int64, 7668371510_int64, 7674627837_int64, 7680893290_int64, 7687167896_int64, 7693451682_int64, 7699744676_int64, 7706046904_int64, 7712358392_int64, 7718679169_int64, 7725009262_int64, 7731348699_int64, 7737697506_int64, 7744055712_int64, 7750423344_int64, 7756800431_int64, 7763187001_int64, 7769583081_int64, 7775988701_int64, 7782403889_int64, 7788828673_int64, 7795263082_int64, 7801707145_int64, 7808160891_int64, 7814624350_int64, 7821097550_int64, 7827580520_int64, 7834073291_int64, 7840575893_int64, 7847088354_int64, 7853610705_int64, 7860142976_int64, 7866685197_int64, 7873237398_int64, 7879799611_int64, 7886371865_int64, 7892954192_int64, 7899546622_int64, 7906149186_int64, 7912761916_int64, 7919384843_int64, 7926017999_int64, 7932661414_int64, 7939315122_int64, 7945979153_int64, 7952653540_int64, 7959338315_int64, 7966033511_int64, 7972739160_int64, 7979455295_int64, 7986181948_int64, 7992919153_int64, 7999666943_int64, 8006425351_int64, 8013194410_int64, 8019974155_int64, 8026764618_int64, 8033565835_int64, 8040377838_int64, 8047200663_int64, 8054034344_int64, 8060878915_int64, 8067734410_int64, 8074600866_int64, 8081478318_int64, 8088366799_int64, 8095266346_int64, 8102176995_int64, 8109098781_int64, 8116031740_int64, 8122975909_int64, 8129931323_int64, 8136898019_int64, 8143876034_int64, 8150865405_int64, 8157866168_int64, 8164878361_int64, 8171902022_int64, 8178937187_int64, 8185983894_int64, 8193042182_int64, 8200112089_int64, 8207193652_int64, 8214286911_int64, 8221391904_int64, 8228508670_int64, 8235637248_int64, 8242777678_int64, 8249929998_int64, 8257094249_int64, 8264270470_int64, 8271458701_int64, 8278658983_int64, 8285871357_int64, 8293095862_int64, 8300332540_int64, 8307581431_int64, 8314842578_int64, 8322116021_int64, 8329401803_int64, 8336699965_int64, 8344010549_int64, 8351333599_int64, 8358669155_int64, 8366017262_int64, 8373377962_int64, 8380751298_int64, 8388137314_int64, 8395536054_int64, 8402947561_int64, 8410371879_int64, 8417809054_int64, 8425259129_int64, 8432722150_int64, 8440198161_int64, 8447687208_int64, 8455189336_int64, 8462704591_int64, 8470233020_int64, 8477774668_int64, 8485329581_int64, 8492897807_int64, 8500479393_int64, 8508074386_int64, 8515682833_int64, 8523304783_int64, 8530940282_int64, 8538589380_int64, 8546252125_int64, 8553928565_int64, 8561618750_int64, 8569322730_int64, 8577040552_int64, 8584772269_int64, 8592517929_int64, 8600277583_int64, 8608051281_int64, 8615839075_int64, 8623641016_int64, 8631457156_int64, 8639287545_int64, 8647132236_int64, 8654991282_int64, 8662864735_int64, 8670752647_int64, 8678655073_int64, 8686572066_int64, 8694503679_int64, 8702449967_int64, 8710410984_int64, 8718386784_int64, 8726377423_int64, 8734382956_int64, 8742403439_int64, 8750438928_int64, 8758489478_int64, 8766555146_int64, 8774635990_int64, 8782732067_int64, 8790843433_int64, 8798970148_int64, 8807112268_int64, 8815269854_int64, 8823442962_int64, 8831631654_int64, 8839835987_int64, 8848056023_int64, 8856291821_int64, 8864543441_int64, 8872810946_int64, 8881094396_int64, 8889393852_int64, 8897709377_int64, 8906041033_int64, 8914388882_int64, 8922752989_int64, 8931133415_int64, 8939530226_int64, 8947943485_int64, 8956373257_int64, 8964819606_int64, 8973282599_int64, 8981762300_int64, 8990258776_int64, 8998772094_int64, 9007302319_int64, 9015849521_int64, 9024413766_int64, 9032995122_int64, 9041593658_int64, 9050209442_int64, 9058842545_int64, 9067493036_int64, 9076160985_int64, 9084846463_int64, 9093549541_int64, 9102270290_int64, 9111008781_int64, 9119765089_int64, 9128539285_int64, 9137331442_int64, 9146141634_int64, 9154969936_int64, 9163816422_int64, 9172681166_int64, 9181564246_int64, 9190465735_int64, 9199385712_int64, 9208324253_int64, 9217281435_int64, 9226257337_int64, 9235252036_int64, 9244265612_int64, 9253298144_int64, 9262349711_int64, 9271420395_int64, 9280510277_int64, 9289619437_int64, 9298747957_int64, 9307895921_int64, 9317063410_int64, 9326250510_int64, 9335457303_int64, 9344683874_int64, 9353930309_int64, 9363196693_int64, 9372483112_int64, 9381789654_int64, 9391116405_int64, 9400463454_int64, 9409830889_int64, 9419218800_int64, 9428627275_int64, 9438056406_int64, 9447506282_int64, 9456976997_int64, 9466468641_int64, 9475981308_int64, 9485515091_int64, 9495070083_int64, 9504646380_int64, 9514244076_int64, 9523863268_int64, 9533504051_int64, 9543166524_int64, 9552850784_int64, 9562556929_int64, 9572285058_int64, 9582035272_int64, 9591807670_int64, 9601602355_int64, 9611419427_int64, 9621258990_int64, 9631121146_int64, 9641006001_int64, 9650913657_int64, 9660844222_int64, 9670797801_int64, 9680774501_int64, 9690774429_int64, 9700797694_int64, 9710844406_int64, 9720914674_int64, 9731008609_int64, 9741126322_int64, 9751267926_int64, 9761433534_int64, 9771623259_int64, 9781837217_int64, 9792075523_int64, 9802338294_int64, 9812625645_int64, 9822937697_int64, 9833274566_int64, 9843636374_int64, 9854023241_int64, 9864435288_int64, 9874872638_int64, 9885335413_int64, 9895823739_int64, 9906337740_int64, 9916877543_int64, 9927443273_int64, 9938035060_int64, 9948653031_int64, 9959297317_int64, 9969968049_int64, 9980665358_int64, 9991389377_int64, 10002140239_int64, 10012918080_int64, 10023723035_int64, 10034555241_int64, 10045414835_int64, 10056301957_int64, 10067216746_int64, 10078159344_int64, 10089129892_int64, 10100128534_int64, 10111155414_int64, 10122210677_int64, 10133294470_int64, 10144406940_int64, 10155548236_int64, 10166718508_int64, 10177917908_int64, 10189146587_int64, 10200404699_int64, 10211692399_int64, 10223009842_int64, 10234357186_int64, 10245734590_int64, 10257142212_int64, 10268580214_int64, 10280048759_int64, 10291548009_int64, 10303078129_int64, 10314639286_int64, 10326231648_int64, 10337855382_int64, 10349510660_int64, 10361197653_int64, 10372916535_int64, 10384667478_int64, 10396450661_int64, 10408266259_int64, 10420114452_int64, 10431995421_int64, 10443909346_int64, 10455856411_int64, 10467836802_int64, 10479850705_int64, 10491898307_int64, 10503979798_int64, 10516095369_int64, 10528245214_int64, 10540429527_int64, 10552648503_int64, 10564902341_int64, 10577191240_int64, 10589515402_int64, 10601875028_int64, 10614270325_int64, 10626701498_int64, 10639168756_int64, 10651672308_int64, 10664212368_int64, 10676789148_int64, 10689402864_int64, 10702053734_int64, 10714741978_int64, 10727467816_int64, 10740231473_int64, 10753033173_int64, 10765873145_int64, 10778751617_int64, 10791668821_int64, 10804624992_int64, 10817620364_int64, 10830655177_int64, 10843729669_int64, 10856844083_int64, 10869998664_int64, 10883193658_int64, 10896429315_int64, 10909705886_int64, 10923023625_int64, 10936382787_int64, 10949783632_int64, 10963226420_int64, 10976711415_int64, 10990238882_int64, 11003809090_int64, 11017422310_int64, 11031078816_int64, 11044778882_int64, 11058522789_int64, 11072310818_int64, 11086143253_int64, 11100020381_int64, 11113942491_int64, 11127909877_int64, 11141922833_int64, 11155981658_int64, 11170086654_int64, 11184238124_int64, 11198436376_int64, 11212681720_int64, 11226974470_int64, 11241314941_int64, 11255703455_int64, 11270140333_int64, 11284625903_int64, 11299160493_int64, 11313744437_int64, 11328378070_int64, 11343061734_int64, 11357795770_int64, 11372580525_int64, 11387416351_int64, 11402303601_int64, 11417242633_int64, 11432233808_int64, 11447277492_int64, 11462374053_int64, 11477523865_int64, 11492727305_int64, 11507984754_int64, 11523296596_int64, 11538663222_int64, 11554085024_int64, 11569562401_int64, 11585095753_int64, 11600685488_int64, 11616332017_int64, 11632035754_int64, 11647797119_int64, 11663616538_int64, 11679494439_int64, 11695431256_int64, 11711427428_int64, 11727483399_int64, 11743599618_int64, 11759776539_int64, 11776014620_int64, 11792314325_int64, 11808676125_int64, 11825100494_int64, 11841587913_int64, 11858138867_int64, 11874753849_int64, 11891433354_int64, 11908177887_int64, 11924987957_int64, 11941864078_int64, 11958806772_int64, 11975816565_int64, 11992893993_int64, 12010039593_int64, 12027253914_int64, 12044537508_int64, 12061890935_int64, 12079314761_int64, 12096809561_int64, 12114375914_int64, 12132014408_int64, 12149725638_int64, 12167510207_int64, 12185368725_int64, 12203301809_int64, 12221310084_int64, 12239394183_int64, 12257554748_int64, 12275792429_int64, 12294107882_int64, 12312501775_int64, 12330974781_int64, 12349527584_int64, 12368160877_int64, 12386875361_int64, 12405671747_int64, 12424550754_int64, 12443513113_int64, 12462559563_int64, 12481690852_int64, 12500907740_int64, 12520210996_int64, 12539601400_int64, 12559079743_int64, 12578646826_int64, 12598303462_int64, 12618050473_int64, 12637888694_int64, 12657818972_int64, 12677842166_int64, 12697959146_int64, 12718170794_int64, 12738478006_int64, 12758881689_int64, 12779382765_int64, 12799982168_int64, 12820680846_int64, 12841479760_int64, 12862379885_int64, 12883382212_int64, 12904487745_int64, 12925697503_int64, 12947012521_int64, 12968433849_int64, 12989962552_int64, 13011599712_int64, 13033346429_int64, 13055203816_int64, 13077173006_int64, 13099255149_int64, 13121451412_int64, 13143762980_int64, 13166191059_int64, 13188736871_int64, 13211401658_int64, 13234186684_int64, 13257093231_int64, 13280122601_int64, 13303276120_int64, 13326555132_int64, 13349961006_int64, 13373495133_int64, 13397158924_int64, 13420953818_int64, 13444881274_int64, 13468942778_int64, 13493139841_int64, 13517473999_int64, 13541946813_int64, 13566559873_int64, 13591314797_int64, 13616213228_int64, 13641256840_int64, 13666447336_int64, 13691786449_int64, 13717275944_int64, 13742917616_int64, 13768713293_int64, 13794664836_int64, 13820774140_int64, 13847043135_int64, 13873473787_int64, 13900068096_int64, 13926828104_int64, 13953755887_int64, 13980853562_int64, 14008123287_int64, 14035567261_int64, 14063187725_int64, 14090986963_int64, 14118967305_int64, 14147131126_int64, 14175480848_int64, 14204018942_int64, 14232747927_int64, 14261670375_int64, 14290788909_int64, 14320106205_int64, 14349624997_int64, 14379348073_int64, 14409278280_int64, 14439418525_int64, 14469771777_int64, 14500341068_int64, 14531129496_int64, 14562140225_int64, 14593376488_int64, 14624841591_int64, 14656538911_int64, 14688471900_int64, 14720644090_int64, 14753059091_int64, 14785720597_int64, 14818632385_int64, 14851798320_int64, 14885222359_int64, 14918908550_int64, 14952861037_int64, 14987084065_int64, 15021581980_int64, 15056359233_int64, 15091420385_int64, 15126770110_int64, 15162413197_int64, 15198354555_int64, 15234599220_int64, 15271152354_int64, 15308019252_int64, 15345205349_int64, 15382716219_int64, 15420557585_int64, 15458735323_int64, 15497255468_int64, 15536124215_int64, 15575347934_int64, 15614933166_int64, 15654886638_int64, 15695215266_int64, 15735926161_int64, 15777026640_int64, 15818524232_int64, 15860426684_int64, 15902741975_int64, 15945478321_int64, 15988644184_int64, 16032248288_int64, 16076299621_int64, 16120807452_int64, 16165781342_int64, 16211231156_int64, 16257167073_int64, 16303599604_int64, 16350539604_int64, 16397998290_int64, 16445987250_int64, 16494518470_int64, 16543604345_int64, 16593257699_int64, 16643491808_int64, 16694320416_int64, 16745757765_int64, 16797818612_int64, 16850518259_int64, 16903872576_int64, 16957898034_int64, 17012611733_int64, 17068031435_int64, 17124175598_int64, 17181063413_int64, 17238714847_int64, 17297150677_int64, 17356392545_int64, 17416462997_int64, 17477385540_int64, 17539184697_int64, 17601886063_int64, 17665516372_int64, 17730103563_int64, 17795676857_int64, 17862266831_int64, 17929905509_int64, 17998626452_int64, 18068464857_int64, 18139457669_int64, 18211643692_int64, 18285063724_int64, 18359760690_int64, 18435779795_int64, 18513168687_int64, 18591977638_int64, 18672259738_int64, 18754071112_int64, 18837471156_int64, 18922522792_int64, 19009292760_int64, 19097851924_int64, 19188275628_int64, 19280644076_int64, 19375042761_int64, 19471562942_int64, 19570302171_int64, 19671364888_int64, 19774863084_int64, 19880917048_int64, 19989656205_int64, 20101220069_int64, 20215759318_int64, 20333437017_int64, 20454430012_int64, 20578930535_int64, 20707148035_int64, 20839311303_int64, 20975670924_int64, 21116502140_int64, 21262108196_int64, 21412824267_int64, 21569022109_int64, 21731115584_int64, 21899567264_int64, 22074896396_int64, 22257688548_int64, 22448607414_int64, 22648409360_int64, 22857961519_int64, 23078264541_int64, 23310481488_int64, 23555975007_int64, 23816355775_int64, 24093546612_int64, 24389868739_int64, 24708160056_int64, 25051940867_int64, 25425651886_int64, 25835005991_int64, 26287525960_int64, 26793400246_int64, 27366913211_int64, 28028985339_int64, 28812050463_int64, 29770444718_int64, 31006029811_int64, 32747489190_int64, 35724533662_int64]
integer(kind=default_int), private, parameter :: EXP_TOP_CELL = EXP_CELLS-1_default_int

Index of the cell that runs off to infinity; handled by recursion.

integer(kind=default_int), private, parameter :: FRAC_BITS = 31_default_int

Bits used to interpolate within a cell. Thirty-one and not thirty-two so that gap * frac fits a signed int64 in a single multiply: the widest gap is below 232 (asserted by the table generator), and (232 - 1) * (2**31 - 1) is below huge(int64).

integer(kind=int64), private, parameter :: POISSON_WINDOW = 2097152_int64

2**21 ticks. The count is the number of exponential inter-arrivals that fit in this window. Chosen as the largest power of two with POISSON_WINDOW * 1000 still inside EXPONENTIAL_MAX_MEAN, so that a mean of one thousandth of an event is still expressible.

integer(kind=int64), private, parameter :: Q32_HALF = 2147483648_int64

2**31, the Q32.32 representation of 0.5, added before the final shift so that the fraction rounds to nearest instead of truncating.

integer(kind=int64), private, parameter :: Q32_MASK = 4294967295_int64

2**32 - 1, to take the fractional part of a Q32.32 value.


Interfaces

public interface next_bernoulli_ppm

Return true with probability ppm in a million.

ppm is clamped to [0, PPM_ONE], so 0 never fires and 1000000 always does, and no value in between can be mistyped into an error. Parts per million rather than a real probability because this reaches simulation state: an incident either happened or it did not, and two runs must agree on which.

  • private function splitmix64_next_bernoulli_ppm(gen, ppm) result(r)

    True with probability ppm in a million, from a splitmix64_t generator.

    Arguments

    Type IntentOptional Attributes Name
    type(splitmix64_t), intent(inout) :: gen

    Generator, advanced by the draw unless ppm is 0 or PPM_ONE.

    integer(kind=default_int), intent(in) :: ppm

    Probability in parts per million, clamped to [0, PPM_ONE].

    Return Value logical

  • private function pcg32_next_bernoulli_ppm(gen, ppm) result(r)

    True with probability ppm in a million, from a pcg32_t generator.

    Arguments

    Type IntentOptional Attributes Name
    type(pcg32_t), intent(inout) :: gen

    Generator, advanced by the draw unless ppm is 0 or PPM_ONE.

    integer(kind=default_int), intent(in) :: ppm

    Probability in parts per million, clamped to [0, PPM_ONE].

    Return Value logical

public interface next_exponential_int

Draw an exponentially distributed integer with the given mean, in whatever unit mean is expressed in.

Sampling is a table lookup and two integer multiplies. EXP_TABLE holds the inverse CDF -ln(1 - k/4096) in Q32.32 fixed point, generated once by tools/autogen/gen_exp_table.py with 60-digit decimal arithmetic. Twelve random bits choose a cell, thirty-one more interpolate linearly inside it, and the result is scaled by mean.

The tail

The top cell runs to infinity and cannot be interpolated into. It is handled with the memorylessness of the exponential instead: if U is uniform on the top cell then -ln(1 - U) is distributed as ln(4096) plus a fresh exponential, so the sampler adds ln(4096) and draws again. That is exact, and it costs an extra draw with probability 1/4096.

Capping the top entry at a finite value and interpolating into it – the obvious alternative – biases the mean by 0.147%. This scheme leaves 0.002%, and all of that residue is linear interpolation inside the body cells, not the tail.

mean must be in [0, EXPONENTIAL_MAX_MEAN]. A mean of zero always returns zero without consuming a draw. Out of range returns zero and, if err is present, sets ERROR_VALIDATION.

  • private function splitmix64_next_exponential_int(gen, mean, err) result(r)

    Exponential integer with the given mean, from a splitmix64_t generator.

    Arguments

    Type IntentOptional Attributes Name
    type(splitmix64_t), intent(inout) :: gen

    Generator, advanced by one draw, or more in the tail.

    integer(kind=int64), intent(in) :: mean

    Mean of the distribution, in [0, EXPONENTIAL_MAX_MEAN].

    type(error_t), intent(inout), optional :: err

    Set to ERROR_VALIDATION when mean is out of range.

    Return Value integer(kind=int64)

  • private function pcg32_next_exponential_int(gen, mean, err) result(r)

    Exponential integer with the given mean, from a pcg32_t generator.

    Arguments

    Type IntentOptional Attributes Name
    type(pcg32_t), intent(inout) :: gen

    Generator, advanced by one draw, or more in the tail.

    integer(kind=int64), intent(in) :: mean

    Mean of the distribution, in [0, EXPONENTIAL_MAX_MEAN].

    type(error_t), intent(inout), optional :: err

    Set to ERROR_VALIDATION when mean is out of range.

    Return Value integer(kind=int64)

public interface next_poisson_int

Draw a Poisson-distributed count with mean mean_milli/1000.

The mean is given a thousand times over so that fractional means are expressible without a real type: mean_milli = 2500 means 2.5 events.

Counts the exponential inter-arrivals that fit inside a fixed window, which is the defining construction of a Poisson process rather than an approximation of one. Cost is O(mean).

mean_milli must be in [0, POISSON_MAX_MEAN_MILLI]. Zero returns zero without consuming a draw. Out of range returns zero and, if err is present, sets ERROR_VALIDATION.

  • private function splitmix64_next_poisson_int(gen, mean_milli, err) result(r)

    Poisson count with mean mean_milli/1000, from a splitmix64_t generator.

    Arguments

    Type IntentOptional Attributes Name
    type(splitmix64_t), intent(inout) :: gen

    Generator, advanced once per inter-arrival drawn.

    integer(kind=default_int), intent(in) :: mean_milli

    A thousand times the mean, in [0, POISSON_MAX_MEAN_MILLI].

    type(error_t), intent(inout), optional :: err

    Set to ERROR_VALIDATION when mean_milli is out of range.

    Return Value integer(kind=int32)

  • private function pcg32_next_poisson_int(gen, mean_milli, err) result(r)

    Poisson count with mean mean_milli/1000, from a pcg32_t generator.

    Arguments

    Type IntentOptional Attributes Name
    type(pcg32_t), intent(inout) :: gen

    Generator, advanced once per inter-arrival drawn.

    integer(kind=default_int), intent(in) :: mean_milli

    A thousand times the mean, in [0, POISSON_MAX_MEAN_MILLI].

    type(error_t), intent(inout), optional :: err

    Set to ERROR_VALIDATION when mean_milli is out of range.

    Return Value integer(kind=int32)

public interface next_range

Draw a uniform integer in the inclusive range [lo, hi].

The span is computed in unsigned 64-bit arithmetic, so the full range of default_int works: next_range(gen, -huge(1)-1, huge(1)) spans every int32 value and is still exactly uniform. Rejection sampling gives every value in range exactly one preimage per draw, so there is no modulo bias.

hi < lo is a usage error: it returns lo and, if err is present, sets ERROR_VALIDATION. lo == hi returns lo without consuming a draw.

  • private function splitmix64_next_range(gen, lo, hi, err) result(r)

    Uniform integer in [lo, hi] from a splitmix64_t generator.

    Arguments

    Type IntentOptional Attributes Name
    type(splitmix64_t), intent(inout) :: gen

    Generator, advanced by the draw.

    integer(kind=default_int), intent(in) :: lo

    Inclusive lower bound.

    integer(kind=default_int), intent(in) :: hi

    Inclusive upper bound; must not be below lo.

    type(error_t), intent(inout), optional :: err

    Set to ERROR_VALIDATION when hi < lo.

    Return Value integer(kind=default_int)

  • private function pcg32_next_range(gen, lo, hi, err) result(r)

    Uniform integer in [lo, hi] from a pcg32_t generator.

    Arguments

    Type IntentOptional Attributes Name
    type(pcg32_t), intent(inout) :: gen

    Generator, advanced by the draw.

    integer(kind=default_int), intent(in) :: lo

    Inclusive lower bound.

    integer(kind=default_int), intent(in) :: hi

    Inclusive upper bound; must not be below lo.

    type(error_t), intent(inout), optional :: err

    Set to ERROR_VALIDATION when hi < lo.

    Return Value integer(kind=default_int)


Functions

private function pcg32_next_bernoulli_ppm(gen, ppm) result(r)

True with probability ppm in a million, from a pcg32_t generator.

Arguments

Type IntentOptional Attributes Name
type(pcg32_t), intent(inout) :: gen

Generator, advanced by the draw unless ppm is 0 or PPM_ONE.

integer(kind=default_int), intent(in) :: ppm

Probability in parts per million, clamped to [0, PPM_ONE].

Return Value logical

private function pcg32_next_exponential_int(gen, mean, err) result(r)

Exponential integer with the given mean, from a pcg32_t generator.

Arguments

Type IntentOptional Attributes Name
type(pcg32_t), intent(inout) :: gen

Generator, advanced by one draw, or more in the tail.

integer(kind=int64), intent(in) :: mean

Mean of the distribution, in [0, EXPONENTIAL_MAX_MEAN].

type(error_t), intent(inout), optional :: err

Set to ERROR_VALIDATION when mean is out of range.

Return Value integer(kind=int64)

private function pcg32_next_poisson_int(gen, mean_milli, err) result(r)

Poisson count with mean mean_milli/1000, from a pcg32_t generator.

Arguments

Type IntentOptional Attributes Name
type(pcg32_t), intent(inout) :: gen

Generator, advanced once per inter-arrival drawn.

integer(kind=default_int), intent(in) :: mean_milli

A thousand times the mean, in [0, POISSON_MAX_MEAN_MILLI].

type(error_t), intent(inout), optional :: err

Set to ERROR_VALIDATION when mean_milli is out of range.

Return Value integer(kind=int32)

private function pcg32_next_range(gen, lo, hi, err) result(r)

Uniform integer in [lo, hi] from a pcg32_t generator.

Arguments

Type IntentOptional Attributes Name
type(pcg32_t), intent(inout) :: gen

Generator, advanced by the draw.

integer(kind=default_int), intent(in) :: lo

Inclusive lower bound.

integer(kind=default_int), intent(in) :: hi

Inclusive upper bound; must not be below lo.

type(error_t), intent(inout), optional :: err

Set to ERROR_VALIDATION when hi < lo.

Return Value integer(kind=default_int)

private function pcg32_uniform_below(gen, span_minus_1) result(r)

Uniform unsigned integer in [0, span_minus_1], by rejection.

Arguments

Type IntentOptional Attributes Name
type(pcg32_t), intent(inout) :: gen
integer(kind=int64), intent(in) :: span_minus_1

Inclusive upper bound, read as unsigned.

Return Value integer(kind=int64)

private pure function rejection_mask(span_minus_1) result(mask)

Smallest 2**k - 1 that covers span_minus_1 read as unsigned.

Read more…

Arguments

Type IntentOptional Attributes Name
integer(kind=int64), intent(in) :: span_minus_1

One less than the number of distinct values wanted, unsigned.

Return Value integer(kind=int64)

private pure function scale_by_mean(x_q32, mean) result(r)

Multiply a Q32.32 value by an integer mean and drop the fraction.

Read more…

Arguments

Type IntentOptional Attributes Name
integer(kind=int64), intent(in) :: x_q32

Deviate in Q32.32 fixed point.

integer(kind=int64), intent(in) :: mean

Mean, in [0, EXPONENTIAL_MAX_MEAN].

Return Value integer(kind=int64)

private function splitmix64_next_bernoulli_ppm(gen, ppm) result(r)

True with probability ppm in a million, from a splitmix64_t generator.

Arguments

Type IntentOptional Attributes Name
type(splitmix64_t), intent(inout) :: gen

Generator, advanced by the draw unless ppm is 0 or PPM_ONE.

integer(kind=default_int), intent(in) :: ppm

Probability in parts per million, clamped to [0, PPM_ONE].

Return Value logical

private function splitmix64_next_exponential_int(gen, mean, err) result(r)

Exponential integer with the given mean, from a splitmix64_t generator.

Arguments

Type IntentOptional Attributes Name
type(splitmix64_t), intent(inout) :: gen

Generator, advanced by one draw, or more in the tail.

integer(kind=int64), intent(in) :: mean

Mean of the distribution, in [0, EXPONENTIAL_MAX_MEAN].

type(error_t), intent(inout), optional :: err

Set to ERROR_VALIDATION when mean is out of range.

Return Value integer(kind=int64)

private function splitmix64_next_poisson_int(gen, mean_milli, err) result(r)

Poisson count with mean mean_milli/1000, from a splitmix64_t generator.

Arguments

Type IntentOptional Attributes Name
type(splitmix64_t), intent(inout) :: gen

Generator, advanced once per inter-arrival drawn.

integer(kind=default_int), intent(in) :: mean_milli

A thousand times the mean, in [0, POISSON_MAX_MEAN_MILLI].

type(error_t), intent(inout), optional :: err

Set to ERROR_VALIDATION when mean_milli is out of range.

Return Value integer(kind=int32)

private function splitmix64_next_range(gen, lo, hi, err) result(r)

Uniform integer in [lo, hi] from a splitmix64_t generator.

Arguments

Type IntentOptional Attributes Name
type(splitmix64_t), intent(inout) :: gen

Generator, advanced by the draw.

integer(kind=default_int), intent(in) :: lo

Inclusive lower bound.

integer(kind=default_int), intent(in) :: hi

Inclusive upper bound; must not be below lo.

type(error_t), intent(inout), optional :: err

Set to ERROR_VALIDATION when hi < lo.

Return Value integer(kind=default_int)

private function splitmix64_uniform_below(gen, span_minus_1) result(r)

Uniform unsigned integer in [0, span_minus_1], by rejection.

Arguments

Type IntentOptional Attributes Name
type(splitmix64_t), intent(inout) :: gen
integer(kind=int64), intent(in) :: span_minus_1

Inclusive upper bound, read as unsigned.

Return Value integer(kind=int64)