Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

change(verifier): Update Zebra's block hash checkpoints #4183

Merged
merged 3 commits into from
Apr 25, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions book/src/dev/zebra-checkpoints.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

`zebra-checkpoints` uses a local `zcashd` instance to generate a list of checkpoints for Zebra's checkpoint verifier.

Developers should run this tool every few months to add new checkpoints for the `checkpoint_sync = true` mode.
(By default, Zebra syncs to Canopy activation using checkpoints. These checkpoints don't need to be updated.)
Developers should run this tool every few months to add new checkpoints to Zebra.
(By default, Zebra uses these checkpoints to sync to the chain tip.)

For more information on how to run this program visit [Zebra checkpoints document](https://github.com/ZcashFoundation/zebra/tree/main/zebra-consensus/src/checkpoint/README.md)
For more information on how to run this program visit [Zebra checkpoints README](https://github.com/ZcashFoundation/zebra/tree/main/zebra-consensus/src/checkpoint/README.md)
50 changes: 25 additions & 25 deletions zebra-consensus/src/checkpoint/README.md
Original file line number Diff line number Diff line change
@@ -1,57 +1,56 @@
# Zebra checkpoints

Zebra validates pre-Canopy blocks, and the Canopy activation block, using a list of `Mainnet` and `Testnet` block hash checkpoints:
Zebra validates [settled network upgrades](https://zips.z.cash/protocol/protocol.pdf#blockchain) using a list of `Mainnet` and `Testnet` block hash checkpoints:

- [Mainnet checkpoints](https://github.com/ZcashFoundation/zebra/blob/main/zebra-consensus/src/checkpoint/main-checkpoints.txt)
- [Testnet checkpoints](https://github.com/ZcashFoundation/zebra/blob/main/zebra-consensus/src/checkpoint/test-checkpoints.txt)

Zebra can also be configured to use these checkpoints after Canopy activation:
```
Some of these checkpoints can be disabled using the following config:
```sh
[consensus]
checkpoint_sync = true
checkpoint_sync = false
```

(Zebra always uses checkpoints up to its mandatory checkpoint,
so that we do not have to implement obsolete consensus rules.)

## Update checkpoints

Checkpoint lists are distributed with Zebra, maintainers should update them about every few months to get newer hashes. Here we explain how this process is done.

Or jump straight to [the exact commands for updating the lists](https://github.com/ZcashFoundation/zebra/tree/main/zebra-utils/README.md#zebra-checkpoints).

### Use the `zebra-checkpoints` utility

`zebra-checkpoints` is the program we use to collect checkpoints. Currently this program uses `zcash-cli` to get the hashes. `zcash-cli` must be available in your machine and it must be connected to a synchronized (Mainnet or Testnet) instance of `zcashd` to get the most recent hashes.

To build the `zebra-checkpoints` binary please check [here](https://github.com/ZcashFoundation/zebra/tree/main/zebra-utils/README.md#zebra-checkpoints).
First, [build the `zebra-checkpoints` binary](https://github.com/ZcashFoundation/zebra/tree/main/zebra-utils/README.md#zebra-checkpoints).

When updating the lists there is no need to start from the genesis block. The program option `-l, --last-checkpoint` will let you specify at what block height you want to start. In general the maintainer will copy the last height from each list and use the mentioned option to start from there.
When updating the lists there is no need to start from the genesis block. The program option `--last-checkpoint` will let you specify at what block height you want to start. In general the maintainer will copy the last height from each list and use the mentioned option to start from there.

It is easier if `zcash-cli` is in your execution path however you can specify the location of it anywhere in the filesystem with option `-c, --cli`.
It is easier if `zcash-cli` is in your execution path however you can specify the location of it anywhere in the filesystem with option `--cli`.

Lets pretend `106474` is the last height from the mainnet list, to get the next ones we will run:
To update the checkpoint list, run:

```
$ ../target/release/zebra-checkpoints -l 106474
106517 00000000659a1034bcbf7abafced7db1d413244bd2d02fceb6f6100b93925c9d
106556 000000000321575aa7d91c0db15413ad47451a9d185ccb43927acabeff715f6d
106604 00000000293cea40c781a3c8a23d45ae53aa6f18739d310e03bd745f7ec71b14
106655 0000000034a7018623b2a6a7c81d33f5dcb53c3cfd01ad82676f7f097bdde839
106703 000000003dd9edb6bc6b331dc87d71cd98b2b3d68e501eb234f26635ee657c42
106752 0000000014c16181f5d2951285b8f5b2d7a2238ab6305c3e70a0ae125d98f7f3
106798 00000000349f2c397a0e59d209891ea4c3d6f6221e3b048d62eded9e779de925
106851 00000000227ba8af70ae7bf66e30521fb3e1b69a3d8169793f614144be1db94c
106962 00000000320d694499851ddc679a4404f67ff0ee532ba2cc7d00cff1580f8ffc
107037 000000006ad5ccc970853e8b96fe5351fcf8c9428e7c3bf6376b1edbe115db37
107088 000000005d71664dc23bcc71482b773de106c46b6ade43eb9618126308a91618
107149 000000002adb0de730ec66e120f8b77b9f8d05989b7a305a0c7e42b7f1db202a
```sh
$ zebra-checkpoints --last-checkpoint $(tail -1 zebra-consensus/src/checkpoint/main-checkpoints.txt | cut -d" " -f1) | tee --append zebra-consensus/src/checkpoint/main-checkpoints.txt
1574231 000000000030874b90f23cba865355a2058c635a81396a1c6026f1d7ea89e035
1574631 000000000114d8c70ae8bc0bcc5b94b6b03e9086365b09dd9d3e77b0a2b6554e
1575031 00000000010074d017d6628ca2cf3327d68be11c993c0e4d3c961ebb81c741dd
1575431 000000000001060a02bb142d09de383591c2d5a6f589b982bd9ccf2ad8b72e7c
1575831 000000000094e82cca9af540721e6415097ffd5d70b6adefb8aef6b5898e9b08
1576231 0000000000710c69b4c8d851883e1ad7c14e74b9c79b0cafc0e6c64cf07a54ab
...
```

If we are looking to update the testnet hashes we must make sure the cli is connected with a testnet chain. If we have our `zcashd` running locally we can make this by starting with `zcashd -testnet`.

Anything we add after `--` will pass through into the `zcash-cli` program so we can specify the testnet here.

Let's start from the genesis in this case by not specifying any last checkpoint:
To regenerate the list from the genesis block, run:

```
$ ../target/release/zebra-checkpoints -- -testnet
```sh
$ zebra-checkpoints -- -testnet
0 05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38
400 000393fe014f5ff5de7c9f0aa669ee074c9a7743a6bdc1d1686149b4b36090d8
800 0003bef995cd09a4a2bcb96580fa435ed10c0b44239191fafc825477e84a325d
Expand All @@ -60,6 +59,7 @@ $ ../target/release/zebra-checkpoints -- -testnet
2000 000033804e1bebd8ef6112938dc58d5939874bcb4536e203489eb75520f3c555
...
```

### Submit new hashes as pull request

- If you started from a block different than the genesis append the obtained list of hashes at the end of the existing files. If you started from genesis you can replace the entire list files.
Expand Down
182 changes: 182 additions & 0 deletions zebra-consensus/src/checkpoint/main-checkpoints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4003,3 +4003,185 @@
1573031 0000000000eac293d0db6e9b43787142ac92c7d6004cda5719d17dba39845cc4
1573431 0000000000700e4c5c411bf3eb8b9f29d2213cc5086a582873aaafae738060f3
1573831 00000000002573e9dda7f1afc6fe1f248585e0e17b09a125b3dc48b854914444
1574231 000000000030874b90f23cba865355a2058c635a81396a1c6026f1d7ea89e035
1574631 000000000114d8c70ae8bc0bcc5b94b6b03e9086365b09dd9d3e77b0a2b6554e
1575031 00000000010074d017d6628ca2cf3327d68be11c993c0e4d3c961ebb81c741dd
1575431 000000000001060a02bb142d09de383591c2d5a6f589b982bd9ccf2ad8b72e7c
1575831 000000000094e82cca9af540721e6415097ffd5d70b6adefb8aef6b5898e9b08
1576231 0000000000710c69b4c8d851883e1ad7c14e74b9c79b0cafc0e6c64cf07a54ab
1576631 0000000001582d988b472e58255836dfa0e03cd345b3151e88403bb88196defd
1577031 0000000001095de2a21dd07919a45376e6f977fb713b640f51ed865f84d042ba
1577431 00000000012dcc0b6df8013ef2ab0b9c53ab71b056d7c76f5fc2041c92d7012c
1577831 00000000017bbc3bdf6f094b02e1469df20e6396c5b0cd00578f3715f81c6dfc
1578231 0000000001d4f2297f84ae993d1b4e46be95b14d116d10f25c9c483fa797a2af
1578631 00000000004d6018c812072f0a2e4f6b185d94762f33874c912520ba6ac8293f
1579031 00000000011b6d4258b43cc25e4d646a75a1b93a99383664b00024e4b697daf2
1579431 0000000000db0d96ee27d0281bfab3a5f989bd29f8398f0ce93aed89ab5cd2e2
1579831 000000000100cfd3074211cb42ea5ff0adb09f1992b4e653507974a05b321ad9
1580231 00000000009fd6c8881c9b3d9c4f8ecc39fe4edb3ad3962543807c58848b975a
1580631 000000000153371169a4f3eb3637618edd3c5210dfc38f14b9731cc6484165ce
1581031 0000000000465ba9b86e8346ef580fd0a448f65c5ac5f30fc66f685eecf65a4a
1581431 0000000001032385a0adf6338e6e7217b012612fb3a32b0e2073d8d77105d6ee
1581831 00000000003a8f2acb31b0a65a6a90ad9f68850c0ae24fae33c199092956e998
1582231 000000000003990ecbd557cc030a3a4ab6f6e7c7e97b40c70657c863351623cf
1582631 00000000011eb712381dc02695b86b0b60f847beb0b245b1fe04fc04c3a46aa0
1583031 000000000158ee473bf3adc337d4ece2674496426c7ac66305b4c5b71248e14e
1583431 000000000116c5535b3711cc339b88285f990e48a8d153eefa2b63073961163d
1583831 00000000017052ebedbdf162d622acde120623b8135158965dae8b517535ccb0
1584231 0000000000cd5ff6581249a2c8d41d0a73b18e2c7991c1bf2f4fdaeea8a63120
1584631 00000000005a445ae047b6b4ab4cf6012ca73d5d7962ff398b11a0d37ac8b013
1585031 0000000000756254e5ae5c608c70468cfa9ef476d56a23ce7ce99a53ff7958a3
1585431 0000000000e99ba7e68d1fbcb2575cd8271e4856f56116e12612cf016a3cf3cb
1585831 00000000006f63bc1286e5ebd953ac4d81f82ee72fa0aa7487ff5ebfd1538866
1586231 000000000083fc286508bbd9f6e902c6ac2897b4070bd7c8cbd9821da2e64740
1586631 0000000001158e60249d928ca1d47d7e4b6538c28f67c75c17ac2d3f5651bc94
1587031 000000000105ab6beec56bca1a06dc42ec18315e16d592e52613a6773b4c742c
1587431 00000000015ba51ebd9e99573086769d029b22aefc386ebd9fdf28dfe4829a42
1587831 0000000001232d6af95a4c0572f90a0f462756775514f07d208a679f4576552d
1588231 0000000000bdaf3919b35def1a161b666e3a96f52e43f01560a070d508e661b3
1588631 00000000005b8b80cdf00557e81647bf3ea09d7ce0b5c0b8fa674d743331e9b9
1589031 000000000117893f74997a5c998c9ff15238fa49f10f4593b7515d9064eaf07d
1589431 00000000004e91b8b1e17f93a9d0d7fe5ac4f4f854265bf93fb640b532e3ef26
1589831 00000000004889dc0642308365166ab519c7c3238fa363456754b43e334b532b
1590231 0000000000b00d93035b46ac5dbc531f13efc93b5b9708521096031bc7a1eff5
1590631 00000000019cd305e95216fc5dce909e457502de207adf4c66ee503f2e7bddb2
1591031 00000000003fa79650f1bc80467a4ae0d7f5f0b542cc0201ae7b54c750234fff
1591431 0000000001b80168625126e3bcce38404a3d4f9b7667d193614eab788907c989
1591831 00000000010357ed9470bb05883c68eeac4738f00ded7d2714f58b9b3de73d56
1592231 000000000024d5aed012f05488b2f58d09325849cccaa38de1ef2bacecb107df
1592631 000000000184604b98ee41c6f0ff0f0d726a8d148da1770d8f5afe7519e172e9
1592673 0000000000bcafd0c38d30c50a2952c4191a2f5a38fedd9601caf2c789f74850
1593045 0000000000e39788462fcdb65210e9f5f91d05557201e1f1822816e25b8926a2
1593347 00000000006c51628538658b131533afbdd8e019170645cf3f2a5d3d90eed7ec
1593483 0000000001827de7ffd77635e953d0bf17f430f283162b3fb148b8370d1e8f04
1593618 0000000000acb875e922ce1a5ab0267e25e0588f67f3dffd95b57eb2e9b2096c
1594018 00000000012029258054732cd791b126abed5d1deff64cc9e40ecc0c2a41a9a1
1594170 0000000000c949fe154ed72a3cd957c992b657906f76e3d8dce6c391675fdeb7
1594299 000000000131eea653473f7d2ade62cdfb7482ce1c564c98502f9592ddd2e5d5
1594439 0000000000b5e33c5f0b8f87ec4cec13b737c55f307b60549a35f62c24698824
1594839 000000000032a4e43c30fd424afb1f028d5ff5739f4eedcbf18ef59bb4f03386
1595239 000000000041a49350d8e0074056ce7c52872a57d6195f8ee6ca47a2af14c4d0
1595639 00000000003e15c2e8f9bcb286b37bd60bf230b74ca8a647ccc968702a16f064
1596039 0000000001517f9d4db0a1ed22b248008011033bea772949fd5a6d8d13789314
1596439 0000000000f36c839203d6b5a7313eda7fe44b8a92c33f3c893d0bdb61c73a01
1596839 00000000010f7f2969cd174da95025e8aa33a98c02a4b36dec1d13fb869fbe89
1597239 00000000011d8238635bb5a4b6a665d19b1218ca9c6a716e28623f17dd076bd4
1597639 000000000010d10d0537186925b99efa3c1f77ba382e8d5e7659aa9b5b766a83
1598039 000000000034b816cf30487fdaa9efc1a6f726cca67723c2e3e725fc5eb54e38
1598439 00000000004b41fbe48d5577acce11ebbe32086439c9c3a9b7632653ac04bef6
1598839 000000000071de79f4f9b82a3e28ac95649d7680266b98945964071eee96d451
1599239 0000000000c517ff71158bb883f4dea5303888528ca7db12548e3793a4dad5d9
1599639 0000000000bc98c39b66ed147c441995a35ad5e210736ceac37e91e00964bcf3
1600039 000000000076134a6301fdd90d61f6b3351dd8169b32f1192ce6f45a8076d5e0
1600439 0000000000f8a6e04247110b0855b8405d498ea4b61032e57992b59c6b035c66
1600839 0000000000b81f85182cfb080495ada597eb4aaa3ae777f20fe888b93e07ba3b
1601239 000000000052e038c1a71bc6bd6b493e3c0a5fb4b30168ae791209409d859ce3
1601639 00000000000fc4cf205278d85185a65e6803c064d67a4e3d1a3f9035d98dc317
1602039 000000000005221d73ab5b23e8be26bb0fc59c12724155c6c857cb13949c3553
1602439 00000000006f8a9c7d5ae227eebfaf52c7455d7b6950eb3d442d4bc9475afca4
1602839 00000000012dd69c20aa236543ef8be8d805066ca48c44ffe410c6d6cb9fce2a
1603239 000000000157e46bd6d4f1089d1159c39560d6908d76e9a00313c07f865f16ed
1603639 000000000045b68830efb83831553a8bc7d4a4dd8b14dddb53372cd801d16ee3
1604039 000000000065b3d80b093072ca9cc2c79e094b20d8bfa928c09476700023b248
1604439 00000000009ea5aecb65b62dc1dcaa65e665a0420d5b5e7e3910629fa9f9df70
1604839 00000000012ed65d23e6350bd95103901d7f6d294b4588b166fbd2855599df7f
1605239 0000000000b27be0c54598bed93e04d74ea02ff25128f8278ff6e47cfd9dd0a3
1605639 000000000133628d72c4889166052e8b6d6faecb6222a3904b0e9b8c961cc549
1606039 0000000001425871e8df56b829ae2ce4536176b017f7916a633bea8331007957
1606439 00000000003e3ae433da8b8dccb35ad625f0e0d309b52ecd2cf14a15dc715096
1606839 00000000007f7f39209430474796ca8fe326e4a1319f1064b348545b20b6d650
1607239 00000000010fb362ed2a6680b946bcaa9b8f6733b9f7fbe45ff64144bad9f3e7
1607639 0000000000ba804de718fc6c30e00579d9184b3b4b6a6e648ef4da07bafa990f
1608039 0000000000baba4ff22900317f08a83cd266dcb3e7e7307cdd526ac000061db9
1608439 000000000078248a8068f79091ec3dda0334085b7b73f26218ed3df554281e52
1608839 0000000000696109857957a41f1ac1ad7ecec872ede0ba40f408299db1bfb75a
1609239 0000000001860344ed8bcdfb23613f788dabd2b7b718f4766a176a8221dcc717
1609639 000000000168371fe2c370c8910508c0a9fafcf3151bd733a4b2d84d94118cd1
1610039 000000000124031dad4013a8ce5c6bf8c58a75bc8b9d08748b0e47d7187a44af
1610439 00000000007bbe93d6b21fbfcb0958871a600f364669c6a7382a3a6198df8cdf
1610839 00000000007740431aba8dad05077b23bb2ea53a0f38871019249aa251de955f
1611239 0000000000e6f43da1b18525226e9cb6bf9d73999ab81ff97870614b9d4b7474
1611639 000000000023c8835866d0cd56983c55f898b333e475b698576c239618ecd39c
1612039 0000000000d8b67e50239947f4b3eb6d3321f4154bb8e7d3e9be0f6f1f3d35e8
1612439 00000000006f8b548cf8fc42e2d35c0ac8ac20fae3a8cd4014780d892cc0b302
1612839 00000000003e9360ab5481679f380ee8730e75d3c0da52bfab512cd8035e32be
1613239 0000000000995de908d0148e6f3a2964a9c2a97dd6412a31a5e8edbcd3c2fd20
1613639 000000000132af7ab7685d0f28c5e810048e29899594b04cc6294c37e21e8e89
1614039 00000000002226945886bee95ad91bea91b5d7525bebaabf84e4ee47a7de0a46
1614439 00000000008c3c89f26330e00bf799f8deb4c26a176eb6ec1d6d32f20615ed0f
1614839 0000000001090bb10f894c5b1eab65a067b8141d3c2301a5ced5f27610ca772b
1615239 00000000013e1234e5ee72f9925a00db5808c89f06f46ca614ea59e70bbf16af
1615639 00000000007a848f4df65678ef6694b25fd9fedb726133a817ffb80187d7c807
1616039 000000000120e63770b0aba08793422d5e200f5b781f25dfc1796407ebfb8e13
1616439 000000000173a03f41fe5860de71d6cdd5889370b699261e62f07dfe267ca9f3
1616839 000000000002a8653845b308501125b572a583c867a423f3311fefdfe8320964
1617239 0000000000a5dcac1f0d84fb12eabf1c0207e1985a763e4cedc255bf291eb8b3
1617639 000000000067b8f5e26c2654e0bd550db508dbf45d88ac7cfd15ab00e382db98
1618039 00000000012a3dc2b6d0990fea3b2a3f01d8b5befc7503855556a7e6e3b486cf
1618439 000000000003efe69ef01aa1a934a8ba8ff01415184b1f1ff49e5a79c432ea3a
1618839 000000000193054529e4603e19625a8ef5f617b6efb046eefb5e9749e1c4e931
1619239 0000000000820cd9237560c0904224c2b8b764471b07acb7bd66af4a245d8426
1619639 00000000003050e19ccc7184b98893d373724902f88760e9226950eb2d7e209a
1620039 000000000108b8e79f374a540f9eebdfae56d52ce26edfa37b63cd015efc1d3f
1620439 00000000002eb863df8aae2abcf09241aad418aaa7d9e1a2c577ebe2929dadc9
1620839 000000000171d7f96a644ee6bb84424484022fb5b514bfcc63b3ba74654127d2
1621239 000000000054fba82d3f2b393ea036f09268f7f92ec7151d9099a0bc41b53645
1621639 000000000017f81776000ad480863212d65a34e72d1ce13b47f4e7ecb9d71ba6
1622039 00000000004566ef599a9ecc6cd1020e1317f1946236e0089a449b387585543f
1622439 00000000013e8b9d3f5d60ba63879297eab5569617b3b248ede479e9fac6025c
1622839 00000000002fa60a72b5c98f796bb512c2da83be01d86aedc4de15645dc37cd0
1623239 0000000000b46eb0f91e726193dcbb936fb1daa92430b937abf71aa5a2f15444
1623639 00000000018fbf956b5cd65da0e5783b502d061bba3ad7a0a0bccf19d381d884
1624039 00000000010c6f6a6ce3c83c8a163b1372575d4d9e48d611b2e9989f99baec05
1624439 00000000011a338f063d2f8fb19f55ace2813c29fe9ec7b6716dba2e40e276bb
1624839 0000000000e0505d0e29caa01b0bf8fa02fc1852b65b897e04d9c0deb7378043
1625239 0000000000a8f76e2e51367681fe5e111bffd67461dc2191e10c72dea2d9ec46
1625639 00000000014892edec7adc8f04aec45948c3079386e658011ecae2f96d7919c1
1626039 0000000001022232914a7fced656312cb81a17a3ae776534f338cc59f3842121
1626439 0000000000984ee85245be48ccf8256bf45a382f32b6c82db7de3e50ef0eb3a5
1626839 000000000017cb489cad34764c76316cff826b29da3f615b8710726447f2ce5e
1627239 0000000000b60b3b4cc63092a6760d58c4d050bc681e1847a529938f0d676ed1
1627639 0000000000bee6d68fa3da3196fe19af3ff21a321cdb7570c4d8944c06320cd1
1628039 000000000105a62aca01675631d3e7d61434e1d52fc9b052c7b6d3f43d6f4ee1
1628439 0000000001083a646b082ed0bcd466ffd5db0272f8a4f8c8d66c9450b9cb0599
1628839 000000000019afe6c130cbea2bf4f6e0e26a720243548a5721e91756aea33ca1
1629239 0000000000a07a121688221c24e4b00ac808e13fa6853807f9a0b11914822226
1629639 00000000009058b6ff55b7366e25d6cb85d7f9425378b4050bb28a0431bc9531
1630039 0000000000920e3cd3385f756c3df9d078791d701429edc6f719d5761e1311ef
1630439 0000000000e683fe05254e7599fb1d076083c3ca25222aa3a5fcc2d071dc6809
1630839 00000000010a867fab58d73ce9385fada25c66bc89c16352accb808ab86298d2
1631239 0000000000c313f3db40c7e2442244b3bf2910faee158e5f37725bbb323b290f
1631639 00000000006bf9d471c7a79b0643283f6ef730c87c7bd970d75067e2882cd711
1632039 0000000000cb3a5e7a66db8157cd49b7d8ee0f72a7a2b2ca089e09eb36064c50
1632439 0000000000fc9bd50e902d954c2a0481b2f3888c371a3dd75d5c5c02831ebb9c
1632839 00000000016a43faff47af22b9ef286d020d40f7fb8d6863e7b2ded465d0ed22
1633239 00000000013a0f8c795df20e6838215bbfd1f3d93443114b3dff929b6074e1c3
1633639 00000000008556fbc188eb28f83d5266ae959cd23c2638eef462316cfec85982
1634039 0000000000097b631f4a96cdb6a38a9ced453c3a312aebae5e5794c17afa354b
1634439 0000000000f13cbc16296967680d07a9a9e1dedfacdfd68a97445bef552507d3
1634839 000000000040016dccf14be425d2752c4675c37e14bbac8f89fb632236a4dc5e
1635239 0000000000342dbcc3006d60a773ae3a8ecaf991df7c0423231b7a567c7b69ea
1635639 00000000013f45e3446c4ccaa3c9f0cb82140675a472b42456a96765cc1a17a0
1636039 00000000003d6818445ebb98a8192ace841d1624f9b9217219a5ecb54314ed5c
1636439 00000000008ed6f800a44b813a40688c00146ea0110e89c8ecaba60df69a5558
1636839 00000000011c6baf0905df4eff8b1cfe6eeaedc66090460eb979c854f13106d3
1637239 0000000000d989b93b1212f92038bb2fff3b2e5b326e27049e1f2739c95e735a
1637639 00000000014f7b69fbeea6b6a4dcebe7e78630d664593d2d327de8720c4f2221
1638039 000000000051f1fc1867feee314c73148c90e3496f44eebc86a6a2f1337421dd
1638439 0000000000abdff19270a6ff97df401df4dcdb1f3f23edd5d98372b49c9a21d1
1638839 00000000006b0e5667f81ae8b89d7648fbad47268fab64b176bd23520d5c91c4
1639239 00000000007975f07c54d76d78e8c09ce213d51083016ca1622a6a2b44406505
1639639 000000000022bf6e6207b0ca506077e5510fbf7c38642e372d067a187cbafa1e
1640039 0000000000faa13cd7738872584cfda82e3b3c021dcc830f1d7af7f409f0d025
1640439 0000000000c52619a6a0f470e93413f70ba85b3684a855b2611b875606815302
1640839 000000000032e2274ad0450427660e101f6bc9c9cafd44f24c0a6b8f8fd91541
1641239 00000000004263d7342570b465a1b59f277936d61e1cadd29b08a6456c0c9f9e
1641639 000000000041f06bb6cefe6c0e4f9dabf25c826f307ae27afe4f924fcb5dcf38
1642039 0000000000c09643192b8fce7f5f8cb1349a0cb18cca418f42fbce035d910519
1642439 0000000000a7d4ab6ddedeb3815b53e65b51a98c4e68fdf0de1e838a22663f8a
1642839 000000000094717b475ad4e3365b8fb3ac23638d7f17bcaadf19c97531d88959
1643239 00000000009c9b84f4f4ab434132a94f5c2090751620b22bfc6a1ed76d70ab20
1643639 00000000006e8de3b767af48aac247fcb61594398efd92fdd25e970aea175583
1644039 00000000007a3500bc32d646ed52b16b5e53dda4b14fb86012772f0e23f6b947
1644439 000000000030815167f32bb8081c9dc3a900061fb0a8be823b12db9736dd25b0
1644839 0000000000fffa3453f48b0cc81ffa39e9a5df8819bfe5ab5c71dd6d83c1ee1b
Loading