├── README.md ├── decode ├── decode-export-string ├── encode-export-string ├── saves ├── v1.0.0 │ ├── Makefile │ ├── blueprint-storage.dat │ └── bp-decoder-1.0.0.zip └── v1.1.19 │ ├── Makefile │ ├── blueprint-storage.dat │ └── bp-decoder-1.1.19.zip ├── tests ├── .gitignore ├── tools │ ├── split-lib │ └── update-tests ├── v1.0.0 │ ├── Makefile │ ├── README.md │ ├── bps-assembler.dat │ ├── bps-assembler.export │ ├── bps-belts.dat │ ├── bps-belts.export │ ├── bps-books.dat │ ├── bps-books.export │ ├── bps-chests.dat │ ├── bps-chests.export │ ├── bps-combat-simple.dat │ ├── bps-combat-simple.export │ ├── bps-combinators.dat │ ├── bps-combinators.export │ ├── bps-connected-inserters.dat │ ├── bps-connected-inserters.export │ ├── bps-constant-combinator.dat │ ├── bps-constant-combinator.export │ ├── bps-electric-poles.dat │ ├── bps-electric-poles.export │ ├── bps-empty.dat │ ├── bps-far-away-1.export │ ├── bps-far-away-2.export │ ├── bps-far-away.dat │ ├── bps-furnaces.dat │ ├── bps-furnaces.export │ ├── bps-infinity.dat │ ├── bps-infinity.export │ ├── bps-inserters-circuit.dat │ ├── bps-inserters-circuit.export │ ├── bps-inserters.dat │ ├── bps-inserters.export │ ├── bps-lamps.dat │ ├── bps-lamps.export │ ├── bps-loader.dat │ ├── bps-loader.export │ ├── bps-ltn-trainstops.dat │ ├── bps-ltn-trainstops.export │ ├── bps-miniloader-book-rmmod.dat │ ├── bps-miniloader-book-rmmod.export │ ├── bps-miniloader-book.dat │ ├── bps-miniloader-book.export │ ├── bps-miniloader.dat │ ├── bps-miniloader.export │ ├── bps-mining.dat │ ├── bps-mining.export │ ├── bps-misc.dat │ ├── bps-misc.export │ ├── bps-most-buildings.dat │ ├── bps-most-buildings.export │ ├── bps-one-empty-blueprint.dat │ ├── bps-pipes-1.export │ ├── bps-pipes-2.export │ ├── bps-pipes.dat │ ├── bps-planner-1.export │ ├── bps-planner-2.export │ ├── bps-planner-3.export │ ├── bps-planner-4.export │ ├── bps-planner-7.export │ ├── bps-planner-ids-1.export │ ├── bps-planner-ids-2.export │ ├── bps-planner-ids-3.export │ ├── bps-planner-ids-4.export │ ├── bps-planner-ids-5.export │ ├── bps-planner-ids-6.export │ ├── bps-planner-ids-7.export │ ├── bps-planner-ids.dat │ ├── bps-planner.dat │ ├── bps-poles-max.dat │ ├── bps-poles-max.export │ ├── bps-power-entities.dat │ ├── bps-power-entities.export │ ├── bps-power-switch.dat │ ├── bps-power-switch.export │ ├── bps-rail-signals.dat │ ├── bps-rail-signals.export │ ├── bps-rails.dat │ ├── bps-rails.export │ ├── bps-signal-names.dat │ ├── bps-signal-names.export │ ├── bps-speakers.dat │ ├── bps-speakers.export │ ├── bps-switch+combinator.dat │ ├── bps-switch+combinator.export │ ├── bps-tanks-pumps.dat │ ├── bps-tanks-pumps.export │ ├── bps-three-blueprints-1.export │ ├── bps-three-blueprints-13.export │ ├── bps-three-blueprints-7.export │ ├── bps-three-blueprints.dat │ ├── bps-tiles.dat │ ├── bps-tiles.export │ ├── bps-train-colors.dat │ ├── bps-train-colors.export │ ├── bps-train-schedules.dat │ ├── bps-train-schedules.export │ ├── bps-train-stops.dat │ ├── bps-train-stops.export │ ├── bps-trains-1.export │ ├── bps-trains-2.export │ ├── bps-trains.dat │ ├── bps-turrets.dat │ └── bps-turrets.export ├── v1.1.19 │ ├── Makefile │ ├── bps-1.0.0-tests.dat │ ├── bps-1.0.0-tests.export │ ├── bps-1.1.19-tests.dat │ ├── bps-1.1.19-tests.export │ ├── bps-infinity-entities.dat │ ├── bps-infinity-entities.export │ ├── bps-miniloader-book-rmmod.dat │ ├── bps-miniloader-book-rmmod.export │ ├── train-schedules-v1.1.46.dat │ └── train-schedules-v1.1.46.export ├── v1.1.51 │ ├── Makefile │ ├── bps-1.0.0-tests.dat │ ├── bps-1.0.0-tests.export │ ├── bps-1.1.19-tests.dat │ ├── bps-1.1.19-tests.export │ ├── bps-infinity-entities.dat │ ├── bps-infinity-entities.export │ ├── bps-miniloader-book-rmmod.dat │ ├── bps-miniloader-book-rmmod.export │ ├── train-schedules-v1.1.46.dat │ ├── train-schedules-v1.1.46.export │ ├── zero-train-id.dat │ └── zero-train-id.export └── v1.1.62 │ ├── Makefile │ ├── bps-1.0.0-tests.dat │ ├── bps-1.0.0-tests.export │ ├── bps-1.1.19-tests.dat │ ├── bps-1.1.19-tests.export │ ├── bps-infinity-entities.dat │ ├── bps-infinity-entities.export │ ├── bps-miniloader-book-rmmod.dat │ ├── bps-miniloader-book-rmmod.export │ ├── krastorio-trains-bug.README │ ├── krastorio-trains-bug.dat │ ├── krastorio-trains-bug.export │ ├── train-schedules-v1.1.46.dat │ ├── train-schedules-v1.1.46.export │ ├── zero-train-id.dat │ └── zero-train-id.export └── tools ├── apply-tags-to-blueprint.lua ├── decode-mod-settings ├── float-to-hex └── rotate-turrets.lua /README.md: -------------------------------------------------------------------------------- 1 | Factorio Blueprint Decoder 2 | ========================== 3 | 4 | ## About 5 | 6 | TL;DR: Decode [Factorio]'s binary `blueprint-storage.dat` into a blueprint-book 7 | (in JSON format) for improved version control and other processing. 8 | 9 | Players of [Factorio] can create "blueprints" which make it easier to store 10 | plans of sections of their factory for later reuse. These blueprints are 11 | stored either in the game's save file or in a separate file 12 | `blueprint-storage.dat`. The latter contains the player's "personal" blueprints 13 | which are available in every game. 14 | 15 | This project decodes `blueprint-storage.dat` and creates a JSON file which 16 | -- after some packing -- can be read back into Factorio via "Import String". 17 | 18 | The JSON file can be stored in version-control providing some insight 19 | what was changed. The binary format can be stored but provides no insight. 20 | 21 | The JSON format is also open for more manipulation like merging two files or giving 22 | another player a set of blueprints. 23 | 24 | **Further** This project can also be a helpful base for decoding the `level.dat` 25 | parts of a save file. 26 | 27 | [Factorio]: https://factorio.com/ 28 | 29 | ## Supported versions & mods 30 | 31 | Usually only stable versions of the game are supported. Currently these are: 32 | 33 | - **1.0.0**: All vanilla stuff should work. 34 | 35 | - **1.1.19**: This is the first stable version in 1.1. All vanilla stuff should work. 36 | 37 | - **1.1.51**: The file format did not change *much* up to this version. 1.1.51 added one 38 | byte to all entities but this has been fixed now. 39 | 40 | - **1.1.62**: The file format changed by adding a flag to containers. 41 | 42 | So all vanilla stuff should work but mods can turn up yet unknown fields. Please file issues for that. 43 | 44 | ## Usage 45 | 46 | Basic Unix/Linux commandline knowledge is assumed :-) 47 | 48 | The script requires [Python] 3.6 (or higher) installed. 49 | 50 | A short tour through the workflow: 51 | 52 | - `decode` converts a `*.dat` file into plain JSON: 53 | 54 | ./decode tests/v1.0.0/bps-pipes.dat > /tmp/bps-pipes.json 55 | 56 | - `encode-export-string` converts JSON into a packed import/export string: 57 | 58 | ./encode-export-string < /tmp/bps-pipes.json > /tmp/bps-pipes.export 59 | 60 | - That import/export string can be read back into Factorio using the command 61 | "import string". The easiest way is to write the string into the clipboard 62 | and paste it into the dialog: 63 | 64 | xclip -i -selection clipboard < /tmp/bps-pipes.export 65 | 66 | `decode` can skip unparsable blueprints with the `-s` (or `--skip-bad`) option. Together with 67 | the additional output of the `-v` (or `--verbose`) or `-d` (`--debug`) options this help to 68 | weed out bad blueprints. 69 | 70 | 71 | [Python]: https://www.python.org/ 72 | -------------------------------------------------------------------------------- /decode-export-string: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # usage: decode-export-string < foo.export > foo.json 4 | 5 | read -N 1 version 6 | [ "$version" = "0" ] || { 7 | echo 1>&2 "Unsupported version $version" 8 | exit 1; 9 | } 10 | base64 -d| zlib-flate -uncompress -------------------------------------------------------------------------------- /encode-export-string: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # compact json 4 | jq -c . | 5 | ( 6 | # version 7 | echo "0" 8 | # data 9 | zlib-flate -compress | base64 10 | ) 11 | -------------------------------------------------------------------------------- /saves/v1.0.0/Makefile: -------------------------------------------------------------------------------- 1 | 2 | save: 3 | cp factorio/saves/bp-decoder-1.0.0.zip . 4 | cp factorio/blueprint-storage.dat . 5 | 6 | restore: 7 | cp blueprint-storage.dat factorio/blueprint-storage.dat 8 | cp factorio/saves/bp-decoder-1.0.0.zip bp-decoder-1.0.0.zip 9 | 10 | 11 | -------------------------------------------------------------------------------- /saves/v1.0.0/blueprint-storage.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/saves/v1.0.0/blueprint-storage.dat -------------------------------------------------------------------------------- /saves/v1.0.0/bp-decoder-1.0.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/saves/v1.0.0/bp-decoder-1.0.0.zip -------------------------------------------------------------------------------- /saves/v1.1.19/Makefile: -------------------------------------------------------------------------------- 1 | 2 | save: 3 | cp factorio/saves/bp-decoder-1.1.19.zip . 4 | cp factorio/blueprint-storage.dat . 5 | 6 | restore: 7 | cp blueprint-storage.dat factorio/blueprint-storage.dat 8 | cp factorio/saves/bp-decoder-1.1.19.zip bp-decoder-1.1.19.zip 9 | 10 | 11 | -------------------------------------------------------------------------------- /saves/v1.1.19/blueprint-storage.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/saves/v1.1.19/blueprint-storage.dat -------------------------------------------------------------------------------- /saves/v1.1.19/bp-decoder-1.1.19.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/saves/v1.1.19/bp-decoder-1.1.19.zip -------------------------------------------------------------------------------- /tests/.gitignore: -------------------------------------------------------------------------------- 1 | *.out 2 | *.err 3 | *.json 4 | *.diff 5 | *.extr 6 | diff-report.txt -------------------------------------------------------------------------------- /tests/tools/split-lib: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | input="$1" 4 | base=${input%.*} 5 | 6 | echo "# splitting file $input" 7 | 8 | # by "index" attribute 9 | indices=$(jq '.blueprint_book.blueprints[].index' "$input" | xargs) 10 | echo "# found indices: $indices" 11 | 12 | for i in $indices 13 | do 14 | output="$base-$((i+1)).extr" 15 | echo "# extract index $i from $input to $output" 16 | 17 | # by "index" attribute: 18 | jq --argjson index "$i" '.blueprint_book.blueprints[] | select(.index == $index) | del(.index)' "$input" > "$output" 19 | done 20 | -------------------------------------------------------------------------------- /tests/tools/update-tests: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # usage: update-tests *.dat 4 | 5 | # TODO: special handling of 6 | # - rotated laser/gun turrets in bps-1.1.19-tests 7 | # - removed mods in bps-miniloader-book-rmmod 8 | 9 | 10 | dowork()( 11 | set -x 12 | "$@" 13 | ) 14 | 15 | for dat in "$@" 16 | do 17 | export="${dat%.dat}.export" 18 | 19 | echo 20 | echo "#" 21 | echo "# updating $dat and $export" 22 | echo "#" 23 | echo 24 | 25 | dowork cp "$dat" factorio/blueprint-storage.dat 26 | 27 | echo "TODO: load game, wiggle blueprints, export book to string, quit game, press enter" 28 | read dummy 29 | 30 | dowork cp factorio/blueprint-storage.dat "$dat" 31 | dowork xclip -o -sel clip > "$export" 32 | 33 | done 34 | -------------------------------------------------------------------------------- /tests/v1.0.0/Makefile: -------------------------------------------------------------------------------- 1 | .DELETE_ON_ERROR: 2 | 3 | # basics 4 | dats = $(wildcard *.dat) 5 | exports = $(wildcard *.export) 6 | 7 | # derived from basic 8 | diffs = $(exports:.export=.diff) 9 | extrs = $(exports:.export=.extr) 10 | 11 | .PHONY: all json out extr diff clean 12 | 13 | all: json out diff diff-report.txt 14 | 15 | json: $(exports:.export=.json) 16 | 17 | out: $(dats:.dat=.out) 18 | 19 | clean: 20 | -rm -f *.out *.err 21 | -rm -f *.json 22 | -rm -f *.diff *.extr 23 | -rm -f diff-report.txt 24 | 25 | # decode *.export to json 26 | 27 | %.json: %.export 28 | ../../decode-export-string < $< | jq -S . > $@ 29 | 30 | # decode *.dat to *.out / *.err 31 | 32 | %.out %.err: %.dat 33 | ../../decode -d $< > $*.out 2> $*.err 34 | 35 | # extract each top-level object from *.out into *-$N.extr with $N = (index_number+1) 36 | 37 | extr: $(extrs) 38 | 39 | # libraries with only one object 40 | %.extr: %.out 41 | jq '.blueprint_book.blueprints[0] | del(.index)' < $*.out > $*.extr 42 | 43 | # libraries with multiple objects 44 | %.extr: 45 | ../tools/split-lib $< 46 | 47 | # compare each *.json to *.extr 48 | 49 | diff: $(diffs) 50 | 51 | 52 | %.diff: %.json %.extr 53 | diff $*.json $*.extr > $@ 2>&1 54 | 55 | # merge all *.diff into one report 56 | diff-report.txt: $(diffs) 57 | for d in $(sort $(diffs)); do echo "#### $$d"; cat $$d; done > $@ 2>&1 58 | 59 | # --------------------- 60 | # dependencies between libraries with multiple objects to their extracted objects 61 | # --------------------- 62 | 63 | bps-planner-ids-1.extr bps-planner-ids-2.extr bps-planner-ids-3.extr bps-planner-ids-4.extr \ 64 | bps-planner-ids-5.extr bps-planner-ids-6.extr bps-planner-ids-7.extr : bps-planner-ids.out 65 | 66 | bps-pipes-1.extr bps-pipes-2.extr: bps-pipes.out 67 | 68 | bps-far-away-1.extr bps-far-away-2.extr: bps-far-away.out 69 | 70 | bps-planner-1.extr bps-planner-2.extr \ 71 | bps-planner-3.extr bps-planner-4.extr \ 72 | bps-planner-8.extr: bps-planner.out 73 | 74 | bps-three-blueprints-1.extr bps-three-blueprints-7.extr bps-three-blueprints-13.extr: bps-three-blueprints.out 75 | 76 | bps-trains-1.extr bps-trains-2.extr: bps-trains.out 77 | -------------------------------------------------------------------------------- /tests/v1.0.0/README.md: -------------------------------------------------------------------------------- 1 | Notes about some special tests 2 | ============================== 3 | 4 | # `bps-miniloader-book-rmmod.*` 5 | 6 | `bps-miniloader-book.dat` contains examples for things added by the mod 7 | "Miniloader". `bps-miniloader-book-rmmod.dat` is the same *after* this mod 8 | has been removed. The binary format remembers some minimal information about 9 | the uninstalled things. After reinstalling the mod the library objects are 10 | converted back and can be used again without any issue. But the game's 11 | export-format does not use this information and inserts placeholder things 12 | like `entity-unknown`, `item-unknown` and similar and basically produces a 13 | corrupt export. (Tested: Factorio 1.0.0) 14 | 15 | `decode` *does* use the additional information and creates the same export 16 | even with removed mods. Therefore the expected test result for 17 | `bps-miniloader-book-rmmod.dat` is the same as `bps-miniloader-book.dat`. 18 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-assembler.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-assembler.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-assembler.export: -------------------------------------------------------------------------------- 1 | 0eNq1lNtuwjAMht8l1wmiB5rCq0xoSosL1tKkSw8Dob77XCoBg6wMpF1FOfj/v9iJjyzTLVQOTcNWR4a5NTVbvR1ZjVuj9LDWHCpgK4YNlIwzo8phpuoaykyj2YpS5Ts0ICLWc4ZmA3u2Cnr+UMKiFg4KCnWHq9DwD6E5mMZh0W7hKjDq15zRBjYI4x1Ok8O7acsMHEFN0QekXtmagq0ZfElQpOlswdmBIpNktugHsBvJcEoy9ElGjySj6RzfS8qHlPGzkpeLy5AkOXOQ46kO1TB4LBZPW0Q3Fhskk/FEeGVYoNbiSzXgRKacA+1zT17P2b17POnOT0+xHoTqCmAjSrtpNZygoSgGkY7QLsu+gsineSeylfw/b+r/tJ6qyjNnOpXX3CotNH62UKhx+4rThxX5sJaXhrCDEnPSrLSiTuYBC85g8ueLhn2l6XBHPeMVhmDu60qeCia/AXzYTjnYCzAO811JIqJyNof6IRDVaj0eIZlLH+dMq4xKf35d4Aapjobxe6VBLOOlTGQwTxZJ338D4qT9SA== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-belts.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-belts.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-belts.export: -------------------------------------------------------------------------------- 1 | 0eNrVWO2SmyAUfRd+uzuC377KTsYhkSRMDTiA22YyPkDfos/WJylomxojDSTd7vZPMgicc8+5F716AuumI62gTIHyBOiGMwnKlxOQdMdwY66pY0tACagiBxAAhg9mpARmsuVCPa1Jo0AfAMpq8gWUsA9ubpZtQ5UiYrIN9asAEKaoomQMYBgcK9Yd1nplCW3UAWi51Ns4M3wa6il5TgJw1Fuek95EM0NC7kjxBCkANRVkM06jBdzIHxfNceMF3Nhf+RVuuoCbXOfDjpjd1p+64CELnimEtlOVrkQuNKpGacjWFNYVT+bAE1ppeKcceXIHnsjKs6WN2VGCluoT4MNbOPCmvvo8/IWhQwDZ43mE0IEn9xAq6G7vpxR5KC1unwAYeaSueKA0YexhXeFs3RJT4iEJwgfK0R5C6pGlhRA8mDIPW53EWkvSHsPv206nH41iJ7j+v/moi4c7/s+n7RjHInpxF3oyRR+0LIGj0Ac8ugz90smbVNCHCjlQ2T1DyIcrtHLFDrKiu6gSO9UfZMUeXNCqKnWhSjyokAOV3cD0jmYpHIh056sEb6o12eNXfU7Nsg0Vm46qijC8bkhVU2n+QbnFjSTBeVoQXFd7zOrKgOiQ5NWSXxPj2gOvNUo4srJRnzSE0PwIUk87YKpHKOtX/WIzm7kLRvcLVqL7t3qnDetwIbcZkDsbELrr13P1eeuWCqmqG+80Q5s3okqFzdtUjMzo0GKBlUEH379+G1Z8FI+zuceFzePC2ePoTQ/VpUWP6s9n+qPQoj8KnfWn76wfeugv5vqhTb/7y3fxv5+xv2qxrqiZxchmsftXCYg+hscN31Gp6OZtEzkaXSlenfkYUZ+5+DTP1Xvnejw9q2DUWk4+rGmvsM6luaYzKvX4lQg5NqA5jLO4yNIMhmmS9v0Ppi2yoA== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-books.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-books.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-books.export: -------------------------------------------------------------------------------- 1 | 0eNrtUttugzAM/ZXIz6Eq9ELHl0zapoqLN1kLSURCB6r49yXQFVDRVm2ve4kU+xz72D5nyESNuiJpj5lS75Ccx4iB5Gny9bkCTV6RtqQkJGA/FNOk0QAHypUcCIbeZCo82rYaHYwslg4h09L/PAE6R5AFNpCE3QsHlJYs4cDvP+1R1mWGlQPMmRy0MjQIOIMrEGwOqx2HFpIoXu26jt9UiH6s8DCr4AT1kpPJ7BxEmqG41PADn7AyfY3oEG7j7UO8j8P1frcfR1t7Lf/r++36wtn6lu250CvogWNDicZiwa55dsnPb+GDjAzDUtvWZdPc0gmPX5e8R2/U3aGmaZpgngz8cgMXv9G0gJ0APOVZ9r5Jehtx9xqrBGeizirKU8vZYKbg8U8O43dQfGOY7mKJ9CpqKkbWRaazx0jcLBJPVNnaRa7U61wjc+vXPz9b+M3Zuk+mI6Vd 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-chests.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-chests.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-chests.export: -------------------------------------------------------------------------------- 1 | 0eNrtWF1vmzAU/SuVn6HCmI8kr/sZa4UIOKklYjNj0kYR/30GGkrhmgKRtmnbI+bc43Ouje/FV7TPSppLxhXaXVFKi0SyXDHB0Q5J8Vrsnrj9UKiYp7FMH5IXWqiiHsrEkRWKJb0hxg+MM3XpDb0ySd+jnvgTRxZiieAF2n2/ooIdeZzVs6pLTvV0TNGTRvD4VD+9CpFSbjexqNKBPKVvaIcr68vQm5BRsFs9W4hyxRSjrYjm4RLx8rSnUrPD01soFwVrs3JFmsj2/EffQhdN+ehXtaQBkTubyOsRWWgf62AfICSzCcmYEEOM3ke+pJjgw9NO/Zk0zkxZwTw+sh3zEQzwhR1foSjNzIThtM/NXJ5gLMyFjG7nEvpjQi8ECLHTMd6+zpbUjhPFztTOpTizVEMn9rMHu8fYxJ3HRfEVufcFuWsiL5SQ8ZFObXMTJ1nB6fY4LSTpj1IHRAeWKSrb8+J2CnXkOctrqkSU9QnqVM+QFs+kZV8eDnDK8Bf2/OWUzr3usOPUUm6HqfMJZithH6UGph8BviEfgUn8uyhQf/fFm1ISrmLd/DFZ2azSH8L6pThF7VbQJpQsKTTjdtWMwW/J2EJvPdZBOzBxPgWNoxs+KqhSjB+LGifpSZxpVPLWJ02juud4n99Cffdwne6sWOikX2hArOyMxs3LfnMDVT8w+CT6sW4v9nNBGQfTN10RsstHMNE7EkoiXpBE/44kHuKs+Huz6M6s9F0Kt00KdafMaVIDmuThNoNpv29l+skl9cdxlJRy6FUFSiJzJXmrJLm9OZsBz6wRwsKivTv6G3dlagfa/Klcj7GwD/8OH3iVD2+oLTD7gLCwj+CentBZZcQfigvNRiAsbCS8w0jXliwzEgzFbcxGICxsZLO86e0aoGX6w6GmrVk/hIX1b1foD1fp3ww0EcesH8KC+omzuCvvuqll8rdDSdgsH8LC8vFy+aOSpaTIoj19ic9MyBqWMJmUTEV11YzEIRI5lXHLgec7Js7QhWt0DGJhx+6qDnhVUfx0O9EMmAs3iIUdkFUOyK9atmF1J+ZOAMTCpr35fSlZVTHJsJoTc+UHsdX/H4n+gvkLFmxVZzC1r7x/ezl0Xpr78V3vrt9CWbynmR771lzW64Gz9tksg7vBXuhtwyDETuAHVfUTG+kMJg== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-combat-simple.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-combat-simple.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-combat-simple.export: -------------------------------------------------------------------------------- 1 | 0eNrNll1unDAQx6+y8jMgzIeBPUEP0LcqQl6YTayCobbZNlpxgN6iZ+tJOkCyIStvgCiR+oJke+bnmT/2eM7kUHXQKiEN2Z9JCbpQojWikWRPvnZKgdE7rmD3oxMGdqU4HkFJs+Oy3D2ALGDX1MIYKD3iEFE0UpP9tzPR4l7yaiCaxxYQhc41WkheDyNtGgnuT15VpEc3WcIvsqe9s+ioeMnVzCfs7xwC0ggjYNp5HDzmsqsPoBB6ca0wZLcWEpDWNlpMOZ4JUtwo81iQZj4LYoc8olecerEfjhP9ENYVNVhFjX0vpvGcGTE/CxMrMlwXaOJlQcbSZMakyThhg0broKmXPEV2oT7LYaPGF+o9N1Yg855JmWdFMNtReBOU2kHJYizRK4RDSqGgmCwCCzBdGVm8FFm2EhQsgai/mKO/LUdKV8ZGr7h4v41qqvwAD/wkGjUYFkIVWBvypgWZjwHujerAuSwo4GWuQerB/sgrPVtDYHnZ8iiUNvlCBWgFTk6haMOHqhUFw6huueJm2IL8/f2H9JOJnGTQA44OHwXlvEwIHFEsIr1V+GBJ+DDdKHy4Tvgw+xzhN4hCZ+GPE/EtlaJFldhGleKVKiXvU+nqDL6SaVBw09G5Uim5pRJbVGljoaLJSpXiz1HJIU1n2s5yYU9CmY5Xs+d+tHC/bLqV8bW06S1pV5bsMPzwS/VuHf6zCnjz1GZXnZe1dXpSlYX29yt4eb9UU3wH42pRNW8+N4yNPwjPv2hnfpigGdpMlGPMB7AZxexOuJtbN2VXgRuOLV+rcPR65da8G9xcGVjWhOjKhMKVCfHONHnFO1k8PFWguylLtHxpzx1s4g6A5wK79OPYeh86UZVC3mtcO4HSU61IaZREWcIS6rOY9f0/XnTtgg== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-combinators.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-combinators.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-combinators.export: -------------------------------------------------------------------------------- 1 | 0eNrdmFGOmzAQhu8yjxWpYgIYUF96gkp9qlRVEQEnaykYZEzUKOIAvUXP1pPUJtVmk5hlHG2yqC+RGOyZ+T9j/JMDrLYtqyUXCtID8LwSDaTfD9Dwjci2Jqb2NYMUuGIleCCy0lxlkqunkimez/KqXHGRqUpC5wEXBfsJKem80RwFy3nBpD2B3/3wgAnFFWfHjvqL/VK05YpJXWGkFw/qqtGzK2Ea0Blncfwx9GCvpxJfF9JSlay2yxV7ynZcz9DDTqmW+nbRT2/MjTWXjTKxRmUG1dyDhpkh57GqZjI71oQP0HWGwkXfvnvf9KzvgkuWH+8HN6m4WpYdl6rVkefOjiNmn816jMn89uWrXejCXWjwtkJPPQf+s5CRh7LmOthdS9SRVtWtwsyfqWq2kVUrCkPGgiZwRxPe+RmwU7hafAPyrmhCdzTk4du6ryKOK9DnIeZHsuLli4oXvZqcy7zlqr/sX2obyZgYH6iL+LisBJtVD7Qyj5yZ03i6zCmWDsXRoe50kunSibB0Ihyd2J1O9P50hnZWgt2v1wOtdBJ3OuF06cRYOjGODpm/5gVfNXDhAJt/eS7AnMnXJepM9iVS+AQmUO/1hFao5VpW5ZILfZhBqmTL7G0Tx7bpWdvjZ7ddxC3mbVj4n1+/b5HuO0oP7ind7lnOzYpF9G1uZRDWOts2A7QWjrTC/5/W8KMVOMJaPB4W/hPiksX7YQ0dsZLHv2PR5oWg/TRxMtQE7agJ0lKTyA07jaeMHW2pCdJTE+qIJ5kyHrSnJkhTTWJHPNEE8AxuLrSpJkhXTRJHPOGU8aBdNbHaaj26PzPSF//kerDNVkwfK3Di0ujojsmm5+LHJKBBQiNK5lEYdd1fSuCgNQ== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-connected-inserters.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-connected-inserters.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-connected-inserters.export: -------------------------------------------------------------------------------- 1 | 0eNrFmD1v2zAQhv+KwM2AEogfIimtnbokS7cmKPxBpARs2pCUpoah/15K6qAoOpRnWs1igyfy7iGP91LihWz2r+ZUWdeQ8kJ2pt5W9tTYoyMloavk4Zhsj86ZbWd6cmyVPDrzzsRXybe3ca/6yQlv+1kZ895KUmK9oSbl9wup7Ytb77uYzflkfDDbmIPv4daHvuVqUzWmIq0f5HbmNylpm/5zWGV2d2+2MqNhrH1OiXGNbawZQveN8w/3etj4ACX9GDQlp2Nth1W4EO/krmD3eUrOpMzFfe6d73yQ7dBBdFwTnyzEpxYonzzEp8pRPgVu7vqDz5SMUtwNoN2PT8N4pa1v5e1z284Q5EEE2Q0IBEAgcbmKIFDdVnzxdeFmnsyyqSC2W+RHgmwSYNO4/RjKNstQAAxFEAO/CYMGGGiGKiLJrk8SpaP4vYFBUBRVV1FQGcQQpoJ6UQaOqu4oBjFNTg7W1Gzf+QkIlARETYDDvBzCC9JvnX0WnkSJVDDePIWaJhWUDIXSrUgsSMBpmILThSkKnHzK63cQyyYJYlM9ZZCesgynpxGUFDrsGMXp6SIMYZouF2VAanrMjpnqNMunBvjFKWzw/BSRqh8zRVhWGSSrDKn6/xsvTPX1Z+Ep3KEkY3SX6emeKyYGDr07MY07peI4oU8gVuBOqWUoeJD+y2JhCopSX5Vdv7E5dBJy3N1GFAMFi4tDxcU5SjmD8eYphkXykP01VDm6TEvJfr0xe2/7Mngzu+TrX6DaP/3l//p4TFOhRKGkopnMZdv+AV8ScSU= -------------------------------------------------------------------------------- /tests/v1.0.0/bps-constant-combinator.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-constant-combinator.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-constant-combinator.export: -------------------------------------------------------------------------------- 1 | 0eNqdVNtOwzAM/ZXITyC1aO162fIwie0PeAU0tasLkdqkSrONaeq/46QgBnSw9SWSFfuc4xPHR8irLTZaSAP8CAW2Gy0aI5QEDg9qzwLOCiyzbWVusG7MwWNK3tJRlk/S3oecteJFZlXLlkpUqG+i8Jb5bInZRkkb9HlTzu79xYtGlGwvNPqLpb/QWLhg1edExEXRxtF7IAigBf54hJ7BCjSHBkmZMFhThsxqG9k8k0njb1SdC5kZpaGjelngG/Cge/YApRFGYA/ngsNabuscNSX8CeRBo1rRO3IEwvNn4V3swYEKw+AuJiIqM1pV6xxfs52gGkosRWVQXyQ/d76BA9rad4jCE/He//XO6jP1s+65sxg/eg7H9zyhngcQp9ciBt8Qh10U7dpWlDReOEQajW9j+kkq+4FrbU5gDzekp4MiCuCJ9XFAQXytgskFCuhfXMqfjLf9Kv7Y/qJBZ6IzytLxbxMPj9hsvNex6/Vru5Dq3/jz8V7+wg8H8IPJlQTp/DxBYh/ELQJ+ssM9qLIcaVfA6oOBrU4ZdrSTen2zIEqjeZqkwSSJk657BzFCACg= -------------------------------------------------------------------------------- /tests/v1.0.0/bps-electric-poles.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-electric-poles.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-electric-poles.export: -------------------------------------------------------------------------------- 1 | 0eNqdlOuKgzAQhV9lmd9pMdZ4e5VSFi9DGYhRNC5bJO++0XZ3S2vTpn8kY5jvnBHnTFDKEbuelIZ8AqpaNUC+n2Cgoyrk/E6fOoQcSGMDDFTRzNUwloMuNLUKDANSNX5Dzg172ljScYMSK91TtelaiVf9oTkwQKVJE55dLMXpU41Nib0V+NdvCilvQAy6dqDFk1W3vCTYCgYnyMVWmNnbDS70xIVu3M4TF7lx0R+uwZrG5ikvcfOELy9z82JPXsrdvMTxj9zDLqg1UOoFSh+DMh9Qxh+DeLC2OPcIx1Ccv4ZwjMPDlxA8cE2ye3MFuT3YTbf5omwDLTEzAZ8fPdbXy0624pE5mFX96M0l89TfzVF07BHV3ZV4ZE14WkufW1t3cP441uASrflVhDOQRYk2feFX/OMi/oX9sGiHKY+SKEvihAexiI35AdM8/QE= -------------------------------------------------------------------------------- /tests/v1.0.0/bps-empty.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-empty.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-far-away-1.export: -------------------------------------------------------------------------------- 1 | 0eNqV0dFqwyAUBuBXCefalJk0ZvFVyjY0Pe3OiCdBTbsQfPfZ9GZQGOudR34/Dr8r2GHGyRNH0CscMfSepkgjg4avOcTC4mn0WFTvsgEB1I8cQB9WCHRmM9wexWXCnKaILifYuNtkQkBnB+Jz6Uz/SYxlDSkDfMRv0DK9CUCOFAnv3jYsHzw7iz4H/pYETGOg+54rZLCUctcIWPKprlTX7ZqUxINaPauqf6D106s+oLmMrT796zsEDMZibhhOxhfmapZC5ssL+rBZ1avct/uuVa18UY1K6QdPI5QM 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-far-away-2.export: -------------------------------------------------------------------------------- 1 | 0eNqVkdFqwzAMRX+l6NkudVInq3+ljOKkWieIlWC760Lwv09NXwaFsb5J4nC4XC3QDVecInEGt8AZUx9pyjQyONDGKF3b5mBBAfUjJ3DHBRJd2A93PM8TCkcZgxDsw33zKWHoBuKLDr7/JEZdQxEBn/EbnCnvCpAzZcKHb13mE19Dh1GAv00KpjHRI+ECItRmt7UKZpnWrFtbinqyVq9a7T+k9avS56RSxlqf+/UIBYPvUBqGDx83/ubnTSXHL4xpdVVvZt/uD23Tml1jm1J+AD7VkIw= 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-far-away.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-far-away.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-furnaces.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-furnaces.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-furnaces.export: -------------------------------------------------------------------------------- 1 | 0eNp9kNtqwzAMht9F105Z0hz9KqWMJFWGwJGD7ZSF4Hef3JZ1sK2XOvzfJ7TDYFZcHHEAvQONlj3o0w6ePrg3qRe2BUEDBZxBAfdzqtDgGByN2bQ67keEqID4gp+g83hWgBwoEN5Zt2J753Ue0MnC/xQFi/UStJzMAsua7lAp2CRVtYcqWeQOn6Y4TZKmq6Cz2V5Wg9kRdBGj+mUsvo0+WMYXurZ9yLq/OMcfHETzilM+Oef70ZJ6/lqB6QeU/8KD4aV1RedvjKLNy6bsmrrJ3+qqjvEL+biLWA== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-infinity.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-infinity.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-infinity.export: -------------------------------------------------------------------------------- 1 | 0eNrFlttuozAQhl9l5WtTAeEUXmVVIQeG1BIYZExbNuLddwxJRLNOY6ja5c4ePN8/47E9J3KoemglF4qkJ8LzRnQk/X0iHT8KVuk5NbRAUsIV1IQSwWo9ggpyJXnugAB5HBxcD7JkOZCREi4KeCepN9KHfl6AKeNif3ymBITiisOsaBoMmejrA0j0fvXBRckFmpz8BTqFvtumw2WN0FR05YRPISUDLgmTp3BCzAuyDpTi4tjpHyXUzStkPdoqlANFppWiqWRVB6OO5UaBb6/A/boCSubpORlncMsxp5TkTa/3z3NdSuqm0BZMa91MWq678WwKYmcfhPc/gqiAWUQRWEfx8zsB7yxX1fAwhtA6Bv9LMSjZG8s5sjjchrM1K4l2qOPQlyXIrON/YErB5TPA4k0wbwFrmzdktbIp+nz+Z0F0L/a+Y0e4Nd3TaRKabBEabUvKfgsrWbAKLuGcDH8V2XO3oPUqEztYx/Y2sX0zO1rHNtzh55N89xGJIjx0Jl87a1/eB193DvDZ1xvDHGgfIHMkzuVMCZ5lnGGql3oc/ntlGiUGthLdb1U4vUxGgaGtQP/7BF4ubKPAyFZguEJgLvsCnIZXNyKnXfgo0/Q6GoXG93qsz0p7P0l9XFsGXmLP8z7jhcYIDcC9NdBdwZtL09DsudY43xZ3LTRsdae2OF1045RU7ADVotB+XdthSl6x/Zjv+cQL4mAfR7HnRmE0jn8Bxy7pjw== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-inserters-circuit.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-inserters-circuit.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-inserters-circuit.export: -------------------------------------------------------------------------------- 1 | 0eNrdWM1S2zAQfhWjE8wYiPwTJ56EA4UOvXQ6cGwZjxIrRVNH9kgyLWT8ALwFh/bFeJJKMgnBqYjFgZAe8rPSarXf92nlTWZglJW4YIQKEM9AivmYkUKQnIIYnOc/HRh/o/vOCZ6gMhOxc3p44ux+JtnA6eypCWnvHuckw2wQeI2Ro5WR4TFG45zKURXa06E/5xTPvagM3NlznQssnAuBxj+cC3KLHxfvNb3OMUqdM0TT3S9lxvEL82d5ljZS2ZnnYtptab3zFED5fiSZwIw3zBZx5mEUeD92UJY5pxSNMnx4Qrj6VCEX3D0Zg2VjuGwcPbMGz6wdbQEXEAmTg/jrDHDynaJMCS1uCiwVJgJPpQdFU21RjpnEAiq5iKb4F4hhdekCTAURBNcxtHGT0HI6kp4xXF3tgiLnpD5DMyCD+NFB6IIb+cU7CGVsmQ/FY+XAlQdUbwyny+GJtLzqsqoqd2VLr82W/ZUtBcuzZISv0DXJmXIbEzYuiUjkXLpYOyGMi2QNUSNNMKjjcoFU8QSesqYFYkio+GAAqvZY4RJOZfsG7H4L7AHcOPYjG+xeA3tgwB60we6/DXaO1eq1/vqKqblaYmdow47pJIRWhReuZWOapzjJJ0leYJmnjuG3z7JryLJrVavrs+RYvtQdK6m/lWEFK7FUQ4/M1xFalK2lbA8xbBzTyAA5sirR9ZCZfHwkV/LxoQHKzXgN20ac55n3DJn3rArs9Zm7Cw89qd3U8dPXYFtQUQNU3wCq3wZU2B7Uxm6Nh7t7PfZ6ct33UEa9hm6wYxAOdha76MT2J7rR2n9Bxmj7ZPzHtQtflPBNROo3RYImkaC1SP3/TaRtrURz5XlWvUVvK7pMaGqkoG/Vo/S24/dEs6mGpq4aBlb9ysbgDy3FbsAPTfBDq6ZnY/Af7v5YERA0CTB16LBr1SBtkIDfVgQ023Vo6tdhq4Y9egcE3FsRUAt+6dZ7xUt/9LkgQyMs0wGfHgE7H+rc5dQ1Zlzn7vVgEAX9qBvBTjfsVtVfcf/o4g== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-inserters.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-inserters.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-inserters.export: -------------------------------------------------------------------------------- 1 | 0eNrtV81u00AQfpVlTy1ySuw4f5Z6KQIVCSEER6istT1JVnV2ze46pUR5gL4Fz8aTMGsnTtrYxUalJy6x1jvz7XzfTmbGaxqlOWSKC0ODNU1Ax4pnhktBA9oj/st3QoMyoDSZsZiLOQEWL0jCFcTW6qvoEbkCpXgCRBsWXxPNfwA5JwO7NeMp+hK+BSE3C24g5drAqyhFY4fojCkN+w3r9ZqrOOeGxFKI8piAfJACHPJGsCgFcnIheQrqxbnvnTrkE7CEXDKRnHzMUw333lzKNDm1mO/lHNF5fA+0Bs7aXuRKgHLIZ4MQTCUOeiPzBa4AF2+ZNvhbUCuMLI/iseVLHcrxGE2DL2uq+Vyw1IprbjNAVZHoEi0EWxarrTR0g06I/50G7ubKoSAMNxxKjGJxG4p8GaFl4B57OzSTmpf3tqYI4rtnQ4fe0mByNkTo6sJo4G2cI0SvC+L0IaJfgzhog9g/iLEGw++CcRTVqAZx2AXR9Y6IOnSX7GGR7KFNdiRbc9SoOqpMil6bE4c1J5buZSLsMqTCTrdp3YsXoE2PodsKepmSK4zRJlXl4zX5ZEzrJqdBk5M2UrE5HNr6TbZRPpvdhx02mSr4luPTWl/VaDruoOngv6bHmu6Yh0uZWNOiCNuyS2vUnnRQe/QMaj+pcHXpNe1UHSY1TLHqGyXTMIIFW3GprFNcdrNC8lDOQpmBYqUH1g2670faWrv2R0FyWPc5rtw+hlxXJN1+m6gHfxs17iUV0owrbcI/dLSoaKa0pIZV0k4WvmdXS+z1zFh8+uvuJ920Zz89IF6o4Tap0ao3jp7yDp1qV+HYEdopwapmMDLkZFQOnW75AVGviWirlj19XqJ7i2KzMCsrjdtBg8a77TRTeG5LyrsC8U9TvWIfGhlWJwowN1Jdb7OkjrLfZTDz/DaTmbvvFFEx6LaZTFpCHww9OCS3ac8tgccH9VzMe+Uo/hi+1w1/3+uKue4x5GE35GmHLup3gvb6D4Ju36brDsDhoMju4OCT0KEpiwD/ALT6DsR3OALr8lNi4vpjfzoejd3+aDjabH4DZILZpg== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-lamps.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-lamps.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-lamps.export: -------------------------------------------------------------------------------- 1 | 0eNrNVFtqwzAQvMt+y6HxM/FVSjCyvU0FsmQkOTQEHaC36Nl6kq5sKG6TUNGP0h/DSLOzOyPJF2jlhKMRykF9AdFpZaF+vIAVR8VlWHPnEaEG4XAABooPAdmBS5lIPozgGQjV4wvUW39ggMoJJ3BRmcG5UdPQoiHCrXoGo7ZUolXoRjLJbrcpGJyJ/1BuCu/ZlVAaKVR8EWJA9hR2gWIDZxs+Bvv1rIJQ5g/+Vtsssm163dYZLZsWn/lJaBOInTDdJFxDe/1n9ZMw1jU/ZD8KWlxUrePh4PI0oGHkhrugDu+vb+Dj/aYrrwHnd/zncf6r/Z/4txhqY9iJ08nR6En1S26/Tyr7llRxJ6kiMqnyX9wUBpNF0pfakHtnJoxPZLkr9PDn1vXqf8JA8hZpOgjuLeETGjvPn+62eZXvq7Ii40Xp/QdVl4hf -------------------------------------------------------------------------------- /tests/v1.0.0/bps-loader.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-loader.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-loader.export: -------------------------------------------------------------------------------- 1 | 0eNq1lN9ugyAUxt/lXGNT/F9eZWkWrbQhQTCAS43h3YfVua3WiRe7MnAOv+87fJEeSt7SRjFhgPTALlJoIG89aHYTBR/2TNdQIMAMrQGBKOphxWVRUQUWARMVvQPBFm0euhbaBIuToT0joMIww+io/Vh076KtS9dJ8LMqgkZq1y7FIOUQQXJIEHSOlTvupC1b07QGBl9PwPCloyU12kWNZiq9N4pqvQ7Gu8Dx5vx/GEVwZdxQNd7sV1gzsWGuedCcKvGvSmBkcFOyFRXY8wtnyaazbPJ1SJyziil6GYuhx9ypf+4R/h6ciRVetjN2L2i+P3Uv7sk79CXuXzPHR8/QI7we+jS2+/EfLwT58Qoh4EVJ+YzXbufDfUZCjuMsPmVpho9pklr7Cfudi6I= -------------------------------------------------------------------------------- /tests/v1.0.0/bps-ltn-trainstops.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-ltn-trainstops.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-ltn-trainstops.export: -------------------------------------------------------------------------------- 1 | 0eNrVlE1vnDAQhv8Kmmsh2i9g4dBD1VPV5LSXqq2QF2Y3o4CN7PGmdMV/rw1tkk3IJs2l6gXJeOZ5Zzyv5gjb2mKrSTLkR6jQlJpaJiUhh2hH2nCg1W0e8K0KWAuShlVrvskoMFgqWd3fft5cRfcREAK5ewP51yMY2ktRewHuWnRkYmxchBSNPw1ZkU+D3qXJCn9APu/DFxNrtSfDVEaThEX/PQSUTEw41jEcukLaZovaSUxVEEKrDI0vcASHWS1D6FxwnDm0YfH7cT7hz07eCPBlPuIuXsfNJrmXokT5wX+m0MtzvUfKcmt5QmpxEY9iSXIR9xPc1VkuyWns8gQbghs4a1UXW7wWB1Lax5WkS0tceLPcJQ/GKp5M90CarftzV8wYEQnZ8TXJPYwa7rG8XWf+0LRCC/ZS8N5fW4NOqlbaTZy1xalm47MGetYASfpMixpFVey0aooBMwqH4/ALz2yxen2zG+hPDPFRi72az2Y7W085InmbI9YvOSJ9kyOy/9MR6790RPZPHfFFyBvEYIOitG7huS03rMX8wS4PoRZbrP+soGElB+/8jg5OdvQBtRmgi/V8la6yNEnnsyRO+v4X37oYQQ== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-miniloader-book-rmmod.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-miniloader-book-rmmod.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-miniloader-book-rmmod.export: -------------------------------------------------------------------------------- 1 | bps-miniloader-book.export -------------------------------------------------------------------------------- /tests/v1.0.0/bps-miniloader-book.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-miniloader-book.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-miniloader-book.export: -------------------------------------------------------------------------------- 1 | 0eNrtWttuozAQ/ZWVn3GEzT2/sqoQCW5qFQzCpmq34t/XXEJIAk64KETdfSswM8dnfMbO2P0GuygnaUaZ8HdJ8g6236c3HGx/dx7Lb3SfsPo1pwcWROU78ZUSsAVUkBhogAVx+bR/ywWBMWU0SoKQZKDQAGUh+QRbVGg33clnmhHO+wPg4kUDhAkqKKkHUz18+SyPd9Jyi9o4Aeck3kWUHWAc7N8oI9CQKGnCpXPCSnwZ0DQ2lga+pKNjbiwJlJE9TQdoXKHhFk1kAeNpkgm4I5HowUEtjlPhhFQi1QZmT2Tj/sh4XGTzKtM3EYxxCNZ4BHMcgj0ewRqH4IxHsMchuIMFAynjJBPS6ArEupRR8kGyjIbE5yLYv/uc/iFVEYRZkvoXzvoGN84b5HkYuU4ZIaX79/zatjKE0kU3ELaKHgLewwnAhRkgfRIFRTngkYRQM7oqXslumE7LuLbt5YOeig+cTwhPIqSq9amKa6ndENyJVi8hY2VCS/MxJ/FxhvnY4/igcxWpJdcuBgrFWc9FaDYfewqfzq8Vd+1tBjkPZ7D4PjNpr+/8sFt/EryHM1h6ErCuaDFUJIznmQaMVuCw+ETgiSTMJ5oIYwUOi0/EdSv4SiM57ju5WBdcaue6LT82/C1CWnbV5SCaL9bZFygSeMiSnIWg7PDXnFnrJyRlcanY87Ji/0ipOD8hKYtLZe7BhjdjYTyN7FZX43j2QE+DvYcTWHT8xtxTDW/mKYA+sidzdd1xlV2MgZ6L0gKM5p5seEsdBOgjqv7Iq5eRsTIjuDyluacb3szDgIsGX32cVq8ICslZT8UGjqIjN7XqmmjbuZTSQBTsSCTfdW5pNCBHxOsad5HpmJ5jO0i3Lft0i6SX2QlJeaElsrwi46dRwFiZpm/AiRCUHXj5d5PD7tZ8Rw67OI250hB1DF8DLtRhccda3X00DkaZPkEjOUskqifPj5OQVMvgo+71Bu7zbjteJKTjbcy9TjSLl6IV1rkg4FEQfSr7dW57l+iqHOXpIZMBhtQWB2l6lNlrlsQdVrUQwR0lLCFFovAc8Olq9gb2FNRBWXdn4za0KowSX1UopyG41ULzvyLqimjUqi6FxuiuGsB96zis/vugN3bz5R+fEA0Ecpn5IP6xRBWpLv4CbtIKaw== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-miniloader.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-miniloader.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-miniloader.export: -------------------------------------------------------------------------------- 1 | 0eNrdmeGOoyAQx9+Fz9IIiqivcrk0VrkuWUUj9LK9xnc/1K7bba1d1FTTjyoz//nBIM54Arv0wIqSCwXCE+BxLiQIf52A5HsRpfU9dSwYCAFXLAMWEFFWX8VvB8VgxgVP8yhhJagswEXCPkCIKuuhOfsoSiZlvwNc/bYAE4orztpgmovjVhyynR4Zos5PJCXLdikXe5hF8RsXDDpapcilNs5Fra8dus6GWOCoDam7IVqoZDEv7mDcqOFOTZWRkEVeKrhjqerRQZ0ObXQSrpXaAW6PZ+fnnrGZZ/dmph8qOGYKxFzBNVPwzBWImQI1V/DMFPy7GwZyIVmp9KAbEXKdRvlfVpY8YVupovh9K/k/1myCpMyL7ZWxvcFn4w0KAox8WnsoePx+uB3bDITaxHYQJlUPQPB0ADgzAbJHIQxsB2wIhM7RNf5quvs4HXE7tpcHrYoHTgfCo4CG9vrYjOvQHiTcF1YvkLMw0Nw87igeep/HM+NB37NoOOW6l8FAxpF1AU3m8cbwXHyt+EsfM4g+nWD2c2bUWX/xYbf8IgRPJ5h7EbA9UGIMQTjrWQaMFmCYfSHwSAh3RQvhLMAw+0LcloJ/eKrj/iELuWJpjduy/LPg7xSKuqqugzg/Id+eQJXDfZkfRALqCn/JlSWvMCmzp4o3bVa8l0wV+gqTMnuqTG1sBBNejF+RPapqaODdqWlw8HSAWeN3pnY1goldANuwJvNtm/qDVYyD1oU0A9HUzkYwVyPANtj1n1y9RM7CRHB+pKndjWBiM+CqwB9up7VvhIGUI6uigUY4+lBrfhOFFz+lLJBGO5bqexd/aSygI5LtHveRS92AehTZHvGq6j9UfaPd -------------------------------------------------------------------------------- /tests/v1.0.0/bps-mining.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-mining.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-mining.export: -------------------------------------------------------------------------------- 1 | 0eNrNV12O2yAQvsqKhz7ZK+N/+yqrKCI23qXFYAGOGkU+QG/Rs/UkBVuNE8duIC+7L46AmW8+PmYYcgYH2uNOEKZAeQak4kyC8u0MJHlniJo5deowKAFRuAUeYKg1I0xxpQSp/JYwwt79WhBKweABwmr8E5Rw8B5idH3bfUfVjyu3cNh5ADNFFMETj3Fw2rO+PWChce+9PdBxqR04M5E0SJa8Jh44aWMIXxMNXhOh2Y4GoeG1wAxtMIttzHgFM7LAzKNtzHQFM7bBzG4wV1ASC5QCLpjptFCC0/0Bf6Aj4cLYVURUPVF7zNCB4n1NpPkFZYOoxN5lWWBU64/kvajMmSrR36xOC5NZy2sNEEwB2aSFNLGg+QhcX6cEqY1Mu8Fkj86r0Q43jfE66nVfg/WGT7imQnpRQbaIUv+Szx3XPveCJPeC2PBLDL+V8NmDQrrPv/QfgTAYCfx3y9FazNw5ZrGIeV1HzzAoXBnk4TaD+BkGMHCmkGxTSJ+iAF0pFMGCwletRhhalOO6KKGzKNFnigIdRIFX+x0noqdVipxVSh1U0mv1xbkhQqr9ow5O9OSEKhUyT4g4NKO2QwIpgw7+/Po9WmycxFLqr5mdc+flTSM/uMC+aZ4res8XVmbzTICJLfJ8FUbBemOHqTVWfIP1WVnhcHTZRh+FmVsfz+d6KFz6OEy3COTWqREsQj94lcLCGjneRl57R4aBezpH42tyN1WPdpz/NXiAogPW2QCmq+jl20vF9ewRCzltLodxFhdZmsEgTdJh+Atd5De2 -------------------------------------------------------------------------------- /tests/v1.0.0/bps-misc.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-misc.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-misc.export: -------------------------------------------------------------------------------- 1 | 0eNqlldtunDAQhl8lmmuIyrIclrukfYsmQgZmU0vGRrZBXSHePWNQ91hUk16tZpl//s8zgxmhEj12mksLxQgNmlrzznIloYDwqUJWK/kmwyfBKvejVaU6pS0EwOmJgeLnCIZ/SCac3p46JCG32FKGZK2LliIwkUQ2+BuKaAr+KSK/K8XOQ3FGu8ji6T0AlJZbjgvqHJxK2bcVaiK5hwygU4Yv5x+BSoR5+pwEcKLcPH9OXG1yNe4pHo9YWz5QwbBVTS8wjB2qY73z2d2c69EkWzXpNFX2dIkfe/FodYgWo0NKNnRkq5UoK/zFBq60S9LImtIVsKWxzBKF1T0uydIdeB77CNGS3Fz3lVO0n96nv9HtfejyzIdOqA9uLK+J48iEwWAFOgA2ME4tF3jWlKq3XU9p99s0cG17+ueMuWSEL26hrLJMfL3Gq6txYXFvDvHNvdxc6/uF57/q/IDJf6jx1UBdnKwMOfEacnw7ZL+tugVIVwBSH4DssB0guQPIVgAyL4DkSy/hpn2eb0f/1f2TvnFLb102SPw7vzbq3KvTl+vOfQxm7+Lqoxe4GxkJD1puagoH1GbW7/Jon+0PWZpF39KE5J9YTHnE -------------------------------------------------------------------------------- /tests/v1.0.0/bps-most-buildings.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-most-buildings.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-most-buildings.export: -------------------------------------------------------------------------------- 1 | 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 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-one-empty-blueprint.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-one-empty-blueprint.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-pipes-1.export: -------------------------------------------------------------------------------- 1 | 0eNqFj8sKgzAURH+l3HUqKmo0v1JK8XEpF2ISkthWJP/eqF1Yuuhy4MxhZoFOTmgsKQ9igQFdb8l40goE+Kc+GTLogAH1WjkQlwUc3VUrV9rPBiNGHsdIqHZc01qAEAtqwBeILFwZoPLkCff+FuabmsYObQS+mwyMdrQPWCAKznWalAzmSCZlCOxHkP8T8OYoiHO2weLwnIFsO5QfxXr3gdZtirzOCl40vOJZWpVVCG85nGKi -------------------------------------------------------------------------------- /tests/v1.0.0/bps-pipes-2.export: -------------------------------------------------------------------------------- 1 | 0eNqd0dtOwzAMBuBXqXydbuvoabnlMQChHsyw1DpR4iKqqu9O2iI0xCYBl1bsL07+CepuQOuIBfQELfrGkRUyDBruDTM2EonRjxxHtREx/V6MXSpH51fZd/gioIAawx70wwSezlx1iyWjxYCQYB86uOqXypLFWEx8dmbgFuYwyi2+g07mJwXIQkK4SWsxPvPQ1+hCwy1DgTWetpUnCFRcHnaZghF0scvCDS258Ir1PJ3VD/j4D7gM8BXq7vdUUV5Q33bMr8DpH+DTLfi4fPEah75IXUFX1dh90j6EHX3Zb+j8NlomaZGeirxIDnmWz/MHFJa6nw== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-pipes.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-pipes.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner-1.export: -------------------------------------------------------------------------------- 1 | 0eNqNkNFqwzAMRX8l6NmFJcuSzV9S2EZxE60IHMXYStko/vfZHkvD2oe9GEu6R7rSBUYcZg7il0Fo5oOzhhk96AsEFCE+hfwXsngIaPFHNc0jgm5UosPgyeUk6D+9dpviG1Mu6cqRQ5XeILNVlV2OngbDoqpAJzZ2twcFRQr6NVkoyWLgy6WJQIJTUrCZcpSbQUwAj/gJuo7qH0ievIGau9CHXWi8UqvPDfh4FzyTlyVlVnTd60q28T0H2dfNzX7vr8CaI9pbQWmr4Iw+lKM3z3Xbty9919cP3VMX4zeNTqEr 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner-2.export: -------------------------------------------------------------------------------- 1 | 0eNpljtEKgkAQRX9lmWeDDNPyLei5X5B1d4yhcVd2piDEf0+FgvDtMpw5947g0cUgmp5OKYZmYBsCJqhHEFSlcJclY1DSd9MRK6amjx6hzjNQYtwcPYpLNCw6qKFl6x5MoqaLyaweQjGX29Us3wJTBqTYz+j/lN13SgZsW+QNYH7qGXlhkrXwcMqLqjhXZZXvy2M5TR9OGlDd 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner-3.export: -------------------------------------------------------------------------------- 1 | 0eNplzMEKAjEMBNBfWXKu6Mraan+m1G6QYk0liYIs/XfXghe9DczMW2DGVEmUH0lzpXAvkQgZ/AKCqpku8snKiBIizYFrukqoVF7g1xc2A1nxBv5H2nwlAyWesfwNhm5uuzd0z8ATWdYK/P44Tm46OevGnT3Y1t440zz9 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner-4.export: -------------------------------------------------------------------------------- 1 | 0eNplzNEKgkAQheFXkbk2yLLd2pcR00MsjLOxMwUh++4p4U3eHQ4/30wjhiRq+TVYTNI9uRdBpjCTwizKQ9dtkdEpGL9qSiMonEtN0TBR+FMOm1IT93fwLqhWT6sk/FmaN7IuJ4XTtWl9e/PON0d3caV8AZCTOJ0= 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner-7.export: -------------------------------------------------------------------------------- 1 | 0eNqVk9lqwzAQRf9FzxZkdVp/SaGEIlsTM6ANaRQcgv+9ciqIayeN+6TF9+rId0ZXFl3rhYQvp4Qx4Fl1ZQGI0LRhmGvhHPg0/byyk7d62KOLA1YxMIR0YQUzQg9r8sIEZz3xGhSxvmBk/5CfRCA+96CR0LFq1RcvgTFJfettGv+BfOTK0PUCaHAKiVJQi2BjdYZsFkDq6FMtOJoAfglrLMyY7ZJ/0UIpDgoa8thwZxW8RGmQGPXclLG7B1gk0OMAASTXVsYHtOdSvh1R9v2xYBJC49ERWpO0Xdfx3Ms89zIfKXj6ng7GxpqfZg7YGqGeoh06mHbGS0sgq6aVnplOKqK8u1SsU4zC0LR2M+MZPcW0c4/npuAfv+I/DovhXhWbxJGMSqSOfxLWcGhO6Zxe/C3Vzdt6d9i9H8rDelXuy77/BuuUarI= 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner-ids-1.export: -------------------------------------------------------------------------------- 1 | 0eNp1k9tqwzAMhl9l+DqGnA99lTKKEyupqeMU221XSt59TsZmJe5uQtD3STI/6EU4dJMyVt86KyZ1ukqmFGhyeBED1go1mOUflBX2eeqFtKBd5fgiio1ADqSTou9JRITi8EUO8Rz9oV6YsycJIlYD0DjxMA1g6mEWwMzDPIC5h0UACw/LADYeVuGDqAbuhToQKg+bAJYoiDiktNXTQyEnTKsJnPSNs3ljEiZXIxpGVwc7ijfOdgeOkQPjlOsnPTPhvksDMqu9OWhYpJu6IKveW+taDga0RRqO+L+NabyTdhiHbJjiVE/dhbZiQA4OecXn24BnZHu+bccZj0IBayXQh4buwjZjivkzIlZIOBmQ8HOL48RdWxq5GEynxXUpujGg7kJPanQ3+WFZS2Y3xcK4xoVvmf7eckQka0FuW1317k55HZnWSV7lTVVWSVwW5Tx/A3+tUJY= 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner-ids-2.export: -------------------------------------------------------------------------------- 1 | 0eNp1lN1ugzAMhV9lyjWRykah7atMUxXApdZCEiWm61Tx7gutthkarkA+X+Lo+OcmWmisCeSHhtCao9PKGPDicBMBiNB0YfoHQ0jfxxNqAh8j7zdhVA/iIL6sbcHI5gyBRCbQtHAVh82Y/RHo7ZOeMz0QgF4CrzPAetWBJGU+/4k3RpBXJjjrSdag2S0FY04qkFwDtwyEq/MQwipbMnaIId95G78LqlqmXkd3ieTr9J474zRSrAgzdrPMm2DyRMIExmtQDz62hUQTwM8pXoeEzEugrenkWUWlTd20XT49wXDzH92YoqpZ96jmMwXtnqD1C2em90prCRoa8thIZzWwvuX+99Di0K+ivAw1dqvcbBaGOr51GlUG8BI4dPxssZAkWfloKwZx493QOyZxv5vBX2LlvELNiLnXUezOtGR281lFI+NM8zT78SMThBqO4e7CtIr6uFjui0AgQR9PzleV/F1VmdAqjsi9vzoMhE14yWP0EjfV5FNMnxdVsa/KKt+U23IcfwAIlaxh 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner-ids-3.export: -------------------------------------------------------------------------------- 1 | 0eNp1k91uwjAMhV9lynUrUQYt41WmCbmpW6zlp0tcGEJ99wXQhsvoVav4s+OcY59Vg9q7yGHQTN7tegPOYVDbs4rITK6Ll390THzatWQYQzp5PysHFtVWBSCTR+ocGJUpcg1+q+1izKaA3gO5f1ghMOO1t57pgPf4UsQ1hM7nR+i8uwOvAmjNQM0jsBIABCZjMJweofWkjY4ik04dY+Qc9KWjvA/+QE2S5S+nnM/pIcbnSdV8UmQfoBNv38yz9dC2suzbPBrwa0hfSRcTc3ztex9YhKUp0YIxuQHbC2A50ZR4b/F6obc1OUjvEKw0KE3aRY7noDTqOpDg+Dkp3er9MRWMR2K9F4g0J7nQBbAWaoN57BE+J2JU40em0lzgLqLB2w5Y3+B1+BQx2lvnYkfy3x3JlIEajVA9vizT6SGtSOJSiU2xqlZvVVkVi3JdjuMPbG8s+Q== 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner-ids-4.export: -------------------------------------------------------------------------------- 1 | 0eNp9k91ugzAMhd8l10QqtIWWV5mmygQD2fKDkjC1qnj3mU5bzdrtLsr5ID7H9lW0qLyLKUwqae9OowHnMIj6KiKmpF0flzO6pNPl1GmTMNDNy1U4sChq0XhtiM+Edi2eRb2Zsx8tJgQr0fXa4Z3IOeENBDmCQ3MHCgaAUpOdDCTP3tgywE3KIP0jIKgVtGPQgJDkqEdWxf63jGc1gOu5l/LBS5pCszJTMaSZAkUnrXYUm2yDNszUgYFoUKWg1R/okaG+6+LgA8pxsiPLkMe8SG+g3pm8yjh5h7Kj4kDxNhRrd2ieMNtnVT9iPGuIEW1jFl8W1EBpyZyh+//RgqHl/+iWobwNNJA0DR0h4cIQ3gA1oNUKjFzGPTGIR69o6IPupp45LXjuBhqm8MgbGkbvmFjMr5lItCmneItxWTXrW7wNu9AJLX21XkX5vYrZ8hDtBzU6+PZLpMsPWsTlVBeHfFftjlVZ5ZtyX87zJ4OKSBc= 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner-ids-5.export: -------------------------------------------------------------------------------- 1 | 0eNptkNFOwzAMRf/Fz420QteO/gpCVdZ4I8JxJsdlm6r++zIQNGg8Jco5N7LvDA7HyEllGtVHHk5kmVGgnyGhqudjut+R1et1OHhSlPzyOgPbgNBD9p0JnhEq8OzwAv1mqX5x0shozpZo5XXBj1aL5FNJJjY6iaCu/LngZBPKg9EUxoHyqe8Sz/+I20K0op4I5fpgtYUl1llZUVeiOH6gmuQprsJueasgf4xDQsLvekN0+LUmeMWQk3/rNz/1V3m9PVIWxhj29j7RZy4+Kzm9q5uueenart6023ZZbpxwmbI= 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner-ids-6.export: -------------------------------------------------------------------------------- 1 | 0eNpdj90OgjAMRt+l11sCiqC8ijEEWcUlo9OtGAjh3R34g3LXtOdrewZQWFny7NqKtaXiZkoidJAP4JFZU+2nGok198VFG0YXOscBqGwQ8vdE1lfrGQRoUthBHo3iS2jGRlqStbMtqYWJ14zDe4ue5c3Zrl+4zQ/H2uD61nY8iXlQeDT40miswjk5bw7Bf0350RRgyjOaALTkrWOc/nsExQCF/D5OsuSQpVkcpbt0HJ8CgWjG 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner-ids-7.export: -------------------------------------------------------------------------------- 1 | 0eNqNkN0KgkAQhd9lrhW0/ClfJUI2HXVhG2N3ikj23RsvbC0iutvD+c4yfBO02Izk2F4b1iPVF6OI0EI1gUNmTb2b36wN1p02jFbyYQJSZ4QKHI+E8UXxABFoavEOVeKjVy9/NxYZQ5uu2kE9lG3jBYoNdhzIzQ/S6n5YodsVarHThIENVPaF+n1C/sfi45RiNRGXrUgzoS390UtgPEv9rj5e1EeyO6ERYLbuJN/EuhCiZJdmZbYvizJNirzw/gkWt5lO 2 | -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner-ids.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-planner-ids.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-planner.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-planner.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-poles-max.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-poles-max.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-poles-max.export: -------------------------------------------------------------------------------- 1 | 0eNqd1F9rgzAQAPCvEu7Ziol/or73U4wx1B5bQKOYWCrid9/ZdmVldRLfcnD5JUdyN0FZD9j1SlvIJzihqXrVWdVqyOFYY2V7VbGurdGwqtCs1fXIvoozsqFjtmUxq1qtKY12GB88UBQbyN8mMOpTF/Wi2rFD4pTFhjJ00SxRgyc1NAe8n3FYzoCZAH3CC+R8fvcAtVVW4c27BuOHHpoSe0r4X/Kga426FTIBgVL6sQcjbUz9eJ69P6BwBLNoAwxdwWQDjFxLDu+g4K/B2BFM+QaYuJYsfsDgNShdwXQDTF3BR8niNZi5gtkGyIO9P1tEKyLf/Sxrotj9LmtiuLf9RLIiRnv7b1V07Rf5uONKR3PXhkmDJ5Fm5HWq5r/GuAd1USINXniyDGuKC83wkpaUc8beXFmR8khGmUwkD5I4medvUu//mw== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-power-entities.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-power-entities.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-power-entities.export: -------------------------------------------------------------------------------- 1 | 0eNqtld2OmzAQhV+lmmuzio35CXfta6xWkSGjxJKxkTHZjSLevQa6FBq3UGlvkGw835wZxocHlKrDxkrtoHiArIxuoXh9QCsvWqhhz90bhAKkwxoIaFEPq9ahqCPUF6kRegJSn/EDCtqTnaGus+U6lvVvBFA76SROGsbF/aS7ukTr4eHsBBrT+iCjh5QexNlLQuDuAw7ZS9IPkv4gsZlUGqn8zhMjZgsCgbO0WE2vWYAXb/PSWVO+5vEAj++tNF9Vuqkz+c01StioERrVMzZJthqYziDdVQo9yqKonAlVzj9hlIdh2Qy7onARflRXoS+hLvJ4QdqsNv/LyD3Xy7YkHnej8hVqUyM9zGRRVV3dKRHsIjv+oqYheZSuW9jIJqAtPm6VSdn+T5HNsGR7oGn8f2Wy2DO9Fzlr1KnEq7hJf9yfMZ1rOnd6spibtK4TauEy44noO/QTSU/y2iGGDg+L56XJSL/ylbz1wb7wffI/XePL5P/4GvmLe18LpSJUHmdlFTVG4b+uLIvHId4rIF4kHzf4qMj7+vgLKBY/GwJKlN58Cp/8He232fgJ3NC204XJKc/4MUszekgTP/k/ATviMWY= -------------------------------------------------------------------------------- /tests/v1.0.0/bps-power-switch.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-power-switch.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-power-switch.export: -------------------------------------------------------------------------------- 1 | 0eNrFlEtugzAQQK9SzRoiSPgkbHOMqkJ8psmoxka2CY0QB+gteraepDZpUH5V6SLKBjEwfp55mOkgZw3WkriGpAMqBFeQPHegaMMzZp/pfY2QAGmswAGeVTaqRYvSVS3pYgu9A8RLfIfE718cQK5JEx44Q7BPeVPlKE3CSFBVxpiLDAstqXBrwdDga6HMWsHtxobnLr1Z6MDeLAwWs7DvnSvi/HZNN1CrH1B8C7OYjIlGjANGFzcN0GCtg3XjnTZN5dBwSxKHe8/aWTf+Zc7yPOdWecHk8haPKC+cXJ53Xp6WgqU5brMdCWmTCpJFQzo178px5StJpdO/jiSZhweq0pk9z8HcRlWdyUxbOnx9fEJ/7cW3F4nlZeORada5o7VoqrU4/sMaExtSmoo7ahutpVqk434cdSvkGyRaNjjdbHhiw8bxnU3Hk00Hv/8+jzomy3/OzHh1nJmhb2em2Xj45MnJrHeAZTmyo5CnUcgOpRpY86WREKziKPa9KIz6/htkYhB2 -------------------------------------------------------------------------------- /tests/v1.0.0/bps-rail-signals.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-rail-signals.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-rail-signals.export: -------------------------------------------------------------------------------- 1 | 0eNq9mG2O2jAQhq+y8u+wiuOPABfpthWKAnjBUkiQ46AilAP0Fj1bT9I4AZYFezvDtvxBchw/mQ+/njEHMi8atTW6tGR6IHpRlTWZfj+QWq/KvHDP7H6ryJRoqzYkImW+cSOT62J0fKeNiC6X6geZ0jaCrVysc13erk/aWURUabXVajCjH+yzstnMlek+8AEmItuq7lZWpft2R2Pxs4jInkyFeBbdR5baqMUwnzhDr9iJ17kPqPyayj1UBqQmQarwUDkqDkkwDszDFig2D7J90ZDAaPBgNKSHmqIslkGLfZEeAy2WQYtTD3UCpI4vqR4OjVGuj4Ou+8JKUWrjYbX5IkCBcuNhuVEflqFsfqcMH44DrQzL13fUUAHEhnXgUy6VKOfD0vVGFqUyLlFnLwXKjEvU4UuhOqMnbAqqFDH2ULjFRqQrtdZURTZX63ynK+MWLbRZNNpmi6KqVXaqpK95UavoPGlUvjzPWdOotoeVA7t2HOp+jFpe1lDdjRLazlrfRk8oMAH0MS5Fzvqsauy2sdlNR7HTxja9eUebhzdGL66XqExerhR67Ve3dmWUKtFLv5EWkYL4Ivz9gySUkwQris/lZIj7v9llVy6ykIvA9kjQh7j4NtUhl2cDXrWpPdvhfV+71d3DIUa1zV07zXvTNtvc5NYZRX7//IXaKcl1GHkojMAyJR5wIPVzCCeDW+OtRta282q1tiPnnO/0HnyaAE5uCYYyODQFQwUcOgZDUzh0AoZOwFAWQ6EcnihGwVB4olgChsITxRgYCk8U42AoIlFgRQlEosCKEohEgRUlEIkCK0ogEgVWlIAniuNudafaKBmkeeX0rtuyBw4+43mow+EJ6k5B/2LLTfW6p4f88oke8uX+HrJvP91/cf+3++ShCwBnyHIrIXuNI8stCCqQ5RYElchyC4KmyHILgo6R5fYWOouG3nV68edvRIp8roqjEp+GvVVHT70kT8PurZ0y9YAZU57ySSpTGksh2/YPwBFqoA== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-rails.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-rails.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-rails.export: -------------------------------------------------------------------------------- 1 | 0eNqV1V1ugzAMAOC7+JlK5IcYuMo0TbSNukiQVhCqIcTdF2CrVuaN5DFAPmzHkUc41r2+tcY6KEcwp6vtoHwZoTMXW9XzMzfcNJRgnG4gAVs186qtTA1TAsae9QeUbHpNQFtnnNHr/mUxvNm+OerWf/DYeerbuz4fFiCB27Xze652/pF3DpInMECZKW+fTatP60u//EXyQFJIkhQEKR5k57x2eXd/xpmtaPGMIoHKYFQwEmUEmoXWM19IxfdJFUjyB0kgGBcXps9xSYLM4+LakhlBFrHnjGIfZWlcj6Pa7x3G4pp8a3LK5LENuc2eujos+u7kIiD/8Msji2+VcrJwh5HRkZVU4ZVEUiX7CMNV8V/OefSJYMCJFNGVxP1K8jS6krhfSc6iK4nTPMmWWVf+GI0J1NVR11+Dr/Pru267NZ2cSZQFKmSp8kNm+gSskGTg -------------------------------------------------------------------------------- /tests/v1.0.0/bps-signal-names.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-signal-names.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-signal-names.export: -------------------------------------------------------------------------------- 1 | 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 -------------------------------------------------------------------------------- /tests/v1.0.0/bps-speakers.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-speakers.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-speakers.export: -------------------------------------------------------------------------------- 1 | 0eNrVW9mO2jAU/Rc/hypesqH2S6pRZBgPWM2mxFAQyr/XDosYQ2eIPaG9L4Bv4vX4nCSHmwNaFBvRtLJSaH5AcllXHZr/PKBOripemJjaNwLNkVSiRAGqeGlKTVuvWl6WfFGIWdcI/ku0qA+QrF7FDs1x/xIgUSmppDi2NxT2ebUpF/rMOb601JW8KGaiEEvVyuWsqQuhu2nqTtetKzMA3d6MJt+iAO11xVD/0h3pgVa6ihzGe0DYfLTi9bovqUukf+n7Prjpn3w8k48GgMPzAFRbF/lCrPlW1q05cSnb5UaqXB97vdR+k22n8s/WU+rgsdVOcQMGI6ZUNrzlyrSOfgzHTz2YcCmUaIfZHxvPt1xjmcsub6RartH8jRedMJh0qt2UegWGJcFm7WslhgKN+scXE18t5FDZLK5eqndjaQq+X/Dlr3xbFxszN93dJbYq6oWGWy+jHpEemv5d/8415vtmXVencG/ior2Z5FqfOhw41x4idZWXvDmHzAY+rfUwxE+W+9hPKbqOr0x8t9vNhthMiZ2a6SK6t3vo2N3D8GX30E93jwe24RW0YT+GJu+Rjaxy7IH0aaQ3UA/xB7A+1b8Dto3eXayYB9OPWEGcdTR6h7LLrOOn6Ftoydv30fJ2YvzXMIBaOz6dYMc/KG6e0Mce4hQ/S5xiD2gyuGKUeIhR7C5Gf7nYPmnSqYcWZZC1CDtqkX31xRisGGUeYpRNKUbX2GA2ApzYBofAlSMceuhR9u9uju7c/p9Rfsr9P8bukkYIZEkjjpKW2qxhYCUNE3dNewB8D027BgePucPKbHQiuOhQd0k7ofO/SNozHQ3MPBQtgqxo1FHRsO2G4QQuaSIPSYumlLRrdFgyBh7b0sIp4Pu02EPUoq8XtSftysRDk1LImsRcNYnZmz6Dq0mphyalU2oSc/7/xH6wJyFgTcrc2UkxZHZGruxMbPjh+jokdGfnA+h7sDNyZqf9jEoAOzvEw6GgDDI7Y1d22g/BhMJlp4dF8QD6HuyMXdmpL5UWPAwwO6kHOxPI7ExcExTsp20C16IizIOdyZTsTJzZaT9tE8AZI8QjeYKFkNmZurLT/ouewPXCiEf+xAPoe7AzdWanbQsQwF4Y8XCFGIXMzsyVnTe2A1xXiHi4QmzS1MvMmZ12RgEF7AoRD1eIgU48xM65t7YtROHaQtTDFmKTJh++g2ccP21fiAL2haiHL8RgJ+O5ZuMBvlpSDx+ITZt+5/wSCpyr40tw3Ovzq3esAlTwhSjMe09HDDod2uqvAQOSYpawLIkTHMZR3Pd/AKjt/4s= -------------------------------------------------------------------------------- /tests/v1.0.0/bps-switch+combinator.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-switch+combinator.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-switch+combinator.export: -------------------------------------------------------------------------------- 1 | 0eNrVVttugzAM/Re/jk6EAu3Q3vYZ04S4eJ2lkKAQ1lUV/z6HTlXL6HpZ1WkvCMc5tjkHO1lDLlusDSkLyRqo0KqB5HkNDS1UJt2aXdUICZDFCjxQWeWsWi/RTJol2eINOg9IlfgBiei8o9ASCyoZXOgqJ5VZbXYCBN2LB6gsWcJNIb2xSlVb5Wg4wzZOU2VSTlBiYQ0Vk1pL5CS1bhirlUvP8Sbz6X3kwQqSuX8fda68QcBg/JtGIn3FCblapklxXurZWoNwD4PlbsHE1nQnn7NDRpIpWrK9KX52BwN3PHQzVQuDqG6dlgl4av1hVlZmSQb7d9/V9tSK4Z5of8+YHtOT9RBn63Hk08RBRoNfUSb+ltHwp9Y7/J/PuV88KDl4sXEHPc/WaJnm+Ja9E8MZ8xU0ZV9JWwncILGZmyq+g1V1Zvp8CTyCW6hXDGiVTV+NrlJSdctbrWmxu1zO6FryHg/ERQYnV3Vq2ul3ZDcmaHTxDNxoeiK9Vx0b4tJhduMqRgmPz+wg8V866MyTIrrWkRPdtIMY3V9Bkp3Ljgcyy1G6HuoPmLs9Rd/RNBvF5iKchQ+zeCb8OIq77hPRgR8b -------------------------------------------------------------------------------- /tests/v1.0.0/bps-tanks-pumps.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-tanks-pumps.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-tanks-pumps.export: -------------------------------------------------------------------------------- 1 | 0eNqVlG1uhCAQhq+ymd+4EdfvqzQbg0q3pIgGcNPNhgP0Fj1bT1LQTeu2btU/JgjzzDvvMFyh5D3tJBMa8iuwqhUK8qcrKHYShLt/+tJRyIFp2gACQRq3UrqV5EQ9TcQrGARM1PQNcmzQYmjXN90kJDBHBFRophkdUw+LSyH6pqTSMueTIuhaZYNa4TJZkJem+wjBxUbE+8g4Jb9IwWrSYUpCUDNJq/FAMMM9rOUmSwrD1aRtCqN79+e8G2hBsIYWL9LCm7rgcE8LZ2jJIg0/0BbP0NIlWpL8aJuJzzbftiAddNnJEaMw5Y5g95G0nt5oZlfYN0czlxj7iz74Y77sT4+G7Fq2vCjpCzmzVrqYismqZ7qwe/U36JlJpYulEWX251iTsuXbpyEccjQdkUQ7Ony+f4BZX3Y2qXiwAT+yYTLuDeHco9ziJau8ruX0v0m4+bKtD/btGUrPJ+8gAk5Kat0B13q1I6LeuZYou3OmUo2epzhMwiyJE+zHUWzMF256u10= -------------------------------------------------------------------------------- /tests/v1.0.0/bps-three-blueprints-1.export: -------------------------------------------------------------------------------- 1 | 0eNqVlM1qwzAQhN9lz0qwYv04epVSin+WIrBlYynFxvjdq9o5BNLD7nGlnY+Zw84GTf/AafYhgdugw9jOfkp+DOBgWZbLy8slzyDAt2OI4D42iP471P2fLq0TZoFPOOSNUA/HFCLOCWfYsyh0uICT+6cADMknjyfjGNav8BiavOnku1rANEZ/WtogQ1R51QJWcFZfdWZ3fsb2/Fe7eEPeWEhFQZYUpGa5VBSkYiE1yyUpuGG5JCEtBWlZwSsK0rCQd5ZLUnBZsGzSmKT7ubOiS9IBVTxmyfJJy65YPmlMyg3pgpfdsJj/+MwdejSteylvAX3dYP9s7WZ6lvUPzvFQ3SqprLpbY2VhtNn3Xyrm7yk= -------------------------------------------------------------------------------- /tests/v1.0.0/bps-three-blueprints-13.export: -------------------------------------------------------------------------------- 1 | 0eNqVlN1qhDAQhd9lrrPFaIyaVyml+DOUgEZJsqUqvntT3YuF7cXMXSbM+TgcmLNDN95x8dZFMDsMGHpvl2hnBwa2bbs9/dzSDAJsP7sA5n2HYL9cO/7p4rpgEtiIU9pw7XROLqCP6OFIIjfgDxh5fAhAF220eDHOYf1096lLm0a+qgUsc7CXpR0SpM6qt1LAmrbzMj0TfrAe+2tFHeKFmnOpmkItSNSG6VWRqDWTWnK9khLQXK8kakWhSslMoCZRMya14XolJSAzrlkalnRdsmBmIEnnJXMutuC6pYWguG5pWNKFScUNQXOx/7hNnXs2s3kqewFj2+H4aPlueZT7N/pwqvIErVRT6UpmutTH8Quvt/ip -------------------------------------------------------------------------------- /tests/v1.0.0/bps-three-blueprints-7.export: -------------------------------------------------------------------------------- 1 | 0eNqVlMtugzAQRf9l1k6EibHBv1JVFY9RZQkMwk5VC/HvdSCLSOliZseguUfHi7kbdOMdl9X5CHaDAUO/uiW62YOFlNLl5c8lzyDA9bMPYD82CO7bt+MjF9OCOeAiTnnDt9Mx+YBrxBX2HPID/oKV+6cA9NFFhyfjGNKXv09d3rTyPS1gmYM7lTZ4QLS5VgJS/lLNtcr0wa3YnxtqF2/QkgmtKdAbCdrwTBUJWvOgFdOU9HzNNCVBDQVqJO/5NRNKMm1I0IJnKgsmlaQqSTdlbkzXkkmluZKuypRMV8Wk0lxJd2UU01Uzqf+45o49mti+lLuAse1wfLZ6tzzL/AfXcKTKWiqjGqONLHSl9/0Pr131fQ== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-three-blueprints.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-three-blueprints.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-tiles.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-tiles.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-tiles.export: -------------------------------------------------------------------------------- 1 | 0eNqtlk1ugzAQha+CZlkZib8A5iptFwScxKpjkO1WTRF3r4E2iRJMDGQH9nvzPZmBoYEt+yS1oFxB1kBJZCForWjFIQPXkarixNkKWny8cdcpKl4IoghygpdD/pOL8rzUbQuyo5xc1pxO9794owcEVF9LyF4bkHTPc9YFUKeaaDJV5KgVPD92d30Kt08BrfbxknxD5rfoofNMu9gCC9tfZnfEHrbvCBRlZEheV5IOp9WA3nUxgpOO5qXtTfo6Vwfo0CYHtnaksxnpbEZ8z7g6DLMeW+o3M+tvZtYP7+sPDXh+pi4jOzXpxQu8wQpusJzrPcYKuj9MevECr7+C66/gjjzekXfWaMPzbNEyWrSMFptptu0Qm8m2JZL1KZL1KbB9CmOvYPsY5l71nhDE956RZOQLw3Je7ihjk3psqQ9n1g+n6utZ2U/W7Oo3A+n9LdHDF46VVM4wSxF8ESH7skHqR0mEkzjxvXgTt+0vI+nSmA== -------------------------------------------------------------------------------- /tests/v1.0.0/bps-train-colors.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-train-colors.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-train-colors.export: -------------------------------------------------------------------------------- 1 | 0eNrNlUuP2yAQgP8K4mxHPIxfP6BSe6h6qXrYRBW2WQeVgIVxtlHk/16w02x31+k6l6onBDPzzQNmOMNKDaKzUjtYnmEj+trKzkmjYQltCVIagbYEmGQRqEpAGANxDCzXrSjBAyr9wW6rt/qzcaLc6hh8463RoDbK2B5wK4A2DvTCOV4pAZ6k24Mj11IpDr5+3ASLD2qQDXia7LhuvJHzYmFPoOY6WO/5UVyIGxhBWRvdw/LhDHvZaq5C3O7UCR+wdOLgNTQ/hJ2zXOq4d6aDozfTjfgJSzxG7xoqU5uDcfIo/jAk4y6CQjvppJjdT5vTdz0cKmE9+WrfB8/t3sV+UR7bmV7OJT1DT0qKCJ5gmRce3kgr6llGQmSvmGQppjdARp6BxkrP4LMUbQiL4FS6oGqnkyRDLM8JzVCS4YIlNGEZojhotkEhKXJEC4KZX3CS0pRQlKR55uXVlCX/q1aomK9mHxzqoVaC2/hxEL7adFzIkK6tGsOrq5asZtLVTLaayVYz06WnegtY4FfAyEdyuWf4yWN68EXUP+A/v++FxLJrYjW3rYmn5l7IDG1mPyE9+r88Xn30MRh7Ck4fpXLCzu3+e4Bcc+tkFwbEVUJuSuhNCc5fiGJn4taaQTcvlIoVSgTdVPKDq+JhmqCly8rvnFvTTb3zsos7u3oNE6M72/otdDfPJk94/vUiqHgVxtPchNMXdGmsy6fjVY7+EcyMHCdZUmRphlHK0nH8BeWdPdo= -------------------------------------------------------------------------------- /tests/v1.0.0/bps-train-schedules.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-train-schedules.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-train-schedules.export: -------------------------------------------------------------------------------- 1 | 0eNrVl0tu2zAQhq8SzFoGZL0oGeii6K6rLgsUhkFLdEKEpgSSchsEPkBv0bP1JB2Krl9hKzFIWgTeWBbnm3/I4cz4EdaiZ53i0sDiEXjdSg2LL4+g+a2kwv5mHjoGC+CGbSECSbf2ySjK5UybtoN9BFw27Bss5vto1FC0dbttDd+xM8Nkv4yAScMNZ8798PCwkv12zRSSj/Z1r3asmaF7gdCu1WjTSusOOWUSwQMsigTRDVesdu8Kq+uKmEwjVrGXmHqI6ZGo7e7c3pk/MEnlmPklk3iY2VRmlXqZcw8znxY5KRyxHCcWE/fySPQwyOTdywcKSX2U0pdnT4UQh8C8gFZxZFD3Fg/bZqu262RfC0bVbNMzYTPU462afDrkL5rnse9WPWVUvxkRujsIho9oqG8+sfoefOh56K7mXoVJaKB+TBqqhngxWagaPyaftO3EXSxSXV6D7PwQPtxRWbOb92LTqsZ7DkVo5JVXMgmN3I8pgypAmV2F7kNWQSXgGpn7CnQcWE9LMgEa1kiqeLxEJ2Gd5BqZ+JBpYNm/Dj21/VTXd6zpxaGhnuqhfS7P3rt2f0xmdPKVcrPCSaAZXDl7tO6oYqtDU28Vrjtr8Li8xxEigqOZVbjhSpvVyETQ8W6YBezoYaidQ7IkOvijBh0t4B3sbURo1rWKKozYqJ4N08ab131WwYMjqLmqe/5q8n9+/wFDAfnfEpaXW3ZZb4N3zfCtHQoMr++1rYZxPBIjlxQv1g6v6MksHbXa9ELAyBpMDISOuX/1PJ1y0BvR8yZIxmBxNvn3a8VrK+BfZ92OK9NTcZLiVsw+v4CSjmrN5C1Tq04x/GZgsoFszclo+XJV4TK/n5Pc8du5cVQ2z7pyS/tx4z7+ePoTHIGgazvxu6nw5tRFI9gxpV3TLucZySpSkHlc5MV+/wtjyieu -------------------------------------------------------------------------------- /tests/v1.0.0/bps-train-stops.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-train-stops.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-train-stops.export: -------------------------------------------------------------------------------- 1 | 0eNrVVstu1DAU/ZXBK5BSGjvOU2KBaHdIINoVqIqcxDO18NiR7bRUVT6Av+Db+BLsZGY0jwxN1AHEKrF9fc895x5bfgQFb2itmDAgewSslEKD7Msj0GwhCHdz5qGmIAPM0CXwgCBLNzKKMHGmjaxB6wEmKvoNZLC98QAVhhlG+yzd4CEXzbKgygYM7fdALbXdIoVDs2nOYg88gCwMbeaKKVr2a5EHtCH9P+B0bizyAQIahRA8DaBQGHoLiGKviAKboZRcKre9p7EAmf8ap4kfpAiG9gNxFEQo8HGUxKEHCreOcOyHSYKC2McxTEMc4DC2ocgGkN8maAeoBaOopceo2c4aJXle0Ftyx3oudk7YkNzInMsF04aVuaDmXqqvIDOqoV6PlTusmlb5gSvumDKNndnU1kecXQNLYUvO96v0s3c9pJ19eXl+MavonDTcvBrqJR7nFrjqZrxLGW/DV/JeDEGEIyFgD5HucGrqoZTRFI9HcLdotGNBtrgdNHk8qeponBc2BrCL1SbPnClt8icug5rZybZLa6t3NwlGbrSsiSLGpQc/v/9YRfxjw0kx+2jLffEGo0HTJZPaN07aZ1EqN/Vrtwd2dxCttq9XZkdpe7MrwBUV1bW8dtBDPNNxPIMpPEumyoaZP+ugFQYVpOA0r5h237V5tCXtzNVxAtmccP1cS43UP9nS2I2hv9+Qy67i84tVxQM9gf6opkw61sOKKEqqfK7kcj1/grM32qh7QsF9oT7Z4jrf2qNrbKQe1GrcWyI8kVZrTf66XNZHe3qhIb2u+iKOHneIJrwe/pvjfsTGJ+/Y50kdOzD0W84/1P0+90LutMi2Ht4e4KSgfN2b2ao3d1Tp/lWQQBzjNI5i6Edh1La/ACH4+r8= -------------------------------------------------------------------------------- /tests/v1.0.0/bps-trains-1.export: -------------------------------------------------------------------------------- 1 | 0eNqlle9ugyAUxd/lfqZG5J/4KkuzWMs6EsUGsFnT+O7D0qxLRzfMPhn08rvnngPxArt+UkerjYfmArobjYPm5QJOH0zbL+/8+aigAe3VAAhMOyyrfuzGYfT6pGBGoM1efUCD5y0CZbz2WkXKdXF+NdOwUzYUpPYjOI4ubBnN0i1gCENwhkbwglAiWOCPVgdSG2tKdNXilmozdb1q7eZtUkErmWf0o2f11dN52+rDu9+ER/+8LUtRSJ5yGRGikCWv/qucZiuXvyhnuRR6m18E2XttVRe/iQSTr/VUpJSJtfMlKXVWMrQqOKWM4OqmqC4IwywVUnGtWROUzLaYxObyb4txuRb6kBtJQfHa4GRqXlytTS6NIdkj4qRvyRFp3nmoiyX8O/bhDKw9Ajj/monkLFUKmn3PqMyHZl87hp9At9GbQLj/PBD07W6x55vtLrw9KevithpTQaXgApec8Xn+BFvtISU= -------------------------------------------------------------------------------- /tests/v1.0.0/bps-trains-2.export: -------------------------------------------------------------------------------- 1 | 0eNqVldFugyAUht/lXNtGVER8lWVZqFJHomAQu5nGdx/WrutWXOHK4Dnn4/DzA2c4tCPvtZAGyjOISskBypczDKKRrF3+mannUIIwvIMIJOuWUasq1SkjThzmCISs+SeUaI6eFlZMN2r3wRol7yoTj8pjO4r6oTL1qGTaiLblenqozubXCLg0wgi+rvsymN7k2B24tktyrTiCXg22xKLslEsT2R7hPMERTFAW2PKVFpbE1px4n+ClzT/s5MYejGaieTc7+2kd+PQHXAvNqzWWOJipNxN7MzNvJvFmYqchXMLmBbm2Sl26Llt5sr+Unpaao2gN1+tWfrvyNlUv+sWut0iyGUk3I6j4FdoZtWu0GmX9K4l6JCXxZpI15YEtDolnh3Z5qG/o8/0gob7xYBahvvFgUud14PINpunVODT1PJAoDlT2Qn7SMUKB0npBk0BtvaDp5o3578GkxFffLFRf4tE1DtXXB5qH6vsAtWf48gqVdy9sBCd7Oa0JBcpIRklOUJzjfJ6/AFVAePI= -------------------------------------------------------------------------------- /tests/v1.0.0/bps-trains.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-trains.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-turrets.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.0.0/bps-turrets.dat -------------------------------------------------------------------------------- /tests/v1.0.0/bps-turrets.export: -------------------------------------------------------------------------------- 1 | 0eNqV1e1ugyAUBuBbWc5v2iggftxKsyy2PetIKDaI20zjvQ/aNGlXpPjLgJ5HeAU8w1YNeDJSW2jOIHed7qHZnKGXB90q32fHE0ID0uIRCOj26FuHQa/sYAxamAhIvcdfaPKJvCxUbY/muZQmlH4qd7VfpvsJCSxBaI2VSqEZn8v59E4AtZVW4jWBS2P80MNxi8ZNLjR3AqeudyWd9u90zIpzAqN7uhSTH9A/hCYiNIawRCSLITwNYVUMKcKfdT6VKgsxIpmhMaZMZrIYU6Uyt2zCTB1dt5GI+LoIeXm2FMzXxY1063wvDe6u92mIzxfyrL4b7wPPQzxdyou50YsQz+b3eCAZdrNrOhM2X+RlD97rrIslOivn9WDUYpHO53Xhz8TLCdrc/SaI2xdbVJ5X6s3DTu5d9zea/jrnKuclr0tR5pko3MnxBxvwGrI= -------------------------------------------------------------------------------- /tests/v1.1.19/Makefile: -------------------------------------------------------------------------------- 1 | .DELETE_ON_ERROR: 2 | 3 | # basics 4 | dats = $(wildcard *.dat) 5 | exports = $(wildcard *.export) 6 | 7 | # derived from basic 8 | diffs = $(exports:.export=.diff) 9 | extrs = $(exports:.export=.extr) 10 | 11 | .PHONY: all json out extr diff clean 12 | 13 | all: json out diff diff-report.txt 14 | 15 | json: $(exports:.export=.json) 16 | 17 | out: $(dats:.dat=.out) 18 | 19 | clean: 20 | -rm -f *.out *.err 21 | -rm -f *.json 22 | -rm -f *.diff *.extr 23 | -rm -f diff-report.txt 24 | 25 | # decode *.export to json 26 | 27 | %.json: %.export 28 | ../../decode-export-string < $< | jq -S . > $@ 29 | 30 | # decode *.dat to *.out / *.err 31 | 32 | %.out %.err: %.dat 33 | ../../decode -d $< > $*.out 2> $*.err 34 | 35 | # extract each top-level object from *.out into *-$N.extr with $N = (index_number+1) 36 | 37 | extr: $(extrs) 38 | 39 | # libraries with only one object 40 | %.extr: %.out 41 | jq '.blueprint_book.blueprints[0] | del(.index)' < $*.out > $*.extr 42 | 43 | # libraries with multiple objects 44 | %.extr: 45 | ../tools/split-lib $< 46 | 47 | # compare each *.json to *.extr 48 | 49 | diff: $(diffs) 50 | 51 | 52 | %.diff: %.json %.extr 53 | diff $*.json $*.extr > $@ 2>&1 54 | 55 | # merge all *.diff into one report 56 | diff-report.txt: $(diffs) 57 | for d in $(sort $(diffs)); do echo "#### $$d"; cat $$d; done > $@ 2>&1 58 | 59 | # --------------------- 60 | # dependencies between libraries with multiple objects to their extracted objects 61 | # --------------------- 62 | -------------------------------------------------------------------------------- /tests/v1.1.19/bps-1.0.0-tests.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.19/bps-1.0.0-tests.dat -------------------------------------------------------------------------------- /tests/v1.1.19/bps-1.0.0-tests.export: -------------------------------------------------------------------------------- 1 | 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 -------------------------------------------------------------------------------- /tests/v1.1.19/bps-1.1.19-tests.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.19/bps-1.1.19-tests.dat -------------------------------------------------------------------------------- /tests/v1.1.19/bps-1.1.19-tests.export: -------------------------------------------------------------------------------- 1 | 0 2 | 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 203 | -------------------------------------------------------------------------------- /tests/v1.1.19/bps-infinity-entities.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.19/bps-infinity-entities.dat -------------------------------------------------------------------------------- /tests/v1.1.19/bps-infinity-entities.export: -------------------------------------------------------------------------------- 1 | 0eNrFl+GOojAQgF/l0t91Qysg+iqXjakwuk2gkFJ21zO8+7Wgxtsd1xFv7/wHtfN9M+1AObBN2UFjtXFsdWA6r03LVj8PrNU7o8pwz+0bYCumHVSMM6OqcAUl5M7qfAYG7G4/8/PBblUOrOdMmwLe2Ur0/GacF1AOnSz7Z87AOO00jEbDxX5tumoD1kc/x9Bmq40fmuUv0Dofu6lbP602gepDzZKnhLO9n5JkT8mAGCesW3BOm10b/mihql9h3fmx0utAsQ6mfmiryhb6kMsHA0k3iB434Gy8PRbjCG60rylned2F9RNRxFlVF2HEl7WqB5fzajxjSczpSYj/kUQJipBFTM7i368EvKvclfubOSTkHORDOTjbods5JTQ30lujSTr3HptuuwW7bvUvGEpw+iGwxSSYuIA19ZtnNbYuunz8zwUxOo13rdrBx6FrnphoNkU0nVaU5RRWdsEqtIVjMeRdZBFNQYdZGDu+jy0msSXOTu9jI8/wYydffYmkqW86LNacHEv8EetKAx9jvSlfgxADbO6J43bmzPeyv6NcZ8N18vmRiSrGVMXoWw2HNxMqmFAF5V8WnKefHtioYEoVTO4QzG1XwKzW5Q1JSV3nBdUye7CMwz65utJFgetlVD0Rfaff+IrEFZfXjqhfPRmWg+Pt1kTOkhGdJ77iJdjxCQMKMjC6gzd2NoKTZJyk4s59iuDmZFxGzi7sZgQVk1GCXMnTzvTfQMP30uriM42zUm2gvGieH+fvJM5e/bl0PABkIl4s5SJOlzKNsr7/DSp9mRk= -------------------------------------------------------------------------------- /tests/v1.1.19/bps-miniloader-book-rmmod.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.19/bps-miniloader-book-rmmod.dat -------------------------------------------------------------------------------- /tests/v1.1.19/bps-miniloader-book-rmmod.export: -------------------------------------------------------------------------------- 1 | 0eNrtWttuozAQ/ZWVnyHCNtf8yqpCJLipVTAIm6rdin9fcwkhCTjhohB1963AzByf8Rk7Y/cb7KKcpBllwt8lyTvYfp/ecLD93Xksv9F9wurXnB5YEJXvxFdKwBZQQWKgARbE5dP+LRdEjymjURKEJAOFBigLySfYwkK76U4+04xw3h8AFS8aIExQQUk9mOrhy2d5vJOWW9jGCTgn8S6i7KDHwf6NMqJjiZImXDonrMSXAU28sTTwJR0dc2NJoIzsaTpA4woNtWgiCxhPk0zoOxKJHhzY4jgVTkglUm1g9kTG90dG4yKbV5m+iYDHIVjjEcxxCPZ4BGscgjMewR6H4A4WjE4ZJ5mQRlcg1qWMkg+SZTQkPhfB/t3n9A+piiDMktS/cDY2qHHeQM9D0HXKCCndv+fXtpWhLl0MDJFV9BDwHk5AX5gBNCZRUJQDGkkINqOr4pXshum0jGvbXj7wqfjo8wmhSYRUtT5VcS21G4I70eolhFcmtDQfcxIfZ5iPPY4PPFeRWnLtYqBQnPVchGbzsafw6fxacdfeZqDzcAaL7zOT9vrOD7v1J8F7OIOlJwEZihZDRQI/zzQguAKHxScCTSRhPtFE4BU4LD4R163gK43kuO/kYl1wqZ3rtvzY8LcIadlVl4NovlhnX3SR6IcsyVkIyg5/zZm1fkJSFpeKPS8r9o+UivMTkrK4VOYebHgzFsbTyG51NY5nD/Q0yHs4gUXHj+eeangzTwGMkT2ZaxiOq+xiMHwuSgswmnuy4S11EGCMqPojr15GeGVG+vKU5p5ueDMPAy4afPVxWr0iKCRnPRUbfRQdualV10TbzqWUBqJgRyL5rnNLowE5Il7XuAtNx0MO8hCG2D7dIhlldkJSXmiJLK/I+GkUMFam6RtwIgRlB17+3eSwuzXfkcMuTmOuNIQdw9eAC3VY1LFWdx+NAy7TJ2gkZ4lE9eT5cRKSahl81L3ewH3ebceLhHS88dzrRLN4KVphnQtCPwqiT2W/zm3vEl2Vozw9ZDLAkNriIE2PMnvNkrjDqhYiuKOEJaRIFJ4DPl3N3sCegjoo6+5s3IZWhVHiqwrlNAS3Wmj+V0RdEY1a1aXQGN1VA6hvHder/z7ojd18+ccnRAOBXGY+iH8sUUWqi78U7ApP -------------------------------------------------------------------------------- /tests/v1.1.19/train-schedules-v1.1.46.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.19/train-schedules-v1.1.46.dat -------------------------------------------------------------------------------- /tests/v1.1.19/train-schedules-v1.1.46.export: -------------------------------------------------------------------------------- 1 | 0eNrVl0tu2zAQhq8SzFoGZEkWJe+K7rrqskBhGLREJ0RoSuDDbRD4AL1Fz9aTdGi6foWpxCBNW3hjWZxv/iE5Dz/CSljWKy4NzB+BN53UMP/8CJrfSircb+ahZzAHbtgGEpB0456MolxOtOl62CXAZcu+wny6SwYNRdd0m87wLTszzHaLBJg03HDm3e8fHpbSblZMIflo31i1Ze0E3QuE9p1Gm046d8ipsgQeYF5miG65Yo1/VzpdV8RsHLFOg8Q8QMyPRO125/bOPMMktWfOLpkkwCzGMus8yJwGmLNxkZPSE6thYjlyL4/EAIOM3r3ZnkLyEKUK3bOnQohH4L2ATnFkUP8WD9vdVu3WSdsIRtVkbZlwNzTgrR59OuQ3mqdpKKueMupfjATdHQTDBzTUNx9Zcw8h9DR2V2dBhVlsoGFMHquGBDFFrJowZjZq24lPLFJfpkFxfgjv76hs2M07se5UGzyHMjbyOiiZxEYexlRRFaAqrkIPIeuoEnCNnIUKdBpZTysyAhrXSOp0uERncZ3kGpmFkHlk2b8OPXf9VDd3rLXi0FBP9dA9V2fvfbs/XmZ08oVys8RJoN278vZo3VPFloem3ilcd9bgcbnFESKBo5lTuOZKm+XARNDzfj8LuNHDUDeHFFly8EcNOprDj2/fYediQsO+U1RhzEZZtp83QrUwOoaGq8byPxxA8vclLC637P897MuaGx2G4Rs3GBje3GtXEdN04HS4pJhcW0zTk1k+aLW2QsDAGowSoUPu32jbB8IRlrdRMvYWZ9O/XSneOAFvnS9broyl4iTFr5h8egUlPdWayVumlr1i+M3AaAPZmZPR4vXq2eX9fsnlTq/l/LsZR2X7opRbuI8f+fHH0x/hBARduanfT4Y3p06awJYp7Rt3NS1InZGirLMyxf80PwE1lStM -------------------------------------------------------------------------------- /tests/v1.1.51/Makefile: -------------------------------------------------------------------------------- 1 | .DELETE_ON_ERROR: 2 | 3 | # basics 4 | dats = $(wildcard *.dat) 5 | exports = $(wildcard *.export) 6 | 7 | # derived from basic 8 | diffs = $(exports:.export=.diff) 9 | extrs = $(exports:.export=.extr) 10 | 11 | .PHONY: all json out extr diff clean 12 | 13 | all: json out diff diff-report.txt 14 | 15 | json: $(exports:.export=.json) 16 | 17 | out: $(dats:.dat=.out) 18 | 19 | clean: 20 | -rm -f *.out *.err 21 | -rm -f *.json 22 | -rm -f *.diff *.extr 23 | -rm -f diff-report.txt 24 | 25 | # decode *.export to json 26 | 27 | %.json: %.export 28 | ../../decode-export-string < $< | jq -S . > $@ 29 | 30 | # decode *.dat to *.out / *.err 31 | 32 | %.out %.err: %.dat 33 | ../../decode -d $< > $*.out 2> $*.err 34 | 35 | # extract each top-level object from *.out into *-$N.extr with $N = (index_number+1) 36 | 37 | extr: $(extrs) 38 | 39 | # libraries with only one object 40 | %.extr: %.out 41 | jq '.blueprint_book.blueprints[0] | del(.index)' < $*.out > $*.extr 42 | 43 | # libraries with multiple objects 44 | %.extr: 45 | ../tools/split-lib $< 46 | 47 | # compare each *.json to *.extr 48 | 49 | diff: $(diffs) 50 | 51 | 52 | %.diff: %.json %.extr 53 | diff $*.json $*.extr > $@ 2>&1 54 | 55 | # merge all *.diff into one report 56 | diff-report.txt: $(diffs) 57 | for d in $(sort $(diffs)); do echo "#### $$d"; cat $$d; done > $@ 2>&1 58 | 59 | # --------------------- 60 | # dependencies between libraries with multiple objects to their extracted objects 61 | # --------------------- 62 | -------------------------------------------------------------------------------- /tests/v1.1.51/bps-1.0.0-tests.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.51/bps-1.0.0-tests.dat -------------------------------------------------------------------------------- /tests/v1.1.51/bps-1.0.0-tests.export: -------------------------------------------------------------------------------- 1 | 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 -------------------------------------------------------------------------------- /tests/v1.1.51/bps-1.1.19-tests.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.51/bps-1.1.19-tests.dat -------------------------------------------------------------------------------- /tests/v1.1.51/bps-1.1.19-tests.export: -------------------------------------------------------------------------------- 1 | 0 2 | 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 203 | -------------------------------------------------------------------------------- /tests/v1.1.51/bps-infinity-entities.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.51/bps-infinity-entities.dat -------------------------------------------------------------------------------- /tests/v1.1.51/bps-infinity-entities.export: -------------------------------------------------------------------------------- 1 | 0eNrFl+GOojAQgF/l0t9101ZB5FUuG1JhdJtAIaXsLmd492tBjbc7rhVv7/wHtfN9M+1AOZBt2UFjlLYkPRCV17ol6c8DadVey9Lfs30DJCXKQkUo0bLyV1BCbo3KF6DB7PuFmw9mJ3MgAyVKF/BOUj7Qm3FeQFp0shieKQFtlVUwGY0Xfaa7agvGRT/HUHqntBta5C/QWhe7qVs3rdae6kItoqeIkt5NiZKnaERME7IWrFV63/o/GqjqV8g6N1Y6HSgyb+qGdrJsYfC5fDAQ4QbscQNKpttTMY7gRrmaUpLXnV8/zhglVV34EVfWqh5dzqvxjCWxDE+C/48kSpABWayCs/j3KwHvMrdlfzOHKDgH8VAO1nTodo4DmhvprckkXjqPbbfbgcla9QvGEpx+CGw9C8YvYE395liNqYsun/5zQWSn8a6Ve/g4dM0TE03miMbzirKZw0ouWIUycCyGuIvM2Ry0n4WxV/ex+Sy2wNnxfWzkGX7s5KsvkTh2TYfFWgbH4n/EutLAx1hv0tXAxwCTO+K0nSlxvezuSNsZfx19fmSiiqtQRfathuObCRWMQgXFXxZcxp8e2KhgHCoY3SGYm66ARa3KG5IidJ3XoZbJg2Uc98nVlS4KXC8J1ePsO/2mVySuuLl2RP3qybAZHW+3JnKWZOE8/hUvwo5PGJAHA9kdvKmzEZwIxolQ3LlPEdwyGJcEZ+d3M4JaBaN4cCVPO9N9A43fS+nFZxolpdxCedE8P87fSZS8unPpdABI+Gq9EeuICSY2Yhh+AyoXmQo= -------------------------------------------------------------------------------- /tests/v1.1.51/bps-miniloader-book-rmmod.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.51/bps-miniloader-book-rmmod.dat -------------------------------------------------------------------------------- /tests/v1.1.51/bps-miniloader-book-rmmod.export: -------------------------------------------------------------------------------- 1 | 0 2 | eJztmt2OoyAUx+/3KTZcayP42b7KZmJsy3TJKBqhk+k2fffFj6pFtDit02Zn76aBc/784HCA4xzB 3 | Ot7jLCeUh+s0fQOrI4g2nLzjkNAt/gAry2i7MLD6dWx/Fp0x5YQTXLWUPw4h3SdrnIMVNACNEgxW 4 | IGIMJ+uY0J2ZRJvfhGLTBgbIUiaMU1o4ElKOvXANcBCGvrNwTwbI8YZkhf3m955jMyGUxGm0Fb5P 5 | xhFsiWivzB1D1kaNNs8jyrI05+Yax1yhChtVX6he9Wzre0bTPDuNZ/yR5Zgx86qCPU3Bna7gTFPw 6 | piu40xT86QpeXyFPs1DqZi1Q3W0Bl0sEA7+IQUk9aNTlmDQJZTjnopMB0nec52SLQ8ajzVvIyB9c 7 | boeMbN72feFS1RT6lg1RISp1cBUhqgAwtQiWz0LQLrLYrEoeWPsrLQu4Pg205sBppq9SVvCMbjwt 8 | HnMACD4hkDMA1ARcg6YAQrMFnNUNcxnoWloZTQFjPPYT8nhqHni57kMh58xA1CSDwYjzbwca4HGf 9 | heezpwz0HpGkOzeh4OZjBvpPjKBH8JCzvnNpvMMiPOSw10TQIkBW77r3NQz2HZcBwaeG0GNAD2Jw 10 | 7rkQ9lND6DGI0/qVxGKc1aO7fqe3IZYVb+ZCom5xL1pMnpq7PN3TLTi99GajcvxFk+Lec2Xd7zUr 11 | epPi/SuT4t0zVPzvOitdX/KkzHfZsRb+0lO/adrb2lIn1sfGP99NZ9r4r1YBLK03mT1HXUNoBZbl 12 | B2OvGPt2pAGiOQobNxNdKwRYI4nEnq+y0eEaLQXoE5l6SPMVN25AGigGSE9yddTNUds4ZwSNUsBn 13 | aYbSwhyljak44tQjm5TKpycjOxrFhc3ACMXA+KH8nkM4TsCpc8QihXn/ht5zUIyk+GvV+ShlgDha 14 | Y+EIXBiKGWFVDgug4y+Rj5bIhrYncM9fusp1wgUZz/flYoVZHFFaTPzxLHTZwTx3UKn+vOwr+jDM 15 | OaE71nw5O4SKm4hO6u/MXZtXr3Rs09VrxPg1t3pPpa8KBi1DW2EooY5YO5+OQU5isdVwXO3wMEm3 16 | oh2dFEHnWsgSgdcGHbzk3me7XKgo4q5uGQ+4upMUad9+fZIoy8577DVPkxHsbhat/VQbFXQShWhK 17 | lewj1gWIpD1N1ZFUB/ewjrS+caMfSPrjBRR5CC9ju+F/ElEcZGb5/xjKbV63DM/nj78AQwpH 18 | -------------------------------------------------------------------------------- /tests/v1.1.51/train-schedules-v1.1.46.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.51/train-schedules-v1.1.46.dat -------------------------------------------------------------------------------- /tests/v1.1.51/train-schedules-v1.1.46.export: -------------------------------------------------------------------------------- 1 | 0eNrVl82O2jAQx19lNecghYTghFvVW089VqoQMonZtdY4kT9oEeIB+hZ9tj5Jx5jytd4mXm23rbgQ4vnNf2zPBztYCss6xaWB2Q543UoNs8870PxeUuF+M9uOwQy4YWtIQNK1ezKKcjnSpu1gnwCXDfsKs/E+6TUUbd2uW8M37MIw288TYNJww5l3f3jYLqRdL5lC8sm+tmrDmhG6FwjtWo02rXTukFNmCWxhNs0Q3XDFav9u6nTdELNhxCoNEvMAMT8Rtdud+wfzDJNUnllcM0mAORnKrPIgcxxgFsMiJ1NPLPuJ04F7eSIGGGTw7hUHCslDlDJ0z54KIR6B9wJaxZFB/Vs8bHdbtVsnbS0YVaOVZcLd0IC3avDpkN9oHqehrHrKqH4xEnR3FAwf0FDffWT1I4TQ49hdLYIKs9hAw5g8Vg0JYiaxasKYYtC2E59YpLpOg8nlIbx/oLJmd+/EqlVN8BymsZFXQckkNvIwpoyqAOXkJvQQsooqAbfIIlSg08h6WpIB0LhGUqX9JTqL6yS3yCyEzCPL/m3oueunun5gjRXHhnquh+65vHjv2/3pMqOTL5SbBU4CzcGVt0frjiq2ODb1VuG6iwaPyy2OEAmczJzCFVfaLHomgo53h1nAjR6GujlkkiVHf9Sgoxn8+PYd9i4mNOxaRRXGbJRlh3kjVAujY6i5qi3/wwEkf1/C/HrL/t/Dvq650WEYvnaDgeH1o3YVMU17TodLism1wTQ9m+W9VisrBPSswSgR2uf+jba9JxxheRMl42BxMf3bpeK1E/DW+bLhylgqzlL8itGnV1DSUa2ZvGdq0SmG3wwMNpCtORvNX6+eXd/vl1zu9FbOv5txVDYvSrm5+/iRH388/xFOQNClm/r9ZHh37qQJbJjSvnGX4wmpMlKkWZpV+P/gJzUvKz0= -------------------------------------------------------------------------------- /tests/v1.1.51/zero-train-id.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.51/zero-train-id.dat -------------------------------------------------------------------------------- /tests/v1.1.51/zero-train-id.export: -------------------------------------------------------------------------------- 1 | 0eNpNUU1PwzAM/SuWz2Wig1HoceLCjcNOfAilqbcGpUkVu4NS9b/jdmziFsfP7/k9j1j5nrrkgmA5Yk1sk+vExYAl7hrHcOkz2BjEuMBgQJI+gG1Dde8Jql4gxNMvr2DX0B/i6VHRieCzZ4EfSnH1FhZa2u/JClgTQhSoCJKqxLq3VMM+xVa5kxHbLNTbZ56RM4xF9+vOoEAm+QGM90BBnDhi+HLSRB1SL5Li4MIBRPc5Ca4wQ6c+GMvXEdkdgvGzcRk6UsdOqFVEMO1c+WhjG8UdCScdCzV9Y5lP7xmexRaWpRg+Qt9WlBRwmee+YjFLmBl2kd0p1xGV5qrIcMCymGa6Rbb8d4oMvalIN8MXzQx25yy1caTEC836Pr8tHtbFJt/kN3fX0/QLrxafhg== -------------------------------------------------------------------------------- /tests/v1.1.62/Makefile: -------------------------------------------------------------------------------- 1 | .DELETE_ON_ERROR: 2 | 3 | # basics 4 | dats = $(wildcard *.dat) 5 | exports = $(wildcard *.export) 6 | 7 | # derived from basic 8 | diffs = $(exports:.export=.diff) 9 | extrs = $(exports:.export=.extr) 10 | 11 | .PHONY: all json out extr diff clean 12 | 13 | all: json out diff diff-report.txt 14 | 15 | json: $(exports:.export=.json) 16 | 17 | out: $(dats:.dat=.out) 18 | 19 | clean: 20 | -rm -f *.out *.err 21 | -rm -f *.json 22 | -rm -f *.diff *.extr 23 | -rm -f diff-report.txt 24 | 25 | # decode *.export to json 26 | 27 | %.json: %.export 28 | ../../decode-export-string < $< | jq -S . > $@ 29 | 30 | # decode *.dat to *.out / *.err 31 | 32 | %.out %.err: %.dat 33 | ../../decode -d $< > $*.out 2> $*.err 34 | 35 | # extract each top-level object from *.out into *-$N.extr with $N = (index_number+1) 36 | 37 | extr: $(extrs) 38 | 39 | # libraries with only one object 40 | %.extr: %.out 41 | jq '.blueprint_book.blueprints[0] | del(.index)' < $*.out > $*.extr 42 | 43 | # libraries with multiple objects 44 | %.extr: 45 | ../tools/split-lib $< 46 | 47 | # compare each *.json to *.extr 48 | 49 | diff: $(diffs) 50 | 51 | 52 | %.diff: %.json %.extr 53 | diff $*.json $*.extr > $@ 2>&1 54 | 55 | # merge all *.diff into one report 56 | diff-report.txt: $(diffs) 57 | for d in $(sort $(diffs)); do echo "#### $$d"; cat $$d; done > $@ 2>&1 58 | 59 | # --------------------- 60 | # dependencies between libraries with multiple objects to their extracted objects 61 | # --------------------- 62 | -------------------------------------------------------------------------------- /tests/v1.1.62/bps-1.0.0-tests.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.62/bps-1.0.0-tests.dat -------------------------------------------------------------------------------- /tests/v1.1.62/bps-1.0.0-tests.export: -------------------------------------------------------------------------------- 1 | 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 -------------------------------------------------------------------------------- /tests/v1.1.62/bps-1.1.19-tests.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.62/bps-1.1.19-tests.dat -------------------------------------------------------------------------------- /tests/v1.1.62/bps-1.1.19-tests.export: -------------------------------------------------------------------------------- 1 | 0 2 | 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 203 | -------------------------------------------------------------------------------- /tests/v1.1.62/bps-infinity-entities.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.62/bps-infinity-entities.dat -------------------------------------------------------------------------------- /tests/v1.1.62/bps-infinity-entities.export: -------------------------------------------------------------------------------- 1 | 0eNrFl+GOojAQgF/l0t91QxEQfZXLxlQY3CZQSCm7yxne/aagxtut64i3d/6D2vm+mXagHNiu7KAxSlu2OTCV1bplm58H1qq9lqW7Z/sG2IYpCxXjTMvKXUEJmTUqW4AGs+8XOB9MITNgA2dK5/DONmLgN+O8gLTeyeHwzBloq6yCyWi86Le6q3ZgMPo5htKF0ji0yF6gtRi7qVucVmtHxVCL+CnmrMcpcfoUj4hpwrYFa5Xet+6PBqr6FbYdjpWoA/nWmeJQIcsWBpfLB4OQbhA8bsDZdHsqxhHcKKwpZ1ndufUTQcBZVeduBMta1aPLeTWefUks6UmI/5FECZKQRUTO4t+vBLzLzJb9zRxicg7hQzlY03m3c0Jobk9vTSbJEj12XVGA2bbqF4wlOP08sNUsmLiANfUbshpT5102/eeCGJzGu1bu4ePQNU+faDpHNJlXlPUcVnrBypWBYzHCu8gimIN2s3zs6D62mMUO/ezkPrbnGX7s5KsvkSTBpvPFWpJjiT9iXWngY6w3iTVwMcBkSJy2M2fYy3hH2s646/jzI9OrGFEVg281HN9MXsGYKhj+ZcFl8umB7RVMqILxHYKZ6XJY1Kq8IRlS13lFtUwfLOO4T66udJ779VKqngi+0296RfoV19eOqF89Gdaj4+3W9JwlAzpPfMWLfccnH1CQgcEdvKmzPbiQjAupuHOfenBLMi4lZ+d2swcVkVGCXMnTzsRvoPF7aXPxmcZZKXdQXjTPj/N3EmeveC6dDgCpiFbrcBWvIiHS9TD8BipvmRk= -------------------------------------------------------------------------------- /tests/v1.1.62/bps-miniloader-book-rmmod.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.62/bps-miniloader-book-rmmod.dat -------------------------------------------------------------------------------- /tests/v1.1.62/bps-miniloader-book-rmmod.export: -------------------------------------------------------------------------------- 1 | 0eNrtWttuozAQ/ZWVnyHC5p5fWVWIBDe1CjbCpmq34t/XXEJIAk64KETdfSswM8dnfMbO2P0GuzjHaUaoCHaMvYPt9+kNB9vfncfyG9kzWr/m5EDDuHwnvlIMtoAInAAN0DApn/ZvucB6QiiJWRjhDBQaIDTCn2ALC+2mO/5MM8x5fwBUvGgAU0EEwfVgqoevgObJTlpuYRsn5Bwnu5jQg56E+zdCsW5KlJRx6cxoiS8DWubG1sCXdHStjS2BMrwn6QCNKzTUookspDxlmdB3OBY9OLDFcSuciEik2sDqiWzeHxmNi2xdZfomgjkOwR6PYI1DcMYj2OMQ3PEIzjgEb7BgdEI5zoQ0ugKxL2XEPnCWkQgHXIT794CTP7gqgihjaXDhbGxQ47yBvo+g55YRUrJ/z69tK0NduhgmRHbRQ8B/OAF9YQbQmERBUQ5oJCHYjK6KV7IbptMyrm17+cCn4qPPJ4QmEVLV+lTFtdRuCO5Eq5eQuTKhpflYk/i4w3yccXzguYrUkmsXA4Xi7OciNJuPM4VP59eKt/Y2A92HM1h8n5m013d+2K0/Cf7DGSw9CchQtBgqEubzTAOCK3BYfCLQRBLWE02EuQKHxSfiuhV8JbEc951c7AsutXPdlh8b/hYhLbvqchDNF/vsiy6YfshYTiNQdvhrzqz9E5KyuFSceVlxfqRU3J+QlMWlMvdgw5+xMJ5GdqurcX1noKdB/sMJLDp+c+6phj/zFMAY2ZN5huF6yi7GhM9FaQFGc082/KUOAowRVX/k1cvIXJmRvjyluacb/szDgIsGX32cVq8ICsnZT8VGH0VHbmrVNdG2cymlgTjc4Vi+69zSaECOiNc17kHL9ZFruxaEnn+6RTLK7ES4vNASWV6RCdI4pLRM0zfgWAhCD7z8u8lhd2u+I4ddnMZcaQg7hq8hF+qwqGOt7j4aB7NMnyCxnCUc15MXJCzC1TL4qHu9gfu8244XCel4m3OvE63ipWiFdS4I/SiIPpX9Ore9S3RVjvL0kMkAQ2pLwjQ9yuw1Y0mHVS1EcEcJS0jBFJ4DPl3N3sCegjoo6+5s3IZWhVHiqwrlNASvWmj+V0RdEY1a1aXQGN1VA6hvHder/z7ojd18+ccnRAOhXGY+cHAsUUWqi7+IQgpz -------------------------------------------------------------------------------- /tests/v1.1.62/krastorio-trains-bug.README: -------------------------------------------------------------------------------- 1 | This is a testcase for Github issue #12. 2 | 3 | Recreation: 4 | 5 | - activate Krastorio 2 6 | - Create blueprint that contains a cargo wagon / fluid wagon / train locomotive 7 | and add it to the blueprint library 8 | - exit game 9 | 10 | It seems that the strange flag `ep_v1_1_51_4_flag` can have strange values. 11 | Details are still not clear. 12 | -------------------------------------------------------------------------------- /tests/v1.1.62/krastorio-trains-bug.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.62/krastorio-trains-bug.dat -------------------------------------------------------------------------------- /tests/v1.1.62/krastorio-trains-bug.export: -------------------------------------------------------------------------------- 1 | 0eNqVmN2O2jAQhV+l8nVSxR7n9xm2T1CtqgDerNVgI8dhixDvXoewdIFJ8dwRkvlyxjozzHBkq35UO6eNZ82R6bU1A2t+HtmgO9P203f+sFOsYdqrLUuYabfTVW/Xdmu93it2Spg2G/WHNfyUPA1ct66z6UfbWfMlUkREvvWj3jxEQkRk67zue+UOD9Hy9JowZbz2Ws15ny8Ov8y4XSkXUvonfHR7tUldq/tA3tkhxARWeOekP0vYgTUpl4G90U6t55vFpO4OKSKRFY4EBAlX5OADrXv3C1BeXqD8FloiUBkLBY5DOQLN45LnckZWz4lFHBGuRIRRXhlTcHqxE6Lqez5TwodbZRKhVli1PELhjMwCzzodEO18MzhqcvEwPTbYPlj/bVTB43mGZVBHO2B+XQoYhWdXzEQx6eDtDmHkn4wkvO6il/0INcUwKI87XYDP0xXhdDGQiHZk/r8kgXpWHMVIqhockxPV4JSCKAanlEQt+PlWRC04pUZ/MpaUlA/lM5lJm334xrrwgBn7HmvGGTFl1JmCE1PGKYKopUQpQNSCUyRRS41ScqIWnFKgM8BigUjECxiW6naOFo2g2n0BQ+3gHC0byKhqcAynqkEdDdSOvYChdmyOehqoHXsBky8Olkt6BI+zJBTURNGCgZKaKI6piGoE6myoiWpwjKR2aoE6W1Jb9QKG2qsF6mwJUQMXXBm3Q+fN+NV6r9vh24s23Ts2h0mq/Rck00Z4yJ4PyrIgzt+iiJm/ZUlaDe6VYgUqK+Ise1aKgWriygbwXF2ekbZVKJ4vgTknbav3SIEhBXGxvE8dpqX9vOE3X/69SFjfrqYFif12bSgjp216rqnV2IWbe+WGWVLFZVmLsiiFFKI4nf4Cw1GXIw== -------------------------------------------------------------------------------- /tests/v1.1.62/train-schedules-v1.1.46.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.62/train-schedules-v1.1.46.dat -------------------------------------------------------------------------------- /tests/v1.1.62/train-schedules-v1.1.46.export: -------------------------------------------------------------------------------- 1 | 0eNrVl8uO2jAUhl8FeR2kXHGSXdVdV11WqhAyiWGsMU7kCy1CPEDfos/WJ+kxptzG08Sj6bQVG0J8vvMf2+fCHi25ob1kQqN6j1jTCYXqz3uk2FoQbn/Tu56iGjFNNyhCgmzsk5aEianSXY8OEWKipV9RnRyiQUPeNd2m02xLrwzTwzxCVGimGXXujw+7hTCbJZVAPts3Rm5pOwX3HKB9p8CmE9YdcMo0QjtUz1JAt0zSxr2bWV13xHQcsYq9xMxDzM5EZXdn/aCfYeLKMYtbJvYw87HMKvMyEw+zGBc5njliOUycjdzLM9HDwKN3rzhScOajlL579lQIdgi4F6iTDBjEvYXDtrdV2XXCNJwSOV0Zyu0N9XirRp8O/o3mJPZl1VNG9YsRgbuTYPQBDNXkI20ekQ+dhO5q4VWYhgbqx2SharAXk4eq8WOKUduOXWLh6jYN8utDeP9AREMn7/iqk633HGahkVdeyTg0cj+mDKoAZX4Xug9ZBZWAe2ThK9BxYD0t8QhoWCOp4uESnYZ1kntk6kNmgWX/PvTM9lPVPNDW8FNDvdRD+1xevXft/nyZwckXwvQCJoH26MrZg3VPJF2cmnonYd1Vg4flBkaICJ3NrMIVk0ovBiaCnvXHWcCOHprYOSRPo5M/osFRjX58+44ONiYw7DtJJMSspaHHecNXC4NjaJhsDPvDAUR/X8L8dsv+38O+rbnBYWi2sYOBZs2jshUxjgdOhwkCybWFNL2YZYNWK8M5GlgDUQJ0yP0bbftAONywNkjG0eJq+jdLyRor4K3zZcukNoRfpLgV00+voKQnSlGxpnLRSwrfNBptIDp9MZq/Xj27vd8vudzxvZx/N+OIaF+UcnP7cSM//Hj5IxwhTpZ26neT4eTSSSO0pVK5xl0mOa5SXOA8SUoYtH4CNYcrTA== -------------------------------------------------------------------------------- /tests/v1.1.62/zero-train-id.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asheiduk/factorio-blueprint-decoder/d6cd1562f52e715721ce448be977e2d4fc71600a/tests/v1.1.62/zero-train-id.dat -------------------------------------------------------------------------------- /tests/v1.1.62/zero-train-id.export: -------------------------------------------------------------------------------- 1 | 0eNpNUU1vgzAM/SuWz6wSVSdajtMuu+3AaR+aQnBLppCg2HRjiP8+Q9dqtzh+fs/vecLaD9QnFwTLCRtim1wvLgYssWodw63PYGMQ4wKDAUn6ALYtNYMnqAeBEC+/vIGqpT/E06OiE8HnwAI/lOLmLay0dDySFbAmhChQEyRVic1gqYFjip1yJyO2XakfnnlBLjAW3a+/ggKZ5Ecw3gMFceKI4ctJG3VIvUiKowsnEN3nIrjBDJ36YCxfJ2R3CsYvxmXsSR07oU4RwXRL5aONXRR3Jpx1LDT0jWU+v2d4FVtZ1mL8CENXU1LAbZ6HmsWsYWbYR3aXXCdUmrsiwxHLYl7oVtny3yky9KYm3QxfNDOorllq40yJV5rtPt8Vh21xX+zyfH+Y51+vWJ+U -------------------------------------------------------------------------------- /tools/apply-tags-to-blueprint.lua: -------------------------------------------------------------------------------- 1 | function create_tags() 2 | return { 3 | none = nil, 4 | bool = true, 5 | number = 42.42, 6 | string = "foobar", 7 | list = { 8 | nil, 9 | true, 10 | 42.42, 11 | "foobar" 12 | }, 13 | dictionary = { 14 | none = nil, 15 | bool = true, 16 | number = 42.42, 17 | string = "foobar", 18 | } 19 | } 20 | end 21 | 22 | function apply_tags(player) 23 | local stack = player.cursor_stack 24 | if stack == nil or not stack.is_blueprint then 25 | player.print("Hold the blueprint to be modified in your hand!") 26 | return 27 | end 28 | for i = 1, stack.get_blueprint_entity_count() do 29 | stack.set_blueprint_entity_tags(i, create_tags()) 30 | end 31 | player.print("Modified blueprint!") 32 | end 33 | 34 | apply_tags(game.player) 35 | 36 | 37 | --[[ seems that the BP must be in the inventory but not in the library? (1.1.19) ]] 38 | -------------------------------------------------------------------------------- /tools/decode-mod-settings: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | import json 4 | import struct 5 | import sys 6 | 7 | 8 | 9 | class ParseError(Exception): 10 | pass 11 | 12 | ################################################################ 13 | # 14 | # primitives 15 | 16 | class PrimitiveStream: 17 | 18 | def __init__(self, f): 19 | self._f = f 20 | 21 | def _read(self, format): 22 | return struct.unpack( 23 | format, 24 | self._f.read(struct.calcsize(format)))[0] 25 | 26 | def tell(self): 27 | return self._f.tell() 28 | 29 | def bytes(self, length): 30 | return self._f.read(length) 31 | 32 | def bool(self): 33 | data = self.u8() 34 | if data != 0x00 and data != 0x01: 35 | position = self.tell() - 1 36 | raise ParseError(f"invalid boolean value {data:#04x} at position {position} ({position:#x})") 37 | return data == 0x01 38 | 39 | def u8(self): 40 | return self._read("