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

Split serialization tests into staging and regression #25

Merged
merged 3 commits into from
Oct 10, 2024
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ shell.nix
.direnv
blockfrost-mainnet.txt
tests/reports/
tests/serialization/staging
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@
"main": "index.js",
"scripts": {
"test": "npm run test-serialization ; npm run test-api",
"test-serialization": "rm -f transaction_fifo; mkfifo transaction_fifo; npx tsx tests/serialization/get_transactions.ts & NODE_OPTIONS=--experimental-vm-modules jest serialization",
"test-serialization": "NODE_OPTIONS=--experimental-vm-modules jest serialization",
"test-api": "npm run generate-cdl-definitions ; NODE_OPTIONS=--experimental-vm-modules jest api",
"codegen": "tsx conway-cddl/codegen/main.ts",
"generate-grammar-bundle": "npx ohm generateBundles -e -t tests/api/grammar.ohm",
"generate-cdl-definitions": "make typedefs",
"get-transactions": "tsx tests/serialization/get_transactions.ts",
"cleanup-compilation-artifacts": "make clean; npm run generate-grammar-bundle"
},
"author": "",
Expand Down
37 changes: 17 additions & 20 deletions tests/serialization/get_transactions.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,29 @@
import { BlockFrostAPI } from "@blockfrost/blockfrost-js";
import fs from "node:fs";

type TransactionInfo = { hash: string, cbor: string };
const stagingPath = "tests/serialization/staging";

// Hashes of txs to test
// Hashes of txs to test. This is not normally used, but it can be handy for
// retrieving specific transactions one might be interested in.
const transactionHashes: Array<string> = [
'fd236cb770bf5ceb67ff9ec8478a8ae9ff9f0f84fc5db9cfec391528ac054459',
'469a2f934ef014b55181a1282cac0fe35d041bf7c298fdca9115aafa4ab1e506',
'0e5bc1e21e86d011f47ba2f406337e15cc8076b9c5fc0d7283e836de93bafeaf',
'f4e2cf9b0ca03b9e344c17ddd0e2c0520830bb56b00640ce6b40deab2f3463e0',
'4caa06fe5aa051124d58261962c88ab334136996ee1976723bae43e528bf40eb',
'85e695c228d27c480c74cb9114e44857d9f66ec7611750f5f568a7382942c9ef',
'b2c7b33c780ca6b4f8a7aef57b35c8c3afa066753e5c0b311e753cea98912026',
'433927e357e1ae76f35439650045ebe0ac7701023c708c41b5fb839a5dc5a51e',
'e72ff052f0eefb5f8d0736a896e12040ccbe090f5a2838cd2d02bb7f05eb07d9',
'24da9e4e230e9c12fd3adb9ecdef55cfd0318df8c7e3882cb0cd892acd74e1fb'
];
// number of txs to retrieve if `transactionIds` is empty

// Number of txs to retrieve if `transactionIds` is empty
const transactionCount: number = 10;

// Set up blockfrost API
const projectId = fs.readFileSync("blockfrost-mainnet.txt", { encoding: "utf8" }).trimEnd();
const bf = new BlockFrostAPI({ projectId: projectId, network: "mainnet" });

// Create staging directory if it doesn't exist yet. If it exists, delete
// all files in it.
if (!fs.existsSync(stagingPath)) {
fs.mkdirSync(stagingPath);
} else {
fs.rmSync(stagingPath, { "recursive": true, "force": true })
fs.mkdirSync(stagingPath);
}

async function main(): Promise<void> {
console.log("(get_transactions) Starting");
// transactions in hex
Expand All @@ -34,16 +35,12 @@ async function main(): Promise<void> {
transactionsHex = await retrieveTxs();
};

let fd = fs.openSync("transaction_fifo", "w");
for (const [index, cbor] of transactionsHex.entries()) {
// type TransactionInfo = { hash: string, cbor: string };
const info: TransactionInfo = { hash: transactionHashes[index], cbor: cbor };
fs.writeSync(fd, `${JSON.stringify(info)}\n`);
fs.writeFileSync(`${stagingPath}/${index.toString().padStart(3, "0")}-${transactionHashes[index]}.cbor`, cbor);
}
console.log("(get_transactions) Finished writing to FIFO. Closing it.")
fs.closeSync(fd);
console.log("(get_transactions) FIFO closed. Exiting.")
console.log("(get_transactions) Finished writing transactions to staging")
}

