From 4069f3ab401c42392a655771cab7b2e836c0e4a2 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Thu, 12 Mar 2026 20:50:59 -0600 Subject: [PATCH 01/35] chore(conformance): upgrade to agave 4.0 --- conformance/build.zig | 1 - conformance/commits.env | 10 +- conformance/run.py | 47 +- conformance/scripts/ci-run.sh | 14 +- conformance/scripts/failing.txt | 2387 ++++++++++++++++- conformance/scripts/fixtures.txt | 9 +- conformance/src/elf_loader.zig | 27 +- conformance/src/elf_types.zig | 164 ++ .../src/proto/org/solana/sealevel/v1.pb.zig | 353 +-- conformance/src/txn_execute.zig | 386 ++- conformance/src/utils.zig | 9 +- conformance/src/vm_interp.zig | 2 +- 12 files changed, 2891 insertions(+), 518 deletions(-) create mode 100644 conformance/src/elf_types.zig diff --git a/conformance/build.zig b/conformance/build.zig index 86d4aa7f16..39e15706e7 100644 --- a/conformance/build.zig +++ b/conformance/build.zig @@ -91,7 +91,6 @@ pub fn build(b: *Build) void { const protoc_run = pb.RunProtocStep.create(pb_dep.builder, target, .{ .destination_directory = b.path("src/proto"), .source_files = &.{ - "protosol/proto/elf.proto", "protosol/proto/vm.proto", "protosol/proto/shred.proto", "protosol/proto/txn.proto", diff --git a/conformance/commits.env b/conformance/commits.env index fdc3feadd7..5c7dda9b83 100644 --- a/conformance/commits.env +++ b/conformance/commits.env @@ -1,11 +1,11 @@ # The commits currently used in CI for sig's conformance with agave. -SOLANA_CONFORMANCE_COMMIT=70b5ee3a73c3e12eb0c2f2bfd3037e5645903c94 -TEST_VECTORS_COMMIT=0a97cc29937eaa6b31e27448f2c43adf758f021c -SOLFUZZ_AGAVE_COMMIT=3e12a4b269083d16b918bc8885c89fa6f6b556d7 +SOLANA_CONFORMANCE_COMMIT=786798b9536f310cd6fe8ba8a05df0a187500cd2 +TEST_VECTORS_COMMIT=d6b81e3de1132f5032aabcd8a975e306634ae13d +SOLFUZZ_AGAVE_COMMIT=51c1f5c8bc38748c57aa9fb4b51ce9501111c010 # protosol definitions needed for the above commit of solfuzz-agave -AGAVE_PROTOSOL_COMMIT=3dea3808eab107f3010ddd3bbc24a31cc4b07c40 +AGAVE_PROTOSOL_COMMIT=e52ca0f21f4ef68e8f2ed5269dcfaa8b50091f7f # protosol definitions used for sig -SIG_PROTOSOL_COMMIT=3dea3808eab107f3010ddd3bbc24a31cc4b07c40 +SIG_PROTOSOL_COMMIT=e52ca0f21f4ef68e8f2ed5269dcfaa8b50091f7f diff --git a/conformance/run.py b/conformance/run.py index cf03ef66c4..398c224c00 100755 --- a/conformance/run.py +++ b/conformance/run.py @@ -70,6 +70,11 @@ def main(): help="Run each fixture with a separate invocation of solana-test-suite. " "This makes it easier to see which fixture caused a panic, but takes longer.", ) + parser.add_argument( + "--use-created", + action="store_true", + help="Run with the expectation from the generated fixtures instead of vectors.", + ) config = parser.parse_args() @@ -117,11 +122,12 @@ def run_test(vectors, config, pad): print_noln(f"{vectors:<{pad}}") vectors_path = path(f"env/test-vectors/{vectors}") - fixtures_path = path(f"env/test-fixtures/{vectors}") + created_path = path(f"env/created-fixtures/{vectors}") + to_run_path = created_path if config.use_created or config.create else vectors_path outputs_folder = os.path.dirname(vectors) if vectors.endswith(".fix") else vectors outputs_path = path(f"env/test-outputs/{outputs_folder}") - if not os.path.exists(vectors_path): - os.makedirs(fixtures_path, exist_ok=True) + if not os.path.exists(created_path): + os.makedirs(created_path, exist_ok=True) if config.create: @@ -130,7 +136,7 @@ def run_test(vectors, config, pad): "create-fixtures", "--num-processes", config.num_processes, "-i", vectors_path, - "-o", fixtures_path, + "-o", created_path, "-s", config.create_lib, ], verbose=config.verbose, @@ -153,11 +159,11 @@ def run_test(vectors, config, pad): "skipped": 0, "failed_fixtures": [], } - filenames = sorted(os.listdir(fixtures_path)) + filenames = sorted(os.listdir(to_run_path)) pad = max(len(os.path.join(vectors, f)) for f in filenames) for fixture in filenames: print_noln(f"{os.path.join(vectors, fixture):<{pad}}") - fixture_path = os.path.join(fixtures_path, fixture) + fixture_path = os.path.join(to_run_path, fixture) one_result = exec_fixtures(config, fixture_path, outputs_path) result["passed"] += one_result.get("passed", 0) result["failed"] += one_result.get("failed", 0) @@ -165,7 +171,7 @@ def run_test(vectors, config, pad): result["failed_fixtures"].extend(one_result.get("failed_fixtures", [])) return result else: - result = exec_fixtures(config, fixtures_path, outputs_path) + result = exec_fixtures(config, to_run_path, outputs_path) result["name"] = vectors return result @@ -183,21 +189,24 @@ def exec_fixtures(config, fixtures_path, outputs_path): ) # fmt: on - if result.exit_code != 0: - return {"failed": 1} - - summary = result.stdout.split("\n")[3] - passed = int(summary.split(",")[0].split(": ")[1]) - failed = int(summary.split(",")[1].split(": ")[1]) - skipped = int(summary.split(",")[2].split(": ")[1]) + passed = 0 + failed = 1 # assume failure unless there is a good output + skipped = 0 + failed_fixtures = [] + if result.exit_code == 0: + try: + summary = result.stdout.split("\n")[3] + passed = int(summary.split(",")[0].split(": ")[1]) + failed = int(summary.split(",")[1].split(": ")[1]) + skipped = int(summary.split(",")[2].split(": ")[1]) + if failed > 0: + failed_fixtures = result.stdout.split("\n")[4].strip("Failed tests: ").strip() + failed_fixtures = json.loads(failed_fixtures.replace("'", '"')) + except IndexError: + pass # reached when the harness panics print(f" │ Pass{passed:>5} │ Fail{failed:>5} │ Skip{skipped:>5}") - failed_fixtures = [] - if failed > 0: - failed_fixtures = result.stdout.split("\n")[4].strip("Failed tests: ").strip() - failed_fixtures = json.loads(failed_fixtures.replace("'", '"')) - return { "passed": passed, "failed": failed, diff --git a/conformance/scripts/ci-run.sh b/conformance/scripts/ci-run.sh index 138c48c236..02f234a998 100755 --- a/conformance/scripts/ci-run.sh +++ b/conformance/scripts/ci-run.sh @@ -14,18 +14,6 @@ sudo add-apt-repository ppa:deadsnakes/ppa -y sudo apt install -y python3.11 python3.11-dev python3.11-venv rename gcc scripts/setup-env.sh get-solana-conformance -echo Get test fixtures -wget https://github.com/Syndica/conformance-fixtures/releases/download/test-vectors-$TEST_VECTORS_COMMIT-solfuzz-agave-$SOLFUZZ_AGAVE_COMMIT/fixtures.tar.zst -tar xf fixtures.tar.zst -# We need each fixture file to have a unique name so that we can put them into the test-inputs directory -# in a "flat" manner. The problem is that there are just too many files and it exceeds ARG_MAX for a single -# "rename" invocation. So we need to go the round-about method of first finding the files then using "xargs" -# to chunk it MAX-ARGS. Testing shows that just using the maximum number from xargs is around twice as fast -# as specifying an arg limit manually. -find test-fixtures/vm_interp/fixtures/v0 -type f -name '*.fix' -print0 | xargs -0 rename "s/\.fix\$/-v0.fix/" -find test-fixtures/vm_interp/fixtures/v1 -type f -name '*.fix' -print0 | xargs -0 rename "s/\.fix\$/-v1.fix/" -find test-fixtures/vm_interp/fixtures/v2 -type f -name '*.fix' -print0 | xargs -0 rename "s/\.fix\$/-v2.fix/" - echo Parse fixture lists PASSING_DIRS=() @@ -41,7 +29,7 @@ FIXTURES=() for dir in "${PASSING_DIRS[@]}"; do while IFS= read -r -d '' file; do FIXTURES+=("$file") - done < <(find "test-fixtures/$dir" -type f -name '*.fix' -print0) + done < <(find "test-vectors/$dir" -type f -name '*.fix' -print0) done mkdir -p split-fixtures/ diff --git a/conformance/scripts/failing.txt b/conformance/scripts/failing.txt index 8b13789179..4a6ab5ae82 100644 --- a/conformance/scripts/failing.txt +++ b/conformance/scripts/failing.txt @@ -1 +1,2386 @@ - +elf_loader/fixtures/00d79161b59a0ff2507d31ce8d543ca1a6d16014_2457913.fix +elf_loader/fixtures/0242b3fdfec540ac3dc138628855c30ccab983b4_2457913.fix +elf_loader/fixtures/047982e51cbf0858318b0939f2cc77fd10c1426f_2457913.fix +elf_loader/fixtures/04aeab3b5f9000dbfcd20c504e2cd0e2b14f5e3e_2457913.fix +elf_loader/fixtures/04cfc56717630fc6dfa703f4de619e836a458e8a_2457913.fix +elf_loader/fixtures/052326f846682ec7ee90a24bb4a20413fbeaa36d_2457913.fix +elf_loader/fixtures/0569a7569802043a03c95c0b8639460d89d032e8_2457913.fix +elf_loader/fixtures/065b3fe8f90aa564a6eb2cebe779ddbe3a202af0_2457913.fix +elf_loader/fixtures/078c1a6ee47dcf2a8a1683966f109be5655cdafd_2457913.fix +elf_loader/fixtures/083154620acac85c4cf442ba0a01e8ea0cf7ef38_2457913.fix +elf_loader/fixtures/086c995ff3effa2a6b34f41b2a1c2e97dd8cd416_2457913.fix +elf_loader/fixtures/089d6c55a14d581a1a56ac636b22474a27ed99e6_2457913.fix +elf_loader/fixtures/090aaea4fa62fb3efd564f2bdc7da61f862fe793_2457913.fix +elf_loader/fixtures/0aba68d68ade7c3f62ac8e3998a1c27cd6a758eb_2457913.fix +elf_loader/fixtures/0bff661e9f8987078548c975a12afe59841f58b9_2457913.fix +elf_loader/fixtures/0c7bee4a0af6d70289a7591d14cb0391d232f9e3_2457913.fix +elf_loader/fixtures/0ddd87a581db7a6e52253908508d99d1bff8326a_2457913.fix +elf_loader/fixtures/0e299546f55ee851006b35981dfd12bff173dd10_2457913.fix +elf_loader/fixtures/0e6713ecdd5f064b2281d7621b2843e87e2ef150_2457913.fix +elf_loader/fixtures/1073d1d92508364246fe94671ae694df3ae8bf3f_2457913.fix +elf_loader/fixtures/10b90b4105fa41d829f367ab55f4cdf3b661cf2a_2457913.fix +elf_loader/fixtures/14016fe4fbb7061ba8dca500f6c8890177b62aa6_2457913.fix +elf_loader/fixtures/14d9a1165b0d28aa9fd147b6c315397e68dea9d7_2457913.fix +elf_loader/fixtures/14ec572aa42ed5565a2d2ede9b0eecbf245fe654_2457913.fix +elf_loader/fixtures/18f279d95b181a83c9633259e5b47796de6a369a_2457913.fix +elf_loader/fixtures/1a8e16fc8b44ad84931e996ad98a17a7d11f72a7_2457913.fix +elf_loader/fixtures/1aa7b3d48667db5716f3650c4bd54ed79e341cc3_2457913.fix +elf_loader/fixtures/1b48a7559baa1bf05e954c3ed995c76772046c7e_2457913.fix +elf_loader/fixtures/1bab600b90220a8a1f2552b4d56194d82409bf15_2457913.fix +elf_loader/fixtures/1fb5adc3fec02c5d249d4d641bc61d82ce80cbc6_2457913.fix +elf_loader/fixtures/2033b40b103e7054fe8a665892e5700524f06000_2457913.fix +elf_loader/fixtures/20394964212424d85003b88c9027e7adcfbc8467_2457913.fix +elf_loader/fixtures/2165d6e924bfec5a5aa89852de6774f34d8176e5_2457913.fix +elf_loader/fixtures/223b87cb4d9c4c6b58d015c14a501410f5e54302_2457913.fix +elf_loader/fixtures/2378d6832b6c98ed668bc4bdec89e17a555b582a_2457913.fix +elf_loader/fixtures/249deb1d6aad069de0479e3294958abc9e860c85_2457913.fix +elf_loader/fixtures/28841d3995fdfdbbd72d8185034a9cabdb1db4f2_1362257.fix +elf_loader/fixtures/2a0942f2074d2d651fff81fd8d4be4c2b0db9fec_2457913.fix +elf_loader/fixtures/2a2d9dcee43b2dfe2f0c4259c1a604b0c80b9c3f_2457913.fix +elf_loader/fixtures/2ae1d458f581be433a1f6906d242a60ba1f1a463_2457913.fix +elf_loader/fixtures/2eb39b900910f31de106abc91de4e8a5103541ab_2457913.fix +elf_loader/fixtures/30822634f4015f5e0859eb91869a189e8e1dec63_2457913.fix +elf_loader/fixtures/3228b50c4cc76348e88a794c607f56e36aa1122c_191376.fix +elf_loader/fixtures/32a24346a7101a5e681cc6f51c9962985cf6343f_2457913.fix +elf_loader/fixtures/33d7a0e12a00fca7cd9623d89daccc82e509b6ad_2457913.fix +elf_loader/fixtures/33ea018c2f7eb5b209c52a77b0515a45bf63875d_2457913.fix +elf_loader/fixtures/34015f9405b035c66e47661a00ba4d44a11961d3_2457913.fix +elf_loader/fixtures/35835618d2e5d602ea668b6cb26e38ced30c94d4_2457913.fix +elf_loader/fixtures/3651bf1d5578f5c230fa8747211770bb042bd1c0_2457913.fix +elf_loader/fixtures/37ac82ef847f0ad50f97b47479a3089f41271974_2457913.fix +elf_loader/fixtures/39367610f064c8677fd2d1c0c1c89b804bb00699_2457913.fix +elf_loader/fixtures/3a8c535dbfb3992407d3e7d2c84d7430c667a86e_2457913.fix +elf_loader/fixtures/3b0f30724a23c7a32a1e050ab754ae91a9c3529b_2457913.fix +elf_loader/fixtures/3bb4cbcbe5a3e6674babcfbcd776988ad61b99e4_2457913.fix +elf_loader/fixtures/3d58b7c07ca48fc3a83d4f501b201dec148e12d9_2457913.fix +elf_loader/fixtures/3d6f4177d9c8fb062600ab112976cec1265bb92c_2457913.fix +elf_loader/fixtures/3d8d2b250aa110b22fc6ca799a41e4ed956bd0b6_2457913.fix +elf_loader/fixtures/3f68efe165aa345f6b68e28608715648b6f7a873_2457913.fix +elf_loader/fixtures/40d1eb60b0fb023809ec6c130daff363e925369c_1363415.fix +elf_loader/fixtures/40fea930a052a22ca29aa39cacc7ca0ae19ea688_2457913.fix +elf_loader/fixtures/413d54be2f7d39a5ce6067222eb79d2c72291519_2457913.fix +elf_loader/fixtures/41ee3481a9d4637b823e3ff56a0bc5d5a6f666db_2457913.fix +elf_loader/fixtures/437063b4f1c2c7dba1384ed170c52969b4d79326_2457913.fix +elf_loader/fixtures/45fada2a5fa78ddc614a3d2dc9bc1ed55ea4f4db_2457913.fix +elf_loader/fixtures/46eae950f24664af58968317bf4236cad8d826be_2457913.fix +elf_loader/fixtures/47b26c5d7ff1d9421d76707aa9c2b890730d73ec_1364202.fix +elf_loader/fixtures/48b6b381bde97015c28fa2ec477e7f58c43ac5fc_2457913.fix +elf_loader/fixtures/4917809ee1881f723b49a503ed4bca58a0fa44ed_2457913.fix +elf_loader/fixtures/4b572cf6ddb8837ac51adb2cb4b06c27e5a6cd0c_2457913.fix +elf_loader/fixtures/4bca5cacd9d1857dec15232d02a6b4af3d9ba87c_2457913.fix +elf_loader/fixtures/4c481501030823c28bf81e2b996228adad035bb0_2457913.fix +elf_loader/fixtures/4c6a70c24c9c16f7570855175cddbd38b5b5bf72_2457913.fix +elf_loader/fixtures/4ca6e9b20ad2bec429baf9bc8425431f52827028_2457913.fix +elf_loader/fixtures/4d4402f899d8b53639f28c8a54cc6f2b1db959de_2457913.fix +elf_loader/fixtures/4db78a4f7153bffe3088203f09c4dfda37d6307b_2457913.fix +elf_loader/fixtures/4ee9ca76c1d746a2248cf709df33e904c52f54bc_2457913.fix +elf_loader/fixtures/5037d1f71b998565bf7dbc5a5f99c2649efa5dcf_2457913.fix +elf_loader/fixtures/509cc9950c45b874d7ad5a2b80a0e63a04652036_2457913.fix +elf_loader/fixtures/518deaecc5152ed4e2671f129e3bea7583e931f9_2457913.fix +elf_loader/fixtures/52217ad01650a19c6d64ae5fefec3943c8da8e21_2457913.fix +elf_loader/fixtures/537aacf504724fcdaa2190c2ef31ef4d2b8b242e_2457913.fix +elf_loader/fixtures/55745488140f5b73a0e0390e37cbdbb3a496868c_2457913.fix +elf_loader/fixtures/56e4b299bdb5bd2d791db3df68bd0278b8fe539c_2457913.fix +elf_loader/fixtures/575839f673a3779c09aced161d58378e3e928bad_2457913.fix +elf_loader/fixtures/595eab5fdd6d763367c8122a9be3f7e6adc611a4_2457913.fix +elf_loader/fixtures/5a091964d74221d6fb9b5c0569cb5a9eabaa306c_2457913.fix +elf_loader/fixtures/5dba6694399028c8f95839fe336dad356f4a017c_2457913.fix +elf_loader/fixtures/617af96b4241038b627255fc0e2f60f773fd6191_3418875.fix +elf_loader/fixtures/617af96b4241038b627255fc0e2f60f773fd6191_3425258.fix +elf_loader/fixtures/617af96b4241038b627255fc0e2f60f773fd6191_3438475.fix +elf_loader/fixtures/62bdaa25165780c93df965a5e6c1430a4e4789e7_2457913.fix +elf_loader/fixtures/655540d81db7c0e743b2bfd62359ed3be17abbc6_2457913.fix +elf_loader/fixtures/65e4ce84930b1f3d3c1c14b32044909ce4f2720c_2457913.fix +elf_loader/fixtures/6725d8a63d47cfc8f36d44a3bf960447d2dc9ae2_2457913.fix +elf_loader/fixtures/6779effa4274487ab0a419c36c7c3028add8b87e_2457913.fix +elf_loader/fixtures/6848f0d283bc6baf77e4c5f1b6b9ad69c2244b86_2457913.fix +elf_loader/fixtures/693b86bb1b43736a2edcdd9a8e21e843f56e345c_2457913.fix +elf_loader/fixtures/6a473abae94569306c1643b3eff5425111501e7e_2457913.fix +elf_loader/fixtures/6a9fe740e12dd954350ac19cbfd44110acd584e3_2457913.fix +elf_loader/fixtures/6abe80e448f6cc498e31ef3878c68723972d821c_2457913.fix +elf_loader/fixtures/6b58603cc0e75b5db8ad22a58bfce064206c7c29_2457913.fix +elf_loader/fixtures/6b94a47847b5df3c50672aa0639f3e74b32a63c9_2457913.fix +elf_loader/fixtures/6c0f82a678ac859ca62a10c7ec7b47024e2f24f0_2457913.fix +elf_loader/fixtures/6c25bed825afd2c6759cf352996f8b8ca723b1fd_2457913.fix +elf_loader/fixtures/6c373ddab9b7fcc78d0dfdc6651e26b2ee04339d_2457913.fix +elf_loader/fixtures/6dbae968219b89cada56498b88c74542ac3342d1_2457913.fix +elf_loader/fixtures/7059ba00848776efc5c775f664542970d1c512f5_2457913.fix +elf_loader/fixtures/7326d01acb8098c6337e26bc4f9dddd843a9c623_2457913.fix +elf_loader/fixtures/746f1d58f35ea6ec61c5767c72c0de1bf66345a3_1362870.fix +elf_loader/fixtures/793a394f1b399060c699e85f82fb7304132513cb_2457913.fix +elf_loader/fixtures/79aef329e4744d7108148248a61536dec97b3b3e_2457913.fix +elf_loader/fixtures/7b34cd3f0c6c3bb55ecaff2262def730a5a65d7e_2457913.fix +elf_loader/fixtures/7c61c389c2b255e396fc043988565613e3025f55_2457913.fix +elf_loader/fixtures/7c886c5ca1b21e1a6b0a5bc709c2816ab1e8ab88_2457913.fix +elf_loader/fixtures/7d8e250985d8b9fe229285e0b386dba8f66fee42_2457913.fix +elf_loader/fixtures/80d287a8d484e6f6798ae3d9df0cd6abe69912b3_2457913.fix +elf_loader/fixtures/836d84a9e34bb2e51aec7213c9e063fc54ff74aa_2457913.fix +elf_loader/fixtures/8481827d2d33a151ca8179b38d1a8fc3dc18a8a2_2457913.fix +elf_loader/fixtures/8662b3544c39193de00b99de0f9ce6ab52162ebe_2457913.fix +elf_loader/fixtures/871df26d4525c3983baf9b9b8653c5ce38b2ecde_2457913.fix +elf_loader/fixtures/87c4bf24fdc97a796c091f6bd5a25a1a5ad02f1d_2457913.fix +elf_loader/fixtures/89dc7b569a6980e8fc1ce93f428589fbd9b1b564_2457913.fix +elf_loader/fixtures/8ccd90e07a6314f47f43cec25ca6eed51d52ef1b_2457913.fix +elf_loader/fixtures/8d00105d1a4c75fe3aa7ad300db367461193819b_2457913.fix +elf_loader/fixtures/8d296a42a29beb5e1beae2cfd0309eedcfdf0fab_2457913.fix +elf_loader/fixtures/8fd375cfa26ea85280c345106cda32ed478fa865_2457913.fix +elf_loader/fixtures/90eb3db11c89835a6b577e7d4557aebe72f26b3b_2457913.fix +elf_loader/fixtures/91cdb48f5996d60bf270ff5cebe7cdda464f8412_2457913.fix +elf_loader/fixtures/928f607d24d0c75923364d3baa4b0bc2def54ddc_2457913.fix +elf_loader/fixtures/9383395f58af412eaee7bc34135d3c3e149b2aa2_2457913.fix +elf_loader/fixtures/9575a567cb6b0ffac792b23ad733a8c7e8846d20_2457913.fix +elf_loader/fixtures/95c9324ed047579da5257c3952f70e5aa5aad1a1_2457913.fix +elf_loader/fixtures/96de6961ecf9703b5be0eb886902bcc57181792d_2457913.fix +elf_loader/fixtures/9733fd75982a6774113fd3a9bc0c8f850d69238d_2457913.fix +elf_loader/fixtures/97a5b5535255d1bbeb3324257a103a17c2806651_2457913.fix +elf_loader/fixtures/9d4e7adc51e99cb53060d2f1556dfba77de53c0f_2457913.fix +elf_loader/fixtures/9efce914bf44995affd50d140beb245fb171f628_2457913.fix +elf_loader/fixtures/a03c4da6a78706f0f9ad9720458695bc2fa6164c_2457913.fix +elf_loader/fixtures/a0a6cbe7d3e97df5497fdd051b1e9b3af76e06e1_2457913.fix +elf_loader/fixtures/a0f3d8c6fc1076e6c6b2b7770c6b0eca9bf4963a_2457913.fix +elf_loader/fixtures/a150a1b20175c6ae0b4392a8b9bf476325855da8_2457913.fix +elf_loader/fixtures/a16fa2f0b9df4d391bff95eac3736e30821ca275_2457913.fix +elf_loader/fixtures/a2238fa0cb2187366e26ce7c041c644e1f8766a3_2457913.fix +elf_loader/fixtures/a2455a226ef247f22ffb681f3b9c15d881160d0a_2457913.fix +elf_loader/fixtures/a2b6cca07f63189ddaf104ff1db3853779f9714b_2457913.fix +elf_loader/fixtures/a37fc787d11a1a8a3fcc2b7a17ea8e13b3f1b53d_2457913.fix +elf_loader/fixtures/a45ff4c68b263e326be34e671e486e3eabecbf36_2457913.fix +elf_loader/fixtures/a4732f4085758004a4374e89554f77ef817f9281_2457913.fix +elf_loader/fixtures/a5f1bb55d96ff526fb1cf2f2dd0690545ef039e8_2457913.fix +elf_loader/fixtures/a9d13ab8bed2314d610ef9f95b14ddade9fefbd8_2457913.fix +elf_loader/fixtures/ab4c13bfb8a6440887ff20e56179d8a392384a8e_2457913.fix +elf_loader/fixtures/ac862dcfcb6eb8ffb6bf418794ee1f077fbefb75_2457913.fix +elf_loader/fixtures/ad8d7e3debf18677e296cf896c26c94fca7a4a56_2457913.fix +elf_loader/fixtures/af352241691af1dfe48487cf2ee06192bebe420e_2457913.fix +elf_loader/fixtures/af975314a705e62eadb90b9e7b30e181577a8bc4_2457913.fix +elf_loader/fixtures/b0537e4107a437432d0bc1d1a592db6a0383d10a_2457913.fix +elf_loader/fixtures/b345675565ddef17b7fa39c7fb7b3af502c7fc7b_2457913.fix +elf_loader/fixtures/b41944f7542d3a5e6250ddc33dba871874b9da6c_2457913.fix +elf_loader/fixtures/b5310e008413e93a82c2be98b6f78aa389bc32b1_2457913.fix +elf_loader/fixtures/b7aba828ee52a2c9bb6a8246263d188b4ce25608_2457913.fix +elf_loader/fixtures/b821d309e18fb12ecf8494eb2b7eba10b4ab0d33_2457913.fix +elf_loader/fixtures/b8cacd400919310cf2f68982a33e7a305785bde1_2457913.fix +elf_loader/fixtures/bb1b1bef5de668dd9b8044d7c0ecb0ecb6b7a70e_2457913.fix +elf_loader/fixtures/bda57df2e22b09c6c66268ec0dccac10909de95d_2457913.fix +elf_loader/fixtures/bda622860e1119ec745a27bfa7a7f64d50710b4a_2457913.fix +elf_loader/fixtures/c08b8f5b9f3923a1a177f123f9f719c1ed84a788_2457913.fix +elf_loader/fixtures/c2877dd14c9890ccf43febc851fe36061d8973bf_2457913.fix +elf_loader/fixtures/c2c6b66081c664b34c33336bb9580015252c1e81_2457913.fix +elf_loader/fixtures/c354b2c5eb50696020ffc39d485122d60570f6bf_2457913.fix +elf_loader/fixtures/c5afc87c9127bfe5e9869b0a1d11b5b7ab88e87a_2457913.fix +elf_loader/fixtures/c756016d0fb9d347d7745484caf9761787a12830_2457913.fix +elf_loader/fixtures/caf1bef898f4a5181541f6e2559536b178fe745a_2457913.fix +elf_loader/fixtures/cbf53cbfc8eef1999ee4d52982519db5bc7166ad_2457913.fix +elf_loader/fixtures/cc5a79cfd7d0288a3470390af81dbdde1dd72f82_2457913.fix +elf_loader/fixtures/cdf418269c1c411670fd4b6139f11d1caa818eb6_2457913.fix +elf_loader/fixtures/cf44451711623d87da79f80ac3be8b19f1230176_2457913.fix +elf_loader/fixtures/d2cede8f7ed2f6fae1eb8035e039a3c28b5774e9_2457913.fix +elf_loader/fixtures/d57bafe2632cdace85e500a75d6e20c661ec1e9d_2457913.fix +elf_loader/fixtures/d63bcb4740ac0a6157ddab8dd0efd86cb0976d36_2457913.fix +elf_loader/fixtures/dab6a384e69cf1ac8e7d53e8493b40dab9943cc4_2457913.fix +elf_loader/fixtures/dbe3c0ef0f9655d0b1d2b31547518b1d09d8406e_2457913.fix +elf_loader/fixtures/df751edb7c16a4285fe1c9fea9a5b147790968b1_2457913.fix +elf_loader/fixtures/e2536b55d802b1905b097562d668b86423681bcb_2457913.fix +elf_loader/fixtures/e314d20e59b5dd631285f3c91f0c87c7767c9ae1_2457913.fix +elf_loader/fixtures/e3bf264b504053e74d3b5cc63d5fda1b7ee33538_2457913.fix +elf_loader/fixtures/e4d22e06fbb342c4e01e85948269e342bb548428_2457913.fix +elf_loader/fixtures/e7794251cfbb329df9a995b30d277273a345abf8_2457913.fix +elf_loader/fixtures/e7cad322a0834419b7ecee184286ac880755035f_2457913.fix +elf_loader/fixtures/e808377a8b8fe294f5185c9f0978f67c553c14fc_2457913.fix +elf_loader/fixtures/e8a1e2068335f3f72fb684e4547b2f864f09a48e_2457913.fix +elf_loader/fixtures/e9f39198a6d3072461411631a62fb15b66fd3cc3_2457913.fix +elf_loader/fixtures/ea56e94c1a22ec5ba3fb17854f26e44b31501eaa_2457913.fix +elf_loader/fixtures/ebe4c9c36cf1b0bef2b05e8a2c839bdfc4793bf9_2457913.fix +elf_loader/fixtures/ed8c6115b8150684a6b743903966883494dcc05c_2457913.fix +elf_loader/fixtures/edda381af62a772e1b6d357b3c202af677cb7e8e_2457913.fix +elf_loader/fixtures/ef72b573095d15b04d3b71b96fad0fca7bb6a2b3_2457913.fix +elf_loader/fixtures/f0fab238ccd10458e46f1ee6d29f5bea2c54004d_2457913.fix +elf_loader/fixtures/f16195c12b22e4dd75c96cf35e0865e9d4162e97_2457913.fix +elf_loader/fixtures/f3adfca3dd82c9797a10944ec64c85d3cce9f7df_2457913.fix +elf_loader/fixtures/f431de46764543ae27930ef638cfd3bbe3314889_2457913.fix +elf_loader/fixtures/f5b2e50f195dea1e8d9f69601ae6b5ac476b381c_2457913.fix +elf_loader/fixtures/f716f8acb5439b276d4949e4d3b5b053517c388a_2457913.fix +elf_loader/fixtures/f73235a208d5400f9741a6d856ba81623bb15c24_2457913.fix +elf_loader/fixtures/f8f746ca0a7b0046397443acd5af2f2ad012bafd_2457913.fix +elf_loader/fixtures/f9952d9eb4645fb7fda90aa10546a4114fa9b21b_2457913.fix +elf_loader/fixtures/fa1d3d09675b5a60d0cf13946d4cc5938c0cfbb5_2457913.fix +elf_loader/fixtures/fbb6b3b4412ef81cbf7e4395d34b68f26f61504b_2457913.fix +elf_loader/fixtures/fd079efae7cd2049b690829e9bb68b67ae4ed988_2457913.fix +elf_loader/fixtures/ff02e3a0e659ffaf15f8720a3a1038b9c7688f93_2457913.fix +elf_loader/fixtures/txt_rel_overflow.fix +elf_loader/fixtures/zero_key_syscall_hash.fixinstr/fixtures/bpf-loader-v3-programs/f0fbc9e7-32f9-477d-9c89-2e7a2675f7b7.fixinstr/fixtures/bpf-loader-v3/7d17b624b75a988a5ce30d2ae187800b93a65965_2.fix +instr/fixtures/vote/00a44dc50eee61f0b1d38dbd505398f49a634085_3247128.fix +instr/fixtures/vote/0231a48ba8f372da88bcc63837a2eaf8093f0e1b.fix +instr/fixtures/vote/0519fd5ef65644c209391035fe644ed65c8e98e2_3414626.fix +instr/fixtures/vote/056ea15de0c1b86860f2b7e62ca9ff9b9372b859_3157971.fix +instr/fixtures/vote/06ada92dde1b558dd88b4cb1be3c3e6bcf741130_23811.fix +instr/fixtures/vote/089d8cf16b50325227d717e611cbbeb7d22dcc04_3247128.fix +instr/fixtures/vote/0a0e9f80aeab78a186a6443cac596b691931b4e0_3157971.fix +instr/fixtures/vote/0ac38938f99fb7a9dab29566713f9f59fd7750ed_3157971.fix +instr/fixtures/vote/0df4b58a06e33daafd70a055342219ffbffa8401_3247128.fix +instr/fixtures/vote/0ef73bacc146109b587661ae2380e0d1cef8c66a_3157971.fix +instr/fixtures/vote/0f2bf1898cdf3b3b292fb41f873018c2aa9d6fc7_3247128.fix +instr/fixtures/vote/134a0a69db8a83cddf5c5af1d403d6bf15fc2f33_3247128.fix +instr/fixtures/vote/1358b01098622f1f7bd247a4a80c5ff8666e7dde_3247128.fix +instr/fixtures/vote/1393d2dea4a60e93be55d023b2970a3ec825c2a0_3247128.fix +instr/fixtures/vote/14552d27743961a7d2324b4d2aa1ba191e294ed0_3247128.fix +instr/fixtures/vote/1473b1a0d098a6cc235e17524e34cf25054e47f2_3157971.fix +instr/fixtures/vote/16cb47838ffb7985395224c8b98e15cbb176dac7_3157971.fix +instr/fixtures/vote/16fc3b240872cc6552a175d208f97b70333df04d_3247128.fix +instr/fixtures/vote/19631d3b398ce463d8e6bc4ca8ced28c1aa778e8_3247128.fix +instr/fixtures/vote/1be29570a616cf682aa98228d4a77ea746f1c878_3247128.fix +instr/fixtures/vote/1d876b049a0a847eb7bc810a04c48aa9e92c4563_3247128.fix +instr/fixtures/vote/1df8448808174c668ba41f5bd7f2b7ef13fcc5ed_3247128.fix +instr/fixtures/vote/23d10878b95020605cf6b3d3b9e7ffb939b14b2c_3157971.fix +instr/fixtures/vote/2491bf8c6ee30dd52c41accdaeea9aa5482db3b8_3247128.fix +instr/fixtures/vote/26064c5768f6dc2625c4ea59a1c097554d6074fe_3157971.fix +instr/fixtures/vote/293110e2220fa085b643ad3141f94b25f99055d3_3247128.fix +instr/fixtures/vote/29cd94058bcc96c5e4735242ed83ebf6b9115d60_3247128.fix +instr/fixtures/vote/2a7d16be19125316f788f8971c95b5ad92fac958_3247128.fix +instr/fixtures/vote/2afcfa52cf6596ae6cbb8c4c4c11fc52f3babdf7_3247128.fix +instr/fixtures/vote/2b91d1c90fa589ed0a1843248b3230967cc1f339_3157971.fix +instr/fixtures/vote/2b9f65074b9ea502a326b2032aa7da013f713bc6_3247128.fix +instr/fixtures/vote/2c8db5c007d8142224cd1ccd4c52b2de7f9dc5a4.fix +instr/fixtures/vote/2d66263e7db0576f52631457483b3b5fb2bd6b28_3247128.fix +instr/fixtures/vote/2dec3f1960f93f88e1cfd7da5a761286de05492d_3157971.fix +instr/fixtures/vote/3079bc32c5e542b52b244f8a9bf35c5bc9ba23f3_3247128.fix +instr/fixtures/vote/30c423e338fa9c9fd2ff061366a6f0f507bc902c_3247128.fix +instr/fixtures/vote/31a1d36b31bd1f2093e98faadb6e69b43b0c0994_3247128.fix +instr/fixtures/vote/322c0223c468f9a7d24379712d200fc432251096_3157971.fix +instr/fixtures/vote/32fec7c4cc970067199a2f439abf9b45990b461f_3247128.fix +instr/fixtures/vote/341b3c6697796aea62c0d16b43f93e0e24534290_3157971.fix +instr/fixtures/vote/353fccfad1a209ef5278a33d2d2b4703a3647ce6_3247128.fix +instr/fixtures/vote/3556cb9393c8bbf16a72dad7c88cc61961c22adf_3247128.fix +instr/fixtures/vote/38ee9ace5b09daafad120d157e43f3dc10119a6c_3247128.fix +instr/fixtures/vote/39088b1a40091747ebe7ce8488e23aa4077dbb39_3247128.fix +instr/fixtures/vote/3af215b1ce2f38efcf90b8ea65d6bceaedf03b5e_3247128.fix +instr/fixtures/vote/3b9523b505a408298feebb9c5602b27020231ca8_3157971.fix +instr/fixtures/vote/3c8ff7358a117294cbf21d6b3bab58a7f8c81df7_3157971.fix +instr/fixtures/vote/3de1dd6c50d3c39fca14e53b4257279460eacf9a_3157971.fix +instr/fixtures/vote/3e9db51c58288979005fa78f10b4b0e237dc17c8_3247128.fix +instr/fixtures/vote/3f6eb99f60bf7c0835f19a9c87b03aa07b329a85_3247128.fix +instr/fixtures/vote/3f846a1f08a55d4b081a1a025038c81c4902c184_3247128.fix +instr/fixtures/vote/40bdaa65fce6ce6aadcdb2818da12adaeaf85b7c_3157971.fix +instr/fixtures/vote/41de309f8741b31ee55dc885fcf0e39997cd1d27_3247128.fix +instr/fixtures/vote/424080f00587d4f4f2dc455bc8af8801c1a3d67b_3247128.fix +instr/fixtures/vote/425d368dd19e021a2dda5f3191cfd56ca720c42d_3247128.fix +instr/fixtures/vote/441e2371f1f1cbb331866b7e4c081d4ead6c2ef5_3247128.fix +instr/fixtures/vote/44446a4e9cd0e385aeeb43f85587cca2d30097b5_3157971.fix +instr/fixtures/vote/467b221f424add4e52a7ab48cbb1926a12c9d57a_3157971.fix +instr/fixtures/vote/48970f5b6f919d4ea26a7bd7e0a8f7a3a2e1c643_3247128.fix +instr/fixtures/vote/4b37c672dbdbc46586d536013848ee53aaca8285.fix +instr/fixtures/vote/4d7c4e8fac5e65e2c2c9a3a6423033acfafc0552_3247128.fix +instr/fixtures/vote/4f55871a73a7a6b9973479ea0982c815f58cdbca_3247128.fix +instr/fixtures/vote/500823153bc2b78af4599893ed268e13b427cc88_3157971.fix +instr/fixtures/vote/5210e7c02a331e78fac04335673a1c11dd8dcdea_3247128.fix +instr/fixtures/vote/52c2de273e838cef9ec68dad36858ef93e23c32b_3247128.fix +instr/fixtures/vote/53b7de0971bc308abbd2d2f535f2636a3ed11364_3157971.fix +instr/fixtures/vote/563a9f7fae9a529a4b5eaa1d3ce37c700d5a2732_3247128.fix +instr/fixtures/vote/563b58644cc8afc03e666100ef55b5ff4fe92927_3247128.fix +instr/fixtures/vote/5653e72daeedb3a6b6a67039817c34fa18a06764_3247128.fix +instr/fixtures/vote/576bfffb44840a840481ce987a4b26f4e6066c77_3247128.fix +instr/fixtures/vote/595cc1e3fdd1bb4a4701272e5c91e2eeb2029ad3_3157971.fix +instr/fixtures/vote/59b9ba6f58e3665f5fd3ed18845a28369cd3df8b_3247128.fix +instr/fixtures/vote/5a9dbea852cbaec756a97afb7766567eae37eef5_3247128.fix +instr/fixtures/vote/5ba4ce554a72bdb80a06e6f13f98a48ca3beefca_3157971.fix +instr/fixtures/vote/5cb64b6c3ca84d1c7f11d61169b5310045b10c1b_3157971.fix +instr/fixtures/vote/5cba36b7b083b010decc6c340c81c79367733841_3247128.fix +instr/fixtures/vote/5d3d032807783663dc945f468a9d0a7d7ab6e37b_3247128.fix +instr/fixtures/vote/6114aff703f6f74cbcff2de70fb18218d54d4009_3247128.fix +instr/fixtures/vote/61ea44618e4db2aad9fb5645885d1f80410876c8_3247128.fix +instr/fixtures/vote/62418ed334795f6bbd56a0010bac67d82097304c_3247128.fix +instr/fixtures/vote/64d790dc43b4f67b99d1e01574507b67adaa5d21_3247128.fix +instr/fixtures/vote/65c83e05e146033329e286cb3daf794d14bd9ee6_3247128.fix +instr/fixtures/vote/65e4c0a2c4280c36bab4e0e17531c90ae6dd27fc_3247128.fix +instr/fixtures/vote/676d6644517757d16684a5a50ab8f2bc38af5013_3247128.fix +instr/fixtures/vote/6b352c629cf46681d1b8c7d31b1aee1a05734b44_3247128.fix +instr/fixtures/vote/6bb882f4d18e53ac81add667fe197456ea648946_3157971.fix +instr/fixtures/vote/6e1dcdf93166e2ecf78566b9597b04861c2b3d1a_3157971.fix +instr/fixtures/vote/6f5e4488ae6ef5c5f0e08564d210de96a315ed36_3247128.fix +instr/fixtures/vote/70fedadbd46b2dc4a7cbda5b6831528dcda516d0.fix +instr/fixtures/vote/737414d932bc340aadd680ba27eb4fb23992c2b9_3247128.fix +instr/fixtures/vote/750c56c10f68e0bf9bb8778001cf81181de6e862_3247128.fix +instr/fixtures/vote/7660642c7ead278f037b3be6fd515d06454cc659_3157971.fix +instr/fixtures/vote/76b939e7534718dd8e87db251f79af8607353a62_3247128.fix +instr/fixtures/vote/7968cfe4b8f80858e675af20b61fc847b0bbd11a_3157971.fix +instr/fixtures/vote/7a10fa4391d8f0819de957cf8b2f1591d00ea0d0_3247128.fix +instr/fixtures/vote/7a5f941bf9ca6ed6869303a227484aeb3eca8f75_3247128.fix +instr/fixtures/vote/7b1fd3e75347c9bff06ee7c622d6223ca5369231_3247128.fix +instr/fixtures/vote/7cd7d0ce87f1165648af3b1821eabd7467714979_3247128.fix +instr/fixtures/vote/80ea8b78b9ebab01ce3cc8322114121e4ca842b1_3247128.fix +instr/fixtures/vote/821072f79b9bb43af38dc2591cee48d7c762880b_3157971.fix +instr/fixtures/vote/84b42ba3b97632581d4df1bfc3e14d75ff57524d_3247128.fix +instr/fixtures/vote/84e6ab89d0fc80b5bb42397b13de021d2fb9b0ee_3247128.fix +instr/fixtures/vote/85aaf54e1b933fd1cce0d6c03ab198f27aa9b7d3_3247128.fix +instr/fixtures/vote/8642b12b9b123102484528e3063c1efb23dccf46_3157971.fix +instr/fixtures/vote/8776b4086a6ede90ae06241a28fdbdb11694e58a_3247128.fix +instr/fixtures/vote/87aa6961f58ea672b563af1ab8f4c1b344897739_3157971.fix +instr/fixtures/vote/8836ec26f5f8cc53f6f11383e00154715844edc8_3247128.fix +instr/fixtures/vote/88ecca2c95f927ab0df929cb5ed4ddb9ea025f07_3247128.fix +instr/fixtures/vote/89a59972dd92face047d4128cb9485bed72674df_3247128.fix +instr/fixtures/vote/8a167920d063318c7fc2d16192c884f238193162_3157971.fix +instr/fixtures/vote/8cc318b95d206c645677a1d56109a1443f0abf46_3247128.fix +instr/fixtures/vote/8d4175ee763f97001a3bc34d82cd99cd1d4483d9_3247128.fix +instr/fixtures/vote/8eb0aff6b4a91ce463e395c8680e34327041209c_3247128.fix +instr/fixtures/vote/8ed7721986b4f2f7e42d2fc0b4db192d16752f34.fix +instr/fixtures/vote/900edb19ccf67ffca4dc9362d48b1fc6da11338c_3247128.fix +instr/fixtures/vote/90ed56de621b9573b548593e82f00f05d968b15d_3157971.fix +instr/fixtures/vote/91221b627569536b657646c6b8132f4d3feb8c97_3247128.fix +instr/fixtures/vote/92a91d27cf50095356513122d6a666e66f98379b_3247128.fix +instr/fixtures/vote/92e1b95f2a8b8ae934569ae4e74837a0efcac582_3157971.fix +instr/fixtures/vote/983036026d23e36cb1d241c0f6388a91ddd80a4a_3157971.fix +instr/fixtures/vote/98ce208e20417accec241056e6a0d203eb9505c6_3247128.fix +instr/fixtures/vote/9b5d30248bdb9634e6ce522ce476e085881c8648_3157971.fix +instr/fixtures/vote/9b6032e5e639da70a7f369d44390dd5d7a2d0694_3247128.fix +instr/fixtures/vote/9bf57d8d8fbc9276f767c4fd9acbb9b448a5cba6_3247128.fix +instr/fixtures/vote/a2d0a4999b880051db1a624cc0b09b7b1224073b_3157971.fix +instr/fixtures/vote/a3f060b237c0c462b1b7b793201479a72b4b4146_3247128.fix +instr/fixtures/vote/a484ff182ee6d638dad32e15faff16bc41190a11_3247128.fix +instr/fixtures/vote/a5ddd3d7c3d1b2832bde744b13b8f5a4057f2aca_3157971.fix +instr/fixtures/vote/a7380e44f958ccc1caa509af7ec442a65a8412be_3247128.fix +instr/fixtures/vote/a7883262e86376e0abf91dbe769e428deb431f66_3157971.fix +instr/fixtures/vote/ac30f693d757e3ba7f239f11f7d9a481bfde2e03_3247128.fix +instr/fixtures/vote/aca2c0e4594436cc133a094113058a39716c924c_3247128.fix +instr/fixtures/vote/aca6af0858f20756361f2a2cd40ffde327f5ab88_3247128.fix +instr/fixtures/vote/ad880396b601e053f8c0ba7151b596d5b38a8362_3157971.fix +instr/fixtures/vote/aeedd60c825f82e8a2de8b05ea15f44bbf12b86f_3157971.fix +instr/fixtures/vote/b07524357168dce5d5edf5fd9da8e529dd2f2fac_3247128.fix +instr/fixtures/vote/b1a4ec345127c05c9fe765b945651bcd84190f4c_3247128.fix +instr/fixtures/vote/b35c5f873976ffe8f625342af7a6e152e8839322_3247128.fix +instr/fixtures/vote/b3612d9a66f812eeb82d5baa3c30dac40fbe1559_3247128.fix +instr/fixtures/vote/b59cce7fa65efe4cf777670a210249b975001f07.fix +instr/fixtures/vote/b82cde7f822b8215523901a1b2ee40c746f69c81_3157971.fix +instr/fixtures/vote/b9234c4889065836aaaeddde5e31ca0918d77c80_3247128.fix +instr/fixtures/vote/b99d9c082005ba7c7bd0c8ca73396e8c180d94c0_3247128.fix +instr/fixtures/vote/bdc3595a726b5ebf07a37258dbb1f6700339a860_3157971.fix +instr/fixtures/vote/be1b5a28eed8264e584fa7a7c4bae4a74a484369_1767272.fix +instr/fixtures/vote/becc5f2a14c17959a61acaf11a855529810cef03_3157971.fix +instr/fixtures/vote/bfb6137a4965da9034642f608ac4df8204484192_3247128.fix +instr/fixtures/vote/c1a628398ba593ee0f57740dec1416734b980039_3247128.fix +instr/fixtures/vote/c7ec4d91343561a47f4701013203563f730d0ab2_3157971.fix +instr/fixtures/vote/c88c830e2aa88f3853f091fff3d2f6f7dc0c45be_3157971.fix +instr/fixtures/vote/c8b839e773244bcc2841acaec1ebbb0f4a513254_3157971.fix +instr/fixtures/vote/ca8d2fab5dd57766eb933f9230408dd03dae24cb_3157971.fix +instr/fixtures/vote/cadcfc07909d18d68efaf420bba5efb798292e21_3247128.fix +instr/fixtures/vote/cbef4c09a5bced027ece3dc3486265e316f0305f_3247128.fix +instr/fixtures/vote/cc65c0efb3591a12e22dfd8df4df5112c3407bdc_3247128.fix +instr/fixtures/vote/cc746885c29854e333738275d22920790ef69a26_3247128.fix +instr/fixtures/vote/cdf47bc9593ff006ddec259a96a70051348e5220_3247128.fix +instr/fixtures/vote/d08cda3188849f18635278fa31dd57b06975c114_3247128.fix +instr/fixtures/vote/d1d582228472e980cd167e28129284fec36f8793_3247128.fix +instr/fixtures/vote/d2738298a1dcb0352b92479d7821f9860bfd5cb8_3157971.fix +instr/fixtures/vote/d2b779ba720c853797460ada3b8ecad6f17b0e47_3247128.fix +instr/fixtures/vote/d4aff4f0e7a9c4541595e79b2ad6445a4fd92948.fix +instr/fixtures/vote/d7d1d0d6e218cf9d62b59291b9c4aac64438e223_3247128.fix +instr/fixtures/vote/d827e583efe9f078c63726ca696fb81bc5fdb5f2_3247128.fix +instr/fixtures/vote/d8d242ec00fd7ea113cbef02f8eb59c0e6114984_3247128.fix +instr/fixtures/vote/dca58a6e0616e7a7e1b41147e5cf1bfa0e115532_3247128.fix +instr/fixtures/vote/dd39320ef28d4a7e259fd481e5f2c53b70d1dba3_3247128.fix +instr/fixtures/vote/e1fbd87eb55bb1c8ffe973427d66b929ae711c89_3247128.fix +instr/fixtures/vote/e3d06ec5b822f3d0e9c514d73474dbbdbf7daabe_3247128.fix +instr/fixtures/vote/e42116b2c7e9fb44e7a29c0ffbc541599793fc73_3247128.fix +instr/fixtures/vote/e69a8d4930ee9468b847497e2a3c21be2a1f3a1f_3157971.fix +instr/fixtures/vote/e741f2536de49da1e348316280862f20d0ea60bf_3247128.fix +instr/fixtures/vote/eb5eef92896d21ea92f6c5b00b6cf0ae754bb896_3247128.fix +instr/fixtures/vote/ee05bd2c385363b5e0b3842f3f16f31218927e43_3247128.fix +instr/fixtures/vote/ee9dace482f37838648ed64e057299824e5f2608_3157971.fix +instr/fixtures/vote/eeb6d8620da4dc63708cbad3d7bff50c0965e6ee_3157971.fix +instr/fixtures/vote/ef1a58b291cbc4bf23d1bc1a29816b06058c41e4_3157971.fix +instr/fixtures/vote/ef97b8c44e5eb20c6134fe7a9ec82d206f44d927.fix +instr/fixtures/vote/f177f9e618b35ecc660e60ddc5f96845a4cbc2d6_3247128.fix +instr/fixtures/vote/f2656b917ba426174b23a79756d2ed11783e1648_3247128.fix +instr/fixtures/vote/f35212bac81e047adc0305d86c0ec95aa66539bc_3157971.fix +instr/fixtures/vote/f455385b09ddd2b0db220fdb7258772c8a3b087a_3157971.fix +instr/fixtures/vote/f46acef8caef7d7f5bbc5c99dd27f4e53389b867_3157971.fix +instr/fixtures/vote/f6912462e7f3f42daf79b1ab75f05bc4e7ed446d_3247128.fix +instr/fixtures/vote/f80728ce179e51245cf16c1db692906c50699aa9_3247128.fix +instr/fixtures/vote/f8e4e89ca4c449d7c063c7bb07099cca0c06e1a0_3247128.fix +instr/fixtures/vote/fde49d13bb3b39aaa5e7ccdc0709d24c349ab4cd_3157971.fix +instr/fixtures/vote/ff178cce11633d416a3691a13454832b117f90e2_3247128.fix +instr/fixtures/vote/ffe569418052e3a00192d569f12eb7ee84f96f5c_3247128.fix +instr/fixtures/zk_sdk/a0_7f8c0067c3ad9e1b.fix +instr/fixtures/zk_sdk/a10_5365a051ef01d436.fix +instr/fixtures/zk_sdk/a11_d7cdabf3af12487d.fix +instr/fixtures/zk_sdk/a12_0217879aa2a65895.fix +instr/fixtures/zk_sdk/a13_379ab95b603bfbe4.fix +instr/fixtures/zk_sdk/a14_c47b685eadb4a5cd.fix +instr/fixtures/zk_sdk/a15_dcddbae46a61d865.fix +instr/fixtures/zk_sdk/a16_3280762193911d15.fix +instr/fixtures/zk_sdk/a1_65ed1485da0973ee.fix +instr/fixtures/zk_sdk/a17_9351289cb0ab6c49.fix +instr/fixtures/zk_sdk/a18_3fba1553127beac4.fix +instr/fixtures/zk_sdk/a2_dc1311dcafd818d7.fix +instr/fixtures/zk_sdk/a3_8b05dffa3991ce20.fix +instr/fixtures/zk_sdk/a4_bb2336989dc4a34d.fix +instr/fixtures/zk_sdk/a5_5bd139ba8c43e199.fix +instr/fixtures/zk_sdk/a6_3c257db2305d61d7.fix +instr/fixtures/zk_sdk/a7_89497c02cf43312b.fix +instr/fixtures/zk_sdk/a8_ee93b2bad194edd6.fix +instr/fixtures/zk_sdk/a9_4920e8ff8149d60f.fix +instr/fixtures/zk_sdk/acc0_bebebc0c335d0027.fix +instr/fixtures/zk_sdk/acc10_8a370de58dd6ff6f.fix +instr/fixtures/zk_sdk/acc1_0db1092cba2f9ce2.fix +instr/fixtures/zk_sdk/acc11_4671635d91d771c3.fix +instr/fixtures/zk_sdk/acc12_e5db40336b25238c.fix +instr/fixtures/zk_sdk/acc13_779e4724849e5d1f.fix +instr/fixtures/zk_sdk/acc14_7556c81ef70f6df5.fix +instr/fixtures/zk_sdk/acc15_69ecb9c439a0a3d3.fix +instr/fixtures/zk_sdk/acc16_22f4789faf31013a.fix +instr/fixtures/zk_sdk/acc17_d580e07deb9979eb.fix +instr/fixtures/zk_sdk/acc18_222fa5dec00bd6df.fix +instr/fixtures/zk_sdk/acc2_25bbad7adb043902.fix +instr/fixtures/zk_sdk/acc3_93638051fe9a9032.fix +instr/fixtures/zk_sdk/acc4_346b401eede57b23.fix +instr/fixtures/zk_sdk/acc5_9f182deb9212323a.fix +instr/fixtures/zk_sdk/acc6_c14d3513e55b3462.fix +instr/fixtures/zk_sdk/acc7_692fb904040751ff.fix +instr/fixtures/zk_sdk/acc8_9a740675ffb453dc.fix +instr/fixtures/zk_sdk/acc9_64c38631c7cc437d.fix +instr/fixtures/zk_sdk/c0_bd186bcb05e520a8.fix +instr/fixtures/zk_sdk/c10_d684d7b0fc98b977.fix +instr/fixtures/zk_sdk/c11_253cf5d1fc3fa741.fix +instr/fixtures/zk_sdk/c12_b3f23265a124afd0.fix +instr/fixtures/zk_sdk/c13_2e7374bbe1d73839.fix +instr/fixtures/zk_sdk/c14_2f8abdc6f72b0403.fix +instr/fixtures/zk_sdk/c15_ec32def91de7d06b.fix +instr/fixtures/zk_sdk/c16_ffc8f805e5b7c58f.fix +instr/fixtures/zk_sdk/c17_a5caa37381b2d88c.fix +instr/fixtures/zk_sdk/c18_408cace41d38aa10.fix +instr/fixtures/zk_sdk/c1_971bc4b339d9f7d2.fix +instr/fixtures/zk_sdk/c2_6cd31d28f28b9c48.fix +instr/fixtures/zk_sdk/c3_d66629b7702ce4f7.fix +instr/fixtures/zk_sdk/c4_6f3a15ade1c2146f.fix +instr/fixtures/zk_sdk/c5_e261ba2806f40657.fix +instr/fixtures/zk_sdk/c6_a136e49107f81eee.fix +instr/fixtures/zk_sdk/c7_7087de00ff03174c.fix +instr/fixtures/zk_sdk/c8_b86dfd15c4bda2e0.fix +instr/fixtures/zk_sdk/c9_43b70a3f4d5f2f61.fix +instr/fixtures/zk_sdk/close0_668eab98628215e4.fix +instr/fixtures/zk_sdk/close1_cbfd771473a9f85a.fix +instr/fixtures/zk_sdk/close2_2016e5dfa9d32469.fix +instr/fixtures/zk_sdk/close3_f1a3b56f71f17947.fix +instr/fixtures/zk_sdk/close4_d508827e16734245.fix +instr/fixtures/zk_sdk/close5_b3629c83eabeac11.fix +instr/fixtures/zk_sdk/close6_7e203c2b6ef45a1f.fix +instr/fixtures/zk_sdk/close7_f4dc3293b59a13e1.fix +instr/fixtures/zk_sdk/cu0_36d9c7a6e5c5fca5.fix +instr/fixtures/zk_sdk/cu10_737856ecdd842d3e.fix +instr/fixtures/zk_sdk/cu11_f123f9cc246d29a6.fix +instr/fixtures/zk_sdk/cu12_0aad3eed2e702c9e.fix +instr/fixtures/zk_sdk/cu13_8642c3983cf25f3b.fix +instr/fixtures/zk_sdk/cu14_0f02b00aa1256e4b.fix +instr/fixtures/zk_sdk/cu15_f8f406e74343181a.fix +instr/fixtures/zk_sdk/cu16_30c779b45c1a5484.fix +instr/fixtures/zk_sdk/cu17_92fb6742378130bd.fix +instr/fixtures/zk_sdk/cu1_7e2d7d8641117e1d.fix +instr/fixtures/zk_sdk/cu18_43dfe64cf72e9b31.fix +instr/fixtures/zk_sdk/cu19_3e0c6b119c6be584.fix +instr/fixtures/zk_sdk/cu2_3aefa8c868a0fcf7.fix +instr/fixtures/zk_sdk/cu3_17237dab373a2f31.fix +instr/fixtures/zk_sdk/cu4_f4e61bc4ab231f51.fix +instr/fixtures/zk_sdk/cu5_540d5ea7efd8b8a9.fix +instr/fixtures/zk_sdk/cu6_eee575f49da79ee3.fix +instr/fixtures/zk_sdk/cu7_9b7c6b54671f19ca.fix +instr/fixtures/zk_sdk/cu8_e4047eff6fe1720e.fix +instr/fixtures/zk_sdk/cu9_033c17748c9aba13.fix +instr/fixtures/zk_sdk/p0_ff056ff78a8bee61.fix +instr/fixtures/zk_sdk/p10_55d7a28760d319a3.fix +instr/fixtures/zk_sdk/p11_78641ebd5f410d60.fix +instr/fixtures/zk_sdk/p12_4f33b954b03a8adb.fix +instr/fixtures/zk_sdk/p13_ea63e0051186ff28.fix +instr/fixtures/zk_sdk/p14_e0c3e5686b7e6727.fix +instr/fixtures/zk_sdk/p15_b0541a4cc941f8ac.fix +instr/fixtures/zk_sdk/p16_0c568bc48424285e.fix +instr/fixtures/zk_sdk/p17_34cb78ca02fd0b88.fix +instr/fixtures/zk_sdk/p1_7359ea72a4a0f381.fix +instr/fixtures/zk_sdk/p18_e305626018f8107e.fix +instr/fixtures/zk_sdk/p2_053ef6a085f36cdb.fix +instr/fixtures/zk_sdk/p3_a0c75ca2eee94af5.fix +instr/fixtures/zk_sdk/p4_b68bff4d6782536d.fix +instr/fixtures/zk_sdk/p5_6546f228ce238f10.fix +instr/fixtures/zk_sdk/p6_7538790469ee47b5.fix +instr/fixtures/zk_sdk/p7_3108ea35d4649816.fix +instr/fixtures/zk_sdk/p8_c0ca36cf824abfe0.fix +instr/fixtures/zk_sdk/p9_614654ebac0467df.fix +instr/fixtures/zk_sdk/verif0_a29b1e9d744344a8.fix +instr/fixtures/zk_sdk/verif10_bfdef4b3ba4e391e.fix +instr/fixtures/zk_sdk/verif11_1dbab83a16fe6a1b.fix +instr/fixtures/zk_sdk/verif12_a7048539b4b8e411.fix +instr/fixtures/zk_sdk/verif13_dfa26efa65994081.fix +instr/fixtures/zk_sdk/verif14_f02f235aadf7d4e5.fix +instr/fixtures/zk_sdk/verif15_807420250b9780e0.fix +instr/fixtures/zk_sdk/verif16_2c0a2aaa7e50895e.fix +instr/fixtures/zk_sdk/verif17_fa91301db4ac9aa0.fix +instr/fixtures/zk_sdk/verif18_d71f9e54266c9636.fix +instr/fixtures/zk_sdk/verif19_eb8a282364165fc5.fix +instr/fixtures/zk_sdk/verif1_dbcf3baf1d8a0a6c.fix +instr/fixtures/zk_sdk/verif20_ed4d78e940a37141.fix +instr/fixtures/zk_sdk/verif21_2e343a6532d14d06.fix +instr/fixtures/zk_sdk/verif2_184fb33943b1b37e.fix +instr/fixtures/zk_sdk/verif22_d17e45ba8032fa69.fix +instr/fixtures/zk_sdk/verif23_613434c5fc608a19.fix +instr/fixtures/zk_sdk/verif24_e867c8d239810c2a.fix +instr/fixtures/zk_sdk/verif25_3f2701ce1bf35455.fix +instr/fixtures/zk_sdk/verif3_5c93510ddd849e0a.fix +instr/fixtures/zk_sdk/verif4_35eac11243c3926f.fix +instr/fixtures/zk_sdk/verif5_be19352e8c9e7991.fix +instr/fixtures/zk_sdk/verif6_f8b5d5099faa223c.fix +instr/fixtures/zk_sdk/verif7_56a4cf7ebd275854.fix +instr/fixtures/zk_sdk/verif8_27e9927372242751.fix +instr/fixtures/zk_sdk/verif9_d7810f7a7111987a.fix +instr/fixtures/zk_sdk/w0_8ec5005274801773.fix +instr/fixtures/zk_sdk/w10_053645a284604fe6.fix +instr/fixtures/zk_sdk/w11_19df8196a540fec2.fix +instr/fixtures/zk_sdk/w12_7d6209c0ef81b09e.fix +instr/fixtures/zk_sdk/w13_21ed12da0cc9b04b.fix +instr/fixtures/zk_sdk/w14_b6df5d2e8f516a17.fix +instr/fixtures/zk_sdk/w15_09e751443b873cf7.fix +instr/fixtures/zk_sdk/w1_5c0cda9f092206bd.fix +instr/fixtures/zk_sdk/w16_a06c5b45412cac74.fix +instr/fixtures/zk_sdk/w17_e882a520e3faf5cc.fix +instr/fixtures/zk_sdk/w18_de611fd4e365b353.fix +instr/fixtures/zk_sdk/w2_ab09648c62fc0677.fix +instr/fixtures/zk_sdk/w3_2b66de454d6fa439.fix +instr/fixtures/zk_sdk/w4_9f8009abcc7f4e4a.fix +instr/fixtures/zk_sdk/w5_2e5b3199f8d5b61c.fix +instr/fixtures/zk_sdk/w6_00a5ddd8b671cc85.fix +instr/fixtures/zk_sdk/w7_a0e0c80764d4d7e9.fix +instr/fixtures/zk_sdk/w8_2d9ce48583a46bee.fix +instr/fixtures/zk_sdk/w9_181202ef9796e3c7.fix +instr/fixtures/zk_sdk/wacc0_4565bf244f7d3c94.fix +instr/fixtures/zk_sdk/wacc10_539f367d93a244db.fix +instr/fixtures/zk_sdk/wacc11_6ea7c70a4400aa1e.fix +instr/fixtures/zk_sdk/wacc12_c82d7ca279e283fc.fix +instr/fixtures/zk_sdk/wacc13_690bdf1be9ab6b1f.fix +instr/fixtures/zk_sdk/wacc1_3dacb803b0756778.fix +instr/fixtures/zk_sdk/wacc14_0978c04b367c407b.fix +instr/fixtures/zk_sdk/wacc15_ae77b943bc1ccebe.fix +instr/fixtures/zk_sdk/wacc16_7da88539580c7826.fix +instr/fixtures/zk_sdk/wacc17_ad6c57f722bcf5b1.fix +instr/fixtures/zk_sdk/wacc18_a2d8de38b14b1c68.fix +instr/fixtures/zk_sdk/wacc2_4d2624adb43ecdf4.fix +instr/fixtures/zk_sdk/wacc3_7e9654124e2af720.fix +instr/fixtures/zk_sdk/wacc4_fa6d9b4c086d5a97.fix +instr/fixtures/zk_sdk/wacc5_6a9b1525cf8f5452.fix +instr/fixtures/zk_sdk/wacc6_5f3bf70e8572e52b.fix +instr/fixtures/zk_sdk/wacc7_a08f10406aee35a4.fix +instr/fixtures/zk_sdk/wacc8_4370fd00b238a5a0.fix +instr/fixtures/zk_sdk/wacc9_d13848d723bd8cfa.fix +txn/fixtures/006cec687919df8ddc4fd111e60e4864c7a94a79_2288978.fix +txn/fixtures/00af752d1f13d997b80e291115dd08907fc04653_265678.fix +txn/fixtures/00dc63d6f5824efa900302649eeca7983e5d3f5a_1834424.fix +txn/fixtures/0103115bd3ec4f27fcf4dbd7cee22a530e68f797_2135631.fix +txn/fixtures/01237a8b8a95fe81b703f7983eb7842f962b50fe_265678.fix +txn/fixtures/0136006d0f996e9945f0f29b51777e28fe515f0d_2190571.fix +txn/fixtures/016b58bef3cbb526df4a67c91f1dffc67ca6f557_1840191.fix +txn/fixtures/0179c4cbb9a7110eb246247ca09517720f960904_2194958.fix +txn/fixtures/0183b6cda71f09f58bcb5164828a9597a839869d_2211742.fix +txn/fixtures/021f0cfecbd5edd05af52b24c1374d5dd13c36c0_3213804.fix +txn/fixtures/024d737de4d4972b4a1591e82ace975979dc6718_2230394.fix +txn/fixtures/025c41e63767ab929c10eb132b5ba984d94e3270_265678.fix +txn/fixtures/02b3430534bb8ec4ccd709cb7ae8e5b8d6df4aad_2197298.fix +txn/fixtures/02ba7c2c651391d57b763a94130868f1cbdb4ef6_179791.fix +txn/fixtures/02e8265a13b1ad69d6a004b56133159de5f8733b_2197709.fix +txn/fixtures/02e899660fe0f26c59c8ae8aed7bfd6673d4e076_1375234.fix +txn/fixtures/02f247a27a981000e10282625e1c489b9b6db90c_265678.fix +txn/fixtures/02fe2b0bce357cdfc3b1557339b60ce6b592951b_265678.fix +txn/fixtures/031ec212653853476f302131cf8d5d9a403f7b82_2220831.fix +txn/fixtures/0326fd689c6fb4ed44c8304776bb110dffda5bec_265678.fix +txn/fixtures/032a3dbd38411d35b22234f84e4e9280603c182e_1190840.fix +txn/fixtures/03461d1ee3cd21a2a3451c470477cc857197efe1_3418666.fix +txn/fixtures/036e4ae1eafe05a7690280b02ab26a41714c5326_265678.fix +txn/fixtures/03756b34d21159e4ab852ce72e5368145abba09c_265678.fix +txn/fixtures/03a2fa9ece069a24dd4a6b3ca0c4f627f9ebafc2_2188818.fix +txn/fixtures/03aa332b202dfe5555e2f5ae5c54f661a794cff8_1852822.fix +txn/fixtures/03b11411082235faa4be68dc5132a2c293dcd15f_3677356.fix +txn/fixtures/03c7c6f82ad963b03675a01bd23846cd2fda345a_2134389.fix +txn/fixtures/03dc8d0e3e91b0660e951d913960ff71c2ad02cc_2996610.fix +txn/fixtures/042d94b755776fcf059a2e6200dc7af45d190d08_1574621.fix +txn/fixtures/042ff9e461559c7cd129d9a1cd1eb2eada273b04_1842874.fix +txn/fixtures/045b3f22f7399a4548f5bfe11e6fa2788a5de91d_2209190.fix +txn/fixtures/04a751adc04f5584ad605bebb3ec9c608335cfa4_2204078.fix +txn/fixtures/04ac142a971d9323607de20fce669444443bc915_265678.fix +txn/fixtures/050108dd9b2c1dbf87b11d3dc6b2b50fc16abfba_2233729.fix +txn/fixtures/053ae2dcd2b51f24217d2f647c8b204b97d07318_1832236.fix +txn/fixtures/055c62560b81faa56b389dba22e6f113e160fe32_901661.fix +txn/fixtures/056eba9d70405ed6a11023b1cd96e3c92e9661c6_265678.fix +txn/fixtures/0587ac249a98b9379c81e1c5f0f7b417ca5ac77f_2234894.fix +txn/fixtures/05cab714df1317735f11a326b2b91aac865a508b_2191317.fix +txn/fixtures/05dbe5bc20b7f49b174ddb99aad50e87cf6630c3_1834634.fix +txn/fixtures/05f6a634c50d863f1127e931cc4c1ed9a7e13073_265678.fix +txn/fixtures/069dfc436fb57aa794d78edfd9867f26830579cf_2753981.fix +txn/fixtures/06c676278f6bed3172c1c35dc53ded17d05cbb34_2206266.fix +txn/fixtures/06ddb628dad6980f524a0b4efecb26b0ec766293_2237315.fix +txn/fixtures/070334b6fbfba042afdb1834d7121e126748305d_265678.fix +txn/fixtures/07555c408bd0410bfd986d2746a60b2b2a338397_1836475.fix +txn/fixtures/07586995a94dffe82db72e23dcc1c6335b1db174_1835702.fix +txn/fixtures/079985119394d9f4ac831732cedd707541dd46e4_265678.fix +txn/fixtures/07bb6b5600e9cb4f67bc8fdd46032a9ecbaa33be_265678.fix +txn/fixtures/07eb941922fc243151d2508418af3084cd120750_265678.fix +txn/fixtures/07fbaa60ebb44e18d021624525ad01b1c7d53529_2136416.fix +txn/fixtures/081416a5bb9315e77818df324f050344628ee3a3_265678.fix +txn/fixtures/085c146aa8a8584bd559b2f444fe7a08d1383d80_1574990.fix +txn/fixtures/085f9d2bbc93cbee2fd9a0803c91851a7fc39af2_265678.fix +txn/fixtures/086a9edb3347cbe7d120f8579ba505440dae574c_265678.fix +txn/fixtures/0899a69ebd070da07bc8856a0178a09c4d29a351_265678.fix +txn/fixtures/08a6ed54c9afd2e392ceb8a29d579acb8088e2bc_265678.fix +txn/fixtures/08d3edb03d3e5b8cd69cb8c737e6ebf6fcc422c8_265678.fix +txn/fixtures/08eefd180785f6be4a6848a106cdba374bce7e60_265678.fix +txn/fixtures/09007cf0f0d882b59c4bce3acfbb4932e4432e77_265678.fix +txn/fixtures/094c821f40d0a78521099f7b5100fcb1aca71e31_2211617.fix +txn/fixtures/094d347c1c5351ec7c10736fa6a44b23d2c10c62_2184537.fix +txn/fixtures/09606659053acebd5181b1c495522110ac4ee955_265678.fix +txn/fixtures/096a9be3f9a010e15465edc2750300b306317b2e_2211548.fix +txn/fixtures/097859a8724d9c90bab754f75863ac4e114c285e_265678.fix +txn/fixtures/098d023f43f3b68b16a6c30217153fd2a2952c03_2219729.fix +txn/fixtures/09aa1a8632d6a4782bbc57296cbfd05fc012feb2_2193735.fix +txn/fixtures/09b53d9afbba987a7deefc7caefb4bd4f97398ea_2137081.fix +txn/fixtures/09bdb7f71fdf944492247a55fc54fbb698b24cf1_2135567.fix +txn/fixtures/09e9262d67769a58959485e73b03da24ada26c70_265678.fix +txn/fixtures/0a3ba0c45b67c887fd2f5b7a9c07f277bf3f8bfe_2212177.fix +txn/fixtures/0a4807f84f6dd1c2760b3712df3846e5aa930906_2410587.fix +txn/fixtures/0a70111fa48a51417e32565212433794ccb36eb0_2211425.fix +txn/fixtures/0a902761b7b830127a2b638635fdcf0a12f76b6b_305757.fix +txn/fixtures/0a9090e01a01042c3cb49f91fe833dd5859a376a_2301607.fix +txn/fixtures/0aa31dfa5397f8e8b5ed8172311b39fe430a36f5_3963902.fix +txn/fixtures/0accddb6559a44e80e5010e9353014269e0ae7ea_2232866.fix +txn/fixtures/0adfdb20159b81799344d11639fe0b131c6804ab_2194174.fix +txn/fixtures/0afb0ff804b8d64527e611fa76402bc3967fa6da_265678.fix +txn/fixtures/0b0163af496a173391c533062a293010c7d06323_2224567.fix +txn/fixtures/0b0e4e9bbd0d83f20ac3677bd1b2ef55c6383f64_2196134.fix +txn/fixtures/0b67e1016f18a379545b2aa8fdce2191df651c84_2207739.fix +txn/fixtures/0b6e7a7ed010c514e7b2e121988380ce84e61d2e_2655582.fix +txn/fixtures/0b734af5a53feda0c159093134f13359e71e13ae_265678.fix +txn/fixtures/0b82e85bfedd12586d9d3698c32a6ac994cfb472_1838876.fix +txn/fixtures/0b8be053cedbc396b3f09a9d2f0c7b53037c22cc_265678.fix +txn/fixtures/0bd6fd0865fb8ae01e942d6f75a9eb633ec8b7da_265678.fix +txn/fixtures/0be5f273cf74184f079a08fc56af39b23dea8e84_2140312.fix +txn/fixtures/0c060d9e996c28edf1852d93e3b0cf4067148056_265678.fix +txn/fixtures/0c422f91378be920086a5045bf319ef023e49059_2227613.fix +txn/fixtures/0c52ef1820c16288a738cb56e538c0bd1443feae_1576653.fix +txn/fixtures/0c5ef9a0a3cdbcb24fbe21cf67063b0d64ccfeac_2136266.fix +txn/fixtures/0d1a2a484f610f52793e01e39842119dfc671156_2193673.fix +txn/fixtures/0d351feefe1ffd5ce6f8155688303a51115797df_2805211.fix +txn/fixtures/0d5da4cd600c9c9ebb32c115604685bb05621f7d_2192614.fix +txn/fixtures/0db2e234af2f458161635bb0a2363d2bcff7538d_265678.fix +txn/fixtures/0db9d7218a07df93fecdc6e9ab79b84cc3447500_265678.fix +txn/fixtures/0dda0c174f5b5f9dda90d7bde9efdf04f8243b2f_3192395.fix +txn/fixtures/0de4cfbcc3ca959a69b77ca376db55e5d32cec89_265678.fix +txn/fixtures/0df6674eadbc1117e90b2ce85190f56fd773a58b_2879459.fix +txn/fixtures/0e0bea6df80710a9eba801e87984faeb7a44586e_2213687.fix +txn/fixtures/0e59eb16ba5b23722cc28ae6c3e292d3ed838788_2264094.fix +txn/fixtures/0e7067657e63d87a6e56413e1f22d59deb809614_1049419.fix +txn/fixtures/0e740516f65117d20b2442ccadab87c3b3d54d1d_2228972.fix +txn/fixtures/0e91b8c9063b3368ea4e919d7b45f74303365ab9_2237492.fix +txn/fixtures/0e949eb5c7b91d4546211236beecc706bd7dcb3d_265678.fix +txn/fixtures/0ed6a97eff83d0e5f575d3920d0e6f04fac288da_2234678.fix +txn/fixtures/0edb0fab5db40d7eb9638162c9b0963794801d5f_2216090.fix +txn/fixtures/0edce7d74a293e2c70daa27cd13a41cc8a9f5f7d_2194600.fix +txn/fixtures/0eef200229884e9939b0e7a346beedf45f862b43_2197919.fix +txn/fixtures/0f44c4f29823b842e36eaf773bfea339e33aecb0_2692287.fix +txn/fixtures/0f6627ae4bb3370b5ece3b93afd08eb584108ca7_1847624.fix +txn/fixtures/0f6756784de0c3e3a30b10e7393b41db34c1035b_265678.fix +txn/fixtures/0f867648fb53f860c4832ca7380b8e38ca7f5d41_1833502.fix +txn/fixtures/0fa6fe2d84608f5990fc670117fa18ec7ae9d43c_265678.fix +txn/fixtures/0fb4a1d8c2d58a0a97b81b18880cae0e46b8a360_265678.fix +txn/fixtures/0fbf14533d0939462c80b5b77920a3e9b9867dff_2213556.fix +txn/fixtures/0fe5e7a7a9d0f11ef0f2f56666178dd19f8db973_2134901.fix +txn/fixtures/104395657fbb52c2ef7d08f80b3e17556a880f81_2231165.fix +txn/fixtures/106672242d5cf9448f9d9bc2d8b15ac62b3fd3cc_265678.fix +txn/fixtures/107779c0a88b6fa61ce7baa27fb7fb6f98835bba_1575753.fix +txn/fixtures/1078e0f6ede37210c6a48020dd4dddac6477caf0_2209114.fix +txn/fixtures/10ca664fc1b21dc5dbf6d47aa2b9e9b4b628c4c6_265678.fix +txn/fixtures/10d413b61e3e048fa5bff618b6dee42560c76f09_2185478.fix +txn/fixtures/10e49130b3dc02c842214f96fe938f6ec43bbdac_2206459.fix +txn/fixtures/11309bb4648a259baa2424ee81584a4c7506a32a_265678.fix +txn/fixtures/11781b677d241c298b8f9fa44eaa8b1699213015_265678.fix +txn/fixtures/11886ab2e4ba30f1cd80a1449ad4879659d0bda9_2132945.fix +txn/fixtures/11a1fd9cafd16c050f4dd965e2f7cb41548cd172_265678.fix +txn/fixtures/11adaf7c81814f698c9416851712bb124d0c7751_1833873.fix +txn/fixtures/11af85eb6fafac5f6d64895b46db2fa2be4731ab_2192401.fix +txn/fixtures/11c4c1dff285b7193c674e2cc8a2ddb11517d935_2227547.fix +txn/fixtures/12162ad7be4f8db5b27bf27303a500dce2de2770_265678.fix +txn/fixtures/12643da37bc7cedeaec9a7c2bc4ac191417a7170_2195021.fix +txn/fixtures/127aa2cc742a94fbf18897066605fc2d433ecb25_265678.fix +txn/fixtures/12b805123e5476d6eb0ec393cdb7882033cc28ca_265678.fix +txn/fixtures/12ba5ecba0cfa5bdae2a59cd1c43c26511abca07_2186852.fix +txn/fixtures/12ce8bd1eda9bba78da6b082e38205c2a8f4e902_2215485.fix +txn/fixtures/12db676232cd943525ec09c9e7dc74be5a439ec5_265678.fix +txn/fixtures/12f6de83408534fe27db395521d5fb95089896a8_2199362.fix +txn/fixtures/130b22b824fc407eef7dc5b75d398787f58d2c15_265678.fix +txn/fixtures/130bbc2f5e90382cefe7eb02aa655124b1119547_1839094.fix +txn/fixtures/13234a80ac34347bc6fb4b43bfd50a62f1c0035e_2192109.fix +txn/fixtures/134efa88610e2489622a4e668696b0aa2c16d96d_265678.fix +txn/fixtures/1374718c63be483d920652377ce5d6bd87a194f3_2226442.fix +txn/fixtures/138ace3d402261644a794a6e4927ff7489452e3d_2227702.fix +txn/fixtures/13c847dd1267f4bbbb3dfa50ecaa324044c993e6_265678.fix +txn/fixtures/142f3b2b185b954e36696311b3b84744508a80d5_2361208.fix +txn/fixtures/14aed010524bb67d8851dbd5f3b5e4bf8b43adf0_265678.fix +txn/fixtures/14c3dc2280a20662364e369b2cbe80e4efed4698_265678.fix +txn/fixtures/151a8e4af8b1a2f73b234e079ee70592539715ec_2237821.fix +txn/fixtures/15257b75d037100a5bb3e3e68dce768c0e14d502_2195530.fix +txn/fixtures/154cd5804d752795047a9c7ecc712805875b7371_2226824.fix +txn/fixtures/154dcd01c64a2dc80b93e7bc4ac2aeebbe41a49d_265678.fix +txn/fixtures/156d21abaea74471c6ad2f7e9364aad2b01595e5_265678.fix +txn/fixtures/1577251c4955a4235f38cf004d100d6a8106e17c_2134838.fix +txn/fixtures/15a32c3ed3d9f0f777330de85e340386f30ddbed_2209269.fix +txn/fixtures/15d689304d80e9a94d44b1c4e6ac4b2c564545a8_3188682.fix +txn/fixtures/15db2654e0c8e41d5b5ce5e73d194b1e118de673_2820435.fix +txn/fixtures/15e8069a1674cd149116e41f46aef8b257494b9d_2236723.fix +txn/fixtures/163b0422f022bce93d6d00af28ad41a2ce3d5529_2185564.fix +txn/fixtures/163dea63ba0fa5a4ac62f35e2ba40c65528b876b_265678.fix +txn/fixtures/1648ae1a9df6e1bb2875b4ed6f168417e2ff33d1_1842339.fix +txn/fixtures/16552d07bb3143a68a15627204e98fc2bb03b556_2222000.fix +txn/fixtures/167c61df3d5207b3ab537c784cb933a8f398d3f3_2190937.fix +txn/fixtures/16d545453f2d942e15eabefe41db4c5981390fb8_265678.fix +txn/fixtures/1701385c201677a28545120eeb9bfc8b2b2fee21_2233859.fix +txn/fixtures/17210df43d3ee9a76676a47487576211d01eddd9_3205026.fix +txn/fixtures/17930db2c66a9eef4de8709cf3bc75cb571f3249_265678.fix +txn/fixtures/17ae9efb31bb53c3df3ca0f241e0d1efc7940469_2904089.fix +txn/fixtures/17b3551a4739c3cfbbbbe28505c8f61a9aa497e5_2189878.fix +txn/fixtures/17b46d6dea160aaf06eb209456abcf7c8a5d502c_265678.fix +txn/fixtures/17c9416e5229e8c22f1b137f3c1a77d72a529748_912259.fix +txn/fixtures/17cb99713f28ee8be4164c9c3bd2c4f928fc016c_3000059.fix +txn/fixtures/17d2e5dfdaf518342bec500c61b6c1c850933f39_2220896.fix +txn/fixtures/17dd636f0f9efbec12fc1cce8d4f9468d574841e_265678.fix +txn/fixtures/17e3e7730655140470817c399a7aa6bb923962c5_1259999.fix +txn/fixtures/1815adf997a5268f9609f854877359ed22b55965_265678.fix +txn/fixtures/184d29f84290c0f6bf276d081d3ba42f7d947fc4_265678.fix +txn/fixtures/1865cc9e2a39792fa1abdaa8efb05871bb0ee246_1365254.fix +txn/fixtures/186e60050fa038a2270237504f341e251fe3fc31_2200692.fix +txn/fixtures/1893b49292547354e3c542acf8ea9820feeb059e_2201166.fix +txn/fixtures/18a104d849902c79f2dc2158ff60af4a44bf9975_1576902.fix +txn/fixtures/18a685c2419a51a85e17cffdee353a243dc726e4_2199099.fix +txn/fixtures/18b4e56da90940d580612d378203e29ab87cc63e_3090691.fix +txn/fixtures/18e7c0deb52e6454ac1eaeff9cf34dad1fc39035_2159910.fix +txn/fixtures/18ea787ba1ccc6f8f95ab449f655b6260ec4a964_2207102.fix +txn/fixtures/18ef4561f0b4246e049da5d026719c60d75213e2_2371975.fix +txn/fixtures/18f2d764aedb74e11560355aec08731c37445053_2226199.fix +txn/fixtures/191d9e2b0d5e2879df91d1416a98958477ad5604_265678.fix +txn/fixtures/1922d2a3c2a6ac261c26b4153a88b8c89c1c8d69_265678.fix +txn/fixtures/1936f2d862fee55a045607e7c388575999206a92_265678.fix +txn/fixtures/195061e21358db300927048df5bce29edf5ac300_265678.fix +txn/fixtures/197b771674426664edbab1e6520105ef4dbc0702_2223761.fix +txn/fixtures/19a3ea8c2db79b06324ab72738a98e9d7366e905_1483977.fix +txn/fixtures/19d607ecf36140c6bee8a987a843513594cb5eb1_265678.fix +txn/fixtures/19dd2b0131d7aeab1b23139caea748426549b07f_3195377.fix +txn/fixtures/19e35d93616c3d41b8b4c41c8392f003774db512_2615969.fix +txn/fixtures/1a3584a220639d46eb8b03a7069ca7d3796b8659_2372912.fix +txn/fixtures/1a3e253372da8712ea91959b84b16c9e3d217955_265678.fix +txn/fixtures/1a493a6d7152a49a60f6f65f1295c22d0509f672_2216382.fix +txn/fixtures/1a4aec43fd827c9a084dc5fe267c0b3f968a9fb8_2235143.fix +txn/fixtures/1a5880ace8e7b43167e5261e6b33de3c8cdc527e_2193936.fix +txn/fixtures/1a7175535b57944e18a251c069fa8c1b91c12d62_2236042.fix +txn/fixtures/1a729174d141352354cb70c0e74bd0521c17888e_1656878.fix +txn/fixtures/1a7a6938c60c2015fe6e867f95bf267ee7bc59cb_265678.fix +txn/fixtures/1aa79c77aa8276654efec0eb27655dec0cdc6447_265678.fix +txn/fixtures/1abd8f046a16384d980f3ed3ad1b321d648f38d0_265678.fix +txn/fixtures/1ad2b460d9c89f0f19b3afed1f01f0bc8e3a1100_2216766.fix +txn/fixtures/1ada05afe8643db30f7f6b83f1f426e0d798bb97_265678.fix +txn/fixtures/1b1c6088a52984cf848972959b26bcf0d869110d_265678.fix +txn/fixtures/1b4db677ec9bc59ad1a64152daaba4e6d336e735_2235964.fix +txn/fixtures/1b81df5ed21141c0de2af5effaaac3943077e610_2190873.fix +txn/fixtures/1b99b735aa65c4970914d63058b19d381e1788a0_2185751.fix +txn/fixtures/1b99d4587c2abf31a6c88a1719c1cd2449a7e679_2229676.fix +txn/fixtures/1bb8f3fe49dfe1a7c8fd3e7007b1267b70e5f064_265678.fix +txn/fixtures/1bdbfd7c08b7123e35c1a89586acf8acef387771_4122962.fix +txn/fixtures/1c07f721398888df9cb87360684ea901e546d7b2_265678.fix +txn/fixtures/1c7f3e9b5857885d7ab024248c10bede3ef651ea_265678.fix +txn/fixtures/1c948b7fc23384aa7d29fe04f4081e1fed1262d4_265678.fix +txn/fixtures/1cd35a1accfd19e103c79fc4e3ee3be0853caab1_265678.fix +txn/fixtures/1d42f7c16321fe5284efb0f210a61f6126aeb825_2237886.fix +txn/fixtures/1d7a0059b804b9ddd407dfe83b857f5fb44bbbe8_265678.fix +txn/fixtures/1d7b9acb62aaea9a0595891629290904d8e0bc5c_2223964.fix +txn/fixtures/1d7e8e28576ce6c665c6abc93f20219d3b448bb6_399893.fix +txn/fixtures/1da4a54df18bcd644f08c98679bd16f5c765d6ad_265678.fix +txn/fixtures/1da9dd696690f1dde3a5a3a26a6cf5a05b548db1_265678.fix +txn/fixtures/1e089a4ec65d545928840c8550b135fd1623093b_1575821.fix +txn/fixtures/1e1add8dd5b60f99017a480d9b1fe35c8051f49a_265678.fix +txn/fixtures/1e230442746eec5642e1793f541211a3dfc8e266_265678.fix +txn/fixtures/1e9c4779cfc596539c9e2c4629c7525d5cb9f631_1843000.fix +txn/fixtures/1ea2aa8df47e4158951ad1bd08433ecef6a83f71_265678.fix +txn/fixtures/1f0823795d45bf364e2dad67812a207fe95727ba_2204350.fix +txn/fixtures/1f1679a7e1c4b963c42f14e56e42e015a0cbdc59_2212991.fix +txn/fixtures/1f1b0e1d9fbd4fbb7e11b287d464e5e10764e2c2_1575394.fix +txn/fixtures/1f3cf7886b9d813f3cf469ae809eaab460ceec93_2139769.fix +txn/fixtures/1f7b9ff45e2b4f2c61fdd20cf7f7375bf29d9c46_2203553.fix +txn/fixtures/1f87f98c3005f5cd444bcacf17b44ed360b23187_3678704.fix +txn/fixtures/1f8baa7cca9a50f2a30d2a23bf19de90f4130c01_265678.fix +txn/fixtures/1fe88a97c6185afd668574ede8b54a764a86f090_265678.fix +txn/fixtures/1fff2d993f4d7677640b2b3397320496b076e854_3506222.fix +txn/fixtures/201819d6ca202d1cfc7e2debabc40ecec9c52076_3616547.fix +txn/fixtures/2031702bb0d8bab5e49672c1c44faf4257f0b097_2198424.fix +txn/fixtures/203de1e88d7078cf1cfd166f2bece53b18a23d8c_265678.fix +txn/fixtures/20527668ad208c551ac17e682b41ad67eed4d011_265678.fix +txn/fixtures/20651232f6d1373957d92f013cf1186aa65679cc_265678.fix +txn/fixtures/206891ac9be95e35959c4f835192a5267e3555b7_265678.fix +txn/fixtures/20689cdc20d7cb5d189eca27583e6005c75582be_265678.fix +txn/fixtures/2069dcffd91ec0cb029b237a4de78cc80a4b3b60_2136464.fix +txn/fixtures/209c7df958b10b061a8bfe3f6725c4b8802feb77_3200920.fix +txn/fixtures/209e4ebd1a8072b4cfd752e8297e21249a5fb85e_1848691.fix +txn/fixtures/20ae1fc39f0ee681b4b55270007e18c230ceda3e_265678.fix +txn/fixtures/20b5df52b15d5749e344004fdd81d34a99e0e1bd_2187909.fix +txn/fixtures/20b8e6fa24184078c928a4113e05dc9b05bc8728_2197418.fix +txn/fixtures/20f2b0e913522ed8eaa8afebd362146105f1dfe7_3126852.fix +txn/fixtures/20fb3a04c933b541027012827fc086338d09f8b2_2202511.fix +txn/fixtures/2116c8e15c6523a43cec19a3f831e8ab2780c51f_367099.fix +txn/fixtures/212c7f5e5a034597b53826eb3ecaee6147321136_1829622.fix +txn/fixtures/216637262d2b4c9d1e448edb2bae6f30b184b55e_2232689.fix +txn/fixtures/217e3a35b6e271260611d06bbf3d689b406bb807_2987146.fix +txn/fixtures/21a2ed7da708b4e06f302900b5f1e387797158c6_265678.fix +txn/fixtures/21af5f55611b33785842f439cb7c1d8d166ee292_2234542.fix +txn/fixtures/21c29bcc4f13997b36f001615a199812015fd076_2217761.fix +txn/fixtures/21d8bec2658f953421ef8a90c94bb147d6592b0c_1856276.fix +txn/fixtures/21df17c47c8c2a346b816d7a0d898a1a572cc11c_265678.fix +txn/fixtures/21e8010323418e036249a05fdc8495de6827a6c0_2211679.fix +txn/fixtures/21ec480f4864655312f3b116cc2ed26a868d5d26_2953099.fix +txn/fixtures/21fb4857674201e9f6c173c1f2e83556718c401e_1556049.fix +txn/fixtures/2230308262f87f9091245451f491ac8a95b03d5b_2913590.fix +txn/fixtures/223d0c5b4be30a81538cc02068ee5f1b67c02325_1832133.fix +txn/fixtures/22406045df746746b1d5324339a272f6e13700fc_2230960.fix +txn/fixtures/224656e68bd31e8c8930ab3fe94a1de07e9e562c_2207345.fix +txn/fixtures/22f9b15c62fd309f4c73e459e07ae2005617a635_1839812.fix +txn/fixtures/232ec38252ff2007b2b44fae802c819350ca1bc8_2200031.fix +txn/fixtures/235154a4e109440cda77b5ed1c0777eeb073e563_265678.fix +txn/fixtures/235799bee53ec2e109dfffb5b6edcd06e41da148_265678.fix +txn/fixtures/23848451c5a5f1808f454848eb2619d33c37774c_1575889.fix +txn/fixtures/23cfd516435ea583196bcd96367022ec175f89a4_2211270.fix +txn/fixtures/23d3e91dd526bf70228d59a2d73f2916842ed784_2191189.fix +txn/fixtures/23d5448b8e9816908691cc305bf00ea967596df5_265678.fix +txn/fixtures/2469b78fad1f79d91ee218ead539e0b5dfabda0b_2140821.fix +txn/fixtures/24950d100340296fe0700e1033deaddab2986564_265678.fix +txn/fixtures/249aa2b448a129dff81ebd4f1cd70e877d7f6d82_2138607.fix +txn/fixtures/254e70348b37b21e167e74b27ec7e45c1c16beaf_2221885.fix +txn/fixtures/2550cad596c5bd02e483fe6814c53ff78d057fbe_2208273.fix +txn/fixtures/2553f36d244f112f985e12cc97d2197ded8ffeb9_265678.fix +txn/fixtures/25d4e0f5e64abefc74c563035bbccfce9a546032_548691.fix +txn/fixtures/25fa88e2726d1d7c22f278391309b57a71a433fc_265678.fix +txn/fixtures/25fbaf1cf438b92a4c572cfedb0988ea6be695ee_1855773.fix +txn/fixtures/265d30b0bbbcf0d7f7c3f559f1a797ded0c384f6_265678.fix +txn/fixtures/26a9b7ead5f7e95e6dd72bf36b8b53918dba8fe4_2225242.fix +txn/fixtures/26c17568a6a165da891eed2a2470feb3623b5351_265678.fix +txn/fixtures/26f3cb9938aa63ff628946faba64a660fb310824_2372309.fix +txn/fixtures/274a12a356975a5d6c369e7dbe3fccecfe5aca8a_265678.fix +txn/fixtures/277725d00a11e65f85e4014470df0ff27dc64dd4_2206570.fix +txn/fixtures/27fcc59dab8d78707f2ef93470e816ddb02aa94c_265678.fix +txn/fixtures/283c6ca56b95acf39b5b1e2f84b30eef4dca21d8_1853984.fix +txn/fixtures/283fe592ad6816dca9bb15d7dd74c8b66595197c_265678.fix +txn/fixtures/28bb478d13a3a3f1966d611ab36c1a123c1045be_3193054.fix +txn/fixtures/290de9fbb0cebaf2394fc491c9b970874b833895_265678.fix +txn/fixtures/29251e7e9860162c97fe67b26627ef1c339b044b_2241221.fix +txn/fixtures/296fb6e6f2267e9f3d00b8b0ea735fce8d506eb9_265678.fix +txn/fixtures/297890d24451a4de3dc8034dcb6da9ce4bfd3a26_265678.fix +txn/fixtures/299b16650bba3469425024ac74676c9c06408aae_2193078.fix +txn/fixtures/29be17e3a201aa84bbcf279602601ab563a0b805_265678.fix +txn/fixtures/29f7d65ff0e8ea9aa97f713b5a6fb2e9585fe084_1184410.fix +txn/fixtures/2a159c214135a36023fae14efcfbecd62b230823_2631802.fix +txn/fixtures/2a2b6de65896f1fd2a93c481d68042632013f073_2136886.fix +txn/fixtures/2a50d83333f051d46bb08fd53d6d483d42f900c6_265678.fix +txn/fixtures/2a55a0cb58fce67f373877bc524021b23015a988_2595492.fix +txn/fixtures/2a5e3f5c304edd181d05e5ebfa8851bb03a69a86_265678.fix +txn/fixtures/2a7e6de264d39dde620e5b642dde4ffbbfbf0b67_265678.fix +txn/fixtures/2a8eb43cad506af249c32619aab8ea70a62ce38a_2201810.fix +txn/fixtures/2a97db6d866576da85c5060c4d5791e33fd8e269_2204742.fix +txn/fixtures/2aaf16427235cc0a1cf9c9ff7fe902fae3c10cc6_2767000.fix +txn/fixtures/2ab359f3a1b60b58a57e01e65750fad5fd50972d_265678.fix +txn/fixtures/2ab448fbadb0b964c56472758c7a46920f8591e5_3041321.fix +txn/fixtures/2b0f92f398a8e2c74bfa24456774a27c953f1aed_265678.fix +txn/fixtures/2b4bdbff82c4c4fbc26eb20da6ffe3805e90db1e_265678.fix +txn/fixtures/2b58ebb25f1493735bdc0b2b95e65d5f0ac271a5_2184474.fix +txn/fixtures/2b69a934e095482e9bdb05d67b9c0c26cc7aa7b2_265678.fix +txn/fixtures/2bde40327aee0255d3e3efb711af5d459109c45d_265678.fix +txn/fixtures/2c0a06d2fba7205c5d3da45d39fb4a5614ec90a7_265678.fix +txn/fixtures/2c5983fa94a7b8853b1301222eeb5c3bbc0a2027_265678.fix +txn/fixtures/2c6060de12fa7c26e657deb98e95949c7a0ef428_265678.fix +txn/fixtures/2c761571170092ee7a9ee351c45973bfd914227e_2227217.fix +txn/fixtures/2cea3690ca12aedb7bf33143c486a1fe9ad7fe74_265678.fix +txn/fixtures/2cfdeea1e8113fc2e9141967fea5eab91947e39a_1849498.fix +txn/fixtures/2d1d290ed0b97a4c853410f3e70607af8512c71a_1835418.fix +txn/fixtures/2d2651570373252fe36d6487f98420a98a5eb651_2235539.fix +txn/fixtures/2d35616ecd6858a98944d58c7da54a8da9daf170_265678.fix +txn/fixtures/2d40cc52c34c43e0d0892449975c182f432ff549_265678.fix +txn/fixtures/2da4abe78a4359036ce483cfffe674c90842e02f_265678.fix +txn/fixtures/2dd594dbbdb6e79776449d044f7319b76bf94044_1833391.fix +txn/fixtures/2ddafa60f7f756540bf8f20fed2fc40e20c158b0_1574599.fix +txn/fixtures/2def7ed78f00b5b8711a0d56f8deccac74d93be4_3198238.fix +txn/fixtures/2e1941ee15c7450558deb720eed53c6ed76aadf7_265678.fix +txn/fixtures/2e3931ae51ae0ea0b7a37e16a66b03a123e99864_1830012.fix +txn/fixtures/2e410a98e6f0b614dce00964a7a2e60d9f764fb9_2987497.fix +txn/fixtures/2e66d77a960a8b0a2d6c1135561e03ef0bcf1f7d_2190836.fix +txn/fixtures/2e677029a2ee4c463711fda6eabb3afb22cd2e0f_2200007.fix +txn/fixtures/2ea47961d5179078901445cee1b25c3e9647db0c_2194624.fix +txn/fixtures/2ec5483a93942e0ccf21d367995edd3dc746779b_1574922.fix +txn/fixtures/2ec878a9f3857d9e54c54bebdeec308cabbd649a_3008787.fix +txn/fixtures/2f17bfe2b3fcdbc7010267821779870dc39875a9_265678.fix +txn/fixtures/2f2cf270d2b88532f0eaf52882f57031876f4ac7_1855418.fix +txn/fixtures/2f43e10be77dc56733de77c8f47518bdaa63dbfa_265678.fix +txn/fixtures/2fb78597d5bda01bbd567b4ea90a1e1043703eaf_943214.fix +txn/fixtures/2fc52300e86a2427ee7e292a41166076fcdafc03_1853296.fix +txn/fixtures/2ff15612716e92f9095f439d89146e1ed56c280a_2214083.fix +txn/fixtures/3001af48aa4d17c20f58c4a2f5c6051bf31829b6_265678.fix +txn/fixtures/3018e2540d75bd548f502c57a15b65d150ee7d24_2192333.fix +txn/fixtures/302bb32fa25d3cd6a769bf807074ff9e51ce416f_2192679.fix +txn/fixtures/302cdc8b3ac6b980f31de14a9ff9b9cad18f936d_2134792.fix +txn/fixtures/303b94227680fe6259d6ff64ea3a164214649462_265678.fix +txn/fixtures/304ec513059b492bb4a9e1e5377d21b0f0fe46de_265678.fix +txn/fixtures/30504f26a39dda6c90020c016545c36d9155714a_2135323.fix +txn/fixtures/306012c394c4f582374f72eb1f191d06de6e4ea6_2522260.fix +txn/fixtures/308129c271ce81ab4b217bf262dd43e855b5b119_3709853.fix +txn/fixtures/30897c5ceec04f528189e1babc7029d521299974_2185955.fix +txn/fixtures/3095efec5218f66db3fd3765b672bfeec6362b2c_2546518.fix +txn/fixtures/30cead52426c44ec911772d7d1bf3ca1b9b649d6_265678.fix +txn/fixtures/30f5dc712d00f5f7d2b6c7a1247bd046d8209db9_2141002.fix +txn/fixtures/3150f4ab80c34e0d00e18822327a4b01f1abffe6_265678.fix +txn/fixtures/31783db98bbb6f63ca7c2c7e92ac3adf83e825e2_265678.fix +txn/fixtures/3179db2f391ef20df8ce9e77d8c20fd8f84de675_2225533.fix +txn/fixtures/31815593aa367f8cb17ff3f92385259c7c53fda7_265678.fix +txn/fixtures/3187669fe3406a1a9d7a7a21729fdd949740f038_3202087.fix +txn/fixtures/31b512a82ace5550adb1e94bedea9bcab0235e77_2192221.fix +txn/fixtures/31f38752899f744e81cd018eefebd0822a306705_3006635.fix +txn/fixtures/320fe7a7d1b5430768cacde65d49782bb2eac480_2184963.fix +txn/fixtures/321b15b8069c188a5b261ca86ccae588f0ae0784_2372241.fix +txn/fixtures/322a340a42042ec90ee5d114061d1899e3e91d89_2190414.fix +txn/fixtures/324154e969e4a719afe7b079a559f0e59ab3f748_2510065.fix +txn/fixtures/3250c6e2d9fa6b121a61d2cb36e765e448224a68_2137610.fix +txn/fixtures/326f6aa740e4e6060cc4fc272f8d1e5173a0347a_2484212.fix +txn/fixtures/3284eb01007f31ceceb7265cabd1f9969d1f8341_2185286.fix +txn/fixtures/328c44ebb504a174d1a2721b1412a66f9ebbaca1_265678.fix +txn/fixtures/32ceb6737de9a3108558bc59bd1d2299402e1759_2187779.fix +txn/fixtures/32ceffb3da50bb1ad78f6602c83a576bd9679dba_265678.fix +txn/fixtures/32f308f74641d2b3150a7797b1bc677c71e4e905_2136769.fix +txn/fixtures/332431313413792dba8a08910511202958687452_2206775.fix +txn/fixtures/33450940f1b9f02b1f3a6b4b8e6848e0400f7d83_2195351.fix +txn/fixtures/33597d7ac0d74e5c347e153ca4cdc05948db6fd6_1851758.fix +txn/fixtures/33681594390f2733eba2cae9f47bf12c85629f7b_265678.fix +txn/fixtures/336d88c28a052cc92cd11d457ceb1cfb78f2102e_265678.fix +txn/fixtures/338a0b377eb143b9d2520fd81d6b8658ea71d32a_1183730.fix +txn/fixtures/33998246ed4afebbf42883c4f56d44a1582cc9e0_3205875.fix +txn/fixtures/33ae07da0b440e0ffab1bb299bb4b31c99ccccb6_265678.fix +txn/fixtures/33c664f3c95a2d1a3fff572ada952d3b67dbe2c4_265678.fix +txn/fixtures/33ed84692327a38a96bc7262e86b105fb2a428a1_2371703.fix +txn/fixtures/33f3ddcff4a70909ce7ee4bcdf4c8feaef4788f7_1571035.fix +txn/fixtures/3429d048f753fd631720be0efaff350a3a354658_2237361.fix +txn/fixtures/343c0659171a5f46389127201aa1e7d31654b4e9_1576814.fix +txn/fixtures/34881a5207d4e4ffac34dc1b73c14fa1689f10b5_265678.fix +txn/fixtures/34eb326b60ef98d99554dc2ab2d22dac33ad9d1e_1855129.fix +txn/fixtures/34fdaaad7f607e97aae1b4d80b482837b989d3ba_2235712.fix +txn/fixtures/34fdbff5dedcf4cfdb62aacbd15f47033000a275_265678.fix +txn/fixtures/3592e3e03c1cafc585d57dc78a42b0ecc7850636_4030035.fix +txn/fixtures/35c0fb77c9c150d54e64098a042d0f70a8a6b8c5_3191751.fix +txn/fixtures/35dea0b4bb2adf01c4e0affd32f5e1e373d35ab9_3195850.fix +txn/fixtures/35ea993304ace9d47f2daba079e57e7b3de863c0_1854274.fix +txn/fixtures/35f1d0cfa8af34e53710576285ccae991faad5c7_2201413.fix +txn/fixtures/3621c8dd69620df04886f1ac6bd7683dacee6111_3194554.fix +txn/fixtures/364dcd67175104359ed74f76174276f28f1cc5ad_265678.fix +txn/fixtures/3670a6ad4880986b39995e9c684c660dfe2d51c4_265678.fix +txn/fixtures/36aa28c6b903b6742e06edeef2765e81af2cd69b_265678.fix +txn/fixtures/36b9be81f8cb8331a30a7a7a7bba104191619bef_2218428.fix +txn/fixtures/36ba35626924b4349deb3b70a2404ec01c1ab5e4_265678.fix +txn/fixtures/36df9b2a51e09f1bef2d9aebdf62d544dce16dce_2208341.fix +txn/fixtures/371401fd3aa174f16539ece267915a70ec020eb6_2230897.fix +txn/fixtures/373f066bf0f80a09e099c78677fa2cc3564427f6_265678.fix +txn/fixtures/3799b046a3717e43b056b8724374c468336b9d17_3177139.fix +txn/fixtures/37baefd370d9e56c7c6d0eba33c2a4b956a62ef8_265678.fix +txn/fixtures/37fdd2f9cdc78b95c5a311a5b0863e399cbf9121_2205715.fix +txn/fixtures/38196021446ff19b1ee517d58692bb2972ef6f8f_265678.fix +txn/fixtures/3826252548de108108bd42b26360acb0728f682d_2220211.fix +txn/fixtures/3846dcbc6a789b614c1cb083bdc736f33065fc89_265678.fix +txn/fixtures/3869d9cf3d9e036ff720833f77944aa0bb8ddc45_2229490.fix +txn/fixtures/3873b410f3a8c8877e3e0d27fc4cbfc4e2a1ab88_265678.fix +txn/fixtures/388aa7d3f0fd8347cf8cbde62695297ae8da43bb_265678.fix +txn/fixtures/389437cd6827ae29add11712287c2d00dbd9ac28_2188538.fix +txn/fixtures/38a2476b994540dc578bee2d0255dd504665d82c_2219354.fix +txn/fixtures/38aa5aa65284a359c7f2ff4448b28dd28036375c_3206360.fix +txn/fixtures/38da34dc65457ecc1d92f520f12dfca1674cf4fc_2208056.fix +txn/fixtures/38e5b3b4f98ebe5b98f26af1d52c4ea39c5757bb_265678.fix +txn/fixtures/39376265439c3d3765a1a9b94d1beb3e643b6653_1769070.fix +txn/fixtures/39496b9b2c42cec6bcfb0c12cba7a19392bd2d74_265678.fix +txn/fixtures/399a3d6633306162cc72f3250b61271cfd988a46_2997779.fix +txn/fixtures/39b6d60bac630daf320a0801d99f8977a6688506_265678.fix +txn/fixtures/39b8f771be5c314fa218177d6d0ceafe5c71667d_3203571.fix +txn/fixtures/39e59c61680aa8240801118944e5675a41dd0b03_2212786.fix +txn/fixtures/3a20d9da42af81d99c0cd54166533bfe2b1bc286_3197983.fix +txn/fixtures/3a24b880aba0ab0a6ad4ed038a61b60ce666284f_2197171.fix +txn/fixtures/3a6784a6102836d888a746873eff941e500a9463_265678.fix +txn/fixtures/3ab047ee4a8949ef698a0909a79b107ab0dc2134_3195190.fix +txn/fixtures/3acb6c3f7c5c673c09f05f91a4b16f347218bc94_3204389.fix +txn/fixtures/3afc6524e087624a037312653f62038008cf4fee_265678.fix +txn/fixtures/3b455080427d53482ab3ef853b74a0f59e166c39_3226304.fix +txn/fixtures/3b45ebbb089bb436aafb68056077413f7da53a2c_2336991.fix +txn/fixtures/3b50f8af523e5536c992b7661228490868d08949_1844069.fix +txn/fixtures/3b5a218b7786accd9bbc5fbd1b162feb6966a787_2220607.fix +txn/fixtures/3b6d03c12d620a69d7ac3e69dbecf486f5fcb2b4_2855179.fix +txn/fixtures/3b8368829ea996a94c757d81615d67f49fdc1840_265678.fix +txn/fixtures/3bd6cc493f2771167d344bbce1e94c259dd58211_265678.fix +txn/fixtures/3c34daebf62ef03c2b079fc42f231637a54f34ac_265678.fix +txn/fixtures/3c4c93735bcb62ca3393f10e3e75a04178423539_2234928.fix +txn/fixtures/3c7443062cd3f1c7f3d25ba6ce499f3fb0134cb4_1853193.fix +txn/fixtures/3c805a50dafd33f77fa3363821b8f8acddb4b34f_2184861.fix +txn/fixtures/3c8d009dffbd36e350abf8faff4da8d1dec717ed_265678.fix +txn/fixtures/3cb629bfeeac65b95bd2be8a7306c41cc357ddb9_1829905.fix +txn/fixtures/3cb6e4e2fe1c8ea438a4d98be16de03cd8e5131f_1850057.fix +txn/fixtures/3cdce4fb925ae533b586ff2858c1057b33da83a1_265678.fix +txn/fixtures/3d03d328d824ff004c4dc731130fbb087aba3554_265678.fix +txn/fixtures/3d314a5eb68df71161a11ce929d0510edbc7d2cf_2238052.fix +txn/fixtures/3dc136542017af64701bc8977305e2d1f0aa9946_265678.fix +txn/fixtures/3dff5e145729afd0e7e285cc1b78db5eda8416ed_1855597.fix +txn/fixtures/3e1ca78cc9b53d6f7bb889f9d117d89a593add1c_2916054.fix +txn/fixtures/3e29ea4c61bb2fc4cd581d9b597d43068dd860a9_265678.fix +txn/fixtures/3e3487d323fb22fbdf188d7fc85ce34ca9ff9532_2137814.fix +txn/fixtures/3e4d4233be7f7a211dfc4bb032abeecb36029dd3_1249939.fix +txn/fixtures/3ef4904fe37781777b452f9674ffdaffa83de3ba_2230575.fix +txn/fixtures/3efd7cc4619f8139dc5de55a04c7df1edebe58db_265678.fix +txn/fixtures/3f009af6d88f2e3a4cbef632e91c1e497e29e916_2229612.fix +txn/fixtures/3f4bddbd89b842e7a4b47be0b4b0e03bc4a58ab8_2200917.fix +txn/fixtures/3f62c509ae465941204be6842ed0be79f9d34d80_3566323.fix +txn/fixtures/3f6cd15207e3bb62ff4029684216ba0ceba1f12a_265678.fix +txn/fixtures/3f7ffebb145c68a5f69e68463a23e32cfb7157e4_1844308.fix +txn/fixtures/3f8adab2d56cccaa7c9aafbbd8fdb1436948d2b1_265678.fix +txn/fixtures/3f98e7189e4024d816dd418dc4e277c8a824f3ea_265678.fix +txn/fixtures/3fa08e1b2100026d0ff6155dd3daea67471c67da_274087.fix +txn/fixtures/3fa64e65df285be9e4e808c31ccdfdd9b574dc1b_265678.fix +txn/fixtures/400b79580621dec57e118e13e3a48f1d1ecde1f2_265678.fix +txn/fixtures/40127d1a1e6b28c59e2e7160f91e5cf984414c47_2221486.fix +txn/fixtures/402551d5cb22462d5b713b3b47a217f73bc3d889_265678.fix +txn/fixtures/404ff5c0b99cd641888102ab07e5eff031b75db2_2223825.fix +txn/fixtures/40a14d2d4cfc224d45e43ba76c98124266b801d7_2224846.fix +txn/fixtures/40e0ba6e84f5c6349cb021fa9fdd39cd5bd2e182_866028.fix +txn/fixtures/40f7d5a69ab8b576154111d01a1981bce463e2bb_3139420.fix +txn/fixtures/413db6b2896e7e2f8209fcce1aeb74a844a70ee4_2186458.fix +txn/fixtures/4150dfca299108a397f2ce6750079061e4392e64_580274.fix +txn/fixtures/416534effb06d2a9604e5ba4e19d738efffd9df3_2227354.fix +txn/fixtures/417d38c121d240d5a976efc917d8340c04aebc79_2185194.fix +txn/fixtures/41a5918a25d36e4aa01c6489feb10125ff0efbc1_265678.fix +txn/fixtures/41aed998000be7b3397df7e1acfbfb20b8dd80f3_1576087.fix +txn/fixtures/423c6adfe6a1aff4a554309e75c7cdd8cf2ece76_1839002.fix +txn/fixtures/4268690a5debbd29da2990bdb58b3766780576c7_265678.fix +txn/fixtures/42708ce5c717e06c6a63db9f2358e5b8fc5a50d9_265678.fix +txn/fixtures/4276f19f698509e23d0e80cbab0accefe7f87dc8_265678.fix +txn/fixtures/428b7d7ea6cf2d41bc15ede9cf13063df4fcb6a4_2993455.fix +txn/fixtures/42b82870dcf827b83cebb6a73933c19f0f63264f_1405489.fix +txn/fixtures/42be4b811028397fe74e6a2c1b09006b9dbf0131_1575440.fix +txn/fixtures/42c15654599c9346df72644882eb98cc8abe6957_2195415.fix +txn/fixtures/42ede6df5006d6981d147bf098f63d2d6b1b9a09_265678.fix +txn/fixtures/42f0b864e44dc071fe3898d7708839d0b94d5808_2236177.fix +txn/fixtures/42fecd9a4ac572679c1e2565c4084d2a238b77ed_2616065.fix +txn/fixtures/430c9cbdf850779d725e4b38340ce83f1bf59434_1313564.fix +txn/fixtures/43142ed9c2d5c64bafb619e8c18c625649cdaf4d_2194238.fix +txn/fixtures/43195978584820741fdf2612aa0447e35d43fde1_265678.fix +txn/fixtures/43362a21d1e80e0e2ef6529905a869d76e6513ef_1110903.fix +txn/fixtures/4346d7e6f55b29904046e0674a038fa0c6c1efc4_265678.fix +txn/fixtures/4360e195b4b6284684ebf404952fa29eaf345059_265678.fix +txn/fixtures/437027a0a9527a0708ab6e5c7e38eab18b6aeed2_1841548.fix +txn/fixtures/4373738bf97fc0f9fdc340b0868e6bc1db15c31a_265678.fix +txn/fixtures/43cc0f992c7e582bd3b26f5af1d533d16409c6f6_2207832.fix +txn/fixtures/442061b5ce1c8ca623d2d69f7aaf9548d6bdbbb4_2216203.fix +txn/fixtures/44327da25fbd6489fbf652750ebdb81dca6a0f85_265678.fix +txn/fixtures/4434bab1dd322682afd18b96c06554aca3ce0d8d_3001829.fix +txn/fixtures/4437cf6f8b42a9eb1c8fe21004c50d950dee6123_265678.fix +txn/fixtures/4441f0a5f48351847b1c77d9caf6406fe4834e5c_2232445.fix +txn/fixtures/44b6d4ad676c785f99cccfeffca43f73f8834c84_2213508.fix +txn/fixtures/44c8cf73d1533751565f813a8612c40530df7942_2204462.fix +txn/fixtures/453076a5046b05eafa0e1cefd3ff4f85fb50ff9c_265678.fix +txn/fixtures/4553200ffb2641a9b34e87f86ec88560a13a94b5_2994600.fix +txn/fixtures/455f74ca25b2fdd9fde7aa407a538e4340cdffb9_265678.fix +txn/fixtures/45b7cb9916efaaeb3841ca263a5e4b8b21669a23_3005855.fix +txn/fixtures/45d60ab55491471c49bca58501a6b87426722e0f_1853121.fix +txn/fixtures/45dd4971a31ae58798211458d14551780be22c7a_1633256.fix +txn/fixtures/45efcdb697feec8c5647bb55ba0212e0ca853359_1830497.fix +txn/fixtures/45fe397bde8d8c0fd354422e73307a472f07dee6_1844816.fix +txn/fixtures/4604704f1c55157bfb4cd54e794788d21f0308ac_265678.fix +txn/fixtures/465b02925e5437abfd1f87673a5180dc4a59df8c_265678.fix +txn/fixtures/466ad4fec016b536b24d7976a8aea19fa4c5c0fe_1832985.fix +txn/fixtures/46891d49da17ae9b0023b14b6bfb49e783981a3d_3197159.fix +txn/fixtures/4697e8ddb28a2b11bb77949b23cf4ae048ff4504_265678.fix +txn/fixtures/46b42a7834871ca06c5abb8683c5be38e205e512_265678.fix +txn/fixtures/46f656aef6e1ed3cb3f79a2d7f2c824a4a5c444a_265678.fix +txn/fixtures/475331fce353436eb8fd7e84f7fab2c3f0883c33_265678.fix +txn/fixtures/47af1450dd8042511ba47cca635d2577743e06fd_265678.fix +txn/fixtures/47b336222ea5e63641ffed94b4bb25550794dd66_2193125.fix +txn/fixtures/47efbf4c35d180e5b5e9bdade362fdf8d5561798_265678.fix +txn/fixtures/4801f07944f83b6214c0e8ae8beb2966be269744_2208135.fix +txn/fixtures/48121f709d9bbfdcf88d2f4954e2ed8ac5bdb8b2_1836770.fix +txn/fixtures/48a36bf607542480ff325b5bef985a7a3f188550_1851579.fix +txn/fixtures/48c6f8198f8080f3897e62871b4de16d00f9b352_265678.fix +txn/fixtures/490daa3a70166b41b73dd2823be0ee1812bead7d_265678.fix +txn/fixtures/4935400af65c6050004e3e4f757141928ca0b264_1831849.fix +txn/fixtures/4950175f35249a55840c8b83e71c4c6deba13dad_265678.fix +txn/fixtures/499ab0d1e2db151daf5c4ed9182832fe3c2dad2f_2236217.fix +txn/fixtures/49a6c58383f9a9dc67be4993c2a0bbd41635ae14_1838771.fix +txn/fixtures/49d5e47d40491dff3e872db1d1fa080eba97c66c_2228493.fix +txn/fixtures/49ea7ba14f1e59a2af50c0addd73b7c0e223ff28_265678.fix +txn/fixtures/4a0b765e083f8341ca122190904eddbb3a3b8108_265678.fix +txn/fixtures/4a33fbfc693e9f64329b64def0e9f59a6c26dd7d_2186534.fix +txn/fixtures/4a6d71c1702e75a843460c1a24fe65d75f3ee97b_1060807.fix +txn/fixtures/4a997bb833006d2522187884a0528e4da8d33ed4_3064697.fix +txn/fixtures/4ab2840c81a2bad348c7c5ecbb632148264f8950_3078035.fix +txn/fixtures/4b36f5f69e22e21cb5ca8d0c1adfc1b2ea83b0ea_265678.fix +txn/fixtures/4b509df7995447c534c79ddf43c4bd02ff037b87_2235403.fix +txn/fixtures/4b805969bd1ccae2a5c6a53acc973fa08e1cc77d_2231188.fix +txn/fixtures/4c22e7041620180a4ba222efcf69f7d383dda955_1847179.fix +txn/fixtures/4c550c66be5ede646574678fac7fb84852d1273b_265678.fix +txn/fixtures/4c72f411b6b9a81b55c0dcb38ae2f5a7d3f9f897_1834934.fix +txn/fixtures/4c779bb7a33c52b61adb78689d813376e2752705_1841959.fix +txn/fixtures/4c7ab39f8a0a3c3caed68281226c59deb5e4112b_2212007.fix +txn/fixtures/4ca5c7e96b154b10192456882231d0033e99f401_2232294.fix +txn/fixtures/4cbbe2f3f047d244ea3642df5ea3b2a3072b6094_265678.fix +txn/fixtures/4cc95b1b24d7f882b3f6617c0ceb023eb9fe853e_1831091.fix +txn/fixtures/4cd57fb435285576274d04a5ffc5dae126f10f2a_265678.fix +txn/fixtures/4ce5d49479cc9bb4d3a5d9d70684311a0fd7a6d8_495115.fix +txn/fixtures/4d2e31198a0100720b4cd0d0588683c28851b29d_265678.fix +txn/fixtures/4d2ec6538922a16b046a0f0e3a82163a1c2fb69c_2227044.fix +txn/fixtures/4d5277b1f036109f3d2beddc27b9fe099e217e23_2138723.fix +txn/fixtures/4d588f549cd3f9ff4ccbccd637cd8b58c28c4d7e_3006480.fix +txn/fixtures/4d648b49922688298a565c85f818ea489e5f6e04_265678.fix +txn/fixtures/4d764129b759de70c8974adeef3a05f2182fdefe_265678.fix +txn/fixtures/4d7f3c1a25f6b4f1b02419873936b18cb938847f_1840006.fix +txn/fixtures/4d9210dc8d65f9f73df787ff2417225c5d80761d_3205521.fix +txn/fixtures/4da3f4b92e579d72d44268737258890494146f31_2237695.fix +txn/fixtures/4db108729956cf810ac59da17eb371e9014f7c7c_265678.fix +txn/fixtures/4dd45677623d7ee65e7cd5e76ea958dc8e45594a_2237756.fix +txn/fixtures/4e66fec7a10df2383ec95b31bc88a353fcb3c8f6_2216701.fix +txn/fixtures/4ea3a7385cba03ae2abeeaea48c52bd1ad8eff93_265678.fix +txn/fixtures/4ecc394bb0a5e009a02675e2c24e1a682e726861_2212326.fix +txn/fixtures/4ed93a7490ae68788637294c044a852abe07e977_2198244.fix +txn/fixtures/4f391d783f130b20ff187e266caeea545b3bee1e_2817460.fix +txn/fixtures/4f68ce636348400195b19af2766dc1c644d651a7_1845704.fix +txn/fixtures/4f6d266242acdc4e900675c8960dd1f3e5b13e99_2200364.fix +txn/fixtures/4f90cc025e3d14f9757382fc753235cf96bdea8a_3551734.fix +txn/fixtures/4fd927ee5d17f72850f5ea2f50030ae65a37a0f0_2212240.fix +txn/fixtures/4fea3ee7838ae7c23f534b89225f581346557cdc_265678.fix +txn/fixtures/4ff8119ccc38071e662bb58aadc33b1c066e79bc_265678.fix +txn/fixtures/50038bae4df9e2ebd2db9a873c60238f950a65cd_2236263.fix +txn/fixtures/500ad5c3585978843a2db127c19d5ddaf2f23970_265678.fix +txn/fixtures/50401b4fd6208c97afdd1970fcc98f1cbbe77db2_1851078.fix +txn/fixtures/5055f04636f721db8c61add5313b0a48bdc3ef48_265678.fix +txn/fixtures/50599aced3dd8166f7b7f714cec64b7f050fa925_2207672.fix +txn/fixtures/507dca6b9a80e44fb313aadf49598bdef272b10c_265678.fix +txn/fixtures/5099c68f47959016785557d97d4536ea77759b4e_265678.fix +txn/fixtures/50c1b160a747b99f460c12820efff3fe0a226ac3_2251324.fix +txn/fixtures/50fd3f49db3184bbcc389764272a4b686fc21a43_265678.fix +txn/fixtures/5103b2cca444d542d930b64acaaf3a605f64ab73_2213737.fix +txn/fixtures/511062db7a0a05f8386ebc8c47b76de21f4c9404_265678.fix +txn/fixtures/5111a5a368d4c38dfc831685a5da77bce62ce672_2191604.fix +txn/fixtures/514aad735e6760fb52e4c670924ad420426725f6_1833306.fix +txn/fixtures/5156f43204c0bd5aa8309e6c2e57da5f773976a9_2189777.fix +txn/fixtures/516e724d030a5e1d0a6c0eec8877538a70c64344_1836690.fix +txn/fixtures/516f366b7c07d3f9faf08dbe7114365406706d0b_1848140.fix +txn/fixtures/51a7947fc8472880c15ebafc8dd5b1e41764bbdb_2197515.fix +txn/fixtures/51b36e0b8a9b6914435b0811c4681cfe63799eda_265678.fix +txn/fixtures/51e7042b52b99873c4c285e7a94fbc42ba9f2228_265678.fix +txn/fixtures/5208c52a860699df8e144fe756fcdd5c4ffffa59_2207765.fix +txn/fixtures/523572dcb8122d7da4108e81964b9b21f1891ecc_265678.fix +txn/fixtures/52bec0babefbe755b5e0d038c1dd18ee473a014e_265678.fix +txn/fixtures/52daa29da542c1fab4a078d4ec208cb352b7c237_3722020.fix +txn/fixtures/52fbee3f03285c2ab59031335e509e738f7a329f_265678.fix +txn/fixtures/5306b5952ef18f20661cb742eca45c9213f874ea_265678.fix +txn/fixtures/533e592bdd1318db00c76dec882eb2cce2ef4c3f_2132746.fix +txn/fixtures/533e7d0c543b141f09d1d152fbf7aeca57f6b191_2208601.fix +txn/fixtures/534803e8258095dcc5952ab1329d1119b816ed4b_156594.fix +txn/fixtures/5364129bec81fc37293ef79654bd7e45972eb02e_2189264.fix +txn/fixtures/53731c52b9f03feaa26b9c7b9b433c137ae93257_265678.fix +txn/fixtures/539ba15c1468aaf8fb7d30500b6ec9098e202aa3_2197106.fix +txn/fixtures/53b0ee32fd0983cb4c1910853c9c93a837a74f65_265678.fix +txn/fixtures/53b34e0b64c0648c62990cace37287fdd07d9720_2209379.fix +txn/fixtures/53de692adf0032e2bdd37759a9b747d854584585_265678.fix +txn/fixtures/542e30d2e06079f3ddcb767c58ac5463618bcd07_2619392.fix +txn/fixtures/5431aacb3a68ed751383ded8bca654e234c46fd8_265678.fix +txn/fixtures/54490a12a640642183075e2f882fd2af34f61b7d_265678.fix +txn/fixtures/54638b9a086501f243a24590ad7a5293baf45911_265678.fix +txn/fixtures/54aa3bdb988135c983ccd502aafa6f90b8d9c88a_265678.fix +txn/fixtures/54c4fe70885250bac93e1caedacf9a231fbf9691_2208914.fix +txn/fixtures/54cee0be565c7f54dc08070396db4a045034039a_265678.fix +txn/fixtures/54fb7347e868c5197ca3924cecdfd05c5560c324_2219328.fix +txn/fixtures/551890c773fdb824fb366c11bae73558653be8b8_265678.fix +txn/fixtures/552300e2d1a54a1c4256dee4fc2a0e9124ba2056_265678.fix +txn/fixtures/55b9b95d1d6ce9783d3ed11f9f53695363a9c701_1655830.fix +txn/fixtures/55e1ffbfa56c2e5592e5d51d22bf1f597653f46f_265678.fix +txn/fixtures/55e2e9579be0695edb66085db963ddab5a4fbd22_265678.fix +txn/fixtures/55e8b5cda33cfe673e05331d2c9e0fe7eaad6e21_2196906.fix +txn/fixtures/561091b60898025e4181649ceeedc48f06ad4e4a_3199967.fix +txn/fixtures/562c9c641cecb77e63050786fa00bc271ab3347c_1854575.fix +txn/fixtures/5648c48ee232fc71f1243a5f6f31f7fee37b663e_265678.fix +txn/fixtures/56667bafa924c745340c8683901c51fb2b7405c8_2644051.fix +txn/fixtures/567ba583fc21ce29d9e4e7600436634a8bf7e930_1575059.fix +txn/fixtures/56ef98f9db7768e4c97c02a64acd1013c382aab9_265678.fix +txn/fixtures/57db7e7d4d678de6d39a672858f2725b51a3f5f0_265678.fix +txn/fixtures/57ffa49dbb36fb0728d55b41a149cbefb88be86f_1575372.fix +txn/fixtures/5803e02af71c317adedab648c9a4bb8a0785d295_265678.fix +txn/fixtures/5805e4b751787d11fa7822362c86b55f77f27a80_265678.fix +txn/fixtures/580ed5edea5c03ad04a670e379183f0edb27f3ce_3766585.fix +txn/fixtures/5835cf7e40f049b34dfb9a784a96e14d32dace47_2234501.fix +txn/fixtures/5860814fd78d163752287c5859de3e61dc929985_265678.fix +txn/fixtures/58720535b51e362f8fab16ec8ccf337a7f48d474_1849395.fix +txn/fixtures/587fd805a86ba691f438439d0e93ca54281711ce_265678.fix +txn/fixtures/58be585e74bb695eeb6b65c28427abc1eebf9c52_265678.fix +txn/fixtures/58ca86e55ebceb797f577e13b8f81fe18c8ac8a9_2186964.fix +txn/fixtures/58cc78a7f113e309bea5eb793a3a6f3ed31ab77f_2234742.fix +txn/fixtures/58ced90974b05975699137158762ddd6527f82e2_265678.fix +txn/fixtures/593c82b0486e96ee86fe9500adebcf2b8a2e3924_2198193.fix +txn/fixtures/59432e24d5d0e935622b9a4d1d97fbe759022e04_1843878.fix +txn/fixtures/5950095cba899711f09ce451310874bf0cf2ff5a_265678.fix +txn/fixtures/5981638b02866b00afe1b0840d4938dbc0c5160f_1852713.fix +txn/fixtures/599a6c191b661a0f4f0151ec159429ce79aa591f_3191172.fix +txn/fixtures/59ab9eca223cfc50003b37bd6300f7522ddeb41d_265678.fix +txn/fixtures/59e1a2e2321e806b6ff23ccae3385212455962d0_265678.fix +txn/fixtures/5a1fae27c584db49e19fa039ce38dc5a1342278a_265678.fix +txn/fixtures/5a3ff7d764b9e2c70295ddecc128580f93425259_265678.fix +txn/fixtures/5a4a074ec3c227bb2ade20cb91ac333371f67ad2_1835104.fix +txn/fixtures/5a7fd12ae0f9b3401ad8ec5b724e73afc10fbb72_265678.fix +txn/fixtures/5ae3752826b74ef8f405351f6c43d35002b1c4c0_3201400.fix +txn/fixtures/5ae8cd867b590f400afcfd699cd2205c7fa64750_3201097.fix +txn/fixtures/5b0ce7574dbebd6fb7ff288420817a6591243ff0_265678.fix +txn/fixtures/5b1b167ce0241216dd145c8c4f0fd0870ca0fa89_265678.fix +txn/fixtures/5b2461a4c21911d572f40f6b48ac105f30040580_265678.fix +txn/fixtures/5b50ebcbf85c0e217c1ef0dcee1828042a9c4692_1445835.fix +txn/fixtures/5b702e568333b009e098821d81926b04e4bb0e75_2191717.fix +txn/fixtures/5b717c163a48aa70c9b27a9759e2e52cfc6c0fdd_1853683.fix +txn/fixtures/5b7272046e4596e240a8186db3cdfc55e9a4e578_2215367.fix +txn/fixtures/5b9241314da6c558c89ee6f9efd4b0b50accb19f_2207053.fix +txn/fixtures/5bd65e05c8214ba993fe20c2edc61d4a7e9fc8ce_1832600.fix +txn/fixtures/5be616ce7f5342e3c2f069a60c4517985b665201_265678.fix +txn/fixtures/5c60f22fe1e4fa45993a91db220609cb09b561d5_265678.fix +txn/fixtures/5c6299dbedf5f7a3081013a132a78726c7e3bfc2_265678.fix +txn/fixtures/5c85803dce1d0099ce404b12b3f8f7ee45ccbf7e_1853016.fix +txn/fixtures/5cb0be61fe78d2dd3b4a11a1cd06fa878fc680eb_265678.fix +txn/fixtures/5d37a00d2f2805ea23f3680276c37cccb719044f_265678.fix +txn/fixtures/5d5628e1d114f33b80f57ed9a10a1afffe7003c9_2200628.fix +txn/fixtures/5d5c1d0dff3fc4b0093227c0be22a1fda51e239a_265678.fix +txn/fixtures/5d6983e20de92f9ca24d76ba90462a2fd5844160_2189202.fix +txn/fixtures/5d8d9eca155047c793094c70a90db9284239f18f_2141239.fix +txn/fixtures/5db9655dd71ef3d66fa3361dc6bea89b984f1224_265678.fix +txn/fixtures/5dd3324fbae61583db90c97c47dc5557985805e6_1833675.fix +txn/fixtures/5ddab29bd8ca920d39400eb81450f6e75f19c321_265678.fix +txn/fixtures/5e04bf69008a6b5da12a61756b3930cf27e6cbf8_265678.fix +txn/fixtures/5e0a5f5573e108afc7d427dc5bf04f397461a297_3102855.fix +txn/fixtures/5e0ae2999c7f6b6771e1afdd74dac699d29ac837_1657889.fix +txn/fixtures/5e171484269ba4f77a6786b31c07bb737ee235a1_2230687.fix +txn/fixtures/5e7f79dfc7aa8e8e2428850e97b81a6aedf9f051_1829329.fix +txn/fixtures/5e84c6798ac0d2f96a5b2d65f23d836e82f7478b_265678.fix +txn/fixtures/5e8fc5ee874ee1b69d6f8b8f578ba7fa3fb4d64a_2232564.fix +txn/fixtures/5eda426d0395c4a87e148ac777255bb69d2caeed_2195109.fix +txn/fixtures/5ee785582913d95ec68c3b0b03080ae144592061_265678.fix +txn/fixtures/5ef07c01eeceec1a3af7e99d481c541a69e2b35e_1831372.fix +txn/fixtures/5f162034b1c843232ffcc8495834b3e633633017_2193395.fix +txn/fixtures/5f24fb2a982fa45fe2f5a459b18c21396aa4967a_265678.fix +txn/fixtures/5f28e97935b867b16e223b9fc9263dd86a51ad5c_3197663.fix +txn/fixtures/5f3972a2ac11a0ec90f01d4bc0e2a5af4ead6b60_1830181.fix +txn/fixtures/5f57fd849e41bf5413244fd9e3a7796e1664a029_265678.fix +txn/fixtures/5f839c8e553967f420160e3a986c96ac9a779fae_1576585.fix +txn/fixtures/5f87ec8b7760f0413cc2ebe37deccdafc286c564_265678.fix +txn/fixtures/5f954fee3ca4a22bd0806dc946fae3ec854da7bc_2226647.fix +txn/fixtures/5fcc68878a3b844fdbf61ac49357725e3c75f433_2218658.fix +txn/fixtures/5fed3bdb186372441323a75725569b8223fd11bd_2188025.fix +txn/fixtures/5ff42d94c6f3487364249ebd20f036c3fdb4141d_2210126.fix +txn/fixtures/5ff61c5b03817efbf9664d28623a70498658515f_2233461.fix +txn/fixtures/6016f2e678673a69a5f2f5320a18141242416357_265678.fix +txn/fixtures/605d2e073f24cf883ceae08483916014f5c12c84_2229767.fix +txn/fixtures/607c9f48220271b9312b90d192b0d5d83ee1a91a_3001609.fix +txn/fixtures/60c5bb96478e05fd84a642290ecad61e2f2b7fce_2194449.fix +txn/fixtures/60cb454e218229567681d1afe76af28b5626dd89_265678.fix +txn/fixtures/60e3fc0fc7d90670fe4e97835c04469357f56fb8_2186348.fix +txn/fixtures/612869df4d55878013135f028a02a6c5d85a74c9_265678.fix +txn/fixtures/61308114e7370765a28bf524e5a1ed0d6cefd5ac_2754507.fix +txn/fixtures/613a5d8fa8bde73d78e9ae5484f0b44f1f1483db_265678.fix +txn/fixtures/61488edce7af6170aa82575e278f07716cb302f6_2185684.fix +txn/fixtures/616ac01ed4cc6e4d51d59da3a7e44422ef990519_1838107.fix +txn/fixtures/6179dcaa9b3dfbc6d1d2b4987ee9fd45dfa3fa15_1832813.fix +txn/fixtures/619778eaec2b9a94c1286b5380c2fa94454797d4_2225307.fix +txn/fixtures/61a911664f74f6b3695f8b19d1839707e29508b2_1849950.fix +txn/fixtures/61ac8a5352908053208a3aecb9852a2ecfda0ce5_265678.fix +txn/fixtures/61c1896dcdb59010c7890c5a8eca56495950c95a_1849570.fix +txn/fixtures/62009d136dbf5c24ae20a88ebe4238abf915ef2e_1575508.fix +txn/fixtures/620522ab01906554283e12e36d8117dae515f418_3358297.fix +txn/fixtures/621a213a06588997fd9af112ea62dda1e5e63166_2137348.fix +txn/fixtures/621d91964e32435c23bac922c1ef7a4f758d45da_265678.fix +txn/fixtures/6268ee52e68a9630dead3356aeaef9e5a073297f_2198125.fix +txn/fixtures/62fadceb8f2e780853419537d9057453083e708f_1830990.fix +txn/fixtures/6303ad11229d9e5c99a3cc9bd75c2dd29ef644ec_265678.fix +txn/fixtures/632d76c5f28d104336064a63a49a3af3a5905332_2140624.fix +txn/fixtures/633eb51683bf44b409d5120412f037c4281e8e63_2208663.fix +txn/fixtures/63ee8c7982ec5dc740201afe7cc7f6d856499ba7_2214405.fix +txn/fixtures/643d170e0a7691fbd85066d7fa0b54e91e1ffbfb_2227923.fix +txn/fixtures/64645f991e08d2c857220681d6dbbf2be9b83256_2201204.fix +txn/fixtures/64897ff2bf7aefbf460be912fc59e637ffed9565_1213123.fix +txn/fixtures/653ae1539361dd9ba5bfe51c0b22b53456882981_265678.fix +txn/fixtures/6554852d66123562cf242240ebe5648e3f217bd7_2202312.fix +txn/fixtures/655dd2746de01aaa57bb552651c2dcb98567796f_2139000.fix +txn/fixtures/6590f1066565d26d2c572a5ff83d9acbe7a6799f_2188998.fix +txn/fixtures/66200523354cb0f80b2e69c968f3d4ce782c4b31_2227813.fix +txn/fixtures/66369d2de77d27f1ca4e9adc4b9452ff616185df_2204144.fix +txn/fixtures/6647578a90a9d98e76d8297d60dd517d6e940748_2209619.fix +txn/fixtures/6695a5515b8365132402398a83f0720c3c54de4e_1837740.fix +txn/fixtures/66be9d8561bbeeac22124eee02a56ebfd47e0974_2230071.fix +txn/fixtures/6783ee4a7c0ffa66049e806219dcf513b6f413f4_2234360.fix +txn/fixtures/679fa619b9c8b762421b4ca5ab98fe740121c91b_2201741.fix +txn/fixtures/683098a43650542407f5e2673dcbed1ff761c745_2423046.fix +txn/fixtures/68b2b5a4a82570d5be992d5c6ef4c7cd062e7d86_265678.fix +txn/fixtures/68de719ae2e318788625ef7d721f9655f395b243_265678.fix +txn/fixtures/6917b8f9a10d431febeda59d7c1f89e6b103c63f_3206023.fix +txn/fixtures/692da6bd6cbd13d7ae028674dd0c8eba1b9f21c9_265678.fix +txn/fixtures/6965357bf7b4eaf7bb429afd962b2dcef859e960_1848806.fix +txn/fixtures/69e7979792813ce26ee23a6ce22d283d4616663e_1850572.fix +txn/fixtures/69f3d8d509030727c962771c017ee0dc21cfcf85_2190658.fix +txn/fixtures/6a154600616cf08c03761e73bc5274169d806df5_265678.fix +txn/fixtures/6a16ad36f04f2d9fafee928584306fd5812e397d_265678.fix +txn/fixtures/6a8fc485df4ebc34be31a498405018a77570ea3b_265678.fix +txn/fixtures/6a9195dd570495643a87db0951da43ff1061dc8e_265678.fix +txn/fixtures/6aa31e5e526d31c10afa5822d946a67322b7cdc6_2215459.fix +txn/fixtures/6ab0f67b6d873d78f6780228ba3e73d717ae4ed3_2215186.fix +txn/fixtures/6ab77582d39b7ff0807d6abf411751a99469759f_265678.fix +txn/fixtures/6ad9932baf4b3db55fd8cb7a0c772154d496199a_1831442.fix +txn/fixtures/6b39efc1fee5649e89b4ba53275e637d210d545f_2607586.fix +txn/fixtures/6b745b5f8aafe33964e6674b5edf1bae4e6d47c0_265678.fix +txn/fixtures/6b8aad11eda157f83dab534e8066a49ed74ba761_2460271.fix +txn/fixtures/6baed8c51b0e2d9d2ee9518ef618f70ab71068a2_2189997.fix +txn/fixtures/6bbc0fe70c5898ceaa4d90baea8aa6beee462b31_1524030.fix +txn/fixtures/6bc6ac4a6010d90d363521e9657f9d45498d1738_265678.fix +txn/fixtures/6c10842551bcfe52991daa3596e09fa94bd0f5f1_265678.fix +txn/fixtures/6c1341dbc2358cfc4e5488cd07b0c36a0cfd9fab_265678.fix +txn/fixtures/6c26a54899203ad9c2fab9dddc3fc2903d76b216_2136950.fix +txn/fixtures/6c2d21b49f6a3577299d4757ea92841557e5580a_265678.fix +txn/fixtures/6c408d253b15c33a81e05816075ed6381c711bc1_2186016.fix +txn/fixtures/6c7485b4807cedf24a234fdf455ae9d2603508c1_2583468.fix +txn/fixtures/6caf7149e36e14b730184f7a842c3974b9f1d3f6_3114943.fix +txn/fixtures/6cb4a875d659d3876bba279d4d2a510d8f0f746a_265678.fix +txn/fixtures/6d03af70a8847df24d10f6c6f760fddc8eadc5e4_265678.fix +txn/fixtures/6d15a36c9befbad0f742bf0047fd8a6f12dc3207_2909783.fix +txn/fixtures/6d33522c1e6ee0c960ba65f8b4a011d4d5cc603c_1837056.fix +txn/fixtures/6d49e31dc3c7545261144f0ea38c2af4fe21d533_1855703.fix +txn/fixtures/6d60ccc557bbcbc0d014b218a2f21fdcdb063c8b_2206064.fix +txn/fixtures/6d6ce3be692a314b823dfaab82ffa7f1348e2cf9_265678.fix +txn/fixtures/6dc2ecaf5c82c94c36c3a049d520da42ed59cd1d_265678.fix +txn/fixtures/6dcb68d78f59c38c2868170462de7b8df600b329_2192886.fix +txn/fixtures/6de22e4f6c40700cbc9062cc37c3377150ddd23b_265678.fix +txn/fixtures/6e1897fc662064506bcebe67164740cfbab4211a_1844229.fix +txn/fixtures/6e3101e4dec1891d3ad1cfac51212e38aab60664_2214633.fix +txn/fixtures/6e62414edfe54740c4cd339979c7e666b5f597da_2234808.fix +txn/fixtures/6e73a9b6c3fae98c2b9008af36110562569706c5_2203247.fix +txn/fixtures/6e882c41b89d75a469b19cd27014741a348016ad_2137372.fix +txn/fixtures/6eb510a6e8c10f74929ccdc3a9f693c8342994af_2196793.fix +txn/fixtures/6ec4e2bfa78a373b657cd6cdd7b12ddded83ce35_1830116.fix +txn/fixtures/6ed605260361eed1bcd6d50676fd4f10a34cf779_2717633.fix +txn/fixtures/6edb98d70680a296f990bc1daf91dd36053145b5_265678.fix +txn/fixtures/6f0fb3621166d843fc2f644fa252b483a7d1fe8f_265678.fix +txn/fixtures/6ff64aeb9ce5266ad83f0bea21812761d3c82d60_2232957.fix +txn/fixtures/700f37a0b3638cc41adbd1ac89148b9a81d6cdc8_265678.fix +txn/fixtures/702a98d037c23de2c8d0df9a00e7e2e9a03404c4_265678.fix +txn/fixtures/707c088e9b265b475a25401e3ffe899069cab3f7_1837524.fix +txn/fixtures/708192497af8fae436b66a04a2f90a17cb66fa91_265678.fix +txn/fixtures/7095f3138822db8b09ec7ee5f5ec313bd7ba4546_265678.fix +txn/fixtures/7113520297747f2952bc10b841a63adc7d02ae4b_1575683.fix +txn/fixtures/7148ed822b977385887545783f84cc39d2733848_2912577.fix +txn/fixtures/715740a384824e5a09d0ba2536c801b5a455dbd6_265678.fix +txn/fixtures/717818247012f5a76f9b4d51ed1600f9ee84af7c_265678.fix +txn/fixtures/71a625c1980eba4ec1e05ed1b849e192f2fe9306_1575151.fix +txn/fixtures/71fef040f86707bed99a30e471cb908d8a761058_1832405.fix +txn/fixtures/7208c519e81e82cd073488676983f5dc9723ea39_2214697.fix +txn/fixtures/723dc40b7624f6125bf7e67040759b966f12a664_3499078.fix +txn/fixtures/728873e67b5676df8ec3cd444f5edd4c1b386b01_2190545.fix +txn/fixtures/728d9ac62e0cbb1a252bdf3bf3a10f6e01002f1c_2202197.fix +txn/fixtures/72fe3a57302874e135c7bc383f62ab0c2419930c_1835040.fix +txn/fixtures/7372281d5d0dec6e685b148f35a7660baaea53dc_265678.fix +txn/fixtures/73bbfa5526e78e0dff861d41369d671422330778_2133339.fix +txn/fixtures/73dac1cb3ece394cbc1d787267c8f67bf23f05cc_2225492.fix +txn/fixtures/73e5a8c45cf7f6fc0299f6583c07ad59780e33f0_265678.fix +txn/fixtures/73f5949bdc68038c3886dc255aebeb8c8a25ed79_2215693.fix +txn/fixtures/7432b5ca117583f99f879e105d20d033dba9f4fe_265678.fix +txn/fixtures/7438c6d284ba03a269b36bc24c1a3cdd12b6d3dc_1832527.fix +txn/fixtures/7444add838af0ce59b2e7dab6831df60b55d90ee_265678.fix +txn/fixtures/745eb2958bca9d8abbd5ead8839c53632104e89b_2398324.fix +txn/fixtures/74aa60ecbfb647ad8193acd95d94b58dd643c0e4_265678.fix +txn/fixtures/74ce09ba587979efd2567813152e4937f26a8a45_2237552.fix +txn/fixtures/74ceb9783010f2045eb54a70581fb66582c7d7eb_3723552.fix +txn/fixtures/74dba888b06ba320539679bc6e96135562d45886_265678.fix +txn/fixtures/74e73cd625270dc92298ef0b79e351e867e30899_2185258.fix +txn/fixtures/74f9f1dda20c9d76b349e7a45be78e25e133b987_2729628.fix +txn/fixtures/74fc1c1f63f90f69a048100c93cb6564a700b355_1574668.fix +txn/fixtures/751644f2859684b1b02b04f4c2bb7532d70d91a2_2741778.fix +txn/fixtures/7556013c493608c1a57f450304f1f49de67de27d_265678.fix +txn/fixtures/758348216952932927da3be516f2ef6db1bc528b_2205625.fix +txn/fixtures/75d285cc1890f5ff844577343f38f0016a58fe8d_2235432.fix +txn/fixtures/75d55078f1cffcb6feb6dd032c3756f81d22e328_2213017.fix +txn/fixtures/7628342b9361df2077fc13c664d26c4604baf072_265678.fix +txn/fixtures/7628d0fb061e35ecde73977b5a3e48bef4e0e8b7_265678.fix +txn/fixtures/766753bd49e4a67c9b1db3ea556a59c571198fab_1833781.fix +txn/fixtures/766fad81d4b8c6899be5b319ce3e2bef94169f89_265678.fix +txn/fixtures/76c88da7cd1daf0222bfc849b3aeb9f4ca42d961_265678.fix +txn/fixtures/76d680f0586b0b536305df03b073a0cb9226ebe1_2231275.fix +txn/fixtures/76ea53fd679744403628fc8757f3445aa630eaa2_265678.fix +txn/fixtures/76f56e4b8fd8cdcb3f84dc552396c7ec78d64fd3_2371907.fix +txn/fixtures/771d8fce01d54bcc96fe17a89d54c8c91ffe36a4_2136834.fix +txn/fixtures/7787409b99f1a76172e9c9a7939459b1861b2c60_1328174.fix +txn/fixtures/77a8adc2b8f5c2037a8298c33ed132bace92b678_2198400.fix +txn/fixtures/7804c03d36b7eea433877275990c38a55fbaae42_2199218.fix +txn/fixtures/7823b3618ffa687d40d5d37d829aef943cf87491_2220631.fix +txn/fixtures/787184e961ab6ae7edfc03f99ca8189dc595e73f_265678.fix +txn/fixtures/78cf2da70b145fe57b2ec2808832c731e335a856_2218939.fix +txn/fixtures/78dadb162713fb4bba6dd53c9c2d508ff5184bb4_265678.fix +txn/fixtures/78f2fd40cd5114d97639aedbafbe649f69e22126_265678.fix +txn/fixtures/790698686d2e198585053d5f907e990767814629_2192974.fix +txn/fixtures/795e7b9627d9a344bf29425d63ca2edc2eaf91da_2238514.fix +txn/fixtures/79642b34aaedcc5d7960bc892d475a15a954e2d2_265678.fix +txn/fixtures/79a1682d209004109b80afd3e8d2603394e0902d_265678.fix +txn/fixtures/79b432b302868ebaff52801bfe8a249b5f66b7db_265678.fix +txn/fixtures/79b43bec2ba26f95d296e530ed4bcc26f8bfe9b9_2200515.fix +txn/fixtures/7a08552d275b739e608ae849a5453051d31a1ca2_265678.fix +txn/fixtures/7a16a97f0e93a9ca8a6c0907daf3fd9323030769_265678.fix +txn/fixtures/7a1ba9b15a94ec55a22bf58ba02efea68067c7a0_1575911.fix +txn/fixtures/7a38c457d78799eacda9d3eac73cd0cb1239e629_2201095.fix +txn/fixtures/7a46d1a47adfc21ed24cad3bf87fb4e001d8f28f_265678.fix +txn/fixtures/7a9b10cecd30c1cd04c702909af6d6151b5d7e95_265678.fix +txn/fixtures/7ab8f7859984280bf68d217a5f63301600e1d6b1_265678.fix +txn/fixtures/7ade99678b9f6b8a6c64a143756186e9c42cee87_265678.fix +txn/fixtures/7ae18275982eb213397b9bf1a2c69ce3079712d4_2206704.fix +txn/fixtures/7b0bdf3bc8b96c84d31b53d46857f0dcf02e978f_265678.fix +txn/fixtures/7b0cbc17a6e68fb759d3cfe2058ab87956880415_265678.fix +txn/fixtures/7b1e58017efe2b76b1d3ab04f44c17f2dbe156a5_3521424.fix +txn/fixtures/7b2590a93d2b6498f9d669c8d25fd8f521d78a41_2217826.fix +txn/fixtures/7b2b19bacbd26480acc84b2ec2309dab78bcd4d2_265678.fix +txn/fixtures/7b3f5535b4aea1e007d109410a2cde376a096b85_3197345.fix +txn/fixtures/7b6703220c13c59c79e79b971dd26d73be56c84b_2219508.fix +txn/fixtures/7b75c120673a4117b1ed406cffd3119c8d732e1f_265678.fix +txn/fixtures/7b8a2076923c8f0d83ebed8a87e9a3cee67cef97_265678.fix +txn/fixtures/7b8f8e41573eeef5b766281b613af5b824e938a0_265678.fix +txn/fixtures/7bb2071e137916a7953dc03e7a91166f7f4933d8_2220327.fix +txn/fixtures/7bc6797c6c983885b1a15dd876e195f7014a1ccc_2705158.fix +txn/fixtures/7beb82e84a3d993bc61d3f33c32ad070a1ebd3db_1575615.fix +txn/fixtures/7c21b2a9421d29211fc4606383b4b8d4afc2d2da_2139381.fix +txn/fixtures/7c4c81f458a4bb96dce37b15848f750f29757816_265678.fix +txn/fixtures/7c7fc20c8f7e0286f36e27ef09fc64c7b34aa3ea_265678.fix +txn/fixtures/7cd40934ab71999042661cde7c89c7c163e06d3e_265678.fix +txn/fixtures/7d2588736a7df733e96c84e8eebc2bffc551c7f4_2133464.fix +txn/fixtures/7d66500f1c9d4412ed309aab9123f63f80d76a8e_265678.fix +txn/fixtures/7d890b0a93b6eba7595d2dbbda3aa24a6b715d19_1139013.fix +txn/fixtures/7e162c3c678748000aa8e1dac848a8419b855dda_265678.fix +txn/fixtures/7e3d6256fb0f86d88a3aef4eaec48ffaca2649d5_2218454.fix +txn/fixtures/7e3f22933046132aa4a699842ee5533fe3a41b22_435595.fix +txn/fixtures/7e59076faf162a4d5332a7c8e535eeedd7d5c958_2207559.fix +txn/fixtures/7e9108d0d4ab00b4758c5e07a2f79bb31e653b46_2236105.fix +txn/fixtures/7eb4dd8f6b72bef54ad2e0a308a636aaf2680938_2231520.fix +txn/fixtures/7ec5734c811a6c1e0e35d6d1a6adb2ee3128116f_265678.fix +txn/fixtures/7ecefc4568db6716a1fd257095753c3277dcdf83_2228316.fix +txn/fixtures/7ed911b9be7da9452df38d010b8f05e2dd3450f8_3194894.fix +txn/fixtures/7ef8a463b44eff651b92dd8e87235a105b4d00dd_2371611.fix +txn/fixtures/7f176ff671c7048392262eabea3a65155ff41822_2135873.fix +txn/fixtures/7f2cec8be165daf94490d16ad5197ecf59dce8d5_1829727.fix +txn/fixtures/7f302a09121a3f85d76f9c6b44665ecef0ed50f5_2138673.fix +txn/fixtures/7f8f86f1a9bc55f220ffb3076a8085f959e5d683_265678.fix +txn/fixtures/7f9105a4295360588ea7078c771a53066eee1ca9_265678.fix +txn/fixtures/7f9469634dc504a5b4238b1e10d2ccd2fd957169_1852629.fix +txn/fixtures/7f99c632752fb7b088fea19332284fd6bfae6dde_1576675.fix +txn/fixtures/7fa6f44771cc83b9f5262f07a2c38e339d616cb5_1852247.fix +txn/fixtures/7fa89a994c774d05878022f95160ffac4b17c1fb_265678.fix +txn/fixtures/7fde8e72dd064cfe85b5e9b211b0356bf14bf378_265678.fix +txn/fixtures/7fe3699a0409d51fa17c8c1e150ef9651ea8d74d_2208800.fix +txn/fixtures/80264c01e61d5d1e1a29c805e87a9fa996218fba_1850678.fix +txn/fixtures/805e0cd05df6ceb015a08086e9bcfab51f559747_180823.fix +txn/fixtures/8061f4b3293830badf653e04d0eb738f1384d4b2_265678.fix +txn/fixtures/807dffda19f530b5857f1b1eefc7c416af2be865_2201033.fix +txn/fixtures/8088ba17dd927644df610f9aed54ed407632556f_265678.fix +txn/fixtures/80a0bc9bab85104d1772d25066f0603f7f38149e_265678.fix +txn/fixtures/80d5bfd331a90cd04f02ebeb2daa875bb4d04ba4_265678.fix +txn/fixtures/80f7ed9dd50d5090558dc3ac67b47e7a57d53601_265678.fix +txn/fixtures/80fa74e58476bc07e9d6ccca64c374c22da0327c_265678.fix +txn/fixtures/81080522b94bd3dbe80eebed6873659db5a3860a_3454326.fix +txn/fixtures/8134209f43c8d3dbbb861b30ee71f1f649babc5f_265678.fix +txn/fixtures/81696f4a9ca9e9e12c70b71407b73249d8c00575_265678.fix +txn/fixtures/816b7bbfdf3efe2b3abb6f8e36e4c2efd5b24f34_2185350.fix +txn/fixtures/8173a59ae2048da0ab0756ff088897ed73f7be15_265678.fix +txn/fixtures/818f71ad0a0f9659196ca287018197fee41fe3fa_2190773.fix +txn/fixtures/81a6be81485f9bdb807fdf7fc81b2782c512d7a6_2196843.fix +txn/fixtures/81e2fb1dce2a047cb9e6ed334b72e57d1759ef06_265678.fix +txn/fixtures/82361cc3544bdc25471a9c08b4a57584081fa2ac_2241197.fix +txn/fixtures/82a184ba26d1e4512a811765b4d8e118ed63d3e6_265678.fix +txn/fixtures/82c6b66a19826c872cbc38602176607d93a06eef_265678.fix +txn/fixtures/82c937e832b8cb338645f3e2155f63fd1cc2f955_2227177.fix +txn/fixtures/82e8fbb6226f92ec6613e3926fe45b35132bf576_1849796.fix +txn/fixtures/833237493a0ef5ffb0c133a9f882857181510beb_265678.fix +txn/fixtures/83438230049e506c0e91c5f0a3e33274f28e7890_3202891.fix +txn/fixtures/8362d2f9113946d5aaf14e26352d04ba8273d109_2208736.fix +txn/fixtures/836eaabfc8e5327dc9e02913791f86fa869f98f9_265678.fix +txn/fixtures/8371b88afa30491a952a802ed094966179a2ba6d_2136224.fix +txn/fixtures/837d6f9ca317f624f265888a147d98232a184668_265678.fix +txn/fixtures/8493318989a41d8a979c653833549fb30918d01f_1833195.fix +txn/fixtures/849d28ffcec100ce4572d341bc9fe4f74fb9d0b7_2140423.fix +txn/fixtures/84cb4e0e3348ee4dcad2cff5f19127d5db57aeb8_265678.fix +txn/fixtures/84d2102b057eb6f482356c40fa93d648ac141f11_1840379.fix +txn/fixtures/84f114b17587f88281f867b17a95ec4a8118f620_265678.fix +txn/fixtures/84f3a1500cd82eb29554c49640400e9d96783dc6_2395779.fix +txn/fixtures/850384bbd4d1b8c25de0c7516cc4b823801ee570_265678.fix +txn/fixtures/858143e9c97c4c7ef351403f210cd5227c141dc1_265678.fix +txn/fixtures/8584a658b6b81d0a7a3fa0487b7d98305cf2dc5d_265678.fix +txn/fixtures/85a5a3ef4260adf5bc1e6170e2bb65cbc8a32df2_2226913.fix +txn/fixtures/85a5e55185820b8351da3f707e12953740888fd9_1831549.fix +txn/fixtures/86228fb07572aaf99c3261aef5a327dc946fab82_1836600.fix +txn/fixtures/862d404d411a7e18ae753412e1740140d7db403f_3195704.fix +txn/fixtures/86395b4225619c786adedc129b7704513e0bff4b_1844482.fix +txn/fixtures/86454af77547db2c89a4550257e1b5992763f011_265678.fix +txn/fixtures/869745c989e8293a411b34303b553040d13e1489_265678.fix +txn/fixtures/86a0f47899155a1b8b4b419580d5b149d2de720c_1845492.fix +txn/fixtures/86a3af2cc9255dc96044aa02d716c719b47a54b7_2204374.fix +txn/fixtures/86ad9471cfe78293876b8d724f3737fad2471964_265678.fix +txn/fixtures/86ebf3cae17494751b3022ff88fb16b6e01324d2_2206656.fix +txn/fixtures/86ecf2360667c997793dd1487a4051db8624bf48_1576048.fix +txn/fixtures/874677584a55f3638285d1d56f494283fe1a04c6_265678.fix +txn/fixtures/8756d3515f298149523662750621b3510d469ff0_265678.fix +txn/fixtures/878fca250a4597dc8be81f94c0c6562065ddf399_3204556.fix +txn/fixtures/8794cccac8d5bcba018310656d5535bdab2b3bff_2203374.fix +txn/fixtures/8813244e2e31cf049192ee6378a4ced01ab0739d_1853879.fix +txn/fixtures/8882ce10b622347d25df35d61eb03f4c03b58571_265678.fix +txn/fixtures/88a20a3211cc13cf73a420b249e2fa2a90e3e1eb_3005033.fix +txn/fixtures/88d538b8c654183b6024ca6c186fc040952b498c_265678.fix +txn/fixtures/88eec59b48bc917b9daddd34e4e9068925104afa_265678.fix +txn/fixtures/88f2bb01740b1934ca2f3d84d07a1ea77a1729aa_265678.fix +txn/fixtures/88fb6cf4c3f060a2d8a0664a648657b52bf49f6f_2211151.fix +txn/fixtures/8909474439a9d13f28de8409979e6f1485c29f01_265678.fix +txn/fixtures/896dcd5f66bc971f73ef65a515b47e697b7111ec_265678.fix +txn/fixtures/89a4155352fab4d7a2f7779a4577f87adaaee9c9_1851188.fix +txn/fixtures/89b89f4fe8f603f87b2d92c136dba0f1c98851dd_2233223.fix +txn/fixtures/8a0ea672e3fe2fb9fbbe6e93a86ed8b9e1ad43bb_1850949.fix +txn/fixtures/8a9a49c4d42afb1c8bcc8209f009d847214a0b2e_1850193.fix +txn/fixtures/8aabaa13c469f8e75020842899bacb24f7a9e154_265678.fix +txn/fixtures/8ab790cf1e3936cf30649635fa52bf1c868be032_265678.fix +txn/fixtures/8ac234a9308c1190c404e6a63576063f55399c9f_265678.fix +txn/fixtures/8ac2b97afa10f62af05cb0ec2b9707994f6c86cf_265678.fix +txn/fixtures/8ae00a6cdc5929c9a20daa77ef300c42d7fc7944_2224910.fix +txn/fixtures/8ae8c1d2f378a5e1038cfc6b9a649e4be23b2bef_3788935.fix +txn/fixtures/8b3b935ddd03507493dc9867f606b68888bd946f_265678.fix +txn/fixtures/8b3dcf67440ca55dc1d2bc248ef61f034fe68185_265678.fix +txn/fixtures/8b80d52397a8117e0e0a80e7d737fa9509ea74d6_2186219.fix +txn/fixtures/8b9e02142ccb007bff52bf050c06f50f24351b48_2214130.fix +txn/fixtures/8c00535b747c262681aa014f688dafb22c34546a_1631431.fix +txn/fixtures/8c24440a52f2a3a301486f0b6c49afc01a511b10_2184590.fix +txn/fixtures/8c2d2eafa1a0b9fe3e4332556b960d95940bf67e_2212119.fix +txn/fixtures/8c31a6a57c87b8fd6993f67f7d5f995fb017fe7e_2136025.fix +txn/fixtures/8c45d76a08b0e8bc419e4d773776ec50be691045_2219666.fix +txn/fixtures/8c4955dd69c00798ef7b6dc1e5836b8d4da26f54_265678.fix +txn/fixtures/8c6152fda477417ceee7627fcf14bfaafb20310e_1828940.fix +txn/fixtures/8c969033df5cadb1043d1e28ccd371232c0bdbd8_265678.fix +txn/fixtures/8cc0cafd6602956e0c3fc35c1844578785b9337f_2312950.fix +txn/fixtures/8cd5129233ab8d1ce5428ac5fe51f0c7a3e1f723_3195044.fix +txn/fixtures/8d4e9c49ca38016e3eb9101fd7780366ccb5bd63_265678.fix +txn/fixtures/8d510577edc9064955b5acb85b74545ce5165997_2139271.fix +txn/fixtures/8d585bb3782c1616c715608a5917a7a38e644633_265678.fix +txn/fixtures/8d58fe7ee312bd41d25b223ece2e632441cb7fa9_2292395.fix +txn/fixtures/8d77e1e1c87ecd91a8f033222bb16b068a3b4a95_265678.fix +txn/fixtures/8dab1e53c8d72476e278c5041c64b918413beeec_2203103.fix +txn/fixtures/8dc1dd2e1e05a8b1e65c8058f37eb24bd3ac87ac_265678.fix +txn/fixtures/8e30abc5fe84f9c25eaa7bc11a3723274d54c884_2223502.fix +txn/fixtures/8ee116717d81881f6e21fa3dfbe3f33d8ba502f2_265678.fix +txn/fixtures/8f24011f157037994aa267b08549559d9f98b9bd_2187730.fix +txn/fixtures/8f2e283aa7e2b0f52994e7312429e58095a2e33f_1830783.fix +txn/fixtures/8f5a6f9cbb93183cff518a7d0f7c42db4fdce7ac_2139139.fix +txn/fixtures/8f5a719fa8a8e52fd182b4f1a59ef1fa93a411d8_265678.fix +txn/fixtures/8f8a1715f18999a5a28cdf1451c8fdb9261886ea_2192755.fix +txn/fixtures/8fe1c06bbb70dd854d6044248af8ddacb8dd4c60_265678.fix +txn/fixtures/900e0f020d6c8d0915ed19a5c54adafd979a3390_2277057.fix +txn/fixtures/901d6b60e72d47863ec828e0c116eeab902c86b5_3332788.fix +txn/fixtures/902b34142ecf38e8d7cc2b83c45c9a7bb125c9d0_265678.fix +txn/fixtures/902cb0109f3e57ee8b4037582c47c6c66e5d8b6c_265678.fix +txn/fixtures/902eb5404a6b532f8ae8749055875ff54fd29b03_265678.fix +txn/fixtures/904207059d246f5e6b21f01ebe670a236b523727_3201951.fix +txn/fixtures/9055eb403b43b198dfad7cf64cd22b2645b6e084_2233007.fix +txn/fixtures/90947f3a153831cdb64a9e3b5b461d4b12d9503e_265678.fix +txn/fixtures/9099ec62e79fb957f8d6359194ad7ac034cecb10_1854074.fix +txn/fixtures/90bfea1be486e29c8e1da62f4e28d28301223d6e_265678.fix +txn/fixtures/912ff85cf86567fed1456541b92ca5095687329c_2203279.fix +txn/fixtures/9152fbbe10ad2236a0d4d1e6d845ffd36089663f_2230775.fix +txn/fixtures/915fa677a9682253190e56f106e396eef5f92c46_1835979.fix +txn/fixtures/916400c914fa36225a1f05e1406a0f6697884ba1_3193722.fix +txn/fixtures/91a824f4728bda0f5b83a5214136f7d4eea6441f_2217511.fix +txn/fixtures/91c096eb22aa1a690ed39be3d14963ab040d35d6_265678.fix +txn/fixtures/921b0d92770803329ccf4a71f9eec640cec16030_265678.fix +txn/fixtures/92494c89701e7bcb6c4d706a5d9ac5cbc60f5da7_3001125.fix +txn/fixtures/92515dde3244f54bba8913577e3b49c7b61e840a_3194372.fix +txn/fixtures/926ed4930958cf81adcebe46f01e3d2234b906e9_265678.fix +txn/fixtures/928387d45f038f2f95c746d588386dd5c0189171_265678.fix +txn/fixtures/928970d21fa43747bca89f1a89b209b44436e584_2221614.fix +txn/fixtures/92b26e8f483c4f477142fc26d8d167558ae69706_2215759.fix +txn/fixtures/92e791077f3046e841226e276f476695987e0274_1101003.fix +txn/fixtures/9314d57f56d40face8fddca964cf9dec273685b9_265678.fix +txn/fixtures/9323f635964fc31b53f693f7d82e6faec25b9c04_265678.fix +txn/fixtures/9370046a7dc9d68d4bf9643dd82711c8ee701411_1019687.fix +txn/fixtures/93a704f5fc76eb7db7b50b577260257aa68f60b7_2211215.fix +txn/fixtures/93a73fa12b34e5b3ae13bd1ec7ac7e5c190706f8_2134671.fix +txn/fixtures/93aee18074e3e54d04ee61eb5749642eb7beae4f_1840989.fix +txn/fixtures/94023da412bfb74503860599a0964f33a118c3a0_265678.fix +txn/fixtures/9465dd65dcc1b7102f5f44d219a06ff102c7b064_265678.fix +txn/fixtures/949d4e9006c7bbf556cbfe64f3ca79cbe22cf532_265678.fix +txn/fixtures/94a84d070472d13dca9af9296461de9b81f9e113_2221332.fix +txn/fixtures/9540d5519a7b8a396c11af193da622f784dc02fa_2234085.fix +txn/fixtures/9556232f5973c05d578503ac084b0156ce4ae3d7_2138087.fix +txn/fixtures/956428fc38430d30cb22edf26ba80542acce9339_265678.fix +txn/fixtures/956ad9bc866cb9d551164237ff9f0d67eff659ac_265678.fix +txn/fixtures/957e385290b6017114a5149d31f1d00b933c5720_3797072.fix +txn/fixtures/958bcd60f7a900a4f949a0a3ff508f5d3998959a_2236417.fix +txn/fixtures/95b7a2682da775862e0b340f31dcd54fd540bd82_2188306.fix +txn/fixtures/95d912ea8d8a58653de6cd8a0f16f49d3f4038c2_2227306.fix +txn/fixtures/960a60819a97603e9a0c25bc685dcc763a68e354_265678.fix +txn/fixtures/9637817a6e84ee119f2cf9bc0f67eca55cb854f8_1576517.fix +txn/fixtures/96667844a017a9683579701c9729a785033fe1bd_2222925.fix +txn/fixtures/966a8c2f18dd17ea576f94e4a7da80b3559703cf_265678.fix +txn/fixtures/967a56c626295ab977509b9b1de4071149d0ff82_265678.fix +txn/fixtures/96bab751dc5d50498cbb7d9aa31cb6e753345a58_2191052.fix +txn/fixtures/96e96b42833daf17eac38e153ecd4b9ec9ab04fa_2215302.fix +txn/fixtures/96ead6c424d2293faaa4a18aaa08b6b36b2408e0_2223383.fix +txn/fixtures/97436d50242eab666f6aae1852d51931639c5dfc_2229544.fix +txn/fixtures/97af2ea11504d7b70857ff74f9064bdff5903710_2233996.fix +txn/fixtures/97c1ef81749aee9f47b2ed25662b375e329a21fd_2202085.fix +txn/fixtures/97dc51b75e55e1c1af33d0925c44838813718f77_265678.fix +txn/fixtures/97ffe9b7f2ce8f290e7d1d01c965556f7a9763da_265678.fix +txn/fixtures/981564bc827a78e002876742e4cf169510cfaa5e_2140336.fix +txn/fixtures/98239af4a564e08d182f6234eb1e1b8cc9a171d0_2202132.fix +txn/fixtures/984baa813f1606d6479c11516b10f7de8f89612e_1842620.fix +txn/fixtures/988afe5f920f6bac6d406123facf2456be8eb405_2229336.fix +txn/fixtures/98b9aa3bd1374c51e2b4fcbb5b853ab9aa93eea9_265678.fix +txn/fixtures/98d6f444249d770ae599ac4e2a8840b572537a94_265678.fix +txn/fixtures/98eb1074e63d8b58177e11a50c923fc570067f7c_1854915.fix +txn/fixtures/992dfbbb645a7fcfbc9a4575cc2830d0b4d6ba78_265678.fix +txn/fixtures/9943f7985e5196e6557d50b6dabfec809ca4d5f6_2225625.fix +txn/fixtures/9944301b7524436b6c4a3593e5227b24d7c914de_265678.fix +txn/fixtures/9965b274907774946fead0a151a97d25c7edd11e_265678.fix +txn/fixtures/996e4ac914ce99defe8e9bf58f8c07e7b212d9c0_265678.fix +txn/fixtures/9982e88d840820930df06abce5c966586e124e83_2195579.fix +txn/fixtures/99ee8af617f83582b79a4f7fe9a25a4ff4e02f9e_2218034.fix +txn/fixtures/9a33a5127465a3a906f9ab2cde5d68b2345ac621_265678.fix +txn/fixtures/9a5c2e058d902fc5aa77496634ccc28cd56fc01b_2134299.fix +txn/fixtures/9a9d57d07a330e6e442fa17d4b3a43e5b1a61ee3_1575980.fix +txn/fixtures/9aaa7ffa91acf384ff395794675be0da19501553_2223566.fix +txn/fixtures/9ab0a5d693b66a50156530b0760bfc22121ac758_265678.fix +txn/fixtures/9ab74082782b2918447ac95f8f43f5f6b2fb7c86_2140964.fix +txn/fixtures/9adb940c604a638d23c294b86ba52307358fac3a_835176.fix +txn/fixtures/9adcdd1a2bb003aeb8e4c24b47c5944b0df4be21_2137266.fix +txn/fixtures/9b7344ee4323350e7c555e0be7ff41d780df6a1b_2216155.fix +txn/fixtures/9b764649723ceb97dc30207fbc75d494e95341a3_265678.fix +txn/fixtures/9b9904644837f830bc3c5db98ed57b35f3915dff_557019.fix +txn/fixtures/9bc8edfe20aeba2e4f3372564d44bd001cebce94_2186085.fix +txn/fixtures/9be1ddb02934e8c8876427e2b074a5051f713a32_1656662.fix +txn/fixtures/9bfd3a5cfe04a0f19db993a69c49db9ae68306de_265678.fix +txn/fixtures/9bfecb68a81ed598659b354481f007daebd4d320_2133871.fix +txn/fixtures/9c101efd73be6fa697ef18cec7a7a2ea73b2ad92_265678.fix +txn/fixtures/9c42ab0d666a2d86cb138bf0e972e845666782a1_2448028.fix +txn/fixtures/9c4744e8ab21187c9a833fe102123194036c2aea_3205227.fix +txn/fixtures/9c484d2e4ebc38c3aa587815a4816a8247cbfeb7_1576203.fix +txn/fixtures/9c5bbb98ec702987dbfb0bfc40d9c4a93d4d6420_2139318.fix +txn/fixtures/9c8282330af13e7b22315b9650e0bd217d41966a_2209507.fix +txn/fixtures/9c908a4fa99dfbebd21f89f838f950d95b3a66a1_2074259.fix +txn/fixtures/9cd795c045b558c5fa7c2a05705b76fc975c9c31_2202696.fix +txn/fixtures/9cdac405a51390d2613f9b17fe57266b6daa3d80_3589182.fix +txn/fixtures/9d25474605a1502c2af0d475f20f05f85b59e08a_1837332.fix +txn/fixtures/9d334c05245486e8c1654a6e90d02f6b906ac16d_2224447.fix +txn/fixtures/9d3bca440908b0e9719a1fae0549837fa76b1593_2201490.fix +txn/fixtures/9d45f7478d50b40dd4883e5eb4970b075a5deb45_2042655.fix +txn/fixtures/9d45f7478d50b40dd4883e5eb4970b075a5deb45_3293287.fix +txn/fixtures/9d592d64c59df693e6d85a11878a62d5a06bb53e_2204524.fix +txn/fixtures/9d763cea6739a560ce16ef2f9d47812c00aec14a_265678.fix +txn/fixtures/9da3a0d88d15613311e43d03cb97e28961bdca77_3938735.fix +txn/fixtures/9dacaaaf67b58eb8428385fc80972cd1f7f74260_265678.fix +txn/fixtures/9dbe0999856f2e886d071ce69afdf317e47a6d60_3131989.fix +txn/fixtures/9de7ab82ca6cdc4682b90b83817d16f2b8352055_2615889.fix +txn/fixtures/9e681cece315163a4880e5881bfcb8e1be20d3ed_2198511.fix +txn/fixtures/9e8302286c2c40e33dbe9a5ee98ddebf08af3885_2195490.fix +txn/fixtures/9ea1efc3e53029954030db5abf036e46ced8a418_2223451.fix +txn/fixtures/9ea30f4e4322436a1907dee4386a54aa8c3c6342_265678.fix +txn/fixtures/9ef3e3da9e83e89a6103c47662eac41319cb8f33_265678.fix +txn/fixtures/9f337b34ca9bed5d03c8dcc470066a91eb301789_2213107.fix +txn/fixtures/9f5dc60538461eabfac70cf55b7e189b4d555ec4_2217168.fix +txn/fixtures/9f6aded852cd5c2e18781c96ee7aeb35e477488e_265678.fix +txn/fixtures/9f726f5e9b4b07c32444c5d0059a2da43a2598a3_2211478.fix +txn/fixtures/9f8e3d308c0fe43e6f5d206f31ad06ea77bea086_265678.fix +txn/fixtures/9f9d8e50903a0e8f217c470f4f190fdf06c29843_2203491.fix +txn/fixtures/9fdc7d9abf25a133afa7c6d8df48fe28588bd96c_2201292.fix +txn/fixtures/9fe8d7e0e37d5e5b0105a2aeea17d230a295086f_265678.fix +txn/fixtures/9ffed8987dadd85def2958630f594c548af92109_3007559.fix +txn/fixtures/a0251685f9005a675c8884c0d5697eb2d7b5d6d0_265678.fix +txn/fixtures/a0493bd790f7fc25011b4914267fc85ca3adce9b_265678.fix +txn/fixtures/a063e4734a8f1fc28de403afeb8ea8743acb0197_2218145.fix +txn/fixtures/a09a21c6bd330007c4f9d6cf15c5e3d335c32dd7_265678.fix +txn/fixtures/a09dbadbd8b30b73d8dec05078804e153c4f12ac_2209308.fix +txn/fixtures/a0a419811c5782d53b3416e82c9306e5cfdaad8a_265678.fix +txn/fixtures/a0ed96ea38356abac3f3664092a4278ff9beafe4_265678.fix +txn/fixtures/a123f7a195b3d3ce6451873414b3fe266731911a_1851874.fix +txn/fixtures/a14bfb3f634cbf09a8ac7856268969af33160902_265678.fix +txn/fixtures/a168407284fd50b5018df8487130ee36fc443fa7_265678.fix +txn/fixtures/a16e8867e274a5fc2b9a0e6c4fa9f2f72335ec58_2204587.fix +txn/fixtures/a174d16d3f9ceb53c864c959f95624239f06f2ea_265678.fix +txn/fixtures/a1ba0759408ca2b34d903f2d26d22cce1d393dc0_2212721.fix +txn/fixtures/a1ce806bcf467692d7d2571fdd1e0294b6234f24_265678.fix +txn/fixtures/a1f33a08e884b7f10c5693da3d2830c51eae2f8a_620732.fix +txn/fixtures/a21bd03805fca011a9e029f88a62890821052ca0_265678.fix +txn/fixtures/a22c9bc3be7cc45b3f71df8e906a314c4a6dd497_265678.fix +txn/fixtures/a23874e785cdbacabcb9bd2914e5ff5fcf18a87d_265678.fix +txn/fixtures/a245b59067f0aa296a84a3934851a025c5cc996f_3203269.fix +txn/fixtures/a27af35c1a915be8e46de7238c7c654c1fb951e1_2924435.fix +txn/fixtures/a290331b81d89c4d4144da829765ebfa04e18bd7_265678.fix +txn/fixtures/a297b88b2bd727731cb0c628a545fbf97f46b508_265678.fix +txn/fixtures/a29d854dc11982ca4a79cf0c1f6d92bf862a8679_756044.fix +txn/fixtures/a2cbdeaf5b952e7f0faff67f7d0e8a14493583da_2222691.fix +txn/fixtures/a2ea969d9af56dc3ac5ebe3b7bfc2bd544fec487_3164284.fix +txn/fixtures/a2eed62df8e13b5500bbb0a7f49d4b342f9f4891_265678.fix +txn/fixtures/a32458016075b6fbd13e5700b3082378c710d02d_2253730.fix +txn/fixtures/a34a02236294d5bf9991c76b0531be233d329eec_2232473.fix +txn/fixtures/a387a01d9d033fad4bf565d5ce3e586ad6e00e42_2220518.fix +txn/fixtures/a38efef875200c56f775e01b3509ee9f56bfc711_265678.fix +txn/fixtures/a3939063e16c1035b03f8f108dbb9fd82b3d2c5a_2996796.fix +txn/fixtures/a3990ca1f964fc6b79c3f92c7008e0554bd37773_265678.fix +txn/fixtures/a3a76204da057a268ce8f3a0972218c64b3a1e97_2214016.fix +txn/fixtures/a3e8fb8a5c9a322a9fa40caac81929f6f1935107_265678.fix +txn/fixtures/a40603fb4684fb6b202c8f813e0443512ff519b0_2207229.fix +txn/fixtures/a40a338847d331360470dc22de6d431944ef950c_3014147.fix +txn/fixtures/a45eba6fee665ffdd0fbe18ed70a3aaa7e4652b9_2206395.fix +txn/fixtures/a4740b103e2330d19970231be0d6d071287a3be9_265678.fix +txn/fixtures/a49a5a6b5c4538ad6fd48e5f3dfc49b231e3c11a_2237427.fix +txn/fixtures/a4d0e9e046fb776b700cf72eb673600cf6ff7749_265678.fix +txn/fixtures/a4e808f380f3b701935784ad1e538f525ad9cf69_2187706.fix +txn/fixtures/a53bccbacece873dda61d2eb0029b513dfcb111e_265678.fix +txn/fixtures/a5d2949d14b6735be8c7e8eaf69c2c2519bc3559_1854165.fix +txn/fixtures/a5dc9bd00330f535309d9e0643f1b14eb209d6ea_1120365.fix +txn/fixtures/a5fef0435a9f27155d69151a2a0766baa27ca2d8_265678.fix +txn/fixtures/a601569ee602d390cb8852b59a367f581e688927_2233576.fix +txn/fixtures/a64c313c3ae65becb700330a915bc1ec3667b10d_2193782.fix +txn/fixtures/a6a71c9989114d5f2d2c8f6f360bb01e00e84f4a_2185400.fix +txn/fixtures/a6b104dd5656652fa1cc1cde1b401ea8c65e868f_2203030.fix +txn/fixtures/a6e291de8863cd2b15f0eb704de9c3c858aa8766_1211014.fix +txn/fixtures/a6ffd1c4fc1ed23d32f4d1c5f8936d2786a539cb_265678.fix +txn/fixtures/a75f3eb611f9aa9c9cd33e0b55bb5cb1da5fa5ef_265678.fix +txn/fixtures/a7727947178b8fac2f917d7eaf1b6cc5ff37aa1b_2792063.fix +txn/fixtures/a77481540ac4c1820e5b0a54488ef021a6e58484_2202576.fix +txn/fixtures/a78c969442f248595fd935789d783e0c00708de1_265678.fix +txn/fixtures/a7aaca3bc83b1708ea8d5c315e4fb2a36b4f4b8c_1851472.fix +txn/fixtures/a7b69d872882e315fd5956144e364bc2550fcae9_2206506.fix +txn/fixtures/a7bab63207ecbaf045dbf1ed9ffee3ca93a1a391_265678.fix +txn/fixtures/a7bb3a8e84d3497a8befdd47822777ca66041de7_265678.fix +txn/fixtures/a7d5e7a7aba47396c3e48871565105eb86e4f20d_265678.fix +txn/fixtures/a7d93f93064d7e9a9c6e82dd9ca1086083575cd2_265678.fix +txn/fixtures/a80a479537d43336cb057d26044451df4427cd04_953063.fix +txn/fixtures/a81b5ff9ac6a841103606d5c7aee49ba99d597b7_2867137.fix +txn/fixtures/a835e863fd97860a1b3bf64b95e1ee332feecd8d_2235649.fix +txn/fixtures/a8608185b6a581863a5b0ffc21f53705acf9a0a4_265678.fix +txn/fixtures/a8ab7fa2bd1c3fc851fbb5b7ffc2ecc1483ea788_265678.fix +txn/fixtures/a8cbb821ff61a22b37b1224699de072d31142f64_2206839.fix +txn/fixtures/a8cc342d394594cae45077679e440cea785f932e_1841656.fix +txn/fixtures/a8d1700c2098ba988948cb0eb1c7726fba9e4ae0_2192950.fix +txn/fixtures/a8d497234c17b71302e6c69c152e154ae6529ebe_2137938.fix +txn/fixtures/a8fa9b8b6f6ec00b1fa5a6ba63eb2f89e0b2aa27_1856735.fix +txn/fixtures/a904a43ce48b537fc40076ecee612957aa60b30b_265678.fix +txn/fixtures/a90ce7e1a1ddf8dbebe23b5b8c00e5bc2afeccfa_265678.fix +txn/fixtures/a9458ed4c58689ac3960a8c6d5efe2732f37d000_2187132.fix +txn/fixtures/a956670f73e382ab88d5669b1faba69bb6c85d49_2135809.fix +txn/fixtures/a9577cb56e3b1d2e0d58557430856a42390cedf5_265678.fix +txn/fixtures/a9599871b8c8f5bac68c17121d4bc7392846c5c4_3202563.fix +txn/fixtures/a9c1aff9846b1c233c8d58b713262ca5c79e4550_2196723.fix +txn/fixtures/a9c418bedda4da5701e994ac01bd92e3fee59a22_2227989.fix +txn/fixtures/a9d5f7e1d981f9b638585a34214ce7cacecfee59_1852434.fix +txn/fixtures/a9f900d56a144f808d7460c739a2072fb461f167_148681.fix +txn/fixtures/aa3034f397fbe6fee7c85019213330e7ec7bc217_265678.fix +txn/fixtures/aa33764c37be1a634272275976d05d8048c692d8_1835325.fix +txn/fixtures/aa41354131885b471f301100e5a614a16b21cbc4_3139208.fix +txn/fixtures/aa7aa005-ba12-4d08-935d-18ed0bc1a54f.fix +txn/fixtures/aa7d141613be95c71720e8b963c7da647f0f34d2_2221550.fix +txn/fixtures/aa82f8da1905d69a5ba853c7ac842af94ef2d81d_265678.fix +txn/fixtures/aa906769a805e6a7925ca2875cc214338f10307b_2220717.fix +txn/fixtures/aabe725582c114a80aa12a6e8f0aa8e5c3e5b59f_265678.fix +txn/fixtures/aaf7ee9e55c2a726e88b5c88aab8d305fc20d820_2236835.fix +txn/fixtures/aaf97517defc2e2db97f3012823a5d4414267976_211252.fix +txn/fixtures/ab0cd6746e5848ce4abb59b14d082a8607333937_1855878.fix +txn/fixtures/ab5c3fa4637768bd9c9f4f43db7fb14ba995cc51_265678.fix +txn/fixtures/aba2b160462cf5c546d0949568c35c7d04df5551_2227107.fix +txn/fixtures/abbf8109e4ede5fbd0a1079d195314ff927c275c_265678.fix +txn/fixtures/abd3e18d9c1672c7ab644be17ae30c921e72c4dd_1631283.fix +txn/fixtures/abd602c02af29809a0066c80dc5e7b61e9388e58_265678.fix +txn/fixtures/abe27fb52854fa72463de17307d83843d1718333_265678.fix +txn/fixtures/abede2cf45cf506a68c6e9a65cf1217afd4441e6_2188092.fix +txn/fixtures/ac225589802c9c34e3f2186461321d856cb7fc5c_1830866.fix +txn/fixtures/ac65ea0bf61157d05cdb21ee20127e4d7160b738_2226315.fix +txn/fixtures/ac698fce02d36f47b5b339ed5eedb1ba26ea2731_2779656.fix +txn/fixtures/acadfefa0956329a54adb9eb91bc155c5334aa61_1838493.fix +txn/fixtures/acb16b5cdb6fd3c8c7f322672ecb3e157894962b_265678.fix +txn/fixtures/acc3d0da8d7a81ad226de1e71d597a2318ab5c6a_265678.fix +txn/fixtures/acde359f51ed5413358f513fc0a1cfd3b5132439_2187506.fix +txn/fixtures/ad269580fbd23f6872fa7d10eee8702206bb4043_1575304.fix +txn/fixtures/ad738dc570e7c3b2c1b3e96b2e8478f9e6591db6_265678.fix +txn/fixtures/ad79beb42586e725172728a7b74845423d776282_265678.fix +txn/fixtures/ad966d73682f0dcf15be55b460863ab6dbf73f3f_2222638.fix +txn/fixtures/ada9c869b45e2a006b981f0471e53bacbb0d1e25_265678.fix +txn/fixtures/adc9f49557561027e9fa84ff12612d1d9b288d62_265678.fix +txn/fixtures/adf582063500f538fbdeb6e610190ef961f8ab2b_106421.fix +txn/fixtures/adf8ef9250b29d8fed73e95d293ab10683236a19_1574761.fix +txn/fixtures/ae3625448cac01e396fc1ead34823c142753ef9e_265678.fix +txn/fixtures/ae47696e4c1a8d8d42c42a630ede23ea5ea4a22b_2190722.fix +txn/fixtures/aeb7be2d6151d6a93a2cd0d207fb11c058e2211d_2616294.fix +txn/fixtures/aecd254cc98fbf08db88609faedbb95ec0f3e336_2211942.fix +txn/fixtures/af03bba519a9f60bdecf50a3c372ad89d3a39fd2_265678.fix +txn/fixtures/af16e6da50d584c8a010721687c3db78f3d09207_2224982.fix +txn/fixtures/afebff8c902c8e31d5f5102b38c778f92eb26676_1853402.fix +txn/fixtures/afec50a336bda9ebb2b56367e9106bb624af9194_1835503.fix +txn/fixtures/b00be288107e230caf1472d925b65e7635141122_2996486.fix +txn/fixtures/b0276762c6cba47ae691a295c3603ef0683f4a1f_1856367.fix +txn/fixtures/b061da04140fc615a93a0a41687793a7fd62810f_2195223.fix +txn/fixtures/b0719e08e8c82925aa3cc63b95223a8695eca38d_265678.fix +txn/fixtures/b0acce9e67ff496843946ec4a0c3c869d2589a26_2188141.fix +txn/fixtures/b0b0faae4c7e900b541ef9afb64662a2ab6774ca_2222299.fix +txn/fixtures/b0f5395ba372ca15baa17f42396c4237003874d4_2221676.fix +txn/fixtures/b103740823013ec127f69cd3ed5bdb92f9f9c146_2238328.fix +txn/fixtures/b141cfac180e53166d04a873d59748b92fb5d2b9_265678.fix +txn/fixtures/b20b509a4ff667b846ade548ce3748613d2ad602_55476.fix +txn/fixtures/b218bdcd139a7cf6c6fe22f858257ce29422724b_2234424.fix +txn/fixtures/b229e60b65b3cbabc79376c8bef9b6e63f470559_265678.fix +txn/fixtures/b244ad13b1ec11f5a4a542f341628dcbb0bfbea5_265678.fix +txn/fixtures/b252f2a3680a0649e9acad79001c028234000d0e_2301141.fix +txn/fixtures/b25f8636ce13e62edc9d427329136aceb8d3d635_588533.fix +txn/fixtures/b260f0c7b7a9a10335a260735b1c07dd22ac359a_1023477.fix +txn/fixtures/b29e4aa0c6ae56d47a6137b58f56543d6c87db22_2236812.fix +txn/fixtures/b2ee55dd7ea51baf9cfc845dd5885b4f67da03b1_703418.fix +txn/fixtures/b3494253f0ef28bad7ca69fc8ac69ed72b96c7ff_265678.fix +txn/fixtures/b38b3836232f206656a02b9b383d9cffa0b49daf_2187245.fix +txn/fixtures/b3ab657f670b87a34b9ff134c1a38b2a20d984a9_1832301.fix +txn/fixtures/b3bbc6a8c8603ab89b90af746e03109d2c65398a_265678.fix +txn/fixtures/b3cc3555e363a989c715925a571d148feafd0002_265678.fix +txn/fixtures/b3d260dd5aacdb5319382d353000bc15a472fed4_1831163.fix +txn/fixtures/b3d7d0209aa45cab544eb32076acfaa89cc33598_265678.fix +txn/fixtures/b3e3ae1ab8167987442836c7e819c19f60423a3f_265678.fix +txn/fixtures/b4172383e08535a1fa588c004a480fe610557469_265678.fix +txn/fixtures/b42a2e58be012e68b67ceacd5480374587bece87_265678.fix +txn/fixtures/b42cdfa63758982ee7f23c047c4af272e5c38019_2230005.fix +txn/fixtures/b432219bfd9c79bd65d80e61b0611067d27e7836_2185802.fix +txn/fixtures/b44fc5a1c28ea957004f1ad472112a0d14b408e0_265678.fix +txn/fixtures/b482790f6d484b541a42a50674aa8b34f83cacdc_265678.fix +txn/fixtures/b48ebcded3e1c2cb73cdcf75b70b8ea5652366e9_265678.fix +txn/fixtures/b49ee10e80e1b8f61cb8e921f05248887bf8f547_2210077.fix +txn/fixtures/b4a7194c9ecf535c55006d74c9fc1c752fc33d00_2206965.fix +txn/fixtures/b4f94ef949ea4075f6601e357c6ac10f8cc16b24_1576721.fix +txn/fixtures/b505236338a0a915c5d7eee2b8bf30c610da3436_265678.fix +txn/fixtures/b5237d802601416bce59112a6ef45aa37f01a798_2207945.fix +txn/fixtures/b5665b69b27e0a8a4c63c71ba23acf795e0ae485_2226135.fix +txn/fixtures/b58a57e6325836c846a67484fa7175d0a0b39316_2194907.fix +txn/fixtures/b58b03cc4cb600ecac49e60d96861d67d8131403_2225022.fix +txn/fixtures/b58fd1189fde031f8473768170db3d11e56ec7a8_265678.fix +txn/fixtures/b59bb607a0f26815c38e7c0f47c5eaafb01f18b0_1576002.fix +txn/fixtures/b5eb4ee4ade7149e45d83a9287d3d91b90488ad4_2212836.fix +txn/fixtures/b5feb69c36929915f3d24aaa79cd5786eee5aad7_1047123.fix +txn/fixtures/b61a9838065fdd20deaedd0d10b5f3df2b5ee981_2188931.fix +txn/fixtures/b66640fd98db92bc3400ceb680b901a2c3dcc9a9_2371788.fix +txn/fixtures/b66a9ec7ce284b9a22f96d97fba28228600b1b13_2225814.fix +txn/fixtures/b6b81e9ab5d516c42a7152204ad6e3b28413a1d4_265678.fix +txn/fixtures/b6e26999a2dc85430d10904249e64fe8113c081a_1832048.fix +txn/fixtures/b6f709b7dbe16143728231f44ab34890065180b2_265678.fix +txn/fixtures/b7094bed14adc8b0f2866963ccf3a8ef1f9e8a62_2206152.fix +txn/fixtures/b7154ce3c1b0551eb1fc8c35f7b6c829b2e3f34a_2232069.fix +txn/fixtures/b726d4dd2f13ddbcbdcd977f13a10573a695f166_265678.fix +txn/fixtures/b736bb09f38fdf41b08d47531534c23b76e9b29a_2219446.fix +txn/fixtures/b76596504f34fb26cb37b243df72e9e72dad1652_2497025.fix +txn/fixtures/b76c76a782a448fb5bfd14a4e08d98e36475e660_2230271.fix +txn/fixtures/b76dcdd0dea13818a4d41f338da23e8abfbe3a89_265678.fix +txn/fixtures/b7cf2485b3389767b1fca4cb91dd126d0d56cdce_265678.fix +txn/fixtures/b7d3fc01357179113939e00139a14aa5acc53155_2230820.fix +txn/fixtures/b7d6f98c38e149946bf6959d13766b691a983347_265678.fix +txn/fixtures/b7d8956145950269da4dc2215fd6f149d1261e0b_1768662.fix +txn/fixtures/b7ec07f28f39579f7f9a56ef6302fea4511d0627_2187356.fix +txn/fixtures/b83466f32657d88db928d832406a5c3e24c60ba2_265678.fix +txn/fixtures/b8690714569a88494e3ac6576d034b5b028bf8fa_2192426.fix +txn/fixtures/b8dbda1d6036163e8686f273c50f7e7d79c9cef0_265678.fix +txn/fixtures/b91c038fe6bc76b330f4ae8719a9e8c47a8d28ed_434577.fix +txn/fixtures/b95602a274d92106dacd2f1d0f22d6ac4c94d9fc_265678.fix +txn/fixtures/b95cf6fb13958e83ab2bd4795297a494b7c76912_265678.fix +txn/fixtures/b96ffb3e97e2b11b1152f6f545efd0d4bae6a845_2348767.fix +txn/fixtures/b9913a766078a8bd22e2849d1cf0dfbb39063c50_2208009.fix +txn/fixtures/b9c08c8cfe2b40fcabdae79704badf91a84eed7d_265678.fix +txn/fixtures/b9c5f7dc430b2224b37845952c235167abf6ba4a_2191767.fix +txn/fixtures/ba248607fae5fba35c2656e5b01e32f9a42a4f77_265678.fix +txn/fixtures/ba37401858f4d85da859a6de290fb3df534fa692_1852911.fix +txn/fixtures/ba76c5fbc9aa19d917509c604f25a243fc7d651f_1576365.fix +txn/fixtures/bab08f3af7dbab2fcbf82cc7a99954bfd6d6cc41_3065625.fix +txn/fixtures/bad36ca20e56895a7a76d3aef0637c4d7e9eee59_265678.fix +txn/fixtures/bafb490662615c8f7962bc795e92b79bb227ceb4_1836282.fix +txn/fixtures/bb1514b0b0bded457d58d7ed4ca33c087d699522_265678.fix +txn/fixtures/bb577e5554fac9f2bf0503accfbbdceaf0e9d215_265678.fix +txn/fixtures/bbcdc9d246f7a7af53e1683e9ee51599f1bf2513_2384774.fix +txn/fixtures/bbd4f9ecf803917a5601d4fc0d296c21c830b17b_265678.fix +txn/fixtures/bc5c462477cd240edd5e54c08047a88dd6589331_265678.fix +txn/fixtures/bc5c58d6b35a2949d0c9dd19b218762bea81142c_2199653.fix +txn/fixtures/bc64ddd8115ea6afeedc32e0c1ee0215c5fbedb3_2221746.fix +txn/fixtures/bc735a10de64a96e4fdefea1b46ce593a5f90d55_1575236.fix +txn/fixtures/bc80522459895a00185dff33e118fca372c4037a_2215988.fix +txn/fixtures/bcab39533f49cdbf55806cd02dbe81a66beaeffc_3484135.fix +txn/fixtures/bcaf8bda8d006cbd2a990bab60b3d4b6979b465f_1836368.fix +txn/fixtures/bcba66afa8dfed36da2c46f98fb637855f1936c9_2134503.fix +txn/fixtures/bd3bf70151801adff158e81f3857f5e962630727_265678.fix +txn/fixtures/bd4bcd0580be0555f68901dac0120f350b41efd9_2233072.fix +txn/fixtures/bd546efe97600e94cff93a9ea2ba8444b8119db6_2215964.fix +txn/fixtures/bd65963d457bed46fb973b89e14a3fca39de6d4e_2200564.fix +txn/fixtures/bda25c4707cd2eebe4f419c1c9dd471d9efc5562_1856174.fix +txn/fixtures/be03eae707522c8aa66619f3d4b6a9bb8de56c95_1831743.fix +txn/fixtures/be54effdb9b437d6556a495352edb3fba9c1b949_265678.fix +txn/fixtures/be5837c2047a37f4e55c4270c7fada6411cd4332_265678.fix +txn/fixtures/be7d3d1be5f3ed8990bd26878b4e0797ddc3aa90_265678.fix +txn/fixtures/be90eae5c8a7d64886bbc104e7a5ee7ec0b63317_2237541.fix +txn/fixtures/bea4527b6b220cca9b8e72d94abd55abd7e3cd36_1834807.fix +txn/fixtures/bec0b8183f26795594296e34a5a661d3dccdbd95_2571163.fix +txn/fixtures/becb6dc2e088fc6dc1026e6aec37acc1d6cae62e_2226759.fix +txn/fixtures/bed0d69231abc22caf31aafd0e118a3209d4e047_2186395.fix +txn/fixtures/bf32aa3cfe329f5c7b09b9019ef5e10cc5d1daa9_265678.fix +txn/fixtures/bf38557317a51fd1cf28a166cd03281b4faefe58_1855509.fix +txn/fixtures/bf3e8690417c9a589b076490af2b71065a167000_2218057.fix +txn/fixtures/bf528474266fcbe2c69ae841513d2a954bdfde15_2709424.fix +txn/fixtures/bf67cbf0a7bc9493111e07169d09ab78040acac8_2915173.fix +txn/fixtures/bf70c3db4ecc7db10de91aec692078da50bd8612_2977975.fix +txn/fixtures/bfb204da806798a7df5c644ed0673e3f47f3df57_1856450.fix +txn/fixtures/bfb3e350da06e5a312781b3537e13e99a6c38c78_3002710.fix +txn/fixtures/bfc3633bdff93992fa40ece7a0f2ff4af13b7114_265678.fix +txn/fixtures/bff99fcac94747973b69868afd6e91e25037e3d2_1849276.fix +txn/fixtures/bffe818cdd14dd7fc9f9ca02d976b6f71b6accd8_265678.fix +txn/fixtures/c00520e8914e5dccc9c87c106f42f742de3ec96d_2117728.fix +txn/fixtures/c00520e8914e5dccc9c87c106f42f742de3ec96d_3421158.fix +txn/fixtures/c042be7053c9a4c5c8a1feab4252e154af566ee0_265678.fix +txn/fixtures/c075c3b2a659cbf9e0d2538f59aa7df0dbad149d_265678.fix +txn/fixtures/c0ac5a841d785e67e47aca17178ceade113f4684_2141164.fix +txn/fixtures/c0cfaba86d9bf1b8c74e16b8312c9db515c626eb_265678.fix +txn/fixtures/c0ee97b71789623f863297bcbe3e3c74fec72a44_265678.fix +txn/fixtures/c156072b35c0a553878a01779068c0a923bd06e1_265678.fix +txn/fixtures/c17a04c4a8076bec11bfe18f6e744c8e832cf144_1836083.fix +txn/fixtures/c192c35b33a66d1972cacc31203ba039ef6b6ce1_2217672.fix +txn/fixtures/c1b52cfb2863dd6acf8c34b8b705dd8ed0f2d7dd_265678.fix +txn/fixtures/c1c6d12e6c5716a12184061545754d2bfb780cb4_265678.fix +txn/fixtures/c1db4d942a10e54fabeacb15073d53155e81b58a_1836186.fix +txn/fixtures/c1dd5672bfa76c2324bf5922af62a3225d49b5ec_2221792.fix +txn/fixtures/c1ded97b3bc9f6048e0b4e6421ee9dacaf77902c_265678.fix +txn/fixtures/c1e01de7a9770959429c66b9ae579f82fe398573_265678.fix +txn/fixtures/c1e09bbfc88aebe03940a5f15dbe71b79165a1cc_265678.fix +txn/fixtures/c1e2c857a92b2ff5f1aa5e51a20693b91197296e_2217880.fix +txn/fixtures/c1f2b190c3eaf4fb93927ad251d190b88f1c6677_265678.fix +txn/fixtures/c1f609463069ddb6a8afe08b2bdc34136d31ab0e_2217638.fix +txn/fixtures/c21a5c0d662d100804ec121e3821116104e1999a_265678.fix +txn/fixtures/c22980233dd93f6284f7ad0c28807230921f094e_3000928.fix +txn/fixtures/c296cc9e144168b08d78e01c77209ffb4ccfcdbb_2185170.fix +txn/fixtures/c2af7a65c9310c7e5b3b4d5b3cb985ca6b025cd7_2774990.fix +txn/fixtures/c2b2968bb09dc71bf2639298b41e86ba0d187850_265678.fix +txn/fixtures/c30f224e9a30678643e784cf1fa996b14f541fb3_1561270.fix +txn/fixtures/c31175fb55f752303d59b3c0612c2c775657924c_2133062.fix +txn/fixtures/c311998190f56976677a90cda24585cb9fe186b1_1848259.fix +txn/fixtures/c3319fc3a5c525a7612fb139ddd49862e01fd909_2766868.fix +txn/fixtures/c3f01a172cbca80f2e053bd2d9c1271503bffeb3_2235759.fix +txn/fixtures/c410b6825e8944c132f2b41bab2789c6abbf925c_2559509.fix +txn/fixtures/c4346ae25821239908a8f6e74a0e29c1af5a339d_3006139.fix +txn/fixtures/c458f5ad466f17ed4df38cbd4b65d1b14c0436bb_2139657.fix +txn/fixtures/c46cc5e2c437281feeff1c2f2c16e06d83336b7a_265678.fix +txn/fixtures/c48275dfeb009b479984a34963e55416df725fe0_265678.fix +txn/fixtures/c4b966bee83541361e68aa461893e6b34077e3fe_2226531.fix +txn/fixtures/c4c9c26a56cc116d8d226b573f30053a2a240f02_2134181.fix +txn/fixtures/c4f74ded3df9536d06e38374686a8cf7222c209a_1851941.fix +txn/fixtures/c52ea9de2ecbca40898afbbd7f98d36c3cc267a9_2201925.fix +txn/fixtures/c56639f7c3b663bd35a2f6c7de191bde5f9d777e_2230294.fix +txn/fixtures/c57bc335789bd447076e33771075e833c72fd796_1848503.fix +txn/fixtures/c585119403b03894f99ab0d0041df9448e929205_1850781.fix +txn/fixtures/c5d3a9f3a922ddb10f3748f1deb75cefde37176d_2199850.fix +txn/fixtures/c6041334df8c6bc91ee18ecd3e175e53348f70d6_265678.fix +txn/fixtures/c63bec47eddf7ddb6b416d6928e3443cdbc611b0_265678.fix +txn/fixtures/c68b1e78bc3f4b90026683db1d5cdb1b730bbc89_2202651.fix +txn/fixtures/c69c8d38cb12c777675383f75d318313a1ce31b3_265678.fix +txn/fixtures/c6d66b4db956c98df4852b067b67c9d5b9da872c_265678.fix +txn/fixtures/c6eedc180a6c3a0992431882164ae76f0fee35d6_2233755.fix +txn/fixtures/c75fb6655e8589277a373c2a651d8dd6363e5349_2237188.fix +txn/fixtures/c82be4c1bcdde1c8ad7bcc20a84ce7ee26a5112b_265678.fix +txn/fixtures/c83d21cf81c61a0aa42c615229d689dd6b8440c2_265678.fix +txn/fixtures/c8658cc65f128f42d665f3efed7b99c270ba47f4_265678.fix +txn/fixtures/c8bf0f7748102bc79be99ba1c67863388557d17b_1856561.fix +txn/fixtures/c8f564d14b551967ec51844f0f3e1e2722082941_265678.fix +txn/fixtures/c8fd2b6d8fcf9d207a5b1345110bbf89bec3a9a7_2999751.fix +txn/fixtures/c90721129f2a47a8f80b148c39456d761f4559a1_2223302.fix +txn/fixtures/c90c6cea3563435591f4045003e8a51aab847076_1835612.fix +txn/fixtures/c918bb96ff441a0d714b9462bc8ba30877e26eaf_265678.fix +txn/fixtures/c98ff2bf209d7d9a17547a7542f36499045f4518_265678.fix +txn/fixtures/c9938c58efc85910ebc637c1d5135195a7fe6d10_265678.fix +txn/fixtures/c9d947883a85c84dbcf98bf6baba3d01d41bdebd_265678.fix +txn/fixtures/ca5d1f0ee58dc10f75f175306ae9ff0ced47edf4_1175377.fix +txn/fixtures/ca6b9e098bf9489b685d017e2c01c1b96f685188_265678.fix +txn/fixtures/ca8c90210b052d6888bd851051923351fee16be0_2208874.fix +txn/fixtures/cab41c4453c9760b32a6015be5823cce3750b032_2009105.fix +txn/fixtures/cac611f2933c12018849200153b147ceecf383cb_3220725.fix +txn/fixtures/cb0b8581bc83230bd4d0875a85f184eef626ce01_265678.fix +txn/fixtures/cb5f3412432a98e54ccd339d2b24b06e459c4fd0_265678.fix +txn/fixtures/cb7c310784c6bcb3830404c12f4fb4ce9a84b327_3000240.fix +txn/fixtures/cb895d89e77c2becac6bbec10e425bd0c8b5bed2_2205890.fix +txn/fixtures/cba5f8a65b322604233a840569cf62f80d258896_2219578.fix +txn/fixtures/cbacada66597bfddd4adcec50d4ad2db2c6cd893_1576274.fix +txn/fixtures/cbf118d4da64c0a96778149b1a8c16a193b96168_265678.fix +txn/fixtures/cc3686dbf8bb4cdd514dd16d694d7cbbf25988ff_265678.fix +txn/fixtures/cc508a9716a6ade28e2ee1f673df5acb8e9688b8_2989411.fix +txn/fixtures/cc5d315888cd940887fda54fb90ce37f0830a083_1835805.fix +txn/fixtures/cc63407dda8f3c3c3d99b2c662e6fe9f3fd041c8_265678.fix +txn/fixtures/cc8f860b8918ac09e78cda014b53dfc742745e80_2491012.fix +txn/fixtures/ccc9bf0d22d6f4022ea085cb76f02276a9083d2f_265678.fix +txn/fixtures/ccdace62a98affc39a5e3270edaf8159d35a712a_2216353.fix +txn/fixtures/ccfe521404a8a12e4b25213d14ff9d7c24e9710d_3199336.fix +txn/fixtures/cd1e9781e34a8ad9bcb2e91c3044b7cf567aee52_2200967.fix +txn/fixtures/cd292f978029dba73b216853f237d2cde760f24e_2193014.fix +txn/fixtures/cd473f23d80528c126a6adae67dd4132d9b503cd_265678.fix +txn/fixtures/cd519d1b2ddadcf61a520aac821870d498a52c4d_265678.fix +txn/fixtures/cd54f58f05fc2ac4f43456379250e88507d82833_1833087.fix +txn/fixtures/cd6d45668c14f68e45270e201e72eb4a9d817fb4_265678.fix +txn/fixtures/cd7ce7e0aaad913b48376baeaa63f1304b4f8645_2236699.fix +txn/fixtures/cd82349887c229d639ed5d2fcb4900dc62879b57_2188694.fix +txn/fixtures/cd8c01ab2eb7b5e3fd3a63c82c063de0f3c4be75_2997918.fix +txn/fixtures/cd9706a1a24c37cf52cc006240c98aae5bcf327f_265678.fix +txn/fixtures/cda727e9e38a7d9e8b6ff1cc018c838e1d608766_2201875.fix +txn/fixtures/cdc18d1d94b88f93be3323cdae2c336ea10787ea_2235825.fix +txn/fixtures/cdc4886c7e152b2f8cecd99f0e06e2242281db87_265678.fix +txn/fixtures/cdc58e567cf94ca25fd31398804c836a77d974b3_265678.fix +txn/fixtures/cde0aba3dc372cdbca12090d45e4348fda878f8e_2234448.fix +txn/fixtures/cde816b780419a4d58d76eb9d8feee7e2fa2eea5_2230623.fix +txn/fixtures/ce0dde03a4251c602ee9789741a53939539358bd_265678.fix +txn/fixtures/ce151e697f7e344c882b2e51eebaa96940fb8f0f_2232842.fix +txn/fixtures/ce493409116b3034968abb608d798baece7f553e_1847499.fix +txn/fixtures/cea9e470d627d36509718775fbe4b2585b9d44c1_2679940.fix +txn/fixtures/cf32965796a0889bb0629750f8048acb5226d0e2_1856051.fix +txn/fixtures/cface980aaf3277ca198f5929758a342ed9b5ee2_265678.fix +txn/fixtures/cfd488bcca7b65a46bbf40b3032aaf938b834b57_2137035.fix +txn/fixtures/cfedcab73fbc13b206765d606fac26c7044e028f_265678.fix +txn/fixtures/crash-42295e53abb4382e2d579d46dcb1b20e63f030ea.fix +txn/fixtures/crash-6aa10f902c19e5597dc9fe11011fc737554ffc51.fix +txn/fixtures/crash-e3eda019052824e98491250efb7219598227427b.fix +txn/fixtures/crash-eb9e4a94882cda840fa4d8d8a390564ad7443ee2.fix +txn/fixtures/d003f9a49feda90e7fd377e6080e3ef516d9ced3_1856840.fix +txn/fixtures/d019aafb62dc199dfff9468ca530e954585eec8a_265678.fix +txn/fixtures/d045c725a267e9e473f4cae7247d6249e240cbb6_1833571.fix +txn/fixtures/d04dead659937d163a1d59b63cc547a0bad7403a_2842250.fix +txn/fixtures/d0515172499121ac3c4a13c5b0a9e3e60eeac571_265678.fix +txn/fixtures/d06bb4ed4be81631209bb51839a79b2a449a95e1_1829555.fix +txn/fixtures/d07b9d0ebc285fb6446aa45e14c69972a7e42cce_2842091.fix +txn/fixtures/d07c388a409ef2e239e7fbb38a1974564a1efd28_2990044.fix +txn/fixtures/d0a69ab08faa34f8e68749b22ac3ab18db13b85a_265678.fix +txn/fixtures/d0bc26bbc043d91e92fa6386b54557347ff4b971_3052099.fix +txn/fixtures/d0cf6f61498209b1e69c58a0f4c2b9044e2637c7_265678.fix +txn/fixtures/d0f2be71036a256037d18699c4d4e3eaa402d853_2217091.fix +txn/fixtures/d148157479d126e92c60cd11e9012b3c82003139_265678.fix +txn/fixtures/d1e8c681573c2c572eeb1e6321e3349e7ef51031_265678.fix +txn/fixtures/d1eb9cbf0335e1067b6c603c5123b7700936f77b_265678.fix +txn/fixtures/d1fc16a60abc1688286e7dbc07c1cea689c1afce_265678.fix +txn/fixtures/d218932653918941ac3e0cde2e3b5d76360e70dc_2994121.fix +txn/fixtures/d21d9912ffddba17bf1b82589dcddad494f4c496_265678.fix +txn/fixtures/d2234d4fe42a95d545d1e150f225aebde632e1fe_2140712.fix +txn/fixtures/d24634b18fea9953947e1709c3597e34c44d6f7a_2226974.fix +txn/fixtures/d26e49b9fc387cd17b56bc844f5dc641b331ad82_3243370.fix +txn/fixtures/d27324b608042c32b4951e9af57e7ea29aa1cda1_265678.fix +txn/fixtures/d27e321aa6b1cc8f2599964298ea62a23fc63f17_2199283.fix +txn/fixtures/d2c0d0b9841a67a03f741cec08956b31911856bf_1842729.fix +txn/fixtures/d2c26aa275901b3b99378d52c51e1592c1c23bee_1839239.fix +txn/fixtures/d2d17b5bf0f89fd216a7555ce52764873503aff5_2910128.fix +txn/fixtures/d2d392281aa3c02d60b4bcb45953778cb335bcf6_265678.fix +txn/fixtures/d2e761165a773da374c28c98018a37ca82ccee6d_265678.fix +txn/fixtures/d2eefb878243b325b5f36709173167cb90dbaf00_265678.fix +txn/fixtures/d3022fba4650d088c5e41446263b702f84bfc132_1831655.fix +txn/fixtures/d32a1b05817beae22127ce6fe1b9629233eaa148_797948.fix +txn/fixtures/d3789502d65a950112283d31580968b381da92fd_2222875.fix +txn/fixtures/d38e520cdf0dfaa9c740ecf23ecf71282814583d_265678.fix +txn/fixtures/d4040cf3cacdc0abc56fced29eebbe954701fd1f_2201692.fix +txn/fixtures/d451cbb684d0c8cc609dc2e56bd64148e51afd8f_2207320.fix +txn/fixtures/d45ad4066b83dcfce4f76815c37d688554939ada_1846976.fix +txn/fixtures/d47c9f6b2d6dcf6682cb1ad4fc2cd659d065ed75_2139943.fix +txn/fixtures/d4a36941742242d5ed5242bf2bc73ad10bbfb383_265678.fix +txn/fixtures/d4a5ca366478576979ac7d454fa9b3a82e411642_2892039.fix +txn/fixtures/d4af641fd573e18924936d96308e49ebd849da9d_2138001.fix +txn/fixtures/d4ffef5761857e1accd03aea113f303d13f956de_265678.fix +txn/fixtures/d51dec2e5afd8e8d70df365157d41da3856027f8_265678.fix +txn/fixtures/d557e5594fac29c13e7099db40cfa8e0c04e63a7_2534225.fix +txn/fixtures/d57806aa702c01c24536155827c9433f45f068c5_265678.fix +txn/fixtures/d5954881b2be285da89643d9a32b78da1940fff1_1842443.fix +txn/fixtures/d5dea7c1270fe458ac0106a37d7b3677b3397b58_1851366.fix +txn/fixtures/d608421f8e583e766d30ccf57edb4e71c224a99d_2137433.fix +txn/fixtures/d60e218900b3d0399145950c03b9e7af6759a66d_265678.fix +txn/fixtures/d64598aa423d5e4d513e43b8d5942f4f70c39fb0_2232640.fix +txn/fixtures/d65476b929e61cb7210e51e0f1b69ed0ad694fd7_1840889.fix +txn/fixtures/d6644312b1b53f4e870f12331edf4e72d35eb963_265678.fix +txn/fixtures/d67f442716145cf5645900048f5d35466cc88ac5_1631585.fix +txn/fixtures/d6b6fadd854ddb28b1ac11c039b52632351b5d44_2234036.fix +txn/fixtures/d701757011399fb1931ec091e274b3ec98918632_265678.fix +txn/fixtures/d7c578262cdf2afd6e748af130037c9db7716a9a_2223590.fix +txn/fixtures/d7c5c60d776e0404f1a9798046e50968517d43d1_1838409.fix +txn/fixtures/d832625103030d36a787c6007598e6f7fb692f11_2139919.fix +txn/fixtures/d88b447d0e13d7f110967ba3626f8ca518611e2f_265678.fix +txn/fixtures/d8a244b826d7763acc8a6507ce0d85af1ecef208_2134273.fix +txn/fixtures/d8a8614f4189e62eb2530144e2de0c84a258203b_2136352.fix +txn/fixtures/d8b734400408fb9807ef8d5600f630d779deb29b_265678.fix +txn/fixtures/d907c1029bcdcfb8e2cd95e40111e8328bfd9986_3193374.fix +txn/fixtures/d982991cdb8f20554b0863f33082bd8db6c4b52f_265678.fix +txn/fixtures/d992f06bad1c38a19359a816819ecab86de1b999_1857034.fix +txn/fixtures/d9aa02c302851c9a420b315f8c9c1af5c8e6648c_3206196.fix +txn/fixtures/d9acea42d3de342b8eec3577a62390cf57815fa8_1838018.fix +txn/fixtures/d9c0eb36ba8454a457ab8fdfdcde975136b59b09_2214471.fix +txn/fixtures/da2d1bcca559b099a1ef0fa36af6a6104b324521_2221398.fix +txn/fixtures/da35f8b205a9d5ed3afd48ed032ad77ed63fb3e8_2231412.fix +txn/fixtures/da3b731bff89d880fdf1279c23ad1184e35bc6c2_1286635.fix +txn/fixtures/da65b41f9652fd15b09d58fc502d7a4243104047_2135718.fix +txn/fixtures/da6b4a8a98d554f0ae230a8a3c2c13d3b6075e4f_2435227.fix +txn/fixtures/daa97727e7d5748b2a188334469154a8b7a18992_2998094.fix +txn/fixtures/daac26c2fe7c40ca7556d351e1a87dcfa85dde5c_3191897.fix +txn/fixtures/dab2655eeb2e7e99f65c094e5088fb6c884cbf9e_265678.fix +txn/fixtures/dab2b565b48b3b0f7a7c4b938fbeabcc20a6d7a1_265678.fix +txn/fixtures/dab489e0347ffc2452ee135567b76d1955200969_2222499.fix +txn/fixtures/dac5792b9132d855121afe8a8e19c61ac776dd42_2137545.fix +txn/fixtures/dae43c79da7d10b3e83675b80ffd55d14d1b8c5a_3200465.fix +txn/fixtures/dae7aeec32213220f68a6d56b64625d5ab0426a3_265678.fix +txn/fixtures/daea754f668170f42ae2d5fb4e8a62ba4ecaf2a2_265678.fix +txn/fixtures/daf44b6489f5da2287fca09fe119b03b65e36d44_2229890.fix +txn/fixtures/db12f53b0f248b7aa3a3997f9dbf4df3a28ba163_265678.fix +txn/fixtures/db2249fb04f221dea35e2e3a53da96920095e4f8_2135961.fix +txn/fixtures/db51ea9e8886b7d952adf31e9b999301c02d7fdc_2220084.fix +txn/fixtures/db5971c10cdd4cdecb9895d9f2e28020a7d1514c_2224115.fix +txn/fixtures/db59cdeb7f378160ef10daacd60aa9c322976c76_2140887.fix +txn/fixtures/db7bf6a029b7afb9e0be1fdab7aec1bda4669095_2188604.fix +txn/fixtures/dbacbf69856d061396061eb9a3f7bbe3cf50d592_265678.fix +txn/fixtures/dbcd953a1de4f0c8fc23b5f4d99c1211b5c177d8_2215031.fix +txn/fixtures/dbe006a291127f1088f04191c5488405a6e6581e_265678.fix +txn/fixtures/dbe4d8d57cadd97968d5fae8859c867bdff0e2a4_2201580.fix +txn/fixtures/dc1ec0a63c4f7e278ccf01a282dcca8c48fb07c5_3038936.fix +txn/fixtures/dc2b838fe1bee0d0a9de2017f86728580d0b7e79_265678.fix +txn/fixtures/dc5d4c30d28fa5f6c40c70bfa905a2008a36e8a1_2135176.fix +txn/fixtures/dc79bd4f81d95263af477b6cd6caaf3c6e5a9ec0_2215583.fix +txn/fixtures/dc8b9f28a63b3f0215dec3934f016d0bc4f8dc5f_265678.fix +txn/fixtures/dcb9b39a8b6de728f368f3915c77345117ca22e4_3192549.fix +txn/fixtures/dd59f3bb3afc532e078305e56709598770984a69_265678.fix +txn/fixtures/ddbd7995041398f16fff5edde9557503b3c4cac3_2911561.fix +txn/fixtures/ddbea25608aeeb6dd9fc4e29f72ac1fbcb1c2231_2234629.fix +txn/fixtures/dde764d9b8cbf56bab89dfe3d6932350c2579536_265678.fix +txn/fixtures/ddf726d7ca1ede2d601da9ed86ff81fdca5e0b91_265678.fix +txn/fixtures/de1a422e9adea7835af1e34a1c170942c3f5ad4f_2218209.fix +txn/fixtures/de2237d441e021251abb9ffcb9028a655d14f202_745641.fix +txn/fixtures/de4ff0c6c28f94b9f827b69ec65ea6265333b11f_265678.fix +txn/fixtures/de57f9929afb10f70adc2ede00e8a3724f283e59_2205554.fix +txn/fixtures/de753577f0db9019d4f474c79b0fb715e765c0b5_2188219.fix +txn/fixtures/debb263f73ff1ef29f4b30f45468c6c0a6b78631_2133728.fix +txn/fixtures/defc87ccadeccb8f59acdd89f4673130395245f4_265678.fix +txn/fixtures/df3bcff81c202bc1fdc14567f2d24bf6888e4424_265678.fix +txn/fixtures/df419995bee5356ab3c9c0b32c13a1d54f198e9b_265678.fix +txn/fixtures/dfc4e91f6924adb421b44c8a311c4bc1a0d4dd90_265678.fix +txn/fixtures/dfc9a4268f942a654738d31e68d8b352fdf6ca01_1839690.fix +txn/fixtures/dff3904e0f608cd955a4904a7fe09dff98638b21_2206890.fix +txn/fixtures/e00ca6343f9bb435af5873e8fa398ad270aba864_265678.fix +txn/fixtures/e027057bae1eb010f91924ba3887cf1cd0582e76_265678.fix +txn/fixtures/e02f153c35ace6df066b7d545947ffe10a05db17_2138490.fix +txn/fixtures/e08484341834df5bd92dac819b28ea8c213130cc_2137149.fix +txn/fixtures/e09b7c6ad5572e28a31ebaf0248de2cbd029faae_2190988.fix +txn/fixtures/e0b50c9e64ddcf1333cdf66ce4a073e3e503cc27_1846044.fix +txn/fixtures/e0cee116100cc2ab1a878fddd7ce351ac2530552_265678.fix +txn/fixtures/e123bcd0e0412c7af25cbc7b2c3b3f93959b2d1f_265678.fix +txn/fixtures/e15471bd95ae1dc94a9fe8ed2f1a98c629d7237f_1852539.fix +txn/fixtures/e183dcb487378b1f75beea0dbfe290a00a5ca145_265678.fix +txn/fixtures/e1cd5ce2265d6ece11e3abf220474f0afc4e63b9_265678.fix +txn/fixtures/e1e00a488de829d5ee59ab8efa2816990fbf2491_787775.fix +txn/fixtures/e22b1c1ecb1a3a9dfe430f77886a3c98d701d889_2205667.fix +txn/fixtures/e24432d2ecd7178cf39b446774396420600bbbe3_265678.fix +txn/fixtures/e26592b4f9225feff17bb6225de8fc338d940ec6_2231012.fix +txn/fixtures/e2916f5512d6d1c6fd6b315324899aff55cd375e_2231940.fix +txn/fixtures/e29593df28ff95101d9521ab7be574e17a7575af_1844412.fix +txn/fixtures/e297d0ebce4495e6c865d011cf0a00ad973d905d_2225749.fix +txn/fixtures/e2b8513ec43c240855f8d68ef048e401dff2eaf6_2199918.fix +txn/fixtures/e2caaa961ea02c52430d673e0a6f2de8a126784a_1658208.fix +txn/fixtures/e2d2d64a868f9e791228517f65d4478092daa1e6_265678.fix +txn/fixtures/e2d2dcc0569bb9e6b3fcdfe870d442bb93aab252_265678.fix +txn/fixtures/e2d4b640d33094c1d31af75ca76d21f5720252d3_265678.fix +txn/fixtures/e3390ea8feb73c4e5d94fa6119c7cf7eda070f5b_265678.fix +txn/fixtures/e393e0315b78cf99351f39a09778a821d4894476_265678.fix +txn/fixtures/e3ab56a7d81eb18d02984db8d7843702c22f8d36_3151515.fix +txn/fixtures/e3d6e8606ff1ea356a66ed8686d7a3eb3dfb1d4a_1574691.fix +txn/fixtures/e3f41ec09c173f542b66942448d9305b7a2dd3bf_2228453.fix +txn/fixtures/e40387844fc1a98715f686caef8a43d790c4425a_265678.fix +txn/fixtures/e40b8950d4fa05015bb55eca6844516f77f7e5e0_2941208.fix +txn/fixtures/e421f19abb1e9b6e7674643631687dfab1f9b847_2223253.fix +txn/fixtures/e4292a820e3b9a77b4f3104858ab74685ceb2606_3744127.fix +txn/fixtures/e42ae069b62626e3de8109e8dc4809551e68bd34_1574854.fix +txn/fixtures/e4392e419498ecb05ac36f83e3e74a5c60c0526c_265678.fix +txn/fixtures/e4473e9683d3b5f92fb260375b1a63793844d5a6_265678.fix +txn/fixtures/e447bfcf38d7be9d28c994fe8cbd3ea09820acc5_265678.fix +txn/fixtures/e4517f1093f03799afb5f004881dfaabebab452a_265678.fix +txn/fixtures/e472da2aecaf4bd0fc77335a0e3463b52236b231_2220258.fix +txn/fixtures/e48095afa712cd8ecd02038e6330edc50f4133f4_2192285.fix +txn/fixtures/e49734a3631e43b94e5529d5b98d13398959394d_265678.fix +txn/fixtures/e4b92637e55a1dce50da7fcbfcbc14953f7a4521_265678.fix +txn/fixtures/e4fd728ca62ec5bce2360a8d354b8cb002cbb0a5_265678.fix +txn/fixtures/e52d51ce0cfd30e401db4051cdbd3fff6f8a2804_2964935.fix +txn/fixtures/e54e613fb6cab91a508bda54fff4d5ea2e238ee3_1777641.fix +txn/fixtures/e55cf56410eb8290be9d64bad9f1e84a56d8ea15_2141114.fix +txn/fixtures/e5afe05e58c2cd6069c2025c8e7629dab5855eac_2219049.fix +txn/fixtures/e6380cd808c846cb6e181c6d4131b701f6be667d_2217256.fix +txn/fixtures/e64213b2ceaf5d020ba7d09595e841a44bc2c0b9_265678.fix +txn/fixtures/e64db73461d71b598c0c80331aa7333b43ad2753_2226018.fix +txn/fixtures/e66c2d91f77f4454284bb4b2692876393dd14584_2235915.fix +txn/fixtures/e67d6f2aaeef8bd379d31bfe5c215aa2bd14117e_1852174.fix +txn/fixtures/e69c5574dfd0725d46ff5298c64c536b65abacaa_1834145.fix +txn/fixtures/e6acc1a474b1d5e4667171a81672475cce455dc7_2198574.fix +txn/fixtures/e6e7c57455958c67bb46fa64b328b23b45dc9591_1832917.fix +txn/fixtures/e7079659d3d86799b30f57ec0084d9f623baf1ab_265678.fix +txn/fixtures/e717efdf1f1e228b80b4be9881ad6ab31e090daf_265678.fix +txn/fixtures/e75142d356abf68b6df0310b387da6faf9201fdd_3205374.fix +txn/fixtures/e76e543daaeb41fdc596e346e81c2b956d12ce35_265678.fix +txn/fixtures/e7c735f9fc02a6f3e19a6037d7c116bb33967dff_2226400.fix +txn/fixtures/e7ea7ace535e604a8e6ee07cf791292490bd29e3_3882152.fix +txn/fixtures/e7fcaf588511d4df2cb28332a5e921865c38e867_265678.fix +txn/fixtures/e83c152bdf596d886d2afef1561a256a66b34f1a_265678.fix +txn/fixtures/e852802fb52344637279d37a5a04cefeb62c5b99_2325257.fix +txn/fixtures/e8a085aa17da2b92a692ba51e8f6ea887e9a38d9_2222062.fix +txn/fixtures/e8b60fde5331ac70a2bf831fa0cab4a3e1d2dc26_2471891.fix +txn/fixtures/e8e647c255e74eadb162a0d4912753163cca983d_825646.fix +txn/fixtures/e8ea5b9b7e2cbe6aa53f0812c4470942dcb9fb78_265678.fix +txn/fixtures/e8fbf185dc68efcef012fea41848763e707cc413_3201250.fix +txn/fixtures/e938ca42a183f2f7f781733b5ebca3221c022915_265678.fix +txn/fixtures/e95c9ed257223edc91c4952a2239fe1efd4c34f0_2202968.fix +txn/fixtures/e95f75b80b04ab4c4fe6fd9e06c40597ad88ee8a_265678.fix +txn/fixtures/e98937d918fb2a918901a0d04de498fc209a8dc6_2195134.fix +txn/fixtures/e9908a2dd2428cdcf706d496218b3faa7d58038c_265678.fix +txn/fixtures/e9fb4469d21709e365b03f6c3012d77196ab3859_2214787.fix +txn/fixtures/ea209a40e6adceb80da9f190c175b95b2f80b8bb_2189752.fix +txn/fixtures/ea28d017f9170673a66a1cf449de0059bc0b6706_265678.fix +txn/fixtures/ea4712553ea96d1145b4c66f12f7cb29d1aca394_2140488.fix +txn/fixtures/ea47c21321d68f265c79a0acc1294acc43076971_265678.fix +txn/fixtures/ea57e9f463aae3278135e23c73c10d5691ed64e8_265678.fix +txn/fixtures/ea61f1835dbf6f41385197459b9396f66e3af963_2210014.fix +txn/fixtures/ea75d3cc5faa947e25a59672c6ae39f1bd92384b_2197391.fix +txn/fixtures/ea94563416e931ab22d76c2105883e67194496ba_265678.fix +txn/fixtures/eaaef39d073d66ff03380a2684a983874c567c0a_2230534.fix +txn/fixtures/eab33aee31ea83749d77e6d3c21cd4af49e5df84_265678.fix +txn/fixtures/ead2c462f0a037bf74636ec05b13acf108558e08_265678.fix +txn/fixtures/ead9a360b9fe6cbbb5cb355b93fab0688aecbdf2_2371838.fix +txn/fixtures/eaeb369fbefe02715d92644aa5555b0b239d6446_265678.fix +txn/fixtures/eb2be78abee3f230175bf90adfc000d527692517_2228095.fix +txn/fixtures/eb99c22a65fe496a9bf60d8da27c265caef8bd66_265678.fix +txn/fixtures/ebf841db046ca9c4a57f90cfca539855eba0977e_265678.fix +txn/fixtures/ec3d8f2c5948b8568d9849740793dc2d9ab84515_265678.fix +txn/fixtures/ec477bfaf09a23861b6ae6a78cd575bc579e9074_2213622.fix +txn/fixtures/ec555ca263807b927cefbe3b4b6756abc3b0698a_265678.fix +txn/fixtures/ec67988ceacde2ba12121488b90838b885733d55_265678.fix +txn/fixtures/ec90abee6109cb2a03639c6983f59c7558d2fb64_265678.fix +txn/fixtures/ecea32e811f3ccb00fa2f7fd216e683a3015e9ec_2220494.fix +txn/fixtures/ecf1ea8b73d75324afb0fa42a3aa0df802d51f31_265678.fix +txn/fixtures/ed2369d375258e5aed27274afd39ae59709a4f47_1829047.fix +txn/fixtures/ed2ee4843ce3d3f1bc21bcd8bc1081e3baaa8ec8_2134119.fix +txn/fixtures/ed393fdfe69e13cd341174ea8cd4e53fbb17148b_2192500.fix +txn/fixtures/ed7aa83a7b4bbca017c1d0fce72fa1f2c188d88a_2224027.fix +txn/fixtures/ed7ca378fd105cfa94609a66fed88f379bc32a88_2184746.fix +txn/fixtures/ed90aca78589345e84dafbd47447aff7dccf9f87_2189089.fix +txn/fixtures/edad747b6109c0ad6efa1db8b5460451b5d8b3b4_265678.fix +txn/fixtures/edbbdf723b0be5c9024668bab5779bb025a807a8_265678.fix +txn/fixtures/edee0cb5d4fd6c17bc45502ac9378fa9b417df25_265678.fix +txn/fixtures/edfc316d72e5ba6281912b939252adb25b4d90a0_2233136.fix +txn/fixtures/ee2ecce434f7c18771c893900e8740f44429f544_265678.fix +txn/fixtures/ee393422c6408be400b7213945089e8bdf6b8cd0_265678.fix +txn/fixtures/eeb47333ed17d6aefb652142b95698fa502d3921_2132994.fix +txn/fixtures/eed260fece1bb565257de227e42d5291dca50d1c_2209683.fix +txn/fixtures/eed3a02fe968e87f86c223081fccfa6f375918cf_2207167.fix +txn/fixtures/eedf4d2a413d32ec7b1d95a019169b3299f95883_265678.fix +txn/fixtures/eefe9c483808f86de2413343ebd768b9fe88e369_2187026.fix +txn/fixtures/ef1bc683e28b16f43cedae362e9cca1129fafd3f_265678.fix +txn/fixtures/ef238d9f14c9380df981a4c67c6056f569739824_1834062.fix +txn/fixtures/ef390f85a48ad6762bb81f44f038d98f20986f91_2231454.fix +txn/fixtures/efbe06239e1b44b8df29e49ed115803a11f40680_3476806.fix +txn/fixtures/efc9d384475916612c8b252428e4349db9ac4dc7_265678.fix +txn/fixtures/efd07880abc0f819f691c070994d3a9acb7180f8_1851671.fix +txn/fixtures/efe1f9db1c748022a5440171695fd28ebc1fc691_2187420.fix +txn/fixtures/eff2026a9c9c7760436c4ce2ee3d906793fa59c7_1834253.fix +txn/fixtures/f02b5ec22b813446bef55acb766b95c97b0002a8_1829245.fix +txn/fixtures/f0322421d97e91c1a247d6a978bae2e30b51dab3_2668441.fix +txn/fixtures/f04ce3acb468fca7af8e69369f33943387b4ef46_2136289.fix +txn/fixtures/f06df6fe25c9d6498e7e5bd38701fd991fdc1ac6_265678.fix +txn/fixtures/f088197e32a9962841fadd500e298698819d5d08_1853773.fix +txn/fixtures/f0af1710795c2e73d54587f1fe1212a456e33c74_1843784.fix +txn/fixtures/f0c4188f25e6614351ae9ced728a365f56b49344_2140568.fix +txn/fixtures/f0f002a77d217a344663164e32ea85242afc5a8a_2208220.fix +txn/fixtures/f0f679e4bce01baa3745d5ea6e28a21d15abb79b_1857137.fix +txn/fixtures/f16491d7aff4141c696e62a5930bf927f6e2ebd3_1838210.fix +txn/fixtures/f1693553fc389b082034bc50cccf7136e4305821_1840815.fix +txn/fixtures/f1dbb649cd81b2cb87dbc1674ee34ea052c07615_2212056.fix +txn/fixtures/f1f5ae718e6c516bc77597a263d702be81ebfd29_265678.fix +txn/fixtures/f1fd5f6313c0f07a6e882f6d54a02d10075d90ab_2188356.fix +txn/fixtures/f249c20677a5d2deaf347f05c775508985c7297b_2224512.fix +txn/fixtures/f27ff82d90ed714abf2f9d13595aa99854d1d9e0_265678.fix +txn/fixtures/f2a8d33f38cb6e6c4cfb2f2379d4b8f3176f2b08_265678.fix +txn/fixtures/f2c045bf98cae7c50ea48429f504b00d1023230f_2191832.fix +txn/fixtures/f316480b11b0cc5fccd44291e01bde6aeaa2f27e_1834356.fix +txn/fixtures/f31e5ba7b6ab1fb00c41ab5ee6152841fc414416_2211024.fix +txn/fixtures/f34767af09d1315afbf8ea58ef9e55f419a685bc_1843964.fix +txn/fixtures/f3e251951eae7fa0df103c1274285133d88e9a22_265678.fix +txn/fixtures/f3f28ba68155223af196e7fa77a1da1443396901_265678.fix +txn/fixtures/f4049a08292d86241aa19174d29cbf4be1f39ac1_265678.fix +txn/fixtures/f435474fc8507b2d9e29943084489627c2243802_2133387.fix +txn/fixtures/f48d031c726432ee05ca1b5765ede9830723f996_265678.fix +txn/fixtures/f491e597cd2b6c2debd22d2b5eb7e09276994850_2187627.fix +txn/fixtures/f497797b3b0d2db3732ce8537dd10e3452d8ea8d_265678.fix +txn/fixtures/f4c0c1e5d6c427188f8158a077f8cf2a61ec47e8_1576433.fix +txn/fixtures/f4e1674f7530ea87a6690f64a6b7169e984ea604_3109805.fix +txn/fixtures/f4f8b2177f282a7b2e6a7987db3dd1a4d2f12088_1834527.fix +txn/fixtures/f50d739b844ce1e4e4e6c22e98964953ed37d8f2_4091482.fix +txn/fixtures/f53467ce68c50802f19b014cd28d869b6d3e685d_1828872.fix +txn/fixtures/f5483a0e755d038bb69f147eb72aa9a597ffd2bc_265678.fix +txn/fixtures/f59d49be39cccb052188429a81b3013b5c960f33_3196736.fix +txn/fixtures/f5af9e09c07a3b146876d7dc68fb920affcc0a97_1854446.fix +txn/fixtures/f61ed517efc5ca22d5fbe8b221d7bd08a8fa24f3_265678.fix +txn/fixtures/f6251d91d67bf91b0070488337c1d5f9796535e2_265678.fix +txn/fixtures/f63bd0ca6be89b8cdca218093aec98024a5afdd4_2138514.fix +txn/fixtures/f673ed53492aa10b29ef10983b040dad971e2136_2134964.fix +txn/fixtures/f676dd9edc757e1aee2877e48a1b5101dd86d1ed_265678.fix +txn/fixtures/f6991461da3dc60085295ec0eb277313dfcd9d55_3176291.fix +txn/fixtures/f6cc0acf680584aa8ea273dfa6d39dac7f0c2aad_2194841.fix +txn/fixtures/f719601ccfb15bf712d288eace02614d6e331d34_265678.fix +txn/fixtures/f731c7a693492de08dca9d1b665ba3fb204c7218_3026660.fix +txn/fixtures/f7e8b2514f0065807be20ded62fa0ba033264a61_2218986.fix +txn/fixtures/f80fc0586b9890a9114eedb7366d85ce446940f1_2225422.fix +txn/fixtures/f83e46a5742b238887855d29cc2a647a8c8307c1_2226253.fix +txn/fixtures/f891258625de17317435a72696dde4e3fc9d6cad_265678.fix +txn/fixtures/f8c15bca1a45d1ebfa2ed963970a47fabffc223d_2207392.fix +txn/fixtures/f8d080f8f1b0183b3a0a2ba8c2133af468ec21d9_1837915.fix +txn/fixtures/f8e77b2bd4ee4abb21ff45fbba7cda7df33fe076_2224734.fix +txn/fixtures/f9018bf41adcd5873c2e3b3f3cc9525602129f16_265678.fix +txn/fixtures/f97796e04e5ee40275cee2a2c0864e38d98265d5_265678.fix +txn/fixtures/f9951ecf8d10fb1b57a32873db65f935f3f9be90_265678.fix +txn/fixtures/f9965bbf979d30f1500d1e9207b37c51d736eaac_265678.fix +txn/fixtures/f9a1706fcbda914b916cf461736cdfb84812d84e_265678.fix +txn/fixtures/f9c508fb5bdac47495a2f6ec9799ba488620081f_1835221.fix +txn/fixtures/f9d4be065a891ea5425f1c4062e2aaa77716553e_2205376.fix +txn/fixtures/f9ddcabf1339d1863b76341e2a2a5a7bea577ca0_1576134.fix +txn/fixtures/fa0ecc5c29333b3b67c956ed2cdfbf7dd0d8e9f0_265678.fix +txn/fixtures/fa31e8f895daca8ea230397e2ddf2ff9aa1dce54_2222232.fix +txn/fixtures/fa3d19d72598681facddd866e3bf59e6b0636ec9_2197995.fix +txn/fixtures/fa6b3dec42a222c6e5e3d34d5409b102cac4eec6_265678.fix +txn/fixtures/fa7c3d5ec57cdcee9d5c54323333ac02d7f94cf0_265678.fix +txn/fixtures/faa94a86ce1c305065c1eab52d5d9695d3d4bf12_2829813.fix +txn/fixtures/fab214f75ee912ae3bf793b7347b9d4ba02f048a_2235585.fix +txn/fixtures/fb11218cc58e23d14b22c76807f0d3d1e0c606f1_265678.fix +txn/fixtures/fb1305b2e30e46cc2a321004c061888e84953432_1657414.fix +txn/fixtures/fb2d5800eede46961d02720b5be07ef56656e240_265678.fix +txn/fixtures/fb53116db1e362b62c67f8f81cc566dca740e23d_2190061.fix +txn/fixtures/fbeb72667e388cfe67cdf9a91ee31c0b01395995_2197223.fix +txn/fixtures/fc8c2e44aba217ab65f7e195ead8c0e9bda49373_265678.fix +txn/fixtures/fcfcf9a661e4d82c28fe17e00d27554d2f1093bc_265678.fix +txn/fixtures/fd150d2b5a3a8713784ed79dfa8b98e7cf210c4c_2225117.fix +txn/fixtures/fd3062337461cd7b48ff24ad9826d84fe27f2206_2928660.fix +txn/fixtures/fd3111a44bd96598a86c650675850d412327f17e_2238472.fix +txn/fixtures/fd32cd96bf6f225072259a897a1fbe5ae7facf1a_265678.fix +txn/fixtures/fd4262cdc8011b36f47747a0af84aaeb3f3650dc_265678.fix +txn/fixtures/fd724a627ce56654a7b76f260dfbf6b79513e838_265678.fix +txn/fixtures/fd74fd3e5fd0c99f6770ebbb468cfd736376ede5_265678.fix +txn/fixtures/fd910f14ef5f223816ea114d1af45c71cdf86945_1837630.fix +txn/fixtures/fd98c1db8e45ed558b7a7fcabb29c05fefa0589b_2205491.fix +txn/fixtures/fdab5bf79562845d98d2f9191a5a8ff8f832d7cf_473798.fix +txn/fixtures/fdd3c7c7e8554b576cd42fc7c89f3fc5c8d0d658_265678.fix +txn/fixtures/fdff1a857c33a6cfdbddb7f7da7417e16efe6827_265678.fix +txn/fixtures/fe009265742cc09bdb01b11bd3ff4dd66f8a925f_265678.fix +txn/fixtures/fe025f048ce62e4f09120ecb8921c5b4872d8fa3_265678.fix +txn/fixtures/fe08bc273896031715970986c2708128f5518347_2187957.fix +txn/fixtures/fe1259519c5e3d71d608ba24f52ab4e287aef47c_2205998.fix +txn/fixtures/fe1800f3e20c46279ef24fff750769952b086d7a_265678.fix +txn/fixtures/fe387eae5fb59b16ba7083667b71bff167b93b32_265678.fix +txn/fixtures/fed84e9f0fb485a39cb0ec32f8268dcf352b7700_1085148.fix +txn/fixtures/fee8af508b5fa32813192a6c18a77d4202f9ed47_3004369.fix +txn/fixtures/ff4fb4a5e74b7d8bcfe7bb7838867f0df719c9d2_265678.fix +txn/fixtures/ff50ab43edd76a3912bb23df6abeb620ff15c328_2225356.fix +txn/fixtures/ff55e30c1878f181c358f1c0f4da68dd5844f381_1839594.fix +txn/fixtures/ffa46950755b08e86d98c678d4ee042d59e4ef4d_265678.fix +txn/fixtures/ffdc55b81039969dd81e130f312ed9889468364c_2237040.fix +txn/fixtures/fff87aff2cbaee9cdb9489c98db0adcc0309b97f_2202462.fix +txn/fixtures/is_signer_err_handling.fix +txn/fixtures/txn-21V6e59cxaU8WcB7RDqGoJqfzrP7gdUhvC9wAfokeRUdbyC7Wy2ML1ptinGWmyFbNazSDNZHCzxiUDXDGY18DRAM.fix +txn/fixtures/txn-2vxNaM7VAooMJnt84LcbqfJRTaCrVcvHcDBw5JDeuTbsqYipAyLo2pfVtBEDFLCeczRcpKRHBfSgwC3MpMLTwVtR.fix +txn/fixtures/txn-3eDdfZE6HswPxFKrtnQPsEmTkyL1iP57gRPEXwaqNGAqF1paGXCYYMwh7z4uQDUMgFor742sikVSQZW1gFRDhPNh.fix +txn/fixtures/txn-3VZwmGFE78PAGbUV9SuPE4EgqAkB7kQLDuoE4iFNberYV3n4yPm37eedu8gmm7HRiogLUPRrZYRHqQSz6DZtbiKq.fix +txn/fixtures/txn-5V5uB8Ro1rVPmRJPH5Yhfxr5sPAXEFWGsA4d2YbBDaTEaJn6Key9VuCEvuRaZCi6ziBfAtRUH1shuma9SNqsHSKP.fix +txn/fixtures/txn-CA7V2nP2oagjGvqaqRRm7kyRpk2Q58gA3vFHQs7NvYv4Y6bNtoNX1xp5fuQPPL2ZNStqszAuGmDYfEG64BQhpKd.fix diff --git a/conformance/scripts/fixtures.txt b/conformance/scripts/fixtures.txt index 35a904473a..1f97ebc56c 100644 --- a/conformance/scripts/fixtures.txt +++ b/conformance/scripts/fixtures.txt @@ -38,11 +38,4 @@ syscall/fixtures/sol_get_sysvar syscall/fixtures/stack_height syscall/fixtures/try_find_program_address syscall/fixtures/vm -txn/fixtures/precompile/ed25519 -txn/fixtures/precompile/secp256k1 -txn/fixtures/precompile/secp256r1 -txn/fixtures/programs -vm_interp/fixtures/latest -vm_interp/fixtures/v0 -vm_interp/fixtures/v1 -vm_interp/fixtures/v2 +txn/fixtures diff --git a/conformance/src/elf_loader.zig b/conformance/src/elf_loader.zig index 7ef7e365fb..21cf18d9d0 100644 --- a/conformance/src/elf_loader.zig +++ b/conformance/src/elf_loader.zig @@ -1,14 +1,14 @@ const std = @import("std"); const sig = @import("sig"); -const pb = @import("proto/org/solana/sealevel/v1.pb.zig"); +const types = @import("elf_types.zig"); -const ELFLoaderCtx = pb.ELFLoaderCtx; -const ElfLoaderEffects = pb.ELFLoaderEffects; +const ELFLoaderCtx = types.ELFLoaderCtx; +const ElfLoaderEffects = types.ELFLoaderEffects; const svm = sig.vm; const elf = svm.elf; -export fn sol_compat_elf_loader_v1( +export fn sol_compat_elf_loader_v2( out_ptr: [*]u8, out_size: *u64, in_ptr: [*]const u8, @@ -23,29 +23,22 @@ export fn sol_compat_elf_loader_v1( var decode_arena = std.heap.ArenaAllocator.init(allocator); defer decode_arena.deinit(); - var reader = std.io.Reader.fixed(in_ptr[0..in_size]); - var ctx = ELFLoaderCtx.decode(&reader, decode_arena.allocator()) catch return 0; + var ctx = ELFLoaderCtx.decode(decode_arena.allocator(), in_ptr[0..in_size]) catch return -1; defer ctx.deinit(decode_arena.allocator()); - var elf_effects = executeElfTest(ctx, allocator) catch return 0; + var elf_effects = executeElfTest(ctx, allocator) catch return -1; defer elf_effects.deinit(allocator); - var writer: std.io.Writer.Allocating = .init(allocator); - defer writer.deinit(); - try elf_effects.encode(&writer.writer, allocator); - const effect_bytes = writer.written(); - + const effect_bytes = elf_effects.encode(); const out_slice = out_ptr[0..out_size.*]; - if (effect_bytes.len > out_slice.len) return 0; - @memcpy(out_slice[0..effect_bytes.len], effect_bytes); + @memcpy(out_slice[0..effect_bytes.len], &effect_bytes); out_size.* = effect_bytes.len; - return 1; + return 0; } fn executeElfTest(ctx: ELFLoaderCtx, allocator: std.mem.Allocator) !ElfLoaderEffects { - const ctx_elf = ctx.elf orelse return error.Unknown; - const elf_bytes = ctx_elf.data; + const elf_bytes = ctx.elf orelse return error.Unknown; var feature_set: sig.core.FeatureSet = .ALL_DISABLED; if (ctx.features) |features| for (features.features.items) |id| { diff --git a/conformance/src/elf_types.zig b/conformance/src/elf_types.zig new file mode 100644 index 0000000000..9351b2302a --- /dev/null +++ b/conformance/src/elf_types.zig @@ -0,0 +1,164 @@ +const std = @import("std"); + +const Allocator = std.mem.Allocator; +const xxhash = std.hash.XxHash64.hash; +const writeInt = std.mem.writeInt; + +/// Wrapper for the ELF binary and the features that the loader should use +/// Note that we currently hardcode the features to be used by the loader, +/// so features isn't actually used yet. +pub const ELFLoaderCtx = struct { + elf: ?[]const u8 = null, + features: ?FeatureSet = null, + deploy_checks: bool = false, + + pub fn deinit(self: *const ELFLoaderCtx, allocator: Allocator) void { + if (self.features) |features| features.deinit(allocator); + } + + /// Decode a flatbuffer ELFLoaderCtx into the protobuf ELFLoaderCtx struct. + /// The returned struct borrows elf.data directly from buf, so buf must + /// outlive the result. + pub fn decode( + allocator: Allocator, + buf: []const u8, + ) error{ OutOfMemory, InsufficientData }!ELFLoaderCtx { + const root_pos = try decodeInt(u32, buf[0..]); + const vt: VTable = try .decode(buf, root_pos); + + return .{ + .elf = if (vt.field(0)) |offset| + try decodeUbyteVec(buf, root_pos + offset) + else + null, + .features = if (vt.field(1)) |offset| + try .decode(allocator, buf, try deref(buf, root_pos + offset)) + else + null, + .deploy_checks = if (vt.field(2)) |offset| buf[root_pos + offset] != 0 else false, + }; + } +}; + +/// Captures the results of a elf binary load. +/// Structurally similar to fd_sbpf_program_t +pub const ELFLoaderEffects = struct { + rodata: []const u8 = &.{}, + rodata_sz: u64 = 0, + text_cnt: u64 = 0, + text_off: u64 = 0, + entry_pc: u64 = 0, + calldests: std.ArrayListUnmanaged(u64) = .empty, + @"error": i32 = 0, + + pub fn deinit(self: *const ELFLoaderEffects, allocator: Allocator) void { + allocator.free(self.rodata); + var cd = self.calldests; + cd.deinit(allocator); + } + + pub const buf_size = 72; + + /// Encode an ELFLoaderEffects into a 72-byte FlatBuffer. + pub fn encode(self: *const ELFLoaderEffects) [buf_size]u8 { + var buf: [buf_size]u8 = template; + + buf[28] = @truncate(@as(u32, @bitCast(self.@"error"))); + writeInt(u64, buf[32..40], xxhash(0, self.rodata), .little); + writeInt(u64, buf[40..48], self.text_cnt, .little); + writeInt(u64, buf[48..56], self.text_off, .little); + writeInt(u64, buf[56..64], self.entry_pc, .little); + writeInt(u64, buf[64..72], xxhash(0, std.mem.sliceAsBytes(self.calldests.items)), .little); + + return buf; + } + + const template: [buf_size]u8 = blk: { + var buf = [_]u8{0} ** buf_size; + // root offset: table at byte 24 + writeInt(u32, buf[0..4], 24, .little); + // vtable (bytes 4..20): vt_size, table_size, 6 field offsets + writeInt(u16, buf[4..6], 16, .little); // vt_size (2+2+6*2 = 16) + writeInt(u16, buf[6..8], 48, .little); // table inline size + writeInt(u16, buf[8..10], 4, .little); // field 0: err_code + writeInt(u16, buf[10..12], 8, .little); // field 1: rodata_hash + writeInt(u16, buf[12..14], 16, .little); // field 2: text_cnt + writeInt(u16, buf[14..16], 24, .little); // field 3: text_off + writeInt(u16, buf[16..18], 32, .little); // field 4: entry_pc + writeInt(u16, buf[18..20], 40, .little); // field 5: calldests_hash + // bytes 20..24: padding (already zero) + // soffset: table_pos(24) - vtable_pos(4) = 20 + writeInt(i32, buf[24..28], 20, .little); + break :blk buf; + }; +}; + +pub const FeatureSet = struct { + features: std.ArrayListUnmanaged(u64) = .empty, + + pub fn deinit(self: *const FeatureSet, allocator: Allocator) void { + var features = self.features; + features.deinit(allocator); + } + + pub fn decode( + allocator: Allocator, + buf: []const u8, + pos: usize, + ) error{ OutOfMemory, InsufficientData }!FeatureSet { + const vt: VTable = try .decode(buf, pos); + var result: FeatureSet = .{}; + if (vt.field(0)) |offset| { + const vec_pos = try deref(buf, pos + offset); + const len = try decodeInt(u32, buf[vec_pos..]); + try result.features.ensureTotalCapacity(allocator, len); + for (0..len) |i| { + result.features.appendAssumeCapacity(try decodeInt(u64, buf[vec_pos + 4 + i * 8 ..])); + } + } + return result; + } +}; + +const VTable = struct { + buf: []const u8, + /// start of vtable in buf + pos: usize, + /// vtable size in bytes + size: usize, + + fn decode(buf: []const u8, table_pos: usize) error{InsufficientData}!VTable { + const soff = try decodeInt(i32, buf[table_pos..]); + const vt_pos: usize = @intCast(@as(i64, @intCast(table_pos)) - soff); + const vt_size = try decodeInt(u16, buf[vt_pos..]); + return .{ .buf = buf, .pos = vt_pos, .size = vt_size }; + } + + /// Return the field offset (relative to table start) for field `index`, or null if absent. + fn field(self: VTable, index: usize) ?usize { + const entry = 4 + index * 2; // first field entry is at byte 4 in vtable + if (entry + 2 > self.size) return null; + const offset = std.mem.readInt(u16, self.buf[self.pos + entry ..][0..2], .little); + if (offset == 0) return null; + return offset; + } +}; + +/// Follow a uoffset_t: return the position it points to. +fn deref(buf: []const u8, pos: usize) error{InsufficientData}!usize { + if (pos + 4 > buf.len) return error.InsufficientData; + return pos + try decodeInt(u32, buf[pos..]); +} + +fn decodeUbyteVec(buf: []const u8, field_pos: usize) error{InsufficientData}![]const u8 { + const vec_pos = try deref(buf, field_pos); + const len = try decodeInt(u32, buf[vec_pos..]); + const start = vec_pos + 4; + if (start + len > buf.len) return error.InsufficientData; + return buf[start .. start + len]; +} + +fn decodeInt(Int: type, buf: []const u8) error{InsufficientData}!Int { + if (buf.len < @sizeOf(Int)) return error.InsufficientData; + return std.mem.readInt(Int, buf[0..@sizeOf(Int)], .little); +} diff --git a/conformance/src/proto/org/solana/sealevel/v1.pb.zig b/conformance/src/proto/org/solana/sealevel/v1.pb.zig index 28e8b70406..755b052ae6 100644 --- a/conformance/src/proto/org/solana/sealevel/v1.pb.zig +++ b/conformance/src/proto/org/solana/sealevel/v1.pb.zig @@ -390,25 +390,19 @@ pub const FeeRateGovernor = struct { } }; -/// EpochContext includes context scoped to an epoch. -/// On "real" ledgers, it is created during the epoch boundary. -pub const EpochContext = struct { - features: ?FeatureSet = null, - hashes_per_tick: u64 = 0, - ticks_per_slot: u64 = 0, - inflation: ?Inflation = null, - genesis_creation_time: u64 = 0, - vote_accounts_t_1: std.ArrayListUnmanaged(VoteAccount) = .empty, - vote_accounts_t_2: std.ArrayListUnmanaged(VoteAccount) = .empty, +pub const EpochSchedule = struct { + slots_per_epoch: u64 = 0, + leader_schedule_slot_offset: u64 = 0, + warmup: bool = false, + first_normal_epoch: u64 = 0, + first_normal_slot: u64 = 0, pub const _desc_table = .{ - .features = fd(1, .submessage), - .hashes_per_tick = fd(2, .{ .scalar = .uint64 }), - .ticks_per_slot = fd(3, .{ .scalar = .uint64 }), - .inflation = fd(5, .submessage), - .genesis_creation_time = fd(6, .{ .scalar = .uint64 }), - .vote_accounts_t_1 = fd(11, .{ .repeated = .submessage }), - .vote_accounts_t_2 = fd(12, .{ .repeated = .submessage }), + .slots_per_epoch = fd(1, .{ .scalar = .uint64 }), + .leader_schedule_slot_offset = fd(2, .{ .scalar = .uint64 }), + .warmup = fd(3, .{ .scalar = .bool }), + .first_normal_epoch = fd(4, .{ .scalar = .uint64 }), + .first_normal_slot = fd(5, .{ .scalar = .uint64 }), }; /// Encodes the message to the writer @@ -475,103 +469,15 @@ pub const EpochContext = struct { } }; -/// SlotContext includes context scoped to a block. -/// On "real" ledgers, it is created during the slot boundary. -pub const SlotContext = struct { - slot: u64 = 0, - block_height: u64 = 0, - poh: []const u8 = &.{}, - parent_bank_hash: []const u8 = &.{}, - parent_lthash: []const u8 = &.{}, - prev_slot: u64 = 0, - prev_lps: u64 = 0, - prev_epoch_capitalization: u64 = 0, - fee_rate_governor: ?FeeRateGovernor = null, - parent_signature_count: u64 = 0, - - pub const _desc_table = .{ - .slot = fd(1, .{ .scalar = .fixed64 }), - .block_height = fd(2, .{ .scalar = .fixed64 }), - .poh = fd(3, .{ .scalar = .bytes }), - .parent_bank_hash = fd(4, .{ .scalar = .bytes }), - .parent_lthash = fd(5, .{ .scalar = .bytes }), - .prev_slot = fd(6, .{ .scalar = .fixed64 }), - .prev_lps = fd(7, .{ .scalar = .uint64 }), - .prev_epoch_capitalization = fd(8, .{ .scalar = .uint64 }), - .fee_rate_governor = fd(9, .submessage), - .parent_signature_count = fd(10, .{ .scalar = .uint64 }), - }; - - /// Encodes the message to the writer - /// The allocator is used to generate submessages internally. - /// Hence, an ArenaAllocator is a preferred choice if allocations are a bottleneck. - pub fn encode( - self: @This(), - writer: *std.Io.Writer, - allocator: std.mem.Allocator, - ) (std.Io.Writer.Error || std.mem.Allocator.Error)!void { - return protobuf.encode(writer, allocator, self); - } - - /// Decodes the message from the bytes read from the reader. - pub fn decode( - reader: *std.Io.Reader, - allocator: std.mem.Allocator, - ) (protobuf.DecodingError || std.Io.Reader.Error || std.mem.Allocator.Error)!@This() { - return protobuf.decode(@This(), reader, allocator); - } - - /// Deinitializes and frees the memory associated with the message. - pub fn deinit(self: *@This(), allocator: std.mem.Allocator) void { - return protobuf.deinit(allocator, self); - } - - /// Duplicates the message. - pub fn dupe(self: @This(), allocator: std.mem.Allocator) std.mem.Allocator.Error!@This() { - return protobuf.dupe(@This(), self, allocator); - } - - /// Decodes the message from the JSON string. - pub fn jsonDecode( - input: []const u8, - options: std.json.ParseOptions, - allocator: std.mem.Allocator, - ) !std.json.Parsed(@This()) { - return protobuf.json.decode(@This(), input, options, allocator); - } - - /// Encodes the message to a JSON string. - pub fn jsonEncode( - self: @This(), - options: std.json.Stringify.Options, - allocator: std.mem.Allocator, - ) ![]const u8 { - return protobuf.json.encode(self, options, allocator); - } - - /// This method is used by std.json - /// internally for deserialization. DO NOT RENAME! - pub fn jsonParse( - allocator: std.mem.Allocator, - source: anytype, - options: std.json.ParseOptions, - ) !@This() { - return protobuf.json.parse(@This(), allocator, source, options); - } - - /// This method is used by std.json - /// internally for serialization. DO NOT RENAME! - pub fn jsonStringify(self: *const @This(), jws: anytype) !void { - return protobuf.json.stringify(@This(), self, jws); - } -}; - -/// FixtureMetadata includes the metadata for the fixture -pub const FixtureMetadata = struct { - fn_entrypoint: []const u8 = &.{}, +pub const Rent = struct { + lamports_per_byte_year: u64 = 0, + exemption_threshold: f64 = 0, + burn_percent: u32 = 0, pub const _desc_table = .{ - .fn_entrypoint = fd(1, .{ .scalar = .string }), + .lamports_per_byte_year = fd(1, .{ .scalar = .uint64 }), + .exemption_threshold = fd(2, .{ .scalar = .double }), + .burn_percent = fd(3, .{ .scalar = .uint32 }), }; /// Encodes the message to the writer @@ -638,11 +544,25 @@ pub const FixtureMetadata = struct { } }; -pub const ELFBinary = struct { - data: []const u8 = &.{}, +/// EpochContext includes context scoped to an epoch. +/// On "real" ledgers, it is created during the epoch boundary. +pub const EpochContext = struct { + features: ?FeatureSet = null, + hashes_per_tick: u64 = 0, + ticks_per_slot: u64 = 0, + inflation: ?Inflation = null, + genesis_creation_time: u64 = 0, + vote_accounts_t_1: std.ArrayListUnmanaged(VoteAccount) = .empty, + vote_accounts_t_2: std.ArrayListUnmanaged(VoteAccount) = .empty, pub const _desc_table = .{ - .data = fd(1, .{ .scalar = .bytes }), + .features = fd(1, .submessage), + .hashes_per_tick = fd(2, .{ .scalar = .uint64 }), + .ticks_per_slot = fd(3, .{ .scalar = .uint64 }), + .inflation = fd(5, .submessage), + .genesis_creation_time = fd(6, .{ .scalar = .uint64 }), + .vote_accounts_t_1 = fd(11, .{ .repeated = .submessage }), + .vote_accounts_t_2 = fd(12, .{ .repeated = .submessage }), }; /// Encodes the message to the writer @@ -709,18 +629,31 @@ pub const ELFBinary = struct { } }; -/// Wrapper for the ELF binary and the features that the loader should use -/// Note that we currently hardcode the features to be used by the loader, -/// so features isn't actually used yet. -pub const ELFLoaderCtx = struct { - elf: ?ELFBinary = null, - features: ?FeatureSet = null, - deploy_checks: bool = false, +/// SlotContext includes context scoped to a block. +/// On "real" ledgers, it is created during the slot boundary. +pub const SlotContext = struct { + slot: u64 = 0, + block_height: u64 = 0, + poh: []const u8 = &.{}, + parent_bank_hash: []const u8 = &.{}, + parent_lthash: []const u8 = &.{}, + prev_slot: u64 = 0, + prev_lps: u64 = 0, + prev_epoch_capitalization: u64 = 0, + fee_rate_governor: ?FeeRateGovernor = null, + parent_signature_count: u64 = 0, pub const _desc_table = .{ - .elf = fd(1, .submessage), - .features = fd(2, .submessage), - .deploy_checks = fd(4, .{ .scalar = .bool }), + .slot = fd(1, .{ .scalar = .fixed64 }), + .block_height = fd(2, .{ .scalar = .fixed64 }), + .poh = fd(3, .{ .scalar = .bytes }), + .parent_bank_hash = fd(4, .{ .scalar = .bytes }), + .parent_lthash = fd(5, .{ .scalar = .bytes }), + .prev_slot = fd(6, .{ .scalar = .fixed64 }), + .prev_lps = fd(7, .{ .scalar = .uint64 }), + .prev_epoch_capitalization = fd(8, .{ .scalar = .uint64 }), + .fee_rate_governor = fd(9, .submessage), + .parent_signature_count = fd(10, .{ .scalar = .uint64 }), }; /// Encodes the message to the writer @@ -787,25 +720,14 @@ pub const ELFLoaderCtx = struct { } }; -/// Captures the results of a elf binary load. -/// Structurally similar to fd_sbpf_program_t -pub const ELFLoaderEffects = struct { - rodata: []const u8 = &.{}, - rodata_sz: u64 = 0, - text_cnt: u64 = 0, - text_off: u64 = 0, - entry_pc: u64 = 0, - calldests: std.ArrayListUnmanaged(u64) = .empty, - @"error": i32 = 0, +/// A single entry in the blockhash queue. +pub const BlockhashQueueEntry = struct { + blockhash: []const u8 = &.{}, + lamports_per_signature: u64 = 0, pub const _desc_table = .{ - .rodata = fd(1, .{ .scalar = .bytes }), - .rodata_sz = fd(2, .{ .scalar = .uint64 }), - .text_cnt = fd(4, .{ .scalar = .uint64 }), - .text_off = fd(5, .{ .scalar = .uint64 }), - .entry_pc = fd(6, .{ .scalar = .uint64 }), - .calldests = fd(7, .{ .packed_repeated = .{ .scalar = .uint64 } }), - .@"error" = fd(8, .{ .scalar = .int32 }), + .blockhash = fd(1, .{ .scalar = .bytes }), + .lamports_per_signature = fd(2, .{ .scalar = .uint64 }), }; /// Encodes the message to the writer @@ -872,15 +794,12 @@ pub const ELFLoaderEffects = struct { } }; -pub const ELFLoaderFixture = struct { - metadata: ?FixtureMetadata = null, - input: ?ELFLoaderCtx = null, - output: ?ELFLoaderEffects = null, +/// FixtureMetadata includes the metadata for the fixture +pub const FixtureMetadata = struct { + fn_entrypoint: []const u8 = &.{}, pub const _desc_table = .{ - .metadata = fd(1, .submessage), - .input = fd(2, .submessage), - .output = fd(3, .submessage), + .fn_entrypoint = fd(1, .{ .scalar = .string }), }; /// Encodes the message to the writer @@ -1031,8 +950,7 @@ pub const InstrContext = struct { instr_accounts: std.ArrayListUnmanaged(InstrAcct) = .empty, data: []const u8 = &.{}, cu_avail: u64 = 0, - slot_context: ?SlotContext = null, - epoch_context: ?EpochContext = null, + features: ?FeatureSet = null, pub const _desc_table = .{ .program_id = fd(1, .{ .scalar = .bytes }), @@ -1040,8 +958,7 @@ pub const InstrContext = struct { .instr_accounts = fd(4, .{ .repeated = .submessage }), .data = fd(5, .{ .scalar = .bytes }), .cu_avail = fd(6, .{ .scalar = .uint64 }), - .slot_context = fd(8, .submessage), - .epoch_context = fd(9, .submessage), + .features = fd(10, .submessage), }; /// Encodes the message to the writer @@ -2875,98 +2792,24 @@ pub const SanitizedTransaction = struct { } }; -/// This Transaction context be used to fuzz either `load_execute_and_commit_transactions`, -/// `load_and_execute_transactions` in `bank.rs` or `load_and_execute_sanitized_transactions` -/// in `svm/transaction_processor.rs` -pub const TxnContext = struct { - tx: ?SanitizedTransaction = null, - account_shared_data: std.ArrayListUnmanaged(AcctState) = .empty, - blockhash_queue: std.ArrayListUnmanaged([]const u8) = .empty, - epoch_ctx: ?EpochContext = null, - slot_ctx: ?SlotContext = null, - - pub const _desc_table = .{ - .tx = fd(1, .submessage), - .account_shared_data = fd(2, .{ .repeated = .submessage }), - .blockhash_queue = fd(3, .{ .repeated = .{ .scalar = .bytes } }), - .epoch_ctx = fd(4, .submessage), - .slot_ctx = fd(5, .submessage), - }; - - /// Encodes the message to the writer - /// The allocator is used to generate submessages internally. - /// Hence, an ArenaAllocator is a preferred choice if allocations are a bottleneck. - pub fn encode( - self: @This(), - writer: *std.Io.Writer, - allocator: std.mem.Allocator, - ) (std.Io.Writer.Error || std.mem.Allocator.Error)!void { - return protobuf.encode(writer, allocator, self); - } - - /// Decodes the message from the bytes read from the reader. - pub fn decode( - reader: *std.Io.Reader, - allocator: std.mem.Allocator, - ) (protobuf.DecodingError || std.Io.Reader.Error || std.mem.Allocator.Error)!@This() { - return protobuf.decode(@This(), reader, allocator); - } - - /// Deinitializes and frees the memory associated with the message. - pub fn deinit(self: *@This(), allocator: std.mem.Allocator) void { - return protobuf.deinit(allocator, self); - } - - /// Duplicates the message. - pub fn dupe(self: @This(), allocator: std.mem.Allocator) std.mem.Allocator.Error!@This() { - return protobuf.dupe(@This(), self, allocator); - } - - /// Decodes the message from the JSON string. - pub fn jsonDecode( - input: []const u8, - options: std.json.ParseOptions, - allocator: std.mem.Allocator, - ) !std.json.Parsed(@This()) { - return protobuf.json.decode(@This(), input, options, allocator); - } - - /// Encodes the message to a JSON string. - pub fn jsonEncode( - self: @This(), - options: std.json.Stringify.Options, - allocator: std.mem.Allocator, - ) ![]const u8 { - return protobuf.json.encode(self, options, allocator); - } - - /// This method is used by std.json - /// internally for deserialization. DO NOT RENAME! - pub fn jsonParse( - allocator: std.mem.Allocator, - source: anytype, - options: std.json.ParseOptions, - ) !@This() { - return protobuf.json.parse(@This(), allocator, source, options); - } - - /// This method is used by std.json - /// internally for serialization. DO NOT RENAME! - pub fn jsonStringify(self: *const @This(), jws: anytype) !void { - return protobuf.json.stringify(@This(), self, jws); - } -}; - -/// The resulting state of an account after a transaction -pub const ResultingState = struct { - acct_states: std.ArrayListUnmanaged(AcctState) = .empty, - rent_debits: std.ArrayListUnmanaged(RentDebits) = .empty, - transaction_rent: u64 = 0, +/// Bank fields relevant to transaction execution +pub const TxnBank = struct { + blockhash_queue: std.ArrayListUnmanaged(BlockhashQueueEntry) = .empty, + rbh_lamports_per_signature: u32 = 0, + fee_rate_governor: ?FeeRateGovernor = null, + total_epoch_stake: u64 = 0, + epoch_schedule: ?EpochSchedule = null, + rent: ?Rent = null, + features: ?FeatureSet = null, pub const _desc_table = .{ - .acct_states = fd(1, .{ .repeated = .submessage }), - .rent_debits = fd(2, .{ .repeated = .submessage }), - .transaction_rent = fd(3, .{ .scalar = .uint64 }), + .blockhash_queue = fd(1, .{ .repeated = .submessage }), + .rbh_lamports_per_signature = fd(2, .{ .scalar = .uint32 }), + .fee_rate_governor = fd(3, .submessage), + .total_epoch_stake = fd(4, .{ .scalar = .uint64 }), + .epoch_schedule = fd(5, .submessage), + .rent = fd(6, .submessage), + .features = fd(7, .submessage), }; /// Encodes the message to the writer @@ -3033,14 +2876,18 @@ pub const ResultingState = struct { } }; -/// The rent state for an account after a transaction -pub const RentDebits = struct { - pubkey: []const u8 = &.{}, - rent_collected: i64 = 0, +/// This Transaction context be used to fuzz either `load_execute_and_commit_transactions`, +/// `load_and_execute_transactions` in `bank.rs` or `load_and_execute_sanitized_transactions` +/// in `svm/transaction_processor.rs` +pub const TxnContext = struct { + tx: ?SanitizedTransaction = null, + account_shared_data: std.ArrayListUnmanaged(AcctState) = .empty, + bank: ?TxnBank = null, pub const _desc_table = .{ - .pubkey = fd(1, .{ .scalar = .bytes }), - .rent_collected = fd(2, .{ .scalar = .int64 }), + .tx = fd(1, .submessage), + .account_shared_data = fd(2, .{ .repeated = .submessage }), + .bank = fd(6, .submessage), }; /// Encodes the message to the writer @@ -3184,8 +3031,6 @@ pub const FeeDetails = struct { pub const TxnResult = struct { executed: bool = false, sanitization_error: bool = false, - resulting_state: ?ResultingState = null, - rent: u64 = 0, is_ok: bool = false, status: u32 = 0, instruction_error: u32 = 0, @@ -3195,12 +3040,12 @@ pub const TxnResult = struct { executed_units: u64 = 0, fee_details: ?FeeDetails = null, loaded_accounts_data_size: u64 = 0, + modified_accounts: std.ArrayListUnmanaged(AcctState) = .empty, + rollback_accounts: std.ArrayListUnmanaged(AcctState) = .empty, pub const _desc_table = .{ .executed = fd(1, .{ .scalar = .bool }), .sanitization_error = fd(2, .{ .scalar = .bool }), - .resulting_state = fd(3, .submessage), - .rent = fd(4, .{ .scalar = .uint64 }), .is_ok = fd(5, .{ .scalar = .bool }), .status = fd(6, .{ .scalar = .uint32 }), .instruction_error = fd(7, .{ .scalar = .uint32 }), @@ -3210,6 +3055,8 @@ pub const TxnResult = struct { .executed_units = fd(11, .{ .scalar = .uint64 }), .fee_details = fd(12, .submessage), .loaded_accounts_data_size = fd(13, .{ .scalar = .uint64 }), + .modified_accounts = fd(14, .{ .repeated = .submessage }), + .rollback_accounts = fd(15, .{ .repeated = .submessage }), }; /// Encodes the message to the writer diff --git a/conformance/src/txn_execute.zig b/conformance/src/txn_execute.zig index 4caa09ed6b..0cea72c950 100644 --- a/conformance/src/txn_execute.zig +++ b/conformance/src/txn_execute.zig @@ -444,211 +444,209 @@ fn executeTxnContext( parent_hash = slot_hash; const parent_slots_epoch = epoch; - slot = loadSlot(&pb_txn_ctx); - if (slot > 0) { - // Bank::new_from_parent(...) - { - // Clone epoch schedule - // epoch_schedule = epoch_schedule; - - // Get epoch - epoch = epoch_schedule.getEpoch(slot); - - // Clone accounts db - // let (rc, bank_rc_creation_time_us) = measure_us!({ - // let accounts_db = Arc::clone(&parent.rc.accounts.accounts_db); - // BankRc { - // accounts: Arc::new(Accounts::new(accounts_db)), - // parent: RwLock::new(Some(Arc::clone(&parent))), - // bank_id_generator: Arc::clone(&parent.rc.bank_id_generator), - // } - // }); - - // Clone status_cache - // const status_cache = parent.status_cache.clone(); - - // Derive new fee rate governor - fee_rate_governor = FeeRateGovernor.initDerived( - &fee_rate_governor, - 0, // parent.signature_count() - ); - - // Get bank id - // let bank_id = rc.bank_id_generator.fetch_add(1, Relaxed) + 1; + slot = 10; + // Bank::new_from_parent(...) + { + // Clone epoch schedule + // epoch_schedule = epoch_schedule; + + // Get epoch + epoch = epoch_schedule.getEpoch(slot); + + // Clone accounts db + // let (rc, bank_rc_creation_time_us) = measure_us!({ + // let accounts_db = Arc::clone(&parent.rc.accounts.accounts_db); + // BankRc { + // accounts: Arc::new(Accounts::new(accounts_db)), + // parent: RwLock::new(Some(Arc::clone(&parent))), + // bank_id_generator: Arc::clone(&parent.rc.bank_id_generator), + // } + // }); + + // Clone status_cache + // const status_cache = parent.status_cache.clone(); + + // Derive new fee rate governor + fee_rate_governor = FeeRateGovernor.initDerived( + &fee_rate_governor, + 0, // parent.signature_count() + ); - // Clone blockhash queue - // blockhash_queue = blockhash_queue; + // Get bank id + // let bank_id = rc.bank_id_generator.fetch_add(1, Relaxed) + 1; - // Clone stakes cache - // const stakes_cache = parent.stakes_cache.clone(); + // Clone blockhash queue + // blockhash_queue = blockhash_queue; - // Clone epoch stakes - // epoch_stakes = epoch_stakes; + // Clone stakes cache + // const stakes_cache = parent.stakes_cache.clone(); - // Create new transaction processor - // const transaction_processor = TransactionBatchProcessor::new_from(&parent.transaction_processor, slot, epoch); + // Clone epoch stakes + // epoch_stakes = epoch_stakes; - // Clone rewards pool pubkeys - // const rewards_pools = parent.rewards_pools.clone(); + // Create new transaction processor + // const transaction_processor = TransactionBatchProcessor::new_from(&parent.transaction_processor, slot, epoch); - // Clone transaction debug keys - // const transaction_debug_keys = parent.transaction_debug_keys.clone(); + // Clone rewards pool pubkeys + // const rewards_pools = parent.rewards_pools.clone(); - // Clone transaction log collector config - // const transaction_log_collector_config = parent.transaction_log_collector_config.clone(); + // Clone transaction debug keys + // const transaction_debug_keys = parent.transaction_debug_keys.clone(); - // Clone feature set - // feature_set = feature_set; + // Clone transaction log collector config + // const transaction_log_collector_config = parent.transaction_log_collector_config.clone(); - // Get initial accounts data size - // const initial_accounts_data_size = parent.load_accounts_data_size(); + // Clone feature set + // feature_set = feature_set; - // Init new bank -- lots of copying of fields here - // var new = Bank{...} + // Get initial accounts data size + // const initial_accounts_data_size = parent.load_accounts_data_size(); - // Create ancestors with new slot and all parent slots - try ancestors.addSlot(allocator, slot); + // Init new bank -- lots of copying of fields here + // var new = Bank{...} - // Update epoch - if (parent_slots_epoch < epoch) { - // Bank::process_new_epoch(...) + // Create ancestors with new slot and all parent slots + try ancestors.addSlot(allocator, slot); - try bank_methods.applyFeatureActivations( - allocator, - slot, - &feature_set, - account_store, - true, - ); + // Update epoch + if (parent_slots_epoch < epoch) { + // Bank::process_new_epoch(...) - // stakes_cache.activateEpoch(); - // Since the stakes cache is empty, we don't need to actually do anything here except add - // an entry for the parent epoch with zero stakes. - // https://github.com/firedancer-io/agave/blob/10fe1eb29aac9c236fd72d08ae60a3ef61ee8353/runtime/src/stakes.rs#L297 - { - const stakes, var stakes_guard = stakes_cache.stakes.writeWithLock(); - defer stakes_guard.unlock(); - stakes.epoch = epoch; - std.debug.assert(stakes.stake_history.entries.len == 0); - stakes.stake_history.entries.appendAssumeCapacity(.{ - .epoch = parent_slots_epoch, - .stake = .{ - .effective = 0, - .activating = 0, - .deactivating = 0, - }, - }); - } + try bank_methods.applyFeatureActivations( + allocator, + slot, + &feature_set, + account_store, + true, + ); - const leader_schedule_epoch = epoch_schedule.getLeaderScheduleEpoch(slot); - // Since stakes cache is empty, we just need to insert an empty stakes entry - // into the epoch stakes map at the leader schedule epoch stakes map if it is not present - // updateEpochStakes(leader_schedule_epoch); - if (!epoch_stakes_map.contains(leader_schedule_epoch)) - try epoch_stakes_map.put( - allocator, - leader_schedule_epoch, - .EMPTY, - ); - - // Bank::begin_partitioned_epoch_rewards(...) - // Similar to the above, epoch rewards is set but nothing meaningful is computed - // since there are no staked nodes or rewards to distribute. - // See: EpochRewards Debug Log: 0a73c09ab08f77e00b0faa8cf0d70408113b0a92_265678.fix - const epoch_rewards = EpochRewards{ - .distribution_starting_block_height = 2, - .num_partitions = 1, - .parent_blockhash = blockhash_queue.last_hash.?, - .total_points = 0, - .total_rewards = 0, - .distributed_rewards = 0, - .active = true, - }; - try update_sysvar.updateSysvarAccount(EpochRewards, allocator, epoch_rewards, .{ - .slot = slot, - .slot_store = account_store.forSlot(slot, &ancestors), - .capitalization = &capitalization, - .rent = &genesis_config.rent, + // stakes_cache.activateEpoch(); + // Since the stakes cache is empty, we don't need to actually do anything here except add + // an entry for the parent epoch with zero stakes. + // https://github.com/firedancer-io/agave/blob/10fe1eb29aac9c236fd72d08ae60a3ef61ee8353/runtime/src/stakes.rs#L297 + { + const stakes, var stakes_guard = stakes_cache.stakes.writeWithLock(); + defer stakes_guard.unlock(); + stakes.epoch = epoch; + std.debug.assert(stakes.stake_history.entries.len == 0); + stakes.stake_history.entries.appendAssumeCapacity(.{ + .epoch = parent_slots_epoch, + .stake = .{ + .effective = 0, + .activating = 0, + .deactivating = 0, + }, }); - } else { - const leader_schedule_epoch = epoch_schedule.getLeaderScheduleEpoch(slot); - // Since stakes cache is empty, we just need to insert an empty stakes entry - // into the epoch stakes map at the leader schedule epoch stakes map if it is not present - // updateEpochStakes(leader_schedule_epoch); - if (!epoch_stakes_map.contains(leader_schedule_epoch)) { - try epoch_stakes_map.put(allocator, leader_schedule_epoch, .EMPTY); - } } - // Bank::distribute_partitioned_epoch_rewards(...) - // Effectively noop for txn fuzzing purposes since height < distribution_starting_block_height + const leader_schedule_epoch = epoch_schedule.getLeaderScheduleEpoch(slot); + // Since stakes cache is empty, we just need to insert an empty stakes entry + // into the epoch stakes map at the leader schedule epoch stakes map if it is not present + // updateEpochStakes(leader_schedule_epoch); + if (!epoch_stakes_map.contains(leader_schedule_epoch)) + try epoch_stakes_map.put( + allocator, + leader_schedule_epoch, + .EMPTY, + ); + + // Bank::begin_partitioned_epoch_rewards(...) + // Similar to the above, epoch rewards is set but nothing meaningful is computed + // since there are no staked nodes or rewards to distribute. // See: EpochRewards Debug Log: 0a73c09ab08f77e00b0faa8cf0d70408113b0a92_265678.fix - // try bank_methods.distributePartitionedEpochRewards(); + const epoch_rewards = EpochRewards{ + .distribution_starting_block_height = 2, + .num_partitions = 1, + .parent_blockhash = blockhash_queue.last_hash.?, + .total_points = 0, + .total_rewards = 0, + .distributed_rewards = 0, + .active = true, + }; + try update_sysvar.updateSysvarAccount(EpochRewards, allocator, epoch_rewards, .{ + .slot = slot, + .slot_store = account_store.forSlot(slot, &ancestors), + .capitalization = &capitalization, + .rent = &genesis_config.rent, + }); + } else { + const leader_schedule_epoch = epoch_schedule.getLeaderScheduleEpoch(slot); + // Since stakes cache is empty, we just need to insert an empty stakes entry + // into the epoch stakes map at the leader schedule epoch stakes map if it is not present + // updateEpochStakes(leader_schedule_epoch); + if (!epoch_stakes_map.contains(leader_schedule_epoch)) { + try epoch_stakes_map.put(allocator, leader_schedule_epoch, .EMPTY); + } + } - // Prepare program cache for upcoming feature set + // Bank::distribute_partitioned_epoch_rewards(...) + // Effectively noop for txn fuzzing purposes since height < distribution_starting_block_height + // See: EpochRewards Debug Log: 0a73c09ab08f77e00b0faa8cf0d70408113b0a92_265678.fix + // try bank_methods.distributePartitionedEpochRewards(); - // Update sysvars - { - const update_sysvar_deps: update_sysvar.UpdateSysvarAccountDeps = .{ - .slot = slot, - .slot_store = account_store.forSlot(slot, &ancestors), - .capitalization = &capitalization, - .rent = &genesis_config.rent, - }; + // Prepare program cache for upcoming feature set - try update_sysvar.updateSlotHashes( - allocator, - parent_slot, - parent_hash, - update_sysvar_deps, - ); - try update_sysvar.updateStakeHistory( - allocator, - .{ - .epoch = epoch, - .parent_slots_epoch = parent_slots_epoch, - .stakes_cache = &stakes_cache, - .update_sysvar_deps = update_sysvar_deps, - }, - ); - _ = try update_sysvar.updateClock(allocator, .{ - .feature_set = &feature_set, - .epoch_schedule = &epoch_schedule, - .epoch_stakes = epoch_stakes_map.getPtr(epoch), - .stakes_cache = &stakes_cache, + // Update sysvars + { + const update_sysvar_deps: update_sysvar.UpdateSysvarAccountDeps = .{ + .slot = slot, + .slot_store = account_store.forSlot(slot, &ancestors), + .capitalization = &capitalization, + .rent = &genesis_config.rent, + }; + + try update_sysvar.updateSlotHashes( + allocator, + parent_slot, + parent_hash, + update_sysvar_deps, + ); + try update_sysvar.updateStakeHistory( + allocator, + .{ .epoch = epoch, .parent_slots_epoch = parent_slots_epoch, - .genesis_creation_time = genesis_config.creation_time, - .ns_per_slot = @intCast(genesis_config.nsPerSlot()), + .stakes_cache = &stakes_cache, .update_sysvar_deps = update_sysvar_deps, - }); - try update_sysvar.updateLastRestartSlot( - allocator, - &feature_set, - slot, - &hard_forks, - update_sysvar_deps, - ); - } - - // Get num accounts modified by this slot if accounts lt hash enabled - - // A bunch of stats stuff... + }, + ); + _ = try update_sysvar.updateClock(allocator, .{ + .feature_set = &feature_set, + .epoch_schedule = &epoch_schedule, + .epoch_stakes = epoch_stakes_map.getPtr(epoch), + .stakes_cache = &stakes_cache, + .epoch = epoch, + .parent_slots_epoch = parent_slots_epoch, + .genesis_creation_time = genesis_config.creation_time, + .ns_per_slot = @intCast(genesis_config.nsPerSlot()), + .update_sysvar_deps = update_sysvar_deps, + }); + try update_sysvar.updateLastRestartSlot( + allocator, + &feature_set, + slot, + &hard_forks, + update_sysvar_deps, + ); } - // bank = bank_forks.write().unwrap().insert(bank).clone_without_scheduler(); - { - // if (root < highest_slot_at_startup) { - // bank.check_program_modification_slot = true; - // } + // Get num accounts modified by this slot if accounts lt hash enabled - // bunch of scheduler and forks stuff... - } + // A bunch of stats stuff... + } + + // bank = bank_forks.write().unwrap().insert(bank).clone_without_scheduler(); + { + // if (root < highest_slot_at_startup) { + // bank.check_program_modification_slot = true; + // } - // ProgramCache::prune(slot, epoch) - {} + // bunch of scheduler and forks stuff... } + // ProgramCache::prune(slot, epoch) + {} + // Checkpoint 2 -- End of Bank Transition to TxnContext Slot // try writeState(allocator, .{ // .slot = slot, @@ -911,15 +909,19 @@ fn serializeOutput( const errors = utils.convertTransactionError(txn.err); - var acct_states: std.ArrayList(pb.AcctState) = .{}; - errdefer acct_states.deinit(allocator); + var modified_accounts: std.ArrayListUnmanaged(pb.AcctState) = .empty; + var rollback_accounts: std.ArrayListUnmanaged(pb.AcctState) = .empty; + errdefer modified_accounts.deinit(allocator); + errdefer rollback_accounts.deinit(allocator); + if (result.ok.outputs != null and result.ok.err != null) { // In the event that the transaction is executed and fails, agave // returns *all* the loaded accounts, including all the modifications // from the failed transaction, whereas we only return the rollback // accounts. Our approach makes more sense in the context of the // validator, but for compatibility with solfuzz_agave's outputs, we - // need to return the modified loaded accounts. + // need to return the "modified" loaded accounts that aren't actually + // modified since the transaction failed. for (failed_accounts) |account| { const was_an_input_and_is_writable = for ( sanitized.accounts.items(.pubkey), @@ -928,24 +930,24 @@ fn serializeOutput( if (account.pubkey.equals(&pubkey)) break is_writable; } else false; - if (was_an_input_and_is_writable) try acct_states.append( + if (was_an_input_and_is_writable) try modified_accounts.append( + allocator, + try sharedAccountToState(allocator, account.pubkey, account.account), + ); + } + for (txn.writes.constSlice()) |account| { + try rollback_accounts.append( allocator, try sharedAccountToState(allocator, account.pubkey, account.account), ); } } else for (txn.writes.constSlice()) |account| { - try acct_states.append( + try modified_accounts.append( allocator, try sharedAccountToState(allocator, account.pubkey, account.account), ); } - const resulting_state: pb.ResultingState = .{ - .rent_debits = .{}, - .transaction_rent = txn.rent, - .acct_states = acct_states, - }; - const return_data: []const u8 = if (txn.outputs) |out| if (out.return_data) |ret| try allocator.dupe(u8, ret.data.constSlice()) else &.{} else @@ -955,7 +957,6 @@ fn serializeOutput( .executed = true, .sanitization_error = false, .is_ok = txn.err == null, - .rent = txn.rent, .status = errors.err, .instruction_error = errors.instruction_error, @@ -963,7 +964,8 @@ fn serializeOutput( .custom_error = errors.custom_error, .return_data = return_data, - .resulting_state = resulting_state, + .modified_accounts = modified_accounts, + .rollback_accounts = rollback_accounts, .fee_details = .{ .transaction_fee = txn.fees.transaction_fee, .prioritization_fee = txn.fees.prioritization_fee, @@ -1006,19 +1008,13 @@ fn parsePubkey(bytes: []const u8) !Pubkey { return .{ .data = bytes[0..Pubkey.SIZE].* }; } -/// [agave] https://github.com/firedancer-io/solfuzz-agave/blob/agave-v3.1.0-beta.0/src/txn_fuzzer.rs#L319-L323 -fn loadSlot(txn_ctx: *const pb.TxnContext) u64 { - const slot = if (txn_ctx.slot_ctx) |ctx| ctx.slot else return 10; - return if (slot == 0) 10 else slot; -} - /// Load blockhashes from the protobuf transaction context. /// If no blockhashes are provided, a default blockhash of zeroes is returned. fn loadBlockhashes( allocator: std.mem.Allocator, pb_txn_ctx: *const pb.TxnContext, ) ![]Hash { - const pb_blockhashes = pb_txn_ctx.blockhash_queue.items; + const pb_blockhashes = pb_txn_ctx.bank.?.blockhash_queue.items; if (pb_blockhashes.len == 0) return try allocator.dupe(Hash, &.{Hash.ZEROES}); @@ -1026,7 +1022,7 @@ fn loadBlockhashes( errdefer allocator.free(blockhashes); for (blockhashes, pb_blockhashes) |*blockhash, pb_blockhash| - blockhash.* = try parseHash(pb_blockhash); + blockhash.* = try parseHash(pb_blockhash.blockhash); return blockhashes; } diff --git a/conformance/src/utils.zig b/conformance/src/utils.zig index 435ca8f9cb..8a5574f730 100644 --- a/conformance/src/utils.zig +++ b/conformance/src/utils.zig @@ -106,7 +106,7 @@ pub fn createTransactionContext( const log_collector = try sig.runtime.LogCollector.default(allocator); errdefer log_collector.deinit(allocator); - const slot = if (instr_ctx.slot_context) |slot_ctx| slot_ctx.slot else 0; + const slot = 0; tc.* = TransactionContext{ .allocator = allocator, .programs_allocator = allocator, @@ -173,12 +173,11 @@ pub fn deinitTransactionContext( } pub fn loadFeatureSet(ctx: anytype) !FeatureSet { - const epoch_context = switch (@TypeOf(ctx)) { - *pb.TxnContext, *const pb.TxnContext => ctx.epoch_ctx, - pb.InstrContext => ctx.epoch_context, + const pb_features = switch (@TypeOf(ctx)) { + *pb.TxnContext, *const pb.TxnContext => (ctx.bank orelse return .ALL_DISABLED).features, + pb.InstrContext => ctx.features, else => comptime unreachable, } orelse return .ALL_DISABLED; - const pb_features = epoch_context.features orelse return .ALL_DISABLED; var feature_set: FeatureSet = .ALL_DISABLED; for (pb_features.features.items) |id| { diff --git a/conformance/src/vm_interp.zig b/conformance/src/vm_interp.zig index b162897fc6..807d3162bd 100644 --- a/conformance/src/vm_interp.zig +++ b/conformance/src/vm_interp.zig @@ -55,7 +55,7 @@ fn executeVmTest( var instr_context = syscall_context.instr_ctx.?; const vm_context = syscall_context.vm_ctx.?; - const slot = if (instr_context.slot_context) |slot_ctx| slot_ctx.slot else 0; + const slot = 0; for (instr_context.accounts.items) |acc| { if (std.mem.eql(u8, acc.address, instr_context.program_id)) break; From 8aa2462786a0308aefd141d9b77d2ff92d3a6f11 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Wed, 11 Mar 2026 07:00:29 -0600 Subject: [PATCH 02/35] feat(features): new and rekeyed features for agave 4.0 compatibility 3 rekeyed features: - account_data_direct_mapping -> CR3dVN2Yoo95Y96kLSTaziWDAQT2MNEpiWh5cqVq2pNE - enable_sbpf_v3_deployment_and_execution -> 5cC3foj77CWun58pC51ebHFUWavHWKarWyR5UUik7dnC - reenable_zk_elgamal_proof_program -> zkexuyPRdyTVbZqEAREueqL2xvvoBhRgth9xGSc1tMN 19 new features: - syscall_parameter_address_restrictions - virtual_address_space_adjustments - delay_commission_updates - create_account_allow_prefund - alt_bn128_little_endian - bls_pubkey_management_in_vote_account - enable_alt_bn128_g2_syscalls - commission_rate_in_basis_points - custom_commission_collector - set_lamports_per_byte_to_6333 - set_lamports_per_byte_to_5080 - set_lamports_per_byte_to_2575 - set_lamports_per_byte_to_1322 - set_lamports_per_byte_to_696 - limit_instruction_accounts - block_revenue_sharing - vote_account_initialize_v2 - validate_chained_block_id - validator_admission_ticket - alpenglow --- src/core/features.zon | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/core/features.zon b/src/core/features.zon index a1293008c4..56157dac52 100644 --- a/src/core/features.zon +++ b/src/core/features.zon @@ -207,7 +207,7 @@ .{ .name = "reenable_sbpf_v0_execution", .pubkey = "TestFeature21111111111111111111111111111111" }, .{ .name = "enable_sbpf_v1_deployment_and_execution", .pubkey = "JE86WkYvTrzW8HgNmrHY7dFYpCmSptUpKupbo2AdQ9cG" }, .{ .name = "enable_sbpf_v2_deployment_and_execution", .pubkey = "F6UVKh1ujTEFK3en2SyAL3cdVnqko1FVEXWhmdLRu6WP" }, - .{ .name = "enable_sbpf_v3_deployment_and_execution", .pubkey = "BUwGLeF3Lxyfv1J1wY8biFHBB2hrk2QhbNftQf3VV3cC" }, + .{ .name = "enable_sbpf_v3_deployment_and_execution", .pubkey = "5cC3foj77CWun58pC51ebHFUWavHWKarWyR5UUik7dnC" }, .{ .name = "migrate_feature_gate_program_to_core_bpf", .pubkey = "4eohviozzEeivk1y9UbrnekbAFMDQyJz5JjA9Y6gyvky", .activated_on_all_clusters = true }, .{ .name = "migrate_config_program_to_core_bpf", .pubkey = "2Fr57nzzkLYXW695UdDxDeR5fhnZWSttZeZYemrnpGFV", .activated_on_all_clusters = true }, .{ .name = "migrate_address_lookup_table_program_to_core_bpf", .pubkey = "C97eKZygrkU4JxJsZdjgbUY7iQR7rKTr4NyDWo2E5pRm", .activated_on_all_clusters = true }, @@ -235,7 +235,7 @@ .{ .name = "vote_only_retransmitter_signed_fec_sets", .pubkey = "RfEcA95xnhuwooVAhUUksEJLZBF7xKCLuqrJoqk4Zph" }, .{ .name = "mask_out_rent_epoch_in_vm_serialization", .pubkey = "RENtePQcDLrAbxAsP3k8dwVcnNYQ466hi2uKvALjnXx" }, .{ .name = "disable_zk_elgamal_proof_program", .pubkey = "zkdoVwnSFnSLtGJG7irJPEYUpmb4i7sGMGcnN6T9rnC" }, - .{ .name = "reenable_zk_elgamal_proof_program", .pubkey = "zkesAyFB19sTkX8i9ReoKaMNDA4YNTPYJpZKPDt7FMW" }, + .{ .name = "reenable_zk_elgamal_proof_program", .pubkey = "zkexuyPRdyTVbZqEAREueqL2xvvoBhRgth9xGSc1tMN" }, .{ .name = "formalize_loaded_transaction_data_size", .pubkey = "DeS7sR48ZcFTUmt5FFEVDr1v1bh73aAbZiZq3SYr8Eh8" }, .{ .name = "enable_extend_program_checked", .pubkey = "2oMRZEDWT2tqtYMofhmmfQ8SsjqUFzT6sYXppQDavxwz" }, .{ .name = "require_static_nonce_account", .pubkey = "7VVhpg5oAjAmnmz1zCcSHb2Z9ecZB2FQqpnEwReka9Zm" }, @@ -246,7 +246,7 @@ .{ .name = "enforce_fixed_fec_set", .pubkey = "fixfecLZYMfkGzwq6NJA11Yw6KYztzXiK9QcL3K78in" }, .{ .name = "deprecate_rent_exemption_threshold", .pubkey = "rent6iVy6PDoViPBeJ6k5EJQrkj62h7DPyLbWGHwjrC" }, .{ .name = "static_instruction_limit", .pubkey = "64ixypL1HPu8WtJhNSMb9mSgfFaJvsANuRkTbHyuLfnx" }, - .{ .name = "account_data_direct_mapping", .pubkey = "DFN8MyKpQqFW31qczcahgnnxcAHQc6P94wtTEX5EP1RA" }, + .{ .name = "account_data_direct_mapping", .pubkey = "CR3dVN2Yoo95Y96kLSTaziWDAQT2MNEpiWh5cqVq2pNE" }, .{ .name = "provide_instruction_data_offset_in_vm_r2", .pubkey = "5xXZc66h4UdB6Yq7FzdBxBiRAFMMScMLwHxk2QZDaNZL" }, .{ .name = "poseidon_enforce_padding", .pubkey = "poUdAqRXXsNmfqAZ6UqpjbeYgwBygbfQLEvWSqVhSnb" }, .{ .name = "fix_alt_bn128_pairing_length_check", .pubkey = "bnYzodLwmybj7e1HAe98yZrdJTd7we69eMMLgCXqKZm" }, @@ -254,4 +254,26 @@ .{ .name = "vote_state_v4", .pubkey = "Gx4XFcrVMt4HUvPzTpTSVkdDVgcDSjKhDN1RqRS6KDuZ" }, .{ .name = "enable_bls12_381_syscall", .pubkey = "b1sgUiJ3qu7hYm3tNDyyqZNQd6gLGJmJppnLNa93PCQ" }, .{ .name = "remove_simple_vote_from_cost_model", .pubkey = "2GCrNXbzmt4xrwdcKS2RdsLzsgu4V5zHAemW57pcHT6a" }, + .{ .name = "syscall_parameter_address_restrictions", .pubkey = "EDGMC5kxFxGk4ixsNkGt8bW7QL5hDMXnbwaZvYMwNfzF" }, + .{ .name = "virtual_address_space_adjustments", .pubkey = "7VgiehxNxu53KdxgLspGQY8myE6f7UokaWa4jsGcaSz" }, + .{ .name = "delay_commission_updates", .pubkey = "76dHtohc2s5dR3ahJyBxs7eJJVipFkaPdih9CLgTTb4B" }, + .{ .name = "create_account_allow_prefund", .pubkey = "6sPDzwyARRExKH52LECxcGoqziH8G7SZofwuxi8Ja331" }, + .{ .name = "alt_bn128_little_endian", .pubkey = "bn2oPgpkzQPT3tohMaAsMVGjhDmmDa4jCaVPqCFmtxM" }, + .{ .name = "bls_pubkey_management_in_vote_account", .pubkey = "2uxQgtKa2ECHGs67Zdj7dgmzn2w9HiqhdcedwCWfYzzq" }, + .{ .name = "enable_alt_bn128_g2_syscalls", .pubkey = "bn1hKNURMGQaQoEVxahcEAcqiX3NwRs6hgKKNSLeKxH" }, + .{ .name = "commission_rate_in_basis_points", .pubkey = "CommissionRate1nBasisPoints1111111111111111" }, + .{ .name = "custom_commission_collector", .pubkey = "CustomCommissionCo11ector111111111111111111" }, + .{ .name = "set_lamports_per_byte_to_6333", .pubkey = "4a6f7o7iTcA8hRDCrPLkSatnt5Ykxiu36wo5p1Tt12wC" }, + .{ .name = "set_lamports_per_byte_to_5080", .pubkey = "61BtM7BkDEE8Yq5fskEVAQT9mYA8qCejJWoLe5apqg81" }, + .{ .name = "set_lamports_per_byte_to_2575", .pubkey = "Ftxb3ZKq7aNqgxDBbP7EonvR2RszZk9ctjdsTX38kQaz" }, + .{ .name = "set_lamports_per_byte_to_1322", .pubkey = "GsUBNYNDPdMLHPD37TToHzrzcNcjpC9w5n1EcJk5iTaM" }, + .{ .name = "set_lamports_per_byte_to_696", .pubkey = "mZdnRh9T2EbDNvqKjkCR3bvo5c816tJaojtE9Xs7iuY" }, + .{ .name = "limit_instruction_accounts", .pubkey = "6aHuNsUmwSzCEMjrBzBCYaxHAyAcQBjVES92JigHBDuC" }, + .{ .name = "block_revenue_sharing", .pubkey = "B1ockRevenueSharing111111111111111111111111" }, + .{ .name = "vote_account_initialize_v2", .pubkey = "VoteAccount1nitia1izeV211111111111111111111" }, + .{ .name = "validate_chained_block_id", .pubkey = "vbiddkDHTSHSvL8B21AetWvTBLxxUZ1FmU6DFjztyRn" }, + .{ .name = "validator_admission_ticket", .pubkey = "VATtb1DepUwdPh5bFVasdtkbeDNsftZSRzr2aKpKWJA" }, + // TODO(agave 4.1): This will be rekeyed before activation. + // https://github.com/anza-xyz/agave/blob/v4.0.0-beta.0/feature-set/src/lib.rs#L1129-L1149 + .{ .name = "alpenglow", .pubkey = "mustRekeyVm2QHYB3JPefBiU4BY3Z6JkW2k3Scw5GWP" }, } From 7dab008bd1cbf7eb433f77289f8dd3716d98e5be Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Thu, 12 Mar 2026 21:42:04 -0600 Subject: [PATCH 03/35] ci: misc fixes --- .circleci/config.yml | 3 --- conformance/build.zig | 2 +- conformance/scripts/ci-run.sh | 1 + conformance/scripts/verify-commits.sh | 17 ----------------- conformance/src/elf_types.zig | 4 +++- 5 files changed, 5 insertions(+), 22 deletions(-) delete mode 100755 conformance/scripts/verify-commits.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 16992d0f88..26e153443d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -301,9 +301,6 @@ jobs: - run: name: Check docs command: python3 docs/check.py ./ - - run: - name: Check conformance commits - command: conformance/scripts/verify-commits.sh - run: name: V2 checks command: | diff --git a/conformance/build.zig b/conformance/build.zig index 39e15706e7..89e4d6cc6c 100644 --- a/conformance/build.zig +++ b/conformance/build.zig @@ -15,7 +15,7 @@ pub fn build(b: *Build) void { const solfuzz_sig_step = b.step("solfuzz_sig", "The solfuzz sig library."); const test_step = b.step("test", "Run unit tests"); - // current commit: 3dea3808eab107f3010ddd3bbc24a31cc4b07c40 + // current commit in commits.env const proto_step = b.step( "protobuf", "Re-generate protobuf definitions based on the `protosol` directory." ++ diff --git a/conformance/scripts/ci-run.sh b/conformance/scripts/ci-run.sh index 02f234a998..bf0d8fc8ac 100755 --- a/conformance/scripts/ci-run.sh +++ b/conformance/scripts/ci-run.sh @@ -13,6 +13,7 @@ echo Setup solana-conformance sudo add-apt-repository ppa:deadsnakes/ppa -y sudo apt install -y python3.11 python3.11-dev python3.11-venv rename gcc scripts/setup-env.sh get-solana-conformance +scripts/setup-env.sh get-test-vectors echo Parse fixture lists PASSING_DIRS=() diff --git a/conformance/scripts/verify-commits.sh b/conformance/scripts/verify-commits.sh deleted file mode 100755 index 09feb52c77..0000000000 --- a/conformance/scripts/verify-commits.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# This script is a basic sanity check that the commit hashes in commits.env are -# consistent with our CI configuration. It's not perfect but checks for some -# obvious inconsistencies. - -trap 'echo ❌ Failed to verify conformance commit at $LINENO: $BASH_COMMAND' ERR - -# ensure working directory is repository root -cd $(dirname "${BASH_SOURCE[0]}")/../.. - -. conformance/commits.env - -grep "// current commit: $SIG_PROTOSOL_COMMIT" conformance/build.zig > /dev/null - -echo ✅ Verified conformance commits. diff --git a/conformance/src/elf_types.zig b/conformance/src/elf_types.zig index 9351b2302a..cbe1f28b17 100644 --- a/conformance/src/elf_types.zig +++ b/conformance/src/elf_types.zig @@ -113,7 +113,9 @@ pub const FeatureSet = struct { const len = try decodeInt(u32, buf[vec_pos..]); try result.features.ensureTotalCapacity(allocator, len); for (0..len) |i| { - result.features.appendAssumeCapacity(try decodeInt(u64, buf[vec_pos + 4 + i * 8 ..])); + result.features.appendAssumeCapacity( + try decodeInt(u64, buf[vec_pos + 4 + i * 8 ..]), + ); } } return result; From 0944fb1433323b5e563a645c0c07e0479d74add3 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Thu, 12 Mar 2026 21:49:30 -0600 Subject: [PATCH 04/35] remove some failing fixtures that are now fixed after new feeatures (and a couple that broke?) --- conformance/scripts/failing.txt | 98 +++------------------------------ 1 file changed, 7 insertions(+), 91 deletions(-) diff --git a/conformance/scripts/failing.txt b/conformance/scripts/failing.txt index 4a6ab5ae82..40ec36b83b 100644 --- a/conformance/scripts/failing.txt +++ b/conformance/scripts/failing.txt @@ -1,3 +1,4 @@ + elf_loader/fixtures/00d79161b59a0ff2507d31ce8d543ca1a6d16014_2457913.fix elf_loader/fixtures/0242b3fdfec540ac3dc138628855c30ccab983b4_2457913.fix elf_loader/fixtures/047982e51cbf0858318b0939f2cc77fd10c1426f_2457913.fix @@ -208,7 +209,8 @@ elf_loader/fixtures/fbb6b3b4412ef81cbf7e4395d34b68f26f61504b_2457913.fix elf_loader/fixtures/fd079efae7cd2049b690829e9bb68b67ae4ed988_2457913.fix elf_loader/fixtures/ff02e3a0e659ffaf15f8720a3a1038b9c7688f93_2457913.fix elf_loader/fixtures/txt_rel_overflow.fix -elf_loader/fixtures/zero_key_syscall_hash.fixinstr/fixtures/bpf-loader-v3-programs/f0fbc9e7-32f9-477d-9c89-2e7a2675f7b7.fixinstr/fixtures/bpf-loader-v3/7d17b624b75a988a5ce30d2ae187800b93a65965_2.fix +elf_loader/fixtures/zero_key_syscall_hash.fixinstr/fixtures/bpf-loader-v3-programs/f0fbc9e7-32f9-477d-9c89-2e7a2675f7b7.fix +instr/fixtures/bpf-loader-v3/7d17b624b75a988a5ce30d2ae187800b93a65965_2.fix instr/fixtures/vote/00a44dc50eee61f0b1d38dbd505398f49a634085_3247128.fix instr/fixtures/vote/0231a48ba8f372da88bcc63837a2eaf8093f0e1b.fix instr/fixtures/vote/0519fd5ef65644c209391035fe644ed65c8e98e2_3414626.fix @@ -346,6 +348,7 @@ instr/fixtures/vote/ad880396b601e053f8c0ba7151b596d5b38a8362_3157971.fix instr/fixtures/vote/aeedd60c825f82e8a2de8b05ea15f44bbf12b86f_3157971.fix instr/fixtures/vote/b07524357168dce5d5edf5fd9da8e529dd2f2fac_3247128.fix instr/fixtures/vote/b1a4ec345127c05c9fe765b945651bcd84190f4c_3247128.fix +instr/fixtures/vote/b2a93396a0ec892bee071bee1b8a0244d7be4df9_2.fix instr/fixtures/vote/b35c5f873976ffe8f625342af7a6e152e8839322_3247128.fix instr/fixtures/vote/b3612d9a66f812eeb82d5baa3c30dac40fbe1559_3247128.fix instr/fixtures/vote/b59cce7fa65efe4cf777670a210249b975001f07.fix @@ -399,14 +402,10 @@ instr/fixtures/vote/fde49d13bb3b39aaa5e7ccdc0709d24c349ab4cd_3157971.fix instr/fixtures/vote/ff178cce11633d416a3691a13454832b117f90e2_3247128.fix instr/fixtures/vote/ffe569418052e3a00192d569f12eb7ee84f96f5c_3247128.fix instr/fixtures/zk_sdk/a0_7f8c0067c3ad9e1b.fix -instr/fixtures/zk_sdk/a10_5365a051ef01d436.fix instr/fixtures/zk_sdk/a11_d7cdabf3af12487d.fix -instr/fixtures/zk_sdk/a12_0217879aa2a65895.fix instr/fixtures/zk_sdk/a13_379ab95b603bfbe4.fix -instr/fixtures/zk_sdk/a14_c47b685eadb4a5cd.fix instr/fixtures/zk_sdk/a15_dcddbae46a61d865.fix instr/fixtures/zk_sdk/a16_3280762193911d15.fix -instr/fixtures/zk_sdk/a1_65ed1485da0973ee.fix instr/fixtures/zk_sdk/a17_9351289cb0ab6c49.fix instr/fixtures/zk_sdk/a18_3fba1553127beac4.fix instr/fixtures/zk_sdk/a2_dc1311dcafd818d7.fix @@ -418,12 +417,8 @@ instr/fixtures/zk_sdk/a7_89497c02cf43312b.fix instr/fixtures/zk_sdk/a8_ee93b2bad194edd6.fix instr/fixtures/zk_sdk/a9_4920e8ff8149d60f.fix instr/fixtures/zk_sdk/acc0_bebebc0c335d0027.fix -instr/fixtures/zk_sdk/acc10_8a370de58dd6ff6f.fix -instr/fixtures/zk_sdk/acc1_0db1092cba2f9ce2.fix instr/fixtures/zk_sdk/acc11_4671635d91d771c3.fix -instr/fixtures/zk_sdk/acc12_e5db40336b25238c.fix instr/fixtures/zk_sdk/acc13_779e4724849e5d1f.fix -instr/fixtures/zk_sdk/acc14_7556c81ef70f6df5.fix instr/fixtures/zk_sdk/acc15_69ecb9c439a0a3d3.fix instr/fixtures/zk_sdk/acc16_22f4789faf31013a.fix instr/fixtures/zk_sdk/acc17_d580e07deb9979eb.fix @@ -436,72 +431,6 @@ instr/fixtures/zk_sdk/acc6_c14d3513e55b3462.fix instr/fixtures/zk_sdk/acc7_692fb904040751ff.fix instr/fixtures/zk_sdk/acc8_9a740675ffb453dc.fix instr/fixtures/zk_sdk/acc9_64c38631c7cc437d.fix -instr/fixtures/zk_sdk/c0_bd186bcb05e520a8.fix -instr/fixtures/zk_sdk/c10_d684d7b0fc98b977.fix -instr/fixtures/zk_sdk/c11_253cf5d1fc3fa741.fix -instr/fixtures/zk_sdk/c12_b3f23265a124afd0.fix -instr/fixtures/zk_sdk/c13_2e7374bbe1d73839.fix -instr/fixtures/zk_sdk/c14_2f8abdc6f72b0403.fix -instr/fixtures/zk_sdk/c15_ec32def91de7d06b.fix -instr/fixtures/zk_sdk/c16_ffc8f805e5b7c58f.fix -instr/fixtures/zk_sdk/c17_a5caa37381b2d88c.fix -instr/fixtures/zk_sdk/c18_408cace41d38aa10.fix -instr/fixtures/zk_sdk/c1_971bc4b339d9f7d2.fix -instr/fixtures/zk_sdk/c2_6cd31d28f28b9c48.fix -instr/fixtures/zk_sdk/c3_d66629b7702ce4f7.fix -instr/fixtures/zk_sdk/c4_6f3a15ade1c2146f.fix -instr/fixtures/zk_sdk/c5_e261ba2806f40657.fix -instr/fixtures/zk_sdk/c6_a136e49107f81eee.fix -instr/fixtures/zk_sdk/c7_7087de00ff03174c.fix -instr/fixtures/zk_sdk/c8_b86dfd15c4bda2e0.fix -instr/fixtures/zk_sdk/c9_43b70a3f4d5f2f61.fix -instr/fixtures/zk_sdk/close0_668eab98628215e4.fix -instr/fixtures/zk_sdk/close1_cbfd771473a9f85a.fix -instr/fixtures/zk_sdk/close2_2016e5dfa9d32469.fix -instr/fixtures/zk_sdk/close3_f1a3b56f71f17947.fix -instr/fixtures/zk_sdk/close4_d508827e16734245.fix -instr/fixtures/zk_sdk/close5_b3629c83eabeac11.fix -instr/fixtures/zk_sdk/close6_7e203c2b6ef45a1f.fix -instr/fixtures/zk_sdk/close7_f4dc3293b59a13e1.fix -instr/fixtures/zk_sdk/cu0_36d9c7a6e5c5fca5.fix -instr/fixtures/zk_sdk/cu10_737856ecdd842d3e.fix -instr/fixtures/zk_sdk/cu11_f123f9cc246d29a6.fix -instr/fixtures/zk_sdk/cu12_0aad3eed2e702c9e.fix -instr/fixtures/zk_sdk/cu13_8642c3983cf25f3b.fix -instr/fixtures/zk_sdk/cu14_0f02b00aa1256e4b.fix -instr/fixtures/zk_sdk/cu15_f8f406e74343181a.fix -instr/fixtures/zk_sdk/cu16_30c779b45c1a5484.fix -instr/fixtures/zk_sdk/cu17_92fb6742378130bd.fix -instr/fixtures/zk_sdk/cu1_7e2d7d8641117e1d.fix -instr/fixtures/zk_sdk/cu18_43dfe64cf72e9b31.fix -instr/fixtures/zk_sdk/cu19_3e0c6b119c6be584.fix -instr/fixtures/zk_sdk/cu2_3aefa8c868a0fcf7.fix -instr/fixtures/zk_sdk/cu3_17237dab373a2f31.fix -instr/fixtures/zk_sdk/cu4_f4e61bc4ab231f51.fix -instr/fixtures/zk_sdk/cu5_540d5ea7efd8b8a9.fix -instr/fixtures/zk_sdk/cu6_eee575f49da79ee3.fix -instr/fixtures/zk_sdk/cu7_9b7c6b54671f19ca.fix -instr/fixtures/zk_sdk/cu8_e4047eff6fe1720e.fix -instr/fixtures/zk_sdk/cu9_033c17748c9aba13.fix -instr/fixtures/zk_sdk/p0_ff056ff78a8bee61.fix -instr/fixtures/zk_sdk/p10_55d7a28760d319a3.fix -instr/fixtures/zk_sdk/p11_78641ebd5f410d60.fix -instr/fixtures/zk_sdk/p12_4f33b954b03a8adb.fix -instr/fixtures/zk_sdk/p13_ea63e0051186ff28.fix -instr/fixtures/zk_sdk/p14_e0c3e5686b7e6727.fix -instr/fixtures/zk_sdk/p15_b0541a4cc941f8ac.fix -instr/fixtures/zk_sdk/p16_0c568bc48424285e.fix -instr/fixtures/zk_sdk/p17_34cb78ca02fd0b88.fix -instr/fixtures/zk_sdk/p1_7359ea72a4a0f381.fix -instr/fixtures/zk_sdk/p18_e305626018f8107e.fix -instr/fixtures/zk_sdk/p2_053ef6a085f36cdb.fix -instr/fixtures/zk_sdk/p3_a0c75ca2eee94af5.fix -instr/fixtures/zk_sdk/p4_b68bff4d6782536d.fix -instr/fixtures/zk_sdk/p5_6546f228ce238f10.fix -instr/fixtures/zk_sdk/p6_7538790469ee47b5.fix -instr/fixtures/zk_sdk/p7_3108ea35d4649816.fix -instr/fixtures/zk_sdk/p8_c0ca36cf824abfe0.fix -instr/fixtures/zk_sdk/p9_614654ebac0467df.fix instr/fixtures/zk_sdk/verif0_a29b1e9d744344a8.fix instr/fixtures/zk_sdk/verif10_bfdef4b3ba4e391e.fix instr/fixtures/zk_sdk/verif11_1dbab83a16fe6a1b.fix @@ -513,29 +442,19 @@ instr/fixtures/zk_sdk/verif16_2c0a2aaa7e50895e.fix instr/fixtures/zk_sdk/verif17_fa91301db4ac9aa0.fix instr/fixtures/zk_sdk/verif18_d71f9e54266c9636.fix instr/fixtures/zk_sdk/verif19_eb8a282364165fc5.fix -instr/fixtures/zk_sdk/verif1_dbcf3baf1d8a0a6c.fix instr/fixtures/zk_sdk/verif20_ed4d78e940a37141.fix instr/fixtures/zk_sdk/verif21_2e343a6532d14d06.fix -instr/fixtures/zk_sdk/verif2_184fb33943b1b37e.fix instr/fixtures/zk_sdk/verif22_d17e45ba8032fa69.fix instr/fixtures/zk_sdk/verif23_613434c5fc608a19.fix instr/fixtures/zk_sdk/verif24_e867c8d239810c2a.fix instr/fixtures/zk_sdk/verif25_3f2701ce1bf35455.fix -instr/fixtures/zk_sdk/verif3_5c93510ddd849e0a.fix -instr/fixtures/zk_sdk/verif4_35eac11243c3926f.fix instr/fixtures/zk_sdk/verif5_be19352e8c9e7991.fix instr/fixtures/zk_sdk/verif6_f8b5d5099faa223c.fix -instr/fixtures/zk_sdk/verif7_56a4cf7ebd275854.fix -instr/fixtures/zk_sdk/verif8_27e9927372242751.fix instr/fixtures/zk_sdk/verif9_d7810f7a7111987a.fix instr/fixtures/zk_sdk/w0_8ec5005274801773.fix -instr/fixtures/zk_sdk/w10_053645a284604fe6.fix instr/fixtures/zk_sdk/w11_19df8196a540fec2.fix -instr/fixtures/zk_sdk/w12_7d6209c0ef81b09e.fix instr/fixtures/zk_sdk/w13_21ed12da0cc9b04b.fix -instr/fixtures/zk_sdk/w14_b6df5d2e8f516a17.fix instr/fixtures/zk_sdk/w15_09e751443b873cf7.fix -instr/fixtures/zk_sdk/w1_5c0cda9f092206bd.fix instr/fixtures/zk_sdk/w16_a06c5b45412cac74.fix instr/fixtures/zk_sdk/w17_e882a520e3faf5cc.fix instr/fixtures/zk_sdk/w18_de611fd4e365b353.fix @@ -548,12 +467,8 @@ instr/fixtures/zk_sdk/w7_a0e0c80764d4d7e9.fix instr/fixtures/zk_sdk/w8_2d9ce48583a46bee.fix instr/fixtures/zk_sdk/w9_181202ef9796e3c7.fix instr/fixtures/zk_sdk/wacc0_4565bf244f7d3c94.fix -instr/fixtures/zk_sdk/wacc10_539f367d93a244db.fix instr/fixtures/zk_sdk/wacc11_6ea7c70a4400aa1e.fix -instr/fixtures/zk_sdk/wacc12_c82d7ca279e283fc.fix instr/fixtures/zk_sdk/wacc13_690bdf1be9ab6b1f.fix -instr/fixtures/zk_sdk/wacc1_3dacb803b0756778.fix -instr/fixtures/zk_sdk/wacc14_0978c04b367c407b.fix instr/fixtures/zk_sdk/wacc15_ae77b943bc1ccebe.fix instr/fixtures/zk_sdk/wacc16_7da88539580c7826.fix instr/fixtures/zk_sdk/wacc17_ad6c57f722bcf5b1.fix @@ -565,8 +480,7 @@ instr/fixtures/zk_sdk/wacc5_6a9b1525cf8f5452.fix instr/fixtures/zk_sdk/wacc6_5f3bf70e8572e52b.fix instr/fixtures/zk_sdk/wacc7_a08f10406aee35a4.fix instr/fixtures/zk_sdk/wacc8_4370fd00b238a5a0.fix -instr/fixtures/zk_sdk/wacc9_d13848d723bd8cfa.fix -txn/fixtures/006cec687919df8ddc4fd111e60e4864c7a94a79_2288978.fix +instr/fixtures/zk_sdk/wacc9_d13848d723bd8cfa.fixtxn/fixtures/006cec687919df8ddc4fd111e60e4864c7a94a79_2288978.fix txn/fixtures/00af752d1f13d997b80e291115dd08907fc04653_265678.fix txn/fixtures/00dc63d6f5824efa900302649eeca7983e5d3f5a_1834424.fix txn/fixtures/0103115bd3ec4f27fcf4dbd7cee22a530e68f797_2135631.fix @@ -2378,6 +2292,8 @@ txn/fixtures/ffa46950755b08e86d98c678d4ee042d59e4ef4d_265678.fix txn/fixtures/ffdc55b81039969dd81e130f312ed9889468364c_2237040.fix txn/fixtures/fff87aff2cbaee9cdb9489c98db0adcc0309b97f_2202462.fix txn/fixtures/is_signer_err_handling.fix +txn/fixtures/poc_348-processed-sibling.fix +txn/fixtures/poc_348-sysvar-instructions.fix txn/fixtures/txn-21V6e59cxaU8WcB7RDqGoJqfzrP7gdUhvC9wAfokeRUdbyC7Wy2ML1ptinGWmyFbNazSDNZHCzxiUDXDGY18DRAM.fix txn/fixtures/txn-2vxNaM7VAooMJnt84LcbqfJRTaCrVcvHcDBw5JDeuTbsqYipAyLo2pfVtBEDFLCeczRcpKRHBfSgwC3MpMLTwVtR.fix txn/fixtures/txn-3eDdfZE6HswPxFKrtnQPsEmTkyL1iP57gRPEXwaqNGAqF1paGXCYYMwh7z4uQDUMgFor742sikVSQZW1gFRDhPNh.fix From f1062f6a98d8e75eab3dcb7a690e5308d54f01dc Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Fri, 13 Mar 2026 17:20:06 -0600 Subject: [PATCH 05/35] fix(conformance): ci-run.sh --- conformance/scripts/ci-run.sh | 66 +++++++++++++++----------------- conformance/scripts/failing.txt | 6 ++- conformance/scripts/setup-env.sh | 17 ++++++-- 3 files changed, 48 insertions(+), 41 deletions(-) diff --git a/conformance/scripts/ci-run.sh b/conformance/scripts/ci-run.sh index bf0d8fc8ac..3bb96a1fa7 100755 --- a/conformance/scripts/ci-run.sh +++ b/conformance/scripts/ci-run.sh @@ -1,50 +1,44 @@ #!/usr/bin/env bash +# # This script runs the `solana_conformance` step in CI. +# +# To run locally, set these variables: +# export SPLIT_TESTS=false +# export PREBUILT_LIB_DIR=zig-out/lib +# set -euxo pipefail +SPLIT_TESTS=${SPLIT_TESTS:-true} PREBUILT_LIB_DIR=${PREBUILT_LIB_DIR:-../workspace/conformance-release/lib} NUM_THREADS=${NUM_THREADS:-$(nproc || sysctl -n hw.ncpu || echo 1)} conformance_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd $conformance_dir -. commits.env -echo Setup solana-conformance -sudo add-apt-repository ppa:deadsnakes/ppa -y -sudo apt install -y python3.11 python3.11-dev python3.11-venv rename gcc -scripts/setup-env.sh get-solana-conformance -scripts/setup-env.sh get-test-vectors - -echo Parse fixture lists -PASSING_DIRS=() - -set +x -while IFS= read -r line; do - if [[ -n "$line" ]]; then - PASSING_DIRS+=("$line") - fi -done < "scripts/fixtures.txt" - -FIXTURES=() - -for dir in "${PASSING_DIRS[@]}"; do - while IFS= read -r -d '' file; do - FIXTURES+=("$file") - done < <(find "test-vectors/$dir" -type f -name '*.fix' -print0) -done - -mkdir -p split-fixtures/ -printf "%s\n" "${FIXTURES[@]}" \ - | circleci tests split \ - | xargs -d '\n' -I{} cp "{}" split-fixtures/ -set -x - -export LD_PRELOAD=/lib/x86_64-linux-gnu/libasan.so.8 -export ASAN_OPTIONS=detect_leaks=0 - -echo "Running fixtures" +echo Getting dependencies +if command -v apt &> /dev/null; then + sudo add-apt-repository ppa:deadsnakes/ppa -y + sudo apt install -y python3.11 python3.11-dev python3.11-venv rename gcc +fi +scripts/setup-env.sh + +echo Selecting a subset of fixtures to run +rm -rf env/split-fixtures/ +mkdir -p env/split-fixtures/ +# Finds all .fix files in test-vectors, excludes known failures, splits across +# CI nodes, and links the selected subset into split-fixtures +comm -23 \ + <(find "env/test-vectors/" \ + -path 'env/test-vectors/block/*' -prune \ + -o -type f -name '*.fix' -printf '%P\n' | sort) \ + <(sort scripts/failing.txt) \ + | if [ "$SPLIT_TESTS" == "true" ]; then circleci tests split; else cat; fi \ + | sed 's_^_env/test-vectors/_' \ + | xargs -d '\n' ln -t env/split-fixtures/ + +echo Running fixtures env/pyvenv/bin/solana-conformance exec-fixtures \ --num-processes $NUM_THREADS \ -t ${PREBUILT_LIB_DIR}/libsolfuzz_sig.so \ -o test_results/ \ - -i split-fixtures/ | tee /dev/tty | grep -q "Failed: 0," + -i env/split-fixtures/ | tee /dev/tty | grep -q "Failed: 0," diff --git a/conformance/scripts/failing.txt b/conformance/scripts/failing.txt index 40ec36b83b..86e0ec29ae 100644 --- a/conformance/scripts/failing.txt +++ b/conformance/scripts/failing.txt @@ -209,7 +209,8 @@ elf_loader/fixtures/fbb6b3b4412ef81cbf7e4395d34b68f26f61504b_2457913.fix elf_loader/fixtures/fd079efae7cd2049b690829e9bb68b67ae4ed988_2457913.fix elf_loader/fixtures/ff02e3a0e659ffaf15f8720a3a1038b9c7688f93_2457913.fix elf_loader/fixtures/txt_rel_overflow.fix -elf_loader/fixtures/zero_key_syscall_hash.fixinstr/fixtures/bpf-loader-v3-programs/f0fbc9e7-32f9-477d-9c89-2e7a2675f7b7.fix +elf_loader/fixtures/zero_key_syscall_hash.fix +instr/fixtures/bpf-loader-v3-programs/f0fbc9e7-32f9-477d-9c89-2e7a2675f7b7.fix instr/fixtures/bpf-loader-v3/7d17b624b75a988a5ce30d2ae187800b93a65965_2.fix instr/fixtures/vote/00a44dc50eee61f0b1d38dbd505398f49a634085_3247128.fix instr/fixtures/vote/0231a48ba8f372da88bcc63837a2eaf8093f0e1b.fix @@ -480,7 +481,8 @@ instr/fixtures/zk_sdk/wacc5_6a9b1525cf8f5452.fix instr/fixtures/zk_sdk/wacc6_5f3bf70e8572e52b.fix instr/fixtures/zk_sdk/wacc7_a08f10406aee35a4.fix instr/fixtures/zk_sdk/wacc8_4370fd00b238a5a0.fix -instr/fixtures/zk_sdk/wacc9_d13848d723bd8cfa.fixtxn/fixtures/006cec687919df8ddc4fd111e60e4864c7a94a79_2288978.fix +instr/fixtures/zk_sdk/wacc9_d13848d723bd8cfa.fix +txn/fixtures/006cec687919df8ddc4fd111e60e4864c7a94a79_2288978.fix txn/fixtures/00af752d1f13d997b80e291115dd08907fc04653_265678.fix txn/fixtures/00dc63d6f5824efa900302649eeca7983e5d3f5a_1834424.fix txn/fixtures/0103115bd3ec4f27fcf4dbd7cee22a530e68f797_2135631.fix diff --git a/conformance/scripts/setup-env.sh b/conformance/scripts/setup-env.sh index 0987956be5..d43b032760 100755 --- a/conformance/scripts/setup-env.sh +++ b/conformance/scripts/setup-env.sh @@ -26,16 +26,27 @@ get-repo-at-commit() { popd } -full-setup() { +ask() { if [[ -d "$env" ]]; then echo Any local changes you have to solana-conformance, solfuzz-agave, or test-vectors will be deleted. read -p "Do you want to continue? [y/N]: " confirm if [[ ! "$confirm" =~ ^[Yy]$ ]]; then echo "Aborted." - exit 1 + return 1 fi fi +} + +# everything you need to run the conformance tests +basic() { + ask || exit 0 + get-test-vectors + get-solana-conformance +} +# useful if you want to locally debug agave +full() { + ask || exit 0 get-solfuzz-agave get-test-vectors get-solana-conformance @@ -98,7 +109,7 @@ EOF } if [ $# -eq 0 ]; then - full-setup + basic else "$@" fi From 05f4e11100248bb61dba995896311d0471e76bb5 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Tue, 17 Mar 2026 18:06:20 -0600 Subject: [PATCH 06/35] conformance: system deps helper + update readme --- conformance/README.md | 42 ++++++++-- conformance/scripts/ci-run.sh | 5 +- conformance/scripts/install-system-deps.sh | 92 ++++++++++++++++++++++ docs/docusaurus/docs/code/conformance.md | 42 ++++++++-- 4 files changed, 167 insertions(+), 14 deletions(-) create mode 100755 conformance/scripts/install-system-deps.sh diff --git a/conformance/README.md b/conformance/README.md index 2d3cf7d049..ee2b69783a 100644 --- a/conformance/README.md +++ b/conformance/README.md @@ -1,11 +1,21 @@ Dependencies: - python 3.11 -- cargo/rust - zig 0.15.2 -- git 2.49 +- git + +Optional dependencies, for building solfuzz-agave: - cmake +- gcc +- cargo/rust + +# Run tests + +Just to run the conformance tests. ```bash +# install system dependencies +scripts/install-system-deps.sh solana-conformance + # set up the test environment scripts/setup-env.sh source env/pyvenv/bin/activate @@ -13,11 +23,33 @@ source env/pyvenv/bin/activate # compile the sig binary to test zig build -Doptimize=ReleaseSafe solfuzz_sig -# run the conformance tests for the first time +# re-run conformance tests using test vectors +./run.py + +# for more options +./run.py --help +``` + +# Debug Agave + +If you want to debug solfuzz_agave or manually generate fixtures, you'll need to set up the `full` environment instead of just the basic default. + +```bash +# install system dependencies +scripts/install-system-deps.sh solana-conformance solfuzz-agave + +# set up the test environment, including solfuzz_agave +scripts/setup-env.sh full +source env/pyvenv/bin/activate + +# compile the sig binary to test +zig build -Doptimize=ReleaseSafe solfuzz_sig + +# create the fixtures from agave, and run the conformance tests ./run.py --create -# re-run conformance tests without re-creating the fixtures from scratch -./run.py +# re-run conformance tests using your created fixtures +./run.py --use-created # for more options ./run.py --help diff --git a/conformance/scripts/ci-run.sh b/conformance/scripts/ci-run.sh index 3bb96a1fa7..11ceb0c676 100755 --- a/conformance/scripts/ci-run.sh +++ b/conformance/scripts/ci-run.sh @@ -16,10 +16,7 @@ conformance_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd $conformance_dir echo Getting dependencies -if command -v apt &> /dev/null; then - sudo add-apt-repository ppa:deadsnakes/ppa -y - sudo apt install -y python3.11 python3.11-dev python3.11-venv rename gcc -fi +scripts/install-system-deps.sh solana-conformance scripts/setup-env.sh echo Selecting a subset of fixtures to run diff --git a/conformance/scripts/install-system-deps.sh b/conformance/scripts/install-system-deps.sh new file mode 100755 index 0000000000..648295c96f --- /dev/null +++ b/conformance/scripts/install-system-deps.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash +set -euo pipefail + +conformance_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd $conformance_dir + +# installs packages in ubuntu. +# can handle any package in the official repos and python311 +ubuntu() { + local python=false + local normal=() + for arg in "$@"; do + case "$arg" in + python311) python=true ;; + *) normal+=("$arg") ;; + esac + done + + if ! dpkg -s "${normal[@]}" &>/dev/null; then + sudo apt-get install -y "${normal[@]}" + fi + + if [[ "$python" == "true" ]]; then + if ! dpkg -s python3.11 python3.11-dev python3.11-venv &>/dev/null; then + sudo add-apt-repository ppa:deadsnakes/ppa -y + sudo apt-get update + sudo apt-get install -y python3.11 python3.11-dev python3.11-venv + fi + fi +} + +# installs packages in arch linux. +# can handle any package in the official repos and python311 +arch() { + local python=false + local normal=() + for arg in "$@"; do + case "$arg" in + python311) python=true ;; + *) normal+=("$arg") ;; + esac + done + + if ! pacman -Qq "${normal[@]}" &>/dev/null; then + sudo pacman -S --noconfirm "${normal[@]}" + fi + + if [[ "$python" == "true" ]]; then + if ! pacman -Qq python311 &>/dev/null; then + git clone https://aur.archlinux.org/python311.git env/python311 + pushd env/python311 + makepkg -si --noconfirm + popd + rm -rf env/python311 + fi + fi +} + +# print a help message if user hasn't provided any arguments +if [ "$#" -eq 0 ]; then + cat <<-EOF + + Usage: $0 [dependents...] + solana-conformance Install solana-conformance's dependencies. + solfuzz-agave Install solfuzz-agave's dependencies. + + EOF + exit 1 +fi + +# detect operating system +. /etc/os-release +case "$ID" in + ubuntu) func=ubuntu ;; + arch) func=arch ;; + *) echo "Unsupported OS: $ID, not installing anything" ;; +esac + +# collect the dependents' dependencies +deps=() +for arg in "$@"; do + case "$arg" in + solana-conformance) deps+=(git python311) ;; + solfuzz-agave) deps+=(gcc git cmake) ;; + *) echo "Unknown dependent: $arg"; exit 1 ;; + esac +done + +# install dependencies +$func "${deps[@]}" + +echo Dependencies installed. diff --git a/docs/docusaurus/docs/code/conformance.md b/docs/docusaurus/docs/code/conformance.md index 2d3cf7d049..ee2b69783a 100644 --- a/docs/docusaurus/docs/code/conformance.md +++ b/docs/docusaurus/docs/code/conformance.md @@ -1,11 +1,21 @@ Dependencies: - python 3.11 -- cargo/rust - zig 0.15.2 -- git 2.49 +- git + +Optional dependencies, for building solfuzz-agave: - cmake +- gcc +- cargo/rust + +# Run tests + +Just to run the conformance tests. ```bash +# install system dependencies +scripts/install-system-deps.sh solana-conformance + # set up the test environment scripts/setup-env.sh source env/pyvenv/bin/activate @@ -13,11 +23,33 @@ source env/pyvenv/bin/activate # compile the sig binary to test zig build -Doptimize=ReleaseSafe solfuzz_sig -# run the conformance tests for the first time +# re-run conformance tests using test vectors +./run.py + +# for more options +./run.py --help +``` + +# Debug Agave + +If you want to debug solfuzz_agave or manually generate fixtures, you'll need to set up the `full` environment instead of just the basic default. + +```bash +# install system dependencies +scripts/install-system-deps.sh solana-conformance solfuzz-agave + +# set up the test environment, including solfuzz_agave +scripts/setup-env.sh full +source env/pyvenv/bin/activate + +# compile the sig binary to test +zig build -Doptimize=ReleaseSafe solfuzz_sig + +# create the fixtures from agave, and run the conformance tests ./run.py --create -# re-run conformance tests without re-creating the fixtures from scratch -./run.py +# re-run conformance tests using your created fixtures +./run.py --use-created # for more options ./run.py --help From c0313a4012e2c4169bb0596e370105c6f52bdc36 Mon Sep 17 00:00:00 2001 From: InKryption Date: Thu, 19 Mar 2026 00:58:11 +0100 Subject: [PATCH 07/35] omit hashes for zero len rodata & calldests --- conformance/scripts/failing.txt | 211 -------------------------------- conformance/src/elf_loader.zig | 2 - conformance/src/elf_types.zig | 32 +++-- 3 files changed, 23 insertions(+), 222 deletions(-) diff --git a/conformance/scripts/failing.txt b/conformance/scripts/failing.txt index 86e0ec29ae..27b901b5f6 100644 --- a/conformance/scripts/failing.txt +++ b/conformance/scripts/failing.txt @@ -1,215 +1,4 @@ -elf_loader/fixtures/00d79161b59a0ff2507d31ce8d543ca1a6d16014_2457913.fix -elf_loader/fixtures/0242b3fdfec540ac3dc138628855c30ccab983b4_2457913.fix -elf_loader/fixtures/047982e51cbf0858318b0939f2cc77fd10c1426f_2457913.fix -elf_loader/fixtures/04aeab3b5f9000dbfcd20c504e2cd0e2b14f5e3e_2457913.fix -elf_loader/fixtures/04cfc56717630fc6dfa703f4de619e836a458e8a_2457913.fix -elf_loader/fixtures/052326f846682ec7ee90a24bb4a20413fbeaa36d_2457913.fix -elf_loader/fixtures/0569a7569802043a03c95c0b8639460d89d032e8_2457913.fix -elf_loader/fixtures/065b3fe8f90aa564a6eb2cebe779ddbe3a202af0_2457913.fix -elf_loader/fixtures/078c1a6ee47dcf2a8a1683966f109be5655cdafd_2457913.fix -elf_loader/fixtures/083154620acac85c4cf442ba0a01e8ea0cf7ef38_2457913.fix -elf_loader/fixtures/086c995ff3effa2a6b34f41b2a1c2e97dd8cd416_2457913.fix -elf_loader/fixtures/089d6c55a14d581a1a56ac636b22474a27ed99e6_2457913.fix -elf_loader/fixtures/090aaea4fa62fb3efd564f2bdc7da61f862fe793_2457913.fix -elf_loader/fixtures/0aba68d68ade7c3f62ac8e3998a1c27cd6a758eb_2457913.fix -elf_loader/fixtures/0bff661e9f8987078548c975a12afe59841f58b9_2457913.fix -elf_loader/fixtures/0c7bee4a0af6d70289a7591d14cb0391d232f9e3_2457913.fix -elf_loader/fixtures/0ddd87a581db7a6e52253908508d99d1bff8326a_2457913.fix -elf_loader/fixtures/0e299546f55ee851006b35981dfd12bff173dd10_2457913.fix -elf_loader/fixtures/0e6713ecdd5f064b2281d7621b2843e87e2ef150_2457913.fix -elf_loader/fixtures/1073d1d92508364246fe94671ae694df3ae8bf3f_2457913.fix -elf_loader/fixtures/10b90b4105fa41d829f367ab55f4cdf3b661cf2a_2457913.fix -elf_loader/fixtures/14016fe4fbb7061ba8dca500f6c8890177b62aa6_2457913.fix -elf_loader/fixtures/14d9a1165b0d28aa9fd147b6c315397e68dea9d7_2457913.fix -elf_loader/fixtures/14ec572aa42ed5565a2d2ede9b0eecbf245fe654_2457913.fix -elf_loader/fixtures/18f279d95b181a83c9633259e5b47796de6a369a_2457913.fix -elf_loader/fixtures/1a8e16fc8b44ad84931e996ad98a17a7d11f72a7_2457913.fix -elf_loader/fixtures/1aa7b3d48667db5716f3650c4bd54ed79e341cc3_2457913.fix -elf_loader/fixtures/1b48a7559baa1bf05e954c3ed995c76772046c7e_2457913.fix -elf_loader/fixtures/1bab600b90220a8a1f2552b4d56194d82409bf15_2457913.fix -elf_loader/fixtures/1fb5adc3fec02c5d249d4d641bc61d82ce80cbc6_2457913.fix -elf_loader/fixtures/2033b40b103e7054fe8a665892e5700524f06000_2457913.fix -elf_loader/fixtures/20394964212424d85003b88c9027e7adcfbc8467_2457913.fix -elf_loader/fixtures/2165d6e924bfec5a5aa89852de6774f34d8176e5_2457913.fix -elf_loader/fixtures/223b87cb4d9c4c6b58d015c14a501410f5e54302_2457913.fix -elf_loader/fixtures/2378d6832b6c98ed668bc4bdec89e17a555b582a_2457913.fix -elf_loader/fixtures/249deb1d6aad069de0479e3294958abc9e860c85_2457913.fix -elf_loader/fixtures/28841d3995fdfdbbd72d8185034a9cabdb1db4f2_1362257.fix -elf_loader/fixtures/2a0942f2074d2d651fff81fd8d4be4c2b0db9fec_2457913.fix -elf_loader/fixtures/2a2d9dcee43b2dfe2f0c4259c1a604b0c80b9c3f_2457913.fix -elf_loader/fixtures/2ae1d458f581be433a1f6906d242a60ba1f1a463_2457913.fix -elf_loader/fixtures/2eb39b900910f31de106abc91de4e8a5103541ab_2457913.fix -elf_loader/fixtures/30822634f4015f5e0859eb91869a189e8e1dec63_2457913.fix -elf_loader/fixtures/3228b50c4cc76348e88a794c607f56e36aa1122c_191376.fix -elf_loader/fixtures/32a24346a7101a5e681cc6f51c9962985cf6343f_2457913.fix -elf_loader/fixtures/33d7a0e12a00fca7cd9623d89daccc82e509b6ad_2457913.fix -elf_loader/fixtures/33ea018c2f7eb5b209c52a77b0515a45bf63875d_2457913.fix -elf_loader/fixtures/34015f9405b035c66e47661a00ba4d44a11961d3_2457913.fix -elf_loader/fixtures/35835618d2e5d602ea668b6cb26e38ced30c94d4_2457913.fix -elf_loader/fixtures/3651bf1d5578f5c230fa8747211770bb042bd1c0_2457913.fix -elf_loader/fixtures/37ac82ef847f0ad50f97b47479a3089f41271974_2457913.fix -elf_loader/fixtures/39367610f064c8677fd2d1c0c1c89b804bb00699_2457913.fix -elf_loader/fixtures/3a8c535dbfb3992407d3e7d2c84d7430c667a86e_2457913.fix -elf_loader/fixtures/3b0f30724a23c7a32a1e050ab754ae91a9c3529b_2457913.fix -elf_loader/fixtures/3bb4cbcbe5a3e6674babcfbcd776988ad61b99e4_2457913.fix -elf_loader/fixtures/3d58b7c07ca48fc3a83d4f501b201dec148e12d9_2457913.fix -elf_loader/fixtures/3d6f4177d9c8fb062600ab112976cec1265bb92c_2457913.fix -elf_loader/fixtures/3d8d2b250aa110b22fc6ca799a41e4ed956bd0b6_2457913.fix -elf_loader/fixtures/3f68efe165aa345f6b68e28608715648b6f7a873_2457913.fix -elf_loader/fixtures/40d1eb60b0fb023809ec6c130daff363e925369c_1363415.fix -elf_loader/fixtures/40fea930a052a22ca29aa39cacc7ca0ae19ea688_2457913.fix -elf_loader/fixtures/413d54be2f7d39a5ce6067222eb79d2c72291519_2457913.fix -elf_loader/fixtures/41ee3481a9d4637b823e3ff56a0bc5d5a6f666db_2457913.fix -elf_loader/fixtures/437063b4f1c2c7dba1384ed170c52969b4d79326_2457913.fix -elf_loader/fixtures/45fada2a5fa78ddc614a3d2dc9bc1ed55ea4f4db_2457913.fix -elf_loader/fixtures/46eae950f24664af58968317bf4236cad8d826be_2457913.fix -elf_loader/fixtures/47b26c5d7ff1d9421d76707aa9c2b890730d73ec_1364202.fix -elf_loader/fixtures/48b6b381bde97015c28fa2ec477e7f58c43ac5fc_2457913.fix -elf_loader/fixtures/4917809ee1881f723b49a503ed4bca58a0fa44ed_2457913.fix -elf_loader/fixtures/4b572cf6ddb8837ac51adb2cb4b06c27e5a6cd0c_2457913.fix -elf_loader/fixtures/4bca5cacd9d1857dec15232d02a6b4af3d9ba87c_2457913.fix -elf_loader/fixtures/4c481501030823c28bf81e2b996228adad035bb0_2457913.fix -elf_loader/fixtures/4c6a70c24c9c16f7570855175cddbd38b5b5bf72_2457913.fix -elf_loader/fixtures/4ca6e9b20ad2bec429baf9bc8425431f52827028_2457913.fix -elf_loader/fixtures/4d4402f899d8b53639f28c8a54cc6f2b1db959de_2457913.fix -elf_loader/fixtures/4db78a4f7153bffe3088203f09c4dfda37d6307b_2457913.fix -elf_loader/fixtures/4ee9ca76c1d746a2248cf709df33e904c52f54bc_2457913.fix -elf_loader/fixtures/5037d1f71b998565bf7dbc5a5f99c2649efa5dcf_2457913.fix -elf_loader/fixtures/509cc9950c45b874d7ad5a2b80a0e63a04652036_2457913.fix -elf_loader/fixtures/518deaecc5152ed4e2671f129e3bea7583e931f9_2457913.fix -elf_loader/fixtures/52217ad01650a19c6d64ae5fefec3943c8da8e21_2457913.fix -elf_loader/fixtures/537aacf504724fcdaa2190c2ef31ef4d2b8b242e_2457913.fix -elf_loader/fixtures/55745488140f5b73a0e0390e37cbdbb3a496868c_2457913.fix -elf_loader/fixtures/56e4b299bdb5bd2d791db3df68bd0278b8fe539c_2457913.fix -elf_loader/fixtures/575839f673a3779c09aced161d58378e3e928bad_2457913.fix -elf_loader/fixtures/595eab5fdd6d763367c8122a9be3f7e6adc611a4_2457913.fix -elf_loader/fixtures/5a091964d74221d6fb9b5c0569cb5a9eabaa306c_2457913.fix -elf_loader/fixtures/5dba6694399028c8f95839fe336dad356f4a017c_2457913.fix -elf_loader/fixtures/617af96b4241038b627255fc0e2f60f773fd6191_3418875.fix -elf_loader/fixtures/617af96b4241038b627255fc0e2f60f773fd6191_3425258.fix -elf_loader/fixtures/617af96b4241038b627255fc0e2f60f773fd6191_3438475.fix -elf_loader/fixtures/62bdaa25165780c93df965a5e6c1430a4e4789e7_2457913.fix -elf_loader/fixtures/655540d81db7c0e743b2bfd62359ed3be17abbc6_2457913.fix -elf_loader/fixtures/65e4ce84930b1f3d3c1c14b32044909ce4f2720c_2457913.fix -elf_loader/fixtures/6725d8a63d47cfc8f36d44a3bf960447d2dc9ae2_2457913.fix -elf_loader/fixtures/6779effa4274487ab0a419c36c7c3028add8b87e_2457913.fix -elf_loader/fixtures/6848f0d283bc6baf77e4c5f1b6b9ad69c2244b86_2457913.fix -elf_loader/fixtures/693b86bb1b43736a2edcdd9a8e21e843f56e345c_2457913.fix -elf_loader/fixtures/6a473abae94569306c1643b3eff5425111501e7e_2457913.fix -elf_loader/fixtures/6a9fe740e12dd954350ac19cbfd44110acd584e3_2457913.fix -elf_loader/fixtures/6abe80e448f6cc498e31ef3878c68723972d821c_2457913.fix -elf_loader/fixtures/6b58603cc0e75b5db8ad22a58bfce064206c7c29_2457913.fix -elf_loader/fixtures/6b94a47847b5df3c50672aa0639f3e74b32a63c9_2457913.fix -elf_loader/fixtures/6c0f82a678ac859ca62a10c7ec7b47024e2f24f0_2457913.fix -elf_loader/fixtures/6c25bed825afd2c6759cf352996f8b8ca723b1fd_2457913.fix -elf_loader/fixtures/6c373ddab9b7fcc78d0dfdc6651e26b2ee04339d_2457913.fix -elf_loader/fixtures/6dbae968219b89cada56498b88c74542ac3342d1_2457913.fix -elf_loader/fixtures/7059ba00848776efc5c775f664542970d1c512f5_2457913.fix -elf_loader/fixtures/7326d01acb8098c6337e26bc4f9dddd843a9c623_2457913.fix -elf_loader/fixtures/746f1d58f35ea6ec61c5767c72c0de1bf66345a3_1362870.fix -elf_loader/fixtures/793a394f1b399060c699e85f82fb7304132513cb_2457913.fix -elf_loader/fixtures/79aef329e4744d7108148248a61536dec97b3b3e_2457913.fix -elf_loader/fixtures/7b34cd3f0c6c3bb55ecaff2262def730a5a65d7e_2457913.fix -elf_loader/fixtures/7c61c389c2b255e396fc043988565613e3025f55_2457913.fix -elf_loader/fixtures/7c886c5ca1b21e1a6b0a5bc709c2816ab1e8ab88_2457913.fix -elf_loader/fixtures/7d8e250985d8b9fe229285e0b386dba8f66fee42_2457913.fix -elf_loader/fixtures/80d287a8d484e6f6798ae3d9df0cd6abe69912b3_2457913.fix -elf_loader/fixtures/836d84a9e34bb2e51aec7213c9e063fc54ff74aa_2457913.fix -elf_loader/fixtures/8481827d2d33a151ca8179b38d1a8fc3dc18a8a2_2457913.fix -elf_loader/fixtures/8662b3544c39193de00b99de0f9ce6ab52162ebe_2457913.fix -elf_loader/fixtures/871df26d4525c3983baf9b9b8653c5ce38b2ecde_2457913.fix -elf_loader/fixtures/87c4bf24fdc97a796c091f6bd5a25a1a5ad02f1d_2457913.fix -elf_loader/fixtures/89dc7b569a6980e8fc1ce93f428589fbd9b1b564_2457913.fix -elf_loader/fixtures/8ccd90e07a6314f47f43cec25ca6eed51d52ef1b_2457913.fix -elf_loader/fixtures/8d00105d1a4c75fe3aa7ad300db367461193819b_2457913.fix -elf_loader/fixtures/8d296a42a29beb5e1beae2cfd0309eedcfdf0fab_2457913.fix -elf_loader/fixtures/8fd375cfa26ea85280c345106cda32ed478fa865_2457913.fix -elf_loader/fixtures/90eb3db11c89835a6b577e7d4557aebe72f26b3b_2457913.fix -elf_loader/fixtures/91cdb48f5996d60bf270ff5cebe7cdda464f8412_2457913.fix -elf_loader/fixtures/928f607d24d0c75923364d3baa4b0bc2def54ddc_2457913.fix -elf_loader/fixtures/9383395f58af412eaee7bc34135d3c3e149b2aa2_2457913.fix -elf_loader/fixtures/9575a567cb6b0ffac792b23ad733a8c7e8846d20_2457913.fix -elf_loader/fixtures/95c9324ed047579da5257c3952f70e5aa5aad1a1_2457913.fix -elf_loader/fixtures/96de6961ecf9703b5be0eb886902bcc57181792d_2457913.fix -elf_loader/fixtures/9733fd75982a6774113fd3a9bc0c8f850d69238d_2457913.fix -elf_loader/fixtures/97a5b5535255d1bbeb3324257a103a17c2806651_2457913.fix -elf_loader/fixtures/9d4e7adc51e99cb53060d2f1556dfba77de53c0f_2457913.fix -elf_loader/fixtures/9efce914bf44995affd50d140beb245fb171f628_2457913.fix -elf_loader/fixtures/a03c4da6a78706f0f9ad9720458695bc2fa6164c_2457913.fix -elf_loader/fixtures/a0a6cbe7d3e97df5497fdd051b1e9b3af76e06e1_2457913.fix -elf_loader/fixtures/a0f3d8c6fc1076e6c6b2b7770c6b0eca9bf4963a_2457913.fix -elf_loader/fixtures/a150a1b20175c6ae0b4392a8b9bf476325855da8_2457913.fix -elf_loader/fixtures/a16fa2f0b9df4d391bff95eac3736e30821ca275_2457913.fix -elf_loader/fixtures/a2238fa0cb2187366e26ce7c041c644e1f8766a3_2457913.fix -elf_loader/fixtures/a2455a226ef247f22ffb681f3b9c15d881160d0a_2457913.fix -elf_loader/fixtures/a2b6cca07f63189ddaf104ff1db3853779f9714b_2457913.fix -elf_loader/fixtures/a37fc787d11a1a8a3fcc2b7a17ea8e13b3f1b53d_2457913.fix -elf_loader/fixtures/a45ff4c68b263e326be34e671e486e3eabecbf36_2457913.fix -elf_loader/fixtures/a4732f4085758004a4374e89554f77ef817f9281_2457913.fix -elf_loader/fixtures/a5f1bb55d96ff526fb1cf2f2dd0690545ef039e8_2457913.fix -elf_loader/fixtures/a9d13ab8bed2314d610ef9f95b14ddade9fefbd8_2457913.fix -elf_loader/fixtures/ab4c13bfb8a6440887ff20e56179d8a392384a8e_2457913.fix -elf_loader/fixtures/ac862dcfcb6eb8ffb6bf418794ee1f077fbefb75_2457913.fix -elf_loader/fixtures/ad8d7e3debf18677e296cf896c26c94fca7a4a56_2457913.fix -elf_loader/fixtures/af352241691af1dfe48487cf2ee06192bebe420e_2457913.fix -elf_loader/fixtures/af975314a705e62eadb90b9e7b30e181577a8bc4_2457913.fix -elf_loader/fixtures/b0537e4107a437432d0bc1d1a592db6a0383d10a_2457913.fix -elf_loader/fixtures/b345675565ddef17b7fa39c7fb7b3af502c7fc7b_2457913.fix -elf_loader/fixtures/b41944f7542d3a5e6250ddc33dba871874b9da6c_2457913.fix -elf_loader/fixtures/b5310e008413e93a82c2be98b6f78aa389bc32b1_2457913.fix -elf_loader/fixtures/b7aba828ee52a2c9bb6a8246263d188b4ce25608_2457913.fix -elf_loader/fixtures/b821d309e18fb12ecf8494eb2b7eba10b4ab0d33_2457913.fix -elf_loader/fixtures/b8cacd400919310cf2f68982a33e7a305785bde1_2457913.fix -elf_loader/fixtures/bb1b1bef5de668dd9b8044d7c0ecb0ecb6b7a70e_2457913.fix -elf_loader/fixtures/bda57df2e22b09c6c66268ec0dccac10909de95d_2457913.fix -elf_loader/fixtures/bda622860e1119ec745a27bfa7a7f64d50710b4a_2457913.fix -elf_loader/fixtures/c08b8f5b9f3923a1a177f123f9f719c1ed84a788_2457913.fix -elf_loader/fixtures/c2877dd14c9890ccf43febc851fe36061d8973bf_2457913.fix -elf_loader/fixtures/c2c6b66081c664b34c33336bb9580015252c1e81_2457913.fix -elf_loader/fixtures/c354b2c5eb50696020ffc39d485122d60570f6bf_2457913.fix -elf_loader/fixtures/c5afc87c9127bfe5e9869b0a1d11b5b7ab88e87a_2457913.fix -elf_loader/fixtures/c756016d0fb9d347d7745484caf9761787a12830_2457913.fix -elf_loader/fixtures/caf1bef898f4a5181541f6e2559536b178fe745a_2457913.fix -elf_loader/fixtures/cbf53cbfc8eef1999ee4d52982519db5bc7166ad_2457913.fix -elf_loader/fixtures/cc5a79cfd7d0288a3470390af81dbdde1dd72f82_2457913.fix -elf_loader/fixtures/cdf418269c1c411670fd4b6139f11d1caa818eb6_2457913.fix -elf_loader/fixtures/cf44451711623d87da79f80ac3be8b19f1230176_2457913.fix -elf_loader/fixtures/d2cede8f7ed2f6fae1eb8035e039a3c28b5774e9_2457913.fix -elf_loader/fixtures/d57bafe2632cdace85e500a75d6e20c661ec1e9d_2457913.fix -elf_loader/fixtures/d63bcb4740ac0a6157ddab8dd0efd86cb0976d36_2457913.fix -elf_loader/fixtures/dab6a384e69cf1ac8e7d53e8493b40dab9943cc4_2457913.fix -elf_loader/fixtures/dbe3c0ef0f9655d0b1d2b31547518b1d09d8406e_2457913.fix -elf_loader/fixtures/df751edb7c16a4285fe1c9fea9a5b147790968b1_2457913.fix -elf_loader/fixtures/e2536b55d802b1905b097562d668b86423681bcb_2457913.fix -elf_loader/fixtures/e314d20e59b5dd631285f3c91f0c87c7767c9ae1_2457913.fix -elf_loader/fixtures/e3bf264b504053e74d3b5cc63d5fda1b7ee33538_2457913.fix -elf_loader/fixtures/e4d22e06fbb342c4e01e85948269e342bb548428_2457913.fix -elf_loader/fixtures/e7794251cfbb329df9a995b30d277273a345abf8_2457913.fix -elf_loader/fixtures/e7cad322a0834419b7ecee184286ac880755035f_2457913.fix -elf_loader/fixtures/e808377a8b8fe294f5185c9f0978f67c553c14fc_2457913.fix -elf_loader/fixtures/e8a1e2068335f3f72fb684e4547b2f864f09a48e_2457913.fix -elf_loader/fixtures/e9f39198a6d3072461411631a62fb15b66fd3cc3_2457913.fix -elf_loader/fixtures/ea56e94c1a22ec5ba3fb17854f26e44b31501eaa_2457913.fix -elf_loader/fixtures/ebe4c9c36cf1b0bef2b05e8a2c839bdfc4793bf9_2457913.fix -elf_loader/fixtures/ed8c6115b8150684a6b743903966883494dcc05c_2457913.fix -elf_loader/fixtures/edda381af62a772e1b6d357b3c202af677cb7e8e_2457913.fix -elf_loader/fixtures/ef72b573095d15b04d3b71b96fad0fca7bb6a2b3_2457913.fix -elf_loader/fixtures/f0fab238ccd10458e46f1ee6d29f5bea2c54004d_2457913.fix -elf_loader/fixtures/f16195c12b22e4dd75c96cf35e0865e9d4162e97_2457913.fix -elf_loader/fixtures/f3adfca3dd82c9797a10944ec64c85d3cce9f7df_2457913.fix -elf_loader/fixtures/f431de46764543ae27930ef638cfd3bbe3314889_2457913.fix -elf_loader/fixtures/f5b2e50f195dea1e8d9f69601ae6b5ac476b381c_2457913.fix -elf_loader/fixtures/f716f8acb5439b276d4949e4d3b5b053517c388a_2457913.fix -elf_loader/fixtures/f73235a208d5400f9741a6d856ba81623bb15c24_2457913.fix -elf_loader/fixtures/f8f746ca0a7b0046397443acd5af2f2ad012bafd_2457913.fix -elf_loader/fixtures/f9952d9eb4645fb7fda90aa10546a4114fa9b21b_2457913.fix -elf_loader/fixtures/fa1d3d09675b5a60d0cf13946d4cc5938c0cfbb5_2457913.fix -elf_loader/fixtures/fbb6b3b4412ef81cbf7e4395d34b68f26f61504b_2457913.fix -elf_loader/fixtures/fd079efae7cd2049b690829e9bb68b67ae4ed988_2457913.fix -elf_loader/fixtures/ff02e3a0e659ffaf15f8720a3a1038b9c7688f93_2457913.fix -elf_loader/fixtures/txt_rel_overflow.fix -elf_loader/fixtures/zero_key_syscall_hash.fix instr/fixtures/bpf-loader-v3-programs/f0fbc9e7-32f9-477d-9c89-2e7a2675f7b7.fix instr/fixtures/bpf-loader-v3/7d17b624b75a988a5ce30d2ae187800b93a65965_2.fix instr/fixtures/vote/00a44dc50eee61f0b1d38dbd505398f49a634085_3247128.fix diff --git a/conformance/src/elf_loader.zig b/conformance/src/elf_loader.zig index 21cf18d9d0..02366d5e47 100644 --- a/conformance/src/elf_loader.zig +++ b/conformance/src/elf_loader.zig @@ -17,8 +17,6 @@ export fn sol_compat_elf_loader_v2( errdefer |err| std.debug.panic("err: {s}", .{@errorName(err)}); const allocator = std.heap.c_allocator; - _ = &allocator; - // zig_protobuf leaks sometimes on invalid input, so we just work around with by using an arena var decode_arena = std.heap.ArenaAllocator.init(allocator); defer decode_arena.deinit(); diff --git a/conformance/src/elf_types.zig b/conformance/src/elf_types.zig index cbe1f28b17..fcc4525872 100644 --- a/conformance/src/elf_types.zig +++ b/conformance/src/elf_types.zig @@ -61,36 +61,50 @@ pub const ELFLoaderEffects = struct { /// Encode an ELFLoaderEffects into a 72-byte FlatBuffer. pub fn encode(self: *const ELFLoaderEffects) [buf_size]u8 { - var buf: [buf_size]u8 = template; + const meta: EncodeMeta = .{ + .rodata_hash = self.rodata.len != 0, + .calldests_hash = self.calldests.items.len != 0, + }; + var buf: [buf_size]u8 = template(meta); buf[28] = @truncate(@as(u32, @bitCast(self.@"error"))); - writeInt(u64, buf[32..40], xxhash(0, self.rodata), .little); + if (meta.rodata_hash) { + writeInt(u64, buf[32..40], xxhash(0, self.rodata), .little); + } writeInt(u64, buf[40..48], self.text_cnt, .little); writeInt(u64, buf[48..56], self.text_off, .little); writeInt(u64, buf[56..64], self.entry_pc, .little); - writeInt(u64, buf[64..72], xxhash(0, std.mem.sliceAsBytes(self.calldests.items)), .little); + if (meta.calldests_hash) { + const calldests_bytes = std.mem.sliceAsBytes(self.calldests.items); + writeInt(u64, buf[64..72], xxhash(0, calldests_bytes), .little); + } return buf; } - const template: [buf_size]u8 = blk: { - var buf = [_]u8{0} ** buf_size; + const EncodeMeta = struct { + rodata_hash: bool, + calldests_hash: bool, + }; + + inline fn template(meta: EncodeMeta) [buf_size]u8 { + var buf: [buf_size]u8 = @splat(0); // root offset: table at byte 24 writeInt(u32, buf[0..4], 24, .little); // vtable (bytes 4..20): vt_size, table_size, 6 field offsets writeInt(u16, buf[4..6], 16, .little); // vt_size (2+2+6*2 = 16) writeInt(u16, buf[6..8], 48, .little); // table inline size writeInt(u16, buf[8..10], 4, .little); // field 0: err_code - writeInt(u16, buf[10..12], 8, .little); // field 1: rodata_hash + writeInt(u16, buf[10..12], if (meta.rodata_hash) 8 else 0, .little); // field 1: rodata_hash writeInt(u16, buf[12..14], 16, .little); // field 2: text_cnt writeInt(u16, buf[14..16], 24, .little); // field 3: text_off writeInt(u16, buf[16..18], 32, .little); // field 4: entry_pc - writeInt(u16, buf[18..20], 40, .little); // field 5: calldests_hash + writeInt(u16, buf[18..20], if (meta.calldests_hash) 40 else 0, .little); // field 5: calldests_hash // bytes 20..24: padding (already zero) // soffset: table_pos(24) - vtable_pos(4) = 20 writeInt(i32, buf[24..28], 20, .little); - break :blk buf; - }; + return buf; + } }; pub const FeatureSet = struct { From 9d74ef89ce9315b7b12fc94b0fd960e0cd5829c9 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Wed, 18 Mar 2026 17:46:50 -0600 Subject: [PATCH 08/35] build(conformance): manage dependencies with nix flake previously there were a bunch of scripts to manage these dependencies and it was getting difficult to maintain them and make them generally usable across different systems. nix flakes are intended for exactly this use case --- .circleci/config.yml | 102 +++++++++++------- conformance/README.md | 54 ++++------ conformance/commits.env | 10 +- conformance/flake.lock | 117 +++++++++++++++++++++ conformance/flake.nix | 70 ++++++++++++ conformance/run.py | 6 +- conformance/scripts/ci-run.sh | 10 +- conformance/scripts/get-solfuzz-agave.sh | 50 +++++++++ conformance/scripts/install-system-deps.sh | 92 ---------------- conformance/scripts/setup-env.sh | 115 -------------------- docs/docusaurus/docs/code/conformance.md | 54 ++++------ 11 files changed, 356 insertions(+), 324 deletions(-) create mode 100644 conformance/flake.lock create mode 100644 conformance/flake.nix create mode 100644 conformance/scripts/get-solfuzz-agave.sh delete mode 100755 conformance/scripts/install-system-deps.sh delete mode 100755 conformance/scripts/setup-env.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 26e153443d..4f19dcdb0a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -68,37 +68,6 @@ jobs: name: Run Tests command: zig-out/bin/test 2>&1 | cat - build_linux_release: - executor: linux-executor - steps: - - checkout - - attach_workspace: - at: workspace - - restore_cache: - key: linux-x86_64-0.15.2-{{ checksum "build.zig" }}-{{ checksum "build.zig.zon" }}-selfhosted-release - - run: - name: Build - command: | - sudo apt-get update -y && sudo apt-get install wget -y - ./scripts/proxy_workaround.sh workspace/zig/zig - workspace/zig/zig build sig fuzz -Dno-run -Denable-tsan=false -Doptimize=ReleaseSafe -Dcpu=x86_64_v3 -p workspace/zig-out-release --summary all - - run: - name: Build Conformance - command: | - cd conformance - ../workspace/zig/zig build -Doptimize=ReleaseSafe -Dcpu=x86_64_v3 -p ../workspace/conformance-release --summary all - - save_cache: - key: linux-x86_64-0.15.2-{{ checksum "build.zig" }}-{{ checksum "build.zig.zon" }}-selfhosted-release - paths: - - .zig-cache - - ~/.cache/zig - - persist_to_workspace: - root: workspace - paths: - - "zig-out-release/bin/sig" - - "zig-out-release/bin/fuzz" - - "conformance-release/lib/libsolfuzz_sig.so" - build_check_macos: executor: macos-executor steps: @@ -242,6 +211,19 @@ jobs: - checkout - attach_workspace: at: workspace + - restore_cache: + key: linux-x86_64-0.15.2-{{ checksum "build.zig" }}-{{ checksum "build.zig.zon" }}-selfhosted-release + - run: + name: Build + command: | + sudo apt-get update -y && sudo apt-get install wget -y + ./scripts/proxy_workaround.sh workspace/zig/zig + workspace/zig/zig build sig fuzz -Dno-run -Denable-tsan=false -Doptimize=ReleaseSafe -Dcpu=x86_64_v3 -p workspace/zig-out-release --summary all + - save_cache: + key: linux-x86_64-0.15.2-{{ checksum "build.zig" }}-{{ checksum "build.zig.zon" }}-selfhosted-release + paths: + - .zig-cache + - ~/.cache/zig - run: name: Run Gossip command: bash scripts/gossip_test.sh 120 workspace/zig-out-release/bin/sig @@ -258,6 +240,29 @@ jobs: name: Run Ledger Fuzzer command: workspace/zig-out-release/bin/fuzz --seed 19 ledger 10000 + build_conformance: + executor: linux-executor + steps: + - checkout + - attach_workspace: + at: workspace + - restore_cache: + key: build_conformance-v1-{{ checksum "build.zig" }}-{{ checksum "build.zig.zon" }}-{{ checksum "conformance/build.zig" }}-{{ checksum "conformance/build.zig.zon" }} + - run: + name: Build Conformance + command: | + cd conformance + ../workspace/zig/zig build -p ../workspace/conformance-release --summary all + - save_cache: + key: build_conformance-v1-{{ checksum "build.zig" }}-{{ checksum "build.zig.zon" }}-{{ checksum "conformance/build.zig" }}-{{ checksum "conformance/build.zig.zon" }} + paths: + - .zig-cache + - ~/.cache/zig + - persist_to_workspace: + root: workspace + paths: + - "conformance-release/lib/libsolfuzz_sig.so" + solana_conformance: executor: linux-executor # We need a pretty high parallelism since the vm_interp harness has a *lot* of fixtures. Perhaps @@ -267,11 +272,32 @@ jobs: - checkout - attach_workspace: at: workspace + - run: + name: Prepare /nix permissions so cache restore works + command: | + sudo mkdir -p /nix + sudo chown "$USER" /nix - restore_cache: - key: linux-x86_64-0.15.2-{{ checksum "build.zig" }}-{{ checksum "build.zig.zon" }}-selfhosted-release + key: nix-v1-{{ checksum "conformance/flake.nix" }}-{{ checksum "conformance/flake.lock" }}-{{ checksum "conformance/commits.env" }} + - run: + name: Install nix + command: | + sh <(curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install) --no-daemon + mkdir -p ~/.config/nix + echo 'experimental-features = nix-command flakes' > ~/.config/nix/nix.conf + echo '. /home/circleci/.nix-profile/etc/profile.d/nix.sh' >> "$BASH_ENV" - run: name: Run Fixtures - command: ./conformance/scripts/ci-run.sh + command: | + cd conformance + nix develop -c ./scripts/ci-run.sh + - save_cache: + key: nix-v1-{{ checksum "conformance/flake.nix" }}-{{ checksum "conformance/flake.lock" }}-{{ checksum "conformance/commits.env" }} + paths: + - /nix/store + - /nix/var/nix/db + - /nix/var/nix/profiles + - ~/.cache/nix linux_misc_checks: executor: linux-executor @@ -330,7 +356,7 @@ workflows: - test_kcov_linux: requires: - setup_zig_linux - - build_linux_release: + - gossip_and_fuzz: requires: - setup_zig_linux - build_and_test_linux: @@ -339,12 +365,12 @@ workflows: - linux_misc_checks: requires: - setup_zig_linux - - solana_conformance: + - build_conformance: requires: - - build_linux_release - - gossip_and_fuzz: + - setup_zig_linux + - solana_conformance: requires: - - build_linux_release + - build_conformance check_macos: jobs: diff --git a/conformance/README.md b/conformance/README.md index ee2b69783a..379048130b 100644 --- a/conformance/README.md +++ b/conformance/README.md @@ -1,51 +1,43 @@ -Dependencies: -- python 3.11 -- zig 0.15.2 -- git +# Dependencies -Optional dependencies, for building solfuzz-agave: -- cmake -- gcc -- cargo/rust +Install [nix](https://nixos.org/download/) if you do not have it. -# Run tests +```bash +nix develop # if you only want to run the tests +nix develop .#full # if you also want to debug solfuzz-agave +``` + +# Build -Just to run the conformance tests. +To run the conformance tests, you'll need a build of solfuzz_sig. Either Debug or ReleaseSafe builds are fine. ```bash -# install system dependencies -scripts/install-system-deps.sh solana-conformance +zig build solfuzz_sig +``` -# set up the test environment -scripts/setup-env.sh -source env/pyvenv/bin/activate -# compile the sig binary to test -zig build -Doptimize=ReleaseSafe solfuzz_sig +# Run -# re-run conformance tests using test vectors -./run.py +**Run all the test vectors** -# for more options -./run.py --help +```bash +./run.py ``` -# Debug Agave +For customization, try the `--help` option. -If you want to debug solfuzz_agave or manually generate fixtures, you'll need to set up the `full` environment instead of just the basic default. +**Run the conformance CI job** ```bash -# install system dependencies -scripts/install-system-deps.sh solana-conformance solfuzz-agave +scripts/ci-run.sh +``` -# set up the test environment, including solfuzz_agave -scripts/setup-env.sh full -source env/pyvenv/bin/activate +**Debug Agave** -# compile the sig binary to test -zig build -Doptimize=ReleaseSafe solfuzz_sig +If you want to debug solfuzz_agave or manually generate fixtures, you'll need to use the `full` environment (described above). Then you can use some commands like these: -# create the fixtures from agave, and run the conformance tests +```bash +# create the fixtures from agave, and run the conformance tests ./run.py --create # re-run conformance tests using your created fixtures diff --git a/conformance/commits.env b/conformance/commits.env index 5c7dda9b83..0111047c0c 100644 --- a/conformance/commits.env +++ b/conformance/commits.env @@ -1,11 +1,11 @@ # The commits currently used in CI for sig's conformance with agave. -SOLANA_CONFORMANCE_COMMIT=786798b9536f310cd6fe8ba8a05df0a187500cd2 -TEST_VECTORS_COMMIT=d6b81e3de1132f5032aabcd8a975e306634ae13d -SOLFUZZ_AGAVE_COMMIT=51c1f5c8bc38748c57aa9fb4b51ce9501111c010 +SOLANA_CONFORMANCE_COMMIT="786798b9536f310cd6fe8ba8a05df0a187500cd2" +TEST_VECTORS_COMMIT="d6b81e3de1132f5032aabcd8a975e306634ae13d" +SOLFUZZ_AGAVE_COMMIT="51c1f5c8bc38748c57aa9fb4b51ce9501111c010" # protosol definitions needed for the above commit of solfuzz-agave -AGAVE_PROTOSOL_COMMIT=e52ca0f21f4ef68e8f2ed5269dcfaa8b50091f7f +AGAVE_PROTOSOL_COMMIT="e52ca0f21f4ef68e8f2ed5269dcfaa8b50091f7f" # protosol definitions used for sig -SIG_PROTOSOL_COMMIT=e52ca0f21f4ef68e8f2ed5269dcfaa8b50091f7f +SIG_PROTOSOL_COMMIT="e52ca0f21f4ef68e8f2ed5269dcfaa8b50091f7f" diff --git a/conformance/flake.lock b/conformance/flake.lock new file mode 100644 index 0000000000..4cd99e2c8b --- /dev/null +++ b/conformance/flake.lock @@ -0,0 +1,117 @@ +{ + "nodes": { + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1773734432, + "narHash": "sha256-IF5ppUWh6gHGHYDbtVUyhwy/i7D261P7fWD1bPefOsw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "cda48547b432e8d3b18b4180ba07473762ec8558", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1771043024, + "narHash": "sha256-O1XDr7EWbRp+kHrNNgLWgIrB0/US5wvw9K6RERWAj6I=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3aadb7ca9eac2891d52a9dec199d9580a6e2bf44", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay", + "zig-overlay": "zig-overlay" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773803479, + "narHash": "sha256-GD6i1F2vrSxbsmbS92+8+x3DbHOJ+yrS78Pm4xigW4M=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "f17186f52e82ec5cf40920b58eac63b78692ac7c", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "flake": false, + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "zig-overlay": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": "nixpkgs_2", + "systems": "systems" + }, + "locked": { + "lastModified": 1773622330, + "narHash": "sha256-eaDMObc4Y+b4nIHMf+2pmS+gcQEnRdY7xU62K0G7wzM=", + "owner": "mitchellh", + "repo": "zig-overlay", + "rev": "a20da6ffe5e036abaadc8b0cbe0c21aedf0a1dc5", + "type": "github" + }, + "original": { + "owner": "mitchellh", + "repo": "zig-overlay", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/conformance/flake.nix b/conformance/flake.nix new file mode 100644 index 0000000000..fb3c9762cd --- /dev/null +++ b/conformance/flake.nix @@ -0,0 +1,70 @@ +{ + description = "Sig Conformance Testing"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + zig-overlay.url = "github:mitchellh/zig-overlay"; + rust-overlay = { + url = "github:oxalica/rust-overlay"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { + self, + nixpkgs, + zig-overlay, + rust-overlay, + }: let + system = "x86_64-linux"; + pkgs = import nixpkgs { + inherit system; + overlays = [rust-overlay.overlays.default zig-overlay.overlays.default]; + }; + baseDeps = with pkgs; [zigpkgs."0.15.2" python311 git alejandra]; + commits = builtins.fromTOML (builtins.readFile ./commits.env); + + test-vectors = builtins.fetchGit { + url = "https://github.com/firedancer-io/test-vectors.git"; + rev = commits.TEST_VECTORS_COMMIT; + }; + + solana-conformance = builtins.fetchGit { + url = "https://github.com/firedancer-io/solana-conformance.git"; + rev = commits.SOLANA_CONFORMANCE_COMMIT; + }; + + baseShellHook = '' + export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [pkgs.stdenv.cc.cc.lib]}" + mkdir -p env + ln -sfn ${test-vectors} env/test-vectors + + python3.11 -m venv env/venv + source env/venv/bin/activate + cp -r ${solana-conformance} env/solana-conformance && chmod +w -R env/solana-conformance + SETUPTOOLS_SCM_PRETEND_VERSION=0.0.0 pip install env/solana-conformance[dev,octane] + ''; + in { + formatter.${system} = pkgs.alejandra; + + devShells.${system} = { + default = pkgs.mkShell { + packages = baseDeps; + shellHook = baseShellHook; + }; + + full = pkgs.mkShell { + packages = baseDeps ++ (with pkgs; [clang cmake gcc pkgs.rust-bin.stable."1.93.0".default]); + shellHook = '' + ${baseShellHook} + export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [ + pkgs.stdenv.cc.cc.lib + pkgs.llvmPackages_19.libclang.lib + ]}" + export LIBCLANG_PATH="${pkgs.llvmPackages_19.libclang.lib}/lib" + scripts/get-solfuzz-agave.sh + ''; + }; + }; + }; +} diff --git a/conformance/run.py b/conformance/run.py index 398c224c00..d0031c2cfd 100755 --- a/conformance/run.py +++ b/conformance/run.py @@ -18,13 +18,9 @@ print( textwrap.dedent( f""" - To create the environment: - - {conformance_dir}/scripts/setup-env.sh - To activate the environment: - source {conformance_dir}/env/pyvenv/bin/activate + nix develop """ ) diff --git a/conformance/scripts/ci-run.sh b/conformance/scripts/ci-run.sh index 11ceb0c676..27bd354a72 100755 --- a/conformance/scripts/ci-run.sh +++ b/conformance/scripts/ci-run.sh @@ -15,10 +15,6 @@ NUM_THREADS=${NUM_THREADS:-$(nproc || sysctl -n hw.ncpu || echo 1)} conformance_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd $conformance_dir -echo Getting dependencies -scripts/install-system-deps.sh solana-conformance -scripts/setup-env.sh - echo Selecting a subset of fixtures to run rm -rf env/split-fixtures/ mkdir -p env/split-fixtures/ @@ -31,11 +27,11 @@ comm -23 \ <(sort scripts/failing.txt) \ | if [ "$SPLIT_TESTS" == "true" ]; then circleci tests split; else cat; fi \ | sed 's_^_env/test-vectors/_' \ - | xargs -d '\n' ln -t env/split-fixtures/ + | xargs -d '\n' cp -t env/split-fixtures/ echo Running fixtures -env/pyvenv/bin/solana-conformance exec-fixtures \ +solana-conformance exec-fixtures \ --num-processes $NUM_THREADS \ -t ${PREBUILT_LIB_DIR}/libsolfuzz_sig.so \ - -o test_results/ \ + -o env/test_results/ \ -i env/split-fixtures/ | tee /dev/tty | grep -q "Failed: 0," diff --git a/conformance/scripts/get-solfuzz-agave.sh b/conformance/scripts/get-solfuzz-agave.sh new file mode 100644 index 0000000000..1677f99b29 --- /dev/null +++ b/conformance/scripts/get-solfuzz-agave.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +set -euo pipefail + +conformance_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +env="$conformance_dir/env" +. "$conformance_dir/commits.env" + +get-repo-at-commit() { + local repo_url=$1 + local commit=$2 + local dir="$3" + + mkdir -p "$env" + if [[ ! -d "$dir" ]]; then + echo "Cloning $repo_url at $commit" + if git clone --revision=$commit --depth=1 $repo_url "$dir"; then + return 0 + else + git clone $repo_url "$dir" + fi + fi + echo "Resetting $dir to $commit" + pushd "$dir" + git fetch origin $commit + git reset --hard $commit + popd +} + +get-repo-at-commit \ + https://github.com/firedancer-io/solfuzz-agave.git \ + $SOLFUZZ_AGAVE_COMMIT \ + "$env/solfuzz-agave" + +get-repo-at-commit \ + https://github.com/firedancer-io/protosol.git \ + $AGAVE_PROTOSOL_COMMIT \ + "$env/solfuzz-agave/protosol" + +# build vendored protoc and flatc +pushd "$env/solfuzz-agave/protosol" +git submodule update --init --recursive +./deps.sh +popd + +export PROTOC_EXECUTABLE="$env/solfuzz-agave/protosol/opt/bin/protoc" +export FLATC_EXECUTABLE="$env/solfuzz-agave/protosol/opt/bin/flatc" + +pushd "$env/solfuzz-agave" +cargo build --lib --release +popd diff --git a/conformance/scripts/install-system-deps.sh b/conformance/scripts/install-system-deps.sh deleted file mode 100755 index 648295c96f..0000000000 --- a/conformance/scripts/install-system-deps.sh +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -conformance_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd $conformance_dir - -# installs packages in ubuntu. -# can handle any package in the official repos and python311 -ubuntu() { - local python=false - local normal=() - for arg in "$@"; do - case "$arg" in - python311) python=true ;; - *) normal+=("$arg") ;; - esac - done - - if ! dpkg -s "${normal[@]}" &>/dev/null; then - sudo apt-get install -y "${normal[@]}" - fi - - if [[ "$python" == "true" ]]; then - if ! dpkg -s python3.11 python3.11-dev python3.11-venv &>/dev/null; then - sudo add-apt-repository ppa:deadsnakes/ppa -y - sudo apt-get update - sudo apt-get install -y python3.11 python3.11-dev python3.11-venv - fi - fi -} - -# installs packages in arch linux. -# can handle any package in the official repos and python311 -arch() { - local python=false - local normal=() - for arg in "$@"; do - case "$arg" in - python311) python=true ;; - *) normal+=("$arg") ;; - esac - done - - if ! pacman -Qq "${normal[@]}" &>/dev/null; then - sudo pacman -S --noconfirm "${normal[@]}" - fi - - if [[ "$python" == "true" ]]; then - if ! pacman -Qq python311 &>/dev/null; then - git clone https://aur.archlinux.org/python311.git env/python311 - pushd env/python311 - makepkg -si --noconfirm - popd - rm -rf env/python311 - fi - fi -} - -# print a help message if user hasn't provided any arguments -if [ "$#" -eq 0 ]; then - cat <<-EOF - - Usage: $0 [dependents...] - solana-conformance Install solana-conformance's dependencies. - solfuzz-agave Install solfuzz-agave's dependencies. - - EOF - exit 1 -fi - -# detect operating system -. /etc/os-release -case "$ID" in - ubuntu) func=ubuntu ;; - arch) func=arch ;; - *) echo "Unsupported OS: $ID, not installing anything" ;; -esac - -# collect the dependents' dependencies -deps=() -for arg in "$@"; do - case "$arg" in - solana-conformance) deps+=(git python311) ;; - solfuzz-agave) deps+=(gcc git cmake) ;; - *) echo "Unknown dependent: $arg"; exit 1 ;; - esac -done - -# install dependencies -$func "${deps[@]}" - -echo Dependencies installed. diff --git a/conformance/scripts/setup-env.sh b/conformance/scripts/setup-env.sh deleted file mode 100755 index d43b032760..0000000000 --- a/conformance/scripts/setup-env.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -conformance_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -env="$conformance_dir/env" -. "$conformance_dir/commits.env" - -get-repo-at-commit() { - local repo_url=$1 - local commit=$2 - local dir="$3" - - mkdir -p "$env" - if [[ ! -d "$dir" ]]; then - echo "Cloning $repo_url at $commit" - if git clone --revision=$commit --depth=1 $repo_url "$dir"; then - return 0 - else - git clone $repo_url "$dir" - fi - fi - echo "Resetting $dir to $commit" - pushd "$dir" - git fetch origin $commit - git reset --hard $commit - popd -} - -ask() { - if [[ -d "$env" ]]; then - echo Any local changes you have to solana-conformance, solfuzz-agave, or test-vectors will be deleted. - read -p "Do you want to continue? [y/N]: " confirm - if [[ ! "$confirm" =~ ^[Yy]$ ]]; then - echo "Aborted." - return 1 - fi - fi -} - -# everything you need to run the conformance tests -basic() { - ask || exit 0 - get-test-vectors - get-solana-conformance -} - -# useful if you want to locally debug agave -full() { - ask || exit 0 - get-solfuzz-agave - get-test-vectors - get-solana-conformance -} - -get-solfuzz-agave() { - get-repo-at-commit \ - https://github.com/firedancer-io/solfuzz-agave.git \ - $SOLFUZZ_AGAVE_COMMIT \ - "$env/solfuzz-agave" - - get-repo-at-commit \ - https://github.com/firedancer-io/protosol.git \ - $AGAVE_PROTOSOL_COMMIT \ - "$env/solfuzz-agave/protosol" - - # build vendored protoc and flatc - pushd "$env/solfuzz-agave/protosol" - git submodule update --init --recursive - ./deps.sh - popd - - export PROTOC_EXECUTABLE="$env/solfuzz-agave/protosol/opt/bin/protoc" - export FLATC_EXECUTABLE="$env/solfuzz-agave/protosol/opt/bin/flatc" - - pushd "$env/solfuzz-agave" - cargo build --lib --release - popd -} - -get-test-vectors() { - get-repo-at-commit \ - https://github.com/firedancer-io/test-vectors.git \ - $TEST_VECTORS_COMMIT \ - "$env/test-vectors" -} - -get-solana-conformance() { - get-repo-at-commit \ - https://github.com/firedancer-io/solana-conformance.git \ - $SOLANA_CONFORMANCE_COMMIT \ - "$env/solana-conformance" - - # set up the python venv to run solana conformance - python3.11 -m venv "$env/pyvenv" - source "$env/pyvenv/bin/activate" - - pushd "$env/solana-conformance" - pip install -e ".[dev]" - pre-commit install - popd - - cat <<-EOF - - Local environment created successfully. To activate it, run: - - source $env/pyvenv/bin/activate - -EOF -} - -if [ $# -eq 0 ]; then - basic -else - "$@" -fi diff --git a/docs/docusaurus/docs/code/conformance.md b/docs/docusaurus/docs/code/conformance.md index ee2b69783a..379048130b 100644 --- a/docs/docusaurus/docs/code/conformance.md +++ b/docs/docusaurus/docs/code/conformance.md @@ -1,51 +1,43 @@ -Dependencies: -- python 3.11 -- zig 0.15.2 -- git +# Dependencies -Optional dependencies, for building solfuzz-agave: -- cmake -- gcc -- cargo/rust +Install [nix](https://nixos.org/download/) if you do not have it. -# Run tests +```bash +nix develop # if you only want to run the tests +nix develop .#full # if you also want to debug solfuzz-agave +``` + +# Build -Just to run the conformance tests. +To run the conformance tests, you'll need a build of solfuzz_sig. Either Debug or ReleaseSafe builds are fine. ```bash -# install system dependencies -scripts/install-system-deps.sh solana-conformance +zig build solfuzz_sig +``` -# set up the test environment -scripts/setup-env.sh -source env/pyvenv/bin/activate -# compile the sig binary to test -zig build -Doptimize=ReleaseSafe solfuzz_sig +# Run -# re-run conformance tests using test vectors -./run.py +**Run all the test vectors** -# for more options -./run.py --help +```bash +./run.py ``` -# Debug Agave +For customization, try the `--help` option. -If you want to debug solfuzz_agave or manually generate fixtures, you'll need to set up the `full` environment instead of just the basic default. +**Run the conformance CI job** ```bash -# install system dependencies -scripts/install-system-deps.sh solana-conformance solfuzz-agave +scripts/ci-run.sh +``` -# set up the test environment, including solfuzz_agave -scripts/setup-env.sh full -source env/pyvenv/bin/activate +**Debug Agave** -# compile the sig binary to test -zig build -Doptimize=ReleaseSafe solfuzz_sig +If you want to debug solfuzz_agave or manually generate fixtures, you'll need to use the `full` environment (described above). Then you can use some commands like these: -# create the fixtures from agave, and run the conformance tests +```bash +# create the fixtures from agave, and run the conformance tests ./run.py --create # re-run conformance tests using your created fixtures From 287b076eb44e738f9a8ef983356cec55b19af04e Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Thu, 19 Mar 2026 10:49:59 -0600 Subject: [PATCH 09/35] conformance: upgrade python to 3.13, now the latest compatible version with previous versions of solana conformance you couldn't use later than python 3.11 without getting errors. now we only see errors on 3.14. 3.13 is working --- conformance/flake.nix | 4 ++-- conformance/run.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/conformance/flake.nix b/conformance/flake.nix index fb3c9762cd..49b428447b 100644 --- a/conformance/flake.nix +++ b/conformance/flake.nix @@ -21,7 +21,7 @@ inherit system; overlays = [rust-overlay.overlays.default zig-overlay.overlays.default]; }; - baseDeps = with pkgs; [zigpkgs."0.15.2" python311 git alejandra]; + baseDeps = with pkgs; [zigpkgs."0.15.2" python313 git alejandra]; commits = builtins.fromTOML (builtins.readFile ./commits.env); test-vectors = builtins.fetchGit { @@ -39,7 +39,7 @@ mkdir -p env ln -sfn ${test-vectors} env/test-vectors - python3.11 -m venv env/venv + python3.13 -m venv env/venv source env/venv/bin/activate cp -r ${solana-conformance} env/solana-conformance && chmod +w -R env/solana-conformance SETUPTOOLS_SCM_PRETEND_VERSION=0.0.0 pip install env/solana-conformance[dev,octane] diff --git a/conformance/run.py b/conformance/run.py index d0031c2cfd..5699c42f30 100755 --- a/conformance/run.py +++ b/conformance/run.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.11 +#!/usr/bin/env python3.13 import argparse import json From ba8fa4a2b0c2629d78d6d735efa8f121a2ef7b38 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Thu, 19 Mar 2026 16:30:58 -0600 Subject: [PATCH 10/35] fix(conformance): don't panic for unknown features the test will fail if the outputs are incorrect. if we don't know the feature but our outputs are correct, then it doesn't matter for that test that we didn't know the feature. our code still passed the validations of that test, so it should pass the test. i converted the panics into prints so at least we can see when there are unknown features --- conformance/src/elf_loader.zig | 2 +- conformance/src/utils.zig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conformance/src/elf_loader.zig b/conformance/src/elf_loader.zig index 02366d5e47..26373c4ba7 100644 --- a/conformance/src/elf_loader.zig +++ b/conformance/src/elf_loader.zig @@ -40,7 +40,7 @@ fn executeElfTest(ctx: ELFLoaderCtx, allocator: std.mem.Allocator) !ElfLoaderEff var feature_set: sig.core.FeatureSet = .ALL_DISABLED; if (ctx.features) |features| for (features.features.items) |id| { - feature_set.setSlotId(id, 0) catch std.debug.panic("unknown id: 0x{x}", .{id}); + feature_set.setSlotId(id, 0) catch std.debug.print("unknown feature id: 0x{x}\n", .{id}); }; const env: svm.Environment = .initV1( diff --git a/conformance/src/utils.zig b/conformance/src/utils.zig index 8a5574f730..5f13575cf7 100644 --- a/conformance/src/utils.zig +++ b/conformance/src/utils.zig @@ -182,7 +182,7 @@ pub fn loadFeatureSet(ctx: anytype) !FeatureSet { var feature_set: FeatureSet = .ALL_DISABLED; for (pb_features.features.items) |id| { // only way for `setSlotId` to fail is if the `id` doesn't exist. - feature_set.setSlotId(id, 0) catch std.debug.panic("unknown id: 0x{x}", .{id}); + feature_set.setSlotId(id, 0) catch std.debug.print("unknown feature id: 0x{x}\n", .{id}); } return feature_set; } From 09481190298c3e0ecfdb5c57ea1c42db7a9d611f Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Thu, 19 Mar 2026 16:58:30 -0600 Subject: [PATCH 11/35] docs: mention solana-conformance --- conformance/README.md | 14 +++++++++++++- docs/docusaurus/docs/code/conformance.md | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/conformance/README.md b/conformance/README.md index 379048130b..df3c47c2ce 100644 --- a/conformance/README.md +++ b/conformance/README.md @@ -24,7 +24,7 @@ zig build solfuzz_sig ./run.py ``` -For customization, try the `--help` option. +For customization, try `--help`. **Run the conformance CI job** @@ -32,6 +32,18 @@ For customization, try the `--help` option. scripts/ci-run.sh ``` +**Run solana-conformance directly** + +run.py is a helper script to make this process easier. But in some cases when debugging, it's useful to interact directly with solana-conformance. Here's an example of how to run the zk_sdk tests with solana-conformance: + +```bash +solana-conformance \ + exec-fixtures \ + -i env/test-vectors/instr/fixtures/zk_sdk \ + -t zig-out/lib/libsolfuzz_sig.so \ + -o env/test-outputs/ +``` + **Debug Agave** If you want to debug solfuzz_agave or manually generate fixtures, you'll need to use the `full` environment (described above). Then you can use some commands like these: diff --git a/docs/docusaurus/docs/code/conformance.md b/docs/docusaurus/docs/code/conformance.md index 379048130b..df3c47c2ce 100644 --- a/docs/docusaurus/docs/code/conformance.md +++ b/docs/docusaurus/docs/code/conformance.md @@ -24,7 +24,7 @@ zig build solfuzz_sig ./run.py ``` -For customization, try the `--help` option. +For customization, try `--help`. **Run the conformance CI job** @@ -32,6 +32,18 @@ For customization, try the `--help` option. scripts/ci-run.sh ``` +**Run solana-conformance directly** + +run.py is a helper script to make this process easier. But in some cases when debugging, it's useful to interact directly with solana-conformance. Here's an example of how to run the zk_sdk tests with solana-conformance: + +```bash +solana-conformance \ + exec-fixtures \ + -i env/test-vectors/instr/fixtures/zk_sdk \ + -t zig-out/lib/libsolfuzz_sig.so \ + -o env/test-outputs/ +``` + **Debug Agave** If you want to debug solfuzz_agave or manually generate fixtures, you'll need to use the `full` environment (described above). Then you can use some commands like these: From f750b7a86ee7424d0fda542a3d4752a691bba64a Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Thu, 19 Mar 2026 16:59:25 -0600 Subject: [PATCH 12/35] conformance: update failures.txt and improve output of run.py --- conformance/run.py | 17 +++++++++++++---- conformance/scripts/failing.txt | 5 ----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/conformance/run.py b/conformance/run.py index 5699c42f30..28d7b54e1a 100755 --- a/conformance/run.py +++ b/conformance/run.py @@ -47,7 +47,6 @@ def main(): parser.add_argument("--no-run", action="store_true", help="Don't exec fixtures (only create)") parser.add_argument("-v", "--verbose", action="store_true", help="Print commands and output") parser.add_argument("--filter", help="Filter for fixture to execute") - parser.add_argument("--save", help="File to save results in json") parser.add_argument( "--create-lib", default=create_lib, @@ -101,9 +100,19 @@ def main(): print(f"\tFailed: {total_failed}") print(f"\tSkipped: {total_skipped}") - if config.save: - with open(config.save, "w") as f: - json.dump(results, f, indent=4) + with open("env/test-outputs/results.json", "w") as f: + json.dump(results, f, indent=4) + + failures = [] + for result in results: + for fixture in result.get("failed_fixtures", []): + failures.append(os.path.join(result["name"], fixture + ".fix\n")) + failures.sort() + + with open("env/test-outputs/failures.txt", "w") as f: + f.writelines(failures) + + print(f"\nDetailed test results saved to env/test-outputs/\n") def path(path): diff --git a/conformance/scripts/failing.txt b/conformance/scripts/failing.txt index 27b901b5f6..d90775d882 100644 --- a/conformance/scripts/failing.txt +++ b/conformance/scripts/failing.txt @@ -1,5 +1,3 @@ - -instr/fixtures/bpf-loader-v3-programs/f0fbc9e7-32f9-477d-9c89-2e7a2675f7b7.fix instr/fixtures/bpf-loader-v3/7d17b624b75a988a5ce30d2ae187800b93a65965_2.fix instr/fixtures/vote/00a44dc50eee61f0b1d38dbd505398f49a634085_3247128.fix instr/fixtures/vote/0231a48ba8f372da88bcc63837a2eaf8093f0e1b.fix @@ -138,7 +136,6 @@ instr/fixtures/vote/ad880396b601e053f8c0ba7151b596d5b38a8362_3157971.fix instr/fixtures/vote/aeedd60c825f82e8a2de8b05ea15f44bbf12b86f_3157971.fix instr/fixtures/vote/b07524357168dce5d5edf5fd9da8e529dd2f2fac_3247128.fix instr/fixtures/vote/b1a4ec345127c05c9fe765b945651bcd84190f4c_3247128.fix -instr/fixtures/vote/b2a93396a0ec892bee071bee1b8a0244d7be4df9_2.fix instr/fixtures/vote/b35c5f873976ffe8f625342af7a6e152e8839322_3247128.fix instr/fixtures/vote/b3612d9a66f812eeb82d5baa3c30dac40fbe1559_3247128.fix instr/fixtures/vote/b59cce7fa65efe4cf777670a210249b975001f07.fix @@ -2083,8 +2080,6 @@ txn/fixtures/ffa46950755b08e86d98c678d4ee042d59e4ef4d_265678.fix txn/fixtures/ffdc55b81039969dd81e130f312ed9889468364c_2237040.fix txn/fixtures/fff87aff2cbaee9cdb9489c98db0adcc0309b97f_2202462.fix txn/fixtures/is_signer_err_handling.fix -txn/fixtures/poc_348-processed-sibling.fix -txn/fixtures/poc_348-sysvar-instructions.fix txn/fixtures/txn-21V6e59cxaU8WcB7RDqGoJqfzrP7gdUhvC9wAfokeRUdbyC7Wy2ML1ptinGWmyFbNazSDNZHCzxiUDXDGY18DRAM.fix txn/fixtures/txn-2vxNaM7VAooMJnt84LcbqfJRTaCrVcvHcDBw5JDeuTbsqYipAyLo2pfVtBEDFLCeczRcpKRHBfSgwC3MpMLTwVtR.fix txn/fixtures/txn-3eDdfZE6HswPxFKrtnQPsEmTkyL1iP57gRPEXwaqNGAqF1paGXCYYMwh7z4uQDUMgFor742sikVSQZW1gFRDhPNh.fix From 460f1f0a88a3d2f2f02b69c073ba5d24f20c833b Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Thu, 19 Mar 2026 17:48:07 -0600 Subject: [PATCH 13/35] make ci-run.sh easier to run locally --- .circleci/config.yml | 5 ++++- conformance/scripts/ci-run.sh | 10 +++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4f19dcdb0a..67b894f2ba 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -290,7 +290,10 @@ jobs: name: Run Fixtures command: | cd conformance - nix develop -c ./scripts/ci-run.sh + nix develop \ + -s SPLIT_TESTS true \ + -s PREBUILT_LIB_DIR ../workspace/conformance-release/lib \ + -c ./scripts/ci-run.sh - save_cache: key: nix-v1-{{ checksum "conformance/flake.nix" }}-{{ checksum "conformance/flake.lock" }}-{{ checksum "conformance/commits.env" }} paths: diff --git a/conformance/scripts/ci-run.sh b/conformance/scripts/ci-run.sh index 27bd354a72..e8564fba81 100755 --- a/conformance/scripts/ci-run.sh +++ b/conformance/scripts/ci-run.sh @@ -1,15 +1,11 @@ #!/usr/bin/env bash # # This script runs the `solana_conformance` step in CI. -# -# To run locally, set these variables: -# export SPLIT_TESTS=false -# export PREBUILT_LIB_DIR=zig-out/lib -# + set -euxo pipefail -SPLIT_TESTS=${SPLIT_TESTS:-true} -PREBUILT_LIB_DIR=${PREBUILT_LIB_DIR:-../workspace/conformance-release/lib} +SPLIT_TESTS=${SPLIT_TESTS:-false} +PREBUILT_LIB_DIR=${PREBUILT_LIB_DIR:-zig-out/lib} NUM_THREADS=${NUM_THREADS:-$(nproc || sysctl -n hw.ncpu || echo 1)} conformance_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" From 951d6f84e9ab9791f50b522744635993e39710af Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Fri, 20 Mar 2026 08:49:43 -0600 Subject: [PATCH 14/35] add missing feature switch_to_chacha8_turbine fixes missing feature id 0xfc12b1cef363afa7 in conformance --- src/core/features.zon | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/features.zon b/src/core/features.zon index 56157dac52..6dd4f40a3a 100644 --- a/src/core/features.zon +++ b/src/core/features.zon @@ -252,6 +252,7 @@ .{ .name = "fix_alt_bn128_pairing_length_check", .pubkey = "bnYzodLwmybj7e1HAe98yZrdJTd7we69eMMLgCXqKZm" }, .{ .name = "increase_cpi_account_info_limit", .pubkey = "H6iVbVaDZgDphcPbcZwc5LoznMPWQfnJ1AM7L1xzqvt5" }, .{ .name = "vote_state_v4", .pubkey = "Gx4XFcrVMt4HUvPzTpTSVkdDVgcDSjKhDN1RqRS6KDuZ" }, + .{ .name = "switch_to_chacha8_turbine", .pubkey = "CHaChatUnR3s6cPyPMMGNJa3VdQQ8PNH2JqdD4LpCKnB" }, .{ .name = "enable_bls12_381_syscall", .pubkey = "b1sgUiJ3qu7hYm3tNDyyqZNQd6gLGJmJppnLNa93PCQ" }, .{ .name = "remove_simple_vote_from_cost_model", .pubkey = "2GCrNXbzmt4xrwdcKS2RdsLzsgu4V5zHAemW57pcHT6a" }, .{ .name = "syscall_parameter_address_restrictions", .pubkey = "EDGMC5kxFxGk4ixsNkGt8bW7QL5hDMXnbwaZvYMwNfzF" }, From b56523b70ee19421aadae37f128d2fec21a63140 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Fri, 20 Mar 2026 16:24:00 -0600 Subject: [PATCH 15/35] feat(conformance): parseout: test outputs parser --- conformance/README.md | 10 + conformance/flake.nix | 1 + conformance/parseout/.gitignore | 3 + conformance/parseout/README.md | 215 ++++++ conformance/parseout/parseout/__init__.py | 28 + conformance/parseout/parseout/__main__.py | 232 ++++++ conformance/parseout/parseout/differ.py | 333 ++++++++ conformance/parseout/parseout/parser.py | 277 +++++++ .../parseout/parseout/transaction/__init__.py | 39 + .../parseout/parseout/transaction/differ.py | 722 ++++++++++++++++++ .../parseout/parseout/transaction/parser.py | 645 ++++++++++++++++ conformance/parseout/pyproject.toml | 15 + 12 files changed, 2520 insertions(+) create mode 100644 conformance/parseout/.gitignore create mode 100644 conformance/parseout/README.md create mode 100644 conformance/parseout/parseout/__init__.py create mode 100644 conformance/parseout/parseout/__main__.py create mode 100644 conformance/parseout/parseout/differ.py create mode 100644 conformance/parseout/parseout/parser.py create mode 100644 conformance/parseout/parseout/transaction/__init__.py create mode 100644 conformance/parseout/parseout/transaction/differ.py create mode 100644 conformance/parseout/parseout/transaction/parser.py create mode 100644 conformance/parseout/pyproject.toml diff --git a/conformance/README.md b/conformance/README.md index df3c47c2ce..7919ab2404 100644 --- a/conformance/README.md +++ b/conformance/README.md @@ -58,3 +58,13 @@ If you want to debug solfuzz_agave or manually generate fixtures, you'll need to # for more options ./run.py --help ``` + +# Interpreting results + +The expected and actual results for all tests are in env/test-outputs. You can use `parseout` to interpret the results. + +```bash +parseout txn +``` + +See [parseout/README.md] for more info. diff --git a/conformance/flake.nix b/conformance/flake.nix index 49b428447b..78cee83ea4 100644 --- a/conformance/flake.nix +++ b/conformance/flake.nix @@ -43,6 +43,7 @@ source env/venv/bin/activate cp -r ${solana-conformance} env/solana-conformance && chmod +w -R env/solana-conformance SETUPTOOLS_SCM_PRETEND_VERSION=0.0.0 pip install env/solana-conformance[dev,octane] + SETUPTOOLS_SCM_PRETEND_VERSION=0.0.0 pip install -e parseout[dev] ''; in { formatter.${system} = pkgs.alejandra; diff --git a/conformance/parseout/.gitignore b/conformance/parseout/.gitignore new file mode 100644 index 0000000000..b943e2c69c --- /dev/null +++ b/conformance/parseout/.gitignore @@ -0,0 +1,3 @@ +__pycache__ +*.pyc +.pytest_cache diff --git a/conformance/parseout/README.md b/conformance/parseout/README.md new file mode 100644 index 0000000000..63d5b32f67 --- /dev/null +++ b/conformance/parseout/README.md @@ -0,0 +1,215 @@ +# parseout + +A parser and differ for the conformance test outputs. Useful for categorizing or +interpreting a large number of failed tests. Compares expected and actual +results, identifies mismatches, and categorizes them based on the types of +mismatches. + +## Quick start + +```bash +parseout diff expected.txt actual.txt +``` + +or for a smarter version that handles transaction harness failures better than `diff`: + +```bash +parseout txn +``` + +This produces three output files prints a summary +to stdout: + +- **\*.csv:** one row per mismatch (`header, categories`), sorted so rows + with the same category combination are adjacent. +- **\*-category.json:** mismatches grouped by individual category. A + mismatch appears under every category it belongs to. +- **\*-combo.json:** mismatches grouped by their exact combination of + categories. Each mismatch appears under exactly one key. + +### Example stdout summary + +``` +1818 mismatches written to txn.csv, txn-category.json, txn-combo.json + +Categories: + result_type: 1194 + status: 233 + instruction_error: 312 + ... + +Combinations: + result_type: 1194 + modified_accounts+rollback_accounts: 185 + instruction_error+status: 155 + ... +``` + +**Categories** lists every individual category with the total number of +mismatches it appears in (a mismatch can be counted under multiple +categories). + +**Combinations** lists every unique set of categories as a single entry, +with the count of mismatches that have exactly that combination. + +## Subcommands + +### `diff` -- generic diff + +```bash +parseout diff +``` + +Uses the generic parser only. Recursively compares every field in each record +and generates diff categories dynamically from the field path where differences +occur. Category naming: + +- `field.subfield` -- values differ at that path +- `field.0.subfield` -- values differ at list index 0, subfield +- `field-missing` -- field exists in expected but not actual +- `field-unexpected` -- field exists in actual but not expected +- `field` (for lists) -- list lengths differ + +Outputs `diff.csv`, `diff-category.json`, `diff-combo.json` to the current +directory. + +### `txn` -- transaction diff + +```bash +parseout txn [expected] [actual] +``` + +A domain-specific differ for transaction conformance outputs. + +The generic differ makes a best effort at detecting differences in fields, but it +doesn't encode any domain-specific knowledge. For the transaction harness, the +mismatch categories from `diff` can be confusing. That's where this `txn` command comes in handy. + +This parses both files into typed records with known fields (status, fee_details, +modified_accounts, etc.) and compares them using a fixed set of categories +tailored to transaction semantics. + +`` and `` are optional. If omitted, it will locate files in +`env/test-outputs/txn/fixtures/` and place the outputs there as well. + +Outputs `txn.csv`, `txn-category.json`, `txn-combo.json`. + +### `parse` -- generic parse + +```bash +parseout parse +``` + +Converts a single test output file from the protobuf text format into JSON +using the generic parser. Prints to stdout. Useful if you'd like to interpret +the results in a separate program that is able to parse json. + +## Architecture + +The parser is split into two layers. The layers are composable and you can import +them as a library into python scripts for custom interpretations of test results. + +There are also two differs that each operate on the two parsing layers. + +### Parse Layer 1: generic parser (`parseout.parser`) + +Parses the protobuf-text-like format into `OrderedDict[str, dict]`. Handles +record headers, key-value pairs, nested `{ }` blocks, and record separators +(lines of 20 hyphens). No regex -- uses only string operations. + +### Parse Layer 2: transaction parser (`parseout.transaction.parser`) + +Converts the generic dicts into a typed dataclass hierarchy: + +- **Record:** wraps a `test_id` and a result variant. +- **SanitizationError:** the transaction failed before execution. +- **ExecutedSuccess:** the transaction executed and succeeded. +- **ExecutedError:** the transaction executed but failed. +- **FeeDetails:** fee breakdown (transaction fee, prioritization fee). +- **AccountEntry:** a modified or rollback account. + +The result variant is a tagged union discriminated by the `sanitization_error`, +`executed`, and `is_ok` fields in the raw data. + +### Generic differ (`parseout.differ`) - Layer 1 diff + +Compares two parsed `OrderedDict[str, Block]` collections by shared headers. +Recursively walks every field and generates categories from the path where +values diverge. Works on any file the generic parser can read. + +### Transaction differ (`parseout.transaction.differ`) - Layer 2 diff + +Compares two parsed `OrderedDict[str, Record]` collections by shared test IDs. +Each mismatch is tagged with one or more `Category` values from a fixed enum: + +| Category | Description | +| --------------------------- | ----------------------------------------------- | +| `result_type` | Different variant types (e.g. success vs error) | +| `status` | Different status codes | +| `instruction_error` | Different instruction error codes | +| `instruction_error_index` | Different instruction error indices | +| `custom_error` | Different custom error codes | +| `fee_details` | Different fee breakdowns | +| `executed_units` | Different compute unit counts | +| `loaded_accounts_data_size` | Different loaded account data sizes | +| `return_data` | Different return data | +| `modified_accounts` | Different modified account lists | +| `rollback_accounts` | Different rollback account lists | + +When two records have different variant types, only `result_type` is reported. + +## Input format + +Each file contains records separated by lines of exactly 20 hyphens +(`--------------------`). Each record starts with a header line (the test ID) +followed by a colon, then key-value pairs and nested blocks: + +``` +some_test_id: +executed: true +is_ok: true +executed_units: 27829 +fee_details { + transaction_fee: 15000 + prioritization_fee: 500 +} +modified_accounts { + address: "8fi2Typkf4m1z9miGfZQGRXDimBTVQqWHciMA9aZGXpN" + lamports: 10733753813112760225 + owner: "11111111111111111111111111111111" +} +-------------------- +another_test_id: +sanitization_error: true +status: 9 +``` + +## Tests + +```bash +pytest +``` + +151 tests run inline in the source files (parser, generic differ, transaction +parser, transaction differ). + +## Python API + +```python +# Generic diff -- works on any file, dynamic categories +from parseout import diff_files + +mismatches = diff_files("expected.txt", "actual.txt") +for m in mismatches: + print(m.header, m.categories) + +# Transaction diff -- typed records, fixed categories +from parseout.transaction import parse_file, diff_files, Category + +expected = parse_file("expected.txt") +actual = parse_file("actual.txt") + +mismatches = diff_files("expected.txt", "actual.txt") +for m in mismatches: + print(m.test_id, m.categories) +``` diff --git a/conformance/parseout/parseout/__init__.py b/conformance/parseout/parseout/__init__.py new file mode 100644 index 0000000000..f03fbb77ef --- /dev/null +++ b/conformance/parseout/parseout/__init__.py @@ -0,0 +1,28 @@ +"""parseout - A parser for protobuf-text-like files. + +Two layers: + - ``parseout.parser``: text -> ``OrderedDict[str, dict]`` (format-level) + - ``parseout.differ``: generic recursive diff on parsed dicts + - ``parseout.transaction``: typed dataclasses, parsing, and diffing + +Top-level ``parse`` / ``parse_file`` are the generic Layer 1 functions. +Top-level ``diff`` / ``diff_files`` are the generic differ functions. +Domain-specific modules live in subpackages (e.g. ``parseout.transaction``). +""" + +from .parser import parse, parse_file, Block, Value +from .differ import diff, diff_files, Mismatch + +# Make subpackage accessible as parseout.transaction +from . import transaction + +__all__ = [ + "parse", + "parse_file", + "Block", + "Value", + "diff", + "diff_files", + "Mismatch", + "transaction", +] diff --git a/conformance/parseout/parseout/__main__.py b/conformance/parseout/parseout/__main__.py new file mode 100644 index 0000000000..805c34f9df --- /dev/null +++ b/conformance/parseout/parseout/__main__.py @@ -0,0 +1,232 @@ +"""Command-line interface for parseout. + +Subcommands: + parse [input-file] — generic parse to JSON on stdout + diff [expected] [actual] — generic diff producing diff.csv, diff-category.json, diff-combo.json + txn [expected] [actual] — transaction diff producing txn.csv, txn-category.json, txn-combo.json +""" + +from __future__ import annotations + +import argparse +import csv +import json +import sys +from dataclasses import asdict +from glob import glob +from pathlib import Path + +from .parser import parse_file as _generic_parse_file +from .differ import diff_files as _generic_diff_files +from .transaction import diff_files as _txn_diff_files, Category + + +_TXN_FIXTURES = Path("env/test-outputs/txn/fixtures") +_TXN_EXPECTED_GLOB = str(_TXN_FIXTURES / "expected" / "*.txt") +_TXN_ACTUAL_GLOB = str(_TXN_FIXTURES / "actual" / "*.txt") + + +def main(argv: list[str] | None = None) -> None: + """Entry point for the CLI.""" + top = argparse.ArgumentParser(prog="parseout", description="parseout CLI") + subs = top.add_subparsers(dest="command") + + # --- parse --- + p_parse = subs.add_parser("parse", help="Generic parse to JSON on stdout") + p_parse.add_argument("input_file", help="Path to the input text file") + + # --- diff --- + p_diff = subs.add_parser("diff", help="Generic diff producing diff.csv, diff-category.json, diff-combo.json") + p_diff.add_argument("expected", help="Path to the expected file") + p_diff.add_argument("actual", help="Path to the actual file") + + # --- txn --- + p_txn = subs.add_parser("txn", help="Transaction diff producing txn.csv, txn-category.json, txn-combo.json") + p_txn.add_argument("expected", nargs="?", default=None, help="Path to the expected file (default: first match in env/test-outputs/txn/fixtures/expected/*.txt)") + p_txn.add_argument("actual", nargs="?", default=None, help="Path to the actual file (default: first match in env/test-outputs/txn/fixtures/actual/*.txt)") + + args = top.parse_args(argv) + + if args.command == "parse": + _cmd_parse(args) + elif args.command == "diff": + _cmd_diff(args) + elif args.command == "txn": + _cmd_txn(args) + else: + top.print_help() + sys.exit(1) + + +def _cmd_parse(args: argparse.Namespace) -> None: + """Generic parse: file -> JSON on stdout.""" + result = _generic_parse_file(args.input_file) + json.dump(result, sys.stdout, indent=2) + sys.stdout.write("\n") + + +def _cmd_diff(args: argparse.Namespace) -> None: + """Generic diff: two files -> diff.csv + diff-category.json + diff-combo.json.""" + out_dir = Path(".") + mismatches = _generic_diff_files(args.expected, args.actual) + + # --- diff.csv (sorted by combo so same-category rows are adjacent) --- + sorted_mismatches = sorted( + mismatches, + key=lambda m: "+".join(sorted(m.categories)), + ) + csv_path = out_dir / "diff.csv" + with open(csv_path, "w", newline="") as f: + writer = csv.writer(f) + writer.writerow(["header", "categories"]) + for m in sorted_mismatches: + cats = sorted(m.categories) + writer.writerow([m.header, ",".join(cats)]) + + # --- diff-category.json --- + by_category: dict[str, list] = {} + for m in mismatches: + entry = _generic_mismatch_to_dict(m) + for cat in m.categories: + by_category.setdefault(cat, []).append(entry) + + ordered = dict(sorted(by_category.items())) + + cat_path = out_dir / "diff-category.json" + with open(cat_path, "w") as f: + json.dump(ordered, f, indent=2) + f.write("\n") + + # --- diff-combo.json --- + from collections import Counter + + by_combo: dict[str, list] = {} + combo_counts: Counter[str] = Counter() + for m in mismatches: + key = " + ".join(sorted(m.categories)) + by_combo.setdefault(key, []).append(_generic_mismatch_to_dict(m)) + combo_counts[key] += 1 + + combo_ordered = {k: by_combo[k] for k, _ in combo_counts.most_common()} + + combo_path = out_dir / "diff-combo.json" + with open(combo_path, "w") as f: + json.dump(combo_ordered, f, indent=2) + f.write("\n") + + total = len(mismatches) + print(f"{total} mismatches written to {csv_path}, {cat_path}, {combo_path}") + + # --- per-category counts --- + print("\nCategories:") + for cat in sorted(by_category.keys()): + print(f" {cat}: {len(by_category[cat])}") + + # --- combination counts --- + print("\nCombinations:") + for combo, count in combo_counts.most_common(): + print(f" {combo}: {count}") + + +def _cmd_txn(args: argparse.Namespace) -> None: + """Transaction diff: two files -> txn.csv + txn-category.json + txn-combo.json.""" + use_fixtures = args.expected is None or args.actual is None + + expected = args.expected or _resolve_glob(_TXN_EXPECTED_GLOB, "expected") + actual = args.actual or _resolve_glob(_TXN_ACTUAL_GLOB, "actual") + + # When using fixture defaults, write output alongside the fixtures + out_dir = Path(_TXN_FIXTURES) if use_fixtures else Path(".") + out_dir.mkdir(parents=True, exist_ok=True) + + mismatches = _txn_diff_files(expected, actual) + + # --- txn.csv (sorted by combo so same-category rows are adjacent) --- + sorted_mismatches = sorted( + mismatches, + key=lambda m: "+".join(sorted(c.name for c in m.categories)), + ) + csv_path = out_dir / "txn.csv" + with open(csv_path, "w", newline="") as f: + writer = csv.writer(f) + writer.writerow(["test_id", "categories"]) + for m in sorted_mismatches: + cats = sorted(c.name for c in m.categories) + writer.writerow([m.test_id, ",".join(cats)]) + + # --- txn-category.json --- + by_category: dict[str, list] = {} + for m in mismatches: + entry = _mismatch_to_dict(m) + for cat in m.categories: + by_category.setdefault(cat.name, []).append(entry) + + # Sort keys to match Category enum order + ordered = {c.name: by_category[c.name] for c in Category if c.name in by_category} + + cat_path = out_dir / "txn-category.json" + with open(cat_path, "w") as f: + json.dump(ordered, f, indent=2) + f.write("\n") + + # --- txn-combo.json --- + from collections import Counter + + by_combo: dict[str, list] = {} + combo_counts: Counter[str] = Counter() + for m in mismatches: + key = " + ".join(sorted(c.name for c in m.categories)) + by_combo.setdefault(key, []).append(_mismatch_to_dict(m)) + combo_counts[key] += 1 + + # Sort keys by frequency (most common first) + combo_ordered = {k: by_combo[k] for k, _ in combo_counts.most_common()} + + combo_path = out_dir / "txn-combo.json" + with open(combo_path, "w") as f: + json.dump(combo_ordered, f, indent=2) + f.write("\n") + + total = len(mismatches) + print(f"{total} mismatches written to {csv_path}, {cat_path}, {combo_path}") + + # --- per-category counts --- + print("\nCategories:") + for c in Category: + if c.name in by_category: + print(f" {c.name}: {len(by_category[c.name])}") + + # --- combination counts --- + print("\nCombinations:") + for combo, count in combo_counts.most_common(): + print(f" {combo}: {count}") + + +def _resolve_glob(pattern: str, label: str) -> str: + """Resolve a glob pattern to a single file path, or exit with an error.""" + matches = sorted(glob(pattern)) + if not matches: + print(f"error: no {label} file found matching {pattern}. Are you in the conformance directory?", file=sys.stderr) + sys.exit(1) + return matches[0] + + +def _mismatch_to_dict(m) -> dict: + """Convert a transaction Mismatch to a JSON-serialisable dict.""" + d = asdict(m) + d["categories"] = sorted(c.name for c in m.categories) + return d + + +def _generic_mismatch_to_dict(m) -> dict: + """Convert a generic Mismatch to a JSON-serialisable dict.""" + return { + "header": m.header, + "categories": sorted(m.categories), + "left": m.left, + "right": m.right, + } + + +if __name__ == "__main__": + main() diff --git a/conformance/parseout/parseout/differ.py b/conformance/parseout/parseout/differ.py new file mode 100644 index 0000000000..7e688e6e38 --- /dev/null +++ b/conformance/parseout/parseout/differ.py @@ -0,0 +1,333 @@ +"""Generic differ: compare two parsed files and categorise mismatches. + +Built on top of ``parseout.parser``. Compares two +``OrderedDict[str, Block]`` collections by their shared headers +and tags every mismatch with dynamically generated category strings +based on the field path where differences occur. + +Category naming: + - ``field.subfield`` — values differ at that path + - ``field.0.subfield`` — values differ at list index 0, subfield + - ``field-missing`` — field exists in expected but not actual + - ``field-unexpected`` — field exists in actual but not expected + - ``field`` (for lists) — list lengths differ + +Public API: + ``diff(a, b)`` — two OrderedDicts -> list[Mismatch] + ``diff_files(path_a, path_b)`` — two file paths -> list[Mismatch] +""" + +from __future__ import annotations + +from collections import OrderedDict +from dataclasses import dataclass, field +from pathlib import Path +from typing import Union + +from .parser import Block, Value, parse_file as _parse_file + + +@dataclass +class Mismatch: + """A single mismatched record between two parsed files. + + Attributes: + header: The shared record header. + categories: Set of category path strings describing what differs. + left: The Block from the first (expected) file. + right: The Block from the second (actual) file. + """ + + header: str + categories: set[str] = field(default_factory=set) + left: Block = field(default_factory=dict) + right: Block = field(default_factory=dict) + + +def diff( + a: OrderedDict[str, Block], + b: OrderedDict[str, Block], +) -> list[Mismatch]: + """Compare two parsed OrderedDicts and return categorised mismatches. + + Only records whose headers appear in *both* dicts are compared. + Records that match exactly are omitted from the result. + """ + result: list[Mismatch] = [] + for header in a: + if header not in b: + continue + left, right = a[header], b[header] + if left == right: + continue + cats = _compare(left, right, "") + result.append(Mismatch(header=header, categories=cats, left=left, right=right)) + return result + + +def diff_files(path_a: str | Path, path_b: str | Path) -> list[Mismatch]: + """Parse two files and return categorised mismatches.""" + return diff(_parse_file(path_a), _parse_file(path_b)) + + +# --------------------------------------------------------------------------- +# Internal helpers +# --------------------------------------------------------------------------- + +_Node = Union[Value, Block, list] + + +def _compare(left: _Node, right: _Node, path: str) -> set[str]: + """Recursively compare two parsed values and return category paths.""" + cats: set[str] = set() + + if isinstance(left, dict) and isinstance(right, dict): + left_keys = set(left.keys()) + right_keys = set(right.keys()) + + for key in left_keys - right_keys: + subpath = f"{path}.{key}" if path else key + cats.add(f"{subpath}-missing") + + for key in right_keys - left_keys: + subpath = f"{path}.{key}" if path else key + cats.add(f"{subpath}-unexpected") + + for key in left_keys & right_keys: + subpath = f"{path}.{key}" if path else key + cats.update(_compare(left[key], right[key], subpath)) + + elif isinstance(left, list) and isinstance(right, list): + if len(left) != len(right): + cats.add(path) + else: + for i, (lv, rv) in enumerate(zip(left, right)): + subpath = f"{path}.{i}" + cats.update(_compare(lv, rv, subpath)) + + else: + # Scalars or type mismatch (e.g., dict vs scalar). + if left != right: + cats.add(path) + + return cats + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + +import pytest # noqa: E402 + +from .parser import TestParse # noqa: E402 + + +class TestCompare: + """Tests for _compare.""" + + def test_identical_dicts(self): + assert _compare({"a": 1}, {"a": 1}, "") == set() + + def test_scalar_diff(self): + assert _compare({"a": 1}, {"a": 2}, "") == {"a"} + + def test_nested_dict_diff(self): + assert _compare({"o": {"i": 1}}, {"o": {"i": 2}}, "") == {"o.i"} + + def test_list_same_length_diff(self): + left = {"items": [{"n": 1}, {"n": 2}]} + right = {"items": [{"n": 1}, {"n": 3}]} + assert _compare(left, right, "") == {"items.1.n"} + + def test_list_length_mismatch(self): + left = {"items": [{"n": 1}]} + right = {"items": [{"n": 1}, {"n": 2}]} + assert _compare(left, right, "") == {"items"} + + def test_missing_field(self): + assert _compare({"a": 1, "b": 2}, {"a": 1}, "") == {"b-missing"} + + def test_unexpected_field(self): + assert _compare({"a": 1}, {"a": 1, "b": 2}, "") == {"b-unexpected"} + + def test_nested_missing(self): + assert _compare({"o": {"a": 1, "b": 2}}, {"o": {"a": 1}}, "") == {"o.b-missing"} + + def test_nested_unexpected(self): + assert _compare({"o": {"a": 1}}, {"o": {"a": 1, "b": 2}}, "") == {"o.b-unexpected"} + + def test_type_mismatch_dict_vs_scalar(self): + assert _compare({"a": {"x": 1}}, {"a": 42}, "") == {"a"} + + def test_multiple_diffs(self): + assert _compare({"a": 1, "b": 2, "c": 3}, {"a": 1, "b": 99, "c": 100}, "") == {"b", "c"} + + def test_deep_nesting(self): + left = {"a": {"b": {"c": {"d": 1}}}} + right = {"a": {"b": {"c": {"d": 2}}}} + assert _compare(left, right, "") == {"a.b.c.d"} + + def test_list_element_path(self): + left = {"items": [{"x": 1}, {"x": 2}, {"x": 3}]} + right = {"items": [{"x": 1}, {"x": 99}, {"x": 3}]} + assert _compare(left, right, "") == {"items.1.x"} + + def test_empty_dicts(self): + assert _compare({}, {}, "") == set() + + def test_both_empty_lists(self): + assert _compare({"a": []}, {"a": []}, "") == set() + + def test_list_vs_dict_type_mismatch(self): + assert _compare({"a": [1, 2]}, {"a": {"x": 1}}, "") == {"a"} + + def test_bool_diff(self): + assert _compare({"f": True}, {"f": False}, "") == {"f"} + + def test_string_diff(self): + assert _compare({"s": "hello"}, {"s": "world"}, "") == {"s"} + + def test_mixed_missing_and_diff(self): + left = {"a": 1, "b": 2} + right = {"a": 99} + assert _compare(left, right, "") == {"a", "b-missing"} + + def test_mixed_unexpected_and_diff(self): + left = {"a": 1} + right = {"a": 99, "b": 2} + assert _compare(left, right, "") == {"a", "b-unexpected"} + + +class TestDiffEmpty: + """Two identical or empty inputs.""" + + def test_empty(self): + assert diff(OrderedDict(), OrderedDict()) == [] + + def test_identical(self): + a = OrderedDict(h={"x": 1, "y": 2}) + b = OrderedDict(h={"x": 1, "y": 2}) + assert diff(a, b) == [] + + +class TestDiffBasic: + """Basic diff scenarios.""" + + def test_single_scalar_diff(self): + a = OrderedDict(h={"x": 1}) + b = OrderedDict(h={"x": 2}) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].header == "h" + assert ms[0].categories == {"x"} + + def test_nested_diff(self): + a = OrderedDict(h={"outer": {"inner": 1}}) + b = OrderedDict(h={"outer": {"inner": 2}}) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {"outer.inner"} + + def test_missing_field(self): + a = OrderedDict(h={"a": 1, "b": 2}) + b = OrderedDict(h={"a": 1}) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {"b-missing"} + + def test_unexpected_field(self): + a = OrderedDict(h={"a": 1}) + b = OrderedDict(h={"a": 1, "b": 2}) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {"b-unexpected"} + + def test_list_length_mismatch(self): + a = OrderedDict(h={"items": [{"n": 1}]}) + b = OrderedDict(h={"items": [{"n": 1}, {"n": 2}]}) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {"items"} + + def test_list_element_diff(self): + a = OrderedDict(h={"items": [{"n": 1}, {"n": 2}]}) + b = OrderedDict(h={"items": [{"n": 1}, {"n": 99}]}) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {"items.1.n"} + + +class TestDiffHeadersOnlyInOne: + """Headers that exist in only one dict are skipped.""" + + def test_extra_in_a(self): + a = OrderedDict(h1={"x": 1}, h2={"x": 2}) + b = OrderedDict(h1={"x": 1}) + assert diff(a, b) == [] + + def test_extra_in_b(self): + a = OrderedDict(h1={"x": 1}) + b = OrderedDict(h1={"x": 1}, h2={"x": 2}) + assert diff(a, b) == [] + + +class TestDiffPreservesOrder: + """Mismatches are returned in iteration order of first dict.""" + + def test_order(self): + a = OrderedDict(bb={"x": 1}, aa={"x": 2}, cc={"x": 3}) + b = OrderedDict(bb={"x": 10}, aa={"x": 20}, cc={"x": 30}) + ms = diff(a, b) + assert [m.header for m in ms] == ["bb", "aa", "cc"] + + +class TestDiffLeftRight: + """Mismatch exposes left/right blocks.""" + + def test_left_right(self): + left_block = {"x": 1} + right_block = {"x": 2} + a = OrderedDict(h=left_block) + b = OrderedDict(h=right_block) + ms = diff(a, b) + assert ms[0].left is left_block + assert ms[0].right is right_block + + +class TestDiffMultipleCategories: + """Mismatches can have several categories.""" + + def test_two_fields(self): + a = OrderedDict(h={"a": 1, "b": 2}) + b = OrderedDict(h={"a": 10, "b": 20}) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {"a", "b"} + + def test_diff_and_missing(self): + a = OrderedDict(h={"a": 1, "b": 2}) + b = OrderedDict(h={"a": 10}) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {"a", "b-missing"} + + def test_nested_multiple(self): + a = OrderedDict(h={"outer": {"x": 1, "y": 2}, "z": 3}) + b = OrderedDict(h={"outer": {"x": 10, "y": 20}, "z": 30}) + ms = diff(a, b) + assert ms[0].categories == {"outer.x", "outer.y", "z"} + + +class TestDiffFiles: + """Integration test against actual data files.""" + + def test_self_vs_self(self): + ms = diff_files(TestParse.expected(), TestParse.expected()) + assert len(ms) == 0 + + def test_expected_vs_actual(self): + ms = diff_files(TestParse.expected(), TestParse.actual()) + assert len(ms) > 0 + for m in ms: + assert len(m.categories) >= 1 + assert m.header != "" diff --git a/conformance/parseout/parseout/parser.py b/conformance/parseout/parseout/parser.py new file mode 100644 index 0000000000..c078d8655b --- /dev/null +++ b/conformance/parseout/parseout/parser.py @@ -0,0 +1,277 @@ +"""Generic parser for the protobuf-text-like serialization format. + +Converts raw text into ``OrderedDict[str, dict]`` where each key is a +record header and each value is a nested dict of fields. Knows nothing +about domain-specific types. + +Value types produced: + - ``bool`` for ``true`` / ``false`` + - ``int`` for bare integer literals + - ``str`` for quoted strings (quotes stripped) + - ``dict`` for nested ``{ }`` blocks + - ``list`` when the same key appears more than once in a block +""" + +from __future__ import annotations + +from collections import OrderedDict +import os +from pathlib import Path +from typing import Union + +# 20 hyphens exactly, the record separator +_SEPARATOR = "-" * 20 + +#: The scalar types the parser produces. +Value = Union[bool, int, str] + +#: A parsed block: keys map to scalars, nested dicts, or lists thereof. +Block = dict[str, "Value | Block | list[Value | Block]"] + + +def parse(text: str) -> OrderedDict[str, Block]: + """Parse *text* into an ordered mapping of header -> fields dict. + + Args: + text: Full file content. + + Returns: + OrderedDict keyed by record header (str), values are nested dicts. + """ + result: OrderedDict[str, Block] = OrderedDict() + lines = text.splitlines() + chunk: list[str] = [] + + for line in lines: + if line.strip() == _SEPARATOR: + if chunk: + header, block = _parse_chunk(chunk) + if header is not None: + result[header] = block + chunk = [] + else: + chunk.append(line) + + if chunk: + header, block = _parse_chunk(chunk) + if header is not None: + result[header] = block + + return result + + +def parse_file(path: str | Path) -> OrderedDict[str, Block]: + """Parse a file into an ordered mapping of header -> fields dict. + + Args: + path: Path to the text file. + + Returns: + OrderedDict keyed by record header (str), values are nested dicts. + """ + return parse(Path(path).read_text()) + + +def _parse_chunk(lines: list[str]) -> tuple[str | None, Block]: + """Parse a single record chunk into (header, fields dict).""" + while lines and not lines[0].strip(): + lines = lines[1:] + while lines and not lines[-1].strip(): + lines = lines[:-1] + + if not lines: + return None, {} + + header = lines[0].strip() + if header.endswith(":"): + header = header[:-1] + + block = _parse_block_lines(lines[1:]) + return header, block + + +def _parse_block_lines(lines: list[str]) -> Block: + """Parse lines within a block (or at record top level) into a dict. + + If the same key appears more than once, the values are collected into + a list. + """ + result: Block = {} + i = 0 + while i < len(lines): + stripped = lines[i].strip() + if not stripped: + i += 1 + continue + + # Block opening: "field_name {" + if stripped.endswith("{"): + name = stripped[:-1].rstrip() + if name and name.replace("_", "").isalnum(): + inner_lines, end_idx = _collect_brace_block(lines, i + 1) + value = _parse_block_lines(inner_lines) + _insert(result, name, value) + i = end_idx + 1 + continue + + # Key: value pair + kv = _split_kv(stripped) + if kv is not None: + key, raw = kv + _insert(result, key, _parse_scalar(raw)) + i += 1 + continue + + i += 1 + + return result + + +def _collect_brace_block(lines: list[str], start: int) -> tuple[list[str], int]: + """Collect lines inside matching braces, handling nesting.""" + depth = 1 + collected: list[str] = [] + i = start + while i < len(lines): + stripped = lines[i].strip() + if stripped == "}": + depth -= 1 + if depth == 0: + return collected, i + elif stripped.endswith("{"): + depth += 1 + collected.append(lines[i]) + else: + collected.append(lines[i]) + i += 1 + return collected, len(lines) - 1 + + +def _split_kv(line: str) -> tuple[str, str] | None: + """Split ``key: value`` into (key, raw_value), or None.""" + colon = line.find(":") + if colon < 1: + return None + key = line[:colon] + if not key.replace("_", "").isalnum(): + return None + rest = line[colon + 1:] + if not rest or rest[0] != " ": + return None + value = rest.lstrip(" ") + if not value: + return None + return key, value + + +def _parse_scalar(raw: str) -> Value: + """Parse a raw scalar string into bool, int, or str.""" + if raw == "true": + return True + if raw == "false": + return False + if raw.startswith('"') and raw.endswith('"'): + return raw[1:-1] + try: + return int(raw) + except ValueError: + return raw + + +def _insert(block: Block, key: str, value: Value | Block) -> None: + """Insert a value into a block dict, promoting to list on duplicates.""" + if key not in block: + block[key] = value + else: + existing = block[key] + if isinstance(existing, list): + existing.append(value) + else: + block[key] = [existing, value] + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + +from pathlib import Path + + +class TestParse: + """Tests for the generic text -> OrderedDict parser.""" + + @staticmethod + def expected(): + print("Running this test requires some conformance outputs to already be generated.") + return os.path.join( + "../env/test-outputs/txn/fixtures/expected", + list(Path("../env/test-outputs/txn/fixtures/expected").glob("*.txt"))[0].name, + ) + + @staticmethod + def actual(): + print("Running this test requires some conformance outputs to already be generated.") + return os.path.join( + "../env/test-outputs/txn/fixtures/actual", + list(Path("../env/test-outputs/txn/fixtures/actual").glob("*.txt"))[0].name, + ) + + def test_single_record(self): + raw = parse("my_header:\nstatus: 9\n") + assert list(raw.keys()) == ["my_header"] + assert raw["my_header"] == {"status": 9} + + def test_preserves_order(self): + raw = parse("bbb:\nx: 1\n\n--------------------\naaa:\nx: 2\n") + assert list(raw.keys()) == ["bbb", "aaa"] + + def test_bool_values(self): + raw = parse("h:\nflag_a: true\nflag_b: false\n") + assert raw["h"]["flag_a"] is True + assert raw["h"]["flag_b"] is False + + def test_int_values(self): + raw = parse("h:\ncount: 42\nbig: 1152604553296817704\n") + assert raw["h"]["count"] == 42 + assert raw["h"]["big"] == 1152604553296817704 + + def test_quoted_string_values(self): + raw = parse('h:\naddr: "abc123"\n') + assert raw["h"]["addr"] == "abc123" + + def test_nested_block(self): + raw = parse("h:\ninner {\n x: 1\n}\n") + assert raw["h"]["inner"] == {"x": 1} + + def test_repeated_blocks_become_list(self): + raw = parse("h:\nitems {\n n: 1\n}\nitems {\n n: 2\n}\n") + assert isinstance(raw["h"]["items"], list) + assert len(raw["h"]["items"]) == 2 + assert raw["h"]["items"][0] == {"n": 1} + assert raw["h"]["items"][1] == {"n": 2} + + def test_single_block_is_not_list(self): + raw = parse("h:\nitems {\n n: 1\n}\n") + assert isinstance(raw["h"]["items"], dict) + + def test_empty_text(self): + assert parse("") == {} + assert parse(" \n\n ") == {} + + def test_multiple_records_with_separator(self): + raw = parse("a:\nx: 1\n\n--------------------\nb:\ny: 2\n\n--------------------\n") + assert len(raw) == 2 + assert raw["a"] == {"x": 1} + assert raw["b"] == {"y": 2} + + def test_header_without_colon(self): + raw = parse("bare_header\nval: 1\n") + assert "bare_header" in raw + + def test_full_file_parseme1(self): + raw = parse(open(TestParse.expected()).read()) + assert len(raw) == 5244 + + def test_full_file_parseme2(self): + raw = parse(open(TestParse.actual()).read()) + assert len(raw) == 5244 diff --git a/conformance/parseout/parseout/transaction/__init__.py b/conformance/parseout/parseout/transaction/__init__.py new file mode 100644 index 0000000000..63415aa449 --- /dev/null +++ b/conformance/parseout/parseout/transaction/__init__.py @@ -0,0 +1,39 @@ +"""parseout.transaction - Transaction-specific parsing and diffing. + +Re-exports all public names from the parser and differ submodules so +callers can use ``parseout.transaction.parse_file(...)`` etc. +""" + +from .parser import ( + parse, + parse_file, + Record, + RecordResult, + SanitizationError, + ExecutedSuccess, + ExecutedError, + FeeDetails, + AccountEntry, +) +from .differ import ( + Category, + Mismatch, + diff, + diff_files, +) + +__all__ = [ + "parse", + "parse_file", + "Record", + "RecordResult", + "SanitizationError", + "ExecutedSuccess", + "ExecutedError", + "FeeDetails", + "AccountEntry", + "Category", + "Mismatch", + "diff", + "diff_files", +] diff --git a/conformance/parseout/parseout/transaction/differ.py b/conformance/parseout/parseout/transaction/differ.py new file mode 100644 index 0000000000..dddc40f8f0 --- /dev/null +++ b/conformance/parseout/parseout/transaction/differ.py @@ -0,0 +1,722 @@ +"""Transaction differ: compare two parsed transaction files and categorise mismatches. + +Built on top of ``parseout.transaction_parser``. Compares two +``OrderedDict[str, Record]`` collections by their shared headers +and tags every mismatch with one or more ``Category`` values. + +Public API: + ``diff(a, b)`` — two OrderedDicts -> list[Mismatch] + ``diff_files(path_a, path_b)`` — two file paths -> list[Mismatch] +""" + +from __future__ import annotations + +from collections import OrderedDict +from dataclasses import dataclass, field +from enum import Enum, auto +from pathlib import Path +from typing import Union + +from .parser import ( + AccountEntry, + ExecutedError, + ExecutedSuccess, + FeeDetails, + Record, + SanitizationError, + parse_file as _parse_file, +) + + +class Category(Enum): + """Mismatch categories.""" + + result_type = auto() + status = auto() + instruction_error = auto() + instruction_error_index = auto() + custom_error = auto() + fee_details = auto() + executed_units = auto() + loaded_accounts_data_size = auto() + return_data = auto() + modified_accounts = auto() + rollback_accounts = auto() + + +@dataclass +class Mismatch: + """A single mismatched record between two parsed files. + + Attributes: + test_id: The shared record test_id. + categories: Set of ``Category`` values describing what differs. + left: The Record from the first file. + right: The Record from the second file. + """ + + test_id: str + categories: set[Category] = field(default_factory=set) + left: Record = field(default_factory=Record) + right: Record = field(default_factory=Record) + + +def diff( + a: OrderedDict[str, Record], + b: OrderedDict[str, Record], +) -> list[Mismatch]: + """Compare two parsed transaction OrderedDicts and return categorised mismatches. + + Only records whose test_ids appear in *both* dicts are compared. + Records that match exactly are omitted from the result. + + Args: + a: First parsed result (``transaction_parser.parse`` output). + b: Second parsed result. + + Returns: + List of ``Mismatch`` objects, one per differing test_id, in the + iteration order of *a*. + """ + result: list[Mismatch] = [] + for test_id in a: + if test_id not in b: + continue + rec_a, rec_b = a[test_id], b[test_id] + if rec_a.result == rec_b.result: + continue + cats = _categorize(rec_a.result, rec_b.result) + result.append(Mismatch(test_id=test_id, categories=cats, left=rec_a, right=rec_b)) + return result + + +def diff_files(path_a: str | Path, path_b: str | Path) -> list[Mismatch]: + """Parse two files and return categorised mismatches. + + Convenience wrapper around ``diff(parse_file(a), parse_file(b))``. + """ + return diff(_parse_file(path_a), _parse_file(path_b)) + + +# --------------------------------------------------------------------------- +# Internal helpers +# --------------------------------------------------------------------------- + +#: The result union for type hints. +_Result = Union[SanitizationError, ExecutedSuccess, ExecutedError] + + +def _categorize(left: _Result, right: _Result) -> set[Category]: + """Determine which categories of difference exist between two results.""" + if type(left) is not type(right): + return {Category.result_type} + + # Same type — compare field by field. Every Category except result_type + # shares its name with the corresponding dataclass field. + cats: set[Category] = set() + for cat in Category: + if cat is Category.result_type: + continue + attr = cat.name + if hasattr(left, attr) and getattr(left, attr) != getattr(right, attr): + cats.add(cat) + return cats + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + +import pytest +from ..parser import TestParse + +class TestCategory: + """Ensure the Category enum has all expected members.""" + + def test_all_categories_exist(self): + names = {c.name for c in Category} + assert names == { + "result_type", + "status", + "instruction_error", + "instruction_error_index", + "custom_error", + "fee_details", + "executed_units", + "loaded_accounts_data_size", + "return_data", + "modified_accounts", + "rollback_accounts", + } + + +class TestDiffIdentical: + """Two identical inputs should produce no mismatches.""" + + def test_empty(self): + assert diff(OrderedDict(), OrderedDict()) == [] + + def test_identical_sanitization_error(self): + rec = Record(test_id="h", result=SanitizationError(status=9)) + a = OrderedDict(h=rec) + b = OrderedDict(h=rec) + assert diff(a, b) == [] + + def test_identical_executed_success(self): + rec = Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", owner="O")], + ), + ) + a = OrderedDict(h=rec) + b = OrderedDict(h=rec) + assert diff(a, b) == [] + + +class TestDiffResultType: + """Cross-variant mismatches should be tagged result_type only.""" + + def test_sanitization_vs_executed_success(self): + a = OrderedDict(h=Record(test_id="h", result=SanitizationError(status=9))) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", owner="O")], + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.result_type} + + def test_executed_success_vs_executed_error(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", owner="O")], + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError( + status=9, + fee_details=FeeDetails(transaction_fee=5000), + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.result_type} + + def test_sanitization_vs_executed_error(self): + a = OrderedDict(h=Record(test_id="h", result=SanitizationError(status=9))) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError(status=4, fee_details=FeeDetails(transaction_fee=5000)), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.result_type} + + +class TestDiffStatus: + """Same variant, different status code.""" + + def test_sanitization_error_status(self): + a = OrderedDict(h=Record(test_id="h", result=SanitizationError(status=9))) + b = OrderedDict(h=Record(test_id="h", result=SanitizationError(status=27))) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.status} + + def test_executed_error_status(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError(status=4, fee_details=FeeDetails(transaction_fee=5000)), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError(status=9, fee_details=FeeDetails(transaction_fee=5000)), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.status} + + +class TestDiffInstructionError: + """Same variant, different instruction_error fields.""" + + def test_instruction_error_only(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError( + status=9, + instruction_error=3, + fee_details=FeeDetails(transaction_fee=5000), + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError( + status=9, + instruction_error=8, + fee_details=FeeDetails(transaction_fee=5000), + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.instruction_error} + + def test_instruction_error_index(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError( + status=9, + instruction_error=8, + instruction_error_index=0, + fee_details=FeeDetails(transaction_fee=5000), + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError( + status=9, + instruction_error=8, + instruction_error_index=2, + fee_details=FeeDetails(transaction_fee=5000), + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.instruction_error_index} + + def test_custom_error(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError( + status=9, + instruction_error=8, + custom_error=7, + fee_details=FeeDetails(transaction_fee=5000), + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError( + status=9, + instruction_error=8, + custom_error=42, + fee_details=FeeDetails(transaction_fee=5000), + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.custom_error} + + +class TestDiffFeeDetails: + """Same variant, different fee_details.""" + + def test_transaction_fee(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", owner="O")], + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=10000), + modified_accounts=[AccountEntry(address="A", owner="O")], + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.fee_details} + + def test_prioritization_fee(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000, prioritization_fee=100), + modified_accounts=[AccountEntry(address="A", owner="O")], + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000, prioritization_fee=200), + modified_accounts=[AccountEntry(address="A", owner="O")], + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.fee_details} + + +class TestDiffExecutionFields: + """Same variant, different execution-related scalar fields.""" + + def test_executed_units(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", owner="O")], + executed_units=1000, + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", owner="O")], + executed_units=2000, + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.executed_units} + + def test_loaded_accounts_data_size(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", owner="O")], + loaded_accounts_data_size=100, + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", owner="O")], + loaded_accounts_data_size=200, + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.loaded_accounts_data_size} + + def test_return_data(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", owner="O")], + return_data="aa", + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", owner="O")], + return_data="bb", + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.return_data} + + +class TestDiffAccounts: + """Same variant, different account lists.""" + + def test_modified_accounts_count(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[ + AccountEntry(address="A", owner="O"), + AccountEntry(address="B", owner="O"), + ], + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", owner="O")], + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.modified_accounts} + + def test_modified_accounts_lamports(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", lamports=100, owner="O")], + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", lamports=200, owner="O")], + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.modified_accounts} + + def test_modified_accounts_data(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", data="aa", owner="O")], + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedSuccess( + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", data="bb", owner="O")], + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.modified_accounts} + + def test_rollback_accounts(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError( + status=9, + fee_details=FeeDetails(transaction_fee=5000), + rollback_accounts=[AccountEntry(address="A", owner="O")], + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError( + status=9, + fee_details=FeeDetails(transaction_fee=5000), + rollback_accounts=[], + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.rollback_accounts} + + +class TestDiffMultipleCategories: + """Mismatches can be tagged with several categories at once.""" + + def test_status_and_instruction_error(self): + a = OrderedDict( + h=Record( + test_id="h", + result=SanitizationError(status=9, instruction_error=3), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=SanitizationError(status=27, instruction_error=8), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == {Category.status, Category.instruction_error} + + def test_three_categories(self): + a = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError( + status=9, + instruction_error=3, + fee_details=FeeDetails(transaction_fee=5000), + modified_accounts=[AccountEntry(address="A", owner="O")], + ), + ) + ) + b = OrderedDict( + h=Record( + test_id="h", + result=ExecutedError( + status=9, + instruction_error=8, + fee_details=FeeDetails(transaction_fee=10000), + modified_accounts=[AccountEntry(address="B", owner="O")], + ), + ) + ) + ms = diff(a, b) + assert len(ms) == 1 + assert ms[0].categories == { + Category.instruction_error, + Category.fee_details, + Category.modified_accounts, + } + + +class TestDiffTestIdsOnlyInOne: + """Test_ids that exist in only one dict are skipped (not errors).""" + + def test_extra_in_a(self): + a = OrderedDict( + h1=Record(test_id="h1", result=SanitizationError(status=9)), + h2=Record(test_id="h2", result=SanitizationError(status=4)), + ) + b = OrderedDict( + h1=Record(test_id="h1", result=SanitizationError(status=9)), + ) + ms = diff(a, b) + assert len(ms) == 0 + + def test_extra_in_b(self): + a = OrderedDict( + h1=Record(test_id="h1", result=SanitizationError(status=9)), + ) + b = OrderedDict( + h1=Record(test_id="h1", result=SanitizationError(status=9)), + h2=Record(test_id="h2", result=SanitizationError(status=4)), + ) + ms = diff(a, b) + assert len(ms) == 0 + + +class TestDiffPreservesOrder: + """Mismatches are returned in the iteration order of the first dict.""" + + def test_order(self): + a = OrderedDict( + bb=Record(test_id="bb", result=SanitizationError(status=1)), + aa=Record(test_id="aa", result=SanitizationError(status=2)), + cc=Record(test_id="cc", result=SanitizationError(status=3)), + ) + b = OrderedDict( + bb=Record(test_id="bb", result=SanitizationError(status=10)), + aa=Record(test_id="aa", result=SanitizationError(status=20)), + cc=Record(test_id="cc", result=SanitizationError(status=30)), + ) + ms = diff(a, b) + assert [m.test_id for m in ms] == ["bb", "aa", "cc"] + + +class TestDiffMismatchFields: + """The Mismatch object exposes left/right records.""" + + def test_left_right(self): + rec_a = Record(test_id="h", result=SanitizationError(status=9)) + rec_b = Record(test_id="h", result=SanitizationError(status=27)) + a = OrderedDict(h=rec_a) + b = OrderedDict(h=rec_b) + ms = diff(a, b) + assert ms[0].left is rec_a + assert ms[0].right is rec_b + + +class TestDiffFiles: + """Integration test against the actual data files.""" + + def test_parseme1_vs_parseme2(self): + ms = diff_files( + TestParse.expected(), + TestParse.actual(), + ) + assert len(ms) == 1818 + # Every mismatch has at least one category + for m in ms: + assert len(m.categories) >= 1 + assert m.test_id != "" + assert m.left.result is not None + assert m.right.result is not None + + def test_parseme1_vs_parseme2_category_counts(self): + ms = diff_files( + TestParse.expected(), + TestParse.actual(), + ) + from collections import Counter + + counts = Counter() + for m in ms: + for c in m.categories: + counts[c] += 1 + + # Verified counts from manual analysis + assert counts[Category.result_type] == 1194 + assert counts[Category.status] == 233 + assert counts[Category.instruction_error] == 312 + assert counts[Category.modified_accounts] > 0 + assert counts[Category.rollback_accounts] > 0 + + def test_parseme1_vs_self(self): + ms = diff_files( + TestParse.expected(), + TestParse.expected(), + ) + assert len(ms) == 0 diff --git a/conformance/parseout/parseout/transaction/parser.py b/conformance/parseout/parseout/transaction/parser.py new file mode 100644 index 0000000000..f05ed9a61d --- /dev/null +++ b/conformance/parseout/parseout/transaction/parser.py @@ -0,0 +1,645 @@ +"""Transaction-level parser: raw dicts -> typed dataclasses. + +Layer 2 of the parser stack. Takes the generic ``Block`` dicts produced +by ``parseout.parser.parse`` (Layer 1) and converts them into the +domain-specific transaction dataclass hierarchy. + +Public API: + ``parse(text)`` — text -> OrderedDict[str, Record] + ``parse_file(path)`` — file path -> OrderedDict[str, Record] +""" + +from __future__ import annotations + +from collections import OrderedDict +from dataclasses import dataclass, field +from typing import Optional, Union + +from .. import parser +from ..parser import Block + + +def parse(text: str) -> OrderedDict[str, Record]: + """Parse text into an ordered mapping of test_id -> Record. + + Wires Layer 1 (generic parser) and Layer 2 (typed conversion) together. + + Args: + text: Full file content. + + Returns: + OrderedDict keyed by record test_id, values are typed Record objects. + """ + return _records_from_raw(parser.parse(text)) + + +def parse_file(path: str) -> OrderedDict[str, Record]: + """Parse a file into an ordered mapping of test_id -> Record. + + Args: + path: Path to the text file. + + Returns: + OrderedDict keyed by record test_id, values are typed Record objects. + """ + return _records_from_raw(parser.parse_file(path)) + + +# --------------------------------------------------------------------------- +# Types +# --------------------------------------------------------------------------- + + +@dataclass +class FeeDetails: + """Fee breakdown for a transaction. + + Attributes: + transaction_fee: The base transaction fee. + prioritization_fee: Optional priority fee for faster processing. + """ + + transaction_fee: int = 0 + prioritization_fee: Optional[int] = None + + +@dataclass +class AccountEntry: + """An account that was modified or needs rollback. + + Attributes: + address: Base58-encoded Solana account address. + lamports: Account balance in lamports (u64). Absent in ~1.7% of entries. + data: Optional hex-encoded account data. + executable: Whether the account is executable. Absent means False. + owner: Base58-encoded owner program address. + """ + + address: str = "" + lamports: Optional[int] = None + data: Optional[str] = None + executable: bool = False + owner: str = "" + + +@dataclass +class SanitizationError: + """The transaction failed sanitization before execution. + + Invariants (enforced by data, not by constructor): + - ``status`` is always present. + - ``instruction_error`` may be present; when absent, + ``instruction_error_index`` is also absent. + - ``custom_error`` never appears. + - No fee or account data. + """ + + status: int = 0 + instruction_error: Optional[int] = None + instruction_error_index: Optional[int] = None + + +@dataclass +class ExecutedSuccess: + """The transaction was executed and succeeded (``is_ok=True``). + + Invariants: + - ``fee_details`` is always present. + - ``modified_accounts`` is always non-empty. + - No ``status``, ``instruction_error``, ``rollback_accounts``. + """ + + fee_details: FeeDetails = field(default_factory=FeeDetails) + modified_accounts: list[AccountEntry] = field(default_factory=list) + executed_units: Optional[int] = None + loaded_accounts_data_size: Optional[int] = None + return_data: Optional[str] = None + + +@dataclass +class ExecutedError: + """The transaction was executed but failed (``is_ok=False``). + + Invariants: + - ``fee_details`` is always present. + - ``status`` is always present. + - ``instruction_error`` only when ``status == 9``. + - ``instruction_error_index`` and ``custom_error`` only when + ``instruction_error`` is present. + """ + + status: int = 0 + fee_details: FeeDetails = field(default_factory=FeeDetails) + instruction_error: Optional[int] = None + instruction_error_index: Optional[int] = None + custom_error: Optional[int] = None + modified_accounts: list[AccountEntry] = field(default_factory=list) + rollback_accounts: list[AccountEntry] = field(default_factory=list) + executed_units: Optional[int] = None + loaded_accounts_data_size: Optional[int] = None + return_data: Optional[str] = None + + +#: Union of all result variants. +RecordResult = Union[SanitizationError, ExecutedSuccess, ExecutedError] + + +@dataclass +class Record: + """A single parsed record from the configuration file. + + Each record starts with a header line (the record identifier) followed by + a colon. The ``result`` field holds the variant-specific data. Use + ``isinstance(record.result, ...)`` to discriminate: + + >>> if isinstance(record.result, ExecutedSuccess): + ... print(record.result.fee_details) + + Attributes: + test_id: The full header string (without trailing colon). + result: One of ``SanitizationError``, ``ExecutedSuccess``, or + ``ExecutedError``. + """ + + test_id: str = "" + result: Optional[RecordResult] = None + + +# --------------------------------------------------------------------------- +# Conversion: raw Block dicts -> dataclasses +# --------------------------------------------------------------------------- + + +def _records_from_raw(raw: OrderedDict[str, Block]) -> OrderedDict[str, Record]: + """Convert an entire parsed OrderedDict into an OrderedDict of Records.""" + result: OrderedDict[str, Record] = OrderedDict() + for test_id, block in raw.items(): + result[test_id] = _record_from_entry(test_id, block) + return result + + +def _record_from_entry(test_id: str, block: Block) -> Record: + """Convert a single (test_id, block) pair into a Record.""" + record = Record(test_id=test_id) + + if block.get("sanitization_error") is True: + record.result = SanitizationError( + status=block.get("status", 0), + instruction_error=block.get("instruction_error"), + instruction_error_index=block.get("instruction_error_index"), + ) + elif block.get("executed") is True and block.get("is_ok") is True: + record.result = ExecutedSuccess( + fee_details=_fee_details(block.get("fee_details", {})), + modified_accounts=_account_list(block.get("modified_accounts", [])), + executed_units=block.get("executed_units"), + loaded_accounts_data_size=block.get("loaded_accounts_data_size"), + return_data=block.get("return_data"), + ) + else: + record.result = ExecutedError( + status=block.get("status", 0), + fee_details=_fee_details(block.get("fee_details", {})), + instruction_error=block.get("instruction_error"), + instruction_error_index=block.get("instruction_error_index"), + custom_error=block.get("custom_error"), + modified_accounts=_account_list(block.get("modified_accounts", [])), + rollback_accounts=_account_list(block.get("rollback_accounts", [])), + executed_units=block.get("executed_units"), + loaded_accounts_data_size=block.get("loaded_accounts_data_size"), + return_data=block.get("return_data"), + ) + + return record + + +def _fee_details(raw: Block | dict) -> FeeDetails: + """Convert a fee_details dict into a FeeDetails.""" + return FeeDetails( + transaction_fee=raw.get("transaction_fee", 0), + prioritization_fee=raw.get("prioritization_fee"), + ) + + +def _account_list(raw: list | dict) -> list[AccountEntry]: + """Convert account entries — handles single dict or list of dicts.""" + if isinstance(raw, dict): + return [_account_entry(raw)] + if isinstance(raw, list): + return [_account_entry(item) for item in raw if isinstance(item, dict)] + return [] + + +def _account_entry(raw: dict) -> AccountEntry: + """Convert an account dict into an AccountEntry.""" + return AccountEntry( + address=raw.get("address", ""), + lamports=raw.get("lamports"), + data=raw.get("data"), + executable=raw.get("executable", False), + owner=raw.get("owner", ""), + ) + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + +import pytest +from ..parser import TestParse + + +class TestHeaderVariants: + """Test that all header formats are correctly parsed.""" + + def test_hex_hash_slot_header(self): + text = "00dc63d6f5824efa900302649eeca7983e5d3f5a_1834424:\nstatus: 9\n" + records = parse(text) + assert len(records) == 1 + r = records["00dc63d6f5824efa900302649eeca7983e5d3f5a_1834424"] + assert r.test_id == "00dc63d6f5824efa900302649eeca7983e5d3f5a_1834424" + + def test_crash_header(self): + text = "crash-0ae873089c62df6e15d3fc0a271485da355874c8:\nsanitization_error: true\nstatus: 9\n" + records = parse(text) + assert "crash-0ae873089c62df6e15d3fc0a271485da355874c8" in records + + def test_uuid_header(self): + text = "aa7aa005-ba12-4d08-935d-18ed0bc1a54f:\nexecuted: true\nstatus: 9\n" + records = parse(text) + assert "aa7aa005-ba12-4d08-935d-18ed0bc1a54f" in records + + def test_name_header(self): + text = "is_signer_err_handling:\nexecuted: true\n" + records = parse(text) + assert "is_signer_err_handling" in records + + +class TestParseMinimal: + """Test parsing of minimal records.""" + + def test_sanitization_error_only(self): + text = """header1: +sanitization_error: true +status: 9 +instruction_error: 3 +""" + r = parse(text)["header1"] + assert isinstance(r.result, SanitizationError) + assert r.result.status == 9 + assert r.result.instruction_error == 3 + assert r.result.instruction_error_index is None + + def test_status_only(self): + text = "header1:\nsanitization_error: true\nstatus: 27\n" + r = parse(text)["header1"] + assert isinstance(r.result, SanitizationError) + assert r.result.status == 27 + + def test_empty_text(self): + assert parse("") == OrderedDict() + assert parse(" \n\n ") == OrderedDict() + + +class TestParseWithFeeDetails: + """Test parsing of records with fee_details blocks.""" + + def test_fee_details_basic(self): + text = """header1: +executed: true +status: 9 +instruction_error: 3 +fee_details { + transaction_fee: 15000 +} +loaded_accounts_data_size: 26626 +""" + r = parse(text)["header1"] + assert isinstance(r.result, ExecutedError) + assert r.result.fee_details.transaction_fee == 15000 + assert r.result.fee_details.prioritization_fee is None + assert r.result.loaded_accounts_data_size == 26626 + + def test_fee_details_with_prioritization(self): + text = """header1: +executed: true +is_ok: true +executed_units: 27829 +fee_details { + transaction_fee: 15000 + prioritization_fee: 1152604553296817704 +} +loaded_accounts_data_size: 20198 +""" + r = parse(text)["header1"] + assert isinstance(r.result, ExecutedSuccess) + assert r.result.executed_units == 27829 + assert r.result.fee_details.transaction_fee == 15000 + assert r.result.fee_details.prioritization_fee == 1152604553296817704 + + +class TestParseModifiedAccounts: + """Test parsing of records with modified_accounts blocks.""" + + def test_single_account(self): + text = """header1: +executed: true +is_ok: true +fee_details { + transaction_fee: 10000 +} +modified_accounts { + address: "8fi2Typkf4m1z9miGfZQGRXDimBTVQqWHciMA9aZGXpN" + lamports: 10733753813112760225 + owner: "11111111111111111111111111111111" +} +""" + r = parse(text)["header1"] + assert isinstance(r.result, ExecutedSuccess) + acct = r.result.modified_accounts[0] + assert acct.address == "8fi2Typkf4m1z9miGfZQGRXDimBTVQqWHciMA9aZGXpN" + assert acct.lamports == 10733753813112760225 + assert acct.owner == "11111111111111111111111111111111" + assert acct.executable is False + assert acct.data is None + + def test_multiple_accounts(self): + text = """header1: +executed: true +is_ok: true +fee_details { + transaction_fee: 5000 +} +modified_accounts { + address: "Addr1" + executable: true + owner: "Owner1" +} +modified_accounts { + address: "Addr2" + owner: "Owner2" +} +""" + r = parse(text)["header1"] + assert isinstance(r.result, ExecutedSuccess) + assert len(r.result.modified_accounts) == 2 + assert r.result.modified_accounts[0].executable is True + assert r.result.modified_accounts[1].executable is False + + def test_account_with_data(self): + text = """header1: +executed: true +is_ok: true +fee_details { + transaction_fee: 5000 +} +modified_accounts { + address: "Addr1" + data: "...137 zeros..." + owner: "Owner1" +} +""" + r = parse(text)["header1"] + assert isinstance(r.result, ExecutedSuccess) + assert r.result.modified_accounts[0].data == "...137 zeros..." + + def test_account_without_lamports(self): + text = """header1: +executed: true +is_ok: true +fee_details { + transaction_fee: 5000 +} +modified_accounts { + address: "Addr1" + owner: "Owner1" +} +""" + r = parse(text)["header1"] + assert isinstance(r.result, ExecutedSuccess) + assert r.result.modified_accounts[0].lamports is None + + +class TestParseRollbackAccounts: + """Test parsing of rollback_accounts blocks.""" + + def test_rollback_accounts(self): + text = """header1: +executed: true +status: 4 +fee_details { + transaction_fee: 10000 +} +rollback_accounts { + address: "Addr1" + lamports: 4295215558015524241 + executable: true + owner: "Owner1" +} +""" + r = parse(text)["header1"] + assert isinstance(r.result, ExecutedError) + assert len(r.result.rollback_accounts) == 1 + assert r.result.rollback_accounts[0].executable is True + + +class TestParseReturnData: + """Test parsing of return_data fields.""" + + def test_return_data(self): + text = """header1: +executed: true +is_ok: true +fee_details { + transaction_fee: 5000 +} +modified_accounts { + address: "Addr1" + owner: "Owner1" +} +return_data: "a500000000000000" +""" + r = parse(text)["header1"] + assert isinstance(r.result, ExecutedSuccess) + assert r.result.return_data == "a500000000000000" + + +class TestParseCustomError: + """Test parsing of custom_error field.""" + + def test_custom_error(self): + text = """header1: +executed: true +status: 9 +instruction_error: 8 +instruction_error_index: 2 +custom_error: 7 +fee_details { + transaction_fee: 5000 +} +""" + r = parse(text)["header1"] + assert isinstance(r.result, ExecutedError) + assert r.result.custom_error == 7 + assert r.result.instruction_error_index == 2 + + +class TestMultipleRecords: + """Test parsing of multiple records separated by dashes.""" + + def test_two_records(self): + text = """header_a: +sanitization_error: true +status: 9 + +-------------------- +header_b: +executed: true +status: 4 +""" + records = parse(text) + assert len(records) == 2 + assert isinstance(records["header_a"].result, SanitizationError) + assert isinstance(records["header_b"].result, ExecutedError) + + def test_three_records_with_trailing_separator(self): + text = """a:\nsanitization_error: true\nstatus: 1\n +-------------------- +b:\nsanitization_error: true\nstatus: 2\n +-------------------- +c:\nsanitization_error: true\nstatus: 3\n +-------------------- +""" + records = parse(text) + assert len(records) == 3 + + def test_preserves_order(self): + text = "bbb:\nsanitization_error: true\nstatus: 1\n\n--------------------\naaa:\nsanitization_error: true\nstatus: 2\n" + records = parse(text) + assert list(records.keys()) == ["bbb", "aaa"] + + +class TestVariantDiscrimination: + """Test that the correct result variant is constructed.""" + + def test_sanitization_error_variant(self): + text = "h:\nsanitization_error: true\nstatus: 9\ninstruction_error: 3\n" + r = parse(text)["h"] + assert isinstance(r.result, SanitizationError) + assert r.result.status == 9 + assert r.result.instruction_error == 3 + + def test_executed_success_variant(self): + text = """h: +executed: true +is_ok: true +executed_units: 1000 +fee_details { + transaction_fee: 5000 +} +modified_accounts { + address: "Addr1" + owner: "Owner1" +} +""" + r = parse(text)["h"] + assert isinstance(r.result, ExecutedSuccess) + assert r.result.fee_details.transaction_fee == 5000 + assert r.result.executed_units == 1000 + assert len(r.result.modified_accounts) == 1 + + def test_executed_error_variant(self): + text = """h: +executed: true +status: 9 +instruction_error: 8 +custom_error: 42 +fee_details { + transaction_fee: 15000 +} +""" + r = parse(text)["h"] + assert isinstance(r.result, ExecutedError) + assert r.result.status == 9 + assert r.result.instruction_error == 8 + assert r.result.custom_error == 42 + + def test_sanitization_error_has_no_fee_or_accounts(self): + text = "h:\nsanitization_error: true\nstatus: 27\n" + r = parse(text)["h"] + assert isinstance(r.result, SanitizationError) + assert not hasattr(r.result, "fee_details") + assert not hasattr(r.result, "modified_accounts") + + +class TestParseFile: + """Test file parsing against the actual data files.""" + + def test_parse_parseme1_record_count(self): + records = parse_file(TestParse.expected()) + assert len(records) == 5244 + for header, r in records.items(): + assert header != "" + assert r.test_id == header + assert r.result is not None + + def test_parse_parseme2_record_count(self): + records = parse_file(TestParse.actual()) + assert len(records) == 5244 + + def test_parseme1_first_record(self): + records = parse_file(TestParse.expected()) + first_key = next(iter(records)) + assert first_key == "00dc63d6f5824efa900302649eeca7983e5d3f5a_1834424" + r = records[first_key] + assert isinstance(r.result, SanitizationError) + assert r.result.status == 9 + assert r.result.instruction_error == 3 + + def test_parseme1_second_record(self): + records = parse_file(TestParse.expected()) + keys = list(records.keys()) + r = records[keys[1]] + assert isinstance(r.result, ExecutedError) + assert r.result.status == 9 + assert r.result.fee_details.transaction_fee == 15000 + assert r.result.loaded_accounts_data_size == 26626 + assert len(r.result.modified_accounts) == 7 + assert r.result.modified_accounts[0].address == "AgzPoim5Zy7s9YaGEvxUzGg5UbrSgsPXMRfebjixXBv4" + assert r.result.modified_accounts[5].data == "...137 zeros..." + assert len(r.result.rollback_accounts) == 1 + + def test_parseme1_third_record_is_ok(self): + records = parse_file(TestParse.expected()) + keys = list(records.keys()) + r = records[keys[2]] + assert isinstance(r.result, ExecutedSuccess) + assert r.result.executed_units == 1306 + assert r.result.fee_details.transaction_fee == 10000 + + def test_parseme1_fourth_record_prioritization_fee(self): + records = parse_file(TestParse.expected()) + keys = list(records.keys()) + r = records[keys[3]] + assert isinstance(r.result, (ExecutedSuccess, ExecutedError)) + assert r.result.fee_details.prioritization_fee == 1152604553296817704 + + def test_parseme1_has_all_header_types(self): + records = parse_file(TestParse.expected()) + assert "crash-0ae873089c62df6e15d3fc0a271485da355874c8" in records + assert "aa7aa005-ba12-4d08-935d-18ed0bc1a54f" in records + assert "is_signer_err_handling" in records + + def test_parseme1_variant_counts(self): + records = parse_file(TestParse.expected()) + san = sum(1 for r in records.values() if isinstance(r.result, SanitizationError)) + ok = sum(1 for r in records.values() if isinstance(r.result, ExecutedSuccess)) + err = sum(1 for r in records.values() if isinstance(r.result, ExecutedError)) + assert san + ok + err == len(records) + assert san > 0 and ok > 0 and err > 0 + + def test_parseme1_all_success_have_modified_accounts(self): + records = parse_file(TestParse.expected()) + for r in records.values(): + if isinstance(r.result, ExecutedSuccess): + assert len(r.result.modified_accounts) > 0 diff --git a/conformance/parseout/pyproject.toml b/conformance/parseout/pyproject.toml new file mode 100644 index 0000000000..e1c52a805c --- /dev/null +++ b/conformance/parseout/pyproject.toml @@ -0,0 +1,15 @@ +[project] +name = "parseout" +version = "0.1.0" +requires-python = ">=3.10" +readme = "README.md" + +[project.scripts] +parseout = "parseout.__main__:main" + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.pytest.ini_options] +python_files = ["parser.py", "differ.py"] From d0b00e85444b12004c8232057e06aa7e17e81057 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Fri, 20 Mar 2026 16:24:52 -0600 Subject: [PATCH 16/35] fix(conformance): make get-solfuzz-agave.sh executable --- conformance/scripts/get-solfuzz-agave.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 conformance/scripts/get-solfuzz-agave.sh diff --git a/conformance/scripts/get-solfuzz-agave.sh b/conformance/scripts/get-solfuzz-agave.sh old mode 100644 new mode 100755 From 927a1226385f288bee8bcbab5f4ca2f39092a8e1 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Fri, 20 Mar 2026 16:30:44 -0600 Subject: [PATCH 17/35] fix docs --- docs/docusaurus/docs/code/conformance.md | 10 ++ docs/docusaurus/docs/code/parseout.md | 215 +++++++++++++++++++++++ 2 files changed, 225 insertions(+) create mode 100644 docs/docusaurus/docs/code/parseout.md diff --git a/docs/docusaurus/docs/code/conformance.md b/docs/docusaurus/docs/code/conformance.md index df3c47c2ce..7919ab2404 100644 --- a/docs/docusaurus/docs/code/conformance.md +++ b/docs/docusaurus/docs/code/conformance.md @@ -58,3 +58,13 @@ If you want to debug solfuzz_agave or manually generate fixtures, you'll need to # for more options ./run.py --help ``` + +# Interpreting results + +The expected and actual results for all tests are in env/test-outputs. You can use `parseout` to interpret the results. + +```bash +parseout txn +``` + +See [parseout/README.md] for more info. diff --git a/docs/docusaurus/docs/code/parseout.md b/docs/docusaurus/docs/code/parseout.md new file mode 100644 index 0000000000..63d5b32f67 --- /dev/null +++ b/docs/docusaurus/docs/code/parseout.md @@ -0,0 +1,215 @@ +# parseout + +A parser and differ for the conformance test outputs. Useful for categorizing or +interpreting a large number of failed tests. Compares expected and actual +results, identifies mismatches, and categorizes them based on the types of +mismatches. + +## Quick start + +```bash +parseout diff expected.txt actual.txt +``` + +or for a smarter version that handles transaction harness failures better than `diff`: + +```bash +parseout txn +``` + +This produces three output files prints a summary +to stdout: + +- **\*.csv:** one row per mismatch (`header, categories`), sorted so rows + with the same category combination are adjacent. +- **\*-category.json:** mismatches grouped by individual category. A + mismatch appears under every category it belongs to. +- **\*-combo.json:** mismatches grouped by their exact combination of + categories. Each mismatch appears under exactly one key. + +### Example stdout summary + +``` +1818 mismatches written to txn.csv, txn-category.json, txn-combo.json + +Categories: + result_type: 1194 + status: 233 + instruction_error: 312 + ... + +Combinations: + result_type: 1194 + modified_accounts+rollback_accounts: 185 + instruction_error+status: 155 + ... +``` + +**Categories** lists every individual category with the total number of +mismatches it appears in (a mismatch can be counted under multiple +categories). + +**Combinations** lists every unique set of categories as a single entry, +with the count of mismatches that have exactly that combination. + +## Subcommands + +### `diff` -- generic diff + +```bash +parseout diff +``` + +Uses the generic parser only. Recursively compares every field in each record +and generates diff categories dynamically from the field path where differences +occur. Category naming: + +- `field.subfield` -- values differ at that path +- `field.0.subfield` -- values differ at list index 0, subfield +- `field-missing` -- field exists in expected but not actual +- `field-unexpected` -- field exists in actual but not expected +- `field` (for lists) -- list lengths differ + +Outputs `diff.csv`, `diff-category.json`, `diff-combo.json` to the current +directory. + +### `txn` -- transaction diff + +```bash +parseout txn [expected] [actual] +``` + +A domain-specific differ for transaction conformance outputs. + +The generic differ makes a best effort at detecting differences in fields, but it +doesn't encode any domain-specific knowledge. For the transaction harness, the +mismatch categories from `diff` can be confusing. That's where this `txn` command comes in handy. + +This parses both files into typed records with known fields (status, fee_details, +modified_accounts, etc.) and compares them using a fixed set of categories +tailored to transaction semantics. + +`` and `` are optional. If omitted, it will locate files in +`env/test-outputs/txn/fixtures/` and place the outputs there as well. + +Outputs `txn.csv`, `txn-category.json`, `txn-combo.json`. + +### `parse` -- generic parse + +```bash +parseout parse +``` + +Converts a single test output file from the protobuf text format into JSON +using the generic parser. Prints to stdout. Useful if you'd like to interpret +the results in a separate program that is able to parse json. + +## Architecture + +The parser is split into two layers. The layers are composable and you can import +them as a library into python scripts for custom interpretations of test results. + +There are also two differs that each operate on the two parsing layers. + +### Parse Layer 1: generic parser (`parseout.parser`) + +Parses the protobuf-text-like format into `OrderedDict[str, dict]`. Handles +record headers, key-value pairs, nested `{ }` blocks, and record separators +(lines of 20 hyphens). No regex -- uses only string operations. + +### Parse Layer 2: transaction parser (`parseout.transaction.parser`) + +Converts the generic dicts into a typed dataclass hierarchy: + +- **Record:** wraps a `test_id` and a result variant. +- **SanitizationError:** the transaction failed before execution. +- **ExecutedSuccess:** the transaction executed and succeeded. +- **ExecutedError:** the transaction executed but failed. +- **FeeDetails:** fee breakdown (transaction fee, prioritization fee). +- **AccountEntry:** a modified or rollback account. + +The result variant is a tagged union discriminated by the `sanitization_error`, +`executed`, and `is_ok` fields in the raw data. + +### Generic differ (`parseout.differ`) - Layer 1 diff + +Compares two parsed `OrderedDict[str, Block]` collections by shared headers. +Recursively walks every field and generates categories from the path where +values diverge. Works on any file the generic parser can read. + +### Transaction differ (`parseout.transaction.differ`) - Layer 2 diff + +Compares two parsed `OrderedDict[str, Record]` collections by shared test IDs. +Each mismatch is tagged with one or more `Category` values from a fixed enum: + +| Category | Description | +| --------------------------- | ----------------------------------------------- | +| `result_type` | Different variant types (e.g. success vs error) | +| `status` | Different status codes | +| `instruction_error` | Different instruction error codes | +| `instruction_error_index` | Different instruction error indices | +| `custom_error` | Different custom error codes | +| `fee_details` | Different fee breakdowns | +| `executed_units` | Different compute unit counts | +| `loaded_accounts_data_size` | Different loaded account data sizes | +| `return_data` | Different return data | +| `modified_accounts` | Different modified account lists | +| `rollback_accounts` | Different rollback account lists | + +When two records have different variant types, only `result_type` is reported. + +## Input format + +Each file contains records separated by lines of exactly 20 hyphens +(`--------------------`). Each record starts with a header line (the test ID) +followed by a colon, then key-value pairs and nested blocks: + +``` +some_test_id: +executed: true +is_ok: true +executed_units: 27829 +fee_details { + transaction_fee: 15000 + prioritization_fee: 500 +} +modified_accounts { + address: "8fi2Typkf4m1z9miGfZQGRXDimBTVQqWHciMA9aZGXpN" + lamports: 10733753813112760225 + owner: "11111111111111111111111111111111" +} +-------------------- +another_test_id: +sanitization_error: true +status: 9 +``` + +## Tests + +```bash +pytest +``` + +151 tests run inline in the source files (parser, generic differ, transaction +parser, transaction differ). + +## Python API + +```python +# Generic diff -- works on any file, dynamic categories +from parseout import diff_files + +mismatches = diff_files("expected.txt", "actual.txt") +for m in mismatches: + print(m.header, m.categories) + +# Transaction diff -- typed records, fixed categories +from parseout.transaction import parse_file, diff_files, Category + +expected = parse_file("expected.txt") +actual = parse_file("actual.txt") + +mismatches = diff_files("expected.txt", "actual.txt") +for m in mismatches: + print(m.test_id, m.categories) +``` From 6b15a4de546c54e7afadc1ab984c5307a7337ae1 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Fri, 20 Mar 2026 18:31:29 -0600 Subject: [PATCH 18/35] feat(conformance): vendor agave with flake for local debugging --- conformance/README.md | 20 ++++++-- conformance/commits.env | 5 ++ conformance/flake.nix | 61 ++++++++++++++++++++---- conformance/scripts/get-solfuzz-agave.sh | 50 ------------------- 4 files changed, 74 insertions(+), 62 deletions(-) delete mode 100755 conformance/scripts/get-solfuzz-agave.sh diff --git a/conformance/README.md b/conformance/README.md index 7919ab2404..8787207588 100644 --- a/conformance/README.md +++ b/conformance/README.md @@ -3,8 +3,8 @@ Install [nix](https://nixos.org/download/) if you do not have it. ```bash -nix develop # if you only want to run the tests -nix develop .#full # if you also want to debug solfuzz-agave +nix develop # if you only want to run the tests +nix develop .#agave # if you also want to run the test vectors against agave ``` # Build @@ -46,10 +46,22 @@ solana-conformance \ **Debug Agave** -If you want to debug solfuzz_agave or manually generate fixtures, you'll need to use the `full` environment (described above). Then you can use some commands like these: +If you want to debug solfuzz_agave or manually generate fixtures from agave, you'll need to set up the agave environment with `nix develop .#agave`. + +You can edit any of the agave code in the env/ folder to debug agave. To run the conformance tests against this code, you'll need to compile solfuzz_agave: + +```bash +cd env/solfuzz-agave +cargo build --lib --release +``` + +Then you can use some commands like these: ```bash -# create the fixtures from agave, and run the conformance tests +# run the tests against agave +./run.py --exec-lib env/solfuzz-agave/target/release/libsolfuzz_agave.so + +# create the fixtures based on agave, and run the conformance tests ./run.py --create # re-run conformance tests using your created fixtures diff --git a/conformance/commits.env b/conformance/commits.env index 0111047c0c..3ab2c13e9f 100644 --- a/conformance/commits.env +++ b/conformance/commits.env @@ -9,3 +9,8 @@ AGAVE_PROTOSOL_COMMIT="e52ca0f21f4ef68e8f2ed5269dcfaa8b50091f7f" # protosol definitions used for sig SIG_PROTOSOL_COMMIT="e52ca0f21f4ef68e8f2ed5269dcfaa8b50091f7f" + +# these are the commits used by solfuzz_agave. +# they are not needed directly our ci, but are useful for local debugging +AGAVE_COMMIT="8d35051b7cac869bd165ae440db672617d053026" +SBPF_COMMIT="d32556248756e19ee49a44a94ccb633e2414a386" diff --git a/conformance/flake.nix b/conformance/flake.nix index 78cee83ea4..5003fd037e 100644 --- a/conformance/flake.nix +++ b/conformance/flake.nix @@ -28,11 +28,44 @@ url = "https://github.com/firedancer-io/test-vectors.git"; rev = commits.TEST_VECTORS_COMMIT; }; - solana-conformance = builtins.fetchGit { url = "https://github.com/firedancer-io/solana-conformance.git"; rev = commits.SOLANA_CONFORMANCE_COMMIT; }; + solfuzz-agave = builtins.fetchGit { + url = "https://github.com/firedancer-io/solfuzz-agave.git"; + rev = commits.SOLFUZZ_AGAVE_COMMIT; + }; + protosol = builtins.fetchGit { + url = "https://github.com/firedancer-io/protosol.git"; + rev = commits.AGAVE_PROTOSOL_COMMIT; + submodules = true; + }; + agave = builtins.fetchGit { + url = "https://github.com/firedancer-io/agave.git"; + rev = commits.AGAVE_COMMIT; + }; + sbpf = builtins.fetchGit { + url = "https://github.com/firedancer-io/sbpf.git"; + rev = commits.SBPF_COMMIT; + }; + + # protoc and flatc need to be the exact versions built by protosol + protosol-toolchain = pkgs.stdenvNoCC.mkDerivation { + pname = "protosol-toolchain"; + version = commits.AGAVE_PROTOSOL_COMMIT; + src = protosol; + nativeBuildInputs = with pkgs; [ cmake gcc ]; + dontConfigure = true; + buildPhase = '' + patchShebangs ./deps.sh + ./deps.sh + ''; + installPhase = '' + mkdir -p "$out" + cp -r opt/bin/* "$out" + ''; + }; baseShellHook = '' export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [pkgs.stdenv.cc.cc.lib]}" @@ -42,8 +75,9 @@ python3.13 -m venv env/venv source env/venv/bin/activate cp -r ${solana-conformance} env/solana-conformance && chmod +w -R env/solana-conformance - SETUPTOOLS_SCM_PRETEND_VERSION=0.0.0 pip install env/solana-conformance[dev,octane] - SETUPTOOLS_SCM_PRETEND_VERSION=0.0.0 pip install -e parseout[dev] + export SETUPTOOLS_SCM_PRETEND_VERSION=0.0.0 + pip install -e env/solana-conformance[dev,octane] + pip install -e parseout[dev] ''; in { formatter.${system} = pkgs.alejandra; @@ -56,14 +90,25 @@ full = pkgs.mkShell { packages = baseDeps ++ (with pkgs; [clang cmake gcc pkgs.rust-bin.stable."1.93.0".default]); - shellHook = '' - ${baseShellHook} + shellHook = baseShellHook + '' + export LIBCLANG_PATH="${pkgs.llvmPackages_22.libclang.lib}/lib" export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [ pkgs.stdenv.cc.cc.lib - pkgs.llvmPackages_19.libclang.lib + pkgs.llvmPackages_22.libclang.lib + pkgs.llvmPackages_22.libllvm ]}" - export LIBCLANG_PATH="${pkgs.llvmPackages_19.libclang.lib}/lib" - scripts/get-solfuzz-agave.sh + + export PROTOC_EXECUTABLE="${protosol-toolchain}/protoc" + export FLATC_EXECUTABLE="${protosol-toolchain}/flatc" + + cp -r ${agave} env/agave && chmod +w -R env/agave + cp -r ${sbpf} env/sbpf && chmod +w -R env/sbpf + cp -r ${solfuzz-agave} env/solfuzz-agave && chmod +w -R env/solfuzz-agave + cp -r ${protosol} env/solfuzz-agave/protosol && chmod +w -R env/solfuzz-agave/protosol + + pushd env/solfuzz-agave + python scripts/generate_local_cargo.py --agave-path ../agave --sbpf-path ../sbpf + popd ''; }; }; diff --git a/conformance/scripts/get-solfuzz-agave.sh b/conformance/scripts/get-solfuzz-agave.sh deleted file mode 100755 index 1677f99b29..0000000000 --- a/conformance/scripts/get-solfuzz-agave.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -conformance_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -env="$conformance_dir/env" -. "$conformance_dir/commits.env" - -get-repo-at-commit() { - local repo_url=$1 - local commit=$2 - local dir="$3" - - mkdir -p "$env" - if [[ ! -d "$dir" ]]; then - echo "Cloning $repo_url at $commit" - if git clone --revision=$commit --depth=1 $repo_url "$dir"; then - return 0 - else - git clone $repo_url "$dir" - fi - fi - echo "Resetting $dir to $commit" - pushd "$dir" - git fetch origin $commit - git reset --hard $commit - popd -} - -get-repo-at-commit \ - https://github.com/firedancer-io/solfuzz-agave.git \ - $SOLFUZZ_AGAVE_COMMIT \ - "$env/solfuzz-agave" - -get-repo-at-commit \ - https://github.com/firedancer-io/protosol.git \ - $AGAVE_PROTOSOL_COMMIT \ - "$env/solfuzz-agave/protosol" - -# build vendored protoc and flatc -pushd "$env/solfuzz-agave/protosol" -git submodule update --init --recursive -./deps.sh -popd - -export PROTOC_EXECUTABLE="$env/solfuzz-agave/protosol/opt/bin/protoc" -export FLATC_EXECUTABLE="$env/solfuzz-agave/protosol/opt/bin/flatc" - -pushd "$env/solfuzz-agave" -cargo build --lib --release -popd From 6e87c2da2b209556f102168cd408bb56f862cd9f Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Fri, 20 Mar 2026 21:44:36 -0600 Subject: [PATCH 19/35] conformance flake idempotency for agave and fix docs --- conformance/flake.nix | 10 +++---- docs/docusaurus/docs/code/conformance.md | 20 ++++++++++--- docs/generate.py | 36 ++++++++++++++++-------- 3 files changed, 45 insertions(+), 21 deletions(-) diff --git a/conformance/flake.nix b/conformance/flake.nix index 5003fd037e..50c80e8983 100644 --- a/conformance/flake.nix +++ b/conformance/flake.nix @@ -88,7 +88,7 @@ shellHook = baseShellHook; }; - full = pkgs.mkShell { + agave = pkgs.mkShell { packages = baseDeps ++ (with pkgs; [clang cmake gcc pkgs.rust-bin.stable."1.93.0".default]); shellHook = baseShellHook + '' export LIBCLANG_PATH="${pkgs.llvmPackages_22.libclang.lib}/lib" @@ -101,10 +101,10 @@ export PROTOC_EXECUTABLE="${protosol-toolchain}/protoc" export FLATC_EXECUTABLE="${protosol-toolchain}/flatc" - cp -r ${agave} env/agave && chmod +w -R env/agave - cp -r ${sbpf} env/sbpf && chmod +w -R env/sbpf - cp -r ${solfuzz-agave} env/solfuzz-agave && chmod +w -R env/solfuzz-agave - cp -r ${protosol} env/solfuzz-agave/protosol && chmod +w -R env/solfuzz-agave/protosol + [ ! -d env/agave ] && cp -r ${agave} env/agave && chmod +w -R env/agave + [ ! -d env/sbpf ] && cp -r ${sbpf} env/sbpf && chmod +w -R env/sbpf + [ ! -d env/solfuzz-agave ] && cp -r ${solfuzz-agave} env/solfuzz-agave && chmod +w -R env/solfuzz-agave + [ ! -d env/solfuzz-agave/protosol ] && cp -r ${protosol} env/solfuzz-agave/protosol && chmod +w -R env/solfuzz-agave/protosol pushd env/solfuzz-agave python scripts/generate_local_cargo.py --agave-path ../agave --sbpf-path ../sbpf diff --git a/docs/docusaurus/docs/code/conformance.md b/docs/docusaurus/docs/code/conformance.md index 7919ab2404..8787207588 100644 --- a/docs/docusaurus/docs/code/conformance.md +++ b/docs/docusaurus/docs/code/conformance.md @@ -3,8 +3,8 @@ Install [nix](https://nixos.org/download/) if you do not have it. ```bash -nix develop # if you only want to run the tests -nix develop .#full # if you also want to debug solfuzz-agave +nix develop # if you only want to run the tests +nix develop .#agave # if you also want to run the test vectors against agave ``` # Build @@ -46,10 +46,22 @@ solana-conformance \ **Debug Agave** -If you want to debug solfuzz_agave or manually generate fixtures, you'll need to use the `full` environment (described above). Then you can use some commands like these: +If you want to debug solfuzz_agave or manually generate fixtures from agave, you'll need to set up the agave environment with `nix develop .#agave`. + +You can edit any of the agave code in the env/ folder to debug agave. To run the conformance tests against this code, you'll need to compile solfuzz_agave: + +```bash +cd env/solfuzz-agave +cargo build --lib --release +``` + +Then you can use some commands like these: ```bash -# create the fixtures from agave, and run the conformance tests +# run the tests against agave +./run.py --exec-lib env/solfuzz-agave/target/release/libsolfuzz_agave.so + +# create the fixtures based on agave, and run the conformance tests ./run.py --create # re-run conformance tests using your created fixtures diff --git a/docs/generate.py b/docs/generate.py index 653ef9ea4b..2b0aaa8815 100644 --- a/docs/generate.py +++ b/docs/generate.py @@ -1,3 +1,4 @@ +import subprocess import os # get all the markdown files in the source repo @@ -26,15 +27,24 @@ def get_markdown_files( # add all markdown files to list for file in files: if file.endswith(".md"): - dir_name = os.path.basename(root) - if dir_name == "" or dir_name == "." or dir_name == "..": + if file == "README.md" and root == src_path: # this is the root readme.md -- we dont include # it in the docs for now continue - - docs_path = os.path.join(code_dir_path, dir_name + ".md") - if dir_name == "metrics" : + + if subprocess.run( + ["git", "check-ignore", os.path.join(root, file)], + stdout=subprocess.DEVNULL, + ).returncode == 0: + continue + + dir_name = os.path.basename(root) + if dir_name == "metrics": docs_path = os.path.join(docs_dir_path, "usage/metrics.md") + elif file.lower() == "readme.md": + docs_path = os.path.join(code_dir_path, dir_name + ".md") + else: + docs_path = os.path.join(code_dir_path, dir_name + "_" + file) doc_files.append([ # src/ path @@ -45,22 +55,24 @@ def get_markdown_files( return doc_files + # generate the docs from the source files if __name__ == "__main__": # point to the source sig/ repo # (should be run from the docs/ directory) - src_path = "../" - code_docs_path = "docusaurus/docs" + docs_dir = os.path.dirname(os.path.abspath(__file__)) + repo_root = os.path.abspath(os.path.join(docs_dir, "..")) + code_docs_path = os.path.join(docs_dir, "docusaurus", "docs") # dirs which not to search exclude_dirs = [ - src_path + "docs", # dont search yourself - src_path + "data", # this should only include data - src_path + "conformance/env", # other repositories - src_path + "workspace", # CI workspace (e.g. zig toolchain), not source + os.path.join(repo_root, "docs"), # dont search yourself + os.path.join(repo_root, "data"), # this should only include data + os.path.join(repo_root, "conformance/env"), # other repositories + os.path.join(repo_root, "workspace"), # CI workspace (e.g. zig toolchain), not source ] - for src_path, docs_path in get_markdown_files(src_path, exclude_dirs, code_docs_path): + for src_path, docs_path in get_markdown_files(repo_root, exclude_dirs, code_docs_path): print(src_path) # copy the file to the docs/code directory with open(src_path, "r") as f: From 634e04e17d9567419518cc9862f0a3497578bcdf Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Sat, 21 Mar 2026 09:36:51 -0600 Subject: [PATCH 20/35] docs(conformance): improve clarity --- conformance/README.md | 15 ++++++++------- docs/docusaurus/docs/code/conformance.md | 15 ++++++++------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/conformance/README.md b/conformance/README.md index 8787207588..4c97f6e90f 100644 --- a/conformance/README.md +++ b/conformance/README.md @@ -18,10 +18,14 @@ zig build solfuzz_sig # Run -**Run all the test vectors** +**Run the test vectors** ```bash +# run all ./run.py + +# run only the transaction harness tests +./run.py txn ``` For customization, try `--help`. @@ -46,7 +50,7 @@ solana-conformance \ **Debug Agave** -If you want to debug solfuzz_agave or manually generate fixtures from agave, you'll need to set up the agave environment with `nix develop .#agave`. +If you want to debug agave or manually generate fixtures from agave, you'll need to set up the agave environment with `nix develop .#agave`. You can edit any of the agave code in the env/ folder to debug agave. To run the conformance tests against this code, you'll need to compile solfuzz_agave: @@ -61,14 +65,11 @@ Then you can use some commands like these: # run the tests against agave ./run.py --exec-lib env/solfuzz-agave/target/release/libsolfuzz_agave.so -# create the fixtures based on agave, and run the conformance tests +# create the fixtures based on agave, and run the conformance tests against sig ./run.py --create -# re-run conformance tests using your created fixtures +# re-run conformance tests against sig using your created fixtures ./run.py --use-created - -# for more options -./run.py --help ``` # Interpreting results diff --git a/docs/docusaurus/docs/code/conformance.md b/docs/docusaurus/docs/code/conformance.md index 8787207588..4c97f6e90f 100644 --- a/docs/docusaurus/docs/code/conformance.md +++ b/docs/docusaurus/docs/code/conformance.md @@ -18,10 +18,14 @@ zig build solfuzz_sig # Run -**Run all the test vectors** +**Run the test vectors** ```bash +# run all ./run.py + +# run only the transaction harness tests +./run.py txn ``` For customization, try `--help`. @@ -46,7 +50,7 @@ solana-conformance \ **Debug Agave** -If you want to debug solfuzz_agave or manually generate fixtures from agave, you'll need to set up the agave environment with `nix develop .#agave`. +If you want to debug agave or manually generate fixtures from agave, you'll need to set up the agave environment with `nix develop .#agave`. You can edit any of the agave code in the env/ folder to debug agave. To run the conformance tests against this code, you'll need to compile solfuzz_agave: @@ -61,14 +65,11 @@ Then you can use some commands like these: # run the tests against agave ./run.py --exec-lib env/solfuzz-agave/target/release/libsolfuzz_agave.so -# create the fixtures based on agave, and run the conformance tests +# create the fixtures based on agave, and run the conformance tests against sig ./run.py --create -# re-run conformance tests using your created fixtures +# re-run conformance tests against sig using your created fixtures ./run.py --use-created - -# for more options -./run.py --help ``` # Interpreting results From 9e13cab2f484f4b7f43dcd19eee9c5ba2a51e504 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Mon, 23 Mar 2026 15:27:53 -0600 Subject: [PATCH 21/35] conformance: improve error handling in elf_loader harness --- conformance/src/elf_loader.zig | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/conformance/src/elf_loader.zig b/conformance/src/elf_loader.zig index 26373c4ba7..07ab1790e8 100644 --- a/conformance/src/elf_loader.zig +++ b/conformance/src/elf_loader.zig @@ -14,25 +14,35 @@ export fn sol_compat_elf_loader_v2( in_ptr: [*]const u8, in_size: u64, ) i32 { - errdefer |err| std.debug.panic("err: {s}", .{@errorName(err)}); + testAndHandleIO(out_ptr, out_size, in_ptr, in_size) catch |e| { + std.debug.print("error: {s}\n", .{@errorName(e)}); + return -1; + }; + return 0; +} + +fn testAndHandleIO( + out_ptr: [*]u8, + out_size: *u64, + in_ptr: [*]const u8, + in_size: u64, +) !void { const allocator = std.heap.c_allocator; // zig_protobuf leaks sometimes on invalid input, so we just work around with by using an arena var decode_arena = std.heap.ArenaAllocator.init(allocator); defer decode_arena.deinit(); - var ctx = ELFLoaderCtx.decode(decode_arena.allocator(), in_ptr[0..in_size]) catch return -1; + var ctx = try ELFLoaderCtx.decode(decode_arena.allocator(), in_ptr[0..in_size]); defer ctx.deinit(decode_arena.allocator()); - var elf_effects = executeElfTest(ctx, allocator) catch return -1; + var elf_effects = try executeElfTest(ctx, allocator); defer elf_effects.deinit(allocator); const effect_bytes = elf_effects.encode(); - const out_slice = out_ptr[0..out_size.*]; - - @memcpy(out_slice[0..effect_bytes.len], &effect_bytes); + if (out_size.* < effect_bytes.len) return error.OutputTooSmall; + @memcpy(out_ptr[0..effect_bytes.len], &effect_bytes); out_size.* = effect_bytes.len; - return 0; } fn executeElfTest(ctx: ELFLoaderCtx, allocator: std.mem.Allocator) !ElfLoaderEffects { From 0eeb1fcd8b7b0c515bb84db766e2987ad6041fb6 Mon Sep 17 00:00:00 2001 From: InKryption Date: Wed, 25 Mar 2026 08:28:11 +0100 Subject: [PATCH 22/35] Read slot from clock sysvar, use parent slot Fixes 894 transaction fixtures, breaks 10 others. --- conformance/scripts/failing.txt | 913 +----------------- conformance/src/txn_execute.zig | 18 +- src/replay/resolve_lookup.zig | 9 +- .../program/address_lookup_table/state.zig | 2 +- 4 files changed, 27 insertions(+), 915 deletions(-) diff --git a/conformance/scripts/failing.txt b/conformance/scripts/failing.txt index d90775d882..21a66b2fc0 100644 --- a/conformance/scripts/failing.txt +++ b/conformance/scripts/failing.txt @@ -271,318 +271,143 @@ instr/fixtures/zk_sdk/wacc9_d13848d723bd8cfa.fix txn/fixtures/006cec687919df8ddc4fd111e60e4864c7a94a79_2288978.fix txn/fixtures/00af752d1f13d997b80e291115dd08907fc04653_265678.fix txn/fixtures/00dc63d6f5824efa900302649eeca7983e5d3f5a_1834424.fix -txn/fixtures/0103115bd3ec4f27fcf4dbd7cee22a530e68f797_2135631.fix -txn/fixtures/01237a8b8a95fe81b703f7983eb7842f962b50fe_265678.fix -txn/fixtures/0136006d0f996e9945f0f29b51777e28fe515f0d_2190571.fix +txn/fixtures/01525f9b176afe344b3b13d9c245704c03de6914_265678.fix txn/fixtures/016b58bef3cbb526df4a67c91f1dffc67ca6f557_1840191.fix txn/fixtures/0179c4cbb9a7110eb246247ca09517720f960904_2194958.fix -txn/fixtures/0183b6cda71f09f58bcb5164828a9597a839869d_2211742.fix txn/fixtures/021f0cfecbd5edd05af52b24c1374d5dd13c36c0_3213804.fix -txn/fixtures/024d737de4d4972b4a1591e82ace975979dc6718_2230394.fix txn/fixtures/025c41e63767ab929c10eb132b5ba984d94e3270_265678.fix -txn/fixtures/02b3430534bb8ec4ccd709cb7ae8e5b8d6df4aad_2197298.fix -txn/fixtures/02ba7c2c651391d57b763a94130868f1cbdb4ef6_179791.fix -txn/fixtures/02e8265a13b1ad69d6a004b56133159de5f8733b_2197709.fix -txn/fixtures/02e899660fe0f26c59c8ae8aed7bfd6673d4e076_1375234.fix -txn/fixtures/02f247a27a981000e10282625e1c489b9b6db90c_265678.fix -txn/fixtures/02fe2b0bce357cdfc3b1557339b60ce6b592951b_265678.fix -txn/fixtures/031ec212653853476f302131cf8d5d9a403f7b82_2220831.fix txn/fixtures/0326fd689c6fb4ed44c8304776bb110dffda5bec_265678.fix txn/fixtures/032a3dbd38411d35b22234f84e4e9280603c182e_1190840.fix -txn/fixtures/03461d1ee3cd21a2a3451c470477cc857197efe1_3418666.fix -txn/fixtures/036e4ae1eafe05a7690280b02ab26a41714c5326_265678.fix txn/fixtures/03756b34d21159e4ab852ce72e5368145abba09c_265678.fix -txn/fixtures/03a2fa9ece069a24dd4a6b3ca0c4f627f9ebafc2_2188818.fix txn/fixtures/03aa332b202dfe5555e2f5ae5c54f661a794cff8_1852822.fix -txn/fixtures/03b11411082235faa4be68dc5132a2c293dcd15f_3677356.fix txn/fixtures/03c7c6f82ad963b03675a01bd23846cd2fda345a_2134389.fix txn/fixtures/03dc8d0e3e91b0660e951d913960ff71c2ad02cc_2996610.fix -txn/fixtures/042d94b755776fcf059a2e6200dc7af45d190d08_1574621.fix txn/fixtures/042ff9e461559c7cd129d9a1cd1eb2eada273b04_1842874.fix -txn/fixtures/045b3f22f7399a4548f5bfe11e6fa2788a5de91d_2209190.fix -txn/fixtures/04a751adc04f5584ad605bebb3ec9c608335cfa4_2204078.fix txn/fixtures/04ac142a971d9323607de20fce669444443bc915_265678.fix txn/fixtures/050108dd9b2c1dbf87b11d3dc6b2b50fc16abfba_2233729.fix txn/fixtures/053ae2dcd2b51f24217d2f647c8b204b97d07318_1832236.fix -txn/fixtures/055c62560b81faa56b389dba22e6f113e160fe32_901661.fix -txn/fixtures/056eba9d70405ed6a11023b1cd96e3c92e9661c6_265678.fix -txn/fixtures/0587ac249a98b9379c81e1c5f0f7b417ca5ac77f_2234894.fix -txn/fixtures/05cab714df1317735f11a326b2b91aac865a508b_2191317.fix txn/fixtures/05dbe5bc20b7f49b174ddb99aad50e87cf6630c3_1834634.fix -txn/fixtures/05f6a634c50d863f1127e931cc4c1ed9a7e13073_265678.fix -txn/fixtures/069dfc436fb57aa794d78edfd9867f26830579cf_2753981.fix -txn/fixtures/06c676278f6bed3172c1c35dc53ded17d05cbb34_2206266.fix -txn/fixtures/06ddb628dad6980f524a0b4efecb26b0ec766293_2237315.fix txn/fixtures/070334b6fbfba042afdb1834d7121e126748305d_265678.fix -txn/fixtures/07555c408bd0410bfd986d2746a60b2b2a338397_1836475.fix txn/fixtures/07586995a94dffe82db72e23dcc1c6335b1db174_1835702.fix txn/fixtures/079985119394d9f4ac831732cedd707541dd46e4_265678.fix -txn/fixtures/07bb6b5600e9cb4f67bc8fdd46032a9ecbaa33be_265678.fix txn/fixtures/07eb941922fc243151d2508418af3084cd120750_265678.fix -txn/fixtures/07fbaa60ebb44e18d021624525ad01b1c7d53529_2136416.fix -txn/fixtures/081416a5bb9315e77818df324f050344628ee3a3_265678.fix -txn/fixtures/085c146aa8a8584bd559b2f444fe7a08d1383d80_1574990.fix txn/fixtures/085f9d2bbc93cbee2fd9a0803c91851a7fc39af2_265678.fix txn/fixtures/086a9edb3347cbe7d120f8579ba505440dae574c_265678.fix txn/fixtures/0899a69ebd070da07bc8856a0178a09c4d29a351_265678.fix txn/fixtures/08a6ed54c9afd2e392ceb8a29d579acb8088e2bc_265678.fix -txn/fixtures/08d3edb03d3e5b8cd69cb8c737e6ebf6fcc422c8_265678.fix txn/fixtures/08eefd180785f6be4a6848a106cdba374bce7e60_265678.fix -txn/fixtures/09007cf0f0d882b59c4bce3acfbb4932e4432e77_265678.fix -txn/fixtures/094c821f40d0a78521099f7b5100fcb1aca71e31_2211617.fix txn/fixtures/094d347c1c5351ec7c10736fa6a44b23d2c10c62_2184537.fix -txn/fixtures/09606659053acebd5181b1c495522110ac4ee955_265678.fix -txn/fixtures/096a9be3f9a010e15465edc2750300b306317b2e_2211548.fix txn/fixtures/097859a8724d9c90bab754f75863ac4e114c285e_265678.fix -txn/fixtures/098d023f43f3b68b16a6c30217153fd2a2952c03_2219729.fix txn/fixtures/09aa1a8632d6a4782bbc57296cbfd05fc012feb2_2193735.fix -txn/fixtures/09b53d9afbba987a7deefc7caefb4bd4f97398ea_2137081.fix -txn/fixtures/09bdb7f71fdf944492247a55fc54fbb698b24cf1_2135567.fix -txn/fixtures/09e9262d67769a58959485e73b03da24ada26c70_265678.fix -txn/fixtures/0a3ba0c45b67c887fd2f5b7a9c07f277bf3f8bfe_2212177.fix txn/fixtures/0a4807f84f6dd1c2760b3712df3846e5aa930906_2410587.fix -txn/fixtures/0a70111fa48a51417e32565212433794ccb36eb0_2211425.fix -txn/fixtures/0a902761b7b830127a2b638635fdcf0a12f76b6b_305757.fix -txn/fixtures/0a9090e01a01042c3cb49f91fe833dd5859a376a_2301607.fix -txn/fixtures/0aa31dfa5397f8e8b5ed8172311b39fe430a36f5_3963902.fix -txn/fixtures/0accddb6559a44e80e5010e9353014269e0ae7ea_2232866.fix txn/fixtures/0adfdb20159b81799344d11639fe0b131c6804ab_2194174.fix txn/fixtures/0afb0ff804b8d64527e611fa76402bc3967fa6da_265678.fix -txn/fixtures/0b0163af496a173391c533062a293010c7d06323_2224567.fix -txn/fixtures/0b0e4e9bbd0d83f20ac3677bd1b2ef55c6383f64_2196134.fix -txn/fixtures/0b67e1016f18a379545b2aa8fdce2191df651c84_2207739.fix txn/fixtures/0b6e7a7ed010c514e7b2e121988380ce84e61d2e_2655582.fix txn/fixtures/0b734af5a53feda0c159093134f13359e71e13ae_265678.fix txn/fixtures/0b82e85bfedd12586d9d3698c32a6ac994cfb472_1838876.fix txn/fixtures/0b8be053cedbc396b3f09a9d2f0c7b53037c22cc_265678.fix -txn/fixtures/0bd6fd0865fb8ae01e942d6f75a9eb633ec8b7da_265678.fix -txn/fixtures/0be5f273cf74184f079a08fc56af39b23dea8e84_2140312.fix txn/fixtures/0c060d9e996c28edf1852d93e3b0cf4067148056_265678.fix -txn/fixtures/0c422f91378be920086a5045bf319ef023e49059_2227613.fix -txn/fixtures/0c52ef1820c16288a738cb56e538c0bd1443feae_1576653.fix -txn/fixtures/0c5ef9a0a3cdbcb24fbe21cf67063b0d64ccfeac_2136266.fix txn/fixtures/0d1a2a484f610f52793e01e39842119dfc671156_2193673.fix -txn/fixtures/0d351feefe1ffd5ce6f8155688303a51115797df_2805211.fix -txn/fixtures/0d5da4cd600c9c9ebb32c115604685bb05621f7d_2192614.fix -txn/fixtures/0db2e234af2f458161635bb0a2363d2bcff7538d_265678.fix -txn/fixtures/0db9d7218a07df93fecdc6e9ab79b84cc3447500_265678.fix txn/fixtures/0dda0c174f5b5f9dda90d7bde9efdf04f8243b2f_3192395.fix -txn/fixtures/0de4cfbcc3ca959a69b77ca376db55e5d32cec89_265678.fix txn/fixtures/0df6674eadbc1117e90b2ce85190f56fd773a58b_2879459.fix -txn/fixtures/0e0bea6df80710a9eba801e87984faeb7a44586e_2213687.fix -txn/fixtures/0e59eb16ba5b23722cc28ae6c3e292d3ed838788_2264094.fix -txn/fixtures/0e7067657e63d87a6e56413e1f22d59deb809614_1049419.fix -txn/fixtures/0e740516f65117d20b2442ccadab87c3b3d54d1d_2228972.fix -txn/fixtures/0e91b8c9063b3368ea4e919d7b45f74303365ab9_2237492.fix txn/fixtures/0e949eb5c7b91d4546211236beecc706bd7dcb3d_265678.fix -txn/fixtures/0ed6a97eff83d0e5f575d3920d0e6f04fac288da_2234678.fix -txn/fixtures/0edb0fab5db40d7eb9638162c9b0963794801d5f_2216090.fix -txn/fixtures/0edce7d74a293e2c70daa27cd13a41cc8a9f5f7d_2194600.fix -txn/fixtures/0eef200229884e9939b0e7a346beedf45f862b43_2197919.fix txn/fixtures/0f44c4f29823b842e36eaf773bfea339e33aecb0_2692287.fix txn/fixtures/0f6627ae4bb3370b5ece3b93afd08eb584108ca7_1847624.fix txn/fixtures/0f6756784de0c3e3a30b10e7393b41db34c1035b_265678.fix txn/fixtures/0f867648fb53f860c4832ca7380b8e38ca7f5d41_1833502.fix -txn/fixtures/0fa6fe2d84608f5990fc670117fa18ec7ae9d43c_265678.fix txn/fixtures/0fb4a1d8c2d58a0a97b81b18880cae0e46b8a360_265678.fix txn/fixtures/0fbf14533d0939462c80b5b77920a3e9b9867dff_2213556.fix -txn/fixtures/0fe5e7a7a9d0f11ef0f2f56666178dd19f8db973_2134901.fix -txn/fixtures/104395657fbb52c2ef7d08f80b3e17556a880f81_2231165.fix txn/fixtures/106672242d5cf9448f9d9bc2d8b15ac62b3fd3cc_265678.fix -txn/fixtures/107779c0a88b6fa61ce7baa27fb7fb6f98835bba_1575753.fix -txn/fixtures/1078e0f6ede37210c6a48020dd4dddac6477caf0_2209114.fix txn/fixtures/10ca664fc1b21dc5dbf6d47aa2b9e9b4b628c4c6_265678.fix -txn/fixtures/10d413b61e3e048fa5bff618b6dee42560c76f09_2185478.fix -txn/fixtures/10e49130b3dc02c842214f96fe938f6ec43bbdac_2206459.fix txn/fixtures/11309bb4648a259baa2424ee81584a4c7506a32a_265678.fix txn/fixtures/11781b677d241c298b8f9fa44eaa8b1699213015_265678.fix -txn/fixtures/11886ab2e4ba30f1cd80a1449ad4879659d0bda9_2132945.fix txn/fixtures/11a1fd9cafd16c050f4dd965e2f7cb41548cd172_265678.fix txn/fixtures/11adaf7c81814f698c9416851712bb124d0c7751_1833873.fix -txn/fixtures/11af85eb6fafac5f6d64895b46db2fa2be4731ab_2192401.fix -txn/fixtures/11c4c1dff285b7193c674e2cc8a2ddb11517d935_2227547.fix txn/fixtures/12162ad7be4f8db5b27bf27303a500dce2de2770_265678.fix txn/fixtures/12643da37bc7cedeaec9a7c2bc4ac191417a7170_2195021.fix -txn/fixtures/127aa2cc742a94fbf18897066605fc2d433ecb25_265678.fix txn/fixtures/12b805123e5476d6eb0ec393cdb7882033cc28ca_265678.fix txn/fixtures/12ba5ecba0cfa5bdae2a59cd1c43c26511abca07_2186852.fix -txn/fixtures/12ce8bd1eda9bba78da6b082e38205c2a8f4e902_2215485.fix txn/fixtures/12db676232cd943525ec09c9e7dc74be5a439ec5_265678.fix -txn/fixtures/12f6de83408534fe27db395521d5fb95089896a8_2199362.fix txn/fixtures/130b22b824fc407eef7dc5b75d398787f58d2c15_265678.fix txn/fixtures/130bbc2f5e90382cefe7eb02aa655124b1119547_1839094.fix -txn/fixtures/13234a80ac34347bc6fb4b43bfd50a62f1c0035e_2192109.fix txn/fixtures/134efa88610e2489622a4e668696b0aa2c16d96d_265678.fix -txn/fixtures/1374718c63be483d920652377ce5d6bd87a194f3_2226442.fix -txn/fixtures/138ace3d402261644a794a6e4927ff7489452e3d_2227702.fix txn/fixtures/13c847dd1267f4bbbb3dfa50ecaa324044c993e6_265678.fix txn/fixtures/142f3b2b185b954e36696311b3b84744508a80d5_2361208.fix -txn/fixtures/14aed010524bb67d8851dbd5f3b5e4bf8b43adf0_265678.fix txn/fixtures/14c3dc2280a20662364e369b2cbe80e4efed4698_265678.fix -txn/fixtures/151a8e4af8b1a2f73b234e079ee70592539715ec_2237821.fix -txn/fixtures/15257b75d037100a5bb3e3e68dce768c0e14d502_2195530.fix -txn/fixtures/154cd5804d752795047a9c7ecc712805875b7371_2226824.fix txn/fixtures/154dcd01c64a2dc80b93e7bc4ac2aeebbe41a49d_265678.fix txn/fixtures/156d21abaea74471c6ad2f7e9364aad2b01595e5_265678.fix txn/fixtures/1577251c4955a4235f38cf004d100d6a8106e17c_2134838.fix -txn/fixtures/15a32c3ed3d9f0f777330de85e340386f30ddbed_2209269.fix -txn/fixtures/15d689304d80e9a94d44b1c4e6ac4b2c564545a8_3188682.fix -txn/fixtures/15db2654e0c8e41d5b5ce5e73d194b1e118de673_2820435.fix -txn/fixtures/15e8069a1674cd149116e41f46aef8b257494b9d_2236723.fix -txn/fixtures/163b0422f022bce93d6d00af28ad41a2ce3d5529_2185564.fix txn/fixtures/163dea63ba0fa5a4ac62f35e2ba40c65528b876b_265678.fix txn/fixtures/1648ae1a9df6e1bb2875b4ed6f168417e2ff33d1_1842339.fix -txn/fixtures/16552d07bb3143a68a15627204e98fc2bb03b556_2222000.fix -txn/fixtures/167c61df3d5207b3ab537c784cb933a8f398d3f3_2190937.fix txn/fixtures/16d545453f2d942e15eabefe41db4c5981390fb8_265678.fix -txn/fixtures/1701385c201677a28545120eeb9bfc8b2b2fee21_2233859.fix txn/fixtures/17210df43d3ee9a76676a47487576211d01eddd9_3205026.fix txn/fixtures/17930db2c66a9eef4de8709cf3bc75cb571f3249_265678.fix -txn/fixtures/17ae9efb31bb53c3df3ca0f241e0d1efc7940469_2904089.fix -txn/fixtures/17b3551a4739c3cfbbbbe28505c8f61a9aa497e5_2189878.fix txn/fixtures/17b46d6dea160aaf06eb209456abcf7c8a5d502c_265678.fix -txn/fixtures/17c9416e5229e8c22f1b137f3c1a77d72a529748_912259.fix txn/fixtures/17cb99713f28ee8be4164c9c3bd2c4f928fc016c_3000059.fix -txn/fixtures/17d2e5dfdaf518342bec500c61b6c1c850933f39_2220896.fix txn/fixtures/17dd636f0f9efbec12fc1cce8d4f9468d574841e_265678.fix -txn/fixtures/17e3e7730655140470817c399a7aa6bb923962c5_1259999.fix txn/fixtures/1815adf997a5268f9609f854877359ed22b55965_265678.fix txn/fixtures/184d29f84290c0f6bf276d081d3ba42f7d947fc4_265678.fix -txn/fixtures/1865cc9e2a39792fa1abdaa8efb05871bb0ee246_1365254.fix -txn/fixtures/186e60050fa038a2270237504f341e251fe3fc31_2200692.fix -txn/fixtures/1893b49292547354e3c542acf8ea9820feeb059e_2201166.fix -txn/fixtures/18a104d849902c79f2dc2158ff60af4a44bf9975_1576902.fix -txn/fixtures/18a685c2419a51a85e17cffdee353a243dc726e4_2199099.fix txn/fixtures/18b4e56da90940d580612d378203e29ab87cc63e_3090691.fix -txn/fixtures/18e7c0deb52e6454ac1eaeff9cf34dad1fc39035_2159910.fix -txn/fixtures/18ea787ba1ccc6f8f95ab449f655b6260ec4a964_2207102.fix -txn/fixtures/18ef4561f0b4246e049da5d026719c60d75213e2_2371975.fix -txn/fixtures/18f2d764aedb74e11560355aec08731c37445053_2226199.fix txn/fixtures/191d9e2b0d5e2879df91d1416a98958477ad5604_265678.fix txn/fixtures/1922d2a3c2a6ac261c26b4153a88b8c89c1c8d69_265678.fix txn/fixtures/1936f2d862fee55a045607e7c388575999206a92_265678.fix txn/fixtures/195061e21358db300927048df5bce29edf5ac300_265678.fix -txn/fixtures/197b771674426664edbab1e6520105ef4dbc0702_2223761.fix -txn/fixtures/19a3ea8c2db79b06324ab72738a98e9d7366e905_1483977.fix txn/fixtures/19d607ecf36140c6bee8a987a843513594cb5eb1_265678.fix txn/fixtures/19dd2b0131d7aeab1b23139caea748426549b07f_3195377.fix txn/fixtures/19e35d93616c3d41b8b4c41c8392f003774db512_2615969.fix txn/fixtures/1a3584a220639d46eb8b03a7069ca7d3796b8659_2372912.fix txn/fixtures/1a3e253372da8712ea91959b84b16c9e3d217955_265678.fix -txn/fixtures/1a493a6d7152a49a60f6f65f1295c22d0509f672_2216382.fix txn/fixtures/1a4aec43fd827c9a084dc5fe267c0b3f968a9fb8_2235143.fix -txn/fixtures/1a5880ace8e7b43167e5261e6b33de3c8cdc527e_2193936.fix -txn/fixtures/1a7175535b57944e18a251c069fa8c1b91c12d62_2236042.fix txn/fixtures/1a729174d141352354cb70c0e74bd0521c17888e_1656878.fix txn/fixtures/1a7a6938c60c2015fe6e867f95bf267ee7bc59cb_265678.fix txn/fixtures/1aa79c77aa8276654efec0eb27655dec0cdc6447_265678.fix -txn/fixtures/1abd8f046a16384d980f3ed3ad1b321d648f38d0_265678.fix -txn/fixtures/1ad2b460d9c89f0f19b3afed1f01f0bc8e3a1100_2216766.fix txn/fixtures/1ada05afe8643db30f7f6b83f1f426e0d798bb97_265678.fix txn/fixtures/1b1c6088a52984cf848972959b26bcf0d869110d_265678.fix -txn/fixtures/1b4db677ec9bc59ad1a64152daaba4e6d336e735_2235964.fix -txn/fixtures/1b81df5ed21141c0de2af5effaaac3943077e610_2190873.fix -txn/fixtures/1b99b735aa65c4970914d63058b19d381e1788a0_2185751.fix -txn/fixtures/1b99d4587c2abf31a6c88a1719c1cd2449a7e679_2229676.fix txn/fixtures/1bb8f3fe49dfe1a7c8fd3e7007b1267b70e5f064_265678.fix -txn/fixtures/1bdbfd7c08b7123e35c1a89586acf8acef387771_4122962.fix txn/fixtures/1c07f721398888df9cb87360684ea901e546d7b2_265678.fix txn/fixtures/1c7f3e9b5857885d7ab024248c10bede3ef651ea_265678.fix txn/fixtures/1c948b7fc23384aa7d29fe04f4081e1fed1262d4_265678.fix txn/fixtures/1cd35a1accfd19e103c79fc4e3ee3be0853caab1_265678.fix -txn/fixtures/1d42f7c16321fe5284efb0f210a61f6126aeb825_2237886.fix txn/fixtures/1d7a0059b804b9ddd407dfe83b857f5fb44bbbe8_265678.fix -txn/fixtures/1d7b9acb62aaea9a0595891629290904d8e0bc5c_2223964.fix -txn/fixtures/1d7e8e28576ce6c665c6abc93f20219d3b448bb6_399893.fix -txn/fixtures/1da4a54df18bcd644f08c98679bd16f5c765d6ad_265678.fix -txn/fixtures/1da9dd696690f1dde3a5a3a26a6cf5a05b548db1_265678.fix -txn/fixtures/1e089a4ec65d545928840c8550b135fd1623093b_1575821.fix -txn/fixtures/1e1add8dd5b60f99017a480d9b1fe35c8051f49a_265678.fix txn/fixtures/1e230442746eec5642e1793f541211a3dfc8e266_265678.fix txn/fixtures/1e9c4779cfc596539c9e2c4629c7525d5cb9f631_1843000.fix -txn/fixtures/1ea2aa8df47e4158951ad1bd08433ecef6a83f71_265678.fix -txn/fixtures/1f0823795d45bf364e2dad67812a207fe95727ba_2204350.fix -txn/fixtures/1f1679a7e1c4b963c42f14e56e42e015a0cbdc59_2212991.fix -txn/fixtures/1f1b0e1d9fbd4fbb7e11b287d464e5e10764e2c2_1575394.fix -txn/fixtures/1f3cf7886b9d813f3cf469ae809eaab460ceec93_2139769.fix -txn/fixtures/1f7b9ff45e2b4f2c61fdd20cf7f7375bf29d9c46_2203553.fix -txn/fixtures/1f87f98c3005f5cd444bcacf17b44ed360b23187_3678704.fix txn/fixtures/1f8baa7cca9a50f2a30d2a23bf19de90f4130c01_265678.fix txn/fixtures/1fe88a97c6185afd668574ede8b54a764a86f090_265678.fix txn/fixtures/1fff2d993f4d7677640b2b3397320496b076e854_3506222.fix -txn/fixtures/201819d6ca202d1cfc7e2debabc40ecec9c52076_3616547.fix -txn/fixtures/2031702bb0d8bab5e49672c1c44faf4257f0b097_2198424.fix txn/fixtures/203de1e88d7078cf1cfd166f2bece53b18a23d8c_265678.fix txn/fixtures/20527668ad208c551ac17e682b41ad67eed4d011_265678.fix -txn/fixtures/20651232f6d1373957d92f013cf1186aa65679cc_265678.fix txn/fixtures/206891ac9be95e35959c4f835192a5267e3555b7_265678.fix txn/fixtures/20689cdc20d7cb5d189eca27583e6005c75582be_265678.fix -txn/fixtures/2069dcffd91ec0cb029b237a4de78cc80a4b3b60_2136464.fix txn/fixtures/209c7df958b10b061a8bfe3f6725c4b8802feb77_3200920.fix txn/fixtures/209e4ebd1a8072b4cfd752e8297e21249a5fb85e_1848691.fix -txn/fixtures/20ae1fc39f0ee681b4b55270007e18c230ceda3e_265678.fix -txn/fixtures/20b5df52b15d5749e344004fdd81d34a99e0e1bd_2187909.fix -txn/fixtures/20b8e6fa24184078c928a4113e05dc9b05bc8728_2197418.fix txn/fixtures/20f2b0e913522ed8eaa8afebd362146105f1dfe7_3126852.fix -txn/fixtures/20fb3a04c933b541027012827fc086338d09f8b2_2202511.fix -txn/fixtures/2116c8e15c6523a43cec19a3f831e8ab2780c51f_367099.fix txn/fixtures/212c7f5e5a034597b53826eb3ecaee6147321136_1829622.fix -txn/fixtures/216637262d2b4c9d1e448edb2bae6f30b184b55e_2232689.fix txn/fixtures/217e3a35b6e271260611d06bbf3d689b406bb807_2987146.fix txn/fixtures/21a2ed7da708b4e06f302900b5f1e387797158c6_265678.fix -txn/fixtures/21af5f55611b33785842f439cb7c1d8d166ee292_2234542.fix -txn/fixtures/21c29bcc4f13997b36f001615a199812015fd076_2217761.fix txn/fixtures/21d8bec2658f953421ef8a90c94bb147d6592b0c_1856276.fix -txn/fixtures/21df17c47c8c2a346b816d7a0d898a1a572cc11c_265678.fix -txn/fixtures/21e8010323418e036249a05fdc8495de6827a6c0_2211679.fix txn/fixtures/21ec480f4864655312f3b116cc2ed26a868d5d26_2953099.fix txn/fixtures/21fb4857674201e9f6c173c1f2e83556718c401e_1556049.fix txn/fixtures/2230308262f87f9091245451f491ac8a95b03d5b_2913590.fix -txn/fixtures/223d0c5b4be30a81538cc02068ee5f1b67c02325_1832133.fix -txn/fixtures/22406045df746746b1d5324339a272f6e13700fc_2230960.fix -txn/fixtures/224656e68bd31e8c8930ab3fe94a1de07e9e562c_2207345.fix txn/fixtures/22f9b15c62fd309f4c73e459e07ae2005617a635_1839812.fix -txn/fixtures/232ec38252ff2007b2b44fae802c819350ca1bc8_2200031.fix txn/fixtures/235154a4e109440cda77b5ed1c0777eeb073e563_265678.fix txn/fixtures/235799bee53ec2e109dfffb5b6edcd06e41da148_265678.fix -txn/fixtures/23848451c5a5f1808f454848eb2619d33c37774c_1575889.fix -txn/fixtures/23cfd516435ea583196bcd96367022ec175f89a4_2211270.fix -txn/fixtures/23d3e91dd526bf70228d59a2d73f2916842ed784_2191189.fix txn/fixtures/23d5448b8e9816908691cc305bf00ea967596df5_265678.fix -txn/fixtures/2469b78fad1f79d91ee218ead539e0b5dfabda0b_2140821.fix txn/fixtures/24950d100340296fe0700e1033deaddab2986564_265678.fix txn/fixtures/249aa2b448a129dff81ebd4f1cd70e877d7f6d82_2138607.fix -txn/fixtures/254e70348b37b21e167e74b27ec7e45c1c16beaf_2221885.fix -txn/fixtures/2550cad596c5bd02e483fe6814c53ff78d057fbe_2208273.fix txn/fixtures/2553f36d244f112f985e12cc97d2197ded8ffeb9_265678.fix -txn/fixtures/25d4e0f5e64abefc74c563035bbccfce9a546032_548691.fix -txn/fixtures/25fa88e2726d1d7c22f278391309b57a71a433fc_265678.fix txn/fixtures/25fbaf1cf438b92a4c572cfedb0988ea6be695ee_1855773.fix txn/fixtures/265d30b0bbbcf0d7f7c3f559f1a797ded0c384f6_265678.fix txn/fixtures/26a9b7ead5f7e95e6dd72bf36b8b53918dba8fe4_2225242.fix -txn/fixtures/26c17568a6a165da891eed2a2470feb3623b5351_265678.fix -txn/fixtures/26f3cb9938aa63ff628946faba64a660fb310824_2372309.fix -txn/fixtures/274a12a356975a5d6c369e7dbe3fccecfe5aca8a_265678.fix -txn/fixtures/277725d00a11e65f85e4014470df0ff27dc64dd4_2206570.fix -txn/fixtures/27fcc59dab8d78707f2ef93470e816ddb02aa94c_265678.fix txn/fixtures/283c6ca56b95acf39b5b1e2f84b30eef4dca21d8_1853984.fix -txn/fixtures/283fe592ad6816dca9bb15d7dd74c8b66595197c_265678.fix txn/fixtures/28bb478d13a3a3f1966d611ab36c1a123c1045be_3193054.fix txn/fixtures/290de9fbb0cebaf2394fc491c9b970874b833895_265678.fix txn/fixtures/29251e7e9860162c97fe67b26627ef1c339b044b_2241221.fix txn/fixtures/296fb6e6f2267e9f3d00b8b0ea735fce8d506eb9_265678.fix txn/fixtures/297890d24451a4de3dc8034dcb6da9ce4bfd3a26_265678.fix -txn/fixtures/299b16650bba3469425024ac74676c9c06408aae_2193078.fix txn/fixtures/29be17e3a201aa84bbcf279602601ab563a0b805_265678.fix -txn/fixtures/29f7d65ff0e8ea9aa97f713b5a6fb2e9585fe084_1184410.fix txn/fixtures/2a159c214135a36023fae14efcfbecd62b230823_2631802.fix -txn/fixtures/2a2b6de65896f1fd2a93c481d68042632013f073_2136886.fix -txn/fixtures/2a50d83333f051d46bb08fd53d6d483d42f900c6_265678.fix -txn/fixtures/2a55a0cb58fce67f373877bc524021b23015a988_2595492.fix -txn/fixtures/2a5e3f5c304edd181d05e5ebfa8851bb03a69a86_265678.fix txn/fixtures/2a7e6de264d39dde620e5b642dde4ffbbfbf0b67_265678.fix txn/fixtures/2a8eb43cad506af249c32619aab8ea70a62ce38a_2201810.fix -txn/fixtures/2a97db6d866576da85c5060c4d5791e33fd8e269_2204742.fix txn/fixtures/2aaf16427235cc0a1cf9c9ff7fe902fae3c10cc6_2767000.fix txn/fixtures/2ab359f3a1b60b58a57e01e65750fad5fd50972d_265678.fix txn/fixtures/2ab448fbadb0b964c56472758c7a46920f8591e5_3041321.fix @@ -594,193 +419,104 @@ txn/fixtures/2bde40327aee0255d3e3efb711af5d459109c45d_265678.fix txn/fixtures/2c0a06d2fba7205c5d3da45d39fb4a5614ec90a7_265678.fix txn/fixtures/2c5983fa94a7b8853b1301222eeb5c3bbc0a2027_265678.fix txn/fixtures/2c6060de12fa7c26e657deb98e95949c7a0ef428_265678.fix -txn/fixtures/2c761571170092ee7a9ee351c45973bfd914227e_2227217.fix txn/fixtures/2cea3690ca12aedb7bf33143c486a1fe9ad7fe74_265678.fix txn/fixtures/2cfdeea1e8113fc2e9141967fea5eab91947e39a_1849498.fix txn/fixtures/2d1d290ed0b97a4c853410f3e70607af8512c71a_1835418.fix -txn/fixtures/2d2651570373252fe36d6487f98420a98a5eb651_2235539.fix -txn/fixtures/2d35616ecd6858a98944d58c7da54a8da9daf170_265678.fix txn/fixtures/2d40cc52c34c43e0d0892449975c182f432ff549_265678.fix txn/fixtures/2da4abe78a4359036ce483cfffe674c90842e02f_265678.fix txn/fixtures/2dd594dbbdb6e79776449d044f7319b76bf94044_1833391.fix -txn/fixtures/2ddafa60f7f756540bf8f20fed2fc40e20c158b0_1574599.fix txn/fixtures/2def7ed78f00b5b8711a0d56f8deccac74d93be4_3198238.fix +txn/fixtures/2e0b6b4bdce0a0777ceb576923cd1569448d21cf_265678.fix txn/fixtures/2e1941ee15c7450558deb720eed53c6ed76aadf7_265678.fix txn/fixtures/2e3931ae51ae0ea0b7a37e16a66b03a123e99864_1830012.fix txn/fixtures/2e410a98e6f0b614dce00964a7a2e60d9f764fb9_2987497.fix -txn/fixtures/2e66d77a960a8b0a2d6c1135561e03ef0bcf1f7d_2190836.fix -txn/fixtures/2e677029a2ee4c463711fda6eabb3afb22cd2e0f_2200007.fix -txn/fixtures/2ea47961d5179078901445cee1b25c3e9647db0c_2194624.fix -txn/fixtures/2ec5483a93942e0ccf21d367995edd3dc746779b_1574922.fix txn/fixtures/2ec878a9f3857d9e54c54bebdeec308cabbd649a_3008787.fix -txn/fixtures/2f17bfe2b3fcdbc7010267821779870dc39875a9_265678.fix txn/fixtures/2f2cf270d2b88532f0eaf52882f57031876f4ac7_1855418.fix txn/fixtures/2f43e10be77dc56733de77c8f47518bdaa63dbfa_265678.fix -txn/fixtures/2fb78597d5bda01bbd567b4ea90a1e1043703eaf_943214.fix txn/fixtures/2fc52300e86a2427ee7e292a41166076fcdafc03_1853296.fix -txn/fixtures/2ff15612716e92f9095f439d89146e1ed56c280a_2214083.fix txn/fixtures/3001af48aa4d17c20f58c4a2f5c6051bf31829b6_265678.fix -txn/fixtures/3018e2540d75bd548f502c57a15b65d150ee7d24_2192333.fix -txn/fixtures/302bb32fa25d3cd6a769bf807074ff9e51ce416f_2192679.fix txn/fixtures/302cdc8b3ac6b980f31de14a9ff9b9cad18f936d_2134792.fix txn/fixtures/303b94227680fe6259d6ff64ea3a164214649462_265678.fix -txn/fixtures/304ec513059b492bb4a9e1e5377d21b0f0fe46de_265678.fix -txn/fixtures/30504f26a39dda6c90020c016545c36d9155714a_2135323.fix txn/fixtures/306012c394c4f582374f72eb1f191d06de6e4ea6_2522260.fix -txn/fixtures/308129c271ce81ab4b217bf262dd43e855b5b119_3709853.fix -txn/fixtures/30897c5ceec04f528189e1babc7029d521299974_2185955.fix txn/fixtures/3095efec5218f66db3fd3765b672bfeec6362b2c_2546518.fix txn/fixtures/30cead52426c44ec911772d7d1bf3ca1b9b649d6_265678.fix -txn/fixtures/30f5dc712d00f5f7d2b6c7a1247bd046d8209db9_2141002.fix txn/fixtures/3150f4ab80c34e0d00e18822327a4b01f1abffe6_265678.fix txn/fixtures/31783db98bbb6f63ca7c2c7e92ac3adf83e825e2_265678.fix -txn/fixtures/3179db2f391ef20df8ce9e77d8c20fd8f84de675_2225533.fix -txn/fixtures/31815593aa367f8cb17ff3f92385259c7c53fda7_265678.fix txn/fixtures/3187669fe3406a1a9d7a7a21729fdd949740f038_3202087.fix -txn/fixtures/31b512a82ace5550adb1e94bedea9bcab0235e77_2192221.fix txn/fixtures/31f38752899f744e81cd018eefebd0822a306705_3006635.fix -txn/fixtures/320fe7a7d1b5430768cacde65d49782bb2eac480_2184963.fix -txn/fixtures/321b15b8069c188a5b261ca86ccae588f0ae0784_2372241.fix -txn/fixtures/322a340a42042ec90ee5d114061d1899e3e91d89_2190414.fix txn/fixtures/324154e969e4a719afe7b079a559f0e59ab3f748_2510065.fix -txn/fixtures/3250c6e2d9fa6b121a61d2cb36e765e448224a68_2137610.fix txn/fixtures/326f6aa740e4e6060cc4fc272f8d1e5173a0347a_2484212.fix -txn/fixtures/3284eb01007f31ceceb7265cabd1f9969d1f8341_2185286.fix txn/fixtures/328c44ebb504a174d1a2721b1412a66f9ebbaca1_265678.fix txn/fixtures/32ceb6737de9a3108558bc59bd1d2299402e1759_2187779.fix txn/fixtures/32ceffb3da50bb1ad78f6602c83a576bd9679dba_265678.fix -txn/fixtures/32f308f74641d2b3150a7797b1bc677c71e4e905_2136769.fix -txn/fixtures/332431313413792dba8a08910511202958687452_2206775.fix -txn/fixtures/33450940f1b9f02b1f3a6b4b8e6848e0400f7d83_2195351.fix txn/fixtures/33597d7ac0d74e5c347e153ca4cdc05948db6fd6_1851758.fix -txn/fixtures/33681594390f2733eba2cae9f47bf12c85629f7b_265678.fix txn/fixtures/336d88c28a052cc92cd11d457ceb1cfb78f2102e_265678.fix txn/fixtures/338a0b377eb143b9d2520fd81d6b8658ea71d32a_1183730.fix txn/fixtures/33998246ed4afebbf42883c4f56d44a1582cc9e0_3205875.fix txn/fixtures/33ae07da0b440e0ffab1bb299bb4b31c99ccccb6_265678.fix txn/fixtures/33c664f3c95a2d1a3fff572ada952d3b67dbe2c4_265678.fix -txn/fixtures/33ed84692327a38a96bc7262e86b105fb2a428a1_2371703.fix -txn/fixtures/33f3ddcff4a70909ce7ee4bcdf4c8feaef4788f7_1571035.fix -txn/fixtures/3429d048f753fd631720be0efaff350a3a354658_2237361.fix -txn/fixtures/343c0659171a5f46389127201aa1e7d31654b4e9_1576814.fix txn/fixtures/34881a5207d4e4ffac34dc1b73c14fa1689f10b5_265678.fix txn/fixtures/34eb326b60ef98d99554dc2ab2d22dac33ad9d1e_1855129.fix -txn/fixtures/34fdaaad7f607e97aae1b4d80b482837b989d3ba_2235712.fix -txn/fixtures/34fdbff5dedcf4cfdb62aacbd15f47033000a275_265678.fix -txn/fixtures/3592e3e03c1cafc585d57dc78a42b0ecc7850636_4030035.fix txn/fixtures/35c0fb77c9c150d54e64098a042d0f70a8a6b8c5_3191751.fix txn/fixtures/35dea0b4bb2adf01c4e0affd32f5e1e373d35ab9_3195850.fix -txn/fixtures/35ea993304ace9d47f2daba079e57e7b3de863c0_1854274.fix -txn/fixtures/35f1d0cfa8af34e53710576285ccae991faad5c7_2201413.fix -txn/fixtures/3621c8dd69620df04886f1ac6bd7683dacee6111_3194554.fix txn/fixtures/364dcd67175104359ed74f76174276f28f1cc5ad_265678.fix txn/fixtures/3670a6ad4880986b39995e9c684c660dfe2d51c4_265678.fix -txn/fixtures/36aa28c6b903b6742e06edeef2765e81af2cd69b_265678.fix -txn/fixtures/36b9be81f8cb8331a30a7a7a7bba104191619bef_2218428.fix txn/fixtures/36ba35626924b4349deb3b70a2404ec01c1ab5e4_265678.fix -txn/fixtures/36df9b2a51e09f1bef2d9aebdf62d544dce16dce_2208341.fix -txn/fixtures/371401fd3aa174f16539ece267915a70ec020eb6_2230897.fix txn/fixtures/373f066bf0f80a09e099c78677fa2cc3564427f6_265678.fix txn/fixtures/3799b046a3717e43b056b8724374c468336b9d17_3177139.fix txn/fixtures/37baefd370d9e56c7c6d0eba33c2a4b956a62ef8_265678.fix -txn/fixtures/37fdd2f9cdc78b95c5a311a5b0863e399cbf9121_2205715.fix txn/fixtures/38196021446ff19b1ee517d58692bb2972ef6f8f_265678.fix -txn/fixtures/3826252548de108108bd42b26360acb0728f682d_2220211.fix txn/fixtures/3846dcbc6a789b614c1cb083bdc736f33065fc89_265678.fix -txn/fixtures/3869d9cf3d9e036ff720833f77944aa0bb8ddc45_2229490.fix txn/fixtures/3873b410f3a8c8877e3e0d27fc4cbfc4e2a1ab88_265678.fix txn/fixtures/388aa7d3f0fd8347cf8cbde62695297ae8da43bb_265678.fix -txn/fixtures/389437cd6827ae29add11712287c2d00dbd9ac28_2188538.fix -txn/fixtures/38a2476b994540dc578bee2d0255dd504665d82c_2219354.fix txn/fixtures/38aa5aa65284a359c7f2ff4448b28dd28036375c_3206360.fix -txn/fixtures/38da34dc65457ecc1d92f520f12dfca1674cf4fc_2208056.fix txn/fixtures/38e5b3b4f98ebe5b98f26af1d52c4ea39c5757bb_265678.fix -txn/fixtures/39376265439c3d3765a1a9b94d1beb3e643b6653_1769070.fix txn/fixtures/39496b9b2c42cec6bcfb0c12cba7a19392bd2d74_265678.fix -txn/fixtures/399a3d6633306162cc72f3250b61271cfd988a46_2997779.fix txn/fixtures/39b6d60bac630daf320a0801d99f8977a6688506_265678.fix txn/fixtures/39b8f771be5c314fa218177d6d0ceafe5c71667d_3203571.fix -txn/fixtures/39e59c61680aa8240801118944e5675a41dd0b03_2212786.fix txn/fixtures/3a20d9da42af81d99c0cd54166533bfe2b1bc286_3197983.fix -txn/fixtures/3a24b880aba0ab0a6ad4ed038a61b60ce666284f_2197171.fix -txn/fixtures/3a6784a6102836d888a746873eff941e500a9463_265678.fix -txn/fixtures/3ab047ee4a8949ef698a0909a79b107ab0dc2134_3195190.fix txn/fixtures/3acb6c3f7c5c673c09f05f91a4b16f347218bc94_3204389.fix txn/fixtures/3afc6524e087624a037312653f62038008cf4fee_265678.fix -txn/fixtures/3b455080427d53482ab3ef853b74a0f59e166c39_3226304.fix txn/fixtures/3b45ebbb089bb436aafb68056077413f7da53a2c_2336991.fix txn/fixtures/3b50f8af523e5536c992b7661228490868d08949_1844069.fix -txn/fixtures/3b5a218b7786accd9bbc5fbd1b162feb6966a787_2220607.fix txn/fixtures/3b6d03c12d620a69d7ac3e69dbecf486f5fcb2b4_2855179.fix txn/fixtures/3b8368829ea996a94c757d81615d67f49fdc1840_265678.fix txn/fixtures/3bd6cc493f2771167d344bbce1e94c259dd58211_265678.fix txn/fixtures/3c34daebf62ef03c2b079fc42f231637a54f34ac_265678.fix -txn/fixtures/3c4c93735bcb62ca3393f10e3e75a04178423539_2234928.fix txn/fixtures/3c7443062cd3f1c7f3d25ba6ce499f3fb0134cb4_1853193.fix -txn/fixtures/3c805a50dafd33f77fa3363821b8f8acddb4b34f_2184861.fix txn/fixtures/3c8d009dffbd36e350abf8faff4da8d1dec717ed_265678.fix txn/fixtures/3cb629bfeeac65b95bd2be8a7306c41cc357ddb9_1829905.fix -txn/fixtures/3cb6e4e2fe1c8ea438a4d98be16de03cd8e5131f_1850057.fix txn/fixtures/3cdce4fb925ae533b586ff2858c1057b33da83a1_265678.fix txn/fixtures/3d03d328d824ff004c4dc731130fbb087aba3554_265678.fix -txn/fixtures/3d314a5eb68df71161a11ce929d0510edbc7d2cf_2238052.fix txn/fixtures/3dc136542017af64701bc8977305e2d1f0aa9946_265678.fix txn/fixtures/3dff5e145729afd0e7e285cc1b78db5eda8416ed_1855597.fix -txn/fixtures/3e1ca78cc9b53d6f7bb889f9d117d89a593add1c_2916054.fix txn/fixtures/3e29ea4c61bb2fc4cd581d9b597d43068dd860a9_265678.fix -txn/fixtures/3e3487d323fb22fbdf188d7fc85ce34ca9ff9532_2137814.fix -txn/fixtures/3e4d4233be7f7a211dfc4bb032abeecb36029dd3_1249939.fix -txn/fixtures/3ef4904fe37781777b452f9674ffdaffa83de3ba_2230575.fix txn/fixtures/3efd7cc4619f8139dc5de55a04c7df1edebe58db_265678.fix -txn/fixtures/3f009af6d88f2e3a4cbef632e91c1e497e29e916_2229612.fix -txn/fixtures/3f4bddbd89b842e7a4b47be0b4b0e03bc4a58ab8_2200917.fix -txn/fixtures/3f62c509ae465941204be6842ed0be79f9d34d80_3566323.fix txn/fixtures/3f6cd15207e3bb62ff4029684216ba0ceba1f12a_265678.fix txn/fixtures/3f7ffebb145c68a5f69e68463a23e32cfb7157e4_1844308.fix txn/fixtures/3f8adab2d56cccaa7c9aafbbd8fdb1436948d2b1_265678.fix txn/fixtures/3f98e7189e4024d816dd418dc4e277c8a824f3ea_265678.fix -txn/fixtures/3fa08e1b2100026d0ff6155dd3daea67471c67da_274087.fix txn/fixtures/3fa64e65df285be9e4e808c31ccdfdd9b574dc1b_265678.fix txn/fixtures/400b79580621dec57e118e13e3a48f1d1ecde1f2_265678.fix -txn/fixtures/40127d1a1e6b28c59e2e7160f91e5cf984414c47_2221486.fix txn/fixtures/402551d5cb22462d5b713b3b47a217f73bc3d889_265678.fix -txn/fixtures/404ff5c0b99cd641888102ab07e5eff031b75db2_2223825.fix -txn/fixtures/40a14d2d4cfc224d45e43ba76c98124266b801d7_2224846.fix -txn/fixtures/40e0ba6e84f5c6349cb021fa9fdd39cd5bd2e182_866028.fix -txn/fixtures/40f7d5a69ab8b576154111d01a1981bce463e2bb_3139420.fix -txn/fixtures/413db6b2896e7e2f8209fcce1aeb74a844a70ee4_2186458.fix txn/fixtures/4150dfca299108a397f2ce6750079061e4392e64_580274.fix txn/fixtures/416534effb06d2a9604e5ba4e19d738efffd9df3_2227354.fix -txn/fixtures/417d38c121d240d5a976efc917d8340c04aebc79_2185194.fix txn/fixtures/41a5918a25d36e4aa01c6489feb10125ff0efbc1_265678.fix -txn/fixtures/41aed998000be7b3397df7e1acfbfb20b8dd80f3_1576087.fix txn/fixtures/423c6adfe6a1aff4a554309e75c7cdd8cf2ece76_1839002.fix txn/fixtures/4268690a5debbd29da2990bdb58b3766780576c7_265678.fix txn/fixtures/42708ce5c717e06c6a63db9f2358e5b8fc5a50d9_265678.fix txn/fixtures/4276f19f698509e23d0e80cbab0accefe7f87dc8_265678.fix -txn/fixtures/428b7d7ea6cf2d41bc15ede9cf13063df4fcb6a4_2993455.fix -txn/fixtures/42b82870dcf827b83cebb6a73933c19f0f63264f_1405489.fix -txn/fixtures/42be4b811028397fe74e6a2c1b09006b9dbf0131_1575440.fix -txn/fixtures/42c15654599c9346df72644882eb98cc8abe6957_2195415.fix txn/fixtures/42ede6df5006d6981d147bf098f63d2d6b1b9a09_265678.fix -txn/fixtures/42f0b864e44dc071fe3898d7708839d0b94d5808_2236177.fix txn/fixtures/42fecd9a4ac572679c1e2565c4084d2a238b77ed_2616065.fix -txn/fixtures/430c9cbdf850779d725e4b38340ce83f1bf59434_1313564.fix txn/fixtures/43142ed9c2d5c64bafb619e8c18c625649cdaf4d_2194238.fix txn/fixtures/43195978584820741fdf2612aa0447e35d43fde1_265678.fix -txn/fixtures/43362a21d1e80e0e2ef6529905a869d76e6513ef_1110903.fix txn/fixtures/4346d7e6f55b29904046e0674a038fa0c6c1efc4_265678.fix -txn/fixtures/4360e195b4b6284684ebf404952fa29eaf345059_265678.fix txn/fixtures/437027a0a9527a0708ab6e5c7e38eab18b6aeed2_1841548.fix txn/fixtures/4373738bf97fc0f9fdc340b0868e6bc1db15c31a_265678.fix -txn/fixtures/43cc0f992c7e582bd3b26f5af1d533d16409c6f6_2207832.fix -txn/fixtures/442061b5ce1c8ca623d2d69f7aaf9548d6bdbbb4_2216203.fix txn/fixtures/44327da25fbd6489fbf652750ebdb81dca6a0f85_265678.fix txn/fixtures/4434bab1dd322682afd18b96c06554aca3ce0d8d_3001829.fix txn/fixtures/4437cf6f8b42a9eb1c8fe21004c50d950dee6123_265678.fix -txn/fixtures/4441f0a5f48351847b1c77d9caf6406fe4834e5c_2232445.fix txn/fixtures/44b6d4ad676c785f99cccfeffca43f73f8834c84_2213508.fix -txn/fixtures/44c8cf73d1533751565f813a8612c40530df7942_2204462.fix txn/fixtures/453076a5046b05eafa0e1cefd3ff4f85fb50ff9c_265678.fix txn/fixtures/4553200ffb2641a9b34e87f86ec88560a13a94b5_2994600.fix txn/fixtures/455f74ca25b2fdd9fde7aa407a538e4340cdffb9_265678.fix @@ -795,132 +531,70 @@ txn/fixtures/466ad4fec016b536b24d7976a8aea19fa4c5c0fe_1832985.fix txn/fixtures/46891d49da17ae9b0023b14b6bfb49e783981a3d_3197159.fix txn/fixtures/4697e8ddb28a2b11bb77949b23cf4ae048ff4504_265678.fix txn/fixtures/46b42a7834871ca06c5abb8683c5be38e205e512_265678.fix -txn/fixtures/46f656aef6e1ed3cb3f79a2d7f2c824a4a5c444a_265678.fix -txn/fixtures/475331fce353436eb8fd7e84f7fab2c3f0883c33_265678.fix -txn/fixtures/47af1450dd8042511ba47cca635d2577743e06fd_265678.fix -txn/fixtures/47b336222ea5e63641ffed94b4bb25550794dd66_2193125.fix -txn/fixtures/47efbf4c35d180e5b5e9bdade362fdf8d5561798_265678.fix -txn/fixtures/4801f07944f83b6214c0e8ae8beb2966be269744_2208135.fix txn/fixtures/48121f709d9bbfdcf88d2f4954e2ed8ac5bdb8b2_1836770.fix txn/fixtures/48a36bf607542480ff325b5bef985a7a3f188550_1851579.fix -txn/fixtures/48c6f8198f8080f3897e62871b4de16d00f9b352_265678.fix txn/fixtures/490daa3a70166b41b73dd2823be0ee1812bead7d_265678.fix txn/fixtures/4935400af65c6050004e3e4f757141928ca0b264_1831849.fix txn/fixtures/4950175f35249a55840c8b83e71c4c6deba13dad_265678.fix -txn/fixtures/499ab0d1e2db151daf5c4ed9182832fe3c2dad2f_2236217.fix txn/fixtures/49a6c58383f9a9dc67be4993c2a0bbd41635ae14_1838771.fix -txn/fixtures/49d5e47d40491dff3e872db1d1fa080eba97c66c_2228493.fix txn/fixtures/49ea7ba14f1e59a2af50c0addd73b7c0e223ff28_265678.fix -txn/fixtures/4a0b765e083f8341ca122190904eddbb3a3b8108_265678.fix -txn/fixtures/4a33fbfc693e9f64329b64def0e9f59a6c26dd7d_2186534.fix -txn/fixtures/4a6d71c1702e75a843460c1a24fe65d75f3ee97b_1060807.fix -txn/fixtures/4a997bb833006d2522187884a0528e4da8d33ed4_3064697.fix txn/fixtures/4ab2840c81a2bad348c7c5ecbb632148264f8950_3078035.fix -txn/fixtures/4b36f5f69e22e21cb5ca8d0c1adfc1b2ea83b0ea_265678.fix -txn/fixtures/4b509df7995447c534c79ddf43c4bd02ff037b87_2235403.fix -txn/fixtures/4b805969bd1ccae2a5c6a53acc973fa08e1cc77d_2231188.fix +txn/fixtures/4bcac10abcace9b2242767bd07cdf4b9fe7e0e1e_265678.fix txn/fixtures/4c22e7041620180a4ba222efcf69f7d383dda955_1847179.fix txn/fixtures/4c550c66be5ede646574678fac7fb84852d1273b_265678.fix txn/fixtures/4c72f411b6b9a81b55c0dcb38ae2f5a7d3f9f897_1834934.fix txn/fixtures/4c779bb7a33c52b61adb78689d813376e2752705_1841959.fix -txn/fixtures/4c7ab39f8a0a3c3caed68281226c59deb5e4112b_2212007.fix -txn/fixtures/4ca5c7e96b154b10192456882231d0033e99f401_2232294.fix txn/fixtures/4cbbe2f3f047d244ea3642df5ea3b2a3072b6094_265678.fix txn/fixtures/4cc95b1b24d7f882b3f6617c0ceb023eb9fe853e_1831091.fix txn/fixtures/4cd57fb435285576274d04a5ffc5dae126f10f2a_265678.fix -txn/fixtures/4ce5d49479cc9bb4d3a5d9d70684311a0fd7a6d8_495115.fix txn/fixtures/4d2e31198a0100720b4cd0d0588683c28851b29d_265678.fix -txn/fixtures/4d2ec6538922a16b046a0f0e3a82163a1c2fb69c_2227044.fix -txn/fixtures/4d5277b1f036109f3d2beddc27b9fe099e217e23_2138723.fix txn/fixtures/4d588f549cd3f9ff4ccbccd637cd8b58c28c4d7e_3006480.fix txn/fixtures/4d648b49922688298a565c85f818ea489e5f6e04_265678.fix txn/fixtures/4d764129b759de70c8974adeef3a05f2182fdefe_265678.fix txn/fixtures/4d7f3c1a25f6b4f1b02419873936b18cb938847f_1840006.fix txn/fixtures/4d9210dc8d65f9f73df787ff2417225c5d80761d_3205521.fix -txn/fixtures/4da3f4b92e579d72d44268737258890494146f31_2237695.fix txn/fixtures/4db108729956cf810ac59da17eb371e9014f7c7c_265678.fix -txn/fixtures/4dd45677623d7ee65e7cd5e76ea958dc8e45594a_2237756.fix -txn/fixtures/4e66fec7a10df2383ec95b31bc88a353fcb3c8f6_2216701.fix txn/fixtures/4ea3a7385cba03ae2abeeaea48c52bd1ad8eff93_265678.fix txn/fixtures/4ecc394bb0a5e009a02675e2c24e1a682e726861_2212326.fix -txn/fixtures/4ed93a7490ae68788637294c044a852abe07e977_2198244.fix txn/fixtures/4f391d783f130b20ff187e266caeea545b3bee1e_2817460.fix txn/fixtures/4f68ce636348400195b19af2766dc1c644d651a7_1845704.fix -txn/fixtures/4f6d266242acdc4e900675c8960dd1f3e5b13e99_2200364.fix -txn/fixtures/4f90cc025e3d14f9757382fc753235cf96bdea8a_3551734.fix -txn/fixtures/4fd927ee5d17f72850f5ea2f50030ae65a37a0f0_2212240.fix txn/fixtures/4fea3ee7838ae7c23f534b89225f581346557cdc_265678.fix -txn/fixtures/4ff8119ccc38071e662bb58aadc33b1c066e79bc_265678.fix -txn/fixtures/50038bae4df9e2ebd2db9a873c60238f950a65cd_2236263.fix -txn/fixtures/500ad5c3585978843a2db127c19d5ddaf2f23970_265678.fix txn/fixtures/50401b4fd6208c97afdd1970fcc98f1cbbe77db2_1851078.fix txn/fixtures/5055f04636f721db8c61add5313b0a48bdc3ef48_265678.fix -txn/fixtures/50599aced3dd8166f7b7f714cec64b7f050fa925_2207672.fix txn/fixtures/507dca6b9a80e44fb313aadf49598bdef272b10c_265678.fix txn/fixtures/5099c68f47959016785557d97d4536ea77759b4e_265678.fix -txn/fixtures/50c1b160a747b99f460c12820efff3fe0a226ac3_2251324.fix txn/fixtures/50fd3f49db3184bbcc389764272a4b686fc21a43_265678.fix txn/fixtures/5103b2cca444d542d930b64acaaf3a605f64ab73_2213737.fix -txn/fixtures/511062db7a0a05f8386ebc8c47b76de21f4c9404_265678.fix -txn/fixtures/5111a5a368d4c38dfc831685a5da77bce62ce672_2191604.fix txn/fixtures/514aad735e6760fb52e4c670924ad420426725f6_1833306.fix -txn/fixtures/5156f43204c0bd5aa8309e6c2e57da5f773976a9_2189777.fix txn/fixtures/516e724d030a5e1d0a6c0eec8877538a70c64344_1836690.fix txn/fixtures/516f366b7c07d3f9faf08dbe7114365406706d0b_1848140.fix -txn/fixtures/51a7947fc8472880c15ebafc8dd5b1e41764bbdb_2197515.fix txn/fixtures/51b36e0b8a9b6914435b0811c4681cfe63799eda_265678.fix txn/fixtures/51e7042b52b99873c4c285e7a94fbc42ba9f2228_265678.fix -txn/fixtures/5208c52a860699df8e144fe756fcdd5c4ffffa59_2207765.fix txn/fixtures/523572dcb8122d7da4108e81964b9b21f1891ecc_265678.fix -txn/fixtures/52bec0babefbe755b5e0d038c1dd18ee473a014e_265678.fix -txn/fixtures/52daa29da542c1fab4a078d4ec208cb352b7c237_3722020.fix txn/fixtures/52fbee3f03285c2ab59031335e509e738f7a329f_265678.fix -txn/fixtures/5306b5952ef18f20661cb742eca45c9213f874ea_265678.fix -txn/fixtures/533e592bdd1318db00c76dec882eb2cce2ef4c3f_2132746.fix -txn/fixtures/533e7d0c543b141f09d1d152fbf7aeca57f6b191_2208601.fix txn/fixtures/534803e8258095dcc5952ab1329d1119b816ed4b_156594.fix -txn/fixtures/5364129bec81fc37293ef79654bd7e45972eb02e_2189264.fix -txn/fixtures/53731c52b9f03feaa26b9c7b9b433c137ae93257_265678.fix -txn/fixtures/539ba15c1468aaf8fb7d30500b6ec9098e202aa3_2197106.fix -txn/fixtures/53b0ee32fd0983cb4c1910853c9c93a837a74f65_265678.fix -txn/fixtures/53b34e0b64c0648c62990cace37287fdd07d9720_2209379.fix txn/fixtures/53de692adf0032e2bdd37759a9b747d854584585_265678.fix txn/fixtures/542e30d2e06079f3ddcb767c58ac5463618bcd07_2619392.fix txn/fixtures/5431aacb3a68ed751383ded8bca654e234c46fd8_265678.fix txn/fixtures/54490a12a640642183075e2f882fd2af34f61b7d_265678.fix txn/fixtures/54638b9a086501f243a24590ad7a5293baf45911_265678.fix txn/fixtures/54aa3bdb988135c983ccd502aafa6f90b8d9c88a_265678.fix -txn/fixtures/54c4fe70885250bac93e1caedacf9a231fbf9691_2208914.fix txn/fixtures/54cee0be565c7f54dc08070396db4a045034039a_265678.fix -txn/fixtures/54fb7347e868c5197ca3924cecdfd05c5560c324_2219328.fix txn/fixtures/551890c773fdb824fb366c11bae73558653be8b8_265678.fix txn/fixtures/552300e2d1a54a1c4256dee4fc2a0e9124ba2056_265678.fix txn/fixtures/55b9b95d1d6ce9783d3ed11f9f53695363a9c701_1655830.fix -txn/fixtures/55e1ffbfa56c2e5592e5d51d22bf1f597653f46f_265678.fix -txn/fixtures/55e2e9579be0695edb66085db963ddab5a4fbd22_265678.fix txn/fixtures/55e8b5cda33cfe673e05331d2c9e0fe7eaad6e21_2196906.fix txn/fixtures/561091b60898025e4181649ceeedc48f06ad4e4a_3199967.fix txn/fixtures/562c9c641cecb77e63050786fa00bc271ab3347c_1854575.fix txn/fixtures/5648c48ee232fc71f1243a5f6f31f7fee37b663e_265678.fix -txn/fixtures/56667bafa924c745340c8683901c51fb2b7405c8_2644051.fix -txn/fixtures/567ba583fc21ce29d9e4e7600436634a8bf7e930_1575059.fix txn/fixtures/56ef98f9db7768e4c97c02a64acd1013c382aab9_265678.fix -txn/fixtures/57db7e7d4d678de6d39a672858f2725b51a3f5f0_265678.fix -txn/fixtures/57ffa49dbb36fb0728d55b41a149cbefb88be86f_1575372.fix txn/fixtures/5803e02af71c317adedab648c9a4bb8a0785d295_265678.fix txn/fixtures/5805e4b751787d11fa7822362c86b55f77f27a80_265678.fix -txn/fixtures/580ed5edea5c03ad04a670e379183f0edb27f3ce_3766585.fix -txn/fixtures/5835cf7e40f049b34dfb9a784a96e14d32dace47_2234501.fix txn/fixtures/5860814fd78d163752287c5859de3e61dc929985_265678.fix txn/fixtures/58720535b51e362f8fab16ec8ccf337a7f48d474_1849395.fix txn/fixtures/587fd805a86ba691f438439d0e93ca54281711ce_265678.fix txn/fixtures/58be585e74bb695eeb6b65c28427abc1eebf9c52_265678.fix -txn/fixtures/58ca86e55ebceb797f577e13b8f81fe18c8ac8a9_2186964.fix -txn/fixtures/58cc78a7f113e309bea5eb793a3a6f3ed31ab77f_2234742.fix -txn/fixtures/58ced90974b05975699137158762ddd6527f82e2_265678.fix -txn/fixtures/593c82b0486e96ee86fe9500adebcf2b8a2e3924_2198193.fix txn/fixtures/59432e24d5d0e935622b9a4d1d97fbe759022e04_1843878.fix -txn/fixtures/5950095cba899711f09ce451310874bf0cf2ff5a_265678.fix txn/fixtures/5981638b02866b00afe1b0840d4938dbc0c5160f_1852713.fix txn/fixtures/599a6c191b661a0f4f0151ec159429ce79aa591f_3191172.fix txn/fixtures/59ab9eca223cfc50003b37bd6300f7522ddeb41d_265678.fix @@ -928,162 +602,84 @@ txn/fixtures/59e1a2e2321e806b6ff23ccae3385212455962d0_265678.fix txn/fixtures/5a1fae27c584db49e19fa039ce38dc5a1342278a_265678.fix txn/fixtures/5a3ff7d764b9e2c70295ddecc128580f93425259_265678.fix txn/fixtures/5a4a074ec3c227bb2ade20cb91ac333371f67ad2_1835104.fix -txn/fixtures/5a7fd12ae0f9b3401ad8ec5b724e73afc10fbb72_265678.fix txn/fixtures/5ae3752826b74ef8f405351f6c43d35002b1c4c0_3201400.fix txn/fixtures/5ae8cd867b590f400afcfd699cd2205c7fa64750_3201097.fix txn/fixtures/5b0ce7574dbebd6fb7ff288420817a6591243ff0_265678.fix txn/fixtures/5b1b167ce0241216dd145c8c4f0fd0870ca0fa89_265678.fix txn/fixtures/5b2461a4c21911d572f40f6b48ac105f30040580_265678.fix -txn/fixtures/5b50ebcbf85c0e217c1ef0dcee1828042a9c4692_1445835.fix -txn/fixtures/5b702e568333b009e098821d81926b04e4bb0e75_2191717.fix txn/fixtures/5b717c163a48aa70c9b27a9759e2e52cfc6c0fdd_1853683.fix -txn/fixtures/5b7272046e4596e240a8186db3cdfc55e9a4e578_2215367.fix -txn/fixtures/5b9241314da6c558c89ee6f9efd4b0b50accb19f_2207053.fix txn/fixtures/5bd65e05c8214ba993fe20c2edc61d4a7e9fc8ce_1832600.fix txn/fixtures/5be616ce7f5342e3c2f069a60c4517985b665201_265678.fix txn/fixtures/5c60f22fe1e4fa45993a91db220609cb09b561d5_265678.fix txn/fixtures/5c6299dbedf5f7a3081013a132a78726c7e3bfc2_265678.fix -txn/fixtures/5c85803dce1d0099ce404b12b3f8f7ee45ccbf7e_1853016.fix txn/fixtures/5cb0be61fe78d2dd3b4a11a1cd06fa878fc680eb_265678.fix txn/fixtures/5d37a00d2f2805ea23f3680276c37cccb719044f_265678.fix -txn/fixtures/5d5628e1d114f33b80f57ed9a10a1afffe7003c9_2200628.fix txn/fixtures/5d5c1d0dff3fc4b0093227c0be22a1fda51e239a_265678.fix -txn/fixtures/5d6983e20de92f9ca24d76ba90462a2fd5844160_2189202.fix -txn/fixtures/5d8d9eca155047c793094c70a90db9284239f18f_2141239.fix txn/fixtures/5db9655dd71ef3d66fa3361dc6bea89b984f1224_265678.fix txn/fixtures/5dd3324fbae61583db90c97c47dc5557985805e6_1833675.fix txn/fixtures/5ddab29bd8ca920d39400eb81450f6e75f19c321_265678.fix txn/fixtures/5e04bf69008a6b5da12a61756b3930cf27e6cbf8_265678.fix txn/fixtures/5e0a5f5573e108afc7d427dc5bf04f397461a297_3102855.fix txn/fixtures/5e0ae2999c7f6b6771e1afdd74dac699d29ac837_1657889.fix -txn/fixtures/5e171484269ba4f77a6786b31c07bb737ee235a1_2230687.fix txn/fixtures/5e7f79dfc7aa8e8e2428850e97b81a6aedf9f051_1829329.fix -txn/fixtures/5e84c6798ac0d2f96a5b2d65f23d836e82f7478b_265678.fix -txn/fixtures/5e8fc5ee874ee1b69d6f8b8f578ba7fa3fb4d64a_2232564.fix txn/fixtures/5eda426d0395c4a87e148ac777255bb69d2caeed_2195109.fix txn/fixtures/5ee785582913d95ec68c3b0b03080ae144592061_265678.fix txn/fixtures/5ef07c01eeceec1a3af7e99d481c541a69e2b35e_1831372.fix -txn/fixtures/5f162034b1c843232ffcc8495834b3e633633017_2193395.fix -txn/fixtures/5f24fb2a982fa45fe2f5a459b18c21396aa4967a_265678.fix txn/fixtures/5f28e97935b867b16e223b9fc9263dd86a51ad5c_3197663.fix txn/fixtures/5f3972a2ac11a0ec90f01d4bc0e2a5af4ead6b60_1830181.fix txn/fixtures/5f57fd849e41bf5413244fd9e3a7796e1664a029_265678.fix -txn/fixtures/5f839c8e553967f420160e3a986c96ac9a779fae_1576585.fix txn/fixtures/5f87ec8b7760f0413cc2ebe37deccdafc286c564_265678.fix -txn/fixtures/5f954fee3ca4a22bd0806dc946fae3ec854da7bc_2226647.fix -txn/fixtures/5fcc68878a3b844fdbf61ac49357725e3c75f433_2218658.fix -txn/fixtures/5fed3bdb186372441323a75725569b8223fd11bd_2188025.fix -txn/fixtures/5ff42d94c6f3487364249ebd20f036c3fdb4141d_2210126.fix -txn/fixtures/5ff61c5b03817efbf9664d28623a70498658515f_2233461.fix txn/fixtures/6016f2e678673a69a5f2f5320a18141242416357_265678.fix -txn/fixtures/605d2e073f24cf883ceae08483916014f5c12c84_2229767.fix txn/fixtures/607c9f48220271b9312b90d192b0d5d83ee1a91a_3001609.fix -txn/fixtures/60c5bb96478e05fd84a642290ecad61e2f2b7fce_2194449.fix -txn/fixtures/60cb454e218229567681d1afe76af28b5626dd89_265678.fix -txn/fixtures/60e3fc0fc7d90670fe4e97835c04469357f56fb8_2186348.fix txn/fixtures/612869df4d55878013135f028a02a6c5d85a74c9_265678.fix txn/fixtures/61308114e7370765a28bf524e5a1ed0d6cefd5ac_2754507.fix txn/fixtures/613a5d8fa8bde73d78e9ae5484f0b44f1f1483db_265678.fix -txn/fixtures/61488edce7af6170aa82575e278f07716cb302f6_2185684.fix txn/fixtures/616ac01ed4cc6e4d51d59da3a7e44422ef990519_1838107.fix txn/fixtures/6179dcaa9b3dfbc6d1d2b4987ee9fd45dfa3fa15_1832813.fix txn/fixtures/619778eaec2b9a94c1286b5380c2fa94454797d4_2225307.fix txn/fixtures/61a911664f74f6b3695f8b19d1839707e29508b2_1849950.fix txn/fixtures/61ac8a5352908053208a3aecb9852a2ecfda0ce5_265678.fix txn/fixtures/61c1896dcdb59010c7890c5a8eca56495950c95a_1849570.fix -txn/fixtures/62009d136dbf5c24ae20a88ebe4238abf915ef2e_1575508.fix -txn/fixtures/620522ab01906554283e12e36d8117dae515f418_3358297.fix -txn/fixtures/621a213a06588997fd9af112ea62dda1e5e63166_2137348.fix txn/fixtures/621d91964e32435c23bac922c1ef7a4f758d45da_265678.fix -txn/fixtures/6268ee52e68a9630dead3356aeaef9e5a073297f_2198125.fix txn/fixtures/62fadceb8f2e780853419537d9057453083e708f_1830990.fix -txn/fixtures/6303ad11229d9e5c99a3cc9bd75c2dd29ef644ec_265678.fix -txn/fixtures/632d76c5f28d104336064a63a49a3af3a5905332_2140624.fix -txn/fixtures/633eb51683bf44b409d5120412f037c4281e8e63_2208663.fix -txn/fixtures/63ee8c7982ec5dc740201afe7cc7f6d856499ba7_2214405.fix -txn/fixtures/643d170e0a7691fbd85066d7fa0b54e91e1ffbfb_2227923.fix -txn/fixtures/64645f991e08d2c857220681d6dbbf2be9b83256_2201204.fix txn/fixtures/64897ff2bf7aefbf460be912fc59e637ffed9565_1213123.fix txn/fixtures/653ae1539361dd9ba5bfe51c0b22b53456882981_265678.fix -txn/fixtures/6554852d66123562cf242240ebe5648e3f217bd7_2202312.fix -txn/fixtures/655dd2746de01aaa57bb552651c2dcb98567796f_2139000.fix -txn/fixtures/6590f1066565d26d2c572a5ff83d9acbe7a6799f_2188998.fix -txn/fixtures/66200523354cb0f80b2e69c968f3d4ce782c4b31_2227813.fix -txn/fixtures/66369d2de77d27f1ca4e9adc4b9452ff616185df_2204144.fix -txn/fixtures/6647578a90a9d98e76d8297d60dd517d6e940748_2209619.fix txn/fixtures/6695a5515b8365132402398a83f0720c3c54de4e_1837740.fix -txn/fixtures/66be9d8561bbeeac22124eee02a56ebfd47e0974_2230071.fix -txn/fixtures/6783ee4a7c0ffa66049e806219dcf513b6f413f4_2234360.fix -txn/fixtures/679fa619b9c8b762421b4ca5ab98fe740121c91b_2201741.fix txn/fixtures/683098a43650542407f5e2673dcbed1ff761c745_2423046.fix -txn/fixtures/68b2b5a4a82570d5be992d5c6ef4c7cd062e7d86_265678.fix txn/fixtures/68de719ae2e318788625ef7d721f9655f395b243_265678.fix txn/fixtures/6917b8f9a10d431febeda59d7c1f89e6b103c63f_3206023.fix -txn/fixtures/692da6bd6cbd13d7ae028674dd0c8eba1b9f21c9_265678.fix txn/fixtures/6965357bf7b4eaf7bb429afd962b2dcef859e960_1848806.fix txn/fixtures/69e7979792813ce26ee23a6ce22d283d4616663e_1850572.fix -txn/fixtures/69f3d8d509030727c962771c017ee0dc21cfcf85_2190658.fix txn/fixtures/6a154600616cf08c03761e73bc5274169d806df5_265678.fix -txn/fixtures/6a16ad36f04f2d9fafee928584306fd5812e397d_265678.fix txn/fixtures/6a8fc485df4ebc34be31a498405018a77570ea3b_265678.fix txn/fixtures/6a9195dd570495643a87db0951da43ff1061dc8e_265678.fix -txn/fixtures/6aa31e5e526d31c10afa5822d946a67322b7cdc6_2215459.fix -txn/fixtures/6ab0f67b6d873d78f6780228ba3e73d717ae4ed3_2215186.fix txn/fixtures/6ab77582d39b7ff0807d6abf411751a99469759f_265678.fix txn/fixtures/6ad9932baf4b3db55fd8cb7a0c772154d496199a_1831442.fix -txn/fixtures/6b39efc1fee5649e89b4ba53275e637d210d545f_2607586.fix txn/fixtures/6b745b5f8aafe33964e6674b5edf1bae4e6d47c0_265678.fix txn/fixtures/6b8aad11eda157f83dab534e8066a49ed74ba761_2460271.fix -txn/fixtures/6baed8c51b0e2d9d2ee9518ef618f70ab71068a2_2189997.fix -txn/fixtures/6bbc0fe70c5898ceaa4d90baea8aa6beee462b31_1524030.fix txn/fixtures/6bc6ac4a6010d90d363521e9657f9d45498d1738_265678.fix txn/fixtures/6c10842551bcfe52991daa3596e09fa94bd0f5f1_265678.fix txn/fixtures/6c1341dbc2358cfc4e5488cd07b0c36a0cfd9fab_265678.fix -txn/fixtures/6c26a54899203ad9c2fab9dddc3fc2903d76b216_2136950.fix txn/fixtures/6c2d21b49f6a3577299d4757ea92841557e5580a_265678.fix -txn/fixtures/6c408d253b15c33a81e05816075ed6381c711bc1_2186016.fix txn/fixtures/6c7485b4807cedf24a234fdf455ae9d2603508c1_2583468.fix -txn/fixtures/6caf7149e36e14b730184f7a842c3974b9f1d3f6_3114943.fix -txn/fixtures/6cb4a875d659d3876bba279d4d2a510d8f0f746a_265678.fix txn/fixtures/6d03af70a8847df24d10f6c6f760fddc8eadc5e4_265678.fix txn/fixtures/6d15a36c9befbad0f742bf0047fd8a6f12dc3207_2909783.fix txn/fixtures/6d33522c1e6ee0c960ba65f8b4a011d4d5cc603c_1837056.fix txn/fixtures/6d49e31dc3c7545261144f0ea38c2af4fe21d533_1855703.fix -txn/fixtures/6d60ccc557bbcbc0d014b218a2f21fdcdb063c8b_2206064.fix -txn/fixtures/6d6ce3be692a314b823dfaab82ffa7f1348e2cf9_265678.fix txn/fixtures/6dc2ecaf5c82c94c36c3a049d520da42ed59cd1d_265678.fix -txn/fixtures/6dcb68d78f59c38c2868170462de7b8df600b329_2192886.fix -txn/fixtures/6de22e4f6c40700cbc9062cc37c3377150ddd23b_265678.fix -txn/fixtures/6e1897fc662064506bcebe67164740cfbab4211a_1844229.fix -txn/fixtures/6e3101e4dec1891d3ad1cfac51212e38aab60664_2214633.fix -txn/fixtures/6e62414edfe54740c4cd339979c7e666b5f597da_2234808.fix -txn/fixtures/6e73a9b6c3fae98c2b9008af36110562569706c5_2203247.fix -txn/fixtures/6e882c41b89d75a469b19cd27014741a348016ad_2137372.fix -txn/fixtures/6eb510a6e8c10f74929ccdc3a9f693c8342994af_2196793.fix txn/fixtures/6ec4e2bfa78a373b657cd6cdd7b12ddded83ce35_1830116.fix txn/fixtures/6ed605260361eed1bcd6d50676fd4f10a34cf779_2717633.fix txn/fixtures/6edb98d70680a296f990bc1daf91dd36053145b5_265678.fix txn/fixtures/6f0fb3621166d843fc2f644fa252b483a7d1fe8f_265678.fix -txn/fixtures/6ff64aeb9ce5266ad83f0bea21812761d3c82d60_2232957.fix -txn/fixtures/700f37a0b3638cc41adbd1ac89148b9a81d6cdc8_265678.fix -txn/fixtures/702a98d037c23de2c8d0df9a00e7e2e9a03404c4_265678.fix txn/fixtures/707c088e9b265b475a25401e3ffe899069cab3f7_1837524.fix txn/fixtures/708192497af8fae436b66a04a2f90a17cb66fa91_265678.fix txn/fixtures/7095f3138822db8b09ec7ee5f5ec313bd7ba4546_265678.fix -txn/fixtures/7113520297747f2952bc10b841a63adc7d02ae4b_1575683.fix txn/fixtures/7148ed822b977385887545783f84cc39d2733848_2912577.fix txn/fixtures/715740a384824e5a09d0ba2536c801b5a455dbd6_265678.fix txn/fixtures/717818247012f5a76f9b4d51ed1600f9ee84af7c_265678.fix -txn/fixtures/71a625c1980eba4ec1e05ed1b849e192f2fe9306_1575151.fix txn/fixtures/71fef040f86707bed99a30e471cb908d8a761058_1832405.fix -txn/fixtures/7208c519e81e82cd073488676983f5dc9723ea39_2214697.fix -txn/fixtures/723dc40b7624f6125bf7e67040759b966f12a664_3499078.fix -txn/fixtures/728873e67b5676df8ec3cd444f5edd4c1b386b01_2190545.fix -txn/fixtures/728d9ac62e0cbb1a252bdf3bf3a10f6e01002f1c_2202197.fix txn/fixtures/72fe3a57302874e135c7bc383f62ab0c2419930c_1835040.fix txn/fixtures/7372281d5d0dec6e685b148f35a7660baaea53dc_265678.fix -txn/fixtures/73bbfa5526e78e0dff861d41369d671422330778_2133339.fix -txn/fixtures/73dac1cb3ece394cbc1d787267c8f67bf23f05cc_2225492.fix txn/fixtures/73e5a8c45cf7f6fc0299f6583c07ad59780e33f0_265678.fix txn/fixtures/73f5949bdc68038c3886dc255aebeb8c8a25ed79_2215693.fix txn/fixtures/7432b5ca117583f99f879e105d20d033dba9f4fe_265678.fix @@ -1091,117 +687,57 @@ txn/fixtures/7438c6d284ba03a269b36bc24c1a3cdd12b6d3dc_1832527.fix txn/fixtures/7444add838af0ce59b2e7dab6831df60b55d90ee_265678.fix txn/fixtures/745eb2958bca9d8abbd5ead8839c53632104e89b_2398324.fix txn/fixtures/74aa60ecbfb647ad8193acd95d94b58dd643c0e4_265678.fix -txn/fixtures/74ce09ba587979efd2567813152e4937f26a8a45_2237552.fix -txn/fixtures/74ceb9783010f2045eb54a70581fb66582c7d7eb_3723552.fix txn/fixtures/74dba888b06ba320539679bc6e96135562d45886_265678.fix -txn/fixtures/74e73cd625270dc92298ef0b79e351e867e30899_2185258.fix txn/fixtures/74f9f1dda20c9d76b349e7a45be78e25e133b987_2729628.fix -txn/fixtures/74fc1c1f63f90f69a048100c93cb6564a700b355_1574668.fix -txn/fixtures/751644f2859684b1b02b04f4c2bb7532d70d91a2_2741778.fix txn/fixtures/7556013c493608c1a57f450304f1f49de67de27d_265678.fix -txn/fixtures/758348216952932927da3be516f2ef6db1bc528b_2205625.fix -txn/fixtures/75d285cc1890f5ff844577343f38f0016a58fe8d_2235432.fix -txn/fixtures/75d55078f1cffcb6feb6dd032c3756f81d22e328_2213017.fix txn/fixtures/7628342b9361df2077fc13c664d26c4604baf072_265678.fix txn/fixtures/7628d0fb061e35ecde73977b5a3e48bef4e0e8b7_265678.fix txn/fixtures/766753bd49e4a67c9b1db3ea556a59c571198fab_1833781.fix txn/fixtures/766fad81d4b8c6899be5b319ce3e2bef94169f89_265678.fix txn/fixtures/76c88da7cd1daf0222bfc849b3aeb9f4ca42d961_265678.fix -txn/fixtures/76d680f0586b0b536305df03b073a0cb9226ebe1_2231275.fix txn/fixtures/76ea53fd679744403628fc8757f3445aa630eaa2_265678.fix -txn/fixtures/76f56e4b8fd8cdcb3f84dc552396c7ec78d64fd3_2371907.fix -txn/fixtures/771d8fce01d54bcc96fe17a89d54c8c91ffe36a4_2136834.fix -txn/fixtures/7787409b99f1a76172e9c9a7939459b1861b2c60_1328174.fix -txn/fixtures/77a8adc2b8f5c2037a8298c33ed132bace92b678_2198400.fix -txn/fixtures/7804c03d36b7eea433877275990c38a55fbaae42_2199218.fix -txn/fixtures/7823b3618ffa687d40d5d37d829aef943cf87491_2220631.fix -txn/fixtures/787184e961ab6ae7edfc03f99ca8189dc595e73f_265678.fix -txn/fixtures/78cf2da70b145fe57b2ec2808832c731e335a856_2218939.fix txn/fixtures/78dadb162713fb4bba6dd53c9c2d508ff5184bb4_265678.fix -txn/fixtures/78f2fd40cd5114d97639aedbafbe649f69e22126_265678.fix -txn/fixtures/790698686d2e198585053d5f907e990767814629_2192974.fix -txn/fixtures/795e7b9627d9a344bf29425d63ca2edc2eaf91da_2238514.fix -txn/fixtures/79642b34aaedcc5d7960bc892d475a15a954e2d2_265678.fix -txn/fixtures/79a1682d209004109b80afd3e8d2603394e0902d_265678.fix txn/fixtures/79b432b302868ebaff52801bfe8a249b5f66b7db_265678.fix -txn/fixtures/79b43bec2ba26f95d296e530ed4bcc26f8bfe9b9_2200515.fix txn/fixtures/7a08552d275b739e608ae849a5453051d31a1ca2_265678.fix txn/fixtures/7a16a97f0e93a9ca8a6c0907daf3fd9323030769_265678.fix -txn/fixtures/7a1ba9b15a94ec55a22bf58ba02efea68067c7a0_1575911.fix -txn/fixtures/7a38c457d78799eacda9d3eac73cd0cb1239e629_2201095.fix txn/fixtures/7a46d1a47adfc21ed24cad3bf87fb4e001d8f28f_265678.fix -txn/fixtures/7a9b10cecd30c1cd04c702909af6d6151b5d7e95_265678.fix txn/fixtures/7ab8f7859984280bf68d217a5f63301600e1d6b1_265678.fix -txn/fixtures/7ade99678b9f6b8a6c64a143756186e9c42cee87_265678.fix -txn/fixtures/7ae18275982eb213397b9bf1a2c69ce3079712d4_2206704.fix txn/fixtures/7b0bdf3bc8b96c84d31b53d46857f0dcf02e978f_265678.fix -txn/fixtures/7b0cbc17a6e68fb759d3cfe2058ab87956880415_265678.fix -txn/fixtures/7b1e58017efe2b76b1d3ab04f44c17f2dbe156a5_3521424.fix -txn/fixtures/7b2590a93d2b6498f9d669c8d25fd8f521d78a41_2217826.fix txn/fixtures/7b2b19bacbd26480acc84b2ec2309dab78bcd4d2_265678.fix txn/fixtures/7b3f5535b4aea1e007d109410a2cde376a096b85_3197345.fix -txn/fixtures/7b6703220c13c59c79e79b971dd26d73be56c84b_2219508.fix txn/fixtures/7b75c120673a4117b1ed406cffd3119c8d732e1f_265678.fix -txn/fixtures/7b8a2076923c8f0d83ebed8a87e9a3cee67cef97_265678.fix -txn/fixtures/7b8f8e41573eeef5b766281b613af5b824e938a0_265678.fix -txn/fixtures/7bb2071e137916a7953dc03e7a91166f7f4933d8_2220327.fix txn/fixtures/7bc6797c6c983885b1a15dd876e195f7014a1ccc_2705158.fix -txn/fixtures/7beb82e84a3d993bc61d3f33c32ad070a1ebd3db_1575615.fix txn/fixtures/7c21b2a9421d29211fc4606383b4b8d4afc2d2da_2139381.fix txn/fixtures/7c4c81f458a4bb96dce37b15848f750f29757816_265678.fix txn/fixtures/7c7fc20c8f7e0286f36e27ef09fc64c7b34aa3ea_265678.fix txn/fixtures/7cd40934ab71999042661cde7c89c7c163e06d3e_265678.fix -txn/fixtures/7d2588736a7df733e96c84e8eebc2bffc551c7f4_2133464.fix txn/fixtures/7d66500f1c9d4412ed309aab9123f63f80d76a8e_265678.fix -txn/fixtures/7d890b0a93b6eba7595d2dbbda3aa24a6b715d19_1139013.fix txn/fixtures/7e162c3c678748000aa8e1dac848a8419b855dda_265678.fix -txn/fixtures/7e3d6256fb0f86d88a3aef4eaec48ffaca2649d5_2218454.fix -txn/fixtures/7e3f22933046132aa4a699842ee5533fe3a41b22_435595.fix -txn/fixtures/7e59076faf162a4d5332a7c8e535eeedd7d5c958_2207559.fix -txn/fixtures/7e9108d0d4ab00b4758c5e07a2f79bb31e653b46_2236105.fix -txn/fixtures/7eb4dd8f6b72bef54ad2e0a308a636aaf2680938_2231520.fix txn/fixtures/7ec5734c811a6c1e0e35d6d1a6adb2ee3128116f_265678.fix -txn/fixtures/7ecefc4568db6716a1fd257095753c3277dcdf83_2228316.fix txn/fixtures/7ed911b9be7da9452df38d010b8f05e2dd3450f8_3194894.fix -txn/fixtures/7ef8a463b44eff651b92dd8e87235a105b4d00dd_2371611.fix txn/fixtures/7f176ff671c7048392262eabea3a65155ff41822_2135873.fix txn/fixtures/7f2cec8be165daf94490d16ad5197ecf59dce8d5_1829727.fix txn/fixtures/7f302a09121a3f85d76f9c6b44665ecef0ed50f5_2138673.fix -txn/fixtures/7f8f86f1a9bc55f220ffb3076a8085f959e5d683_265678.fix txn/fixtures/7f9105a4295360588ea7078c771a53066eee1ca9_265678.fix -txn/fixtures/7f9469634dc504a5b4238b1e10d2ccd2fd957169_1852629.fix -txn/fixtures/7f99c632752fb7b088fea19332284fd6bfae6dde_1576675.fix txn/fixtures/7fa6f44771cc83b9f5262f07a2c38e339d616cb5_1852247.fix -txn/fixtures/7fa89a994c774d05878022f95160ffac4b17c1fb_265678.fix -txn/fixtures/7fde8e72dd064cfe85b5e9b211b0356bf14bf378_265678.fix -txn/fixtures/7fe3699a0409d51fa17c8c1e150ef9651ea8d74d_2208800.fix txn/fixtures/80264c01e61d5d1e1a29c805e87a9fa996218fba_1850678.fix txn/fixtures/805e0cd05df6ceb015a08086e9bcfab51f559747_180823.fix txn/fixtures/8061f4b3293830badf653e04d0eb738f1384d4b2_265678.fix -txn/fixtures/807dffda19f530b5857f1b1eefc7c416af2be865_2201033.fix txn/fixtures/8088ba17dd927644df610f9aed54ed407632556f_265678.fix txn/fixtures/80a0bc9bab85104d1772d25066f0603f7f38149e_265678.fix -txn/fixtures/80d5bfd331a90cd04f02ebeb2daa875bb4d04ba4_265678.fix txn/fixtures/80f7ed9dd50d5090558dc3ac67b47e7a57d53601_265678.fix txn/fixtures/80fa74e58476bc07e9d6ccca64c374c22da0327c_265678.fix -txn/fixtures/81080522b94bd3dbe80eebed6873659db5a3860a_3454326.fix txn/fixtures/8134209f43c8d3dbbb861b30ee71f1f649babc5f_265678.fix txn/fixtures/81696f4a9ca9e9e12c70b71407b73249d8c00575_265678.fix -txn/fixtures/816b7bbfdf3efe2b3abb6f8e36e4c2efd5b24f34_2185350.fix -txn/fixtures/8173a59ae2048da0ab0756ff088897ed73f7be15_265678.fix -txn/fixtures/818f71ad0a0f9659196ca287018197fee41fe3fa_2190773.fix txn/fixtures/81a6be81485f9bdb807fdf7fc81b2782c512d7a6_2196843.fix txn/fixtures/81e2fb1dce2a047cb9e6ed334b72e57d1759ef06_265678.fix txn/fixtures/82361cc3544bdc25471a9c08b4a57584081fa2ac_2241197.fix txn/fixtures/82a184ba26d1e4512a811765b4d8e118ed63d3e6_265678.fix txn/fixtures/82c6b66a19826c872cbc38602176607d93a06eef_265678.fix -txn/fixtures/82c937e832b8cb338645f3e2155f63fd1cc2f955_2227177.fix txn/fixtures/82e8fbb6226f92ec6613e3926fe45b35132bf576_1849796.fix txn/fixtures/833237493a0ef5ffb0c133a9f882857181510beb_265678.fix txn/fixtures/83438230049e506c0e91c5f0a3e33274f28e7890_3202891.fix -txn/fixtures/8362d2f9113946d5aaf14e26352d04ba8273d109_2208736.fix txn/fixtures/836eaabfc8e5327dc9e02913791f86fa869f98f9_265678.fix -txn/fixtures/8371b88afa30491a952a802ed094966179a2ba6d_2136224.fix txn/fixtures/837d6f9ca317f624f265888a147d98232a184668_265678.fix txn/fixtures/8493318989a41d8a979c653833549fb30918d01f_1833195.fix txn/fixtures/849d28ffcec100ce4572d341bc9fe4f74fb9d0b7_2140423.fix @@ -1212,419 +748,206 @@ txn/fixtures/84f3a1500cd82eb29554c49640400e9d96783dc6_2395779.fix txn/fixtures/850384bbd4d1b8c25de0c7516cc4b823801ee570_265678.fix txn/fixtures/858143e9c97c4c7ef351403f210cd5227c141dc1_265678.fix txn/fixtures/8584a658b6b81d0a7a3fa0487b7d98305cf2dc5d_265678.fix -txn/fixtures/85a5a3ef4260adf5bc1e6170e2bb65cbc8a32df2_2226913.fix txn/fixtures/85a5e55185820b8351da3f707e12953740888fd9_1831549.fix +txn/fixtures/86038e7cce39589d23ec96f2155039ab705e0fe9_265678.fix txn/fixtures/86228fb07572aaf99c3261aef5a327dc946fab82_1836600.fix txn/fixtures/862d404d411a7e18ae753412e1740140d7db403f_3195704.fix txn/fixtures/86395b4225619c786adedc129b7704513e0bff4b_1844482.fix -txn/fixtures/86454af77547db2c89a4550257e1b5992763f011_265678.fix txn/fixtures/869745c989e8293a411b34303b553040d13e1489_265678.fix txn/fixtures/86a0f47899155a1b8b4b419580d5b149d2de720c_1845492.fix -txn/fixtures/86a3af2cc9255dc96044aa02d716c719b47a54b7_2204374.fix -txn/fixtures/86ad9471cfe78293876b8d724f3737fad2471964_265678.fix -txn/fixtures/86ebf3cae17494751b3022ff88fb16b6e01324d2_2206656.fix -txn/fixtures/86ecf2360667c997793dd1487a4051db8624bf48_1576048.fix txn/fixtures/874677584a55f3638285d1d56f494283fe1a04c6_265678.fix -txn/fixtures/8756d3515f298149523662750621b3510d469ff0_265678.fix txn/fixtures/878fca250a4597dc8be81f94c0c6562065ddf399_3204556.fix -txn/fixtures/8794cccac8d5bcba018310656d5535bdab2b3bff_2203374.fix txn/fixtures/8813244e2e31cf049192ee6378a4ced01ab0739d_1853879.fix txn/fixtures/8882ce10b622347d25df35d61eb03f4c03b58571_265678.fix txn/fixtures/88a20a3211cc13cf73a420b249e2fa2a90e3e1eb_3005033.fix txn/fixtures/88d538b8c654183b6024ca6c186fc040952b498c_265678.fix -txn/fixtures/88eec59b48bc917b9daddd34e4e9068925104afa_265678.fix txn/fixtures/88f2bb01740b1934ca2f3d84d07a1ea77a1729aa_265678.fix -txn/fixtures/88fb6cf4c3f060a2d8a0664a648657b52bf49f6f_2211151.fix txn/fixtures/8909474439a9d13f28de8409979e6f1485c29f01_265678.fix -txn/fixtures/896dcd5f66bc971f73ef65a515b47e697b7111ec_265678.fix txn/fixtures/89a4155352fab4d7a2f7779a4577f87adaaee9c9_1851188.fix -txn/fixtures/89b89f4fe8f603f87b2d92c136dba0f1c98851dd_2233223.fix txn/fixtures/8a0ea672e3fe2fb9fbbe6e93a86ed8b9e1ad43bb_1850949.fix txn/fixtures/8a9a49c4d42afb1c8bcc8209f009d847214a0b2e_1850193.fix txn/fixtures/8aabaa13c469f8e75020842899bacb24f7a9e154_265678.fix -txn/fixtures/8ab790cf1e3936cf30649635fa52bf1c868be032_265678.fix txn/fixtures/8ac234a9308c1190c404e6a63576063f55399c9f_265678.fix -txn/fixtures/8ac2b97afa10f62af05cb0ec2b9707994f6c86cf_265678.fix -txn/fixtures/8ae00a6cdc5929c9a20daa77ef300c42d7fc7944_2224910.fix -txn/fixtures/8ae8c1d2f378a5e1038cfc6b9a649e4be23b2bef_3788935.fix txn/fixtures/8b3b935ddd03507493dc9867f606b68888bd946f_265678.fix -txn/fixtures/8b3dcf67440ca55dc1d2bc248ef61f034fe68185_265678.fix -txn/fixtures/8b80d52397a8117e0e0a80e7d737fa9509ea74d6_2186219.fix -txn/fixtures/8b9e02142ccb007bff52bf050c06f50f24351b48_2214130.fix txn/fixtures/8c00535b747c262681aa014f688dafb22c34546a_1631431.fix -txn/fixtures/8c24440a52f2a3a301486f0b6c49afc01a511b10_2184590.fix -txn/fixtures/8c2d2eafa1a0b9fe3e4332556b960d95940bf67e_2212119.fix -txn/fixtures/8c31a6a57c87b8fd6993f67f7d5f995fb017fe7e_2136025.fix -txn/fixtures/8c45d76a08b0e8bc419e4d773776ec50be691045_2219666.fix txn/fixtures/8c4955dd69c00798ef7b6dc1e5836b8d4da26f54_265678.fix txn/fixtures/8c6152fda477417ceee7627fcf14bfaafb20310e_1828940.fix txn/fixtures/8c969033df5cadb1043d1e28ccd371232c0bdbd8_265678.fix txn/fixtures/8cc0cafd6602956e0c3fc35c1844578785b9337f_2312950.fix txn/fixtures/8cd5129233ab8d1ce5428ac5fe51f0c7a3e1f723_3195044.fix -txn/fixtures/8d4e9c49ca38016e3eb9101fd7780366ccb5bd63_265678.fix -txn/fixtures/8d510577edc9064955b5acb85b74545ce5165997_2139271.fix txn/fixtures/8d585bb3782c1616c715608a5917a7a38e644633_265678.fix txn/fixtures/8d58fe7ee312bd41d25b223ece2e632441cb7fa9_2292395.fix -txn/fixtures/8d77e1e1c87ecd91a8f033222bb16b068a3b4a95_265678.fix txn/fixtures/8dab1e53c8d72476e278c5041c64b918413beeec_2203103.fix txn/fixtures/8dc1dd2e1e05a8b1e65c8058f37eb24bd3ac87ac_265678.fix -txn/fixtures/8e30abc5fe84f9c25eaa7bc11a3723274d54c884_2223502.fix txn/fixtures/8ee116717d81881f6e21fa3dfbe3f33d8ba502f2_265678.fix -txn/fixtures/8f24011f157037994aa267b08549559d9f98b9bd_2187730.fix txn/fixtures/8f2e283aa7e2b0f52994e7312429e58095a2e33f_1830783.fix -txn/fixtures/8f5a6f9cbb93183cff518a7d0f7c42db4fdce7ac_2139139.fix txn/fixtures/8f5a719fa8a8e52fd182b4f1a59ef1fa93a411d8_265678.fix txn/fixtures/8f8a1715f18999a5a28cdf1451c8fdb9261886ea_2192755.fix txn/fixtures/8fe1c06bbb70dd854d6044248af8ddacb8dd4c60_265678.fix txn/fixtures/900e0f020d6c8d0915ed19a5c54adafd979a3390_2277057.fix -txn/fixtures/901d6b60e72d47863ec828e0c116eeab902c86b5_3332788.fix -txn/fixtures/902b34142ecf38e8d7cc2b83c45c9a7bb125c9d0_265678.fix txn/fixtures/902cb0109f3e57ee8b4037582c47c6c66e5d8b6c_265678.fix txn/fixtures/902eb5404a6b532f8ae8749055875ff54fd29b03_265678.fix txn/fixtures/904207059d246f5e6b21f01ebe670a236b523727_3201951.fix -txn/fixtures/9055eb403b43b198dfad7cf64cd22b2645b6e084_2233007.fix txn/fixtures/90947f3a153831cdb64a9e3b5b461d4b12d9503e_265678.fix txn/fixtures/9099ec62e79fb957f8d6359194ad7ac034cecb10_1854074.fix txn/fixtures/90bfea1be486e29c8e1da62f4e28d28301223d6e_265678.fix -txn/fixtures/912ff85cf86567fed1456541b92ca5095687329c_2203279.fix -txn/fixtures/9152fbbe10ad2236a0d4d1e6d845ffd36089663f_2230775.fix txn/fixtures/915fa677a9682253190e56f106e396eef5f92c46_1835979.fix txn/fixtures/916400c914fa36225a1f05e1406a0f6697884ba1_3193722.fix -txn/fixtures/91a824f4728bda0f5b83a5214136f7d4eea6441f_2217511.fix +txn/fixtures/91751b8cfe5fb1e190f3188def8a34e5ae41f9b4_265678.fix txn/fixtures/91c096eb22aa1a690ed39be3d14963ab040d35d6_265678.fix -txn/fixtures/921b0d92770803329ccf4a71f9eec640cec16030_265678.fix txn/fixtures/92494c89701e7bcb6c4d706a5d9ac5cbc60f5da7_3001125.fix txn/fixtures/92515dde3244f54bba8913577e3b49c7b61e840a_3194372.fix txn/fixtures/926ed4930958cf81adcebe46f01e3d2234b906e9_265678.fix txn/fixtures/928387d45f038f2f95c746d588386dd5c0189171_265678.fix -txn/fixtures/928970d21fa43747bca89f1a89b209b44436e584_2221614.fix txn/fixtures/92b26e8f483c4f477142fc26d8d167558ae69706_2215759.fix -txn/fixtures/92e791077f3046e841226e276f476695987e0274_1101003.fix txn/fixtures/9314d57f56d40face8fddca964cf9dec273685b9_265678.fix -txn/fixtures/9323f635964fc31b53f693f7d82e6faec25b9c04_265678.fix -txn/fixtures/9370046a7dc9d68d4bf9643dd82711c8ee701411_1019687.fix -txn/fixtures/93a704f5fc76eb7db7b50b577260257aa68f60b7_2211215.fix -txn/fixtures/93a73fa12b34e5b3ae13bd1ec7ac7e5c190706f8_2134671.fix txn/fixtures/93aee18074e3e54d04ee61eb5749642eb7beae4f_1840989.fix txn/fixtures/94023da412bfb74503860599a0964f33a118c3a0_265678.fix txn/fixtures/9465dd65dcc1b7102f5f44d219a06ff102c7b064_265678.fix txn/fixtures/949d4e9006c7bbf556cbfe64f3ca79cbe22cf532_265678.fix -txn/fixtures/94a84d070472d13dca9af9296461de9b81f9e113_2221332.fix -txn/fixtures/9540d5519a7b8a396c11af193da622f784dc02fa_2234085.fix -txn/fixtures/9556232f5973c05d578503ac084b0156ce4ae3d7_2138087.fix txn/fixtures/956428fc38430d30cb22edf26ba80542acce9339_265678.fix -txn/fixtures/956ad9bc866cb9d551164237ff9f0d67eff659ac_265678.fix -txn/fixtures/957e385290b6017114a5149d31f1d00b933c5720_3797072.fix -txn/fixtures/958bcd60f7a900a4f949a0a3ff508f5d3998959a_2236417.fix -txn/fixtures/95b7a2682da775862e0b340f31dcd54fd540bd82_2188306.fix txn/fixtures/95d912ea8d8a58653de6cd8a0f16f49d3f4038c2_2227306.fix txn/fixtures/960a60819a97603e9a0c25bc685dcc763a68e354_265678.fix -txn/fixtures/9637817a6e84ee119f2cf9bc0f67eca55cb854f8_1576517.fix -txn/fixtures/96667844a017a9683579701c9729a785033fe1bd_2222925.fix txn/fixtures/966a8c2f18dd17ea576f94e4a7da80b3559703cf_265678.fix -txn/fixtures/967a56c626295ab977509b9b1de4071149d0ff82_265678.fix -txn/fixtures/96bab751dc5d50498cbb7d9aa31cb6e753345a58_2191052.fix -txn/fixtures/96e96b42833daf17eac38e153ecd4b9ec9ab04fa_2215302.fix -txn/fixtures/96ead6c424d2293faaa4a18aaa08b6b36b2408e0_2223383.fix -txn/fixtures/97436d50242eab666f6aae1852d51931639c5dfc_2229544.fix -txn/fixtures/97af2ea11504d7b70857ff74f9064bdff5903710_2233996.fix -txn/fixtures/97c1ef81749aee9f47b2ed25662b375e329a21fd_2202085.fix txn/fixtures/97dc51b75e55e1c1af33d0925c44838813718f77_265678.fix txn/fixtures/97ffe9b7f2ce8f290e7d1d01c965556f7a9763da_265678.fix -txn/fixtures/981564bc827a78e002876742e4cf169510cfaa5e_2140336.fix -txn/fixtures/98239af4a564e08d182f6234eb1e1b8cc9a171d0_2202132.fix txn/fixtures/984baa813f1606d6479c11516b10f7de8f89612e_1842620.fix -txn/fixtures/988afe5f920f6bac6d406123facf2456be8eb405_2229336.fix -txn/fixtures/98b9aa3bd1374c51e2b4fcbb5b853ab9aa93eea9_265678.fix -txn/fixtures/98d6f444249d770ae599ac4e2a8840b572537a94_265678.fix txn/fixtures/98eb1074e63d8b58177e11a50c923fc570067f7c_1854915.fix txn/fixtures/992dfbbb645a7fcfbc9a4575cc2830d0b4d6ba78_265678.fix -txn/fixtures/9943f7985e5196e6557d50b6dabfec809ca4d5f6_2225625.fix txn/fixtures/9944301b7524436b6c4a3593e5227b24d7c914de_265678.fix txn/fixtures/9965b274907774946fead0a151a97d25c7edd11e_265678.fix -txn/fixtures/996e4ac914ce99defe8e9bf58f8c07e7b212d9c0_265678.fix -txn/fixtures/9982e88d840820930df06abce5c966586e124e83_2195579.fix txn/fixtures/99ee8af617f83582b79a4f7fe9a25a4ff4e02f9e_2218034.fix txn/fixtures/9a33a5127465a3a906f9ab2cde5d68b2345ac621_265678.fix -txn/fixtures/9a5c2e058d902fc5aa77496634ccc28cd56fc01b_2134299.fix -txn/fixtures/9a9d57d07a330e6e442fa17d4b3a43e5b1a61ee3_1575980.fix -txn/fixtures/9aaa7ffa91acf384ff395794675be0da19501553_2223566.fix -txn/fixtures/9ab0a5d693b66a50156530b0760bfc22121ac758_265678.fix -txn/fixtures/9ab74082782b2918447ac95f8f43f5f6b2fb7c86_2140964.fix -txn/fixtures/9adb940c604a638d23c294b86ba52307358fac3a_835176.fix -txn/fixtures/9adcdd1a2bb003aeb8e4c24b47c5944b0df4be21_2137266.fix -txn/fixtures/9b7344ee4323350e7c555e0be7ff41d780df6a1b_2216155.fix -txn/fixtures/9b764649723ceb97dc30207fbc75d494e95341a3_265678.fix -txn/fixtures/9b9904644837f830bc3c5db98ed57b35f3915dff_557019.fix -txn/fixtures/9bc8edfe20aeba2e4f3372564d44bd001cebce94_2186085.fix txn/fixtures/9be1ddb02934e8c8876427e2b074a5051f713a32_1656662.fix txn/fixtures/9bfd3a5cfe04a0f19db993a69c49db9ae68306de_265678.fix -txn/fixtures/9bfecb68a81ed598659b354481f007daebd4d320_2133871.fix txn/fixtures/9c101efd73be6fa697ef18cec7a7a2ea73b2ad92_265678.fix txn/fixtures/9c42ab0d666a2d86cb138bf0e972e845666782a1_2448028.fix txn/fixtures/9c4744e8ab21187c9a833fe102123194036c2aea_3205227.fix -txn/fixtures/9c484d2e4ebc38c3aa587815a4816a8247cbfeb7_1576203.fix -txn/fixtures/9c5bbb98ec702987dbfb0bfc40d9c4a93d4d6420_2139318.fix -txn/fixtures/9c8282330af13e7b22315b9650e0bd217d41966a_2209507.fix -txn/fixtures/9c908a4fa99dfbebd21f89f838f950d95b3a66a1_2074259.fix -txn/fixtures/9cd795c045b558c5fa7c2a05705b76fc975c9c31_2202696.fix -txn/fixtures/9cdac405a51390d2613f9b17fe57266b6daa3d80_3589182.fix txn/fixtures/9d25474605a1502c2af0d475f20f05f85b59e08a_1837332.fix txn/fixtures/9d334c05245486e8c1654a6e90d02f6b906ac16d_2224447.fix -txn/fixtures/9d3bca440908b0e9719a1fae0549837fa76b1593_2201490.fix -txn/fixtures/9d45f7478d50b40dd4883e5eb4970b075a5deb45_2042655.fix -txn/fixtures/9d45f7478d50b40dd4883e5eb4970b075a5deb45_3293287.fix -txn/fixtures/9d592d64c59df693e6d85a11878a62d5a06bb53e_2204524.fix txn/fixtures/9d763cea6739a560ce16ef2f9d47812c00aec14a_265678.fix txn/fixtures/9da3a0d88d15613311e43d03cb97e28961bdca77_3938735.fix txn/fixtures/9dacaaaf67b58eb8428385fc80972cd1f7f74260_265678.fix -txn/fixtures/9dbe0999856f2e886d071ce69afdf317e47a6d60_3131989.fix txn/fixtures/9de7ab82ca6cdc4682b90b83817d16f2b8352055_2615889.fix -txn/fixtures/9e681cece315163a4880e5881bfcb8e1be20d3ed_2198511.fix -txn/fixtures/9e8302286c2c40e33dbe9a5ee98ddebf08af3885_2195490.fix -txn/fixtures/9ea1efc3e53029954030db5abf036e46ced8a418_2223451.fix txn/fixtures/9ea30f4e4322436a1907dee4386a54aa8c3c6342_265678.fix txn/fixtures/9ef3e3da9e83e89a6103c47662eac41319cb8f33_265678.fix -txn/fixtures/9f337b34ca9bed5d03c8dcc470066a91eb301789_2213107.fix txn/fixtures/9f5dc60538461eabfac70cf55b7e189b4d555ec4_2217168.fix txn/fixtures/9f6aded852cd5c2e18781c96ee7aeb35e477488e_265678.fix -txn/fixtures/9f726f5e9b4b07c32444c5d0059a2da43a2598a3_2211478.fix txn/fixtures/9f8e3d308c0fe43e6f5d206f31ad06ea77bea086_265678.fix -txn/fixtures/9f9d8e50903a0e8f217c470f4f190fdf06c29843_2203491.fix -txn/fixtures/9fdc7d9abf25a133afa7c6d8df48fe28588bd96c_2201292.fix -txn/fixtures/9fe8d7e0e37d5e5b0105a2aeea17d230a295086f_265678.fix txn/fixtures/9ffed8987dadd85def2958630f594c548af92109_3007559.fix txn/fixtures/a0251685f9005a675c8884c0d5697eb2d7b5d6d0_265678.fix txn/fixtures/a0493bd790f7fc25011b4914267fc85ca3adce9b_265678.fix -txn/fixtures/a063e4734a8f1fc28de403afeb8ea8743acb0197_2218145.fix txn/fixtures/a09a21c6bd330007c4f9d6cf15c5e3d335c32dd7_265678.fix -txn/fixtures/a09dbadbd8b30b73d8dec05078804e153c4f12ac_2209308.fix txn/fixtures/a0a419811c5782d53b3416e82c9306e5cfdaad8a_265678.fix -txn/fixtures/a0ed96ea38356abac3f3664092a4278ff9beafe4_265678.fix txn/fixtures/a123f7a195b3d3ce6451873414b3fe266731911a_1851874.fix txn/fixtures/a14bfb3f634cbf09a8ac7856268969af33160902_265678.fix txn/fixtures/a168407284fd50b5018df8487130ee36fc443fa7_265678.fix -txn/fixtures/a16e8867e274a5fc2b9a0e6c4fa9f2f72335ec58_2204587.fix txn/fixtures/a174d16d3f9ceb53c864c959f95624239f06f2ea_265678.fix -txn/fixtures/a1ba0759408ca2b34d903f2d26d22cce1d393dc0_2212721.fix -txn/fixtures/a1ce806bcf467692d7d2571fdd1e0294b6234f24_265678.fix -txn/fixtures/a1f33a08e884b7f10c5693da3d2830c51eae2f8a_620732.fix -txn/fixtures/a21bd03805fca011a9e029f88a62890821052ca0_265678.fix -txn/fixtures/a22c9bc3be7cc45b3f71df8e906a314c4a6dd497_265678.fix txn/fixtures/a23874e785cdbacabcb9bd2914e5ff5fcf18a87d_265678.fix txn/fixtures/a245b59067f0aa296a84a3934851a025c5cc996f_3203269.fix -txn/fixtures/a27af35c1a915be8e46de7238c7c654c1fb951e1_2924435.fix -txn/fixtures/a290331b81d89c4d4144da829765ebfa04e18bd7_265678.fix txn/fixtures/a297b88b2bd727731cb0c628a545fbf97f46b508_265678.fix -txn/fixtures/a29d854dc11982ca4a79cf0c1f6d92bf862a8679_756044.fix -txn/fixtures/a2cbdeaf5b952e7f0faff67f7d0e8a14493583da_2222691.fix txn/fixtures/a2ea969d9af56dc3ac5ebe3b7bfc2bd544fec487_3164284.fix txn/fixtures/a2eed62df8e13b5500bbb0a7f49d4b342f9f4891_265678.fix txn/fixtures/a32458016075b6fbd13e5700b3082378c710d02d_2253730.fix -txn/fixtures/a34a02236294d5bf9991c76b0531be233d329eec_2232473.fix -txn/fixtures/a387a01d9d033fad4bf565d5ce3e586ad6e00e42_2220518.fix txn/fixtures/a38efef875200c56f775e01b3509ee9f56bfc711_265678.fix txn/fixtures/a3939063e16c1035b03f8f108dbb9fd82b3d2c5a_2996796.fix txn/fixtures/a3990ca1f964fc6b79c3f92c7008e0554bd37773_265678.fix -txn/fixtures/a3a76204da057a268ce8f3a0972218c64b3a1e97_2214016.fix txn/fixtures/a3e8fb8a5c9a322a9fa40caac81929f6f1935107_265678.fix -txn/fixtures/a40603fb4684fb6b202c8f813e0443512ff519b0_2207229.fix txn/fixtures/a40a338847d331360470dc22de6d431944ef950c_3014147.fix -txn/fixtures/a45eba6fee665ffdd0fbe18ed70a3aaa7e4652b9_2206395.fix txn/fixtures/a4740b103e2330d19970231be0d6d071287a3be9_265678.fix -txn/fixtures/a49a5a6b5c4538ad6fd48e5f3dfc49b231e3c11a_2237427.fix txn/fixtures/a4d0e9e046fb776b700cf72eb673600cf6ff7749_265678.fix -txn/fixtures/a4e808f380f3b701935784ad1e538f525ad9cf69_2187706.fix -txn/fixtures/a53bccbacece873dda61d2eb0029b513dfcb111e_265678.fix txn/fixtures/a5d2949d14b6735be8c7e8eaf69c2c2519bc3559_1854165.fix txn/fixtures/a5dc9bd00330f535309d9e0643f1b14eb209d6ea_1120365.fix txn/fixtures/a5fef0435a9f27155d69151a2a0766baa27ca2d8_265678.fix -txn/fixtures/a601569ee602d390cb8852b59a367f581e688927_2233576.fix -txn/fixtures/a64c313c3ae65becb700330a915bc1ec3667b10d_2193782.fix -txn/fixtures/a6a71c9989114d5f2d2c8f6f360bb01e00e84f4a_2185400.fix -txn/fixtures/a6b104dd5656652fa1cc1cde1b401ea8c65e868f_2203030.fix -txn/fixtures/a6e291de8863cd2b15f0eb704de9c3c858aa8766_1211014.fix txn/fixtures/a6ffd1c4fc1ed23d32f4d1c5f8936d2786a539cb_265678.fix -txn/fixtures/a75f3eb611f9aa9c9cd33e0b55bb5cb1da5fa5ef_265678.fix txn/fixtures/a7727947178b8fac2f917d7eaf1b6cc5ff37aa1b_2792063.fix -txn/fixtures/a77481540ac4c1820e5b0a54488ef021a6e58484_2202576.fix txn/fixtures/a78c969442f248595fd935789d783e0c00708de1_265678.fix txn/fixtures/a7aaca3bc83b1708ea8d5c315e4fb2a36b4f4b8c_1851472.fix -txn/fixtures/a7b69d872882e315fd5956144e364bc2550fcae9_2206506.fix txn/fixtures/a7bab63207ecbaf045dbf1ed9ffee3ca93a1a391_265678.fix txn/fixtures/a7bb3a8e84d3497a8befdd47822777ca66041de7_265678.fix -txn/fixtures/a7d5e7a7aba47396c3e48871565105eb86e4f20d_265678.fix txn/fixtures/a7d93f93064d7e9a9c6e82dd9ca1086083575cd2_265678.fix -txn/fixtures/a80a479537d43336cb057d26044451df4427cd04_953063.fix txn/fixtures/a81b5ff9ac6a841103606d5c7aee49ba99d597b7_2867137.fix -txn/fixtures/a835e863fd97860a1b3bf64b95e1ee332feecd8d_2235649.fix txn/fixtures/a8608185b6a581863a5b0ffc21f53705acf9a0a4_265678.fix txn/fixtures/a8ab7fa2bd1c3fc851fbb5b7ffc2ecc1483ea788_265678.fix -txn/fixtures/a8cbb821ff61a22b37b1224699de072d31142f64_2206839.fix txn/fixtures/a8cc342d394594cae45077679e440cea785f932e_1841656.fix -txn/fixtures/a8d1700c2098ba988948cb0eb1c7726fba9e4ae0_2192950.fix txn/fixtures/a8d497234c17b71302e6c69c152e154ae6529ebe_2137938.fix txn/fixtures/a8fa9b8b6f6ec00b1fa5a6ba63eb2f89e0b2aa27_1856735.fix txn/fixtures/a904a43ce48b537fc40076ecee612957aa60b30b_265678.fix txn/fixtures/a90ce7e1a1ddf8dbebe23b5b8c00e5bc2afeccfa_265678.fix -txn/fixtures/a9458ed4c58689ac3960a8c6d5efe2732f37d000_2187132.fix txn/fixtures/a956670f73e382ab88d5669b1faba69bb6c85d49_2135809.fix txn/fixtures/a9577cb56e3b1d2e0d58557430856a42390cedf5_265678.fix txn/fixtures/a9599871b8c8f5bac68c17121d4bc7392846c5c4_3202563.fix -txn/fixtures/a9c1aff9846b1c233c8d58b713262ca5c79e4550_2196723.fix -txn/fixtures/a9c418bedda4da5701e994ac01bd92e3fee59a22_2227989.fix txn/fixtures/a9d5f7e1d981f9b638585a34214ce7cacecfee59_1852434.fix -txn/fixtures/a9f900d56a144f808d7460c739a2072fb461f167_148681.fix -txn/fixtures/aa3034f397fbe6fee7c85019213330e7ec7bc217_265678.fix txn/fixtures/aa33764c37be1a634272275976d05d8048c692d8_1835325.fix txn/fixtures/aa41354131885b471f301100e5a614a16b21cbc4_3139208.fix txn/fixtures/aa7aa005-ba12-4d08-935d-18ed0bc1a54f.fix -txn/fixtures/aa7d141613be95c71720e8b963c7da647f0f34d2_2221550.fix txn/fixtures/aa82f8da1905d69a5ba853c7ac842af94ef2d81d_265678.fix -txn/fixtures/aa906769a805e6a7925ca2875cc214338f10307b_2220717.fix txn/fixtures/aabe725582c114a80aa12a6e8f0aa8e5c3e5b59f_265678.fix -txn/fixtures/aaf7ee9e55c2a726e88b5c88aab8d305fc20d820_2236835.fix -txn/fixtures/aaf97517defc2e2db97f3012823a5d4414267976_211252.fix txn/fixtures/ab0cd6746e5848ce4abb59b14d082a8607333937_1855878.fix txn/fixtures/ab5c3fa4637768bd9c9f4f43db7fb14ba995cc51_265678.fix -txn/fixtures/aba2b160462cf5c546d0949568c35c7d04df5551_2227107.fix txn/fixtures/abbf8109e4ede5fbd0a1079d195314ff927c275c_265678.fix txn/fixtures/abd3e18d9c1672c7ab644be17ae30c921e72c4dd_1631283.fix txn/fixtures/abd602c02af29809a0066c80dc5e7b61e9388e58_265678.fix txn/fixtures/abe27fb52854fa72463de17307d83843d1718333_265678.fix -txn/fixtures/abede2cf45cf506a68c6e9a65cf1217afd4441e6_2188092.fix txn/fixtures/ac225589802c9c34e3f2186461321d856cb7fc5c_1830866.fix -txn/fixtures/ac65ea0bf61157d05cdb21ee20127e4d7160b738_2226315.fix -txn/fixtures/ac698fce02d36f47b5b339ed5eedb1ba26ea2731_2779656.fix txn/fixtures/acadfefa0956329a54adb9eb91bc155c5334aa61_1838493.fix txn/fixtures/acb16b5cdb6fd3c8c7f322672ecb3e157894962b_265678.fix txn/fixtures/acc3d0da8d7a81ad226de1e71d597a2318ab5c6a_265678.fix -txn/fixtures/acde359f51ed5413358f513fc0a1cfd3b5132439_2187506.fix -txn/fixtures/ad269580fbd23f6872fa7d10eee8702206bb4043_1575304.fix -txn/fixtures/ad738dc570e7c3b2c1b3e96b2e8478f9e6591db6_265678.fix txn/fixtures/ad79beb42586e725172728a7b74845423d776282_265678.fix -txn/fixtures/ad966d73682f0dcf15be55b460863ab6dbf73f3f_2222638.fix txn/fixtures/ada9c869b45e2a006b981f0471e53bacbb0d1e25_265678.fix -txn/fixtures/adc9f49557561027e9fa84ff12612d1d9b288d62_265678.fix -txn/fixtures/adf582063500f538fbdeb6e610190ef961f8ab2b_106421.fix -txn/fixtures/adf8ef9250b29d8fed73e95d293ab10683236a19_1574761.fix txn/fixtures/ae3625448cac01e396fc1ead34823c142753ef9e_265678.fix -txn/fixtures/ae47696e4c1a8d8d42c42a630ede23ea5ea4a22b_2190722.fix txn/fixtures/aeb7be2d6151d6a93a2cd0d207fb11c058e2211d_2616294.fix -txn/fixtures/aecd254cc98fbf08db88609faedbb95ec0f3e336_2211942.fix txn/fixtures/af03bba519a9f60bdecf50a3c372ad89d3a39fd2_265678.fix -txn/fixtures/af16e6da50d584c8a010721687c3db78f3d09207_2224982.fix txn/fixtures/afebff8c902c8e31d5f5102b38c778f92eb26676_1853402.fix txn/fixtures/afec50a336bda9ebb2b56367e9106bb624af9194_1835503.fix -txn/fixtures/b00be288107e230caf1472d925b65e7635141122_2996486.fix txn/fixtures/b0276762c6cba47ae691a295c3603ef0683f4a1f_1856367.fix -txn/fixtures/b061da04140fc615a93a0a41687793a7fd62810f_2195223.fix txn/fixtures/b0719e08e8c82925aa3cc63b95223a8695eca38d_265678.fix -txn/fixtures/b0acce9e67ff496843946ec4a0c3c869d2589a26_2188141.fix -txn/fixtures/b0b0faae4c7e900b541ef9afb64662a2ab6774ca_2222299.fix -txn/fixtures/b0f5395ba372ca15baa17f42396c4237003874d4_2221676.fix -txn/fixtures/b103740823013ec127f69cd3ed5bdb92f9f9c146_2238328.fix -txn/fixtures/b141cfac180e53166d04a873d59748b92fb5d2b9_265678.fix -txn/fixtures/b20b509a4ff667b846ade548ce3748613d2ad602_55476.fix -txn/fixtures/b218bdcd139a7cf6c6fe22f858257ce29422724b_2234424.fix txn/fixtures/b229e60b65b3cbabc79376c8bef9b6e63f470559_265678.fix txn/fixtures/b244ad13b1ec11f5a4a542f341628dcbb0bfbea5_265678.fix txn/fixtures/b252f2a3680a0649e9acad79001c028234000d0e_2301141.fix -txn/fixtures/b25f8636ce13e62edc9d427329136aceb8d3d635_588533.fix -txn/fixtures/b260f0c7b7a9a10335a260735b1c07dd22ac359a_1023477.fix -txn/fixtures/b29e4aa0c6ae56d47a6137b58f56543d6c87db22_2236812.fix -txn/fixtures/b2ee55dd7ea51baf9cfc845dd5885b4f67da03b1_703418.fix +txn/fixtures/b31c5eadb08cfc8f7e3a2a7efa42369096af717b_265678.fix txn/fixtures/b3494253f0ef28bad7ca69fc8ac69ed72b96c7ff_265678.fix -txn/fixtures/b38b3836232f206656a02b9b383d9cffa0b49daf_2187245.fix txn/fixtures/b3ab657f670b87a34b9ff134c1a38b2a20d984a9_1832301.fix txn/fixtures/b3bbc6a8c8603ab89b90af746e03109d2c65398a_265678.fix txn/fixtures/b3cc3555e363a989c715925a571d148feafd0002_265678.fix txn/fixtures/b3d260dd5aacdb5319382d353000bc15a472fed4_1831163.fix -txn/fixtures/b3d7d0209aa45cab544eb32076acfaa89cc33598_265678.fix txn/fixtures/b3e3ae1ab8167987442836c7e819c19f60423a3f_265678.fix -txn/fixtures/b4172383e08535a1fa588c004a480fe610557469_265678.fix txn/fixtures/b42a2e58be012e68b67ceacd5480374587bece87_265678.fix -txn/fixtures/b42cdfa63758982ee7f23c047c4af272e5c38019_2230005.fix -txn/fixtures/b432219bfd9c79bd65d80e61b0611067d27e7836_2185802.fix txn/fixtures/b44fc5a1c28ea957004f1ad472112a0d14b408e0_265678.fix txn/fixtures/b482790f6d484b541a42a50674aa8b34f83cacdc_265678.fix txn/fixtures/b48ebcded3e1c2cb73cdcf75b70b8ea5652366e9_265678.fix txn/fixtures/b49ee10e80e1b8f61cb8e921f05248887bf8f547_2210077.fix -txn/fixtures/b4a7194c9ecf535c55006d74c9fc1c752fc33d00_2206965.fix -txn/fixtures/b4f94ef949ea4075f6601e357c6ac10f8cc16b24_1576721.fix txn/fixtures/b505236338a0a915c5d7eee2b8bf30c610da3436_265678.fix -txn/fixtures/b5237d802601416bce59112a6ef45aa37f01a798_2207945.fix -txn/fixtures/b5665b69b27e0a8a4c63c71ba23acf795e0ae485_2226135.fix -txn/fixtures/b58a57e6325836c846a67484fa7175d0a0b39316_2194907.fix -txn/fixtures/b58b03cc4cb600ecac49e60d96861d67d8131403_2225022.fix txn/fixtures/b58fd1189fde031f8473768170db3d11e56ec7a8_265678.fix -txn/fixtures/b59bb607a0f26815c38e7c0f47c5eaafb01f18b0_1576002.fix -txn/fixtures/b5eb4ee4ade7149e45d83a9287d3d91b90488ad4_2212836.fix txn/fixtures/b5feb69c36929915f3d24aaa79cd5786eee5aad7_1047123.fix -txn/fixtures/b61a9838065fdd20deaedd0d10b5f3df2b5ee981_2188931.fix -txn/fixtures/b66640fd98db92bc3400ceb680b901a2c3dcc9a9_2371788.fix -txn/fixtures/b66a9ec7ce284b9a22f96d97fba28228600b1b13_2225814.fix txn/fixtures/b6b81e9ab5d516c42a7152204ad6e3b28413a1d4_265678.fix txn/fixtures/b6e26999a2dc85430d10904249e64fe8113c081a_1832048.fix txn/fixtures/b6f709b7dbe16143728231f44ab34890065180b2_265678.fix txn/fixtures/b7094bed14adc8b0f2866963ccf3a8ef1f9e8a62_2206152.fix txn/fixtures/b7154ce3c1b0551eb1fc8c35f7b6c829b2e3f34a_2232069.fix txn/fixtures/b726d4dd2f13ddbcbdcd977f13a10573a695f166_265678.fix -txn/fixtures/b736bb09f38fdf41b08d47531534c23b76e9b29a_2219446.fix -txn/fixtures/b76596504f34fb26cb37b243df72e9e72dad1652_2497025.fix -txn/fixtures/b76c76a782a448fb5bfd14a4e08d98e36475e660_2230271.fix txn/fixtures/b76dcdd0dea13818a4d41f338da23e8abfbe3a89_265678.fix txn/fixtures/b7cf2485b3389767b1fca4cb91dd126d0d56cdce_265678.fix -txn/fixtures/b7d3fc01357179113939e00139a14aa5acc53155_2230820.fix txn/fixtures/b7d6f98c38e149946bf6959d13766b691a983347_265678.fix -txn/fixtures/b7d8956145950269da4dc2215fd6f149d1261e0b_1768662.fix -txn/fixtures/b7ec07f28f39579f7f9a56ef6302fea4511d0627_2187356.fix txn/fixtures/b83466f32657d88db928d832406a5c3e24c60ba2_265678.fix -txn/fixtures/b8690714569a88494e3ac6576d034b5b028bf8fa_2192426.fix txn/fixtures/b8dbda1d6036163e8686f273c50f7e7d79c9cef0_265678.fix txn/fixtures/b91c038fe6bc76b330f4ae8719a9e8c47a8d28ed_434577.fix txn/fixtures/b95602a274d92106dacd2f1d0f22d6ac4c94d9fc_265678.fix -txn/fixtures/b95cf6fb13958e83ab2bd4795297a494b7c76912_265678.fix -txn/fixtures/b96ffb3e97e2b11b1152f6f545efd0d4bae6a845_2348767.fix -txn/fixtures/b9913a766078a8bd22e2849d1cf0dfbb39063c50_2208009.fix txn/fixtures/b9c08c8cfe2b40fcabdae79704badf91a84eed7d_265678.fix -txn/fixtures/b9c5f7dc430b2224b37845952c235167abf6ba4a_2191767.fix txn/fixtures/ba248607fae5fba35c2656e5b01e32f9a42a4f77_265678.fix txn/fixtures/ba37401858f4d85da859a6de290fb3df534fa692_1852911.fix -txn/fixtures/ba76c5fbc9aa19d917509c604f25a243fc7d651f_1576365.fix -txn/fixtures/bab08f3af7dbab2fcbf82cc7a99954bfd6d6cc41_3065625.fix txn/fixtures/bad36ca20e56895a7a76d3aef0637c4d7e9eee59_265678.fix -txn/fixtures/bafb490662615c8f7962bc795e92b79bb227ceb4_1836282.fix txn/fixtures/bb1514b0b0bded457d58d7ed4ca33c087d699522_265678.fix -txn/fixtures/bb577e5554fac9f2bf0503accfbbdceaf0e9d215_265678.fix txn/fixtures/bbcdc9d246f7a7af53e1683e9ee51599f1bf2513_2384774.fix txn/fixtures/bbd4f9ecf803917a5601d4fc0d296c21c830b17b_265678.fix -txn/fixtures/bc5c462477cd240edd5e54c08047a88dd6589331_265678.fix -txn/fixtures/bc5c58d6b35a2949d0c9dd19b218762bea81142c_2199653.fix -txn/fixtures/bc64ddd8115ea6afeedc32e0c1ee0215c5fbedb3_2221746.fix -txn/fixtures/bc735a10de64a96e4fdefea1b46ce593a5f90d55_1575236.fix -txn/fixtures/bc80522459895a00185dff33e118fca372c4037a_2215988.fix -txn/fixtures/bcab39533f49cdbf55806cd02dbe81a66beaeffc_3484135.fix txn/fixtures/bcaf8bda8d006cbd2a990bab60b3d4b6979b465f_1836368.fix -txn/fixtures/bcba66afa8dfed36da2c46f98fb637855f1936c9_2134503.fix -txn/fixtures/bd3bf70151801adff158e81f3857f5e962630727_265678.fix -txn/fixtures/bd4bcd0580be0555f68901dac0120f350b41efd9_2233072.fix -txn/fixtures/bd546efe97600e94cff93a9ea2ba8444b8119db6_2215964.fix -txn/fixtures/bd65963d457bed46fb973b89e14a3fca39de6d4e_2200564.fix txn/fixtures/bda25c4707cd2eebe4f419c1c9dd471d9efc5562_1856174.fix txn/fixtures/be03eae707522c8aa66619f3d4b6a9bb8de56c95_1831743.fix txn/fixtures/be54effdb9b437d6556a495352edb3fba9c1b949_265678.fix txn/fixtures/be5837c2047a37f4e55c4270c7fada6411cd4332_265678.fix txn/fixtures/be7d3d1be5f3ed8990bd26878b4e0797ddc3aa90_265678.fix -txn/fixtures/be90eae5c8a7d64886bbc104e7a5ee7ec0b63317_2237541.fix -txn/fixtures/bea4527b6b220cca9b8e72d94abd55abd7e3cd36_1834807.fix -txn/fixtures/bec0b8183f26795594296e34a5a661d3dccdbd95_2571163.fix -txn/fixtures/becb6dc2e088fc6dc1026e6aec37acc1d6cae62e_2226759.fix -txn/fixtures/bed0d69231abc22caf31aafd0e118a3209d4e047_2186395.fix -txn/fixtures/bf32aa3cfe329f5c7b09b9019ef5e10cc5d1daa9_265678.fix txn/fixtures/bf38557317a51fd1cf28a166cd03281b4faefe58_1855509.fix txn/fixtures/bf3e8690417c9a589b076490af2b71065a167000_2218057.fix -txn/fixtures/bf528474266fcbe2c69ae841513d2a954bdfde15_2709424.fix txn/fixtures/bf67cbf0a7bc9493111e07169d09ab78040acac8_2915173.fix txn/fixtures/bf70c3db4ecc7db10de91aec692078da50bd8612_2977975.fix txn/fixtures/bfb204da806798a7df5c644ed0673e3f47f3df57_1856450.fix @@ -1632,111 +955,57 @@ txn/fixtures/bfb3e350da06e5a312781b3537e13e99a6c38c78_3002710.fix txn/fixtures/bfc3633bdff93992fa40ece7a0f2ff4af13b7114_265678.fix txn/fixtures/bff99fcac94747973b69868afd6e91e25037e3d2_1849276.fix txn/fixtures/bffe818cdd14dd7fc9f9ca02d976b6f71b6accd8_265678.fix -txn/fixtures/c00520e8914e5dccc9c87c106f42f742de3ec96d_2117728.fix -txn/fixtures/c00520e8914e5dccc9c87c106f42f742de3ec96d_3421158.fix txn/fixtures/c042be7053c9a4c5c8a1feab4252e154af566ee0_265678.fix txn/fixtures/c075c3b2a659cbf9e0d2538f59aa7df0dbad149d_265678.fix -txn/fixtures/c0ac5a841d785e67e47aca17178ceade113f4684_2141164.fix -txn/fixtures/c0cfaba86d9bf1b8c74e16b8312c9db515c626eb_265678.fix -txn/fixtures/c0ee97b71789623f863297bcbe3e3c74fec72a44_265678.fix -txn/fixtures/c156072b35c0a553878a01779068c0a923bd06e1_265678.fix txn/fixtures/c17a04c4a8076bec11bfe18f6e744c8e832cf144_1836083.fix -txn/fixtures/c192c35b33a66d1972cacc31203ba039ef6b6ce1_2217672.fix -txn/fixtures/c1b52cfb2863dd6acf8c34b8b705dd8ed0f2d7dd_265678.fix txn/fixtures/c1c6d12e6c5716a12184061545754d2bfb780cb4_265678.fix txn/fixtures/c1db4d942a10e54fabeacb15073d53155e81b58a_1836186.fix -txn/fixtures/c1dd5672bfa76c2324bf5922af62a3225d49b5ec_2221792.fix txn/fixtures/c1ded97b3bc9f6048e0b4e6421ee9dacaf77902c_265678.fix -txn/fixtures/c1e01de7a9770959429c66b9ae579f82fe398573_265678.fix txn/fixtures/c1e09bbfc88aebe03940a5f15dbe71b79165a1cc_265678.fix -txn/fixtures/c1e2c857a92b2ff5f1aa5e51a20693b91197296e_2217880.fix -txn/fixtures/c1f2b190c3eaf4fb93927ad251d190b88f1c6677_265678.fix -txn/fixtures/c1f609463069ddb6a8afe08b2bdc34136d31ab0e_2217638.fix txn/fixtures/c21a5c0d662d100804ec121e3821116104e1999a_265678.fix txn/fixtures/c22980233dd93f6284f7ad0c28807230921f094e_3000928.fix -txn/fixtures/c296cc9e144168b08d78e01c77209ffb4ccfcdbb_2185170.fix txn/fixtures/c2af7a65c9310c7e5b3b4d5b3cb985ca6b025cd7_2774990.fix txn/fixtures/c2b2968bb09dc71bf2639298b41e86ba0d187850_265678.fix -txn/fixtures/c30f224e9a30678643e784cf1fa996b14f541fb3_1561270.fix -txn/fixtures/c31175fb55f752303d59b3c0612c2c775657924c_2133062.fix txn/fixtures/c311998190f56976677a90cda24585cb9fe186b1_1848259.fix txn/fixtures/c3319fc3a5c525a7612fb139ddd49862e01fd909_2766868.fix -txn/fixtures/c3f01a172cbca80f2e053bd2d9c1271503bffeb3_2235759.fix -txn/fixtures/c410b6825e8944c132f2b41bab2789c6abbf925c_2559509.fix txn/fixtures/c4346ae25821239908a8f6e74a0e29c1af5a339d_3006139.fix -txn/fixtures/c458f5ad466f17ed4df38cbd4b65d1b14c0436bb_2139657.fix txn/fixtures/c46cc5e2c437281feeff1c2f2c16e06d83336b7a_265678.fix -txn/fixtures/c48275dfeb009b479984a34963e55416df725fe0_265678.fix -txn/fixtures/c4b966bee83541361e68aa461893e6b34077e3fe_2226531.fix -txn/fixtures/c4c9c26a56cc116d8d226b573f30053a2a240f02_2134181.fix txn/fixtures/c4f74ded3df9536d06e38374686a8cf7222c209a_1851941.fix -txn/fixtures/c52ea9de2ecbca40898afbbd7f98d36c3cc267a9_2201925.fix -txn/fixtures/c56639f7c3b663bd35a2f6c7de191bde5f9d777e_2230294.fix txn/fixtures/c57bc335789bd447076e33771075e833c72fd796_1848503.fix txn/fixtures/c585119403b03894f99ab0d0041df9448e929205_1850781.fix -txn/fixtures/c5d3a9f3a922ddb10f3748f1deb75cefde37176d_2199850.fix txn/fixtures/c6041334df8c6bc91ee18ecd3e175e53348f70d6_265678.fix txn/fixtures/c63bec47eddf7ddb6b416d6928e3443cdbc611b0_265678.fix -txn/fixtures/c68b1e78bc3f4b90026683db1d5cdb1b730bbc89_2202651.fix txn/fixtures/c69c8d38cb12c777675383f75d318313a1ce31b3_265678.fix txn/fixtures/c6d66b4db956c98df4852b067b67c9d5b9da872c_265678.fix txn/fixtures/c6eedc180a6c3a0992431882164ae76f0fee35d6_2233755.fix -txn/fixtures/c75fb6655e8589277a373c2a651d8dd6363e5349_2237188.fix -txn/fixtures/c82be4c1bcdde1c8ad7bcc20a84ce7ee26a5112b_265678.fix txn/fixtures/c83d21cf81c61a0aa42c615229d689dd6b8440c2_265678.fix txn/fixtures/c8658cc65f128f42d665f3efed7b99c270ba47f4_265678.fix txn/fixtures/c8bf0f7748102bc79be99ba1c67863388557d17b_1856561.fix -txn/fixtures/c8f564d14b551967ec51844f0f3e1e2722082941_265678.fix txn/fixtures/c8fd2b6d8fcf9d207a5b1345110bbf89bec3a9a7_2999751.fix -txn/fixtures/c90721129f2a47a8f80b148c39456d761f4559a1_2223302.fix txn/fixtures/c90c6cea3563435591f4045003e8a51aab847076_1835612.fix txn/fixtures/c918bb96ff441a0d714b9462bc8ba30877e26eaf_265678.fix txn/fixtures/c98ff2bf209d7d9a17547a7542f36499045f4518_265678.fix txn/fixtures/c9938c58efc85910ebc637c1d5135195a7fe6d10_265678.fix txn/fixtures/c9d947883a85c84dbcf98bf6baba3d01d41bdebd_265678.fix -txn/fixtures/ca5d1f0ee58dc10f75f175306ae9ff0ced47edf4_1175377.fix txn/fixtures/ca6b9e098bf9489b685d017e2c01c1b96f685188_265678.fix -txn/fixtures/ca8c90210b052d6888bd851051923351fee16be0_2208874.fix txn/fixtures/cab41c4453c9760b32a6015be5823cce3750b032_2009105.fix -txn/fixtures/cac611f2933c12018849200153b147ceecf383cb_3220725.fix txn/fixtures/cb0b8581bc83230bd4d0875a85f184eef626ce01_265678.fix -txn/fixtures/cb5f3412432a98e54ccd339d2b24b06e459c4fd0_265678.fix txn/fixtures/cb7c310784c6bcb3830404c12f4fb4ce9a84b327_3000240.fix -txn/fixtures/cb895d89e77c2becac6bbec10e425bd0c8b5bed2_2205890.fix -txn/fixtures/cba5f8a65b322604233a840569cf62f80d258896_2219578.fix -txn/fixtures/cbacada66597bfddd4adcec50d4ad2db2c6cd893_1576274.fix -txn/fixtures/cbf118d4da64c0a96778149b1a8c16a193b96168_265678.fix txn/fixtures/cc3686dbf8bb4cdd514dd16d694d7cbbf25988ff_265678.fix txn/fixtures/cc508a9716a6ade28e2ee1f673df5acb8e9688b8_2989411.fix -txn/fixtures/cc5d315888cd940887fda54fb90ce37f0830a083_1835805.fix txn/fixtures/cc63407dda8f3c3c3d99b2c662e6fe9f3fd041c8_265678.fix -txn/fixtures/cc8f860b8918ac09e78cda014b53dfc742745e80_2491012.fix -txn/fixtures/ccc9bf0d22d6f4022ea085cb76f02276a9083d2f_265678.fix -txn/fixtures/ccdace62a98affc39a5e3270edaf8159d35a712a_2216353.fix txn/fixtures/ccfe521404a8a12e4b25213d14ff9d7c24e9710d_3199336.fix -txn/fixtures/cd1e9781e34a8ad9bcb2e91c3044b7cf567aee52_2200967.fix -txn/fixtures/cd292f978029dba73b216853f237d2cde760f24e_2193014.fix txn/fixtures/cd473f23d80528c126a6adae67dd4132d9b503cd_265678.fix txn/fixtures/cd519d1b2ddadcf61a520aac821870d498a52c4d_265678.fix txn/fixtures/cd54f58f05fc2ac4f43456379250e88507d82833_1833087.fix txn/fixtures/cd6d45668c14f68e45270e201e72eb4a9d817fb4_265678.fix -txn/fixtures/cd7ce7e0aaad913b48376baeaa63f1304b4f8645_2236699.fix -txn/fixtures/cd82349887c229d639ed5d2fcb4900dc62879b57_2188694.fix txn/fixtures/cd8c01ab2eb7b5e3fd3a63c82c063de0f3c4be75_2997918.fix txn/fixtures/cd9706a1a24c37cf52cc006240c98aae5bcf327f_265678.fix txn/fixtures/cda727e9e38a7d9e8b6ff1cc018c838e1d608766_2201875.fix -txn/fixtures/cdc18d1d94b88f93be3323cdae2c336ea10787ea_2235825.fix -txn/fixtures/cdc4886c7e152b2f8cecd99f0e06e2242281db87_265678.fix txn/fixtures/cdc58e567cf94ca25fd31398804c836a77d974b3_265678.fix -txn/fixtures/cde0aba3dc372cdbca12090d45e4348fda878f8e_2234448.fix -txn/fixtures/cde816b780419a4d58d76eb9d8feee7e2fa2eea5_2230623.fix -txn/fixtures/ce0dde03a4251c602ee9789741a53939539358bd_265678.fix -txn/fixtures/ce151e697f7e344c882b2e51eebaa96940fb8f0f_2232842.fix txn/fixtures/ce493409116b3034968abb608d798baece7f553e_1847499.fix txn/fixtures/cea9e470d627d36509718775fbe4b2585b9d44c1_2679940.fix -txn/fixtures/cf32965796a0889bb0629750f8048acb5226d0e2_1856051.fix txn/fixtures/cface980aaf3277ca198f5929758a342ed9b5ee2_265678.fix -txn/fixtures/cfd488bcca7b65a46bbf40b3032aaf938b834b57_2137035.fix txn/fixtures/cfedcab73fbc13b206765d606fac26c7044e028f_265678.fix txn/fixtures/crash-42295e53abb4382e2d579d46dcb1b20e63f030ea.fix txn/fixtures/crash-6aa10f902c19e5597dc9fe11011fc737554ffc51.fix @@ -1745,7 +1014,6 @@ txn/fixtures/crash-eb9e4a94882cda840fa4d8d8a390564ad7443ee2.fix txn/fixtures/d003f9a49feda90e7fd377e6080e3ef516d9ced3_1856840.fix txn/fixtures/d019aafb62dc199dfff9468ca530e954585eec8a_265678.fix txn/fixtures/d045c725a267e9e473f4cae7247d6249e240cbb6_1833571.fix -txn/fixtures/d04dead659937d163a1d59b63cc547a0bad7403a_2842250.fix txn/fixtures/d0515172499121ac3c4a13c5b0a9e3e60eeac571_265678.fix txn/fixtures/d06bb4ed4be81631209bb51839a79b2a449a95e1_1829555.fix txn/fixtures/d07b9d0ebc285fb6446aa45e14c69972a7e42cce_2842091.fix @@ -1759,12 +1027,7 @@ txn/fixtures/d1e8c681573c2c572eeb1e6321e3349e7ef51031_265678.fix txn/fixtures/d1eb9cbf0335e1067b6c603c5123b7700936f77b_265678.fix txn/fixtures/d1fc16a60abc1688286e7dbc07c1cea689c1afce_265678.fix txn/fixtures/d218932653918941ac3e0cde2e3b5d76360e70dc_2994121.fix -txn/fixtures/d21d9912ffddba17bf1b82589dcddad494f4c496_265678.fix -txn/fixtures/d2234d4fe42a95d545d1e150f225aebde632e1fe_2140712.fix -txn/fixtures/d24634b18fea9953947e1709c3597e34c44d6f7a_2226974.fix -txn/fixtures/d26e49b9fc387cd17b56bc844f5dc641b331ad82_3243370.fix txn/fixtures/d27324b608042c32b4951e9af57e7ea29aa1cda1_265678.fix -txn/fixtures/d27e321aa6b1cc8f2599964298ea62a23fc63f17_2199283.fix txn/fixtures/d2c0d0b9841a67a03f741cec08956b31911856bf_1842729.fix txn/fixtures/d2c26aa275901b3b99378d52c51e1592c1c23bee_1839239.fix txn/fixtures/d2d17b5bf0f89fd216a7555ce52764873503aff5_2910128.fix @@ -1772,317 +1035,161 @@ txn/fixtures/d2d392281aa3c02d60b4bcb45953778cb335bcf6_265678.fix txn/fixtures/d2e761165a773da374c28c98018a37ca82ccee6d_265678.fix txn/fixtures/d2eefb878243b325b5f36709173167cb90dbaf00_265678.fix txn/fixtures/d3022fba4650d088c5e41446263b702f84bfc132_1831655.fix -txn/fixtures/d32a1b05817beae22127ce6fe1b9629233eaa148_797948.fix -txn/fixtures/d3789502d65a950112283d31580968b381da92fd_2222875.fix txn/fixtures/d38e520cdf0dfaa9c740ecf23ecf71282814583d_265678.fix -txn/fixtures/d4040cf3cacdc0abc56fced29eebbe954701fd1f_2201692.fix -txn/fixtures/d451cbb684d0c8cc609dc2e56bd64148e51afd8f_2207320.fix txn/fixtures/d45ad4066b83dcfce4f76815c37d688554939ada_1846976.fix -txn/fixtures/d47c9f6b2d6dcf6682cb1ad4fc2cd659d065ed75_2139943.fix txn/fixtures/d4a36941742242d5ed5242bf2bc73ad10bbfb383_265678.fix txn/fixtures/d4a5ca366478576979ac7d454fa9b3a82e411642_2892039.fix txn/fixtures/d4af641fd573e18924936d96308e49ebd849da9d_2138001.fix txn/fixtures/d4ffef5761857e1accd03aea113f303d13f956de_265678.fix txn/fixtures/d51dec2e5afd8e8d70df365157d41da3856027f8_265678.fix -txn/fixtures/d557e5594fac29c13e7099db40cfa8e0c04e63a7_2534225.fix -txn/fixtures/d57806aa702c01c24536155827c9433f45f068c5_265678.fix txn/fixtures/d5954881b2be285da89643d9a32b78da1940fff1_1842443.fix txn/fixtures/d5dea7c1270fe458ac0106a37d7b3677b3397b58_1851366.fix txn/fixtures/d608421f8e583e766d30ccf57edb4e71c224a99d_2137433.fix txn/fixtures/d60e218900b3d0399145950c03b9e7af6759a66d_265678.fix -txn/fixtures/d64598aa423d5e4d513e43b8d5942f4f70c39fb0_2232640.fix txn/fixtures/d65476b929e61cb7210e51e0f1b69ed0ad694fd7_1840889.fix txn/fixtures/d6644312b1b53f4e870f12331edf4e72d35eb963_265678.fix txn/fixtures/d67f442716145cf5645900048f5d35466cc88ac5_1631585.fix -txn/fixtures/d6b6fadd854ddb28b1ac11c039b52632351b5d44_2234036.fix txn/fixtures/d701757011399fb1931ec091e274b3ec98918632_265678.fix -txn/fixtures/d7c578262cdf2afd6e748af130037c9db7716a9a_2223590.fix txn/fixtures/d7c5c60d776e0404f1a9798046e50968517d43d1_1838409.fix -txn/fixtures/d832625103030d36a787c6007598e6f7fb692f11_2139919.fix -txn/fixtures/d88b447d0e13d7f110967ba3626f8ca518611e2f_265678.fix -txn/fixtures/d8a244b826d7763acc8a6507ce0d85af1ecef208_2134273.fix -txn/fixtures/d8a8614f4189e62eb2530144e2de0c84a258203b_2136352.fix +txn/fixtures/d87b8396cc05f1fcef28210dfa7d47666f3165de_265678.fix txn/fixtures/d8b734400408fb9807ef8d5600f630d779deb29b_265678.fix txn/fixtures/d907c1029bcdcfb8e2cd95e40111e8328bfd9986_3193374.fix txn/fixtures/d982991cdb8f20554b0863f33082bd8db6c4b52f_265678.fix txn/fixtures/d992f06bad1c38a19359a816819ecab86de1b999_1857034.fix txn/fixtures/d9aa02c302851c9a420b315f8c9c1af5c8e6648c_3206196.fix txn/fixtures/d9acea42d3de342b8eec3577a62390cf57815fa8_1838018.fix -txn/fixtures/d9c0eb36ba8454a457ab8fdfdcde975136b59b09_2214471.fix -txn/fixtures/da2d1bcca559b099a1ef0fa36af6a6104b324521_2221398.fix -txn/fixtures/da35f8b205a9d5ed3afd48ed032ad77ed63fb3e8_2231412.fix -txn/fixtures/da3b731bff89d880fdf1279c23ad1184e35bc6c2_1286635.fix -txn/fixtures/da65b41f9652fd15b09d58fc502d7a4243104047_2135718.fix txn/fixtures/da6b4a8a98d554f0ae230a8a3c2c13d3b6075e4f_2435227.fix txn/fixtures/daa97727e7d5748b2a188334469154a8b7a18992_2998094.fix txn/fixtures/daac26c2fe7c40ca7556d351e1a87dcfa85dde5c_3191897.fix txn/fixtures/dab2655eeb2e7e99f65c094e5088fb6c884cbf9e_265678.fix -txn/fixtures/dab2b565b48b3b0f7a7c4b938fbeabcc20a6d7a1_265678.fix -txn/fixtures/dab489e0347ffc2452ee135567b76d1955200969_2222499.fix -txn/fixtures/dac5792b9132d855121afe8a8e19c61ac776dd42_2137545.fix txn/fixtures/dae43c79da7d10b3e83675b80ffd55d14d1b8c5a_3200465.fix txn/fixtures/dae7aeec32213220f68a6d56b64625d5ab0426a3_265678.fix txn/fixtures/daea754f668170f42ae2d5fb4e8a62ba4ecaf2a2_265678.fix -txn/fixtures/daf44b6489f5da2287fca09fe119b03b65e36d44_2229890.fix -txn/fixtures/db12f53b0f248b7aa3a3997f9dbf4df3a28ba163_265678.fix -txn/fixtures/db2249fb04f221dea35e2e3a53da96920095e4f8_2135961.fix -txn/fixtures/db51ea9e8886b7d952adf31e9b999301c02d7fdc_2220084.fix txn/fixtures/db5971c10cdd4cdecb9895d9f2e28020a7d1514c_2224115.fix -txn/fixtures/db59cdeb7f378160ef10daacd60aa9c322976c76_2140887.fix -txn/fixtures/db7bf6a029b7afb9e0be1fdab7aec1bda4669095_2188604.fix -txn/fixtures/dbacbf69856d061396061eb9a3f7bbe3cf50d592_265678.fix -txn/fixtures/dbcd953a1de4f0c8fc23b5f4d99c1211b5c177d8_2215031.fix txn/fixtures/dbe006a291127f1088f04191c5488405a6e6581e_265678.fix -txn/fixtures/dbe4d8d57cadd97968d5fae8859c867bdff0e2a4_2201580.fix txn/fixtures/dc1ec0a63c4f7e278ccf01a282dcca8c48fb07c5_3038936.fix -txn/fixtures/dc2b838fe1bee0d0a9de2017f86728580d0b7e79_265678.fix -txn/fixtures/dc5d4c30d28fa5f6c40c70bfa905a2008a36e8a1_2135176.fix -txn/fixtures/dc79bd4f81d95263af477b6cd6caaf3c6e5a9ec0_2215583.fix txn/fixtures/dc8b9f28a63b3f0215dec3934f016d0bc4f8dc5f_265678.fix txn/fixtures/dcb9b39a8b6de728f368f3915c77345117ca22e4_3192549.fix txn/fixtures/dd59f3bb3afc532e078305e56709598770984a69_265678.fix txn/fixtures/ddbd7995041398f16fff5edde9557503b3c4cac3_2911561.fix -txn/fixtures/ddbea25608aeeb6dd9fc4e29f72ac1fbcb1c2231_2234629.fix -txn/fixtures/dde764d9b8cbf56bab89dfe3d6932350c2579536_265678.fix -txn/fixtures/ddf726d7ca1ede2d601da9ed86ff81fdca5e0b91_265678.fix -txn/fixtures/de1a422e9adea7835af1e34a1c170942c3f5ad4f_2218209.fix -txn/fixtures/de2237d441e021251abb9ffcb9028a655d14f202_745641.fix txn/fixtures/de4ff0c6c28f94b9f827b69ec65ea6265333b11f_265678.fix -txn/fixtures/de57f9929afb10f70adc2ede00e8a3724f283e59_2205554.fix -txn/fixtures/de753577f0db9019d4f474c79b0fb715e765c0b5_2188219.fix -txn/fixtures/debb263f73ff1ef29f4b30f45468c6c0a6b78631_2133728.fix txn/fixtures/defc87ccadeccb8f59acdd89f4673130395245f4_265678.fix txn/fixtures/df3bcff81c202bc1fdc14567f2d24bf6888e4424_265678.fix txn/fixtures/df419995bee5356ab3c9c0b32c13a1d54f198e9b_265678.fix txn/fixtures/dfc4e91f6924adb421b44c8a311c4bc1a0d4dd90_265678.fix txn/fixtures/dfc9a4268f942a654738d31e68d8b352fdf6ca01_1839690.fix -txn/fixtures/dff3904e0f608cd955a4904a7fe09dff98638b21_2206890.fix txn/fixtures/e00ca6343f9bb435af5873e8fa398ad270aba864_265678.fix txn/fixtures/e027057bae1eb010f91924ba3887cf1cd0582e76_265678.fix -txn/fixtures/e02f153c35ace6df066b7d545947ffe10a05db17_2138490.fix -txn/fixtures/e08484341834df5bd92dac819b28ea8c213130cc_2137149.fix -txn/fixtures/e09b7c6ad5572e28a31ebaf0248de2cbd029faae_2190988.fix txn/fixtures/e0b50c9e64ddcf1333cdf66ce4a073e3e503cc27_1846044.fix -txn/fixtures/e0cee116100cc2ab1a878fddd7ce351ac2530552_265678.fix txn/fixtures/e123bcd0e0412c7af25cbc7b2c3b3f93959b2d1f_265678.fix txn/fixtures/e15471bd95ae1dc94a9fe8ed2f1a98c629d7237f_1852539.fix txn/fixtures/e183dcb487378b1f75beea0dbfe290a00a5ca145_265678.fix txn/fixtures/e1cd5ce2265d6ece11e3abf220474f0afc4e63b9_265678.fix -txn/fixtures/e1e00a488de829d5ee59ab8efa2816990fbf2491_787775.fix -txn/fixtures/e22b1c1ecb1a3a9dfe430f77886a3c98d701d889_2205667.fix -txn/fixtures/e24432d2ecd7178cf39b446774396420600bbbe3_265678.fix -txn/fixtures/e26592b4f9225feff17bb6225de8fc338d940ec6_2231012.fix -txn/fixtures/e2916f5512d6d1c6fd6b315324899aff55cd375e_2231940.fix txn/fixtures/e29593df28ff95101d9521ab7be574e17a7575af_1844412.fix -txn/fixtures/e297d0ebce4495e6c865d011cf0a00ad973d905d_2225749.fix -txn/fixtures/e2b8513ec43c240855f8d68ef048e401dff2eaf6_2199918.fix -txn/fixtures/e2caaa961ea02c52430d673e0a6f2de8a126784a_1658208.fix -txn/fixtures/e2d2d64a868f9e791228517f65d4478092daa1e6_265678.fix txn/fixtures/e2d2dcc0569bb9e6b3fcdfe870d442bb93aab252_265678.fix txn/fixtures/e2d4b640d33094c1d31af75ca76d21f5720252d3_265678.fix txn/fixtures/e3390ea8feb73c4e5d94fa6119c7cf7eda070f5b_265678.fix txn/fixtures/e393e0315b78cf99351f39a09778a821d4894476_265678.fix -txn/fixtures/e3ab56a7d81eb18d02984db8d7843702c22f8d36_3151515.fix -txn/fixtures/e3d6e8606ff1ea356a66ed8686d7a3eb3dfb1d4a_1574691.fix -txn/fixtures/e3f41ec09c173f542b66942448d9305b7a2dd3bf_2228453.fix txn/fixtures/e40387844fc1a98715f686caef8a43d790c4425a_265678.fix txn/fixtures/e40b8950d4fa05015bb55eca6844516f77f7e5e0_2941208.fix -txn/fixtures/e421f19abb1e9b6e7674643631687dfab1f9b847_2223253.fix -txn/fixtures/e4292a820e3b9a77b4f3104858ab74685ceb2606_3744127.fix -txn/fixtures/e42ae069b62626e3de8109e8dc4809551e68bd34_1574854.fix txn/fixtures/e4392e419498ecb05ac36f83e3e74a5c60c0526c_265678.fix txn/fixtures/e4473e9683d3b5f92fb260375b1a63793844d5a6_265678.fix txn/fixtures/e447bfcf38d7be9d28c994fe8cbd3ea09820acc5_265678.fix txn/fixtures/e4517f1093f03799afb5f004881dfaabebab452a_265678.fix -txn/fixtures/e472da2aecaf4bd0fc77335a0e3463b52236b231_2220258.fix -txn/fixtures/e48095afa712cd8ecd02038e6330edc50f4133f4_2192285.fix txn/fixtures/e49734a3631e43b94e5529d5b98d13398959394d_265678.fix -txn/fixtures/e4b92637e55a1dce50da7fcbfcbc14953f7a4521_265678.fix txn/fixtures/e4fd728ca62ec5bce2360a8d354b8cb002cbb0a5_265678.fix txn/fixtures/e52d51ce0cfd30e401db4051cdbd3fff6f8a2804_2964935.fix -txn/fixtures/e54e613fb6cab91a508bda54fff4d5ea2e238ee3_1777641.fix -txn/fixtures/e55cf56410eb8290be9d64bad9f1e84a56d8ea15_2141114.fix txn/fixtures/e5afe05e58c2cd6069c2025c8e7629dab5855eac_2219049.fix -txn/fixtures/e6380cd808c846cb6e181c6d4131b701f6be667d_2217256.fix txn/fixtures/e64213b2ceaf5d020ba7d09595e841a44bc2c0b9_265678.fix -txn/fixtures/e64db73461d71b598c0c80331aa7333b43ad2753_2226018.fix -txn/fixtures/e66c2d91f77f4454284bb4b2692876393dd14584_2235915.fix txn/fixtures/e67d6f2aaeef8bd379d31bfe5c215aa2bd14117e_1852174.fix txn/fixtures/e69c5574dfd0725d46ff5298c64c536b65abacaa_1834145.fix -txn/fixtures/e6acc1a474b1d5e4667171a81672475cce455dc7_2198574.fix txn/fixtures/e6e7c57455958c67bb46fa64b328b23b45dc9591_1832917.fix -txn/fixtures/e7079659d3d86799b30f57ec0084d9f623baf1ab_265678.fix txn/fixtures/e717efdf1f1e228b80b4be9881ad6ab31e090daf_265678.fix txn/fixtures/e75142d356abf68b6df0310b387da6faf9201fdd_3205374.fix -txn/fixtures/e76e543daaeb41fdc596e346e81c2b956d12ce35_265678.fix -txn/fixtures/e7c735f9fc02a6f3e19a6037d7c116bb33967dff_2226400.fix txn/fixtures/e7ea7ace535e604a8e6ee07cf791292490bd29e3_3882152.fix txn/fixtures/e7fcaf588511d4df2cb28332a5e921865c38e867_265678.fix -txn/fixtures/e83c152bdf596d886d2afef1561a256a66b34f1a_265678.fix txn/fixtures/e852802fb52344637279d37a5a04cefeb62c5b99_2325257.fix -txn/fixtures/e8a085aa17da2b92a692ba51e8f6ea887e9a38d9_2222062.fix txn/fixtures/e8b60fde5331ac70a2bf831fa0cab4a3e1d2dc26_2471891.fix -txn/fixtures/e8e647c255e74eadb162a0d4912753163cca983d_825646.fix txn/fixtures/e8ea5b9b7e2cbe6aa53f0812c4470942dcb9fb78_265678.fix txn/fixtures/e8fbf185dc68efcef012fea41848763e707cc413_3201250.fix txn/fixtures/e938ca42a183f2f7f781733b5ebca3221c022915_265678.fix -txn/fixtures/e95c9ed257223edc91c4952a2239fe1efd4c34f0_2202968.fix txn/fixtures/e95f75b80b04ab4c4fe6fd9e06c40597ad88ee8a_265678.fix txn/fixtures/e98937d918fb2a918901a0d04de498fc209a8dc6_2195134.fix txn/fixtures/e9908a2dd2428cdcf706d496218b3faa7d58038c_265678.fix -txn/fixtures/e9fb4469d21709e365b03f6c3012d77196ab3859_2214787.fix -txn/fixtures/ea209a40e6adceb80da9f190c175b95b2f80b8bb_2189752.fix -txn/fixtures/ea28d017f9170673a66a1cf449de0059bc0b6706_265678.fix txn/fixtures/ea4712553ea96d1145b4c66f12f7cb29d1aca394_2140488.fix txn/fixtures/ea47c21321d68f265c79a0acc1294acc43076971_265678.fix txn/fixtures/ea57e9f463aae3278135e23c73c10d5691ed64e8_265678.fix txn/fixtures/ea61f1835dbf6f41385197459b9396f66e3af963_2210014.fix -txn/fixtures/ea75d3cc5faa947e25a59672c6ae39f1bd92384b_2197391.fix txn/fixtures/ea94563416e931ab22d76c2105883e67194496ba_265678.fix -txn/fixtures/eaaef39d073d66ff03380a2684a983874c567c0a_2230534.fix txn/fixtures/eab33aee31ea83749d77e6d3c21cd4af49e5df84_265678.fix -txn/fixtures/ead2c462f0a037bf74636ec05b13acf108558e08_265678.fix -txn/fixtures/ead9a360b9fe6cbbb5cb355b93fab0688aecbdf2_2371838.fix txn/fixtures/eaeb369fbefe02715d92644aa5555b0b239d6446_265678.fix -txn/fixtures/eb2be78abee3f230175bf90adfc000d527692517_2228095.fix -txn/fixtures/eb99c22a65fe496a9bf60d8da27c265caef8bd66_265678.fix +txn/fixtures/eaed07290ea8722cb900e1e648ca5209fa35ef6c_3861880.fix txn/fixtures/ebf841db046ca9c4a57f90cfca539855eba0977e_265678.fix txn/fixtures/ec3d8f2c5948b8568d9849740793dc2d9ab84515_265678.fix -txn/fixtures/ec477bfaf09a23861b6ae6a78cd575bc579e9074_2213622.fix -txn/fixtures/ec555ca263807b927cefbe3b4b6756abc3b0698a_265678.fix -txn/fixtures/ec67988ceacde2ba12121488b90838b885733d55_265678.fix txn/fixtures/ec90abee6109cb2a03639c6983f59c7558d2fb64_265678.fix -txn/fixtures/ecea32e811f3ccb00fa2f7fd216e683a3015e9ec_2220494.fix txn/fixtures/ecf1ea8b73d75324afb0fa42a3aa0df802d51f31_265678.fix txn/fixtures/ed2369d375258e5aed27274afd39ae59709a4f47_1829047.fix -txn/fixtures/ed2ee4843ce3d3f1bc21bcd8bc1081e3baaa8ec8_2134119.fix -txn/fixtures/ed393fdfe69e13cd341174ea8cd4e53fbb17148b_2192500.fix -txn/fixtures/ed7aa83a7b4bbca017c1d0fce72fa1f2c188d88a_2224027.fix -txn/fixtures/ed7ca378fd105cfa94609a66fed88f379bc32a88_2184746.fix -txn/fixtures/ed90aca78589345e84dafbd47447aff7dccf9f87_2189089.fix txn/fixtures/edad747b6109c0ad6efa1db8b5460451b5d8b3b4_265678.fix txn/fixtures/edbbdf723b0be5c9024668bab5779bb025a807a8_265678.fix txn/fixtures/edee0cb5d4fd6c17bc45502ac9378fa9b417df25_265678.fix -txn/fixtures/edfc316d72e5ba6281912b939252adb25b4d90a0_2233136.fix txn/fixtures/ee2ecce434f7c18771c893900e8740f44429f544_265678.fix txn/fixtures/ee393422c6408be400b7213945089e8bdf6b8cd0_265678.fix -txn/fixtures/eeb47333ed17d6aefb652142b95698fa502d3921_2132994.fix -txn/fixtures/eed260fece1bb565257de227e42d5291dca50d1c_2209683.fix -txn/fixtures/eed3a02fe968e87f86c223081fccfa6f375918cf_2207167.fix txn/fixtures/eedf4d2a413d32ec7b1d95a019169b3299f95883_265678.fix -txn/fixtures/eefe9c483808f86de2413343ebd768b9fe88e369_2187026.fix -txn/fixtures/ef1bc683e28b16f43cedae362e9cca1129fafd3f_265678.fix txn/fixtures/ef238d9f14c9380df981a4c67c6056f569739824_1834062.fix -txn/fixtures/ef390f85a48ad6762bb81f44f038d98f20986f91_2231454.fix -txn/fixtures/efbe06239e1b44b8df29e49ed115803a11f40680_3476806.fix -txn/fixtures/efc9d384475916612c8b252428e4349db9ac4dc7_265678.fix txn/fixtures/efd07880abc0f819f691c070994d3a9acb7180f8_1851671.fix -txn/fixtures/efe1f9db1c748022a5440171695fd28ebc1fc691_2187420.fix txn/fixtures/eff2026a9c9c7760436c4ce2ee3d906793fa59c7_1834253.fix txn/fixtures/f02b5ec22b813446bef55acb766b95c97b0002a8_1829245.fix txn/fixtures/f0322421d97e91c1a247d6a978bae2e30b51dab3_2668441.fix -txn/fixtures/f04ce3acb468fca7af8e69369f33943387b4ef46_2136289.fix -txn/fixtures/f06df6fe25c9d6498e7e5bd38701fd991fdc1ac6_265678.fix txn/fixtures/f088197e32a9962841fadd500e298698819d5d08_1853773.fix txn/fixtures/f0af1710795c2e73d54587f1fe1212a456e33c74_1843784.fix -txn/fixtures/f0c4188f25e6614351ae9ced728a365f56b49344_2140568.fix -txn/fixtures/f0f002a77d217a344663164e32ea85242afc5a8a_2208220.fix txn/fixtures/f0f679e4bce01baa3745d5ea6e28a21d15abb79b_1857137.fix txn/fixtures/f16491d7aff4141c696e62a5930bf927f6e2ebd3_1838210.fix txn/fixtures/f1693553fc389b082034bc50cccf7136e4305821_1840815.fix -txn/fixtures/f1dbb649cd81b2cb87dbc1674ee34ea052c07615_2212056.fix txn/fixtures/f1f5ae718e6c516bc77597a263d702be81ebfd29_265678.fix -txn/fixtures/f1fd5f6313c0f07a6e882f6d54a02d10075d90ab_2188356.fix txn/fixtures/f249c20677a5d2deaf347f05c775508985c7297b_2224512.fix txn/fixtures/f27ff82d90ed714abf2f9d13595aa99854d1d9e0_265678.fix txn/fixtures/f2a8d33f38cb6e6c4cfb2f2379d4b8f3176f2b08_265678.fix -txn/fixtures/f2c045bf98cae7c50ea48429f504b00d1023230f_2191832.fix txn/fixtures/f316480b11b0cc5fccd44291e01bde6aeaa2f27e_1834356.fix -txn/fixtures/f31e5ba7b6ab1fb00c41ab5ee6152841fc414416_2211024.fix txn/fixtures/f34767af09d1315afbf8ea58ef9e55f419a685bc_1843964.fix txn/fixtures/f3e251951eae7fa0df103c1274285133d88e9a22_265678.fix -txn/fixtures/f3f28ba68155223af196e7fa77a1da1443396901_265678.fix txn/fixtures/f4049a08292d86241aa19174d29cbf4be1f39ac1_265678.fix -txn/fixtures/f435474fc8507b2d9e29943084489627c2243802_2133387.fix -txn/fixtures/f48d031c726432ee05ca1b5765ede9830723f996_265678.fix -txn/fixtures/f491e597cd2b6c2debd22d2b5eb7e09276994850_2187627.fix txn/fixtures/f497797b3b0d2db3732ce8537dd10e3452d8ea8d_265678.fix -txn/fixtures/f4c0c1e5d6c427188f8158a077f8cf2a61ec47e8_1576433.fix txn/fixtures/f4e1674f7530ea87a6690f64a6b7169e984ea604_3109805.fix txn/fixtures/f4f8b2177f282a7b2e6a7987db3dd1a4d2f12088_1834527.fix -txn/fixtures/f50d739b844ce1e4e4e6c22e98964953ed37d8f2_4091482.fix txn/fixtures/f53467ce68c50802f19b014cd28d869b6d3e685d_1828872.fix txn/fixtures/f5483a0e755d038bb69f147eb72aa9a597ffd2bc_265678.fix txn/fixtures/f59d49be39cccb052188429a81b3013b5c960f33_3196736.fix txn/fixtures/f5af9e09c07a3b146876d7dc68fb920affcc0a97_1854446.fix -txn/fixtures/f61ed517efc5ca22d5fbe8b221d7bd08a8fa24f3_265678.fix -txn/fixtures/f6251d91d67bf91b0070488337c1d5f9796535e2_265678.fix -txn/fixtures/f63bd0ca6be89b8cdca218093aec98024a5afdd4_2138514.fix -txn/fixtures/f673ed53492aa10b29ef10983b040dad971e2136_2134964.fix +txn/fixtures/f63a4f99c86c3fc2eb38ea2967912069fcee3dab_265678.fix txn/fixtures/f676dd9edc757e1aee2877e48a1b5101dd86d1ed_265678.fix -txn/fixtures/f6991461da3dc60085295ec0eb277313dfcd9d55_3176291.fix -txn/fixtures/f6cc0acf680584aa8ea273dfa6d39dac7f0c2aad_2194841.fix txn/fixtures/f719601ccfb15bf712d288eace02614d6e331d34_265678.fix txn/fixtures/f731c7a693492de08dca9d1b665ba3fb204c7218_3026660.fix -txn/fixtures/f7e8b2514f0065807be20ded62fa0ba033264a61_2218986.fix -txn/fixtures/f80fc0586b9890a9114eedb7366d85ce446940f1_2225422.fix -txn/fixtures/f83e46a5742b238887855d29cc2a647a8c8307c1_2226253.fix txn/fixtures/f891258625de17317435a72696dde4e3fc9d6cad_265678.fix -txn/fixtures/f8c15bca1a45d1ebfa2ed963970a47fabffc223d_2207392.fix txn/fixtures/f8d080f8f1b0183b3a0a2ba8c2133af468ec21d9_1837915.fix -txn/fixtures/f8e77b2bd4ee4abb21ff45fbba7cda7df33fe076_2224734.fix txn/fixtures/f9018bf41adcd5873c2e3b3f3cc9525602129f16_265678.fix txn/fixtures/f97796e04e5ee40275cee2a2c0864e38d98265d5_265678.fix txn/fixtures/f9951ecf8d10fb1b57a32873db65f935f3f9be90_265678.fix -txn/fixtures/f9965bbf979d30f1500d1e9207b37c51d736eaac_265678.fix txn/fixtures/f9a1706fcbda914b916cf461736cdfb84812d84e_265678.fix txn/fixtures/f9c508fb5bdac47495a2f6ec9799ba488620081f_1835221.fix -txn/fixtures/f9d4be065a891ea5425f1c4062e2aaa77716553e_2205376.fix -txn/fixtures/f9ddcabf1339d1863b76341e2a2a5a7bea577ca0_1576134.fix +txn/fixtures/f9eb2c60a09e520cfd8f878470c0281e0c176059_265678.fix txn/fixtures/fa0ecc5c29333b3b67c956ed2cdfbf7dd0d8e9f0_265678.fix -txn/fixtures/fa31e8f895daca8ea230397e2ddf2ff9aa1dce54_2222232.fix -txn/fixtures/fa3d19d72598681facddd866e3bf59e6b0636ec9_2197995.fix txn/fixtures/fa6b3dec42a222c6e5e3d34d5409b102cac4eec6_265678.fix txn/fixtures/fa7c3d5ec57cdcee9d5c54323333ac02d7f94cf0_265678.fix txn/fixtures/faa94a86ce1c305065c1eab52d5d9695d3d4bf12_2829813.fix -txn/fixtures/fab214f75ee912ae3bf793b7347b9d4ba02f048a_2235585.fix txn/fixtures/fb11218cc58e23d14b22c76807f0d3d1e0c606f1_265678.fix txn/fixtures/fb1305b2e30e46cc2a321004c061888e84953432_1657414.fix -txn/fixtures/fb2d5800eede46961d02720b5be07ef56656e240_265678.fix -txn/fixtures/fb53116db1e362b62c67f8f81cc566dca740e23d_2190061.fix -txn/fixtures/fbeb72667e388cfe67cdf9a91ee31c0b01395995_2197223.fix -txn/fixtures/fc8c2e44aba217ab65f7e195ead8c0e9bda49373_265678.fix txn/fixtures/fcfcf9a661e4d82c28fe17e00d27554d2f1093bc_265678.fix -txn/fixtures/fd150d2b5a3a8713784ed79dfa8b98e7cf210c4c_2225117.fix -txn/fixtures/fd3062337461cd7b48ff24ad9826d84fe27f2206_2928660.fix -txn/fixtures/fd3111a44bd96598a86c650675850d412327f17e_2238472.fix txn/fixtures/fd32cd96bf6f225072259a897a1fbe5ae7facf1a_265678.fix txn/fixtures/fd4262cdc8011b36f47747a0af84aaeb3f3650dc_265678.fix -txn/fixtures/fd724a627ce56654a7b76f260dfbf6b79513e838_265678.fix txn/fixtures/fd74fd3e5fd0c99f6770ebbb468cfd736376ede5_265678.fix txn/fixtures/fd910f14ef5f223816ea114d1af45c71cdf86945_1837630.fix -txn/fixtures/fd98c1db8e45ed558b7a7fcabb29c05fefa0589b_2205491.fix -txn/fixtures/fdab5bf79562845d98d2f9191a5a8ff8f832d7cf_473798.fix txn/fixtures/fdd3c7c7e8554b576cd42fc7c89f3fc5c8d0d658_265678.fix -txn/fixtures/fdff1a857c33a6cfdbddb7f7da7417e16efe6827_265678.fix txn/fixtures/fe009265742cc09bdb01b11bd3ff4dd66f8a925f_265678.fix txn/fixtures/fe025f048ce62e4f09120ecb8921c5b4872d8fa3_265678.fix -txn/fixtures/fe08bc273896031715970986c2708128f5518347_2187957.fix -txn/fixtures/fe1259519c5e3d71d608ba24f52ab4e287aef47c_2205998.fix txn/fixtures/fe1800f3e20c46279ef24fff750769952b086d7a_265678.fix txn/fixtures/fe387eae5fb59b16ba7083667b71bff167b93b32_265678.fix -txn/fixtures/fed84e9f0fb485a39cb0ec32f8268dcf352b7700_1085148.fix txn/fixtures/fee8af508b5fa32813192a6c18a77d4202f9ed47_3004369.fix -txn/fixtures/ff4fb4a5e74b7d8bcfe7bb7838867f0df719c9d2_265678.fix -txn/fixtures/ff50ab43edd76a3912bb23df6abeb620ff15c328_2225356.fix txn/fixtures/ff55e30c1878f181c358f1c0f4da68dd5844f381_1839594.fix txn/fixtures/ffa46950755b08e86d98c678d4ee042d59e4ef4d_265678.fix -txn/fixtures/ffdc55b81039969dd81e130f312ed9889468364c_2237040.fix -txn/fixtures/fff87aff2cbaee9cdb9489c98db0adcc0309b97f_2202462.fix txn/fixtures/is_signer_err_handling.fix -txn/fixtures/txn-21V6e59cxaU8WcB7RDqGoJqfzrP7gdUhvC9wAfokeRUdbyC7Wy2ML1ptinGWmyFbNazSDNZHCzxiUDXDGY18DRAM.fix txn/fixtures/txn-2vxNaM7VAooMJnt84LcbqfJRTaCrVcvHcDBw5JDeuTbsqYipAyLo2pfVtBEDFLCeczRcpKRHBfSgwC3MpMLTwVtR.fix -txn/fixtures/txn-3eDdfZE6HswPxFKrtnQPsEmTkyL1iP57gRPEXwaqNGAqF1paGXCYYMwh7z4uQDUMgFor742sikVSQZW1gFRDhPNh.fix -txn/fixtures/txn-3VZwmGFE78PAGbUV9SuPE4EgqAkB7kQLDuoE4iFNberYV3n4yPm37eedu8gmm7HRiogLUPRrZYRHqQSz6DZtbiKq.fix -txn/fixtures/txn-5V5uB8Ro1rVPmRJPH5Yhfxr5sPAXEFWGsA4d2YbBDaTEaJn6Key9VuCEvuRaZCi6ziBfAtRUH1shuma9SNqsHSKP.fix -txn/fixtures/txn-CA7V2nP2oagjGvqaqRRm7kyRpk2Q58gA3vFHQs7NvYv4Y6bNtoNX1xp5fuQPPL2ZNStqszAuGmDYfEG64BQhpKd.fix diff --git a/conformance/src/txn_execute.zig b/conformance/src/txn_execute.zig index 0cea72c950..5f4727e4fa 100644 --- a/conformance/src/txn_execute.zig +++ b/conformance/src/txn_execute.zig @@ -104,6 +104,7 @@ const TransactionInstruction = sig.core.transaction.Instruction; const TransactionAddressLookup = sig.core.transaction.AddressLookup; const AccountSharedData = sig.runtime.AccountSharedData; +const Clock = sig.runtime.sysvar.Clock; const ComputeBudget = sig.runtime.ComputeBudget; const EpochRewards = sig.runtime.sysvar.EpochRewards; const EpochSchedule = sig.runtime.sysvar.EpochSchedule; @@ -140,6 +141,9 @@ fn executeTxnContext( var accounts_map = try loadAccountsMap(allocator, &pb_txn_ctx); defer deinitMapAndValues(allocator, accounts_map); + const clock = getSysvarFromAccounts(allocator, Clock, &accounts_map); + const fixture_slot: Slot = if (clock) |c| c.slot else 10; + // TODO: use?? // const fee_collector = Pubkey.parseRuntime("1111111111111111111111111111111111") catch unreachable; @@ -440,11 +444,11 @@ fn executeTxnContext( account_store.reader(), ); - parent_slot = slot; + slot = fixture_slot; + parent_slot = slot -| 1; parent_hash = slot_hash; const parent_slots_epoch = epoch; - slot = 10; // Bank::new_from_parent(...) { // Clone epoch schedule @@ -506,6 +510,7 @@ fn executeTxnContext( // var new = Bank{...} // Create ancestors with new slot and all parent slots + try ancestors.addSlot(allocator, parent_slot); try ancestors.addSlot(allocator, slot); // Update epoch @@ -661,13 +666,13 @@ fn executeTxnContext( // }); // Remove address lookup table, stake, and config program accounts by inserting empty accounts (zero-lamports) - try account_store.put(slot, program.address_lookup_table.ID, .EMPTY); - try account_store.put(slot, program.config.ID, .EMPTY); - try account_store.put(slot, program.stake.ID, .EMPTY); + try account_store.put(parent_slot, program.address_lookup_table.ID, .EMPTY); + try account_store.put(parent_slot, program.config.ID, .EMPTY); + try account_store.put(parent_slot, program.stake.ID, .EMPTY); // Load accounts into accounts db for (accounts_map.keys(), accounts_map.values()) |pubkey, account| { - try account_store.put(slot, pubkey, .{ + try account_store.put(parent_slot, pubkey, .{ .lamports = account.lamports, .data = account.data, .owner = account.owner, @@ -784,6 +789,7 @@ fn executeTxnContext( error.InvalidAddressLookupTableOwner => .InvalidAddressLookupTableOwner, error.InvalidAddressLookupTableData => .InvalidAddressLookupTableData, error.InvalidAddressLookupTableIndex => .InvalidAddressLookupTableIndex, + error.InvalidAccountIndex => .InvalidAccountIndex, else => std.debug.panic("Unexpected error: {s}\n", .{@errorName(err)}), }); defer resolved_transaction.deinit(allocator); diff --git a/src/replay/resolve_lookup.zig b/src/replay/resolve_lookup.zig index dfef1c0180..dc0dffe21b 100644 --- a/src/replay/resolve_lookup.zig +++ b/src/replay/resolve_lookup.zig @@ -208,12 +208,11 @@ pub fn resolveTransaction( // construct instructions const instructions = try allocator.alloc(InstructionInfo, message.instructions.len); - errdefer { - for (instructions) |instr| instr.deinit(allocator); - allocator.free(instructions); - } + errdefer allocator.free(instructions); + + for (message.instructions, instructions, 0..) |input_ix, *output_ix, output_i| { + errdefer for (instructions[0..output_i]) |prev_output_ix| prev_output_ix.deinit(allocator); - for (message.instructions, instructions) |input_ix, *output_ix| { var account_metas = InstructionInfo.AccountMetas{}; errdefer account_metas.deinit(allocator); diff --git a/src/runtime/program/address_lookup_table/state.zig b/src/runtime/program/address_lookup_table/state.zig index 2df2280f68..1191e13e4e 100644 --- a/src/runtime/program/address_lookup_table/state.zig +++ b/src/runtime/program/address_lookup_table/state.zig @@ -72,7 +72,7 @@ pub const LookupTableMeta = struct { return LookupTableStatus.Activated; } if (self.deactivation_slot == current_slot) { - return LookupTableStatus{ .Deactivating = .{ .remaining_blocks = MAX_ENTRIES } }; + return LookupTableStatus{ .Deactivating = .{ .remaining_blocks = MAX_ENTRIES +| 1 } }; } if (slot_hashes.getIndex(self.deactivation_slot)) |slot_hash_position| { return LookupTableStatus{ From dff9e2c28f7709e2611c5eae5e692d9f58a115d8 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Thu, 26 Mar 2026 07:26:56 -0600 Subject: [PATCH 23/35] conformance(txn): use slot instead of parent_slot to increase test coverage --- conformance/README.md | 12 ++++++------ conformance/flake.nix | 1 + conformance/run.py | 2 +- conformance/scripts/failing.txt | 10 ---------- conformance/src/txn_execute.zig | 9 +++++---- docs/docusaurus/docs/code/conformance.md | 12 ++++++------ 6 files changed, 19 insertions(+), 27 deletions(-) diff --git a/conformance/README.md b/conformance/README.md index 4c97f6e90f..407f63c68a 100644 --- a/conformance/README.md +++ b/conformance/README.md @@ -21,11 +21,11 @@ zig build solfuzz_sig **Run the test vectors** ```bash -# run all -./run.py +# run all conformance test vectors +run # run only the transaction harness tests -./run.py txn +run txn ``` For customization, try `--help`. @@ -63,13 +63,13 @@ Then you can use some commands like these: ```bash # run the tests against agave -./run.py --exec-lib env/solfuzz-agave/target/release/libsolfuzz_agave.so +run --exec-lib env/solfuzz-agave/target/release/libsolfuzz_agave.so # create the fixtures based on agave, and run the conformance tests against sig -./run.py --create +run --create # re-run conformance tests against sig using your created fixtures -./run.py --use-created +run --use-created ``` # Interpreting results diff --git a/conformance/flake.nix b/conformance/flake.nix index 50c80e8983..41b2ac8060 100644 --- a/conformance/flake.nix +++ b/conformance/flake.nix @@ -74,6 +74,7 @@ python3.13 -m venv env/venv source env/venv/bin/activate + ln -sfn "$PWD/run.py" env/venv/bin/run cp -r ${solana-conformance} env/solana-conformance && chmod +w -R env/solana-conformance export SETUPTOOLS_SCM_PRETEND_VERSION=0.0.0 pip install -e env/solana-conformance[dev,octane] diff --git a/conformance/run.py b/conformance/run.py index 28d7b54e1a..223682eb0c 100755 --- a/conformance/run.py +++ b/conformance/run.py @@ -9,7 +9,7 @@ from collections import defaultdict -conformance_dir = os.path.dirname(os.path.abspath(__file__)) +conformance_dir = os.path.dirname(os.path.realpath(__file__)) try: from typer.testing import CliRunner diff --git a/conformance/scripts/failing.txt b/conformance/scripts/failing.txt index 21a66b2fc0..4592f0f401 100644 --- a/conformance/scripts/failing.txt +++ b/conformance/scripts/failing.txt @@ -271,7 +271,6 @@ instr/fixtures/zk_sdk/wacc9_d13848d723bd8cfa.fix txn/fixtures/006cec687919df8ddc4fd111e60e4864c7a94a79_2288978.fix txn/fixtures/00af752d1f13d997b80e291115dd08907fc04653_265678.fix txn/fixtures/00dc63d6f5824efa900302649eeca7983e5d3f5a_1834424.fix -txn/fixtures/01525f9b176afe344b3b13d9c245704c03de6914_265678.fix txn/fixtures/016b58bef3cbb526df4a67c91f1dffc67ca6f557_1840191.fix txn/fixtures/0179c4cbb9a7110eb246247ca09517720f960904_2194958.fix txn/fixtures/021f0cfecbd5edd05af52b24c1374d5dd13c36c0_3213804.fix @@ -426,7 +425,6 @@ txn/fixtures/2d40cc52c34c43e0d0892449975c182f432ff549_265678.fix txn/fixtures/2da4abe78a4359036ce483cfffe674c90842e02f_265678.fix txn/fixtures/2dd594dbbdb6e79776449d044f7319b76bf94044_1833391.fix txn/fixtures/2def7ed78f00b5b8711a0d56f8deccac74d93be4_3198238.fix -txn/fixtures/2e0b6b4bdce0a0777ceb576923cd1569448d21cf_265678.fix txn/fixtures/2e1941ee15c7450558deb720eed53c6ed76aadf7_265678.fix txn/fixtures/2e3931ae51ae0ea0b7a37e16a66b03a123e99864_1830012.fix txn/fixtures/2e410a98e6f0b614dce00964a7a2e60d9f764fb9_2987497.fix @@ -539,7 +537,6 @@ txn/fixtures/4950175f35249a55840c8b83e71c4c6deba13dad_265678.fix txn/fixtures/49a6c58383f9a9dc67be4993c2a0bbd41635ae14_1838771.fix txn/fixtures/49ea7ba14f1e59a2af50c0addd73b7c0e223ff28_265678.fix txn/fixtures/4ab2840c81a2bad348c7c5ecbb632148264f8950_3078035.fix -txn/fixtures/4bcac10abcace9b2242767bd07cdf4b9fe7e0e1e_265678.fix txn/fixtures/4c22e7041620180a4ba222efcf69f7d383dda955_1847179.fix txn/fixtures/4c550c66be5ede646574678fac7fb84852d1273b_265678.fix txn/fixtures/4c72f411b6b9a81b55c0dcb38ae2f5a7d3f9f897_1834934.fix @@ -749,7 +746,6 @@ txn/fixtures/850384bbd4d1b8c25de0c7516cc4b823801ee570_265678.fix txn/fixtures/858143e9c97c4c7ef351403f210cd5227c141dc1_265678.fix txn/fixtures/8584a658b6b81d0a7a3fa0487b7d98305cf2dc5d_265678.fix txn/fixtures/85a5e55185820b8351da3f707e12953740888fd9_1831549.fix -txn/fixtures/86038e7cce39589d23ec96f2155039ab705e0fe9_265678.fix txn/fixtures/86228fb07572aaf99c3261aef5a327dc946fab82_1836600.fix txn/fixtures/862d404d411a7e18ae753412e1740140d7db403f_3195704.fix txn/fixtures/86395b4225619c786adedc129b7704513e0bff4b_1844482.fix @@ -793,7 +789,6 @@ txn/fixtures/9099ec62e79fb957f8d6359194ad7ac034cecb10_1854074.fix txn/fixtures/90bfea1be486e29c8e1da62f4e28d28301223d6e_265678.fix txn/fixtures/915fa677a9682253190e56f106e396eef5f92c46_1835979.fix txn/fixtures/916400c914fa36225a1f05e1406a0f6697884ba1_3193722.fix -txn/fixtures/91751b8cfe5fb1e190f3188def8a34e5ae41f9b4_265678.fix txn/fixtures/91c096eb22aa1a690ed39be3d14963ab040d35d6_265678.fix txn/fixtures/92494c89701e7bcb6c4d706a5d9ac5cbc60f5da7_3001125.fix txn/fixtures/92515dde3244f54bba8913577e3b49c7b61e840a_3194372.fix @@ -905,7 +900,6 @@ txn/fixtures/b0719e08e8c82925aa3cc63b95223a8695eca38d_265678.fix txn/fixtures/b229e60b65b3cbabc79376c8bef9b6e63f470559_265678.fix txn/fixtures/b244ad13b1ec11f5a4a542f341628dcbb0bfbea5_265678.fix txn/fixtures/b252f2a3680a0649e9acad79001c028234000d0e_2301141.fix -txn/fixtures/b31c5eadb08cfc8f7e3a2a7efa42369096af717b_265678.fix txn/fixtures/b3494253f0ef28bad7ca69fc8ac69ed72b96c7ff_265678.fix txn/fixtures/b3ab657f670b87a34b9ff134c1a38b2a20d984a9_1832301.fix txn/fixtures/b3bbc6a8c8603ab89b90af746e03109d2c65398a_265678.fix @@ -1051,7 +1045,6 @@ txn/fixtures/d6644312b1b53f4e870f12331edf4e72d35eb963_265678.fix txn/fixtures/d67f442716145cf5645900048f5d35466cc88ac5_1631585.fix txn/fixtures/d701757011399fb1931ec091e274b3ec98918632_265678.fix txn/fixtures/d7c5c60d776e0404f1a9798046e50968517d43d1_1838409.fix -txn/fixtures/d87b8396cc05f1fcef28210dfa7d47666f3165de_265678.fix txn/fixtures/d8b734400408fb9807ef8d5600f630d779deb29b_265678.fix txn/fixtures/d907c1029bcdcfb8e2cd95e40111e8328bfd9986_3193374.fix txn/fixtures/d982991cdb8f20554b0863f33082bd8db6c4b52f_265678.fix @@ -1123,7 +1116,6 @@ txn/fixtures/ea61f1835dbf6f41385197459b9396f66e3af963_2210014.fix txn/fixtures/ea94563416e931ab22d76c2105883e67194496ba_265678.fix txn/fixtures/eab33aee31ea83749d77e6d3c21cd4af49e5df84_265678.fix txn/fixtures/eaeb369fbefe02715d92644aa5555b0b239d6446_265678.fix -txn/fixtures/eaed07290ea8722cb900e1e648ca5209fa35ef6c_3861880.fix txn/fixtures/ebf841db046ca9c4a57f90cfca539855eba0977e_265678.fix txn/fixtures/ec3d8f2c5948b8568d9849740793dc2d9ab84515_265678.fix txn/fixtures/ec90abee6109cb2a03639c6983f59c7558d2fb64_265678.fix @@ -1160,7 +1152,6 @@ txn/fixtures/f53467ce68c50802f19b014cd28d869b6d3e685d_1828872.fix txn/fixtures/f5483a0e755d038bb69f147eb72aa9a597ffd2bc_265678.fix txn/fixtures/f59d49be39cccb052188429a81b3013b5c960f33_3196736.fix txn/fixtures/f5af9e09c07a3b146876d7dc68fb920affcc0a97_1854446.fix -txn/fixtures/f63a4f99c86c3fc2eb38ea2967912069fcee3dab_265678.fix txn/fixtures/f676dd9edc757e1aee2877e48a1b5101dd86d1ed_265678.fix txn/fixtures/f719601ccfb15bf712d288eace02614d6e331d34_265678.fix txn/fixtures/f731c7a693492de08dca9d1b665ba3fb204c7218_3026660.fix @@ -1171,7 +1162,6 @@ txn/fixtures/f97796e04e5ee40275cee2a2c0864e38d98265d5_265678.fix txn/fixtures/f9951ecf8d10fb1b57a32873db65f935f3f9be90_265678.fix txn/fixtures/f9a1706fcbda914b916cf461736cdfb84812d84e_265678.fix txn/fixtures/f9c508fb5bdac47495a2f6ec9799ba488620081f_1835221.fix -txn/fixtures/f9eb2c60a09e520cfd8f878470c0281e0c176059_265678.fix txn/fixtures/fa0ecc5c29333b3b67c956ed2cdfbf7dd0d8e9f0_265678.fix txn/fixtures/fa6b3dec42a222c6e5e3d34d5409b102cac4eec6_265678.fix txn/fixtures/fa7c3d5ec57cdcee9d5c54323333ac02d7f94cf0_265678.fix diff --git a/conformance/src/txn_execute.zig b/conformance/src/txn_execute.zig index 5f4727e4fa..a0372137c2 100644 --- a/conformance/src/txn_execute.zig +++ b/conformance/src/txn_execute.zig @@ -666,13 +666,14 @@ fn executeTxnContext( // }); // Remove address lookup table, stake, and config program accounts by inserting empty accounts (zero-lamports) - try account_store.put(parent_slot, program.address_lookup_table.ID, .EMPTY); - try account_store.put(parent_slot, program.config.ID, .EMPTY); - try account_store.put(parent_slot, program.stake.ID, .EMPTY); + // TODO: investigate: agave uses parent_slot here, but that causes more test failures in our code. + try account_store.put(slot, program.address_lookup_table.ID, .EMPTY); + try account_store.put(slot, program.config.ID, .EMPTY); + try account_store.put(slot, program.stake.ID, .EMPTY); // Load accounts into accounts db for (accounts_map.keys(), accounts_map.values()) |pubkey, account| { - try account_store.put(parent_slot, pubkey, .{ + try account_store.put(slot, pubkey, .{ .lamports = account.lamports, .data = account.data, .owner = account.owner, diff --git a/docs/docusaurus/docs/code/conformance.md b/docs/docusaurus/docs/code/conformance.md index 4c97f6e90f..407f63c68a 100644 --- a/docs/docusaurus/docs/code/conformance.md +++ b/docs/docusaurus/docs/code/conformance.md @@ -21,11 +21,11 @@ zig build solfuzz_sig **Run the test vectors** ```bash -# run all -./run.py +# run all conformance test vectors +run # run only the transaction harness tests -./run.py txn +run txn ``` For customization, try `--help`. @@ -63,13 +63,13 @@ Then you can use some commands like these: ```bash # run the tests against agave -./run.py --exec-lib env/solfuzz-agave/target/release/libsolfuzz_agave.so +run --exec-lib env/solfuzz-agave/target/release/libsolfuzz_agave.so # create the fixtures based on agave, and run the conformance tests against sig -./run.py --create +run --create # re-run conformance tests against sig using your created fixtures -./run.py --use-created +run --use-created ``` # Interpreting results From d2ec02ec58ab9f21ec5a1ee80e2cfd7ffdecac9a Mon Sep 17 00:00:00 2001 From: InKryption Date: Thu, 26 Mar 2026 23:05:00 +0100 Subject: [PATCH 24/35] Fix PRO bug causing panic There was a work-around for this already, but apparently it was insufficient. Also moves the assertion below the index into the `dedupe_map`, so that if this was to go OOB again somehow, the panic includes the actual index and the length it went over. --- src/runtime/executor.zig | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/runtime/executor.zig b/src/runtime/executor.zig index e06eeefc45..0fe5a3f076 100644 --- a/src/runtime/executor.zig +++ b/src/runtime/executor.zig @@ -284,7 +284,7 @@ pub fn prepareCpiInstructionInfo( std.debug.assert(prev.index_in_transaction < InstructionInfo.MAX_ACCOUNT_METAS); const new = prev.*; // this avoids a bug caused by Parameter Reference Optimisation (PRO) - try deduped_account_metas.append(tc.allocator, new); + (try deduped_account_metas.addOne(tc.allocator)).* = new; // this is also needed to avoid the PRO bug } else { index_in_callee_ptr.* = @intCast(deduped_account_metas.items.len); try deduped_account_metas.append(tc.allocator, .{ @@ -297,9 +297,8 @@ pub fn prepareCpiInstructionInfo( } for (deduped_account_metas.items, 0..) |*account_meta, index_in_instruction| { - std.debug.assert(account_meta.index_in_transaction < InstructionInfo.MAX_ACCOUNT_METAS); - const index_in_callee = dedupe_map[account_meta.index_in_transaction]; + std.debug.assert(account_meta.index_in_transaction < InstructionInfo.MAX_ACCOUNT_METAS); if (index_in_callee != index_in_instruction) { if (index_in_callee >= deduped_account_metas.items.len) return error.MissingAccount; From aa8831fbfc55efdfea2d6fcd78f6c7df82af1332 Mon Sep 17 00:00:00 2001 From: InKryption Date: Thu, 26 Mar 2026 23:31:00 +0100 Subject: [PATCH 25/35] Remove fixed fixture from the failing list --- conformance/scripts/failing.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/conformance/scripts/failing.txt b/conformance/scripts/failing.txt index 4592f0f401..f6c6958d84 100644 --- a/conformance/scripts/failing.txt +++ b/conformance/scripts/failing.txt @@ -1182,4 +1182,3 @@ txn/fixtures/fee8af508b5fa32813192a6c18a77d4202f9ed47_3004369.fix txn/fixtures/ff55e30c1878f181c358f1c0f4da68dd5844f381_1839594.fix txn/fixtures/ffa46950755b08e86d98c678d4ee042d59e4ef4d_265678.fix txn/fixtures/is_signer_err_handling.fix -txn/fixtures/txn-2vxNaM7VAooMJnt84LcbqfJRTaCrVcvHcDBw5JDeuTbsqYipAyLo2pfVtBEDFLCeczRcpKRHBfSgwC3MpMLTwVtR.fix From d398daa369e5d741816e41d28cfd78c47c9175ee Mon Sep 17 00:00:00 2001 From: InKryption Date: Fri, 27 Mar 2026 16:06:15 +0100 Subject: [PATCH 26/35] Pre-allocate space to fully deter PRO bug Previous fix did fix behaviour in the tested build modes, but could still potentially result in a similar or the same kind of bug given different optimization heuristics. This solves the problem definitively by avoiding potential invalidation of the `prev` pointer entirely. --- src/runtime/executor.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/runtime/executor.zig b/src/runtime/executor.zig index 0fe5a3f076..3ad9aa691c 100644 --- a/src/runtime/executor.zig +++ b/src/runtime/executor.zig @@ -278,13 +278,13 @@ pub fn prepareCpiInstructionInfo( const index_in_callee_ptr = &dedupe_map[index_in_transaction]; if (index_in_callee_ptr.* < deduped_account_metas.items.len) { + try deduped_account_metas.ensureUnusedCapacity(tc.allocator, 1); const prev = &deduped_account_metas.items[index_in_callee_ptr.*]; prev.is_signer = prev.is_signer or account.is_signer; prev.is_writable = prev.is_writable or account.is_writable; std.debug.assert(prev.index_in_transaction < InstructionInfo.MAX_ACCOUNT_METAS); - const new = prev.*; // this avoids a bug caused by Parameter Reference Optimisation (PRO) - (try deduped_account_metas.addOne(tc.allocator)).* = new; // this is also needed to avoid the PRO bug + deduped_account_metas.addOneAssumeCapacity().* = prev.*; // this avoids a bug caused by Parameter Reference Optimisation (PRO) } else { index_in_callee_ptr.* = @intCast(deduped_account_metas.items.len); try deduped_account_metas.append(tc.allocator, .{ From d2c5cb458ae8b73c26543a1fcaff6fc4788f7a77 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Mon, 30 Mar 2026 07:51:24 -0500 Subject: [PATCH 27/35] feat(conformance): parseout cli: txn vector program detection --- conformance/parseout/parseout/__main__.py | 67 +++- .../parseout/parseout/transaction/__init__.py | 12 + .../parseout/parseout/transaction/differ.py | 30 +- .../parseout/parseout/transaction/fixture.py | 334 ++++++++++++++++++ conformance/parseout/pyproject.toml | 2 +- 5 files changed, 433 insertions(+), 12 deletions(-) create mode 100644 conformance/parseout/parseout/transaction/fixture.py diff --git a/conformance/parseout/parseout/__main__.py b/conformance/parseout/parseout/__main__.py index 805c34f9df..e0d9aa7123 100644 --- a/conformance/parseout/parseout/__main__.py +++ b/conformance/parseout/parseout/__main__.py @@ -18,12 +18,13 @@ from .parser import parse_file as _generic_parse_file from .differ import diff_files as _generic_diff_files -from .transaction import diff_files as _txn_diff_files, Category +from .transaction import diff_files as _txn_diff_files, Category, label_programs _TXN_FIXTURES = Path("env/test-outputs/txn/fixtures") _TXN_EXPECTED_GLOB = str(_TXN_FIXTURES / "expected" / "*.txt") _TXN_ACTUAL_GLOB = str(_TXN_FIXTURES / "actual" / "*.txt") +_TXN_FIXTURE_INPUT_DIR = Path("env/test-vectors/txn/fixtures") def main(argv: list[str] | None = None) -> None: @@ -44,6 +45,11 @@ def main(argv: list[str] | None = None) -> None: p_txn = subs.add_parser("txn", help="Transaction diff producing txn.csv, txn-category.json, txn-combo.json") p_txn.add_argument("expected", nargs="?", default=None, help="Path to the expected file (default: first match in env/test-outputs/txn/fixtures/expected/*.txt)") p_txn.add_argument("actual", nargs="?", default=None, help="Path to the actual file (default: first match in env/test-outputs/txn/fixtures/actual/*.txt)") + p_txn.add_argument("--fixtures", default=None, metavar="DIR", + help="Directory containing .fix protobuf fixtures for program classification " + "(default: env/test-vectors/txn/fixtures when using default expected/actual)") + p_txn.add_argument("--no-fixtures", action="store_true", + help="Disable automatic fixture loading (skip program classification)") args = top.parse_args(argv) @@ -139,7 +145,16 @@ def _cmd_txn(args: argparse.Namespace) -> None: out_dir = Path(_TXN_FIXTURES) if use_fixtures else Path(".") out_dir.mkdir(parents=True, exist_ok=True) - mismatches = _txn_diff_files(expected, actual) + # Determine fixture directory for program classification + fixture_dir: str | Path | None = None + if not args.no_fixtures: + if args.fixtures: + fixture_dir = args.fixtures + elif use_fixtures and _TXN_FIXTURE_INPUT_DIR.is_dir(): + fixture_dir = _TXN_FIXTURE_INPUT_DIR + + has_programs = fixture_dir is not None + mismatches = _txn_diff_files(expected, actual, fixture_dir=fixture_dir) # --- txn.csv (sorted by combo so same-category rows are adjacent) --- sorted_mismatches = sorted( @@ -149,15 +164,21 @@ def _cmd_txn(args: argparse.Namespace) -> None: csv_path = out_dir / "txn.csv" with open(csv_path, "w", newline="") as f: writer = csv.writer(f) - writer.writerow(["test_id", "categories"]) + header = ["test_id", "categories"] + if has_programs: + header.append("programs") + writer.writerow(header) for m in sorted_mismatches: cats = sorted(c.name for c in m.categories) - writer.writerow([m.test_id, ",".join(cats)]) + row: list[str] = [m.test_id, ",".join(cats)] + if has_programs: + row.append(",".join(label_programs(m.programs))) + writer.writerow(row) # --- txn-category.json --- by_category: dict[str, list] = {} for m in mismatches: - entry = _mismatch_to_dict(m) + entry = _mismatch_to_dict(m, include_programs=has_programs) for cat in m.categories: by_category.setdefault(cat.name, []).append(entry) @@ -176,7 +197,7 @@ def _cmd_txn(args: argparse.Namespace) -> None: combo_counts: Counter[str] = Counter() for m in mismatches: key = " + ".join(sorted(c.name for c in m.categories)) - by_combo.setdefault(key, []).append(_mismatch_to_dict(m)) + by_combo.setdefault(key, []).append(_mismatch_to_dict(m, include_programs=has_programs)) combo_counts[key] += 1 # Sort keys by frequency (most common first) @@ -187,8 +208,28 @@ def _cmd_txn(args: argparse.Namespace) -> None: json.dump(combo_ordered, f, indent=2) f.write("\n") + # --- txn-program.json (mismatches grouped by invoked program) --- + if has_programs: + by_program: dict[str, list] = {} + program_counts: Counter[str] = Counter() + for m in mismatches: + labels = label_programs(m.programs) if m.programs else ["(unknown)"] + entry = _mismatch_to_dict(m, include_programs=True) + for label in labels: + by_program.setdefault(label, []).append(entry) + program_counts[label] += 1 + + program_ordered = {k: by_program[k] for k, _ in program_counts.most_common()} + prog_path = out_dir / "txn-program.json" + with open(prog_path, "w") as f: + json.dump(program_ordered, f, indent=2) + f.write("\n") + total = len(mismatches) - print(f"{total} mismatches written to {csv_path}, {cat_path}, {combo_path}") + output_files = f"{csv_path}, {cat_path}, {combo_path}" + if has_programs: + output_files += f", {prog_path}" + print(f"{total} mismatches written to {output_files}") # --- per-category counts --- print("\nCategories:") @@ -201,6 +242,12 @@ def _cmd_txn(args: argparse.Namespace) -> None: for combo, count in combo_counts.most_common(): print(f" {combo}: {count}") + # --- per-program counts --- + if has_programs: + print("\nPrograms:") + for prog, count in program_counts.most_common(): + print(f" {prog}: {count}") + def _resolve_glob(pattern: str, label: str) -> str: """Resolve a glob pattern to a single file path, or exit with an error.""" @@ -211,10 +258,14 @@ def _resolve_glob(pattern: str, label: str) -> str: return matches[0] -def _mismatch_to_dict(m) -> dict: +def _mismatch_to_dict(m, include_programs: bool = False) -> dict: """Convert a transaction Mismatch to a JSON-serialisable dict.""" d = asdict(m) d["categories"] = sorted(c.name for c in m.categories) + if include_programs: + d["programs"] = label_programs(m.programs) + else: + del d["programs"] return d diff --git a/conformance/parseout/parseout/transaction/__init__.py b/conformance/parseout/parseout/transaction/__init__.py index 63415aa449..91e96f85d9 100644 --- a/conformance/parseout/parseout/transaction/__init__.py +++ b/conformance/parseout/parseout/transaction/__init__.py @@ -21,6 +21,13 @@ diff, diff_files, ) +from .fixture import ( + programs_for_fixture, + programs_for_fixtures, + label_program, + label_programs, + KNOWN_PROGRAMS, +) __all__ = [ "parse", @@ -36,4 +43,9 @@ "Mismatch", "diff", "diff_files", + "programs_for_fixture", + "programs_for_fixtures", + "label_program", + "label_programs", + "KNOWN_PROGRAMS", ] diff --git a/conformance/parseout/parseout/transaction/differ.py b/conformance/parseout/parseout/transaction/differ.py index dddc40f8f0..7176a47104 100644 --- a/conformance/parseout/parseout/transaction/differ.py +++ b/conformance/parseout/parseout/transaction/differ.py @@ -51,12 +51,15 @@ class Mismatch: Attributes: test_id: The shared record test_id. categories: Set of ``Category`` values describing what differs. + programs: Sorted list of base58 program addresses invoked by the + transaction. Populated when fixture data is available. left: The Record from the first file. right: The Record from the second file. """ test_id: str categories: set[Category] = field(default_factory=set) + programs: list[str] = field(default_factory=list) left: Record = field(default_factory=Record) right: Record = field(default_factory=Record) @@ -64,6 +67,7 @@ class Mismatch: def diff( a: OrderedDict[str, Record], b: OrderedDict[str, Record], + programs: dict[str, list[str]] | None = None, ) -> list[Mismatch]: """Compare two parsed transaction OrderedDicts and return categorised mismatches. @@ -73,6 +77,9 @@ def diff( Args: a: First parsed result (``transaction_parser.parse`` output). b: Second parsed result. + programs: Optional mapping from test_id to list of invoked program + addresses (base58). When provided, each ``Mismatch`` is + annotated with the programs for its test_id. Returns: List of ``Mismatch`` objects, one per differing test_id, in the @@ -86,16 +93,33 @@ def diff( if rec_a.result == rec_b.result: continue cats = _categorize(rec_a.result, rec_b.result) - result.append(Mismatch(test_id=test_id, categories=cats, left=rec_a, right=rec_b)) + progs = programs.get(test_id, []) if programs else [] + result.append(Mismatch(test_id=test_id, categories=cats, programs=progs, left=rec_a, right=rec_b)) return result -def diff_files(path_a: str | Path, path_b: str | Path) -> list[Mismatch]: +def diff_files( + path_a: str | Path, + path_b: str | Path, + fixture_dir: str | Path | None = None, +) -> list[Mismatch]: """Parse two files and return categorised mismatches. Convenience wrapper around ``diff(parse_file(a), parse_file(b))``. + + Args: + path_a: Path to the expected output file. + path_b: Path to the actual output file. + fixture_dir: Optional path to directory containing ``.fix`` protobuf + fixtures. When provided, each mismatch is annotated with the + invoked program addresses extracted from the fixture inputs. """ - return diff(_parse_file(path_a), _parse_file(path_b)) + programs: dict[str, list[str]] | None = None + if fixture_dir is not None: + from .fixture import programs_for_fixtures + + programs = programs_for_fixtures(fixture_dir) + return diff(_parse_file(path_a), _parse_file(path_b), programs=programs) # --------------------------------------------------------------------------- diff --git a/conformance/parseout/parseout/transaction/fixture.py b/conformance/parseout/parseout/transaction/fixture.py new file mode 100644 index 0000000000..16c07a1cde --- /dev/null +++ b/conformance/parseout/parseout/transaction/fixture.py @@ -0,0 +1,334 @@ +"""Read invoked program IDs from binary protobuf ``.fix`` fixture files. + +Implements a minimal protobuf wire-format decoder — just enough to +navigate from ``TxnFixture`` down to the ``CompiledInstruction`` +program IDs without requiring any generated code or the +``google.protobuf`` package. + +Wire-format field numbers (from ``v1.pb.zig``): + + TxnFixture + 1: metadata (FixtureMetadata) + 2: input (TxnContext) + + TxnContext + 1: tx (SanitizedTransaction) + + SanitizedTransaction + 1: message (TransactionMessage) + + TransactionMessage + 3: account_keys (repeated bytes) + 6: instructions (repeated CompiledInstruction) + + CompiledInstruction + 1: program_id_index (uint32) + +Public API: + ``programs_for_fixture(path)`` — single file -> sorted list[str] + ``programs_for_fixtures(fixture_dir)`` — directory -> dict[test_id, list[str]] +""" + +from __future__ import annotations + +import base64 +from pathlib import Path + + +# --------------------------------------------------------------------------- +# Minimal protobuf wire-format helpers +# --------------------------------------------------------------------------- + +def _decode_varint(data: bytes, pos: int) -> tuple[int, int]: + """Decode a base-128 varint, returning (value, new_pos).""" + result = 0 + shift = 0 + while True: + b = data[pos] + result |= (b & 0x7F) << shift + pos += 1 + if (b & 0x80) == 0: + return result, pos + shift += 7 + + +def _iter_fields(data: bytes) -> list[tuple[int, int, bytes | int]]: + """Yield (field_number, wire_type, payload) tuples from *data*. + + For wire type 0 (varint), payload is an ``int``. + For wire type 2 (length-delimited), payload is ``bytes``. + Other wire types are skipped. + """ + fields: list[tuple[int, int, bytes | int]] = [] + pos = 0 + end = len(data) + while pos < end: + tag, pos = _decode_varint(data, pos) + field_num = tag >> 3 + wire_type = tag & 0x07 + if wire_type == 0: # varint + val, pos = _decode_varint(data, pos) + fields.append((field_num, wire_type, val)) + elif wire_type == 2: # length-delimited + length, pos = _decode_varint(data, pos) + fields.append((field_num, wire_type, data[pos : pos + length])) + pos += length + elif wire_type == 5: # 32-bit fixed + pos += 4 + elif wire_type == 1: # 64-bit fixed + pos += 8 + else: + # Unknown wire type — we can't safely skip, so stop. + break + return fields + + +def _get_submessage(data: bytes, field_num: int) -> bytes | None: + """Return the raw bytes of the first length-delimited field with *field_num*.""" + for fnum, wtype, payload in _iter_fields(data): + if fnum == field_num and wtype == 2: + assert isinstance(payload, bytes) + return payload + return None + + +def _get_repeated_bytes(data: bytes, field_num: int) -> list[bytes]: + """Return all length-delimited payloads for *field_num*.""" + result: list[bytes] = [] + for fnum, wtype, payload in _iter_fields(data): + if fnum == field_num and wtype == 2: + assert isinstance(payload, bytes) + result.append(payload) + return result + + +def _get_varint(data: bytes, field_num: int, default: int = 0) -> int: + """Return the first varint value for *field_num*.""" + for fnum, wtype, payload in _iter_fields(data): + if fnum == field_num and wtype == 0: + assert isinstance(payload, int) + return payload + return default + + +# --------------------------------------------------------------------------- +# Base58 encoding (Solana public key representation) +# --------------------------------------------------------------------------- + +_B58_ALPHABET = b"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" + + +def _base58_encode(data: bytes) -> str: + """Encode *data* as a base58 string (Bitcoin/Solana alphabet).""" + # Count leading zeros + n_leading = 0 + for b in data: + if b == 0: + n_leading += 1 + else: + break + + # Convert to big integer + num = int.from_bytes(data, "big") + result = bytearray() + while num > 0: + num, rem = divmod(num, 58) + result.append(_B58_ALPHABET[rem]) + result.reverse() + + return ("1" * n_leading) + result.decode("ascii") + + +# --------------------------------------------------------------------------- +# Public API +# --------------------------------------------------------------------------- + + +def programs_for_fixture(path: str | Path) -> list[str]: + """Extract the sorted, deduplicated list of invoked program addresses. + + Navigates: TxnFixture.input.tx.message → account_keys / instructions + to resolve each instruction's ``program_id_index`` into a base58 address. + + Args: + path: Path to a ``.fix`` protobuf file. + + Returns: + Sorted list of unique base58-encoded program addresses invoked by + the transaction. Empty list if the fixture cannot be decoded. + """ + data = Path(path).read_bytes() + + # TxnFixture -> field 2 (input: TxnContext) + txn_context = _get_submessage(data, 2) + if txn_context is None: + return [] + + # TxnContext -> field 1 (tx: SanitizedTransaction) + sanitized_tx = _get_submessage(txn_context, 1) + if sanitized_tx is None: + return [] + + # SanitizedTransaction -> field 1 (message: TransactionMessage) + tx_message = _get_submessage(sanitized_tx, 1) + if tx_message is None: + return [] + + # TransactionMessage -> field 3 (account_keys: repeated bytes) + account_keys = _get_repeated_bytes(tx_message, 3) + + # TransactionMessage -> field 6 (instructions: repeated CompiledInstruction) + instruction_blobs = _get_repeated_bytes(tx_message, 6) + + # Resolve each instruction's program_id_index -> base58 address + programs: set[str] = set() + for ixn_blob in instruction_blobs: + idx = _get_varint(ixn_blob, 1, default=0) + if idx < len(account_keys): + programs.add(_base58_encode(account_keys[idx])) + + return sorted(programs) + + +def programs_for_fixtures(fixture_dir: str | Path) -> dict[str, list[str]]: + """Build a mapping from test_id to invoked program addresses. + + Scans *fixture_dir* for ``*.fix`` files. The test_id is derived from + the filename by stripping the ``.fix`` suffix. + + Args: + fixture_dir: Directory containing ``.fix`` files. + + Returns: + Dict mapping ``test_id`` → sorted list of base58 program addresses. + """ + fixture_dir = Path(fixture_dir) + result: dict[str, list[str]] = {} + for fix_path in sorted(fixture_dir.glob("*.fix")): + test_id = fix_path.stem + result[test_id] = programs_for_fixture(fix_path) + return result + + +# --------------------------------------------------------------------------- +# Well-known Solana program addresses → human-readable labels +# --------------------------------------------------------------------------- + +KNOWN_PROGRAMS: dict[str, str] = { + "11111111111111111111111111111111": "system", + "Config1111111111111111111111111111111111111": "config", + "Stake11111111111111111111111111111111111111": "stake", + "Vote111111111111111111111111111111111111111": "vote", + "ComputeBudget111111111111111111111111111111": "compute-budget", + "BPFLoaderUpgradeab1e11111111111111111111111": "bpf-loader-upgradeable", + "BPFLoader2111111111111111111111111111111111": "bpf-loader", + "BPFLoader1111111111111111111111111111111111": "bpf-loader-deprecated", + "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA": "token", + "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb": "token-2022", + "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL": "associated-token", + "namesLPneVptA9Z5rqUDD9tMTWEJwofgaYwp8cawRkX": "name-service", + "Memo1UhkJBfCR6MNBsmvMuumyHiSZcLYnE2SJ9gQvn4": "memo-v1", + "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr": "memo-v3", + "AddressLookupTab1e1111111111111111111111111": "address-lookup-table", + "Ed25519SigVerify111111111111111111111111111": "ed25519", + "KeccakSecp256k11111111111111111111111111111": "secp256k1", + "Secp256r1SigVerify1111111111111111111111111": "secp256r1", + "ZkE1Gama1Proof11111111111111111111111111111": "zk-elgamal-proof", + "Sysvar1111111111111111111111111111111111111": "sysvar", + "NativeLoader1111111111111111111111111111111": "native-loader", + "LoaderV411111111111111111111111111111111111": "loader-v4", +} + + +def label_program(address: str) -> str: + """Return a short human-readable label for *address*, or the address itself.""" + return KNOWN_PROGRAMS.get(address, address) + + +def label_programs(addresses: list[str]) -> list[str]: + """Label a list of program addresses.""" + return [label_program(a) for a in addresses] + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + +import pytest + + +class TestBase58: + """Base58 encoding sanity checks.""" + + def test_all_zeros(self): + assert _base58_encode(b"\x00" * 32) == "1" * 32 + + def test_system_program(self): + assert _base58_encode(b"\x00" * 32) == "1" * 32 + + def test_roundtrip_known(self): + # Verify the system program address (all zeros = "1"*32 in base58, + # but the well-known address "11111111111111111111111111111111" is + # the 32-byte all-zeros key). + assert _base58_encode(b"\x00" * 32) == "1" * 32 + + +class TestDecodeVarint: + def test_single_byte(self): + assert _decode_varint(b"\x05", 0) == (5, 1) + + def test_multi_byte(self): + assert _decode_varint(b"\xac\x02", 0) == (300, 2) + + +class TestIterFields: + def test_simple(self): + # Field 1, wire type 0, value 150 = tag byte 0x08, varint 0x96 0x01 + data = bytes([0x08, 0x96, 0x01]) + fields = _iter_fields(data) + assert len(fields) == 1 + assert fields[0] == (1, 0, 150) + + +class TestFixtureDecoding: + """Test against actual fixture files if available.""" + + _FIXTURE_DIR = Path(__file__).resolve().parents[3] / "env" / "test-vectors" / "txn" / "fixtures" + + def _first_fixture(self) -> Path: + fixtures = sorted(self._FIXTURE_DIR.glob("*.fix")) + if not fixtures: + pytest.skip("No fixture files available") + return fixtures[0] + + def test_programs_for_fixture_returns_nonempty(self): + path = self._first_fixture() + programs = programs_for_fixture(path) + assert len(programs) > 0 + # All entries should be non-empty strings + for p in programs: + assert isinstance(p, str) + assert len(p) > 0 + + def test_programs_are_valid_base58(self): + path = self._first_fixture() + programs = programs_for_fixture(path) + valid_chars = set("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz") + for p in programs: + assert all(c in valid_chars for c in p), f"Invalid base58: {p}" + + def test_programs_for_fixtures_batch(self): + if not self._FIXTURE_DIR.exists(): + pytest.skip("No fixture directory") + mapping = programs_for_fixtures(self._FIXTURE_DIR) + assert len(mapping) > 0 + # Spot check: every entry has at least one program + empty_count = sum(1 for v in mapping.values() if len(v) == 0) + # A few sanitization-error-only fixtures might have programs too, + # since the input still contains the transaction message. + assert empty_count < len(mapping) + + def test_known_program_labels(self): + assert label_program("11111111111111111111111111111111") == "system" + assert label_program("Vote111111111111111111111111111111111111111") == "vote" + assert label_program("SomeUnknownAddress") == "SomeUnknownAddress" diff --git a/conformance/parseout/pyproject.toml b/conformance/parseout/pyproject.toml index e1c52a805c..28d57eb20a 100644 --- a/conformance/parseout/pyproject.toml +++ b/conformance/parseout/pyproject.toml @@ -12,4 +12,4 @@ requires = ["hatchling"] build-backend = "hatchling.build" [tool.pytest.ini_options] -python_files = ["parser.py", "differ.py"] +python_files = ["parser.py", "differ.py", "fixture.py"] From 4a00aab3facd7aeeed2d5b906ce11fbc65035479 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Mon, 30 Mar 2026 09:21:06 -0400 Subject: [PATCH 28/35] fix(conformance): txn harness was returning rollbacks as modified for account load errors --- conformance/src/txn_execute.zig | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/conformance/src/txn_execute.zig b/conformance/src/txn_execute.zig index a0372137c2..beaf788dc6 100644 --- a/conformance/src/txn_execute.zig +++ b/conformance/src/txn_execute.zig @@ -921,7 +921,12 @@ fn serializeOutput( errdefer modified_accounts.deinit(allocator); errdefer rollback_accounts.deinit(allocator); - if (result.ok.outputs != null and result.ok.err != null) { + if (result.ok.err != null) { + for (txn.writes.constSlice()) |account| try rollback_accounts.append( + allocator, + try sharedAccountToState(allocator, account.pubkey, account.account), + ); + // In the event that the transaction is executed and fails, agave // returns *all* the loaded accounts, including all the modifications // from the failed transaction, whereas we only return the rollback @@ -929,7 +934,7 @@ fn serializeOutput( // validator, but for compatibility with solfuzz_agave's outputs, we // need to return the "modified" loaded accounts that aren't actually // modified since the transaction failed. - for (failed_accounts) |account| { + if (result.ok.outputs != null) for (failed_accounts) |account| { const was_an_input_and_is_writable = for ( sanitized.accounts.items(.pubkey), sanitized.accounts.items(.is_writable), @@ -941,13 +946,7 @@ fn serializeOutput( allocator, try sharedAccountToState(allocator, account.pubkey, account.account), ); - } - for (txn.writes.constSlice()) |account| { - try rollback_accounts.append( - allocator, - try sharedAccountToState(allocator, account.pubkey, account.account), - ); - } + }; } else for (txn.writes.constSlice()) |account| { try modified_accounts.append( allocator, From 7f9cdf9d8bc7e01e4f2f3a38cbc7f332bfc85f0b Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Mon, 30 Mar 2026 09:27:01 -0400 Subject: [PATCH 29/35] fix(conformance): update failing fixtures --- conformance/run.py | 2 +- conformance/scripts/failing.txt | 469 -------------------------------- 2 files changed, 1 insertion(+), 470 deletions(-) diff --git a/conformance/run.py b/conformance/run.py index 223682eb0c..be6ee33619 100755 --- a/conformance/run.py +++ b/conformance/run.py @@ -109,7 +109,7 @@ def main(): failures.append(os.path.join(result["name"], fixture + ".fix\n")) failures.sort() - with open("env/test-outputs/failures.txt", "w") as f: + with open("env/test-outputs/failing.txt", "w") as f: f.writelines(failures) print(f"\nDetailed test results saved to env/test-outputs/\n") diff --git a/conformance/scripts/failing.txt b/conformance/scripts/failing.txt index f6c6958d84..e85ebb1ff1 100644 --- a/conformance/scripts/failing.txt +++ b/conformance/scripts/failing.txt @@ -269,112 +269,55 @@ instr/fixtures/zk_sdk/wacc7_a08f10406aee35a4.fix instr/fixtures/zk_sdk/wacc8_4370fd00b238a5a0.fix instr/fixtures/zk_sdk/wacc9_d13848d723bd8cfa.fix txn/fixtures/006cec687919df8ddc4fd111e60e4864c7a94a79_2288978.fix -txn/fixtures/00af752d1f13d997b80e291115dd08907fc04653_265678.fix txn/fixtures/00dc63d6f5824efa900302649eeca7983e5d3f5a_1834424.fix txn/fixtures/016b58bef3cbb526df4a67c91f1dffc67ca6f557_1840191.fix txn/fixtures/0179c4cbb9a7110eb246247ca09517720f960904_2194958.fix txn/fixtures/021f0cfecbd5edd05af52b24c1374d5dd13c36c0_3213804.fix -txn/fixtures/025c41e63767ab929c10eb132b5ba984d94e3270_265678.fix -txn/fixtures/0326fd689c6fb4ed44c8304776bb110dffda5bec_265678.fix -txn/fixtures/032a3dbd38411d35b22234f84e4e9280603c182e_1190840.fix -txn/fixtures/03756b34d21159e4ab852ce72e5368145abba09c_265678.fix txn/fixtures/03aa332b202dfe5555e2f5ae5c54f661a794cff8_1852822.fix txn/fixtures/03c7c6f82ad963b03675a01bd23846cd2fda345a_2134389.fix txn/fixtures/03dc8d0e3e91b0660e951d913960ff71c2ad02cc_2996610.fix txn/fixtures/042ff9e461559c7cd129d9a1cd1eb2eada273b04_1842874.fix -txn/fixtures/04ac142a971d9323607de20fce669444443bc915_265678.fix -txn/fixtures/050108dd9b2c1dbf87b11d3dc6b2b50fc16abfba_2233729.fix txn/fixtures/053ae2dcd2b51f24217d2f647c8b204b97d07318_1832236.fix txn/fixtures/05dbe5bc20b7f49b174ddb99aad50e87cf6630c3_1834634.fix -txn/fixtures/070334b6fbfba042afdb1834d7121e126748305d_265678.fix txn/fixtures/07586995a94dffe82db72e23dcc1c6335b1db174_1835702.fix txn/fixtures/079985119394d9f4ac831732cedd707541dd46e4_265678.fix -txn/fixtures/07eb941922fc243151d2508418af3084cd120750_265678.fix -txn/fixtures/085f9d2bbc93cbee2fd9a0803c91851a7fc39af2_265678.fix -txn/fixtures/086a9edb3347cbe7d120f8579ba505440dae574c_265678.fix -txn/fixtures/0899a69ebd070da07bc8856a0178a09c4d29a351_265678.fix -txn/fixtures/08a6ed54c9afd2e392ceb8a29d579acb8088e2bc_265678.fix -txn/fixtures/08eefd180785f6be4a6848a106cdba374bce7e60_265678.fix -txn/fixtures/094d347c1c5351ec7c10736fa6a44b23d2c10c62_2184537.fix -txn/fixtures/097859a8724d9c90bab754f75863ac4e114c285e_265678.fix -txn/fixtures/09aa1a8632d6a4782bbc57296cbfd05fc012feb2_2193735.fix txn/fixtures/0a4807f84f6dd1c2760b3712df3846e5aa930906_2410587.fix txn/fixtures/0adfdb20159b81799344d11639fe0b131c6804ab_2194174.fix -txn/fixtures/0afb0ff804b8d64527e611fa76402bc3967fa6da_265678.fix txn/fixtures/0b6e7a7ed010c514e7b2e121988380ce84e61d2e_2655582.fix -txn/fixtures/0b734af5a53feda0c159093134f13359e71e13ae_265678.fix txn/fixtures/0b82e85bfedd12586d9d3698c32a6ac994cfb472_1838876.fix -txn/fixtures/0b8be053cedbc396b3f09a9d2f0c7b53037c22cc_265678.fix -txn/fixtures/0c060d9e996c28edf1852d93e3b0cf4067148056_265678.fix -txn/fixtures/0d1a2a484f610f52793e01e39842119dfc671156_2193673.fix -txn/fixtures/0dda0c174f5b5f9dda90d7bde9efdf04f8243b2f_3192395.fix txn/fixtures/0df6674eadbc1117e90b2ce85190f56fd773a58b_2879459.fix -txn/fixtures/0e949eb5c7b91d4546211236beecc706bd7dcb3d_265678.fix txn/fixtures/0f44c4f29823b842e36eaf773bfea339e33aecb0_2692287.fix txn/fixtures/0f6627ae4bb3370b5ece3b93afd08eb584108ca7_1847624.fix -txn/fixtures/0f6756784de0c3e3a30b10e7393b41db34c1035b_265678.fix txn/fixtures/0f867648fb53f860c4832ca7380b8e38ca7f5d41_1833502.fix txn/fixtures/0fb4a1d8c2d58a0a97b81b18880cae0e46b8a360_265678.fix txn/fixtures/0fbf14533d0939462c80b5b77920a3e9b9867dff_2213556.fix txn/fixtures/106672242d5cf9448f9d9bc2d8b15ac62b3fd3cc_265678.fix -txn/fixtures/10ca664fc1b21dc5dbf6d47aa2b9e9b4b628c4c6_265678.fix txn/fixtures/11309bb4648a259baa2424ee81584a4c7506a32a_265678.fix -txn/fixtures/11781b677d241c298b8f9fa44eaa8b1699213015_265678.fix txn/fixtures/11a1fd9cafd16c050f4dd965e2f7cb41548cd172_265678.fix txn/fixtures/11adaf7c81814f698c9416851712bb124d0c7751_1833873.fix txn/fixtures/12162ad7be4f8db5b27bf27303a500dce2de2770_265678.fix txn/fixtures/12643da37bc7cedeaec9a7c2bc4ac191417a7170_2195021.fix txn/fixtures/12b805123e5476d6eb0ec393cdb7882033cc28ca_265678.fix -txn/fixtures/12ba5ecba0cfa5bdae2a59cd1c43c26511abca07_2186852.fix txn/fixtures/12db676232cd943525ec09c9e7dc74be5a439ec5_265678.fix txn/fixtures/130b22b824fc407eef7dc5b75d398787f58d2c15_265678.fix txn/fixtures/130bbc2f5e90382cefe7eb02aa655124b1119547_1839094.fix -txn/fixtures/134efa88610e2489622a4e668696b0aa2c16d96d_265678.fix -txn/fixtures/13c847dd1267f4bbbb3dfa50ecaa324044c993e6_265678.fix txn/fixtures/142f3b2b185b954e36696311b3b84744508a80d5_2361208.fix txn/fixtures/14c3dc2280a20662364e369b2cbe80e4efed4698_265678.fix -txn/fixtures/154dcd01c64a2dc80b93e7bc4ac2aeebbe41a49d_265678.fix -txn/fixtures/156d21abaea74471c6ad2f7e9364aad2b01595e5_265678.fix txn/fixtures/1577251c4955a4235f38cf004d100d6a8106e17c_2134838.fix -txn/fixtures/163dea63ba0fa5a4ac62f35e2ba40c65528b876b_265678.fix txn/fixtures/1648ae1a9df6e1bb2875b4ed6f168417e2ff33d1_1842339.fix -txn/fixtures/16d545453f2d942e15eabefe41db4c5981390fb8_265678.fix -txn/fixtures/17210df43d3ee9a76676a47487576211d01eddd9_3205026.fix -txn/fixtures/17930db2c66a9eef4de8709cf3bc75cb571f3249_265678.fix -txn/fixtures/17b46d6dea160aaf06eb209456abcf7c8a5d502c_265678.fix txn/fixtures/17cb99713f28ee8be4164c9c3bd2c4f928fc016c_3000059.fix -txn/fixtures/17dd636f0f9efbec12fc1cce8d4f9468d574841e_265678.fix -txn/fixtures/1815adf997a5268f9609f854877359ed22b55965_265678.fix -txn/fixtures/184d29f84290c0f6bf276d081d3ba42f7d947fc4_265678.fix txn/fixtures/18b4e56da90940d580612d378203e29ab87cc63e_3090691.fix txn/fixtures/191d9e2b0d5e2879df91d1416a98958477ad5604_265678.fix -txn/fixtures/1922d2a3c2a6ac261c26b4153a88b8c89c1c8d69_265678.fix -txn/fixtures/1936f2d862fee55a045607e7c388575999206a92_265678.fix -txn/fixtures/195061e21358db300927048df5bce29edf5ac300_265678.fix -txn/fixtures/19d607ecf36140c6bee8a987a843513594cb5eb1_265678.fix -txn/fixtures/19dd2b0131d7aeab1b23139caea748426549b07f_3195377.fix -txn/fixtures/19e35d93616c3d41b8b4c41c8392f003774db512_2615969.fix txn/fixtures/1a3584a220639d46eb8b03a7069ca7d3796b8659_2372912.fix -txn/fixtures/1a3e253372da8712ea91959b84b16c9e3d217955_265678.fix txn/fixtures/1a4aec43fd827c9a084dc5fe267c0b3f968a9fb8_2235143.fix txn/fixtures/1a729174d141352354cb70c0e74bd0521c17888e_1656878.fix -txn/fixtures/1a7a6938c60c2015fe6e867f95bf267ee7bc59cb_265678.fix -txn/fixtures/1aa79c77aa8276654efec0eb27655dec0cdc6447_265678.fix -txn/fixtures/1ada05afe8643db30f7f6b83f1f426e0d798bb97_265678.fix txn/fixtures/1b1c6088a52984cf848972959b26bcf0d869110d_265678.fix txn/fixtures/1bb8f3fe49dfe1a7c8fd3e7007b1267b70e5f064_265678.fix -txn/fixtures/1c07f721398888df9cb87360684ea901e546d7b2_265678.fix -txn/fixtures/1c7f3e9b5857885d7ab024248c10bede3ef651ea_265678.fix txn/fixtures/1c948b7fc23384aa7d29fe04f4081e1fed1262d4_265678.fix -txn/fixtures/1cd35a1accfd19e103c79fc4e3ee3be0853caab1_265678.fix txn/fixtures/1d7a0059b804b9ddd407dfe83b857f5fb44bbbe8_265678.fix -txn/fixtures/1e230442746eec5642e1793f541211a3dfc8e266_265678.fix txn/fixtures/1e9c4779cfc596539c9e2c4629c7525d5cb9f631_1843000.fix -txn/fixtures/1f8baa7cca9a50f2a30d2a23bf19de90f4130c01_265678.fix txn/fixtures/1fe88a97c6185afd668574ede8b54a764a86f090_265678.fix txn/fixtures/1fff2d993f4d7677640b2b3397320496b076e854_3506222.fix -txn/fixtures/203de1e88d7078cf1cfd166f2bece53b18a23d8c_265678.fix -txn/fixtures/20527668ad208c551ac17e682b41ad67eed4d011_265678.fix txn/fixtures/206891ac9be95e35959c4f835192a5267e3555b7_265678.fix txn/fixtures/20689cdc20d7cb5d189eca27583e6005c75582be_265678.fix txn/fixtures/209c7df958b10b061a8bfe3f6725c4b8802feb77_3200920.fix @@ -382,140 +325,63 @@ txn/fixtures/209e4ebd1a8072b4cfd752e8297e21249a5fb85e_1848691.fix txn/fixtures/20f2b0e913522ed8eaa8afebd362146105f1dfe7_3126852.fix txn/fixtures/212c7f5e5a034597b53826eb3ecaee6147321136_1829622.fix txn/fixtures/217e3a35b6e271260611d06bbf3d689b406bb807_2987146.fix -txn/fixtures/21a2ed7da708b4e06f302900b5f1e387797158c6_265678.fix txn/fixtures/21d8bec2658f953421ef8a90c94bb147d6592b0c_1856276.fix txn/fixtures/21ec480f4864655312f3b116cc2ed26a868d5d26_2953099.fix txn/fixtures/21fb4857674201e9f6c173c1f2e83556718c401e_1556049.fix -txn/fixtures/2230308262f87f9091245451f491ac8a95b03d5b_2913590.fix txn/fixtures/22f9b15c62fd309f4c73e459e07ae2005617a635_1839812.fix -txn/fixtures/235154a4e109440cda77b5ed1c0777eeb073e563_265678.fix txn/fixtures/235799bee53ec2e109dfffb5b6edcd06e41da148_265678.fix -txn/fixtures/23d5448b8e9816908691cc305bf00ea967596df5_265678.fix -txn/fixtures/24950d100340296fe0700e1033deaddab2986564_265678.fix -txn/fixtures/249aa2b448a129dff81ebd4f1cd70e877d7f6d82_2138607.fix -txn/fixtures/2553f36d244f112f985e12cc97d2197ded8ffeb9_265678.fix txn/fixtures/25fbaf1cf438b92a4c572cfedb0988ea6be695ee_1855773.fix -txn/fixtures/265d30b0bbbcf0d7f7c3f559f1a797ded0c384f6_265678.fix -txn/fixtures/26a9b7ead5f7e95e6dd72bf36b8b53918dba8fe4_2225242.fix txn/fixtures/283c6ca56b95acf39b5b1e2f84b30eef4dca21d8_1853984.fix -txn/fixtures/28bb478d13a3a3f1966d611ab36c1a123c1045be_3193054.fix -txn/fixtures/290de9fbb0cebaf2394fc491c9b970874b833895_265678.fix -txn/fixtures/29251e7e9860162c97fe67b26627ef1c339b044b_2241221.fix -txn/fixtures/296fb6e6f2267e9f3d00b8b0ea735fce8d506eb9_265678.fix -txn/fixtures/297890d24451a4de3dc8034dcb6da9ce4bfd3a26_265678.fix txn/fixtures/29be17e3a201aa84bbcf279602601ab563a0b805_265678.fix txn/fixtures/2a159c214135a36023fae14efcfbecd62b230823_2631802.fix txn/fixtures/2a7e6de264d39dde620e5b642dde4ffbbfbf0b67_265678.fix txn/fixtures/2a8eb43cad506af249c32619aab8ea70a62ce38a_2201810.fix txn/fixtures/2aaf16427235cc0a1cf9c9ff7fe902fae3c10cc6_2767000.fix -txn/fixtures/2ab359f3a1b60b58a57e01e65750fad5fd50972d_265678.fix -txn/fixtures/2ab448fbadb0b964c56472758c7a46920f8591e5_3041321.fix txn/fixtures/2b0f92f398a8e2c74bfa24456774a27c953f1aed_265678.fix -txn/fixtures/2b4bdbff82c4c4fbc26eb20da6ffe3805e90db1e_265678.fix -txn/fixtures/2b58ebb25f1493735bdc0b2b95e65d5f0ac271a5_2184474.fix -txn/fixtures/2b69a934e095482e9bdb05d67b9c0c26cc7aa7b2_265678.fix -txn/fixtures/2bde40327aee0255d3e3efb711af5d459109c45d_265678.fix -txn/fixtures/2c0a06d2fba7205c5d3da45d39fb4a5614ec90a7_265678.fix -txn/fixtures/2c5983fa94a7b8853b1301222eeb5c3bbc0a2027_265678.fix -txn/fixtures/2c6060de12fa7c26e657deb98e95949c7a0ef428_265678.fix -txn/fixtures/2cea3690ca12aedb7bf33143c486a1fe9ad7fe74_265678.fix txn/fixtures/2cfdeea1e8113fc2e9141967fea5eab91947e39a_1849498.fix txn/fixtures/2d1d290ed0b97a4c853410f3e70607af8512c71a_1835418.fix -txn/fixtures/2d40cc52c34c43e0d0892449975c182f432ff549_265678.fix txn/fixtures/2da4abe78a4359036ce483cfffe674c90842e02f_265678.fix txn/fixtures/2dd594dbbdb6e79776449d044f7319b76bf94044_1833391.fix -txn/fixtures/2def7ed78f00b5b8711a0d56f8deccac74d93be4_3198238.fix txn/fixtures/2e1941ee15c7450558deb720eed53c6ed76aadf7_265678.fix txn/fixtures/2e3931ae51ae0ea0b7a37e16a66b03a123e99864_1830012.fix txn/fixtures/2e410a98e6f0b614dce00964a7a2e60d9f764fb9_2987497.fix -txn/fixtures/2ec878a9f3857d9e54c54bebdeec308cabbd649a_3008787.fix txn/fixtures/2f2cf270d2b88532f0eaf52882f57031876f4ac7_1855418.fix -txn/fixtures/2f43e10be77dc56733de77c8f47518bdaa63dbfa_265678.fix txn/fixtures/2fc52300e86a2427ee7e292a41166076fcdafc03_1853296.fix -txn/fixtures/3001af48aa4d17c20f58c4a2f5c6051bf31829b6_265678.fix txn/fixtures/302cdc8b3ac6b980f31de14a9ff9b9cad18f936d_2134792.fix -txn/fixtures/303b94227680fe6259d6ff64ea3a164214649462_265678.fix txn/fixtures/306012c394c4f582374f72eb1f191d06de6e4ea6_2522260.fix txn/fixtures/3095efec5218f66db3fd3765b672bfeec6362b2c_2546518.fix -txn/fixtures/30cead52426c44ec911772d7d1bf3ca1b9b649d6_265678.fix txn/fixtures/3150f4ab80c34e0d00e18822327a4b01f1abffe6_265678.fix txn/fixtures/31783db98bbb6f63ca7c2c7e92ac3adf83e825e2_265678.fix -txn/fixtures/3187669fe3406a1a9d7a7a21729fdd949740f038_3202087.fix txn/fixtures/31f38752899f744e81cd018eefebd0822a306705_3006635.fix txn/fixtures/324154e969e4a719afe7b079a559f0e59ab3f748_2510065.fix txn/fixtures/326f6aa740e4e6060cc4fc272f8d1e5173a0347a_2484212.fix -txn/fixtures/328c44ebb504a174d1a2721b1412a66f9ebbaca1_265678.fix txn/fixtures/32ceb6737de9a3108558bc59bd1d2299402e1759_2187779.fix -txn/fixtures/32ceffb3da50bb1ad78f6602c83a576bd9679dba_265678.fix txn/fixtures/33597d7ac0d74e5c347e153ca4cdc05948db6fd6_1851758.fix -txn/fixtures/336d88c28a052cc92cd11d457ceb1cfb78f2102e_265678.fix txn/fixtures/338a0b377eb143b9d2520fd81d6b8658ea71d32a_1183730.fix -txn/fixtures/33998246ed4afebbf42883c4f56d44a1582cc9e0_3205875.fix -txn/fixtures/33ae07da0b440e0ffab1bb299bb4b31c99ccccb6_265678.fix txn/fixtures/33c664f3c95a2d1a3fff572ada952d3b67dbe2c4_265678.fix -txn/fixtures/34881a5207d4e4ffac34dc1b73c14fa1689f10b5_265678.fix txn/fixtures/34eb326b60ef98d99554dc2ab2d22dac33ad9d1e_1855129.fix -txn/fixtures/35c0fb77c9c150d54e64098a042d0f70a8a6b8c5_3191751.fix -txn/fixtures/35dea0b4bb2adf01c4e0affd32f5e1e373d35ab9_3195850.fix -txn/fixtures/364dcd67175104359ed74f76174276f28f1cc5ad_265678.fix -txn/fixtures/3670a6ad4880986b39995e9c684c660dfe2d51c4_265678.fix -txn/fixtures/36ba35626924b4349deb3b70a2404ec01c1ab5e4_265678.fix txn/fixtures/373f066bf0f80a09e099c78677fa2cc3564427f6_265678.fix txn/fixtures/3799b046a3717e43b056b8724374c468336b9d17_3177139.fix txn/fixtures/37baefd370d9e56c7c6d0eba33c2a4b956a62ef8_265678.fix -txn/fixtures/38196021446ff19b1ee517d58692bb2972ef6f8f_265678.fix txn/fixtures/3846dcbc6a789b614c1cb083bdc736f33065fc89_265678.fix -txn/fixtures/3873b410f3a8c8877e3e0d27fc4cbfc4e2a1ab88_265678.fix -txn/fixtures/388aa7d3f0fd8347cf8cbde62695297ae8da43bb_265678.fix -txn/fixtures/38aa5aa65284a359c7f2ff4448b28dd28036375c_3206360.fix txn/fixtures/38e5b3b4f98ebe5b98f26af1d52c4ea39c5757bb_265678.fix txn/fixtures/39496b9b2c42cec6bcfb0c12cba7a19392bd2d74_265678.fix -txn/fixtures/39b6d60bac630daf320a0801d99f8977a6688506_265678.fix -txn/fixtures/39b8f771be5c314fa218177d6d0ceafe5c71667d_3203571.fix -txn/fixtures/3a20d9da42af81d99c0cd54166533bfe2b1bc286_3197983.fix -txn/fixtures/3acb6c3f7c5c673c09f05f91a4b16f347218bc94_3204389.fix -txn/fixtures/3afc6524e087624a037312653f62038008cf4fee_265678.fix txn/fixtures/3b45ebbb089bb436aafb68056077413f7da53a2c_2336991.fix txn/fixtures/3b50f8af523e5536c992b7661228490868d08949_1844069.fix txn/fixtures/3b6d03c12d620a69d7ac3e69dbecf486f5fcb2b4_2855179.fix -txn/fixtures/3b8368829ea996a94c757d81615d67f49fdc1840_265678.fix -txn/fixtures/3bd6cc493f2771167d344bbce1e94c259dd58211_265678.fix -txn/fixtures/3c34daebf62ef03c2b079fc42f231637a54f34ac_265678.fix txn/fixtures/3c7443062cd3f1c7f3d25ba6ce499f3fb0134cb4_1853193.fix txn/fixtures/3c8d009dffbd36e350abf8faff4da8d1dec717ed_265678.fix txn/fixtures/3cb629bfeeac65b95bd2be8a7306c41cc357ddb9_1829905.fix -txn/fixtures/3cdce4fb925ae533b586ff2858c1057b33da83a1_265678.fix -txn/fixtures/3d03d328d824ff004c4dc731130fbb087aba3554_265678.fix -txn/fixtures/3dc136542017af64701bc8977305e2d1f0aa9946_265678.fix txn/fixtures/3dff5e145729afd0e7e285cc1b78db5eda8416ed_1855597.fix -txn/fixtures/3e29ea4c61bb2fc4cd581d9b597d43068dd860a9_265678.fix -txn/fixtures/3efd7cc4619f8139dc5de55a04c7df1edebe58db_265678.fix -txn/fixtures/3f6cd15207e3bb62ff4029684216ba0ceba1f12a_265678.fix txn/fixtures/3f7ffebb145c68a5f69e68463a23e32cfb7157e4_1844308.fix -txn/fixtures/3f8adab2d56cccaa7c9aafbbd8fdb1436948d2b1_265678.fix -txn/fixtures/3f98e7189e4024d816dd418dc4e277c8a824f3ea_265678.fix -txn/fixtures/3fa64e65df285be9e4e808c31ccdfdd9b574dc1b_265678.fix -txn/fixtures/400b79580621dec57e118e13e3a48f1d1ecde1f2_265678.fix txn/fixtures/402551d5cb22462d5b713b3b47a217f73bc3d889_265678.fix -txn/fixtures/4150dfca299108a397f2ce6750079061e4392e64_580274.fix -txn/fixtures/416534effb06d2a9604e5ba4e19d738efffd9df3_2227354.fix -txn/fixtures/41a5918a25d36e4aa01c6489feb10125ff0efbc1_265678.fix txn/fixtures/423c6adfe6a1aff4a554309e75c7cdd8cf2ece76_1839002.fix -txn/fixtures/4268690a5debbd29da2990bdb58b3766780576c7_265678.fix -txn/fixtures/42708ce5c717e06c6a63db9f2358e5b8fc5a50d9_265678.fix -txn/fixtures/4276f19f698509e23d0e80cbab0accefe7f87dc8_265678.fix -txn/fixtures/42ede6df5006d6981d147bf098f63d2d6b1b9a09_265678.fix -txn/fixtures/42fecd9a4ac572679c1e2565c4084d2a238b77ed_2616065.fix txn/fixtures/43142ed9c2d5c64bafb619e8c18c625649cdaf4d_2194238.fix -txn/fixtures/43195978584820741fdf2612aa0447e35d43fde1_265678.fix txn/fixtures/4346d7e6f55b29904046e0674a038fa0c6c1efc4_265678.fix txn/fixtures/437027a0a9527a0708ab6e5c7e38eab18b6aeed2_1841548.fix txn/fixtures/4373738bf97fc0f9fdc340b0868e6bc1db15c31a_265678.fix -txn/fixtures/44327da25fbd6489fbf652750ebdb81dca6a0f85_265678.fix txn/fixtures/4434bab1dd322682afd18b96c06554aca3ce0d8d_3001829.fix -txn/fixtures/4437cf6f8b42a9eb1c8fe21004c50d950dee6123_265678.fix txn/fixtures/44b6d4ad676c785f99cccfeffca43f73f8834c84_2213508.fix -txn/fixtures/453076a5046b05eafa0e1cefd3ff4f85fb50ff9c_265678.fix txn/fixtures/4553200ffb2641a9b34e87f86ec88560a13a94b5_2994600.fix txn/fixtures/455f74ca25b2fdd9fde7aa407a538e4340cdffb9_265678.fix txn/fixtures/45b7cb9916efaaeb3841ca263a5e4b8b21669a23_3005855.fix @@ -524,218 +390,109 @@ txn/fixtures/45dd4971a31ae58798211458d14551780be22c7a_1633256.fix txn/fixtures/45efcdb697feec8c5647bb55ba0212e0ca853359_1830497.fix txn/fixtures/45fe397bde8d8c0fd354422e73307a472f07dee6_1844816.fix txn/fixtures/4604704f1c55157bfb4cd54e794788d21f0308ac_265678.fix -txn/fixtures/465b02925e5437abfd1f87673a5180dc4a59df8c_265678.fix txn/fixtures/466ad4fec016b536b24d7976a8aea19fa4c5c0fe_1832985.fix -txn/fixtures/46891d49da17ae9b0023b14b6bfb49e783981a3d_3197159.fix -txn/fixtures/4697e8ddb28a2b11bb77949b23cf4ae048ff4504_265678.fix -txn/fixtures/46b42a7834871ca06c5abb8683c5be38e205e512_265678.fix txn/fixtures/48121f709d9bbfdcf88d2f4954e2ed8ac5bdb8b2_1836770.fix txn/fixtures/48a36bf607542480ff325b5bef985a7a3f188550_1851579.fix -txn/fixtures/490daa3a70166b41b73dd2823be0ee1812bead7d_265678.fix txn/fixtures/4935400af65c6050004e3e4f757141928ca0b264_1831849.fix -txn/fixtures/4950175f35249a55840c8b83e71c4c6deba13dad_265678.fix txn/fixtures/49a6c58383f9a9dc67be4993c2a0bbd41635ae14_1838771.fix -txn/fixtures/49ea7ba14f1e59a2af50c0addd73b7c0e223ff28_265678.fix txn/fixtures/4ab2840c81a2bad348c7c5ecbb632148264f8950_3078035.fix txn/fixtures/4c22e7041620180a4ba222efcf69f7d383dda955_1847179.fix -txn/fixtures/4c550c66be5ede646574678fac7fb84852d1273b_265678.fix txn/fixtures/4c72f411b6b9a81b55c0dcb38ae2f5a7d3f9f897_1834934.fix txn/fixtures/4c779bb7a33c52b61adb78689d813376e2752705_1841959.fix txn/fixtures/4cbbe2f3f047d244ea3642df5ea3b2a3072b6094_265678.fix txn/fixtures/4cc95b1b24d7f882b3f6617c0ceb023eb9fe853e_1831091.fix txn/fixtures/4cd57fb435285576274d04a5ffc5dae126f10f2a_265678.fix txn/fixtures/4d2e31198a0100720b4cd0d0588683c28851b29d_265678.fix -txn/fixtures/4d588f549cd3f9ff4ccbccd637cd8b58c28c4d7e_3006480.fix txn/fixtures/4d648b49922688298a565c85f818ea489e5f6e04_265678.fix -txn/fixtures/4d764129b759de70c8974adeef3a05f2182fdefe_265678.fix txn/fixtures/4d7f3c1a25f6b4f1b02419873936b18cb938847f_1840006.fix -txn/fixtures/4d9210dc8d65f9f73df787ff2417225c5d80761d_3205521.fix -txn/fixtures/4db108729956cf810ac59da17eb371e9014f7c7c_265678.fix -txn/fixtures/4ea3a7385cba03ae2abeeaea48c52bd1ad8eff93_265678.fix txn/fixtures/4ecc394bb0a5e009a02675e2c24e1a682e726861_2212326.fix txn/fixtures/4f391d783f130b20ff187e266caeea545b3bee1e_2817460.fix txn/fixtures/4f68ce636348400195b19af2766dc1c644d651a7_1845704.fix txn/fixtures/4fea3ee7838ae7c23f534b89225f581346557cdc_265678.fix txn/fixtures/50401b4fd6208c97afdd1970fcc98f1cbbe77db2_1851078.fix txn/fixtures/5055f04636f721db8c61add5313b0a48bdc3ef48_265678.fix -txn/fixtures/507dca6b9a80e44fb313aadf49598bdef272b10c_265678.fix txn/fixtures/5099c68f47959016785557d97d4536ea77759b4e_265678.fix txn/fixtures/50fd3f49db3184bbcc389764272a4b686fc21a43_265678.fix txn/fixtures/5103b2cca444d542d930b64acaaf3a605f64ab73_2213737.fix txn/fixtures/514aad735e6760fb52e4c670924ad420426725f6_1833306.fix txn/fixtures/516e724d030a5e1d0a6c0eec8877538a70c64344_1836690.fix txn/fixtures/516f366b7c07d3f9faf08dbe7114365406706d0b_1848140.fix -txn/fixtures/51b36e0b8a9b6914435b0811c4681cfe63799eda_265678.fix -txn/fixtures/51e7042b52b99873c4c285e7a94fbc42ba9f2228_265678.fix -txn/fixtures/523572dcb8122d7da4108e81964b9b21f1891ecc_265678.fix -txn/fixtures/52fbee3f03285c2ab59031335e509e738f7a329f_265678.fix txn/fixtures/534803e8258095dcc5952ab1329d1119b816ed4b_156594.fix -txn/fixtures/53de692adf0032e2bdd37759a9b747d854584585_265678.fix txn/fixtures/542e30d2e06079f3ddcb767c58ac5463618bcd07_2619392.fix -txn/fixtures/5431aacb3a68ed751383ded8bca654e234c46fd8_265678.fix txn/fixtures/54490a12a640642183075e2f882fd2af34f61b7d_265678.fix txn/fixtures/54638b9a086501f243a24590ad7a5293baf45911_265678.fix -txn/fixtures/54aa3bdb988135c983ccd502aafa6f90b8d9c88a_265678.fix -txn/fixtures/54cee0be565c7f54dc08070396db4a045034039a_265678.fix -txn/fixtures/551890c773fdb824fb366c11bae73558653be8b8_265678.fix -txn/fixtures/552300e2d1a54a1c4256dee4fc2a0e9124ba2056_265678.fix txn/fixtures/55b9b95d1d6ce9783d3ed11f9f53695363a9c701_1655830.fix txn/fixtures/55e8b5cda33cfe673e05331d2c9e0fe7eaad6e21_2196906.fix -txn/fixtures/561091b60898025e4181649ceeedc48f06ad4e4a_3199967.fix txn/fixtures/562c9c641cecb77e63050786fa00bc271ab3347c_1854575.fix txn/fixtures/5648c48ee232fc71f1243a5f6f31f7fee37b663e_265678.fix -txn/fixtures/56ef98f9db7768e4c97c02a64acd1013c382aab9_265678.fix -txn/fixtures/5803e02af71c317adedab648c9a4bb8a0785d295_265678.fix -txn/fixtures/5805e4b751787d11fa7822362c86b55f77f27a80_265678.fix -txn/fixtures/5860814fd78d163752287c5859de3e61dc929985_265678.fix txn/fixtures/58720535b51e362f8fab16ec8ccf337a7f48d474_1849395.fix -txn/fixtures/587fd805a86ba691f438439d0e93ca54281711ce_265678.fix -txn/fixtures/58be585e74bb695eeb6b65c28427abc1eebf9c52_265678.fix txn/fixtures/59432e24d5d0e935622b9a4d1d97fbe759022e04_1843878.fix txn/fixtures/5981638b02866b00afe1b0840d4938dbc0c5160f_1852713.fix -txn/fixtures/599a6c191b661a0f4f0151ec159429ce79aa591f_3191172.fix txn/fixtures/59ab9eca223cfc50003b37bd6300f7522ddeb41d_265678.fix -txn/fixtures/59e1a2e2321e806b6ff23ccae3385212455962d0_265678.fix txn/fixtures/5a1fae27c584db49e19fa039ce38dc5a1342278a_265678.fix txn/fixtures/5a3ff7d764b9e2c70295ddecc128580f93425259_265678.fix txn/fixtures/5a4a074ec3c227bb2ade20cb91ac333371f67ad2_1835104.fix -txn/fixtures/5ae3752826b74ef8f405351f6c43d35002b1c4c0_3201400.fix -txn/fixtures/5ae8cd867b590f400afcfd699cd2205c7fa64750_3201097.fix txn/fixtures/5b0ce7574dbebd6fb7ff288420817a6591243ff0_265678.fix -txn/fixtures/5b1b167ce0241216dd145c8c4f0fd0870ca0fa89_265678.fix -txn/fixtures/5b2461a4c21911d572f40f6b48ac105f30040580_265678.fix txn/fixtures/5b717c163a48aa70c9b27a9759e2e52cfc6c0fdd_1853683.fix txn/fixtures/5bd65e05c8214ba993fe20c2edc61d4a7e9fc8ce_1832600.fix -txn/fixtures/5be616ce7f5342e3c2f069a60c4517985b665201_265678.fix -txn/fixtures/5c60f22fe1e4fa45993a91db220609cb09b561d5_265678.fix txn/fixtures/5c6299dbedf5f7a3081013a132a78726c7e3bfc2_265678.fix -txn/fixtures/5cb0be61fe78d2dd3b4a11a1cd06fa878fc680eb_265678.fix txn/fixtures/5d37a00d2f2805ea23f3680276c37cccb719044f_265678.fix -txn/fixtures/5d5c1d0dff3fc4b0093227c0be22a1fda51e239a_265678.fix txn/fixtures/5db9655dd71ef3d66fa3361dc6bea89b984f1224_265678.fix txn/fixtures/5dd3324fbae61583db90c97c47dc5557985805e6_1833675.fix txn/fixtures/5ddab29bd8ca920d39400eb81450f6e75f19c321_265678.fix -txn/fixtures/5e04bf69008a6b5da12a61756b3930cf27e6cbf8_265678.fix txn/fixtures/5e0a5f5573e108afc7d427dc5bf04f397461a297_3102855.fix -txn/fixtures/5e0ae2999c7f6b6771e1afdd74dac699d29ac837_1657889.fix txn/fixtures/5e7f79dfc7aa8e8e2428850e97b81a6aedf9f051_1829329.fix txn/fixtures/5eda426d0395c4a87e148ac777255bb69d2caeed_2195109.fix txn/fixtures/5ee785582913d95ec68c3b0b03080ae144592061_265678.fix txn/fixtures/5ef07c01eeceec1a3af7e99d481c541a69e2b35e_1831372.fix -txn/fixtures/5f28e97935b867b16e223b9fc9263dd86a51ad5c_3197663.fix txn/fixtures/5f3972a2ac11a0ec90f01d4bc0e2a5af4ead6b60_1830181.fix txn/fixtures/5f57fd849e41bf5413244fd9e3a7796e1664a029_265678.fix -txn/fixtures/5f87ec8b7760f0413cc2ebe37deccdafc286c564_265678.fix -txn/fixtures/6016f2e678673a69a5f2f5320a18141242416357_265678.fix txn/fixtures/607c9f48220271b9312b90d192b0d5d83ee1a91a_3001609.fix -txn/fixtures/612869df4d55878013135f028a02a6c5d85a74c9_265678.fix txn/fixtures/61308114e7370765a28bf524e5a1ed0d6cefd5ac_2754507.fix txn/fixtures/613a5d8fa8bde73d78e9ae5484f0b44f1f1483db_265678.fix txn/fixtures/616ac01ed4cc6e4d51d59da3a7e44422ef990519_1838107.fix txn/fixtures/6179dcaa9b3dfbc6d1d2b4987ee9fd45dfa3fa15_1832813.fix -txn/fixtures/619778eaec2b9a94c1286b5380c2fa94454797d4_2225307.fix txn/fixtures/61a911664f74f6b3695f8b19d1839707e29508b2_1849950.fix -txn/fixtures/61ac8a5352908053208a3aecb9852a2ecfda0ce5_265678.fix txn/fixtures/61c1896dcdb59010c7890c5a8eca56495950c95a_1849570.fix -txn/fixtures/621d91964e32435c23bac922c1ef7a4f758d45da_265678.fix txn/fixtures/62fadceb8f2e780853419537d9057453083e708f_1830990.fix -txn/fixtures/64897ff2bf7aefbf460be912fc59e637ffed9565_1213123.fix txn/fixtures/653ae1539361dd9ba5bfe51c0b22b53456882981_265678.fix txn/fixtures/6695a5515b8365132402398a83f0720c3c54de4e_1837740.fix txn/fixtures/683098a43650542407f5e2673dcbed1ff761c745_2423046.fix txn/fixtures/68de719ae2e318788625ef7d721f9655f395b243_265678.fix -txn/fixtures/6917b8f9a10d431febeda59d7c1f89e6b103c63f_3206023.fix txn/fixtures/6965357bf7b4eaf7bb429afd962b2dcef859e960_1848806.fix txn/fixtures/69e7979792813ce26ee23a6ce22d283d4616663e_1850572.fix -txn/fixtures/6a154600616cf08c03761e73bc5274169d806df5_265678.fix -txn/fixtures/6a8fc485df4ebc34be31a498405018a77570ea3b_265678.fix -txn/fixtures/6a9195dd570495643a87db0951da43ff1061dc8e_265678.fix -txn/fixtures/6ab77582d39b7ff0807d6abf411751a99469759f_265678.fix txn/fixtures/6ad9932baf4b3db55fd8cb7a0c772154d496199a_1831442.fix txn/fixtures/6b745b5f8aafe33964e6674b5edf1bae4e6d47c0_265678.fix txn/fixtures/6b8aad11eda157f83dab534e8066a49ed74ba761_2460271.fix -txn/fixtures/6bc6ac4a6010d90d363521e9657f9d45498d1738_265678.fix -txn/fixtures/6c10842551bcfe52991daa3596e09fa94bd0f5f1_265678.fix -txn/fixtures/6c1341dbc2358cfc4e5488cd07b0c36a0cfd9fab_265678.fix -txn/fixtures/6c2d21b49f6a3577299d4757ea92841557e5580a_265678.fix txn/fixtures/6c7485b4807cedf24a234fdf455ae9d2603508c1_2583468.fix -txn/fixtures/6d03af70a8847df24d10f6c6f760fddc8eadc5e4_265678.fix txn/fixtures/6d15a36c9befbad0f742bf0047fd8a6f12dc3207_2909783.fix txn/fixtures/6d33522c1e6ee0c960ba65f8b4a011d4d5cc603c_1837056.fix txn/fixtures/6d49e31dc3c7545261144f0ea38c2af4fe21d533_1855703.fix -txn/fixtures/6dc2ecaf5c82c94c36c3a049d520da42ed59cd1d_265678.fix txn/fixtures/6ec4e2bfa78a373b657cd6cdd7b12ddded83ce35_1830116.fix txn/fixtures/6ed605260361eed1bcd6d50676fd4f10a34cf779_2717633.fix -txn/fixtures/6edb98d70680a296f990bc1daf91dd36053145b5_265678.fix -txn/fixtures/6f0fb3621166d843fc2f644fa252b483a7d1fe8f_265678.fix txn/fixtures/707c088e9b265b475a25401e3ffe899069cab3f7_1837524.fix -txn/fixtures/708192497af8fae436b66a04a2f90a17cb66fa91_265678.fix txn/fixtures/7095f3138822db8b09ec7ee5f5ec313bd7ba4546_265678.fix -txn/fixtures/7148ed822b977385887545783f84cc39d2733848_2912577.fix -txn/fixtures/715740a384824e5a09d0ba2536c801b5a455dbd6_265678.fix -txn/fixtures/717818247012f5a76f9b4d51ed1600f9ee84af7c_265678.fix txn/fixtures/71fef040f86707bed99a30e471cb908d8a761058_1832405.fix txn/fixtures/72fe3a57302874e135c7bc383f62ab0c2419930c_1835040.fix -txn/fixtures/7372281d5d0dec6e685b148f35a7660baaea53dc_265678.fix txn/fixtures/73e5a8c45cf7f6fc0299f6583c07ad59780e33f0_265678.fix txn/fixtures/73f5949bdc68038c3886dc255aebeb8c8a25ed79_2215693.fix -txn/fixtures/7432b5ca117583f99f879e105d20d033dba9f4fe_265678.fix txn/fixtures/7438c6d284ba03a269b36bc24c1a3cdd12b6d3dc_1832527.fix -txn/fixtures/7444add838af0ce59b2e7dab6831df60b55d90ee_265678.fix txn/fixtures/745eb2958bca9d8abbd5ead8839c53632104e89b_2398324.fix -txn/fixtures/74aa60ecbfb647ad8193acd95d94b58dd643c0e4_265678.fix -txn/fixtures/74dba888b06ba320539679bc6e96135562d45886_265678.fix txn/fixtures/74f9f1dda20c9d76b349e7a45be78e25e133b987_2729628.fix -txn/fixtures/7556013c493608c1a57f450304f1f49de67de27d_265678.fix txn/fixtures/7628342b9361df2077fc13c664d26c4604baf072_265678.fix -txn/fixtures/7628d0fb061e35ecde73977b5a3e48bef4e0e8b7_265678.fix txn/fixtures/766753bd49e4a67c9b1db3ea556a59c571198fab_1833781.fix -txn/fixtures/766fad81d4b8c6899be5b319ce3e2bef94169f89_265678.fix -txn/fixtures/76c88da7cd1daf0222bfc849b3aeb9f4ca42d961_265678.fix -txn/fixtures/76ea53fd679744403628fc8757f3445aa630eaa2_265678.fix txn/fixtures/78dadb162713fb4bba6dd53c9c2d508ff5184bb4_265678.fix -txn/fixtures/79b432b302868ebaff52801bfe8a249b5f66b7db_265678.fix -txn/fixtures/7a08552d275b739e608ae849a5453051d31a1ca2_265678.fix -txn/fixtures/7a16a97f0e93a9ca8a6c0907daf3fd9323030769_265678.fix -txn/fixtures/7a46d1a47adfc21ed24cad3bf87fb4e001d8f28f_265678.fix -txn/fixtures/7ab8f7859984280bf68d217a5f63301600e1d6b1_265678.fix -txn/fixtures/7b0bdf3bc8b96c84d31b53d46857f0dcf02e978f_265678.fix -txn/fixtures/7b2b19bacbd26480acc84b2ec2309dab78bcd4d2_265678.fix -txn/fixtures/7b3f5535b4aea1e007d109410a2cde376a096b85_3197345.fix -txn/fixtures/7b75c120673a4117b1ed406cffd3119c8d732e1f_265678.fix txn/fixtures/7bc6797c6c983885b1a15dd876e195f7014a1ccc_2705158.fix txn/fixtures/7c21b2a9421d29211fc4606383b4b8d4afc2d2da_2139381.fix -txn/fixtures/7c4c81f458a4bb96dce37b15848f750f29757816_265678.fix -txn/fixtures/7c7fc20c8f7e0286f36e27ef09fc64c7b34aa3ea_265678.fix -txn/fixtures/7cd40934ab71999042661cde7c89c7c163e06d3e_265678.fix -txn/fixtures/7d66500f1c9d4412ed309aab9123f63f80d76a8e_265678.fix -txn/fixtures/7e162c3c678748000aa8e1dac848a8419b855dda_265678.fix -txn/fixtures/7ec5734c811a6c1e0e35d6d1a6adb2ee3128116f_265678.fix -txn/fixtures/7ed911b9be7da9452df38d010b8f05e2dd3450f8_3194894.fix txn/fixtures/7f176ff671c7048392262eabea3a65155ff41822_2135873.fix txn/fixtures/7f2cec8be165daf94490d16ad5197ecf59dce8d5_1829727.fix -txn/fixtures/7f302a09121a3f85d76f9c6b44665ecef0ed50f5_2138673.fix txn/fixtures/7f9105a4295360588ea7078c771a53066eee1ca9_265678.fix txn/fixtures/7fa6f44771cc83b9f5262f07a2c38e339d616cb5_1852247.fix txn/fixtures/80264c01e61d5d1e1a29c805e87a9fa996218fba_1850678.fix txn/fixtures/805e0cd05df6ceb015a08086e9bcfab51f559747_180823.fix -txn/fixtures/8061f4b3293830badf653e04d0eb738f1384d4b2_265678.fix -txn/fixtures/8088ba17dd927644df610f9aed54ed407632556f_265678.fix -txn/fixtures/80a0bc9bab85104d1772d25066f0603f7f38149e_265678.fix -txn/fixtures/80f7ed9dd50d5090558dc3ac67b47e7a57d53601_265678.fix -txn/fixtures/80fa74e58476bc07e9d6ccca64c374c22da0327c_265678.fix -txn/fixtures/8134209f43c8d3dbbb861b30ee71f1f649babc5f_265678.fix -txn/fixtures/81696f4a9ca9e9e12c70b71407b73249d8c00575_265678.fix txn/fixtures/81a6be81485f9bdb807fdf7fc81b2782c512d7a6_2196843.fix txn/fixtures/81e2fb1dce2a047cb9e6ed334b72e57d1759ef06_265678.fix -txn/fixtures/82361cc3544bdc25471a9c08b4a57584081fa2ac_2241197.fix -txn/fixtures/82a184ba26d1e4512a811765b4d8e118ed63d3e6_265678.fix -txn/fixtures/82c6b66a19826c872cbc38602176607d93a06eef_265678.fix txn/fixtures/82e8fbb6226f92ec6613e3926fe45b35132bf576_1849796.fix -txn/fixtures/833237493a0ef5ffb0c133a9f882857181510beb_265678.fix -txn/fixtures/83438230049e506c0e91c5f0a3e33274f28e7890_3202891.fix -txn/fixtures/836eaabfc8e5327dc9e02913791f86fa869f98f9_265678.fix -txn/fixtures/837d6f9ca317f624f265888a147d98232a184668_265678.fix txn/fixtures/8493318989a41d8a979c653833549fb30918d01f_1833195.fix txn/fixtures/849d28ffcec100ce4572d341bc9fe4f74fb9d0b7_2140423.fix txn/fixtures/84cb4e0e3348ee4dcad2cff5f19127d5db57aeb8_265678.fix @@ -743,299 +500,146 @@ txn/fixtures/84d2102b057eb6f482356c40fa93d648ac141f11_1840379.fix txn/fixtures/84f114b17587f88281f867b17a95ec4a8118f620_265678.fix txn/fixtures/84f3a1500cd82eb29554c49640400e9d96783dc6_2395779.fix txn/fixtures/850384bbd4d1b8c25de0c7516cc4b823801ee570_265678.fix -txn/fixtures/858143e9c97c4c7ef351403f210cd5227c141dc1_265678.fix txn/fixtures/8584a658b6b81d0a7a3fa0487b7d98305cf2dc5d_265678.fix txn/fixtures/85a5e55185820b8351da3f707e12953740888fd9_1831549.fix txn/fixtures/86228fb07572aaf99c3261aef5a327dc946fab82_1836600.fix -txn/fixtures/862d404d411a7e18ae753412e1740140d7db403f_3195704.fix txn/fixtures/86395b4225619c786adedc129b7704513e0bff4b_1844482.fix -txn/fixtures/869745c989e8293a411b34303b553040d13e1489_265678.fix txn/fixtures/86a0f47899155a1b8b4b419580d5b149d2de720c_1845492.fix -txn/fixtures/874677584a55f3638285d1d56f494283fe1a04c6_265678.fix -txn/fixtures/878fca250a4597dc8be81f94c0c6562065ddf399_3204556.fix txn/fixtures/8813244e2e31cf049192ee6378a4ced01ab0739d_1853879.fix -txn/fixtures/8882ce10b622347d25df35d61eb03f4c03b58571_265678.fix -txn/fixtures/88a20a3211cc13cf73a420b249e2fa2a90e3e1eb_3005033.fix txn/fixtures/88d538b8c654183b6024ca6c186fc040952b498c_265678.fix -txn/fixtures/88f2bb01740b1934ca2f3d84d07a1ea77a1729aa_265678.fix -txn/fixtures/8909474439a9d13f28de8409979e6f1485c29f01_265678.fix txn/fixtures/89a4155352fab4d7a2f7779a4577f87adaaee9c9_1851188.fix txn/fixtures/8a0ea672e3fe2fb9fbbe6e93a86ed8b9e1ad43bb_1850949.fix txn/fixtures/8a9a49c4d42afb1c8bcc8209f009d847214a0b2e_1850193.fix txn/fixtures/8aabaa13c469f8e75020842899bacb24f7a9e154_265678.fix -txn/fixtures/8ac234a9308c1190c404e6a63576063f55399c9f_265678.fix txn/fixtures/8b3b935ddd03507493dc9867f606b68888bd946f_265678.fix txn/fixtures/8c00535b747c262681aa014f688dafb22c34546a_1631431.fix txn/fixtures/8c4955dd69c00798ef7b6dc1e5836b8d4da26f54_265678.fix txn/fixtures/8c6152fda477417ceee7627fcf14bfaafb20310e_1828940.fix -txn/fixtures/8c969033df5cadb1043d1e28ccd371232c0bdbd8_265678.fix txn/fixtures/8cc0cafd6602956e0c3fc35c1844578785b9337f_2312950.fix -txn/fixtures/8cd5129233ab8d1ce5428ac5fe51f0c7a3e1f723_3195044.fix -txn/fixtures/8d585bb3782c1616c715608a5917a7a38e644633_265678.fix txn/fixtures/8d58fe7ee312bd41d25b223ece2e632441cb7fa9_2292395.fix -txn/fixtures/8dab1e53c8d72476e278c5041c64b918413beeec_2203103.fix txn/fixtures/8dc1dd2e1e05a8b1e65c8058f37eb24bd3ac87ac_265678.fix -txn/fixtures/8ee116717d81881f6e21fa3dfbe3f33d8ba502f2_265678.fix txn/fixtures/8f2e283aa7e2b0f52994e7312429e58095a2e33f_1830783.fix -txn/fixtures/8f5a719fa8a8e52fd182b4f1a59ef1fa93a411d8_265678.fix -txn/fixtures/8f8a1715f18999a5a28cdf1451c8fdb9261886ea_2192755.fix -txn/fixtures/8fe1c06bbb70dd854d6044248af8ddacb8dd4c60_265678.fix txn/fixtures/900e0f020d6c8d0915ed19a5c54adafd979a3390_2277057.fix -txn/fixtures/902cb0109f3e57ee8b4037582c47c6c66e5d8b6c_265678.fix -txn/fixtures/902eb5404a6b532f8ae8749055875ff54fd29b03_265678.fix -txn/fixtures/904207059d246f5e6b21f01ebe670a236b523727_3201951.fix -txn/fixtures/90947f3a153831cdb64a9e3b5b461d4b12d9503e_265678.fix txn/fixtures/9099ec62e79fb957f8d6359194ad7ac034cecb10_1854074.fix -txn/fixtures/90bfea1be486e29c8e1da62f4e28d28301223d6e_265678.fix txn/fixtures/915fa677a9682253190e56f106e396eef5f92c46_1835979.fix -txn/fixtures/916400c914fa36225a1f05e1406a0f6697884ba1_3193722.fix -txn/fixtures/91c096eb22aa1a690ed39be3d14963ab040d35d6_265678.fix txn/fixtures/92494c89701e7bcb6c4d706a5d9ac5cbc60f5da7_3001125.fix -txn/fixtures/92515dde3244f54bba8913577e3b49c7b61e840a_3194372.fix txn/fixtures/926ed4930958cf81adcebe46f01e3d2234b906e9_265678.fix -txn/fixtures/928387d45f038f2f95c746d588386dd5c0189171_265678.fix txn/fixtures/92b26e8f483c4f477142fc26d8d167558ae69706_2215759.fix -txn/fixtures/9314d57f56d40face8fddca964cf9dec273685b9_265678.fix txn/fixtures/93aee18074e3e54d04ee61eb5749642eb7beae4f_1840989.fix txn/fixtures/94023da412bfb74503860599a0964f33a118c3a0_265678.fix -txn/fixtures/9465dd65dcc1b7102f5f44d219a06ff102c7b064_265678.fix -txn/fixtures/949d4e9006c7bbf556cbfe64f3ca79cbe22cf532_265678.fix -txn/fixtures/956428fc38430d30cb22edf26ba80542acce9339_265678.fix -txn/fixtures/95d912ea8d8a58653de6cd8a0f16f49d3f4038c2_2227306.fix -txn/fixtures/960a60819a97603e9a0c25bc685dcc763a68e354_265678.fix -txn/fixtures/966a8c2f18dd17ea576f94e4a7da80b3559703cf_265678.fix -txn/fixtures/97dc51b75e55e1c1af33d0925c44838813718f77_265678.fix -txn/fixtures/97ffe9b7f2ce8f290e7d1d01c965556f7a9763da_265678.fix txn/fixtures/984baa813f1606d6479c11516b10f7de8f89612e_1842620.fix txn/fixtures/98eb1074e63d8b58177e11a50c923fc570067f7c_1854915.fix -txn/fixtures/992dfbbb645a7fcfbc9a4575cc2830d0b4d6ba78_265678.fix -txn/fixtures/9944301b7524436b6c4a3593e5227b24d7c914de_265678.fix -txn/fixtures/9965b274907774946fead0a151a97d25c7edd11e_265678.fix txn/fixtures/99ee8af617f83582b79a4f7fe9a25a4ff4e02f9e_2218034.fix -txn/fixtures/9a33a5127465a3a906f9ab2cde5d68b2345ac621_265678.fix txn/fixtures/9be1ddb02934e8c8876427e2b074a5051f713a32_1656662.fix -txn/fixtures/9bfd3a5cfe04a0f19db993a69c49db9ae68306de_265678.fix -txn/fixtures/9c101efd73be6fa697ef18cec7a7a2ea73b2ad92_265678.fix txn/fixtures/9c42ab0d666a2d86cb138bf0e972e845666782a1_2448028.fix -txn/fixtures/9c4744e8ab21187c9a833fe102123194036c2aea_3205227.fix txn/fixtures/9d25474605a1502c2af0d475f20f05f85b59e08a_1837332.fix txn/fixtures/9d334c05245486e8c1654a6e90d02f6b906ac16d_2224447.fix txn/fixtures/9d763cea6739a560ce16ef2f9d47812c00aec14a_265678.fix -txn/fixtures/9da3a0d88d15613311e43d03cb97e28961bdca77_3938735.fix -txn/fixtures/9dacaaaf67b58eb8428385fc80972cd1f7f74260_265678.fix -txn/fixtures/9de7ab82ca6cdc4682b90b83817d16f2b8352055_2615889.fix -txn/fixtures/9ea30f4e4322436a1907dee4386a54aa8c3c6342_265678.fix -txn/fixtures/9ef3e3da9e83e89a6103c47662eac41319cb8f33_265678.fix -txn/fixtures/9f5dc60538461eabfac70cf55b7e189b4d555ec4_2217168.fix txn/fixtures/9f6aded852cd5c2e18781c96ee7aeb35e477488e_265678.fix -txn/fixtures/9f8e3d308c0fe43e6f5d206f31ad06ea77bea086_265678.fix -txn/fixtures/9ffed8987dadd85def2958630f594c548af92109_3007559.fix -txn/fixtures/a0251685f9005a675c8884c0d5697eb2d7b5d6d0_265678.fix -txn/fixtures/a0493bd790f7fc25011b4914267fc85ca3adce9b_265678.fix -txn/fixtures/a09a21c6bd330007c4f9d6cf15c5e3d335c32dd7_265678.fix txn/fixtures/a0a419811c5782d53b3416e82c9306e5cfdaad8a_265678.fix txn/fixtures/a123f7a195b3d3ce6451873414b3fe266731911a_1851874.fix txn/fixtures/a14bfb3f634cbf09a8ac7856268969af33160902_265678.fix -txn/fixtures/a168407284fd50b5018df8487130ee36fc443fa7_265678.fix txn/fixtures/a174d16d3f9ceb53c864c959f95624239f06f2ea_265678.fix txn/fixtures/a23874e785cdbacabcb9bd2914e5ff5fcf18a87d_265678.fix -txn/fixtures/a245b59067f0aa296a84a3934851a025c5cc996f_3203269.fix txn/fixtures/a297b88b2bd727731cb0c628a545fbf97f46b508_265678.fix txn/fixtures/a2ea969d9af56dc3ac5ebe3b7bfc2bd544fec487_3164284.fix -txn/fixtures/a2eed62df8e13b5500bbb0a7f49d4b342f9f4891_265678.fix -txn/fixtures/a32458016075b6fbd13e5700b3082378c710d02d_2253730.fix -txn/fixtures/a38efef875200c56f775e01b3509ee9f56bfc711_265678.fix txn/fixtures/a3939063e16c1035b03f8f108dbb9fd82b3d2c5a_2996796.fix -txn/fixtures/a3990ca1f964fc6b79c3f92c7008e0554bd37773_265678.fix -txn/fixtures/a3e8fb8a5c9a322a9fa40caac81929f6f1935107_265678.fix txn/fixtures/a40a338847d331360470dc22de6d431944ef950c_3014147.fix -txn/fixtures/a4740b103e2330d19970231be0d6d071287a3be9_265678.fix -txn/fixtures/a4d0e9e046fb776b700cf72eb673600cf6ff7749_265678.fix txn/fixtures/a5d2949d14b6735be8c7e8eaf69c2c2519bc3559_1854165.fix -txn/fixtures/a5dc9bd00330f535309d9e0643f1b14eb209d6ea_1120365.fix -txn/fixtures/a5fef0435a9f27155d69151a2a0766baa27ca2d8_265678.fix txn/fixtures/a6ffd1c4fc1ed23d32f4d1c5f8936d2786a539cb_265678.fix txn/fixtures/a7727947178b8fac2f917d7eaf1b6cc5ff37aa1b_2792063.fix txn/fixtures/a78c969442f248595fd935789d783e0c00708de1_265678.fix txn/fixtures/a7aaca3bc83b1708ea8d5c315e4fb2a36b4f4b8c_1851472.fix -txn/fixtures/a7bab63207ecbaf045dbf1ed9ffee3ca93a1a391_265678.fix -txn/fixtures/a7bb3a8e84d3497a8befdd47822777ca66041de7_265678.fix -txn/fixtures/a7d93f93064d7e9a9c6e82dd9ca1086083575cd2_265678.fix txn/fixtures/a81b5ff9ac6a841103606d5c7aee49ba99d597b7_2867137.fix -txn/fixtures/a8608185b6a581863a5b0ffc21f53705acf9a0a4_265678.fix -txn/fixtures/a8ab7fa2bd1c3fc851fbb5b7ffc2ecc1483ea788_265678.fix txn/fixtures/a8cc342d394594cae45077679e440cea785f932e_1841656.fix txn/fixtures/a8d497234c17b71302e6c69c152e154ae6529ebe_2137938.fix txn/fixtures/a8fa9b8b6f6ec00b1fa5a6ba63eb2f89e0b2aa27_1856735.fix -txn/fixtures/a904a43ce48b537fc40076ecee612957aa60b30b_265678.fix -txn/fixtures/a90ce7e1a1ddf8dbebe23b5b8c00e5bc2afeccfa_265678.fix txn/fixtures/a956670f73e382ab88d5669b1faba69bb6c85d49_2135809.fix -txn/fixtures/a9577cb56e3b1d2e0d58557430856a42390cedf5_265678.fix -txn/fixtures/a9599871b8c8f5bac68c17121d4bc7392846c5c4_3202563.fix txn/fixtures/a9d5f7e1d981f9b638585a34214ce7cacecfee59_1852434.fix txn/fixtures/aa33764c37be1a634272275976d05d8048c692d8_1835325.fix txn/fixtures/aa41354131885b471f301100e5a614a16b21cbc4_3139208.fix -txn/fixtures/aa7aa005-ba12-4d08-935d-18ed0bc1a54f.fix -txn/fixtures/aa82f8da1905d69a5ba853c7ac842af94ef2d81d_265678.fix -txn/fixtures/aabe725582c114a80aa12a6e8f0aa8e5c3e5b59f_265678.fix txn/fixtures/ab0cd6746e5848ce4abb59b14d082a8607333937_1855878.fix txn/fixtures/ab5c3fa4637768bd9c9f4f43db7fb14ba995cc51_265678.fix -txn/fixtures/abbf8109e4ede5fbd0a1079d195314ff927c275c_265678.fix txn/fixtures/abd3e18d9c1672c7ab644be17ae30c921e72c4dd_1631283.fix -txn/fixtures/abd602c02af29809a0066c80dc5e7b61e9388e58_265678.fix -txn/fixtures/abe27fb52854fa72463de17307d83843d1718333_265678.fix txn/fixtures/ac225589802c9c34e3f2186461321d856cb7fc5c_1830866.fix txn/fixtures/acadfefa0956329a54adb9eb91bc155c5334aa61_1838493.fix txn/fixtures/acb16b5cdb6fd3c8c7f322672ecb3e157894962b_265678.fix -txn/fixtures/acc3d0da8d7a81ad226de1e71d597a2318ab5c6a_265678.fix -txn/fixtures/ad79beb42586e725172728a7b74845423d776282_265678.fix -txn/fixtures/ada9c869b45e2a006b981f0471e53bacbb0d1e25_265678.fix -txn/fixtures/ae3625448cac01e396fc1ead34823c142753ef9e_265678.fix -txn/fixtures/aeb7be2d6151d6a93a2cd0d207fb11c058e2211d_2616294.fix -txn/fixtures/af03bba519a9f60bdecf50a3c372ad89d3a39fd2_265678.fix txn/fixtures/afebff8c902c8e31d5f5102b38c778f92eb26676_1853402.fix txn/fixtures/afec50a336bda9ebb2b56367e9106bb624af9194_1835503.fix txn/fixtures/b0276762c6cba47ae691a295c3603ef0683f4a1f_1856367.fix -txn/fixtures/b0719e08e8c82925aa3cc63b95223a8695eca38d_265678.fix -txn/fixtures/b229e60b65b3cbabc79376c8bef9b6e63f470559_265678.fix -txn/fixtures/b244ad13b1ec11f5a4a542f341628dcbb0bfbea5_265678.fix txn/fixtures/b252f2a3680a0649e9acad79001c028234000d0e_2301141.fix -txn/fixtures/b3494253f0ef28bad7ca69fc8ac69ed72b96c7ff_265678.fix txn/fixtures/b3ab657f670b87a34b9ff134c1a38b2a20d984a9_1832301.fix txn/fixtures/b3bbc6a8c8603ab89b90af746e03109d2c65398a_265678.fix -txn/fixtures/b3cc3555e363a989c715925a571d148feafd0002_265678.fix txn/fixtures/b3d260dd5aacdb5319382d353000bc15a472fed4_1831163.fix txn/fixtures/b3e3ae1ab8167987442836c7e819c19f60423a3f_265678.fix -txn/fixtures/b42a2e58be012e68b67ceacd5480374587bece87_265678.fix txn/fixtures/b44fc5a1c28ea957004f1ad472112a0d14b408e0_265678.fix -txn/fixtures/b482790f6d484b541a42a50674aa8b34f83cacdc_265678.fix -txn/fixtures/b48ebcded3e1c2cb73cdcf75b70b8ea5652366e9_265678.fix txn/fixtures/b49ee10e80e1b8f61cb8e921f05248887bf8f547_2210077.fix -txn/fixtures/b505236338a0a915c5d7eee2b8bf30c610da3436_265678.fix txn/fixtures/b58fd1189fde031f8473768170db3d11e56ec7a8_265678.fix txn/fixtures/b5feb69c36929915f3d24aaa79cd5786eee5aad7_1047123.fix txn/fixtures/b6b81e9ab5d516c42a7152204ad6e3b28413a1d4_265678.fix txn/fixtures/b6e26999a2dc85430d10904249e64fe8113c081a_1832048.fix -txn/fixtures/b6f709b7dbe16143728231f44ab34890065180b2_265678.fix -txn/fixtures/b7094bed14adc8b0f2866963ccf3a8ef1f9e8a62_2206152.fix txn/fixtures/b7154ce3c1b0551eb1fc8c35f7b6c829b2e3f34a_2232069.fix txn/fixtures/b726d4dd2f13ddbcbdcd977f13a10573a695f166_265678.fix txn/fixtures/b76dcdd0dea13818a4d41f338da23e8abfbe3a89_265678.fix txn/fixtures/b7cf2485b3389767b1fca4cb91dd126d0d56cdce_265678.fix -txn/fixtures/b7d6f98c38e149946bf6959d13766b691a983347_265678.fix txn/fixtures/b83466f32657d88db928d832406a5c3e24c60ba2_265678.fix -txn/fixtures/b8dbda1d6036163e8686f273c50f7e7d79c9cef0_265678.fix txn/fixtures/b91c038fe6bc76b330f4ae8719a9e8c47a8d28ed_434577.fix -txn/fixtures/b95602a274d92106dacd2f1d0f22d6ac4c94d9fc_265678.fix -txn/fixtures/b9c08c8cfe2b40fcabdae79704badf91a84eed7d_265678.fix -txn/fixtures/ba248607fae5fba35c2656e5b01e32f9a42a4f77_265678.fix txn/fixtures/ba37401858f4d85da859a6de290fb3df534fa692_1852911.fix -txn/fixtures/bad36ca20e56895a7a76d3aef0637c4d7e9eee59_265678.fix -txn/fixtures/bb1514b0b0bded457d58d7ed4ca33c087d699522_265678.fix txn/fixtures/bbcdc9d246f7a7af53e1683e9ee51599f1bf2513_2384774.fix txn/fixtures/bbd4f9ecf803917a5601d4fc0d296c21c830b17b_265678.fix txn/fixtures/bcaf8bda8d006cbd2a990bab60b3d4b6979b465f_1836368.fix txn/fixtures/bda25c4707cd2eebe4f419c1c9dd471d9efc5562_1856174.fix txn/fixtures/be03eae707522c8aa66619f3d4b6a9bb8de56c95_1831743.fix -txn/fixtures/be54effdb9b437d6556a495352edb3fba9c1b949_265678.fix txn/fixtures/be5837c2047a37f4e55c4270c7fada6411cd4332_265678.fix -txn/fixtures/be7d3d1be5f3ed8990bd26878b4e0797ddc3aa90_265678.fix txn/fixtures/bf38557317a51fd1cf28a166cd03281b4faefe58_1855509.fix txn/fixtures/bf3e8690417c9a589b076490af2b71065a167000_2218057.fix -txn/fixtures/bf67cbf0a7bc9493111e07169d09ab78040acac8_2915173.fix txn/fixtures/bf70c3db4ecc7db10de91aec692078da50bd8612_2977975.fix txn/fixtures/bfb204da806798a7df5c644ed0673e3f47f3df57_1856450.fix -txn/fixtures/bfb3e350da06e5a312781b3537e13e99a6c38c78_3002710.fix txn/fixtures/bfc3633bdff93992fa40ece7a0f2ff4af13b7114_265678.fix txn/fixtures/bff99fcac94747973b69868afd6e91e25037e3d2_1849276.fix txn/fixtures/bffe818cdd14dd7fc9f9ca02d976b6f71b6accd8_265678.fix -txn/fixtures/c042be7053c9a4c5c8a1feab4252e154af566ee0_265678.fix -txn/fixtures/c075c3b2a659cbf9e0d2538f59aa7df0dbad149d_265678.fix txn/fixtures/c17a04c4a8076bec11bfe18f6e744c8e832cf144_1836083.fix -txn/fixtures/c1c6d12e6c5716a12184061545754d2bfb780cb4_265678.fix txn/fixtures/c1db4d942a10e54fabeacb15073d53155e81b58a_1836186.fix -txn/fixtures/c1ded97b3bc9f6048e0b4e6421ee9dacaf77902c_265678.fix -txn/fixtures/c1e09bbfc88aebe03940a5f15dbe71b79165a1cc_265678.fix -txn/fixtures/c21a5c0d662d100804ec121e3821116104e1999a_265678.fix txn/fixtures/c22980233dd93f6284f7ad0c28807230921f094e_3000928.fix -txn/fixtures/c2af7a65c9310c7e5b3b4d5b3cb985ca6b025cd7_2774990.fix -txn/fixtures/c2b2968bb09dc71bf2639298b41e86ba0d187850_265678.fix txn/fixtures/c311998190f56976677a90cda24585cb9fe186b1_1848259.fix txn/fixtures/c3319fc3a5c525a7612fb139ddd49862e01fd909_2766868.fix -txn/fixtures/c4346ae25821239908a8f6e74a0e29c1af5a339d_3006139.fix -txn/fixtures/c46cc5e2c437281feeff1c2f2c16e06d83336b7a_265678.fix txn/fixtures/c4f74ded3df9536d06e38374686a8cf7222c209a_1851941.fix txn/fixtures/c57bc335789bd447076e33771075e833c72fd796_1848503.fix txn/fixtures/c585119403b03894f99ab0d0041df9448e929205_1850781.fix -txn/fixtures/c6041334df8c6bc91ee18ecd3e175e53348f70d6_265678.fix -txn/fixtures/c63bec47eddf7ddb6b416d6928e3443cdbc611b0_265678.fix -txn/fixtures/c69c8d38cb12c777675383f75d318313a1ce31b3_265678.fix txn/fixtures/c6d66b4db956c98df4852b067b67c9d5b9da872c_265678.fix -txn/fixtures/c6eedc180a6c3a0992431882164ae76f0fee35d6_2233755.fix -txn/fixtures/c83d21cf81c61a0aa42c615229d689dd6b8440c2_265678.fix txn/fixtures/c8658cc65f128f42d665f3efed7b99c270ba47f4_265678.fix txn/fixtures/c8bf0f7748102bc79be99ba1c67863388557d17b_1856561.fix -txn/fixtures/c8fd2b6d8fcf9d207a5b1345110bbf89bec3a9a7_2999751.fix txn/fixtures/c90c6cea3563435591f4045003e8a51aab847076_1835612.fix -txn/fixtures/c918bb96ff441a0d714b9462bc8ba30877e26eaf_265678.fix -txn/fixtures/c98ff2bf209d7d9a17547a7542f36499045f4518_265678.fix -txn/fixtures/c9938c58efc85910ebc637c1d5135195a7fe6d10_265678.fix -txn/fixtures/c9d947883a85c84dbcf98bf6baba3d01d41bdebd_265678.fix -txn/fixtures/ca6b9e098bf9489b685d017e2c01c1b96f685188_265678.fix txn/fixtures/cab41c4453c9760b32a6015be5823cce3750b032_2009105.fix -txn/fixtures/cb0b8581bc83230bd4d0875a85f184eef626ce01_265678.fix txn/fixtures/cb7c310784c6bcb3830404c12f4fb4ce9a84b327_3000240.fix -txn/fixtures/cc3686dbf8bb4cdd514dd16d694d7cbbf25988ff_265678.fix -txn/fixtures/cc508a9716a6ade28e2ee1f673df5acb8e9688b8_2989411.fix -txn/fixtures/cc63407dda8f3c3c3d99b2c662e6fe9f3fd041c8_265678.fix -txn/fixtures/ccfe521404a8a12e4b25213d14ff9d7c24e9710d_3199336.fix txn/fixtures/cd473f23d80528c126a6adae67dd4132d9b503cd_265678.fix txn/fixtures/cd519d1b2ddadcf61a520aac821870d498a52c4d_265678.fix txn/fixtures/cd54f58f05fc2ac4f43456379250e88507d82833_1833087.fix -txn/fixtures/cd6d45668c14f68e45270e201e72eb4a9d817fb4_265678.fix -txn/fixtures/cd8c01ab2eb7b5e3fd3a63c82c063de0f3c4be75_2997918.fix -txn/fixtures/cd9706a1a24c37cf52cc006240c98aae5bcf327f_265678.fix txn/fixtures/cda727e9e38a7d9e8b6ff1cc018c838e1d608766_2201875.fix txn/fixtures/cdc58e567cf94ca25fd31398804c836a77d974b3_265678.fix txn/fixtures/ce493409116b3034968abb608d798baece7f553e_1847499.fix txn/fixtures/cea9e470d627d36509718775fbe4b2585b9d44c1_2679940.fix txn/fixtures/cface980aaf3277ca198f5929758a342ed9b5ee2_265678.fix -txn/fixtures/cfedcab73fbc13b206765d606fac26c7044e028f_265678.fix -txn/fixtures/crash-42295e53abb4382e2d579d46dcb1b20e63f030ea.fix -txn/fixtures/crash-6aa10f902c19e5597dc9fe11011fc737554ffc51.fix txn/fixtures/crash-e3eda019052824e98491250efb7219598227427b.fix txn/fixtures/crash-eb9e4a94882cda840fa4d8d8a390564ad7443ee2.fix txn/fixtures/d003f9a49feda90e7fd377e6080e3ef516d9ced3_1856840.fix -txn/fixtures/d019aafb62dc199dfff9468ca530e954585eec8a_265678.fix txn/fixtures/d045c725a267e9e473f4cae7247d6249e240cbb6_1833571.fix txn/fixtures/d0515172499121ac3c4a13c5b0a9e3e60eeac571_265678.fix txn/fixtures/d06bb4ed4be81631209bb51839a79b2a449a95e1_1829555.fix txn/fixtures/d07b9d0ebc285fb6446aa45e14c69972a7e42cce_2842091.fix txn/fixtures/d07c388a409ef2e239e7fbb38a1974564a1efd28_2990044.fix -txn/fixtures/d0a69ab08faa34f8e68749b22ac3ab18db13b85a_265678.fix txn/fixtures/d0bc26bbc043d91e92fa6386b54557347ff4b971_3052099.fix -txn/fixtures/d0cf6f61498209b1e69c58a0f4c2b9044e2637c7_265678.fix -txn/fixtures/d0f2be71036a256037d18699c4d4e3eaa402d853_2217091.fix -txn/fixtures/d148157479d126e92c60cd11e9012b3c82003139_265678.fix -txn/fixtures/d1e8c681573c2c572eeb1e6321e3349e7ef51031_265678.fix -txn/fixtures/d1eb9cbf0335e1067b6c603c5123b7700936f77b_265678.fix -txn/fixtures/d1fc16a60abc1688286e7dbc07c1cea689c1afce_265678.fix txn/fixtures/d218932653918941ac3e0cde2e3b5d76360e70dc_2994121.fix txn/fixtures/d27324b608042c32b4951e9af57e7ea29aa1cda1_265678.fix txn/fixtures/d2c0d0b9841a67a03f741cec08956b31911856bf_1842729.fix txn/fixtures/d2c26aa275901b3b99378d52c51e1592c1c23bee_1839239.fix -txn/fixtures/d2d17b5bf0f89fd216a7555ce52764873503aff5_2910128.fix txn/fixtures/d2d392281aa3c02d60b4bcb45953778cb335bcf6_265678.fix -txn/fixtures/d2e761165a773da374c28c98018a37ca82ccee6d_265678.fix -txn/fixtures/d2eefb878243b325b5f36709173167cb90dbaf00_265678.fix txn/fixtures/d3022fba4650d088c5e41446263b702f84bfc132_1831655.fix -txn/fixtures/d38e520cdf0dfaa9c740ecf23ecf71282814583d_265678.fix txn/fixtures/d45ad4066b83dcfce4f76815c37d688554939ada_1846976.fix txn/fixtures/d4a36941742242d5ed5242bf2bc73ad10bbfb383_265678.fix txn/fixtures/d4a5ca366478576979ac7d454fa9b3a82e411642_2892039.fix txn/fixtures/d4af641fd573e18924936d96308e49ebd849da9d_2138001.fix txn/fixtures/d4ffef5761857e1accd03aea113f303d13f956de_265678.fix -txn/fixtures/d51dec2e5afd8e8d70df365157d41da3856027f8_265678.fix txn/fixtures/d5954881b2be285da89643d9a32b78da1940fff1_1842443.fix txn/fixtures/d5dea7c1270fe458ac0106a37d7b3677b3397b58_1851366.fix txn/fixtures/d608421f8e583e766d30ccf57edb4e71c224a99d_2137433.fix @@ -1043,32 +647,13 @@ txn/fixtures/d60e218900b3d0399145950c03b9e7af6759a66d_265678.fix txn/fixtures/d65476b929e61cb7210e51e0f1b69ed0ad694fd7_1840889.fix txn/fixtures/d6644312b1b53f4e870f12331edf4e72d35eb963_265678.fix txn/fixtures/d67f442716145cf5645900048f5d35466cc88ac5_1631585.fix -txn/fixtures/d701757011399fb1931ec091e274b3ec98918632_265678.fix txn/fixtures/d7c5c60d776e0404f1a9798046e50968517d43d1_1838409.fix -txn/fixtures/d8b734400408fb9807ef8d5600f630d779deb29b_265678.fix -txn/fixtures/d907c1029bcdcfb8e2cd95e40111e8328bfd9986_3193374.fix -txn/fixtures/d982991cdb8f20554b0863f33082bd8db6c4b52f_265678.fix txn/fixtures/d992f06bad1c38a19359a816819ecab86de1b999_1857034.fix -txn/fixtures/d9aa02c302851c9a420b315f8c9c1af5c8e6648c_3206196.fix txn/fixtures/d9acea42d3de342b8eec3577a62390cf57815fa8_1838018.fix txn/fixtures/da6b4a8a98d554f0ae230a8a3c2c13d3b6075e4f_2435227.fix -txn/fixtures/daa97727e7d5748b2a188334469154a8b7a18992_2998094.fix -txn/fixtures/daac26c2fe7c40ca7556d351e1a87dcfa85dde5c_3191897.fix -txn/fixtures/dab2655eeb2e7e99f65c094e5088fb6c884cbf9e_265678.fix -txn/fixtures/dae43c79da7d10b3e83675b80ffd55d14d1b8c5a_3200465.fix -txn/fixtures/dae7aeec32213220f68a6d56b64625d5ab0426a3_265678.fix txn/fixtures/daea754f668170f42ae2d5fb4e8a62ba4ecaf2a2_265678.fix -txn/fixtures/db5971c10cdd4cdecb9895d9f2e28020a7d1514c_2224115.fix -txn/fixtures/dbe006a291127f1088f04191c5488405a6e6581e_265678.fix txn/fixtures/dc1ec0a63c4f7e278ccf01a282dcca8c48fb07c5_3038936.fix -txn/fixtures/dc8b9f28a63b3f0215dec3934f016d0bc4f8dc5f_265678.fix -txn/fixtures/dcb9b39a8b6de728f368f3915c77345117ca22e4_3192549.fix txn/fixtures/dd59f3bb3afc532e078305e56709598770984a69_265678.fix -txn/fixtures/ddbd7995041398f16fff5edde9557503b3c4cac3_2911561.fix -txn/fixtures/de4ff0c6c28f94b9f827b69ec65ea6265333b11f_265678.fix -txn/fixtures/defc87ccadeccb8f59acdd89f4673130395245f4_265678.fix -txn/fixtures/df3bcff81c202bc1fdc14567f2d24bf6888e4424_265678.fix -txn/fixtures/df419995bee5356ab3c9c0b32c13a1d54f198e9b_265678.fix txn/fixtures/dfc4e91f6924adb421b44c8a311c4bc1a0d4dd90_265678.fix txn/fixtures/dfc9a4268f942a654738d31e68d8b352fdf6ca01_1839690.fix txn/fixtures/e00ca6343f9bb435af5873e8fa398ad270aba864_265678.fix @@ -1076,57 +661,28 @@ txn/fixtures/e027057bae1eb010f91924ba3887cf1cd0582e76_265678.fix txn/fixtures/e0b50c9e64ddcf1333cdf66ce4a073e3e503cc27_1846044.fix txn/fixtures/e123bcd0e0412c7af25cbc7b2c3b3f93959b2d1f_265678.fix txn/fixtures/e15471bd95ae1dc94a9fe8ed2f1a98c629d7237f_1852539.fix -txn/fixtures/e183dcb487378b1f75beea0dbfe290a00a5ca145_265678.fix -txn/fixtures/e1cd5ce2265d6ece11e3abf220474f0afc4e63b9_265678.fix txn/fixtures/e29593df28ff95101d9521ab7be574e17a7575af_1844412.fix -txn/fixtures/e2d2dcc0569bb9e6b3fcdfe870d442bb93aab252_265678.fix -txn/fixtures/e2d4b640d33094c1d31af75ca76d21f5720252d3_265678.fix txn/fixtures/e3390ea8feb73c4e5d94fa6119c7cf7eda070f5b_265678.fix -txn/fixtures/e393e0315b78cf99351f39a09778a821d4894476_265678.fix -txn/fixtures/e40387844fc1a98715f686caef8a43d790c4425a_265678.fix txn/fixtures/e40b8950d4fa05015bb55eca6844516f77f7e5e0_2941208.fix -txn/fixtures/e4392e419498ecb05ac36f83e3e74a5c60c0526c_265678.fix -txn/fixtures/e4473e9683d3b5f92fb260375b1a63793844d5a6_265678.fix txn/fixtures/e447bfcf38d7be9d28c994fe8cbd3ea09820acc5_265678.fix -txn/fixtures/e4517f1093f03799afb5f004881dfaabebab452a_265678.fix txn/fixtures/e49734a3631e43b94e5529d5b98d13398959394d_265678.fix -txn/fixtures/e4fd728ca62ec5bce2360a8d354b8cb002cbb0a5_265678.fix txn/fixtures/e52d51ce0cfd30e401db4051cdbd3fff6f8a2804_2964935.fix -txn/fixtures/e5afe05e58c2cd6069c2025c8e7629dab5855eac_2219049.fix -txn/fixtures/e64213b2ceaf5d020ba7d09595e841a44bc2c0b9_265678.fix txn/fixtures/e67d6f2aaeef8bd379d31bfe5c215aa2bd14117e_1852174.fix txn/fixtures/e69c5574dfd0725d46ff5298c64c536b65abacaa_1834145.fix txn/fixtures/e6e7c57455958c67bb46fa64b328b23b45dc9591_1832917.fix -txn/fixtures/e717efdf1f1e228b80b4be9881ad6ab31e090daf_265678.fix -txn/fixtures/e75142d356abf68b6df0310b387da6faf9201fdd_3205374.fix txn/fixtures/e7ea7ace535e604a8e6ee07cf791292490bd29e3_3882152.fix txn/fixtures/e7fcaf588511d4df2cb28332a5e921865c38e867_265678.fix txn/fixtures/e852802fb52344637279d37a5a04cefeb62c5b99_2325257.fix txn/fixtures/e8b60fde5331ac70a2bf831fa0cab4a3e1d2dc26_2471891.fix -txn/fixtures/e8ea5b9b7e2cbe6aa53f0812c4470942dcb9fb78_265678.fix -txn/fixtures/e8fbf185dc68efcef012fea41848763e707cc413_3201250.fix -txn/fixtures/e938ca42a183f2f7f781733b5ebca3221c022915_265678.fix -txn/fixtures/e95f75b80b04ab4c4fe6fd9e06c40597ad88ee8a_265678.fix txn/fixtures/e98937d918fb2a918901a0d04de498fc209a8dc6_2195134.fix txn/fixtures/e9908a2dd2428cdcf706d496218b3faa7d58038c_265678.fix txn/fixtures/ea4712553ea96d1145b4c66f12f7cb29d1aca394_2140488.fix -txn/fixtures/ea47c21321d68f265c79a0acc1294acc43076971_265678.fix -txn/fixtures/ea57e9f463aae3278135e23c73c10d5691ed64e8_265678.fix txn/fixtures/ea61f1835dbf6f41385197459b9396f66e3af963_2210014.fix txn/fixtures/ea94563416e931ab22d76c2105883e67194496ba_265678.fix -txn/fixtures/eab33aee31ea83749d77e6d3c21cd4af49e5df84_265678.fix -txn/fixtures/eaeb369fbefe02715d92644aa5555b0b239d6446_265678.fix txn/fixtures/ebf841db046ca9c4a57f90cfca539855eba0977e_265678.fix -txn/fixtures/ec3d8f2c5948b8568d9849740793dc2d9ab84515_265678.fix txn/fixtures/ec90abee6109cb2a03639c6983f59c7558d2fb64_265678.fix -txn/fixtures/ecf1ea8b73d75324afb0fa42a3aa0df802d51f31_265678.fix txn/fixtures/ed2369d375258e5aed27274afd39ae59709a4f47_1829047.fix -txn/fixtures/edad747b6109c0ad6efa1db8b5460451b5d8b3b4_265678.fix -txn/fixtures/edbbdf723b0be5c9024668bab5779bb025a807a8_265678.fix txn/fixtures/edee0cb5d4fd6c17bc45502ac9378fa9b417df25_265678.fix -txn/fixtures/ee2ecce434f7c18771c893900e8740f44429f544_265678.fix -txn/fixtures/ee393422c6408be400b7213945089e8bdf6b8cd0_265678.fix -txn/fixtures/eedf4d2a413d32ec7b1d95a019169b3299f95883_265678.fix txn/fixtures/ef238d9f14c9380df981a4c67c6056f569739824_1834062.fix txn/fixtures/efd07880abc0f819f691c070994d3a9acb7180f8_1851671.fix txn/fixtures/eff2026a9c9c7760436c4ce2ee3d906793fa59c7_1834253.fix @@ -1139,46 +695,21 @@ txn/fixtures/f16491d7aff4141c696e62a5930bf927f6e2ebd3_1838210.fix txn/fixtures/f1693553fc389b082034bc50cccf7136e4305821_1840815.fix txn/fixtures/f1f5ae718e6c516bc77597a263d702be81ebfd29_265678.fix txn/fixtures/f249c20677a5d2deaf347f05c775508985c7297b_2224512.fix -txn/fixtures/f27ff82d90ed714abf2f9d13595aa99854d1d9e0_265678.fix -txn/fixtures/f2a8d33f38cb6e6c4cfb2f2379d4b8f3176f2b08_265678.fix txn/fixtures/f316480b11b0cc5fccd44291e01bde6aeaa2f27e_1834356.fix txn/fixtures/f34767af09d1315afbf8ea58ef9e55f419a685bc_1843964.fix -txn/fixtures/f3e251951eae7fa0df103c1274285133d88e9a22_265678.fix -txn/fixtures/f4049a08292d86241aa19174d29cbf4be1f39ac1_265678.fix -txn/fixtures/f497797b3b0d2db3732ce8537dd10e3452d8ea8d_265678.fix -txn/fixtures/f4e1674f7530ea87a6690f64a6b7169e984ea604_3109805.fix txn/fixtures/f4f8b2177f282a7b2e6a7987db3dd1a4d2f12088_1834527.fix txn/fixtures/f53467ce68c50802f19b014cd28d869b6d3e685d_1828872.fix -txn/fixtures/f5483a0e755d038bb69f147eb72aa9a597ffd2bc_265678.fix -txn/fixtures/f59d49be39cccb052188429a81b3013b5c960f33_3196736.fix txn/fixtures/f5af9e09c07a3b146876d7dc68fb920affcc0a97_1854446.fix -txn/fixtures/f676dd9edc757e1aee2877e48a1b5101dd86d1ed_265678.fix -txn/fixtures/f719601ccfb15bf712d288eace02614d6e331d34_265678.fix txn/fixtures/f731c7a693492de08dca9d1b665ba3fb204c7218_3026660.fix -txn/fixtures/f891258625de17317435a72696dde4e3fc9d6cad_265678.fix txn/fixtures/f8d080f8f1b0183b3a0a2ba8c2133af468ec21d9_1837915.fix -txn/fixtures/f9018bf41adcd5873c2e3b3f3cc9525602129f16_265678.fix -txn/fixtures/f97796e04e5ee40275cee2a2c0864e38d98265d5_265678.fix txn/fixtures/f9951ecf8d10fb1b57a32873db65f935f3f9be90_265678.fix -txn/fixtures/f9a1706fcbda914b916cf461736cdfb84812d84e_265678.fix txn/fixtures/f9c508fb5bdac47495a2f6ec9799ba488620081f_1835221.fix txn/fixtures/fa0ecc5c29333b3b67c956ed2cdfbf7dd0d8e9f0_265678.fix -txn/fixtures/fa6b3dec42a222c6e5e3d34d5409b102cac4eec6_265678.fix -txn/fixtures/fa7c3d5ec57cdcee9d5c54323333ac02d7f94cf0_265678.fix txn/fixtures/faa94a86ce1c305065c1eab52d5d9695d3d4bf12_2829813.fix -txn/fixtures/fb11218cc58e23d14b22c76807f0d3d1e0c606f1_265678.fix txn/fixtures/fb1305b2e30e46cc2a321004c061888e84953432_1657414.fix -txn/fixtures/fcfcf9a661e4d82c28fe17e00d27554d2f1093bc_265678.fix -txn/fixtures/fd32cd96bf6f225072259a897a1fbe5ae7facf1a_265678.fix txn/fixtures/fd4262cdc8011b36f47747a0af84aaeb3f3650dc_265678.fix -txn/fixtures/fd74fd3e5fd0c99f6770ebbb468cfd736376ede5_265678.fix txn/fixtures/fd910f14ef5f223816ea114d1af45c71cdf86945_1837630.fix -txn/fixtures/fdd3c7c7e8554b576cd42fc7c89f3fc5c8d0d658_265678.fix txn/fixtures/fe009265742cc09bdb01b11bd3ff4dd66f8a925f_265678.fix txn/fixtures/fe025f048ce62e4f09120ecb8921c5b4872d8fa3_265678.fix -txn/fixtures/fe1800f3e20c46279ef24fff750769952b086d7a_265678.fix -txn/fixtures/fe387eae5fb59b16ba7083667b71bff167b93b32_265678.fix -txn/fixtures/fee8af508b5fa32813192a6c18a77d4202f9ed47_3004369.fix txn/fixtures/ff55e30c1878f181c358f1c0f4da68dd5844f381_1839594.fix -txn/fixtures/ffa46950755b08e86d98c678d4ee042d59e4ef4d_265678.fix txn/fixtures/is_signer_err_handling.fix From 38ecbfd550d44396e3586f4becff2d512391a8e9 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Mon, 30 Mar 2026 09:37:37 -0400 Subject: [PATCH 30/35] fix(runtime): compute budget error sequencing for txn harness conformance --- conformance/scripts/failing.txt | 176 -------------------------- src/runtime/transaction_execution.zig | 20 +-- 2 files changed, 11 insertions(+), 185 deletions(-) diff --git a/conformance/scripts/failing.txt b/conformance/scripts/failing.txt index e85ebb1ff1..fd63de5f83 100644 --- a/conformance/scripts/failing.txt +++ b/conformance/scripts/failing.txt @@ -269,42 +269,29 @@ instr/fixtures/zk_sdk/wacc7_a08f10406aee35a4.fix instr/fixtures/zk_sdk/wacc8_4370fd00b238a5a0.fix instr/fixtures/zk_sdk/wacc9_d13848d723bd8cfa.fix txn/fixtures/006cec687919df8ddc4fd111e60e4864c7a94a79_2288978.fix -txn/fixtures/00dc63d6f5824efa900302649eeca7983e5d3f5a_1834424.fix -txn/fixtures/016b58bef3cbb526df4a67c91f1dffc67ca6f557_1840191.fix txn/fixtures/0179c4cbb9a7110eb246247ca09517720f960904_2194958.fix txn/fixtures/021f0cfecbd5edd05af52b24c1374d5dd13c36c0_3213804.fix -txn/fixtures/03aa332b202dfe5555e2f5ae5c54f661a794cff8_1852822.fix txn/fixtures/03c7c6f82ad963b03675a01bd23846cd2fda345a_2134389.fix txn/fixtures/03dc8d0e3e91b0660e951d913960ff71c2ad02cc_2996610.fix -txn/fixtures/042ff9e461559c7cd129d9a1cd1eb2eada273b04_1842874.fix -txn/fixtures/053ae2dcd2b51f24217d2f647c8b204b97d07318_1832236.fix -txn/fixtures/05dbe5bc20b7f49b174ddb99aad50e87cf6630c3_1834634.fix -txn/fixtures/07586995a94dffe82db72e23dcc1c6335b1db174_1835702.fix txn/fixtures/079985119394d9f4ac831732cedd707541dd46e4_265678.fix txn/fixtures/0a4807f84f6dd1c2760b3712df3846e5aa930906_2410587.fix txn/fixtures/0adfdb20159b81799344d11639fe0b131c6804ab_2194174.fix txn/fixtures/0b6e7a7ed010c514e7b2e121988380ce84e61d2e_2655582.fix -txn/fixtures/0b82e85bfedd12586d9d3698c32a6ac994cfb472_1838876.fix txn/fixtures/0df6674eadbc1117e90b2ce85190f56fd773a58b_2879459.fix txn/fixtures/0f44c4f29823b842e36eaf773bfea339e33aecb0_2692287.fix -txn/fixtures/0f6627ae4bb3370b5ece3b93afd08eb584108ca7_1847624.fix -txn/fixtures/0f867648fb53f860c4832ca7380b8e38ca7f5d41_1833502.fix txn/fixtures/0fb4a1d8c2d58a0a97b81b18880cae0e46b8a360_265678.fix txn/fixtures/0fbf14533d0939462c80b5b77920a3e9b9867dff_2213556.fix txn/fixtures/106672242d5cf9448f9d9bc2d8b15ac62b3fd3cc_265678.fix txn/fixtures/11309bb4648a259baa2424ee81584a4c7506a32a_265678.fix txn/fixtures/11a1fd9cafd16c050f4dd965e2f7cb41548cd172_265678.fix -txn/fixtures/11adaf7c81814f698c9416851712bb124d0c7751_1833873.fix txn/fixtures/12162ad7be4f8db5b27bf27303a500dce2de2770_265678.fix txn/fixtures/12643da37bc7cedeaec9a7c2bc4ac191417a7170_2195021.fix txn/fixtures/12b805123e5476d6eb0ec393cdb7882033cc28ca_265678.fix txn/fixtures/12db676232cd943525ec09c9e7dc74be5a439ec5_265678.fix txn/fixtures/130b22b824fc407eef7dc5b75d398787f58d2c15_265678.fix -txn/fixtures/130bbc2f5e90382cefe7eb02aa655124b1119547_1839094.fix txn/fixtures/142f3b2b185b954e36696311b3b84744508a80d5_2361208.fix txn/fixtures/14c3dc2280a20662364e369b2cbe80e4efed4698_265678.fix txn/fixtures/1577251c4955a4235f38cf004d100d6a8106e17c_2134838.fix -txn/fixtures/1648ae1a9df6e1bb2875b4ed6f168417e2ff33d1_1842339.fix txn/fixtures/17cb99713f28ee8be4164c9c3bd2c4f928fc016c_3000059.fix txn/fixtures/18b4e56da90940d580612d378203e29ab87cc63e_3090691.fix txn/fixtures/191d9e2b0d5e2879df91d1416a98958477ad5604_265678.fix @@ -315,38 +302,25 @@ txn/fixtures/1b1c6088a52984cf848972959b26bcf0d869110d_265678.fix txn/fixtures/1bb8f3fe49dfe1a7c8fd3e7007b1267b70e5f064_265678.fix txn/fixtures/1c948b7fc23384aa7d29fe04f4081e1fed1262d4_265678.fix txn/fixtures/1d7a0059b804b9ddd407dfe83b857f5fb44bbbe8_265678.fix -txn/fixtures/1e9c4779cfc596539c9e2c4629c7525d5cb9f631_1843000.fix txn/fixtures/1fe88a97c6185afd668574ede8b54a764a86f090_265678.fix txn/fixtures/1fff2d993f4d7677640b2b3397320496b076e854_3506222.fix txn/fixtures/206891ac9be95e35959c4f835192a5267e3555b7_265678.fix txn/fixtures/20689cdc20d7cb5d189eca27583e6005c75582be_265678.fix txn/fixtures/209c7df958b10b061a8bfe3f6725c4b8802feb77_3200920.fix -txn/fixtures/209e4ebd1a8072b4cfd752e8297e21249a5fb85e_1848691.fix txn/fixtures/20f2b0e913522ed8eaa8afebd362146105f1dfe7_3126852.fix -txn/fixtures/212c7f5e5a034597b53826eb3ecaee6147321136_1829622.fix txn/fixtures/217e3a35b6e271260611d06bbf3d689b406bb807_2987146.fix -txn/fixtures/21d8bec2658f953421ef8a90c94bb147d6592b0c_1856276.fix txn/fixtures/21ec480f4864655312f3b116cc2ed26a868d5d26_2953099.fix txn/fixtures/21fb4857674201e9f6c173c1f2e83556718c401e_1556049.fix -txn/fixtures/22f9b15c62fd309f4c73e459e07ae2005617a635_1839812.fix txn/fixtures/235799bee53ec2e109dfffb5b6edcd06e41da148_265678.fix -txn/fixtures/25fbaf1cf438b92a4c572cfedb0988ea6be695ee_1855773.fix -txn/fixtures/283c6ca56b95acf39b5b1e2f84b30eef4dca21d8_1853984.fix txn/fixtures/29be17e3a201aa84bbcf279602601ab563a0b805_265678.fix txn/fixtures/2a159c214135a36023fae14efcfbecd62b230823_2631802.fix txn/fixtures/2a7e6de264d39dde620e5b642dde4ffbbfbf0b67_265678.fix txn/fixtures/2a8eb43cad506af249c32619aab8ea70a62ce38a_2201810.fix txn/fixtures/2aaf16427235cc0a1cf9c9ff7fe902fae3c10cc6_2767000.fix txn/fixtures/2b0f92f398a8e2c74bfa24456774a27c953f1aed_265678.fix -txn/fixtures/2cfdeea1e8113fc2e9141967fea5eab91947e39a_1849498.fix -txn/fixtures/2d1d290ed0b97a4c853410f3e70607af8512c71a_1835418.fix txn/fixtures/2da4abe78a4359036ce483cfffe674c90842e02f_265678.fix -txn/fixtures/2dd594dbbdb6e79776449d044f7319b76bf94044_1833391.fix txn/fixtures/2e1941ee15c7450558deb720eed53c6ed76aadf7_265678.fix -txn/fixtures/2e3931ae51ae0ea0b7a37e16a66b03a123e99864_1830012.fix txn/fixtures/2e410a98e6f0b614dce00964a7a2e60d9f764fb9_2987497.fix -txn/fixtures/2f2cf270d2b88532f0eaf52882f57031876f4ac7_1855418.fix -txn/fixtures/2fc52300e86a2427ee7e292a41166076fcdafc03_1853296.fix txn/fixtures/302cdc8b3ac6b980f31de14a9ff9b9cad18f936d_2134792.fix txn/fixtures/306012c394c4f582374f72eb1f191d06de6e4ea6_2522260.fix txn/fixtures/3095efec5218f66db3fd3765b672bfeec6362b2c_2546518.fix @@ -356,10 +330,8 @@ txn/fixtures/31f38752899f744e81cd018eefebd0822a306705_3006635.fix txn/fixtures/324154e969e4a719afe7b079a559f0e59ab3f748_2510065.fix txn/fixtures/326f6aa740e4e6060cc4fc272f8d1e5173a0347a_2484212.fix txn/fixtures/32ceb6737de9a3108558bc59bd1d2299402e1759_2187779.fix -txn/fixtures/33597d7ac0d74e5c347e153ca4cdc05948db6fd6_1851758.fix txn/fixtures/338a0b377eb143b9d2520fd81d6b8658ea71d32a_1183730.fix txn/fixtures/33c664f3c95a2d1a3fff572ada952d3b67dbe2c4_265678.fix -txn/fixtures/34eb326b60ef98d99554dc2ab2d22dac33ad9d1e_1855129.fix txn/fixtures/373f066bf0f80a09e099c78677fa2cc3564427f6_265678.fix txn/fixtures/3799b046a3717e43b056b8724374c468336b9d17_3177139.fix txn/fixtures/37baefd370d9e56c7c6d0eba33c2a4b956a62ef8_265678.fix @@ -367,177 +339,100 @@ txn/fixtures/3846dcbc6a789b614c1cb083bdc736f33065fc89_265678.fix txn/fixtures/38e5b3b4f98ebe5b98f26af1d52c4ea39c5757bb_265678.fix txn/fixtures/39496b9b2c42cec6bcfb0c12cba7a19392bd2d74_265678.fix txn/fixtures/3b45ebbb089bb436aafb68056077413f7da53a2c_2336991.fix -txn/fixtures/3b50f8af523e5536c992b7661228490868d08949_1844069.fix txn/fixtures/3b6d03c12d620a69d7ac3e69dbecf486f5fcb2b4_2855179.fix -txn/fixtures/3c7443062cd3f1c7f3d25ba6ce499f3fb0134cb4_1853193.fix txn/fixtures/3c8d009dffbd36e350abf8faff4da8d1dec717ed_265678.fix -txn/fixtures/3cb629bfeeac65b95bd2be8a7306c41cc357ddb9_1829905.fix -txn/fixtures/3dff5e145729afd0e7e285cc1b78db5eda8416ed_1855597.fix -txn/fixtures/3f7ffebb145c68a5f69e68463a23e32cfb7157e4_1844308.fix txn/fixtures/402551d5cb22462d5b713b3b47a217f73bc3d889_265678.fix -txn/fixtures/423c6adfe6a1aff4a554309e75c7cdd8cf2ece76_1839002.fix txn/fixtures/43142ed9c2d5c64bafb619e8c18c625649cdaf4d_2194238.fix txn/fixtures/4346d7e6f55b29904046e0674a038fa0c6c1efc4_265678.fix -txn/fixtures/437027a0a9527a0708ab6e5c7e38eab18b6aeed2_1841548.fix txn/fixtures/4373738bf97fc0f9fdc340b0868e6bc1db15c31a_265678.fix txn/fixtures/4434bab1dd322682afd18b96c06554aca3ce0d8d_3001829.fix txn/fixtures/44b6d4ad676c785f99cccfeffca43f73f8834c84_2213508.fix txn/fixtures/4553200ffb2641a9b34e87f86ec88560a13a94b5_2994600.fix txn/fixtures/455f74ca25b2fdd9fde7aa407a538e4340cdffb9_265678.fix txn/fixtures/45b7cb9916efaaeb3841ca263a5e4b8b21669a23_3005855.fix -txn/fixtures/45d60ab55491471c49bca58501a6b87426722e0f_1853121.fix txn/fixtures/45dd4971a31ae58798211458d14551780be22c7a_1633256.fix -txn/fixtures/45efcdb697feec8c5647bb55ba0212e0ca853359_1830497.fix -txn/fixtures/45fe397bde8d8c0fd354422e73307a472f07dee6_1844816.fix txn/fixtures/4604704f1c55157bfb4cd54e794788d21f0308ac_265678.fix -txn/fixtures/466ad4fec016b536b24d7976a8aea19fa4c5c0fe_1832985.fix -txn/fixtures/48121f709d9bbfdcf88d2f4954e2ed8ac5bdb8b2_1836770.fix -txn/fixtures/48a36bf607542480ff325b5bef985a7a3f188550_1851579.fix -txn/fixtures/4935400af65c6050004e3e4f757141928ca0b264_1831849.fix -txn/fixtures/49a6c58383f9a9dc67be4993c2a0bbd41635ae14_1838771.fix txn/fixtures/4ab2840c81a2bad348c7c5ecbb632148264f8950_3078035.fix -txn/fixtures/4c22e7041620180a4ba222efcf69f7d383dda955_1847179.fix -txn/fixtures/4c72f411b6b9a81b55c0dcb38ae2f5a7d3f9f897_1834934.fix -txn/fixtures/4c779bb7a33c52b61adb78689d813376e2752705_1841959.fix txn/fixtures/4cbbe2f3f047d244ea3642df5ea3b2a3072b6094_265678.fix -txn/fixtures/4cc95b1b24d7f882b3f6617c0ceb023eb9fe853e_1831091.fix txn/fixtures/4cd57fb435285576274d04a5ffc5dae126f10f2a_265678.fix txn/fixtures/4d2e31198a0100720b4cd0d0588683c28851b29d_265678.fix txn/fixtures/4d648b49922688298a565c85f818ea489e5f6e04_265678.fix -txn/fixtures/4d7f3c1a25f6b4f1b02419873936b18cb938847f_1840006.fix txn/fixtures/4ecc394bb0a5e009a02675e2c24e1a682e726861_2212326.fix txn/fixtures/4f391d783f130b20ff187e266caeea545b3bee1e_2817460.fix -txn/fixtures/4f68ce636348400195b19af2766dc1c644d651a7_1845704.fix txn/fixtures/4fea3ee7838ae7c23f534b89225f581346557cdc_265678.fix -txn/fixtures/50401b4fd6208c97afdd1970fcc98f1cbbe77db2_1851078.fix txn/fixtures/5055f04636f721db8c61add5313b0a48bdc3ef48_265678.fix txn/fixtures/5099c68f47959016785557d97d4536ea77759b4e_265678.fix txn/fixtures/50fd3f49db3184bbcc389764272a4b686fc21a43_265678.fix txn/fixtures/5103b2cca444d542d930b64acaaf3a605f64ab73_2213737.fix -txn/fixtures/514aad735e6760fb52e4c670924ad420426725f6_1833306.fix -txn/fixtures/516e724d030a5e1d0a6c0eec8877538a70c64344_1836690.fix -txn/fixtures/516f366b7c07d3f9faf08dbe7114365406706d0b_1848140.fix -txn/fixtures/534803e8258095dcc5952ab1329d1119b816ed4b_156594.fix txn/fixtures/542e30d2e06079f3ddcb767c58ac5463618bcd07_2619392.fix txn/fixtures/54490a12a640642183075e2f882fd2af34f61b7d_265678.fix txn/fixtures/54638b9a086501f243a24590ad7a5293baf45911_265678.fix txn/fixtures/55b9b95d1d6ce9783d3ed11f9f53695363a9c701_1655830.fix txn/fixtures/55e8b5cda33cfe673e05331d2c9e0fe7eaad6e21_2196906.fix -txn/fixtures/562c9c641cecb77e63050786fa00bc271ab3347c_1854575.fix txn/fixtures/5648c48ee232fc71f1243a5f6f31f7fee37b663e_265678.fix -txn/fixtures/58720535b51e362f8fab16ec8ccf337a7f48d474_1849395.fix -txn/fixtures/59432e24d5d0e935622b9a4d1d97fbe759022e04_1843878.fix -txn/fixtures/5981638b02866b00afe1b0840d4938dbc0c5160f_1852713.fix txn/fixtures/59ab9eca223cfc50003b37bd6300f7522ddeb41d_265678.fix txn/fixtures/5a1fae27c584db49e19fa039ce38dc5a1342278a_265678.fix txn/fixtures/5a3ff7d764b9e2c70295ddecc128580f93425259_265678.fix -txn/fixtures/5a4a074ec3c227bb2ade20cb91ac333371f67ad2_1835104.fix txn/fixtures/5b0ce7574dbebd6fb7ff288420817a6591243ff0_265678.fix -txn/fixtures/5b717c163a48aa70c9b27a9759e2e52cfc6c0fdd_1853683.fix -txn/fixtures/5bd65e05c8214ba993fe20c2edc61d4a7e9fc8ce_1832600.fix txn/fixtures/5c6299dbedf5f7a3081013a132a78726c7e3bfc2_265678.fix txn/fixtures/5d37a00d2f2805ea23f3680276c37cccb719044f_265678.fix txn/fixtures/5db9655dd71ef3d66fa3361dc6bea89b984f1224_265678.fix -txn/fixtures/5dd3324fbae61583db90c97c47dc5557985805e6_1833675.fix txn/fixtures/5ddab29bd8ca920d39400eb81450f6e75f19c321_265678.fix txn/fixtures/5e0a5f5573e108afc7d427dc5bf04f397461a297_3102855.fix -txn/fixtures/5e7f79dfc7aa8e8e2428850e97b81a6aedf9f051_1829329.fix txn/fixtures/5eda426d0395c4a87e148ac777255bb69d2caeed_2195109.fix txn/fixtures/5ee785582913d95ec68c3b0b03080ae144592061_265678.fix -txn/fixtures/5ef07c01eeceec1a3af7e99d481c541a69e2b35e_1831372.fix -txn/fixtures/5f3972a2ac11a0ec90f01d4bc0e2a5af4ead6b60_1830181.fix txn/fixtures/5f57fd849e41bf5413244fd9e3a7796e1664a029_265678.fix txn/fixtures/607c9f48220271b9312b90d192b0d5d83ee1a91a_3001609.fix txn/fixtures/61308114e7370765a28bf524e5a1ed0d6cefd5ac_2754507.fix txn/fixtures/613a5d8fa8bde73d78e9ae5484f0b44f1f1483db_265678.fix -txn/fixtures/616ac01ed4cc6e4d51d59da3a7e44422ef990519_1838107.fix -txn/fixtures/6179dcaa9b3dfbc6d1d2b4987ee9fd45dfa3fa15_1832813.fix -txn/fixtures/61a911664f74f6b3695f8b19d1839707e29508b2_1849950.fix -txn/fixtures/61c1896dcdb59010c7890c5a8eca56495950c95a_1849570.fix -txn/fixtures/62fadceb8f2e780853419537d9057453083e708f_1830990.fix txn/fixtures/653ae1539361dd9ba5bfe51c0b22b53456882981_265678.fix -txn/fixtures/6695a5515b8365132402398a83f0720c3c54de4e_1837740.fix txn/fixtures/683098a43650542407f5e2673dcbed1ff761c745_2423046.fix txn/fixtures/68de719ae2e318788625ef7d721f9655f395b243_265678.fix -txn/fixtures/6965357bf7b4eaf7bb429afd962b2dcef859e960_1848806.fix -txn/fixtures/69e7979792813ce26ee23a6ce22d283d4616663e_1850572.fix -txn/fixtures/6ad9932baf4b3db55fd8cb7a0c772154d496199a_1831442.fix txn/fixtures/6b745b5f8aafe33964e6674b5edf1bae4e6d47c0_265678.fix txn/fixtures/6b8aad11eda157f83dab534e8066a49ed74ba761_2460271.fix txn/fixtures/6c7485b4807cedf24a234fdf455ae9d2603508c1_2583468.fix txn/fixtures/6d15a36c9befbad0f742bf0047fd8a6f12dc3207_2909783.fix -txn/fixtures/6d33522c1e6ee0c960ba65f8b4a011d4d5cc603c_1837056.fix -txn/fixtures/6d49e31dc3c7545261144f0ea38c2af4fe21d533_1855703.fix -txn/fixtures/6ec4e2bfa78a373b657cd6cdd7b12ddded83ce35_1830116.fix txn/fixtures/6ed605260361eed1bcd6d50676fd4f10a34cf779_2717633.fix -txn/fixtures/707c088e9b265b475a25401e3ffe899069cab3f7_1837524.fix txn/fixtures/7095f3138822db8b09ec7ee5f5ec313bd7ba4546_265678.fix -txn/fixtures/71fef040f86707bed99a30e471cb908d8a761058_1832405.fix -txn/fixtures/72fe3a57302874e135c7bc383f62ab0c2419930c_1835040.fix txn/fixtures/73e5a8c45cf7f6fc0299f6583c07ad59780e33f0_265678.fix txn/fixtures/73f5949bdc68038c3886dc255aebeb8c8a25ed79_2215693.fix -txn/fixtures/7438c6d284ba03a269b36bc24c1a3cdd12b6d3dc_1832527.fix txn/fixtures/745eb2958bca9d8abbd5ead8839c53632104e89b_2398324.fix txn/fixtures/74f9f1dda20c9d76b349e7a45be78e25e133b987_2729628.fix txn/fixtures/7628342b9361df2077fc13c664d26c4604baf072_265678.fix -txn/fixtures/766753bd49e4a67c9b1db3ea556a59c571198fab_1833781.fix txn/fixtures/78dadb162713fb4bba6dd53c9c2d508ff5184bb4_265678.fix txn/fixtures/7bc6797c6c983885b1a15dd876e195f7014a1ccc_2705158.fix txn/fixtures/7c21b2a9421d29211fc4606383b4b8d4afc2d2da_2139381.fix txn/fixtures/7f176ff671c7048392262eabea3a65155ff41822_2135873.fix -txn/fixtures/7f2cec8be165daf94490d16ad5197ecf59dce8d5_1829727.fix txn/fixtures/7f9105a4295360588ea7078c771a53066eee1ca9_265678.fix -txn/fixtures/7fa6f44771cc83b9f5262f07a2c38e339d616cb5_1852247.fix -txn/fixtures/80264c01e61d5d1e1a29c805e87a9fa996218fba_1850678.fix txn/fixtures/805e0cd05df6ceb015a08086e9bcfab51f559747_180823.fix txn/fixtures/81a6be81485f9bdb807fdf7fc81b2782c512d7a6_2196843.fix txn/fixtures/81e2fb1dce2a047cb9e6ed334b72e57d1759ef06_265678.fix -txn/fixtures/82e8fbb6226f92ec6613e3926fe45b35132bf576_1849796.fix -txn/fixtures/8493318989a41d8a979c653833549fb30918d01f_1833195.fix txn/fixtures/849d28ffcec100ce4572d341bc9fe4f74fb9d0b7_2140423.fix txn/fixtures/84cb4e0e3348ee4dcad2cff5f19127d5db57aeb8_265678.fix -txn/fixtures/84d2102b057eb6f482356c40fa93d648ac141f11_1840379.fix txn/fixtures/84f114b17587f88281f867b17a95ec4a8118f620_265678.fix txn/fixtures/84f3a1500cd82eb29554c49640400e9d96783dc6_2395779.fix txn/fixtures/850384bbd4d1b8c25de0c7516cc4b823801ee570_265678.fix txn/fixtures/8584a658b6b81d0a7a3fa0487b7d98305cf2dc5d_265678.fix -txn/fixtures/85a5e55185820b8351da3f707e12953740888fd9_1831549.fix -txn/fixtures/86228fb07572aaf99c3261aef5a327dc946fab82_1836600.fix -txn/fixtures/86395b4225619c786adedc129b7704513e0bff4b_1844482.fix -txn/fixtures/86a0f47899155a1b8b4b419580d5b149d2de720c_1845492.fix -txn/fixtures/8813244e2e31cf049192ee6378a4ced01ab0739d_1853879.fix txn/fixtures/88d538b8c654183b6024ca6c186fc040952b498c_265678.fix -txn/fixtures/89a4155352fab4d7a2f7779a4577f87adaaee9c9_1851188.fix -txn/fixtures/8a0ea672e3fe2fb9fbbe6e93a86ed8b9e1ad43bb_1850949.fix -txn/fixtures/8a9a49c4d42afb1c8bcc8209f009d847214a0b2e_1850193.fix txn/fixtures/8aabaa13c469f8e75020842899bacb24f7a9e154_265678.fix txn/fixtures/8b3b935ddd03507493dc9867f606b68888bd946f_265678.fix txn/fixtures/8c00535b747c262681aa014f688dafb22c34546a_1631431.fix txn/fixtures/8c4955dd69c00798ef7b6dc1e5836b8d4da26f54_265678.fix -txn/fixtures/8c6152fda477417ceee7627fcf14bfaafb20310e_1828940.fix txn/fixtures/8cc0cafd6602956e0c3fc35c1844578785b9337f_2312950.fix txn/fixtures/8d58fe7ee312bd41d25b223ece2e632441cb7fa9_2292395.fix txn/fixtures/8dc1dd2e1e05a8b1e65c8058f37eb24bd3ac87ac_265678.fix -txn/fixtures/8f2e283aa7e2b0f52994e7312429e58095a2e33f_1830783.fix txn/fixtures/900e0f020d6c8d0915ed19a5c54adafd979a3390_2277057.fix -txn/fixtures/9099ec62e79fb957f8d6359194ad7ac034cecb10_1854074.fix -txn/fixtures/915fa677a9682253190e56f106e396eef5f92c46_1835979.fix txn/fixtures/92494c89701e7bcb6c4d706a5d9ac5cbc60f5da7_3001125.fix txn/fixtures/926ed4930958cf81adcebe46f01e3d2234b906e9_265678.fix txn/fixtures/92b26e8f483c4f477142fc26d8d167558ae69706_2215759.fix -txn/fixtures/93aee18074e3e54d04ee61eb5749642eb7beae4f_1840989.fix txn/fixtures/94023da412bfb74503860599a0964f33a118c3a0_265678.fix -txn/fixtures/984baa813f1606d6479c11516b10f7de8f89612e_1842620.fix -txn/fixtures/98eb1074e63d8b58177e11a50c923fc570067f7c_1854915.fix txn/fixtures/99ee8af617f83582b79a4f7fe9a25a4ff4e02f9e_2218034.fix txn/fixtures/9be1ddb02934e8c8876427e2b074a5051f713a32_1656662.fix txn/fixtures/9c42ab0d666a2d86cb138bf0e972e845666782a1_2448028.fix -txn/fixtures/9d25474605a1502c2af0d475f20f05f85b59e08a_1837332.fix txn/fixtures/9d334c05245486e8c1654a6e90d02f6b906ac16d_2224447.fix txn/fixtures/9d763cea6739a560ce16ef2f9d47812c00aec14a_265678.fix txn/fixtures/9f6aded852cd5c2e18781c96ee7aeb35e477488e_265678.fix txn/fixtures/a0a419811c5782d53b3416e82c9306e5cfdaad8a_265678.fix -txn/fixtures/a123f7a195b3d3ce6451873414b3fe266731911a_1851874.fix txn/fixtures/a14bfb3f634cbf09a8ac7856268969af33160902_265678.fix txn/fixtures/a174d16d3f9ceb53c864c959f95624239f06f2ea_265678.fix txn/fixtures/a23874e785cdbacabcb9bd2914e5ff5fcf18a87d_265678.fix @@ -545,131 +440,79 @@ txn/fixtures/a297b88b2bd727731cb0c628a545fbf97f46b508_265678.fix txn/fixtures/a2ea969d9af56dc3ac5ebe3b7bfc2bd544fec487_3164284.fix txn/fixtures/a3939063e16c1035b03f8f108dbb9fd82b3d2c5a_2996796.fix txn/fixtures/a40a338847d331360470dc22de6d431944ef950c_3014147.fix -txn/fixtures/a5d2949d14b6735be8c7e8eaf69c2c2519bc3559_1854165.fix txn/fixtures/a6ffd1c4fc1ed23d32f4d1c5f8936d2786a539cb_265678.fix txn/fixtures/a7727947178b8fac2f917d7eaf1b6cc5ff37aa1b_2792063.fix txn/fixtures/a78c969442f248595fd935789d783e0c00708de1_265678.fix -txn/fixtures/a7aaca3bc83b1708ea8d5c315e4fb2a36b4f4b8c_1851472.fix txn/fixtures/a81b5ff9ac6a841103606d5c7aee49ba99d597b7_2867137.fix -txn/fixtures/a8cc342d394594cae45077679e440cea785f932e_1841656.fix txn/fixtures/a8d497234c17b71302e6c69c152e154ae6529ebe_2137938.fix -txn/fixtures/a8fa9b8b6f6ec00b1fa5a6ba63eb2f89e0b2aa27_1856735.fix txn/fixtures/a956670f73e382ab88d5669b1faba69bb6c85d49_2135809.fix -txn/fixtures/a9d5f7e1d981f9b638585a34214ce7cacecfee59_1852434.fix -txn/fixtures/aa33764c37be1a634272275976d05d8048c692d8_1835325.fix txn/fixtures/aa41354131885b471f301100e5a614a16b21cbc4_3139208.fix -txn/fixtures/ab0cd6746e5848ce4abb59b14d082a8607333937_1855878.fix txn/fixtures/ab5c3fa4637768bd9c9f4f43db7fb14ba995cc51_265678.fix txn/fixtures/abd3e18d9c1672c7ab644be17ae30c921e72c4dd_1631283.fix -txn/fixtures/ac225589802c9c34e3f2186461321d856cb7fc5c_1830866.fix -txn/fixtures/acadfefa0956329a54adb9eb91bc155c5334aa61_1838493.fix txn/fixtures/acb16b5cdb6fd3c8c7f322672ecb3e157894962b_265678.fix -txn/fixtures/afebff8c902c8e31d5f5102b38c778f92eb26676_1853402.fix -txn/fixtures/afec50a336bda9ebb2b56367e9106bb624af9194_1835503.fix -txn/fixtures/b0276762c6cba47ae691a295c3603ef0683f4a1f_1856367.fix txn/fixtures/b252f2a3680a0649e9acad79001c028234000d0e_2301141.fix -txn/fixtures/b3ab657f670b87a34b9ff134c1a38b2a20d984a9_1832301.fix txn/fixtures/b3bbc6a8c8603ab89b90af746e03109d2c65398a_265678.fix -txn/fixtures/b3d260dd5aacdb5319382d353000bc15a472fed4_1831163.fix txn/fixtures/b3e3ae1ab8167987442836c7e819c19f60423a3f_265678.fix txn/fixtures/b44fc5a1c28ea957004f1ad472112a0d14b408e0_265678.fix txn/fixtures/b49ee10e80e1b8f61cb8e921f05248887bf8f547_2210077.fix txn/fixtures/b58fd1189fde031f8473768170db3d11e56ec7a8_265678.fix txn/fixtures/b5feb69c36929915f3d24aaa79cd5786eee5aad7_1047123.fix txn/fixtures/b6b81e9ab5d516c42a7152204ad6e3b28413a1d4_265678.fix -txn/fixtures/b6e26999a2dc85430d10904249e64fe8113c081a_1832048.fix txn/fixtures/b7154ce3c1b0551eb1fc8c35f7b6c829b2e3f34a_2232069.fix txn/fixtures/b726d4dd2f13ddbcbdcd977f13a10573a695f166_265678.fix txn/fixtures/b76dcdd0dea13818a4d41f338da23e8abfbe3a89_265678.fix txn/fixtures/b7cf2485b3389767b1fca4cb91dd126d0d56cdce_265678.fix txn/fixtures/b83466f32657d88db928d832406a5c3e24c60ba2_265678.fix txn/fixtures/b91c038fe6bc76b330f4ae8719a9e8c47a8d28ed_434577.fix -txn/fixtures/ba37401858f4d85da859a6de290fb3df534fa692_1852911.fix txn/fixtures/bbcdc9d246f7a7af53e1683e9ee51599f1bf2513_2384774.fix txn/fixtures/bbd4f9ecf803917a5601d4fc0d296c21c830b17b_265678.fix -txn/fixtures/bcaf8bda8d006cbd2a990bab60b3d4b6979b465f_1836368.fix -txn/fixtures/bda25c4707cd2eebe4f419c1c9dd471d9efc5562_1856174.fix -txn/fixtures/be03eae707522c8aa66619f3d4b6a9bb8de56c95_1831743.fix txn/fixtures/be5837c2047a37f4e55c4270c7fada6411cd4332_265678.fix -txn/fixtures/bf38557317a51fd1cf28a166cd03281b4faefe58_1855509.fix txn/fixtures/bf3e8690417c9a589b076490af2b71065a167000_2218057.fix txn/fixtures/bf70c3db4ecc7db10de91aec692078da50bd8612_2977975.fix -txn/fixtures/bfb204da806798a7df5c644ed0673e3f47f3df57_1856450.fix txn/fixtures/bfc3633bdff93992fa40ece7a0f2ff4af13b7114_265678.fix -txn/fixtures/bff99fcac94747973b69868afd6e91e25037e3d2_1849276.fix txn/fixtures/bffe818cdd14dd7fc9f9ca02d976b6f71b6accd8_265678.fix -txn/fixtures/c17a04c4a8076bec11bfe18f6e744c8e832cf144_1836083.fix -txn/fixtures/c1db4d942a10e54fabeacb15073d53155e81b58a_1836186.fix txn/fixtures/c22980233dd93f6284f7ad0c28807230921f094e_3000928.fix -txn/fixtures/c311998190f56976677a90cda24585cb9fe186b1_1848259.fix txn/fixtures/c3319fc3a5c525a7612fb139ddd49862e01fd909_2766868.fix -txn/fixtures/c4f74ded3df9536d06e38374686a8cf7222c209a_1851941.fix -txn/fixtures/c57bc335789bd447076e33771075e833c72fd796_1848503.fix -txn/fixtures/c585119403b03894f99ab0d0041df9448e929205_1850781.fix txn/fixtures/c6d66b4db956c98df4852b067b67c9d5b9da872c_265678.fix txn/fixtures/c8658cc65f128f42d665f3efed7b99c270ba47f4_265678.fix -txn/fixtures/c8bf0f7748102bc79be99ba1c67863388557d17b_1856561.fix -txn/fixtures/c90c6cea3563435591f4045003e8a51aab847076_1835612.fix txn/fixtures/cab41c4453c9760b32a6015be5823cce3750b032_2009105.fix txn/fixtures/cb7c310784c6bcb3830404c12f4fb4ce9a84b327_3000240.fix txn/fixtures/cd473f23d80528c126a6adae67dd4132d9b503cd_265678.fix txn/fixtures/cd519d1b2ddadcf61a520aac821870d498a52c4d_265678.fix -txn/fixtures/cd54f58f05fc2ac4f43456379250e88507d82833_1833087.fix txn/fixtures/cda727e9e38a7d9e8b6ff1cc018c838e1d608766_2201875.fix txn/fixtures/cdc58e567cf94ca25fd31398804c836a77d974b3_265678.fix -txn/fixtures/ce493409116b3034968abb608d798baece7f553e_1847499.fix txn/fixtures/cea9e470d627d36509718775fbe4b2585b9d44c1_2679940.fix txn/fixtures/cface980aaf3277ca198f5929758a342ed9b5ee2_265678.fix txn/fixtures/crash-e3eda019052824e98491250efb7219598227427b.fix txn/fixtures/crash-eb9e4a94882cda840fa4d8d8a390564ad7443ee2.fix -txn/fixtures/d003f9a49feda90e7fd377e6080e3ef516d9ced3_1856840.fix -txn/fixtures/d045c725a267e9e473f4cae7247d6249e240cbb6_1833571.fix txn/fixtures/d0515172499121ac3c4a13c5b0a9e3e60eeac571_265678.fix -txn/fixtures/d06bb4ed4be81631209bb51839a79b2a449a95e1_1829555.fix txn/fixtures/d07b9d0ebc285fb6446aa45e14c69972a7e42cce_2842091.fix txn/fixtures/d07c388a409ef2e239e7fbb38a1974564a1efd28_2990044.fix txn/fixtures/d0bc26bbc043d91e92fa6386b54557347ff4b971_3052099.fix txn/fixtures/d218932653918941ac3e0cde2e3b5d76360e70dc_2994121.fix txn/fixtures/d27324b608042c32b4951e9af57e7ea29aa1cda1_265678.fix -txn/fixtures/d2c0d0b9841a67a03f741cec08956b31911856bf_1842729.fix -txn/fixtures/d2c26aa275901b3b99378d52c51e1592c1c23bee_1839239.fix txn/fixtures/d2d392281aa3c02d60b4bcb45953778cb335bcf6_265678.fix -txn/fixtures/d3022fba4650d088c5e41446263b702f84bfc132_1831655.fix -txn/fixtures/d45ad4066b83dcfce4f76815c37d688554939ada_1846976.fix txn/fixtures/d4a36941742242d5ed5242bf2bc73ad10bbfb383_265678.fix txn/fixtures/d4a5ca366478576979ac7d454fa9b3a82e411642_2892039.fix txn/fixtures/d4af641fd573e18924936d96308e49ebd849da9d_2138001.fix txn/fixtures/d4ffef5761857e1accd03aea113f303d13f956de_265678.fix -txn/fixtures/d5954881b2be285da89643d9a32b78da1940fff1_1842443.fix -txn/fixtures/d5dea7c1270fe458ac0106a37d7b3677b3397b58_1851366.fix txn/fixtures/d608421f8e583e766d30ccf57edb4e71c224a99d_2137433.fix txn/fixtures/d60e218900b3d0399145950c03b9e7af6759a66d_265678.fix -txn/fixtures/d65476b929e61cb7210e51e0f1b69ed0ad694fd7_1840889.fix txn/fixtures/d6644312b1b53f4e870f12331edf4e72d35eb963_265678.fix txn/fixtures/d67f442716145cf5645900048f5d35466cc88ac5_1631585.fix -txn/fixtures/d7c5c60d776e0404f1a9798046e50968517d43d1_1838409.fix -txn/fixtures/d992f06bad1c38a19359a816819ecab86de1b999_1857034.fix -txn/fixtures/d9acea42d3de342b8eec3577a62390cf57815fa8_1838018.fix txn/fixtures/da6b4a8a98d554f0ae230a8a3c2c13d3b6075e4f_2435227.fix txn/fixtures/daea754f668170f42ae2d5fb4e8a62ba4ecaf2a2_265678.fix txn/fixtures/dc1ec0a63c4f7e278ccf01a282dcca8c48fb07c5_3038936.fix txn/fixtures/dd59f3bb3afc532e078305e56709598770984a69_265678.fix txn/fixtures/dfc4e91f6924adb421b44c8a311c4bc1a0d4dd90_265678.fix -txn/fixtures/dfc9a4268f942a654738d31e68d8b352fdf6ca01_1839690.fix txn/fixtures/e00ca6343f9bb435af5873e8fa398ad270aba864_265678.fix txn/fixtures/e027057bae1eb010f91924ba3887cf1cd0582e76_265678.fix -txn/fixtures/e0b50c9e64ddcf1333cdf66ce4a073e3e503cc27_1846044.fix txn/fixtures/e123bcd0e0412c7af25cbc7b2c3b3f93959b2d1f_265678.fix -txn/fixtures/e15471bd95ae1dc94a9fe8ed2f1a98c629d7237f_1852539.fix -txn/fixtures/e29593df28ff95101d9521ab7be574e17a7575af_1844412.fix txn/fixtures/e3390ea8feb73c4e5d94fa6119c7cf7eda070f5b_265678.fix txn/fixtures/e40b8950d4fa05015bb55eca6844516f77f7e5e0_2941208.fix txn/fixtures/e447bfcf38d7be9d28c994fe8cbd3ea09820acc5_265678.fix txn/fixtures/e49734a3631e43b94e5529d5b98d13398959394d_265678.fix txn/fixtures/e52d51ce0cfd30e401db4051cdbd3fff6f8a2804_2964935.fix -txn/fixtures/e67d6f2aaeef8bd379d31bfe5c215aa2bd14117e_1852174.fix -txn/fixtures/e69c5574dfd0725d46ff5298c64c536b65abacaa_1834145.fix -txn/fixtures/e6e7c57455958c67bb46fa64b328b23b45dc9591_1832917.fix txn/fixtures/e7ea7ace535e604a8e6ee07cf791292490bd29e3_3882152.fix txn/fixtures/e7fcaf588511d4df2cb28332a5e921865c38e867_265678.fix txn/fixtures/e852802fb52344637279d37a5a04cefeb62c5b99_2325257.fix @@ -681,35 +524,16 @@ txn/fixtures/ea61f1835dbf6f41385197459b9396f66e3af963_2210014.fix txn/fixtures/ea94563416e931ab22d76c2105883e67194496ba_265678.fix txn/fixtures/ebf841db046ca9c4a57f90cfca539855eba0977e_265678.fix txn/fixtures/ec90abee6109cb2a03639c6983f59c7558d2fb64_265678.fix -txn/fixtures/ed2369d375258e5aed27274afd39ae59709a4f47_1829047.fix txn/fixtures/edee0cb5d4fd6c17bc45502ac9378fa9b417df25_265678.fix -txn/fixtures/ef238d9f14c9380df981a4c67c6056f569739824_1834062.fix -txn/fixtures/efd07880abc0f819f691c070994d3a9acb7180f8_1851671.fix -txn/fixtures/eff2026a9c9c7760436c4ce2ee3d906793fa59c7_1834253.fix -txn/fixtures/f02b5ec22b813446bef55acb766b95c97b0002a8_1829245.fix txn/fixtures/f0322421d97e91c1a247d6a978bae2e30b51dab3_2668441.fix -txn/fixtures/f088197e32a9962841fadd500e298698819d5d08_1853773.fix -txn/fixtures/f0af1710795c2e73d54587f1fe1212a456e33c74_1843784.fix -txn/fixtures/f0f679e4bce01baa3745d5ea6e28a21d15abb79b_1857137.fix -txn/fixtures/f16491d7aff4141c696e62a5930bf927f6e2ebd3_1838210.fix -txn/fixtures/f1693553fc389b082034bc50cccf7136e4305821_1840815.fix txn/fixtures/f1f5ae718e6c516bc77597a263d702be81ebfd29_265678.fix txn/fixtures/f249c20677a5d2deaf347f05c775508985c7297b_2224512.fix -txn/fixtures/f316480b11b0cc5fccd44291e01bde6aeaa2f27e_1834356.fix -txn/fixtures/f34767af09d1315afbf8ea58ef9e55f419a685bc_1843964.fix -txn/fixtures/f4f8b2177f282a7b2e6a7987db3dd1a4d2f12088_1834527.fix -txn/fixtures/f53467ce68c50802f19b014cd28d869b6d3e685d_1828872.fix -txn/fixtures/f5af9e09c07a3b146876d7dc68fb920affcc0a97_1854446.fix txn/fixtures/f731c7a693492de08dca9d1b665ba3fb204c7218_3026660.fix -txn/fixtures/f8d080f8f1b0183b3a0a2ba8c2133af468ec21d9_1837915.fix txn/fixtures/f9951ecf8d10fb1b57a32873db65f935f3f9be90_265678.fix -txn/fixtures/f9c508fb5bdac47495a2f6ec9799ba488620081f_1835221.fix txn/fixtures/fa0ecc5c29333b3b67c956ed2cdfbf7dd0d8e9f0_265678.fix txn/fixtures/faa94a86ce1c305065c1eab52d5d9695d3d4bf12_2829813.fix txn/fixtures/fb1305b2e30e46cc2a321004c061888e84953432_1657414.fix txn/fixtures/fd4262cdc8011b36f47747a0af84aaeb3f3650dc_265678.fix -txn/fixtures/fd910f14ef5f223816ea114d1af45c71cdf86945_1837630.fix txn/fixtures/fe009265742cc09bdb01b11bd3ff4dd66f8a925f_265678.fix txn/fixtures/fe025f048ce62e4f09120ecb8921c5b4872d8fa3_265678.fix -txn/fixtures/ff55e30c1878f181c358f1c0f4da68dd5844f381_1839594.fix txn/fixtures/is_signer_err_handling.fix diff --git a/src/runtime/transaction_execution.zig b/src/runtime/transaction_execution.zig index dee55e71de..c5c32d7866 100644 --- a/src/runtime/transaction_execution.zig +++ b/src/runtime/transaction_execution.zig @@ -199,6 +199,17 @@ pub fn loadAndExecuteTransaction( return .{ .err = .AccountLoadedTwice }; } + // Compute budget sanitization must come before checkAge to match agave's + // check_age_and_compute_budget_limits ordering (agave v4.0). + const compute_budget_limits = switch (compute_budget_program.sanitize( + transaction.compute_budget_instruction_details, + env.feature_set, + env.slot, + )) { + .ok => |x| x, + .err => |e| return .{ .err = e }, + }; + const maybe_nonce_info = switch (try sig.runtime.check_transactions.checkAge( tmp_allocator, transaction, @@ -214,15 +225,6 @@ pub fn loadAndExecuteTransaction( var nonce_account_is_owned = true; defer if (nonce_account_is_owned) if (maybe_nonce_info) |n| tmp_allocator.free(n.account.data); - const compute_budget_limits = switch (compute_budget_program.sanitize( - transaction.compute_budget_instruction_details, - env.feature_set, - env.slot, - )) { - .ok => |x| x, - .err => |e| return .{ .err = e }, - }; - if (sig.runtime.check_transactions.checkStatusCache( &transaction.msg_hash, &transaction.recent_blockhash, From 3efa0ed572fd1397982cae940be0d5d4937d985d Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Mon, 30 Mar 2026 10:39:23 -0400 Subject: [PATCH 31/35] fix(conformance): txn harness account loading must happen after loading sysvars --- conformance/scripts/failing.txt | 54 --------------------------------- conformance/src/txn_execute.zig | 43 ++++++++++++-------------- 2 files changed, 20 insertions(+), 77 deletions(-) diff --git a/conformance/scripts/failing.txt b/conformance/scripts/failing.txt index fd63de5f83..7fc9b3b421 100644 --- a/conformance/scripts/failing.txt +++ b/conformance/scripts/failing.txt @@ -271,11 +271,8 @@ instr/fixtures/zk_sdk/wacc9_d13848d723bd8cfa.fix txn/fixtures/006cec687919df8ddc4fd111e60e4864c7a94a79_2288978.fix txn/fixtures/0179c4cbb9a7110eb246247ca09517720f960904_2194958.fix txn/fixtures/021f0cfecbd5edd05af52b24c1374d5dd13c36c0_3213804.fix -txn/fixtures/03c7c6f82ad963b03675a01bd23846cd2fda345a_2134389.fix -txn/fixtures/03dc8d0e3e91b0660e951d913960ff71c2ad02cc_2996610.fix txn/fixtures/079985119394d9f4ac831732cedd707541dd46e4_265678.fix txn/fixtures/0a4807f84f6dd1c2760b3712df3846e5aa930906_2410587.fix -txn/fixtures/0adfdb20159b81799344d11639fe0b131c6804ab_2194174.fix txn/fixtures/0b6e7a7ed010c514e7b2e121988380ce84e61d2e_2655582.fix txn/fixtures/0df6674eadbc1117e90b2ce85190f56fd773a58b_2879459.fix txn/fixtures/0f44c4f29823b842e36eaf773bfea339e33aecb0_2692287.fix @@ -291,15 +288,12 @@ txn/fixtures/12db676232cd943525ec09c9e7dc74be5a439ec5_265678.fix txn/fixtures/130b22b824fc407eef7dc5b75d398787f58d2c15_265678.fix txn/fixtures/142f3b2b185b954e36696311b3b84744508a80d5_2361208.fix txn/fixtures/14c3dc2280a20662364e369b2cbe80e4efed4698_265678.fix -txn/fixtures/1577251c4955a4235f38cf004d100d6a8106e17c_2134838.fix -txn/fixtures/17cb99713f28ee8be4164c9c3bd2c4f928fc016c_3000059.fix txn/fixtures/18b4e56da90940d580612d378203e29ab87cc63e_3090691.fix txn/fixtures/191d9e2b0d5e2879df91d1416a98958477ad5604_265678.fix txn/fixtures/1a3584a220639d46eb8b03a7069ca7d3796b8659_2372912.fix txn/fixtures/1a4aec43fd827c9a084dc5fe267c0b3f968a9fb8_2235143.fix txn/fixtures/1a729174d141352354cb70c0e74bd0521c17888e_1656878.fix txn/fixtures/1b1c6088a52984cf848972959b26bcf0d869110d_265678.fix -txn/fixtures/1bb8f3fe49dfe1a7c8fd3e7007b1267b70e5f064_265678.fix txn/fixtures/1c948b7fc23384aa7d29fe04f4081e1fed1262d4_265678.fix txn/fixtures/1d7a0059b804b9ddd407dfe83b857f5fb44bbbe8_265678.fix txn/fixtures/1fe88a97c6185afd668574ede8b54a764a86f090_265678.fix @@ -308,24 +302,19 @@ txn/fixtures/206891ac9be95e35959c4f835192a5267e3555b7_265678.fix txn/fixtures/20689cdc20d7cb5d189eca27583e6005c75582be_265678.fix txn/fixtures/209c7df958b10b061a8bfe3f6725c4b8802feb77_3200920.fix txn/fixtures/20f2b0e913522ed8eaa8afebd362146105f1dfe7_3126852.fix -txn/fixtures/217e3a35b6e271260611d06bbf3d689b406bb807_2987146.fix txn/fixtures/21ec480f4864655312f3b116cc2ed26a868d5d26_2953099.fix txn/fixtures/21fb4857674201e9f6c173c1f2e83556718c401e_1556049.fix txn/fixtures/235799bee53ec2e109dfffb5b6edcd06e41da148_265678.fix txn/fixtures/29be17e3a201aa84bbcf279602601ab563a0b805_265678.fix txn/fixtures/2a159c214135a36023fae14efcfbecd62b230823_2631802.fix txn/fixtures/2a7e6de264d39dde620e5b642dde4ffbbfbf0b67_265678.fix -txn/fixtures/2a8eb43cad506af249c32619aab8ea70a62ce38a_2201810.fix txn/fixtures/2aaf16427235cc0a1cf9c9ff7fe902fae3c10cc6_2767000.fix txn/fixtures/2b0f92f398a8e2c74bfa24456774a27c953f1aed_265678.fix txn/fixtures/2da4abe78a4359036ce483cfffe674c90842e02f_265678.fix txn/fixtures/2e1941ee15c7450558deb720eed53c6ed76aadf7_265678.fix -txn/fixtures/2e410a98e6f0b614dce00964a7a2e60d9f764fb9_2987497.fix -txn/fixtures/302cdc8b3ac6b980f31de14a9ff9b9cad18f936d_2134792.fix txn/fixtures/306012c394c4f582374f72eb1f191d06de6e4ea6_2522260.fix txn/fixtures/3095efec5218f66db3fd3765b672bfeec6362b2c_2546518.fix txn/fixtures/3150f4ab80c34e0d00e18822327a4b01f1abffe6_265678.fix -txn/fixtures/31783db98bbb6f63ca7c2c7e92ac3adf83e825e2_265678.fix txn/fixtures/31f38752899f744e81cd018eefebd0822a306705_3006635.fix txn/fixtures/324154e969e4a719afe7b079a559f0e59ab3f748_2510065.fix txn/fixtures/326f6aa740e4e6060cc4fc272f8d1e5173a0347a_2484212.fix @@ -342,22 +331,17 @@ txn/fixtures/3b45ebbb089bb436aafb68056077413f7da53a2c_2336991.fix txn/fixtures/3b6d03c12d620a69d7ac3e69dbecf486f5fcb2b4_2855179.fix txn/fixtures/3c8d009dffbd36e350abf8faff4da8d1dec717ed_265678.fix txn/fixtures/402551d5cb22462d5b713b3b47a217f73bc3d889_265678.fix -txn/fixtures/43142ed9c2d5c64bafb619e8c18c625649cdaf4d_2194238.fix txn/fixtures/4346d7e6f55b29904046e0674a038fa0c6c1efc4_265678.fix txn/fixtures/4373738bf97fc0f9fdc340b0868e6bc1db15c31a_265678.fix txn/fixtures/4434bab1dd322682afd18b96c06554aca3ce0d8d_3001829.fix txn/fixtures/44b6d4ad676c785f99cccfeffca43f73f8834c84_2213508.fix -txn/fixtures/4553200ffb2641a9b34e87f86ec88560a13a94b5_2994600.fix txn/fixtures/455f74ca25b2fdd9fde7aa407a538e4340cdffb9_265678.fix -txn/fixtures/45b7cb9916efaaeb3841ca263a5e4b8b21669a23_3005855.fix txn/fixtures/45dd4971a31ae58798211458d14551780be22c7a_1633256.fix -txn/fixtures/4604704f1c55157bfb4cd54e794788d21f0308ac_265678.fix txn/fixtures/4ab2840c81a2bad348c7c5ecbb632148264f8950_3078035.fix txn/fixtures/4cbbe2f3f047d244ea3642df5ea3b2a3072b6094_265678.fix txn/fixtures/4cd57fb435285576274d04a5ffc5dae126f10f2a_265678.fix txn/fixtures/4d2e31198a0100720b4cd0d0588683c28851b29d_265678.fix txn/fixtures/4d648b49922688298a565c85f818ea489e5f6e04_265678.fix -txn/fixtures/4ecc394bb0a5e009a02675e2c24e1a682e726861_2212326.fix txn/fixtures/4f391d783f130b20ff187e266caeea545b3bee1e_2817460.fix txn/fixtures/4fea3ee7838ae7c23f534b89225f581346557cdc_265678.fix txn/fixtures/5055f04636f721db8c61add5313b0a48bdc3ef48_265678.fix @@ -369,7 +353,6 @@ txn/fixtures/54490a12a640642183075e2f882fd2af34f61b7d_265678.fix txn/fixtures/54638b9a086501f243a24590ad7a5293baf45911_265678.fix txn/fixtures/55b9b95d1d6ce9783d3ed11f9f53695363a9c701_1655830.fix txn/fixtures/55e8b5cda33cfe673e05331d2c9e0fe7eaad6e21_2196906.fix -txn/fixtures/5648c48ee232fc71f1243a5f6f31f7fee37b663e_265678.fix txn/fixtures/59ab9eca223cfc50003b37bd6300f7522ddeb41d_265678.fix txn/fixtures/5a1fae27c584db49e19fa039ce38dc5a1342278a_265678.fix txn/fixtures/5a3ff7d764b9e2c70295ddecc128580f93425259_265678.fix @@ -379,30 +362,21 @@ txn/fixtures/5d37a00d2f2805ea23f3680276c37cccb719044f_265678.fix txn/fixtures/5db9655dd71ef3d66fa3361dc6bea89b984f1224_265678.fix txn/fixtures/5ddab29bd8ca920d39400eb81450f6e75f19c321_265678.fix txn/fixtures/5e0a5f5573e108afc7d427dc5bf04f397461a297_3102855.fix -txn/fixtures/5eda426d0395c4a87e148ac777255bb69d2caeed_2195109.fix txn/fixtures/5ee785582913d95ec68c3b0b03080ae144592061_265678.fix txn/fixtures/5f57fd849e41bf5413244fd9e3a7796e1664a029_265678.fix -txn/fixtures/607c9f48220271b9312b90d192b0d5d83ee1a91a_3001609.fix txn/fixtures/61308114e7370765a28bf524e5a1ed0d6cefd5ac_2754507.fix txn/fixtures/613a5d8fa8bde73d78e9ae5484f0b44f1f1483db_265678.fix -txn/fixtures/653ae1539361dd9ba5bfe51c0b22b53456882981_265678.fix txn/fixtures/683098a43650542407f5e2673dcbed1ff761c745_2423046.fix -txn/fixtures/68de719ae2e318788625ef7d721f9655f395b243_265678.fix txn/fixtures/6b745b5f8aafe33964e6674b5edf1bae4e6d47c0_265678.fix txn/fixtures/6b8aad11eda157f83dab534e8066a49ed74ba761_2460271.fix txn/fixtures/6c7485b4807cedf24a234fdf455ae9d2603508c1_2583468.fix -txn/fixtures/6d15a36c9befbad0f742bf0047fd8a6f12dc3207_2909783.fix txn/fixtures/6ed605260361eed1bcd6d50676fd4f10a34cf779_2717633.fix txn/fixtures/7095f3138822db8b09ec7ee5f5ec313bd7ba4546_265678.fix -txn/fixtures/73e5a8c45cf7f6fc0299f6583c07ad59780e33f0_265678.fix -txn/fixtures/73f5949bdc68038c3886dc255aebeb8c8a25ed79_2215693.fix txn/fixtures/745eb2958bca9d8abbd5ead8839c53632104e89b_2398324.fix txn/fixtures/74f9f1dda20c9d76b349e7a45be78e25e133b987_2729628.fix txn/fixtures/7628342b9361df2077fc13c664d26c4604baf072_265678.fix txn/fixtures/78dadb162713fb4bba6dd53c9c2d508ff5184bb4_265678.fix txn/fixtures/7bc6797c6c983885b1a15dd876e195f7014a1ccc_2705158.fix -txn/fixtures/7c21b2a9421d29211fc4606383b4b8d4afc2d2da_2139381.fix -txn/fixtures/7f176ff671c7048392262eabea3a65155ff41822_2135873.fix txn/fixtures/7f9105a4295360588ea7078c771a53066eee1ca9_265678.fix txn/fixtures/805e0cd05df6ceb015a08086e9bcfab51f559747_180823.fix txn/fixtures/81a6be81485f9bdb807fdf7fc81b2782c512d7a6_2196843.fix @@ -422,76 +396,54 @@ txn/fixtures/8cc0cafd6602956e0c3fc35c1844578785b9337f_2312950.fix txn/fixtures/8d58fe7ee312bd41d25b223ece2e632441cb7fa9_2292395.fix txn/fixtures/8dc1dd2e1e05a8b1e65c8058f37eb24bd3ac87ac_265678.fix txn/fixtures/900e0f020d6c8d0915ed19a5c54adafd979a3390_2277057.fix -txn/fixtures/92494c89701e7bcb6c4d706a5d9ac5cbc60f5da7_3001125.fix txn/fixtures/926ed4930958cf81adcebe46f01e3d2234b906e9_265678.fix -txn/fixtures/92b26e8f483c4f477142fc26d8d167558ae69706_2215759.fix txn/fixtures/94023da412bfb74503860599a0964f33a118c3a0_265678.fix -txn/fixtures/99ee8af617f83582b79a4f7fe9a25a4ff4e02f9e_2218034.fix txn/fixtures/9be1ddb02934e8c8876427e2b074a5051f713a32_1656662.fix txn/fixtures/9c42ab0d666a2d86cb138bf0e972e845666782a1_2448028.fix -txn/fixtures/9d334c05245486e8c1654a6e90d02f6b906ac16d_2224447.fix txn/fixtures/9d763cea6739a560ce16ef2f9d47812c00aec14a_265678.fix txn/fixtures/9f6aded852cd5c2e18781c96ee7aeb35e477488e_265678.fix txn/fixtures/a0a419811c5782d53b3416e82c9306e5cfdaad8a_265678.fix txn/fixtures/a14bfb3f634cbf09a8ac7856268969af33160902_265678.fix txn/fixtures/a174d16d3f9ceb53c864c959f95624239f06f2ea_265678.fix -txn/fixtures/a23874e785cdbacabcb9bd2914e5ff5fcf18a87d_265678.fix txn/fixtures/a297b88b2bd727731cb0c628a545fbf97f46b508_265678.fix txn/fixtures/a2ea969d9af56dc3ac5ebe3b7bfc2bd544fec487_3164284.fix -txn/fixtures/a3939063e16c1035b03f8f108dbb9fd82b3d2c5a_2996796.fix txn/fixtures/a40a338847d331360470dc22de6d431944ef950c_3014147.fix -txn/fixtures/a6ffd1c4fc1ed23d32f4d1c5f8936d2786a539cb_265678.fix txn/fixtures/a7727947178b8fac2f917d7eaf1b6cc5ff37aa1b_2792063.fix txn/fixtures/a78c969442f248595fd935789d783e0c00708de1_265678.fix txn/fixtures/a81b5ff9ac6a841103606d5c7aee49ba99d597b7_2867137.fix txn/fixtures/a8d497234c17b71302e6c69c152e154ae6529ebe_2137938.fix -txn/fixtures/a956670f73e382ab88d5669b1faba69bb6c85d49_2135809.fix txn/fixtures/aa41354131885b471f301100e5a614a16b21cbc4_3139208.fix txn/fixtures/ab5c3fa4637768bd9c9f4f43db7fb14ba995cc51_265678.fix txn/fixtures/abd3e18d9c1672c7ab644be17ae30c921e72c4dd_1631283.fix txn/fixtures/acb16b5cdb6fd3c8c7f322672ecb3e157894962b_265678.fix txn/fixtures/b252f2a3680a0649e9acad79001c028234000d0e_2301141.fix -txn/fixtures/b3bbc6a8c8603ab89b90af746e03109d2c65398a_265678.fix -txn/fixtures/b3e3ae1ab8167987442836c7e819c19f60423a3f_265678.fix txn/fixtures/b44fc5a1c28ea957004f1ad472112a0d14b408e0_265678.fix txn/fixtures/b49ee10e80e1b8f61cb8e921f05248887bf8f547_2210077.fix txn/fixtures/b58fd1189fde031f8473768170db3d11e56ec7a8_265678.fix txn/fixtures/b5feb69c36929915f3d24aaa79cd5786eee5aad7_1047123.fix txn/fixtures/b6b81e9ab5d516c42a7152204ad6e3b28413a1d4_265678.fix -txn/fixtures/b7154ce3c1b0551eb1fc8c35f7b6c829b2e3f34a_2232069.fix txn/fixtures/b726d4dd2f13ddbcbdcd977f13a10573a695f166_265678.fix txn/fixtures/b76dcdd0dea13818a4d41f338da23e8abfbe3a89_265678.fix txn/fixtures/b7cf2485b3389767b1fca4cb91dd126d0d56cdce_265678.fix -txn/fixtures/b83466f32657d88db928d832406a5c3e24c60ba2_265678.fix txn/fixtures/b91c038fe6bc76b330f4ae8719a9e8c47a8d28ed_434577.fix txn/fixtures/bbcdc9d246f7a7af53e1683e9ee51599f1bf2513_2384774.fix -txn/fixtures/bbd4f9ecf803917a5601d4fc0d296c21c830b17b_265678.fix txn/fixtures/be5837c2047a37f4e55c4270c7fada6411cd4332_265678.fix -txn/fixtures/bf3e8690417c9a589b076490af2b71065a167000_2218057.fix txn/fixtures/bf70c3db4ecc7db10de91aec692078da50bd8612_2977975.fix txn/fixtures/bfc3633bdff93992fa40ece7a0f2ff4af13b7114_265678.fix txn/fixtures/bffe818cdd14dd7fc9f9ca02d976b6f71b6accd8_265678.fix -txn/fixtures/c22980233dd93f6284f7ad0c28807230921f094e_3000928.fix txn/fixtures/c3319fc3a5c525a7612fb139ddd49862e01fd909_2766868.fix txn/fixtures/c6d66b4db956c98df4852b067b67c9d5b9da872c_265678.fix -txn/fixtures/c8658cc65f128f42d665f3efed7b99c270ba47f4_265678.fix txn/fixtures/cab41c4453c9760b32a6015be5823cce3750b032_2009105.fix -txn/fixtures/cb7c310784c6bcb3830404c12f4fb4ce9a84b327_3000240.fix txn/fixtures/cd473f23d80528c126a6adae67dd4132d9b503cd_265678.fix txn/fixtures/cd519d1b2ddadcf61a520aac821870d498a52c4d_265678.fix -txn/fixtures/cda727e9e38a7d9e8b6ff1cc018c838e1d608766_2201875.fix txn/fixtures/cdc58e567cf94ca25fd31398804c836a77d974b3_265678.fix txn/fixtures/cea9e470d627d36509718775fbe4b2585b9d44c1_2679940.fix -txn/fixtures/cface980aaf3277ca198f5929758a342ed9b5ee2_265678.fix -txn/fixtures/crash-e3eda019052824e98491250efb7219598227427b.fix txn/fixtures/crash-eb9e4a94882cda840fa4d8d8a390564ad7443ee2.fix txn/fixtures/d0515172499121ac3c4a13c5b0a9e3e60eeac571_265678.fix txn/fixtures/d07b9d0ebc285fb6446aa45e14c69972a7e42cce_2842091.fix txn/fixtures/d07c388a409ef2e239e7fbb38a1974564a1efd28_2990044.fix txn/fixtures/d0bc26bbc043d91e92fa6386b54557347ff4b971_3052099.fix -txn/fixtures/d218932653918941ac3e0cde2e3b5d76360e70dc_2994121.fix txn/fixtures/d27324b608042c32b4951e9af57e7ea29aa1cda1_265678.fix -txn/fixtures/d2d392281aa3c02d60b4bcb45953778cb335bcf6_265678.fix txn/fixtures/d4a36941742242d5ed5242bf2bc73ad10bbfb383_265678.fix txn/fixtures/d4a5ca366478576979ac7d454fa9b3a82e411642_2892039.fix txn/fixtures/d4af641fd573e18924936d96308e49ebd849da9d_2138001.fix @@ -514,10 +466,8 @@ txn/fixtures/e447bfcf38d7be9d28c994fe8cbd3ea09820acc5_265678.fix txn/fixtures/e49734a3631e43b94e5529d5b98d13398959394d_265678.fix txn/fixtures/e52d51ce0cfd30e401db4051cdbd3fff6f8a2804_2964935.fix txn/fixtures/e7ea7ace535e604a8e6ee07cf791292490bd29e3_3882152.fix -txn/fixtures/e7fcaf588511d4df2cb28332a5e921865c38e867_265678.fix txn/fixtures/e852802fb52344637279d37a5a04cefeb62c5b99_2325257.fix txn/fixtures/e8b60fde5331ac70a2bf831fa0cab4a3e1d2dc26_2471891.fix -txn/fixtures/e98937d918fb2a918901a0d04de498fc209a8dc6_2195134.fix txn/fixtures/e9908a2dd2428cdcf706d496218b3faa7d58038c_265678.fix txn/fixtures/ea4712553ea96d1145b4c66f12f7cb29d1aca394_2140488.fix txn/fixtures/ea61f1835dbf6f41385197459b9396f66e3af963_2210014.fix @@ -527,13 +477,9 @@ txn/fixtures/ec90abee6109cb2a03639c6983f59c7558d2fb64_265678.fix txn/fixtures/edee0cb5d4fd6c17bc45502ac9378fa9b417df25_265678.fix txn/fixtures/f0322421d97e91c1a247d6a978bae2e30b51dab3_2668441.fix txn/fixtures/f1f5ae718e6c516bc77597a263d702be81ebfd29_265678.fix -txn/fixtures/f249c20677a5d2deaf347f05c775508985c7297b_2224512.fix txn/fixtures/f731c7a693492de08dca9d1b665ba3fb204c7218_3026660.fix -txn/fixtures/f9951ecf8d10fb1b57a32873db65f935f3f9be90_265678.fix txn/fixtures/fa0ecc5c29333b3b67c956ed2cdfbf7dd0d8e9f0_265678.fix txn/fixtures/faa94a86ce1c305065c1eab52d5d9695d3d4bf12_2829813.fix txn/fixtures/fb1305b2e30e46cc2a321004c061888e84953432_1657414.fix txn/fixtures/fd4262cdc8011b36f47747a0af84aaeb3f3650dc_265678.fix -txn/fixtures/fe009265742cc09bdb01b11bd3ff4dd66f8a925f_265678.fix txn/fixtures/fe025f048ce62e4f09120ecb8921c5b4872d8fa3_265678.fix -txn/fixtures/is_signer_err_handling.fix diff --git a/conformance/src/txn_execute.zig b/conformance/src/txn_execute.zig index beaf788dc6..59ea5f9df3 100644 --- a/conformance/src/txn_execute.zig +++ b/conformance/src/txn_execute.zig @@ -671,17 +671,6 @@ fn executeTxnContext( try account_store.put(slot, program.config.ID, .EMPTY); try account_store.put(slot, program.stake.ID, .EMPTY); - // Load accounts into accounts db - for (accounts_map.keys(), accounts_map.values()) |pubkey, account| { - try account_store.put(slot, pubkey, .{ - .lamports = account.lamports, - .data = account.data, - .owner = account.owner, - .executable = account.executable, - .rent_epoch = account.rent_epoch, - }); - } - // Update epoch schedule and rent to minimum rent exempt balance { const update_sysvar_deps = update_sysvar.UpdateSysvarAccountDeps{ @@ -695,22 +684,17 @@ fn executeTxnContext( try update_sysvar.updateEpochSchedule(allocator, epoch_schedule, update_sysvar_deps); } - // Get lamports per signature from first entry in recent blockhashes + // Get lamports per signature from first entry in recent blockhashes (read from fixture data directly) const lamports_per_signature = blk: { - const account = try account_store.reader().forSlot(&ancestors).get( - allocator, - RecentBlockhashes.ID, - ) orelse break :blk null; - defer account.deinit(allocator); - - var data = account.data.iterator(); - const reader = data.reader(); - - const len = try sig.bincode.readInt(u64, reader, .{}); + const rbh_account = accounts_map.get(RecentBlockhashes.ID) orelse break :blk null; + const rbh_data = rbh_account.data; + if (rbh_data.len < 8) break :blk null; + const len = std.mem.readInt(u64, rbh_data[0..8], .little); if (len == 0) break :blk null; - const first_entry = try sig.bincode.read(allocator, RecentBlockhashes.Entry, reader, .{}); + var fbs = std.io.fixedBufferStream(rbh_data[8..]); + const first_entry = sig.bincode.read(allocator, RecentBlockhashes.Entry, fbs.reader(), .{}) catch break :blk null; break :blk if (first_entry.lamports_per_signature != 0) first_entry.lamports_per_signature @@ -730,6 +714,19 @@ fn executeTxnContext( }; try update_sysvar.updateRecentBlockhashes(allocator, &blockhash_queue, update_sysvar_deps); + // Load fixture accounts into accounts db AFTER sysvar updates, + // so fixture data takes precedence (matches agave's behavior where + // accounts are stored at parent_slot before bank construction). + for (accounts_map.keys(), accounts_map.values()) |pubkey, account| { + try account_store.put(slot, pubkey, .{ + .lamports = account.lamports, + .data = account.data, + .owner = account.owner, + .executable = account.executable, + .rent_epoch = account.rent_epoch, + }); + } + // Checkpoint 3 // NOTE: For basic fixtures, we produce equivalent state up until this point, excluding the // bank hash which requires changes from dnut/replay/freeze. Once incorporated we should From 67c433a261728385adb307bb05108ddb7db14ecb Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Mon, 30 Mar 2026 10:51:45 -0400 Subject: [PATCH 32/35] fix style --- conformance/src/txn_execute.zig | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/conformance/src/txn_execute.zig b/conformance/src/txn_execute.zig index 59ea5f9df3..a1ce73421d 100644 --- a/conformance/src/txn_execute.zig +++ b/conformance/src/txn_execute.zig @@ -694,7 +694,12 @@ fn executeTxnContext( if (len == 0) break :blk null; var fbs = std.io.fixedBufferStream(rbh_data[8..]); - const first_entry = sig.bincode.read(allocator, RecentBlockhashes.Entry, fbs.reader(), .{}) catch break :blk null; + const first_entry = sig.bincode.read( + allocator, + RecentBlockhashes.Entry, + fbs.reader(), + .{}, + ) catch break :blk null; break :blk if (first_entry.lamports_per_signature != 0) first_entry.lamports_per_signature From 044b838131e152593ac754918edb31b083d95dc5 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Mon, 30 Mar 2026 11:05:01 -0400 Subject: [PATCH 33/35] fix(vote-program): reject 0.23.5 accounts when target version is v3 --- conformance/scripts/failing.txt | 206 --------------------------- src/runtime/program/vote/execute.zig | 6 + 2 files changed, 6 insertions(+), 206 deletions(-) diff --git a/conformance/scripts/failing.txt b/conformance/scripts/failing.txt index 7fc9b3b421..79abf26018 100644 --- a/conformance/scripts/failing.txt +++ b/conformance/scripts/failing.txt @@ -1,193 +1,3 @@ -instr/fixtures/bpf-loader-v3/7d17b624b75a988a5ce30d2ae187800b93a65965_2.fix -instr/fixtures/vote/00a44dc50eee61f0b1d38dbd505398f49a634085_3247128.fix -instr/fixtures/vote/0231a48ba8f372da88bcc63837a2eaf8093f0e1b.fix -instr/fixtures/vote/0519fd5ef65644c209391035fe644ed65c8e98e2_3414626.fix -instr/fixtures/vote/056ea15de0c1b86860f2b7e62ca9ff9b9372b859_3157971.fix -instr/fixtures/vote/06ada92dde1b558dd88b4cb1be3c3e6bcf741130_23811.fix -instr/fixtures/vote/089d8cf16b50325227d717e611cbbeb7d22dcc04_3247128.fix -instr/fixtures/vote/0a0e9f80aeab78a186a6443cac596b691931b4e0_3157971.fix -instr/fixtures/vote/0ac38938f99fb7a9dab29566713f9f59fd7750ed_3157971.fix -instr/fixtures/vote/0df4b58a06e33daafd70a055342219ffbffa8401_3247128.fix -instr/fixtures/vote/0ef73bacc146109b587661ae2380e0d1cef8c66a_3157971.fix -instr/fixtures/vote/0f2bf1898cdf3b3b292fb41f873018c2aa9d6fc7_3247128.fix -instr/fixtures/vote/134a0a69db8a83cddf5c5af1d403d6bf15fc2f33_3247128.fix -instr/fixtures/vote/1358b01098622f1f7bd247a4a80c5ff8666e7dde_3247128.fix -instr/fixtures/vote/1393d2dea4a60e93be55d023b2970a3ec825c2a0_3247128.fix -instr/fixtures/vote/14552d27743961a7d2324b4d2aa1ba191e294ed0_3247128.fix -instr/fixtures/vote/1473b1a0d098a6cc235e17524e34cf25054e47f2_3157971.fix -instr/fixtures/vote/16cb47838ffb7985395224c8b98e15cbb176dac7_3157971.fix -instr/fixtures/vote/16fc3b240872cc6552a175d208f97b70333df04d_3247128.fix -instr/fixtures/vote/19631d3b398ce463d8e6bc4ca8ced28c1aa778e8_3247128.fix -instr/fixtures/vote/1be29570a616cf682aa98228d4a77ea746f1c878_3247128.fix -instr/fixtures/vote/1d876b049a0a847eb7bc810a04c48aa9e92c4563_3247128.fix -instr/fixtures/vote/1df8448808174c668ba41f5bd7f2b7ef13fcc5ed_3247128.fix -instr/fixtures/vote/23d10878b95020605cf6b3d3b9e7ffb939b14b2c_3157971.fix -instr/fixtures/vote/2491bf8c6ee30dd52c41accdaeea9aa5482db3b8_3247128.fix -instr/fixtures/vote/26064c5768f6dc2625c4ea59a1c097554d6074fe_3157971.fix -instr/fixtures/vote/293110e2220fa085b643ad3141f94b25f99055d3_3247128.fix -instr/fixtures/vote/29cd94058bcc96c5e4735242ed83ebf6b9115d60_3247128.fix -instr/fixtures/vote/2a7d16be19125316f788f8971c95b5ad92fac958_3247128.fix -instr/fixtures/vote/2afcfa52cf6596ae6cbb8c4c4c11fc52f3babdf7_3247128.fix -instr/fixtures/vote/2b91d1c90fa589ed0a1843248b3230967cc1f339_3157971.fix -instr/fixtures/vote/2b9f65074b9ea502a326b2032aa7da013f713bc6_3247128.fix -instr/fixtures/vote/2c8db5c007d8142224cd1ccd4c52b2de7f9dc5a4.fix -instr/fixtures/vote/2d66263e7db0576f52631457483b3b5fb2bd6b28_3247128.fix -instr/fixtures/vote/2dec3f1960f93f88e1cfd7da5a761286de05492d_3157971.fix -instr/fixtures/vote/3079bc32c5e542b52b244f8a9bf35c5bc9ba23f3_3247128.fix -instr/fixtures/vote/30c423e338fa9c9fd2ff061366a6f0f507bc902c_3247128.fix -instr/fixtures/vote/31a1d36b31bd1f2093e98faadb6e69b43b0c0994_3247128.fix -instr/fixtures/vote/322c0223c468f9a7d24379712d200fc432251096_3157971.fix -instr/fixtures/vote/32fec7c4cc970067199a2f439abf9b45990b461f_3247128.fix -instr/fixtures/vote/341b3c6697796aea62c0d16b43f93e0e24534290_3157971.fix -instr/fixtures/vote/353fccfad1a209ef5278a33d2d2b4703a3647ce6_3247128.fix -instr/fixtures/vote/3556cb9393c8bbf16a72dad7c88cc61961c22adf_3247128.fix -instr/fixtures/vote/38ee9ace5b09daafad120d157e43f3dc10119a6c_3247128.fix -instr/fixtures/vote/39088b1a40091747ebe7ce8488e23aa4077dbb39_3247128.fix -instr/fixtures/vote/3af215b1ce2f38efcf90b8ea65d6bceaedf03b5e_3247128.fix -instr/fixtures/vote/3b9523b505a408298feebb9c5602b27020231ca8_3157971.fix -instr/fixtures/vote/3c8ff7358a117294cbf21d6b3bab58a7f8c81df7_3157971.fix -instr/fixtures/vote/3de1dd6c50d3c39fca14e53b4257279460eacf9a_3157971.fix -instr/fixtures/vote/3e9db51c58288979005fa78f10b4b0e237dc17c8_3247128.fix -instr/fixtures/vote/3f6eb99f60bf7c0835f19a9c87b03aa07b329a85_3247128.fix -instr/fixtures/vote/3f846a1f08a55d4b081a1a025038c81c4902c184_3247128.fix -instr/fixtures/vote/40bdaa65fce6ce6aadcdb2818da12adaeaf85b7c_3157971.fix -instr/fixtures/vote/41de309f8741b31ee55dc885fcf0e39997cd1d27_3247128.fix -instr/fixtures/vote/424080f00587d4f4f2dc455bc8af8801c1a3d67b_3247128.fix -instr/fixtures/vote/425d368dd19e021a2dda5f3191cfd56ca720c42d_3247128.fix -instr/fixtures/vote/441e2371f1f1cbb331866b7e4c081d4ead6c2ef5_3247128.fix -instr/fixtures/vote/44446a4e9cd0e385aeeb43f85587cca2d30097b5_3157971.fix -instr/fixtures/vote/467b221f424add4e52a7ab48cbb1926a12c9d57a_3157971.fix -instr/fixtures/vote/48970f5b6f919d4ea26a7bd7e0a8f7a3a2e1c643_3247128.fix -instr/fixtures/vote/4b37c672dbdbc46586d536013848ee53aaca8285.fix -instr/fixtures/vote/4d7c4e8fac5e65e2c2c9a3a6423033acfafc0552_3247128.fix -instr/fixtures/vote/4f55871a73a7a6b9973479ea0982c815f58cdbca_3247128.fix -instr/fixtures/vote/500823153bc2b78af4599893ed268e13b427cc88_3157971.fix -instr/fixtures/vote/5210e7c02a331e78fac04335673a1c11dd8dcdea_3247128.fix -instr/fixtures/vote/52c2de273e838cef9ec68dad36858ef93e23c32b_3247128.fix -instr/fixtures/vote/53b7de0971bc308abbd2d2f535f2636a3ed11364_3157971.fix -instr/fixtures/vote/563a9f7fae9a529a4b5eaa1d3ce37c700d5a2732_3247128.fix -instr/fixtures/vote/563b58644cc8afc03e666100ef55b5ff4fe92927_3247128.fix -instr/fixtures/vote/5653e72daeedb3a6b6a67039817c34fa18a06764_3247128.fix -instr/fixtures/vote/576bfffb44840a840481ce987a4b26f4e6066c77_3247128.fix -instr/fixtures/vote/595cc1e3fdd1bb4a4701272e5c91e2eeb2029ad3_3157971.fix -instr/fixtures/vote/59b9ba6f58e3665f5fd3ed18845a28369cd3df8b_3247128.fix -instr/fixtures/vote/5a9dbea852cbaec756a97afb7766567eae37eef5_3247128.fix -instr/fixtures/vote/5ba4ce554a72bdb80a06e6f13f98a48ca3beefca_3157971.fix -instr/fixtures/vote/5cb64b6c3ca84d1c7f11d61169b5310045b10c1b_3157971.fix -instr/fixtures/vote/5cba36b7b083b010decc6c340c81c79367733841_3247128.fix -instr/fixtures/vote/5d3d032807783663dc945f468a9d0a7d7ab6e37b_3247128.fix -instr/fixtures/vote/6114aff703f6f74cbcff2de70fb18218d54d4009_3247128.fix -instr/fixtures/vote/61ea44618e4db2aad9fb5645885d1f80410876c8_3247128.fix -instr/fixtures/vote/62418ed334795f6bbd56a0010bac67d82097304c_3247128.fix -instr/fixtures/vote/64d790dc43b4f67b99d1e01574507b67adaa5d21_3247128.fix -instr/fixtures/vote/65c83e05e146033329e286cb3daf794d14bd9ee6_3247128.fix -instr/fixtures/vote/65e4c0a2c4280c36bab4e0e17531c90ae6dd27fc_3247128.fix -instr/fixtures/vote/676d6644517757d16684a5a50ab8f2bc38af5013_3247128.fix -instr/fixtures/vote/6b352c629cf46681d1b8c7d31b1aee1a05734b44_3247128.fix -instr/fixtures/vote/6bb882f4d18e53ac81add667fe197456ea648946_3157971.fix -instr/fixtures/vote/6e1dcdf93166e2ecf78566b9597b04861c2b3d1a_3157971.fix -instr/fixtures/vote/6f5e4488ae6ef5c5f0e08564d210de96a315ed36_3247128.fix -instr/fixtures/vote/70fedadbd46b2dc4a7cbda5b6831528dcda516d0.fix -instr/fixtures/vote/737414d932bc340aadd680ba27eb4fb23992c2b9_3247128.fix -instr/fixtures/vote/750c56c10f68e0bf9bb8778001cf81181de6e862_3247128.fix -instr/fixtures/vote/7660642c7ead278f037b3be6fd515d06454cc659_3157971.fix -instr/fixtures/vote/76b939e7534718dd8e87db251f79af8607353a62_3247128.fix -instr/fixtures/vote/7968cfe4b8f80858e675af20b61fc847b0bbd11a_3157971.fix -instr/fixtures/vote/7a10fa4391d8f0819de957cf8b2f1591d00ea0d0_3247128.fix -instr/fixtures/vote/7a5f941bf9ca6ed6869303a227484aeb3eca8f75_3247128.fix -instr/fixtures/vote/7b1fd3e75347c9bff06ee7c622d6223ca5369231_3247128.fix -instr/fixtures/vote/7cd7d0ce87f1165648af3b1821eabd7467714979_3247128.fix -instr/fixtures/vote/80ea8b78b9ebab01ce3cc8322114121e4ca842b1_3247128.fix -instr/fixtures/vote/821072f79b9bb43af38dc2591cee48d7c762880b_3157971.fix -instr/fixtures/vote/84b42ba3b97632581d4df1bfc3e14d75ff57524d_3247128.fix -instr/fixtures/vote/84e6ab89d0fc80b5bb42397b13de021d2fb9b0ee_3247128.fix -instr/fixtures/vote/85aaf54e1b933fd1cce0d6c03ab198f27aa9b7d3_3247128.fix -instr/fixtures/vote/8642b12b9b123102484528e3063c1efb23dccf46_3157971.fix -instr/fixtures/vote/8776b4086a6ede90ae06241a28fdbdb11694e58a_3247128.fix -instr/fixtures/vote/87aa6961f58ea672b563af1ab8f4c1b344897739_3157971.fix -instr/fixtures/vote/8836ec26f5f8cc53f6f11383e00154715844edc8_3247128.fix -instr/fixtures/vote/88ecca2c95f927ab0df929cb5ed4ddb9ea025f07_3247128.fix -instr/fixtures/vote/89a59972dd92face047d4128cb9485bed72674df_3247128.fix -instr/fixtures/vote/8a167920d063318c7fc2d16192c884f238193162_3157971.fix -instr/fixtures/vote/8cc318b95d206c645677a1d56109a1443f0abf46_3247128.fix -instr/fixtures/vote/8d4175ee763f97001a3bc34d82cd99cd1d4483d9_3247128.fix -instr/fixtures/vote/8eb0aff6b4a91ce463e395c8680e34327041209c_3247128.fix -instr/fixtures/vote/8ed7721986b4f2f7e42d2fc0b4db192d16752f34.fix -instr/fixtures/vote/900edb19ccf67ffca4dc9362d48b1fc6da11338c_3247128.fix -instr/fixtures/vote/90ed56de621b9573b548593e82f00f05d968b15d_3157971.fix -instr/fixtures/vote/91221b627569536b657646c6b8132f4d3feb8c97_3247128.fix -instr/fixtures/vote/92a91d27cf50095356513122d6a666e66f98379b_3247128.fix -instr/fixtures/vote/92e1b95f2a8b8ae934569ae4e74837a0efcac582_3157971.fix -instr/fixtures/vote/983036026d23e36cb1d241c0f6388a91ddd80a4a_3157971.fix -instr/fixtures/vote/98ce208e20417accec241056e6a0d203eb9505c6_3247128.fix -instr/fixtures/vote/9b5d30248bdb9634e6ce522ce476e085881c8648_3157971.fix -instr/fixtures/vote/9b6032e5e639da70a7f369d44390dd5d7a2d0694_3247128.fix -instr/fixtures/vote/9bf57d8d8fbc9276f767c4fd9acbb9b448a5cba6_3247128.fix -instr/fixtures/vote/a2d0a4999b880051db1a624cc0b09b7b1224073b_3157971.fix -instr/fixtures/vote/a3f060b237c0c462b1b7b793201479a72b4b4146_3247128.fix -instr/fixtures/vote/a484ff182ee6d638dad32e15faff16bc41190a11_3247128.fix -instr/fixtures/vote/a5ddd3d7c3d1b2832bde744b13b8f5a4057f2aca_3157971.fix -instr/fixtures/vote/a7380e44f958ccc1caa509af7ec442a65a8412be_3247128.fix -instr/fixtures/vote/a7883262e86376e0abf91dbe769e428deb431f66_3157971.fix -instr/fixtures/vote/ac30f693d757e3ba7f239f11f7d9a481bfde2e03_3247128.fix -instr/fixtures/vote/aca2c0e4594436cc133a094113058a39716c924c_3247128.fix -instr/fixtures/vote/aca6af0858f20756361f2a2cd40ffde327f5ab88_3247128.fix -instr/fixtures/vote/ad880396b601e053f8c0ba7151b596d5b38a8362_3157971.fix -instr/fixtures/vote/aeedd60c825f82e8a2de8b05ea15f44bbf12b86f_3157971.fix -instr/fixtures/vote/b07524357168dce5d5edf5fd9da8e529dd2f2fac_3247128.fix -instr/fixtures/vote/b1a4ec345127c05c9fe765b945651bcd84190f4c_3247128.fix -instr/fixtures/vote/b35c5f873976ffe8f625342af7a6e152e8839322_3247128.fix -instr/fixtures/vote/b3612d9a66f812eeb82d5baa3c30dac40fbe1559_3247128.fix -instr/fixtures/vote/b59cce7fa65efe4cf777670a210249b975001f07.fix -instr/fixtures/vote/b82cde7f822b8215523901a1b2ee40c746f69c81_3157971.fix -instr/fixtures/vote/b9234c4889065836aaaeddde5e31ca0918d77c80_3247128.fix -instr/fixtures/vote/b99d9c082005ba7c7bd0c8ca73396e8c180d94c0_3247128.fix -instr/fixtures/vote/bdc3595a726b5ebf07a37258dbb1f6700339a860_3157971.fix -instr/fixtures/vote/be1b5a28eed8264e584fa7a7c4bae4a74a484369_1767272.fix -instr/fixtures/vote/becc5f2a14c17959a61acaf11a855529810cef03_3157971.fix -instr/fixtures/vote/bfb6137a4965da9034642f608ac4df8204484192_3247128.fix -instr/fixtures/vote/c1a628398ba593ee0f57740dec1416734b980039_3247128.fix -instr/fixtures/vote/c7ec4d91343561a47f4701013203563f730d0ab2_3157971.fix -instr/fixtures/vote/c88c830e2aa88f3853f091fff3d2f6f7dc0c45be_3157971.fix -instr/fixtures/vote/c8b839e773244bcc2841acaec1ebbb0f4a513254_3157971.fix -instr/fixtures/vote/ca8d2fab5dd57766eb933f9230408dd03dae24cb_3157971.fix -instr/fixtures/vote/cadcfc07909d18d68efaf420bba5efb798292e21_3247128.fix -instr/fixtures/vote/cbef4c09a5bced027ece3dc3486265e316f0305f_3247128.fix -instr/fixtures/vote/cc65c0efb3591a12e22dfd8df4df5112c3407bdc_3247128.fix -instr/fixtures/vote/cc746885c29854e333738275d22920790ef69a26_3247128.fix -instr/fixtures/vote/cdf47bc9593ff006ddec259a96a70051348e5220_3247128.fix -instr/fixtures/vote/d08cda3188849f18635278fa31dd57b06975c114_3247128.fix -instr/fixtures/vote/d1d582228472e980cd167e28129284fec36f8793_3247128.fix -instr/fixtures/vote/d2738298a1dcb0352b92479d7821f9860bfd5cb8_3157971.fix -instr/fixtures/vote/d2b779ba720c853797460ada3b8ecad6f17b0e47_3247128.fix -instr/fixtures/vote/d4aff4f0e7a9c4541595e79b2ad6445a4fd92948.fix -instr/fixtures/vote/d7d1d0d6e218cf9d62b59291b9c4aac64438e223_3247128.fix -instr/fixtures/vote/d827e583efe9f078c63726ca696fb81bc5fdb5f2_3247128.fix -instr/fixtures/vote/d8d242ec00fd7ea113cbef02f8eb59c0e6114984_3247128.fix -instr/fixtures/vote/dca58a6e0616e7a7e1b41147e5cf1bfa0e115532_3247128.fix -instr/fixtures/vote/dd39320ef28d4a7e259fd481e5f2c53b70d1dba3_3247128.fix -instr/fixtures/vote/e1fbd87eb55bb1c8ffe973427d66b929ae711c89_3247128.fix -instr/fixtures/vote/e3d06ec5b822f3d0e9c514d73474dbbdbf7daabe_3247128.fix -instr/fixtures/vote/e42116b2c7e9fb44e7a29c0ffbc541599793fc73_3247128.fix -instr/fixtures/vote/e69a8d4930ee9468b847497e2a3c21be2a1f3a1f_3157971.fix -instr/fixtures/vote/e741f2536de49da1e348316280862f20d0ea60bf_3247128.fix -instr/fixtures/vote/eb5eef92896d21ea92f6c5b00b6cf0ae754bb896_3247128.fix -instr/fixtures/vote/ee05bd2c385363b5e0b3842f3f16f31218927e43_3247128.fix -instr/fixtures/vote/ee9dace482f37838648ed64e057299824e5f2608_3157971.fix -instr/fixtures/vote/eeb6d8620da4dc63708cbad3d7bff50c0965e6ee_3157971.fix -instr/fixtures/vote/ef1a58b291cbc4bf23d1bc1a29816b06058c41e4_3157971.fix -instr/fixtures/vote/ef97b8c44e5eb20c6134fe7a9ec82d206f44d927.fix -instr/fixtures/vote/f177f9e618b35ecc660e60ddc5f96845a4cbc2d6_3247128.fix -instr/fixtures/vote/f2656b917ba426174b23a79756d2ed11783e1648_3247128.fix -instr/fixtures/vote/f35212bac81e047adc0305d86c0ec95aa66539bc_3157971.fix -instr/fixtures/vote/f455385b09ddd2b0db220fdb7258772c8a3b087a_3157971.fix -instr/fixtures/vote/f46acef8caef7d7f5bbc5c99dd27f4e53389b867_3157971.fix -instr/fixtures/vote/f6912462e7f3f42daf79b1ab75f05bc4e7ed446d_3247128.fix -instr/fixtures/vote/f80728ce179e51245cf16c1db692906c50699aa9_3247128.fix -instr/fixtures/vote/f8e4e89ca4c449d7c063c7bb07099cca0c06e1a0_3247128.fix -instr/fixtures/vote/fde49d13bb3b39aaa5e7ccdc0709d24c349ab4cd_3157971.fix -instr/fixtures/vote/ff178cce11633d416a3691a13454832b117f90e2_3247128.fix -instr/fixtures/vote/ffe569418052e3a00192d569f12eb7ee84f96f5c_3247128.fix instr/fixtures/zk_sdk/a0_7f8c0067c3ad9e1b.fix instr/fixtures/zk_sdk/a11_d7cdabf3af12487d.fix instr/fixtures/zk_sdk/a13_379ab95b603bfbe4.fix @@ -279,9 +89,6 @@ txn/fixtures/0f44c4f29823b842e36eaf773bfea339e33aecb0_2692287.fix txn/fixtures/0fb4a1d8c2d58a0a97b81b18880cae0e46b8a360_265678.fix txn/fixtures/0fbf14533d0939462c80b5b77920a3e9b9867dff_2213556.fix txn/fixtures/106672242d5cf9448f9d9bc2d8b15ac62b3fd3cc_265678.fix -txn/fixtures/11309bb4648a259baa2424ee81584a4c7506a32a_265678.fix -txn/fixtures/11a1fd9cafd16c050f4dd965e2f7cb41548cd172_265678.fix -txn/fixtures/12162ad7be4f8db5b27bf27303a500dce2de2770_265678.fix txn/fixtures/12643da37bc7cedeaec9a7c2bc4ac191417a7170_2195021.fix txn/fixtures/12b805123e5476d6eb0ec393cdb7882033cc28ca_265678.fix txn/fixtures/12db676232cd943525ec09c9e7dc74be5a439ec5_265678.fix @@ -289,7 +96,6 @@ txn/fixtures/130b22b824fc407eef7dc5b75d398787f58d2c15_265678.fix txn/fixtures/142f3b2b185b954e36696311b3b84744508a80d5_2361208.fix txn/fixtures/14c3dc2280a20662364e369b2cbe80e4efed4698_265678.fix txn/fixtures/18b4e56da90940d580612d378203e29ab87cc63e_3090691.fix -txn/fixtures/191d9e2b0d5e2879df91d1416a98958477ad5604_265678.fix txn/fixtures/1a3584a220639d46eb8b03a7069ca7d3796b8659_2372912.fix txn/fixtures/1a4aec43fd827c9a084dc5fe267c0b3f968a9fb8_2235143.fix txn/fixtures/1a729174d141352354cb70c0e74bd0521c17888e_1656878.fix @@ -343,8 +149,6 @@ txn/fixtures/4cd57fb435285576274d04a5ffc5dae126f10f2a_265678.fix txn/fixtures/4d2e31198a0100720b4cd0d0588683c28851b29d_265678.fix txn/fixtures/4d648b49922688298a565c85f818ea489e5f6e04_265678.fix txn/fixtures/4f391d783f130b20ff187e266caeea545b3bee1e_2817460.fix -txn/fixtures/4fea3ee7838ae7c23f534b89225f581346557cdc_265678.fix -txn/fixtures/5055f04636f721db8c61add5313b0a48bdc3ef48_265678.fix txn/fixtures/5099c68f47959016785557d97d4536ea77759b4e_265678.fix txn/fixtures/50fd3f49db3184bbcc389764272a4b686fc21a43_265678.fix txn/fixtures/5103b2cca444d542d930b64acaaf3a605f64ab73_2213737.fix @@ -362,7 +166,6 @@ txn/fixtures/5d37a00d2f2805ea23f3680276c37cccb719044f_265678.fix txn/fixtures/5db9655dd71ef3d66fa3361dc6bea89b984f1224_265678.fix txn/fixtures/5ddab29bd8ca920d39400eb81450f6e75f19c321_265678.fix txn/fixtures/5e0a5f5573e108afc7d427dc5bf04f397461a297_3102855.fix -txn/fixtures/5ee785582913d95ec68c3b0b03080ae144592061_265678.fix txn/fixtures/5f57fd849e41bf5413244fd9e3a7796e1664a029_265678.fix txn/fixtures/61308114e7370765a28bf524e5a1ed0d6cefd5ac_2754507.fix txn/fixtures/613a5d8fa8bde73d78e9ae5484f0b44f1f1483db_265678.fix @@ -374,7 +177,6 @@ txn/fixtures/6ed605260361eed1bcd6d50676fd4f10a34cf779_2717633.fix txn/fixtures/7095f3138822db8b09ec7ee5f5ec313bd7ba4546_265678.fix txn/fixtures/745eb2958bca9d8abbd5ead8839c53632104e89b_2398324.fix txn/fixtures/74f9f1dda20c9d76b349e7a45be78e25e133b987_2729628.fix -txn/fixtures/7628342b9361df2077fc13c664d26c4604baf072_265678.fix txn/fixtures/78dadb162713fb4bba6dd53c9c2d508ff5184bb4_265678.fix txn/fixtures/7bc6797c6c983885b1a15dd876e195f7014a1ccc_2705158.fix txn/fixtures/7f9105a4295360588ea7078c771a53066eee1ca9_265678.fix @@ -397,11 +199,8 @@ txn/fixtures/8d58fe7ee312bd41d25b223ece2e632441cb7fa9_2292395.fix txn/fixtures/8dc1dd2e1e05a8b1e65c8058f37eb24bd3ac87ac_265678.fix txn/fixtures/900e0f020d6c8d0915ed19a5c54adafd979a3390_2277057.fix txn/fixtures/926ed4930958cf81adcebe46f01e3d2234b906e9_265678.fix -txn/fixtures/94023da412bfb74503860599a0964f33a118c3a0_265678.fix txn/fixtures/9be1ddb02934e8c8876427e2b074a5051f713a32_1656662.fix txn/fixtures/9c42ab0d666a2d86cb138bf0e972e845666782a1_2448028.fix -txn/fixtures/9d763cea6739a560ce16ef2f9d47812c00aec14a_265678.fix -txn/fixtures/9f6aded852cd5c2e18781c96ee7aeb35e477488e_265678.fix txn/fixtures/a0a419811c5782d53b3416e82c9306e5cfdaad8a_265678.fix txn/fixtures/a14bfb3f634cbf09a8ac7856268969af33160902_265678.fix txn/fixtures/a174d16d3f9ceb53c864c959f95624239f06f2ea_265678.fix @@ -413,7 +212,6 @@ txn/fixtures/a78c969442f248595fd935789d783e0c00708de1_265678.fix txn/fixtures/a81b5ff9ac6a841103606d5c7aee49ba99d597b7_2867137.fix txn/fixtures/a8d497234c17b71302e6c69c152e154ae6529ebe_2137938.fix txn/fixtures/aa41354131885b471f301100e5a614a16b21cbc4_3139208.fix -txn/fixtures/ab5c3fa4637768bd9c9f4f43db7fb14ba995cc51_265678.fix txn/fixtures/abd3e18d9c1672c7ab644be17ae30c921e72c4dd_1631283.fix txn/fixtures/acb16b5cdb6fd3c8c7f322672ecb3e157894962b_265678.fix txn/fixtures/b252f2a3680a0649e9acad79001c028234000d0e_2301141.fix @@ -430,7 +228,6 @@ txn/fixtures/bbcdc9d246f7a7af53e1683e9ee51599f1bf2513_2384774.fix txn/fixtures/be5837c2047a37f4e55c4270c7fada6411cd4332_265678.fix txn/fixtures/bf70c3db4ecc7db10de91aec692078da50bd8612_2977975.fix txn/fixtures/bfc3633bdff93992fa40ece7a0f2ff4af13b7114_265678.fix -txn/fixtures/bffe818cdd14dd7fc9f9ca02d976b6f71b6accd8_265678.fix txn/fixtures/c3319fc3a5c525a7612fb139ddd49862e01fd909_2766868.fix txn/fixtures/c6d66b4db956c98df4852b067b67c9d5b9da872c_265678.fix txn/fixtures/cab41c4453c9760b32a6015be5823cce3750b032_2009105.fix @@ -439,7 +236,6 @@ txn/fixtures/cd519d1b2ddadcf61a520aac821870d498a52c4d_265678.fix txn/fixtures/cdc58e567cf94ca25fd31398804c836a77d974b3_265678.fix txn/fixtures/cea9e470d627d36509718775fbe4b2585b9d44c1_2679940.fix txn/fixtures/crash-eb9e4a94882cda840fa4d8d8a390564ad7443ee2.fix -txn/fixtures/d0515172499121ac3c4a13c5b0a9e3e60eeac571_265678.fix txn/fixtures/d07b9d0ebc285fb6446aa45e14c69972a7e42cce_2842091.fix txn/fixtures/d07c388a409ef2e239e7fbb38a1974564a1efd28_2990044.fix txn/fixtures/d0bc26bbc043d91e92fa6386b54557347ff4b971_3052099.fix @@ -447,7 +243,6 @@ txn/fixtures/d27324b608042c32b4951e9af57e7ea29aa1cda1_265678.fix txn/fixtures/d4a36941742242d5ed5242bf2bc73ad10bbfb383_265678.fix txn/fixtures/d4a5ca366478576979ac7d454fa9b3a82e411642_2892039.fix txn/fixtures/d4af641fd573e18924936d96308e49ebd849da9d_2138001.fix -txn/fixtures/d4ffef5761857e1accd03aea113f303d13f956de_265678.fix txn/fixtures/d608421f8e583e766d30ccf57edb4e71c224a99d_2137433.fix txn/fixtures/d60e218900b3d0399145950c03b9e7af6759a66d_265678.fix txn/fixtures/d6644312b1b53f4e870f12331edf4e72d35eb963_265678.fix @@ -478,7 +273,6 @@ txn/fixtures/edee0cb5d4fd6c17bc45502ac9378fa9b417df25_265678.fix txn/fixtures/f0322421d97e91c1a247d6a978bae2e30b51dab3_2668441.fix txn/fixtures/f1f5ae718e6c516bc77597a263d702be81ebfd29_265678.fix txn/fixtures/f731c7a693492de08dca9d1b665ba3fb204c7218_3026660.fix -txn/fixtures/fa0ecc5c29333b3b67c956ed2cdfbf7dd0d8e9f0_265678.fix txn/fixtures/faa94a86ce1c305065c1eab52d5d9695d3d4bf12_2829813.fix txn/fixtures/fb1305b2e30e46cc2a321004c061888e84953432_1657414.fix txn/fixtures/fd4262cdc8011b36f47747a0af84aaeb3f3650dc_265678.fix diff --git a/src/runtime/program/vote/execute.zig b/src/runtime/program/vote/execute.zig index 30ebb8381d..b6609764d5 100644 --- a/src/runtime/program/vote/execute.zig +++ b/src/runtime/program/vote/execute.zig @@ -999,6 +999,12 @@ fn getVoteStateChecked( switch (target_version) { .v3 => { + // V0_23_5 is no longer supported. agave's + // VoteStateV3::deserialize_into_ptr returns InvalidAccountData for variant 0 + // when compiled for target_os = "solana". + if (versioned_state == .v0_23_5) { + return InstructionError.InvalidAccountData; + } // Existing flow before v4 feature gate activation: // Deserialize as VoteStateVersions (converting during deserialization). // Some callsites deserialize without checking initialization status. From 6cde38c23a0f2c087a926e0d28fa423ca7a4d745 Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Mon, 30 Mar 2026 12:20:19 -0400 Subject: [PATCH 34/35] fix(conformance): sysvars should come from fixture inputs only --- conformance/scripts/failing.txt | 97 ----------------------------- conformance/src/txn_execute.zig | 106 +------------------------------- 2 files changed, 1 insertion(+), 202 deletions(-) diff --git a/conformance/scripts/failing.txt b/conformance/scripts/failing.txt index 79abf26018..90296b1545 100644 --- a/conformance/scripts/failing.txt +++ b/conformance/scripts/failing.txt @@ -81,199 +81,102 @@ instr/fixtures/zk_sdk/wacc9_d13848d723bd8cfa.fix txn/fixtures/006cec687919df8ddc4fd111e60e4864c7a94a79_2288978.fix txn/fixtures/0179c4cbb9a7110eb246247ca09517720f960904_2194958.fix txn/fixtures/021f0cfecbd5edd05af52b24c1374d5dd13c36c0_3213804.fix -txn/fixtures/079985119394d9f4ac831732cedd707541dd46e4_265678.fix txn/fixtures/0a4807f84f6dd1c2760b3712df3846e5aa930906_2410587.fix txn/fixtures/0b6e7a7ed010c514e7b2e121988380ce84e61d2e_2655582.fix txn/fixtures/0df6674eadbc1117e90b2ce85190f56fd773a58b_2879459.fix txn/fixtures/0f44c4f29823b842e36eaf773bfea339e33aecb0_2692287.fix txn/fixtures/0fb4a1d8c2d58a0a97b81b18880cae0e46b8a360_265678.fix txn/fixtures/0fbf14533d0939462c80b5b77920a3e9b9867dff_2213556.fix -txn/fixtures/106672242d5cf9448f9d9bc2d8b15ac62b3fd3cc_265678.fix txn/fixtures/12643da37bc7cedeaec9a7c2bc4ac191417a7170_2195021.fix -txn/fixtures/12b805123e5476d6eb0ec393cdb7882033cc28ca_265678.fix -txn/fixtures/12db676232cd943525ec09c9e7dc74be5a439ec5_265678.fix txn/fixtures/130b22b824fc407eef7dc5b75d398787f58d2c15_265678.fix txn/fixtures/142f3b2b185b954e36696311b3b84744508a80d5_2361208.fix -txn/fixtures/14c3dc2280a20662364e369b2cbe80e4efed4698_265678.fix txn/fixtures/18b4e56da90940d580612d378203e29ab87cc63e_3090691.fix txn/fixtures/1a3584a220639d46eb8b03a7069ca7d3796b8659_2372912.fix txn/fixtures/1a4aec43fd827c9a084dc5fe267c0b3f968a9fb8_2235143.fix txn/fixtures/1a729174d141352354cb70c0e74bd0521c17888e_1656878.fix -txn/fixtures/1b1c6088a52984cf848972959b26bcf0d869110d_265678.fix -txn/fixtures/1c948b7fc23384aa7d29fe04f4081e1fed1262d4_265678.fix -txn/fixtures/1d7a0059b804b9ddd407dfe83b857f5fb44bbbe8_265678.fix -txn/fixtures/1fe88a97c6185afd668574ede8b54a764a86f090_265678.fix txn/fixtures/1fff2d993f4d7677640b2b3397320496b076e854_3506222.fix -txn/fixtures/206891ac9be95e35959c4f835192a5267e3555b7_265678.fix -txn/fixtures/20689cdc20d7cb5d189eca27583e6005c75582be_265678.fix txn/fixtures/209c7df958b10b061a8bfe3f6725c4b8802feb77_3200920.fix txn/fixtures/20f2b0e913522ed8eaa8afebd362146105f1dfe7_3126852.fix txn/fixtures/21ec480f4864655312f3b116cc2ed26a868d5d26_2953099.fix txn/fixtures/21fb4857674201e9f6c173c1f2e83556718c401e_1556049.fix -txn/fixtures/235799bee53ec2e109dfffb5b6edcd06e41da148_265678.fix -txn/fixtures/29be17e3a201aa84bbcf279602601ab563a0b805_265678.fix txn/fixtures/2a159c214135a36023fae14efcfbecd62b230823_2631802.fix -txn/fixtures/2a7e6de264d39dde620e5b642dde4ffbbfbf0b67_265678.fix txn/fixtures/2aaf16427235cc0a1cf9c9ff7fe902fae3c10cc6_2767000.fix -txn/fixtures/2b0f92f398a8e2c74bfa24456774a27c953f1aed_265678.fix -txn/fixtures/2da4abe78a4359036ce483cfffe674c90842e02f_265678.fix -txn/fixtures/2e1941ee15c7450558deb720eed53c6ed76aadf7_265678.fix txn/fixtures/306012c394c4f582374f72eb1f191d06de6e4ea6_2522260.fix txn/fixtures/3095efec5218f66db3fd3765b672bfeec6362b2c_2546518.fix -txn/fixtures/3150f4ab80c34e0d00e18822327a4b01f1abffe6_265678.fix -txn/fixtures/31f38752899f744e81cd018eefebd0822a306705_3006635.fix txn/fixtures/324154e969e4a719afe7b079a559f0e59ab3f748_2510065.fix txn/fixtures/326f6aa740e4e6060cc4fc272f8d1e5173a0347a_2484212.fix txn/fixtures/32ceb6737de9a3108558bc59bd1d2299402e1759_2187779.fix txn/fixtures/338a0b377eb143b9d2520fd81d6b8658ea71d32a_1183730.fix -txn/fixtures/33c664f3c95a2d1a3fff572ada952d3b67dbe2c4_265678.fix -txn/fixtures/373f066bf0f80a09e099c78677fa2cc3564427f6_265678.fix txn/fixtures/3799b046a3717e43b056b8724374c468336b9d17_3177139.fix -txn/fixtures/37baefd370d9e56c7c6d0eba33c2a4b956a62ef8_265678.fix -txn/fixtures/3846dcbc6a789b614c1cb083bdc736f33065fc89_265678.fix -txn/fixtures/38e5b3b4f98ebe5b98f26af1d52c4ea39c5757bb_265678.fix -txn/fixtures/39496b9b2c42cec6bcfb0c12cba7a19392bd2d74_265678.fix txn/fixtures/3b45ebbb089bb436aafb68056077413f7da53a2c_2336991.fix txn/fixtures/3b6d03c12d620a69d7ac3e69dbecf486f5fcb2b4_2855179.fix -txn/fixtures/3c8d009dffbd36e350abf8faff4da8d1dec717ed_265678.fix -txn/fixtures/402551d5cb22462d5b713b3b47a217f73bc3d889_265678.fix -txn/fixtures/4346d7e6f55b29904046e0674a038fa0c6c1efc4_265678.fix -txn/fixtures/4373738bf97fc0f9fdc340b0868e6bc1db15c31a_265678.fix txn/fixtures/4434bab1dd322682afd18b96c06554aca3ce0d8d_3001829.fix txn/fixtures/44b6d4ad676c785f99cccfeffca43f73f8834c84_2213508.fix -txn/fixtures/455f74ca25b2fdd9fde7aa407a538e4340cdffb9_265678.fix txn/fixtures/45dd4971a31ae58798211458d14551780be22c7a_1633256.fix txn/fixtures/4ab2840c81a2bad348c7c5ecbb632148264f8950_3078035.fix -txn/fixtures/4cbbe2f3f047d244ea3642df5ea3b2a3072b6094_265678.fix -txn/fixtures/4cd57fb435285576274d04a5ffc5dae126f10f2a_265678.fix -txn/fixtures/4d2e31198a0100720b4cd0d0588683c28851b29d_265678.fix -txn/fixtures/4d648b49922688298a565c85f818ea489e5f6e04_265678.fix txn/fixtures/4f391d783f130b20ff187e266caeea545b3bee1e_2817460.fix -txn/fixtures/5099c68f47959016785557d97d4536ea77759b4e_265678.fix -txn/fixtures/50fd3f49db3184bbcc389764272a4b686fc21a43_265678.fix txn/fixtures/5103b2cca444d542d930b64acaaf3a605f64ab73_2213737.fix txn/fixtures/542e30d2e06079f3ddcb767c58ac5463618bcd07_2619392.fix -txn/fixtures/54490a12a640642183075e2f882fd2af34f61b7d_265678.fix -txn/fixtures/54638b9a086501f243a24590ad7a5293baf45911_265678.fix txn/fixtures/55b9b95d1d6ce9783d3ed11f9f53695363a9c701_1655830.fix txn/fixtures/55e8b5cda33cfe673e05331d2c9e0fe7eaad6e21_2196906.fix -txn/fixtures/59ab9eca223cfc50003b37bd6300f7522ddeb41d_265678.fix -txn/fixtures/5a1fae27c584db49e19fa039ce38dc5a1342278a_265678.fix -txn/fixtures/5a3ff7d764b9e2c70295ddecc128580f93425259_265678.fix -txn/fixtures/5b0ce7574dbebd6fb7ff288420817a6591243ff0_265678.fix -txn/fixtures/5c6299dbedf5f7a3081013a132a78726c7e3bfc2_265678.fix -txn/fixtures/5d37a00d2f2805ea23f3680276c37cccb719044f_265678.fix -txn/fixtures/5db9655dd71ef3d66fa3361dc6bea89b984f1224_265678.fix -txn/fixtures/5ddab29bd8ca920d39400eb81450f6e75f19c321_265678.fix txn/fixtures/5e0a5f5573e108afc7d427dc5bf04f397461a297_3102855.fix -txn/fixtures/5f57fd849e41bf5413244fd9e3a7796e1664a029_265678.fix txn/fixtures/61308114e7370765a28bf524e5a1ed0d6cefd5ac_2754507.fix -txn/fixtures/613a5d8fa8bde73d78e9ae5484f0b44f1f1483db_265678.fix txn/fixtures/683098a43650542407f5e2673dcbed1ff761c745_2423046.fix -txn/fixtures/6b745b5f8aafe33964e6674b5edf1bae4e6d47c0_265678.fix txn/fixtures/6b8aad11eda157f83dab534e8066a49ed74ba761_2460271.fix txn/fixtures/6c7485b4807cedf24a234fdf455ae9d2603508c1_2583468.fix txn/fixtures/6ed605260361eed1bcd6d50676fd4f10a34cf779_2717633.fix -txn/fixtures/7095f3138822db8b09ec7ee5f5ec313bd7ba4546_265678.fix txn/fixtures/745eb2958bca9d8abbd5ead8839c53632104e89b_2398324.fix txn/fixtures/74f9f1dda20c9d76b349e7a45be78e25e133b987_2729628.fix -txn/fixtures/78dadb162713fb4bba6dd53c9c2d508ff5184bb4_265678.fix txn/fixtures/7bc6797c6c983885b1a15dd876e195f7014a1ccc_2705158.fix -txn/fixtures/7f9105a4295360588ea7078c771a53066eee1ca9_265678.fix txn/fixtures/805e0cd05df6ceb015a08086e9bcfab51f559747_180823.fix txn/fixtures/81a6be81485f9bdb807fdf7fc81b2782c512d7a6_2196843.fix -txn/fixtures/81e2fb1dce2a047cb9e6ed334b72e57d1759ef06_265678.fix txn/fixtures/849d28ffcec100ce4572d341bc9fe4f74fb9d0b7_2140423.fix -txn/fixtures/84cb4e0e3348ee4dcad2cff5f19127d5db57aeb8_265678.fix -txn/fixtures/84f114b17587f88281f867b17a95ec4a8118f620_265678.fix txn/fixtures/84f3a1500cd82eb29554c49640400e9d96783dc6_2395779.fix txn/fixtures/850384bbd4d1b8c25de0c7516cc4b823801ee570_265678.fix -txn/fixtures/8584a658b6b81d0a7a3fa0487b7d98305cf2dc5d_265678.fix -txn/fixtures/88d538b8c654183b6024ca6c186fc040952b498c_265678.fix -txn/fixtures/8aabaa13c469f8e75020842899bacb24f7a9e154_265678.fix -txn/fixtures/8b3b935ddd03507493dc9867f606b68888bd946f_265678.fix txn/fixtures/8c00535b747c262681aa014f688dafb22c34546a_1631431.fix -txn/fixtures/8c4955dd69c00798ef7b6dc1e5836b8d4da26f54_265678.fix txn/fixtures/8cc0cafd6602956e0c3fc35c1844578785b9337f_2312950.fix txn/fixtures/8d58fe7ee312bd41d25b223ece2e632441cb7fa9_2292395.fix -txn/fixtures/8dc1dd2e1e05a8b1e65c8058f37eb24bd3ac87ac_265678.fix txn/fixtures/900e0f020d6c8d0915ed19a5c54adafd979a3390_2277057.fix -txn/fixtures/926ed4930958cf81adcebe46f01e3d2234b906e9_265678.fix txn/fixtures/9be1ddb02934e8c8876427e2b074a5051f713a32_1656662.fix txn/fixtures/9c42ab0d666a2d86cb138bf0e972e845666782a1_2448028.fix -txn/fixtures/a0a419811c5782d53b3416e82c9306e5cfdaad8a_265678.fix -txn/fixtures/a14bfb3f634cbf09a8ac7856268969af33160902_265678.fix -txn/fixtures/a174d16d3f9ceb53c864c959f95624239f06f2ea_265678.fix -txn/fixtures/a297b88b2bd727731cb0c628a545fbf97f46b508_265678.fix txn/fixtures/a2ea969d9af56dc3ac5ebe3b7bfc2bd544fec487_3164284.fix txn/fixtures/a40a338847d331360470dc22de6d431944ef950c_3014147.fix txn/fixtures/a7727947178b8fac2f917d7eaf1b6cc5ff37aa1b_2792063.fix -txn/fixtures/a78c969442f248595fd935789d783e0c00708de1_265678.fix txn/fixtures/a81b5ff9ac6a841103606d5c7aee49ba99d597b7_2867137.fix txn/fixtures/a8d497234c17b71302e6c69c152e154ae6529ebe_2137938.fix txn/fixtures/aa41354131885b471f301100e5a614a16b21cbc4_3139208.fix txn/fixtures/abd3e18d9c1672c7ab644be17ae30c921e72c4dd_1631283.fix -txn/fixtures/acb16b5cdb6fd3c8c7f322672ecb3e157894962b_265678.fix txn/fixtures/b252f2a3680a0649e9acad79001c028234000d0e_2301141.fix -txn/fixtures/b44fc5a1c28ea957004f1ad472112a0d14b408e0_265678.fix txn/fixtures/b49ee10e80e1b8f61cb8e921f05248887bf8f547_2210077.fix -txn/fixtures/b58fd1189fde031f8473768170db3d11e56ec7a8_265678.fix txn/fixtures/b5feb69c36929915f3d24aaa79cd5786eee5aad7_1047123.fix -txn/fixtures/b6b81e9ab5d516c42a7152204ad6e3b28413a1d4_265678.fix -txn/fixtures/b726d4dd2f13ddbcbdcd977f13a10573a695f166_265678.fix -txn/fixtures/b76dcdd0dea13818a4d41f338da23e8abfbe3a89_265678.fix -txn/fixtures/b7cf2485b3389767b1fca4cb91dd126d0d56cdce_265678.fix txn/fixtures/b91c038fe6bc76b330f4ae8719a9e8c47a8d28ed_434577.fix txn/fixtures/bbcdc9d246f7a7af53e1683e9ee51599f1bf2513_2384774.fix -txn/fixtures/be5837c2047a37f4e55c4270c7fada6411cd4332_265678.fix txn/fixtures/bf70c3db4ecc7db10de91aec692078da50bd8612_2977975.fix -txn/fixtures/bfc3633bdff93992fa40ece7a0f2ff4af13b7114_265678.fix txn/fixtures/c3319fc3a5c525a7612fb139ddd49862e01fd909_2766868.fix -txn/fixtures/c6d66b4db956c98df4852b067b67c9d5b9da872c_265678.fix txn/fixtures/cab41c4453c9760b32a6015be5823cce3750b032_2009105.fix -txn/fixtures/cd473f23d80528c126a6adae67dd4132d9b503cd_265678.fix -txn/fixtures/cd519d1b2ddadcf61a520aac821870d498a52c4d_265678.fix -txn/fixtures/cdc58e567cf94ca25fd31398804c836a77d974b3_265678.fix txn/fixtures/cea9e470d627d36509718775fbe4b2585b9d44c1_2679940.fix txn/fixtures/crash-eb9e4a94882cda840fa4d8d8a390564ad7443ee2.fix txn/fixtures/d07b9d0ebc285fb6446aa45e14c69972a7e42cce_2842091.fix txn/fixtures/d07c388a409ef2e239e7fbb38a1974564a1efd28_2990044.fix txn/fixtures/d0bc26bbc043d91e92fa6386b54557347ff4b971_3052099.fix -txn/fixtures/d27324b608042c32b4951e9af57e7ea29aa1cda1_265678.fix -txn/fixtures/d4a36941742242d5ed5242bf2bc73ad10bbfb383_265678.fix txn/fixtures/d4a5ca366478576979ac7d454fa9b3a82e411642_2892039.fix txn/fixtures/d4af641fd573e18924936d96308e49ebd849da9d_2138001.fix txn/fixtures/d608421f8e583e766d30ccf57edb4e71c224a99d_2137433.fix -txn/fixtures/d60e218900b3d0399145950c03b9e7af6759a66d_265678.fix -txn/fixtures/d6644312b1b53f4e870f12331edf4e72d35eb963_265678.fix txn/fixtures/d67f442716145cf5645900048f5d35466cc88ac5_1631585.fix txn/fixtures/da6b4a8a98d554f0ae230a8a3c2c13d3b6075e4f_2435227.fix txn/fixtures/daea754f668170f42ae2d5fb4e8a62ba4ecaf2a2_265678.fix txn/fixtures/dc1ec0a63c4f7e278ccf01a282dcca8c48fb07c5_3038936.fix -txn/fixtures/dd59f3bb3afc532e078305e56709598770984a69_265678.fix txn/fixtures/dfc4e91f6924adb421b44c8a311c4bc1a0d4dd90_265678.fix -txn/fixtures/e00ca6343f9bb435af5873e8fa398ad270aba864_265678.fix -txn/fixtures/e027057bae1eb010f91924ba3887cf1cd0582e76_265678.fix -txn/fixtures/e123bcd0e0412c7af25cbc7b2c3b3f93959b2d1f_265678.fix -txn/fixtures/e3390ea8feb73c4e5d94fa6119c7cf7eda070f5b_265678.fix txn/fixtures/e40b8950d4fa05015bb55eca6844516f77f7e5e0_2941208.fix txn/fixtures/e447bfcf38d7be9d28c994fe8cbd3ea09820acc5_265678.fix -txn/fixtures/e49734a3631e43b94e5529d5b98d13398959394d_265678.fix txn/fixtures/e52d51ce0cfd30e401db4051cdbd3fff6f8a2804_2964935.fix txn/fixtures/e7ea7ace535e604a8e6ee07cf791292490bd29e3_3882152.fix txn/fixtures/e852802fb52344637279d37a5a04cefeb62c5b99_2325257.fix txn/fixtures/e8b60fde5331ac70a2bf831fa0cab4a3e1d2dc26_2471891.fix -txn/fixtures/e9908a2dd2428cdcf706d496218b3faa7d58038c_265678.fix txn/fixtures/ea4712553ea96d1145b4c66f12f7cb29d1aca394_2140488.fix txn/fixtures/ea61f1835dbf6f41385197459b9396f66e3af963_2210014.fix -txn/fixtures/ea94563416e931ab22d76c2105883e67194496ba_265678.fix -txn/fixtures/ebf841db046ca9c4a57f90cfca539855eba0977e_265678.fix -txn/fixtures/ec90abee6109cb2a03639c6983f59c7558d2fb64_265678.fix -txn/fixtures/edee0cb5d4fd6c17bc45502ac9378fa9b417df25_265678.fix txn/fixtures/f0322421d97e91c1a247d6a978bae2e30b51dab3_2668441.fix -txn/fixtures/f1f5ae718e6c516bc77597a263d702be81ebfd29_265678.fix txn/fixtures/f731c7a693492de08dca9d1b665ba3fb204c7218_3026660.fix txn/fixtures/faa94a86ce1c305065c1eab52d5d9695d3d4bf12_2829813.fix txn/fixtures/fb1305b2e30e46cc2a321004c061888e84953432_1657414.fix txn/fixtures/fd4262cdc8011b36f47747a0af84aaeb3f3650dc_265678.fix -txn/fixtures/fe025f048ce62e4f09120ecb8921c5b4872d8fa3_265678.fix diff --git a/conformance/src/txn_execute.zig b/conformance/src/txn_execute.zig index a1ce73421d..66cc5aad42 100644 --- a/conformance/src/txn_execute.zig +++ b/conformance/src/txn_execute.zig @@ -221,6 +221,7 @@ fn executeTxnContext( // https://github.com/firedancer-io/agave/blob/10fe1eb29aac9c236fd72d08ae60a3ef61ee8353/runtime/src/bank.rs#L1162 { try ancestors.addSlot(allocator, 0); + try ancestors.addSlot(allocator, fixture_slot); // bank.compute_budget = runtime_config.compute_budget; // bank.transaction_account_lock_limit = null; // bank.transaction_debug_keys = null; @@ -375,44 +376,6 @@ fn executeTxnContext( try epoch_stakes_map.put(allocator, e, .EMPTY); } - const update_sysvar_deps = update_sysvar.UpdateSysvarAccountDeps{ - .slot = slot, - .slot_store = account_store.forSlot(slot, &ancestors), - .capitalization = &capitalization, - .rent = &genesis_config.rent, - }; - - try update_sysvar.updateStakeHistory( - allocator, - .{ - .epoch = epoch, - .parent_slots_epoch = null, // no parent yet - .stakes_cache = &stakes_cache, - .update_sysvar_deps = update_sysvar_deps, - }, - ); - _ = try update_sysvar.updateClock(allocator, .{ - .feature_set = &feature_set, - .epoch_schedule = &epoch_schedule, - .epoch_stakes = epoch_stakes_map.getPtr(epoch), - .stakes_cache = &stakes_cache, - .epoch = epoch, - .parent_slots_epoch = null, // no parent yet - .genesis_creation_time = genesis_config.creation_time, - .ns_per_slot = @intCast(genesis_config.nsPerSlot()), - .update_sysvar_deps = update_sysvar_deps, - }); - try update_sysvar.updateRent(allocator, genesis_config.rent, update_sysvar_deps); - try update_sysvar.updateEpochSchedule(allocator, epoch_schedule, update_sysvar_deps); - try update_sysvar.updateRecentBlockhashes(allocator, &blockhash_queue, update_sysvar_deps); - try update_sysvar.updateLastRestartSlot( - allocator, - &feature_set, - slot, - &hard_forks, - update_sysvar_deps, - ); - // NOTE: Agave fills the sysvar cache here, we should not need for txn fuzzing as the sysvar cache is only used in the SVM, so we can // populate immediately before executing transactions. (I think....) } @@ -591,50 +554,6 @@ fn executeTxnContext( // Prepare program cache for upcoming feature set - // Update sysvars - { - const update_sysvar_deps: update_sysvar.UpdateSysvarAccountDeps = .{ - .slot = slot, - .slot_store = account_store.forSlot(slot, &ancestors), - .capitalization = &capitalization, - .rent = &genesis_config.rent, - }; - - try update_sysvar.updateSlotHashes( - allocator, - parent_slot, - parent_hash, - update_sysvar_deps, - ); - try update_sysvar.updateStakeHistory( - allocator, - .{ - .epoch = epoch, - .parent_slots_epoch = parent_slots_epoch, - .stakes_cache = &stakes_cache, - .update_sysvar_deps = update_sysvar_deps, - }, - ); - _ = try update_sysvar.updateClock(allocator, .{ - .feature_set = &feature_set, - .epoch_schedule = &epoch_schedule, - .epoch_stakes = epoch_stakes_map.getPtr(epoch), - .stakes_cache = &stakes_cache, - .epoch = epoch, - .parent_slots_epoch = parent_slots_epoch, - .genesis_creation_time = genesis_config.creation_time, - .ns_per_slot = @intCast(genesis_config.nsPerSlot()), - .update_sysvar_deps = update_sysvar_deps, - }); - try update_sysvar.updateLastRestartSlot( - allocator, - &feature_set, - slot, - &hard_forks, - update_sysvar_deps, - ); - } - // Get num accounts modified by this slot if accounts lt hash enabled // A bunch of stats stuff... @@ -671,19 +590,6 @@ fn executeTxnContext( try account_store.put(slot, program.config.ID, .EMPTY); try account_store.put(slot, program.stake.ID, .EMPTY); - // Update epoch schedule and rent to minimum rent exempt balance - { - const update_sysvar_deps = update_sysvar.UpdateSysvarAccountDeps{ - .slot = slot, - .slot_store = account_store.forSlot(slot, &ancestors), - .capitalization = &capitalization, - .rent = &genesis_config.rent, - }; - - try update_sysvar.updateRent(allocator, genesis_config.rent, update_sysvar_deps); - try update_sysvar.updateEpochSchedule(allocator, epoch_schedule, update_sysvar_deps); - } - // Get lamports per signature from first entry in recent blockhashes (read from fixture data directly) const lamports_per_signature = blk: { const rbh_account = accounts_map.get(RecentBlockhashes.ID) orelse break :blk null; @@ -711,17 +617,7 @@ fn executeTxnContext( for (blockhashes) |blockhash| { try blockhash_queue.insertHash(allocator, blockhash, lamports_per_signature); } - const update_sysvar_deps = update_sysvar.UpdateSysvarAccountDeps{ - .slot = slot, - .slot_store = account_store.forSlot(slot, &ancestors), - .capitalization = &capitalization, - .rent = &genesis_config.rent, - }; - try update_sysvar.updateRecentBlockhashes(allocator, &blockhash_queue, update_sysvar_deps); - // Load fixture accounts into accounts db AFTER sysvar updates, - // so fixture data takes precedence (matches agave's behavior where - // accounts are stored at parent_slot before bank construction). for (accounts_map.keys(), accounts_map.values()) |pubkey, account| { try account_store.put(slot, pubkey, .{ .lamports = account.lamports, From a1a4ba8e8d02111fc150458b8f9e7de2d0cc213a Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Mon, 30 Mar 2026 12:29:04 -0400 Subject: [PATCH 35/35] remove unused import --- conformance/src/txn_execute.zig | 1 - 1 file changed, 1 deletion(-) diff --git a/conformance/src/txn_execute.zig b/conformance/src/txn_execute.zig index 66cc5aad42..0b2c967d62 100644 --- a/conformance/src/txn_execute.zig +++ b/conformance/src/txn_execute.zig @@ -73,7 +73,6 @@ const Atomic = std.atomic.Value; const features = sig.core.features; const freeze = sig.replay.freeze; const program = sig.runtime.program; -const sysvars = sig.runtime.sysvar; const vm = sig.vm; const transaction_execution = sig.runtime.transaction_execution; const update_sysvar = sig.replay.update_sysvar;