laddercodec 0.2.0__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {laddercodec-0.2.0 → laddercodec-0.2.1}/.github/workflows/ci.yml +3 -3
- {laddercodec-0.2.0 → laddercodec-0.2.1}/.github/workflows/docs.yml +3 -3
- {laddercodec-0.2.0 → laddercodec-0.2.1}/.github/workflows/publish.yml +3 -3
- laddercodec-0.2.0/CLAUDE.md → laddercodec-0.2.1/AGENTS.md +2 -2
- {laddercodec-0.2.0 → laddercodec-0.2.1}/CHANGELOG.md +10 -0
- laddercodec-0.2.1/CLAUDE.md +1 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/PKG-INFO +2 -2
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/inspect_bin.py +3 -3
- laddercodec-0.2.0/docs/CLAUDE.md → laddercodec-0.2.1/docs/AGENTS.md +1 -1
- laddercodec-0.2.1/docs/CLAUDE.md +1 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/mkdocs.yml +4 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/pyproject.toml +6 -3
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/csv/converter.py +9 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/csv/writer.py +7 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/send_receive.py +6 -1
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/csv/test_writer.py +87 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_decode_program.py +35 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/uv.lock +48 -44
- {laddercodec-0.2.0 → laddercodec-0.2.1}/.claude/settings.local.json +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/.gitignore +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/LICENSE +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/Makefile +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/README.md +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/add-features-workflow.md +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/analyze_scr.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/combine_coverage.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/compare_blobs.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/compare_csv.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/coverage_golden.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/create_mr_max_csv.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/diag_blob.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/dump_scr_tags.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/gen_modbus_coverage.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/golden.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/inspect_scr.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/lint.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/pdf_to_png.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/test_decode_scr.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/validate_scr.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/devtools/walk_scr.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/docs/gen_reference.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/docs/guides/adding-instructions.md +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/docs/guides/csv-format.md +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/docs/guides/decoding.md +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/docs/guides/encoding.md +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/docs/guides/troubleshooting.md +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/docs/index.md +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/docs/internals/binary-format.md +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/docs/internals/instruction-blobs.md +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/docs/internals/wire-rendering.md +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/__init__.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/_grid.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/binary_helpers.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/cell.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/csv/__init__.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/csv/ast.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/csv/bundle.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/csv/contract.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/csv/parser.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/csv/token_parser.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/decode.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/decode_program.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/empty_multirow.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/encode.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/encode_multi.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/__init__.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/call.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/coil.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/comparison.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/contact.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/copy.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/counter.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/drum.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/email.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/end.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/family.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/forloop.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/home.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/math.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/position.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/raw.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/return_.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/search.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/shift.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/timer.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/instructions/velocity.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/model.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/resources/empty_multirow_rule_minimal.scaffold.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/src/laddercodec/topology.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/__init__.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/csv/test_bundle.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/csv/test_contract.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/csv/test_converter.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/csv/test_parser.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/csv/test_token_parser.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/csv/test_writer_raw_validator.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/coverage.ckp +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/blockcopy__block.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/blockcopy__block.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/blockcopy__oneshot.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/blockcopy__oneshot.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/blockcopy__to_ascii.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/blockcopy__to_ascii.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/blockcopy__to_value.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/blockcopy__to_value.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/call__basic.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/call__basic.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__and.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__and.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__eq.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__eq.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__fall.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__fall.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__ge.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__ge.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__gt.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__gt.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__immediate.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__immediate.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__le.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__le.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__lt.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__lt.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__nc.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__nc.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__ne.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__ne.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__no.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__no.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__or.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__or.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__rise.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/cond__rise.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__literal_float.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__literal_float.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__literal_int.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__literal_int.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__oneshot.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__oneshot.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__tag.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__tag.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_ascii.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_ascii.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_binary.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_binary.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_text.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_text.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_text_exp.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_text_exp.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_text_sz.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_text_sz.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_text_term.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_text_term.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_value.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/copy__to_value.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/count_down.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/count_down.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/count_up__down.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/count_up__down.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/count_up__reset.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/count_up__reset.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/end.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/end.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/event_drum__basic.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/event_drum__basic.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/event_drum__full.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/event_drum__full.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/event_drum__jog.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/event_drum__jog.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/event_drum__jump.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/event_drum__jump.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/event_drum__max.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/event_drum__max.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/fill__literal.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/fill__literal.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/fill__oneshot.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/fill__oneshot.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/fill__tag.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/fill__tag.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/forloop__basic.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/forloop__basic.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/forloop__oneshot.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/forloop__oneshot.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/latch__block.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/latch__block.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/latch__immediate.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/latch__immediate.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/latch__tag.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/latch__tag.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/math__decimal.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/math__decimal.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/math__hex.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/math__hex.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/math__oneshot.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/math__oneshot.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/off_delay__tof.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/off_delay__tof.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/on_delay__rton.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/on_delay__rton.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/on_delay__ton.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/on_delay__ton.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/out__block.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/out__block.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/out__immediate.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/out__immediate.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/out__oneshot.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/out__oneshot.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/out__tag.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/out__tag.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_bits.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_bits.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_bits__oneshot.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_bits__oneshot.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_text.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_text.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_text__allow_whitespace.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_text__allow_whitespace.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_text__oneshot.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_text__oneshot.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_words.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_words.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_words__oneshot.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/pack_words__oneshot.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/raw_instructions__email.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/raw_instructions__email.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/raw_instructions__home.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/raw_instructions__home.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/raw_instructions__position.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/raw_instructions__position.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/raw_instructions__velocity.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/raw_instructions__velocity.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__rtu_click_block.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__rtu_click_block.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__rtu_click_single.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__rtu_click_single.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__rtu_modbus_block.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__rtu_modbus_block.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__rtu_modbus_single.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__rtu_modbus_single.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__tcp_click_coil.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__tcp_click_coil.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__tcp_click_input.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__tcp_click_input.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__tcp_click_input_reg.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__tcp_click_input_reg.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__tcp_click_wordswap.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/receive__tcp_click_wordswap.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/reset__block.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/reset__block.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/reset__immediate.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/reset__immediate.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/reset__tag.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/reset__tag.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/return_early__basic.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/return_early__basic.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__continuous.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__continuous.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__eq.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__eq.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__ge.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__ge.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__gt.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__gt.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__le.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__le.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__lt.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__lt.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__ne.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__ne.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__oneshot.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/search__oneshot.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__error_off.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__error_off.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__errorcode_off.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__errorcode_off.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__rtu_click_block.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__rtu_click_block.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__rtu_click_single.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__rtu_click_single.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__rtu_modbus_block.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__rtu_modbus_block.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__rtu_modbus_single.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__rtu_modbus_single.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__sending_off.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__sending_off.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__success_off.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__success_off.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__tcp_click_coil.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__tcp_click_coil.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__tcp_click_coils.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__tcp_click_coils.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__tcp_click_wordswap.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/send__tcp_click_wordswap.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/shift__basic.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/shift__basic.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/time_drum__basic.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/time_drum__basic.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/time_drum__basic_td.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/time_drum__basic_td.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/unpack_to_bits.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/unpack_to_bits.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/unpack_to_bits__oneshot.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/unpack_to_bits__oneshot.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/unpack_to_words.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/unpack_to_words.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/unpack_to_words__oneshot.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/unpack_to_words__oneshot.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/golden/verify_progress.log +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/coverage/subroutines/coverage_sub.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/drum_weird_branch.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-1row-fullwire-nop.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-1row-fullwire-nop.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-1row-max1400.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-1row-max1400.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-1row-styled-mixed.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-1row-styled-mixed.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-2row-max1324.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-2row-max1324.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-2row-nop-wire.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-2row-nop-wire.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-32row-sparse.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-32row-sparse.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-3row-mixed.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/cmt-3row-mixed.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-2row-cond__and.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-2row-cond__and.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-2row-r0only.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-2row-r0only.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-2row-spread.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-2row-spread.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-3row-branch.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-3row-branch.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-3row-or-colA.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-3row-or-colA.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-3row-or.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-3row-or.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-3row-scatter.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-3row-scatter.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-6row-multi-output.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-6row-multi-output.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-coil-timer-ret.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-coil-timer-ret.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-compare-ge.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-compare-ge.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-compare-series.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-compare-series.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-compare-timer.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-compare-timer.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-cond__and.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-cond__and.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-copy-multirow-2af-T.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-copy-multirow-2af-T.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-copy-multirow-2af.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-copy-multirow-2af.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-count_down-row0-data.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-count_down-row0-data.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-no-out.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-no-out.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-series.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-series.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-timer-off.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-timer-off.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-timer-on.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-timer-on.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-timer-ret.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/instr-timer-ret.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-2rung-2row.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-2rung-2row.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-2rung-wire.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-2rung-wire.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-3rung-wire-nop.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-3rung-wire-nop.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-2rung-2row.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-2rung-2row.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-2rung-both.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-2rung-both.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-2rung-r1-max1400.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-2rung-r1-max1400.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-3rung-all.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-3rung-all.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-3rung-multirow-multiinstructions.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-3rung-multirow-multiinstructions.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-3rung-multirow-nopaddedrows.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-3rung-multirow-nopaddedrows.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-3rung-multirow.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-cmt-3rung-multirow.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-instr-2rung.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-instr-2rung.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-instr-cond__and.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/mr-instr-cond__and.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/nc-1row-empty.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/nc-1row-empty.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/nc-1row-fullwire-nop.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/nc-1row-fullwire-nop.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/nc-32row-empty.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/nc-32row-empty.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/nc-3row-t-junction.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/nc-3row-t-junction.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/nc-4row-vertical.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/nc-4row-vertical.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/ladder_captures/golden/verify_progress.log +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/counter_scr.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/counter_scr.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/counter_scr.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/coverage.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/coverage.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/coverage.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/or_topology.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/or_topology.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/or_topology.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/shift_scr.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/shift_scr.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/shift_scr.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/time_drums.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/time_drums.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/scr_captures/time_drums.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/main.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/main.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/main.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/main.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AckAlarm.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AckAlarm.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AckAlarm.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AckAlarm.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AckAndClearAllAlarms.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AckAndClearAllAlarms.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AckAndClearAllAlarms.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AckAndClearAllAlarms.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AckWarning.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AckWarning.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AckWarning.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AckWarning.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AlmHistorian.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AlmHistorian.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AlmHistorian.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/AlmHistorian.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Blower.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Blower.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Blower.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Blower.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/DisableOutputs.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/DisableOutputs.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/DisableOutputs.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/DisableOutputs.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Heat.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Heat.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Heat.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Heat.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Init.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Init.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Init.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Init.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Maint.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Maint.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Maint.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Maint.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Manual.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Manual.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Manual.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Manual.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ModeChange.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ModeChange.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ModeChange.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ModeChange.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/PLCDateTime.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/PLCDateTime.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/PLCDateTime.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/PLCDateTime.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/PLCErrors.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/PLCErrors.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/PLCErrors.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/PLCErrors.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionBoilerplate.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionBoilerplate.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionBoilerplate.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionBoilerplate.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionErrors.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionErrors.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionErrors.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionErrors.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionExecuteSteps.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionExecuteSteps.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionExecuteSteps.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionExecuteSteps.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionHMI.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionHMI.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionHMI.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionHMI.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionStates.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionStates.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionStates.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ProductionStates.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ReadInputs.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ReadInputs.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ReadInputs.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ReadInputs.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/RecipeChange.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/RecipeChange.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/RecipeChange.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/RecipeChange.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Rotate.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Rotate.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Rotate.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Rotate.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/SFCExample.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/SFCExample.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/SFCExample.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/SFCExample.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/SetOutputs.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/SetOutputs.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/SetOutputs.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/SetOutputs.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/SetOutputsManual.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/SetOutputsManual.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/SetOutputsManual.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/SetOutputsManual.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ThermErrors.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ThermErrors.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ThermErrors.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/ThermErrors.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Validation.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Validation.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Validation.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/Validation.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/WarnTimestamp.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/WarnTimestamp.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/WarnTimestamp.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/WarnTimestamp.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_CopyOrJumpState.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_CopyOrJumpState.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_CopyOrJumpState.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_CopyOrJumpState.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_CtrlCmd2StateRequest.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_CtrlCmd2StateRequest.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_CtrlCmd2StateRequest.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_CtrlCmd2StateRequest.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_IsCmdValid.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_IsCmdValid.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_IsCmdValid.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_IsCmdValid.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_MapCmd2Val.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_MapCmd2Val.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_MapCmd2Val.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_MapCmd2Val.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_MapVal2State.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_MapVal2State.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_MapVal2State.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_MapVal2State.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_StateComplete2Request.clipboard.bin +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_StateComplete2Request.clipboard.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_StateComplete2Request.csv +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/fixtures/tumbler/subroutines/sm_StateComplete2Request.scr +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/golden_io.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_counter.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_decode.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_decode_multi.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_decode_program_tumbler.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_decode_rtf_oracle.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_empty_multirow.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_encode.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_encode_multi.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_forloop.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_math.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_model.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_shift.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/ladder/test_verify_status.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/test_coverage.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/test_public_api.py +0 -0
- {laddercodec-0.2.0 → laddercodec-0.2.1}/tests/test_smoke.py +0 -0
|
@@ -25,10 +25,10 @@ jobs:
|
|
|
25
25
|
fetch-depth: 0
|
|
26
26
|
|
|
27
27
|
- name: Install uv (official Astral action)
|
|
28
|
-
uses: astral-sh/setup-uv@
|
|
28
|
+
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
29
29
|
with:
|
|
30
|
-
version: "0.
|
|
31
|
-
enable-cache:
|
|
30
|
+
version: "0.11.29"
|
|
31
|
+
enable-cache: auto
|
|
32
32
|
python-version: ${{ matrix.python-version }}
|
|
33
33
|
|
|
34
34
|
- name: Set up Python (using uv)
|
|
@@ -22,10 +22,10 @@ jobs:
|
|
|
22
22
|
uses: actions/checkout@v6
|
|
23
23
|
|
|
24
24
|
- name: Install uv
|
|
25
|
-
uses: astral-sh/setup-uv@
|
|
25
|
+
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
26
26
|
with:
|
|
27
|
-
version: "0.
|
|
28
|
-
enable-cache:
|
|
27
|
+
version: "0.11.29"
|
|
28
|
+
enable-cache: auto
|
|
29
29
|
python-version: "3.12"
|
|
30
30
|
|
|
31
31
|
- name: Set up Python
|
|
@@ -18,10 +18,10 @@ jobs:
|
|
|
18
18
|
fetch-depth: 0
|
|
19
19
|
|
|
20
20
|
- name: Install uv (official Astral action)
|
|
21
|
-
uses: astral-sh/setup-uv@
|
|
21
|
+
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
22
22
|
with:
|
|
23
|
-
version: "0.
|
|
24
|
-
enable-cache:
|
|
23
|
+
version: "0.11.29"
|
|
24
|
+
enable-cache: auto
|
|
25
25
|
python-version: "3.12"
|
|
26
26
|
|
|
27
27
|
- name: Set up Python (using uv)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
#
|
|
1
|
+
# laddercodec Agent Guidance
|
|
2
2
|
|
|
3
3
|
**IMPORTANT: Don't use `cd` before commands. The working directory is already set to the project root.**
|
|
4
4
|
**IMPORTANT: Always use `make` commands, not direct `uv run` commands.**
|
|
5
5
|
|
|
6
|
-
This file provides guidance to
|
|
6
|
+
This file provides guidance to coding agents working in this repository.
|
|
7
7
|
|
|
8
8
|
## Project Overview
|
|
9
9
|
|
|
@@ -8,6 +8,16 @@
|
|
|
8
8
|
Review and condense before release — entries accumulate during development and
|
|
9
9
|
should be edited into shape before moving from Unreleased to a version heading. -->
|
|
10
10
|
|
|
11
|
+
## 0.2.1 (Unreleased)
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- **SCR decode**: a Modbus `Send` at `device_id=0` no longer decodes as `device_id=1` — SCR blobs elide fields at their class default, and Send's device_id default (0) differs from Receive's (1).
|
|
15
|
+
- **CSV writer**: a `count_up` with `.reset()` wired but `.down()` unused always dehydrates the empty `.down()` row, so the `.reset()` pin row directly follows the counter row even when the reset branch has a floating OR-leg below it.
|
|
16
|
+
- **CSV read**: rows after a counter/shift `.reset()` pin row stay below the instruction's span instead of being absorbed into it, which misplaced a floating OR-leg onto the unused `.down()` row.
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
- **Tests**: synthetic regression coverage for default-elided Send/Receive fields and for floating OR-leg rows below every pinned instruction span (timer, count_up, count_down, shift).
|
|
20
|
+
|
|
11
21
|
## 0.2.0
|
|
12
22
|
|
|
13
23
|
### Fixed
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: laddercodec
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Binary codec for AutomationDirect CLICK PLC ladder clipboard format
|
|
5
5
|
Project-URL: Repository, https://github.com/ssweber/laddercodec
|
|
6
6
|
Project-URL: Documentation, https://ssweber.github.io/laddercodec/
|
|
@@ -150,12 +150,12 @@ def main() -> None:
|
|
|
150
150
|
print(f"{'=' * 60}")
|
|
151
151
|
|
|
152
152
|
result = decode(data)
|
|
153
|
-
if isinstance(result,
|
|
153
|
+
if isinstance(result, Rung):
|
|
154
|
+
_print_rung(result, 0)
|
|
155
|
+
else:
|
|
154
156
|
print(f" Multi-rung: {len(result)} rungs")
|
|
155
157
|
for i, rung in enumerate(result):
|
|
156
158
|
_print_rung(rung, i)
|
|
157
|
-
else:
|
|
158
|
-
_print_rung(result, 0)
|
|
159
159
|
|
|
160
160
|
|
|
161
161
|
if __name__ == "__main__":
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -40,9 +40,9 @@ dependencies = []
|
|
|
40
40
|
[dependency-groups]
|
|
41
41
|
dev = [
|
|
42
42
|
"pytest>=8.3.5",
|
|
43
|
-
"ruff>=0.
|
|
43
|
+
"ruff>=0.16.0",
|
|
44
44
|
"striprtf>=0.0.29",
|
|
45
|
-
"ty>=0.0.
|
|
45
|
+
"ty>=0.0.65",
|
|
46
46
|
]
|
|
47
47
|
docs = [
|
|
48
48
|
"mkdocs>=1.6.1,<2",
|
|
@@ -74,12 +74,15 @@ bump = true
|
|
|
74
74
|
packages = ["src/laddercodec"]
|
|
75
75
|
|
|
76
76
|
[tool.uv]
|
|
77
|
+
required-version = ">=0.11.29"
|
|
77
78
|
exclude-newer = "7 days"
|
|
79
|
+
exclude-newer-package = { ty = "0 days" }
|
|
78
80
|
|
|
79
81
|
# ---- Settings ----
|
|
80
82
|
|
|
81
83
|
[tool.ruff]
|
|
82
84
|
line-length = 100
|
|
85
|
+
extend-exclude = ["*.md"]
|
|
83
86
|
|
|
84
87
|
[tool.ruff.lint]
|
|
85
88
|
select = [
|
|
@@ -113,7 +116,7 @@ python-version = "3.11"
|
|
|
113
116
|
root = ["./src", "./tests", "./devtools"]
|
|
114
117
|
|
|
115
118
|
[tool.ty.src]
|
|
116
|
-
exclude = ["tests", "scratchpad"]
|
|
119
|
+
exclude = ["tests", "scratchpad", "devtools/pdf_to_png.py"]
|
|
117
120
|
|
|
118
121
|
[tool.ty.rules]
|
|
119
122
|
unresolved-import = "ignore"
|
|
@@ -240,6 +240,15 @@ def _consume_active_row(block: _ActiveBlock, row: _ParsedRow) -> bool:
|
|
|
240
240
|
if len(block.continuations) >= _max_continuations(block):
|
|
241
241
|
return False
|
|
242
242
|
|
|
243
|
+
# .reset() occupies the last row of a counter/shift span, so nothing after
|
|
244
|
+
# it belongs to the block — following rows are floating rows below the
|
|
245
|
+
# span (e.g. the OR-leg of the reset branch). This is what lets the
|
|
246
|
+
# writer dehydrate an unused .down() row above the .reset() pin.
|
|
247
|
+
if isinstance(block.token, (Counter, Shift)) and any(
|
|
248
|
+
c.kind == "pin" and c.pin_name == ".reset" for c in block.continuations
|
|
249
|
+
):
|
|
250
|
+
return False
|
|
251
|
+
|
|
243
252
|
if row.kind == "blank":
|
|
244
253
|
block.continuations.append(row)
|
|
245
254
|
return True
|
|
@@ -201,6 +201,13 @@ def _emit_counter_block(
|
|
|
201
201
|
data_row_count = _append_data_row(
|
|
202
202
|
rows, data_row_count, condition_rows[start + 1], ".down()"
|
|
203
203
|
)
|
|
204
|
+
elif counter.reset_enabled:
|
|
205
|
+
# The unused .down() row is always empty padding, and the .reset()
|
|
206
|
+
# pin row anchors any following floating rows on reparse — so the
|
|
207
|
+
# empty row always dehydrates, even above a floating row.
|
|
208
|
+
data_row_count = _emit_blank_continuation(
|
|
209
|
+
rows, data_row_count, condition_rows[start + 1]
|
|
210
|
+
)
|
|
204
211
|
else:
|
|
205
212
|
data_row_count = _emit_blank_continuation(
|
|
206
213
|
rows, data_row_count, condition_rows[start + 1], keep
|
|
@@ -606,6 +606,8 @@ def _build_remote_start(
|
|
|
606
606
|
|
|
607
607
|
def _from_tags_rd(tags: dict[int, str], lens: dict[int, int]) -> Receive | None:
|
|
608
608
|
protocol_mode = tags.get(0x220C, "0")
|
|
609
|
+
# SCR blobs elide fields at their class default. Receive's device_id
|
|
610
|
+
# default is 1; Send's is 0 (see _from_tags_sd).
|
|
609
611
|
device_id = int(tags.get(0x320E, tags.get(0x60B2, "1")) or "1")
|
|
610
612
|
target = _build_target(protocol_mode, device_id, tags)
|
|
611
613
|
|
|
@@ -629,7 +631,10 @@ def _from_tags_rd(tags: dict[int, str], lens: dict[int, int]) -> Receive | None:
|
|
|
629
631
|
|
|
630
632
|
def _from_tags_sd(tags: dict[int, str], lens: dict[int, int]) -> Send | None:
|
|
631
633
|
protocol_mode = tags.get(0x220C, "0")
|
|
632
|
-
|
|
634
|
+
# SCR blobs elide fields at their class default, and Send's device_id
|
|
635
|
+
# default is 0 (a Send at device_id 0 stores no 0x320E/0x60B2 tag, while
|
|
636
|
+
# one at 1 stores both — verified against a native scr+clipboard pair).
|
|
637
|
+
device_id = int(tags.get(0x320E, tags.get(0x60B2, "0")) or "0")
|
|
633
638
|
target = _build_target(protocol_mode, device_id, tags)
|
|
634
639
|
|
|
635
640
|
remote_start = _build_remote_start(tags, lens, rd=False)
|
|
@@ -1027,3 +1027,90 @@ class TestIndexedMarkers:
|
|
|
1027
1027
|
assert rt_indexed.conditions == rt_plain.conditions
|
|
1028
1028
|
assert rt_indexed.instructions == rt_plain.instructions
|
|
1029
1029
|
assert rt_indexed.comment == rt_plain.comment
|
|
1030
|
+
|
|
1031
|
+
|
|
1032
|
+
# ---------------------------------------------------------------------------
|
|
1033
|
+
# Floating rows below pinned-instruction spans
|
|
1034
|
+
# ---------------------------------------------------------------------------
|
|
1035
|
+
|
|
1036
|
+
|
|
1037
|
+
def _cells(marker: str, cells: dict[int, str], af: str, fill: str = "-") -> list[str]:
|
|
1038
|
+
"""Build one 33-column CSV data row from sparse condition cells."""
|
|
1039
|
+
return [marker] + [cells.get(i, fill) for i in range(31)] + [af]
|
|
1040
|
+
|
|
1041
|
+
|
|
1042
|
+
def _floating_leg_rows(*span_rows: list[str]) -> list[list[str]]:
|
|
1043
|
+
"""Append a floating OR-leg row (contact joining a T on the row above)."""
|
|
1044
|
+
return [*span_rows, _cells("", {0: "C1"}, "", fill="")]
|
|
1045
|
+
|
|
1046
|
+
|
|
1047
|
+
_FLOATING_CASES = [
|
|
1048
|
+
pytest.param(
|
|
1049
|
+
_floating_leg_rows(
|
|
1050
|
+
_cells("R", {0: "X001"}, "on_delay(T1,TD1,preset=5000,unit=Tms)"),
|
|
1051
|
+
_cells("", {0: "rise(C2)", 1: "T"}, ".reset()"),
|
|
1052
|
+
),
|
|
1053
|
+
id="timer_retained",
|
|
1054
|
+
),
|
|
1055
|
+
pytest.param(
|
|
1056
|
+
_floating_leg_rows(
|
|
1057
|
+
_cells("R", {0: "X001"}, "count_up(CT1,CTD1,preset=60)"),
|
|
1058
|
+
_cells("", {0: "rise(C2)", 1: "T"}, ".reset()"),
|
|
1059
|
+
),
|
|
1060
|
+
id="count_up_reset_dehydrated",
|
|
1061
|
+
),
|
|
1062
|
+
pytest.param(
|
|
1063
|
+
_floating_leg_rows(
|
|
1064
|
+
_cells("R", {0: "X001"}, "count_up(CT1,CTD1,preset=60)"),
|
|
1065
|
+
_cells("", {0: "X002"}, ".down()"),
|
|
1066
|
+
_cells("", {0: "rise(C2)", 1: "T"}, ".reset()"),
|
|
1067
|
+
),
|
|
1068
|
+
id="count_up_down_and_reset",
|
|
1069
|
+
),
|
|
1070
|
+
pytest.param(
|
|
1071
|
+
_floating_leg_rows(
|
|
1072
|
+
_cells("R", {0: "X001"}, "count_down(CT3,CTD3,preset=50)"),
|
|
1073
|
+
_cells("", {0: "rise(C2)", 1: "T"}, ".reset()"),
|
|
1074
|
+
),
|
|
1075
|
+
id="count_down",
|
|
1076
|
+
),
|
|
1077
|
+
pytest.param(
|
|
1078
|
+
_floating_leg_rows(
|
|
1079
|
+
_cells("R", {0: "X001"}, "shift(C99..C106)"),
|
|
1080
|
+
_cells("", {0: "X002"}, ".clock()"),
|
|
1081
|
+
_cells("", {0: "rise(C2)", 1: "T"}, ".reset()"),
|
|
1082
|
+
),
|
|
1083
|
+
id="shift",
|
|
1084
|
+
),
|
|
1085
|
+
]
|
|
1086
|
+
|
|
1087
|
+
|
|
1088
|
+
class TestFloatingRowBelowPinnedSpan:
|
|
1089
|
+
"""A floating OR-leg row below a pinned instruction's span must survive
|
|
1090
|
+
CSV -> encode -> decode -> CSV without moving onto a span row, and the
|
|
1091
|
+
writer's emission must equal the canonical input (unused span padding
|
|
1092
|
+
dehydrated, pin rows adjacent)."""
|
|
1093
|
+
|
|
1094
|
+
@pytest.mark.parametrize("data_rows", _FLOATING_CASES)
|
|
1095
|
+
def test_round_trip_preserves_geometry(
|
|
1096
|
+
self, data_rows: list[list[str]], tmp_path: Path
|
|
1097
|
+
) -> None:
|
|
1098
|
+
from laddercodec import encode
|
|
1099
|
+
from laddercodec.csv import CSV_HEADER
|
|
1100
|
+
|
|
1101
|
+
src = tmp_path / "case.csv"
|
|
1102
|
+
with src.open("w", newline="", encoding="utf-8") as fh:
|
|
1103
|
+
writer = csv.writer(fh)
|
|
1104
|
+
writer.writerow(CSV_HEADER)
|
|
1105
|
+
writer.writerows(data_rows)
|
|
1106
|
+
|
|
1107
|
+
rungs = read_csv(src)
|
|
1108
|
+
assert len(rungs) == 1
|
|
1109
|
+
|
|
1110
|
+
# Writer emission is canonical: identical to the hand-written rows.
|
|
1111
|
+
assert decoded_rung_to_rows(rungs[0]) == data_rows
|
|
1112
|
+
|
|
1113
|
+
# Binary round-trip preserves the same emission.
|
|
1114
|
+
decoded = decode(encode(rungs))
|
|
1115
|
+
decoded_list = decoded if isinstance(decoded, list) else [decoded]
|
|
1116
|
+
assert decoded_rung_to_rows(decoded_list[0]) == data_rows
|
|
@@ -24,6 +24,13 @@ from laddercodec.instructions.home import from_tags as home_from_tags
|
|
|
24
24
|
from laddercodec.instructions.math import Math
|
|
25
25
|
from laddercodec.instructions.position import from_tags as position_from_tags
|
|
26
26
|
from laddercodec.instructions.raw import _decompose_blob, _fields_to_tag_dicts
|
|
27
|
+
from laddercodec.instructions.send_receive import (
|
|
28
|
+
_RD_TYPE_CODE,
|
|
29
|
+
_SD_TYPE_CODE,
|
|
30
|
+
Receive,
|
|
31
|
+
Send,
|
|
32
|
+
)
|
|
33
|
+
from laddercodec.instructions.send_receive import from_tags as send_receive_from_tags
|
|
27
34
|
from laddercodec.instructions.timer import Timer
|
|
28
35
|
|
|
29
36
|
decode_program_module = importlib.import_module("laddercodec.decode_program")
|
|
@@ -532,6 +539,34 @@ def test_decode_program_matches_counter_scr_fixture():
|
|
|
532
539
|
assert [_rung_to_lines(r) for r in scr_rungs] == [_rung_to_lines(r) for r in clip_rungs]
|
|
533
540
|
|
|
534
541
|
|
|
542
|
+
def test_send_receive_elided_device_id_defaults():
|
|
543
|
+
"""SCR blobs elide fields at their class default, and the defaults differ
|
|
544
|
+
per class: a Send with no 0x320E/0x60B2 tag is device_id 0, a Receive is
|
|
545
|
+
device_id 1. Verified against a native scr+clipboard pair where a Send at
|
|
546
|
+
device_id 0 stored no tag while one at 1 stored both."""
|
|
547
|
+
base = {
|
|
548
|
+
0x220C: "2", # protocol: modbus tcp
|
|
549
|
+
0x320F: "2", # remote_start address type: raw string
|
|
550
|
+
0x6085: "DS12", # remote_start
|
|
551
|
+
0x607E: "DS3", # source / dest
|
|
552
|
+
0x622B: "10.0.0.9",
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
send = send_receive_from_tags("SD", _SD_TYPE_CODE, dict(base), {})
|
|
556
|
+
assert isinstance(send, Send)
|
|
557
|
+
assert send.target.device_id == 0
|
|
558
|
+
|
|
559
|
+
receive = send_receive_from_tags("RD", _RD_TYPE_CODE, dict(base), {})
|
|
560
|
+
assert isinstance(receive, Receive)
|
|
561
|
+
assert receive.target.device_id == 1
|
|
562
|
+
|
|
563
|
+
explicit = dict(base) | {0x320E: "5"}
|
|
564
|
+
send = send_receive_from_tags("SD", _SD_TYPE_CODE, explicit, {})
|
|
565
|
+
receive = send_receive_from_tags("RD", _RD_TYPE_CODE, explicit, {})
|
|
566
|
+
assert send is not None and send.target.device_id == 5
|
|
567
|
+
assert receive is not None and receive.target.device_id == 5
|
|
568
|
+
|
|
569
|
+
|
|
535
570
|
def test_time_drums_scr_and_bin_both_match_golden_csv():
|
|
536
571
|
"""Time drums across all units + jog/jump, a T-wire branch, and a drum
|
|
537
572
|
carrying a stray pin-row NOP: SCR, clipboard, and golden CSV all agree."""
|
|
@@ -3,9 +3,12 @@ revision = 3
|
|
|
3
3
|
requires-python = ">=3.11, <4.0"
|
|
4
4
|
|
|
5
5
|
[options]
|
|
6
|
-
exclude-newer = "
|
|
6
|
+
exclude-newer = "0001-01-01T00:00:00Z" # This has no effect and is included for backwards compatibility when using relative exclude-newer values.
|
|
7
7
|
exclude-newer-span = "P7D"
|
|
8
8
|
|
|
9
|
+
[options.exclude-newer-package]
|
|
10
|
+
ty = { timestamp = "0001-01-01T00:00:00Z", span = "PT0S" }
|
|
11
|
+
|
|
9
12
|
[[package]]
|
|
10
13
|
name = "babel"
|
|
11
14
|
version = "2.18.0"
|
|
@@ -236,9 +239,9 @@ docs = [
|
|
|
236
239
|
[package.metadata.requires-dev]
|
|
237
240
|
dev = [
|
|
238
241
|
{ name = "pytest", specifier = ">=8.3.5" },
|
|
239
|
-
{ name = "ruff", specifier = ">=0.
|
|
242
|
+
{ name = "ruff", specifier = ">=0.16.0" },
|
|
240
243
|
{ name = "striprtf", specifier = ">=0.0.29" },
|
|
241
|
-
{ name = "ty", specifier = ">=0.0.
|
|
244
|
+
{ name = "ty", specifier = ">=0.0.65" },
|
|
242
245
|
]
|
|
243
246
|
docs = [
|
|
244
247
|
{ name = "mkdocs", specifier = ">=1.6.1,<2" },
|
|
@@ -748,27 +751,27 @@ wheels = [
|
|
|
748
751
|
|
|
749
752
|
[[package]]
|
|
750
753
|
name = "ruff"
|
|
751
|
-
version = "0.
|
|
752
|
-
source = { registry = "https://pypi.org/simple" }
|
|
753
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
754
|
-
wheels = [
|
|
755
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
756
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
757
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
758
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
759
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
760
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
761
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
762
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
763
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
764
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
765
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
766
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
767
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
768
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
769
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
770
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
771
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
754
|
+
version = "0.16.0"
|
|
755
|
+
source = { registry = "https://pypi.org/simple" }
|
|
756
|
+
sdist = { url = "https://files.pythonhosted.org/packages/4d/94/1e5e4967626faf12fa56999cd6222dff6992ceb086ad7945756baf70c7a7/ruff-0.16.0.tar.gz", hash = "sha256:e460aafd5495ec89efaa6ced2e4a9a581116451e1c88b9d37ef497e0f8e93982", size = 4790557, upload-time = "2026-07-23T19:11:30.981Z" }
|
|
757
|
+
wheels = [
|
|
758
|
+
{ url = "https://files.pythonhosted.org/packages/4b/81/1c8818fee7ce1a04cd7d1b3172e0a8f8e4f1dc4feb7fc390e16daa8af323/ruff-0.16.0-py3-none-linux_armv6l.whl", hash = "sha256:e5115729eb08c585e5121978ba5d5b60caeae394ce21b9fb5e6cd33a1c6c9b1e", size = 10754633, upload-time = "2026-07-23T19:10:46.415Z" },
|
|
759
|
+
{ url = "https://files.pythonhosted.org/packages/23/df/beaf59c09d68db84304d555f188b276a77132a5d5b0b67a5c762aa143628/ruff-0.16.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3c954b1d580bfa035b41654f7858cc7e71d5fc3ac5b723dd62bd9133830ed522", size = 10969164, upload-time = "2026-07-23T19:10:50.271Z" },
|
|
760
|
+
{ url = "https://files.pythonhosted.org/packages/42/ce/741cd197496a1abbf51352710fd15ed995d2a2be87189c1da26a450d6e83/ruff-0.16.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e01c21d10eb1b29f47b7454e1f4056db9a3f0260c646aa88457c610291db9f81", size = 10488846, upload-time = "2026-07-23T19:10:52.639Z" },
|
|
761
|
+
{ url = "https://files.pythonhosted.org/packages/52/2a/a2db8e88cade358f5cdcb05674a917751074109315d014eb6352d9a893f7/ruff-0.16.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e364e5ed22ed8dc05082fd78e35308618260907ac2d3c1d637b2e682415b6c9", size = 10889729, upload-time = "2026-07-23T19:10:54.89Z" },
|
|
762
|
+
{ url = "https://files.pythonhosted.org/packages/42/65/62a771694ebd63029dc953e27dbad40e1588bd4860ff9fe881018fddaa49/ruff-0.16.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d327b8fc113a1d4421a04f3839d3752057c8dd1ee320223a6f3f52d04ada462a", size = 10568275, upload-time = "2026-07-23T19:10:56.993Z" },
|
|
763
|
+
{ url = "https://files.pythonhosted.org/packages/3f/e2/ced249fe8af5f086c5c58cc21cc3356d50f32f7401c5df87050c999620a7/ruff-0.16.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9b50c55e263103586b3dcf5f73d479eb8cb5fdb6098fec59a62891dab653717", size = 11385112, upload-time = "2026-07-23T19:10:59.615Z" },
|
|
764
|
+
{ url = "https://files.pythonhosted.org/packages/87/0b/05154977a8fd69eeb6c103271f55403bfd8711f5c0f8ed07489d95a504e7/ruff-0.16.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ff4a79ce3ec0172f3241943835de1c4cb4e2dcd07f0f8c2d02603dbbbee4b17", size = 12207008, upload-time = "2026-07-23T19:11:02.154Z" },
|
|
765
|
+
{ url = "https://files.pythonhosted.org/packages/fb/29/98225831a3a1eab0e02f4acc6ca6559a98611dcc68b6965ff4b7234627c1/ruff-0.16.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e95c448fca1fb2a18372a9440926c5a6ee789639bb975c72e7ae6d0b04218ab4", size = 11650842, upload-time = "2026-07-23T19:11:04.557Z" },
|
|
766
|
+
{ url = "https://files.pythonhosted.org/packages/91/66/6bd3cf90500653d55dc0ffc8507aa8300bd49d0214b2e8cb4d3fef2943ba/ruff-0.16.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f11a8d11010301d0a398a2fdef67691feca7294da6aef55e2150e8fa2cd520b", size = 11400718, upload-time = "2026-07-23T19:11:09.233Z" },
|
|
767
|
+
{ url = "https://files.pythonhosted.org/packages/8e/a2/a54eb4eae05d66364050a5d3b8a9c5ef88196531b3cbe7109d873f87f819/ruff-0.16.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:48044c678e9cb8698246c99b14aaccfa6601dea7379eb48a6f8f73f7a6d86cd0", size = 11426177, upload-time = "2026-07-23T19:11:11.994Z" },
|
|
768
|
+
{ url = "https://files.pythonhosted.org/packages/1a/be/16e3eea4b2a478a496919f5e36f17c4559e54620bd3bbac5d6affa068006/ruff-0.16.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7aa0959bad8eb8bef50340154fc9b58678dae31fa4293afa38b44b6e552c0213", size = 10856126, upload-time = "2026-07-23T19:11:14.221Z" },
|
|
769
|
+
{ url = "https://files.pythonhosted.org/packages/a2/84/252eb8b868a16eec7257c14f504f77537e734b2d69c762e639e588e304a3/ruff-0.16.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:28ea2b7df8ebf7f9da6b7d47b230ab48f387c0a29be3b474c4d0740e197bb9af", size = 10571208, upload-time = "2026-07-23T19:11:16.378Z" },
|
|
770
|
+
{ url = "https://files.pythonhosted.org/packages/21/09/817a482f542f7570cbb4554b26e896610c7114f539b1d9e2d2145bf6bef6/ruff-0.16.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:33a3dfac8c35f81498dea9181bccc2f4c4bc8f1521a1dd9406e77643e0f0fb09", size = 11063329, upload-time = "2026-07-23T19:11:19.173Z" },
|
|
771
|
+
{ url = "https://files.pythonhosted.org/packages/2e/23/9403c180ca1cb9b1f7335f5c3e5305c09d49ea5b345196682a36028bde4a/ruff-0.16.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a5237a0bda500d30d81b8e07a6973a5cbc772864cbf746ae2f4e8a2e01c9f4ed", size = 11489751, upload-time = "2026-07-23T19:11:21.74Z" },
|
|
772
|
+
{ url = "https://files.pythonhosted.org/packages/b2/1d/1b2ef7bcde851c78d7f17f1cca13fd6dc695fc4b3d6197941e72cae5b132/ruff-0.16.0-py3-none-win32.whl", hash = "sha256:7fab76fa065c873f41ff744347c6e77bcc3dfec4bcc754dc26b63d23c0f7f5fb", size = 10785885, upload-time = "2026-07-23T19:11:23.947Z" },
|
|
773
|
+
{ url = "https://files.pythonhosted.org/packages/b2/a3/d5e4ef7a56be3f928ffb90b94c25ba7d3cb9c7fe0736aeaaedf361770712/ruff-0.16.0-py3-none-win_amd64.whl", hash = "sha256:429c117f022bf481fabd9d551e7a3952b24c65e6ef44337ea09d90bebef14472", size = 11923141, upload-time = "2026-07-23T19:11:26.409Z" },
|
|
774
|
+
{ url = "https://files.pythonhosted.org/packages/cb/9a/8415f2657cbe200f41a4531ccededf135505a92d4a012229121f885b26f9/ruff-0.16.0-py3-none-win_arm64.whl", hash = "sha256:14296fedcd2705c77ab8235439278bbb38f285cf7da5528b00b3e330c3d4872d", size = 11273407, upload-time = "2026-07-23T19:11:28.705Z" },
|
|
772
775
|
]
|
|
773
776
|
|
|
774
777
|
[[package]]
|
|
@@ -800,26 +803,27 @@ wheels = [
|
|
|
800
803
|
|
|
801
804
|
[[package]]
|
|
802
805
|
name = "ty"
|
|
803
|
-
version = "0.0.
|
|
804
|
-
source = { registry = "https://pypi.org/simple" }
|
|
805
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
806
|
-
wheels = [
|
|
807
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
808
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
809
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
810
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
811
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
812
|
-
{ url = "https://files.pythonhosted.org/packages/3e/
|
|
813
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
814
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
815
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
816
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
817
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
818
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
819
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
820
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
821
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
822
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
806
|
+
version = "0.0.65"
|
|
807
|
+
source = { registry = "https://pypi.org/simple" }
|
|
808
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cf561927e8e9ab5c1892a833b664aa9cd6f051a75f6280c66d8047246bda/ty-0.0.65.tar.gz", hash = "sha256:b7134bffcc00b715fa8291e84d845782ced810a998dc1f7f11d71c85c4046325", size = 6460098, upload-time = "2026-07-29T18:31:03.27Z" }
|
|
809
|
+
wheels = [
|
|
810
|
+
{ url = "https://files.pythonhosted.org/packages/7b/4e/71e2d325d2b53a1afad81624ad076b2ede413213fc4a18cb05b78c568571/ty-0.0.65-py3-none-linux_armv6l.whl", hash = "sha256:dc556c9f05408bef4c4ef02b2cc382e4e5f797b4b20d64410289848f0d76705f", size = 12298466, upload-time = "2026-07-29T18:30:12.744Z" },
|
|
811
|
+
{ url = "https://files.pythonhosted.org/packages/57/77/fec8f29647c55794efa430a7f365e44f5ce7ffb6459d9445a87fac569bec/ty-0.0.65-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:29d2e0d34cc0a28a17ef0cf81135c5ebabc3562131f9079138ba5e7bae0f56bd", size = 11942421, upload-time = "2026-07-29T18:30:16.076Z" },
|
|
812
|
+
{ url = "https://files.pythonhosted.org/packages/13/09/7f3766aef9dc627e2698cf4e3e59cf53389dcae3812040d33c1aa931230f/ty-0.0.65-py3-none-macosx_11_0_arm64.whl", hash = "sha256:685f49a9312bbf69d5b65bbb66384fed1f927403ea030c217b9289092d7e46c4", size = 11451922, upload-time = "2026-07-29T18:30:19.155Z" },
|
|
813
|
+
{ url = "https://files.pythonhosted.org/packages/cb/7b/1a77cd50e0befb50f55b8bf9bd3ed3eddf184bf28c61b56727039e0774fc/ty-0.0.65-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f564b5ebe78e2f3a8e7b8eacb1292eb88b7c0f3c8630671cfca31abc0709cd9", size = 11994999, upload-time = "2026-07-29T18:30:22.315Z" },
|
|
814
|
+
{ url = "https://files.pythonhosted.org/packages/63/7b/feda16f3a4a0a99be27431e0c9598eeeec0db1eb2fec9a15976698209418/ty-0.0.65-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c983e156fe9e113fb56389e13d327b6b8549fe866de9b269684723a88e9b732d", size = 12090662, upload-time = "2026-07-29T18:30:24.93Z" },
|
|
815
|
+
{ url = "https://files.pythonhosted.org/packages/ed/3e/3f69bf9c9307dbdc0771719f65ce5b556e7bdeeaccbdd599d4f57866d801/ty-0.0.65-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3663b7396e8b1a9954e20e732de7ccb0192bf4118473069b4945920d6923921", size = 12822094, upload-time = "2026-07-29T18:30:28.012Z" },
|
|
816
|
+
{ url = "https://files.pythonhosted.org/packages/90/38/8fa791b3bb503ee2b46ad81690cd1bdd54519582df6d805cee57fe143e85/ty-0.0.65-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:306ed01f29d6e108e98feb233dbbf5878a027603b71bd3743b343977933a9f16", size = 13357833, upload-time = "2026-07-29T18:30:31.122Z" },
|
|
817
|
+
{ url = "https://files.pythonhosted.org/packages/c1/73/4dda396a201e1dd0ed3594a9b48e559cb41c4bc048c6cd4c4d1b39eb4313/ty-0.0.65-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28bcfc8898c94f079a9100e684bcf312b6a64ad3a7d4ebb35a4591546030a2cd", size = 12977303, upload-time = "2026-07-29T18:30:33.944Z" },
|
|
818
|
+
{ url = "https://files.pythonhosted.org/packages/a5/26/c250c2c569adc53a8591716641388397bcb2a442e4a30b952ae81b50c0e0/ty-0.0.65-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a75bd0c245c38802a8f488378e74f92feb7dd33db7d63fbdd6fdf82791ba730", size = 12579338, upload-time = "2026-07-29T18:30:37.199Z" },
|
|
819
|
+
{ url = "https://files.pythonhosted.org/packages/d3/94/4a5647d44753ca218fc930d7e4d9bf468d0ed4a0ad4b3d57588bc1bbacf7/ty-0.0.65-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9e5e1bdea9662d2b5312b4e99f319f4e6e2ea427511b5fbc546141b79ec53f76", size = 12957731, upload-time = "2026-07-29T18:30:39.937Z" },
|
|
820
|
+
{ url = "https://files.pythonhosted.org/packages/36/b6/1e22fa11a1e0dfb20b1c7f3cbfd8170273aada2a82f9ecd3055275370c44/ty-0.0.65-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:03a88493d4842889f65280ae241e06b399d57eb3c63571054cad21a4c33b3b69", size = 11938625, upload-time = "2026-07-29T18:30:42.603Z" },
|
|
821
|
+
{ url = "https://files.pythonhosted.org/packages/5c/0a/fe5f22ef62b193201bc5566762e22049762cd485bfafb5095a7050760054/ty-0.0.65-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:600b8bf6f4940cf7ffb2f43d3716faaf38dcb97cd8617c55771451bc0276408f", size = 12105592, upload-time = "2026-07-29T18:30:45.419Z" },
|
|
822
|
+
{ url = "https://files.pythonhosted.org/packages/76/fd/922b3a6e9d697452cdbb4b7e3f636868add5ec652154518a736e4364f3b7/ty-0.0.65-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0c28007bc79d648c1ddaf1e65885d07baec48eb87240da442f608e4107c1b7d8", size = 12387335, upload-time = "2026-07-29T18:30:48.405Z" },
|
|
823
|
+
{ url = "https://files.pythonhosted.org/packages/77/22/a1a08ebc84c083db2fb55e3b5cd186db0c067692f4921146f601360231e2/ty-0.0.65-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c852da96091ad22361e6586b7c7ba98e1334dcd4d8ffb67e47f4fb673de33f77", size = 12682710, upload-time = "2026-07-29T18:30:51.364Z" },
|
|
824
|
+
{ url = "https://files.pythonhosted.org/packages/81/14/eaaa410a25bbdea19722109b5422380a0e211b3afcf3071d15953ddbd5db/ty-0.0.65-py3-none-win32.whl", hash = "sha256:cf529d538f1403b14b0511e6ec3cdb95d3d974adabf24cc76cedc533368c3edc", size = 11692341, upload-time = "2026-07-29T18:30:54.35Z" },
|
|
825
|
+
{ url = "https://files.pythonhosted.org/packages/bc/0f/6d48f206dce9d7e53fe3b5ea0f0ab5800dd9d2365b2b48f736783436c43f/ty-0.0.65-py3-none-win_amd64.whl", hash = "sha256:234a321e33c7cbbfbd67bfa0b01b685dd9c21f1841781a21e5ca1fa0b25f1d5d", size = 12729355, upload-time = "2026-07-29T18:30:57.275Z" },
|
|
826
|
+
{ url = "https://files.pythonhosted.org/packages/96/aa/7446f7725e303cf78e058c893af1f0552b9451895454908706f4c6c3494b/ty-0.0.65-py3-none-win_arm64.whl", hash = "sha256:b9424be1ec56d93ff18609fb1c0a0a2283fe1282cd6d1c7604f97d73b94d61f2", size = 12051375, upload-time = "2026-07-29T18:31:00.579Z" },
|
|
823
827
|
]
|
|
824
828
|
|
|
825
829
|
[[package]]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|