// Retrieve the required number of TXs from the latest blocks
async function retrieveNewTxs(): Promise<Array<string>> {
let latest_block = await bf.blocksLatest();
Expand Down
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
84a500818258201eb67f34b11204c6de6ece492c11ce31dc63c27b0687647d7dbe87460cfca330010184a300583911c3e28c36c3447315ba5a56f33da6a6ddc1770a876a8d9f0cb3a97c4ccc587a8e23a94337fb5542a3cd32042a1ab59045c1838bc940ec686501821a003cf722a1581cee0633e757fdd1423220f43688c74678abde1cead7ce265ba8a24fcda14443424c501b0000000c2470038a028201d818590134d8799fd8799f581c08437e849147227e56453ad784df6051ac76e81c48904079d4b767c9ffd8799fd8799f581c08437e849147227e56453ad784df6051ac76e81c48904079d4b767c9ffd8799fd8799fd8799f581ccc587a8e23a94337fb5542a3cd32042a1ab59045c1838bc940ec6865ffffffffd87980d8799fd8799f581c08437e849147227e56453ad784df6051ac76e81c48904079d4b767c9ffd8799fd8799fd8799f581ccc587a8e23a94337fb5542a3cd32042a1ab59045c1838bc940ec6865ffffffffd87980d8799f581cf5808c2c990d86da54bfc97d89cee6efa20cd8461616359478d96b4c58209d291acad03fb0c83b9297cd9c566a8599ac31b38f7578443ef16c4982e84670ffd8799fd87980d8799f1b0000000c2470038aff1a4206bdced87980ff1a001e72a2d87a80ff8258390108437e849147227e56453ad784df6051ac76e81c48904079d4b767c9cc587a8e23a94337fb5542a3cd32042a1ab59045c1838bc940ec6865821a001bb8dea1581c29d222ce763455e3d7a09a665ce554f00ac89d2e99a1a83d267170c6a1434d494e1a1b43997b8258390108437e849147227e56453ad784df6051ac76e81c48904079d4b767c9cc587a8e23a94337fb5542a3cd32042a1ab59045c1838bc940ec68651a0f28e2c08258390108437e849147227e56453ad784df6051ac76e81c48904079d4b767c9cc587a8e23a94337fb5542a3cd32042a1ab59045c1838bc940ec6865821a0025d0aaa8581c214e05363758e0356c6fd758f6d354caf5cf21a965538e49a2855c9ea147374e5643516a4102581c63fa81ec17419f0bf12d1b7056f1036f1a9323c852e013f60849da7ba149542d4d494e5357415001581c8062a1cbccff73c8a10c6f82846c81ab05af0e431166607c584ad95fa1476b6662336c544102581c8483844875ce4d61c2aa459240f277d32081ee08fe0ad16899a0f581a1490014df10544954414e1aa42ebd65581c95a427e384527065f2f8946f5e86320d0117839a5e98ea2c0b55fb00a14448554e541a62590080581c9a9693a9a37912a5097918f97918d15240c92ab729a0b7c4aa144d77a14653554e4441451a3520fb57581ca3931691f5c4e65d01c429e473d0dd24c51afdb6daf88e632a6c1e51a14b6f7263666178746f6b656e1a00fcbb15581cf0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9aa14f000de140646566692d696e636f6d6501021a00033549031a082ac6f50758201feb00f18fbe772cc375aa495da0b08d837a719671e68da62f8ed658915d8fd1a1008182582044f0b778bb8fbb749251ec190ceb07577dc34aaaf9190bfe887f86dace4160015840b292b4351991de6332bc87b37db7dfad74a0cb74d72d7b6a79a5ecaf88b6c58417f3f9776cc4fe345aa71007b618fe6f8bb0c670536a741babbbf68102dcb402f5a11902a2a1636d736781754d696e737761703a204d61726b6574204f72646572
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
84ad00838258203ba2056127b0bdf8feb726f3849b465eb0307f979514c85a4df057ff51646519008258204891c0beee567b97f9435eec5178263abe6fe53e8c6804b820032ece574e5854018258204891c0beee567b97f9435eec5178263abe6fe53e8c6804b820032ece574e585402018382583901fc772f84650b79c9466a096bcd2ea140f2486bd1472c532e8a0db0bc27f64df7a505d2e0c5011e8105cd6073c540e6daa7d49ea21177adef821a001e8480a1581c38ad9dc3aec6a2f38e220142b9aa6ade63ebe71f65e7cc2b7d8a8535a144434c41591a261fea94a300583911ea07b733d932129c378af627436e7cbc2ef0bf96e0036bb51b3bde6b52563c5410bff6a0d43ccebb7c37e1f69f5eb260552521adff33b9c201821b0000001d73d62627a2581c38ad9dc3aec6a2f38e220142b9aa6ade63ebe71f65e7cc2b7d8a8535a144434c41591b0000001d42c907da581cf5808c2c990d86da54bfc97d89cee6efa20cd8461616359478d96b4ca2434d5350015820c1a41738f0077a4a4cfc0f157c2cae3eccf75a9238125bdc06a2ef6eae99c3f11b7fffffe2cd024df9028201d8185880d8799fd8799fd87a9f581c1eae96baf29e27682ea3f815aba361a0c6059d45e4bfbe95bbd2f44affffd8799f4040ffd8799f581c38ad9dc3aec6a2f38e220142b9aa6ade63ebe71f65e7cc2b7d8a853544434c4159ff1b0000001d32fdb2101b0000001d708b91e71b0000001d4016589518461846d8799f190682ffd87980ff825839015b7e23228dba75595645fc357d0f97ba258cfccfff5d588d4bb9165b533b9586f0fb9aafd578e0d0154e9478d23614e736eb39d1a30d8a991a19f08fb7021a000a10ab031a082a9d7905a1581df11eae96baf29e27682ea3f815aba361a0c6059d45e4bfbe95bbd2f44a000758205160f88b929bf8a6c57c285b889488f9137c0ef3cfd0bcf408a10020e69146d5081a082a9cc50b5820b63d82ce92854b1bf4367b843d884d2a869b8d8db8cdd1ec9fea7d65c8bec4880d818258204891c0beee567b97f9435eec5178263abe6fe53e8c6804b820032ece574e5854020e81581c5b7e23228dba75595645fc357d0f97ba258cfccfff5d588d4bb9165b10825839015b7e23228dba75595645fc357d0f97ba258cfccfff5d588d4bb9165b533b9586f0fb9aafd578e0d0154e9478d23614e736eb39d1a30d8a991a198fd0a2111a004c4b4012848258200dc17712e37a4e741767db2f90d4ffbf69faf88b9bed4c47864f7bd912924bea00825820cf4ecddde0d81f9ce8fcc881a85eb1f8ccdaf6807f03fea4cd02da896a621776008258202536194d2a976370a932174c10975493ab58fd7c16395d50e62b7c0e1949baea00825820d46bd227bd2cf93dedd22ae9b6d92d30140cf0d68b756f6608e38d680c61ad1700a20081825820c5d63d7dc066df52592135b6d3cb4f3470d06f7bdd4b2d2e32eb59ca3782662f584093769a6179e4646a4f2832991bf9d3cdcc1019f006a49e49fece6ebac1134703f52126d49c6de3f499a059c6d3301eba41034c81930662e621cfcb8fec6f1f020583840000d87980821962d91a007cc793840001d87980821a00012dfc1a0166fa60840300d8799f009f1a001e8480ff4100d87a809fd87a80ffff821a00143bbd1a19764b2af5a11902a2a1636d736781774d696e737761703a204f72646572204578656375746564
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
84ad00838258205bb2f2ee2f50e2f960be45d09ae1eaba6505b1f18cfa84b5710978ca025f141f0082582081a7d1d391c6f4e583bf158f28da33dbb1931d4dfdff68c035482d08e8e8161c01825820a635ab596c78493782971e9b5f46dd68f326603922f2968c75cc768f6bcd537b02018382583901abcac506c162ea53ff315c88b673e7b97f00e0d5c8087cc2060795feeeb2d6c1b94b7effa316afbeea629975ea9c049ec38187643baf1c271a06491f49a300583911ea07b733d932129c378af627436e7cbc2ef0bf96e0036bb51b3bde6b52563c5410bff6a0d43ccebb7c37e1f69f5eb260552521adff33b9c201821b000000012d5ea042a2581c4342a3d3c15545a592bf38294dc75c7a1dd3550388303e3a06f4416da14543455252411b00000042082169ea581cf5808c2c990d86da54bfc97d89cee6efa20cd8461616359478d96b4ca2434d5350015820a1db2a02b72ea2d645ce9be4620f4be8ded8949f3b939058cbcf8bf3fc5c08a51b7ffffff7477c0f82028201d8185881d8799fd8799fd87a9f581c1eae96baf29e27682ea3f815aba361a0c6059d45e4bfbe95bbd2f44affffd8799f4040ffd8799f581c4342a3d3c15545a592bf38294dc75c7a1dd3550388303e3a06f4416d454345525241ff1b00000008b883f0871b000000012c976e7c1b00000041e513f412181e181ed8799f190682ffd87980ff825839015b7e23228dba75595645fc357d0f97ba258cfccfff5d588d4bb9165b533b9586f0fb9aafd578e0d0154e9478d23614e736eb39d1a30d8a991a4677500f021a000a0cd3031a082a9d7905a1581df11eae96baf29e27682ea3f815aba361a0c6059d45e4bfbe95bbd2f44a000758205160f88b929bf8a6c57c285b889488f9137c0ef3cfd0bcf408a10020e69146d5081a082a9cc50b58208f6fc6392e4e477caaad1667bc5d51c4ab94b99ca19a827e0f082b53e785eb9a0d81825820a635ab596c78493782971e9b5f46dd68f326603922f2968c75cc768f6bcd537b020e81581c5b7e23228dba75595645fc357d0f97ba258cfccfff5d588d4bb9165b10825839015b7e23228dba75595645fc357d0f97ba258cfccfff5d588d4bb9165b533b9586f0fb9aafd578e0d0154e9478d23614e736eb39d1a30d8a991a46168d22111a004c4b4012848258200dc17712e37a4e741767db2f90d4ffbf69faf88b9bed4c47864f7bd912924bea00825820cf4ecddde0d81f9ce8fcc881a85eb1f8ccdaf6807f03fea4cd02da896a621776008258202536194d2a976370a932174c10975493ab58fd7c16395d50e62b7c0e1949baea00825820d46bd227bd2cf93dedd22ae9b6d92d30140cf0d68b756f6608e38d680c61ad1700a20081825820c5d63d7dc066df52592135b6d3cb4f3470d06f7bdd4b2d2e32eb59ca3782662f5840251e872d65dd29a2392a33f21fd7beb5b91348e343682a42bcc076b550162f4d88d6d62d07245d803081917ea08daff3993508b15c2297a3fdc7ed169ef74b0f0583840000d87980821962d91a007cc793840001d87980821a00012dfc1a0166fa60840300d8799f009f1a001e8480ff4100d87a809fd87a80ffff821a001465aa1a19a0dcc6f5a11902a2a1636d736781774d696e737761703a204f72646572204578656375746564
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
84ac00838258206e00e236845f771ab57c37e991b53fc201364c4ac67234fd8b60e109572031bf0182582090f8ad0275310ab7d89f6408a80d73a76f715694d5bb5ac0ddc8642c28ffb6e71182582092e2a11747f3fe6700847f7f388dc38d913123d182fe7d373035e1cf2e59e8fd000194a300581d719392bfc154f465f6788192c0176feca44c4b43318585b246712629db01821a002dc6c0a1581cc0e5564cf5786031d9053f567ec78b8383a0f2bc01318e690e0503f4a14001028201d818479f0000000000ffa300581d716a836e8bb408ef5110a7477039a9f5fc41e55be9fc7eb5464def826b01821a002dc6c0a1581c416109f322b43051b80e83075b4baa8c5af14c88acaca47d5c251820a14001028201d818587f9f1b000000958fda9db91b00000001395c96f31b000058df4657aaea1b0000014acb18f4681b000000111a9838c71b004551bc6dac5fb79fc24a0361f5692102d069f041c24c04710cad3d80000000000000ff1b000001927726d6981b00000192773703389f1b000001ee09d3bf8d1b000058df4657aaeaff1a002dc6c0ffa300581d7114386d24c827f3ce74bdf6c875e548d928e12036c145ebec14f04df501821a002dc6c0a2581c1cc1aceaf5c7df55e270864a60600b9f52383fe418164574ffdeeed0a14001581cf66d78b4a3cb3d37afa0ec36461e51ecbde00f26c8f0a68f94b69880a144695553441b00000012d926e695028201d8184e9f9f0000000000ff1a272b92deffa300581d7114386d24c827f3ce74bdf6c875e548d928e12036c145ebec14f04df501821a002dc6c0a2581c1cc1aceaf5c7df55e270864a60600b9f52383fe418164574ffdeeed0a14001581cf66d78b4a3cb3d37afa0ec36461e51ecbde00f26c8f0a68f94b69880a144695553441b00000012d926e695028201d8184e9f9f0000000000ff1a272b92deffa300581d7114386d24c827f3ce74bdf6c875e548d928e12036c145ebec14f04df501821a002dc6c0a2581c1cc1aceaf5c7df55e270864a60600b9f52383fe418164574ffdeeed0a14001581cf66d78b4a3cb3d37afa0ec36461e51ecbde00f26c8f0a68f94b69880a144695553441b00000012d926e695028201d8184e9f9f0000000000ff1a272b92deffa300581d7114386d24c827f3ce74bdf6c875e548d928e12036c145ebec14f04df501821a002dc6c0a2581c1cc1aceaf5c7df55e270864a60600b9f52383fe418164574ffdeeed0a14001581cf66d78b4a3cb3d37afa0ec36461e51ecbde00f26c8f0a68f94b69880a144695553441b00000012d926e695028201d8184e9f9f0000000000ff1a272b92deffa300581d7114386d24c827f3ce74bdf6c875e548d928e12036c145ebec14f04df501821a002dc6c0a2581c1cc1aceaf5c7df55e270864a60600b9f52383fe418164574ffdeeed0a14001581cf66d78b4a3cb3d37afa0ec36461e51ecbde00f26c8f0a68f94b69880a144695553441b00000012d926e695028201d8184e9f9f0000000000ff1a272b92deffa300581d7114386d24c827f3ce74bdf6c875e548d928e12036c145ebec14f04df501821a002dc6c0a2581c1cc1aceaf5c7df55e270864a60600b9f52383fe418164574ffdeeed0a14001581cf66d78b4a3cb3d37afa0ec36461e51ecbde00f26c8f0a68f94b69880a144695553441b00000012d926e695028201d8184e9f9f0000000000ff1a272b92deffa300581d7114386d24c827f3ce74bdf6c875e548d928e12036c145ebec14f04df501821a002dc6c0a2581c1cc1aceaf5c7df55e270864a60600b9f52383fe418164574ffdeeed0a14001581cf66d78b4a3cb3d37afa0ec36461e51ecbde00f26c8f0a68f94b69880a144695553441b00000012d926e695028201d8184e9f9f0000000000ff1a272b92deffa300581d7114386d24c827f3ce74bdf6c875e548d928e12036c145ebec14f04df501821a002dc6c0a2581c1cc1aceaf5c7df55e270864a60600b9f52383fe418164574ffdeeed0a14001581cf66d78b4a3cb3d37afa0ec36461e51ecbde00f26c8f0a68f94b69880a144695553441b00000012d926e699028201d8184e9f9f0000000000ff1a272b92e1ff82583901da299558c70a8970781806dca93d1801ba2f3b3894227a7b284786e49baba19195b7cb8b1c6febb192cc487b5e8b96d737baddb8bb09866f1a0013a9ef82583901da299558c70a8970781806dca93d1801ba2f3b3894227a7b284786e49baba19195b7cb8b1c6febb192cc487b5e8b96d737baddb8bb09866f1a0013a9ef82583901da299558c70a8970781806dca93d1801ba2f3b3894227a7b284786e49baba19195b7cb8b1c6febb192cc487b5e8b96d737baddb8bb09866f1a0013a9ef82583901da299558c70a8970781806dca93d1801ba2f3b3894227a7b284786e49baba19195b7cb8b1c6febb192cc487b5e8b96d737baddb8bb09866f1a0013a9ef82583901da299558c70a8970781806dca93d1801ba2f3b3894227a7b284786e49baba19195b7cb8b1c6febb192cc487b5e8b96d737baddb8bb09866f1a0013a9ef82583901da299558c70a8970781806dca93d1801ba2f3b3894227a7b284786e49baba19195b7cb8b1c6febb192cc487b5e8b96d737baddb8bb09866f1a0013a9ef82583901da299558c70a8970781806dca93d1801ba2f3b3894227a7b284786e49baba19195b7cb8b1c6febb192cc487b5e8b96d737baddb8bb09866f1a0013a9ee82583901da299558c70a8970781806dca93d1801ba2f3b3894227a7b284786e49baba19195b7cb8b1c6febb192cc487b5e8b96d737baddb8bb09866f1a0013a9ee82583901da299558c70a8970781806dca93d1801ba2f3b3894227a7b284786e49baba19195b7cb8b1c6febb192cc487b5e8b96d737baddb8bb09866f1a0013a9ee82583901da299558c70a8970781806dca93d1801ba2f3b3894227a7b284786e49baba19195b7cb8b1c6febb192cc487b5e8b96d737baddb8bb09866f1a0013a9ee021a0008ff48031a082a9de0075820d36a2619a672494604e11bb447cbcf5231e9f2ba25c2169177edc941bd50ad6c081a082a9cb40b582040ca2b03a86cee3a8d2c5b0c394b14e4b501de4c3be865fc6494681c7922b6160d8182582090f8ad0275310ab7d89f6408a80d73a76f715694d5bb5ac0ddc8642c28ffb6e7110f011082583901da299558c70a8970781806dca93d1801ba2f3b3894227a7b284786e49baba19195b7cb8b1c6febb192cc487b5e8b96d737baddb8bb09866f1a0081575a111a004c4b401283825820da70eb2e8e5e66eaded8935283983e5496b35b2d19dde8668b8ec4b25307d96f00825820dd69370c5046e4a6fd880681cd81e4e3871544e54f5593dd5d4af625727b1b6403825820fdd3f93aa9639e9a30cefc77ddc3f52c8a5671a3692e059dba6009991d0d8cfc00a20082825820f44ce6186d190f8776fd871d753df7ae503972e4793a2360a423d2f96021e6015840d4b199f04e3fd37d8e7fc628a5db986317e79aec995062c27d724ffd683a54316e3ce80baeb34258cf04026d7d99ef87e5cda243c6f6da25cfe78814fc13bb0982582063179f731829d60aade12a1398c07b7a905cc38e7d9901850c9b186946f5ca3e5840ecdd9700bf7d4a4f9855ba2d527a7cbb5c2c72bede4d27c33eafd971003113eba477345334f41cef9661f703abe5d61e4a9999bca17f16a0e138f09cd4517e0405828400021a002dc6c0821a002248711a2ba17fbb840000d8798082199ea41a00e756daf5a0
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
84a7008382582007b4112a0c54e07960bd1daa34537b70d9aad15df3f18ec8989125900cc54209008258202ddc957912c1e8e882888d4016439803dbe6fad7aa90a613b5fe59232f3a76da048258204d33aef4557fee404b1bbca477ecee49109fc13225e94000cf464acacb0fc6b501018382583901b51f6ea43b78d435052b95cacbae953463958ecfbcb32f16e0167efca6de6b291665205bd680c1ad9dc4e32822eabfa7b24dc869cc005722821a0011a008a1581c9b426921a21f54600711da0be1a12b026703a9bd8eb9848d08c9d921a146434154534b591935e982583901adb1bf6a51b20ff1b8450726ef3891bb0e153d5bf47783375e2134afbd6a096cbba5e259946798e948403e2d2b3d9ea88a12ee8e7ae944971b0000001eb27eccc382583901adb1bf6a51b20ff1b8450726ef3891bb0e153d5bf47783375e2134afbd6a096cbba5e259946798e948403e2d2b3d9ea88a12ee8e7ae94497821a004a6172b4581c017af5d958fffdf65f3e5b8b3ff5abefd210a03464a9fc48ea0f4a39a1470014df10574c4b1a22ac98ed581c0c002b51df1a54194819c0990f52d14682bbb3e93a58052e7c81f71ca14642554b454c451a1ba7275f581c160a880d9fc45380737cb7e57ff859763230aab28b3ef6a84007bfcca1444d4952411a1588b61f581c1cd92100fc05fce7416b3857a079780164eeaf8f5613f4b814f24e09a148426f6f6e436f696e1a3a45a49b581c25f0fc240e91bd95dcdaebd2ba7713fc5168ac77234a3d79449fc20ca147534f43494554591b0000003671119588581c37a2b93b4aa2b286b92b7099faff0bb87e0c629a5079c0584da2d577a1434f534d1a75aec599581c3a89cf5f2f18887fcaec3d2e9bd4fee52caeaebc50f338ff23861ceca14442414e411b00000007e13c879f581c4fde92c2f6dbcfa2879b44f7453872b31394cfb2f70f1d4c411169aca146427562626c651b00002d531403c01a581c501dd5d2fbab6af0a26b1421076ff3afc4d5a34d6b3f9694571116eaa1454b4f4e44411a35444309581c515bc3f68b15ab31025cd9a8a8c327ad0a5d9ff4eaf2e931c06c3330a14442554c4c1a0009c315581c51a5e236c4de3af2b8020442e2a26f454fda3b04cb621c1294a0ef34a144424f4f4b1b0000023c4b25e677581c5612bee388219c1b76fd527ed0fa5aa1d28652838bcab4ee4ee63197a147446973636f696e1b00056ea2f6a8deb1581c5dac8536653edc12f6f5e1045d8164b9f59998d3bdc300fc92843489a1444e4d4b521b00000415782a63b3581c75fcc276057db5fc48eae0e11453c773c8a54604c3086bf9d95ac1b7a144434852591b0000001527be106f581c805dba5284db75636dabc96c02f62c9d382e246ee22aa937a7a12aeca1470014df10464e581b00000008f35f3f77581c8654e8b350e298c80d2451beb5ed80fc9eee9f38ce6b039fb8706bc3a1474c4f42535445521b0000001b30e8946d581c89267e9a35153a419e1b8ffa23e511ac39ea4e3b00452e9d500f2982a153436176616c6965724b696e67436861726c65731b00000002fa365cd2581c9b426921a21f54600711da0be1a12b026703a9bd8eb9848d08c9d921a146434154534b591a5b254b68581ccf4515aa9b095447527d7a0630470491126f0ce58502977c32fc0ff3a1454344464c591a0001548e581cedfd7a1d77bcb8b884c474bdc92a16002d1fb720e454fa6e99344479a1434e54581b0000002a9ed9bca7021a00037c45031a082ac701075820dceb615df4c37cb35edc022e11faba4f98e042261a24cb1e2bca0cc3e4dcc45709a1581cd195ca7db29f0f13a00cac7fca70426ff60bad4e1e87d3757fae8484a1486876434154534b593935e80e81581c4f641455f17911fe2f55ad3ad67fc2e0b2946b59af3352574322e67ea200828258200621257bb5bd1477c0960b2e391c70baa8a642ad258420daa10bab85d1c24bef5840c88868024733588b15b37302ffdf4d0e1b672d9cb666bd0b02a1c537dab66cbe7187f482449504e1900d7c3a62941bad5b5854adfa196c6f1ae3d214096d71008258205424fa10ba83c95c33714c420479c19183a7274e7c1d4161d173842c245b340c58403edda063f703e94af9d2c28a3579f52de182896dec3faa1cf3ef830bd371668f087ac84ae41527709107044668329c9b34832938a0b7cfa5b004c16ab5f0f90101818200581c4f641455f17911fe2f55ad3ad67fc2e0b2946b59af3352574322e67ef5a11902a2a1636d736781734d696e737761703a204d617374657243686566
Loading
Loading